@plazmodium/odin 0.3.2-beta
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 +306 -0
- package/dist/adapters/archive/supabase.d.ts +19 -0
- package/dist/adapters/archive/supabase.d.ts.map +1 -0
- package/dist/adapters/archive/supabase.js +121 -0
- package/dist/adapters/archive/supabase.js.map +1 -0
- package/dist/adapters/archive/types.d.ts +26 -0
- package/dist/adapters/archive/types.d.ts.map +1 -0
- package/dist/adapters/archive/types.js +6 -0
- package/dist/adapters/archive/types.js.map +1 -0
- package/dist/adapters/formal-verification/tla-precheck.d.ts +22 -0
- package/dist/adapters/formal-verification/tla-precheck.d.ts.map +1 -0
- package/dist/adapters/formal-verification/tla-precheck.js +270 -0
- package/dist/adapters/formal-verification/tla-precheck.js.map +1 -0
- package/dist/adapters/formal-verification/types.d.ts +37 -0
- package/dist/adapters/formal-verification/types.d.ts.map +1 -0
- package/dist/adapters/formal-verification/types.js +6 -0
- package/dist/adapters/formal-verification/types.js.map +1 -0
- package/dist/adapters/review/semgrep.d.ts +12 -0
- package/dist/adapters/review/semgrep.d.ts.map +1 -0
- package/dist/adapters/review/semgrep.js +175 -0
- package/dist/adapters/review/semgrep.js.map +1 -0
- package/dist/adapters/review/types.d.ts +14 -0
- package/dist/adapters/review/types.d.ts.map +1 -0
- package/dist/adapters/review/types.js +6 -0
- package/dist/adapters/review/types.js.map +1 -0
- package/dist/adapters/skills/filesystem.d.ts +18 -0
- package/dist/adapters/skills/filesystem.d.ts.map +1 -0
- package/dist/adapters/skills/filesystem.js +398 -0
- package/dist/adapters/skills/filesystem.js.map +1 -0
- package/dist/adapters/skills/types.d.ts +19 -0
- package/dist/adapters/skills/types.d.ts.map +1 -0
- package/dist/adapters/skills/types.js +6 -0
- package/dist/adapters/skills/types.js.map +1 -0
- package/dist/adapters/sql-executor/direct-postgres.d.ts +15 -0
- package/dist/adapters/sql-executor/direct-postgres.d.ts.map +1 -0
- package/dist/adapters/sql-executor/direct-postgres.js +33 -0
- package/dist/adapters/sql-executor/direct-postgres.js.map +1 -0
- package/dist/adapters/sql-executor/supabase-management-api.d.ts +17 -0
- package/dist/adapters/sql-executor/supabase-management-api.d.ts.map +1 -0
- package/dist/adapters/sql-executor/supabase-management-api.js +40 -0
- package/dist/adapters/sql-executor/supabase-management-api.js.map +1 -0
- package/dist/adapters/sql-executor/types.d.ts +15 -0
- package/dist/adapters/sql-executor/types.d.ts.map +1 -0
- package/dist/adapters/sql-executor/types.js +6 -0
- package/dist/adapters/sql-executor/types.js.map +1 -0
- package/dist/adapters/workflow-state/in-memory.d.ts +69 -0
- package/dist/adapters/workflow-state/in-memory.d.ts.map +1 -0
- package/dist/adapters/workflow-state/in-memory.js +444 -0
- package/dist/adapters/workflow-state/in-memory.js.map +1 -0
- package/dist/adapters/workflow-state/supabase.d.ts +55 -0
- package/dist/adapters/workflow-state/supabase.d.ts.map +1 -0
- package/dist/adapters/workflow-state/supabase.js +823 -0
- package/dist/adapters/workflow-state/supabase.js.map +1 -0
- package/dist/adapters/workflow-state/types.d.ts +55 -0
- package/dist/adapters/workflow-state/types.d.ts.map +1 -0
- package/dist/adapters/workflow-state/types.js +6 -0
- package/dist/adapters/workflow-state/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +115 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/actors.d.ts +10 -0
- package/dist/domain/actors.d.ts.map +1 -0
- package/dist/domain/actors.js +60 -0
- package/dist/domain/actors.js.map +1 -0
- package/dist/domain/development-evals.d.ts +9 -0
- package/dist/domain/development-evals.d.ts.map +1 -0
- package/dist/domain/development-evals.js +164 -0
- package/dist/domain/development-evals.js.map +1 -0
- package/dist/domain/matching.d.ts +8 -0
- package/dist/domain/matching.d.ts.map +1 -0
- package/dist/domain/matching.js +24 -0
- package/dist/domain/matching.js.map +1 -0
- package/dist/domain/phases.d.ts +10 -0
- package/dist/domain/phases.d.ts.map +1 -0
- package/dist/domain/phases.js +165 -0
- package/dist/domain/phases.js.map +1 -0
- package/dist/domain/quality-gates.d.ts +7 -0
- package/dist/domain/quality-gates.d.ts.map +1 -0
- package/dist/domain/quality-gates.js +8 -0
- package/dist/domain/quality-gates.js.map +1 -0
- package/dist/domain/resonance.d.ts +33 -0
- package/dist/domain/resonance.d.ts.map +1 -0
- package/dist/domain/resonance.js +100 -0
- package/dist/domain/resonance.js.map +1 -0
- package/dist/domain/tasks.d.ts +9 -0
- package/dist/domain/tasks.d.ts.map +1 -0
- package/dist/domain/tasks.js +57 -0
- package/dist/domain/tasks.js.map +1 -0
- package/dist/init.d.ts +7 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +387 -0
- package/dist/init.js.map +1 -0
- package/dist/schemas.d.ts +366 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +184 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +243 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/apply-migrations.d.ts +21 -0
- package/dist/tools/apply-migrations.d.ts.map +1 -0
- package/dist/tools/apply-migrations.js +286 -0
- package/dist/tools/apply-migrations.js.map +1 -0
- package/dist/tools/archive-feature-release.d.ts +13 -0
- package/dist/tools/archive-feature-release.d.ts.map +1 -0
- package/dist/tools/archive-feature-release.js +182 -0
- package/dist/tools/archive-feature-release.js.map +1 -0
- package/dist/tools/capture-learning.d.ts +9 -0
- package/dist/tools/capture-learning.d.ts.map +1 -0
- package/dist/tools/capture-learning.js +53 -0
- package/dist/tools/capture-learning.js.map +1 -0
- package/dist/tools/explore-knowledge.d.ts +9 -0
- package/dist/tools/explore-knowledge.d.ts.map +1 -0
- package/dist/tools/explore-knowledge.js +142 -0
- package/dist/tools/explore-knowledge.js.map +1 -0
- package/dist/tools/get-claims-needing-review.d.ts +8 -0
- package/dist/tools/get-claims-needing-review.d.ts.map +1 -0
- package/dist/tools/get-claims-needing-review.js +21 -0
- package/dist/tools/get-claims-needing-review.js.map +1 -0
- package/dist/tools/get-development-eval-status.d.ts +8 -0
- package/dist/tools/get-development-eval-status.d.ts.map +1 -0
- package/dist/tools/get-development-eval-status.js +49 -0
- package/dist/tools/get-development-eval-status.js.map +1 -0
- package/dist/tools/get-feature-status.d.ts +8 -0
- package/dist/tools/get-feature-status.d.ts.map +1 -0
- package/dist/tools/get-feature-status.js +68 -0
- package/dist/tools/get-feature-status.js.map +1 -0
- package/dist/tools/get-next-phase.d.ts +8 -0
- package/dist/tools/get-next-phase.d.ts.map +1 -0
- package/dist/tools/get-next-phase.js +26 -0
- package/dist/tools/get-next-phase.js.map +1 -0
- package/dist/tools/prepare-phase-context.d.ts +9 -0
- package/dist/tools/prepare-phase-context.d.ts.map +1 -0
- package/dist/tools/prepare-phase-context.js +151 -0
- package/dist/tools/prepare-phase-context.js.map +1 -0
- package/dist/tools/record-commit.d.ts +8 -0
- package/dist/tools/record-commit.d.ts.map +1 -0
- package/dist/tools/record-commit.js +28 -0
- package/dist/tools/record-commit.js.map +1 -0
- package/dist/tools/record-eval-plan.d.ts +8 -0
- package/dist/tools/record-eval-plan.d.ts.map +1 -0
- package/dist/tools/record-eval-plan.js +40 -0
- package/dist/tools/record-eval-plan.js.map +1 -0
- package/dist/tools/record-eval-run.d.ts +8 -0
- package/dist/tools/record-eval-run.d.ts.map +1 -0
- package/dist/tools/record-eval-run.js +42 -0
- package/dist/tools/record-eval-run.js.map +1 -0
- package/dist/tools/record-merge.d.ts +8 -0
- package/dist/tools/record-merge.d.ts.map +1 -0
- package/dist/tools/record-merge.js +16 -0
- package/dist/tools/record-merge.js.map +1 -0
- package/dist/tools/record-phase-artifact.d.ts +8 -0
- package/dist/tools/record-phase-artifact.d.ts.map +1 -0
- package/dist/tools/record-phase-artifact.js +26 -0
- package/dist/tools/record-phase-artifact.js.map +1 -0
- package/dist/tools/record-phase-result.d.ts +9 -0
- package/dist/tools/record-phase-result.d.ts.map +1 -0
- package/dist/tools/record-phase-result.js +122 -0
- package/dist/tools/record-phase-result.js.map +1 -0
- package/dist/tools/record-pull-request.d.ts +8 -0
- package/dist/tools/record-pull-request.d.ts.map +1 -0
- package/dist/tools/record-pull-request.js +16 -0
- package/dist/tools/record-pull-request.js.map +1 -0
- package/dist/tools/record-quality-gate.d.ts +8 -0
- package/dist/tools/record-quality-gate.d.ts.map +1 -0
- package/dist/tools/record-quality-gate.js +26 -0
- package/dist/tools/record-quality-gate.js.map +1 -0
- package/dist/tools/record-watcher-review.d.ts +8 -0
- package/dist/tools/record-watcher-review.d.ts.map +1 -0
- package/dist/tools/record-watcher-review.js +18 -0
- package/dist/tools/record-watcher-review.js.map +1 -0
- package/dist/tools/run-policy-checks.d.ts +8 -0
- package/dist/tools/run-policy-checks.d.ts.map +1 -0
- package/dist/tools/run-policy-checks.js +38 -0
- package/dist/tools/run-policy-checks.js.map +1 -0
- package/dist/tools/run-review-checks.d.ts +9 -0
- package/dist/tools/run-review-checks.d.ts.map +1 -0
- package/dist/tools/run-review-checks.js +45 -0
- package/dist/tools/run-review-checks.js.map +1 -0
- package/dist/tools/start-feature.d.ts +8 -0
- package/dist/tools/start-feature.d.ts.map +1 -0
- package/dist/tools/start-feature.js +33 -0
- package/dist/tools/start-feature.js.map +1 -0
- package/dist/tools/submit-claim.d.ts +8 -0
- package/dist/tools/submit-claim.d.ts.map +1 -0
- package/dist/tools/submit-claim.js +45 -0
- package/dist/tools/submit-claim.js.map +1 -0
- package/dist/tools/verify-claims.d.ts +8 -0
- package/dist/tools/verify-claims.d.ts.map +1 -0
- package/dist/tools/verify-claims.js +39 -0
- package/dist/tools/verify-claims.js.map +1 -0
- package/dist/tools/verify-design.d.ts +8 -0
- package/dist/tools/verify-design.d.ts.map +1 -0
- package/dist/tools/verify-design.js +31 -0
- package/dist/tools/verify-design.js.map +1 -0
- package/dist/types.d.ts +333 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +52 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +24 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +50 -0
- package/dist/utils.js.map +1 -0
- package/migrations/001_schema.sql +795 -0
- package/migrations/002_functions.sql +2126 -0
- package/migrations/003_views.sql +599 -0
- package/migrations/004_seed.sql +106 -0
- package/migrations/005_odin_v2_schema.sql +217 -0
- package/migrations/006_odin_v2_functions.sql +671 -0
- package/migrations/007_odin_v2_phase_alignment.sql +554 -0
- package/migrations/008_related_learnings.sql +80 -0
- package/migrations/README.md +23 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-pull-request.d.ts","sourceRoot":"","sources":["../../src/tools/record-pull-request.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAG5D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,sBAAsB,6CAe9B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Pull Request Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
6
|
+
export async function handleRecordPullRequest(adapter, input) {
|
|
7
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
8
|
+
if (feature == null) {
|
|
9
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
10
|
+
feature_id: input.feature_id,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const pull_request = await adapter.recordPullRequest(input.feature_id, input.pr_url, input.pr_number);
|
|
14
|
+
return createTextResult(`Recorded PR #${pull_request.pr_number} for feature ${pull_request.feature_id}.`, { pull_request });
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=record-pull-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-pull-request.js","sourceRoot":"","sources":["../../src/tools/record-pull-request.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA6B,EAC7B,KAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAEtG,OAAO,gBAAgB,CACrB,gBAAgB,YAAY,CAAC,SAAS,gBAAgB,YAAY,CAAC,UAAU,GAAG,EAChF,EAAE,YAAY,EAAE,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Quality Gate Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RecordQualityGateInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRecordQualityGate(adapter: WorkflowStateAdapter, input: RecordQualityGateInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=record-quality-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-quality-gate.d.ts","sourceRoot":"","sources":["../../src/tools/record-quality-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAG5D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,sBAAsB,6CAgC9B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Quality Gate Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
6
|
+
export async function handleRecordQualityGate(adapter, input) {
|
|
7
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
8
|
+
if (feature == null) {
|
|
9
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
10
|
+
feature_id: input.feature_id,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const gate_id = await adapter.recordQualityGate(input.feature_id, input.gate_name, input.status, input.approver, input.notes, input.phase);
|
|
14
|
+
return createTextResult(`Recorded ${input.status.toLowerCase()} quality gate ${input.gate_name} for feature ${input.feature_id}.`, {
|
|
15
|
+
gate: {
|
|
16
|
+
id: gate_id,
|
|
17
|
+
feature_id: input.feature_id,
|
|
18
|
+
gate_name: input.gate_name,
|
|
19
|
+
phase: input.phase,
|
|
20
|
+
status: input.status,
|
|
21
|
+
approver: input.approver,
|
|
22
|
+
notes: input.notes,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=record-quality-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-quality-gate.js","sourceRoot":"","sources":["../../src/tools/record-quality-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA6B,EAC7B,KAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAC7C,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,CACZ,CAAC;IAEF,OAAO,gBAAgB,CACrB,YAAY,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,iBAAiB,KAAK,CAAC,SAAS,gBAAgB,KAAK,CAAC,UAAU,GAAG,EACzG;QACE,IAAI,EAAE;YACJ,EAAE,EAAE,OAAO;YACX,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB;KACF,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Watcher Review Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RecordWatcherReviewInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRecordWatcherReview(adapter: WorkflowStateAdapter, input: RecordWatcherReviewInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=record-watcher-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-watcher-review.d.ts","sourceRoot":"","sources":["../../src/tools/record-watcher-review.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAG9D,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,wBAAwB,6CAehC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Watcher Review Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { resolveNamedActorName } from '../domain/actors.js';
|
|
6
|
+
import { createTextResult } from '../utils.js';
|
|
7
|
+
export async function handleRecordWatcherReview(adapter, input) {
|
|
8
|
+
const watcher_agent = resolveNamedActorName('watcher-agent', input.watcher_agent);
|
|
9
|
+
const review = await adapter.recordWatcherReview({
|
|
10
|
+
claim_id: input.claim_id,
|
|
11
|
+
verdict: input.verdict,
|
|
12
|
+
confidence: input.confidence,
|
|
13
|
+
reasoning: input.reasoning,
|
|
14
|
+
watcher_agent,
|
|
15
|
+
});
|
|
16
|
+
return createTextResult(`Recorded watcher ${review.verdict} review for claim ${review.claim_id}.`, { review });
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=record-watcher-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-watcher-review.js","sourceRoot":"","sources":["../../src/tools/record-watcher-review.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAA6B,EAC7B,KAA+B;IAE/B,MAAM,aAAa,GAAG,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC;QAC/C,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa;KACd,CAAC,CAAC;IAEH,OAAO,gBAAgB,CACrB,oBAAoB,MAAM,CAAC,OAAO,qBAAqB,MAAM,CAAC,QAAQ,GAAG,EACzE,EAAE,MAAM,EAAE,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Policy Checks Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RunPolicyChecksInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRunPolicyChecks(adapter: WorkflowStateAdapter, input: RunPolicyChecksInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=run-policy-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-policy-checks.d.ts","sourceRoot":"","sources":["../../src/tools/run-policy-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG1D,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,oBAAoB,6CAsC5B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Policy Checks Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
6
|
+
export async function handleRunPolicyChecks(adapter, input) {
|
|
7
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
8
|
+
if (feature == null) {
|
|
9
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
10
|
+
feature_id: input.feature_id,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const results = await adapter.runPolicyChecks(input.feature_id);
|
|
14
|
+
const claims_needing_review = await adapter.listClaimsNeedingReview(input.feature_id);
|
|
15
|
+
const counts = {
|
|
16
|
+
total: results.length,
|
|
17
|
+
passed: results.filter((result) => result.verdict === 'PASS').length,
|
|
18
|
+
failed: results.filter((result) => result.verdict === 'FAIL').length,
|
|
19
|
+
needs_review: results.filter((result) => result.verdict === 'NEEDS_REVIEW').length,
|
|
20
|
+
};
|
|
21
|
+
const next_actions = claims_needing_review.length === 0
|
|
22
|
+
? []
|
|
23
|
+
: [
|
|
24
|
+
'Use odin.get_claims_needing_review to inspect the watcher queue.',
|
|
25
|
+
'Have watcher-agent review each escalated claim and submit verdicts with odin.record_watcher_review.',
|
|
26
|
+
'Re-run odin.verify_claims after watcher reviews are recorded.',
|
|
27
|
+
];
|
|
28
|
+
return createTextResult(claims_needing_review.length === 0
|
|
29
|
+
? `Ran policy checks for ${counts.total} claim(s) on feature ${input.feature_id}.`
|
|
30
|
+
: `Ran policy checks for ${counts.total} claim(s) on feature ${input.feature_id}; ${claims_needing_review.length} claim(s) now need watcher review.`, {
|
|
31
|
+
feature_id: input.feature_id,
|
|
32
|
+
counts,
|
|
33
|
+
results,
|
|
34
|
+
claims_needing_review,
|
|
35
|
+
next_actions,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=run-policy-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-policy-checks.js","sourceRoot":"","sources":["../../src/tools/run-policy-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA6B,EAC7B,KAA2B;IAE3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,MAAM;QACpE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,MAAM;QACpE,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,MAAM;KACnF,CAAC;IACF,MAAM,YAAY,GAChB,qBAAqB,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE,kEAAkE;YAClE,qGAAqG;YACrG,+DAA+D;SAChE,CAAC;IAER,OAAO,gBAAgB,CACrB,qBAAqB,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,yBAAyB,MAAM,CAAC,KAAK,wBAAwB,KAAK,CAAC,UAAU,GAAG;QAClF,CAAC,CAAC,yBAAyB,MAAM,CAAC,KAAK,wBAAwB,KAAK,CAAC,UAAU,KAAK,qBAAqB,CAAC,MAAM,oCAAoC,EACtJ;QACE,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM;QACN,OAAO;QACP,qBAAqB;QACrB,YAAY;KACb,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Review Checks Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { ReviewAdapter } from '../adapters/review/types.js';
|
|
6
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
7
|
+
import type { RunReviewChecksInput } from '../schemas.js';
|
|
8
|
+
export declare function handleRunReviewChecks(adapter: WorkflowStateAdapter, review_adapter: ReviewAdapter, input: RunReviewChecksInput): Promise<import("../utils.js").ToolResult>;
|
|
9
|
+
//# sourceMappingURL=run-review-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-review-checks.d.ts","sourceRoot":"","sources":["../../src/tools/run-review-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG1D,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,oBAAoB,EAC7B,cAAc,EAAE,aAAa,EAC7B,KAAK,EAAE,oBAAoB,6CAkD5B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Review Checks Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { createErrorResult, createId, createTextResult } from '../utils.js';
|
|
6
|
+
export async function handleRunReviewChecks(adapter, review_adapter, input) {
|
|
7
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
8
|
+
if (feature == null) {
|
|
9
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
10
|
+
feature_id: input.feature_id,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const execution = await review_adapter.runChecks({
|
|
14
|
+
feature_id: input.feature_id,
|
|
15
|
+
tool: input.tool,
|
|
16
|
+
changed_files: input.changed_files,
|
|
17
|
+
});
|
|
18
|
+
const review_check = await adapter.recordReviewCheck({
|
|
19
|
+
id: createId('review'),
|
|
20
|
+
feature_id: input.feature_id,
|
|
21
|
+
phase: input.phase,
|
|
22
|
+
tool: execution.tool,
|
|
23
|
+
status: execution.status,
|
|
24
|
+
summary: execution.summary,
|
|
25
|
+
changed_files: execution.changed_files,
|
|
26
|
+
initiated_by: input.initiated_by,
|
|
27
|
+
created_at: new Date().toISOString(),
|
|
28
|
+
});
|
|
29
|
+
// GAP-4: Persist individual security findings for dashboard visibility
|
|
30
|
+
let findings_recorded = 0;
|
|
31
|
+
if (execution.findings.length > 0) {
|
|
32
|
+
try {
|
|
33
|
+
findings_recorded = await adapter.recordSecurityFindings(input.feature_id, input.phase, execution.findings, input.tool);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
console.error(`[Odin Runtime] Failed to record security findings for ${input.feature_id}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return createTextResult(`Review checks completed for feature ${review_check.feature_id} with status ${review_check.status}.`, {
|
|
40
|
+
review_check,
|
|
41
|
+
findings: execution.findings,
|
|
42
|
+
findings_recorded,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=run-review-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-review-checks.js","sourceRoot":"","sources":["../../src/tools/run-review-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA6B,EAC7B,cAA6B,EAC7B,KAA2B;IAE3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC;QAC/C,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC;QACnD,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC;IAEH,uEAAuE;IACvE,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,iBAAiB,GAAG,MAAM,OAAO,CAAC,sBAAsB,CACtD,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,KAAK,EACX,SAAS,CAAC,QAAQ,EAClB,KAAK,CAAC,IAAI,CACX,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,yDAAyD,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CACrB,uCAAuC,YAAY,CAAC,UAAU,gBAAgB,YAAY,CAAC,MAAM,GAAG,EACpG;QACE,YAAY;QACZ,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,iBAAiB;KAClB,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start Feature Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { StartFeatureInput } from '../schemas.js';
|
|
7
|
+
export declare function handleStartFeature(adapter: WorkflowStateAdapter, input: StartFeatureInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=start-feature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-feature.d.ts","sourceRoot":"","sources":["../../src/tools/start-feature.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,iBAAiB,6CAiCzB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start Feature Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { validateHumanAuthor } from '../domain/actors.js';
|
|
6
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
7
|
+
export async function handleStartFeature(adapter, input) {
|
|
8
|
+
const author_error = validateHumanAuthor(input.author);
|
|
9
|
+
if (author_error != null) {
|
|
10
|
+
return createErrorResult(author_error, {
|
|
11
|
+
feature_id: input.id,
|
|
12
|
+
author: input.author,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
const branch_name = input.dev_initials == null ? undefined : `${input.dev_initials}/feature/${input.id}`;
|
|
16
|
+
const feature = await adapter.startFeature({
|
|
17
|
+
id: input.id,
|
|
18
|
+
name: input.name,
|
|
19
|
+
complexity_level: input.complexity_level,
|
|
20
|
+
severity: input.severity,
|
|
21
|
+
requirements_path: input.requirements_path,
|
|
22
|
+
dev_initials: input.dev_initials,
|
|
23
|
+
branch_name,
|
|
24
|
+
base_branch: input.base_branch,
|
|
25
|
+
author: input.author,
|
|
26
|
+
});
|
|
27
|
+
return createTextResult(`Feature ${feature.id} started at phase ${feature.current_phase} (${feature.status}).`, {
|
|
28
|
+
feature,
|
|
29
|
+
next_phase: '1',
|
|
30
|
+
next_phase_name: 'Product',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=start-feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-feature.js","sourceRoot":"","sources":["../../src/tools/start-feature.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA6B,EAC7B,KAAwB;IAExB,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzB,OAAO,iBAAiB,CAAC,YAAY,EAAE;YACrC,UAAU,EAAE,KAAK,CAAC,EAAE;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GACf,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,YAAY,KAAK,CAAC,EAAE,EAAE,CAAC;IAEvF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;QACzC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW;QACX,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IAEH,OAAO,gBAAgB,CACrB,WAAW,OAAO,CAAC,EAAE,qBAAqB,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,MAAM,IAAI,EACtF;QACE,OAAO;QACP,UAAU,EAAE,GAAG;QACf,eAAe,EAAE,SAAS;KAC3B,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit Claim Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { SubmitClaimInput } from '../schemas.js';
|
|
7
|
+
export declare function handleSubmitClaim(adapter: WorkflowStateAdapter, input: SubmitClaimInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=submit-claim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-claim.d.ts","sourceRoot":"","sources":["../../src/tools/submit-claim.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAGhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,gBAAgB,6CAuDxB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit Claim Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { resolveWorkflowActorName } from '../domain/actors.js';
|
|
6
|
+
import { getPhaseAgentInstructions, isWatchedPhase } from '../domain/phases.js';
|
|
7
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
8
|
+
export async function handleSubmitClaim(adapter, input) {
|
|
9
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
10
|
+
if (feature == null) {
|
|
11
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
12
|
+
feature_id: input.feature_id,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
if (!isWatchedPhase(input.phase)) {
|
|
16
|
+
return createErrorResult(`Claims can only be submitted from watched phases (Builder, Integrator, Release). Phase ${input.phase} is not watched.`, {
|
|
17
|
+
feature_id: input.feature_id,
|
|
18
|
+
phase: input.phase,
|
|
19
|
+
allowed_phases: ['5', '7', '9'],
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (feature.current_phase !== input.phase) {
|
|
23
|
+
return createErrorResult(`Feature ${input.feature_id} is currently in phase ${feature.current_phase}, not ${input.phase}. Claims must be submitted from the feature's active watched phase.`, {
|
|
24
|
+
feature_id: input.feature_id,
|
|
25
|
+
expected_phase: feature.current_phase,
|
|
26
|
+
provided_phase: input.phase,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const agent_name = resolveWorkflowActorName(input.phase, input.agent_name ?? getPhaseAgentInstructions(input.phase).name);
|
|
30
|
+
const invocation = input.invocation_id == null
|
|
31
|
+
? await adapter.findOpenAgentInvocation(input.feature_id, input.phase, agent_name)
|
|
32
|
+
: null;
|
|
33
|
+
const claim = await adapter.submitClaim({
|
|
34
|
+
feature_id: input.feature_id,
|
|
35
|
+
phase: input.phase,
|
|
36
|
+
agent_name,
|
|
37
|
+
invocation_id: input.invocation_id ?? invocation?.id ?? null,
|
|
38
|
+
claim_type: input.claim_type,
|
|
39
|
+
claim_description: input.description,
|
|
40
|
+
evidence_refs: input.evidence_refs,
|
|
41
|
+
risk_level: input.risk_level,
|
|
42
|
+
});
|
|
43
|
+
return createTextResult(`Submitted ${claim.claim_type} claim for feature ${claim.feature_id}.`, { claim });
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=submit-claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-claim.js","sourceRoot":"","sources":["../../src/tools/submit-claim.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA6B,EAC7B,KAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,iBAAiB,CACtB,0FAA0F,KAAK,CAAC,KAAK,kBAAkB,EACvH;YACE,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SAChC,CACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1C,OAAO,iBAAiB,CACtB,WAAW,KAAK,CAAC,UAAU,0BAA0B,OAAO,CAAC,aAAa,SAAS,KAAK,CAAC,KAAK,qEAAqE,EACnK;YACE,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,cAAc,EAAE,KAAK,CAAC,KAAK;SAC5B,CACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,wBAAwB,CACzC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,UAAU,IAAI,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAChE,CAAC;IACF,MAAM,UAAU,GACd,KAAK,CAAC,aAAa,IAAI,IAAI;QACzB,CAAC,CAAC,MAAM,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC;QAClF,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;QACtC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU;QACV,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,UAAU,EAAE,EAAE,IAAI,IAAI;QAC5D,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,iBAAiB,EAAE,KAAK,CAAC,WAAW;QACpC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CAAC;IAEH,OAAO,gBAAgB,CACrB,aAAa,KAAK,CAAC,UAAU,sBAAsB,KAAK,CAAC,UAAU,GAAG,EACtE,EAAE,KAAK,EAAE,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Claims Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { VerifyClaimsInput } from '../schemas.js';
|
|
7
|
+
export declare function handleVerifyClaims(adapter: WorkflowStateAdapter, input: VerifyClaimsInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=verify-claims.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-claims.d.ts","sourceRoot":"","sources":["../../src/tools/verify-claims.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,iBAAiB,6CAuCzB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Claims Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
6
|
+
export async function handleVerifyClaims(adapter, input) {
|
|
7
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
8
|
+
if (feature == null) {
|
|
9
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
10
|
+
feature_id: input.feature_id,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const claims = await adapter.listClaimVerificationStatus(input.feature_id);
|
|
14
|
+
const claims_needing_review = await adapter.listClaimsNeedingReview(input.feature_id);
|
|
15
|
+
const counts = {
|
|
16
|
+
total: claims.length,
|
|
17
|
+
passed: claims.filter((claim) => claim.final_status === 'PASS').length,
|
|
18
|
+
failed: claims.filter((claim) => claim.final_status === 'FAIL').length,
|
|
19
|
+
needs_review: claims.filter((claim) => claim.final_status === 'NEEDS_REVIEW').length,
|
|
20
|
+
pending: claims.filter((claim) => claim.final_status === 'PENDING').length,
|
|
21
|
+
};
|
|
22
|
+
const next_actions = claims_needing_review.length === 0
|
|
23
|
+
? []
|
|
24
|
+
: [
|
|
25
|
+
'Claims are still awaiting LLM watcher review.',
|
|
26
|
+
'Call odin.get_claims_needing_review to fetch the queue for the watcher-agent.',
|
|
27
|
+
'Record each watcher decision with odin.record_watcher_review, then run odin.verify_claims again.',
|
|
28
|
+
];
|
|
29
|
+
return createTextResult(claims_needing_review.length === 0
|
|
30
|
+
? `Verified ${counts.total} claim(s) for feature ${feature.id}.`
|
|
31
|
+
: `Verified ${counts.total} claim(s) for feature ${feature.id}; ${claims_needing_review.length} claim(s) still await watcher review.`, {
|
|
32
|
+
feature_id: feature.id,
|
|
33
|
+
counts,
|
|
34
|
+
claims,
|
|
35
|
+
claims_needing_review,
|
|
36
|
+
next_actions,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=verify-claims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-claims.js","sourceRoot":"","sources":["../../src/tools/verify-claims.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA6B,EAC7B,KAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,2BAA2B,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3E,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,MAAM;QACtE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,MAAM;QACtE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,cAAc,CAAC,CAAC,MAAM;QACpF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,MAAM;KAC3E,CAAC;IACF,MAAM,YAAY,GAChB,qBAAqB,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE,+CAA+C;YAC/C,+EAA+E;YAC/E,kGAAkG;SACnG,CAAC;IAER,OAAO,gBAAgB,CACrB,qBAAqB,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,YAAY,MAAM,CAAC,KAAK,yBAAyB,OAAO,CAAC,EAAE,GAAG;QAChE,CAAC,CAAC,YAAY,MAAM,CAAC,KAAK,yBAAyB,OAAO,CAAC,EAAE,KAAK,qBAAqB,CAAC,MAAM,uCAAuC,EACvI;QACE,UAAU,EAAE,OAAO,CAAC,EAAE;QACtB,MAAM;QACN,MAAM;QACN,qBAAqB;QACrB,YAAY;KACb,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Design Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { FormalVerificationAdapter } from '../adapters/formal-verification/types.js';
|
|
6
|
+
import type { VerifyDesignInput } from '../schemas.js';
|
|
7
|
+
export declare function handleVerifyDesign(adapter: FormalVerificationAdapter | null, input: VerifyDesignInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=verify-design.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-design.d.ts","sourceRoot":"","sources":["../../src/tools/verify-design.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GAAG,IAAI,EACzC,KAAK,EAAE,iBAAiB,6CAmCzB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Design Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { createTextResult } from '../utils.js';
|
|
6
|
+
export async function handleVerifyDesign(adapter, input) {
|
|
7
|
+
if (adapter == null) {
|
|
8
|
+
return createTextResult('Formal verification is not configured. Set `formal_verification.provider: tla-precheck` in `.odin/config.yaml`.', {
|
|
9
|
+
status: 'NOT_CONFIGURED',
|
|
10
|
+
error: 'Formal verification is not configured. Set `formal_verification.provider: tla-precheck` in `.odin/config.yaml`.',
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const available = await adapter.isAvailable();
|
|
14
|
+
if (!available) {
|
|
15
|
+
return createTextResult('tla-precheck is not available. Ensure Java 17+ is installed and tla-precheck is in project dependencies: npm install -D tla-precheck@<version>', {
|
|
16
|
+
status: 'UNAVAILABLE',
|
|
17
|
+
error: 'tla-precheck not found in project dependencies or Java 17+ not installed. Run: npm install -D tla-precheck@<version>',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const result = await adapter.verifyDesign({
|
|
21
|
+
feature_id: input.feature_id,
|
|
22
|
+
machine_path: input.machine_path,
|
|
23
|
+
});
|
|
24
|
+
const status_text = result.status === 'VERIFIED'
|
|
25
|
+
? `Design verification PASSED for ${result.machine_name}. ${result.states_checked} states checked in ${result.duration_ms}ms.`
|
|
26
|
+
: result.status === 'VIOLATION'
|
|
27
|
+
? `Design verification FAILED for ${result.machine_name}. ${result.invariant_violations.length} violation(s) found.`
|
|
28
|
+
: `Design verification returned ${result.status} for ${result.machine_name}.${result.error ? ` ${result.error}` : ''}`;
|
|
29
|
+
return createTextResult(status_text, { ...result });
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=verify-design.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-design.js","sourceRoot":"","sources":["../../src/tools/verify-design.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAyC,EACzC,KAAwB;IAExB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,gBAAgB,CACrB,iHAAiH,EACjH;YACE,MAAM,EAAE,gBAAgB;YACxB,KAAK,EAAE,iHAAiH;SACzH,CACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,gBAAgB,CACrB,gJAAgJ,EAChJ;YACE,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,sHAAsH;SAC9H,CACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;QACxC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,KAAK,UAAU;QAC9C,CAAC,CAAC,kCAAkC,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,cAAc,sBAAsB,MAAM,CAAC,WAAW,KAAK;QAC9H,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW;YAC7B,CAAC,CAAC,kCAAkC,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,oBAAoB,CAAC,MAAM,sBAAsB;YACpH,CAAC,CAAC,gCAAgC,MAAM,CAAC,MAAM,QAAQ,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAE3H,OAAO,gBAAgB,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AACtD,CAAC"}
|