soturail 0.8.0 → 0.9.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.
- package/README.md +57 -16
- package/dist/commands/bench.d.ts +1 -0
- package/dist/commands/bench.js +18 -6
- package/dist/commands/bench.js.map +1 -1
- package/dist/commands/brain.js +14 -7
- package/dist/commands/brain.js.map +1 -1
- package/dist/commands/native.js +12 -0
- package/dist/commands/native.js.map +1 -1
- package/dist/commands/rules.js +20 -1
- package/dist/commands/rules.js.map +1 -1
- package/dist/commands/self.js +19 -0
- package/dist/commands/self.js.map +1 -1
- package/dist/core/baseline-snapshot.d.ts +27 -0
- package/dist/core/baseline-snapshot.js +225 -0
- package/dist/core/baseline-snapshot.js.map +1 -0
- package/dist/core/benchmark-rail.d.ts +44 -0
- package/dist/core/benchmark-rail.js +322 -0
- package/dist/core/benchmark-rail.js.map +1 -0
- package/dist/core/config.d.ts +5 -0
- package/dist/core/config.js +6 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/evaluation-suite.js +117 -2
- package/dist/core/evaluation-suite.js.map +1 -1
- package/dist/core/evidence-pack.js +17 -0
- package/dist/core/evidence-pack.js.map +1 -1
- package/dist/core/harness-rail.js +2 -0
- package/dist/core/harness-rail.js.map +1 -1
- package/dist/core/native-candidates.d.ts +44 -0
- package/dist/core/native-candidates.js +163 -0
- package/dist/core/native-candidates.js.map +1 -0
- package/dist/core/project-brain.d.ts +70 -4
- package/dist/core/project-brain.js +475 -30
- package/dist/core/project-brain.js.map +1 -1
- package/dist/core/release-preflight.js +8 -0
- package/dist/core/release-preflight.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/docs/agents.md +9 -1
- package/docs/baseline-snapshots.md +54 -0
- package/docs/benchmarking.md +69 -0
- package/docs/code-graph.md +33 -0
- package/docs/diagram-rail.md +2 -0
- package/docs/evaluation-suite.md +23 -0
- package/docs/harness-rail.md +10 -0
- package/docs/knowledge-to-rules.md +23 -0
- package/docs/memory-rail.md +2 -0
- package/docs/native-performance-policy.md +62 -0
- package/docs/native-runner.md +24 -0
- package/docs/project-brain.md +101 -4
- package/docs/release-workflow.md +13 -0
- package/docs/releases/README.md +2 -0
- package/docs/releases/RELEASE_NOTES_v0.8.1.md +42 -0
- package/docs/releases/RELEASE_NOTES_v0.9.0.md +35 -0
- package/docs/reverse-specification-rail.md +19 -0
- package/docs/rules.md +3 -0
- package/docs/workflow-rail.md +23 -0
- package/package.json +1 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { detectNativeEngine } from "./native-engine.js";
|
|
4
|
+
import { getWorkspacePaths, relativeToRoot, writeJson } from "./config.js";
|
|
5
|
+
export async function nativeStatus(root = process.cwd()) {
|
|
6
|
+
const info = await detectNativeEngine(root);
|
|
7
|
+
return {
|
|
8
|
+
schemaVersion: "soturail.native.status.v1",
|
|
9
|
+
createdAt: new Date().toISOString(),
|
|
10
|
+
native_available: info.available,
|
|
11
|
+
native_engine: info.available ? "rust" : "none",
|
|
12
|
+
native_path: info.path,
|
|
13
|
+
native_version: info.version,
|
|
14
|
+
fallback: "typescript",
|
|
15
|
+
npm_install_requires_native: false,
|
|
16
|
+
safe_to_use: true,
|
|
17
|
+
checked_paths: info.checked_paths
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export async function writeNativeCandidateReport(root = process.cwd()) {
|
|
21
|
+
const status = await nativeStatus(root);
|
|
22
|
+
const report = {
|
|
23
|
+
schemaVersion: "soturail.native.candidates.v1",
|
|
24
|
+
createdAt: new Date().toISOString(),
|
|
25
|
+
engine: {
|
|
26
|
+
nativeAvailable: status.native_available,
|
|
27
|
+
fallback: "typescript",
|
|
28
|
+
normalInstallRequiresNative: false
|
|
29
|
+
},
|
|
30
|
+
candidates: nativeCandidates()
|
|
31
|
+
};
|
|
32
|
+
const dir = path.join(getWorkspacePaths(root).workspace, "native");
|
|
33
|
+
const jsonPath = path.join(dir, "candidates.json");
|
|
34
|
+
const markdownPath = path.join(dir, "candidates.md");
|
|
35
|
+
await fs.mkdir(dir, { recursive: true });
|
|
36
|
+
await writeJson(jsonPath, report);
|
|
37
|
+
await fs.writeFile(markdownPath, renderNativeCandidates(report), "utf8");
|
|
38
|
+
return {
|
|
39
|
+
report,
|
|
40
|
+
markdownPath,
|
|
41
|
+
jsonPath,
|
|
42
|
+
output: [
|
|
43
|
+
"SotuRail native candidates",
|
|
44
|
+
`schemaVersion: ${report.schemaVersion}`,
|
|
45
|
+
`native_available: ${report.engine.nativeAvailable}`,
|
|
46
|
+
`fallback: ${report.engine.fallback}`,
|
|
47
|
+
`normal_install_requires_native: ${report.engine.normalInstallRequiresNative}`,
|
|
48
|
+
`candidates_count: ${report.candidates.length}`,
|
|
49
|
+
`good_candidates: ${report.candidates.filter((item) => item.classification === "good-candidate").length}`,
|
|
50
|
+
`json: ${relativeToRoot(root, jsonPath)}`,
|
|
51
|
+
`markdown: ${relativeToRoot(root, markdownPath)}`
|
|
52
|
+
].join("\n") + "\n"
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function renderNativeStatus(report) {
|
|
56
|
+
return [
|
|
57
|
+
"SotuRail native status",
|
|
58
|
+
`schemaVersion: ${report.schemaVersion}`,
|
|
59
|
+
`native_available: ${report.native_available}`,
|
|
60
|
+
`native_engine: ${report.native_engine}`,
|
|
61
|
+
`native_path: ${report.native_path ?? "not found"}`,
|
|
62
|
+
`native_version: ${report.native_version ?? "unknown"}`,
|
|
63
|
+
`fallback: ${report.fallback}`,
|
|
64
|
+
`npm_install_requires_native: ${report.npm_install_requires_native}`,
|
|
65
|
+
`safe_to_use: ${report.safe_to_use}`,
|
|
66
|
+
"checked_paths:",
|
|
67
|
+
...report.checked_paths.map((item) => `- ${item}`)
|
|
68
|
+
].join("\n") + "\n";
|
|
69
|
+
}
|
|
70
|
+
export async function nativeDoctor(root = process.cwd()) {
|
|
71
|
+
const status = await nativeStatus(root);
|
|
72
|
+
const paths = getWorkspacePaths(root);
|
|
73
|
+
const candidateJson = path.join(paths.workspace, "native", "candidates.json");
|
|
74
|
+
const benchJson = path.join(paths.workspace, "bench", "latest.json");
|
|
75
|
+
const candidatePresent = await exists(candidateJson);
|
|
76
|
+
const benchPresent = await exists(benchJson);
|
|
77
|
+
return [
|
|
78
|
+
"SotuRail native doctor",
|
|
79
|
+
"typescript_fallback: OK",
|
|
80
|
+
`native_optional: ${status.native_available ? "OK" : "Unavailable"}`,
|
|
81
|
+
`native_available: ${status.native_available}`,
|
|
82
|
+
`native_engine: ${status.native_engine}`,
|
|
83
|
+
"normal_npm_install_requires_rust: NO",
|
|
84
|
+
"normal_npm_install_requires_native: NO",
|
|
85
|
+
`benchmarks_available: ${benchPresent ? "YES" : "NO"}`,
|
|
86
|
+
`candidate_report: ${candidatePresent ? relativeToRoot(root, candidateJson) : "missing"}`,
|
|
87
|
+
"decision_policy: benchmark-before-native",
|
|
88
|
+
"recommended_next_command:",
|
|
89
|
+
candidatePresent ? "- soturail bench run --suite brain" : "- soturail native candidates",
|
|
90
|
+
"- soturail native compare"
|
|
91
|
+
].join("\n") + "\n";
|
|
92
|
+
}
|
|
93
|
+
export async function nativeCompare(root = process.cwd()) {
|
|
94
|
+
const status = await nativeStatus(root);
|
|
95
|
+
if (!status.native_available) {
|
|
96
|
+
return [
|
|
97
|
+
"SotuRail native compare",
|
|
98
|
+
"native_available: false",
|
|
99
|
+
"result: skipped",
|
|
100
|
+
"typescript_fallback: OK",
|
|
101
|
+
"reason: optional native engine is unavailable; no native speedup is claimed",
|
|
102
|
+
"next: soturail bench run --suite brain"
|
|
103
|
+
].join("\n") + "\n";
|
|
104
|
+
}
|
|
105
|
+
return [
|
|
106
|
+
"SotuRail native compare",
|
|
107
|
+
"native_available: true",
|
|
108
|
+
"result: ready",
|
|
109
|
+
"typescript_fallback: OK",
|
|
110
|
+
"next: soturail bench compare-engines",
|
|
111
|
+
"note: promote native acceleration only after a local benchmark report shows justified speedup."
|
|
112
|
+
].join("\n") + "\n";
|
|
113
|
+
}
|
|
114
|
+
function nativeCandidates() {
|
|
115
|
+
return [
|
|
116
|
+
candidate("large log reducers", "good-candidate", "Large terminal logs already have reducer fixtures and can be compared against TypeScript output.", "reducer-large-log", "medium", "high"),
|
|
117
|
+
candidate("rangeHash computation", "good-candidate", "Range hashing repeats over source evidence during stale checks.", "range-hash", "low", "medium"),
|
|
118
|
+
candidate("JSONL scanning", "good-candidate", "Append-only brain records and metrics grow with local usage.", "jsonl-read-write", "low", "medium"),
|
|
119
|
+
candidate("source-range relocation", "maybe-candidate", "Relocation uses simple text windows and should be measured before native work.", "brain-stale", "medium", "medium"),
|
|
120
|
+
candidate("duplicate claim clustering", "maybe-candidate", "Claim consolidation scales with record count and token overlap checks.", "brain-consolidate", "medium", "medium"),
|
|
121
|
+
candidate("recursive file scanning", "maybe-candidate", "Large repositories may spend time walking files, but ignores and file limits must stay identical.", "file-scan", "medium", "medium"),
|
|
122
|
+
candidate("reverse claims", "maybe-candidate", "Heuristic extraction may benefit from parser help later, but TypeScript remains adequate on small repos.", "reverse-claims", "medium", "medium"),
|
|
123
|
+
candidate("diagram validation", "not-worth-it-yet", "Current validation is lightweight string logic, not a measured bottleneck.", "workflow-evidence", "low", "low", "keep-typescript"),
|
|
124
|
+
candidate("workflow evidence generation", "not-worth-it-yet", "Evidence rendering is I/O and Markdown assembly, not a native hot path yet.", "workflow-evidence", "low", "low", "keep-typescript"),
|
|
125
|
+
candidate("agent brief rendering", "not-worth-it-yet", "Brief rendering is bounded and review-oriented; native code would add maintenance risk without evidence.", "brain-scan", "low", "low", "keep-typescript"),
|
|
126
|
+
candidate("release preflight", "blocked", "Release gates are orchestration, npm, audit and pack checks; native acceleration would not simplify them.", "release-preflight", "high", "low", "blocked-until-measured")
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
function candidate(area, classification, reason, benchmarkCategory, risk, estimatedBenefit, recommendation = "benchmark-before-native") {
|
|
130
|
+
return {
|
|
131
|
+
area,
|
|
132
|
+
classification,
|
|
133
|
+
reason,
|
|
134
|
+
currentEngine: "typescript",
|
|
135
|
+
benchmarkCategory,
|
|
136
|
+
risk,
|
|
137
|
+
estimatedBenefit,
|
|
138
|
+
fallback: "typescript",
|
|
139
|
+
recommendation
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function renderNativeCandidates(report) {
|
|
143
|
+
return [
|
|
144
|
+
"# SotuRail Native Candidate Report",
|
|
145
|
+
"",
|
|
146
|
+
"No benchmark, no native rewrite. TypeScript remains the portable baseline.",
|
|
147
|
+
"",
|
|
148
|
+
`schemaVersion: ${report.schemaVersion}`,
|
|
149
|
+
`createdAt: ${report.createdAt}`,
|
|
150
|
+
`nativeAvailable: ${report.engine.nativeAvailable}`,
|
|
151
|
+
`fallback: ${report.engine.fallback}`,
|
|
152
|
+
`normalInstallRequiresNative: ${report.engine.normalInstallRequiresNative}`,
|
|
153
|
+
"",
|
|
154
|
+
"| area | classification | benchmark | risk | benefit | recommendation | reason |",
|
|
155
|
+
"|---|---|---|---|---|---|---|",
|
|
156
|
+
...report.candidates.map((item) => `| ${item.area} | ${item.classification} | ${item.benchmarkCategory} | ${item.risk} | ${item.estimatedBenefit} | ${item.recommendation} | ${item.reason} |`),
|
|
157
|
+
""
|
|
158
|
+
].join("\n");
|
|
159
|
+
}
|
|
160
|
+
async function exists(filePath) {
|
|
161
|
+
return fs.access(filePath).then(() => true).catch(() => false);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=native-candidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-candidates.js","sourceRoot":"","sources":["../../src/core/native-candidates.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,7 +74,10 @@ export interface BrainStaleEventRecord {
|
|
|
74
74
|
reason: string;
|
|
75
75
|
previousHash: string;
|
|
76
76
|
currentHash: string;
|
|
77
|
-
status: "suspect" | "stale" | "resolved";
|
|
77
|
+
status: "suspect" | "stale" | "resolved" | "relocated";
|
|
78
|
+
previousRange?: SourceRange;
|
|
79
|
+
candidateRange?: SourceRange;
|
|
80
|
+
similarity?: number;
|
|
78
81
|
createdAt: string;
|
|
79
82
|
}
|
|
80
83
|
export interface BrainProjectProfile {
|
|
@@ -165,10 +168,64 @@ export interface BrainDoctorReport {
|
|
|
165
168
|
validJsonl?: boolean;
|
|
166
169
|
}>;
|
|
167
170
|
counts: BrainCounts;
|
|
171
|
+
duplicateClaimGroups?: number;
|
|
172
|
+
integrationStatus?: Record<string, string>;
|
|
173
|
+
repairPlanPath?: string;
|
|
168
174
|
findings: string[];
|
|
169
175
|
nextCommands: string[];
|
|
170
176
|
}
|
|
171
177
|
export type BrainAgentTarget = Extract<AgentId, "claude" | "codex" | "gemini" | "cursor" | "generic">;
|
|
178
|
+
export interface BrainStaleOptions {
|
|
179
|
+
repairPlan?: boolean;
|
|
180
|
+
}
|
|
181
|
+
export interface BrainRepairSuggestion {
|
|
182
|
+
recordId: string;
|
|
183
|
+
type: "claim" | "decision" | "rule";
|
|
184
|
+
text: string;
|
|
185
|
+
reason: string;
|
|
186
|
+
sourcePath: string;
|
|
187
|
+
affectedRange?: SourceRange;
|
|
188
|
+
candidateRange?: SourceRange;
|
|
189
|
+
similarity?: number;
|
|
190
|
+
recommendedCommand: string;
|
|
191
|
+
recommendedHumanAction: string;
|
|
192
|
+
relatedValidation: string[];
|
|
193
|
+
}
|
|
194
|
+
export interface BrainRepairPlan {
|
|
195
|
+
schemaVersion: "soturail.brain.repair-plan.v1";
|
|
196
|
+
createdAt: string;
|
|
197
|
+
suggestions: BrainRepairSuggestion[];
|
|
198
|
+
}
|
|
199
|
+
export interface BrainConsolidationGroup {
|
|
200
|
+
canonicalId: string;
|
|
201
|
+
duplicateIds: string[];
|
|
202
|
+
reason: string;
|
|
203
|
+
score: number;
|
|
204
|
+
claims: Array<{
|
|
205
|
+
id: string;
|
|
206
|
+
status: BrainClaimStatus;
|
|
207
|
+
confidence: BrainConfidence;
|
|
208
|
+
sourcePath: string;
|
|
209
|
+
claim: string;
|
|
210
|
+
}>;
|
|
211
|
+
}
|
|
212
|
+
export interface BrainConsolidationReport {
|
|
213
|
+
schemaVersion: "soturail.brain.consolidation.v1";
|
|
214
|
+
createdAt: string;
|
|
215
|
+
dryRun: boolean;
|
|
216
|
+
claimsRead: number;
|
|
217
|
+
duplicateGroups: number;
|
|
218
|
+
mergedClaims: number;
|
|
219
|
+
canonicalClaims: number;
|
|
220
|
+
groups: BrainConsolidationGroup[];
|
|
221
|
+
}
|
|
222
|
+
export interface BrainExportOptions {
|
|
223
|
+
limit?: number;
|
|
224
|
+
includeSuspect?: boolean;
|
|
225
|
+
}
|
|
226
|
+
export interface BrainDoctorOptions {
|
|
227
|
+
repairPlan?: boolean;
|
|
228
|
+
}
|
|
172
229
|
export declare function initBrain(root?: string): Promise<{
|
|
173
230
|
paths: string[];
|
|
174
231
|
output: string;
|
|
@@ -180,15 +237,23 @@ export declare function scanBrain(root?: string): Promise<{
|
|
|
180
237
|
}>;
|
|
181
238
|
export declare function brainProfile(root?: string): Promise<string>;
|
|
182
239
|
export declare function recallBrain(query: string, root?: string, limit?: number): Promise<string>;
|
|
183
|
-
export declare function staleBrain(root?: string): Promise<{
|
|
240
|
+
export declare function staleBrain(root?: string, options?: BrainStaleOptions): Promise<{
|
|
184
241
|
freshness: BrainFreshnessView;
|
|
242
|
+
repairPlan?: BrainRepairPlan;
|
|
243
|
+
output: string;
|
|
244
|
+
}>;
|
|
245
|
+
export declare function consolidateBrain(root?: string, options?: {
|
|
246
|
+
dryRun?: boolean;
|
|
247
|
+
}): Promise<{
|
|
248
|
+
report: BrainConsolidationReport;
|
|
185
249
|
output: string;
|
|
186
250
|
}>;
|
|
187
|
-
export declare function brainDoctor(root?: string): Promise<{
|
|
251
|
+
export declare function brainDoctor(root?: string, options?: BrainDoctorOptions): Promise<{
|
|
188
252
|
report: BrainDoctorReport;
|
|
253
|
+
repairPlan?: BrainRepairPlan;
|
|
189
254
|
output: string;
|
|
190
255
|
}>;
|
|
191
|
-
export declare function exportBrain(agent: BrainAgentTarget, root?: string): Promise<{
|
|
256
|
+
export declare function exportBrain(agent: BrainAgentTarget, root?: string, options?: BrainExportOptions): Promise<{
|
|
192
257
|
path: string;
|
|
193
258
|
content: string;
|
|
194
259
|
output: string;
|
|
@@ -196,6 +261,7 @@ export declare function exportBrain(agent: BrainAgentTarget, root?: string): Pro
|
|
|
196
261
|
export declare function rulesFromBrain(root?: string): Promise<{
|
|
197
262
|
rules: BrainRuleRecord[];
|
|
198
263
|
markdownPath: string;
|
|
264
|
+
jsonPath: string;
|
|
199
265
|
output: string;
|
|
200
266
|
}>;
|
|
201
267
|
export declare function readBrainCounts(root?: string): Promise<BrainCounts>;
|