@harness-forge/cli 1.1.1 → 1.2.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 (109) hide show
  1. package/.agents/skills/recursive-structured-analysis/SKILL.md +26 -0
  2. package/.agents/skills/recursive-structured-analysis/agents/openai.yaml +3 -0
  3. package/AGENTS.md +6 -0
  4. package/CHANGELOG.md +3 -0
  5. package/README.md +22 -2
  6. package/dist/application/install/agent-manifest.d.ts +9 -0
  7. package/dist/application/install/agent-manifest.d.ts.map +1 -1
  8. package/dist/application/install/agent-manifest.js +42 -1
  9. package/dist/application/install/agent-manifest.js.map +1 -1
  10. package/dist/application/install/apply-install.d.ts +1 -1
  11. package/dist/application/install/apply-install.d.ts.map +1 -1
  12. package/dist/application/install/apply-install.js +5 -5
  13. package/dist/application/install/apply-install.js.map +1 -1
  14. package/dist/application/install/generate-guidance.d.ts.map +1 -1
  15. package/dist/application/install/generate-guidance.js +1 -0
  16. package/dist/application/install/generate-guidance.js.map +1 -1
  17. package/dist/application/install/refresh-workspace-runtime.js +1 -1
  18. package/dist/application/install/refresh-workspace-runtime.js.map +1 -1
  19. package/dist/application/install/shared-runtime.d.ts +1 -1
  20. package/dist/application/install/shared-runtime.d.ts.map +1 -1
  21. package/dist/application/install/shared-runtime.js +11 -5
  22. package/dist/application/install/shared-runtime.js.map +1 -1
  23. package/dist/application/install/update-workspace.d.ts +21 -0
  24. package/dist/application/install/update-workspace.d.ts.map +1 -0
  25. package/dist/application/install/update-workspace.js +132 -0
  26. package/dist/application/install/update-workspace.js.map +1 -0
  27. package/dist/application/recursive/derive-language-capabilities.d.ts +4 -0
  28. package/dist/application/recursive/derive-language-capabilities.d.ts.map +1 -0
  29. package/dist/application/recursive/derive-language-capabilities.js +182 -0
  30. package/dist/application/recursive/derive-language-capabilities.js.map +1 -0
  31. package/dist/application/recursive/plan-task.d.ts.map +1 -1
  32. package/dist/application/recursive/plan-task.js +30 -1
  33. package/dist/application/recursive/plan-task.js.map +1 -1
  34. package/dist/application/recursive/run-structured-analysis.d.ts +17 -0
  35. package/dist/application/recursive/run-structured-analysis.d.ts.map +1 -0
  36. package/dist/application/recursive/run-structured-analysis.js +261 -0
  37. package/dist/application/recursive/run-structured-analysis.js.map +1 -0
  38. package/dist/application/runtime/command-catalog.d.ts +16 -0
  39. package/dist/application/runtime/command-catalog.d.ts.map +1 -1
  40. package/dist/application/runtime/command-catalog.js +155 -48
  41. package/dist/application/runtime/command-catalog.js.map +1 -1
  42. package/dist/cli/commands/maintenance.d.ts.map +1 -1
  43. package/dist/cli/commands/maintenance.js +20 -15
  44. package/dist/cli/commands/maintenance.js.map +1 -1
  45. package/dist/cli/commands/recursive.d.ts.map +1 -1
  46. package/dist/cli/commands/recursive.js +103 -1
  47. package/dist/cli/commands/recursive.js.map +1 -1
  48. package/dist/domain/recursive/adr-candidate.d.ts +2 -2
  49. package/dist/domain/recursive/asr.d.ts +2 -2
  50. package/dist/domain/recursive/execution-policy.d.ts +57 -0
  51. package/dist/domain/recursive/execution-policy.d.ts.map +1 -0
  52. package/dist/domain/recursive/execution-policy.js +26 -0
  53. package/dist/domain/recursive/execution-policy.js.map +1 -0
  54. package/dist/domain/recursive/language-capabilities.d.ts +95 -0
  55. package/dist/domain/recursive/language-capabilities.d.ts.map +1 -0
  56. package/dist/domain/recursive/language-capabilities.js +24 -0
  57. package/dist/domain/recursive/language-capabilities.js.map +1 -0
  58. package/dist/domain/recursive/structured-run-result.d.ts +34 -0
  59. package/dist/domain/recursive/structured-run-result.d.ts.map +1 -0
  60. package/dist/domain/recursive/structured-run-result.js +16 -0
  61. package/dist/domain/recursive/structured-run-result.js.map +1 -0
  62. package/dist/domain/recursive/structured-run.d.ts +51 -0
  63. package/dist/domain/recursive/structured-run.d.ts.map +1 -0
  64. package/dist/domain/recursive/structured-run.js +30 -0
  65. package/dist/domain/recursive/structured-run.js.map +1 -0
  66. package/dist/domain/recursive/template-registry.d.ts +12 -12
  67. package/dist/domain/runtime/decision-record.d.ts +4 -4
  68. package/dist/domain/runtime/task-pack.d.ts +2 -2
  69. package/dist/domain/runtime/template-registry.d.ts +6 -6
  70. package/dist/domain/state/install-state.d.ts +1 -1
  71. package/dist/domain/state/install-state.d.ts.map +1 -1
  72. package/dist/infrastructure/recursive/session-store.d.ts +28 -0
  73. package/dist/infrastructure/recursive/session-store.d.ts.map +1 -1
  74. package/dist/infrastructure/recursive/session-store.js +96 -3
  75. package/dist/infrastructure/recursive/session-store.js.map +1 -1
  76. package/dist/shared/constants.d.ts +10 -0
  77. package/dist/shared/constants.d.ts.map +1 -1
  78. package/dist/shared/constants.js +10 -0
  79. package/dist/shared/constants.js.map +1 -1
  80. package/docs/agents.md +13 -0
  81. package/docs/commands.md +33 -3
  82. package/docs/generated-artifacts.md +13 -0
  83. package/docs/install/targets.md +3 -0
  84. package/docs/installation.md +9 -0
  85. package/docs/maintenance-lifecycle.md +8 -3
  86. package/docs/quickstart.md +5 -2
  87. package/docs/release-process.md +2 -0
  88. package/docs/target-support-matrix.md +7 -4
  89. package/manifests/catalog/capability-taxonomy.json +6 -0
  90. package/manifests/catalog/compatibility-matrix.json +103 -1
  91. package/manifests/catalog/flow-artifacts.json +40 -0
  92. package/manifests/catalog/harness-capability-matrix.json +61 -1
  93. package/manifests/catalog/package-surface.json +8 -0
  94. package/manifests/targets/core.json +8 -4
  95. package/package.json +1 -1
  96. package/schemas/runtime/recursive-execution-policy.schema.json +47 -0
  97. package/schemas/runtime/recursive-language-capabilities.schema.json +46 -0
  98. package/schemas/runtime/recursive-run-meta.schema.json +28 -0
  99. package/schemas/runtime/recursive-run-result.schema.json +36 -0
  100. package/scripts/ci/release-smoke.mjs +4 -0
  101. package/scripts/ci/smoke-runner.mjs +12 -0
  102. package/scripts/ci/validate-doc-command-alignment.mjs +19 -2
  103. package/scripts/ci/validate-manifest-runtime-consistency.mjs +12 -1
  104. package/scripts/ci/validate-packed-install-surface.mjs +14 -0
  105. package/skills/recursive-structured-analysis/SKILL.md +48 -0
  106. package/targets/claude-code/adapter.json +3 -2
  107. package/targets/codex/adapter.json +3 -2
  108. package/targets/cursor/adapter.json +3 -2
  109. package/targets/opencode/adapter.json +3 -2
@@ -0,0 +1,261 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import { ValidationError, ensureDir, exists, readJsonFile, readTextFile, writeTextFile } from "../../shared/index.js";
6
+ import { appendRecursiveTraceEvent } from "../../infrastructure/recursive/trace-logger.js";
7
+ import { loadRecursiveExecutionPolicy, loadRecursiveLanguageCapabilities, loadRecursiveSession, loadRecursiveSessionCapabilities, resolveRecursiveRunPaths, resolveRecursiveSessionPaths, writeRecursiveLanguageCapabilities, writeRecursiveStructuredRun } from "../../infrastructure/recursive/session-store.js";
8
+ import { deriveRecursiveLanguageCapabilities } from "./derive-language-capabilities.js";
9
+ function createRunId() {
10
+ return `RUN-${Date.now()}`;
11
+ }
12
+ function toPortablePath(value) {
13
+ return value.replaceAll("\\", "/");
14
+ }
15
+ function hashText(value) {
16
+ return crypto.createHash("sha256").update(value).digest("hex");
17
+ }
18
+ function createTraceEvent(sessionId, runId, status, notes) {
19
+ return {
20
+ eventId: `EVT-${Date.now()}`,
21
+ sessionId,
22
+ eventType: "tool-call",
23
+ occurredAt: new Date().toISOString(),
24
+ actor: "operator",
25
+ inputRefs: [runId],
26
+ outputRefs: [],
27
+ status,
28
+ budgetImpact: {
29
+ iterationsUsed: 1,
30
+ subcallsUsed: 0
31
+ },
32
+ notes
33
+ };
34
+ }
35
+ async function loadSessionContext(workspaceRoot, sessionId) {
36
+ const session = await loadRecursiveSession(workspaceRoot, sessionId);
37
+ if (!session) {
38
+ throw new ValidationError(`Recursive session not found: ${sessionId}`);
39
+ }
40
+ const executionPolicy = await loadRecursiveExecutionPolicy(workspaceRoot, sessionId);
41
+ if (!executionPolicy) {
42
+ throw new ValidationError(`Recursive execution policy not found for session ${sessionId}`);
43
+ }
44
+ const sessionCapabilities = await loadRecursiveSessionCapabilities(workspaceRoot, sessionId);
45
+ if (sessionCapabilities) {
46
+ return { session, executionPolicy, capabilities: sessionCapabilities };
47
+ }
48
+ const workspaceCapabilities = (await loadRecursiveLanguageCapabilities(workspaceRoot)) ?? (await deriveRecursiveLanguageCapabilities(workspaceRoot));
49
+ await writeRecursiveLanguageCapabilities(workspaceRoot, workspaceCapabilities);
50
+ return { session, executionPolicy, capabilities: workspaceCapabilities };
51
+ }
52
+ async function readSnippetSource(input) {
53
+ if (input.submissionMode === "stdin") {
54
+ if (!input.stdinContent?.trim()) {
55
+ throw new ValidationError("Structured analysis run with --stdin requires snippet content on stdin.");
56
+ }
57
+ return {
58
+ sourceText: input.stdinContent,
59
+ sourceRef: undefined
60
+ };
61
+ }
62
+ if (!input.sourceFile) {
63
+ throw new ValidationError("Structured analysis run with --file requires a snippet file path.");
64
+ }
65
+ const sourceRef = path.resolve(input.sourceFile);
66
+ return {
67
+ sourceText: await readTextFile(sourceRef),
68
+ sourceRef
69
+ };
70
+ }
71
+ async function importSnippetModule(snippetPath) {
72
+ const url = pathToFileURL(snippetPath);
73
+ url.searchParams.set("run", `${Date.now()}`);
74
+ return (await import(url.href));
75
+ }
76
+ function normalizeRequestedBehaviors(value) {
77
+ return [...new Set(value?.requestedBehaviors ?? [])].sort((left, right) => left.localeCompare(right));
78
+ }
79
+ function ensureRequestedBehaviorsAllowed(policy, requestedBehaviors) {
80
+ if (!policy.allowStructuredRun) {
81
+ throw new ValidationError(`Structured recursive runs are disabled by policy ${policy.policyId}.`);
82
+ }
83
+ const rejectedBehavior = requestedBehaviors.find((behavior) => policy.restrictedBehaviors.includes(behavior));
84
+ if (rejectedBehavior) {
85
+ throw new ValidationError(`Structured recursive run requested restricted behavior "${rejectedBehavior}".`);
86
+ }
87
+ }
88
+ function ensureSubmissionAllowed(policy, submissionMode) {
89
+ if (!policy.allowedInputs.includes(submissionMode)) {
90
+ throw new ValidationError(`Structured recursive runs do not allow ${submissionMode} input under policy ${policy.policyId}.`);
91
+ }
92
+ }
93
+ async function createStructuredContext(workspaceRoot, session, executionPolicy, capabilities, runId) {
94
+ const sessionPaths = resolveRecursiveSessionPaths(workspaceRoot, session.sessionId);
95
+ const handleMap = new Map(session.handles.map((handle) => [handle.handleId, handle]));
96
+ const scratchFile = path.join(sessionPaths.sessionDir, "scratch", `${runId}.md`);
97
+ await ensureDir(path.dirname(scratchFile));
98
+ const resolveHandle = (handleId) => {
99
+ const handle = handleMap.get(handleId);
100
+ if (!handle) {
101
+ throw new ValidationError(`Unknown recursive handle: ${handleId}`);
102
+ }
103
+ return path.resolve(workspaceRoot, handle.targetRef);
104
+ };
105
+ return {
106
+ sessionId: session.sessionId,
107
+ workspaceRoot,
108
+ session,
109
+ executionPolicy,
110
+ capabilities,
111
+ scratchPath: scratchFile,
112
+ tracePath: sessionPaths.tracePath,
113
+ handles: session.handles,
114
+ resolveHandle,
115
+ async readHandle(handleId) {
116
+ const resolved = resolveHandle(handleId);
117
+ if (!(await exists(resolved))) {
118
+ throw new ValidationError(`Referenced recursive handle is missing on disk: ${handleId}`);
119
+ }
120
+ if (resolved.endsWith(".json")) {
121
+ return readJsonFile(resolved);
122
+ }
123
+ return readTextFile(resolved);
124
+ },
125
+ async appendScratch(note) {
126
+ await fs.appendFile(scratchFile, `${note.trim()}\n`, "utf8");
127
+ },
128
+ async log(note) {
129
+ await appendRecursiveTraceEvent(sessionPaths.tracePath, createTraceEvent(session.sessionId, runId, "success", `[structured-run] ${note}`));
130
+ }
131
+ };
132
+ }
133
+ async function executeSnippetWithTimeout(fn, timeoutMs) {
134
+ let timeoutId;
135
+ try {
136
+ return await Promise.race([
137
+ fn(),
138
+ new Promise((_, reject) => {
139
+ timeoutId = setTimeout(() => reject(new ValidationError(`Structured recursive run timed out after ${timeoutMs}ms.`)), timeoutMs);
140
+ })
141
+ ]);
142
+ }
143
+ finally {
144
+ if (timeoutId) {
145
+ clearTimeout(timeoutId);
146
+ }
147
+ }
148
+ }
149
+ function normalizeSnippetResult(value, runId) {
150
+ const findings = value?.findings ?? [];
151
+ const warnings = value?.warnings ?? [];
152
+ const diagnostics = value?.diagnostics ?? [];
153
+ const outcome = value?.outcome ?? (findings.length > 0 ? "success" : "degraded");
154
+ return {
155
+ runId,
156
+ outcome,
157
+ findings,
158
+ warnings,
159
+ diagnostics,
160
+ artifactsRead: value?.artifactsRead ?? [],
161
+ artifactsWritten: value?.artifactsWritten ?? [],
162
+ completedAt: new Date().toISOString()
163
+ };
164
+ }
165
+ function createMetaRecord(input) {
166
+ return {
167
+ runId: input.runId,
168
+ sessionId: input.sessionId,
169
+ submissionMode: input.submissionMode,
170
+ sourceRef: input.sourceRef,
171
+ status: input.status,
172
+ startedAt: input.startedAt,
173
+ completedAt: input.completedAt,
174
+ policyRef: input.policyRef,
175
+ resultRef: input.resultRef,
176
+ summary: input.summary,
177
+ warningCount: input.warningCount,
178
+ failureReason: input.failureReason,
179
+ ...(input.requestedBehaviors && input.requestedBehaviors.length > 0 ? { requestedBehaviors: input.requestedBehaviors } : {})
180
+ };
181
+ }
182
+ export async function runStructuredAnalysis(input) {
183
+ const { workspaceRoot, sessionId, submissionMode } = input;
184
+ const { session, executionPolicy, capabilities } = await loadSessionContext(workspaceRoot, sessionId);
185
+ ensureSubmissionAllowed(executionPolicy, submissionMode);
186
+ const existingRunCount = (await fs.readdir(resolveRecursiveSessionPaths(workspaceRoot, sessionId).runsDir).catch(() => [])).length;
187
+ if (existingRunCount >= executionPolicy.budgetSummary.maxRuns) {
188
+ throw new ValidationError(`Structured recursive run budget exhausted for session ${sessionId}; policy ${executionPolicy.policyId} allows at most ${executionPolicy.budgetSummary.maxRuns} runs.`);
189
+ }
190
+ const runId = createRunId();
191
+ const startedAt = new Date().toISOString();
192
+ const { sourceText, sourceRef } = await readSnippetSource(input);
193
+ const artifactPaths = resolveRecursiveRunPaths(workspaceRoot, sessionId, runId);
194
+ const sessionPaths = resolveRecursiveSessionPaths(workspaceRoot, sessionId);
195
+ await ensureDir(artifactPaths.runDir);
196
+ const snippetPath = path.join(artifactPaths.runDir, submissionMode === "stdin" ? "stdin-snippet.mjs" : "snippet.mjs");
197
+ await writeTextFile(snippetPath, sourceText);
198
+ try {
199
+ const snippetModule = await importSnippetModule(snippetPath);
200
+ const analyzer = snippetModule.analyze ?? snippetModule.default;
201
+ if (typeof analyzer !== "function") {
202
+ throw new ValidationError("Structured recursive snippets must export an async analyze(context) function or a default function.");
203
+ }
204
+ const requestedBehaviors = normalizeRequestedBehaviors(snippetModule.metadata);
205
+ ensureRequestedBehaviorsAllowed(executionPolicy, requestedBehaviors);
206
+ const context = await createStructuredContext(workspaceRoot, session, executionPolicy, capabilities, runId);
207
+ const rawResult = await executeSnippetWithTimeout(async () => analyzer(context), executionPolicy.budgetSummary.maxDurationMs);
208
+ const result = normalizeSnippetResult(rawResult, runId);
209
+ const resultRef = toPortablePath(path.relative(workspaceRoot, artifactPaths.resultPath) || artifactPaths.resultPath);
210
+ const meta = createMetaRecord({
211
+ runId,
212
+ sessionId,
213
+ submissionMode,
214
+ sourceRef: sourceRef ?? `sha256:${hashText(sourceText)}`,
215
+ policyRef: toPortablePath(path.relative(workspaceRoot, sessionPaths.executionPolicyPath)),
216
+ status: result.outcome === "degraded" ? "degraded" : "success",
217
+ summary: rawResult?.summary ?? (result.findings[0] ?? "Structured recursive analysis completed."),
218
+ resultRef,
219
+ requestedBehaviors,
220
+ warningCount: result.warnings.length,
221
+ startedAt,
222
+ completedAt: result.completedAt
223
+ });
224
+ await writeRecursiveStructuredRun(workspaceRoot, sessionId, { meta, result });
225
+ await appendRecursiveTraceEvent(sessionPaths.tracePath, createTraceEvent(sessionId, runId, "success", `Structured recursive run completed with outcome ${result.outcome}.`));
226
+ return { meta, result, artifactPaths };
227
+ }
228
+ catch (error) {
229
+ const message = error instanceof Error ? error.message : String(error);
230
+ const outcome = error instanceof ValidationError ? "rejection" : "failure";
231
+ const status = outcome === "rejection" ? "rejection" : "failure";
232
+ const result = {
233
+ runId,
234
+ outcome,
235
+ findings: [],
236
+ warnings: [],
237
+ diagnostics: [message],
238
+ artifactsRead: [],
239
+ artifactsWritten: [],
240
+ completedAt: new Date().toISOString()
241
+ };
242
+ const meta = createMetaRecord({
243
+ runId,
244
+ sessionId,
245
+ submissionMode,
246
+ sourceRef: sourceRef ?? `sha256:${hashText(sourceText)}`,
247
+ policyRef: toPortablePath(path.relative(workspaceRoot, sessionPaths.executionPolicyPath)),
248
+ status,
249
+ summary: "Structured recursive analysis did not complete successfully.",
250
+ resultRef: toPortablePath(path.relative(workspaceRoot, artifactPaths.resultPath)),
251
+ warningCount: 0,
252
+ failureReason: message,
253
+ startedAt,
254
+ completedAt: result.completedAt
255
+ });
256
+ await writeRecursiveStructuredRun(workspaceRoot, sessionId, { meta, result });
257
+ await appendRecursiveTraceEvent(sessionPaths.tracePath, createTraceEvent(sessionId, runId, "failed", `Structured recursive run failed: ${message}`));
258
+ return { meta, result, artifactPaths };
259
+ }
260
+ }
261
+ //# sourceMappingURL=run-structured-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-structured-analysis.js","sourceRoot":"","sources":["../../../src/application/recursive/run-structured-analysis.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,26 @@ export interface AgentCommandCatalog {
2
2
  generatedAt: string;
3
3
  packageName: string;
4
4
  packageVersion: string;
5
+ executionModes: Array<{
6
+ id: string;
7
+ platform: "any" | "windows" | "posix";
8
+ commandPrefix: string;
9
+ whenToUse: string;
10
+ }>;
11
+ preferredExecutionOrder: string[];
5
12
  cliCommands: Array<{
13
+ id: string;
6
14
  command: string;
7
15
  description: string;
8
16
  }>;
17
+ agentSafeCliCommands: Array<{
18
+ id: string;
19
+ description: string;
20
+ variants: Array<{
21
+ modeId: string;
22
+ command: string;
23
+ }>;
24
+ }>;
9
25
  npmScripts: Record<string, string>;
10
26
  recommendedAgentCommands: string[];
11
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-catalog.d.ts","sourceRoot":"","sources":["../../../src/application/runtime/command-catalog.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,wBAAwB,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6E/F;AAED,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAClG,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAwBD"}
1
+ {"version":3,"file":"command-catalog.d.ts","sourceRoot":"","sources":["../../../src/application/runtime/command-catalog.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,KAAK,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;QACtC,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,WAAW,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,oBAAoB,EAAE,KAAK,CAAC;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,KAAK,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,wBAAwB,EAAE,MAAM,EAAE,CAAC;CACpC;AAoJD,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoC/F;AAED,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAClG,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAoCD"}
@@ -1,59 +1,154 @@
1
1
  import path from "node:path";
2
2
  import { GENERATED_DIR, readJsonFile, writeJsonFile, writeTextFile } from "../../shared/index.js";
3
+ function buildExecutionModes() {
4
+ return [
5
+ {
6
+ id: "workspace-launcher-windows",
7
+ platform: "windows",
8
+ commandPrefix: ".\\.hforge\\generated\\bin\\hforge.cmd",
9
+ whenToUse: "Preferred in installed Windows workspaces when bare hforge is unavailable on PATH."
10
+ },
11
+ {
12
+ id: "workspace-launcher-powershell",
13
+ platform: "windows",
14
+ commandPrefix: ".\\.hforge\\generated\\bin\\hforge.ps1",
15
+ whenToUse: "Use in PowerShell when the CMD launcher is not the preferred shell entrypoint."
16
+ },
17
+ {
18
+ id: "workspace-launcher-posix",
19
+ platform: "posix",
20
+ commandPrefix: "./.hforge/generated/bin/hforge",
21
+ whenToUse: "Preferred in installed POSIX workspaces when bare hforge is unavailable on PATH."
22
+ },
23
+ {
24
+ id: "bare-hforge",
25
+ platform: "any",
26
+ commandPrefix: "hforge",
27
+ whenToUse: "Use when hforge is already available on PATH through shell setup or global install."
28
+ },
29
+ {
30
+ id: "npx-package",
31
+ platform: "any",
32
+ commandPrefix: "npx @harness-forge/cli",
33
+ whenToUse: "Fallback when no local launcher is available yet or when the agent is working before install."
34
+ }
35
+ ];
36
+ }
37
+ function buildCliCommands() {
38
+ return [
39
+ {
40
+ id: "interactive-front-door",
41
+ command: "hforge",
42
+ description: "Launch the interactive onboarding flow for new workspaces or the project hub for an existing .hforge runtime."
43
+ },
44
+ { id: "init-basic", command: "hforge init --root <repo> --json", description: "Initialize the hidden Harness Forge runtime and install-state surfaces for a workspace." },
45
+ {
46
+ id: "init-direct",
47
+ command: "hforge init --root <repo> --agent codex --setup-profile recommended --yes",
48
+ description: "Initialize a workspace directly without prompts and install one or more selected agent targets."
49
+ },
50
+ { id: "bootstrap", command: "hforge bootstrap --root <repo> --yes", description: "Autodetect supported agent runtimes in a repo and install the recommended Harness Forge surfaces." },
51
+ { id: "install", command: "hforge install --target <target> --root <repo> --yes", description: "Install for one explicit target with selected bundles, languages, frameworks, or capabilities." },
52
+ { id: "status", command: "hforge status --root <repo> --json", description: "Inspect the current install state." },
53
+ { id: "refresh", command: "hforge refresh --root <repo> --json", description: "Refresh the shared runtime summary and baseline artifacts for the installed targets." },
54
+ {
55
+ id: "update",
56
+ command: "hforge update --root <repo> --yes",
57
+ description: "Download the latest Harness Forge package and reapply managed surfaces without discarding preserved runtime state."
58
+ },
59
+ {
60
+ id: "upgrade",
61
+ command: "hforge upgrade --root <repo> --yes",
62
+ description: "Alias for the non-destructive update flow that refreshes managed surfaces from the latest package."
63
+ },
64
+ { id: "task-list", command: "hforge task list --root <repo> --json", description: "List task-runtime folders and the artifacts currently available for each task." },
65
+ { id: "task-inspect", command: "hforge task inspect <taskId> --root <repo> --json", description: "Inspect file-interest, impact-analysis, task-pack, and recursive linkage for one task." },
66
+ { id: "pack-inspect", command: "hforge pack inspect <taskId> --root <repo> --json", description: "Inspect the canonical task-pack artifact for one task." },
67
+ { id: "review", command: "hforge review --root <repo> --json", description: "Summarize runtime health, decision coverage, and stale task artifacts." },
68
+ { id: "export", command: "hforge export --root <repo> --json", description: "Export install-state, runtime index, doctor, and audit summaries for review or handoff." },
69
+ { id: "shell-setup", command: "hforge shell setup --yes", description: "Create user-level shims and update supported shell profiles so bare hforge is available on PATH." },
70
+ { id: "shell-status", command: "hforge shell status --json", description: "Inspect shell integration status, shim presence, profile wiring, and bare hforge availability." },
71
+ { id: "commands", command: "hforge commands --json", description: "List CLI commands and npm scripts that agents can use safely." },
72
+ { id: "recommend", command: "hforge recommend <repo> --json", description: "Inspect a repository and return evidence-backed recommendations." },
73
+ { id: "scan", command: "hforge scan <repo> --json", description: "Collect a human- or machine-readable baseline scan of a repository." },
74
+ { id: "cartograph", command: "hforge cartograph <repo> --json", description: "Build a repo map showing services, hotspots, ownership, and validation gaps." },
75
+ { id: "classify-boundaries", command: "hforge classify-boundaries <repo> --json", description: "Classify service and package boundaries for a repository." },
76
+ { id: "synthesize-instructions", command: "hforge synthesize-instructions <repo> --target codex --json", description: "Generate target-aware AGENTS and instruction-plan recommendations for a repository." },
77
+ { id: "target-inspect", command: "hforge target inspect <target> --json", description: "Inspect support, mappings, and capability notes for Codex, Claude Code, Cursor, or OpenCode." },
78
+ { id: "capabilities", command: "hforge capabilities --target codex --json", description: "Inspect the support matrix for one target or all targets." },
79
+ { id: "flow-status", command: "hforge flow status --root <repo> --json", description: "Inspect recoverable flow state." },
80
+ {
81
+ id: "recursive-plan",
82
+ command: 'hforge recursive plan "investigate cross-module issue" --task-id TASK-001 --root <repo> --json',
83
+ description: "Create a durable draft recursive session for difficult work without disturbing ordinary task flows."
84
+ },
85
+ {
86
+ id: "recursive-capabilities",
87
+ command: "hforge recursive capabilities --root <repo> --json",
88
+ description: "Inspect the canonical recursive structured-analysis capability map for the current workspace."
89
+ },
90
+ {
91
+ id: "recursive-run-file",
92
+ command: "hforge recursive run <sessionId> --file <snippet.mjs> --root <repo> --json",
93
+ description: "Submit one session-scoped structured analysis snippet from a file into a recursive session."
94
+ },
95
+ {
96
+ id: "recursive-run-stdin",
97
+ command: "hforge recursive run <sessionId> --stdin --root <repo> --json",
98
+ description: "Submit one session-scoped structured analysis snippet from standard input into a recursive session."
99
+ },
100
+ {
101
+ id: "recursive-runs",
102
+ command: "hforge recursive runs <sessionId> --root <repo> --json",
103
+ description: "List durable structured-analysis run records for one recursive session."
104
+ },
105
+ {
106
+ id: "recursive-inspect-run",
107
+ command: "hforge recursive inspect-run <sessionId> <runId> --root <repo> --json",
108
+ description: "Inspect one recorded structured-analysis run within a recursive session."
109
+ },
110
+ {
111
+ id: "recursive-inspect",
112
+ command: "hforge recursive inspect <sessionId> --root <repo> --json",
113
+ description: "Inspect recursive session identity, budget, handles, and current promotion state."
114
+ },
115
+ { id: "observability-summarize", command: "hforge observability summarize --root <repo> --json", description: "Summarize local observability events and effectiveness signals." },
116
+ { id: "observability-report", command: "hforge observability report <repo> --json", description: "Report local recommendation and maintenance effectiveness signals." },
117
+ { id: "parallel-plan", command: "hforge parallel plan <tasks.md> --root <repo> --json", description: "Create a parallel worktree shard plan from a task backlog." },
118
+ { id: "parallel-status", command: "hforge parallel status --root <repo> --json", description: "Inspect the current parallel execution plan status." },
119
+ { id: "parallel-merge-check", command: "hforge parallel merge-check --root <repo> --json", description: "Check whether the current shard plan is merge-ready." },
120
+ { id: "doctor", command: "hforge doctor --root <repo> --json", description: "Check installation health and missing managed surfaces." },
121
+ { id: "audit", command: "hforge audit --root <repo> --json", description: "Audit install state and package surface integrity." },
122
+ { id: "diff-install", command: "hforge diff-install --root <repo> --json", description: "Compare managed install expectations against the repo." },
123
+ { id: "template-validate", command: "hforge template validate --json", description: "Validate the shipped task and workflow templates." }
124
+ ];
125
+ }
126
+ function buildAgentSafeCliCommands(commands) {
127
+ const executionModes = buildExecutionModes();
128
+ return commands.map((entry) => {
129
+ const suffix = entry.command === "hforge" ? "" : entry.command.slice("hforge".length);
130
+ return {
131
+ id: entry.id,
132
+ description: entry.description,
133
+ variants: executionModes.map((mode) => ({
134
+ modeId: mode.id,
135
+ command: `${mode.commandPrefix}${suffix}`
136
+ }))
137
+ };
138
+ });
139
+ }
3
140
  export async function loadAgentCommandCatalog(packageRoot) {
4
141
  const packageJson = await readJsonFile(path.join(packageRoot, "package.json"));
142
+ const cliCommands = buildCliCommands();
143
+ const executionModes = buildExecutionModes();
5
144
  return {
6
145
  generatedAt: new Date().toISOString(),
7
146
  packageName: packageJson.name,
8
147
  packageVersion: packageJson.version,
9
- cliCommands: [
10
- {
11
- command: "hforge",
12
- description: "Launch the interactive onboarding flow for new workspaces or the project hub for an existing .hforge runtime."
13
- },
14
- { command: "hforge init --root <repo> --json", description: "Initialize the hidden Harness Forge runtime and install-state surfaces for a workspace." },
15
- {
16
- command: "hforge init --root <repo> --agent codex --setup-profile recommended --yes",
17
- description: "Initialize a workspace directly without prompts and install one or more selected agent targets."
18
- },
19
- { command: "hforge bootstrap --root <repo> --yes", description: "Autodetect supported agent runtimes in a repo and install the recommended Harness Forge surfaces." },
20
- { command: "hforge install --target <target> --root <repo> --yes", description: "Install for one explicit target with selected bundles, languages, frameworks, or capabilities." },
21
- { command: "hforge status --root <repo> --json", description: "Inspect the current install state." },
22
- { command: "hforge refresh --root <repo> --json", description: "Refresh the shared runtime summary and baseline artifacts for the installed targets." },
23
- { command: "hforge task list --root <repo> --json", description: "List task-runtime folders and the artifacts currently available for each task." },
24
- { command: "hforge task inspect <taskId> --root <repo> --json", description: "Inspect file-interest, impact-analysis, task-pack, and recursive linkage for one task." },
25
- { command: "hforge pack inspect <taskId> --root <repo> --json", description: "Inspect the canonical task-pack artifact for one task." },
26
- { command: "hforge review --root <repo> --json", description: "Summarize runtime health, decision coverage, and stale task artifacts." },
27
- { command: "hforge export --root <repo> --json", description: "Export install-state, runtime index, doctor, and audit summaries for review or handoff." },
28
- { command: "hforge shell setup --yes", description: "Create user-level shims and update supported shell profiles so bare hforge is available on PATH." },
29
- { command: "hforge shell status --json", description: "Inspect shell integration status, shim presence, profile wiring, and bare hforge availability." },
30
- { command: "hforge commands --json", description: "List CLI commands and npm scripts that agents can use safely." },
31
- { command: "hforge recommend <repo> --json", description: "Inspect a repository and return evidence-backed recommendations." },
32
- { command: "hforge scan <repo> --json", description: "Collect a human- or machine-readable baseline scan of a repository." },
33
- { command: "hforge cartograph <repo> --json", description: "Build a repo map showing services, hotspots, ownership, and validation gaps." },
34
- { command: "hforge classify-boundaries <repo> --json", description: "Classify service and package boundaries for a repository." },
35
- { command: "hforge synthesize-instructions <repo> --target codex --json", description: "Generate target-aware AGENTS and instruction-plan recommendations for a repository." },
36
- { command: "hforge target inspect <target> --json", description: "Inspect support, mappings, and capability notes for Codex, Claude Code, Cursor, or OpenCode." },
37
- { command: "hforge capabilities --target codex --json", description: "Inspect the support matrix for one target or all targets." },
38
- { command: "hforge flow status --root <repo> --json", description: "Inspect recoverable flow state." },
39
- {
40
- command: 'hforge recursive plan "investigate cross-module issue" --task-id TASK-001 --root <repo> --json',
41
- description: "Create a durable draft recursive session for difficult work without disturbing ordinary task flows."
42
- },
43
- {
44
- command: "hforge recursive inspect <sessionId> --root <repo> --json",
45
- description: "Inspect recursive session identity, budget, handles, and current promotion state."
46
- },
47
- { command: "hforge observability summarize --root <repo> --json", description: "Summarize local observability events and effectiveness signals." },
48
- { command: "hforge observability report <repo> --json", description: "Report local recommendation and maintenance effectiveness signals." },
49
- { command: "hforge parallel plan <tasks.md> --root <repo> --json", description: "Create a parallel worktree shard plan from a task backlog." },
50
- { command: "hforge parallel status --root <repo> --json", description: "Inspect the current parallel execution plan status." },
51
- { command: "hforge parallel merge-check --root <repo> --json", description: "Check whether the current shard plan is merge-ready." },
52
- { command: "hforge doctor --root <repo> --json", description: "Check installation health and missing managed surfaces." },
53
- { command: "hforge audit --root <repo> --json", description: "Audit install state and package surface integrity." },
54
- { command: "hforge diff-install --root <repo> --json", description: "Compare managed install expectations against the repo." },
55
- { command: "hforge template validate --json", description: "Validate the shipped task and workflow templates." }
56
- ],
148
+ executionModes,
149
+ preferredExecutionOrder: ["workspace-launcher-windows", "workspace-launcher-powershell", "workspace-launcher-posix", "bare-hforge", "npx-package"],
150
+ cliCommands,
151
+ agentSafeCliCommands: buildAgentSafeCliCommands(cliCommands),
57
152
  npmScripts: packageJson.scripts ?? {},
58
153
  recommendedAgentCommands: [
59
154
  "npm run recommend:current",
@@ -84,9 +179,21 @@ export async function writeAgentCommandCatalog(workspaceRoot, packageRoot) {
84
179
  `Generated: ${catalog.generatedAt}`,
85
180
  `Package: ${catalog.packageName}@${catalog.packageVersion}`,
86
181
  "",
182
+ "## Agent execution order",
183
+ ...catalog.preferredExecutionOrder.map((modeId) => {
184
+ const mode = catalog.executionModes.find((entry) => entry.id === modeId);
185
+ return `- \`${mode.commandPrefix}\` - ${mode.whenToUse}`;
186
+ }),
187
+ "",
87
188
  "## CLI commands",
88
189
  ...catalog.cliCommands.map((entry) => `- \`${entry.command}\` - ${entry.description}`),
89
190
  "",
191
+ "## Agent-safe command variants",
192
+ ...catalog.agentSafeCliCommands.flatMap((entry) => [
193
+ `- \`${entry.id}\` - ${entry.description}`,
194
+ ...entry.variants.map((variant) => ` - [${variant.modeId}] \`${variant.command}\``)
195
+ ]),
196
+ "",
90
197
  "## Recommended npm scripts",
91
198
  ...catalog.recommendedAgentCommands.map((entry) => `- \`${entry}\``),
92
199
  "",
@@ -1 +1 @@
1
- {"version":3,"file":"command-catalog.js","sourceRoot":"","sources":["../../../src/application/runtime/command-catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-catalog.js","sourceRoot":"","sources":["../../../src/application/runtime/command-catalog.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkFlE"}
1
+ {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuFlE"}
@@ -2,6 +2,7 @@ import path from "node:path";
2
2
  import fs from "node:fs/promises";
3
3
  import { scanReferenceInstall } from "../../application/migration/scan-reference-install.js";
4
4
  import { reconcileState } from "../../application/install/reconcile-state.js";
5
+ import { updateWorkspace } from "../../application/install/update-workspace.js";
5
6
  import { loadInstallState, saveInstallState } from "../../domain/state/install-state.js";
6
7
  import { INSTALL_STATE_FILE, DEFAULT_WORKSPACE_ROOT, STATE_DIR, ValidationError } from "../../shared/index.js";
7
8
  export function registerMaintenanceCommands(program) {
@@ -55,21 +56,25 @@ export function registerMaintenanceCommands(program) {
55
56
  }
56
57
  console.log(JSON.stringify({ dryRun: options.dryRun, files }, null, 2));
57
58
  });
58
- program
59
- .command("upgrade")
60
- .option("--dry-run", "preview only", false)
61
- .option("--root <root>", "workspace root", DEFAULT_WORKSPACE_ROOT)
62
- .action(async (options) => {
63
- const workspaceRoot = path.resolve(options.root);
64
- const state = await loadInstallState(workspaceRoot);
65
- const result = {
66
- dryRun: options.dryRun,
67
- target: state?.installedTargets[0] ?? null,
68
- bundles: state?.installedBundles ?? [],
69
- recommendation: state ? "Run install again with the current target and bundle set to refresh shipped assets." : "No existing install state found."
70
- };
71
- console.log(JSON.stringify(result, null, 2));
72
- });
59
+ const registerWorkspaceUpdateCommand = (name) => {
60
+ program
61
+ .command(name)
62
+ .option("--dry-run", "preview only", false)
63
+ .option("--root <root>", "workspace root", DEFAULT_WORKSPACE_ROOT)
64
+ .option("--package-tag <tag>", "npm dist-tag or version to install before reapplying managed surfaces", "latest")
65
+ .option("--yes", "apply the update instead of previewing it", false)
66
+ .action(async (options) => {
67
+ const workspaceRoot = path.resolve(options.root);
68
+ const result = await updateWorkspace({
69
+ workspaceRoot,
70
+ packageTag: options.packageTag,
71
+ dryRun: options.dryRun || !options.yes
72
+ });
73
+ console.log(JSON.stringify(result, null, 2));
74
+ });
75
+ };
76
+ registerWorkspaceUpdateCommand("upgrade");
77
+ registerWorkspaceUpdateCommand("update");
73
78
  program
74
79
  .command("migrate")
75
80
  .option("--root <root>", "workspace root", DEFAULT_WORKSPACE_ROOT)