@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":"tasks.js","sourceRoot":"","sources":["../../src/domain/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAe;IAC1C,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QACzD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,eAAe,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;IACtE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;YACpC,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;YACpC,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO;YACP,OAAO,EAAE;gBACP,GAAG,OAAO;gBACV,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Odin Runtime Project Init
4
+ * Version: 0.1.0
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
package/dist/init.js ADDED
@@ -0,0 +1,387 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Odin Runtime Project Init
4
+ * Version: 0.1.0
5
+ */
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
7
+ import { dirname, join, resolve } from 'node:path';
8
+ import { fileURLToPath } from 'node:url';
9
+ const PUBLISHED_PACKAGE_NAME = '@plazmodium/odin';
10
+ const CONFIG_TEMPLATE = [
11
+ 'runtime:',
12
+ ' mode: in_memory',
13
+ '',
14
+ '# Switch to `supabase` when you want persistent workflow state.',
15
+ '# runtime:',
16
+ '# mode: supabase',
17
+ '',
18
+ 'supabase:',
19
+ ' url: ${SUPABASE_URL}',
20
+ ' secret_key: ${SUPABASE_SECRET_KEY}',
21
+ '',
22
+ 'skills:',
23
+ ' paths:',
24
+ ' - .odin/skills',
25
+ ' defaults: []',
26
+ ' auto_detect: true',
27
+ '',
28
+ 'review:',
29
+ ' provider: semgrep',
30
+ '',
31
+ '# formal_verification:',
32
+ '# provider: tla-precheck # requires: Java 17+, npm install -D tla-precheck',
33
+ '# timeout_seconds: 120',
34
+ '',
35
+ 'archive:',
36
+ ' provider: none',
37
+ '',
38
+ '# Enable Supabase archival after switching workflow state to remote Supabase.',
39
+ '# archive:',
40
+ '# provider: supabase',
41
+ '',
42
+ ].join('\n');
43
+ const ENV_LINES = [
44
+ 'DATABASE_URL=postgresql://user:password@host:5432/dbname',
45
+ 'SUPABASE_URL=https://your-project.supabase.co',
46
+ 'SUPABASE_SECRET_KEY=your-secret-key',
47
+ 'SUPABASE_ACCESS_TOKEN=your-management-api-access-token',
48
+ ];
49
+ const VALID_TOOLS = ['opencode', 'claude-code', 'amp', 'codex', 'generic'];
50
+ const VALID_DISTRIBUTIONS = ['published', 'source'];
51
+ function parseArgs(argv) {
52
+ let projectRoot = process.cwd();
53
+ let force = false;
54
+ let tool = 'generic';
55
+ let distribution = 'published';
56
+ let writeMcp = false;
57
+ let help = false;
58
+ for (let index = 0; index < argv.length; index += 1) {
59
+ const arg = argv[index];
60
+ if (arg === '--help' || arg === '-h') {
61
+ help = true;
62
+ continue;
63
+ }
64
+ if (arg === '--project-root') {
65
+ const next = argv[index + 1];
66
+ if (next != null) {
67
+ projectRoot = resolve(next);
68
+ index += 1;
69
+ }
70
+ continue;
71
+ }
72
+ if (arg === '--force') {
73
+ force = true;
74
+ }
75
+ if (arg === '--write-mcp') {
76
+ writeMcp = true;
77
+ }
78
+ if (arg === '--tool') {
79
+ const next = argv[index + 1];
80
+ if (next != null && VALID_TOOLS.includes(next)) {
81
+ tool = next;
82
+ index += 1;
83
+ }
84
+ continue;
85
+ }
86
+ if (arg === '--distribution') {
87
+ const next = argv[index + 1];
88
+ if (next != null && VALID_DISTRIBUTIONS.includes(next)) {
89
+ distribution = next;
90
+ index += 1;
91
+ }
92
+ }
93
+ }
94
+ return { projectRoot, force, tool, distribution, writeMcp, help };
95
+ }
96
+ function printHelp() {
97
+ console.log(`
98
+ Usage: odin init [options]
99
+
100
+ Bootstrap Odin configuration for a project.
101
+
102
+ Options:
103
+ --project-root <path> Target project directory (default: cwd)
104
+ --tool <name> Harness to generate config for:
105
+ opencode, claude-code, amp, codex, generic (default)
106
+ --distribution <mode> MCP server command strategy:
107
+ published, source (default: published)
108
+ --write-mcp Write the harness config file directly
109
+ (opencode.json for opencode,
110
+ .mcp.json for claude-code/amp,
111
+ .codex/config.toml for codex)
112
+ --force Overwrite existing config files
113
+ -h, --help Show this help message
114
+
115
+ Examples:
116
+ odin init --project-root ./my-app --tool amp --write-mcp
117
+ odin init --tool opencode --write-mcp
118
+ odin init --tool codex --distribution source --write-mcp
119
+ `.trim());
120
+ }
121
+ function ensureDir(path) {
122
+ if (!existsSync(path)) {
123
+ mkdirSync(path, { recursive: true });
124
+ }
125
+ }
126
+ function ensureConfig(projectRoot, force) {
127
+ const odinDir = join(projectRoot, '.odin');
128
+ const configPath = join(odinDir, 'config.yaml');
129
+ const skillsDir = join(odinDir, 'skills');
130
+ ensureDir(odinDir);
131
+ ensureDir(skillsDir);
132
+ const gitkeepPath = join(skillsDir, '.gitkeep');
133
+ if (!existsSync(gitkeepPath)) {
134
+ writeFileSync(gitkeepPath, '', 'utf8');
135
+ }
136
+ if (!existsSync(configPath) || force) {
137
+ writeFileSync(configPath, CONFIG_TEMPLATE, 'utf8');
138
+ return { path: configPath, changed: true };
139
+ }
140
+ return { path: configPath, changed: false };
141
+ }
142
+ function ensureEnvExample(projectRoot, force) {
143
+ const envExamplePath = join(projectRoot, '.env.example');
144
+ if (!existsSync(envExamplePath) || force) {
145
+ writeFileSync(envExamplePath, `${ENV_LINES.join('\n')}\n`, 'utf8');
146
+ return { path: envExamplePath, changed: true };
147
+ }
148
+ const existing = readFileSync(envExamplePath, 'utf8').split('\n');
149
+ const missing = ENV_LINES.filter((line) => {
150
+ const key = line.split('=', 1)[0];
151
+ return !existing.some((existingLine) => existingLine.startsWith(`${key}=`));
152
+ });
153
+ if (missing.length > 0) {
154
+ const separator = existing.length > 0 && existing.at(-1) !== '' ? '\n' : '';
155
+ writeFileSync(envExamplePath, `${readFileSync(envExamplePath, 'utf8')}${separator}${missing.join('\n')}\n`, 'utf8');
156
+ return { path: envExamplePath, changed: true };
157
+ }
158
+ return { path: envExamplePath, changed: false };
159
+ }
160
+ function asRecord(value) {
161
+ if (value != null && typeof value === 'object' && !Array.isArray(value)) {
162
+ return { ...value };
163
+ }
164
+ return {};
165
+ }
166
+ function createCommandSpec(distribution) {
167
+ if (distribution === 'published') {
168
+ return {
169
+ command: 'npx',
170
+ args: ['-y', PUBLISHED_PACKAGE_NAME, 'mcp'],
171
+ };
172
+ }
173
+ const currentFile = fileURLToPath(import.meta.url);
174
+ const distDir = dirname(currentFile);
175
+ return {
176
+ command: 'node',
177
+ args: [join(distDir, 'server.js')],
178
+ };
179
+ }
180
+ function createMcpJsonSnippet(projectRoot, distribution) {
181
+ const commandSpec = createCommandSpec(distribution);
182
+ return {
183
+ mcpServers: {
184
+ odin: {
185
+ command: commandSpec.command,
186
+ args: commandSpec.args,
187
+ env: {
188
+ ODIN_PROJECT_ROOT: projectRoot,
189
+ },
190
+ },
191
+ },
192
+ };
193
+ }
194
+ function createOpenCodeSnippet(projectRoot, distribution) {
195
+ const commandSpec = createCommandSpec(distribution);
196
+ return {
197
+ $schema: 'https://opencode.ai/config.json',
198
+ mcp: {
199
+ odin: {
200
+ type: 'local',
201
+ command: [commandSpec.command, ...commandSpec.args],
202
+ enabled: true,
203
+ environment: {
204
+ ODIN_PROJECT_ROOT: projectRoot,
205
+ },
206
+ },
207
+ },
208
+ };
209
+ }
210
+ function createCodexTomlSnippet(projectRoot, distribution) {
211
+ const commandSpec = createCommandSpec(distribution);
212
+ const normalizedArgs = commandSpec.args.map((arg) => arg.replace(/\\/g, '/'));
213
+ const normalizedProjectRoot = projectRoot.replace(/\\/g, '/');
214
+ return [
215
+ '[mcp_servers.odin]',
216
+ `command = "${commandSpec.command}"`,
217
+ `args = [${normalizedArgs.map((arg) => `"${arg}"`).join(', ')}]`,
218
+ `env = { ODIN_PROJECT_ROOT = "${normalizedProjectRoot}" }`,
219
+ '',
220
+ ].join('\n');
221
+ }
222
+ function parseJsonFile(path) {
223
+ try {
224
+ return JSON.parse(readFileSync(path, 'utf8'));
225
+ }
226
+ catch (error) {
227
+ const message = error instanceof Error ? error.message : 'Unknown JSON parse failure';
228
+ throw new Error(`Cannot update ${path} because it is not valid JSON. Fix the file or remove it, then rerun Odin bootstrap. Parser error: ${message}`);
229
+ }
230
+ }
231
+ function writeMcpFile(projectRoot, snippet, force) {
232
+ const mcpPath = join(projectRoot, '.mcp.json');
233
+ if (!existsSync(mcpPath)) {
234
+ writeFileSync(mcpPath, `${JSON.stringify(snippet, null, 2)}\n`, 'utf8');
235
+ return { path: mcpPath, changed: true };
236
+ }
237
+ const existing = parseJsonFile(mcpPath);
238
+ const existingServers = asRecord(existing.mcpServers);
239
+ const merged = {
240
+ ...existing,
241
+ mcpServers: {
242
+ ...existingServers,
243
+ ...snippet.mcpServers,
244
+ },
245
+ };
246
+ const current = JSON.stringify(existing, null, 2);
247
+ const next = JSON.stringify(merged, null, 2);
248
+ if (current === next && !force) {
249
+ return { path: mcpPath, changed: false };
250
+ }
251
+ writeFileSync(mcpPath, `${JSON.stringify(merged, null, 2)}\n`, 'utf8');
252
+ return { path: mcpPath, changed: true };
253
+ }
254
+ function writeOpenCodeConfig(projectRoot, distribution, force) {
255
+ const configPath = join(projectRoot, 'opencode.json');
256
+ const snippet = createOpenCodeSnippet(projectRoot, distribution);
257
+ if (!existsSync(configPath)) {
258
+ writeFileSync(configPath, `${JSON.stringify(snippet, null, 2)}\n`, 'utf8');
259
+ return { path: configPath, changed: true };
260
+ }
261
+ const existing = parseJsonFile(configPath);
262
+ const existingMcp = asRecord(existing.mcp);
263
+ const merged = {
264
+ ...existing,
265
+ $schema: typeof existing.$schema === 'string' && existing.$schema.length > 0
266
+ ? existing.$schema
267
+ : 'https://opencode.ai/config.json',
268
+ mcp: {
269
+ ...existingMcp,
270
+ ...snippet.mcp,
271
+ },
272
+ };
273
+ const current = JSON.stringify(existing, null, 2);
274
+ const next = JSON.stringify(merged, null, 2);
275
+ if (current === next && !force) {
276
+ return { path: configPath, changed: false };
277
+ }
278
+ writeFileSync(configPath, `${JSON.stringify(merged, null, 2)}\n`, 'utf8');
279
+ return { path: configPath, changed: true };
280
+ }
281
+ function upsertCodexBlock(existing, snippet) {
282
+ const normalizedSnippet = snippet.trimEnd();
283
+ const blockRegex = /^\[mcp_servers\.odin\][\s\S]*?(?=^\[[^\]]+\]|\Z)/m;
284
+ if (blockRegex.test(existing)) {
285
+ const updated = existing.replace(blockRegex, normalizedSnippet);
286
+ return {
287
+ content: updated.endsWith('\n') ? updated : `${updated}\n`,
288
+ changed: updated !== existing,
289
+ };
290
+ }
291
+ const separator = existing.length === 0 ? '' : existing.endsWith('\n') ? '\n' : '\n\n';
292
+ const updated = `${existing}${separator}${normalizedSnippet}\n`;
293
+ return { content: updated, changed: true };
294
+ }
295
+ function writeCodexConfig(projectRoot, distribution, force) {
296
+ const codexDir = join(projectRoot, '.codex');
297
+ const codexConfigPath = join(codexDir, 'config.toml');
298
+ ensureDir(codexDir);
299
+ const snippet = createCodexTomlSnippet(projectRoot, distribution);
300
+ if (!existsSync(codexConfigPath)) {
301
+ writeFileSync(codexConfigPath, snippet, 'utf8');
302
+ return { path: codexConfigPath, changed: true };
303
+ }
304
+ const existing = readFileSync(codexConfigPath, 'utf8');
305
+ const { content, changed } = upsertCodexBlock(existing, snippet);
306
+ if (!changed && !force) {
307
+ return { path: codexConfigPath, changed: false };
308
+ }
309
+ writeFileSync(codexConfigPath, content, 'utf8');
310
+ return { path: codexConfigPath, changed: true };
311
+ }
312
+ function isMcpJsonTool(tool) {
313
+ return tool === 'claude-code' || tool === 'amp';
314
+ }
315
+ function printHarnessSnippet(projectRoot, tool, distribution) {
316
+ const target = tool === 'opencode'
317
+ ? 'opencode.json'
318
+ : isMcpJsonTool(tool)
319
+ ? '.mcp.json'
320
+ : tool === 'codex'
321
+ ? '.codex/config.toml'
322
+ : 'your tool MCP config';
323
+ console.log(`\nHarness MCP config snippet for ${tool} (${target}):\n`);
324
+ if (tool === 'codex') {
325
+ console.log(createCodexTomlSnippet(projectRoot, distribution));
326
+ }
327
+ else if (tool === 'opencode') {
328
+ console.log(JSON.stringify(createOpenCodeSnippet(projectRoot, distribution), null, 2));
329
+ }
330
+ else {
331
+ console.log(JSON.stringify(createMcpJsonSnippet(projectRoot, distribution), null, 2));
332
+ }
333
+ if (tool === 'generic') {
334
+ console.log('\nGeneric note: add the `odin` server block to whatever MCP config mechanism your tool supports.');
335
+ }
336
+ console.log('\nEval-aware orchestration tip:');
337
+ console.log('- Prefer `odin.get_development_eval_status({ feature_id })` when the harness needs focused eval state (latest eval_plan, eval_run, and eval_readiness) instead of parsing the broader `odin.get_feature_status` payload.');
338
+ console.log('\nCanonical eval-aware orchestration snippet:');
339
+ console.log([
340
+ '1. Call `odin.prepare_phase_context({ feature_id, phase, agent_name })`.',
341
+ '2. Build the agent prompt from `context.agent.role_summary`, `context.agent.constraints`, and `context.development_evals.harness_prompt_block`.',
342
+ '3. Use `odin.get_development_eval_status({ feature_id })` when you need focused eval state instead of parsing broad status payloads.',
343
+ '4. Record structured eval artifacts with `odin.record_eval_plan`, `odin.record_eval_run`, and `odin.record_quality_gate`.',
344
+ '5. Never treat Development Evals as a replacement for `odin.verify_design`, `odin.run_review_checks`, tests, runtime verification, or watcher checks.',
345
+ ].join('\n'));
346
+ }
347
+ function main() {
348
+ const options = parseArgs(process.argv.slice(2));
349
+ if (options.help) {
350
+ printHelp();
351
+ return;
352
+ }
353
+ const config = ensureConfig(options.projectRoot, options.force);
354
+ const envExample = ensureEnvExample(options.projectRoot, options.force);
355
+ const mcpSnippet = createMcpJsonSnippet(options.projectRoot, options.distribution);
356
+ console.log('Odin runtime project bootstrap complete.');
357
+ console.log(`- ${config.changed ? 'wrote' : 'kept'} ${config.path}`);
358
+ console.log(`- ${envExample.changed ? 'updated' : 'kept'} ${envExample.path}`);
359
+ console.log(`- runtime quick-start mode: in_memory`);
360
+ console.log(`- MCP command mode: ${options.distribution}`);
361
+ if (options.writeMcp && isMcpJsonTool(options.tool)) {
362
+ const mcp = writeMcpFile(options.projectRoot, mcpSnippet, options.force);
363
+ console.log(`- ${mcp.changed ? 'updated' : 'kept'} ${mcp.path}`);
364
+ }
365
+ if (options.writeMcp && options.tool === 'opencode') {
366
+ const openCodeConfig = writeOpenCodeConfig(options.projectRoot, options.distribution, options.force);
367
+ console.log(`- ${openCodeConfig.changed ? 'updated' : 'kept'} ${openCodeConfig.path}`);
368
+ }
369
+ if (options.writeMcp && options.tool === 'codex') {
370
+ const codexConfig = writeCodexConfig(options.projectRoot, options.distribution, options.force);
371
+ console.log(`- ${codexConfig.changed ? 'updated' : 'kept'} ${codexConfig.path}`);
372
+ }
373
+ console.log('\nNext steps:');
374
+ console.log('1. Connect your MCP host and confirm Odin boots in in_memory mode');
375
+ console.log('2. Copy .env.example to .env when you are ready for database-backed tools');
376
+ console.log('3. Switch `.odin/config.yaml` to `runtime.mode: supabase` for persistent workflow state');
377
+ if (options.writeMcp) {
378
+ console.log('4. Review the generated harness config and confirm it matches your local setup');
379
+ }
380
+ else {
381
+ console.log('4. Add the printed MCP snippet to your harness config');
382
+ }
383
+ console.log('5. Start using Odin — your AI agent now has workflow tools available');
384
+ printHarnessSnippet(options.projectRoot, options.tool, options.distribution);
385
+ }
386
+ main();
387
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}