@skillcap/gdh 0.25.4 → 0.26.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 (72) hide show
  1. package/INSTALL-BUNDLE.json +1 -1
  2. package/RELEASE-SPAN-UPDATE-CONTRACTS.json +147 -0
  3. package/node_modules/@gdh/adapters/dist/claude-settings-patch.d.ts.map +1 -1
  4. package/node_modules/@gdh/adapters/dist/claude-settings-patch.js +38 -15
  5. package/node_modules/@gdh/adapters/dist/claude-settings-patch.js.map +1 -1
  6. package/node_modules/@gdh/adapters/dist/index.d.ts +12 -0
  7. package/node_modules/@gdh/adapters/dist/index.d.ts.map +1 -1
  8. package/node_modules/@gdh/adapters/dist/index.js +21 -0
  9. package/node_modules/@gdh/adapters/dist/index.js.map +1 -1
  10. package/node_modules/@gdh/adapters/dist/self-update-mechanics.d.ts.map +1 -1
  11. package/node_modules/@gdh/adapters/dist/self-update-mechanics.js +49 -16
  12. package/node_modules/@gdh/adapters/dist/self-update-mechanics.js.map +1 -1
  13. package/node_modules/@gdh/adapters/dist/skill-rendering.d.ts +5 -2
  14. package/node_modules/@gdh/adapters/dist/skill-rendering.d.ts.map +1 -1
  15. package/node_modules/@gdh/adapters/dist/skill-rendering.js +39 -0
  16. package/node_modules/@gdh/adapters/dist/skill-rendering.js.map +1 -1
  17. package/node_modules/@gdh/adapters/dist/templates/authoring-hook.js.tpl +200 -15
  18. package/node_modules/@gdh/adapters/package.json +8 -8
  19. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.d.ts +1 -0
  20. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.d.ts.map +1 -1
  21. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.js +1 -0
  22. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.js.map +1 -1
  23. package/node_modules/@gdh/authoring/dist/diagnostics-broker.d.ts +2 -1
  24. package/node_modules/@gdh/authoring/dist/diagnostics-broker.d.ts.map +1 -1
  25. package/node_modules/@gdh/authoring/dist/diagnostics-broker.js +91 -13
  26. package/node_modules/@gdh/authoring/dist/diagnostics-broker.js.map +1 -1
  27. package/node_modules/@gdh/authoring/dist/index.d.ts +1 -1
  28. package/node_modules/@gdh/authoring/dist/index.d.ts.map +1 -1
  29. package/node_modules/@gdh/authoring/dist/index.js +2 -1
  30. package/node_modules/@gdh/authoring/dist/index.js.map +1 -1
  31. package/node_modules/@gdh/authoring/dist/lsp-warmup.d.ts +30 -0
  32. package/node_modules/@gdh/authoring/dist/lsp-warmup.d.ts.map +1 -0
  33. package/node_modules/@gdh/authoring/dist/lsp-warmup.js +213 -0
  34. package/node_modules/@gdh/authoring/dist/lsp-warmup.js.map +1 -0
  35. package/node_modules/@gdh/authoring/dist/lsp.d.ts +8 -1
  36. package/node_modules/@gdh/authoring/dist/lsp.d.ts.map +1 -1
  37. package/node_modules/@gdh/authoring/dist/lsp.js +256 -104
  38. package/node_modules/@gdh/authoring/dist/lsp.js.map +1 -1
  39. package/node_modules/@gdh/authoring/dist/scene-resource.d.ts.map +1 -1
  40. package/node_modules/@gdh/authoring/dist/scene-resource.js +140 -0
  41. package/node_modules/@gdh/authoring/dist/scene-resource.js.map +1 -1
  42. package/node_modules/@gdh/authoring/package.json +2 -2
  43. package/node_modules/@gdh/cli/dist/index.d.ts.map +1 -1
  44. package/node_modules/@gdh/cli/dist/index.js +75 -10
  45. package/node_modules/@gdh/cli/dist/index.js.map +1 -1
  46. package/node_modules/@gdh/cli/dist/self-update.d.ts.map +1 -1
  47. package/node_modules/@gdh/cli/dist/self-update.js +66 -10
  48. package/node_modules/@gdh/cli/dist/self-update.js.map +1 -1
  49. package/node_modules/@gdh/cli/package.json +10 -10
  50. package/node_modules/@gdh/core/dist/index.d.ts +178 -6
  51. package/node_modules/@gdh/core/dist/index.d.ts.map +1 -1
  52. package/node_modules/@gdh/core/dist/index.js +44 -4
  53. package/node_modules/@gdh/core/dist/index.js.map +1 -1
  54. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.d.ts +15 -0
  55. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.d.ts.map +1 -1
  56. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.js +18 -0
  57. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.js.map +1 -1
  58. package/node_modules/@gdh/core/dist/migrations/managed-target-surface-inventory.d.ts.map +1 -1
  59. package/node_modules/@gdh/core/dist/migrations/managed-target-surface-inventory.js +2 -0
  60. package/node_modules/@gdh/core/dist/migrations/managed-target-surface-inventory.js.map +1 -1
  61. package/node_modules/@gdh/core/package.json +1 -1
  62. package/node_modules/@gdh/docs/dist/templates/guidance/authoring-and-validation.md.tpl +4 -5
  63. package/node_modules/@gdh/docs/package.json +2 -2
  64. package/node_modules/@gdh/mcp/dist/index.d.ts.map +1 -1
  65. package/node_modules/@gdh/mcp/dist/index.js +30 -1
  66. package/node_modules/@gdh/mcp/dist/index.js.map +1 -1
  67. package/node_modules/@gdh/mcp/package.json +8 -8
  68. package/node_modules/@gdh/observability/package.json +2 -2
  69. package/node_modules/@gdh/runtime/package.json +2 -2
  70. package/node_modules/@gdh/scan/package.json +3 -3
  71. package/node_modules/@gdh/verify/package.json +7 -7
  72. package/package.json +11 -11
@@ -5,7 +5,7 @@ import os from "node:os";
5
5
  import path from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { buildGdhStatusResult, CLAUDE_CHECK_UPDATE_HOOK_RELATIVE_PATH, CLAUDE_MIGRATE_SKILL_RELATIVE_PATH, CLAUDE_ONBOARD_SKILL_RELATIVE_PATH, CLAUDE_PREPARE_SKILL_RELATIVE_PATH, CLAUDE_SCAN_SKILL_RELATIVE_PATH, CLAUDE_STATUS_SKILL_RELATIVE_PATH, CODEX_MIGRATE_SKILL_RELATIVE_PATH, CODEX_ONBOARD_SKILL_RELATIVE_PATH, CODEX_PREPARE_SKILL_RELATIVE_PATH, CODEX_SCAN_SKILL_RELATIVE_PATH, CODEX_STATUS_SKILL_RELATIVE_PATH, CURSOR_MIGRATE_COMMAND_RELATIVE_PATH, CURSOR_ONBOARD_COMMAND_RELATIVE_PATH, CURSOR_PREPARE_COMMAND_RELATIVE_PATH, CURSOR_SCAN_COMMAND_RELATIVE_PATH, CURSOR_STATUS_COMMAND_RELATIVE_PATH, createGsdSnapshot, getSupportedAgentAdaptersStatus, installSupportedAgentAdapters, } from "@gdh/adapters";
8
- import { checkManagedLsp, doctorAuthoringDiagnostics, doctorManagedLsp, getAuthoringDiagnosticsStatus, getCurrentAuthoringDiagnostics, getManagedLspStatus, hasCompleteOnboardingSurface, inspectCacheState, pruneCacheState, pruneAuthoringDiagnostics, pruneManagedLsp, readProjectConfig, readWorktreeState, refreshAuthoringDiagnostics, resolveAuthoringStatus, resolveEffectiveTargetPath, resolvePinnedVersion, resolveProjectRoot, resolveTargetGodotDocsVersion, restartManagedLsp, runAuthoringCheck, runImportRefresh, runTargetPrepare, runWarmup, stopManagedLsp, } from "@gdh/authoring";
8
+ import { checkManagedLsp, doctorAuthoringDiagnostics, doctorManagedLsp, getAuthoringDiagnosticsStatus, getCurrentAuthoringDiagnostics, getManagedLspStatus, hasCompleteOnboardingSurface, inspectCacheState, pruneCacheState, pruneAuthoringDiagnostics, pruneManagedLsp, readProjectConfig, readWorktreeState, refreshAuthoringDiagnostics, resolveAuthoringStatus, resolveEffectiveTargetPath, resolvePinnedVersion, resolveProjectRoot, resolveTargetGodotDocsVersion, restartManagedLsp, runAuthoringCheck, runImportRefresh, runTargetPrepare, runWarmup, stopManagedLsp, warmupManagedLsp, } from "@gdh/authoring";
9
9
  import { definePackageBoundary, GDH_AUTHORING_DOGFOOD_VERSION, GDH_AUTHORING_SLICE_REPORT_VERSION, GDH_PRODUCT_NAME, resolveCurrentGdhInstall, resolveGdhProductMetadata, } from "@gdh/core";
10
10
  import { fetchOfficialGodotDoc, getGuidanceStatus, resolveGuidanceQuery, searchOfficialGodotDocs, } from "@gdh/docs";
11
11
  import { createMcpManifest, invokeMcpTool, serveMcpOverStdio } from "@gdh/mcp";
@@ -713,6 +713,7 @@ async function runLspCommand(args, io) {
713
713
  "",
714
714
  "Commands:",
715
715
  " status [target] Resolve the managed authoring.lsp lifecycle state and print it as JSON.",
716
+ " warmup [target] Warm up the managed Godot LSP behind the scenes (idempotent: returns started | warming | already_warm | blocked).",
716
717
  " check [target] Check the persisted managed LSP instance without launching a new one.",
717
718
  " stop [target] Stop the persisted GDH-managed LSP instance for this worktree.",
718
719
  " restart [target] Stop and relaunch the managed LSP instance for this worktree.",
@@ -724,6 +725,9 @@ async function runLspCommand(args, io) {
724
725
  if (subcommand === "status") {
725
726
  return runLspStatusCommand(rest, io);
726
727
  }
728
+ if (subcommand === "warmup") {
729
+ return runLspWarmupCommand(rest, io);
730
+ }
727
731
  if (subcommand === "check" ||
728
732
  subcommand === "stop" ||
729
733
  subcommand === "restart" ||
@@ -731,7 +735,7 @@ async function runLspCommand(args, io) {
731
735
  subcommand === "doctor") {
732
736
  return runLspLifecycleCommand(subcommand, rest, io);
733
737
  }
734
- io.stderr.write(`Unknown lsp command: ${subcommand}\n\nUsage: gdh lsp <status|check|stop|restart|prune|doctor> [target]\n`);
738
+ io.stderr.write(`Unknown lsp command: ${subcommand}\n\nUsage: gdh lsp <status|warmup|check|stop|restart|prune|doctor> [target]\n`);
735
739
  return 1;
736
740
  }
737
741
  async function runDocsCommand(args, io) {
@@ -1116,17 +1120,26 @@ function formatAuthoringCheckCommand(input) {
1116
1120
  function formatCompactAuthoringCheckResult(result) {
1117
1121
  const lines = result.diagnostics.map((diagnostic) => {
1118
1122
  const pathPart = diagnostic.path === null ? "<unknown>" : `res://${diagnostic.path}`;
1119
- const line = diagnostic.line === null ? "" : `:${diagnostic.line + 1}`;
1120
- const column = diagnostic.column === null ? "" : `:${diagnostic.column + 1}`;
1123
+ const line = diagnostic.line === null ? "" : `:${diagnostic.line}`;
1124
+ const column = diagnostic.column === null ? "" : `:${diagnostic.column}`;
1121
1125
  return `${pathPart}${line}${column} [${diagnostic.severity}] ${diagnostic.message}`;
1122
1126
  });
1123
1127
  const summary = result.blockingSummary;
1124
- const outcome = summary.state === "blocked"
1125
- ? "Completion blocked."
1128
+ // Phase 81 / LSP-06 / D-01, D-03: bracketed-token compact-output vocabulary.
1129
+ // Mapping (locked from CONTEXT.md "Claude's Discretion"):
1130
+ // "allowed" -> "fresh" (no blocking errors, all files checked)
1131
+ // "blocked" -> "failed" (blocking errors present)
1132
+ // "unconfirmed" -> "pending" (could not prove this edit; warmup or scope-limited)
1133
+ // Other status tokens ("partial", "stale", "timeout") enter the vocabulary
1134
+ // via the hook template (timedOut branch) and via upstream broker paths
1135
+ // that produce non-GdhAuthoringCompletionState results — not via this
1136
+ // compact formatter, which only sees allowed | blocked | unconfirmed.
1137
+ const statusToken = summary.state === "blocked"
1138
+ ? "failed"
1126
1139
  : summary.state === "unconfirmed"
1127
- ? "Completion unconfirmed."
1128
- : "Completion allowed.";
1129
- lines.push(`${summary.errorCount} errors, ${summary.warningCount} warnings, ${summary.infoCount} info. ${outcome}`);
1140
+ ? "pending"
1141
+ : "fresh";
1142
+ lines.push(`[${statusToken}] ${summary.errorCount} errors, ${summary.warningCount} warnings, ${summary.infoCount} info.`);
1130
1143
  if (summary.reasons.length > 0) {
1131
1144
  lines.push(`Reasons: ${summary.reasons.join(", ")}`);
1132
1145
  }
@@ -1159,7 +1172,17 @@ async function runLspStatusCommand(args, io) {
1159
1172
  projectConfig: context.projectConfig,
1160
1173
  owner: "gdh lsp status",
1161
1174
  });
1175
+ // Phase 81 / LSP-08 / D-16: JSON pass-through includes versionFloorAdvisory
1176
+ // as a structured field when non-null (set by Plan 04 on unavailable results
1177
+ // with reason godot_editor_version_unsupported_for_lsp).
1162
1178
  io.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
1179
+ // Human-readable version-floor advisory (D-16): printed after JSON when present.
1180
+ if (result.versionFloorAdvisory != null) {
1181
+ const advisory = result.versionFloorAdvisory;
1182
+ const detected = advisory.detectedVersion ?? "unknown";
1183
+ const recommended = advisory.recommendedVersions.join(" or ");
1184
+ io.stdout.write(`Configured Godot binary ${detected} is below the managed-LSP floor (>= ${advisory.minimumVersion}); recommended: ${recommended}.\n`);
1185
+ }
1163
1186
  return 0;
1164
1187
  }
1165
1188
  catch (error) {
@@ -1167,6 +1190,48 @@ async function runLspStatusCommand(args, io) {
1167
1190
  return 1;
1168
1191
  }
1169
1192
  }
1193
+ async function runLspWarmupCommand(args, io) {
1194
+ if (args.includes("--help")) {
1195
+ io.stdout.write([
1196
+ "Usage: gdh lsp warmup [target]",
1197
+ "Usage: gdh lsp warmup --target <path>",
1198
+ "",
1199
+ "Idempotently warm up the managed Godot LSP for the target so subsequent",
1200
+ "post-edit authoring checks return fast diagnostics. Prints a JSON",
1201
+ "GdhAuthoringLspWarmupResult with status: started | warming | already_warm",
1202
+ "| blocked. All four statuses exit 0; --help and argument errors exit 1.",
1203
+ "",
1204
+ "This verb is what the post-edit hook detaches via child_process.spawn(...,",
1205
+ "{ detached: true, stdio: 'ignore' }).unref() so the agent does not pay",
1206
+ "Godot-startup latency on the cold-start edit (Phase 82 / LSP-02).",
1207
+ ].join("\n") + "\n");
1208
+ return 0;
1209
+ }
1210
+ const parsedTarget = parseSingleTargetPathArg(args, {
1211
+ usage: "Usage: gdh lsp warmup [target]\nUsage: gdh lsp warmup --target <path>\n",
1212
+ allowTargetOption: true,
1213
+ });
1214
+ if (parsedTarget.error !== null) {
1215
+ io.stderr.write(parsedTarget.error);
1216
+ return 1;
1217
+ }
1218
+ const targetPath = parsedTarget.targetPath;
1219
+ try {
1220
+ const context = await buildAuthoringContext(targetPath);
1221
+ const result = await warmupManagedLsp({
1222
+ targetPath: context.targetPath,
1223
+ status: context.status,
1224
+ projectConfig: context.projectConfig,
1225
+ owner: "gdh lsp warmup",
1226
+ });
1227
+ io.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
1228
+ return 0;
1229
+ }
1230
+ catch (error) {
1231
+ io.stderr.write(`Failed to warm up managed LSP for "${targetPath}": ${formatCliError(error)}\n`);
1232
+ return 1;
1233
+ }
1234
+ }
1170
1235
  async function runLspLifecycleCommand(command, args, io) {
1171
1236
  if (args.includes("--help")) {
1172
1237
  io.stdout.write([
@@ -4404,7 +4469,7 @@ function renderHelp() {
4404
4469
  " adapters gsd snapshot [target] [--files <path>] Export a read-only GSD projection.",
4405
4470
  " authoring check [target] Run the current authoring-check entrypoint.",
4406
4471
  " authoring diagnostics <status|current|refresh|doctor|prune> [target] Inspect current Godot authoring diagnostics snapshots.",
4407
- " lsp <status|check|stop|restart|prune|doctor> [target] Manage authoring.lsp lifecycle state.",
4472
+ " lsp <status|warmup|check|stop|restart|prune|doctor> [target] Manage authoring.lsp lifecycle state.",
4408
4473
  " warmup [target] [--dry-run] Inspect or apply authoring worktree warmup.",
4409
4474
  " target prepare [target] [--source-target <path>] [--dry-run] Prepare target-local generated/import state.",
4410
4475
  " imports refresh [target] [--dry-run] Run or plan a headless Godot import refresh.",