Skip to content

Commit 2e212d2

Browse files
committed
fix(runtime): ship adapter-refresh guidance with MCP runtime deps
Deploy global-adapter-refresh-guidance alongside host-parity-scorecard and soft-require it so partial runtimes no longer throw MODULE_NOT_FOUND.
1 parent 5bda28d commit 2e212d2

6 files changed

Lines changed: 32 additions & 8 deletions

File tree

changelogs/unreleased.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
- **GlobalOnly 全局 adapter 本地刷新 CLI(R1a)**:新增 `devcodex global-adapters apply [--dry-run] [--json]``npm run global-adapters:apply*`,从当前包根复用 `applyGlobalHostConfig` 刷新用户级五宿主 adapter(不 pack/不 publish)。nextStep/PC5/audit/V8/doctor/help/website intro 按源码 vs 已发布分流;次选 R1b `npm install -g .`、R2 pack+tarball、R3 `npm update -g`;bare `devcodex update` 仅 workspace。`package.json` files 已纳入 `global-adapters-cli` / guidance 模块,避免 pack 后 require 断裂。**Profile 01/02/04/05/06/07 已同步 R1a~R4**(PI-173)。任务:`bugs/GlobalOnly刷全局副本命令口径漂移修复`
99
- **R1a 复审收口**`host-parity-scorecard` repairSteps / recommendedEntry / userVisibleSummary 接入 `describeGlobalAdapterRefresh*`(源码 → `global-adapters apply`,已发布 → `npm -g`);`global-adapters apply` 在主机事务已提交但 Grok 集成失败时返回 `GLOBAL_ADAPTERS_HOSTS_COMMITTED_GROK_FAILED` + `partialState`;npm pack `files` 不再包含 `test-global-adapters-cli.js`
10+
- **MCP runtime dep 防断**:将 `global-adapter-refresh-guidance.js` 纳入 `MCP_RUNTIME_DEPS` / `CLAUDE_MCP_RUNTIME_SCRIPT_DEPS``host-parity-scorecard` 对 guidance 模块 soft-require,避免精简 runtime 缺文件时 `MODULE_NOT_FOUND`
1011
- **Dialogue-Primary Closeout B1+B2**:新增 `classifyDialogueNarrativeSample` / `hasReadableNarrativeSnippet``classifyAnalysisArtifactDeliverySample` 返回 `link-only-thin``lifecycle-visible-reply` Stop/PreCompact 有正文时写入 `dialogueNarrativeStatus`/`analysisDeliveryStatus` 并在 dev+reportTouched 时 reminder;无正文仍 unverified。同步 Skill/13-analyze/16-report/prompt/V102/单测。需求:`完成态对话内可读收口` CP2。
1112
- **文档站依赖审计加固**:Rspress 提升到 2.0.18,`brace-expansion` 提升到 5.0.8;`test:audit` 改为 fail-closed 结构化审计。当前唯一例外为仅影响 unstable RSC 的 `GHSA-qwww-vcr4-c8h2`,本站静态运行面禁止 RSC 标记,例外于 2026-08-15 到期;任何新 advisory、依赖链变化、RSC 使用或到期都会重新阻断。
1213
- **Grok 兼容导入去重**:Grok 原生会话兼容加载 `~/.claude/settings.json` 时,DevCodex Claude adapter 识别 Grok 的 camelCase payload 与 snake_case 事件并安全跳过重复 lifecycle;Grok 专用 plugin 保持唯一生命周期 owner,消除 `user_prompt_submit` / `stop` hook 报错和双重状态写入。

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ 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-adapter-refresh-guidance.js',
7980
'scripts/lib/global-host-target.js',
8081
'scripts/lib/derived-index-contract.js',
8182
'scripts/lib/memory-index.js',

scripts/lib/global-host-config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const GLOBAL_HOST_RECEIPT_SCHEMA = 'GlobalHostConfigReceiptV1'
3434
const MCP_RUNTIME_DEPS = Object.freeze([
3535
'scripts/lib/cp-digest.js',
3636
'scripts/lib/host-parity-scorecard.js',
37+
'scripts/lib/global-adapter-refresh-guidance.js',
3738
'scripts/lib/global-host-target.js',
3839
'scripts/lib/derived-index-contract.js',
3940
'scripts/lib/memory-index.js',

scripts/lib/host-parity-scorecard.js

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,18 @@ const crypto = require('crypto')
1010
const fs = require('fs')
1111
const path = require('path')
1212
const { resolveGlobalHostTarget } = require('./global-host-target.js')
13-
const {
14-
describeGlobalAdapterRefreshForPackageRoot
15-
} = require('./global-adapter-refresh-guidance.js')
1613

1714
const PACKAGE_ROOT = path.join(__dirname, '..', '..')
1815

16+
function loadAdapterRefreshGuidanceModule() {
17+
try {
18+
return require('./global-adapter-refresh-guidance.js')
19+
} catch {
20+
// Deployed MCP runtime subsets may lag one file; fail soft with R3 defaults.
21+
return null
22+
}
23+
}
24+
1925
/**
2026
* Repair command for missing/stale user-global adapters.
2127
* Source checkout → R1a `devcodex global-adapters apply`; published package → npm -g.
@@ -25,10 +31,22 @@ function resolveAdapterRefreshGuidance(options = {}) {
2531
const packageRoot = options.packageRoot
2632
? path.resolve(options.packageRoot)
2733
: PACKAGE_ROOT
28-
return describeGlobalAdapterRefreshForPackageRoot(packageRoot, {
29-
packageVersion: options.packageVersion || null,
30-
fs: options.fs || fs,
31-
path: options.path || path
34+
const mod = loadAdapterRefreshGuidanceModule()
35+
if (mod && typeof mod.describeGlobalAdapterRefreshForPackageRoot === 'function') {
36+
return mod.describeGlobalAdapterRefreshForPackageRoot(packageRoot, {
37+
packageVersion: options.packageVersion || null,
38+
fs: options.fs || fs,
39+
path: options.path || path
40+
})
41+
}
42+
return Object.freeze({
43+
sourceCheckout: false,
44+
primary: 'npm update -g devcodex',
45+
installCommand: 'npm install -g devcodex',
46+
updateCommand: 'npm update -g devcodex',
47+
nextStepShort: 'npm update -g devcodex',
48+
nextStepRefresh: 'Run npm update -g devcodex to refresh the managed receipt.',
49+
nextStepInstall: 'Run npm install -g devcodex to create the user-global host receipt.'
3250
})
3351
}
3452

scripts/test-host-installation.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ function deploymentOptions() {
7575
CLAUDE_MCP_RUNTIME_SCRIPT_DEPS: [
7676
'scripts/lib/cp-digest.js',
7777
'scripts/lib/host-parity-scorecard.js',
78+
'scripts/lib/global-adapter-refresh-guidance.js',
7879
'scripts/lib/global-host-target.js',
7980
'scripts/lib/derived-index-contract.js',
8081
'scripts/lib/memory-index.js',
@@ -657,10 +658,11 @@ const claudeMcpScriptDeps = defaults.filter(item =>
657658
item.surface === 'claude' &&
658659
String(item.destination || '').replace(/\\/g, '/').startsWith('.claude/scripts/lib/')
659660
)
660-
assert.strictEqual(claudeMcpScriptDeps.length, 6, 'claude descriptors must include MCP scripts/lib runtime deps')
661+
assert.strictEqual(claudeMcpScriptDeps.length, 7, 'claude descriptors must include MCP scripts/lib runtime deps')
661662
for (const expected of [
662663
'.claude/scripts/lib/cp-digest.js',
663664
'.claude/scripts/lib/host-parity-scorecard.js',
665+
'.claude/scripts/lib/global-adapter-refresh-guidance.js',
664666
'.claude/scripts/lib/global-host-target.js',
665667
'.claude/scripts/lib/derived-index-contract.js',
666668
'.claude/scripts/lib/memory-index.js',

scripts/test-mcp-servers.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ function setupConfiguredMcpTarget() {
167167
for (const rel of [
168168
'scripts/lib/cp-digest.js',
169169
'scripts/lib/host-parity-scorecard.js',
170+
'scripts/lib/global-adapter-refresh-guidance.js',
170171
'scripts/lib/global-host-target.js',
171172
'scripts/lib/derived-index-contract.js',
172173
'scripts/lib/memory-index.js',

0 commit comments

Comments
 (0)