@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.
Files changed (219) hide show
  1. package/README.md +306 -0
  2. package/dist/adapters/archive/supabase.d.ts +19 -0
  3. package/dist/adapters/archive/supabase.d.ts.map +1 -0
  4. package/dist/adapters/archive/supabase.js +121 -0
  5. package/dist/adapters/archive/supabase.js.map +1 -0
  6. package/dist/adapters/archive/types.d.ts +26 -0
  7. package/dist/adapters/archive/types.d.ts.map +1 -0
  8. package/dist/adapters/archive/types.js +6 -0
  9. package/dist/adapters/archive/types.js.map +1 -0
  10. package/dist/adapters/formal-verification/tla-precheck.d.ts +22 -0
  11. package/dist/adapters/formal-verification/tla-precheck.d.ts.map +1 -0
  12. package/dist/adapters/formal-verification/tla-precheck.js +270 -0
  13. package/dist/adapters/formal-verification/tla-precheck.js.map +1 -0
  14. package/dist/adapters/formal-verification/types.d.ts +37 -0
  15. package/dist/adapters/formal-verification/types.d.ts.map +1 -0
  16. package/dist/adapters/formal-verification/types.js +6 -0
  17. package/dist/adapters/formal-verification/types.js.map +1 -0
  18. package/dist/adapters/review/semgrep.d.ts +12 -0
  19. package/dist/adapters/review/semgrep.d.ts.map +1 -0
  20. package/dist/adapters/review/semgrep.js +175 -0
  21. package/dist/adapters/review/semgrep.js.map +1 -0
  22. package/dist/adapters/review/types.d.ts +14 -0
  23. package/dist/adapters/review/types.d.ts.map +1 -0
  24. package/dist/adapters/review/types.js +6 -0
  25. package/dist/adapters/review/types.js.map +1 -0
  26. package/dist/adapters/skills/filesystem.d.ts +18 -0
  27. package/dist/adapters/skills/filesystem.d.ts.map +1 -0
  28. package/dist/adapters/skills/filesystem.js +398 -0
  29. package/dist/adapters/skills/filesystem.js.map +1 -0
  30. package/dist/adapters/skills/types.d.ts +19 -0
  31. package/dist/adapters/skills/types.d.ts.map +1 -0
  32. package/dist/adapters/skills/types.js +6 -0
  33. package/dist/adapters/skills/types.js.map +1 -0
  34. package/dist/adapters/sql-executor/direct-postgres.d.ts +15 -0
  35. package/dist/adapters/sql-executor/direct-postgres.d.ts.map +1 -0
  36. package/dist/adapters/sql-executor/direct-postgres.js +33 -0
  37. package/dist/adapters/sql-executor/direct-postgres.js.map +1 -0
  38. package/dist/adapters/sql-executor/supabase-management-api.d.ts +17 -0
  39. package/dist/adapters/sql-executor/supabase-management-api.d.ts.map +1 -0
  40. package/dist/adapters/sql-executor/supabase-management-api.js +40 -0
  41. package/dist/adapters/sql-executor/supabase-management-api.js.map +1 -0
  42. package/dist/adapters/sql-executor/types.d.ts +15 -0
  43. package/dist/adapters/sql-executor/types.d.ts.map +1 -0
  44. package/dist/adapters/sql-executor/types.js +6 -0
  45. package/dist/adapters/sql-executor/types.js.map +1 -0
  46. package/dist/adapters/workflow-state/in-memory.d.ts +69 -0
  47. package/dist/adapters/workflow-state/in-memory.d.ts.map +1 -0
  48. package/dist/adapters/workflow-state/in-memory.js +444 -0
  49. package/dist/adapters/workflow-state/in-memory.js.map +1 -0
  50. package/dist/adapters/workflow-state/supabase.d.ts +55 -0
  51. package/dist/adapters/workflow-state/supabase.d.ts.map +1 -0
  52. package/dist/adapters/workflow-state/supabase.js +823 -0
  53. package/dist/adapters/workflow-state/supabase.js.map +1 -0
  54. package/dist/adapters/workflow-state/types.d.ts +55 -0
  55. package/dist/adapters/workflow-state/types.d.ts.map +1 -0
  56. package/dist/adapters/workflow-state/types.js +6 -0
  57. package/dist/adapters/workflow-state/types.js.map +1 -0
  58. package/dist/cli.d.ts +3 -0
  59. package/dist/cli.d.ts.map +1 -0
  60. package/dist/cli.js +52 -0
  61. package/dist/cli.js.map +1 -0
  62. package/dist/config.d.ts +44 -0
  63. package/dist/config.d.ts.map +1 -0
  64. package/dist/config.js +115 -0
  65. package/dist/config.js.map +1 -0
  66. package/dist/domain/actors.d.ts +10 -0
  67. package/dist/domain/actors.d.ts.map +1 -0
  68. package/dist/domain/actors.js +60 -0
  69. package/dist/domain/actors.js.map +1 -0
  70. package/dist/domain/development-evals.d.ts +9 -0
  71. package/dist/domain/development-evals.d.ts.map +1 -0
  72. package/dist/domain/development-evals.js +164 -0
  73. package/dist/domain/development-evals.js.map +1 -0
  74. package/dist/domain/matching.d.ts +8 -0
  75. package/dist/domain/matching.d.ts.map +1 -0
  76. package/dist/domain/matching.js +24 -0
  77. package/dist/domain/matching.js.map +1 -0
  78. package/dist/domain/phases.d.ts +10 -0
  79. package/dist/domain/phases.d.ts.map +1 -0
  80. package/dist/domain/phases.js +165 -0
  81. package/dist/domain/phases.js.map +1 -0
  82. package/dist/domain/quality-gates.d.ts +7 -0
  83. package/dist/domain/quality-gates.d.ts.map +1 -0
  84. package/dist/domain/quality-gates.js +8 -0
  85. package/dist/domain/quality-gates.js.map +1 -0
  86. package/dist/domain/resonance.d.ts +33 -0
  87. package/dist/domain/resonance.d.ts.map +1 -0
  88. package/dist/domain/resonance.js +100 -0
  89. package/dist/domain/resonance.js.map +1 -0
  90. package/dist/domain/tasks.d.ts +9 -0
  91. package/dist/domain/tasks.d.ts.map +1 -0
  92. package/dist/domain/tasks.js +57 -0
  93. package/dist/domain/tasks.js.map +1 -0
  94. package/dist/init.d.ts +7 -0
  95. package/dist/init.d.ts.map +1 -0
  96. package/dist/init.js +387 -0
  97. package/dist/init.js.map +1 -0
  98. package/dist/schemas.d.ts +366 -0
  99. package/dist/schemas.d.ts.map +1 -0
  100. package/dist/schemas.js +184 -0
  101. package/dist/schemas.js.map +1 -0
  102. package/dist/server.d.ts +7 -0
  103. package/dist/server.d.ts.map +1 -0
  104. package/dist/server.js +243 -0
  105. package/dist/server.js.map +1 -0
  106. package/dist/tools/apply-migrations.d.ts +21 -0
  107. package/dist/tools/apply-migrations.d.ts.map +1 -0
  108. package/dist/tools/apply-migrations.js +286 -0
  109. package/dist/tools/apply-migrations.js.map +1 -0
  110. package/dist/tools/archive-feature-release.d.ts +13 -0
  111. package/dist/tools/archive-feature-release.d.ts.map +1 -0
  112. package/dist/tools/archive-feature-release.js +182 -0
  113. package/dist/tools/archive-feature-release.js.map +1 -0
  114. package/dist/tools/capture-learning.d.ts +9 -0
  115. package/dist/tools/capture-learning.d.ts.map +1 -0
  116. package/dist/tools/capture-learning.js +53 -0
  117. package/dist/tools/capture-learning.js.map +1 -0
  118. package/dist/tools/explore-knowledge.d.ts +9 -0
  119. package/dist/tools/explore-knowledge.d.ts.map +1 -0
  120. package/dist/tools/explore-knowledge.js +142 -0
  121. package/dist/tools/explore-knowledge.js.map +1 -0
  122. package/dist/tools/get-claims-needing-review.d.ts +8 -0
  123. package/dist/tools/get-claims-needing-review.d.ts.map +1 -0
  124. package/dist/tools/get-claims-needing-review.js +21 -0
  125. package/dist/tools/get-claims-needing-review.js.map +1 -0
  126. package/dist/tools/get-development-eval-status.d.ts +8 -0
  127. package/dist/tools/get-development-eval-status.d.ts.map +1 -0
  128. package/dist/tools/get-development-eval-status.js +49 -0
  129. package/dist/tools/get-development-eval-status.js.map +1 -0
  130. package/dist/tools/get-feature-status.d.ts +8 -0
  131. package/dist/tools/get-feature-status.d.ts.map +1 -0
  132. package/dist/tools/get-feature-status.js +68 -0
  133. package/dist/tools/get-feature-status.js.map +1 -0
  134. package/dist/tools/get-next-phase.d.ts +8 -0
  135. package/dist/tools/get-next-phase.d.ts.map +1 -0
  136. package/dist/tools/get-next-phase.js +26 -0
  137. package/dist/tools/get-next-phase.js.map +1 -0
  138. package/dist/tools/prepare-phase-context.d.ts +9 -0
  139. package/dist/tools/prepare-phase-context.d.ts.map +1 -0
  140. package/dist/tools/prepare-phase-context.js +151 -0
  141. package/dist/tools/prepare-phase-context.js.map +1 -0
  142. package/dist/tools/record-commit.d.ts +8 -0
  143. package/dist/tools/record-commit.d.ts.map +1 -0
  144. package/dist/tools/record-commit.js +28 -0
  145. package/dist/tools/record-commit.js.map +1 -0
  146. package/dist/tools/record-eval-plan.d.ts +8 -0
  147. package/dist/tools/record-eval-plan.d.ts.map +1 -0
  148. package/dist/tools/record-eval-plan.js +40 -0
  149. package/dist/tools/record-eval-plan.js.map +1 -0
  150. package/dist/tools/record-eval-run.d.ts +8 -0
  151. package/dist/tools/record-eval-run.d.ts.map +1 -0
  152. package/dist/tools/record-eval-run.js +42 -0
  153. package/dist/tools/record-eval-run.js.map +1 -0
  154. package/dist/tools/record-merge.d.ts +8 -0
  155. package/dist/tools/record-merge.d.ts.map +1 -0
  156. package/dist/tools/record-merge.js +16 -0
  157. package/dist/tools/record-merge.js.map +1 -0
  158. package/dist/tools/record-phase-artifact.d.ts +8 -0
  159. package/dist/tools/record-phase-artifact.d.ts.map +1 -0
  160. package/dist/tools/record-phase-artifact.js +26 -0
  161. package/dist/tools/record-phase-artifact.js.map +1 -0
  162. package/dist/tools/record-phase-result.d.ts +9 -0
  163. package/dist/tools/record-phase-result.d.ts.map +1 -0
  164. package/dist/tools/record-phase-result.js +122 -0
  165. package/dist/tools/record-phase-result.js.map +1 -0
  166. package/dist/tools/record-pull-request.d.ts +8 -0
  167. package/dist/tools/record-pull-request.d.ts.map +1 -0
  168. package/dist/tools/record-pull-request.js +16 -0
  169. package/dist/tools/record-pull-request.js.map +1 -0
  170. package/dist/tools/record-quality-gate.d.ts +8 -0
  171. package/dist/tools/record-quality-gate.d.ts.map +1 -0
  172. package/dist/tools/record-quality-gate.js +26 -0
  173. package/dist/tools/record-quality-gate.js.map +1 -0
  174. package/dist/tools/record-watcher-review.d.ts +8 -0
  175. package/dist/tools/record-watcher-review.d.ts.map +1 -0
  176. package/dist/tools/record-watcher-review.js +18 -0
  177. package/dist/tools/record-watcher-review.js.map +1 -0
  178. package/dist/tools/run-policy-checks.d.ts +8 -0
  179. package/dist/tools/run-policy-checks.d.ts.map +1 -0
  180. package/dist/tools/run-policy-checks.js +38 -0
  181. package/dist/tools/run-policy-checks.js.map +1 -0
  182. package/dist/tools/run-review-checks.d.ts +9 -0
  183. package/dist/tools/run-review-checks.d.ts.map +1 -0
  184. package/dist/tools/run-review-checks.js +45 -0
  185. package/dist/tools/run-review-checks.js.map +1 -0
  186. package/dist/tools/start-feature.d.ts +8 -0
  187. package/dist/tools/start-feature.d.ts.map +1 -0
  188. package/dist/tools/start-feature.js +33 -0
  189. package/dist/tools/start-feature.js.map +1 -0
  190. package/dist/tools/submit-claim.d.ts +8 -0
  191. package/dist/tools/submit-claim.d.ts.map +1 -0
  192. package/dist/tools/submit-claim.js +45 -0
  193. package/dist/tools/submit-claim.js.map +1 -0
  194. package/dist/tools/verify-claims.d.ts +8 -0
  195. package/dist/tools/verify-claims.d.ts.map +1 -0
  196. package/dist/tools/verify-claims.js +39 -0
  197. package/dist/tools/verify-claims.js.map +1 -0
  198. package/dist/tools/verify-design.d.ts +8 -0
  199. package/dist/tools/verify-design.d.ts.map +1 -0
  200. package/dist/tools/verify-design.js +31 -0
  201. package/dist/tools/verify-design.js.map +1 -0
  202. package/dist/types.d.ts +333 -0
  203. package/dist/types.d.ts.map +1 -0
  204. package/dist/types.js +52 -0
  205. package/dist/types.js.map +1 -0
  206. package/dist/utils.d.ts +24 -0
  207. package/dist/utils.d.ts.map +1 -0
  208. package/dist/utils.js +50 -0
  209. package/dist/utils.js.map +1 -0
  210. package/migrations/001_schema.sql +795 -0
  211. package/migrations/002_functions.sql +2126 -0
  212. package/migrations/003_views.sql +599 -0
  213. package/migrations/004_seed.sql +106 -0
  214. package/migrations/005_odin_v2_schema.sql +217 -0
  215. package/migrations/006_odin_v2_functions.sql +671 -0
  216. package/migrations/007_odin_v2_phase_alignment.sql +554 -0
  217. package/migrations/008_related_learnings.sql +80 -0
  218. package/migrations/README.md +23 -0
  219. 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"}