fix: guide agent to a real public link instead of dead-ending on apps__create_app
Diagnosed via production session logs (RDS + shared goose PG) that some
users' page-generation attempts drifted: the agent used apps__create_app
(no public URL) then fabricated a placeholder domain when asked for a
link, and separately burned many turns scraping unreachable/anti-bot
search engines. Steer both flows toward the already-working path instead
of banning tools outright:
- apps__create_app is fine for designing/previewing a page, but the
agent must still write_file the result into public/*.html per the
static-page-publish skill and return a link built from the real
public URL template (no invented domains)
- for real-world lookups, load_skill('web') first and prefer
Bing/360 over retrying google.com or hammering anti-bot sites
Also folds in generate_docx guidance for Word-download attachments
(sandbox-fs tool) that landed in the same files during this pass.
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@ description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报
|
||||
|
||||
## 规则摘要
|
||||
|
||||
0. 可以用 `apps__create_app` 设计/预览页面,但那一步只是在 Apps 窗口内生成交互式 App,**还没有公网链接**;只要用户要「可访问的链接」「分享出去」,最后必须把内容 `write_file` 落到 `public/*.html`,按下方「回复格式」给出真实链接,不要停在 App 阶段就回复链接
|
||||
1. 只在**当前用户工作区**(会话 `working_dir`)内读写与搜索,从 `.` 开始
|
||||
2. 查找 CSV/文档时只用相对路径(如 `oa/report.csv`),**禁止**去上级目录、MindSpace 根目录、其它用户目录或主机路径搜索
|
||||
3. 读 CSV/列目录:用工作区内的 `shell`(`ls oa/`、`cat file.csv`)或 `tree`;**禁止**用公网 URL 代替
|
||||
@@ -30,12 +31,13 @@ description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报
|
||||
3. 在 `<head>` 写入 **mindspace-cover**(必须与页面主题一致,见下文)
|
||||
4. 保存后服务端**立即**生成 `<文件名>.thumbnail.svg`(Agent 交互阶段即生效)
|
||||
5. 按「回复格式」返回**可点击**公网链接
|
||||
6. 若页面含下载按钮,确认 `public/<同名>.docx`(或链接中的相对路径)已落盘
|
||||
6. 若页面含下载按钮,必须用 `generate_docx`(sandbox-fs 工具)生成 `public/<同名>.docx`,再确认链接目标已落盘
|
||||
|
||||
## 伴生下载文件(必须)
|
||||
|
||||
- `<a href="report.docx" download>` 等相对下载链接,目标文件必须已在 HTML 同目录或子目录
|
||||
- 推荐 `public/report.html` + `public/report.docx`;**禁止** HTML 链接名与磁盘文件名不一致
|
||||
- 生成 Word 时必须调用 sandbox-fs 的 `generate_docx`;**禁止**用 `computercontroller` / shell 生成生产下载文件作为交付依据
|
||||
- 从 `oa/` 引用文档时,先 **复制** 到 `public/` 再写链接
|
||||
- 交付前 `list_dir public/` 自检;可跑 `npm run check:mindspace-public-links`
|
||||
|
||||
@@ -51,6 +53,7 @@ description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报
|
||||
|
||||
- **必须**使用 `[页面标题](完整URL)`,不要只给裸 URL 或「点这里」
|
||||
- 页面写入 `public/` 时,URL **必须**包含 `/public/` 路径段(与磁盘路径一致)
|
||||
- 域名严格按本节模板拼接(`https://goo.tkmind.cn/MindSpace/<用户ID>/public/...`);拿不到真实前缀时,先给相对路径 `public/xxx.html` 说明,不要自己猜一个域名
|
||||
- 标题用页面真实主题名
|
||||
- 可同时给出相对路径(如 `public/malaysia-travel-guide.html`)
|
||||
- 说明:保存即生效,无需重启
|
||||
|
||||
@@ -26,3 +26,9 @@ description: 网页抓取与搜索技能:访问网页、查阅文档、搜索
|
||||
2. `extract_text: true`(默认)获取可读文本,`false` 获取原始 HTML
|
||||
3. 不要访问不明来源的链接,向用户确认后再访问
|
||||
4. 官方文档优先于第三方博客
|
||||
|
||||
## 国内网络环境(建议)
|
||||
|
||||
- 生产环境访问不了 `google.com`,优先用本技能的 `web_search`(DuckDuckGo)/`fetch_url`,避免直接拿 `computercontroller__web_scrape` 抓 Google 页面来回重试
|
||||
- `web_search` 连续几次没有可用结果时,改用 `fetch_url` 直接访问 `https://cn.bing.com/search?q=...` 或 `https://www.so.com/s?q=...` 这类国内可达的搜索入口
|
||||
- 百度/知乎/大众点评等站点有反爬拦截,遇到跳转或空结果就换个搜索源,不必在同一个来源上反复硬抓
|
||||
|
||||
+10
-6
@@ -128,7 +128,7 @@ description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报
|
||||
|
||||
1. **唯一可写目录**:\`${publishDir}\`
|
||||
2. **禁止**使用绝对路径(如 \`/Users/...\`、\`../\` 跳出目录)
|
||||
3. **允许**在本目录内使用 \`write_file\`、\`edit_file\`、\`read_file\`、\`list_dir\`;**禁止**访问此目录外的路径(含 \`../\`、其它用户目录、项目根目录;系统会在 OS 层拦截越界访问)
|
||||
3. **允许**在本目录内使用 \`write_file\`、\`edit_file\`、\`read_file\`、\`list_dir\`、\`generate_docx\`;**禁止**访问此目录外的路径(含 \`../\`、其它用户目录、项目根目录;系统会在 OS 层拦截越界访问)
|
||||
4. **禁止**子 Agent、扩展管理、修改工作区外文件
|
||||
5. 页面默认写入 \`public/\` 分区,使用相对路径如 \`public/report.html\`、\`public/assets/chart.png\`
|
||||
6. 生成 HTML 后,向用户提供可访问链接,格式:
|
||||
@@ -142,12 +142,13 @@ description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报
|
||||
3. 在 \`<head>\` 写入 **mindspace-cover** 元数据(见下文,必须与页面主题一致)
|
||||
4. 页面内资源使用**相对路径**(\`assets/foo.png\`),不要用磁盘绝对路径
|
||||
5. 保存 HTML 后,服务端会**立即**生成同名预览图 \`<文件名>.thumbnail.svg\`(Agent 交互阶段即生效,无需等用户保存到「我的空间」)
|
||||
6. 下载按钮的相对链接目标(如 \`public/report.docx\`)必须已落盘且 basename 与 HTML 一致
|
||||
6. 下载按钮的相对链接目标(如 \`public/report.docx\`)必须通过 \`generate_docx\` 落盘,且 basename 与 HTML 一致
|
||||
7. 完成后按「回复格式」返回可点击链接
|
||||
|
||||
## 伴生下载文件(必须)
|
||||
|
||||
- 相对路径下载链接(\`.docx\` / \`.pdf\` 等)必须在 HTML 同目录或子目录真实存在
|
||||
- Word 文档必须用 sandbox-fs 的 \`generate_docx\` 生成;禁止用 \`computercontroller\` / shell 生成生产下载文件作为交付依据
|
||||
- 改 HTML 文件名时同步 rename/copy 伴生文件;从 \`oa/\` 复制到 \`public/\` 再链接
|
||||
- 可跑 \`node scripts/check-mindspace-public-links.mjs\` 自检
|
||||
|
||||
@@ -284,9 +285,10 @@ export function buildSandboxSessionConstraints({ baseConstraints, developerTools
|
||||
'## 生成 / 发布 HTML 页面',
|
||||
'- 你有 write_file/edit_file 工具:**必须由你**写入 `public/xxx.html`(或工作区根目录 `.html`)',
|
||||
'- 开始前执行 load_skill → `static-page-publish`,按技能说明写入 mindspace-cover 元数据',
|
||||
'- 用 `apps__create_app` 设计页面时,最后仍要按 `static-page-publish` skill 把内容 write_file 落到 `public/`,才有公网链接',
|
||||
'- **禁止**让用户手动保存到 public 或说无法生成页面(除非 write_file 调用失败)',
|
||||
'- 完成后回复 `[页面标题](公网URL)` 可点击链接;写入 `public/` 时 URL 必须含 `/public/` 路径段',
|
||||
'- 下载附件:相对链接文件必须已在 `public/` 落盘,basename 与 HTML 一致',
|
||||
'- 完成后回复 `[页面标题](公网URL)` 可点击链接;写入 `public/` 时 URL 必须含 `/public/` 路径段;按本会话给出的公网前缀模板拼接真实地址',
|
||||
'- 下载附件:Word 用 `generate_docx` 写入 `public/*.docx`,相对链接文件必须已在 `public/` 落盘,basename 与 HTML 一致',
|
||||
);
|
||||
return lines.join('\n');
|
||||
}
|
||||
@@ -305,9 +307,11 @@ export function buildPublishConstraints({ slug, username, publicBaseUrl, publish
|
||||
'- **禁止**:访问 `assets/` 内部路径、其它用户目录、主机绝对路径;禁止用公网 URL 列目录或读 CSV',
|
||||
'- **路径规则**:只用相对路径;禁止 `../`;工作区外的路径会被系统拒绝(OS 层强制,非软约束)',
|
||||
'- **生成页面(必须亲自完成)**:先 `load_skill` → `static-page-publish`,再用 `write_file`/`edit_file` 写入 `public/页面.html`',
|
||||
'- 若先用 `apps__create_app` 设计/预览,最后仍要把内容 write_file 落到 `public/页面.html` 才有公网链接',
|
||||
'- **禁止**让用户「手动保存到 public 目录」或说「我无法生成页面」——除非 write_file 已失败并报告错误',
|
||||
'- 完成后给出 Markdown 可点击公网链接 `[标题](URL)`;写入 `public/页面.html` 时 URL 为 `.../MindSpace/<用户ID>/public/页面.html`',
|
||||
'- 下载链接(如 `report.docx`)必须与 HTML 同目录且文件名一致',
|
||||
'- 完成后给出 Markdown 可点击公网链接 `[标题](URL)`;写入 `public/页面.html` 时 URL 为 `.../MindSpace/<用户ID>/public/页面.html`,按模板拼真实地址',
|
||||
'- **需要查实时/真实世界信息时**:先 `load_skill` → `web`,优先 `web_search`/`fetch_url`;国内 google.com 不可达,多次无果时改走 Bing/360 等可达搜索源',
|
||||
'- 下载链接(如 `report.docx`)必须与 HTML 同目录且文件名一致;Word 必须用 sandbox-fs `generate_docx` 生成,不要用 `computercontroller` / shell 作为交付依据',
|
||||
`- 发布技能:\`${PUBLISH_SKILL_NAME}\`(生成页面前应 load_skill)`,
|
||||
].join('\n');
|
||||
}
|
||||
|
||||
@@ -100,8 +100,11 @@ ${zoneLines.join('\n')}
|
||||
|
||||
- 用户要网页 / HTML / 报告 / 分享链接时:**你必须亲自完成**,不要推给用户手动操作
|
||||
- 先 \`load_skill\` → \`static-page-publish\`,再使用 \`write_file\` 创建 \`public/页面名.html\`(需要调整已有页面时用 \`edit_file\`)
|
||||
- 页面需要 Word / docx 下载时,必须用 sandbox-fs 的 \`generate_docx\` 写入 \`public/*.docx\`,不要用 shell/computercontroller 生成生产下载文件
|
||||
- 若用 \`apps__create_app\` 设计/预览页面:这一步只是在 Apps 窗口内创建交互式 App,**还没有公网链接**;必须紧接着按 \`static-page-publish\` skill 把最终内容 \`write_file\` 落到 \`public/*.html\`,才能给出真实可访问的链接
|
||||
- 写入 \`<head>\` 的 **mindspace-cover** 元数据(详见 \`.agents/skills/static-page-publish/SKILL.md\`)
|
||||
- 保存后立即给出 Markdown 可点击公网链接 \`[标题](URL)\`;写入 \`public/页面.html\` 时 URL 为 \`.../MindSpace/<用户ID>/public/页面.html\`
|
||||
- 给链接时按 \`static-page-publish\` skill 里的公网前缀模板拼接真实地址,不确定域名时用相对路径 \`public/xxx.html\` 说明,不要猜一个域名充数
|
||||
- **禁止**回复「请手动保存到 public 目录」「我无法生成页面」——除非 \`write_file\` / \`edit_file\` 调用已失败并说明具体错误
|
||||
|
||||
## 工作区文件与 OA 界面
|
||||
@@ -126,6 +129,8 @@ export function buildUserSpaceConstraints({ username, workspaceRoot, publicBaseU
|
||||
'- **禁止**:访问其它用户目录、MindSpace 根目录、data/mindspace 内部路径、主机绝对路径',
|
||||
'- **禁止**用公网 URL 列目录或读 CSV;生成 HTML 写入 `public/` 并给出公网链接',
|
||||
'- **生成页面**:先 `load_skill` → `static-page-publish`,再用 `write_file` / `edit_file` 写入 `public/*.html`;**禁止**让用户手动保存文件',
|
||||
'- 用 `apps__create_app` 设计页面时,最后一步仍要按 `static-page-publish` skill 把内容 `write_file` 落到 `public/*.html`,再给出下方前缀拼出的真实链接,不要停在 App 阶段就回复链接',
|
||||
'- **需要查实时/真实世界信息(如机构名单、新闻、行情)时**:先 `load_skill` → `web`,优先用其 `web_search`/`fetch_url`;国内环境下 google.com 不可达,`web_search` 多次无果时改走 Bing/360 等可达搜索源,避免对反爬站点反复硬抓',
|
||||
publicBaseUrl && slug
|
||||
? `- 公网 HTML 前缀(公开区):\`${publicBaseUrl}/${PUBLISH_ROOT_DIR}/${slug}/public/\`(写入 \`public/页面.html\` 时分享链接必须含 \`public/\`)`
|
||||
: null,
|
||||
|
||||
Reference in New Issue
Block a user