@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,398 @@
1
+ /**
2
+ * Filesystem Skill Adapter
3
+ * Version: 0.1.0
4
+ */
5
+ import { readdir, readFile } from 'node:fs/promises';
6
+ import { existsSync } from 'node:fs';
7
+ import { dirname, join, relative, resolve } from 'node:path';
8
+ import { fileURLToPath } from 'node:url';
9
+ import YAML from 'yaml';
10
+ const PACKAGE_SKILL_MAP = {
11
+ '@supabase/supabase-js': ['supabase'],
12
+ prisma: ['prisma-orm'],
13
+ fastify: ['nodejs-fastify'],
14
+ express: ['nodejs-express'],
15
+ next: ['nextjs-dev', 'react-patterns'],
16
+ react: ['react-patterns'],
17
+ tailwindcss: ['tailwindcss'],
18
+ vitest: ['vitest'],
19
+ playwright: ['playwright'],
20
+ jest: ['jest'],
21
+ cypress: ['cypress'],
22
+ '@trpc/server': ['trpc'],
23
+ graphql: ['graphql'],
24
+ '@apollo/server': ['graphql'],
25
+ mongodb: ['mongodb'],
26
+ redis: ['redis'],
27
+ };
28
+ const FILE_SIGNAL_MAP = [
29
+ { paths: ['next.config.js', 'next.config.mjs', 'next.config.ts'], skills: ['nextjs-dev'] },
30
+ { paths: ['tailwind.config.js', 'tailwind.config.ts', 'postcss.config.js'], skills: ['tailwindcss'] },
31
+ { paths: ['prisma/schema.prisma'], skills: ['prisma-orm'] },
32
+ { paths: ['playwright.config.ts', 'playwright.config.js'], skills: ['playwright'] },
33
+ { paths: ['vitest.config.ts', 'vitest.config.js'], skills: ['vitest'] },
34
+ { paths: ['jest.config.js', 'jest.config.ts'], skills: ['jest'] },
35
+ { paths: ['cypress.config.ts', 'cypress.config.js'], skills: ['cypress'] },
36
+ ];
37
+ const PHASE_REQUIRED_SKILLS = {
38
+ '5': ['unit-tests-sdd'],
39
+ '6': ['unit-tests-eval-sdd'],
40
+ };
41
+ const TECH_AWARE_PHASES = new Set(['2', '3', '4', '5', '6', '7']);
42
+ function getBuiltInSkillRoots() {
43
+ const current_file = fileURLToPath(import.meta.url);
44
+ const package_root = resolve(dirname(current_file), '..', '..', '..');
45
+ const candidates = [];
46
+ let cursor = package_root;
47
+ for (let depth = 0; depth < 5; depth++) {
48
+ candidates.push(join(cursor, 'skills'));
49
+ candidates.push(join(cursor, 'agents', 'skills'));
50
+ const parent = resolve(cursor, '..');
51
+ if (parent === cursor) {
52
+ break;
53
+ }
54
+ cursor = parent;
55
+ }
56
+ return candidates.filter((path, index, values) => existsSync(path) && values.indexOf(path) === index);
57
+ }
58
+ async function collectSkillFiles(root) {
59
+ if (!existsSync(root)) {
60
+ return [];
61
+ }
62
+ const files = [];
63
+ async function visit(current) {
64
+ const entries = await readdir(current, { withFileTypes: true });
65
+ for (const entry of entries) {
66
+ const absolute = join(current, entry.name);
67
+ if (entry.isDirectory()) {
68
+ await visit(absolute);
69
+ continue;
70
+ }
71
+ if (entry.isFile() && entry.name === 'SKILL.md') {
72
+ files.push(absolute);
73
+ }
74
+ }
75
+ }
76
+ await visit(root);
77
+ return files;
78
+ }
79
+ function parseSkillFrontmatter(raw) {
80
+ if (!raw.startsWith('---\n')) {
81
+ return null;
82
+ }
83
+ const closing = raw.indexOf('\n---\n', 4);
84
+ if (closing === -1) {
85
+ return null;
86
+ }
87
+ const frontmatter = raw.slice(4, closing);
88
+ const content = raw.slice(closing + 5).trim();
89
+ const parsed = YAML.parse(frontmatter);
90
+ if (parsed == null || typeof parsed.name !== 'string' || typeof parsed.category !== 'string') {
91
+ return null;
92
+ }
93
+ return {
94
+ metadata: {
95
+ ...parsed,
96
+ depends_on: parsed.depends_on ?? [],
97
+ compatible_with: parsed.compatible_with ?? [],
98
+ },
99
+ content,
100
+ };
101
+ }
102
+ async function loadSkillDefinitions(root, source) {
103
+ const files = await collectSkillFiles(root);
104
+ const skills = new Map();
105
+ for (const file of files) {
106
+ const raw = await readFile(file, 'utf8');
107
+ const parsed = parseSkillFrontmatter(raw);
108
+ if (parsed == null) {
109
+ continue;
110
+ }
111
+ skills.set(parsed.metadata.name, {
112
+ metadata: parsed.metadata,
113
+ content: parsed.content,
114
+ source,
115
+ file_path: file,
116
+ });
117
+ }
118
+ return skills;
119
+ }
120
+ async function detectRepoSkills(projectRoot) {
121
+ const detected = new Set();
122
+ const packageJsonPath = join(projectRoot, 'package.json');
123
+ if (existsSync(packageJsonPath)) {
124
+ const raw = await readFile(packageJsonPath, 'utf8');
125
+ const parsed = JSON.parse(raw);
126
+ const packages = new Set([
127
+ ...Object.keys(parsed.dependencies ?? {}),
128
+ ...Object.keys(parsed.devDependencies ?? {}),
129
+ ]);
130
+ for (const packageName of packages) {
131
+ const skills = PACKAGE_SKILL_MAP[packageName];
132
+ if (skills != null) {
133
+ for (const skill of skills) {
134
+ detected.add(skill);
135
+ }
136
+ }
137
+ }
138
+ }
139
+ for (const signal of FILE_SIGNAL_MAP) {
140
+ if (signal.paths.some((relativePath) => existsSync(join(projectRoot, relativePath)))) {
141
+ for (const skill of signal.skills) {
142
+ detected.add(skill);
143
+ }
144
+ }
145
+ }
146
+ return detected;
147
+ }
148
+ function collectArtifactText(feature, artifacts) {
149
+ const parts = [
150
+ feature.name,
151
+ feature.requirements_path ?? '',
152
+ feature.branch_name ?? '',
153
+ feature.base_branch ?? '',
154
+ feature.author ?? '',
155
+ ];
156
+ for (const artifact of artifacts) {
157
+ parts.push(JSON.stringify(artifact.content));
158
+ parts.push(artifact.output_type);
159
+ }
160
+ return parts.join(' ').toLowerCase();
161
+ }
162
+ function collectMentionedSkills(text, available) {
163
+ const mentioned = new Set();
164
+ for (const [name, skill] of available.entries()) {
165
+ const candidates = [name, ...(skill.metadata.compatible_with ?? [])]
166
+ .flatMap((value) => extractNameAliases(value))
167
+ .map((value) => value.toLowerCase())
168
+ .filter((value, index, values) => value.length > 1 && values.indexOf(value) === index);
169
+ if (candidates.some((candidate) => text.includes(candidate))) {
170
+ mentioned.add(name);
171
+ }
172
+ }
173
+ return mentioned;
174
+ }
175
+ function resolveWithDependencies(requested, skills) {
176
+ const resolved = new Map();
177
+ const visiting = new Set();
178
+ function visit(skillName) {
179
+ if (resolved.has(skillName) || visiting.has(skillName)) {
180
+ return;
181
+ }
182
+ const skill = skills.get(skillName);
183
+ if (skill == null) {
184
+ return;
185
+ }
186
+ visiting.add(skillName);
187
+ for (const dependency of skill.metadata.depends_on ?? []) {
188
+ visit(dependency);
189
+ }
190
+ visiting.delete(skillName);
191
+ resolved.set(skillName, skill);
192
+ }
193
+ for (const skillName of requested) {
194
+ visit(skillName);
195
+ }
196
+ return Array.from(resolved.values()).sort((left, right) => {
197
+ const leftPath = relative(process.cwd(), left.file_path);
198
+ const rightPath = relative(process.cwd(), right.file_path);
199
+ return leftPath.localeCompare(rightPath);
200
+ });
201
+ }
202
+ const STOP_WORDS = new Set([
203
+ 'a', 'an', 'the', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'by',
204
+ 'from', 'is', 'are', 'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'do', 'does',
205
+ 'did', 'will', 'would', 'could', 'should', 'may', 'might', 'shall', 'can', 'need', 'must',
206
+ 'it', 'its', 'this', 'that', 'these', 'those', 'i', 'you', 'he', 'she', 'we', 'they',
207
+ 'my', 'your', 'his', 'her', 'our', 'their', 'what', 'which', 'who', 'when', 'where', 'how',
208
+ 'not', 'no', 'nor', 'if', 'then', 'else', 'than', 'too', 'very', 'just', 'about', 'up',
209
+ 'out', 'so', 'as', 'all', 'each', 'every', 'both', 'few', 'more', 'most', 'other', 'some',
210
+ 'such', 'only', 'own', 'same', 'also', 'use', 'used', 'using', 'development', 'based',
211
+ ]);
212
+ const STATIC_DOMAINS = [
213
+ {
214
+ id: 'agents_md:',
215
+ name: 'Workflow Rules',
216
+ target_type: 'agents_md',
217
+ target_path: null,
218
+ strong_keywords: ['workflow', 'phase', 'odin', 'spec-first', 'quality-gate'],
219
+ weak_keywords: ['merge', 'branch', 'pr', 'skip-phase', 'agent-rule'],
220
+ },
221
+ {
222
+ id: 'agent_definition:guardian',
223
+ name: 'Guardian',
224
+ target_type: 'agent_definition',
225
+ target_path: 'guardian',
226
+ strong_keywords: ['guardian', 'quality-gate', 'security', 'approval'],
227
+ weak_keywords: ['review', 'perspective'],
228
+ },
229
+ {
230
+ id: 'agent_definition:builder',
231
+ name: 'Builder',
232
+ target_type: 'agent_definition',
233
+ target_path: 'builder',
234
+ strong_keywords: ['builder', 'implementation', 'coding'],
235
+ weak_keywords: ['build', 'construct'],
236
+ },
237
+ {
238
+ id: 'agent_definition:architect',
239
+ name: 'Architect',
240
+ target_type: 'agent_definition',
241
+ target_path: 'architect',
242
+ strong_keywords: ['architect', 'specification', 'spec', 'design'],
243
+ weak_keywords: ['architecture', 'structure'],
244
+ },
245
+ {
246
+ id: 'agent_definition:discovery',
247
+ name: 'Discovery',
248
+ target_type: 'agent_definition',
249
+ target_path: 'discovery',
250
+ strong_keywords: ['discovery', 'requirements', 'elicitation'],
251
+ weak_keywords: ['gather', 'explore'],
252
+ },
253
+ {
254
+ id: 'agent_definition:integrator',
255
+ name: 'Integrator',
256
+ target_type: 'agent_definition',
257
+ target_path: 'integrator',
258
+ strong_keywords: ['integrator', 'integration', 'merge-check'],
259
+ weak_keywords: ['combine', 'verify'],
260
+ },
261
+ {
262
+ id: 'agent_definition:release',
263
+ name: 'Release',
264
+ target_type: 'agent_definition',
265
+ target_path: 'release',
266
+ strong_keywords: ['release', 'deployment', 'archive'],
267
+ weak_keywords: ['ship', 'publish'],
268
+ },
269
+ ];
270
+ function extractDescriptionKeywords(description) {
271
+ return description
272
+ .toLowerCase()
273
+ .replace(/[^a-z0-9\s-]/g, ' ')
274
+ .split(/\s+/)
275
+ .filter((word) => word.length > 2 && !STOP_WORDS.has(word));
276
+ }
277
+ function extractNameAliases(name) {
278
+ const aliases = [name];
279
+ const stripped = name.replace(/-/g, '');
280
+ if (stripped !== name) {
281
+ aliases.push(stripped);
282
+ }
283
+ const dotted = name.replace(/-/g, '.');
284
+ if (dotted !== name) {
285
+ aliases.push(dotted);
286
+ }
287
+ const spaced = name.replace(/-/g, ' ');
288
+ if (spaced !== name) {
289
+ aliases.push(spaced);
290
+ }
291
+ return aliases;
292
+ }
293
+ function skillToDomain(skill) {
294
+ const meta = skill.metadata;
295
+ const strong_keywords = [
296
+ ...extractNameAliases(meta.name),
297
+ ...(meta.compatible_with ?? []),
298
+ ...(meta.depends_on ?? []),
299
+ ];
300
+ const weak_keywords = [
301
+ meta.category,
302
+ ...extractDescriptionKeywords(meta.description ?? ''),
303
+ ];
304
+ return {
305
+ id: `skill:${meta.category}/${meta.name}`,
306
+ name: meta.name,
307
+ target_type: 'skill',
308
+ target_path: `${meta.category}/${meta.name}`,
309
+ strong_keywords,
310
+ weak_keywords,
311
+ };
312
+ }
313
+ export class FilesystemSkillAdapter {
314
+ projectRoot;
315
+ config;
316
+ merged_cache = null;
317
+ domains_cache = null;
318
+ constructor(projectRoot, config) {
319
+ this.projectRoot = projectRoot;
320
+ this.config = config;
321
+ }
322
+ async getMergedSkillDefinitions() {
323
+ if (this.merged_cache != null) {
324
+ return this.merged_cache;
325
+ }
326
+ const builtInSkills = new Map();
327
+ for (const root of getBuiltInSkillRoots()) {
328
+ const skills = await loadSkillDefinitions(root, 'built_in');
329
+ for (const [name, definition] of skills.entries()) {
330
+ builtInSkills.set(name, definition);
331
+ }
332
+ }
333
+ const projectLocalRoots = (this.config.skills?.paths ?? ['.odin/skills']).map((configuredPath) => join(this.projectRoot, configuredPath));
334
+ const mergedSkills = new Map(builtInSkills);
335
+ for (const root of projectLocalRoots) {
336
+ const localSkills = await loadSkillDefinitions(root, 'project_local');
337
+ for (const [name, definition] of localSkills.entries()) {
338
+ mergedSkills.set(name, definition);
339
+ }
340
+ }
341
+ this.merged_cache = mergedSkills;
342
+ return mergedSkills;
343
+ }
344
+ async listKnowledgeDomains() {
345
+ if (this.domains_cache != null) {
346
+ return this.domains_cache;
347
+ }
348
+ const skills = await this.getMergedSkillDefinitions();
349
+ const domains = [];
350
+ for (const skill of skills.values()) {
351
+ domains.push(skillToDomain(skill));
352
+ }
353
+ domains.push(...STATIC_DOMAINS);
354
+ this.domains_cache = domains;
355
+ return domains;
356
+ }
357
+ async resolveSkills(input) {
358
+ const mergedSkills = await this.getMergedSkillDefinitions();
359
+ const requested = new Set(this.config.skills?.defaults ?? []);
360
+ for (const skill of PHASE_REQUIRED_SKILLS[input.phase] ?? []) {
361
+ requested.add(skill);
362
+ }
363
+ if (this.config.skills?.auto_detect !== false && TECH_AWARE_PHASES.has(input.phase)) {
364
+ const repoDetected = await detectRepoSkills(this.projectRoot);
365
+ for (const skill of repoDetected) {
366
+ requested.add(skill);
367
+ }
368
+ const artifactText = collectArtifactText(input.feature, input.artifacts);
369
+ const mentioned = collectMentionedSkills(artifactText, mergedSkills);
370
+ for (const skill of mentioned) {
371
+ requested.add(skill);
372
+ }
373
+ }
374
+ let resolved = resolveWithDependencies(requested, mergedSkills).map((skill) => ({
375
+ name: skill.metadata.name,
376
+ category: skill.metadata.category,
377
+ source: skill.source,
378
+ content: skill.content,
379
+ }));
380
+ let fallback_used = false;
381
+ if (resolved.length === 0) {
382
+ const generic = mergedSkills.get('generic-dev');
383
+ if (generic != null) {
384
+ fallback_used = true;
385
+ resolved = [
386
+ {
387
+ name: generic.metadata.name,
388
+ category: generic.metadata.category,
389
+ source: generic.source,
390
+ content: generic.content,
391
+ },
392
+ ];
393
+ }
394
+ }
395
+ return { resolved, fallback_used };
396
+ }
397
+ }
398
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../../src/adapters/skills/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Skill Adapter Types
3
+ * Version: 0.1.0
4
+ */
5
+ import type { FeatureRecord, KnowledgeDomain, PhaseArtifact, PhaseId, ResolvedSkill } from '../../types.js';
6
+ export interface ResolveSkillsInput {
7
+ feature: FeatureRecord;
8
+ artifacts: PhaseArtifact[];
9
+ phase: PhaseId;
10
+ }
11
+ export interface ResolveSkillsResult {
12
+ resolved: ResolvedSkill[];
13
+ fallback_used: boolean;
14
+ }
15
+ export interface SkillAdapter {
16
+ resolveSkills(input: ResolveSkillsInput): Promise<ResolveSkillsResult>;
17
+ listKnowledgeDomains(): Promise<KnowledgeDomain[]>;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/skills/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5G,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACvE,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CACpD"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Skill Adapter Types
3
+ * Version: 0.1.0
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/skills/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Direct PostgreSQL SQL Executor
3
+ * Version: 0.1.0
4
+ *
5
+ * Connects via a standard DATABASE_URL connection string using postgres.js.
6
+ * Works with any PostgreSQL provider (Neon, Railway, self-hosted, etc.).
7
+ */
8
+ import type { SqlExecutor, SqlQueryResult } from './types.js';
9
+ export declare class DirectPostgresExecutor implements SqlExecutor {
10
+ private readonly sql;
11
+ constructor(database_url: string);
12
+ execute(query: string): Promise<SqlQueryResult>;
13
+ close(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=direct-postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-postgres.d.ts","sourceRoot":"","sources":["../../../src/adapters/sql-executor/direct-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,sBAAuB,YAAW,WAAW;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,YAAY,EAAE,MAAM;IAQ1B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Direct PostgreSQL SQL Executor
3
+ * Version: 0.1.0
4
+ *
5
+ * Connects via a standard DATABASE_URL connection string using postgres.js.
6
+ * Works with any PostgreSQL provider (Neon, Railway, self-hosted, etc.).
7
+ */
8
+ import postgres from 'postgres';
9
+ export class DirectPostgresExecutor {
10
+ sql;
11
+ constructor(database_url) {
12
+ this.sql = postgres(database_url, {
13
+ max: 1,
14
+ idle_timeout: 10,
15
+ connect_timeout: 15,
16
+ });
17
+ }
18
+ async execute(query) {
19
+ try {
20
+ const result = await this.sql.unsafe(query);
21
+ const rows = result.map((row) => ({ ...row }));
22
+ return { rows };
23
+ }
24
+ catch (error) {
25
+ const message = error instanceof Error ? error.message : String(error);
26
+ return { rows: [], error: message };
27
+ }
28
+ }
29
+ async close() {
30
+ await this.sql.end();
31
+ }
32
+ }
33
+ //# sourceMappingURL=direct-postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-postgres.js","sourceRoot":"","sources":["../../../src/adapters/sql-executor/direct-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,MAAM,OAAO,sBAAsB;IAChB,GAAG,CAAe;IAEnC,YAAY,YAAoB;QAC9B,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE;YAChC,GAAG,EAAE,CAAC;YACN,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,EAAE;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAA4B,CAAC,CAAC;YAC1E,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Supabase Management API SQL Executor
3
+ * Version: 0.1.0
4
+ *
5
+ * Executes SQL via POST https://api.supabase.com/v1/projects/{ref}/database/query
6
+ * Requires a personal access token from https://supabase.com/dashboard/account/tokens
7
+ */
8
+ import type { SqlExecutor, SqlQueryResult } from './types.js';
9
+ export declare class SupabaseManagementApiExecutor implements SqlExecutor {
10
+ private readonly project_ref;
11
+ private readonly access_token;
12
+ constructor(project_ref: string, access_token: string);
13
+ execute(sql: string): Promise<SqlQueryResult>;
14
+ close(): Promise<void>;
15
+ static extractProjectRef(supabase_url: string): string | null;
16
+ }
17
+ //# sourceMappingURL=supabase-management-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-management-api.d.ts","sourceRoot":"","sources":["../../../src/adapters/sql-executor/supabase-management-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,6BAA8B,YAAW,WAAW;IAC/D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAK/C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuB7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAI9D"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Supabase Management API SQL Executor
3
+ * Version: 0.1.0
4
+ *
5
+ * Executes SQL via POST https://api.supabase.com/v1/projects/{ref}/database/query
6
+ * Requires a personal access token from https://supabase.com/dashboard/account/tokens
7
+ */
8
+ export class SupabaseManagementApiExecutor {
9
+ project_ref;
10
+ access_token;
11
+ constructor(project_ref, access_token) {
12
+ this.project_ref = project_ref;
13
+ this.access_token = access_token;
14
+ }
15
+ async execute(sql) {
16
+ const response = await fetch(`https://api.supabase.com/v1/projects/${this.project_ref}/database/query`, {
17
+ method: 'POST',
18
+ headers: {
19
+ Authorization: `Bearer ${this.access_token}`,
20
+ 'Content-Type': 'application/json',
21
+ },
22
+ body: JSON.stringify({ query: sql }),
23
+ });
24
+ if (!response.ok) {
25
+ const body = await response.text();
26
+ return { rows: [], error: `HTTP ${response.status}: ${body}` };
27
+ }
28
+ const data = await response.json();
29
+ const rows = Array.isArray(data) ? data : [];
30
+ return { rows };
31
+ }
32
+ async close() {
33
+ // No persistent connection to clean up.
34
+ }
35
+ static extractProjectRef(supabase_url) {
36
+ const match = supabase_url.match(/^https:\/\/([a-z0-9]+)\.supabase\.co/);
37
+ return match?.[1] ?? null;
38
+ }
39
+ }
40
+ //# sourceMappingURL=supabase-management-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-management-api.js","sourceRoot":"","sources":["../../../src/adapters/sql-executor/supabase-management-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,OAAO,6BAA6B;IACvB,WAAW,CAAS;IACpB,YAAY,CAAS;IAEtC,YAAY,WAAmB,EAAE,YAAoB;QACnD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,wCAAwC,IAAI,CAAC,WAAW,iBAAiB,EACzE;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,YAAY,EAAE;gBAC5C,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;SACrC,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,EAAE,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAuC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,wCAAwC;IAC1C,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,YAAoB;QAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACzE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * SQL Executor Adapter Interface
3
+ * Version: 0.1.0
4
+ */
5
+ export interface SqlQueryResult {
6
+ rows: Array<Record<string, unknown>>;
7
+ error?: string;
8
+ }
9
+ export interface SqlExecutor {
10
+ /** Execute a SQL statement. Returns rows for queries, empty array for DDL/DML. */
11
+ execute(sql: string): Promise<SqlQueryResult>;
12
+ /** Clean up connections. */
13
+ close(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/sql-executor/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAE9C,4BAA4B;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * SQL Executor Adapter Interface
3
+ * Version: 0.1.0
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/sql-executor/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}