这是 https://index.hagicode.com 的独立 Astro 静态站点。它负责托管公开 JSON 资产,也负责生成目录首页与版本历史页。
- 托管公开 JSON 索引与静态资源。不提供服务端 API。
- 用
src/data/public/index-catalog.json作为首页展示与外部程序发现索引的权威源文件,并由 Astro 在构建期发布为/index-catalog.json。 - 为
HagiCode Server与HagiCode Desktop生成独立版本历史页:/server/history/与/desktop/history/。 - 维护
activity-metrics快照与 catalog 摘要,并保持/activity-metrics.json路由稳定。 - 保持既有 JSON URL 不变,例如
/index-catalog.json、/activity-metrics.json、/server/index.json、/desktop/index.json、/presets/index.json。
当前仓库明确区分两类 JSON:
| 公开路由 | 权威源文件 | 生成方式 |
|---|---|---|
/index-catalog.json |
src/data/public/index-catalog.json |
src/pages/index-catalog.json.ts |
/activity-metrics.json |
src/data/public/activity-metrics.json |
src/pages/activity-metrics.json.ts |
/server/index.json |
src/data/public/server/index.json |
src/pages/server/index.json.ts |
/desktop/index.json |
src/data/public/desktop/index.json |
src/pages/desktop/index.json.ts |
规则很明确:
- 不要手改
dist/**或尝试在public/下补这些路由文件。 - producer 脚本只更新
src/data/public/**。 - Astro 构建负责输出稳定、minified 的公开 JSON。
这些资产当前暂不纳入 Astro JSON 路由模型:
public/presets/**public/agent-templates/**public/character-templates/**public/secondary-professions/index.json../hagicode-core/src/PCode.Web/Assets/secondary-professions.index.json
它们各自仍由同步脚本或生成脚本维护,但不应被误认为 route-mapped JSON 的权威源。
版本历史页只依赖仓库内静态 JSON,不会在运行时发起额外请求。
HagiCode Server:/server/history/← sourcesrc/data/public/server/index.json← published route/server/index.jsonHagiCode Desktop:/desktop/history/← sourcesrc/data/public/desktop/index.json← published route/desktop/index.json- 首页 package 卡片通过
historyPagePath暴露可访问入口,同时继续保留原始 JSON 链接。
历史页当前的归一化边界如下:
- 优先读取
packages[]。若不存在则回退到versions[]。 - 发布日期候选字段:
publishedAt、releaseDate、updatedAt、createdAt及其下划线变体。 - 下载入口候选字段:
downloadUrl、url、files[]、assets[]、downloads[]、artifacts[]。 - 缺少发布日期时显示
发布日期未知。 - 缺少下载入口时显示
无直接下载,同时保留原始 JSON兜底动作。
src/data/public/activity-metrics.json 使用独立契约,并把当前快照同步成 catalog 摘要。最终公开路由仍是 /activity-metrics.json。
- 顶层字段:
lastUpdated、dockerHub、clarity、history dockerHub:repository、pullCountclarity:activeUsers、activeSessions、dateRangehistory条目:date、dockerHub.pullCount、clarity.activeUsers、clarity.activeSessions- catalog 摘要字段:
activityMetrics.activeUsers、activityMetrics.activeSessions、activityMetrics.dateRange
约束如下:
- 同一 UTC 日期只保留一条
history记录。 - 仅保留最近 90 天窗口。
- Clarity 返回
0/0或请求失败时,保留上一份有效 Clarity 快照。 - 首次运行会自动创建初始 JSON。无需人工补文件。
当前参考实现来自 monorepo 的 repos/site,但本仓库独立维护自己的资产与自动化。
- Docker Hub:
DOCKER_HUB_REPOSITORY指向的仓库拉取次数。 - Microsoft Clarity:近 3 天活跃用户与活跃会话。
- GitHub Actions:定时执行
npm run update-activity-metrics。 - 同一次刷新会同步更新
src/data/public/index-catalog.json中activity-metrics条目的lastUpdated与摘要。
脚本命令:npm run update-activity-metrics
DOCKER_HUB_REPOSITORY:默认newbe36524/hagicodeCLARITY_API_KEY:读取 Clarity Data Export APIHAGICODE_CLARITY_PROJECT_ID:兼容变量,用于维护上下文
export DOCKER_HUB_REPOSITORY="newbe36524/hagicode"
export CLARITY_API_KEY="<token>"
export HAGICODE_CLARITY_PROJECT_ID="<project-id>"
npm run update-activity-metrics或:
node --env-file=.env ./scripts/update-activity-metrics.mjs工作流文件:.github/workflows/update-activity-metrics.yml
- 支持
schedule、workflow_dispatch、workflow_call - 在仓库内安装依赖并执行
npm run update-activity-metrics - 输出核心指标、更新时间与警告到 workflow summary
- 若 source JSON 有变更,直接提交并推送到当前分支
- 源目录:
repos/docs/public/presets - 发布镜像:
public/presets - 维护原则:常规更新应在
repos/docs完成,再同步到本仓库;不要把这里作为 presets 主编辑位置。
- Trait canonical 输出:
../trait/src/data/generated/agent-templates/ - SOUL canonical 输出:
../soul/src/data/generated/agent-templates/ - Index 发布目录:
public/agent-templates/ - 根清单:
public/agent-templates/index.json - 维护原则:不要在
repos/index/public/agent-templates/手工编辑模板正文;这里是发布镜像,不是 source-of-truth。
- 源数据:
src/data/secondary-professions.catalog.json - 发布目录:
public/secondary-professions/index.json - catalog 源入口:
src/data/public/index-catalog.json中的secondary-professions - 后端 fallback:
../hagicode-core/src/PCode.Web/Assets/secondary-professions.index.json - 维护原则:副职业目录以
repos/index源数据为准;不要直接手改public/secondary-professions/index.json或后端 fallback 快照。
- 生成输入:
src/data/agent-preset-library.json - 生成脚本:
scripts/build-agent-preset-library.mjs - 发布目录:
public/character-templates/ curated输出applyScope = ["soul", "trait"]universal输出applyScope = ["soul"]
npm install
npm run sync:presets
npm run sync:secondary-professions
npm run sync:character-templates
npm run validate
npm test
npm run update-activity-metrics
npm run dev
npm run build默认开发端口:31266
src/data/public/index-catalog.json 的每个条目至少包含:
idtitledescriptionpathcategorysourceRepolastUpdatedstatus
可选字段:
readmePathsourceUrlhistoryPagePathactivityMetrics
其中:
historyPagePath当前固定用于server-packages→/server/history/、desktop-packages→/desktop/history/activityMetrics当前用于activity-metrics条目,并与/activity-metrics.json当前快照保持同步
- 在 monorepo 的
repos/docs/public/presets更新index.json、README.md或 provider JSON。 - 在本仓库执行
npm run sync:presets。 - 如有新增入口,更新
src/data/public/index-catalog.json。 - 执行
npm run validate或npm run build。
- 运行
npm run sync:index,或更新src/data/public/server/index.json、src/data/public/desktop/index.json。 - 确认
src/data/public/index-catalog.json中 managed package 条目仍包含正确的historyPagePath。 - 若上游索引结构演进,同步更新
src/lib/load-package-history.ts、tests/version-history-pages.test.mjs与tests/route-mapped-loaders.test.mjs。 - 执行
npm run validate、npm test、npm run build。
- 在 monorepo 的
repos/trait执行npm run sync:agent-templates,生成 Trait 模板快照。 - 在 monorepo 的
repos/soul执行npm run sync:agent-templates,生成 SOUL 模板快照。 - 在本仓库执行
npm run sync:agent-templates,把两侧 canonical 输出镜像到public/agent-templates/。 - 检查
src/data/public/index-catalog.json中agent-templates条目仍指向/agent-templates/index.json。 - 执行
npm run validate、npm test、npm run build。
- 在
src/data/secondary-professions.catalog.json更新目录源数据。 - 在本仓库执行
npm run sync:secondary-professions,同步生成public/secondary-professions/index.json与后端 fallback 快照,并更新src/data/public/index-catalog.json。 - 执行
npm run validate、npm test、npm run build。
- 先执行 Agent template 同步流程,确保
public/agent-templates/已最新。 - 检查
src/data/agent-preset-library.json里的计数基线、缺口优先清单和templateMatrix。 - 执行
npm run sync:character-templates,重建public/character-templates/。 - 执行
npm run validate与npm test,确认数量、去重、templateMode/applyScope契约与引用完整性都通过。
- 配置
CLARITY_API_KEY等环境变量。 - 运行
npm run update-activity-metrics。 - 检查
src/data/public/activity-metrics.json与src/data/public/index-catalog.json中的activity-metrics摘要是否一致。 - 执行
npm run validate、npm test、npm run build。
npm run validate:构建临时 Astro 输出,并校验 source/build 语义一致、公开路由存在且 JSON 已 minify。npm test:覆盖版本历史归一化、route-mapped loader 契约、catalog 漂移检测、活动摘要同步、同日重跑、90 天滚动与 pretty JSON 拒绝场景。npm run build:生成最终静态站点,并再次验证 route-mapped JSON 输出。
- monorepo 中的
repos/site只是参考实现,不是运行时依赖。 src/data/public/**是 route-mapped JSON 的 source-of-truth;不要手改dist/**,也不要把这些文件重新放回public/作为源码。public/agent-templates/**、public/character-templates/**、public/presets/**、public/secondary-professions/index.json仍是发布镜像或生成结果,但不属于 Astro JSON 路由源目录。- Index 只负责读取并发布镜像好的包索引,不负责生成上游发布数据。
- 当
/server/index.json或/desktop/index.json的结构发生演进时,必须同步更新 loader 与回归测试,不要只改页面文案。