@harness-forge/cli 1.1.1 → 1.2.1
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/.agents/skills/recursive-structured-analysis/SKILL.md +26 -0
- package/.agents/skills/recursive-structured-analysis/agents/openai.yaml +3 -0
- package/AGENTS.md +6 -0
- package/CHANGELOG.md +3 -0
- package/README.md +22 -2
- package/dist/application/install/agent-manifest.d.ts +9 -0
- package/dist/application/install/agent-manifest.d.ts.map +1 -1
- package/dist/application/install/agent-manifest.js +42 -1
- package/dist/application/install/agent-manifest.js.map +1 -1
- package/dist/application/install/apply-install.d.ts +1 -1
- package/dist/application/install/apply-install.d.ts.map +1 -1
- package/dist/application/install/apply-install.js +5 -5
- package/dist/application/install/apply-install.js.map +1 -1
- package/dist/application/install/generate-guidance.d.ts.map +1 -1
- package/dist/application/install/generate-guidance.js +1 -0
- package/dist/application/install/generate-guidance.js.map +1 -1
- package/dist/application/install/refresh-workspace-runtime.js +1 -1
- package/dist/application/install/refresh-workspace-runtime.js.map +1 -1
- package/dist/application/install/shared-runtime.d.ts +1 -1
- package/dist/application/install/shared-runtime.d.ts.map +1 -1
- package/dist/application/install/shared-runtime.js +11 -5
- package/dist/application/install/shared-runtime.js.map +1 -1
- package/dist/application/install/update-workspace.d.ts +21 -0
- package/dist/application/install/update-workspace.d.ts.map +1 -0
- package/dist/application/install/update-workspace.js +132 -0
- package/dist/application/install/update-workspace.js.map +1 -0
- package/dist/application/recursive/derive-language-capabilities.d.ts +4 -0
- package/dist/application/recursive/derive-language-capabilities.d.ts.map +1 -0
- package/dist/application/recursive/derive-language-capabilities.js +182 -0
- package/dist/application/recursive/derive-language-capabilities.js.map +1 -0
- package/dist/application/recursive/plan-task.d.ts.map +1 -1
- package/dist/application/recursive/plan-task.js +30 -1
- package/dist/application/recursive/plan-task.js.map +1 -1
- package/dist/application/recursive/run-structured-analysis.d.ts +17 -0
- package/dist/application/recursive/run-structured-analysis.d.ts.map +1 -0
- package/dist/application/recursive/run-structured-analysis.js +261 -0
- package/dist/application/recursive/run-structured-analysis.js.map +1 -0
- package/dist/application/runtime/command-catalog.d.ts +16 -0
- package/dist/application/runtime/command-catalog.d.ts.map +1 -1
- package/dist/application/runtime/command-catalog.js +155 -48
- package/dist/application/runtime/command-catalog.js.map +1 -1
- package/dist/cli/commands/maintenance.d.ts.map +1 -1
- package/dist/cli/commands/maintenance.js +20 -15
- package/dist/cli/commands/maintenance.js.map +1 -1
- package/dist/cli/commands/recursive.d.ts.map +1 -1
- package/dist/cli/commands/recursive.js +103 -1
- package/dist/cli/commands/recursive.js.map +1 -1
- package/dist/domain/recursive/adr-candidate.d.ts +2 -2
- package/dist/domain/recursive/asr.d.ts +2 -2
- package/dist/domain/recursive/execution-policy.d.ts +57 -0
- package/dist/domain/recursive/execution-policy.d.ts.map +1 -0
- package/dist/domain/recursive/execution-policy.js +26 -0
- package/dist/domain/recursive/execution-policy.js.map +1 -0
- package/dist/domain/recursive/language-capabilities.d.ts +95 -0
- package/dist/domain/recursive/language-capabilities.d.ts.map +1 -0
- package/dist/domain/recursive/language-capabilities.js +24 -0
- package/dist/domain/recursive/language-capabilities.js.map +1 -0
- package/dist/domain/recursive/structured-run-result.d.ts +34 -0
- package/dist/domain/recursive/structured-run-result.d.ts.map +1 -0
- package/dist/domain/recursive/structured-run-result.js +16 -0
- package/dist/domain/recursive/structured-run-result.js.map +1 -0
- package/dist/domain/recursive/structured-run.d.ts +51 -0
- package/dist/domain/recursive/structured-run.d.ts.map +1 -0
- package/dist/domain/recursive/structured-run.js +30 -0
- package/dist/domain/recursive/structured-run.js.map +1 -0
- package/dist/domain/recursive/template-registry.d.ts +12 -12
- package/dist/domain/runtime/decision-record.d.ts +4 -4
- package/dist/domain/runtime/task-pack.d.ts +2 -2
- package/dist/domain/runtime/template-registry.d.ts +6 -6
- package/dist/domain/state/install-state.d.ts +1 -1
- package/dist/domain/state/install-state.d.ts.map +1 -1
- package/dist/infrastructure/recursive/session-store.d.ts +28 -0
- package/dist/infrastructure/recursive/session-store.d.ts.map +1 -1
- package/dist/infrastructure/recursive/session-store.js +96 -3
- package/dist/infrastructure/recursive/session-store.js.map +1 -1
- package/dist/shared/constants.d.ts +10 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +10 -0
- package/dist/shared/constants.js.map +1 -1
- package/docs/agents.md +13 -0
- package/docs/commands.md +33 -3
- package/docs/generated-artifacts.md +13 -0
- package/docs/install/targets.md +3 -0
- package/docs/installation.md +9 -0
- package/docs/maintenance-lifecycle.md +8 -3
- package/docs/quickstart.md +5 -2
- package/docs/release-process.md +2 -0
- package/docs/target-support-matrix.md +7 -4
- package/manifests/catalog/capability-taxonomy.json +6 -0
- package/manifests/catalog/compatibility-matrix.json +103 -1
- package/manifests/catalog/flow-artifacts.json +40 -0
- package/manifests/catalog/harness-capability-matrix.json +61 -1
- package/manifests/catalog/package-surface.json +8 -0
- package/manifests/targets/core.json +8 -4
- package/package.json +1 -1
- package/schemas/runtime/recursive-execution-policy.schema.json +47 -0
- package/schemas/runtime/recursive-language-capabilities.schema.json +46 -0
- package/schemas/runtime/recursive-run-meta.schema.json +28 -0
- package/schemas/runtime/recursive-run-result.schema.json +36 -0
- package/scripts/ci/release-smoke.mjs +4 -0
- package/scripts/ci/smoke-runner.mjs +12 -0
- package/scripts/ci/validate-doc-command-alignment.mjs +19 -2
- package/scripts/ci/validate-manifest-runtime-consistency.mjs +12 -1
- package/scripts/ci/validate-packed-install-surface.mjs +14 -0
- package/skills/recursive-structured-analysis/SKILL.md +48 -0
- package/targets/claude-code/adapter.json +3 -2
- package/targets/codex/adapter.json +3 -2
- package/targets/cursor/adapter.json +3 -2
- package/targets/opencode/adapter.json +3 -2
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
".agents/skills/powershell-engineering/SKILL.md",
|
|
49
49
|
".agents/skills/javascript-engineering/SKILL.md",
|
|
50
50
|
".agents/skills/cloud-architect/SKILL.md",
|
|
51
|
+
".agents/skills/recursive-structured-analysis/SKILL.md",
|
|
51
52
|
"docs/catalog/language-packs.md",
|
|
52
53
|
"docs/catalog/framework-packs.md",
|
|
53
54
|
"docs/templates/authoring.md",
|
|
@@ -74,6 +75,7 @@
|
|
|
74
75
|
"skills/powershell-engineering/SKILL.md",
|
|
75
76
|
"skills/javascript-engineering",
|
|
76
77
|
"skills/cloud-architect",
|
|
78
|
+
"skills/recursive-structured-analysis/SKILL.md",
|
|
77
79
|
"skills/repo-onboarding/SKILL.md",
|
|
78
80
|
"skills/documentation-lookup/SKILL.md",
|
|
79
81
|
"skills/security-scan/SKILL.md",
|
|
@@ -162,6 +164,10 @@
|
|
|
162
164
|
"schemas/runtime/working-memory.schema.json",
|
|
163
165
|
"schemas/runtime/recursive-session.schema.json",
|
|
164
166
|
"schemas/runtime/recursive-budget.schema.json",
|
|
167
|
+
"schemas/runtime/recursive-execution-policy.schema.json",
|
|
168
|
+
"schemas/runtime/recursive-language-capabilities.schema.json",
|
|
169
|
+
"schemas/runtime/recursive-run-result.schema.json",
|
|
170
|
+
"schemas/runtime/recursive-run-meta.schema.json",
|
|
165
171
|
"schemas/runtime/recursive-trace-event.schema.json",
|
|
166
172
|
"schemas/runtime/recursive-session-summary.schema.json",
|
|
167
173
|
"schemas/runtime/recursive-adr-candidate.schema.json",
|
|
@@ -376,6 +382,7 @@
|
|
|
376
382
|
".agents/skills/powershell-engineering/SKILL.md",
|
|
377
383
|
".agents/skills/javascript-engineering/SKILL.md",
|
|
378
384
|
".agents/skills/cloud-architect/SKILL.md",
|
|
385
|
+
".agents/skills/recursive-structured-analysis/SKILL.md",
|
|
379
386
|
"targets/codex/adapter.json",
|
|
380
387
|
"targets/codex/runtime/.codex",
|
|
381
388
|
"scripts/codex/apply-home-config.mjs",
|
|
@@ -401,6 +408,7 @@
|
|
|
401
408
|
".agents/skills/powershell-engineering/SKILL.md",
|
|
402
409
|
".agents/skills/javascript-engineering/SKILL.md",
|
|
403
410
|
".agents/skills/cloud-architect/SKILL.md",
|
|
411
|
+
".agents/skills/recursive-structured-analysis/SKILL.md",
|
|
404
412
|
"targets/claude-code/adapter.json",
|
|
405
413
|
"targets/claude-code/runtime/.claude",
|
|
406
414
|
"hooks"
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
"supportLevel": "full",
|
|
31
31
|
"supportNotes": [
|
|
32
32
|
"Codex is a first-class target for install guidance, repo intelligence, maintenance commands, and flow recovery.",
|
|
33
|
-
"Hook authoring ships, but native hook execution remains documentation-driven because Codex does not expose the same runtime hook model as Claude Code."
|
|
33
|
+
"Hook authoring ships, but native hook execution remains documentation-driven because Codex does not expose the same runtime hook model as Claude Code.",
|
|
34
|
+
"Codex installs also promote recursive structured-analysis discovery through AGENTS.md, the command catalog, and the shared runtime capability map."
|
|
34
35
|
]
|
|
35
36
|
},
|
|
36
37
|
{
|
|
@@ -63,7 +64,8 @@
|
|
|
63
64
|
"supportLevel": "full",
|
|
64
65
|
"supportNotes": [
|
|
65
66
|
"Claude Code is a first-class target for packaged skills, hooks, repo intelligence, maintenance commands, and flow recovery.",
|
|
66
|
-
"Claude installs keep both CLAUDE.md and AGENTS.md available so Claude-native and cross-agent entrypoints stay discoverable."
|
|
67
|
+
"Claude installs keep both CLAUDE.md and AGENTS.md available so Claude-native and cross-agent entrypoints stay discoverable.",
|
|
68
|
+
"Claude installs also promote recursive structured-analysis discovery through shared runtime capability surfaces instead of hiding it behind target-only wording."
|
|
67
69
|
]
|
|
68
70
|
},
|
|
69
71
|
{
|
|
@@ -91,7 +93,8 @@
|
|
|
91
93
|
"supportLevel": "partial",
|
|
92
94
|
"supportNotes": [
|
|
93
95
|
"Cursor can consume published docs, manifests, and recommendation output.",
|
|
94
|
-
"No first-class runtime mapping, hook execution, or flow-state recovery is shipped for Cursor yet."
|
|
96
|
+
"No first-class runtime mapping, hook execution, or flow-state recovery is shipped for Cursor yet.",
|
|
97
|
+
"Cursor still receives translated recursive structured-analysis promotion through the shared runtime capability map and recursive session artifacts."
|
|
95
98
|
]
|
|
96
99
|
},
|
|
97
100
|
{
|
|
@@ -119,7 +122,8 @@
|
|
|
119
122
|
"supportLevel": "partial",
|
|
120
123
|
"supportNotes": [
|
|
121
124
|
"OpenCode can consume published docs, manifests, and recommendation output.",
|
|
122
|
-
"No first-class runtime mapping, hook execution, or flow-state recovery is shipped for OpenCode yet."
|
|
125
|
+
"No first-class runtime mapping, hook execution, or flow-state recovery is shipped for OpenCode yet.",
|
|
126
|
+
"OpenCode still receives translated recursive structured-analysis promotion through the shared runtime capability map and recursive session artifacts."
|
|
123
127
|
]
|
|
124
128
|
}
|
|
125
129
|
]
|
package/package.json
CHANGED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://harness-forge.dev/schemas/runtime/recursive-execution-policy.schema.json",
|
|
4
|
+
"title": "Recursive structured execution policy",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"policyId",
|
|
9
|
+
"sessionId",
|
|
10
|
+
"isolationLevel",
|
|
11
|
+
"allowStructuredRun",
|
|
12
|
+
"allowedInputs",
|
|
13
|
+
"restrictedBehaviors",
|
|
14
|
+
"budgetSummary",
|
|
15
|
+
"createdAt",
|
|
16
|
+
"updatedAt"
|
|
17
|
+
],
|
|
18
|
+
"properties": {
|
|
19
|
+
"policyId": { "type": "string" },
|
|
20
|
+
"sessionId": { "type": "string" },
|
|
21
|
+
"isolationLevel": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"enum": ["metadata-only", "read-only-inspection", "read-only-repl", "isolated-execution"]
|
|
24
|
+
},
|
|
25
|
+
"allowStructuredRun": { "type": "boolean" },
|
|
26
|
+
"allowedInputs": {
|
|
27
|
+
"type": "array",
|
|
28
|
+
"items": { "type": "string" }
|
|
29
|
+
},
|
|
30
|
+
"restrictedBehaviors": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": { "type": "string" }
|
|
33
|
+
},
|
|
34
|
+
"budgetSummary": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"required": ["maxDurationMs", "maxRuns", "notes"],
|
|
38
|
+
"properties": {
|
|
39
|
+
"maxDurationMs": { "type": "integer", "minimum": 1 },
|
|
40
|
+
"maxRuns": { "type": "integer", "minimum": 1 },
|
|
41
|
+
"notes": { "type": "string" }
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"createdAt": { "type": "string", "format": "date-time" },
|
|
45
|
+
"updatedAt": { "type": "string", "format": "date-time" }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://harness-forge.dev/schemas/runtime/recursive-language-capabilities.schema.json",
|
|
4
|
+
"title": "Recursive language capabilities",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["version", "generatedAt", "workspaceRoot", "summary", "languages"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"version": { "type": "integer", "minimum": 1 },
|
|
10
|
+
"generatedAt": { "type": "string", "format": "date-time" },
|
|
11
|
+
"workspaceRoot": { "type": "string" },
|
|
12
|
+
"summary": { "type": "string" },
|
|
13
|
+
"languages": {
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": { "$ref": "#/$defs/languageCapability" }
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"$defs": {
|
|
19
|
+
"languageCapability": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"required": ["languageId", "displayName", "adapterStatus", "analysisDepth", "nativeExecutionStatus", "notes"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"languageId": { "type": "string" },
|
|
25
|
+
"displayName": { "type": "string" },
|
|
26
|
+
"adapterStatus": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"enum": ["unavailable", "available", "degraded"]
|
|
29
|
+
},
|
|
30
|
+
"analysisDepth": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"enum": ["none", "syntax-aware", "build-aware", "semantic"]
|
|
33
|
+
},
|
|
34
|
+
"nativeExecutionStatus": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"enum": ["unsupported", "disabled", "available"]
|
|
37
|
+
},
|
|
38
|
+
"notes": { "type": "string" },
|
|
39
|
+
"evidenceRefs": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": { "type": "string" }
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://harness-forge.dev/schemas/runtime/recursive-run-meta.schema.json",
|
|
4
|
+
"title": "Recursive structured run metadata",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["runId", "sessionId", "submissionMode", "status", "startedAt", "policyRef", "summary"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"runId": { "type": "string" },
|
|
10
|
+
"sessionId": { "type": "string" },
|
|
11
|
+
"submissionMode": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"enum": ["file", "stdin"]
|
|
14
|
+
},
|
|
15
|
+
"sourceRef": { "type": "string" },
|
|
16
|
+
"status": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"enum": ["pending", "running", "success", "failure", "rejection", "interrupted", "degraded"]
|
|
19
|
+
},
|
|
20
|
+
"startedAt": { "type": "string", "format": "date-time" },
|
|
21
|
+
"completedAt": { "type": "string", "format": "date-time" },
|
|
22
|
+
"policyRef": { "type": "string" },
|
|
23
|
+
"resultRef": { "type": "string" },
|
|
24
|
+
"summary": { "type": "string" },
|
|
25
|
+
"warningCount": { "type": "integer", "minimum": 0 },
|
|
26
|
+
"failureReason": { "type": "string" }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://harness-forge.dev/schemas/runtime/recursive-run-result.schema.json",
|
|
4
|
+
"title": "Recursive structured run result",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["runId", "outcome", "findings", "warnings", "artifactsRead", "artifactsWritten", "diagnostics", "completedAt"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"runId": { "type": "string" },
|
|
10
|
+
"outcome": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"enum": ["success", "failure", "rejection", "interrupted", "degraded"]
|
|
13
|
+
},
|
|
14
|
+
"findings": {
|
|
15
|
+
"type": "array",
|
|
16
|
+
"items": { "type": "string" }
|
|
17
|
+
},
|
|
18
|
+
"warnings": {
|
|
19
|
+
"type": "array",
|
|
20
|
+
"items": { "type": "string" }
|
|
21
|
+
},
|
|
22
|
+
"artifactsRead": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": { "type": "string" }
|
|
25
|
+
},
|
|
26
|
+
"artifactsWritten": {
|
|
27
|
+
"type": "array",
|
|
28
|
+
"items": { "type": "string" }
|
|
29
|
+
},
|
|
30
|
+
"diagnostics": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": { "type": "string" }
|
|
33
|
+
},
|
|
34
|
+
"completedAt": { "type": "string", "format": "date-time" }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -71,9 +71,13 @@ const cliRuns = fs.existsSync(distCliPath)
|
|
|
71
71
|
{ name: "pack", result: run(nodeCommand, [distCliPath, "pack", "--help"]) },
|
|
72
72
|
{ name: "review", result: run(nodeCommand, [distCliPath, "review", "--help"]) },
|
|
73
73
|
{ name: "export", result: run(nodeCommand, [distCliPath, "export", "--help"]) },
|
|
74
|
+
{ name: "update", result: run(nodeCommand, [distCliPath, "update", "--help"]) },
|
|
75
|
+
{ name: "upgrade", result: run(nodeCommand, [distCliPath, "upgrade", "--help"]) },
|
|
74
76
|
{ name: "catalog", result: run(nodeCommand, [distCliPath, "catalog", "--json"]) },
|
|
75
77
|
{ name: "template-validate", result: run(nodeCommand, [distCliPath, "template", "validate", "--json"]) },
|
|
76
78
|
{ name: "flow-status", result: run(nodeCommand, [distCliPath, "flow", "status", "--json"]) },
|
|
79
|
+
{ name: "recursive-capabilities", result: run(nodeCommand, [distCliPath, "recursive", "capabilities", "--help"]) },
|
|
80
|
+
{ name: "recursive-run", result: run(nodeCommand, [distCliPath, "recursive", "run", "--help"]) },
|
|
77
81
|
{ name: "doctor", result: run(nodeCommand, [distCliPath, "doctor", "--json"]) },
|
|
78
82
|
{ name: "audit", result: run(nodeCommand, [distCliPath, "audit", "--json"]) }
|
|
79
83
|
]
|
|
@@ -57,6 +57,18 @@ const scenarios = [
|
|
|
57
57
|
args: ["refresh", "--root", tempRoot],
|
|
58
58
|
expectStatus: 1,
|
|
59
59
|
expectStderr: "No installed targets were found"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "update-help",
|
|
63
|
+
args: ["update", "--help"],
|
|
64
|
+
expectStatus: 0,
|
|
65
|
+
expectStdout: "Usage: hforge update"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "recursive-capabilities-help",
|
|
69
|
+
args: ["recursive", "capabilities", "--help"],
|
|
70
|
+
expectStatus: 0,
|
|
71
|
+
expectStdout: "Usage: hforge recursive capabilities"
|
|
60
72
|
}
|
|
61
73
|
];
|
|
62
74
|
|
|
@@ -25,6 +25,8 @@ for (const command of [
|
|
|
25
25
|
"shell setup",
|
|
26
26
|
"shell status",
|
|
27
27
|
"refresh",
|
|
28
|
+
"update",
|
|
29
|
+
"upgrade",
|
|
28
30
|
"task list",
|
|
29
31
|
"task inspect",
|
|
30
32
|
"pack inspect",
|
|
@@ -42,6 +44,10 @@ for (const command of [
|
|
|
42
44
|
"template validate",
|
|
43
45
|
"template suggest",
|
|
44
46
|
"flow status",
|
|
47
|
+
"recursive capabilities",
|
|
48
|
+
"recursive run",
|
|
49
|
+
"recursive runs",
|
|
50
|
+
"recursive inspect-run",
|
|
45
51
|
"observability summarize",
|
|
46
52
|
"observability report",
|
|
47
53
|
"parallel plan",
|
|
@@ -59,7 +65,18 @@ for (const command of [
|
|
|
59
65
|
}
|
|
60
66
|
}
|
|
61
67
|
|
|
62
|
-
for (const fragment of [
|
|
68
|
+
for (const fragment of [
|
|
69
|
+
"doctor",
|
|
70
|
+
"audit",
|
|
71
|
+
"cartograph",
|
|
72
|
+
"target inspect",
|
|
73
|
+
"shell setup",
|
|
74
|
+
"recursive capabilities",
|
|
75
|
+
"update --root",
|
|
76
|
+
"validate:release",
|
|
77
|
+
"validate:local",
|
|
78
|
+
"release:dry-run"
|
|
79
|
+
]) {
|
|
63
80
|
if (!readme.includes(fragment)) {
|
|
64
81
|
failures.push({ file: "README.md", issue: `Missing README reference ${fragment}` });
|
|
65
82
|
}
|
|
@@ -72,7 +89,7 @@ if (!includesAny(readme, ["flow status", "flow recovery"])) {
|
|
|
72
89
|
});
|
|
73
90
|
}
|
|
74
91
|
|
|
75
|
-
for (const fragment of ["doctor", "audit", "refresh", "diff-install", "sync", "upgrade-surface", "prune"]) {
|
|
92
|
+
for (const fragment of ["doctor", "audit", "refresh", "update", "upgrade", "diff-install", "sync", "upgrade-surface", "prune"]) {
|
|
76
93
|
if (!maintenanceDoc.includes(fragment)) {
|
|
77
94
|
failures.push({ file: "docs/maintenance-lifecycle.md", issue: `Missing maintenance command ${fragment}` });
|
|
78
95
|
}
|
|
@@ -75,7 +75,18 @@ for (const hook of hooksManifest.hooks ?? []) {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
for (const requiredArtifactId of [
|
|
78
|
+
for (const requiredArtifactId of [
|
|
79
|
+
"spec",
|
|
80
|
+
"plan",
|
|
81
|
+
"tasks",
|
|
82
|
+
"flow-state",
|
|
83
|
+
"issue-export",
|
|
84
|
+
"recursive-runtime-language-capabilities",
|
|
85
|
+
"recursive-runtime-execution-policy",
|
|
86
|
+
"recursive-runtime-session-capabilities",
|
|
87
|
+
"recursive-runtime-run-meta",
|
|
88
|
+
"recursive-runtime-run-result"
|
|
89
|
+
]) {
|
|
79
90
|
if (!(flowArtifacts.artifacts ?? []).some((artifact) => artifact.id === requiredArtifactId)) {
|
|
80
91
|
failures.push({ issue: "Flow artifact catalog is missing a required artifact.", artifactId: requiredArtifactId });
|
|
81
92
|
}
|
|
@@ -16,6 +16,14 @@ const requiredPaths = new Set([
|
|
|
16
16
|
|
|
17
17
|
const failures = [];
|
|
18
18
|
const packageFiles = packageJson.files ?? [];
|
|
19
|
+
const explicitlyRequiredRecursivePaths = [
|
|
20
|
+
".agents/skills/recursive-structured-analysis/SKILL.md",
|
|
21
|
+
"skills/recursive-structured-analysis/SKILL.md",
|
|
22
|
+
"schemas/runtime/recursive-execution-policy.schema.json",
|
|
23
|
+
"schemas/runtime/recursive-language-capabilities.schema.json",
|
|
24
|
+
"schemas/runtime/recursive-run-meta.schema.json",
|
|
25
|
+
"schemas/runtime/recursive-run-result.schema.json"
|
|
26
|
+
];
|
|
19
27
|
|
|
20
28
|
function isCoveredByPackageFiles(requiredPath) {
|
|
21
29
|
return packageFiles.some((entry) => requiredPath === entry || requiredPath.startsWith(`${entry}/`));
|
|
@@ -34,6 +42,12 @@ for (const requiredPath of requiredPaths) {
|
|
|
34
42
|
}
|
|
35
43
|
}
|
|
36
44
|
|
|
45
|
+
for (const requiredPath of explicitlyRequiredRecursivePaths) {
|
|
46
|
+
if (!requiredPaths.has(requiredPath)) {
|
|
47
|
+
failures.push({ issue: "Recursive structured-analysis path is missing from package-surface manifest.", path: requiredPath });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
37
51
|
const packed =
|
|
38
52
|
process.platform === "win32"
|
|
39
53
|
? spawnSync("cmd.exe", ["/d", "/s", "/c", "npm pack --json --dry-run"], {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recursive-structured-analysis
|
|
3
|
+
description: session-scoped recursive structured analysis for difficult repository investigation. use when recursive work needs a bounded capability map, explicit execution posture, and durable run records instead of free-form chat exploration.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Recursive Structured Analysis
|
|
7
|
+
|
|
8
|
+
## Trigger Signals
|
|
9
|
+
|
|
10
|
+
- the task already needs a recursive session and now needs one bounded
|
|
11
|
+
analysis step inside that session
|
|
12
|
+
- the repository is mixed-language or architecture-heavy and support truth
|
|
13
|
+
should be checked before deeper investigation
|
|
14
|
+
- the operator needs a durable, inspectable analysis run rather than a prompt
|
|
15
|
+
transcript
|
|
16
|
+
|
|
17
|
+
## Inspect First
|
|
18
|
+
|
|
19
|
+
- `.hforge/runtime/recursive/language-capabilities.json`
|
|
20
|
+
- `.hforge/runtime/recursive/sessions/<sessionId>/execution-policy.json`
|
|
21
|
+
- `.hforge/runtime/recursive/sessions/<sessionId>/capabilities.json`
|
|
22
|
+
- `.hforge/generated/agent-command-catalog.json`
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. inspect recursive capability truth before assuming a language or adapter is
|
|
27
|
+
available
|
|
28
|
+
2. inspect the active recursive session and execution policy
|
|
29
|
+
3. use one bounded structured run at a time
|
|
30
|
+
4. inspect run history and run results instead of relying on chat-only memory
|
|
31
|
+
5. keep support claims honest when a language is degraded, unavailable, or
|
|
32
|
+
host-executed only
|
|
33
|
+
|
|
34
|
+
## Command Surface
|
|
35
|
+
|
|
36
|
+
- `hforge recursive capabilities --root . --json`
|
|
37
|
+
- `hforge recursive run <sessionId> --file <snippet> --root . --json`
|
|
38
|
+
- `hforge recursive run <sessionId> --stdin --root . --json`
|
|
39
|
+
- `hforge recursive runs <sessionId> --root . --json`
|
|
40
|
+
- `hforge recursive inspect-run <sessionId> <runId> --root . --json`
|
|
41
|
+
|
|
42
|
+
## Operating Rule
|
|
43
|
+
|
|
44
|
+
Recursive structured analysis is the promoted execution surface for recursive
|
|
45
|
+
repository investigation. Treat it as session-scoped, policy-bound, and
|
|
46
|
+
artifact-backed. Do not describe it as a generic REPL or as native execution
|
|
47
|
+
parity across all languages unless the capability map explicitly supports that
|
|
48
|
+
claim.
|
|
@@ -34,10 +34,11 @@
|
|
|
34
34
|
],
|
|
35
35
|
"runtimeSurfaces": [
|
|
36
36
|
".hforge/runtime/index.json",
|
|
37
|
-
".hforge/runtime/README.md"
|
|
37
|
+
".hforge/runtime/README.md",
|
|
38
|
+
".hforge/runtime/recursive/language-capabilities.json"
|
|
38
39
|
],
|
|
39
40
|
"supportMode": "native",
|
|
40
|
-
"notes": "Claude Code keeps repo-root and .claude bridges thin while canonical skills, rules, knowledge, and templates live under the hidden .hforge layer.",
|
|
41
|
+
"notes": "Claude Code keeps repo-root and .claude bridges thin while canonical skills, rules, knowledge, and templates live under the hidden .hforge layer, including promoted recursive structured-analysis discovery through the shared runtime.",
|
|
41
42
|
"authoritativeSurfaces": [
|
|
42
43
|
".hforge/library/skills",
|
|
43
44
|
".hforge/library/rules",
|
|
@@ -33,10 +33,11 @@
|
|
|
33
33
|
],
|
|
34
34
|
"runtimeSurfaces": [
|
|
35
35
|
".hforge/runtime/index.json",
|
|
36
|
-
".hforge/runtime/README.md"
|
|
36
|
+
".hforge/runtime/README.md",
|
|
37
|
+
".hforge/runtime/recursive/language-capabilities.json"
|
|
37
38
|
],
|
|
38
39
|
"supportMode": "native",
|
|
39
|
-
"notes": "Codex keeps repo-root bridges thin and routes canonical AI content through the hidden .hforge library, template, and runtime layer.",
|
|
40
|
+
"notes": "Codex keeps repo-root bridges thin and routes canonical AI content through the hidden .hforge library, template, and runtime layer, including promoted recursive structured-analysis discovery through the shared runtime.",
|
|
40
41
|
"authoritativeSurfaces": [
|
|
41
42
|
".hforge/library/skills",
|
|
42
43
|
".hforge/library/rules",
|
|
@@ -35,10 +35,11 @@
|
|
|
35
35
|
],
|
|
36
36
|
"runtimeSurfaces": [
|
|
37
37
|
".hforge/runtime/index.json",
|
|
38
|
-
".hforge/runtime/README.md"
|
|
38
|
+
".hforge/runtime/README.md",
|
|
39
|
+
".hforge/runtime/recursive/language-capabilities.json"
|
|
39
40
|
],
|
|
40
41
|
"supportMode": "translated",
|
|
41
|
-
"notes": "Cursor relies on thin visible bridges and the hidden .hforge runtime instead of a native runtime payload or root-visible canonical content.",
|
|
42
|
+
"notes": "Cursor relies on thin visible bridges and the hidden .hforge runtime instead of a native runtime payload or root-visible canonical content, including translated recursive structured-analysis discovery through the shared runtime capability map and durable session artifacts.",
|
|
42
43
|
"authoritativeSurfaces": [
|
|
43
44
|
".hforge/library/skills",
|
|
44
45
|
".hforge/library/rules",
|
|
@@ -35,10 +35,11 @@
|
|
|
35
35
|
],
|
|
36
36
|
"runtimeSurfaces": [
|
|
37
37
|
".hforge/runtime/index.json",
|
|
38
|
-
".hforge/runtime/README.md"
|
|
38
|
+
".hforge/runtime/README.md",
|
|
39
|
+
".hforge/runtime/recursive/language-capabilities.json"
|
|
39
40
|
],
|
|
40
41
|
"supportMode": "translated",
|
|
41
|
-
"notes": "OpenCode relies on thin visible bridges and the hidden .hforge runtime instead of a native runtime payload or root-visible canonical content.",
|
|
42
|
+
"notes": "OpenCode relies on thin visible bridges and the hidden .hforge runtime instead of a native runtime payload or root-visible canonical content, including translated recursive structured-analysis discovery through the shared runtime capability map and durable session artifacts.",
|
|
42
43
|
"authoritativeSurfaces": [
|
|
43
44
|
".hforge/library/skills",
|
|
44
45
|
".hforge/library/rules",
|