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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-validator.js","sourceRoot":"","sources":["../../src/core/diagram-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type EvalResult = "pass" | "fail" | "warn";
2
+ export interface EvaluationCase {
3
+ id: string;
4
+ group: string;
5
+ title: string;
6
+ result: EvalResult;
7
+ details: Record<string, unknown>;
8
+ evidence: string[];
9
+ }
10
+ export interface EvaluationRun {
11
+ schemaVersion: "soturail.eval.v1";
12
+ id: string;
13
+ createdAt: string;
14
+ suite: "v0.6.1";
15
+ cases: EvaluationCase[];
16
+ summary: {
17
+ passed: number;
18
+ failed: number;
19
+ warnings: number;
20
+ };
21
+ reports: {
22
+ json: string;
23
+ markdown: string;
24
+ };
25
+ }
26
+ export declare function listEvaluationCases(): string;
27
+ export declare function runEvaluationSuite(root?: string): Promise<EvaluationRun>;
28
+ export declare function readEvaluationReport(root?: string): Promise<string>;
@@ -0,0 +1,333 @@
1
+ import { promises as fs } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { compressOutputWithEngine } from "../compressors/index.js";
5
+ import { lintAgentDocs } from "./agent-docs-hygiene.js";
6
+ import { appendJsonl, ensureWorkspace, getWorkspacePaths, writeJson } from "./config.js";
7
+ import { buildRolePack, offloadContext, restoreOffload, routeContext, selectContext } from "./context-intelligence.js";
8
+ import { validateMermaidDiagram } from "./diagram-validator.js";
9
+ import { buildWorkflowEvidence } from "./evidence-pack.js";
10
+ import { createFsSnapshot, planEdit } from "./fs-evidence.js";
11
+ import { compareFormats } from "./format-compare.js";
12
+ import { initHarnessContract, checkHarnessContract, noteHarnessFailure } from "./harness-rail.js";
13
+ import { validateJsonFile } from "./json-validator.js";
14
+ import { rememberMemory, recallMemory } from "./memory-rail.js";
15
+ import { decidePolicyItem, queuePolicyItem } from "./policy-rail.js";
16
+ import { makeRailId } from "./rail-utils.js";
17
+ import { estimateTokens } from "./token-estimator.js";
18
+ import { createWorkflow } from "./workflow-store.js";
19
+ const caseList = [
20
+ ["memory-recall-quality", "memory", "Memory recall ranks exact project facts above unrelated memory."],
21
+ ["context-selection-quality", "context", "Context selection preserves expected file, command, error and rule."],
22
+ ["reducer-quality", "reducers", "Reducers preserve critical diagnostics across common tool outputs."],
23
+ ["context-router-quality", "context", "Context router selects expected deterministic expert routes."],
24
+ ["role-pack-quality", "context", "Role packs include expected scope and omit unrelated risky context."],
25
+ ["agent-doc-hygiene-quality", "agents", "Short root agent docs pass and oversized docs warn."],
26
+ ["offload-restore-quality", "context", "Offload and restore preserve recovery pointer and failure line."],
27
+ ["format-quality", "payload", "Format comparison preserves evidence and warns about risky payloads."],
28
+ ["strict-json-quality", "payload", "Strict JSON validation catches duplicates, secrets, huge arrays and invalid JSON."],
29
+ ["evidence-pack-completeness", "evidence", "Evidence packs include workflow, raw, policy, harness and filesystem sections."],
30
+ ["harness-scenario-quality", "harness", "Repeated harness failures become concrete prevention candidates."],
31
+ ["diagram-validation-quality", "diagram", "Diagram validation catches invalid syntax and workflow warnings."]
32
+ ];
33
+ export function listEvaluationCases() {
34
+ return [
35
+ "SotuRail evaluation cases",
36
+ `suite: v0.6.1`,
37
+ `cases_count: ${caseList.length}`,
38
+ "",
39
+ ...caseList.map(([id, group, title]) => `- ${id} [${group}] ${title}`)
40
+ ].join("\n") + "\n";
41
+ }
42
+ export async function runEvaluationSuite(root = process.cwd()) {
43
+ await ensureWorkspace(root);
44
+ const evalRoot = await createEvalProject();
45
+ const cases = [];
46
+ for (const [id, group, title] of caseList) {
47
+ cases.push(await runCase(id, group, title, evalRoot));
48
+ }
49
+ const run = {
50
+ schemaVersion: "soturail.eval.v1",
51
+ id: makeRailId("eval", "v0.6.1"),
52
+ createdAt: new Date().toISOString(),
53
+ suite: "v0.6.1",
54
+ cases,
55
+ summary: {
56
+ passed: cases.filter((item) => item.result === "pass").length,
57
+ failed: cases.filter((item) => item.result === "fail").length,
58
+ warnings: cases.filter((item) => item.result === "warn").length
59
+ },
60
+ reports: {
61
+ json: "",
62
+ markdown: ""
63
+ }
64
+ };
65
+ await writeEvaluationReports(run, root);
66
+ return run;
67
+ }
68
+ export async function readEvaluationReport(root = process.cwd()) {
69
+ const reportPath = path.join(evalDir(root), "latest.md");
70
+ return fs.readFile(reportPath, "utf8").catch(() => "No evaluation report found. Run: soturail eval run\n");
71
+ }
72
+ async function runCase(id, group, title, root) {
73
+ try {
74
+ switch (id) {
75
+ case "memory-recall-quality":
76
+ return await memoryRecallCase(id, group, title, root);
77
+ case "context-selection-quality":
78
+ return await contextSelectionCase(id, group, title, root);
79
+ case "reducer-quality":
80
+ return await reducerCase(id, group, title, root);
81
+ case "context-router-quality":
82
+ return routerCase(id, group, title);
83
+ case "role-pack-quality":
84
+ return await rolePackCase(id, group, title, root);
85
+ case "agent-doc-hygiene-quality":
86
+ return await agentDocCase(id, group, title, root);
87
+ case "offload-restore-quality":
88
+ return await offloadCase(id, group, title, root);
89
+ case "format-quality":
90
+ return await formatCase(id, group, title, root);
91
+ case "strict-json-quality":
92
+ return await strictJsonCase(id, group, title, root);
93
+ case "evidence-pack-completeness":
94
+ return await evidenceCase(id, group, title, root);
95
+ case "harness-scenario-quality":
96
+ return await harnessCase(id, group, title, root);
97
+ case "diagram-validation-quality":
98
+ return diagramCase(id, group, title);
99
+ default:
100
+ return makeCase(id, group, title, "warn", { reason: "case not implemented" }, []);
101
+ }
102
+ }
103
+ catch (error) {
104
+ return makeCase(id, group, title, "fail", { error: error instanceof Error ? error.message : String(error) }, []);
105
+ }
106
+ }
107
+ async function memoryRecallCase(id, group, title, root) {
108
+ await rememberMemory("Architecture decision: keep MCP read-only by default and use local context packs.", { tags: ["architecture"], source: "eval" }, root);
109
+ await rememberMemory("Recurring bug: Windows npm cache can make stale global CLI checks misleading.", { tags: ["bug"], source: "eval" }, root);
110
+ await rememberMemory("Release decision: npm publish must succeed before GitHub Release creation.", { tags: ["release"], source: "eval" }, root);
111
+ await rememberMemory("Policy decision: raw log expansion requires review and redaction.", { tags: ["policy"], source: "eval" }, root);
112
+ await rememberMemory("Unrelated note: coffee preference should not affect release policy.", { tags: ["misc"], source: "eval" }, root);
113
+ const matches = await recallMemory("Architecture decision MCP read-only local context packs", 3, root);
114
+ const top = matches[0]?.record.text ?? "";
115
+ return makeCase(id, group, title, top.includes("Architecture decision") ? "pass" : "fail", {
116
+ topMatch: top,
117
+ matches: matches.map((match) => ({ id: match.record.id, score: match.score, reason: match.reason }))
118
+ }, ["memoryRecordsFile"]);
119
+ }
120
+ async function contextSelectionCase(id, group, title, root) {
121
+ const selection = await selectContext("validateRefund ERR_REFUND_WINDOW npm test Rule R08", 5, root);
122
+ const item = selection.items.find((candidate) => candidate.path === "src/refund-policy.ts");
123
+ const summary = item?.summary ?? "";
124
+ const ok = Boolean(item && summary.includes("ERR_REFUND_WINDOW") && summary.includes("npm test") && summary.includes("Rule R08"));
125
+ return makeCase(id, group, title, ok ? "pass" : "fail", {
126
+ expert: selection.expert,
127
+ selected: selection.items.map((candidate) => candidate.path ?? candidate.id),
128
+ expectedFile: "src/refund-policy.ts",
129
+ summary
130
+ }, [`.soturail/context/selections/${selection.id}.json`]);
131
+ }
132
+ async function reducerCase(id, group, title, root) {
133
+ const samples = [
134
+ ["npm", "npm test", "npm ERR! Test failed at tests/app.test.ts:12\nRun npm test for details.", "tests/app.test.ts"],
135
+ ["vitest", "vitest run", "FAIL tests/app.test.ts > app\nAssertionError: expected 1 to equal 2\n at tests/app.test.ts:12:10", "AssertionError"],
136
+ ["tsc", "tsc --noEmit", "src/app.ts:12:7 - error TS2322: Type 'string' is not assignable to type 'number'.", "TS2322"],
137
+ ["java", "java Main", "Exception in thread main java.lang.NullPointerException\n\tat com.example.Main.main(Main.java:12)", "NullPointerException"],
138
+ ["maven", "mvn test", "[ERROR] UserServiceTest.shouldSaveUser <<< FAILURE!\n at src/test/java/UserServiceTest.java:27", "UserServiceTest.java:27"],
139
+ ["docker", "docker logs app", "2026-05-26 ERROR connection refused while opening /app/config.yml", "connection refused"],
140
+ ["git-diff", "git diff", "diff --git a/src/app.ts b/src/app.ts\n@@ -1 +1 @@\n-return 1\n+return 2", "src/app.ts"],
141
+ ["git-status", "git status", "modified: src/app.ts\ndeleted: src/old.ts\nuntracked: docs/new.md", "src/app.ts"],
142
+ ["eslint", "npx eslint src", "src/app.ts\n 12:7 error 'unused' is never used @typescript-eslint/no-unused-vars", "@typescript-eslint/no-unused-vars"],
143
+ ["vite-next", "vite build", "vite v5 building...\nwarn Large page data detected in app/dashboard/page.tsx\nbuilt in 1.24s", "app/dashboard/page.tsx"]
144
+ ];
145
+ const results = [];
146
+ for (const [name, command, output, expected] of samples) {
147
+ const reduced = await compressOutputWithEngine(command, output, `eval-${name}`, "ts", root);
148
+ results.push({ name, expected, passed: reduced.summary.includes(expected), tokens: estimateTokens(reduced.summary) });
149
+ }
150
+ return makeCase(id, group, title, results.every((item) => item.passed) ? "pass" : "fail", { reducers: results }, ["raw reducer summaries"]);
151
+ }
152
+ function routerCase(id, group, title) {
153
+ const expectations = [
154
+ ["security policy", "security"],
155
+ ["release notes npm publish", "release"],
156
+ ["README docs tutorial", "docs"],
157
+ ["failing test source file", "code"],
158
+ ["workflow evidence", "workflow"],
159
+ ["remembered decision", "memory"],
160
+ ["compare ecosystem docs", "research"]
161
+ ];
162
+ const results = expectations.map(([query, expected]) => ({ query, expected, actual: routeContext(query).expert }));
163
+ return makeCase(id, group, title, results.every((item) => item.actual === item.expected) ? "pass" : "fail", { routes: results }, []);
164
+ }
165
+ async function rolePackCase(id, group, title, root) {
166
+ const roles = ["planner", "executor", "reviewer", "release-manager", "researcher"];
167
+ const results = [];
168
+ for (const role of roles) {
169
+ const pack = await buildRolePack(role, root);
170
+ results.push({
171
+ role,
172
+ hasPurpose: pack.content.includes("## Purpose"),
173
+ hasOmissions: pack.content.includes("## Omitted Sources"),
174
+ avoidsSecrets: !/real token|private key/i.test(pack.content)
175
+ });
176
+ }
177
+ return makeCase(id, group, title, results.every((item) => item.hasPurpose && item.hasOmissions && item.avoidsSecrets) ? "pass" : "fail", { roles: results }, [".soturail/context/role-packs/"]);
178
+ }
179
+ async function agentDocCase(id, group, title, root) {
180
+ await fs.writeFile(path.join(root, "AGENTS.md"), "# Agent Notes\n\nSotuRail is a local-first Context OS.\n\nSafety: do not expose secrets or raw logs without approval.\n", "utf8");
181
+ const short = await lintAgentDocs(root);
182
+ await fs.writeFile(path.join(root, "CLAUDE.md"), `${"# Oversized\n\n"}${"Missing safety text.\n".repeat(700)}`, "utf8");
183
+ const oversized = await lintAgentDocs(root);
184
+ return makeCase(id, group, title, short.includes("findings_count: 0") && /CLAUDE\.md: too long/.test(oversized) ? "pass" : "fail", {
185
+ shortFindings: short.match(/findings_count: \d+/)?.[0],
186
+ oversizedIncludesWarning: /too long/.test(oversized)
187
+ }, ["AGENTS.md", "CLAUDE.md"]);
188
+ }
189
+ async function offloadCase(id, group, title, root) {
190
+ const file = path.join(root, "logs", "failure.log");
191
+ await fs.mkdir(path.dirname(file), { recursive: true });
192
+ await fs.writeFile(file, "ERROR critical failure line: PaymentTimeout at src/payments.ts:44\nfull details preserved locally\n", "utf8");
193
+ const record = await offloadContext("logs/failure.log", root);
194
+ const restored = await restoreOffload(record.id, root);
195
+ return makeCase(id, group, title, record.summary.includes("PaymentTimeout") && restored.includes("PaymentTimeout") ? "pass" : "fail", {
196
+ offloadId: record.id,
197
+ recovery: `soturail context restore ${record.id}`,
198
+ source: record.source
199
+ }, [record.path]);
200
+ }
201
+ async function formatCase(id, group, title, root) {
202
+ const file = path.join(root, "payload.json");
203
+ await fs.writeFile(file, JSON.stringify({ evidence: "ERR_REFUND_WINDOW", command: "npm test", items: Array.from({ length: 55 }, (_, index) => ({ index })) }, null, 2), "utf8");
204
+ const report = await compareFormats("payload.json", root);
205
+ return makeCase(id, group, title, report.markdownTokens > 0 && report.taggedTokens > 0 && report.warnings.some((warning) => warning.includes("huge array")) ? "pass" : "fail", {
206
+ markdownTokens: report.markdownTokens,
207
+ jsonTokens: report.jsonTokens,
208
+ taggedTokens: report.taggedTokens,
209
+ warnings: report.warnings
210
+ }, ["payload.json"]);
211
+ }
212
+ async function strictJsonCase(id, group, title, root) {
213
+ await fs.writeFile(path.join(root, "invalid.json"), "{\"ok\": true,}\n", "utf8");
214
+ await fs.writeFile(path.join(root, "risky.json"), `{"name":"one","name":"two","apiKey":"replace-me","items":[${Array.from({ length: 55 }, (_, index) => index).join(",")}]}\n`, "utf8");
215
+ const invalid = await validateJsonFile("invalid.json", { strict: true }, root);
216
+ const risky = await validateJsonFile("risky.json", { strict: true }, root);
217
+ const ok = invalid.result === "fail" && risky.duplicateKeys.length > 0 && risky.probableSecrets.length > 0 && risky.hugeArrays.length > 0;
218
+ return makeCase(id, group, title, ok ? "pass" : "fail", { invalid, risky }, ["invalid.json", "risky.json"]);
219
+ }
220
+ async function evidenceCase(id, group, title, root) {
221
+ const workflow = await createWorkflow("Evaluation evidence workflow", root);
222
+ await initHarnessContract(root);
223
+ const contract = await checkHarnessContract(root);
224
+ await noteHarnessFailure("Agent skipped release evidence before claiming done.", { workflow: workflow.id, prevention: "workflow check" }, root);
225
+ const policy = await queuePolicyItem("npm publish", "npm publish --access public", "publish changes public package state", workflow.id, root);
226
+ await decidePolicyItem(policy.id, "approved", root);
227
+ await appendJsonl(getWorkspacePaths(root).rawIndex, {
228
+ raw_id: "eval_raw_001",
229
+ path: ".soturail/raw/eval.log",
230
+ command: "npm test",
231
+ exit_code: 0,
232
+ created_at: new Date().toISOString(),
233
+ compressor: "eval",
234
+ raw_tokens_estimated: 10,
235
+ compressed_tokens_estimated: 5
236
+ });
237
+ await createFsSnapshot(root);
238
+ await planEdit("Change src/refund-policy.ts for evidence fixture", root);
239
+ const evidence = await buildWorkflowEvidence(workflow.id, root);
240
+ const ok = [
241
+ workflow.id,
242
+ "eval_raw_001",
243
+ "approved npm publish",
244
+ "Harness Failures",
245
+ "Filesystem Evidence",
246
+ "Harness Contract"
247
+ ].every((needle) => evidence.content.includes(needle)) && contract.includes("valid: true");
248
+ return makeCase(id, group, title, ok ? "pass" : "fail", {
249
+ workflowId: workflow.id,
250
+ evidencePath: evidence.path,
251
+ contractValid: contract.includes("valid: true")
252
+ }, [evidence.path]);
253
+ }
254
+ async function harnessCase(id, group, title, root) {
255
+ const records = [
256
+ await noteHarnessFailure("Agent repeated stale docs in root instructions.", { prevention: "doc" }, root),
257
+ await noteHarnessFailure("Agent forgot release checklist.", { prevention: "rule" }, root),
258
+ await noteHarnessFailure("Agent forgot recurring Windows cache issue.", { prevention: "memory" }, root),
259
+ await noteHarnessFailure("Agent skipped verify step.", { prevention: "workflow check" }, root)
260
+ ];
261
+ const candidates = new Set(records.map((record) => record.preventionCandidate));
262
+ const ok = ["doc", "rule", "memory", "workflow check"].every((candidate) => candidates.has(candidate));
263
+ return makeCase(id, group, title, ok ? "pass" : "fail", { candidates: [...candidates] }, [".soturail/harness/failures.jsonl"]);
264
+ }
265
+ function diagramCase(id, group, title) {
266
+ const invalid = validateMermaidDiagram("not a diagram");
267
+ const warning = validateMermaidDiagram("stateDiagram-v2\n Draft --> Active\n Orphan --> Closed\n");
268
+ const ok = !invalid.valid && warning.valid && warning.findings.some((finding) => finding.message.includes("verification"));
269
+ return makeCase(id, group, title, ok ? "pass" : "fail", { invalid, warning }, ["diagram-validator"]);
270
+ }
271
+ function makeCase(id, group, title, result, details, evidence) {
272
+ return { id, group, title, result, details, evidence };
273
+ }
274
+ async function createEvalProject() {
275
+ const root = await fs.mkdtemp(path.join(os.tmpdir(), "soturail-eval-"));
276
+ await fs.mkdir(path.join(root, "src"), { recursive: true });
277
+ await fs.mkdir(path.join(root, "docs"), { recursive: true });
278
+ await fs.mkdir(path.join(root, "tests"), { recursive: true });
279
+ await fs.writeFile(path.join(root, "README.md"), "# Eval Project\n\nSotuRail local-first Context OS evaluation fixture.\n", "utf8");
280
+ await fs.writeFile(path.join(root, "package.json"), "{\"scripts\":{\"test\":\"vitest run\",\"build\":\"tsc\"}}\n", "utf8");
281
+ await fs.writeFile(path.join(root, "src", "refund-policy.ts"), [
282
+ "export function validateRefund() {",
283
+ " // Rule R08: refunds must preserve release evidence.",
284
+ " // Command: npm test",
285
+ " throw new Error(\"ERR_REFUND_WINDOW\");",
286
+ "}",
287
+ ""
288
+ ].join("\n"), "utf8");
289
+ await fs.writeFile(path.join(root, "docs", "security-policy.md"), "# Security Policy\n\nRaw logs require review and redaction.\n", "utf8");
290
+ await fs.writeFile(path.join(root, "docs", "release.md"), "# Release\n\nnpm publish must finish before GitHub Release.\n", "utf8");
291
+ await fs.writeFile(path.join(root, "docs", "research.md"), "# Research\n\nCompare ecosystem docs with citations.\n", "utf8");
292
+ await fs.writeFile(path.join(root, "tests", "refund.test.ts"), "import { validateRefund } from '../src/refund-policy';\n", "utf8");
293
+ await ensureWorkspace(root);
294
+ return root;
295
+ }
296
+ async function writeEvaluationReports(run, root) {
297
+ const dir = evalDir(root);
298
+ await fs.mkdir(dir, { recursive: true });
299
+ const jsonPath = path.join(dir, "latest.json");
300
+ const markdownPath = path.join(dir, "latest.md");
301
+ run.reports.json = jsonPath;
302
+ run.reports.markdown = markdownPath;
303
+ await writeJson(jsonPath, run);
304
+ await fs.writeFile(markdownPath, renderEvaluationReport(run, root), "utf8");
305
+ }
306
+ function renderEvaluationReport(run, root) {
307
+ const rows = run.cases.map((item) => `| ${item.id} | ${item.group} | ${item.result} | ${item.title} |`);
308
+ return [
309
+ "# SotuRail Evaluation Report",
310
+ "",
311
+ "Generated from deterministic local fixtures. No network, paid APIs, GitHub access or real agent hosts are required.",
312
+ "",
313
+ `suite: ${run.suite}`,
314
+ `id: ${run.id}`,
315
+ `createdAt: ${run.createdAt}`,
316
+ `passed: ${run.summary.passed}`,
317
+ `failed: ${run.summary.failed}`,
318
+ `warnings: ${run.summary.warnings}`,
319
+ `json_report: ${path.relative(root, run.reports.json).replace(/\\/g, "/")}`,
320
+ "",
321
+ "| case_id | group | result | title |",
322
+ "|---|---|---|---|",
323
+ ...rows,
324
+ "",
325
+ "Token savings without quality preservation is not a success.",
326
+ "Warnings are separate from failures. A passing suite means critical local evidence was preserved on this fixture set, not that SotuRail is superior to any external tool.",
327
+ ""
328
+ ].join("\n");
329
+ }
330
+ function evalDir(root) {
331
+ return path.join(getWorkspacePaths(root).workspace, "eval");
332
+ }
333
+ //# sourceMappingURL=evaluation-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation-suite.js","sourceRoot":"","sources":["../../src/core/evaluation-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function buildWorkflowEvidence(id: string, root?: string): Promise<{
2
+ path: string;
3
+ content: string;
4
+ }>;
@@ -0,0 +1,139 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promises as fs } from "node:fs";
3
+ import path from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { ensureWorkspace, getWorkspacePaths, readJsonl, relativeToRoot } from "./config.js";
6
+ import { makeRailId } from "./rail-utils.js";
7
+ import { readWorkflow } from "./workflow-store.js";
8
+ import { SOTURAIL_VERSION } from "./version.js";
9
+ const execFileAsync = promisify(execFile);
10
+ export async function buildWorkflowEvidence(id, root = process.cwd()) {
11
+ await ensureWorkspace(root);
12
+ const paths = getWorkspacePaths(root);
13
+ const workflow = await readWorkflow(id, root);
14
+ const workflowDir = path.join(paths.workflowsDir, id);
15
+ const rawRecords = await readJsonl(paths.rawIndex);
16
+ const policy = await readJsonl(paths.policyDecisionsFile);
17
+ const failures = await readJsonl(paths.harnessFailuresFile);
18
+ const changedFiles = await gitChangedFiles(root);
19
+ const harnessContractPath = path.join(paths.harnessContractsDir, "default.json");
20
+ const harnessContractPresent = await exists(harnessContractPath);
21
+ const reviewPath = path.join(workflowDir, "review.md");
22
+ const reviewJsonPath = path.join(workflowDir, "review.json");
23
+ const verifyPath = path.join(workflowDir, "verify.md");
24
+ const verifyJsonPath = path.join(workflowDir, "verify.json");
25
+ const evalReportPath = path.join(paths.workspace, "eval", "latest.md");
26
+ const diagramValidationPath = path.join(paths.diagramsDir, "validation.json");
27
+ const offloadIds = await listOffloadIds(paths.contextOffloadDir);
28
+ const packageVersion = await readPackageVersion(root);
29
+ const releaseNotesPath = packageVersion ? path.join(root, "docs", "releases", `RELEASE_NOTES_v${packageVersion}.md`) : "";
30
+ const reportId = makeRailId("evidence", id);
31
+ const reportPath = path.join(paths.reportsDir, `${reportId}.md`);
32
+ const content = [
33
+ `# SotuRail Evidence Pack: ${workflow.title}`,
34
+ "",
35
+ "schemaVersion: soturail.evidence.v1",
36
+ `createdAt: ${new Date().toISOString()}`,
37
+ "",
38
+ "## Workflow",
39
+ "",
40
+ `- workflow_id: ${workflow.id}`,
41
+ `- state: ${workflow.state}`,
42
+ `- plan: ${relativeToRoot(root, path.join(workflowDir, "plan.md"))}`,
43
+ `- tasks: ${relativeToRoot(root, path.join(workflowDir, "tasks.md"))}`,
44
+ `- verification: ${relativeToRoot(root, path.join(workflowDir, "verification.md"))}`,
45
+ `- review_report: ${await exists(reviewPath) ? relativeToRoot(root, reviewPath) : "missing"}`,
46
+ `- review_json: ${await exists(reviewJsonPath) ? relativeToRoot(root, reviewJsonPath) : "missing"}`,
47
+ `- verify_report: ${await exists(verifyPath) ? relativeToRoot(root, verifyPath) : "missing"}`,
48
+ `- verify_json: ${await exists(verifyJsonPath) ? relativeToRoot(root, verifyJsonPath) : "missing"}`,
49
+ "",
50
+ "## Context And Role Packs",
51
+ "",
52
+ `- context_dir: ${relativeToRoot(root, paths.contextDir)}`,
53
+ `- role_packs: ${relativeToRoot(root, paths.contextRolePacksDir)}`,
54
+ "",
55
+ "## Commands And Raw IDs",
56
+ "",
57
+ ...(rawRecords.length > 0 ? rawRecords.slice(-10).map((record) => `- ${record.raw_id}: ${record.command} (exit ${record.exit_code})`) : ["- none recorded"]),
58
+ "",
59
+ "## Offload IDs",
60
+ "",
61
+ ...(offloadIds.length > 0 ? offloadIds.map((offload) => `- ${offload}`) : ["- none recorded"]),
62
+ "",
63
+ "## Policy Decisions",
64
+ "",
65
+ ...(policy.length > 0 ? policy.slice(-10).map((decision) => `- ${decision.id}: ${decision.decision} ${decision.category}`) : ["- none recorded"]),
66
+ "",
67
+ "## Harness Failures",
68
+ "",
69
+ ...(failures.length > 0 ? failures.slice(-10).map((failure) => `- ${failure.id}: ${failure.whatFailed}`) : ["- none recorded"]),
70
+ "",
71
+ "## Filesystem Evidence",
72
+ "",
73
+ "### Changed Files",
74
+ "",
75
+ ...(changedFiles.length > 0 ? changedFiles.map((file) => `- ${file}`) : ["- none detected"]),
76
+ "",
77
+ `- snapshots: ${relativeToRoot(root, paths.fsSnapshotsDir)}`,
78
+ "- Run `soturail fs diff` for current git diff evidence.",
79
+ "",
80
+ "## Harness Contract",
81
+ "",
82
+ `- contract: ${harnessContractPresent ? relativeToRoot(root, harnessContractPath) : "none found"}`,
83
+ "- result: run `soturail harness contract check` for current validation status.",
84
+ "",
85
+ "## Diagram And Evaluation Evidence",
86
+ "",
87
+ `- diagram_validation: ${await exists(diagramValidationPath) ? relativeToRoot(root, diagramValidationPath) : "missing"}`,
88
+ `- eval_report: ${await exists(evalReportPath) ? relativeToRoot(root, evalReportPath) : "missing"}`,
89
+ "",
90
+ "## Release Evidence",
91
+ "",
92
+ `- package_version: ${packageVersion ?? "unknown"}`,
93
+ `- cli_version: ${SOTURAIL_VERSION}`,
94
+ `- changelog_entry: ${packageVersion ? `## [${packageVersion}]` : "unknown"}`,
95
+ `- release_notes: ${releaseNotesPath && await exists(releaseNotesPath) ? relativeToRoot(root, releaseNotesPath) : "missing"}`,
96
+ "- npm_tarball_check: run `soturail release verify-package` or `npm run release:check`.",
97
+ `- github_tag_recommendation: ${packageVersion ? `v${packageVersion}` : "unknown"}`,
98
+ "- npm_publish_checklist: build, test, release check, GitHub release notes, npm publish.",
99
+ "- ci_status_note: check GitHub Actions for the pushed commit/tag.",
100
+ "",
101
+ "## Recovery",
102
+ "",
103
+ "- Raw logs: `soturail expand <raw_id>`",
104
+ "- Offloads: `soturail context restore <offload-id>`",
105
+ "- Policy: `soturail policy queue`",
106
+ ""
107
+ ].join("\n");
108
+ await fs.writeFile(reportPath, content, "utf8");
109
+ return { path: reportPath, content };
110
+ }
111
+ async function listOffloadIds(dir) {
112
+ const entries = await fs.readdir(dir).catch(() => []);
113
+ return entries.filter((entry) => entry.endsWith(".json")).map((entry) => entry.replace(/\.json$/, "")).sort();
114
+ }
115
+ async function readPackageVersion(root) {
116
+ const raw = await fs.readFile(path.join(root, "package.json"), "utf8").catch(() => "");
117
+ if (!raw)
118
+ return null;
119
+ try {
120
+ const parsed = JSON.parse(raw);
121
+ return parsed.version ?? null;
122
+ }
123
+ catch {
124
+ return null;
125
+ }
126
+ }
127
+ async function gitChangedFiles(root) {
128
+ try {
129
+ const { stdout } = await execFileAsync("git", ["diff", "--name-only", "--", "."], { cwd: root, timeout: 3000, windowsHide: true });
130
+ return stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
131
+ }
132
+ catch {
133
+ return [];
134
+ }
135
+ }
136
+ async function exists(filePath) {
137
+ return fs.access(filePath).then(() => true).catch(() => false);
138
+ }
139
+ //# sourceMappingURL=evidence-pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-pack.js","sourceRoot":"","sources":["../../src/core/evidence-pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface FormatCompareReport {
2
+ file: string;
3
+ bytes: number;
4
+ markdownTokens: number;
5
+ jsonTokens: number | null;
6
+ taggedTokens: number;
7
+ compactSuggestion: string;
8
+ taggedSuggestion: string;
9
+ warnings: string[];
10
+ }
11
+ export declare function compareFormats(file: string, root?: string): Promise<FormatCompareReport>;
12
+ export declare function renderFormatCompare(report: FormatCompareReport): string;