soturail 0.4.1 → 0.7.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 (165) hide show
  1. package/LICENSE +15 -21
  2. package/README.md +292 -157
  3. package/dist/cli.js +12 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/agents.js +39 -5
  6. package/dist/commands/agents.js.map +1 -1
  7. package/dist/commands/context.js +66 -2
  8. package/dist/commands/context.js.map +1 -1
  9. package/dist/commands/diagram.d.ts +2 -0
  10. package/dist/commands/diagram.js +24 -0
  11. package/dist/commands/diagram.js.map +1 -0
  12. package/dist/commands/eval.d.ts +2 -0
  13. package/dist/commands/eval.js +25 -0
  14. package/dist/commands/eval.js.map +1 -0
  15. package/dist/commands/format.js +14 -4
  16. package/dist/commands/format.js.map +1 -1
  17. package/dist/commands/fs.d.ts +2 -0
  18. package/dist/commands/fs.js +19 -0
  19. package/dist/commands/fs.js.map +1 -0
  20. package/dist/commands/harness.d.ts +2 -0
  21. package/dist/commands/harness.js +35 -0
  22. package/dist/commands/harness.js.map +1 -0
  23. package/dist/commands/mcp.js +5 -0
  24. package/dist/commands/mcp.js.map +1 -1
  25. package/dist/commands/memory.js +40 -0
  26. package/dist/commands/memory.js.map +1 -1
  27. package/dist/commands/native.js +4 -0
  28. package/dist/commands/native.js.map +1 -1
  29. package/dist/commands/policy.d.ts +2 -0
  30. package/dist/commands/policy.js +25 -0
  31. package/dist/commands/policy.js.map +1 -0
  32. package/dist/commands/release.js +9 -2
  33. package/dist/commands/release.js.map +1 -1
  34. package/dist/commands/run.js +15 -3
  35. package/dist/commands/run.js.map +1 -1
  36. package/dist/commands/skills.js +15 -0
  37. package/dist/commands/skills.js.map +1 -1
  38. package/dist/commands/validate.d.ts +2 -0
  39. package/dist/commands/validate.js +13 -0
  40. package/dist/commands/validate.js.map +1 -0
  41. package/dist/commands/workflow.js +35 -5
  42. package/dist/commands/workflow.js.map +1 -1
  43. package/dist/core/agent-docs-hygiene.d.ts +3 -0
  44. package/dist/core/agent-docs-hygiene.js +83 -0
  45. package/dist/core/agent-docs-hygiene.js.map +1 -0
  46. package/dist/core/agent-exporter.d.ts +3 -1
  47. package/dist/core/agent-exporter.js +136 -12
  48. package/dist/core/agent-exporter.js.map +1 -1
  49. package/dist/core/agent-profile.d.ts +1 -1
  50. package/dist/core/agent-registry.js +60 -0
  51. package/dist/core/agent-registry.js.map +1 -1
  52. package/dist/core/agent-runtime.d.ts +57 -0
  53. package/dist/core/agent-runtime.js +371 -0
  54. package/dist/core/agent-runtime.js.map +1 -0
  55. package/dist/core/config.d.ts +20 -0
  56. package/dist/core/config.js +39 -2
  57. package/dist/core/config.js.map +1 -1
  58. package/dist/core/context-intelligence.d.ts +47 -0
  59. package/dist/core/context-intelligence.js +283 -0
  60. package/dist/core/context-intelligence.js.map +1 -0
  61. package/dist/core/diagram-rail.d.ts +31 -0
  62. package/dist/core/diagram-rail.js +235 -0
  63. package/dist/core/diagram-rail.js.map +1 -0
  64. package/dist/core/diagram-validator.d.ts +10 -0
  65. package/dist/core/diagram-validator.js +53 -0
  66. package/dist/core/diagram-validator.js.map +1 -0
  67. package/dist/core/evaluation-suite.d.ts +28 -0
  68. package/dist/core/evaluation-suite.js +333 -0
  69. package/dist/core/evaluation-suite.js.map +1 -0
  70. package/dist/core/evidence-pack.d.ts +4 -0
  71. package/dist/core/evidence-pack.js +139 -0
  72. package/dist/core/evidence-pack.js.map +1 -0
  73. package/dist/core/format-compare.d.ts +12 -0
  74. package/dist/core/format-compare.js +68 -0
  75. package/dist/core/format-compare.js.map +1 -0
  76. package/dist/core/fs-evidence.d.ts +25 -0
  77. package/dist/core/fs-evidence.js +96 -0
  78. package/dist/core/fs-evidence.js.map +1 -0
  79. package/dist/core/harness-rail.d.ts +34 -0
  80. package/dist/core/harness-rail.js +158 -0
  81. package/dist/core/harness-rail.js.map +1 -0
  82. package/dist/core/json-validator.d.ts +24 -0
  83. package/dist/core/json-validator.js +138 -0
  84. package/dist/core/json-validator.js.map +1 -0
  85. package/dist/core/mcp-exposure.d.ts +20 -0
  86. package/dist/core/mcp-exposure.js +48 -0
  87. package/dist/core/mcp-exposure.js.map +1 -0
  88. package/dist/core/memory-rail.d.ts +37 -0
  89. package/dist/core/memory-rail.js +142 -0
  90. package/dist/core/memory-rail.js.map +1 -0
  91. package/dist/core/policy-rail.d.ts +27 -0
  92. package/dist/core/policy-rail.js +102 -0
  93. package/dist/core/policy-rail.js.map +1 -0
  94. package/dist/core/rail-utils.d.ts +10 -0
  95. package/dist/core/rail-utils.js +58 -0
  96. package/dist/core/rail-utils.js.map +1 -0
  97. package/dist/core/release-preflight.js +1 -1
  98. package/dist/core/release-preflight.js.map +1 -1
  99. package/dist/core/run-workspace.d.ts +38 -0
  100. package/dist/core/run-workspace.js +108 -0
  101. package/dist/core/run-workspace.js.map +1 -0
  102. package/dist/core/skill-routing.d.ts +2 -0
  103. package/dist/core/skill-routing.js +51 -0
  104. package/dist/core/skill-routing.js.map +1 -0
  105. package/dist/core/version.d.ts +1 -1
  106. package/dist/core/version.js +1 -1
  107. package/dist/core/workflow-store.d.ts +68 -0
  108. package/dist/core/workflow-store.js +360 -6
  109. package/dist/core/workflow-store.js.map +1 -1
  110. package/docs/agent-docs-hygiene.md +175 -0
  111. package/docs/agents.md +190 -2
  112. package/docs/benchmarking.md +213 -2
  113. package/docs/comparisons.md +195 -11
  114. package/docs/context-intelligence.md +127 -0
  115. package/docs/context-packs.md +237 -1
  116. package/docs/deep-agents-patterns.md +188 -0
  117. package/docs/diagram-rail.md +125 -0
  118. package/docs/ecosystem-influences.md +435 -0
  119. package/docs/evaluation-suite.md +196 -0
  120. package/docs/filesystem-evidence-rail.md +119 -0
  121. package/docs/future-rails-index.md +209 -0
  122. package/docs/harness-rail.md +117 -0
  123. package/docs/licensing-strategy.md +135 -0
  124. package/docs/mcp.md +96 -0
  125. package/docs/memory-rail.md +189 -0
  126. package/docs/metrics.md +136 -1
  127. package/docs/migration-v0.5.md +89 -0
  128. package/docs/policy-rail.md +184 -0
  129. package/docs/release-checklist.md +14 -0
  130. package/docs/release-workflow.md +34 -1
  131. package/docs/releases/README.md +27 -0
  132. package/docs/releases/RELEASE_NOTES_v0.2.1.md +19 -0
  133. package/docs/releases/RELEASE_NOTES_v0.2.2.md +48 -0
  134. package/docs/releases/RELEASE_NOTES_v0.2.3.md +36 -0
  135. package/docs/releases/RELEASE_NOTES_v0.3.0.md +42 -0
  136. package/docs/releases/RELEASE_NOTES_v0.3.1.md +37 -0
  137. package/docs/releases/RELEASE_NOTES_v0.3.2.md +33 -0
  138. package/docs/releases/RELEASE_NOTES_v0.3.3.md +31 -0
  139. package/docs/releases/RELEASE_NOTES_v0.4.0.md +35 -0
  140. package/docs/releases/RELEASE_NOTES_v0.4.1.md +37 -0
  141. package/docs/releases/RELEASE_NOTES_v0.5.0.md +21 -0
  142. package/docs/releases/RELEASE_NOTES_v0.5.1.md +19 -0
  143. package/docs/releases/RELEASE_NOTES_v0.5.2.md +27 -0
  144. package/docs/releases/RELEASE_NOTES_v0.6.0.md +33 -0
  145. package/docs/releases/RELEASE_NOTES_v0.6.1.md +37 -0
  146. package/docs/releases/RELEASE_NOTES_v0.7.0.md +33 -0
  147. package/docs/roadmap-agent-runtime-addendum.md +304 -0
  148. package/docs/roadmap-harness-diagram-payload-addendum.md +300 -0
  149. package/docs/rules.md +56 -0
  150. package/docs/security-model.md +56 -0
  151. package/docs/skill-rail.md +57 -0
  152. package/docs/spec-driven-workflow.md +49 -9
  153. package/docs/structured-payload-rail.md +251 -0
  154. package/docs/tutorial-antigravity.md +20 -0
  155. package/docs/tutorial-claude-code.md +23 -0
  156. package/docs/tutorial-codex.md +22 -0
  157. package/docs/tutorial-context-formats.md +28 -0
  158. package/docs/tutorial-cursor.md +23 -0
  159. package/docs/tutorial-deep-agents-role-packs.md +24 -0
  160. package/docs/tutorial-diagram-spec.md +26 -0
  161. package/docs/tutorial-gemini-cli.md +21 -0
  162. package/docs/tutorial-harness-workflow.md +25 -0
  163. package/docs/workflow-rail.md +98 -14
  164. package/examples/agents/README.md +13 -0
  165. package/package.json +2 -2
package/dist/cli.js CHANGED
@@ -6,9 +6,13 @@ import { Command } from "commander";
6
6
  import { registerBenchCommand } from "./commands/bench.js";
7
7
  import { registerAgentsCommand } from "./commands/agents.js";
8
8
  import { registerDedupeCommand } from "./commands/dedupe.js";
9
+ import { registerDiagramCommand } from "./commands/diagram.js";
9
10
  import { registerDoctorCommand } from "./commands/doctor.js";
11
+ import { registerEvalCommand } from "./commands/eval.js";
10
12
  import { registerExpandCommand } from "./commands/expand.js";
13
+ import { registerFsCommand } from "./commands/fs.js";
11
14
  import { registerFormatCommand } from "./commands/format.js";
15
+ import { registerHarnessCommand } from "./commands/harness.js";
12
16
  import { registerHooksCommand } from "./commands/hooks.js";
13
17
  import { registerIngestCommand } from "./commands/ingest.js";
14
18
  import { registerIndexCommand } from "./commands/index.js";
@@ -18,6 +22,7 @@ import { registerMcpCommand } from "./commands/mcp.js";
18
22
  import { registerNativeCommand } from "./commands/native.js";
19
23
  import { registerContextCommand } from "./commands/context.js";
20
24
  import { registerReadCommand } from "./commands/read.js";
25
+ import { registerPolicyCommand } from "./commands/policy.js";
21
26
  import { registerRunCommand } from "./commands/run.js";
22
27
  import { registerRulesCommand } from "./commands/rules.js";
23
28
  import { registerSelfCommand } from "./commands/self.js";
@@ -25,6 +30,7 @@ import { registerSkillsCommand } from "./commands/skills.js";
25
30
  import { registerSpecCommand } from "./commands/spec.js";
26
31
  import { registerStatsCommand } from "./commands/stats.js";
27
32
  import { registerReleaseCommand } from "./commands/release.js";
33
+ import { registerValidateCommand } from "./commands/validate.js";
28
34
  import { registerWorkflowCommand } from "./commands/workflow.js";
29
35
  import { SOTURAIL_VERSION } from "./core/version.js";
30
36
  export function buildProgram() {
@@ -43,20 +49,26 @@ export function buildProgram() {
43
49
  registerBenchCommand(program);
44
50
  registerContextCommand(program);
45
51
  registerDedupeCommand(program);
52
+ registerDiagramCommand(program);
53
+ registerEvalCommand(program);
46
54
  registerExpandCommand(program);
55
+ registerFsCommand(program);
47
56
  registerFormatCommand(program);
57
+ registerHarnessCommand(program);
48
58
  registerHooksCommand(program);
49
59
  registerIngestCommand(program);
50
60
  registerSpecCommand(program);
51
61
  registerMemoryCommand(program);
52
62
  registerMcpCommand(program);
53
63
  registerNativeCommand(program);
64
+ registerPolicyCommand(program);
54
65
  registerRulesCommand(program);
55
66
  registerReleaseCommand(program);
56
67
  registerSelfCommand(program);
57
68
  registerSkillsCommand(program);
58
69
  registerDoctorCommand(program);
59
70
  registerStatsCommand(program);
71
+ registerValidateCommand(program);
60
72
  registerWorkflowCommand(program);
61
73
  return program;
62
74
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,51 @@
1
+ import { explainAgents, lintAgentDocs, splitContextPlan } from "../core/agent-docs-hygiene.js";
1
2
  import { agentDoctor, exportAgents, installAgent, uninstallAgent } from "../core/agent-exporter.js";
2
3
  import { formatAgentList } from "../core/agent-registry.js";
4
+ import { agentStatus, listAgentCapabilities, renderAgentCapabilities, renderAgentStatus } from "../core/agent-runtime.js";
3
5
  export function registerAgentsCommand(program) {
4
6
  const agents = program.command("agents").description("Export and install safe agent integration profiles.");
5
7
  agents.command("list").description("List supported agent integration profiles.").action(() => {
6
8
  process.stdout.write(formatAgentList());
7
9
  });
8
- agents.command("doctor").description("Check agent integration readiness.").action(async () => {
9
- process.stdout.write(await agentDoctor());
10
+ agents
11
+ .command("capabilities")
12
+ .description("Show the host capability matrix for supported and experimental agent targets.")
13
+ .option("--json", "Print machine-readable JSON")
14
+ .action((options) => {
15
+ if (options.json) {
16
+ process.stdout.write(`${JSON.stringify({ schemaVersion: "soturail.agent-capabilities.v1", agents: listAgentCapabilities() }, null, 2)}\n`);
17
+ return;
18
+ }
19
+ process.stdout.write(renderAgentCapabilities());
20
+ });
21
+ agents
22
+ .command("status")
23
+ .description("Inspect local agent files, exports, context packs, policy and run state.")
24
+ .option("--json", "Print machine-readable JSON")
25
+ .action(async (options) => {
26
+ const status = await agentStatus();
27
+ process.stdout.write(options.json ? `${JSON.stringify(status, null, 2)}\n` : renderAgentStatus(status));
28
+ });
29
+ agents.command("doctor").description("Check agent integration readiness.").option("--verbose", "Include host matrix, policy and dry-run guidance").action(async (options) => {
30
+ process.stdout.write(await agentDoctor(process.cwd(), { verbose: options.verbose === true }));
31
+ });
32
+ agents.command("lint").description("Lint root agent docs for size, freshness and safety notes.").action(async () => {
33
+ process.stdout.write(await lintAgentDocs());
34
+ });
35
+ agents.command("split-context").description("Suggest moving large agent context into referenced files.").option("--dry-run", "Preview only", true).action(async (options) => {
36
+ process.stdout.write(await splitContextPlan(options.dryRun !== false));
37
+ });
38
+ agents
39
+ .command("explain")
40
+ .description("Explain what each agent export receives and what stays local.")
41
+ .requiredOption("--agent <agent>", "claude, codex, gemini, cursor, antigravity, generic, opencode, amp, kiro, deepagents, deepagents-js, or all")
42
+ .action((options) => {
43
+ process.stdout.write(explainAgents(options.agent));
10
44
  });
11
45
  agents
12
46
  .command("export")
13
47
  .description("Export prompt/context integration files for review.")
14
- .requiredOption("--agent <agent>", "claude, codex, gemini, cursor, antigravity, generic, or all")
48
+ .requiredOption("--agent <agent>", "claude, codex, gemini, cursor, antigravity, generic, opencode, amp, kiro, deepagents, deepagents-js, or all")
15
49
  .action(async (options) => {
16
50
  const result = await exportAgents(options.agent ?? "all");
17
51
  process.stdout.write(`Agent exports written:\n${result.written.join("\n")}\n`);
@@ -19,7 +53,7 @@ export function registerAgentsCommand(program) {
19
53
  agents
20
54
  .command("install")
21
55
  .description("Install reviewed project-local agent integration files.")
22
- .requiredOption("--agent <agent>", "claude, codex, gemini, cursor, antigravity, generic, or all")
56
+ .requiredOption("--agent <agent>", "claude, codex, gemini, cursor, antigravity, generic, opencode, amp, kiro, deepagents, deepagents-js, or all")
23
57
  .option("--mode <mode>", "prompt-only, mcp, safe-hooks, or rules")
24
58
  .option("--dry-run", "Print planned changes without writing")
25
59
  .option("--yes", "Acknowledge reviewed project-local install")
@@ -32,7 +66,7 @@ export function registerAgentsCommand(program) {
32
66
  agents
33
67
  .command("uninstall")
34
68
  .description("Restore backups for project-local agent integration files when available.")
35
- .requiredOption("--agent <agent>", "claude, codex, gemini, cursor, antigravity, generic, or all")
69
+ .requiredOption("--agent <agent>", "claude, codex, gemini, cursor, antigravity, generic, opencode, amp, kiro, deepagents, deepagents-js, or all")
36
70
  .option("--dry-run", "Print planned rollback without writing")
37
71
  .action(async (options) => {
38
72
  process.stdout.write(await uninstallAgent(options.agent ?? "all", options.dryRun === undefined ? {} : { dryRun: options.dryRun }));
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAW5D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,qDAAqD,CAAC,CAAC;IAE5G,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;QAC3F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC3F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qDAAqD,CAAC;SAClE,cAAc,CAAC,iBAAiB,EAAE,6DAA6D,CAAC;SAChG,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yDAAyD,CAAC;SACtE,cAAc,CAAC,iBAAiB,EAAE,6DAA6D,CAAC;SAChG,MAAM,CAAC,eAAe,EAAE,wCAAwC,CAAC;SACjE,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC;SAC5D,MAAM,CAAC,OAAO,EAAE,4CAA4C,CAAC;SAC7D,MAAM,CAAC,UAAU,EAAE,gDAAgD,EAAE,IAAI,CAAC;SAC1E,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2EAA2E,CAAC;SACxF,cAAc,CAAC,iBAAiB,EAAE,6DAA6D,CAAC;SAChG,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrI,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,23 @@
1
1
  import path from "node:path";
2
2
  import { buildAllContextPacks, buildContextPack, contextDoctor, explainContextPacks } from "../core/context-pack.js";
3
+ import { buildRolePack, contextBudget, offloadContext, parseRolePack, pruneContext, renderSelection, restoreOffload, routeContext, selectContext } from "../core/context-intelligence.js";
3
4
  const targets = ["claude", "codex", "gemini", "cursor", "antigravity", "generic", "all"];
4
5
  export function registerContextCommand(program) {
5
6
  const context = program.command("context").description("Build cache-friendly prompt/context packs.");
6
7
  context
7
8
  .command("pack")
8
- .description("Generate a context pack for an agent target.")
9
- .requiredOption("--target <target>", "claude, codex, gemini, cursor, antigravity, generic, or all")
9
+ .description("Generate an agent target pack or role-specific context pack.")
10
+ .option("--target <target>", "claude, codex, gemini, cursor, antigravity, generic, or all")
11
+ .option("--role <role>", "planner, executor, reviewer, release-manager, or researcher")
10
12
  .action(async (options) => {
13
+ if (options.role) {
14
+ const result = await buildRolePack(parseRolePack(options.role));
15
+ process.stdout.write(`Role context pack written: ${path.normalize(path.relative(process.cwd(), result.path))}\n`);
16
+ return;
17
+ }
18
+ if (!options.target) {
19
+ throw new Error("Use context pack --target <target> or context pack --role <role>.");
20
+ }
11
21
  const target = parseTarget(options.target);
12
22
  if (target === "all") {
13
23
  const results = await buildAllContextPacks();
@@ -18,6 +28,60 @@ export function registerContextCommand(program) {
18
28
  process.stdout.write(`Context pack written: ${path.normalize(path.relative(process.cwd(), result.path))}\n`);
19
29
  }
20
30
  });
31
+ context
32
+ .command("select")
33
+ .description("Select task-relevant local files and memory with reasons.")
34
+ .requiredOption("--query <query>", "Task description")
35
+ .option("--limit <count>", "Maximum selected items", "10")
36
+ .action(async (options) => {
37
+ process.stdout.write(renderSelection(await selectContext(options.query, Number.parseInt(options.limit, 10) || 10)));
38
+ });
39
+ context
40
+ .command("prune")
41
+ .description("Select compact task context under a local token budget.")
42
+ .requiredOption("--query <query>", "Task description")
43
+ .option("--budget <tokens>", "Estimated token budget", "8000")
44
+ .action(async (options) => {
45
+ process.stdout.write(await pruneContext(options.query, Number.parseInt(options.budget, 10) || 8000));
46
+ });
47
+ context.command("offload").description("Offload a long file or raw_id into local context storage.").argument("<input>", "raw_id or local file").action(async (input) => {
48
+ const record = await offloadContext(input);
49
+ process.stdout.write([
50
+ "SotuRail context offload",
51
+ `offload_id: ${record.id}`,
52
+ `path: ${path.normalize(path.relative(process.cwd(), record.path))}`,
53
+ `estimated_tokens: ${record.estimatedTokens}`,
54
+ `summary: ${record.summary}`,
55
+ `recovery: soturail context restore ${record.id}`
56
+ ].join("\n") + "\n");
57
+ });
58
+ context.command("restore").description("Restore an offloaded context artifact.").argument("<offload-id>", "Offload id").action(async (id) => {
59
+ process.stdout.write(await restoreOffload(id));
60
+ });
61
+ context
62
+ .command("budget")
63
+ .description("Estimate context cost drivers before agent handoff.")
64
+ .option("--target <target>", "agent target", "generic")
65
+ .option("--explain", "Include recommendations")
66
+ .action(async (options) => {
67
+ process.stdout.write(await contextBudget(options.target, options.explain === true));
68
+ });
69
+ context
70
+ .command("route")
71
+ .description("Route a task to a deterministic local context expert.")
72
+ .requiredOption("--query <query>", "Task description")
73
+ .option("--role <role>", "Optional role override for handoff display")
74
+ .action((options) => {
75
+ const result = routeContext(options.query);
76
+ process.stdout.write([
77
+ "SotuRail context route",
78
+ `query: ${options.query}`,
79
+ `expert: ${result.expert}`,
80
+ `role: ${options.role ?? result.role}`,
81
+ `reason: ${result.reason}`,
82
+ "next: soturail context select --query \"<task>\""
83
+ ].join("\n") + "\n");
84
+ });
21
85
  context.command("explain").description("Explain context pack cache ordering.").action(() => {
22
86
  process.stdout.write(explainContextPacks());
23
87
  });
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAsB,MAAM,yBAAyB,CAAC;AAEzI,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAU,CAAC;AAElG,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IAErG,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8CAA8C,CAAC;SAC3D,cAAc,CAAC,mBAAmB,EAAE,6DAA6D,CAAC;SAClG,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrJ,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;QACzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC7F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAK,OAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAA8B,CAAC;IAC1F,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,IAAI,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerDiagramCommand(program: Command): void;
@@ -0,0 +1,24 @@
1
+ import { auditDiagram, createDiagram, diagramFromWorkflow, initDiagramRail, validateDiagrams } from "../core/diagram-rail.js";
2
+ export function registerDiagramCommand(program) {
3
+ const diagram = program.command("diagram").description("Manage local Diagram Rail visual contracts.");
4
+ diagram.command("init").description("Create Diagram Rail folders and index files.").action(async () => {
5
+ process.stdout.write(await initDiagramRail());
6
+ });
7
+ diagram.command("new").description("Create a Mermaid diagram and .spec.md visual contract.").argument("<feature>", "Feature name").action(async (feature) => {
8
+ const result = await createDiagram(feature);
9
+ process.stdout.write(result.output);
10
+ });
11
+ diagram.command("audit").description("Audit one diagram file for Mermaid/spec hygiene.").argument("<file>", "Diagram file").action(async (file) => {
12
+ const result = await auditDiagram(file);
13
+ process.stdout.write(result.output);
14
+ });
15
+ diagram.command("validate").description("Validate all local docs/diagrams/*.md diagrams.").action(async () => {
16
+ const result = await validateDiagrams();
17
+ process.stdout.write(result.output);
18
+ });
19
+ diagram.command("from-workflow").description("Generate a workflow state diagram and visual contract.").argument("<id>", "Workflow id").action(async (id) => {
20
+ const result = await diagramFromWorkflow(id);
21
+ process.stdout.write(result.output);
22
+ });
23
+ }
24
+ //# sourceMappingURL=diagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram.js","sourceRoot":"","sources":["../../src/commands/diagram.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE9H,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAC;IAEtG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,8CAA8C,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACpG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,wDAAwD,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAClK,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,kDAAkD,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACxJ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,iDAAiD,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC3G,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,wDAAwD,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QACjK,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerEvalCommand(program: Command): void;
@@ -0,0 +1,25 @@
1
+ import path from "node:path";
2
+ import { listEvaluationCases, readEvaluationReport, runEvaluationSuite } from "../core/evaluation-suite.js";
3
+ export function registerEvalCommand(program) {
4
+ const evalCommand = program.command("eval").description("Run deterministic local SotuRail evaluation fixtures.");
5
+ evalCommand.command("list").description("List local evaluation cases.").action(() => {
6
+ process.stdout.write(listEvaluationCases());
7
+ });
8
+ evalCommand.command("run").description("Run the v0.6.1 local evaluation suite and write JSON/Markdown reports.").action(async () => {
9
+ const result = await runEvaluationSuite();
10
+ process.stdout.write([
11
+ "SotuRail eval run",
12
+ `suite: ${result.suite}`,
13
+ `cases_count: ${result.cases.length}`,
14
+ `passed: ${result.summary.passed}`,
15
+ `failed: ${result.summary.failed}`,
16
+ `warnings: ${result.summary.warnings}`,
17
+ `json: ${path.normalize(path.relative(process.cwd(), result.reports.json))}`,
18
+ `markdown: ${path.normalize(path.relative(process.cwd(), result.reports.markdown))}`
19
+ ].join("\n") + "\n");
20
+ });
21
+ evalCommand.command("report").description("Print the latest local evaluation report.").action(async () => {
22
+ process.stdout.write(await readEvaluationReport());
23
+ });
24
+ }
25
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAE5G,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,uDAAuD,CAAC,CAAC;IAEjH,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;QAClF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,wEAAwE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjI,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,mBAAmB;YACnB,UAAU,MAAM,CAAC,KAAK,EAAE;YACxB,gBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;YACrC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YAClC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YAClC,aAAa,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;YACtC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;YAC5E,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;SACrF,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACvG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -4,6 +4,7 @@ import { ensureWorkspace, loadConfig } from "../core/config.js";
4
4
  import { MetricsStore } from "../core/metrics-store.js";
5
5
  import { isResponseMode } from "../core/response-policy.js";
6
6
  import { reduceAgentResponse } from "../compressors/agent-response-reducer.js";
7
+ import { compareFormats, renderFormatCompare } from "../core/format-compare.js";
7
8
  export async function formatFile(file, options = {}, root = process.cwd()) {
8
9
  await ensureWorkspace(root);
9
10
  const config = await loadConfig(root);
@@ -36,12 +37,21 @@ export async function formatFile(file, options = {}, root = process.cwd()) {
36
37
  ].join("\n");
37
38
  }
38
39
  export function registerFormatCommand(program) {
39
- program
40
+ const format = program
40
41
  .command("format")
41
42
  .description("Compress verbose AI or documentation output into task-oriented modes.")
42
- .argument("<input-file>", "Input text file")
43
- .option("--mode <mode>", "normal, concise, ultra, review, commit, debug, or docs", "normal")
44
- .action(async (file, options) => {
43
+ .argument("[input-file]", "Input text file")
44
+ .option("--mode <mode>", "normal, concise, ultra, review, commit, debug, or docs", "normal");
45
+ format
46
+ .command("compare")
47
+ .description("Compare local format size/safety hints for a file.")
48
+ .argument("<input-file>", "Input file")
49
+ .action(async (file) => {
50
+ process.stdout.write(renderFormatCompare(await compareFormats(file)));
51
+ });
52
+ format.action(async (file, options) => {
53
+ if (!file)
54
+ throw new Error("Missing input file. Example: soturail format README.md --mode concise");
45
55
  process.stdout.write(await formatFile(file, options));
46
56
  });
47
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/commands/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAqB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAM/E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,UAAyB,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IAC9F,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC;IAC/E,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,sCAAsC,aAAa,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,aAA6B,CAAC,CAAC;IACzE,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAClC,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE;YACP,IAAI;YACJ,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;YACzD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;YAC/D,iCAAiC,EAAE,MAAM,CAAC,iCAAiC;SAC5E;KACF,CAAC,CAAC;IACH,OAAO;QACL,yBAAyB,MAAM,CAAC,IAAI,EAAE;QACtC,qBAAqB,MAAM,CAAC,UAAU,OAAO,MAAM,CAAC,iBAAiB,KAAK,MAAM,CAAC,iBAAiB,cAAc;QAChH,EAAE;QACF,MAAM,CAAC,MAAM;KACd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uEAAuE,CAAC;SACpF,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC;SAC3C,MAAM,CAAC,eAAe,EAAE,wDAAwD,EAAE,QAAQ,CAAC;SAC3F,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAsB,EAAE,EAAE;QACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/commands/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerFsCommand(program: Command): void;
@@ -0,0 +1,19 @@
1
+ import path from "node:path";
2
+ import { createFsSnapshot, fsDiff, planEdit, renderSnapshot, touchedFiles } from "../core/fs-evidence.js";
3
+ export function registerFsCommand(program) {
4
+ const fsCommand = program.command("fs").description("Record filesystem evidence for local workflows.");
5
+ fsCommand.command("snapshot").description("Store a lightweight file manifest.").action(async () => {
6
+ process.stdout.write(renderSnapshot(process.cwd(), await createFsSnapshot()));
7
+ });
8
+ fsCommand.command("touched").description("List files changed since the latest snapshot.").action(async () => {
9
+ process.stdout.write(await touchedFiles());
10
+ });
11
+ fsCommand.command("diff").description("Summarize git diff evidence when available.").action(async () => {
12
+ process.stdout.write(await fsDiff());
13
+ });
14
+ fsCommand.command("plan-edit").description("Write an intended-edit note without changing files.").argument("<description>", "Edit intent").action(async (description) => {
15
+ const result = await planEdit(description);
16
+ process.stdout.write(`Planned edit recorded: ${result.id}\npath: ${path.normalize(path.relative(process.cwd(), result.path))}\n`);
17
+ });
18
+ }
19
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/commands/fs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE1G,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,iDAAiD,CAAC,CAAC;IAEvG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAChG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC1G,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACrG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,qDAAqD,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,EAAE;QAC9K,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACpI,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerHarnessCommand(program: Command): void;
@@ -0,0 +1,35 @@
1
+ import path from "node:path";
2
+ import { checkHarnessContract, explainHarnessFailure, harnessDoctor, initHarnessContract, listHarnessFailures, noteHarnessFailure, renderHarnessFailures } from "../core/harness-rail.js";
3
+ export function registerHarnessCommand(program) {
4
+ const harness = program.command("harness").description("Record local harness failures and acceptance contracts.");
5
+ harness
6
+ .command("note")
7
+ .description("Record an agent mistake, repeated failure, or missed check.")
8
+ .argument("<text>", "Failure note")
9
+ .option("--workflow <id>", "Workflow id")
10
+ .option("--cause <text>", "Suspected root cause")
11
+ .option("--prevention <candidate>", "rule, doc, hook, memory, workflow check, or diagram/spec update")
12
+ .option("--evidence <path-or-raw-id>", "Evidence path or raw id")
13
+ .action(async (text, options) => {
14
+ const record = await noteHarnessFailure(text, options);
15
+ process.stdout.write(`Harness failure recorded: ${record.id}\nprevention_candidate: ${record.preventionCandidate}\n`);
16
+ });
17
+ harness.command("list").description("List recorded harness failures.").action(async () => {
18
+ process.stdout.write(renderHarnessFailures(await listHarnessFailures()));
19
+ });
20
+ harness.command("explain").description("Explain a harness failure record.").argument("<id>", "Failure id").action(async (id) => {
21
+ process.stdout.write(await explainHarnessFailure(id));
22
+ });
23
+ harness.command("doctor").description("Check local harness readiness.").action(async () => {
24
+ process.stdout.write(await harnessDoctor());
25
+ });
26
+ const contract = harness.command("contract").description("Manage local acceptance harness contracts.");
27
+ contract.command("init").description("Create the default local harness contract.").action(async () => {
28
+ const result = await initHarnessContract();
29
+ process.stdout.write(`${result.created ? "Harness contract created" : "Harness contract already exists"}: ${path.normalize(path.relative(process.cwd(), result.path))}\n`);
30
+ });
31
+ contract.command("check").description("Validate the local harness contract without running commands.").action(async () => {
32
+ process.stdout.write(await checkHarnessContract());
33
+ });
34
+ }
35
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/commands/harness.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAElH,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6DAA6D,CAAC;SAC1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;SAClC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;SAChD,MAAM,CAAC,0BAA0B,EAAE,iEAAiE,CAAC;SACrG,MAAM,CAAC,6BAA6B,EAAE,yBAAyB,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAsF,EAAE,EAAE;QACrH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,EAAE,2BAA2B,MAAM,CAAC,mBAAmB,IAAI,CAAC,CAAC;IACxH,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QACrI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IACvG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACnG,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,iCAAiC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7K,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,+DAA+D,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACvH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -2,6 +2,7 @@ import { promises as fs } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { ensureWorkspace, getWorkspacePaths, relativeToRoot } from "../core/config.js";
4
4
  import { mcpConfig } from "../core/agent-exporter.js";
5
+ import { mcpExposureReport, renderMcpExposure } from "../core/mcp-exposure.js";
5
6
  import { mcpDoctor, mcpManifest, mcpSmoke, serveMcpStdio } from "../core/mcp-server.js";
6
7
  import { SOTURAIL_VERSION } from "../core/version.js";
7
8
  export function registerMcpCommand(program) {
@@ -12,6 +13,10 @@ export function registerMcpCommand(program) {
12
13
  mcp.command("manifest").description("Print MCP resources and tools manifest.").action(async () => {
13
14
  process.stdout.write(`${JSON.stringify(await mcpManifest(SOTURAIL_VERSION), null, 2)}\n`);
14
15
  });
16
+ mcp.command("exposure").description("Report MCP tools/resources/prompts and risk notes.").option("--json", "Print machine-readable JSON").action(async (options) => {
17
+ const report = await mcpExposureReport();
18
+ process.stdout.write(options.json ? `${JSON.stringify(report, null, 2)}\n` : renderMcpExposure(report));
19
+ });
15
20
  mcp
16
21
  .command("config")
17
22
  .description("Export a safe MCP host configuration snippet.")
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { promises as fs } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { appendJsonl, ensureWorkspace, getWorkspacePaths, readJsonl } from "../core/config.js";
4
4
  import { getCurrentGitCommit, hashFile } from "../core/git.js";
5
+ import { captureMemoryFromFile, consolidateMemory, memoryRailDoctor, recallMemory, rememberMemory, renderRecall } from "../core/memory-rail.js";
5
6
  export async function addMemory(content, options = {}, root = process.cwd()) {
6
7
  await ensureWorkspace(root);
7
8
  const paths = getWorkspacePaths(root);
@@ -147,6 +148,41 @@ export async function searchMemory(term, root = process.cwd()) {
147
148
  }
148
149
  export function registerMemoryCommand(program) {
149
150
  const memory = program.command("memory").description("Manage local Git-linked memory records.");
151
+ memory
152
+ .command("remember")
153
+ .description("Remember an approved local fact or decision.")
154
+ .argument("<text>", "Decision or fact")
155
+ .option("--tag <tag>", "Repeatable memory tag", collectValues, [])
156
+ .option("--source <source>", "manual, agent, import, or local note", "manual")
157
+ .action(async (text, options) => {
158
+ const record = await rememberMemory(text, { tags: options.tag, source: options.source });
159
+ process.stdout.write(`Memory remembered: ${record.id}\nsource: ${record.source}\ntags: ${record.tags.join(", ") || "none"}\nprivacy: ${record.privacy}\n`);
160
+ });
161
+ memory
162
+ .command("recall")
163
+ .description("Recall local memory using deterministic keyword scoring.")
164
+ .argument("<query>", "Recall query")
165
+ .option("--limit <count>", "Maximum matches", "5")
166
+ .action(async (query, options) => {
167
+ process.stdout.write(renderRecall(await recallMemory(query, Number.parseInt(options.limit, 10) || 5)));
168
+ });
169
+ memory
170
+ .command("capture")
171
+ .description("Capture a small local text/markdown file into memory without inventing facts.")
172
+ .requiredOption("--from-file <file>", "Local file to summarize into memory")
173
+ .option("--tag <tag>", "Repeatable memory tag", collectValues, [])
174
+ .option("--source <source>", "memory source label", "import")
175
+ .action(async (options) => {
176
+ const record = await captureMemoryFromFile(options.fromFile, { tags: options.tag, source: options.source });
177
+ process.stdout.write(`Memory captured: ${record.id}\nfile: ${record.filePath ?? options.fromFile}\nprivacy: ${record.privacy}\n`);
178
+ });
179
+ memory.command("consolidate").description("Deduplicate local memory records into consolidated.jsonl.").action(async () => {
180
+ const result = await consolidateMemory();
181
+ process.stdout.write(`Memory consolidated\nbefore: ${result.before}\nafter: ${result.after}\nduplicates_removed: ${result.duplicatesRemoved}\npath: ${path.normalize(path.relative(process.cwd(), result.path))}\n`);
182
+ });
183
+ memory.command("doctor").description("Check local Memory Rail storage and export safety.").action(async () => {
184
+ process.stdout.write(await memoryRailDoctor());
185
+ });
150
186
  memory
151
187
  .command("add")
152
188
  .description("Append a local memory JSONL record.")
@@ -182,4 +218,8 @@ export function registerMemoryCommand(program) {
182
218
  process.stdout.write(await pruneStaleMemory());
183
219
  });
184
220
  }
221
+ function collectValues(value, previous) {
222
+ previous.push(value);
223
+ return previous;
224
+ }
185
225
  //# sourceMappingURL=memory.js.map