Add MindSpace page live edit, chat skills, and H5 deploy tooling.
Introduce page edit sessions with draft preview and patch API, chat skill picker, user memory profile, h5ApiBase resolution, voice WAV transport, and scripts for 105/g2 deployment and Plaza local dev. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+19
-10
@@ -6,6 +6,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
export const PUBLISH_SKILL_NAME = 'static-page-publish';
|
||||
export const PUBLISH_ROOT_DIR = 'MindSpace';
|
||||
export const PUBLIC_ZONE_DIR = 'public';
|
||||
export const PUBLISH_SKILL_DIR = path.join(__dirname, 'skills', PUBLISH_SKILL_NAME);
|
||||
export const WORKSPACE_HINTS_FILENAME = '.tkmindhints';
|
||||
export const LEGACY_WORKSPACE_HINTS_FILENAME = '.goosehints';
|
||||
@@ -100,9 +101,16 @@ export function buildPublicUrl(publicBaseUrl, publishKey, filename = '') {
|
||||
return `${base}/${clean.split('/').map(encodeURIComponent).join('/')}`;
|
||||
}
|
||||
|
||||
/** Public-zone HTML pages live under \`public/\`; share URLs must include that segment. */
|
||||
export function buildPublicZonePageUrl(publicBaseUrl, publishKey, filename) {
|
||||
const clean = String(filename ?? '').replace(/^\/+/, '');
|
||||
const relative = clean.startsWith(`${PUBLIC_ZONE_DIR}/`) ? clean : `${PUBLIC_ZONE_DIR}/${clean}`;
|
||||
return buildPublicUrl(publicBaseUrl, publishKey, relative);
|
||||
}
|
||||
|
||||
export function renderPublishSkill({ slug, username, publicBaseUrl, publishDir, displayName }) {
|
||||
const addressName = resolveUserAddressName({ displayName, username, slug });
|
||||
const exampleUrl = buildPublicUrl(publicBaseUrl, slug, 'report.html');
|
||||
const exampleUrl = buildPublicZonePageUrl(publicBaseUrl, slug, 'report.html');
|
||||
return `---
|
||||
name: ${PUBLISH_SKILL_NAME}
|
||||
description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报告与页面(TKMind H5)
|
||||
@@ -118,14 +126,15 @@ description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报
|
||||
2. **禁止**使用绝对路径(如 \`/Users/...\`、\`../\` 跳出目录)
|
||||
3. **允许**在本目录内使用 \`write\`、\`edit\`、\`shell\`、\`tree\`;**禁止**访问此目录外的路径(含 \`../\`、其它用户目录、项目根目录)
|
||||
4. **禁止**子 Agent、扩展管理、修改工作区外文件
|
||||
5. 优先使用**相对路径**,例如 \`report.html\`、\`assets/chart.png\`
|
||||
5. 页面默认写入 \`public/\` 分区,使用相对路径如 \`public/report.html\`、\`public/assets/chart.png\`
|
||||
6. 生成 HTML 后,向用户提供可访问链接,格式:
|
||||
\`${publicBaseUrl}/${PUBLISH_ROOT_DIR}/${slug}/<文件名>\`
|
||||
\`${publicBaseUrl}/${PUBLISH_ROOT_DIR}/${slug}/public/<文件名>\`
|
||||
(写入 \`public/页面.html\` 时 URL **必须**含 \`public/\`;仅当 HTML 直接写在 workspace 根目录时才省略)
|
||||
|
||||
## 推荐工作流
|
||||
|
||||
1. 确认需求(标题、章节、是否要图表/样式)
|
||||
2. 使用 \`write\` 创建 \`.html\`(可含内联 CSS;需要时在同目录建 \`assets/\`)
|
||||
2. 使用 \`write\` 创建 \`public/页面.html\`(可含内联 CSS;需要时在 \`public/assets/\` 或工作区 \`assets/\` 放资源)
|
||||
3. 在 \`<head>\` 写入 **mindspace-cover** 元数据(见下文,必须与页面主题一致)
|
||||
4. 页面内资源使用**相对路径**(\`assets/foo.png\`),不要用磁盘绝对路径
|
||||
5. 保存 HTML 后,服务端会**立即**生成同名预览图 \`<文件名>.thumbnail.svg\`(Agent 交互阶段即生效,无需等用户保存到「我的空间」)
|
||||
@@ -142,7 +151,7 @@ description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报
|
||||
要求:
|
||||
- **必须**使用 \`[标题](URL)\` 格式,不要只给裸 URL
|
||||
- 标题用页面真实主题(不要用「点击这里」「链接」)
|
||||
- 可同时给出本地相对路径(如 \`pilates-618.html\`)与公网链接
|
||||
- 可同时给出本地相对路径(如 \`public/pilates-618.html\`)与公网链接
|
||||
- 说明:静态文件保存即生效,**无需重启**
|
||||
|
||||
## 信息流预览图(必须)
|
||||
@@ -196,8 +205,8 @@ description: 在专属 MindSpace 目录生成可公开访问的静态 HTML 报
|
||||
用户:「写一份越南旅游指南网页」
|
||||
|
||||
正确做法:
|
||||
- \`write\` → \`vietnam-guide.html\`(内容完整)
|
||||
- 回复链接:\`${buildPublicUrl(publicBaseUrl, slug, 'vietnam-guide.html')}\`
|
||||
- \`write\` → \`public/vietnam-guide.html\`(内容完整)
|
||||
- 回复链接:\`${buildPublicZonePageUrl(publicBaseUrl, slug, 'vietnam-guide.html')}\`
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -256,7 +265,7 @@ export function buildSandboxSessionConstraints({ baseConstraints, developerTools
|
||||
'- 你有 write/edit 工具:**必须由你**写入 `public/xxx.html`(或工作区根目录 `.html`)',
|
||||
'- 开始前执行 load_skill → `static-page-publish`,按技能说明写入 mindspace-cover 元数据',
|
||||
'- **禁止**让用户手动保存到 public 或说无法生成页面(除非 write 调用失败)',
|
||||
'- 完成后回复 `[页面标题](公网URL)` 可点击链接',
|
||||
'- 完成后回复 `[页面标题](公网URL)` 可点击链接;写入 `public/` 时 URL 必须含 `/public/` 路径段',
|
||||
);
|
||||
return lines.join('\n');
|
||||
}
|
||||
@@ -270,13 +279,13 @@ export function buildPublishConstraints({ slug, username, publicBaseUrl, publish
|
||||
'- 禁止称 goose / Goose / goosed 或「Rust goose 项目」',
|
||||
`- 当前用户 **${addressName}** 的 Agent 工作区(唯一文件根目录):\`${publishDir}\``,
|
||||
'- 用户上传落在分区子目录:`oa/`、`private/`、`public/`(均在上述工作区内)',
|
||||
`- 公网 HTML 前缀(仅分享用):\`${buildPublicUrl(publicBaseUrl, slug)}\``,
|
||||
`- 公网 HTML 前缀(公开区页面):\`${buildPublicUrl(publicBaseUrl, slug, `${PUBLIC_ZONE_DIR}/`)}\``,
|
||||
'- **查找文件**:在工作区内对应分区搜索(如 `oa/2025-12-06T13-34_export.csv`),不要搜其它用户目录或公网 URL',
|
||||
'- **禁止**:访问 `assets/` 内部路径、其它用户目录、主机绝对路径;禁止用公网 URL 列目录或读 CSV',
|
||||
'- **路径规则**:只用相对路径;禁止 `../`;越界 shell/tree/write/edit 会被拒绝',
|
||||
'- **生成页面(必须亲自完成)**:先 `load_skill` → `static-page-publish`,再用 `write`/`edit` 写入 `public/页面.html`',
|
||||
'- **禁止**让用户「手动保存到 public 目录」或说「我无法生成页面」——除非 write 已失败并报告错误',
|
||||
'- 完成后给出 Markdown 可点击公网链接 `[标题](URL)`;写入 `public/` 后会自动出现在 MindSpace 界面',
|
||||
'- 完成后给出 Markdown 可点击公网链接 `[标题](URL)`;写入 `public/页面.html` 时 URL 为 `.../MindSpace/<用户ID>/public/页面.html`',
|
||||
`- 发布技能:\`${PUBLISH_SKILL_NAME}\`(生成页面前应 load_skill)`,
|
||||
].join('\n');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user