@soleri/core 2.11.0 → 7.0.0

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 (255) hide show
  1. package/data/flows/build.flow.yaml +128 -0
  2. package/data/flows/deliver.flow.yaml +110 -0
  3. package/data/flows/design.flow.yaml +108 -0
  4. package/data/flows/enhance.flow.yaml +90 -0
  5. package/data/flows/explore.flow.yaml +84 -0
  6. package/data/flows/fix.flow.yaml +90 -0
  7. package/data/flows/plan.flow.yaml +87 -0
  8. package/data/flows/review.flow.yaml +90 -0
  9. package/dist/brain/brain.d.ts.map +1 -1
  10. package/dist/brain/brain.js +10 -0
  11. package/dist/brain/brain.js.map +1 -1
  12. package/dist/brain/intelligence.d.ts.map +1 -1
  13. package/dist/brain/intelligence.js +16 -2
  14. package/dist/brain/intelligence.js.map +1 -1
  15. package/dist/capabilities/chain-mapping.d.ts +21 -0
  16. package/dist/capabilities/chain-mapping.d.ts.map +1 -0
  17. package/dist/capabilities/chain-mapping.js +86 -0
  18. package/dist/capabilities/chain-mapping.js.map +1 -0
  19. package/dist/capabilities/index.d.ts +10 -0
  20. package/dist/capabilities/index.d.ts.map +1 -0
  21. package/dist/capabilities/index.js +8 -0
  22. package/dist/capabilities/index.js.map +1 -0
  23. package/dist/capabilities/registry.d.ts +95 -0
  24. package/dist/capabilities/registry.d.ts.map +1 -0
  25. package/dist/capabilities/registry.js +227 -0
  26. package/dist/capabilities/registry.js.map +1 -0
  27. package/dist/capabilities/types.d.ts +106 -0
  28. package/dist/capabilities/types.d.ts.map +1 -0
  29. package/dist/capabilities/types.js +12 -0
  30. package/dist/capabilities/types.js.map +1 -0
  31. package/dist/control/intent-router.d.ts.map +1 -1
  32. package/dist/control/intent-router.js +58 -2
  33. package/dist/control/intent-router.js.map +1 -1
  34. package/dist/domain-packs/index.d.ts +8 -0
  35. package/dist/domain-packs/index.d.ts.map +1 -0
  36. package/dist/domain-packs/index.js +8 -0
  37. package/dist/domain-packs/index.js.map +1 -0
  38. package/dist/domain-packs/inject-rules.d.ts +24 -0
  39. package/dist/domain-packs/inject-rules.d.ts.map +1 -0
  40. package/dist/domain-packs/inject-rules.js +65 -0
  41. package/dist/domain-packs/inject-rules.js.map +1 -0
  42. package/dist/domain-packs/knowledge-installer.d.ts +27 -0
  43. package/dist/domain-packs/knowledge-installer.d.ts.map +1 -0
  44. package/dist/domain-packs/knowledge-installer.js +89 -0
  45. package/dist/domain-packs/knowledge-installer.js.map +1 -0
  46. package/dist/domain-packs/loader.d.ts +28 -0
  47. package/dist/domain-packs/loader.d.ts.map +1 -0
  48. package/dist/domain-packs/loader.js +105 -0
  49. package/dist/domain-packs/loader.js.map +1 -0
  50. package/dist/domain-packs/pack-runtime.d.ts +80 -0
  51. package/dist/domain-packs/pack-runtime.d.ts.map +1 -0
  52. package/dist/domain-packs/pack-runtime.js +36 -0
  53. package/dist/domain-packs/pack-runtime.js.map +1 -0
  54. package/dist/domain-packs/skills-installer.d.ts +21 -0
  55. package/dist/domain-packs/skills-installer.d.ts.map +1 -0
  56. package/dist/domain-packs/skills-installer.js +38 -0
  57. package/dist/domain-packs/skills-installer.js.map +1 -0
  58. package/dist/domain-packs/token-resolver.d.ts +37 -0
  59. package/dist/domain-packs/token-resolver.d.ts.map +1 -0
  60. package/dist/domain-packs/token-resolver.js +109 -0
  61. package/dist/domain-packs/token-resolver.js.map +1 -0
  62. package/dist/domain-packs/types.d.ts +91 -0
  63. package/dist/domain-packs/types.d.ts.map +1 -0
  64. package/dist/domain-packs/types.js +122 -0
  65. package/dist/domain-packs/types.js.map +1 -0
  66. package/dist/engine/bin/soleri-engine.d.ts +12 -0
  67. package/dist/engine/bin/soleri-engine.d.ts.map +1 -0
  68. package/dist/engine/bin/soleri-engine.js +183 -0
  69. package/dist/engine/bin/soleri-engine.js.map +1 -0
  70. package/dist/engine/core-ops.d.ts +27 -0
  71. package/dist/engine/core-ops.d.ts.map +1 -0
  72. package/dist/engine/core-ops.js +159 -0
  73. package/dist/engine/core-ops.js.map +1 -0
  74. package/dist/engine/index.d.ts +19 -0
  75. package/dist/engine/index.d.ts.map +1 -0
  76. package/dist/engine/index.js +17 -0
  77. package/dist/engine/index.js.map +1 -0
  78. package/dist/engine/register-engine.d.ts +54 -0
  79. package/dist/engine/register-engine.d.ts.map +1 -0
  80. package/dist/engine/register-engine.js +270 -0
  81. package/dist/engine/register-engine.js.map +1 -0
  82. package/dist/engine/test-helpers.d.ts +30 -0
  83. package/dist/engine/test-helpers.d.ts.map +1 -0
  84. package/dist/engine/test-helpers.js +59 -0
  85. package/dist/engine/test-helpers.js.map +1 -0
  86. package/dist/flows/context-router.d.ts +39 -0
  87. package/dist/flows/context-router.d.ts.map +1 -0
  88. package/dist/flows/context-router.js +206 -0
  89. package/dist/flows/context-router.js.map +1 -0
  90. package/dist/flows/dispatch-registry.d.ts +24 -0
  91. package/dist/flows/dispatch-registry.d.ts.map +1 -0
  92. package/dist/flows/dispatch-registry.js +70 -0
  93. package/dist/flows/dispatch-registry.js.map +1 -0
  94. package/dist/flows/epilogue.d.ts +24 -0
  95. package/dist/flows/epilogue.d.ts.map +1 -0
  96. package/dist/flows/epilogue.js +52 -0
  97. package/dist/flows/epilogue.js.map +1 -0
  98. package/dist/flows/executor.d.ts +25 -0
  99. package/dist/flows/executor.d.ts.map +1 -0
  100. package/dist/flows/executor.js +153 -0
  101. package/dist/flows/executor.js.map +1 -0
  102. package/dist/flows/gate-evaluator.d.ts +26 -0
  103. package/dist/flows/gate-evaluator.d.ts.map +1 -0
  104. package/dist/flows/gate-evaluator.js +162 -0
  105. package/dist/flows/gate-evaluator.js.map +1 -0
  106. package/dist/flows/index.d.ts +14 -0
  107. package/dist/flows/index.d.ts.map +1 -0
  108. package/dist/flows/index.js +20 -0
  109. package/dist/flows/index.js.map +1 -0
  110. package/dist/flows/loader.d.ts +17 -0
  111. package/dist/flows/loader.d.ts.map +1 -0
  112. package/dist/flows/loader.js +61 -0
  113. package/dist/flows/loader.js.map +1 -0
  114. package/dist/flows/plan-builder.d.ts +40 -0
  115. package/dist/flows/plan-builder.d.ts.map +1 -0
  116. package/dist/flows/plan-builder.js +213 -0
  117. package/dist/flows/plan-builder.js.map +1 -0
  118. package/dist/flows/probes.d.ts +11 -0
  119. package/dist/flows/probes.d.ts.map +1 -0
  120. package/dist/flows/probes.js +62 -0
  121. package/dist/flows/probes.js.map +1 -0
  122. package/dist/flows/types.d.ts +950 -0
  123. package/dist/flows/types.d.ts.map +1 -0
  124. package/dist/flows/types.js +105 -0
  125. package/dist/flows/types.js.map +1 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +10 -1
  129. package/dist/index.js.map +1 -1
  130. package/dist/intelligence/loader.d.ts +19 -0
  131. package/dist/intelligence/loader.d.ts.map +1 -1
  132. package/dist/intelligence/loader.js +86 -5
  133. package/dist/intelligence/loader.js.map +1 -1
  134. package/dist/intelligence/types.d.ts +1 -0
  135. package/dist/intelligence/types.d.ts.map +1 -1
  136. package/dist/packs/types.d.ts +58 -19
  137. package/dist/packs/types.d.ts.map +1 -1
  138. package/dist/packs/types.js +14 -0
  139. package/dist/packs/types.js.map +1 -1
  140. package/dist/playbooks/generic/onboarding.d.ts +9 -0
  141. package/dist/playbooks/generic/onboarding.d.ts.map +1 -0
  142. package/dist/playbooks/generic/onboarding.js +74 -0
  143. package/dist/playbooks/generic/onboarding.js.map +1 -0
  144. package/dist/playbooks/playbook-registry.d.ts.map +1 -1
  145. package/dist/playbooks/playbook-registry.js +2 -0
  146. package/dist/playbooks/playbook-registry.js.map +1 -1
  147. package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
  148. package/dist/runtime/admin-extra-ops.js +15 -9
  149. package/dist/runtime/admin-extra-ops.js.map +1 -1
  150. package/dist/runtime/admin-ops.js +4 -4
  151. package/dist/runtime/admin-ops.js.map +1 -1
  152. package/dist/runtime/capture-ops.d.ts.map +1 -1
  153. package/dist/runtime/capture-ops.js +33 -1
  154. package/dist/runtime/capture-ops.js.map +1 -1
  155. package/dist/runtime/domain-ops.d.ts +21 -5
  156. package/dist/runtime/domain-ops.d.ts.map +1 -1
  157. package/dist/runtime/domain-ops.js +85 -8
  158. package/dist/runtime/domain-ops.js.map +1 -1
  159. package/dist/runtime/facades/cognee-facade.d.ts.map +1 -1
  160. package/dist/runtime/facades/cognee-facade.js +3 -1
  161. package/dist/runtime/facades/cognee-facade.js.map +1 -1
  162. package/dist/runtime/facades/index.d.ts.map +1 -1
  163. package/dist/runtime/facades/index.js +10 -6
  164. package/dist/runtime/facades/index.js.map +1 -1
  165. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  166. package/dist/runtime/facades/vault-facade.js +2 -0
  167. package/dist/runtime/facades/vault-facade.js.map +1 -1
  168. package/dist/runtime/orchestrate-ops.d.ts +8 -7
  169. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  170. package/dist/runtime/orchestrate-ops.js +227 -58
  171. package/dist/runtime/orchestrate-ops.js.map +1 -1
  172. package/dist/runtime/runtime.d.ts.map +1 -1
  173. package/dist/runtime/runtime.js +23 -17
  174. package/dist/runtime/runtime.js.map +1 -1
  175. package/dist/runtime/types.d.ts +6 -2
  176. package/dist/runtime/types.d.ts.map +1 -1
  177. package/dist/runtime/vault-linking-ops.d.ts +13 -0
  178. package/dist/runtime/vault-linking-ops.d.ts.map +1 -0
  179. package/dist/runtime/vault-linking-ops.js +367 -0
  180. package/dist/runtime/vault-linking-ops.js.map +1 -0
  181. package/dist/vault/linking.d.ts +46 -0
  182. package/dist/vault/linking.d.ts.map +1 -0
  183. package/dist/vault/linking.js +275 -0
  184. package/dist/vault/linking.js.map +1 -0
  185. package/dist/vault/vault-types.d.ts +37 -0
  186. package/dist/vault/vault-types.d.ts.map +1 -1
  187. package/dist/vault/vault.d.ts +12 -0
  188. package/dist/vault/vault.d.ts.map +1 -1
  189. package/dist/vault/vault.js +85 -6
  190. package/dist/vault/vault.js.map +1 -1
  191. package/package.json +4 -1
  192. package/src/__tests__/admin-extra-ops.test.ts +1 -1
  193. package/src/__tests__/admin-ops.test.ts +2 -1
  194. package/src/__tests__/cognee-client-gaps.test.ts +470 -0
  195. package/src/__tests__/cognee-hybrid-search.test.ts +478 -0
  196. package/src/__tests__/cognee-sync-manager-deep.test.ts +630 -0
  197. package/src/__tests__/cognee-sync-manager.test.ts +1 -0
  198. package/src/__tests__/core-ops.test.ts +9 -61
  199. package/src/__tests__/domain-packs.test.ts +421 -0
  200. package/src/__tests__/flows.test.ts +604 -0
  201. package/src/__tests__/playbook-registry.test.ts +2 -2
  202. package/src/__tests__/playbook-seeder.test.ts +8 -8
  203. package/src/__tests__/playbook.test.ts +5 -5
  204. package/src/__tests__/token-resolver.test.ts +79 -0
  205. package/src/brain/brain.ts +12 -0
  206. package/src/brain/intelligence.ts +21 -2
  207. package/src/capabilities/chain-mapping.ts +93 -0
  208. package/src/capabilities/index.ts +21 -0
  209. package/src/capabilities/registry.ts +290 -0
  210. package/src/capabilities/types.ts +143 -0
  211. package/src/control/intent-router.ts +46 -2
  212. package/src/domain-packs/index.ts +27 -0
  213. package/src/domain-packs/inject-rules.ts +74 -0
  214. package/src/domain-packs/knowledge-installer.ts +116 -0
  215. package/src/domain-packs/loader.ts +124 -0
  216. package/src/domain-packs/pack-runtime.ts +99 -0
  217. package/src/domain-packs/skills-installer.ts +56 -0
  218. package/src/domain-packs/token-resolver.ts +126 -0
  219. package/src/domain-packs/types.ts +229 -0
  220. package/src/engine/__tests__/register-engine.test.ts +104 -0
  221. package/src/engine/bin/soleri-engine.ts +217 -0
  222. package/src/engine/core-ops.ts +178 -0
  223. package/src/engine/index.ts +19 -0
  224. package/src/engine/register-engine.ts +385 -0
  225. package/src/engine/test-helpers.ts +83 -0
  226. package/src/flows/context-router.ts +257 -0
  227. package/src/flows/dispatch-registry.ts +80 -0
  228. package/src/flows/epilogue.ts +65 -0
  229. package/src/flows/executor.ts +182 -0
  230. package/src/flows/gate-evaluator.ts +171 -0
  231. package/src/flows/index.ts +52 -0
  232. package/src/flows/loader.ts +63 -0
  233. package/src/flows/plan-builder.ts +250 -0
  234. package/src/flows/probes.ts +70 -0
  235. package/src/flows/types.ts +217 -0
  236. package/src/index.ts +68 -1
  237. package/src/intelligence/loader.ts +96 -5
  238. package/src/intelligence/types.ts +1 -0
  239. package/src/packs/types.ts +19 -0
  240. package/src/playbooks/generic/onboarding.ts +79 -0
  241. package/src/playbooks/playbook-registry.ts +2 -0
  242. package/src/runtime/admin-extra-ops.ts +14 -8
  243. package/src/runtime/admin-ops.ts +4 -4
  244. package/src/runtime/capture-ops.ts +40 -1
  245. package/src/runtime/domain-ops.ts +92 -7
  246. package/src/runtime/facades/cognee-facade.ts +3 -1
  247. package/src/runtime/facades/index.ts +12 -6
  248. package/src/runtime/facades/vault-facade.ts +2 -0
  249. package/src/runtime/orchestrate-ops.ts +271 -62
  250. package/src/runtime/runtime.ts +27 -18
  251. package/src/runtime/types.ts +6 -2
  252. package/src/runtime/vault-linking-ops.ts +454 -0
  253. package/src/vault/linking.ts +333 -0
  254. package/src/vault/vault-types.ts +46 -0
  255. package/src/vault/vault.ts +94 -7
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Domain-level CLAUDE.md injection for domain packs.
3
+ *
4
+ * Each pack can inject behavioral rules under its own marker:
5
+ * <!-- domain:packName --> ... <!-- /domain:packName -->
6
+ *
7
+ * Injection is idempotent — existing content between markers is replaced.
8
+ */
9
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs';
10
+ const OPEN_MARKER = (name) => `<!-- domain:${name} -->`;
11
+ const CLOSE_MARKER = (name) => `<!-- /domain:${name} -->`;
12
+ /**
13
+ * Inject domain rules into a CLAUDE.md file.
14
+ *
15
+ * @param filePath - Path to CLAUDE.md
16
+ * @param packName - Domain pack name (used in markers)
17
+ * @param rulesContent - Markdown content to inject
18
+ */
19
+ export function injectDomainRules(filePath, packName, rulesContent) {
20
+ if (!rulesContent || rulesContent.trim().length === 0)
21
+ return;
22
+ const open = OPEN_MARKER(packName);
23
+ const close = CLOSE_MARKER(packName);
24
+ const block = `${open}\n${rulesContent.trim()}\n${close}`;
25
+ if (!existsSync(filePath)) {
26
+ writeFileSync(filePath, block + '\n', 'utf-8');
27
+ return;
28
+ }
29
+ let content = readFileSync(filePath, 'utf-8');
30
+ // Replace existing block if present (idempotent)
31
+ const openIdx = content.indexOf(open);
32
+ const closeIdx = content.indexOf(close);
33
+ if (openIdx !== -1 && closeIdx !== -1) {
34
+ const before = content.slice(0, openIdx);
35
+ const after = content.slice(closeIdx + close.length);
36
+ content = before + block + after;
37
+ }
38
+ else {
39
+ // Append at end
40
+ content = content.trimEnd() + '\n\n' + block + '\n';
41
+ }
42
+ writeFileSync(filePath, content, 'utf-8');
43
+ }
44
+ /**
45
+ * Remove domain rules from a CLAUDE.md file.
46
+ *
47
+ * @param filePath - Path to CLAUDE.md
48
+ * @param packName - Domain pack name
49
+ */
50
+ export function removeDomainRules(filePath, packName) {
51
+ if (!existsSync(filePath))
52
+ return;
53
+ const open = OPEN_MARKER(packName);
54
+ const close = CLOSE_MARKER(packName);
55
+ let content = readFileSync(filePath, 'utf-8');
56
+ const openIdx = content.indexOf(open);
57
+ const closeIdx = content.indexOf(close);
58
+ if (openIdx !== -1 && closeIdx !== -1) {
59
+ const before = content.slice(0, openIdx);
60
+ const after = content.slice(closeIdx + close.length);
61
+ content = (before + after).replace(/\n{3,}/g, '\n\n');
62
+ writeFileSync(filePath, content, 'utf-8');
63
+ }
64
+ }
65
+ //# sourceMappingURL=inject-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-rules.js","sourceRoot":"","sources":["../../src/domain-packs/inject-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAElE,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,eAAe,IAAI,MAAM,CAAC;AAChE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,gBAAgB,IAAI,MAAM,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAgB,EAAE,YAAoB;IACxF,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE9D,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE9C,iDAAiD;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,gBAAgB;QAChB,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IACtD,CAAC;IAED,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAClE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO;IAElC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAErC,IAAI,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACtD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Three-tier knowledge installer for domain packs.
3
+ *
4
+ * Respects KnowledgeManifest tiers:
5
+ * - canonical/: seed_canonical (immutable, highest authority)
6
+ * - curated/: import via vault (curator-eligible)
7
+ * - captured/: import via vault (tier=captured)
8
+ *
9
+ * All entries tagged with origin=pack and source=packName.
10
+ */
11
+ import type { AgentRuntime } from '../runtime/types.js';
12
+ import type { DomainPack } from './types.js';
13
+ export interface KnowledgeInstallResult {
14
+ canonical: number;
15
+ curated: number;
16
+ captured: number;
17
+ skipped: number;
18
+ }
19
+ /**
20
+ * Install knowledge from a domain pack into the agent's vault.
21
+ *
22
+ * @param pack - The domain pack with knowledge manifest
23
+ * @param runtime - Agent runtime with vault access
24
+ * @param rootDir - Absolute path to the pack's root directory
25
+ */
26
+ export declare function installKnowledge(pack: DomainPack, runtime: AgentRuntime, rootDir: string): Promise<KnowledgeInstallResult>;
27
+ //# sourceMappingURL=knowledge-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-installer.d.ts","sourceRoot":"","sources":["../../src/domain-packs/knowledge-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,sBAAsB,CAAC,CAiDjC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Three-tier knowledge installer for domain packs.
3
+ *
4
+ * Respects KnowledgeManifest tiers:
5
+ * - canonical/: seed_canonical (immutable, highest authority)
6
+ * - curated/: import via vault (curator-eligible)
7
+ * - captured/: import via vault (tier=captured)
8
+ *
9
+ * All entries tagged with origin=pack and source=packName.
10
+ */
11
+ import { readdirSync, readFileSync, existsSync } from 'node:fs';
12
+ import { join, resolve } from 'node:path';
13
+ /**
14
+ * Install knowledge from a domain pack into the agent's vault.
15
+ *
16
+ * @param pack - The domain pack with knowledge manifest
17
+ * @param runtime - Agent runtime with vault access
18
+ * @param rootDir - Absolute path to the pack's root directory
19
+ */
20
+ export async function installKnowledge(pack, runtime, rootDir) {
21
+ const result = { canonical: 0, curated: 0, captured: 0, skipped: 0 };
22
+ if (!pack.knowledge)
23
+ return result;
24
+ const { vault } = runtime;
25
+ const knowledge = pack.knowledge;
26
+ // Tier 1: Canonical (immutable)
27
+ if (knowledge.canonical) {
28
+ const dir = resolve(rootDir, knowledge.canonical);
29
+ if (existsSync(dir)) {
30
+ const count = importMarkdownEntries(vault, dir, {
31
+ tier: 'canonical',
32
+ origin: 'pack',
33
+ source: pack.name,
34
+ immutable: true,
35
+ });
36
+ result.canonical = count;
37
+ }
38
+ }
39
+ // Tier 2: Curated (grooming-eligible)
40
+ if (knowledge.curated) {
41
+ const dir = resolve(rootDir, knowledge.curated);
42
+ if (existsSync(dir)) {
43
+ const count = importMarkdownEntries(vault, dir, {
44
+ tier: 'curated',
45
+ origin: 'pack',
46
+ source: pack.name,
47
+ });
48
+ result.curated = count;
49
+ }
50
+ }
51
+ // Tier 3: Captured (seed learnings)
52
+ if (knowledge.captured) {
53
+ const dir = resolve(rootDir, knowledge.captured);
54
+ if (existsSync(dir)) {
55
+ const count = importMarkdownEntries(vault, dir, {
56
+ tier: 'captured',
57
+ origin: 'pack',
58
+ source: pack.name,
59
+ });
60
+ result.captured = count;
61
+ }
62
+ }
63
+ return result;
64
+ }
65
+ /** Import markdown files from a directory into the vault. */
66
+ function importMarkdownEntries(vault, dir, meta) {
67
+ const files = readdirSync(dir).filter((f) => f.endsWith('.md'));
68
+ let imported = 0;
69
+ for (const file of files) {
70
+ const content = readFileSync(join(dir, file), 'utf-8');
71
+ const id = `pack-${meta.source}-${file.replace(/\.md$/, '')}`;
72
+ // Skip if canonical entry already exists (immutable = never overwrite)
73
+ if (meta.immutable && vault.get(id))
74
+ continue;
75
+ vault.add({
76
+ id,
77
+ type: 'pattern',
78
+ title: file.replace(/\.md$/, '').replace(/-/g, ' '),
79
+ description: content.slice(0, 200),
80
+ severity: 'suggestion',
81
+ tags: [`pack:${meta.source}`, `tier:${meta.tier}`],
82
+ domain: meta.source,
83
+ origin: meta.origin,
84
+ });
85
+ imported++;
86
+ }
87
+ return imported;
88
+ }
89
+ //# sourceMappingURL=knowledge-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-installer.js","sourceRoot":"","sources":["../../src/domain-packs/knowledge-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAW1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAgB,EAChB,OAAqB,EACrB,OAAe;IAEf,MAAM,MAAM,GAA2B,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAE7F,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC;IAEnC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAEjC,gCAAgC;IAChC,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC9C,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC9C,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC9C,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC,CAAC;YACH,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6DAA6D;AAC7D,SAAS,qBAAqB,CAC5B,KAA4B,EAC5B,GAAW,EACX,IAA2E;IAE3E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAE9D,uEAAuE;QACvE,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAE9C,KAAK,CAAC,GAAG,CAAC;YACR,EAAE;YACF,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YACnD,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAClC,QAAQ,EAAE,YAAY;YACtB,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAmC;SACjD,CAAC,CAAC;QACH,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Domain Pack loader — resolves, validates, and dependency-sorts domain packs.
3
+ */
4
+ import type { DomainPack, DomainPackManifest, DomainPackRef } from './types.js';
5
+ /**
6
+ * Load a single domain pack from an npm package.
7
+ *
8
+ * @param packageName - npm package name (e.g., '@soleri/domain-design')
9
+ * @returns Validated DomainPackManifest
10
+ * @throws If package cannot be imported or fails validation
11
+ */
12
+ export declare function loadDomainPack(packageName: string): Promise<DomainPackManifest>;
13
+ /**
14
+ * Load all domain packs from AgentConfig refs.
15
+ *
16
+ * @param refs - Array of DomainPackRef from agent config
17
+ * @returns Validated and dependency-sorted packs
18
+ */
19
+ export declare function loadDomainPacksFromConfig(refs: DomainPackRef[]): Promise<DomainPackManifest[]>;
20
+ /**
21
+ * Topological sort of domain packs by their `requires` field.
22
+ *
23
+ * @param packs - Array of domain packs (validated)
24
+ * @returns Sorted array (dependencies before dependents)
25
+ * @throws On circular dependencies or missing dependencies
26
+ */
27
+ export declare function resolveDependencies<T extends DomainPack>(packs: T[]): T[];
28
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/domain-packs/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyBrF;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,aAAa,EAAE,GACpB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAG/B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CA8DzE"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Domain Pack loader — resolves, validates, and dependency-sorts domain packs.
3
+ */
4
+ import { validateDomainPack } from './types.js';
5
+ /**
6
+ * Load a single domain pack from an npm package.
7
+ *
8
+ * @param packageName - npm package name (e.g., '@soleri/domain-design')
9
+ * @returns Validated DomainPackManifest
10
+ * @throws If package cannot be imported or fails validation
11
+ */
12
+ export async function loadDomainPack(packageName) {
13
+ let mod;
14
+ try {
15
+ mod = await import(packageName);
16
+ }
17
+ catch (err) {
18
+ throw new Error(`Failed to import domain pack "${packageName}": ${err instanceof Error ? err.message : String(err)}`, { cause: err });
19
+ }
20
+ // Support both default export and named 'pack' export
21
+ const packCandidate = mod.default ?? mod.pack;
22
+ if (!packCandidate) {
23
+ throw new Error(`Domain pack "${packageName}" has no default or named "pack" export.`);
24
+ }
25
+ const result = validateDomainPack(packCandidate);
26
+ if (!result.success) {
27
+ throw new Error(`Domain pack "${packageName}" failed validation: ${result.errors.message}`);
28
+ }
29
+ return {
30
+ ...result.data,
31
+ packageName,
32
+ };
33
+ }
34
+ /**
35
+ * Load all domain packs from AgentConfig refs.
36
+ *
37
+ * @param refs - Array of DomainPackRef from agent config
38
+ * @returns Validated and dependency-sorted packs
39
+ */
40
+ export async function loadDomainPacksFromConfig(refs) {
41
+ const packs = await Promise.all(refs.map((ref) => loadDomainPack(ref.package)));
42
+ return resolveDependencies(packs);
43
+ }
44
+ /**
45
+ * Topological sort of domain packs by their `requires` field.
46
+ *
47
+ * @param packs - Array of domain packs (validated)
48
+ * @returns Sorted array (dependencies before dependents)
49
+ * @throws On circular dependencies or missing dependencies
50
+ */
51
+ export function resolveDependencies(packs) {
52
+ const byName = new Map();
53
+ for (const pack of packs) {
54
+ byName.set(pack.name, pack);
55
+ }
56
+ // Check for missing dependencies
57
+ for (const pack of packs) {
58
+ if (pack.requires) {
59
+ for (const dep of pack.requires) {
60
+ if (!byName.has(dep)) {
61
+ throw new Error(`Domain pack "${pack.name}" requires "${dep}" but it was not found in the loaded packs.`);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ // Kahn's algorithm for topological sort
67
+ const inDegree = new Map();
68
+ const adjList = new Map();
69
+ for (const pack of packs) {
70
+ inDegree.set(pack.name, 0);
71
+ adjList.set(pack.name, []);
72
+ }
73
+ for (const pack of packs) {
74
+ if (pack.requires) {
75
+ for (const dep of pack.requires) {
76
+ adjList.get(dep).push(pack.name);
77
+ inDegree.set(pack.name, (inDegree.get(pack.name) ?? 0) + 1);
78
+ }
79
+ }
80
+ }
81
+ const queue = [];
82
+ for (const [name, degree] of inDegree) {
83
+ if (degree === 0)
84
+ queue.push(name);
85
+ }
86
+ const sorted = [];
87
+ while (queue.length > 0) {
88
+ const current = queue.shift();
89
+ sorted.push(byName.get(current));
90
+ for (const dependent of adjList.get(current) ?? []) {
91
+ const newDegree = (inDegree.get(dependent) ?? 1) - 1;
92
+ inDegree.set(dependent, newDegree);
93
+ if (newDegree === 0)
94
+ queue.push(dependent);
95
+ }
96
+ }
97
+ if (sorted.length !== packs.length) {
98
+ const remaining = packs
99
+ .filter((p) => !sorted.some((s) => s.name === p.name))
100
+ .map((p) => p.name);
101
+ throw new Error(`Circular dependency detected among domain packs: ${remaining.join(', ')}`);
102
+ }
103
+ return sorted;
104
+ }
105
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/domain-packs/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * PackRuntime — the subset of AgentRuntime available to domain packs.
3
+ *
4
+ * Domain packs receive this via onActivate(runtime). It exposes only what
5
+ * packs need: vault search, project registry, and session store.
6
+ * Packs should NOT depend on the full AgentRuntime interface.
7
+ */
8
+ import type { Vault } from '../vault/vault.js';
9
+ /**
10
+ * Minimal project context for token resolution.
11
+ * Matches the shape of ProjectRegistry entries.
12
+ */
13
+ export interface PackProjectContext {
14
+ id: string;
15
+ name: string;
16
+ path: string;
17
+ colors?: {
18
+ [scale: string]: {
19
+ scale: Record<string, string>;
20
+ base: string;
21
+ };
22
+ };
23
+ semanticTokens?: Record<string, string>;
24
+ }
25
+ /**
26
+ * Session check for tool chaining (contrast → component create).
27
+ */
28
+ export interface PackCheckContext {
29
+ id: string;
30
+ type: string;
31
+ data: Record<string, unknown>;
32
+ timestamp: number;
33
+ }
34
+ /**
35
+ * The runtime interface domain packs receive via onActivate.
36
+ *
37
+ * Designed for graceful degradation: packs work without runtime
38
+ * (simplified mode), but gain full power when connected.
39
+ */
40
+ export interface PackRuntime {
41
+ /** Vault for knowledge search and capture */
42
+ vault: Vault;
43
+ /** Get a registered project by ID (for token resolution) */
44
+ getProject(projectId: string): PackProjectContext | undefined;
45
+ /** List all registered projects */
46
+ listProjects(): Array<{
47
+ id: string;
48
+ name: string;
49
+ path: string;
50
+ }>;
51
+ /** Create a session check (for tool chaining) */
52
+ createCheck(type: string, data: Record<string, unknown>): string;
53
+ /** Validate a session check */
54
+ validateCheck(checkId: string, expectedType: string): PackCheckContext | null;
55
+ /** Validate and consume a session check (single-use) */
56
+ validateAndConsume(checkId: string, expectedType: string): PackCheckContext | null;
57
+ }
58
+ /**
59
+ * Create a PackRuntime from an AgentRuntime.
60
+ *
61
+ * This adapter extracts the subset of runtime that packs need,
62
+ * avoiding tight coupling to the full AgentRuntime interface.
63
+ */
64
+ export declare function createPackRuntime(runtime: {
65
+ vault: Vault;
66
+ projectRegistry: {
67
+ getProject(id: string): PackProjectContext | undefined;
68
+ listProjects(): Array<{
69
+ id: string;
70
+ name: string;
71
+ path: string;
72
+ }>;
73
+ };
74
+ sessionStore?: {
75
+ createCheck(type: string, data: Record<string, unknown>): string;
76
+ validateCheck(id: string, type: string): PackCheckContext | null;
77
+ validateAndConsume(id: string, type: string): PackCheckContext | null;
78
+ };
79
+ }): PackRuntime;
80
+ //# sourceMappingURL=pack-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-runtime.d.ts","sourceRoot":"","sources":["../../src/domain-packs/pack-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QACP,CAAC,KAAK,EAAE,MAAM,GAAG;YACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9B,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,KAAK,EAAE,KAAK,CAAC;IAEb,4DAA4D;IAC5D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAE9D,mCAAmC;IACnC,YAAY,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAElE,iDAAiD;IACjD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAEjE,+BAA+B;IAC/B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAE9E,wDAAwD;IACxD,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;CACpF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,EAAE;QACf,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;QACvD,YAAY,IAAI,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACnE,CAAC;IACF,YAAY,CAAC,EAAE;QACb,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;QACjE,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;QACjE,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;KACvE,CAAC;CACH,GAAG,WAAW,CAkBd"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * PackRuntime — the subset of AgentRuntime available to domain packs.
3
+ *
4
+ * Domain packs receive this via onActivate(runtime). It exposes only what
5
+ * packs need: vault search, project registry, and session store.
6
+ * Packs should NOT depend on the full AgentRuntime interface.
7
+ */
8
+ /**
9
+ * Create a PackRuntime from an AgentRuntime.
10
+ *
11
+ * This adapter extracts the subset of runtime that packs need,
12
+ * avoiding tight coupling to the full AgentRuntime interface.
13
+ */
14
+ export function createPackRuntime(runtime) {
15
+ return {
16
+ vault: runtime.vault,
17
+ getProject: (id) => runtime.projectRegistry.getProject(id),
18
+ listProjects: () => runtime.projectRegistry.listProjects(),
19
+ createCheck: (type, data) => {
20
+ if (!runtime.sessionStore)
21
+ throw new Error('Session store not available');
22
+ return runtime.sessionStore.createCheck(type, data);
23
+ },
24
+ validateCheck: (id, type) => {
25
+ if (!runtime.sessionStore)
26
+ return null;
27
+ return runtime.sessionStore.validateCheck(id, type);
28
+ },
29
+ validateAndConsume: (id, type) => {
30
+ if (!runtime.sessionStore)
31
+ return null;
32
+ return runtime.sessionStore.validateAndConsume(id, type);
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=pack-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-runtime.js","sourceRoot":"","sources":["../../src/domain-packs/pack-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyDH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAWjC;IACC,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,EAAE;QAC1D,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC1E,OAAO,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,aAAa,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC;YACvC,OAAO,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,kBAAkB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC;YACvC,OAAO,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Skills installer for domain packs.
3
+ *
4
+ * Copies skill .md files from the pack to the agent's skills directory.
5
+ * Does not overwrite existing skills unless force flag is set.
6
+ */
7
+ import type { DomainPack } from './types.js';
8
+ export interface SkillsInstallResult {
9
+ installed: number;
10
+ skipped: number;
11
+ }
12
+ /**
13
+ * Install skills from a domain pack.
14
+ *
15
+ * @param pack - The domain pack with skills
16
+ * @param targetDir - Agent's skills directory
17
+ * @param rootDir - Absolute path to the pack's root directory
18
+ * @param force - Overwrite existing skills if true
19
+ */
20
+ export declare function installSkills(pack: DomainPack, targetDir: string, rootDir: string, force?: boolean): SkillsInstallResult;
21
+ //# sourceMappingURL=skills-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-installer.d.ts","sourceRoot":"","sources":["../../src/domain-packs/skills-installer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,UAAQ,GACZ,mBAAmB,CA0BrB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Skills installer for domain packs.
3
+ *
4
+ * Copies skill .md files from the pack to the agent's skills directory.
5
+ * Does not overwrite existing skills unless force flag is set.
6
+ */
7
+ import { existsSync, copyFileSync, mkdirSync } from 'node:fs';
8
+ import { join, resolve } from 'node:path';
9
+ /**
10
+ * Install skills from a domain pack.
11
+ *
12
+ * @param pack - The domain pack with skills
13
+ * @param targetDir - Agent's skills directory
14
+ * @param rootDir - Absolute path to the pack's root directory
15
+ * @param force - Overwrite existing skills if true
16
+ */
17
+ export function installSkills(pack, targetDir, rootDir, force = false) {
18
+ const result = { installed: 0, skipped: 0 };
19
+ if (!pack.skills || pack.skills.length === 0)
20
+ return result;
21
+ mkdirSync(targetDir, { recursive: true });
22
+ for (const skill of pack.skills) {
23
+ const sourcePath = resolve(rootDir, skill.path);
24
+ const targetPath = join(targetDir, `${skill.name}.md`);
25
+ if (!existsSync(sourcePath)) {
26
+ result.skipped++;
27
+ continue;
28
+ }
29
+ if (existsSync(targetPath) && !force) {
30
+ result.skipped++;
31
+ continue;
32
+ }
33
+ copyFileSync(sourcePath, targetPath);
34
+ result.installed++;
35
+ }
36
+ return result;
37
+ }
38
+ //# sourceMappingURL=skills-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-installer.js","sourceRoot":"","sources":["../../src/domain-packs/skills-installer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQ1C;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAgB,EAChB,SAAiB,EACjB,OAAe,EACf,KAAK,GAAG,KAAK;IAEb,MAAM,MAAM,GAAwB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAEjE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAE5D,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * TokenResolver — resolves design token names to hex values.
3
+ *
4
+ * Ported from Salvador MCP src/registry/token-resolver.ts.
5
+ * Supports: #HEX passthrough, SCALE[SHADE] (e.g., PRIMARY[500]),
6
+ * Tailwind classes (bg-primary-500), semantic tokens (text-inverse),
7
+ * and named colors (white, black).
8
+ *
9
+ * Stateless — create per-invocation with a ProjectContext.
10
+ */
11
+ import type { PackProjectContext } from './pack-runtime.js';
12
+ /**
13
+ * Resolve a token or color reference to a hex value.
14
+ *
15
+ * @param tokenOrHex - Token name, hex value, or color reference
16
+ * @param project - Project context with color scales and semantic tokens
17
+ * @returns Uppercase hex string (e.g., "#DC0000")
18
+ * @throws If the token cannot be resolved
19
+ */
20
+ export declare function resolveToken(tokenOrHex: string, project: PackProjectContext): string;
21
+ /**
22
+ * List all tokens available in a project.
23
+ *
24
+ * @param project - Project context
25
+ * @returns Array of { token, hex, scale } for all scale + semantic tokens
26
+ */
27
+ export declare function listProjectTokens(project: PackProjectContext): Array<{
28
+ token: string;
29
+ hex: string;
30
+ scale: string;
31
+ }>;
32
+ /**
33
+ * Build a reverse index: hex → token name.
34
+ * Useful for detecting hardcoded colors.
35
+ */
36
+ export declare function buildReverseIndex(project: PackProjectContext): Map<string, string>;
37
+ //# sourceMappingURL=token-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-resolver.d.ts","sourceRoot":"","sources":["../../src/domain-packs/token-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQ5D;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA+BpF;AAsBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBtD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlF"}