@soleri/core 9.5.0 → 9.7.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 (249) hide show
  1. package/dist/adapters/claude-code-adapter.d.ts +27 -0
  2. package/dist/adapters/claude-code-adapter.d.ts.map +1 -0
  3. package/dist/adapters/claude-code-adapter.js +111 -0
  4. package/dist/adapters/claude-code-adapter.js.map +1 -0
  5. package/dist/adapters/index.d.ts +9 -0
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/index.js +10 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/adapters/registry.d.ts +21 -0
  10. package/dist/adapters/registry.d.ts.map +1 -0
  11. package/dist/adapters/registry.js +44 -0
  12. package/dist/adapters/registry.js.map +1 -0
  13. package/dist/adapters/types.d.ts +93 -0
  14. package/dist/adapters/types.d.ts.map +1 -0
  15. package/dist/adapters/types.js +10 -0
  16. package/dist/adapters/types.js.map +1 -0
  17. package/dist/brain/brain.d.ts +12 -1
  18. package/dist/brain/brain.d.ts.map +1 -1
  19. package/dist/brain/brain.js +106 -44
  20. package/dist/brain/brain.js.map +1 -1
  21. package/dist/brain/intelligence.d.ts.map +1 -1
  22. package/dist/brain/intelligence.js +36 -30
  23. package/dist/brain/intelligence.js.map +1 -1
  24. package/dist/chat/agent-loop.js +1 -1
  25. package/dist/chat/agent-loop.js.map +1 -1
  26. package/dist/chat/notifications.d.ts.map +1 -1
  27. package/dist/chat/notifications.js +4 -0
  28. package/dist/chat/notifications.js.map +1 -1
  29. package/dist/control/intent-router.d.ts +1 -0
  30. package/dist/control/intent-router.d.ts.map +1 -1
  31. package/dist/control/intent-router.js +11 -5
  32. package/dist/control/intent-router.js.map +1 -1
  33. package/dist/curator/curator.d.ts +4 -0
  34. package/dist/curator/curator.d.ts.map +1 -1
  35. package/dist/curator/curator.js +141 -27
  36. package/dist/curator/curator.js.map +1 -1
  37. package/dist/index.d.ts +22 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +18 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/llm/llm-client.d.ts.map +1 -1
  42. package/dist/llm/llm-client.js +1 -0
  43. package/dist/llm/llm-client.js.map +1 -1
  44. package/dist/packs/index.d.ts +3 -2
  45. package/dist/packs/index.d.ts.map +1 -1
  46. package/dist/packs/index.js +3 -2
  47. package/dist/packs/index.js.map +1 -1
  48. package/dist/packs/lockfile.d.ts +23 -1
  49. package/dist/packs/lockfile.d.ts.map +1 -1
  50. package/dist/packs/lockfile.js +50 -4
  51. package/dist/packs/lockfile.js.map +1 -1
  52. package/dist/packs/pack-installer.d.ts +10 -0
  53. package/dist/packs/pack-installer.d.ts.map +1 -1
  54. package/dist/packs/pack-installer.js +69 -2
  55. package/dist/packs/pack-installer.js.map +1 -1
  56. package/dist/packs/pack-lifecycle.d.ts +50 -0
  57. package/dist/packs/pack-lifecycle.d.ts.map +1 -0
  58. package/dist/packs/pack-lifecycle.js +91 -0
  59. package/dist/packs/pack-lifecycle.js.map +1 -0
  60. package/dist/packs/types.d.ts +76 -29
  61. package/dist/packs/types.d.ts.map +1 -1
  62. package/dist/packs/types.js +9 -0
  63. package/dist/packs/types.js.map +1 -1
  64. package/dist/persistence/sqlite-provider.d.ts +5 -1
  65. package/dist/persistence/sqlite-provider.d.ts.map +1 -1
  66. package/dist/persistence/sqlite-provider.js +22 -2
  67. package/dist/persistence/sqlite-provider.js.map +1 -1
  68. package/dist/planning/github-projection.d.ts +11 -9
  69. package/dist/planning/github-projection.d.ts.map +1 -1
  70. package/dist/planning/github-projection.js +47 -43
  71. package/dist/planning/github-projection.js.map +1 -1
  72. package/dist/planning/goal-ancestry.d.ts +72 -0
  73. package/dist/planning/goal-ancestry.d.ts.map +1 -0
  74. package/dist/planning/goal-ancestry.js +137 -0
  75. package/dist/planning/goal-ancestry.js.map +1 -0
  76. package/dist/planning/plan-lifecycle.d.ts +2 -0
  77. package/dist/planning/plan-lifecycle.d.ts.map +1 -1
  78. package/dist/planning/plan-lifecycle.js +1 -0
  79. package/dist/planning/plan-lifecycle.js.map +1 -1
  80. package/dist/planning/planner-types.d.ts +2 -0
  81. package/dist/planning/planner-types.d.ts.map +1 -1
  82. package/dist/plugins/types.d.ts +21 -21
  83. package/dist/queue/pipeline-runner.d.ts.map +1 -1
  84. package/dist/queue/pipeline-runner.js +4 -0
  85. package/dist/queue/pipeline-runner.js.map +1 -1
  86. package/dist/runtime/context-health.d.ts +14 -1
  87. package/dist/runtime/context-health.d.ts.map +1 -1
  88. package/dist/runtime/context-health.js +30 -2
  89. package/dist/runtime/context-health.js.map +1 -1
  90. package/dist/runtime/curator-extra-ops.d.ts.map +1 -1
  91. package/dist/runtime/curator-extra-ops.js +9 -1
  92. package/dist/runtime/curator-extra-ops.js.map +1 -1
  93. package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
  94. package/dist/runtime/facades/memory-facade.js +169 -0
  95. package/dist/runtime/facades/memory-facade.js.map +1 -1
  96. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  97. package/dist/runtime/orchestrate-ops.js +133 -4
  98. package/dist/runtime/orchestrate-ops.js.map +1 -1
  99. package/dist/runtime/runtime.d.ts.map +1 -1
  100. package/dist/runtime/runtime.js +128 -90
  101. package/dist/runtime/runtime.js.map +1 -1
  102. package/dist/runtime/session-briefing.d.ts.map +1 -1
  103. package/dist/runtime/session-briefing.js +44 -11
  104. package/dist/runtime/session-briefing.js.map +1 -1
  105. package/dist/runtime/shutdown-registry.d.ts +36 -0
  106. package/dist/runtime/shutdown-registry.d.ts.map +1 -0
  107. package/dist/runtime/shutdown-registry.js +74 -0
  108. package/dist/runtime/shutdown-registry.js.map +1 -0
  109. package/dist/runtime/types.d.ts +10 -1
  110. package/dist/runtime/types.d.ts.map +1 -1
  111. package/dist/session/compaction-evaluator.d.ts +20 -0
  112. package/dist/session/compaction-evaluator.d.ts.map +1 -0
  113. package/dist/session/compaction-evaluator.js +73 -0
  114. package/dist/session/compaction-evaluator.js.map +1 -0
  115. package/dist/session/compaction-policy.d.ts +50 -0
  116. package/dist/session/compaction-policy.d.ts.map +1 -0
  117. package/dist/session/compaction-policy.js +17 -0
  118. package/dist/session/compaction-policy.js.map +1 -0
  119. package/dist/session/handoff-renderer.d.ts +22 -0
  120. package/dist/session/handoff-renderer.d.ts.map +1 -0
  121. package/dist/session/handoff-renderer.js +49 -0
  122. package/dist/session/handoff-renderer.js.map +1 -0
  123. package/dist/session/index.d.ts +6 -0
  124. package/dist/session/index.d.ts.map +1 -0
  125. package/dist/session/index.js +5 -0
  126. package/dist/session/index.js.map +1 -0
  127. package/dist/session/policy-resolver.d.ts +20 -0
  128. package/dist/session/policy-resolver.d.ts.map +1 -0
  129. package/dist/session/policy-resolver.js +28 -0
  130. package/dist/session/policy-resolver.js.map +1 -0
  131. package/dist/skills/sync-skills.d.ts +27 -0
  132. package/dist/skills/sync-skills.d.ts.map +1 -1
  133. package/dist/skills/sync-skills.js +92 -1
  134. package/dist/skills/sync-skills.js.map +1 -1
  135. package/dist/skills/trust-classifier.d.ts +32 -0
  136. package/dist/skills/trust-classifier.d.ts.map +1 -0
  137. package/dist/skills/trust-classifier.js +109 -0
  138. package/dist/skills/trust-classifier.js.map +1 -0
  139. package/dist/subagent/concurrency-manager.d.ts +29 -0
  140. package/dist/subagent/concurrency-manager.d.ts.map +1 -0
  141. package/dist/subagent/concurrency-manager.js +73 -0
  142. package/dist/subagent/concurrency-manager.js.map +1 -0
  143. package/dist/subagent/dispatcher.d.ts +45 -0
  144. package/dist/subagent/dispatcher.d.ts.map +1 -0
  145. package/dist/subagent/dispatcher.js +271 -0
  146. package/dist/subagent/dispatcher.js.map +1 -0
  147. package/dist/subagent/index.d.ts +14 -0
  148. package/dist/subagent/index.d.ts.map +1 -0
  149. package/dist/subagent/index.js +15 -0
  150. package/dist/subagent/index.js.map +1 -0
  151. package/dist/subagent/orphan-reaper.d.ts +37 -0
  152. package/dist/subagent/orphan-reaper.d.ts.map +1 -0
  153. package/dist/subagent/orphan-reaper.js +71 -0
  154. package/dist/subagent/orphan-reaper.js.map +1 -0
  155. package/dist/subagent/result-aggregator.d.ts +7 -0
  156. package/dist/subagent/result-aggregator.d.ts.map +1 -0
  157. package/dist/subagent/result-aggregator.js +57 -0
  158. package/dist/subagent/result-aggregator.js.map +1 -0
  159. package/dist/subagent/task-checkout.d.ts +36 -0
  160. package/dist/subagent/task-checkout.d.ts.map +1 -0
  161. package/dist/subagent/task-checkout.js +52 -0
  162. package/dist/subagent/task-checkout.js.map +1 -0
  163. package/dist/subagent/types.d.ts +114 -0
  164. package/dist/subagent/types.d.ts.map +1 -0
  165. package/dist/subagent/types.js +9 -0
  166. package/dist/subagent/types.js.map +1 -0
  167. package/dist/subagent/workspace-resolver.d.ts +35 -0
  168. package/dist/subagent/workspace-resolver.d.ts.map +1 -0
  169. package/dist/subagent/workspace-resolver.js +99 -0
  170. package/dist/subagent/workspace-resolver.js.map +1 -0
  171. package/dist/transport/http-server.d.ts.map +1 -1
  172. package/dist/transport/http-server.js +49 -3
  173. package/dist/transport/http-server.js.map +1 -1
  174. package/dist/transport/ws-server.d.ts.map +1 -1
  175. package/dist/transport/ws-server.js +7 -0
  176. package/dist/transport/ws-server.js.map +1 -1
  177. package/dist/vault/linking.d.ts +3 -4
  178. package/dist/vault/linking.d.ts.map +1 -1
  179. package/dist/vault/linking.js +79 -32
  180. package/dist/vault/linking.js.map +1 -1
  181. package/dist/vault/vault-maintenance.d.ts.map +1 -1
  182. package/dist/vault/vault-maintenance.js +7 -14
  183. package/dist/vault/vault-maintenance.js.map +1 -1
  184. package/dist/vault/vault-memories.d.ts.map +1 -1
  185. package/dist/vault/vault-memories.js +19 -9
  186. package/dist/vault/vault-memories.js.map +1 -1
  187. package/dist/vault/vault-schema.d.ts +1 -0
  188. package/dist/vault/vault-schema.d.ts.map +1 -1
  189. package/dist/vault/vault-schema.js +20 -0
  190. package/dist/vault/vault-schema.js.map +1 -1
  191. package/dist/vault/vault.d.ts.map +1 -1
  192. package/dist/vault/vault.js +7 -3
  193. package/dist/vault/vault.js.map +1 -1
  194. package/package.json +5 -2
  195. package/src/__tests__/adapters/claude-code-adapter.test.ts +167 -0
  196. package/src/__tests__/adapters/registry.test.ts +100 -0
  197. package/src/__tests__/packs/pack-lifecycle.test.ts +379 -0
  198. package/src/__tests__/subagent/concurrency-manager.test.ts +132 -0
  199. package/src/__tests__/subagent/dispatcher.test.ts +195 -0
  200. package/src/__tests__/subagent/orphan-reaper.test.ts +141 -0
  201. package/src/__tests__/subagent/result-aggregator.test.ts +141 -0
  202. package/src/__tests__/subagent/task-checkout.test.ts +86 -0
  203. package/src/__tests__/subagent/workspace-resolver.test.ts +138 -0
  204. package/src/adapters/claude-code-adapter.ts +163 -0
  205. package/src/adapters/index.ts +22 -0
  206. package/src/adapters/registry.ts +53 -0
  207. package/src/adapters/types.ts +114 -0
  208. package/src/curator/curator.ts +1 -0
  209. package/src/index.ts +78 -1
  210. package/src/packs/index.ts +9 -1
  211. package/src/packs/lockfile.ts +70 -5
  212. package/src/packs/pack-installer.ts +78 -2
  213. package/src/packs/pack-lifecycle.ts +115 -0
  214. package/src/packs/pack-lockfile.test.ts +1 -1
  215. package/src/packs/pack-system.test.ts +1 -1
  216. package/src/packs/types.ts +72 -2
  217. package/src/persistence/sqlite-provider.ts +26 -2
  218. package/src/planning/github-projection.ts +6 -0
  219. package/src/planning/goal-ancestry.test.ts +427 -0
  220. package/src/planning/goal-ancestry.ts +187 -0
  221. package/src/planning/plan-lifecycle.ts +3 -0
  222. package/src/planning/planner-types.ts +2 -0
  223. package/src/runtime/admin-setup-ops.test.ts +9 -4
  224. package/src/runtime/context-health.ts +42 -2
  225. package/src/runtime/orchestrate-ops.ts +153 -1
  226. package/src/runtime/runtime.ts +15 -0
  227. package/src/runtime/session-briefing.test.ts +94 -2
  228. package/src/runtime/session-briefing.ts +48 -12
  229. package/src/runtime/types.ts +6 -0
  230. package/src/session/compaction-evaluator.ts +87 -0
  231. package/src/session/compaction-policy.ts +66 -0
  232. package/src/session/compaction.test.ts +259 -0
  233. package/src/session/handoff-renderer.ts +56 -0
  234. package/src/session/index.ts +12 -0
  235. package/src/session/policy-resolver.ts +34 -0
  236. package/src/skills/sync-skills.ts +114 -1
  237. package/src/skills/trust-classifier.test.ts +252 -0
  238. package/src/skills/trust-classifier.ts +127 -0
  239. package/src/subagent/concurrency-manager.ts +89 -0
  240. package/src/subagent/dispatcher.ts +342 -0
  241. package/src/subagent/index.ts +28 -0
  242. package/src/subagent/orphan-reaper.ts +82 -0
  243. package/src/subagent/result-aggregator.ts +66 -0
  244. package/src/subagent/task-checkout.ts +60 -0
  245. package/src/subagent/types.ts +138 -0
  246. package/src/subagent/workspace-resolver.ts +117 -0
  247. package/src/vault/vault-scaling.test.ts +3 -2
  248. package/vitest.config.ts +2 -0
  249. package/src/hooks/index.ts +0 -6
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Policy Resolver — three-level merge for compaction policies.
3
+ *
4
+ * Merge order (highest to lowest priority):
5
+ * 1. Agent config (agent.yaml → engine.compactionPolicy)
6
+ * 2. Adapter defaults (runtime adapter may provide defaults)
7
+ * 3. Engine defaults (hardcoded fallback)
8
+ *
9
+ * Individual fields override — not whole-object replacement.
10
+ */
11
+ import { ENGINE_DEFAULTS } from './compaction-policy.js';
12
+ /**
13
+ * Resolve a final CompactionPolicy by merging three levels.
14
+ *
15
+ * Each level can provide partial overrides. Fields from higher-priority
16
+ * levels win over lower-priority ones. Missing fields fall through to
17
+ * the next level, bottoming out at ENGINE_DEFAULTS.
18
+ */
19
+ export function resolvePolicy(agentConfig, adapterDefaults) {
20
+ return {
21
+ maxRuns: agentConfig?.maxRuns ?? adapterDefaults?.maxRuns ?? ENGINE_DEFAULTS.maxRuns,
22
+ maxInputTokens: agentConfig?.maxInputTokens ??
23
+ adapterDefaults?.maxInputTokens ??
24
+ ENGINE_DEFAULTS.maxInputTokens,
25
+ maxAge: agentConfig?.maxAge ?? adapterDefaults?.maxAge ?? ENGINE_DEFAULTS.maxAge,
26
+ };
27
+ }
28
+ //# sourceMappingURL=policy-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-resolver.js","sourceRoot":"","sources":["../../src/session/policy-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,WAAuC,EACvC,eAA2C;IAE3C,OAAO;QACL,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,IAAI,eAAe,CAAC,OAAO;QACpF,cAAc,EACZ,WAAW,EAAE,cAAc;YAC3B,eAAe,EAAE,cAAc;YAC/B,eAAe,CAAC,cAAc;QAChC,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,IAAI,eAAe,CAAC,MAAM;KACjF,CAAC;AACJ,CAAC"}
@@ -5,9 +5,12 @@
5
5
  * Injects agent branding so users know which agent owns the skill.
6
6
  * Called automatically at engine startup and by admin_setup_global.
7
7
  */
8
+ import type { SkillMetadata } from '../packs/types.js';
8
9
  export interface SkillEntry {
9
10
  name: string;
10
11
  sourcePath: string;
12
+ /** Trust and source metadata (populated during classification) */
13
+ metadata?: SkillMetadata;
11
14
  }
12
15
  export interface SyncResult {
13
16
  installed: string[];
@@ -15,6 +18,13 @@ export interface SyncResult {
15
18
  skipped: string[];
16
19
  failed: string[];
17
20
  }
21
+ /** Error thrown when a skill requires approval due to scripts trust level */
22
+ export declare class ApprovalRequiredError extends Error {
23
+ readonly skillName: string;
24
+ readonly trust: 'scripts';
25
+ readonly inventory: SkillMetadata['inventory'];
26
+ constructor(skillName: string, inventory: SkillMetadata['inventory']);
27
+ }
18
28
  /** Discover skill files (SKILL.md) in skills directories */
19
29
  export declare function discoverSkills(skillsDirs: string[]): SkillEntry[];
20
30
  /**
@@ -24,4 +34,21 @@ export declare function discoverSkills(skillsDirs: string[]): SkillEntry[];
24
34
  * - Missing source skills leave target untouched (other agents may own them)
25
35
  */
26
36
  export declare function syncSkillsToClaudeCode(skillsDirs: string[], agentName?: string): SyncResult;
37
+ /**
38
+ * Check engine version compatibility for a skill.
39
+ * Returns 'compatible', 'unknown' (no version specified), or 'invalid'.
40
+ */
41
+ export declare function checkSkillCompatibility(engineVersion?: string, currentVersion?: string): 'compatible' | 'unknown' | 'invalid';
42
+ export interface ClassifySkillsOptions {
43
+ /** Current engine version for compatibility checking */
44
+ currentEngineVersion?: string;
45
+ /** Skills that have been explicitly approved for scripts trust level */
46
+ approvedScripts?: Set<string>;
47
+ }
48
+ /**
49
+ * Classify skills with trust levels and source tracking.
50
+ * Enriches SkillEntry[] with metadata. Throws ApprovalRequiredError
51
+ * for skills with 'scripts' trust unless explicitly approved.
52
+ */
53
+ export declare function classifySkills(skills: SkillEntry[], options?: ClassifySkillsOptions): SkillEntry[];
27
54
  //# sourceMappingURL=sync-skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-skills.d.ts","sourceRoot":"","sources":["../../src/skills/sync-skills.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAgBjE;AAoBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAqC3F"}
1
+ {"version":3,"file":"sync-skills.d.ts","sourceRoot":"","sources":["../../src/skills/sync-skills.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAC;AAInE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,6EAA6E;AAC7E,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;gBAEnC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC;CAarE;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAgBjE;AAoBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAqC3F;AAMD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,YAAY,GAAG,SAAS,GAAG,SAAS,CAItC;AA+BD,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,qBAA0B,GAClC,UAAU,EAAE,CAwBd"}
@@ -6,8 +6,27 @@
6
6
  * Called automatically at engine startup and by admin_setup_global.
7
7
  */
8
8
  import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, statSync } from 'node:fs';
9
- import { join } from 'node:path';
9
+ import { join, dirname } from 'node:path';
10
10
  import { homedir } from 'node:os';
11
+ import { classifyTrust } from './trust-classifier.js';
12
+ import { checkVersionCompat } from '../packs/resolver.js';
13
+ /** Error thrown when a skill requires approval due to scripts trust level */
14
+ export class ApprovalRequiredError extends Error {
15
+ skillName;
16
+ trust;
17
+ inventory;
18
+ constructor(skillName, inventory) {
19
+ super(`Skill "${skillName}" contains executable scripts and requires explicit approval. ` +
20
+ `Scripts found: ${inventory
21
+ .filter((i) => i.kind === 'script')
22
+ .map((i) => i.path)
23
+ .join(', ')}`);
24
+ this.name = 'ApprovalRequiredError';
25
+ this.skillName = skillName;
26
+ this.trust = 'scripts';
27
+ this.inventory = inventory;
28
+ }
29
+ }
11
30
  /** Discover skill files (SKILL.md) in skills directories */
12
31
  export function discoverSkills(skillsDirs) {
13
32
  const skills = [];
@@ -84,4 +103,76 @@ export function syncSkillsToClaudeCode(skillsDirs, agentName) {
84
103
  }
85
104
  return result;
86
105
  }
106
+ // =============================================================================
107
+ // TRUST CLASSIFICATION & SOURCE TRACKING
108
+ // =============================================================================
109
+ /**
110
+ * Check engine version compatibility for a skill.
111
+ * Returns 'compatible', 'unknown' (no version specified), or 'invalid'.
112
+ */
113
+ export function checkSkillCompatibility(engineVersion, currentVersion) {
114
+ if (!engineVersion)
115
+ return 'unknown';
116
+ if (!currentVersion)
117
+ return 'unknown';
118
+ return checkVersionCompat(currentVersion, engineVersion) ? 'compatible' : 'invalid';
119
+ }
120
+ /**
121
+ * Infer the source type for a skill based on its directory path.
122
+ */
123
+ function inferSourceType(skillDir) {
124
+ if (skillDir.includes('node_modules'))
125
+ return 'npm';
126
+ if (skillDir.includes('.soleri') || skillDir.includes('.salvador'))
127
+ return 'builtin';
128
+ return 'local';
129
+ }
130
+ /**
131
+ * Read engine version from a skill's SKILL.md frontmatter.
132
+ * Looks for `engine:` or `engineVersion:` in YAML frontmatter.
133
+ */
134
+ function readSkillEngineVersion(skillPath) {
135
+ try {
136
+ const content = readFileSync(skillPath, 'utf-8');
137
+ const fmStart = content.indexOf('---');
138
+ if (fmStart !== 0)
139
+ return undefined;
140
+ const fmEnd = content.indexOf('---', 3);
141
+ if (fmEnd === -1)
142
+ return undefined;
143
+ const fm = content.slice(3, fmEnd);
144
+ // eslint-disable-next-line no-control-regex
145
+ const match = fm.match(/^(?:engine|engineVersion)\s*:\s*["']?([^"'\n]+)["']?/m);
146
+ return match?.[1]?.trim();
147
+ }
148
+ catch {
149
+ return undefined;
150
+ }
151
+ }
152
+ /**
153
+ * Classify skills with trust levels and source tracking.
154
+ * Enriches SkillEntry[] with metadata. Throws ApprovalRequiredError
155
+ * for skills with 'scripts' trust unless explicitly approved.
156
+ */
157
+ export function classifySkills(skills, options = {}) {
158
+ return skills.map((skill) => {
159
+ const skillDir = dirname(skill.sourcePath);
160
+ const { trust, inventory } = classifyTrust(skillDir);
161
+ // Approval gate for scripts
162
+ if (trust === 'scripts' && !options.approvedScripts?.has(skill.name)) {
163
+ throw new ApprovalRequiredError(skill.name, inventory);
164
+ }
165
+ const engineVersion = readSkillEngineVersion(skill.sourcePath);
166
+ const sourceType = inferSourceType(skillDir);
167
+ const compatibility = checkSkillCompatibility(engineVersion, options.currentEngineVersion);
168
+ const metadata = {
169
+ trust,
170
+ source: { type: sourceType, uri: skillDir },
171
+ compatibility,
172
+ engineVersion,
173
+ inventory,
174
+ };
175
+ return { ...skill, metadata };
176
+ });
177
+ }
87
178
  //# sourceMappingURL=sync-skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-skills.js","sourceRoot":"","sources":["../../src/skills/sync-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-skills.js","sourceRoot":"","sources":["../../src/skills/sync-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Trust Classifier — scans a skill directory and determines its trust level.
3
+ *
4
+ * Classification rules:
5
+ * - `.sh`, `.ts`, `.js` files (non-declaration) -> `scripts`
6
+ * - Non-`.md` files (images, JSON, etc.) -> `assets`
7
+ * - `.md` files only -> `markdown_only`
8
+ *
9
+ * Also builds a full inventory of all files with their classified kind.
10
+ */
11
+ import type { TrustLevel, SkillInventoryItem } from '../packs/types.js';
12
+ /**
13
+ * Classify a skill directory and return its trust level and inventory.
14
+ *
15
+ * @param dirPath - Absolute path to the skill directory
16
+ * @returns Trust level and full file inventory
17
+ */
18
+ export declare function classifyTrust(dirPath: string): {
19
+ trust: TrustLevel;
20
+ inventory: SkillInventoryItem[];
21
+ };
22
+ /**
23
+ * Namespace object for backward compatibility and namespaced access.
24
+ * Delegates to standalone `classifyTrust` function.
25
+ */
26
+ export declare const TrustClassifier: {
27
+ classify(dirPath: string): Promise<{
28
+ trust: TrustLevel;
29
+ inventory: SkillInventoryItem[];
30
+ }>;
31
+ };
32
+ //# sourceMappingURL=trust-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-classifier.d.ts","sourceRoot":"","sources":["../../src/skills/trust-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAWxE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAC9C,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC,CAsBA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe;sBACR,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,kBAAkB,EAAE,CAAA;KAAE,CAAC;CAG3F,CAAC"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Trust Classifier — scans a skill directory and determines its trust level.
3
+ *
4
+ * Classification rules:
5
+ * - `.sh`, `.ts`, `.js` files (non-declaration) -> `scripts`
6
+ * - Non-`.md` files (images, JSON, etc.) -> `assets`
7
+ * - `.md` files only -> `markdown_only`
8
+ *
9
+ * Also builds a full inventory of all files with their classified kind.
10
+ */
11
+ import { existsSync, readdirSync, statSync } from 'node:fs';
12
+ import { join, extname, relative } from 'node:path';
13
+ /** File extensions that indicate executable scripts */
14
+ const SCRIPT_EXTENSIONS = new Set(['.sh', '.ts', '.js', '.mjs', '.cjs', '.py', '.rb', '.bash']);
15
+ /** File extensions considered markdown/documentation */
16
+ const MARKDOWN_EXTENSIONS = new Set(['.md', '.mdx']);
17
+ /** File extensions for TypeScript declaration files (not executable) */
18
+ const DECLARATION_PATTERN = /\.d\.[mc]?ts$/;
19
+ /**
20
+ * Classify a skill directory and return its trust level and inventory.
21
+ *
22
+ * @param dirPath - Absolute path to the skill directory
23
+ * @returns Trust level and full file inventory
24
+ */
25
+ export function classifyTrust(dirPath) {
26
+ if (!existsSync(dirPath)) {
27
+ return { trust: 'markdown_only', inventory: [] };
28
+ }
29
+ const inventory = [];
30
+ walkDir(dirPath, dirPath, inventory);
31
+ // Determine trust level from inventory
32
+ const hasScripts = inventory.some((item) => item.kind === 'script');
33
+ const hasAssets = inventory.some((item) => item.kind === 'asset');
34
+ let trust;
35
+ if (hasScripts) {
36
+ trust = 'scripts';
37
+ }
38
+ else if (hasAssets) {
39
+ trust = 'assets';
40
+ }
41
+ else {
42
+ trust = 'markdown_only';
43
+ }
44
+ return { trust, inventory };
45
+ }
46
+ /**
47
+ * Namespace object for backward compatibility and namespaced access.
48
+ * Delegates to standalone `classifyTrust` function.
49
+ */
50
+ export const TrustClassifier = {
51
+ classify(dirPath) {
52
+ return Promise.resolve(classifyTrust(dirPath));
53
+ },
54
+ };
55
+ /** Recursively walk a directory and classify all files */
56
+ function walkDir(rootDir, currentDir, inventory) {
57
+ let names;
58
+ try {
59
+ names = readdirSync(currentDir);
60
+ }
61
+ catch {
62
+ return;
63
+ }
64
+ for (const name of names) {
65
+ const fullPath = join(currentDir, name);
66
+ let stat;
67
+ try {
68
+ stat = statSync(fullPath);
69
+ }
70
+ catch {
71
+ continue;
72
+ }
73
+ if (stat.isDirectory()) {
74
+ // Skip hidden directories and node_modules
75
+ if (name.startsWith('.') || name === 'node_modules')
76
+ continue;
77
+ walkDir(rootDir, fullPath, inventory);
78
+ continue;
79
+ }
80
+ if (!stat.isFile())
81
+ continue;
82
+ const relPath = relative(rootDir, fullPath);
83
+ const ext = extname(name).toLowerCase();
84
+ const kind = classifyFile(name, ext);
85
+ inventory.push({ path: relPath, kind });
86
+ }
87
+ }
88
+ /** Classify a single file by its extension and name */
89
+ function classifyFile(fileName, ext) {
90
+ // SKILL.md is the primary skill definition
91
+ if (fileName === 'SKILL.md' || fileName === 'skill.md') {
92
+ return 'skill';
93
+ }
94
+ // Declaration files are not executable
95
+ if (DECLARATION_PATTERN.test(fileName)) {
96
+ return 'reference';
97
+ }
98
+ // Script files
99
+ if (SCRIPT_EXTENSIONS.has(ext)) {
100
+ return 'script';
101
+ }
102
+ // Markdown files are references
103
+ if (MARKDOWN_EXTENSIONS.has(ext)) {
104
+ return 'reference';
105
+ }
106
+ // Everything else is an asset
107
+ return 'asset';
108
+ }
109
+ //# sourceMappingURL=trust-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-classifier.js","sourceRoot":"","sources":["../../src/skills/trust-classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Per-agent-type semaphore for controlling concurrent subagent runs.
3
+ *
4
+ * Pure promise-based — zero external deps. FIFO ordering guarantees
5
+ * the first waiter is the first to acquire a slot when one frees up.
6
+ */
7
+ export declare class ConcurrencyManager {
8
+ private state;
9
+ /**
10
+ * Acquire a concurrency slot for the given adapter type.
11
+ * Resolves immediately if a slot is available, otherwise queues
12
+ * and resolves when a slot frees up (FIFO).
13
+ */
14
+ acquire(type: string, maxConcurrent?: number): Promise<void>;
15
+ /**
16
+ * Release a concurrency slot for the given adapter type.
17
+ * If waiters exist, the first one (FIFO) is unblocked.
18
+ * No-op if the type is not tracked.
19
+ */
20
+ release(type: string): void;
21
+ /** Return the number of active slots for a type (0 if untracked). */
22
+ getActive(type: string): number;
23
+ /** Return the number of waiters queued for a type (0 if untracked). */
24
+ getWaiting(type: string): number;
25
+ /** Clear all state, resolving any pending waiters immediately. */
26
+ reset(): void;
27
+ private getOrCreate;
28
+ }
29
+ //# sourceMappingURL=concurrency-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency-manager.d.ts","sourceRoot":"","sources":["../../src/subagent/concurrency-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAqC;IAElD;;;;OAIG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,MAA+B,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1F;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY3B,qEAAqE;IACrE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,uEAAuE;IACvE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,kEAAkE;IAClE,KAAK,IAAI,IAAI;IAab,OAAO,CAAC,WAAW;CAQpB"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Per-agent-type semaphore for controlling concurrent subagent runs.
3
+ *
4
+ * Pure promise-based — zero external deps. FIFO ordering guarantees
5
+ * the first waiter is the first to acquire a slot when one frees up.
6
+ */
7
+ const DEFAULT_MAX_CONCURRENT = 3;
8
+ export class ConcurrencyManager {
9
+ state = new Map();
10
+ /**
11
+ * Acquire a concurrency slot for the given adapter type.
12
+ * Resolves immediately if a slot is available, otherwise queues
13
+ * and resolves when a slot frees up (FIFO).
14
+ */
15
+ async acquire(type, maxConcurrent = DEFAULT_MAX_CONCURRENT) {
16
+ const entry = this.getOrCreate(type);
17
+ if (entry.active < maxConcurrent) {
18
+ entry.active++;
19
+ return;
20
+ }
21
+ // At capacity — park until a slot opens.
22
+ return new Promise((resolve) => {
23
+ entry.waiters.push(() => {
24
+ entry.active++;
25
+ resolve();
26
+ });
27
+ });
28
+ }
29
+ /**
30
+ * Release a concurrency slot for the given adapter type.
31
+ * If waiters exist, the first one (FIFO) is unblocked.
32
+ * No-op if the type is not tracked.
33
+ */
34
+ release(type) {
35
+ const entry = this.state.get(type);
36
+ if (!entry)
37
+ return;
38
+ entry.active = Math.max(0, entry.active - 1);
39
+ if (entry.waiters.length > 0) {
40
+ const next = entry.waiters.shift();
41
+ next();
42
+ }
43
+ }
44
+ /** Return the number of active slots for a type (0 if untracked). */
45
+ getActive(type) {
46
+ return this.state.get(type)?.active ?? 0;
47
+ }
48
+ /** Return the number of waiters queued for a type (0 if untracked). */
49
+ getWaiting(type) {
50
+ return this.state.get(type)?.waiters.length ?? 0;
51
+ }
52
+ /** Clear all state, resolving any pending waiters immediately. */
53
+ reset() {
54
+ for (const entry of this.state.values()) {
55
+ for (const waiter of entry.waiters) {
56
+ waiter();
57
+ }
58
+ entry.waiters.length = 0;
59
+ entry.active = 0;
60
+ }
61
+ this.state.clear();
62
+ }
63
+ // ── internal ──────────────────────────────────────────────────────
64
+ getOrCreate(type) {
65
+ let entry = this.state.get(type);
66
+ if (!entry) {
67
+ entry = { active: 0, waiters: [] };
68
+ this.state.set(type, entry);
69
+ }
70
+ return entry;
71
+ }
72
+ }
73
+ //# sourceMappingURL=concurrency-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency-manager.js","sourceRoot":"","sources":["../../src/subagent/concurrency-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,MAAM,OAAO,kBAAkB;IACrB,KAAK,GAA2B,IAAI,GAAG,EAAE,CAAC;IAElD;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,gBAAwB,sBAAsB;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YACjC,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,yCAAyC;QACzC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;gBACtB,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAY;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAG,CAAC;YACpC,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,uEAAuE;IACvE,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,kEAAkE;IAClE,KAAK;QACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,EAAE,CAAC;YACX,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACzB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,qEAAqE;IAE7D,WAAW,CAAC,IAAY;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * SubagentDispatcher — the core orchestrator for subagent execution.
3
+ *
4
+ * Composes: TaskCheckout, WorkspaceResolver, ConcurrencyManager,
5
+ * OrphanReaper, and RuntimeAdapterRegistry to dispatch tasks to
6
+ * child agent processes.
7
+ */
8
+ import type { RuntimeAdapterRegistry } from '../adapters/registry.js';
9
+ import type { SubagentTask, SubagentResult, DispatchOptions, AggregatedResult } from './types.js';
10
+ import type { GoalRepository } from '../planning/goal-ancestry.js';
11
+ export interface SubagentDispatcherConfig {
12
+ /** RuntimeAdapterRegistry for looking up adapters by type */
13
+ adapterRegistry: RuntimeAdapterRegistry;
14
+ /** Base directory for git worktree isolation */
15
+ baseDir?: string;
16
+ /** Optional goal repository for injecting goal ancestry context */
17
+ goalRepository?: GoalRepository;
18
+ }
19
+ export declare class SubagentDispatcher {
20
+ private readonly checkout;
21
+ private readonly workspace;
22
+ private readonly concurrency;
23
+ private readonly reaper;
24
+ private readonly adapterRegistry;
25
+ private readonly goalAncestry?;
26
+ constructor(config: SubagentDispatcherConfig);
27
+ /**
28
+ * Dispatch one or more tasks to subagents.
29
+ *
30
+ * Tasks run in parallel by default (controlled by options.parallel).
31
+ * Each task goes through: claim → resolve workspace → acquire slot →
32
+ * execute via adapter → collect result.
33
+ */
34
+ dispatch(tasks: SubagentTask[], options?: DispatchOptions): Promise<AggregatedResult>;
35
+ /** Clean up all resources (worktrees, claims, concurrency) */
36
+ cleanup(): void;
37
+ /** Run orphan detection and cleanup */
38
+ reapOrphans(): SubagentResult[];
39
+ private dispatchParallel;
40
+ private executeTask;
41
+ /** Topological sort by dependencies (stable — preserves input order for equal deps) */
42
+ private resolveDependencies;
43
+ private getDefaultAdapterType;
44
+ }
45
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/subagent/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEd,eAAe,EACf,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAMpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAMnE,MAAM,WAAW,wBAAwB;IACvC,6DAA6D;IAC7D,eAAe,EAAE,sBAAsB,CAAC;IACxC,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAe;gBAEjC,MAAM,EAAE,wBAAwB;IAa5C;;;;;;OAMG;IACG,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2C/F,8DAA8D;IAC9D,OAAO,IAAI,IAAI;IAOf,uCAAuC;IACvC,WAAW,IAAI,cAAc,EAAE;YAcjB,gBAAgB;YAuFhB,WAAW;IAuFzB,uFAAuF;IACvF,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,qBAAqB;CAO9B"}