@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.
- package/INSTALL-BUNDLE.json +1 -1
- package/README.md +53 -90
- package/node_modules/@gdh/adapters/dist/claude-settings-patch.d.ts +74 -0
- package/node_modules/@gdh/adapters/dist/claude-settings-patch.d.ts.map +1 -0
- package/node_modules/@gdh/adapters/dist/claude-settings-patch.js +158 -0
- package/node_modules/@gdh/adapters/dist/claude-settings-patch.js.map +1 -0
- package/node_modules/@gdh/adapters/dist/claude-statusline-render.d.ts +51 -0
- package/node_modules/@gdh/adapters/dist/claude-statusline-render.d.ts.map +1 -0
- package/node_modules/@gdh/adapters/dist/claude-statusline-render.js +80 -0
- package/node_modules/@gdh/adapters/dist/claude-statusline-render.js.map +1 -0
- package/node_modules/@gdh/adapters/dist/claude-update-hook-render.d.ts +35 -0
- package/node_modules/@gdh/adapters/dist/claude-update-hook-render.d.ts.map +1 -0
- package/node_modules/@gdh/adapters/dist/claude-update-hook-render.js +76 -0
- package/node_modules/@gdh/adapters/dist/claude-update-hook-render.js.map +1 -0
- package/node_modules/@gdh/adapters/dist/claude-update-worker-render.d.ts +28 -0
- package/node_modules/@gdh/adapters/dist/claude-update-worker-render.d.ts.map +1 -0
- package/node_modules/@gdh/adapters/dist/claude-update-worker-render.js +99 -0
- package/node_modules/@gdh/adapters/dist/claude-update-worker-render.js.map +1 -0
- package/node_modules/@gdh/adapters/dist/index.d.ts +9 -0
- package/node_modules/@gdh/adapters/dist/index.d.ts.map +1 -1
- package/node_modules/@gdh/adapters/dist/index.js +224 -2
- package/node_modules/@gdh/adapters/dist/index.js.map +1 -1
- package/node_modules/@gdh/adapters/dist/self-update-mechanics.d.ts +51 -0
- package/node_modules/@gdh/adapters/dist/self-update-mechanics.d.ts.map +1 -0
- package/node_modules/@gdh/adapters/dist/self-update-mechanics.js +155 -0
- package/node_modules/@gdh/adapters/dist/self-update-mechanics.js.map +1 -0
- package/node_modules/@gdh/adapters/package.json +8 -8
- package/node_modules/@gdh/authoring/dist/index.d.ts +1 -0
- package/node_modules/@gdh/authoring/dist/index.d.ts.map +1 -1
- package/node_modules/@gdh/authoring/dist/index.js +1 -0
- package/node_modules/@gdh/authoring/dist/index.js.map +1 -1
- package/node_modules/@gdh/authoring/dist/writePinnedVersion.d.ts +17 -0
- package/node_modules/@gdh/authoring/dist/writePinnedVersion.d.ts.map +1 -0
- package/node_modules/@gdh/authoring/dist/writePinnedVersion.js +50 -0
- package/node_modules/@gdh/authoring/dist/writePinnedVersion.js.map +1 -0
- package/node_modules/@gdh/authoring/package.json +5 -2
- package/node_modules/@gdh/cli/dist/index.d.ts +15 -0
- package/node_modules/@gdh/cli/dist/index.d.ts.map +1 -1
- package/node_modules/@gdh/cli/dist/index.js +68 -8
- package/node_modules/@gdh/cli/dist/index.js.map +1 -1
- package/node_modules/@gdh/cli/dist/self-update.d.ts +3 -0
- package/node_modules/@gdh/cli/dist/self-update.d.ts.map +1 -0
- package/node_modules/@gdh/cli/dist/self-update.js +235 -0
- package/node_modules/@gdh/cli/dist/self-update.js.map +1 -0
- package/node_modules/@gdh/cli/dist/update-banner.d.ts +42 -0
- package/node_modules/@gdh/cli/dist/update-banner.d.ts.map +1 -0
- package/node_modules/@gdh/cli/dist/update-banner.js +49 -0
- package/node_modules/@gdh/cli/dist/update-banner.js.map +1 -0
- package/node_modules/@gdh/cli/package.json +10 -10
- package/node_modules/@gdh/core/dist/dev-mode.d.ts +13 -0
- package/node_modules/@gdh/core/dist/dev-mode.d.ts.map +1 -0
- package/node_modules/@gdh/core/dist/dev-mode.js +21 -0
- package/node_modules/@gdh/core/dist/dev-mode.js.map +1 -0
- package/node_modules/@gdh/core/dist/index.d.ts +8 -2
- package/node_modules/@gdh/core/dist/index.d.ts.map +1 -1
- package/node_modules/@gdh/core/dist/index.js +8 -0
- package/node_modules/@gdh/core/dist/index.js.map +1 -1
- package/node_modules/@gdh/core/dist/update-cache.d.ts +46 -0
- package/node_modules/@gdh/core/dist/update-cache.d.ts.map +1 -0
- package/node_modules/@gdh/core/dist/update-cache.js +90 -0
- package/node_modules/@gdh/core/dist/update-cache.js.map +1 -0
- package/node_modules/@gdh/core/dist/update-probe.d.ts +102 -0
- package/node_modules/@gdh/core/dist/update-probe.d.ts.map +1 -0
- package/node_modules/@gdh/core/dist/update-probe.js +195 -0
- package/node_modules/@gdh/core/dist/update-probe.js.map +1 -0
- package/node_modules/@gdh/core/package.json +1 -1
- package/node_modules/@gdh/docs/package.json +2 -2
- package/node_modules/@gdh/mcp/dist/index.d.ts +20 -0
- package/node_modules/@gdh/mcp/dist/index.d.ts.map +1 -1
- package/node_modules/@gdh/mcp/dist/index.js +39 -2
- package/node_modules/@gdh/mcp/dist/index.js.map +1 -1
- package/node_modules/@gdh/mcp/package.json +8 -8
- package/node_modules/@gdh/observability/dist/guidance-audit.js +2 -1
- package/node_modules/@gdh/observability/dist/guidance-audit.js.map +1 -1
- package/node_modules/@gdh/observability/package.json +2 -2
- package/node_modules/@gdh/runtime/package.json +2 -2
- package/node_modules/@gdh/scan/package.json +3 -3
- package/node_modules/@gdh/verify/package.json +7 -7
- 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":"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"}
|
|
@@ -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.
|
|
19
|
-
"@gdh/authoring": "0.
|
|
20
|
-
"@gdh/core": "0.
|
|
21
|
-
"@gdh/docs": "0.
|
|
22
|
-
"@gdh/mcp": "0.
|
|
23
|
-
"@gdh/observability": "0.
|
|
24
|
-
"@gdh/runtime": "0.
|
|
25
|
-
"@gdh/scan": "0.
|
|
26
|
-
"@gdh/verify": "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.
|
|
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
|