@soleri/core 9.2.0 → 9.3.1

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 (316) hide show
  1. package/data/flows/build.flow.yaml +8 -9
  2. package/data/flows/deliver.flow.yaml +9 -10
  3. package/data/flows/design.flow.yaml +3 -4
  4. package/data/flows/enhance.flow.yaml +5 -6
  5. package/data/flows/explore.flow.yaml +3 -4
  6. package/data/flows/fix.flow.yaml +5 -6
  7. package/data/flows/plan.flow.yaml +4 -5
  8. package/data/flows/review.flow.yaml +3 -4
  9. package/dist/curator/curator.d.ts.map +1 -1
  10. package/dist/curator/curator.js +98 -22
  11. package/dist/curator/curator.js.map +1 -1
  12. package/dist/engine/bin/soleri-engine.js.map +1 -1
  13. package/dist/engine/module-manifest.d.ts +2 -0
  14. package/dist/engine/module-manifest.d.ts.map +1 -1
  15. package/dist/engine/module-manifest.js +136 -1
  16. package/dist/engine/module-manifest.js.map +1 -1
  17. package/dist/engine/register-engine.d.ts.map +1 -1
  18. package/dist/engine/register-engine.js +25 -1
  19. package/dist/engine/register-engine.js.map +1 -1
  20. package/dist/flows/gate-evaluator.js.map +1 -1
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/operator/operator-profile.d.ts.map +1 -1
  26. package/dist/operator/operator-profile.js +11 -5
  27. package/dist/operator/operator-profile.js.map +1 -1
  28. package/dist/operator/operator-signals.d.ts.map +1 -1
  29. package/dist/operator/operator-signals.js.map +1 -1
  30. package/dist/planning/evidence-collector.js.map +1 -1
  31. package/dist/planning/gap-passes.d.ts.map +1 -1
  32. package/dist/planning/gap-passes.js +23 -6
  33. package/dist/planning/gap-passes.js.map +1 -1
  34. package/dist/planning/gap-patterns.d.ts.map +1 -1
  35. package/dist/planning/gap-patterns.js +57 -11
  36. package/dist/planning/gap-patterns.js.map +1 -1
  37. package/dist/planning/github-projection.d.ts.map +1 -1
  38. package/dist/planning/github-projection.js +39 -20
  39. package/dist/planning/github-projection.js.map +1 -1
  40. package/dist/planning/impact-analyzer.d.ts.map +1 -1
  41. package/dist/planning/impact-analyzer.js +20 -18
  42. package/dist/planning/impact-analyzer.js.map +1 -1
  43. package/dist/planning/plan-lifecycle.d.ts.map +1 -1
  44. package/dist/planning/plan-lifecycle.js +22 -9
  45. package/dist/planning/plan-lifecycle.js.map +1 -1
  46. package/dist/planning/planner.d.ts.map +1 -1
  47. package/dist/planning/planner.js +60 -17
  48. package/dist/planning/planner.js.map +1 -1
  49. package/dist/planning/rationalization-detector.d.ts.map +1 -1
  50. package/dist/planning/rationalization-detector.js.map +1 -1
  51. package/dist/planning/reconciliation-engine.d.ts.map +1 -1
  52. package/dist/planning/reconciliation-engine.js.map +1 -1
  53. package/dist/planning/task-complexity-assessor.d.ts +42 -0
  54. package/dist/planning/task-complexity-assessor.d.ts.map +1 -0
  55. package/dist/planning/task-complexity-assessor.js +132 -0
  56. package/dist/planning/task-complexity-assessor.js.map +1 -0
  57. package/dist/planning/task-verifier.d.ts.map +1 -1
  58. package/dist/planning/task-verifier.js +14 -6
  59. package/dist/planning/task-verifier.js.map +1 -1
  60. package/dist/runtime/admin-ops.d.ts.map +1 -1
  61. package/dist/runtime/admin-ops.js +18 -0
  62. package/dist/runtime/admin-ops.js.map +1 -1
  63. package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
  64. package/dist/runtime/admin-setup-ops.js +2 -1
  65. package/dist/runtime/admin-setup-ops.js.map +1 -1
  66. package/dist/runtime/branching-ops.d.ts +12 -0
  67. package/dist/runtime/branching-ops.d.ts.map +1 -0
  68. package/dist/runtime/branching-ops.js +100 -0
  69. package/dist/runtime/branching-ops.js.map +1 -0
  70. package/dist/runtime/context-health.d.ts.map +1 -1
  71. package/dist/runtime/context-health.js.map +1 -1
  72. package/dist/runtime/facades/branching-facade.d.ts +7 -0
  73. package/dist/runtime/facades/branching-facade.d.ts.map +1 -0
  74. package/dist/runtime/facades/branching-facade.js +8 -0
  75. package/dist/runtime/facades/branching-facade.js.map +1 -0
  76. package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -1
  77. package/dist/runtime/facades/chat-service-ops.js +3 -1
  78. package/dist/runtime/facades/chat-service-ops.js.map +1 -1
  79. package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -1
  80. package/dist/runtime/facades/chat-transport-ops.js.map +1 -1
  81. package/dist/runtime/facades/index.d.ts.map +1 -1
  82. package/dist/runtime/facades/index.js +42 -0
  83. package/dist/runtime/facades/index.js.map +1 -1
  84. package/dist/runtime/facades/intake-facade.d.ts +9 -0
  85. package/dist/runtime/facades/intake-facade.d.ts.map +1 -0
  86. package/dist/runtime/facades/intake-facade.js +11 -0
  87. package/dist/runtime/facades/intake-facade.js.map +1 -0
  88. package/dist/runtime/facades/links-facade.d.ts +9 -0
  89. package/dist/runtime/facades/links-facade.d.ts.map +1 -0
  90. package/dist/runtime/facades/links-facade.js +10 -0
  91. package/dist/runtime/facades/links-facade.js.map +1 -0
  92. package/dist/runtime/facades/operator-facade.d.ts.map +1 -1
  93. package/dist/runtime/facades/operator-facade.js.map +1 -1
  94. package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
  95. package/dist/runtime/facades/plan-facade.js +4 -1
  96. package/dist/runtime/facades/plan-facade.js.map +1 -1
  97. package/dist/runtime/facades/tier-facade.d.ts +7 -0
  98. package/dist/runtime/facades/tier-facade.d.ts.map +1 -0
  99. package/dist/runtime/facades/tier-facade.js +8 -0
  100. package/dist/runtime/facades/tier-facade.js.map +1 -0
  101. package/dist/runtime/facades/vault-facade.d.ts +9 -1
  102. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  103. package/dist/runtime/facades/vault-facade.js +44 -187
  104. package/dist/runtime/facades/vault-facade.js.map +1 -1
  105. package/dist/runtime/github-integration.d.ts.map +1 -1
  106. package/dist/runtime/github-integration.js +11 -4
  107. package/dist/runtime/github-integration.js.map +1 -1
  108. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  109. package/dist/runtime/orchestrate-ops.js +75 -42
  110. package/dist/runtime/orchestrate-ops.js.map +1 -1
  111. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  112. package/dist/runtime/planning-extra-ops.js.map +1 -1
  113. package/dist/runtime/runtime.d.ts.map +1 -1
  114. package/dist/runtime/runtime.js +3 -1
  115. package/dist/runtime/runtime.js.map +1 -1
  116. package/dist/runtime/session-briefing.d.ts.map +1 -1
  117. package/dist/runtime/session-briefing.js +5 -1
  118. package/dist/runtime/session-briefing.js.map +1 -1
  119. package/dist/runtime/tier-ops.d.ts +13 -0
  120. package/dist/runtime/tier-ops.d.ts.map +1 -0
  121. package/dist/runtime/tier-ops.js +110 -0
  122. package/dist/runtime/tier-ops.js.map +1 -0
  123. package/dist/skills/sync-skills.d.ts.map +1 -1
  124. package/dist/skills/sync-skills.js +1 -1
  125. package/dist/skills/sync-skills.js.map +1 -1
  126. package/dist/vault/linking.d.ts.map +1 -1
  127. package/dist/vault/linking.js +41 -5
  128. package/dist/vault/linking.js.map +1 -1
  129. package/dist/vault/vault-entries.d.ts.map +1 -1
  130. package/dist/vault/vault-entries.js +68 -26
  131. package/dist/vault/vault-entries.js.map +1 -1
  132. package/dist/vault/vault-maintenance.d.ts.map +1 -1
  133. package/dist/vault/vault-maintenance.js +6 -2
  134. package/dist/vault/vault-maintenance.js.map +1 -1
  135. package/dist/vault/vault-markdown-sync.d.ts.map +1 -1
  136. package/dist/vault/vault-markdown-sync.js.map +1 -1
  137. package/dist/vault/vault-memories.d.ts.map +1 -1
  138. package/dist/vault/vault-memories.js +3 -1
  139. package/dist/vault/vault-memories.js.map +1 -1
  140. package/dist/vault/vault-schema.js +36 -10
  141. package/dist/vault/vault-schema.js.map +1 -1
  142. package/dist/vault/vault.d.ts.map +1 -1
  143. package/dist/vault/vault.js +5 -1
  144. package/dist/vault/vault.js.map +1 -1
  145. package/package.json +7 -7
  146. package/src/agency/agency-manager.test.ts +60 -40
  147. package/src/agency/default-rules.test.ts +17 -9
  148. package/src/capabilities/registry.test.ts +2 -12
  149. package/src/chat/agent-loop.test.ts +33 -43
  150. package/src/chat/mcp-bridge.test.ts +7 -2
  151. package/src/claudemd/inject.test.ts +2 -12
  152. package/src/context/context-engine.test.ts +96 -51
  153. package/src/control/intent-router.test.ts +3 -3
  154. package/src/curator/classifier.test.ts +14 -8
  155. package/src/curator/contradiction-detector.test.ts +30 -5
  156. package/src/curator/curator.ts +278 -56
  157. package/src/curator/duplicate-detector.test.ts +77 -15
  158. package/src/curator/quality-gate.test.ts +71 -31
  159. package/src/curator/tag-manager.test.ts +12 -4
  160. package/src/domain-packs/knowledge-installer.test.ts +2 -10
  161. package/src/domain-packs/token-resolver.test.ts +1 -3
  162. package/src/domain-packs/types.test.ts +16 -2
  163. package/src/enforcement/registry.test.ts +2 -8
  164. package/src/engine/bin/soleri-engine.ts +3 -1
  165. package/src/engine/module-manifest.test.ts +48 -4
  166. package/src/engine/module-manifest.ts +138 -1
  167. package/src/engine/register-engine.test.ts +6 -1
  168. package/src/engine/register-engine.ts +26 -3
  169. package/src/errors/classify.test.ts +6 -2
  170. package/src/errors/retry.test.ts +1 -4
  171. package/src/facades/facade-factory.test.ts +110 -64
  172. package/src/flows/epilogue.test.ts +16 -10
  173. package/src/flows/gate-evaluator.test.ts +12 -6
  174. package/src/flows/gate-evaluator.ts +1 -3
  175. package/src/governance/governance.test.ts +137 -21
  176. package/src/health/health-registry.test.ts +8 -1
  177. package/src/index.ts +8 -0
  178. package/src/intake/content-classifier.test.ts +121 -51
  179. package/src/intake/dedup-gate.test.ts +38 -22
  180. package/src/intake/intake-pipeline.test.ts +5 -3
  181. package/src/intake/text-ingester.test.ts +26 -20
  182. package/src/llm/key-pool.test.ts +1 -3
  183. package/src/llm/llm-client.test.ts +1 -4
  184. package/src/llm/oauth-discovery.test.ts +16 -16
  185. package/src/llm/utils.test.ts +62 -18
  186. package/src/logging/logger.test.ts +4 -1
  187. package/src/loop/loop-manager.test.ts +2 -6
  188. package/src/migrations/migration-runner.edge-cases.test.ts +2 -7
  189. package/src/operator/operator-profile-extended.test.ts +15 -5
  190. package/src/operator/operator-profile.test.ts +26 -8
  191. package/src/operator/operator-profile.ts +38 -22
  192. package/src/operator/operator-signals-extended.test.ts +35 -23
  193. package/src/operator/operator-signals.test.ts +6 -10
  194. package/src/operator/operator-signals.ts +2 -1
  195. package/src/operator/prompts/hook-precompact-operator-dispatch.md +10 -6
  196. package/src/operator/prompts/subagent-soft-signal-extractor.md +5 -0
  197. package/src/operator/prompts/subagent-synthesis-cognition.md +19 -10
  198. package/src/operator/prompts/subagent-synthesis-communication.md +13 -7
  199. package/src/operator/prompts/subagent-synthesis-technical.md +19 -9
  200. package/src/operator/prompts/subagent-synthesis-trust.md +27 -21
  201. package/src/persona/defaults.test.ts +1 -5
  202. package/src/planning/evidence-collector.test.ts +147 -38
  203. package/src/planning/evidence-collector.ts +1 -4
  204. package/src/planning/gap-analysis-alternatives.test.ts +41 -11
  205. package/src/planning/gap-passes.test.ts +215 -33
  206. package/src/planning/gap-passes.ts +115 -46
  207. package/src/planning/gap-patterns.test.ts +87 -13
  208. package/src/planning/gap-patterns.ts +114 -31
  209. package/src/planning/github-projection.test.ts +6 -1
  210. package/src/planning/github-projection.ts +41 -20
  211. package/src/planning/impact-analyzer.test.ts +10 -23
  212. package/src/planning/impact-analyzer.ts +33 -46
  213. package/src/planning/plan-lifecycle.test.ts +103 -36
  214. package/src/planning/plan-lifecycle.ts +49 -18
  215. package/src/planning/planner.test.ts +12 -2
  216. package/src/planning/planner.ts +198 -58
  217. package/src/planning/rationalization-detector.test.ts +5 -20
  218. package/src/planning/rationalization-detector.ts +14 -16
  219. package/src/planning/reconciliation-engine.test.ts +20 -3
  220. package/src/planning/reconciliation-engine.ts +1 -2
  221. package/src/planning/task-complexity-assessor.test.ts +298 -0
  222. package/src/planning/task-complexity-assessor.ts +183 -0
  223. package/src/planning/task-verifier.test.ts +59 -27
  224. package/src/planning/task-verifier.ts +15 -9
  225. package/src/playbooks/playbook-executor.test.ts +1 -3
  226. package/src/plugins/plugin-loader.test.ts +19 -14
  227. package/src/plugins/plugin-registry.test.ts +45 -33
  228. package/src/project/project-registry.test.ts +23 -12
  229. package/src/prompts/template-manager.test.ts +4 -1
  230. package/src/queue/job-queue.test.ts +10 -14
  231. package/src/runtime/admin-extra-ops.test.ts +5 -19
  232. package/src/runtime/admin-ops.test.ts +22 -1
  233. package/src/runtime/admin-ops.ts +19 -0
  234. package/src/runtime/admin-setup-ops.test.ts +3 -4
  235. package/src/runtime/admin-setup-ops.ts +9 -2
  236. package/src/runtime/archive-ops.test.ts +4 -1
  237. package/src/runtime/branching-ops.test.ts +144 -0
  238. package/src/runtime/branching-ops.ts +107 -0
  239. package/src/runtime/capture-ops.test.ts +7 -21
  240. package/src/runtime/chain-ops.test.ts +16 -6
  241. package/src/runtime/claude-md-helpers.test.ts +1 -3
  242. package/src/runtime/context-health.test.ts +1 -3
  243. package/src/runtime/context-health.ts +1 -3
  244. package/src/runtime/curator-extra-ops.test.ts +3 -1
  245. package/src/runtime/domain-ops.test.ts +46 -36
  246. package/src/runtime/facades/admin-facade.test.ts +1 -4
  247. package/src/runtime/facades/archive-facade.test.ts +21 -7
  248. package/src/runtime/facades/brain-facade.test.ts +176 -72
  249. package/src/runtime/facades/branching-facade.test.ts +43 -0
  250. package/src/runtime/facades/branching-facade.ts +11 -0
  251. package/src/runtime/facades/chat-facade.test.ts +81 -28
  252. package/src/runtime/facades/chat-service-ops.test.ts +178 -73
  253. package/src/runtime/facades/chat-service-ops.ts +3 -1
  254. package/src/runtime/facades/chat-session-ops.test.ts +25 -10
  255. package/src/runtime/facades/chat-transport-ops.test.ts +101 -34
  256. package/src/runtime/facades/chat-transport-ops.ts +0 -1
  257. package/src/runtime/facades/context-facade.test.ts +19 -4
  258. package/src/runtime/facades/control-facade.test.ts +3 -3
  259. package/src/runtime/facades/index.ts +42 -0
  260. package/src/runtime/facades/intake-facade.test.ts +215 -0
  261. package/src/runtime/facades/intake-facade.ts +14 -0
  262. package/src/runtime/facades/links-facade.test.ts +203 -0
  263. package/src/runtime/facades/links-facade.ts +13 -0
  264. package/src/runtime/facades/loop-facade.test.ts +22 -5
  265. package/src/runtime/facades/memory-facade.test.ts +19 -5
  266. package/src/runtime/facades/operator-facade.test.ts +17 -4
  267. package/src/runtime/facades/operator-facade.ts +11 -3
  268. package/src/runtime/facades/orchestrate-facade.test.ts +7 -1
  269. package/src/runtime/facades/plan-facade.test.ts +29 -12
  270. package/src/runtime/facades/plan-facade.ts +7 -2
  271. package/src/runtime/facades/tier-facade.test.ts +47 -0
  272. package/src/runtime/facades/tier-facade.ts +11 -0
  273. package/src/runtime/facades/vault-facade.test.ts +174 -242
  274. package/src/runtime/facades/vault-facade.ts +55 -199
  275. package/src/runtime/github-integration.ts +11 -8
  276. package/src/runtime/grading-ops.test.ts +39 -8
  277. package/src/runtime/intake-ops.test.ts +69 -16
  278. package/src/runtime/loop-ops.test.ts +16 -6
  279. package/src/runtime/memory-cross-project-ops.test.ts +25 -14
  280. package/src/runtime/orchestrate-ops.test.ts +204 -0
  281. package/src/runtime/orchestrate-ops.ts +103 -65
  282. package/src/runtime/pack-ops.test.ts +23 -6
  283. package/src/runtime/planning-extra-ops.test.ts +17 -7
  284. package/src/runtime/planning-extra-ops.ts +3 -1
  285. package/src/runtime/playbook-ops.test.ts +26 -3
  286. package/src/runtime/plugin-ops.test.ts +83 -25
  287. package/src/runtime/project-ops.test.ts +26 -6
  288. package/src/runtime/runtime.ts +3 -1
  289. package/src/runtime/session-briefing.test.ts +183 -54
  290. package/src/runtime/session-briefing.ts +8 -2
  291. package/src/runtime/sync-ops.test.ts +3 -12
  292. package/src/runtime/telemetry-ops.test.ts +31 -6
  293. package/src/runtime/tier-ops.test.ts +159 -0
  294. package/src/runtime/tier-ops.ts +119 -0
  295. package/src/runtime/vault-extra-ops.test.ts +32 -8
  296. package/src/runtime/vault-sharing-ops.test.ts +1 -4
  297. package/src/skills/sync-skills.ts +2 -12
  298. package/src/transport/ws-server.test.ts +7 -4
  299. package/src/vault/__tests__/vault-characterization.test.ts +492 -81
  300. package/src/vault/linking.test.ts +50 -17
  301. package/src/vault/linking.ts +48 -7
  302. package/src/vault/obsidian-sync.test.ts +6 -3
  303. package/src/vault/scope-detector.test.ts +1 -3
  304. package/src/vault/vault-branching.test.ts +9 -7
  305. package/src/vault/vault-entries.ts +209 -65
  306. package/src/vault/vault-maintenance.ts +7 -12
  307. package/src/vault/vault-manager.test.ts +10 -10
  308. package/src/vault/vault-markdown-sync.ts +4 -1
  309. package/src/vault/vault-memories.ts +7 -7
  310. package/src/vault/vault-scaling.test.ts +5 -5
  311. package/src/vault/vault-schema.ts +72 -15
  312. package/src/vault/vault.ts +55 -9
  313. package/src/brain/strength-scorer.ts +0 -404
  314. package/src/engine/index.ts +0 -21
  315. package/src/persona/index.ts +0 -9
  316. package/src/vault/vault-interfaces.ts +0 -56
@@ -87,7 +87,9 @@ function createCoreTables(provider: PersistenceProvider): void {
87
87
  );`);
88
88
 
89
89
  // Add memory columns if missing
90
- const memCols = provider.all<{ name: string }>('PRAGMA table_info(memories)').map((r: { name: string }) => r.name);
90
+ const memCols = provider
91
+ .all<{ name: string }>('PRAGMA table_info(memories)')
92
+ .map((r: { name: string }) => r.name);
91
93
  if (!memCols.includes('intent')) {
92
94
  provider.execSql(`
93
95
  ALTER TABLE memories ADD COLUMN intent TEXT;
@@ -134,8 +136,12 @@ function migrateBrainSchema(provider: PersistenceProvider): void {
134
136
  const hasSource = columns.some((c: { name: string }) => c.name === 'source');
135
137
  if (!hasSource && columns.length > 0) {
136
138
  provider.transaction(() => {
137
- provider.run(`CREATE TABLE brain_feedback_new (id INTEGER PRIMARY KEY AUTOINCREMENT, query TEXT NOT NULL, entry_id TEXT NOT NULL, action TEXT NOT NULL CHECK(action IN ('accepted', 'dismissed', 'modified', 'failed')), source TEXT NOT NULL DEFAULT 'search', confidence REAL NOT NULL DEFAULT 0.6, duration INTEGER, context TEXT NOT NULL DEFAULT '{}', reason TEXT, created_at INTEGER NOT NULL DEFAULT (unixepoch()))`);
138
- provider.run(`INSERT INTO brain_feedback_new (id, query, entry_id, action, created_at) SELECT id, query, entry_id, action, created_at FROM brain_feedback`);
139
+ provider.run(
140
+ `CREATE TABLE brain_feedback_new (id INTEGER PRIMARY KEY AUTOINCREMENT, query TEXT NOT NULL, entry_id TEXT NOT NULL, action TEXT NOT NULL CHECK(action IN ('accepted', 'dismissed', 'modified', 'failed')), source TEXT NOT NULL DEFAULT 'search', confidence REAL NOT NULL DEFAULT 0.6, duration INTEGER, context TEXT NOT NULL DEFAULT '{}', reason TEXT, created_at INTEGER NOT NULL DEFAULT (unixepoch()))`,
141
+ );
142
+ provider.run(
143
+ `INSERT INTO brain_feedback_new (id, query, entry_id, action, created_at) SELECT id, query, entry_id, action, created_at FROM brain_feedback`,
144
+ );
139
145
  provider.run('DROP TABLE brain_feedback');
140
146
  provider.run('ALTER TABLE brain_feedback_new RENAME TO brain_feedback');
141
147
  provider.run('CREATE INDEX IF NOT EXISTS idx_brain_feedback_query ON brain_feedback(query)');
@@ -143,39 +149,90 @@ function migrateBrainSchema(provider: PersistenceProvider): void {
143
149
  }
144
150
  try {
145
151
  const sessionCols = provider.all<{ name: string }>('PRAGMA table_info(brain_sessions)');
146
- if (sessionCols.length > 0 && !sessionCols.some((c: { name: string }) => c.name === 'extracted_at')) {
152
+ if (
153
+ sessionCols.length > 0 &&
154
+ !sessionCols.some((c: { name: string }) => c.name === 'extracted_at')
155
+ ) {
147
156
  provider.run('ALTER TABLE brain_sessions ADD COLUMN extracted_at TEXT');
148
157
  }
149
- } catch { /* brain_sessions doesn't exist yet */ }
158
+ } catch {
159
+ /* brain_sessions doesn't exist yet */
160
+ }
150
161
  }
151
162
 
152
163
  function migrateTemporalSchema(provider: PersistenceProvider): void {
153
- try { provider.run('ALTER TABLE entries ADD COLUMN valid_from INTEGER'); } catch { /* exists */ }
154
- try { provider.run('ALTER TABLE entries ADD COLUMN valid_until INTEGER'); } catch { /* exists */ }
164
+ try {
165
+ provider.run('ALTER TABLE entries ADD COLUMN valid_from INTEGER');
166
+ } catch {
167
+ /* exists */
168
+ }
169
+ try {
170
+ provider.run('ALTER TABLE entries ADD COLUMN valid_until INTEGER');
171
+ } catch {
172
+ /* exists */
173
+ }
155
174
  }
156
175
 
157
176
  function migrateOriginColumn(provider: PersistenceProvider): void {
158
- try { provider.run("ALTER TABLE entries ADD COLUMN origin TEXT NOT NULL DEFAULT 'user' CHECK(origin IN ('agent', 'pack', 'user'))"); } catch { /* exists */ }
177
+ try {
178
+ provider.run(
179
+ "ALTER TABLE entries ADD COLUMN origin TEXT NOT NULL DEFAULT 'user' CHECK(origin IN ('agent', 'pack', 'user'))",
180
+ );
181
+ } catch {
182
+ /* exists */
183
+ }
159
184
  provider.execSql('CREATE INDEX IF NOT EXISTS idx_entries_origin ON entries(origin)');
160
185
  }
161
186
 
162
187
  function migrateContentHash(provider: PersistenceProvider): void {
163
- try { provider.run('ALTER TABLE entries ADD COLUMN content_hash TEXT'); } catch { /* exists */ }
164
- provider.execSql('CREATE INDEX IF NOT EXISTS idx_entries_content_hash ON entries(content_hash) WHERE content_hash IS NOT NULL');
165
- const unhashed = provider.all<{ id: string; type: string; domain: string; title: string; description: string; tags: string; example: string | null; counter_example: string | null }>(
188
+ try {
189
+ provider.run('ALTER TABLE entries ADD COLUMN content_hash TEXT');
190
+ } catch {
191
+ /* exists */
192
+ }
193
+ provider.execSql(
194
+ 'CREATE INDEX IF NOT EXISTS idx_entries_content_hash ON entries(content_hash) WHERE content_hash IS NOT NULL',
195
+ );
196
+ const unhashed = provider.all<{
197
+ id: string;
198
+ type: string;
199
+ domain: string;
200
+ title: string;
201
+ description: string;
202
+ tags: string;
203
+ example: string | null;
204
+ counter_example: string | null;
205
+ }>(
166
206
  'SELECT id, type, domain, title, description, tags, example, counter_example FROM entries WHERE content_hash IS NULL',
167
207
  );
168
208
  if (unhashed.length > 0) {
169
209
  provider.transaction(() => {
170
210
  for (const row of unhashed) {
171
- const hash = computeContentHash({ type: row.type, domain: row.domain, title: row.title, description: row.description, tags: JSON.parse(row.tags), example: row.example ?? undefined, counterExample: row.counter_example ?? undefined });
172
- provider.run('UPDATE entries SET content_hash = @hash WHERE id = @id', { hash, id: row.id });
211
+ const hash = computeContentHash({
212
+ type: row.type,
213
+ domain: row.domain,
214
+ title: row.title,
215
+ description: row.description,
216
+ tags: JSON.parse(row.tags),
217
+ example: row.example ?? undefined,
218
+ counterExample: row.counter_example ?? undefined,
219
+ });
220
+ provider.run('UPDATE entries SET content_hash = @hash WHERE id = @id', {
221
+ hash,
222
+ id: row.id,
223
+ });
173
224
  }
174
225
  });
175
226
  }
176
227
  }
177
228
 
178
229
  function migrateTierColumn(provider: PersistenceProvider): void {
179
- try { provider.run("ALTER TABLE entries ADD COLUMN tier TEXT DEFAULT 'agent'"); } catch { /* exists */ }
180
- provider.execSql('CREATE INDEX IF NOT EXISTS idx_entries_tier ON entries(tier) WHERE tier IS NOT NULL');
230
+ try {
231
+ provider.run("ALTER TABLE entries ADD COLUMN tier TEXT DEFAULT 'agent'");
232
+ } catch {
233
+ /* exists */
234
+ }
235
+ provider.execSql(
236
+ 'CREATE INDEX IF NOT EXISTS idx_entries_tier ON entries(tier) WHERE tier IS NOT NULL',
237
+ );
181
238
  }
@@ -80,7 +80,11 @@ export class Vault {
80
80
  static readonly FORMAT_VERSION = VAULT_FORMAT_VERSION;
81
81
 
82
82
  private getAutoLinkConfig(): AutoLinkConfig {
83
- return { linkManager: this.linkManager, enabled: this.autoLinkEnabled, maxLinks: this.autoLinkMaxLinks };
83
+ return {
84
+ linkManager: this.linkManager,
85
+ enabled: this.autoLinkEnabled,
86
+ maxLinks: this.autoLinkMaxLinks,
87
+ };
84
88
  }
85
89
 
86
90
  setLinkManager(mgr: LinkManager, opts?: { enabled?: boolean; maxLinks?: number }): void {
@@ -105,16 +109,37 @@ export class Vault {
105
109
  installPack(entryList: IntelligenceEntry[]): { installed: number; skipped: number } {
106
110
  return entries.installPack(this.provider, entryList, this.getAutoLinkConfig());
107
111
  }
108
- seedDedup(entryList: IntelligenceEntry[]): Array<{ id: string; action: 'inserted' | 'duplicate'; existingId?: string }> {
112
+ seedDedup(
113
+ entryList: IntelligenceEntry[],
114
+ ): Array<{ id: string; action: 'inserted' | 'duplicate'; existingId?: string }> {
109
115
  return entries.seedDedup(this.provider, entryList, this.getAutoLinkConfig());
110
116
  }
111
- search(query: string, options?: { domain?: string; type?: string; severity?: string; origin?: 'agent' | 'pack' | 'user'; limit?: number; includeExpired?: boolean }): SearchResult[] {
117
+ search(
118
+ query: string,
119
+ options?: {
120
+ domain?: string;
121
+ type?: string;
122
+ severity?: string;
123
+ origin?: 'agent' | 'pack' | 'user';
124
+ limit?: number;
125
+ includeExpired?: boolean;
126
+ },
127
+ ): SearchResult[] {
112
128
  return entries.search(this.provider, query, options);
113
129
  }
114
130
  get(id: string): IntelligenceEntry | null {
115
131
  return entries.get(this.provider, id);
116
132
  }
117
- list(options?: { domain?: string; type?: string; severity?: string; origin?: 'agent' | 'pack' | 'user'; tags?: string[]; limit?: number; offset?: number; includeExpired?: boolean }): IntelligenceEntry[] {
133
+ list(options?: {
134
+ domain?: string;
135
+ type?: string;
136
+ severity?: string;
137
+ origin?: 'agent' | 'pack' | 'user';
138
+ tags?: string[];
139
+ limit?: number;
140
+ offset?: number;
141
+ includeExpired?: boolean;
142
+ }): IntelligenceEntry[] {
118
143
  return entries.list(this.provider, options);
119
144
  }
120
145
  stats(): VaultStats {
@@ -162,7 +187,12 @@ export class Vault {
162
187
  exportAll(): { entries: IntelligenceEntry[]; exportedAt: number; count: number } {
163
188
  return maintenance.exportAll(this.provider);
164
189
  }
165
- getAgeReport(): { total: number; buckets: Array<{ label: string; count: number; minDays: number; maxDays: number }>; oldestTimestamp: number | null; newestTimestamp: number | null } {
190
+ getAgeReport(): {
191
+ total: number;
192
+ buckets: Array<{ label: string; count: number; minDays: number; maxDays: number }>;
193
+ oldestTimestamp: number | null;
194
+ newestTimestamp: number | null;
195
+ } {
166
196
  return maintenance.getAgeReport(this.provider);
167
197
  }
168
198
  archive(options: { olderThanDays: number; reason?: string }): { archived: number } {
@@ -201,19 +231,35 @@ export class Vault {
201
231
  deleteMemory(id: string): boolean {
202
232
  return memories.deleteMemory(this.provider, id);
203
233
  }
204
- searchMemories(query: string, options?: { type?: string; projectPath?: string; intent?: string; limit?: number }): Memory[] {
234
+ searchMemories(
235
+ query: string,
236
+ options?: { type?: string; projectPath?: string; intent?: string; limit?: number },
237
+ ): Memory[] {
205
238
  return memories.searchMemories(this.provider, query, options);
206
239
  }
207
- listMemories(options?: { type?: string; projectPath?: string; limit?: number; offset?: number }): Memory[] {
240
+ listMemories(options?: {
241
+ type?: string;
242
+ projectPath?: string;
243
+ limit?: number;
244
+ offset?: number;
245
+ }): Memory[] {
208
246
  return memories.listMemories(this.provider, options);
209
247
  }
210
248
  memoryStats(): MemoryStats {
211
249
  return memories.memoryStats(this.provider);
212
250
  }
213
- memoryStatsDetailed(options?: { projectPath?: string; fromDate?: number; toDate?: number }): MemoryStats & { oldest: number | null; newest: number | null; archivedCount: number } {
251
+ memoryStatsDetailed(options?: {
252
+ projectPath?: string;
253
+ fromDate?: number;
254
+ toDate?: number;
255
+ }): MemoryStats & { oldest: number | null; newest: number | null; archivedCount: number } {
214
256
  return memories.memoryStatsDetailed(this.provider, options);
215
257
  }
216
- exportMemories(options?: { projectPath?: string; type?: string; includeArchived?: boolean }): Memory[] {
258
+ exportMemories(options?: {
259
+ projectPath?: string;
260
+ type?: string;
261
+ includeArchived?: boolean;
262
+ }): Memory[] {
217
263
  return memories.exportMemories(this.provider, options);
218
264
  }
219
265
  importMemories(memoryList: Memory[]): { imported: number; skipped: number } {
@@ -1,404 +0,0 @@
1
- /**
2
- * Strength Scorer — computes pattern strength scores from brain feedback data.
3
- *
4
- * Extracted from intelligence.ts (Phase 1, Wave 1A).
5
- * Responsible for: computeStrengths, getStrengths, recommend, buildGlobalRegistry, buildDomainProfiles.
6
- */
7
-
8
- import type { Vault } from '../vault/vault.js';
9
- import type { PersistenceProvider } from '../persistence/types.js';
10
- import type { PatternStrength, StrengthsQuery, GlobalPattern, DomainProfile } from './types.js';
11
-
12
- // ─── Constants ──────────────────────────────────────────────────────
13
-
14
- const USAGE_MAX = 10;
15
- const SPREAD_MAX = 5;
16
- const RECENCY_DECAY_DAYS = 30;
17
-
18
- // ─── Row Types ──────────────────────────────────────────────────────
19
-
20
- interface FeedbackRow {
21
- entry_id: string;
22
- total: number;
23
- accepted: number;
24
- dismissed: number;
25
- modified: number;
26
- failed: number;
27
- last_used: string;
28
- }
29
-
30
- interface StrengthRow {
31
- pattern: string;
32
- domain: string;
33
- strength: number;
34
- usage_score: number;
35
- spread_score: number;
36
- success_score: number;
37
- recency_score: number;
38
- usage_count: number;
39
- unique_contexts: number;
40
- success_rate: number;
41
- last_used: string;
42
- }
43
-
44
- // ─── Helpers ────────────────────────────────────────────────────────
45
-
46
- function computeUsageScore(total: number): number {
47
- return Math.min(25, (total / USAGE_MAX) * 25);
48
- }
49
-
50
- function computeSpreadScore(uniqueDomainCount: number): number {
51
- const capped = Math.min(uniqueDomainCount, 5);
52
- return Math.min(25, (capped / SPREAD_MAX) * 25);
53
- }
54
-
55
- function computeSuccessRate(row: FeedbackRow): number {
56
- const relevantTotal = row.total - row.failed;
57
- if (relevantTotal <= 0) return 0;
58
- return (row.accepted + row.modified * 0.5) / relevantTotal;
59
- }
60
-
61
- function computeRecencyScore(lastUsed: string, now: number): number {
62
- const lastUsedMs = new Date(lastUsed).getTime();
63
- const daysSince = (now - lastUsedMs) / (1000 * 60 * 60 * 24);
64
- return Math.max(0, 25 * (1 - daysSince / RECENCY_DECAY_DAYS));
65
- }
66
-
67
- function rowToStrength(r: StrengthRow): PatternStrength {
68
- return {
69
- pattern: r.pattern,
70
- domain: r.domain,
71
- strength: r.strength,
72
- usageScore: r.usage_score,
73
- spreadScore: r.spread_score,
74
- successScore: r.success_score,
75
- recencyScore: r.recency_score,
76
- usageCount: r.usage_count,
77
- uniqueContexts: r.unique_contexts,
78
- successRate: r.success_rate,
79
- lastUsed: r.last_used,
80
- };
81
- }
82
-
83
- // ─── Class ──────────────────────────────────────────────────────────
84
-
85
- export class StrengthScorer {
86
- private vault: Vault;
87
- private provider: PersistenceProvider;
88
-
89
- constructor(vault: Vault) {
90
- this.vault = vault;
91
- this.provider = vault.getProvider();
92
- }
93
-
94
- computeStrengths(): PatternStrength[] {
95
- const feedbackRows = this.provider.all<FeedbackRow>(
96
- `SELECT entry_id,
97
- COUNT(*) as total,
98
- SUM(CASE WHEN action = 'accepted' THEN 1 ELSE 0 END) as accepted,
99
- SUM(CASE WHEN action = 'dismissed' THEN 1 ELSE 0 END) as dismissed,
100
- SUM(CASE WHEN action = 'modified' THEN 1 ELSE 0 END) as modified,
101
- SUM(CASE WHEN action = 'failed' THEN 1 ELSE 0 END) as failed,
102
- MAX(created_at) as last_used
103
- FROM brain_feedback
104
- GROUP BY entry_id`,
105
- );
106
-
107
- const sessionRows = this.provider.all<{ domain: string }>(
108
- 'SELECT DISTINCT domain FROM brain_sessions WHERE domain IS NOT NULL',
109
- );
110
- const uniqueDomainCount = new Set(sessionRows.map((r) => r.domain)).size;
111
-
112
- const now = Date.now();
113
- const strengths: PatternStrength[] = [];
114
-
115
- for (const row of feedbackRows) {
116
- const ps = this.scoreFromFeedback(row, uniqueDomainCount, now);
117
- strengths.push(ps);
118
- this.persistStrength(ps);
119
- }
120
-
121
- return strengths;
122
- }
123
-
124
- getStrengths(query?: StrengthsQuery): PatternStrength[] {
125
- const conditions: string[] = [];
126
- const values: unknown[] = [];
127
-
128
- if (query?.domain) {
129
- conditions.push('domain = ?');
130
- values.push(query.domain);
131
- }
132
- if (query?.minStrength !== undefined && query.minStrength !== null) {
133
- conditions.push('strength >= ?');
134
- values.push(query.minStrength);
135
- }
136
-
137
- const where = conditions.length > 0 ? 'WHERE ' + conditions.join(' AND ') : '';
138
- const limit = query?.limit ?? 50;
139
- values.push(limit);
140
-
141
- const rows = this.provider.all<StrengthRow>(
142
- `SELECT * FROM brain_strengths ${where} ORDER BY strength DESC LIMIT ?`,
143
- values,
144
- );
145
-
146
- return rows.map(rowToStrength);
147
- }
148
-
149
- recommend(context: {
150
- domain?: string;
151
- task?: string;
152
- source?: string;
153
- limit?: number;
154
- }): PatternStrength[] {
155
- const limit = context.limit ?? 5;
156
-
157
- let strengths = this.getStrengths({
158
- domain: context.domain,
159
- minStrength: 20,
160
- limit: limit * 3,
161
- });
162
-
163
- if (strengths.length < limit && context.domain) {
164
- strengths = this.expandWithFallback(strengths, context.domain, limit);
165
- }
166
-
167
- if (context.task) {
168
- this.boostByTaskContext(strengths, context.task);
169
- }
170
-
171
- if (context.source) {
172
- this.boostBySource(strengths, context.source);
173
- }
174
-
175
- strengths.sort((a, b) => b.strength - a.strength);
176
- return strengths.slice(0, limit);
177
- }
178
-
179
- buildGlobalRegistry(strengths: PatternStrength[]): number {
180
- const patternMap = new Map<string, PatternStrength[]>();
181
- for (const s of strengths) {
182
- const list = patternMap.get(s.pattern) ?? [];
183
- list.push(s);
184
- patternMap.set(s.pattern, list);
185
- }
186
-
187
- this.provider.run('DELETE FROM brain_global_registry');
188
-
189
- let count = 0;
190
- for (const [pattern, entries] of patternMap) {
191
- const domains = [...new Set(entries.map((e) => e.domain))];
192
- const totalStrength = entries.reduce((sum, e) => sum + e.strength, 0);
193
- const avgStrength = totalStrength / entries.length;
194
-
195
- this.provider.run(
196
- `INSERT INTO brain_global_registry
197
- (pattern, domains, total_strength, avg_strength, domain_count, updated_at)
198
- VALUES (?, ?, ?, ?, ?, datetime('now'))`,
199
- [pattern, JSON.stringify(domains), totalStrength, avgStrength, domains.length],
200
- );
201
- count++;
202
- }
203
-
204
- return count;
205
- }
206
-
207
- buildDomainProfiles(strengths: PatternStrength[]): number {
208
- const domainMap = new Map<string, PatternStrength[]>();
209
- for (const s of strengths) {
210
- const list = domainMap.get(s.domain) ?? [];
211
- list.push(s);
212
- domainMap.set(s.domain, list);
213
- }
214
-
215
- this.provider.run('DELETE FROM brain_domain_profiles');
216
-
217
- let count = 0;
218
- for (const [domain, entries] of domainMap) {
219
- entries.sort((a, b) => b.strength - a.strength);
220
- const topPatterns = entries.slice(0, 10).map((e) => ({
221
- pattern: e.pattern,
222
- strength: e.strength,
223
- }));
224
-
225
- const sessionCount = this.provider.get<{ c: number }>(
226
- 'SELECT COUNT(*) as c FROM brain_sessions WHERE domain = ?',
227
- [domain],
228
- )!.c;
229
-
230
- const durationRow = this.provider.get<{ avg_min: number | null }>(
231
- `SELECT AVG(
232
- (julianday(ended_at) - julianday(started_at)) * 1440
233
- ) as avg_min
234
- FROM brain_sessions
235
- WHERE domain = ? AND ended_at IS NOT NULL`,
236
- [domain],
237
- )!;
238
-
239
- const lastActivity = entries.reduce(
240
- (latest, e) => (e.lastUsed > latest ? e.lastUsed : latest),
241
- '',
242
- );
243
-
244
- this.provider.run(
245
- `INSERT INTO brain_domain_profiles
246
- (domain, top_patterns, session_count, avg_session_duration, last_activity, updated_at)
247
- VALUES (?, ?, ?, ?, ?, datetime('now'))`,
248
- [
249
- domain,
250
- JSON.stringify(topPatterns),
251
- sessionCount,
252
- durationRow.avg_min ?? 0,
253
- lastActivity || new Date().toISOString(),
254
- ],
255
- );
256
- count++;
257
- }
258
-
259
- return count;
260
- }
261
-
262
- getGlobalPatterns(limit = 20): GlobalPattern[] {
263
- const rows = this.provider.all<{
264
- pattern: string;
265
- domains: string;
266
- total_strength: number;
267
- avg_strength: number;
268
- domain_count: number;
269
- }>('SELECT * FROM brain_global_registry ORDER BY total_strength DESC LIMIT ?', [limit]);
270
-
271
- return rows.map((r) => ({
272
- pattern: r.pattern,
273
- domains: JSON.parse(r.domains) as string[],
274
- totalStrength: r.total_strength,
275
- avgStrength: r.avg_strength,
276
- domainCount: r.domain_count,
277
- }));
278
- }
279
-
280
- getDomainProfile(domain: string): DomainProfile | null {
281
- const row = this.provider.get<{
282
- domain: string;
283
- top_patterns: string;
284
- session_count: number;
285
- avg_session_duration: number;
286
- last_activity: string;
287
- }>('SELECT * FROM brain_domain_profiles WHERE domain = ?', [domain]);
288
-
289
- if (!row) return null;
290
-
291
- return {
292
- domain: row.domain,
293
- topPatterns: JSON.parse(row.top_patterns) as Array<{ pattern: string; strength: number }>,
294
- sessionCount: row.session_count,
295
- avgSessionDuration: row.avg_session_duration,
296
- lastActivity: row.last_activity,
297
- };
298
- }
299
-
300
- // ─── Private ────────────────────────────────────────────────────
301
-
302
- private scoreFromFeedback(
303
- row: FeedbackRow,
304
- uniqueDomainCount: number,
305
- now: number,
306
- ): PatternStrength {
307
- const entry = this.vault.get(row.entry_id);
308
- const domain = entry?.domain ?? 'unknown';
309
- const pattern = entry?.title ?? row.entry_id;
310
-
311
- const usageScore = computeUsageScore(row.total);
312
- const spreadScore = computeSpreadScore(uniqueDomainCount);
313
- const successRate = computeSuccessRate(row);
314
- const successScore = 25 * successRate;
315
- const recencyScore = computeRecencyScore(row.last_used, now);
316
- const strength = usageScore + spreadScore + successScore + recencyScore;
317
-
318
- return {
319
- pattern,
320
- domain,
321
- strength,
322
- usageScore,
323
- spreadScore,
324
- successScore,
325
- recencyScore,
326
- usageCount: row.total,
327
- uniqueContexts: Math.min(uniqueDomainCount, 5),
328
- successRate,
329
- lastUsed: row.last_used,
330
- };
331
- }
332
-
333
- private persistStrength(ps: PatternStrength): void {
334
- this.provider.run(
335
- `INSERT OR REPLACE INTO brain_strengths
336
- (pattern, domain, strength, usage_score, spread_score, success_score, recency_score,
337
- usage_count, unique_contexts, success_rate, last_used, updated_at)
338
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))`,
339
- [
340
- ps.pattern,
341
- ps.domain,
342
- ps.strength,
343
- ps.usageScore,
344
- ps.spreadScore,
345
- ps.successScore,
346
- ps.recencyScore,
347
- ps.usageCount,
348
- ps.uniqueContexts,
349
- ps.successRate,
350
- ps.lastUsed,
351
- ],
352
- );
353
- }
354
-
355
- private expandWithFallback(
356
- strengths: PatternStrength[],
357
- domain: string,
358
- limit: number,
359
- ): PatternStrength[] {
360
- const allStrengths = this.getStrengths({
361
- minStrength: 20,
362
- limit: limit * 5,
363
- });
364
- const additional = allStrengths.filter(
365
- (s) =>
366
- !strengths.some((existing) => existing.pattern === s.pattern) &&
367
- (s.domain === domain || s.domain === 'unknown'),
368
- );
369
- return [...strengths, ...additional];
370
- }
371
-
372
- private boostByTaskContext(strengths: PatternStrength[], task: string): void {
373
- const taskTerms = new Set(task.toLowerCase().split(/\W+/).filter(Boolean));
374
- for (const s of strengths) {
375
- const patternTerms = s.pattern.toLowerCase().split(/\W+/);
376
- const overlap = patternTerms.filter((t) => taskTerms.has(t)).length;
377
- if (overlap > 0) {
378
- (s as { strength: number }).strength += overlap * 5;
379
- }
380
- }
381
- }
382
-
383
- private boostBySource(strengths: PatternStrength[], source: string): void {
384
- for (const s of strengths) {
385
- const row = this.provider.get<{
386
- total: number;
387
- accepted: number;
388
- modified: number;
389
- }>(
390
- `SELECT COUNT(*) as total,
391
- SUM(CASE WHEN action = 'accepted' THEN 1 ELSE 0 END) as accepted,
392
- SUM(CASE WHEN action = 'modified' THEN 1 ELSE 0 END) as modified
393
- FROM brain_feedback
394
- WHERE entry_id = (SELECT id FROM entries WHERE title = ? LIMIT 1)
395
- AND source = ?`,
396
- [s.pattern, source],
397
- ) as { total: number; accepted: number; modified: number };
398
-
399
- if (row.total < 3) continue;
400
- const sourceRate = (row.accepted + row.modified * 0.5) / row.total;
401
- (s as { strength: number }).strength += sourceRate * 10;
402
- }
403
- }
404
- }
@@ -1,21 +0,0 @@
1
- /**
2
- * Soleri Knowledge Engine — MCP Server Entry Point
3
- *
4
- * This is the standalone knowledge engine that file-tree agents connect to.
5
- * It reads agent.yaml, initializes the runtime, and registers all tools.
6
- *
7
- * Usage:
8
- * npx @soleri/engine --agent ./agent.yaml
9
- *
10
- * Or in .mcp.json:
11
- * { "command": "npx", "args": ["@soleri/engine", "--agent", "./agent.yaml"] }
12
- *
13
- * Binary entry point: ./bin/soleri-engine.ts
14
- */
15
-
16
- export { registerEngine } from './register-engine.js';
17
- export type { EngineRegistrationOptions, EngineRegistrationResult } from './register-engine.js';
18
- export { createCoreOps } from './core-ops.js';
19
- export type { AgentIdentityConfig } from './core-ops.js';
20
- export { ENGINE_MODULE_MANIFEST, CORE_KEY_OPS } from './module-manifest.js';
21
- export type { ModuleManifestEntry } from './module-manifest.js';
@@ -1,9 +0,0 @@
1
- export type {
2
- PersonaConfig,
3
- ArchivedPersona,
4
- PersonaCreateInput,
5
- PersonaSystemInstructions,
6
- } from './types.js';
7
- export { ITALIAN_CRAFTSPERSON, PERSONA_TEMPLATES, createDefaultPersona } from './defaults.js';
8
- export { loadPersona } from './loader.js';
9
- export { generatePersonaInstructions, getRandomSignoff } from './prompt-generator.js';