@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,132 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import fs from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { loadBundleManifests, loadProfileManifests } from "../../domain/manifests/index.js";
6
+ import { loadInstallState, saveInstallState } from "../../domain/state/install-state.js";
7
+ import { loadTargetAdapter } from "../../domain/targets/adapter.js";
8
+ import { ValidationError, PACKAGE_ROOT, STATE_DIR, writeJsonFile, readJsonFile } from "../../shared/index.js";
9
+ import { createInstallPlan } from "./plan-install.js";
10
+ import { applyInstall } from "./apply-install.js";
11
+ function runNpm(args, cwd) {
12
+ if (process.platform === "win32") {
13
+ return spawnSync("cmd.exe", ["/d", "/s", "/c", `npm ${args.join(" ")}`], {
14
+ cwd,
15
+ encoding: "utf8"
16
+ });
17
+ }
18
+ return spawnSync("npm", args, {
19
+ cwd,
20
+ encoding: "utf8"
21
+ });
22
+ }
23
+ async function resolveLatestPackageRoot(packageTag) {
24
+ const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "hforge-update-"));
25
+ const result = runNpm(["install", "--ignore-scripts", "--no-save", `@harness-forge/cli@${packageTag}`], tempRoot);
26
+ if ((result.status ?? 1) !== 0) {
27
+ throw new ValidationError(`Failed to download @harness-forge/cli@${packageTag}: ${result.stderr?.trim() || result.stdout?.trim() || "unknown npm error"}`);
28
+ }
29
+ const packageRoot = path.join(tempRoot, "node_modules", "@harness-forge", "cli");
30
+ const packageJson = await readJsonFile(path.join(packageRoot, "package.json"));
31
+ return {
32
+ packageRoot,
33
+ version: packageJson.version,
34
+ cleanup: async () => {
35
+ await fs.rm(tempRoot, { recursive: true, force: true });
36
+ }
37
+ };
38
+ }
39
+ async function writeUpdateBackup(workspaceRoot) {
40
+ const state = await loadInstallState(workspaceRoot);
41
+ if (!state) {
42
+ return undefined;
43
+ }
44
+ const backupPath = path.join(workspaceRoot, STATE_DIR, `update-backup-${Date.now()}.json`);
45
+ await writeJsonFile(backupPath, state);
46
+ return backupPath;
47
+ }
48
+ function collectPreservedStateRoots(workspaceRoot) {
49
+ return [
50
+ path.join(workspaceRoot, ".hforge", "runtime", "tasks"),
51
+ path.join(workspaceRoot, ".hforge", "runtime", "decisions"),
52
+ path.join(workspaceRoot, ".hforge", "runtime", "recursive", "sessions"),
53
+ path.join(workspaceRoot, ".hforge", "observability")
54
+ ];
55
+ }
56
+ export async function updateWorkspace(options) {
57
+ const workspaceRoot = path.resolve(options.workspaceRoot);
58
+ const packageTag = options.packageTag ?? "latest";
59
+ const dryRun = options.dryRun ?? false;
60
+ const [state, currentPackageJson] = await Promise.all([
61
+ loadInstallState(workspaceRoot),
62
+ readJsonFile(path.join(PACKAGE_ROOT, "package.json"))
63
+ ]);
64
+ if (!state || state.installedTargets.length === 0) {
65
+ throw new ValidationError(`No installed Harness Forge workspace state found at ${workspaceRoot}. Run init/install first.`);
66
+ }
67
+ const latest = options.packageRootOverride
68
+ ? {
69
+ packageRoot: path.resolve(options.packageRootOverride),
70
+ version: (await readJsonFile(path.join(path.resolve(options.packageRootOverride), "package.json"))).version,
71
+ cleanup: async () => { }
72
+ }
73
+ : await resolveLatestPackageRoot(packageTag);
74
+ const backupPath = dryRun ? undefined : await writeUpdateBackup(workspaceRoot);
75
+ try {
76
+ const [bundles, profiles] = await Promise.all([
77
+ loadBundleManifests(latest.packageRoot),
78
+ loadProfileManifests(latest.packageRoot)
79
+ ]);
80
+ const messages = [];
81
+ for (const targetId of state.installedTargets) {
82
+ const target = await loadTargetAdapter(latest.packageRoot, targetId);
83
+ const plan = createInstallPlan(latest.packageRoot, {
84
+ targetId,
85
+ profileId: state.setupProfile,
86
+ bundleIds: state.installedBundles,
87
+ languageIds: [],
88
+ frameworkIds: [],
89
+ capabilityIds: [],
90
+ rootPath: workspaceRoot,
91
+ mode: dryRun ? "dry-run" : "apply"
92
+ }, bundles, profiles, target, { workspaceRoot });
93
+ if (!dryRun) {
94
+ const applied = await applyInstall(workspaceRoot, plan, latest.packageRoot);
95
+ messages.push(...applied.messages);
96
+ }
97
+ else {
98
+ messages.push(`Planned refresh for ${targetId}: ${plan.operations.length} operations.`);
99
+ }
100
+ }
101
+ if (!dryRun) {
102
+ const refreshed = await loadInstallState(workspaceRoot);
103
+ if (refreshed) {
104
+ await saveInstallState(workspaceRoot, {
105
+ ...refreshed,
106
+ packageVersion: latest.version,
107
+ lastAction: "update",
108
+ timestamps: {
109
+ ...refreshed.timestamps,
110
+ updatedAt: new Date().toISOString()
111
+ }
112
+ });
113
+ }
114
+ }
115
+ return {
116
+ workspaceRoot,
117
+ currentPackageVersion: state.packageVersion ?? currentPackageJson.version,
118
+ latestPackageVersion: latest.version,
119
+ packageRootUsed: latest.packageRoot,
120
+ updatedTargets: state.installedTargets,
121
+ updatedBundles: state.installedBundles,
122
+ preservedStateRoots: collectPreservedStateRoots(workspaceRoot),
123
+ ...(backupPath ? { backupPath } : {}),
124
+ dryRun,
125
+ messages
126
+ };
127
+ }
128
+ finally {
129
+ await latest.cleanup();
130
+ }
131
+ }
132
+ //# sourceMappingURL=update-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-workspace.js","sourceRoot":"","sources":["../../../src/application/install/update-workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { RecursiveLanguageCapabilities } from "../../domain/recursive/language-capabilities.js";
2
+ import type { RepoIntelligenceResult } from "../../domain/intelligence/repo-intelligence.js";
3
+ export declare function deriveRecursiveLanguageCapabilities(workspaceRoot: string, intelligenceInput?: RepoIntelligenceResult): Promise<RecursiveLanguageCapabilities>;
4
+ //# sourceMappingURL=derive-language-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-language-capabilities.d.ts","sourceRoot":"","sources":["../../../src/application/recursive/derive-language-capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkD,6BAA6B,EAAkC,MAAM,iDAAiD,CAAC;AACrL,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AA6L7F,wBAAsB,mCAAmC,CACvD,aAAa,EAAE,MAAM,EACrB,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,OAAO,CAAC,6BAA6B,CAAC,CAiBxC"}
@@ -0,0 +1,182 @@
1
+ import path from "node:path";
2
+ import { loadInstallState } from "../../domain/state/install-state.js";
3
+ import { recommendBundles } from "../recommendations/recommend-bundles.js";
4
+ import { recommendFromIntelligence } from "../recommendations/recommend-from-intelligence.js";
5
+ const RECURSIVE_LANGUAGE_SEEDS = [
6
+ {
7
+ languageId: "typescript",
8
+ displayName: "TypeScript",
9
+ analysisDepth: "semantic",
10
+ adapterStatus: "available",
11
+ nativeExecutionStatus: "disabled",
12
+ notes: "Host-executed structured analysis can inspect TypeScript-rich repositories with semantic support."
13
+ },
14
+ {
15
+ languageId: "java",
16
+ displayName: "Java",
17
+ analysisDepth: "build-aware",
18
+ adapterStatus: "available",
19
+ nativeExecutionStatus: "disabled",
20
+ notes: "Repository-aware structured analysis can follow Java build and service conventions without claiming native JVM execution."
21
+ },
22
+ {
23
+ languageId: "dotnet",
24
+ displayName: ".NET",
25
+ analysisDepth: "build-aware",
26
+ adapterStatus: "available",
27
+ nativeExecutionStatus: "disabled",
28
+ notes: "Structured analysis can inspect .NET solutions and project layouts through host-executed runtime helpers."
29
+ },
30
+ {
31
+ languageId: "powershell",
32
+ displayName: "PowerShell",
33
+ analysisDepth: "semantic",
34
+ adapterStatus: "available",
35
+ nativeExecutionStatus: "disabled",
36
+ notes: "Structured analysis can inspect PowerShell-heavy repositories with strong script-level support."
37
+ },
38
+ {
39
+ languageId: "lua",
40
+ displayName: "Lua",
41
+ analysisDepth: "build-aware",
42
+ adapterStatus: "available",
43
+ nativeExecutionStatus: "disabled",
44
+ notes: "Structured analysis can inspect Lua projects, but promoted execution remains host-scoped rather than native Lua runtime execution."
45
+ },
46
+ {
47
+ languageId: "python",
48
+ displayName: "Python",
49
+ analysisDepth: "build-aware",
50
+ adapterStatus: "degraded",
51
+ nativeExecutionStatus: "unsupported",
52
+ notes: "Repository analysis is available, but native Python execution is not promoted in this rollout phase."
53
+ },
54
+ {
55
+ languageId: "go",
56
+ displayName: "Go",
57
+ analysisDepth: "build-aware",
58
+ adapterStatus: "degraded",
59
+ nativeExecutionStatus: "unsupported",
60
+ notes: "Repository-aware analysis is available for Go modules, but native Go execution is not promoted in this rollout phase."
61
+ },
62
+ {
63
+ languageId: "kotlin",
64
+ displayName: "Kotlin",
65
+ analysisDepth: "build-aware",
66
+ adapterStatus: "degraded",
67
+ nativeExecutionStatus: "unsupported",
68
+ notes: "Kotlin analysis is available through repository-aware adapters, while native execution remains future-scoped."
69
+ },
70
+ {
71
+ languageId: "rust",
72
+ displayName: "Rust",
73
+ analysisDepth: "syntax-aware",
74
+ adapterStatus: "degraded",
75
+ nativeExecutionStatus: "unsupported",
76
+ notes: "Rust support is currently syntax-aware to build-aware depending on workspace evidence; native execution is not promoted."
77
+ },
78
+ {
79
+ languageId: "cpp",
80
+ displayName: "C++",
81
+ analysisDepth: "syntax-aware",
82
+ adapterStatus: "degraded",
83
+ nativeExecutionStatus: "unsupported",
84
+ notes: "C++ analysis is available conservatively through repository structure and source-level evidence, without native execution claims."
85
+ },
86
+ {
87
+ languageId: "php",
88
+ displayName: "PHP",
89
+ analysisDepth: "syntax-aware",
90
+ adapterStatus: "degraded",
91
+ nativeExecutionStatus: "unsupported",
92
+ notes: "PHP analysis is available through repository-aware adapters; native PHP execution is not promoted in this phase."
93
+ },
94
+ {
95
+ languageId: "perl",
96
+ displayName: "Perl",
97
+ analysisDepth: "syntax-aware",
98
+ adapterStatus: "degraded",
99
+ nativeExecutionStatus: "unsupported",
100
+ notes: "Perl analysis is conservative and repository-aware only in the current rollout."
101
+ },
102
+ {
103
+ languageId: "swift",
104
+ displayName: "Swift",
105
+ analysisDepth: "syntax-aware",
106
+ adapterStatus: "degraded",
107
+ nativeExecutionStatus: "unsupported",
108
+ notes: "Swift analysis is repository-aware, while native execution remains explicitly unsupported in the promoted runtime."
109
+ },
110
+ {
111
+ languageId: "shell",
112
+ displayName: "Shell",
113
+ analysisDepth: "build-aware",
114
+ adapterStatus: "degraded",
115
+ nativeExecutionStatus: "unsupported",
116
+ notes: "Shell scripts can be analyzed as repository artifacts, but the promoted runtime does not claim native shell execution parity."
117
+ }
118
+ ];
119
+ function unique(values) {
120
+ return [...new Set(values)];
121
+ }
122
+ function collectDetectedLanguageIds(intelligence, installedBundles) {
123
+ return new Set([
124
+ ...intelligence.dominantLanguages.map((language) => language.id),
125
+ ...installedBundles.filter((bundleId) => bundleId.startsWith("lang:")).map((bundleId) => bundleId.slice("lang:".length))
126
+ ]);
127
+ }
128
+ function createUnavailableEntry(seed, workspaceRoot) {
129
+ return {
130
+ languageId: seed.languageId,
131
+ displayName: seed.displayName,
132
+ adapterStatus: "unavailable",
133
+ analysisDepth: "none",
134
+ nativeExecutionStatus: "unsupported",
135
+ notes: `No strong ${seed.displayName} signals were detected for this workspace, so recursive structured analysis does not currently advertise active ${seed.displayName} support.`,
136
+ evidenceRefs: [path.join(workspaceRoot, ".hforge", "runtime", "repo", "scan-summary.json").replaceAll("\\", "/")]
137
+ };
138
+ }
139
+ function buildEntry(seed, workspaceRoot, intelligence, installedBundles) {
140
+ const languageSignal = intelligence.dominantLanguages.find((language) => language.id === seed.languageId);
141
+ const installedBundle = installedBundles.includes(`lang:${seed.languageId}`) ? `bundle:lang:${seed.languageId}` : null;
142
+ if (!languageSignal && !installedBundle) {
143
+ return createUnavailableEntry(seed, workspaceRoot);
144
+ }
145
+ return {
146
+ languageId: seed.languageId,
147
+ displayName: seed.displayName,
148
+ adapterStatus: seed.adapterStatus,
149
+ analysisDepth: seed.analysisDepth,
150
+ nativeExecutionStatus: seed.nativeExecutionStatus,
151
+ notes: seed.notes,
152
+ evidenceRefs: unique([
153
+ ...(languageSignal?.evidence ?? []),
154
+ ...(installedBundle ? [installedBundle] : []),
155
+ path.join(workspaceRoot, ".hforge", "runtime", "repo", "recommendations.json").replaceAll("\\", "/")
156
+ ])
157
+ };
158
+ }
159
+ function createSummary(workspaceRoot, detectedLanguageIds) {
160
+ if (detectedLanguageIds.size === 0) {
161
+ return "Canonical recursive structured-analysis capability map for this workspace. No strong language signals were detected yet, so support remains conservative and mostly unavailable.";
162
+ }
163
+ const names = RECURSIVE_LANGUAGE_SEEDS.filter((seed) => detectedLanguageIds.has(seed.languageId)).map((seed) => seed.displayName);
164
+ return `Canonical recursive structured-analysis capability map for this workspace. Detected language signals: ${names.join(", ")}. Structured runs are host-executed and bounded by policy; native execution posture remains explicitly differentiated.`;
165
+ }
166
+ export async function deriveRecursiveLanguageCapabilities(workspaceRoot, intelligenceInput) {
167
+ const [state, intelligence, bundleRecommendations] = await Promise.all([
168
+ loadInstallState(workspaceRoot),
169
+ intelligenceInput ? Promise.resolve(intelligenceInput) : recommendFromIntelligence(workspaceRoot),
170
+ recommendBundles(workspaceRoot)
171
+ ]);
172
+ const installedBundles = [...new Set([...(state?.installedBundles ?? []), ...bundleRecommendations])];
173
+ const detectedLanguageIds = collectDetectedLanguageIds(intelligence, installedBundles);
174
+ return {
175
+ version: 1,
176
+ generatedAt: new Date().toISOString(),
177
+ workspaceRoot: workspaceRoot.replaceAll("\\", "/"),
178
+ summary: createSummary(workspaceRoot, detectedLanguageIds),
179
+ languages: RECURSIVE_LANGUAGE_SEEDS.map((seed) => buildEntry(seed, workspaceRoot, intelligence, installedBundles))
180
+ };
181
+ }
182
+ //# sourceMappingURL=derive-language-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-language-capabilities.js","sourceRoot":"","sources":["../../../src/application/recursive/derive-language-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mDAAmD,CAAC;AAW9F,MAAM,wBAAwB,GAA4B;IACxD;QACE,UAAU,EAAE,YAAY;QACxB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,UAAU;QACzB,aAAa,EAAE,WAAW;QAC1B,qBAAqB,EAAE,UAAU;QACjC,KAAK,EAAE,mGAAmG;KAC3G;IACD;QACE,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,aAAa;QAC5B,aAAa,EAAE,WAAW;QAC1B,qBAAqB,EAAE,UAAU;QACjC,KAAK,EAAE,2HAA2H;KACnI;IACD;QACE,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,aAAa;QAC5B,aAAa,EAAE,WAAW;QAC1B,qBAAqB,EAAE,UAAU;QACjC,KAAK,EAAE,2GAA2G;KACnH;IACD;QACE,UAAU,EAAE,YAAY;QACxB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,UAAU;QACzB,aAAa,EAAE,WAAW;QAC1B,qBAAqB,EAAE,UAAU;QACjC,KAAK,EAAE,iGAAiG;KACzG;IACD;QACE,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,aAAa;QAC5B,aAAa,EAAE,WAAW;QAC1B,qBAAqB,EAAE,UAAU;QACjC,KAAK,EAAE,oIAAoI;KAC5I;IACD;QACE,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,QAAQ;QACrB,aAAa,EAAE,aAAa;QAC5B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,sGAAsG;KAC9G;IACD;QACE,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,aAAa;QAC5B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,uHAAuH;KAC/H;IACD;QACE,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,QAAQ;QACrB,aAAa,EAAE,aAAa;QAC5B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,+GAA+G;KACvH;IACD;QACE,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,cAAc;QAC7B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,0HAA0H;KAClI;IACD;QACE,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,cAAc;QAC7B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,mIAAmI;KAC3I;IACD;QACE,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,cAAc;QAC7B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,kHAAkH;KAC1H;IACD;QACE,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,cAAc;QAC7B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,iFAAiF;KACzF;IACD;QACE,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,OAAO;QACpB,aAAa,EAAE,cAAc;QAC7B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,oHAAoH;KAC5H;IACD;QACE,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,OAAO;QACpB,aAAa,EAAE,aAAa;QAC5B,aAAa,EAAE,UAAU;QACzB,qBAAqB,EAAE,aAAa;QACpC,KAAK,EAAE,+HAA+H;KACvI;CACF,CAAC;AAEF,SAAS,MAAM,CAAI,MAAW;IAC5B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,0BAA0B,CAAC,YAAoC,EAAE,gBAA0B;IAClG,OAAO,IAAI,GAAG,CAAC;QACb,GAAG,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KACzH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,IAA2B,EAAE,aAAqB;IAChF,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,aAAsB;QACrC,aAAa,EAAE,MAAe;QAC9B,qBAAqB,EAAE,aAAsB;QAC7C,KAAK,EAAE,aAAa,IAAI,CAAC,WAAW,mHAAmH,IAAI,CAAC,WAAW,WAAW;QAClL,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAClH,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,IAA2B,EAC3B,aAAqB,EACrB,YAAoC,EACpC,gBAA0B;IAE1B,MAAM,cAAc,GAAG,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1G,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvH,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,OAAO,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,MAAM,CAAC;YACnB,GAAG,CAAC,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC;YACnC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;SACrG,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,aAAqB,EAAE,mBAAgC;IAC5E,IAAI,mBAAmB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,kLAAkL,CAAC;IAC5L,CAAC;IAED,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClI,OAAO,yGAAyG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wHAAwH,CAAC;AAC3P,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,aAAqB,EACrB,iBAA0C;IAE1C,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrE,gBAAgB,CAAC,aAAa,CAAC;QAC/B,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,aAAa,CAAC;QACjG,gBAAgB,CAAC,aAAa,CAAC;KAChC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,IAAI,EAAE,CAAC,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAEvF,OAAO;QACL,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;QAClD,OAAO,EAAE,aAAa,CAAC,aAAa,EAAE,mBAAmB,CAAC;QAC1D,SAAS,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;KACnH,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plan-task.d.ts","sourceRoot":"","sources":["../../../src/application/recursive/plan-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,mCAAmC,CAAC;AAClG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAIzF,OAAO,EAEL,4BAA4B,EAE7B,MAAM,iDAAiD,CAAC;AAIzD,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,uBAAuB,CAAC;IACjC,aAAa,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8CD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwEvG"}
1
+ {"version":3,"file":"plan-task.d.ts","sourceRoot":"","sources":["../../../src/application/recursive/plan-task.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,mCAAmC,CAAC;AAClG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAIzF,OAAO,EAGL,4BAA4B,EAG7B,MAAM,iDAAiD,CAAC;AAKzD,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,uBAAuB,CAAC;IACjC,aAAa,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA2ED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA0EvG"}
@@ -1,8 +1,9 @@
1
1
  import { createDefaultRecursiveBudgetPolicy } from "../../domain/recursive/budget.js";
2
2
  import { appendRecursiveTraceEvent } from "../../infrastructure/recursive/trace-logger.js";
3
- import { writeRecursiveSessionBundle } from "../../infrastructure/recursive/session-store.js";
3
+ import { loadRecursiveLanguageCapabilities, writeRecursiveLanguageCapabilities, writeRecursiveSessionBundle } from "../../infrastructure/recursive/session-store.js";
4
4
  import { persistTaskRecursiveLinkage } from "../runtime/task-runtime-store.js";
5
5
  import { buildRecursiveEnvironment } from "./build-environment.js";
6
+ import { deriveRecursiveLanguageCapabilities } from "./derive-language-capabilities.js";
6
7
  function createSessionId() {
7
8
  return `RS-${Date.now()}`;
8
9
  }
@@ -43,6 +44,32 @@ function createSummary(session) {
43
44
  generatedAt: new Date().toISOString()
44
45
  };
45
46
  }
47
+ function createExecutionPolicy(session) {
48
+ return {
49
+ policyId: session.budgetPolicy.policyId,
50
+ sessionId: session.sessionId,
51
+ isolationLevel: session.budgetPolicy.isolationLevel,
52
+ allowStructuredRun: true,
53
+ allowedInputs: ["file", "stdin"],
54
+ restrictedBehaviors: ["write-product-code", "network"],
55
+ budgetSummary: {
56
+ maxDurationMs: session.budgetPolicy.maxDurationMs,
57
+ maxRuns: 10,
58
+ notes: "Structured recursive analysis remains session-scoped, read-oriented, and bounded by the recursive budget posture."
59
+ },
60
+ createdAt: session.createdAt,
61
+ updatedAt: session.updatedAt
62
+ };
63
+ }
64
+ async function createSessionCapabilities(workspaceRoot) {
65
+ const workspaceCapabilities = (await loadRecursiveLanguageCapabilities(workspaceRoot)) ?? (await deriveRecursiveLanguageCapabilities(workspaceRoot));
66
+ await writeRecursiveLanguageCapabilities(workspaceRoot, workspaceCapabilities);
67
+ return {
68
+ ...workspaceCapabilities,
69
+ generatedAt: new Date().toISOString(),
70
+ summary: `Session-scoped recursive structured-analysis capability view for ${workspaceCapabilities.languages.filter((language) => language.adapterStatus !== "unavailable").map((language) => language.displayName).join(", ") || "undetected languages"}.`
71
+ };
72
+ }
46
73
  export async function planRecursiveTask(input) {
47
74
  const taskId = input.taskId ?? createTaskId();
48
75
  const sessionId = createSessionId();
@@ -68,6 +95,8 @@ export async function planRecursiveTask(input) {
68
95
  const summary = createSummary(session);
69
96
  const bundle = {
70
97
  session,
98
+ executionPolicy: createExecutionPolicy(session),
99
+ capabilities: await createSessionCapabilities(input.workspaceRoot),
71
100
  memory: {
72
101
  sessionId,
73
102
  taskId,
@@ -1 +1 @@
1
- {"version":3,"file":"plan-task.js","sourceRoot":"","sources":["../../../src/application/recursive/plan-task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-task.js","sourceRoot":"","sources":["../../../src/application/recursive/plan-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { RecursiveStructuredRun, RecursiveRunSubmissionMode } from "../../domain/recursive/structured-run.js";
2
+ import type { RecursiveStructuredRunResult } from "../../domain/recursive/structured-run-result.js";
3
+ import { resolveRecursiveRunPaths } from "../../infrastructure/recursive/session-store.js";
4
+ export interface RunStructuredAnalysisInput {
5
+ workspaceRoot: string;
6
+ sessionId: string;
7
+ submissionMode: RecursiveRunSubmissionMode;
8
+ sourceFile?: string;
9
+ stdinContent?: string;
10
+ }
11
+ export interface RunStructuredAnalysisOutput {
12
+ meta: RecursiveStructuredRun;
13
+ result: RecursiveStructuredRunResult;
14
+ artifactPaths: ReturnType<typeof resolveRecursiveRunPaths>;
15
+ }
16
+ export declare function runStructuredAnalysis(input: RunStructuredAnalysisInput): Promise<RunStructuredAnalysisOutput>;
17
+ //# sourceMappingURL=run-structured-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-structured-analysis.d.ts","sourceRoot":"","sources":["../../../src/application/recursive/run-structured-analysis.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAE,0BAA0B,EAAsB,MAAM,0CAA0C,CAAC;AACvI,OAAO,KAAK,EAAuB,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAMzH,OAAO,EAKL,wBAAwB,EAIzB,MAAM,iDAAiD,CAAC;AAoBzD,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,0BAA0B,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,4BAA4B,CAAC;IACrC,aAAa,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;CAC5D;AA2PD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAkGnH"}