soturail 1.5.0 → 1.6.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 +14 -4
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts +4 -0
- package/dist/commands/agents.js +9 -0
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/candidates.d.ts +2 -0
- package/dist/commands/candidates.js +22 -0
- package/dist/commands/candidates.js.map +1 -0
- package/dist/commands/capabilities.js +25 -3
- package/dist/commands/capabilities.js.map +1 -1
- package/dist/commands/context.js +5 -2
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/contract.js +72 -22
- package/dist/commands/contract.js.map +1 -1
- package/dist/commands/doctor.js +4 -12
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/hooks.js +4 -3
- package/dist/commands/hooks.js.map +1 -1
- package/dist/commands/memory.js +19 -10
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/report.js +5 -13
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/skills.js +52 -4
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/spec.js +2 -6
- package/dist/commands/spec.js.map +1 -1
- package/dist/compressors/json-toon.d.ts +0 -1
- package/dist/compressors/json-toon.js +0 -3
- package/dist/compressors/json-toon.js.map +1 -1
- package/dist/core/agent-docs-hygiene.js +2 -5
- package/dist/core/agent-docs-hygiene.js.map +1 -1
- package/dist/core/agent-exporter.js +13 -35
- package/dist/core/agent-exporter.js.map +1 -1
- package/dist/core/agent-qa.js +3 -5
- package/dist/core/agent-qa.js.map +1 -1
- package/dist/core/agent-runtime.js +15 -63
- package/dist/core/agent-runtime.js.map +1 -1
- package/dist/core/approved-memory.d.ts +29 -0
- package/dist/core/approved-memory.js +82 -0
- package/dist/core/approved-memory.js.map +1 -0
- package/dist/core/artifact-store.js +9 -1
- package/dist/core/artifact-store.js.map +1 -1
- package/dist/core/cache-normalizer.js +2 -7
- package/dist/core/cache-normalizer.js.map +1 -1
- package/dist/core/candidate-store.d.ts +30 -0
- package/dist/core/candidate-store.js +106 -0
- package/dist/core/candidate-store.js.map +1 -0
- package/dist/core/capability-descriptor.d.ts +194 -0
- package/dist/core/capability-descriptor.js +347 -0
- package/dist/core/capability-descriptor.js.map +1 -0
- package/dist/core/change-contract.d.ts +45 -1
- package/dist/core/change-contract.js +90 -13
- package/dist/core/change-contract.js.map +1 -1
- package/dist/core/code-health.js +1 -1
- package/dist/core/code-health.js.map +1 -1
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.js +5 -11
- package/dist/core/config.js.map +1 -1
- package/dist/core/context-intelligence.d.ts +17 -1
- package/dist/core/context-intelligence.js +20 -3
- package/dist/core/context-intelligence.js.map +1 -1
- package/dist/core/context-pack.js +8 -8
- package/dist/core/context-pack.js.map +1 -1
- package/dist/core/contract-lifecycle.d.ts +101 -0
- package/dist/core/contract-lifecycle.js +262 -0
- package/dist/core/contract-lifecycle.js.map +1 -0
- package/dist/core/diagram-rail.js +6 -8
- package/dist/core/diagram-rail.js.map +1 -1
- package/dist/core/evidence-pack.js +21 -24
- package/dist/core/evidence-pack.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +8 -0
- package/dist/core/evidence-provenance.js +23 -4
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/file-scanner.js +4 -4
- package/dist/core/file-scanner.js.map +1 -1
- package/dist/core/harness-lifecycle.js +2 -11
- package/dist/core/harness-lifecycle.js.map +1 -1
- package/dist/core/harness-rail.js +5 -14
- package/dist/core/harness-rail.js.map +1 -1
- package/dist/core/host-adapters.d.ts +64 -0
- package/dist/core/host-adapters.js +135 -0
- package/dist/core/host-adapters.js.map +1 -0
- package/dist/core/knowledge-rail.js +5 -9
- package/dist/core/knowledge-rail.js.map +1 -1
- package/dist/core/mcp-resources.js +5 -10
- package/dist/core/mcp-resources.js.map +1 -1
- package/dist/core/mcp-server.d.ts +0 -2
- package/dist/core/mcp-server.js +0 -2
- package/dist/core/mcp-server.js.map +1 -1
- package/dist/core/mcp-tools.js +45 -8
- package/dist/core/mcp-tools.js.map +1 -1
- package/dist/core/memory-rail.js +2 -11
- package/dist/core/memory-rail.js.map +1 -1
- package/dist/core/native-candidates.js +3 -5
- package/dist/core/native-candidates.js.map +1 -1
- package/dist/core/policy-rail.js +2 -12
- package/dist/core/policy-rail.js.map +1 -1
- package/dist/core/project-brain.d.ts +0 -1
- package/dist/core/project-brain.js +24 -37
- package/dist/core/project-brain.js.map +1 -1
- package/dist/core/rail-utils.d.ts +20 -1
- package/dist/core/rail-utils.js +27 -9
- package/dist/core/rail-utils.js.map +1 -1
- package/dist/core/report-rail.d.ts +2 -1
- package/dist/core/report-rail.js +4 -27
- package/dist/core/report-rail.js.map +1 -1
- package/dist/core/reverse-specification.js +3 -6
- package/dist/core/reverse-specification.js.map +1 -1
- package/dist/core/rule-extractor.js +2 -2
- package/dist/core/rule-extractor.js.map +1 -1
- package/dist/core/run-workspace.js +3 -12
- package/dist/core/run-workspace.js.map +1 -1
- package/dist/core/semantic-candidate.d.ts +416 -0
- package/dist/core/semantic-candidate.js +124 -0
- package/dist/core/semantic-candidate.js.map +1 -0
- package/dist/core/skill-exporter.d.ts +50 -0
- package/dist/core/skill-exporter.js +130 -0
- package/dist/core/skill-exporter.js.map +1 -1
- package/dist/core/skill-model.d.ts +88 -0
- package/dist/core/skill-model.js +239 -0
- package/dist/core/skill-model.js.map +1 -0
- package/dist/core/skill-rail-v2.js +5 -10
- package/dist/core/skill-rail-v2.js.map +1 -1
- package/dist/core/skill-routing.d.ts +8 -0
- package/dist/core/skill-routing.js +29 -25
- package/dist/core/skill-routing.js.map +1 -1
- package/dist/core/skill-schema.js +2 -6
- package/dist/core/skill-schema.js.map +1 -1
- package/dist/core/skill-validator.d.ts +6 -0
- package/dist/core/skill-validator.js +21 -14
- package/dist/core/skill-validator.js.map +1 -1
- package/dist/core/tasklet-rail.js +3 -5
- package/dist/core/tasklet-rail.js.map +1 -1
- package/dist/core/trust-decision.d.ts +9 -0
- package/dist/core/trust-decision.js +30 -0
- package/dist/core/trust-decision.js.map +1 -0
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/core/workflow-store.js +11 -13
- package/dist/core/workflow-store.js.map +1 -1
- package/dist/core/workspace-fingerprint.js +3 -1
- package/dist/core/workspace-fingerprint.js.map +1 -1
- package/dist/core/workspace-guard.d.ts +8 -0
- package/dist/core/workspace-guard.js +15 -0
- package/dist/core/workspace-guard.js.map +1 -1
- package/docs/README.md +10 -0
- package/docs/architecture/agent-native-semantic-architecture.md +403 -0
- package/docs/architecture/architecture.md +1 -1
- package/docs/architecture/context-architecture.md +2 -0
- package/docs/architecture/contracts-and-verification.md +33 -0
- package/docs/architecture/provider-architecture.md +48 -14
- package/docs/architecture/verified-control-plane.md +69 -14
- package/docs/audits/v1.6.0-legacy-removal-report.md +75 -0
- package/docs/audits/v1.6.0-refactor-map.md +119 -0
- package/docs/audits/v1.6.0-semantic-migration-baseline.md +185 -0
- package/docs/ecosystem/2026-external-research-master-index.md +221 -0
- package/docs/ecosystem/external-projects-audit.md +2 -0
- package/docs/getting-started/migration-v1.6.md +77 -0
- package/docs/rails/hosts/host-compatibility-rail.md +24 -0
- package/docs/rails/hosts/mcp.md +5 -1
- package/docs/rails/skills/skill-rail-2.md +46 -8
- package/docs/rails/skills/skill-rail.md +162 -49
- package/docs/reference/commands/v1.6-commands.md +74 -0
- package/docs/reference/schemas/schema-contracts.md +17 -0
- package/docs/releases/RELEASE_NOTES_v1.6.0.md +55 -0
- package/docs/roadmap/future-rails-index.md +17 -11
- package/docs/roadmap/v1.6.0-agent-native-semantic-control-plane-master-prompt.md +1682 -0
- package/docs/roadmap/verified-control-plane-implementation-tracker.md +75 -33
- package/docs/security/threat-model.md +14 -0
- package/package.json +3 -2
- package/skills/soturail-change/SKILL.md +32 -0
- package/skills/soturail-core/SKILL.md +44 -0
- package/skills/soturail-core/references/candidate-artifacts.md +37 -0
- package/skills/soturail-core/references/trust-states.md +21 -0
- package/skills/soturail-debug/SKILL.md +30 -0
- package/skills/soturail-knowledge/SKILL.md +29 -0
- package/skills/soturail-release/SKILL.md +31 -0
- package/skills/soturail-research/SKILL.md +31 -0
- package/skills/soturail-review/SKILL.md +31 -0
- package/skills/soturail-security/SKILL.md +31 -0
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ soturail --version
|
|
|
16
16
|
npx soturail --help
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
SotuRail v1.
|
|
19
|
+
SotuRail v1.6 requires Node.js 22 or newer. TypeScript is the portable default; Rust acceleration remains optional.
|
|
20
20
|
|
|
21
21
|
## Five-minute workflow
|
|
22
22
|
|
|
@@ -30,6 +30,16 @@ soturail self readiness --v1 --strict
|
|
|
30
30
|
|
|
31
31
|
Generated state stays local under `.soturail/`. Use `soturail run -- <command...>` for recoverable logs and `soturail expand <raw_id>` for redacted recovery.
|
|
32
32
|
|
|
33
|
+
## For AI agents
|
|
34
|
+
|
|
35
|
+
SotuRail ships portable [Agent Skills](skills/) and self-describing capabilities, so a coding agent does not need to memorize CLI commands:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
soturail skills export --target claude --layout portable --install # or codex, cursor, gemini, generic
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Agents load `soturail-core`, discover capabilities through MCP `soturail.capabilities` / `soturail.skills.list`, record findings as candidates, and finish only with recorded evidence. The agent understands; SotuRail organizes, constrains and proves. See [Skills](docs/rails/skills/skill-rail.md) and [Agent-Native Semantic Architecture](docs/architecture/agent-native-semantic-architecture.md).
|
|
42
|
+
|
|
33
43
|
## Core architecture
|
|
34
44
|
|
|
35
45
|
| Layer | Responsibility |
|
|
@@ -45,17 +55,17 @@ The official MCP SDK serves a typed, small, capability-mapped surface. It expose
|
|
|
45
55
|
|
|
46
56
|
## Maturity and safety
|
|
47
57
|
|
|
48
|
-
The v1.5 deterministic foundation
|
|
58
|
+
The v1.5 deterministic foundation and the v1.6 agent-native surface (portable Skills, capability discovery, candidate artifacts, evidence-backed contract readiness) are implemented and tested. AGT/ACS integration, general schema migrations, structural graph providers, Evidence Receipts, SQLite/FTS, vectors, and Conductor remain explicitly deferred.
|
|
49
59
|
|
|
50
60
|
SotuRail is a guardrail—not a sandbox. It cannot replace OS permissions, credential controls, provider security, physical/runtime QA, or human approval. Evidence distinguishes verified, unverified, blocked, inferred, and stale states.
|
|
51
61
|
|
|
52
62
|
## Documentation
|
|
53
63
|
|
|
54
64
|
- [Quickstart](docs/getting-started/quickstart.md)
|
|
55
|
-
- [v1.5 commands](docs/reference/commands/v1.5-commands.md)
|
|
65
|
+
- [v1.5 commands](docs/reference/commands/v1.5-commands.md) · [v1.6 commands](docs/reference/commands/v1.6-commands.md)
|
|
56
66
|
- [Verified control plane](docs/architecture/verified-control-plane.md)
|
|
57
67
|
- [Threat model](docs/security/threat-model.md)
|
|
58
|
-
- [Migration to v1.5](docs/getting-started/migration-v1.5.md)
|
|
68
|
+
- [Migration to v1.5](docs/getting-started/migration-v1.5.md) · [Migration to v1.6](docs/getting-started/migration-v1.6.md)
|
|
59
69
|
- [Implementation tracker](docs/roadmap/verified-control-plane-implementation-tracker.md)
|
|
60
70
|
- [Roadmap](ROADMAP.md)
|
|
61
71
|
|
package/dist/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ import { registerBenchCommand } from "./commands/bench.js";
|
|
|
7
7
|
import { registerBrainCommand } from "./commands/brain.js";
|
|
8
8
|
import { registerAgentsCommand } from "./commands/agents.js";
|
|
9
9
|
import { registerCapabilitiesCommand } from "./commands/capabilities.js";
|
|
10
|
+
import { registerCandidatesCommand } from "./commands/candidates.js";
|
|
10
11
|
import { registerContractCommand } from "./commands/contract.js";
|
|
11
12
|
import { registerDedupeCommand } from "./commands/dedupe.js";
|
|
12
13
|
import { registerDiagramCommand } from "./commands/diagram.js";
|
|
@@ -61,6 +62,7 @@ export function buildProgram() {
|
|
|
61
62
|
registerAgentsCommand(program);
|
|
62
63
|
registerBrainCommand(program);
|
|
63
64
|
registerCapabilitiesCommand(program);
|
|
65
|
+
registerCandidatesCommand(program);
|
|
64
66
|
registerContractCommand(program);
|
|
65
67
|
registerIndexCommand(program);
|
|
66
68
|
registerReadCommand(program);
|
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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"}
|
package/dist/commands/agents.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hostDeprecationNotice } from "../core/host-adapters.js";
|
|
1
2
|
import { explainAgents, lintAgentDocs, splitContextPlan } from "../core/agent-docs-hygiene.js";
|
|
2
3
|
import { agentDoctor, agentHostDoctor, agentHostDoctorAll, exportAgents, installAgent, renderAgentHostDoctor, renderAgentHostDoctorSummary, uninstallAgent } from "../core/agent-exporter.js";
|
|
3
4
|
import { formatAgentList } from "../core/agent-registry.js";
|
|
@@ -5,6 +6,7 @@ import { agentStatus, buildAgentHostMatrix, listAgentCapabilities, renderAgentCa
|
|
|
5
6
|
import { SOTURAIL_VERSION } from "../core/version.js";
|
|
6
7
|
export function registerAgentsCommand(program) {
|
|
7
8
|
const agents = program.command("agents").description("Export and install safe agent integration profiles.");
|
|
9
|
+
agents.hook("preAction", (_command, action) => warnDeprecatedHost(action.opts()));
|
|
8
10
|
agents.command("list").description("List supported agent integration profiles.").action(() => {
|
|
9
11
|
process.stdout.write(formatAgentList());
|
|
10
12
|
});
|
|
@@ -119,4 +121,11 @@ export function registerAgentsCommand(program) {
|
|
|
119
121
|
process.stdout.write(await uninstallAgent(options.agent ?? "all", options.dryRun === undefined ? {} : { dryRun: options.dryRun }));
|
|
120
122
|
});
|
|
121
123
|
}
|
|
124
|
+
export function warnDeprecatedHost(options) {
|
|
125
|
+
for (const value of [options.agent, options.host]) {
|
|
126
|
+
const notice = typeof value === "string" ? hostDeprecationNotice(value) : null;
|
|
127
|
+
if (notice)
|
|
128
|
+
process.stderr.write(`${notice}\n`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
122
131
|
//# sourceMappingURL=agents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EACL,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACvK,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAkBtD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,qDAAqD,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EACL,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACvK,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAkBtD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,qDAAqD,CAAC,CAAC;IAC5G,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAElF,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;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,+EAA+E,CAAC;SAC5F,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;SAC/C,MAAM,CAAC,CAAC,OAA2B,EAAE,EAAE;QACtC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;gBACrC,aAAa,EAAE,gCAAgC;gBAC/C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,OAAO,EAAE,gBAAgB;gBACzB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,qBAAqB,EAAE;gBAC/B,QAAQ,EAAE,CAAC,wEAAwE,CAAC;gBACpF,YAAY,EAAE,CAAC,wBAAwB,EAAE,kCAAkC,CAAC;aAC7E,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;SAC/C,MAAM,CAAC,CAAC,OAA2B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9G,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,WAAW,EAAE,kDAAkD,CAAC;SACvE,MAAM,CAAC,eAAe,EAAE,+BAA+B,CAAC;SACxD,MAAM,CAAC,OAAO,EAAE,gDAAgD,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,6DAA6D,CAAC;SAC/E,MAAM,CAAC,KAAK,EAAE,OAA6C,EAAE,EAAE;QAC9D,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC,CAAC;YACrH,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5G,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEL,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,4DAA4D,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,2DAA2D,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAChM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,cAAc,CAAC,iBAAiB,EAAE,4HAA4H,CAAC;SAC/J,MAAM,CAAC,CAAC,OAA0B,EAAE,EAAE;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qDAAqD,CAAC;SAClE,cAAc,CAAC,iBAAiB,EAAE,4HAA4H,CAAC;SAC/J,MAAM,CAAC,cAAc,EAAE,2CAA2C,CAAC;SACnE,MAAM,CAAC,mBAAmB,EAAE,+CAA+C,CAAC;SAC5E,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;SACtE,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,aAAa,GAAuE,EAAE,CAAC;QAC7F,IAAI,OAAO,CAAC,GAAG;YAAE,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACjD,IAAI,OAAO,CAAC,MAAM;YAAE,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1D,IAAI,OAAO,CAAC,OAAO;YAAE,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7D,IAAI,OAAO,CAAC,IAAI;YAAE,aAAa,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxF,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,4HAA4H,CAAC;SAC/J,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,4HAA4H,CAAC;SAC/J,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;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA4C;IAC7E,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,IAAI,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import { listCandidates, recordCandidate } from "../core/candidate-store.js";
|
|
3
|
+
import { WorkspaceGuard } from "../core/workspace-guard.js";
|
|
4
|
+
export function registerCandidatesCommand(program) {
|
|
5
|
+
const candidates = program.command("candidates").description("Record and list Semantic Worker candidate artifacts (never verified by recording).");
|
|
6
|
+
candidates.command("record").description("Record one candidate draft from a JSON file.").requiredOption("--file <path>", "Project-relative JSON file with the candidate draft").option("--json", "Print JSON").action(async (options) => {
|
|
7
|
+
const file = await new WorkspaceGuard(process.cwd()).assertAllowedRead(options.file);
|
|
8
|
+
const stored = await recordCandidate(JSON.parse(await fs.readFile(file, "utf8")), process.cwd());
|
|
9
|
+
if (options.json)
|
|
10
|
+
process.stdout.write(`${JSON.stringify(stored, null, 2)}\n`);
|
|
11
|
+
else
|
|
12
|
+
process.stdout.write(`Recorded ${stored.candidate.kind} ${stored.candidate.id} [${stored.candidate.verificationState}] at ${stored.path}\n`);
|
|
13
|
+
});
|
|
14
|
+
candidates.command("list").description("List recorded candidates with workspace freshness.").option("--kind <kind>", "claim, impact, decision, question or interpretation").option("--json", "Print JSON").action(async (options) => {
|
|
15
|
+
const views = await listCandidates(process.cwd(), options.kind ? { kind: options.kind } : {});
|
|
16
|
+
if (options.json)
|
|
17
|
+
process.stdout.write(`${JSON.stringify({ schemaVersion: "soturail.candidate.list.v1", candidates: views }, null, 2)}\n`);
|
|
18
|
+
else
|
|
19
|
+
process.stdout.write(["SotuRail candidates", `count: ${views.length}`, ...views.map((view) => `- ${view.candidate.id} ${view.candidate.kind} [${view.candidate.verificationState}, ${view.freshness}] ${view.path}`), ""].join("\n"));
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=candidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidates.js","sourceRoot":"","sources":["../../src/commands/candidates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,oFAAoF,CAAC,CAAC;IAEnJ,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,8CAA8C,CAAC,CAAC,cAAc,CAAC,eAAe,EAAE,qDAAqD,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAyC,EAAE,EAAE;QACxQ,MAAM,IAAI,GAAG,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjG,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;;YAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,CAAC,iBAAiB,QAAQ,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IACpJ,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,qDAAqD,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAA0C,EAAE,EAAE;QACrQ,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9F,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,4BAA4B,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;;YACtI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7O,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
import { CAPABILITY_REGISTRY, capabilityRegistryDigest, inspectToolCapabilities } from "../core/capability-registry.js";
|
|
2
|
+
import { capabilityCatalog, describeCapability } from "../core/capability-descriptor.js";
|
|
2
3
|
export function registerCapabilitiesCommand(program) {
|
|
3
4
|
const capabilities = program.command("capabilities").description("Inspect the canonical capability and tool registry.");
|
|
4
|
-
capabilities.command("list").option("--json", "Print JSON").action(async (options) => {
|
|
5
|
+
capabilities.command("list").option("--json", "Print JSON").option("--locale <locale>", "Presentation locale for titles", "en").action(async (options) => {
|
|
6
|
+
const catalog = capabilityCatalog(options.locale);
|
|
7
|
+
// v1 fields are kept unchanged; the v2 catalog is additive.
|
|
5
8
|
if (options.json)
|
|
6
|
-
process.stdout.write(`${JSON.stringify({ registryDigest: capabilityRegistryDigest(), capabilities: CAPABILITY_REGISTRY }, null, 2)}\n`);
|
|
9
|
+
process.stdout.write(`${JSON.stringify({ registryDigest: capabilityRegistryDigest(), capabilities: CAPABILITY_REGISTRY, catalog }, null, 2)}\n`);
|
|
7
10
|
else
|
|
8
|
-
process.stdout.write(["SotuRail capabilities", `registry_digest: ${capabilityRegistryDigest()}`, ...
|
|
11
|
+
process.stdout.write(["SotuRail capabilities", `registry_digest: ${capabilityRegistryDigest()}`, `descriptor_digest: ${catalog.descriptorDigest}`, ...catalog.capabilities.map((item) => `- ${item.id} [${item.maturity}, ${item.availability}] ${item.title} cli=${item.cli ?? "none"} mcp=${item.mcp ?? "no"}`), ""].join("\n"));
|
|
12
|
+
});
|
|
13
|
+
capabilities.command("describe").argument("<id>", "Capability ID").option("--json", "Print JSON").option("--locale <locale>", "Presentation locale", "en").action(async (id, options) => {
|
|
14
|
+
const descriptor = describeCapability(id, options.locale);
|
|
15
|
+
if (options.json) {
|
|
16
|
+
process.stdout.write(`${JSON.stringify(descriptor, null, 2)}\n`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
process.stdout.write([
|
|
20
|
+
`${descriptor.id} — ${descriptor.presentation.title}`,
|
|
21
|
+
descriptor.presentation.summary,
|
|
22
|
+
`maturity: ${descriptor.maturity}`,
|
|
23
|
+
`availability: ${descriptor.availability}`,
|
|
24
|
+
`surfaces: skill=${descriptor.surfaces.skill} mcp=${descriptor.surfaces.mcp?.tool ?? "none"} cli=${descriptor.surfaces.cli?.command ?? "none"}`,
|
|
25
|
+
`side_effects: ${descriptor.sideEffects.scope} approval_required=${descriptor.approvalRequired}`,
|
|
26
|
+
`trust: provenance=${descriptor.trust.provenanceRequired} freshness=${descriptor.trust.freshnessRequired} evidence=${descriptor.trust.evidenceRequired} agent_result_state=${descriptor.trust.agentResultState}`,
|
|
27
|
+
`providers: ${descriptor.providers.class} [${descriptor.providers.candidates.map((item) => `${item.id}:${item.status}`).join(", ") || "none"}] fallback=${descriptor.providers.fallback}`,
|
|
28
|
+
...descriptor.localization.limitations.map((item) => `limitation: ${item}`),
|
|
29
|
+
""
|
|
30
|
+
].join("\n"));
|
|
9
31
|
});
|
|
10
32
|
capabilities.command("tools").option("--json", "Print JSON").action(async (options) => {
|
|
11
33
|
const tools = await inspectToolCapabilities();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/commands/capabilities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/commands/capabilities.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/context.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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
|
+
import { buildRolePack, contextBudget, offloadContext, parseContextExpert, parseRolePack, pruneContext, renderSelection, restoreOffload, routeContext, selectContext } from "../core/context-intelligence.js";
|
|
4
4
|
const targets = ["claude", "codex", "gemini", "cursor", "antigravity", "generic", "all"];
|
|
5
5
|
export function registerContextCommand(program) {
|
|
6
6
|
const context = program.command("context").description("Build cache-friendly prompt/context packs.");
|
|
@@ -33,8 +33,11 @@ export function registerContextCommand(program) {
|
|
|
33
33
|
.description("Select task-relevant local files and memory with reasons.")
|
|
34
34
|
.requiredOption("--query <query>", "Task description")
|
|
35
35
|
.option("--limit <count>", "Maximum selected items", "10")
|
|
36
|
+
.option("--expert <expert>", "Agent-declared context expert (code, docs, release, security, workflow, memory, research)")
|
|
37
|
+
.option("--role <role>", "Agent-declared role pack (planner, executor, reviewer, release-manager, researcher)")
|
|
36
38
|
.action(async (options) => {
|
|
37
|
-
|
|
39
|
+
const declared = { ...(options.expert ? { expert: parseContextExpert(options.expert) } : {}), ...(options.role ? { role: parseRolePack(options.role) } : {}) };
|
|
40
|
+
process.stdout.write(renderSelection(await selectContext(options.query, Number.parseInt(options.limit, 10) || 10, process.cwd(), declared)));
|
|
38
41
|
});
|
|
39
42
|
context
|
|
40
43
|
.command("prune")
|
|
@@ -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;AACzI,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,iCAAiC,CAAC;AAEzC,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,8DAA8D,CAAC;SAC3E,MAAM,CAAC,mBAAmB,EAAE,6DAA6D,CAAC;SAC1F,MAAM,CAAC,eAAe,EAAE,6DAA6D,CAAC;SACtF,MAAM,CAAC,KAAK,EAAE,OAA2C,EAAE,EAAE;QAC5D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAClH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QACD,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;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,cAAc,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SACrD,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,IAAI,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { promises as fs } from "node:fs";
|
|
2
1
|
import path from "node:path";
|
|
2
|
+
import { createInterface } from "node:readline/promises";
|
|
3
3
|
import { ArtifactRegistry } from "../core/artifact-registry.js";
|
|
4
4
|
import { artifactStore } from "../core/artifact-store.js";
|
|
5
5
|
import { ChangeContractSchema, createChangeContract, evaluateReadiness } from "../core/change-contract.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
6
|
+
import { buildReadinessSnapshot, readContractFile, recordContractAttestation, reviseChangeContract } from "../core/contract-lifecycle.js";
|
|
7
|
+
const RISKS = ["low", "medium", "high", "critical"];
|
|
8
8
|
export function registerContractCommand(program) {
|
|
9
|
-
const contract = program.command("contract").description("Create and verify
|
|
9
|
+
const contract = program.command("contract").description("Create, revise, attest and verify change contracts.");
|
|
10
10
|
contract.command("create")
|
|
11
11
|
.argument("<id>", "Stable contract id")
|
|
12
12
|
.requiredOption("--title <title>", "Contract title")
|
|
@@ -14,10 +14,16 @@ export function registerContractCommand(program) {
|
|
|
14
14
|
.requiredOption("--criterion <criterion>", "Acceptance criterion")
|
|
15
15
|
.option("--risk <risk>", "low, medium, high or critical", "medium")
|
|
16
16
|
.option("--check <command>", "Required verification command")
|
|
17
|
+
.option("--criterion-check <command>", "Command whose current passing run proves the criterion (objective criteria)")
|
|
18
|
+
.option("--runtime-check <command...>", "Commands that provide runtime evidence")
|
|
19
|
+
.option("--scope <paths...>", "Project-relative path prefixes the change may touch")
|
|
20
|
+
.option("--source <paths...>", "Requirement/source files the contract is based on (bound by digest)")
|
|
17
21
|
.option("--human-approval", "Require human approval")
|
|
18
22
|
.action(async (id, options) => {
|
|
19
23
|
if (!/^[a-zA-Z0-9._-]+$/.test(id))
|
|
20
24
|
throw new Error("Contract id may contain only letters, digits, dot, underscore and dash.");
|
|
25
|
+
if (!RISKS.includes(options.risk))
|
|
26
|
+
throw new Error(`Risk must be one of: ${RISKS.join(", ")}.`);
|
|
21
27
|
const created = await createChangeContract({
|
|
22
28
|
id,
|
|
23
29
|
title: options.title,
|
|
@@ -26,34 +32,78 @@ export function registerContractCommand(program) {
|
|
|
26
32
|
decisions: [],
|
|
27
33
|
acceptanceCriteria: [options.criterion],
|
|
28
34
|
requiredChecks: options.check ? [options.check] : [],
|
|
29
|
-
evidencePolicy: { runtimeEvidenceRequired: options.risk === "critical", independentReviewRequired: options.risk === "high" || options.risk === "critical", humanApprovalRequired: options.humanApproval === true }
|
|
35
|
+
evidencePolicy: { runtimeEvidenceRequired: options.risk === "critical", independentReviewRequired: options.risk === "high" || options.risk === "critical", humanApprovalRequired: options.humanApproval === true },
|
|
36
|
+
...(options.criterionCheck ? { criteriaEvidence: { [options.criterion]: [options.criterionCheck] } } : {}),
|
|
37
|
+
...(options.runtimeCheck?.length ? { runtimeChecks: options.runtimeCheck } : {}),
|
|
38
|
+
...(options.scope?.length ? { scope: options.scope } : {}),
|
|
39
|
+
...(options.source?.length ? { sources: options.source } : {})
|
|
30
40
|
});
|
|
31
41
|
const target = new ArtifactRegistry().resolve("contracts", `${id}.json`);
|
|
32
42
|
await artifactStore.writeJson(target, created, ChangeContractSchema);
|
|
33
|
-
process.stdout.write(`Change contract created: ${path.relative(process.cwd(), target)}\n`);
|
|
43
|
+
process.stdout.write(`Change contract created: ${path.relative(process.cwd(), target)}\nbaseline: ${created.workspaceFingerprint}\n`);
|
|
44
|
+
});
|
|
45
|
+
contract.command("revise")
|
|
46
|
+
.description("Create a new contract revision with lineage; the previous revision is never modified.")
|
|
47
|
+
.argument("<file>", "Project-relative contract JSON to supersede")
|
|
48
|
+
.requiredOption("--reason <reason>", "Why the foundation changed")
|
|
49
|
+
.option("--intent <intent>", "New intent")
|
|
50
|
+
.option("--criterion <criterion...>", "Replacement acceptance criteria")
|
|
51
|
+
.option("--check <command...>", "Replacement required checks")
|
|
52
|
+
.option("--risk <risk>", "New risk")
|
|
53
|
+
.option("--scope <paths...>", "Replacement scope")
|
|
54
|
+
.option("--source <paths...>", "Replacement source files")
|
|
55
|
+
.action(async (file, options) => {
|
|
56
|
+
if (options.risk && !RISKS.includes(options.risk))
|
|
57
|
+
throw new Error(`Risk must be one of: ${RISKS.join(", ")}.`);
|
|
58
|
+
const { contract: previous } = await readContractFile(file);
|
|
59
|
+
const revised = await reviseChangeContract(previous, {
|
|
60
|
+
...(options.intent ? { intent: options.intent } : {}),
|
|
61
|
+
...(options.criterion ? { acceptanceCriteria: options.criterion } : {}),
|
|
62
|
+
...(options.check ? { requiredChecks: options.check } : {}),
|
|
63
|
+
...(options.risk ? { risk: options.risk } : {}),
|
|
64
|
+
...(options.scope ? { scope: options.scope } : {}),
|
|
65
|
+
...(options.source ? { sources: options.source } : {})
|
|
66
|
+
}, options.reason);
|
|
67
|
+
process.stdout.write(`Contract revision ${revised.contract.revision} written: ${revised.path}\nsupersedes: ${revised.contract.supersedes?.path}\nbaseline: ${revised.contract.workspaceFingerprint}\n`);
|
|
68
|
+
});
|
|
69
|
+
contract.command("attest")
|
|
70
|
+
.description("Record a human attestation receipt (interactive terminal only).")
|
|
71
|
+
.argument("<file>", "Project-relative contract JSON")
|
|
72
|
+
.requiredOption("--kind <kind>", "human-approval, independent-review or criterion")
|
|
73
|
+
.requiredOption("--by <name>", "Name of the human attesting")
|
|
74
|
+
.option("--criterion <criterion>", "Acceptance criterion being attested (with --kind criterion)")
|
|
75
|
+
.action(async (file, options) => {
|
|
76
|
+
if (!["human-approval", "independent-review", "criterion"].includes(options.kind))
|
|
77
|
+
throw new Error("Attestation kind must be human-approval, independent-review or criterion.");
|
|
78
|
+
const { contract: parsed } = await readContractFile(file);
|
|
79
|
+
const interactive = process.stdin.isTTY === true && process.stdout.isTTY === true;
|
|
80
|
+
let confirmed;
|
|
81
|
+
if (interactive) {
|
|
82
|
+
const prompt = createInterface({ input: process.stdin, output: process.stdout });
|
|
83
|
+
confirmed = (await prompt.question(`Attest ${options.kind} for contract "${parsed.id}" revision ${parsed.revision ?? 1} as ${options.by}. Type the contract id to confirm: `)).trim();
|
|
84
|
+
prompt.close();
|
|
85
|
+
}
|
|
86
|
+
const result = await recordContractAttestation(parsed, { kind: options.kind, by: options.by, ...(options.criterion ? { criterion: options.criterion } : {}) }, process.cwd(), { interactive, ...(confirmed !== undefined ? { confirmedContractId: confirmed } : {}) });
|
|
87
|
+
process.stdout.write(`Attestation recorded: ${result.path}\nbound to workspace: ${result.receipt.workspaceFingerprint}\n`);
|
|
34
88
|
});
|
|
35
89
|
contract.command("verify")
|
|
36
90
|
.argument("<file>", "Project-relative contract JSON")
|
|
37
|
-
.option("--criterion-passed <criterion>", "
|
|
38
|
-
.option("--check-passed <check>", "
|
|
39
|
-
.option("--runtime-evidence", "
|
|
40
|
-
.option("--independent-review", "
|
|
41
|
-
.option("--human-approved", "
|
|
91
|
+
.option("--criterion-passed <criterion>", "Assertion only: must be backed by recorded evidence or a human attestation")
|
|
92
|
+
.option("--check-passed <check>", "Assertion only: must be backed by a current recorded passing run")
|
|
93
|
+
.option("--runtime-evidence", "Assertion only: must be backed by declared runtime checks")
|
|
94
|
+
.option("--independent-review", "Assertion only: must be backed by an attestation receipt")
|
|
95
|
+
.option("--human-approved", "Assertion only: must be backed by an attestation receipt")
|
|
42
96
|
.action(async (file, options) => {
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
workspaceFingerprint: workspace.fingerprint,
|
|
48
|
-
acceptanceCriteriaPassed: options.criterionPassed ? [options.criterionPassed] : [],
|
|
49
|
-
checksPassed: options.checkPassed ? [options.checkPassed] : [],
|
|
50
|
-
evidenceFreshness: "current",
|
|
97
|
+
const { contract: parsed } = await readContractFile(file);
|
|
98
|
+
const snapshot = await buildReadinessSnapshot(parsed, process.cwd(), {
|
|
99
|
+
criteria: options.criterionPassed ? [options.criterionPassed] : [],
|
|
100
|
+
checks: options.checkPassed ? [options.checkPassed] : [],
|
|
51
101
|
runtimeEvidence: options.runtimeEvidence === true,
|
|
52
102
|
independentReview: options.independentReview === true,
|
|
53
|
-
humanApproval: options.humanApproved === true
|
|
54
|
-
blockers: []
|
|
103
|
+
humanApproval: options.humanApproved === true
|
|
55
104
|
});
|
|
56
|
-
|
|
105
|
+
const verdict = evaluateReadiness(parsed, snapshot);
|
|
106
|
+
process.stdout.write(`${JSON.stringify({ ...verdict, integrity: snapshot.integrity, checkEvidence: snapshot.checkEvidence, satisfiedBy: snapshot.satisfiedBy, assertions: snapshot.assertions }, null, 2)}\n`);
|
|
57
107
|
if (verdict.verdict !== "ready")
|
|
58
108
|
process.exitCode = 1;
|
|
59
109
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/commands/contract.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/commands/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -4,17 +4,9 @@ import { buildCachePayload } from "../core/cache-normalizer.js";
|
|
|
4
4
|
import { getWorkspacePaths, validateConfigFile } from "../core/config.js";
|
|
5
5
|
import { MetricsStore } from "../core/metrics-store.js";
|
|
6
6
|
import { agentDoctor } from "../core/agent-exporter.js";
|
|
7
|
-
|
|
8
|
-
try {
|
|
9
|
-
await fs.access(filePath);
|
|
10
|
-
return true;
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
7
|
+
import { pathExists } from "../core/rail-utils.js";
|
|
16
8
|
async function checkWritePermission(workspace) {
|
|
17
|
-
if (!(await
|
|
9
|
+
if (!(await pathExists(workspace))) {
|
|
18
10
|
return { name: "write permissions", ok: false, message: "workspace does not exist" };
|
|
19
11
|
}
|
|
20
12
|
const probe = path.resolve(workspace, `.write-probe-${process.pid}-${Date.now()}`);
|
|
@@ -41,8 +33,8 @@ export async function runDoctor(root = process.cwd()) {
|
|
|
41
33
|
return [
|
|
42
34
|
{
|
|
43
35
|
name: "workspace",
|
|
44
|
-
ok: await
|
|
45
|
-
message: (await
|
|
36
|
+
ok: await pathExists(paths.workspace),
|
|
37
|
+
message: (await pathExists(paths.workspace)) ? ".soturail workspace exists" : ".soturail workspace is missing; run soturail init"
|
|
46
38
|
},
|
|
47
39
|
await checkWritePermission(paths.workspace),
|
|
48
40
|
checkNodeVersion(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/hooks.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
|
+
import { getHostAdapter } from "../core/host-adapters.js";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import { ensureWorkspace, getWorkspacePaths, writeJson } from "../core/config.js";
|
|
4
5
|
import { MetricsStore } from "../core/metrics-store.js";
|
|
@@ -201,11 +202,11 @@ export async function installHooks(hostValue, options = {}, root = process.cwd()
|
|
|
201
202
|
const parsed = parseHost(hostValue);
|
|
202
203
|
const selected = parsed === "all" ? hosts : [parsed];
|
|
203
204
|
const dryRun = options.dryRun === true;
|
|
204
|
-
const mode = options.mode ?? (hostValue
|
|
205
|
+
const mode = options.mode ?? (getHostAdapter(hostValue).hooks ? "safe-hooks" : "prompt-only");
|
|
205
206
|
const lines = [`SotuRail hooks install ${hostValue} --mode ${mode}${dryRun ? " --dry-run" : ""}`];
|
|
206
207
|
const installed = [];
|
|
207
208
|
for (const host of selected) {
|
|
208
|
-
if (host === "claude" && mode !== "prompt-only") {
|
|
209
|
+
if (getHostAdapter(host).hooks === "claude-code-settings" && mode !== "prompt-only") {
|
|
209
210
|
lines.push(...(await installClaude(root, dryRun)));
|
|
210
211
|
installed.push({ host, target: ".claude/settings.json", mode, installed_at: new Date().toISOString() });
|
|
211
212
|
if (mode === "mcp") {
|
|
@@ -257,7 +258,7 @@ export async function exportHook(hostValue, root = process.cwd()) {
|
|
|
257
258
|
await fs.mkdir(paths.hookExportsDir, { recursive: true });
|
|
258
259
|
const written = [];
|
|
259
260
|
for (const host of selected) {
|
|
260
|
-
const content = host === "claude"
|
|
261
|
+
const content = getHostAdapter(host).hooks === "claude-code-settings"
|
|
261
262
|
? `# SotuRail Claude Hook Export\n\nReview before enabling.\n\n## Prompt Rules\n\n${rules(host)}\n## Pre Tool Hook\n\n\`\`\`js\n${claudePreToolHook}\n\`\`\`\n`
|
|
262
263
|
: `# SotuRail ${host} Prompt-Only Export\n\n${rules(host)}\n`;
|
|
263
264
|
const filePath = path.join(paths.hookExportsDir, `${host}.md`);
|