@skillcap/gdh 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/INSTALL-BUNDLE.json +1 -1
  2. package/README.md +53 -90
  3. package/node_modules/@gdh/adapters/dist/claude-settings-patch.d.ts +74 -0
  4. package/node_modules/@gdh/adapters/dist/claude-settings-patch.d.ts.map +1 -0
  5. package/node_modules/@gdh/adapters/dist/claude-settings-patch.js +158 -0
  6. package/node_modules/@gdh/adapters/dist/claude-settings-patch.js.map +1 -0
  7. package/node_modules/@gdh/adapters/dist/claude-statusline-render.d.ts +51 -0
  8. package/node_modules/@gdh/adapters/dist/claude-statusline-render.d.ts.map +1 -0
  9. package/node_modules/@gdh/adapters/dist/claude-statusline-render.js +80 -0
  10. package/node_modules/@gdh/adapters/dist/claude-statusline-render.js.map +1 -0
  11. package/node_modules/@gdh/adapters/dist/claude-update-hook-render.d.ts +35 -0
  12. package/node_modules/@gdh/adapters/dist/claude-update-hook-render.d.ts.map +1 -0
  13. package/node_modules/@gdh/adapters/dist/claude-update-hook-render.js +76 -0
  14. package/node_modules/@gdh/adapters/dist/claude-update-hook-render.js.map +1 -0
  15. package/node_modules/@gdh/adapters/dist/claude-update-worker-render.d.ts +28 -0
  16. package/node_modules/@gdh/adapters/dist/claude-update-worker-render.d.ts.map +1 -0
  17. package/node_modules/@gdh/adapters/dist/claude-update-worker-render.js +99 -0
  18. package/node_modules/@gdh/adapters/dist/claude-update-worker-render.js.map +1 -0
  19. package/node_modules/@gdh/adapters/dist/index.d.ts +9 -0
  20. package/node_modules/@gdh/adapters/dist/index.d.ts.map +1 -1
  21. package/node_modules/@gdh/adapters/dist/index.js +224 -2
  22. package/node_modules/@gdh/adapters/dist/index.js.map +1 -1
  23. package/node_modules/@gdh/adapters/dist/self-update-mechanics.d.ts +51 -0
  24. package/node_modules/@gdh/adapters/dist/self-update-mechanics.d.ts.map +1 -0
  25. package/node_modules/@gdh/adapters/dist/self-update-mechanics.js +155 -0
  26. package/node_modules/@gdh/adapters/dist/self-update-mechanics.js.map +1 -0
  27. package/node_modules/@gdh/adapters/package.json +8 -8
  28. package/node_modules/@gdh/authoring/dist/index.d.ts +1 -0
  29. package/node_modules/@gdh/authoring/dist/index.d.ts.map +1 -1
  30. package/node_modules/@gdh/authoring/dist/index.js +1 -0
  31. package/node_modules/@gdh/authoring/dist/index.js.map +1 -1
  32. package/node_modules/@gdh/authoring/dist/writePinnedVersion.d.ts +17 -0
  33. package/node_modules/@gdh/authoring/dist/writePinnedVersion.d.ts.map +1 -0
  34. package/node_modules/@gdh/authoring/dist/writePinnedVersion.js +50 -0
  35. package/node_modules/@gdh/authoring/dist/writePinnedVersion.js.map +1 -0
  36. package/node_modules/@gdh/authoring/package.json +5 -2
  37. package/node_modules/@gdh/cli/dist/index.d.ts +15 -0
  38. package/node_modules/@gdh/cli/dist/index.d.ts.map +1 -1
  39. package/node_modules/@gdh/cli/dist/index.js +68 -8
  40. package/node_modules/@gdh/cli/dist/index.js.map +1 -1
  41. package/node_modules/@gdh/cli/dist/self-update.d.ts +3 -0
  42. package/node_modules/@gdh/cli/dist/self-update.d.ts.map +1 -0
  43. package/node_modules/@gdh/cli/dist/self-update.js +235 -0
  44. package/node_modules/@gdh/cli/dist/self-update.js.map +1 -0
  45. package/node_modules/@gdh/cli/dist/update-banner.d.ts +42 -0
  46. package/node_modules/@gdh/cli/dist/update-banner.d.ts.map +1 -0
  47. package/node_modules/@gdh/cli/dist/update-banner.js +49 -0
  48. package/node_modules/@gdh/cli/dist/update-banner.js.map +1 -0
  49. package/node_modules/@gdh/cli/package.json +10 -10
  50. package/node_modules/@gdh/core/dist/dev-mode.d.ts +13 -0
  51. package/node_modules/@gdh/core/dist/dev-mode.d.ts.map +1 -0
  52. package/node_modules/@gdh/core/dist/dev-mode.js +21 -0
  53. package/node_modules/@gdh/core/dist/dev-mode.js.map +1 -0
  54. package/node_modules/@gdh/core/dist/index.d.ts +8 -2
  55. package/node_modules/@gdh/core/dist/index.d.ts.map +1 -1
  56. package/node_modules/@gdh/core/dist/index.js +8 -0
  57. package/node_modules/@gdh/core/dist/index.js.map +1 -1
  58. package/node_modules/@gdh/core/dist/update-cache.d.ts +46 -0
  59. package/node_modules/@gdh/core/dist/update-cache.d.ts.map +1 -0
  60. package/node_modules/@gdh/core/dist/update-cache.js +90 -0
  61. package/node_modules/@gdh/core/dist/update-cache.js.map +1 -0
  62. package/node_modules/@gdh/core/dist/update-probe.d.ts +102 -0
  63. package/node_modules/@gdh/core/dist/update-probe.d.ts.map +1 -0
  64. package/node_modules/@gdh/core/dist/update-probe.js +195 -0
  65. package/node_modules/@gdh/core/dist/update-probe.js.map +1 -0
  66. package/node_modules/@gdh/core/package.json +1 -1
  67. package/node_modules/@gdh/docs/package.json +2 -2
  68. package/node_modules/@gdh/mcp/dist/index.d.ts +20 -0
  69. package/node_modules/@gdh/mcp/dist/index.d.ts.map +1 -1
  70. package/node_modules/@gdh/mcp/dist/index.js +39 -2
  71. package/node_modules/@gdh/mcp/dist/index.js.map +1 -1
  72. package/node_modules/@gdh/mcp/package.json +8 -8
  73. package/node_modules/@gdh/observability/dist/guidance-audit.js +2 -1
  74. package/node_modules/@gdh/observability/dist/guidance-audit.js.map +1 -1
  75. package/node_modules/@gdh/observability/package.json +2 -2
  76. package/node_modules/@gdh/runtime/package.json +2 -2
  77. package/node_modules/@gdh/scan/package.json +3 -3
  78. package/node_modules/@gdh/verify/package.json +7 -7
  79. package/package.json +11 -11
@@ -0,0 +1,235 @@
1
+ import { bumpAndRebakePin, } from "@gdh/adapters";
2
+ import { resolveNpmLatestVersion, } from "@gdh/core";
3
+ import { extractPositionalArgs, findUnsupportedOptionsError, formatCliError, readSingleOptionValue, recordSessionEvent, writeJsonResult, } from "./index.js";
4
+ /**
5
+ * Phase 13 Plan 13-02: CLI wrapper for `gdh self-update`.
6
+ *
7
+ * Thin composition layer over the Phase 12 `bumpAndRebakePin` orchestrator:
8
+ * 1. Parse argv — `[version]` positional + `--dry-run` + `--target <path>`.
9
+ * 2. Resolve target version — explicit passthrough (D-03) OR
10
+ * `resolveNpmLatestVersion` fresh-probe-then-cache (D-04).
11
+ * 3. Invoke `bumpAndRebakePin` — orchestrator owns SELF-03 dev-mode gate
12
+ * (Step 1 at mechanics layer; do NOT duplicate here).
13
+ * 4. Emit stderr one-liner BEFORE stdout JSON (Phase 11 D-11 flush order).
14
+ * 5. Emit structured JSON `{ command, targetPath, dryRun, result }` (D-16).
15
+ * 6. Record `self_update` session event — non-blocking (D-18).
16
+ *
17
+ * Divergence from `runMigrateCommand`: default action is APPLY (D-05), not
18
+ * dry-run. The Agent-First rationale is in CONTEXT.md D-05 — the skill
19
+ * (Plan 13-03) runs a `--dry-run` preview first via the same CLI, then
20
+ * applies. The human's intent is the approval.
21
+ */
22
+ const USAGE_LINE = "Usage: gdh self-update [version] [--dry-run] [--target <path>]\n";
23
+ export async function runSelfUpdateCommand(args, io) {
24
+ if (args.includes("--help")) {
25
+ io.stdout.write([
26
+ "Usage: gdh self-update [version] [--dry-run] [--target <path>]",
27
+ "",
28
+ "Bump the pinned gdh_version and re-bake every managed surface at the new pin.",
29
+ "Defaults to npm latest. Pass a version (e.g., 0.6.0) to pin explicitly.",
30
+ "",
31
+ "Flags:",
32
+ " --dry-run Preview the plan without mutating disk.",
33
+ " --target <path> Target directory (default: cwd).",
34
+ "",
35
+ "Note: agents typically invoke this via the /gdh-update slash command; see docs/product/CORE_PRODUCT_VALUES.md §Agent-First.",
36
+ ].join("\n") + "\n");
37
+ return 0;
38
+ }
39
+ const unsupportedOptionsError = findUnsupportedOptionsError(args, {
40
+ usage: USAGE_LINE,
41
+ booleanOptions: ["--dry-run"],
42
+ optionsWithValues: ["--target"],
43
+ });
44
+ if (unsupportedOptionsError !== null) {
45
+ io.stderr.write(unsupportedOptionsError);
46
+ return 1;
47
+ }
48
+ // --target is a value-bearing flag; include it in the exclusion set so its
49
+ // value is not mistaken for a second positional version argument.
50
+ const positionalArgs = extractPositionalArgs(args, new Set(["--dry-run", "--target"]));
51
+ if (positionalArgs.length > 1) {
52
+ io.stderr.write("Usage error: gdh self-update accepts at most one positional version.\n");
53
+ return 1;
54
+ }
55
+ const explicitVersion = positionalArgs[0] ?? null;
56
+ // D-05 divergence: default is APPLY. No `--apply` flag; `--dry-run` is
57
+ // OPT-IN (Phase 14 harness + skill preview rely on it being explicit).
58
+ const dryRun = args.includes("--dry-run");
59
+ const targetOverride = readSingleOptionValue(args, "--target");
60
+ const targetPath = targetOverride ?? ".";
61
+ const commandStartedAtMs = Date.now();
62
+ try {
63
+ // D-03: explicit version passes through verbatim. No npm pre-validate —
64
+ // `bumpAndRebakePin` / `writePinnedVersion` surface invalid semver as
65
+ // `state: "blocked"` which the caller already handles.
66
+ let resolvedLatest = null;
67
+ let targetVersion;
68
+ if (explicitVersion !== null) {
69
+ targetVersion = explicitVersion;
70
+ }
71
+ else {
72
+ resolvedLatest = await resolveNpmLatestVersion();
73
+ if (resolvedLatest === null) {
74
+ const reason = "No version specified and npm/cache unreachable.";
75
+ const blockedResult = {
76
+ state: "blocked",
77
+ reason,
78
+ };
79
+ // stderr banner first, then stdout JSON (flush-order convention).
80
+ emitSelfUpdateStderrSummary(io, blockedResult);
81
+ writeJsonResult(io, {
82
+ command: "gdh self-update",
83
+ targetPath,
84
+ dryRun,
85
+ result: blockedResult,
86
+ });
87
+ await safeRecordSessionEvent(targetPath, {
88
+ commandStartedAtMs,
89
+ state: "blocked",
90
+ summary: `GDH self-update blocked — ${reason}`,
91
+ errorMessage: reason,
92
+ });
93
+ return 1;
94
+ }
95
+ targetVersion = resolvedLatest.version;
96
+ if (resolvedLatest.source === "cache") {
97
+ const age = resolvedLatest.checkedAt ?? "unknown time";
98
+ io.stderr.write(`⚠ Using cached latest from ${age} — registry unreachable.\n`);
99
+ }
100
+ }
101
+ const result = await bumpAndRebakePin(targetPath, {
102
+ targetVersion,
103
+ dryRun,
104
+ });
105
+ // Phase 11 D-11 flush-order — stderr FIRST, then stdout JSON.
106
+ emitSelfUpdateStderrSummary(io, result);
107
+ writeJsonResult(io, {
108
+ command: "gdh self-update",
109
+ targetPath,
110
+ dryRun,
111
+ result,
112
+ });
113
+ await safeRecordSessionEvent(targetPath, {
114
+ commandStartedAtMs,
115
+ state: mapBumpStateToEventState(result.state),
116
+ summary: summarizeBumpResult(result),
117
+ errorMessage: errorMessageForBumpResult(result),
118
+ producedArtifacts: artifactsForBumpResult(result, dryRun),
119
+ });
120
+ return exitCodeForState(result.state);
121
+ }
122
+ catch (error) {
123
+ io.stderr.write(`Failed to self-update "${targetPath}": ${formatCliError(error)}\n`);
124
+ return 1;
125
+ }
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // helpers
129
+ // ---------------------------------------------------------------------------
130
+ /** D-15: updated/noop/skipped_dev_mode → 0; rolled_back/blocked → 1. */
131
+ function exitCodeForState(state) {
132
+ return state === "rolled_back" || state === "blocked" ? 1 : 0;
133
+ }
134
+ /** D-18: BumpAndRebakePinResult.state → GdhAuthoringSessionEventState. */
135
+ function mapBumpStateToEventState(state) {
136
+ if (state === "updated" || state === "noop" || state === "skipped_dev_mode") {
137
+ return "succeeded";
138
+ }
139
+ if (state === "rolled_back") {
140
+ return "failed";
141
+ }
142
+ return "blocked";
143
+ }
144
+ /** Human-readable state summary for the session-event record (D-18). */
145
+ function summarizeBumpResult(result) {
146
+ switch (result.state) {
147
+ case "updated":
148
+ return `Updated GDH from ${result.fromVersion} to ${result.toVersion} (${result.actions.length} surfaces re-baked).`;
149
+ case "noop":
150
+ return `GDH already at ${result.currentVersion} (no changes).`;
151
+ case "skipped_dev_mode":
152
+ return `Skipped GDH self-update — dev-mode (GDH_DEV_REPO=${result.devRepoPath}).`;
153
+ case "rolled_back":
154
+ return `Re-bake failed — rolled back to ${result.fromVersion} (attempted ${result.attemptedToVersion}): ${result.failureReason}.`;
155
+ case "blocked":
156
+ return `GDH self-update blocked — ${result.reason}.`;
157
+ }
158
+ }
159
+ function errorMessageForBumpResult(result) {
160
+ if (result.state === "rolled_back") {
161
+ return result.failureReason;
162
+ }
163
+ if (result.state === "blocked") {
164
+ return result.reason;
165
+ }
166
+ return undefined;
167
+ }
168
+ function artifactsForBumpResult(result, dryRun) {
169
+ if (result.state !== "updated" || dryRun) {
170
+ return [];
171
+ }
172
+ return result.actions
173
+ .map((action) => action.relativePath ?? "")
174
+ .filter((relativePath) => relativePath.length > 0);
175
+ }
176
+ /**
177
+ * D-18 non-blocking session-event emission. Mirrors the bridge_status
178
+ * try/catch pattern at packages/cli/src/index.ts:2000–2017. The underlying
179
+ * {@link recordSessionEvent} already swallows observability failures, but we
180
+ * wrap with an additional try/catch so the CLI exit code is never altered by
181
+ * anything the observability pipeline raises — including synchronous throws
182
+ * between the call boundary and the inner try.
183
+ */
184
+ async function safeRecordSessionEvent(targetPath, partial) {
185
+ try {
186
+ // exactOptionalPropertyTypes: only include optional keys when set — passing
187
+ // `errorMessage: undefined` / `producedArtifacts: undefined` is a type error.
188
+ const event = {
189
+ commandStartedAtMs: partial.commandStartedAtMs,
190
+ kind: "self_update",
191
+ command: "gdh self-update",
192
+ state: partial.state,
193
+ summary: partial.summary,
194
+ ...(partial.producedArtifacts !== undefined
195
+ ? { producedArtifacts: partial.producedArtifacts }
196
+ : {}),
197
+ ...(partial.errorMessage !== undefined
198
+ ? { errorMessage: partial.errorMessage }
199
+ : {}),
200
+ };
201
+ await recordSessionEvent(targetPath, event);
202
+ }
203
+ catch {
204
+ // Session event writes MUST NOT fail the primary command (D-18).
205
+ }
206
+ }
207
+ /**
208
+ * D-17 stderr one-liner. ANSI color only when stderr.isTTY is truthy.
209
+ * `noop` and `skipped_dev_mode` are always plain — per design they are
210
+ * normal/expected states, not warnings.
211
+ */
212
+ function emitSelfUpdateStderrSummary(io, result) {
213
+ const tty = Boolean(io.stderr.isTTY ?? process.stderr.isTTY);
214
+ const color = (ansi, core) => tty ? `${ansi}${core}\x1b[0m` : core;
215
+ let line;
216
+ switch (result.state) {
217
+ case "updated":
218
+ line = color("\x1b[32m", `⬆ GDH updated ${result.fromVersion} → ${result.toVersion} (${result.actions.length} surfaces re-baked).`);
219
+ break;
220
+ case "noop":
221
+ line = `= GDH already at ${result.currentVersion} (no changes).`;
222
+ break;
223
+ case "skipped_dev_mode":
224
+ line = `⊘ GDH self-update skipped — dev mode (GDH_DEV_REPO=${result.devRepoPath}).`;
225
+ break;
226
+ case "rolled_back":
227
+ line = color("\x1b[31m", `↩ GDH self-update rolled back to ${result.fromVersion} — re-bake failed: ${result.failureReason}.`);
228
+ break;
229
+ case "blocked":
230
+ line = color("\x1b[31m", `✗ GDH self-update blocked — ${result.reason}.`);
231
+ break;
232
+ }
233
+ io.stderr.write(`${line}\n`);
234
+ }
235
+ //# sourceMappingURL=self-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../src/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,GAExB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAEL,qBAAqB,EACrB,2BAA2B,EAC3B,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,UAAU,GACd,kEAAkE,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAuB,EACvB,EAAS;IAET,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,KAAK,CACb;YACE,gEAAgE;YAChE,EAAE;YACF,+EAA+E;YAC/E,yEAAyE;YACzE,EAAE;YACF,QAAQ;YACR,+DAA+D;YAC/D,wDAAwD;YACxD,EAAE;YACF,6HAA6H;SAC9H,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACpB,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,uBAAuB,GAAG,2BAA2B,CAAC,IAAI,EAAE;QAChE,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,CAAC,WAAW,CAAC;QAC7B,iBAAiB,EAAE,CAAC,UAAU,CAAC;KAChC,CAAC,CAAC;IACH,IAAI,uBAAuB,KAAK,IAAI,EAAE,CAAC;QACrC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,2EAA2E;IAC3E,kEAAkE;IAClE,MAAM,cAAc,GAAG,qBAAqB,CAC1C,IAAI,EACJ,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CACnC,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,MAAM,CAAC,KAAK,CACb,wEAAwE,CACzE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAClD,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,cAAc,IAAI,GAAG,CAAC;IACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,wEAAwE;QACxE,sEAAsE;QACtE,uDAAuD;QACvD,IAAI,cAAc,GAAyC,IAAI,CAAC;QAChE,IAAI,aAAqB,CAAC;QAC1B,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,aAAa,GAAG,eAAe,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,MAAM,uBAAuB,EAAE,CAAC;YACjD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,iDAAiD,CAAC;gBACjE,MAAM,aAAa,GAA2B;oBAC5C,KAAK,EAAE,SAAS;oBAChB,MAAM;iBACP,CAAC;gBACF,kEAAkE;gBAClE,2BAA2B,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;gBAC/C,eAAe,CAAC,EAAE,EAAE;oBAClB,OAAO,EAAE,iBAAiB;oBAC1B,UAAU;oBACV,MAAM;oBACN,MAAM,EAAE,aAAa;iBACtB,CAAC,CAAC;gBACH,MAAM,sBAAsB,CAAC,UAAU,EAAE;oBACvC,kBAAkB;oBAClB,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,6BAA6B,MAAM,EAAE;oBAC9C,YAAY,EAAE,MAAM;iBACrB,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC;YACX,CAAC;YACD,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC;YACvC,IAAI,cAAc,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,IAAI,cAAc,CAAC;gBACvD,EAAE,CAAC,MAAM,CAAC,KAAK,CACb,8BAA8B,GAAG,4BAA4B,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE;YAChD,aAAa;YACb,MAAM;SACP,CAAC,CAAC;QAEH,8DAA8D;QAC9D,2BAA2B,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,eAAe,CAAC,EAAE,EAAE;YAClB,OAAO,EAAE,iBAAiB;YAC1B,UAAU;YACV,MAAM;YACN,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,sBAAsB,CAAC,UAAU,EAAE;YACvC,kBAAkB;YAClB,KAAK,EAAE,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7C,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC;YACpC,YAAY,EAAE,yBAAyB,CAAC,MAAM,CAAC;YAC/C,iBAAiB,EAAE,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC;SAC1D,CAAC,CAAC;QAEH,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,EAAE,CAAC,MAAM,CAAC,KAAK,CACb,0BAA0B,UAAU,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,CACpE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,wEAAwE;AACxE,SAAS,gBAAgB,CAAC,KAAsC;IAC9D,OAAO,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,0EAA0E;AAC1E,SAAS,wBAAwB,CAC/B,KAAsC;IAEtC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,kBAAkB,EAAE,CAAC;QAC5E,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,wEAAwE;AACxE,SAAS,mBAAmB,CAAC,MAA8B;IACzD,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,oBAAoB,MAAM,CAAC,WAAW,OAAO,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,sBAAsB,CAAC;QACvH,KAAK,MAAM;YACT,OAAO,kBAAkB,MAAM,CAAC,cAAc,gBAAgB,CAAC;QACjE,KAAK,kBAAkB;YACrB,OAAO,oDAAoD,MAAM,CAAC,WAAW,IAAI,CAAC;QACpF,KAAK,aAAa;YAChB,OAAO,mCAAmC,MAAM,CAAC,WAAW,eAAe,MAAM,CAAC,kBAAkB,MAAM,MAAM,CAAC,aAAa,GAAG,CAAC;QACpI,KAAK,SAAS;YACZ,OAAO,6BAA6B,MAAM,CAAC,MAAM,GAAG,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,MAA8B;IAE9B,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,aAAa,CAAC;IAC9B,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAA8B,EAC9B,MAAe;IAEf,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,EAAE,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,OAAO;SAClB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;SAC1C,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,sBAAsB,CACnC,UAAkB,EAClB,OAMC;IAED,IAAI,CAAC;QACH,4EAA4E;QAC5E,8EAA8E;QAC9E,MAAM,KAAK,GAA6C;YACtD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,iBAAiB;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;gBACzC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE;gBAClD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS;gBACpC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE;gBACxC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,MAAM,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,2BAA2B,CAClC,EAKC,EACD,MAA8B;IAE9B,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CACnD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,IAAI,IAAY,CAAC;IACjB,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,IAAI,GAAG,KAAK,CACV,UAAU,EACV,iBAAiB,MAAM,CAAC,WAAW,MAAM,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,sBAAsB,CAC1G,CAAC;YACF,MAAM;QACR,KAAK,MAAM;YACT,IAAI,GAAG,oBAAoB,MAAM,CAAC,cAAc,gBAAgB,CAAC;YACjE,MAAM;QACR,KAAK,kBAAkB;YACrB,IAAI,GAAG,sDAAsD,MAAM,CAAC,WAAW,IAAI,CAAC;YACpF,MAAM;QACR,KAAK,aAAa;YAChB,IAAI,GAAG,KAAK,CACV,UAAU,EACV,oCAAoC,MAAM,CAAC,WAAW,sBAAsB,MAAM,CAAC,aAAa,GAAG,CACpG,CAAC;YACF,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,GAAG,KAAK,CACV,UAAU,EACV,+BAA+B,MAAM,CAAC,MAAM,GAAG,CAChD,CAAC;YACF,MAAM;IACV,CAAC;IACD,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * UPD-04 CLI update banner (Phase 11 D-11/D-12/D-13/D-14).
3
+ *
4
+ * Emits a yellow-when-TTY, plain-when-piped banner to stderr ONLY when the
5
+ * shared `~/.cache/gdh/update-check.json` cache reports that pinned lags npm
6
+ * latest. Silent when the cache is empty, current, offline, or the caller is
7
+ * in dev-mode — D-06 silent-degrade is total. `readGdhUpdateMetaOrNull`
8
+ * owns all of that logic; this module just renders the banner and writes it.
9
+ *
10
+ * Scope is strictly D-13: only wired into `runStatusCommand` and
11
+ * `runVerifyCommand`. Every other CLI command stays banner-free.
12
+ */
13
+ interface StderrLike {
14
+ write(data: string): boolean | void;
15
+ isTTY?: boolean;
16
+ }
17
+ export interface BannerIo {
18
+ readonly stderr: StderrLike;
19
+ }
20
+ /**
21
+ * Pure formatter — deterministic output with no I/O. Colored form wraps the
22
+ * body in ANSI-yellow + reset. The hint literal comes from
23
+ * `GDH_UPDATE_REMEDIATION_HINT` (D-14 single source of truth, shared with
24
+ * the MCP `_meta.hint` field emitted by Plan 04).
25
+ */
26
+ export declare function formatGdhUpdateBanner(meta: {
27
+ readonly pinned: string;
28
+ readonly latest: string;
29
+ }, colored: boolean): string;
30
+ /**
31
+ * Read the shared update-check cache through `@gdh/core` and — only when the
32
+ * cache signals a stale pin — write a single banner line to `io.stderr`. The
33
+ * helper NEVER throws (D-06): any failure reading the cache, resolving live
34
+ * pinned version, or writing the banner surfaces as silence. JSON stdout of
35
+ * the caller is never touched.
36
+ *
37
+ * Call this BEFORE the primary-work dispatch so the stderr prelude precedes
38
+ * any stdout JSON emitted by the command.
39
+ */
40
+ export declare function emitUpdateBannerIfStale(targetPath: string, io: BannerIo): Promise<void>;
41
+ export {};
42
+ //# sourceMappingURL=update-banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-banner.d.ts","sourceRoot":"","sources":["../src/update-banner.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AAEH,UAAU,UAAU;IAClB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAYD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC1D,OAAO,EAAE,OAAO,GACf,MAAM,CAGR;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,QAAQ,GACX,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -0,0 +1,49 @@
1
+ import { GDH_UPDATE_REMEDIATION_HINT, readGdhUpdateMetaOrNull, } from "@gdh/core";
2
+ const ANSI_YELLOW = "\x1b[33m";
3
+ const ANSI_RESET = "\x1b[0m";
4
+ function isStderrTty(stream) {
5
+ if (typeof stream.isTTY === "boolean") {
6
+ return stream.isTTY;
7
+ }
8
+ return Boolean(process.stderr.isTTY);
9
+ }
10
+ /**
11
+ * Pure formatter — deterministic output with no I/O. Colored form wraps the
12
+ * body in ANSI-yellow + reset. The hint literal comes from
13
+ * `GDH_UPDATE_REMEDIATION_HINT` (D-14 single source of truth, shared with
14
+ * the MCP `_meta.hint` field emitted by Plan 04).
15
+ */
16
+ export function formatGdhUpdateBanner(meta, colored) {
17
+ const core = `⬆ GDH ${meta.latest} available (pinned ${meta.pinned}). ${GDH_UPDATE_REMEDIATION_HINT}`;
18
+ return colored ? `${ANSI_YELLOW}${core}${ANSI_RESET}\n` : `${core}\n`;
19
+ }
20
+ /**
21
+ * Read the shared update-check cache through `@gdh/core` and — only when the
22
+ * cache signals a stale pin — write a single banner line to `io.stderr`. The
23
+ * helper NEVER throws (D-06): any failure reading the cache, resolving live
24
+ * pinned version, or writing the banner surfaces as silence. JSON stdout of
25
+ * the caller is never touched.
26
+ *
27
+ * Call this BEFORE the primary-work dispatch so the stderr prelude precedes
28
+ * any stdout JSON emitted by the command.
29
+ */
30
+ export async function emitUpdateBannerIfStale(targetPath, io) {
31
+ let meta;
32
+ try {
33
+ meta = await readGdhUpdateMetaOrNull(targetPath);
34
+ }
35
+ catch {
36
+ meta = null;
37
+ }
38
+ if (meta === null) {
39
+ return;
40
+ }
41
+ const colored = isStderrTty(io.stderr);
42
+ try {
43
+ io.stderr.write(formatGdhUpdateBanner(meta, colored));
44
+ }
45
+ catch {
46
+ // D-06: banner writes never surface failures to the user.
47
+ }
48
+ }
49
+ //# sourceMappingURL=update-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-banner.js","sourceRoot":"","sources":["../src/update-banner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,WAAW,CAAC;AAwBnB,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,UAAU,GAAG,SAAS,CAAC;AAE7B,SAAS,WAAW,CAAC,MAAkB;IACrC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA0D,EAC1D,OAAgB;IAEhB,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,MAAM,sBAAsB,IAAI,CAAC,MAAM,MAAM,2BAA2B,EAAE,CAAC;IACtG,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;AACxE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,EAAY;IAEZ,IAAI,IAAyD,CAAC;IAC9D,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;AACH,CAAC"}
@@ -15,16 +15,16 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@clack/prompts": "^1.2.0",
18
- "@gdh/adapters": "0.5.0",
19
- "@gdh/authoring": "0.5.0",
20
- "@gdh/core": "0.5.0",
21
- "@gdh/docs": "0.5.0",
22
- "@gdh/mcp": "0.5.0",
23
- "@gdh/observability": "0.5.0",
24
- "@gdh/runtime": "0.5.0",
25
- "@gdh/scan": "0.5.0",
26
- "@gdh/verify": "0.5.0",
18
+ "@gdh/adapters": "0.6.0",
19
+ "@gdh/authoring": "0.6.0",
20
+ "@gdh/core": "0.6.0",
21
+ "@gdh/docs": "0.6.0",
22
+ "@gdh/mcp": "0.6.0",
23
+ "@gdh/observability": "0.6.0",
24
+ "@gdh/runtime": "0.6.0",
25
+ "@gdh/scan": "0.6.0",
26
+ "@gdh/verify": "0.6.0",
27
27
  "picocolors": "^1.1.1"
28
28
  },
29
- "version": "0.5.0"
29
+ "version": "0.6.0"
30
30
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Phase 11: canonical dev-mode signal resolution. Mirrors the merge-order
3
+ * established at `packages/adapters/src/index.ts:1517` and the baked launcher
4
+ * at `packages/adapters/src/index.ts:2795-2796`: env var `GDH_DEV_REPO` wins
5
+ * over the persisted `gdhDevRepoPath` hint in `.gdh-state/local-paths.json`.
6
+ *
7
+ * When this helper returns a truthy string, callers MUST treat the target as
8
+ * a contributor / dev-from-source setup and skip every probe / cache write /
9
+ * banner / `_meta` injection. Contributors are never spammed with update
10
+ * signals about the repo they're actively editing (SELF-03).
11
+ */
12
+ export declare function resolveEffectiveDevRepoPath(targetPath: string): Promise<string | null>;
13
+ //# sourceMappingURL=dev-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-mode.d.ts","sourceRoot":"","sources":["../src/dev-mode.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB"}
@@ -0,0 +1,21 @@
1
+ import { readGdhLocalPathHints } from "./local-path-hints.js";
2
+ /**
3
+ * Phase 11: canonical dev-mode signal resolution. Mirrors the merge-order
4
+ * established at `packages/adapters/src/index.ts:1517` and the baked launcher
5
+ * at `packages/adapters/src/index.ts:2795-2796`: env var `GDH_DEV_REPO` wins
6
+ * over the persisted `gdhDevRepoPath` hint in `.gdh-state/local-paths.json`.
7
+ *
8
+ * When this helper returns a truthy string, callers MUST treat the target as
9
+ * a contributor / dev-from-source setup and skip every probe / cache write /
10
+ * banner / `_meta` injection. Contributors are never spammed with update
11
+ * signals about the repo they're actively editing (SELF-03).
12
+ */
13
+ export async function resolveEffectiveDevRepoPath(targetPath) {
14
+ const envDevRepoPath = process.env["GDH_DEV_REPO"]?.trim() || null;
15
+ if (envDevRepoPath) {
16
+ return envDevRepoPath;
17
+ }
18
+ const hints = await readGdhLocalPathHints(targetPath);
19
+ return hints.gdhDevRepoPath;
20
+ }
21
+ //# sourceMappingURL=dev-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-mode.js","sourceRoot":"","sources":["../src/dev-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,UAAkB;IAElB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACnE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,cAAc,CAAC;AAC9B,CAAC"}
@@ -15,6 +15,7 @@ export declare const GDH_AUTHORING_SLICE_REPORT_VERSION = 1;
15
15
  export declare const GDH_MCP_MANIFEST_VERSION = 1;
16
16
  export declare const GDH_CURSOR_RULE_VERSION = 1;
17
17
  export declare const GDH_MCP_LAUNCHER_VERSION = 2;
18
+ export declare const GDH_UPDATE_HOOK_VERSION = 1;
18
19
  export declare const GDH_RUNTIME_RECIPE_RUN_VERSION = 1;
19
20
  export declare const GDH_RUNTIME_RUN_BUNDLE_VERSION = 1;
20
21
  export declare const GDH_RUNTIME_CORPUS_ARTIFACT_VERSION = 1;
@@ -23,7 +24,7 @@ export type GdhProductReleaseStage = "targeted_internal_use" | "broader_internal
23
24
  export type GdhCurrentInstallMode = "development_checkout" | "packaged_install";
24
25
  export type GdhProductCompatibilityState = "compatible" | "migration_available" | "migration_needed" | "migration_blocked" | "compatibility_degraded";
25
26
  export type GdhProductVersionSource = "root_package_json";
26
- export type GdhManagedProjectSurfaceId = "project_config" | "run_configuration_schema" | "verification_scenario_schema" | "rules_schema" | "agent_contract" | "guidance_index" | "guidance_unit" | "mcp_manifest" | "cursor_rule" | "mcp_launcher" | "runtime_bridge_surface";
27
+ export type GdhManagedProjectSurfaceId = "project_config" | "run_configuration_schema" | "verification_scenario_schema" | "rules_schema" | "agent_contract" | "guidance_index" | "guidance_unit" | "mcp_manifest" | "cursor_rule" | "mcp_launcher" | "runtime_bridge_surface" | "update_hook";
27
28
  export type GdhProjectLifecycleSurfaceManagement = "project_owned" | "managed" | "merge_managed";
28
29
  export type GdhProjectLifecycleActionKind = "apply_migration" | "run_repair" | "manual_review";
29
30
  export interface GdhProjectLifecycleActionHint {
@@ -317,7 +318,7 @@ export interface GdhGuidanceStatusView {
317
318
  readonly guidance: GdhGuidanceStatusResult;
318
319
  readonly audit: GdhGuidanceAuditInspectionResult;
319
320
  }
320
- export type GdhAuthoringSessionEventKind = "onboard" | "status" | "scan" | "bridge_status" | "bridge_install" | "bridge_repair" | "bridge_remove" | "authoring_check" | "target_prepare" | "imports_refresh" | "recipe_list" | "recipe_show" | "recipe_check" | "recipe_run" | "scenario_list" | "scenario_show" | "verify_run" | "verify_inspect" | "verify_readiness" | "verify_drift" | "guidance_status" | "guidance_resolve" | "guidance_audit" | "verify_recommend" | "verify_done";
321
+ export type GdhAuthoringSessionEventKind = "onboard" | "status" | "scan" | "bridge_status" | "bridge_install" | "bridge_repair" | "bridge_remove" | "authoring_check" | "target_prepare" | "imports_refresh" | "recipe_list" | "recipe_show" | "recipe_check" | "recipe_run" | "scenario_list" | "scenario_show" | "verify_run" | "verify_inspect" | "verify_readiness" | "verify_drift" | "guidance_status" | "guidance_resolve" | "guidance_audit" | "verify_recommend" | "verify_done" | "self_update";
321
322
  export type GdhAuthoringSessionEventState = "succeeded" | "blocked" | "failed";
322
323
  export interface GdhAuthoringSessionGuidanceSnapshot {
323
324
  readonly effectiveRepoState: readonly string[];
@@ -1637,4 +1638,9 @@ export declare const corePackage: GdhPackageBoundary;
1637
1638
  export * from "./godot-docs-version.js";
1638
1639
  export * from "./local-path-hints.js";
1639
1640
  export * from "./official-docs.js";
1641
+ export { GDH_UPDATE_CACHE_RELATIVE_PATH, readGdhUpdateCache, resolveGdhUpdateCacheDir, resolveGdhUpdateCachePath, writeGdhUpdateCache, } from "./update-cache.js";
1642
+ export type { UpdateCheckCacheEntry } from "./update-cache.js";
1643
+ export { resolveEffectiveDevRepoPath } from "./dev-mode.js";
1644
+ export { GDH_UPDATE_REGISTRY_URL, GDH_UPDATE_REMEDIATION_HINT, fetchNpmLatestForGdh, isNewerGdhVersion, readGdhUpdateMetaOrNull, resolveNpmLatestVersion, runGdhUpdateProbe, } from "./update-probe.js";
1645
+ export type { GdhUpdateMeta, ReadGdhUpdateMetaOptions, ResolveNpmLatestVersionResult, RunGdhUpdateProbeOptions, } from "./update-probe.js";
1640
1646
  //# sourceMappingURL=index.d.ts.map