Skip to content

Commit f02ca33

Browse files
committed
feat: enforce global-only host config
1 parent a4c070d commit f02ca33

60 files changed

Lines changed: 4027 additions & 770 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 83 additions & 101 deletions
Large diffs are not rendered by default.

RULES.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,27 @@
44
55
## 正式主支持客户端
66

7-
- **Copilot**通过 `copilot-instructions.md` + `instructions/` 自动加载,无需选择 Agent;若宿主支持并启用 Hooks,还会通过 `.github/hooks/` 提供确定性的生命周期护栏
8-
- **Claude Code**通过 `CLAUDE.md` + `.claude/{instructions,skills,prompts,hooks/_runtime,mcp}/` + `.mcp.json` 自动生效;MCP、hooks 与 permissions 由 `devcodex init --claude` 一并写入
9-
- **Codex**通过 `AGENTS.md` + `.agents/skills/` + `.codex/hooks.json` 自动生效;Codex-only 部署由 `devcodex init --codex` 写入,`AGENTS.md` 与 Copilot/Claude 入口同源
10-
- Copilot 端默认分发 `.github/agents/` 作为可选显式入口;Claude Code 与 Codex 端仍通过 Skills 路由,不分发 agents
7+
- **Copilot**从用户级 Copilot instructions 加载;IDE workspace hooks 不在 GlobalOnlyHostConfigModeV1 首批范围
8+
- **Claude Code**从用户级 `CLAUDE.md`、settings、MCP 与稳定 runtime 加载
9+
- **Codex**从用户级 `.codex/AGENTS.md`、hooks、config 与用户级 `.agents/skills/` 加载
10+
- **Gemini / Grok**:分别使用用户级 settings/runtime 与用户级 plugin/config/runtime;Grok 完整入口为 `devcodex grok`
1111

12-
## 三宿主加载机制
12+
## 五宿主加载机制
1313

14-
DevCodex 同时支持三类宿主加载路径,规则语义保持一致,由 IDE/宿主决定实际生效方式
14+
DevCodex 同时支持五宿主的用户级加载路径,规则语义保持一致,由宿主决定实际生效方式
1515

16-
- **默认路径**Copilot `.github/copilot-instructions.md` + `.github/instructions/*`;Claude Code 走 `CLAUDE.md` + `.claude/instructions/*`
17-
- **Codex 路径**Codex 走工作区根 `AGENTS.md`,并从 `.agents/skills/*` 按需读取 Skill`.codex/hooks.json` 承载 Hook 入口
18-
- **Agent 路径(可选)**`@devcodex` / `@devcodex-auto` — Copilot 端 `.github/agents/` 默认分发后可用,提供全自动模式(CP 自动通过)
16+
- **Copilot / Claude / Gemini**:用户级 instruction/settings 投影,能力按 fixture ceiling 声明。
17+
- **Codex**用户级 `.codex/AGENTS.md` + hooks/config,并从用户级 `.agents/skills/*` 按需读取 Skill
18+
- **Grok**用户级 plugin/config/runtime;`devcodex grok` 用用户级 controlling kernel 启动。
1919

20-
无论哪条路径进入,所有 Instructions 均通过同一 `instructions.md` / instructions 目录派生;在支持 Hook 的宿主中,workspace hooks 作为额外的宿主硬门禁层工作,不替代规则语义层
20+
无论哪条路径进入,所有 Instructions 均通过同一 `instructions.md` / instructions 目录派生。工作区只保留 `.devcodex`,不会因安装生成五宿主目录;已有目录也不会被自动删除
2121

2222
## 宿主模式
2323

2424
- **Hook-First**:VS Code / Claude Code / Codex Hooks 可用时,通过对应宿主 hooks 承载 bootstrap、危险操作护栏和结束前兜底
2525
- **Instruction-Fallback**:Hooks 不可用时,继续依赖 instructions / skills 承载软约束
26-
- **当前实现**:Hook 运行时由 `init/update` 一并分发到 `.github/hooks/_runtime/``.claude/hooks/_runtime/``.codex/hooks/_runtime/`,不要求目标项目从 `node_modules/@vextjs/devcodex/...` 读取脚本
26+
- **当前实现**:npm 全局安装/升级通过 `postinstall` 更新用户级稳定 runtime;bare `init/update` 只管理 workspace `.devcodex`
27+
- **全局唯一写入口**`devcodex init --claude``devcodex init --codex` 及其他宿主 selector/alias 均返回 `CLI_HOST_CONFIG_GLOBAL_ONLY`;宿主 adapter 通过 `npm install -g devcodex``npm update -g devcodex` 管理
2728

2829
## 正式需求与执行模板边界
2930

host-projections/AGENTS.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# DevCodex — Shared Host Kernel(generated)
22

33
> Generated from the unified DevCodex instructions source. Do not edit this file directly.
4-
> sourceDigest: efc114440a798100daed6d00c1e6c4c185aadd4632596290d21850a01ed0432e
4+
> sourceDigest: 396edc68c09cff79bdf632dbb338a55ce3b867dd1d4eced57f380416744531b9
55
> configDigest: 2f25649275fcac6b799522b6d8bc459e9f92910b10ca97824eb10e207eeb08c3
66
> Full fallback: .agents/devcodex/instructions.full.md
77
> Host surface: Codex / Claude import / Gemini import / Grok native AGENTS.md
@@ -30,7 +30,7 @@
3030
- C13:规范资产文件分拆:AI 新建 DevCodex 规范资产 `.md`(instructions / skills / prompts / templates / 规范源等)超 500 行必须拆分(已有文件豁免);业务项目需求、技术方案、报告和正式项目文档不因 C13 强制拆分,按项目自身规范、可读性和用户要求判断
3131
- C14:多任务检查点:≥2 个独立任务:每完成一个追加进度到记忆 + 输出进度快照
3232
- C15:架构质量视角:dev/fix 的需求/问题定义与代码设计须从架构师+平台工程师双视角评估:消费者范围、共享契约边界、模块职责、可扩展性、可维护性、易上手性;模块化只在真实复用者、演进边界或跨模块共享契约存在时成立
33-
- C16:规模判断与批量分批 + 扫描卫生 + TTFV:分析、审查、扫描或批量操作前必须先识别唯一项目/root,并执行 `ProjectArtifactScaleRoutingGate` 的 bounded inventory,按文件数、可解析字节、最大文件、目录集中度、派生产物比例和消费者扩散面决定 `single-pass / batched / sampled+deep-read / blocked`;≥10 文件 mutation 或非 small corpus 必须分批并写 checkpoint,禁止先无界扫描超时后再补分批**WorkspaceRootScanBan**:项目可知时禁止对 monorepo/workspace 根 `Get-ChildItem -Recurse` / `dir /s`;cwd=workspace 根时禁止无子路径相对递归;inventory 排除 `node_modules`/`dist`**TimeToFirstValueGate**:非 chat 在 PC0~PC7 与最小 ContextReadPlan 后,同一用户可见回复须交付范围卡/首批结论/明确阻断之一
33+
- C16:规模判断与批量分批:分析、审查、扫描或批量操作前必须先识别唯一项目/root,并执行 `ProjectArtifactScaleRoutingGate` 的 bounded inventory,按文件数、可解析字节、最大文件、目录集中度、派生产物比例和消费者扩散面决定 `single-pass / batched / sampled+deep-read / blocked`;≥10 文件 mutation 或非 small corpus 必须分批并写 checkpoint,禁止先无界扫描超时后再补分批
3434
- C17:过程改进记录:每条非空用户消息先登记中性治理候选,完成合理性评估和上下文归因后再按语义形成 `GovernanceIntakeDecision`;关键词不得作为权威触发/分类依据。用户建议的策略经确认更优,或揭示规范未定义/不完整且可泛化时,必须走 Improvement Intake:将策略写入 `data/process-improvements.md`(优化清单,PI);若同时暴露规范缺口,再联动 `data/pending-fixes.md`(PF)。复合意图逐项 all-of 验证;不得询问是否记录;所有模式命中后都必须显式回执已记录的 `PI-xxx / PF-xxx`
3535
- C18:全模式入口检查不可跳过:同 S07
3636
- C19:确认后前置复审:每次用户明确确认后、进入下一阶段前,必须执行 `PostConfirmationReviewScopeGate`:低风险单文件或纯文案可做轻量复审;高风险、多模块、公共 API/配置、安全能力、package/adapter、文档消费者、控制面或多真相源同步任务必须升级为冻结清单驱动的全面复审;命中控制面 / 多文件联动 / 真相源同步 / 模板-示例-校验链场景必须追加交叉验证,并显式输出结果;若发现阻断性问题,先修正并告知用户,再重新确认;无阻断问题方可推进
@@ -78,8 +78,7 @@
7878
## Passive-hook 宿主(Grok)
7979

8080
- Grok 等 passive-hook 宿主:优先 `devcodex grok` Full 入口;禁止把 full-capable 解读为 UserPromptSubmit 已注入 PC0。
81-
- GrokTurnChecklist(可扫,权威列表见 `host-parity-scorecard` 共 9 步):PC0~PC7 → Intent→Skill bundle(非 chat:intent+compliance+user-visible-output-contract+工作流+report+memory)→ context-plan → **scan-hygiene(C16 禁 workspace 根 Recurse inventory)****ttfv-first-delivery(同轮首交付)** → work/gates → report/memory/台账 → honest-ceiling;不得因无 inject/省 token 省略 S05/S07/C17。
82-
- HostParity 残差台账(机器权威):`scripts/fixtures/host-parity/unaligned-ledger.v1.json`(U-A1~U-C3);cannotClaim 缩减须 ParityUpgradeDecision。
81+
- GrokTurnChecklist(可扫):PC0~PC7 → Intent→Skill bundle(非 chat:intent+compliance+user-visible-output-contract+工作流+report+memory)→ 实质任务 → report/memory/台账;不得因无 inject/省 token 省略 S05/S07/C17。
8382

8483
## 按需扩展与故障回退
8584

host-projections/copilot-instructions.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# DevCodex — Copilot Host Kernel(generated)
22

33
> Generated from the unified DevCodex instructions source. Do not edit this file directly.
4-
> sourceDigest: efc114440a798100daed6d00c1e6c4c185aadd4632596290d21850a01ed0432e
4+
> sourceDigest: 396edc68c09cff79bdf632dbb338a55ce3b867dd1d4eced57f380416744531b9
55
> configDigest: 2f25649275fcac6b799522b6d8bc459e9f92910b10ca97824eb10e207eeb08c3
66
> Full fallback: .agents/devcodex/instructions.full.md
77
> Host surface: GitHub Copilot instruction-fallback projection
@@ -30,7 +30,7 @@
3030
- C13:规范资产文件分拆:AI 新建 DevCodex 规范资产 `.md`(instructions / skills / prompts / templates / 规范源等)超 500 行必须拆分(已有文件豁免);业务项目需求、技术方案、报告和正式项目文档不因 C13 强制拆分,按项目自身规范、可读性和用户要求判断
3131
- C14:多任务检查点:≥2 个独立任务:每完成一个追加进度到记忆 + 输出进度快照
3232
- C15:架构质量视角:dev/fix 的需求/问题定义与代码设计须从架构师+平台工程师双视角评估:消费者范围、共享契约边界、模块职责、可扩展性、可维护性、易上手性;模块化只在真实复用者、演进边界或跨模块共享契约存在时成立
33-
- C16:规模判断与批量分批 + 扫描卫生 + TTFV:分析、审查、扫描或批量操作前必须先识别唯一项目/root,并执行 `ProjectArtifactScaleRoutingGate` 的 bounded inventory,按文件数、可解析字节、最大文件、目录集中度、派生产物比例和消费者扩散面决定 `single-pass / batched / sampled+deep-read / blocked`;≥10 文件 mutation 或非 small corpus 必须分批并写 checkpoint,禁止先无界扫描超时后再补分批**WorkspaceRootScanBan**:项目可知时禁止对 monorepo/workspace 根 `Get-ChildItem -Recurse` / `dir /s`;cwd=workspace 根时禁止无子路径相对递归;inventory 排除 `node_modules`/`dist`**TimeToFirstValueGate**:非 chat 在 PC0~PC7 与最小 ContextReadPlan 后,同一用户可见回复须交付范围卡/首批结论/明确阻断之一
33+
- C16:规模判断与批量分批:分析、审查、扫描或批量操作前必须先识别唯一项目/root,并执行 `ProjectArtifactScaleRoutingGate` 的 bounded inventory,按文件数、可解析字节、最大文件、目录集中度、派生产物比例和消费者扩散面决定 `single-pass / batched / sampled+deep-read / blocked`;≥10 文件 mutation 或非 small corpus 必须分批并写 checkpoint,禁止先无界扫描超时后再补分批
3434
- C17:过程改进记录:每条非空用户消息先登记中性治理候选,完成合理性评估和上下文归因后再按语义形成 `GovernanceIntakeDecision`;关键词不得作为权威触发/分类依据。用户建议的策略经确认更优,或揭示规范未定义/不完整且可泛化时,必须走 Improvement Intake:将策略写入 `data/process-improvements.md`(优化清单,PI);若同时暴露规范缺口,再联动 `data/pending-fixes.md`(PF)。复合意图逐项 all-of 验证;不得询问是否记录;所有模式命中后都必须显式回执已记录的 `PI-xxx / PF-xxx`
3535
- C18:全模式入口检查不可跳过:同 S07
3636
- C19:确认后前置复审:每次用户明确确认后、进入下一阶段前,必须执行 `PostConfirmationReviewScopeGate`:低风险单文件或纯文案可做轻量复审;高风险、多模块、公共 API/配置、安全能力、package/adapter、文档消费者、控制面或多真相源同步任务必须升级为冻结清单驱动的全面复审;命中控制面 / 多文件联动 / 真相源同步 / 模板-示例-校验链场景必须追加交叉验证,并显式输出结果;若发现阻断性问题,先修正并告知用户,再重新确认;无阻断问题方可推进
@@ -78,7 +78,7 @@
7878
## Passive-hook 宿主(Grok)
7979

8080
- Grok 等 passive-hook 宿主:优先 `devcodex grok` Full 入口;禁止把 full-capable 解读为 UserPromptSubmit 已注入 PC0。
81-
- GrokTurnChecklist(可扫):PC0~PC7 → Intent→Skill bundle(非 chat:intent+compliance+user-visible-output-contract+工作流+report+memory)→ **scan-hygiene(C16 禁 workspace 根 Recurse)****TTFV 首轮交付**实质任务 → report/memory/台账;不得因无 inject/省 token 省略 S05/S07/C17。
81+
- GrokTurnChecklist(可扫):PC0~PC7 → Intent→Skill bundle(非 chat:intent+compliance+user-visible-output-contract+工作流+report+memory)→ 实质任务 → report/memory/台账;不得因无 inject/省 token 省略 S05/S07/C17。
8282

8383
## 按需扩展与故障回退
8484

host-projections/coverage.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"schemaVersion": "HostInstructionCoverageReceiptV1",
33
"sourceFile": "instructions.md",
4-
"sourceDigest": "efc114440a798100daed6d00c1e6c4c185aadd4632596290d21850a01ed0432e",
4+
"sourceDigest": "396edc68c09cff79bdf632dbb338a55ce3b867dd1d4eced57f380416744531b9",
55
"configDigest": "2f25649275fcac6b799522b6d8bc459e9f92910b10ca97824eb10e207eeb08c3",
66
"mode": "kernel",
77
"fallback": {
88
"destination": ".agents/devcodex/instructions.full.md",
9-
"sourceDigest": "efc114440a798100daed6d00c1e6c4c185aadd4632596290d21850a01ed0432e",
9+
"sourceDigest": "396edc68c09cff79bdf632dbb338a55ce3b867dd1d4eced57f380416744531b9",
1010
"available": true
1111
},
1212
"budgets": {
@@ -301,12 +301,12 @@
301301
"host-projections/AGENTS.md": {
302302
"bytes": 10605,
303303
"lines": 88,
304-
"digest": "abfb57520e0eae2040e53177473f3276e37d30f22eb4c250b5810391311a4106"
304+
"digest": "cc50b5ca5418779b8fd6c0670057c66692d34a012f267bd21ffcde6f384500fe"
305305
},
306306
"host-projections/copilot-instructions.md": {
307307
"bytes": 10591,
308308
"lines": 88,
309-
"digest": "28da24a5e7c970fe4d5ceaeaf9edcaa2873e756a035f186bdb710accc42a4616"
309+
"digest": "c70d4806edd8bde3338a4ff5e2df4506f1556b90d3640f3691d017bdb71757b7"
310310
},
311311
"host-projections/CLAUDE.md": {
312312
"bytes": 327,
@@ -324,5 +324,5 @@
324324
"valid": true,
325325
"errors": []
326326
},
327-
"receiptId": "host-instruction-coverage-0ed46f67c6a940d1686b77ca555b26d47505d6e47c86944c7b5f68017d2eb98b"
327+
"receiptId": "host-instruction-coverage-534158f195d271f48b50f3cf96346de444765fa888402d3f2d06fe0358d0a002"
328328
}

index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,10 @@ const CLAUDE_SOURCES = [
7676
const CLAUDE_MCP_RUNTIME_SCRIPT_DEPS = Object.freeze([
7777
'scripts/lib/cp-digest.js',
7878
'scripts/lib/host-parity-scorecard.js',
79+
'scripts/lib/global-host-target.js',
7980
'scripts/lib/derived-index-contract.js',
80-
'scripts/lib/memory-index.js'
81+
'scripts/lib/memory-index.js',
82+
'scripts/lib/summary-type-canon.js'
8183
])
8284

8385
const CODEX_SOURCES = [
@@ -335,7 +337,7 @@ const {
335337
featureInventoryColumnLabels: FEATURE_INVENTORY_COLUMN_LABELS
336338
})
337339

338-
const { cmdInit, cmdInitHost, cmdInitClaude, cmdInitCodex, cmdInitGemini, cmdInitGrok, cmdUninstallHost } = buildCliInstallCommands({
340+
const { cmdInitWorkspaceRuntime, cmdInitHost, cmdUninstallHost } = buildCliInstallCommands({
339341
fs, path, process, console, c, PKG_ROOT, SOURCES, CLAUDE_SOURCES,
340342
CLAUDE_MCP_RUNTIME_SCRIPT_DEPS,
341343
CODEX_SOURCES, CLAUDE_SETTINGS_HOOKS, CLAUDE_SETTINGS_PERMISSIONS,
@@ -401,7 +403,7 @@ function cmdGrok(argv) {
401403
}
402404

403405
const cliCommandRegistry = createCliCommandRegistry({
404-
cmdInit, cmdInitHost, cmdInitClaude, cmdInitCodex, cmdUninstallHost, cmdGrok, cmdStatus, cmdProfileInit, cmdDoctor, cmdProbe, cmdTrace, cmdSkill, cmdTask, cmdHelp
406+
cmdInitWorkspaceRuntime, cmdInitHost, cmdUninstallHost, cmdGrok, cmdStatus, cmdProfileInit, cmdDoctor, cmdProbe, cmdTrace, cmdSkill, cmdTask, cmdHelp
405407
})
406408

407409
if (require.main === module) {
@@ -410,7 +412,7 @@ if (require.main === module) {
410412
}
411413

412414
module.exports = {
413-
walkDir, cmdInit, cmdInitHost, cmdInitClaude, cmdInitCodex, cmdInitGemini, cmdInitGrok,
415+
walkDir, cmdInitWorkspaceRuntime, cmdInitHost,
414416
cmdUninstallHost, cmdGrok, cmdStatus, cmdHelp, cmdProfileInit, cmdDoctor, cmdProbe, cmdTrace,
415417
cmdSkill, cmdTask, isSourceRepo, findLayoutInfo, inferProjectFromCwd, resolveActiveRuntimeRoot,
416418
resolveHostAdapterScope, resolveGitignoreRoot, ensureRuntimeDirs, SOURCES, CLAUDE_SOURCES,

instructions/15-memory.instructions.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ confirm、compact、resume、host/session/task 变化后必须重新核验 instr
208208
```
209209
- 每次会话结束前追加一行索引(SC6 检查)
210210
- 格式:`| 日期 | 会话 | 类型 | 摘要 | 关联报告 | 关联记忆 | 状态 |`
211+
- **SummaryTypeCanonGate**`类型` 仅允许 `dev|fix|analyze|audit|self-fix|chat|resume|other`,多意图用 `+`;禁止 `/` 与自由标签;MCP `memory_summary_append` 硬拒写(见 `scripts/lib/summary-type-canon.js`
211212
- 多任务会话:一行覆盖全部任务,不拆多行
212213
- 🔴 **纯索引约束**:SUMMARY 仅含表头 + 会话索引行,禁止添加自由文本段落(如"当前状态""关键决策"等非索引内容);🔄 状态标记仅出现在索引表「状态」列;已有旧格式 SUMMARY 应在下次写入时迁移
213214

0 commit comments

Comments
 (0)