@soleri/core 2.10.0 → 2.12.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 (511) hide show
  1. package/dist/agency/agency-manager.d.ts +47 -0
  2. package/dist/agency/agency-manager.d.ts.map +1 -0
  3. package/dist/agency/agency-manager.js +281 -0
  4. package/dist/agency/agency-manager.js.map +1 -0
  5. package/dist/agency/index.d.ts +3 -0
  6. package/dist/agency/index.d.ts.map +1 -0
  7. package/dist/agency/index.js +2 -0
  8. package/dist/agency/index.js.map +1 -0
  9. package/dist/agency/types.d.ts +69 -0
  10. package/dist/agency/types.d.ts.map +1 -0
  11. package/dist/agency/types.js +5 -0
  12. package/dist/agency/types.js.map +1 -0
  13. package/dist/brain/brain.d.ts +0 -1
  14. package/dist/brain/brain.d.ts.map +1 -1
  15. package/dist/brain/brain.js +24 -0
  16. package/dist/brain/brain.js.map +1 -1
  17. package/dist/brain/intelligence.d.ts +5 -1
  18. package/dist/brain/intelligence.d.ts.map +1 -1
  19. package/dist/brain/intelligence.js +83 -0
  20. package/dist/brain/intelligence.js.map +1 -1
  21. package/dist/brain/types.d.ts +21 -0
  22. package/dist/brain/types.d.ts.map +1 -1
  23. package/dist/chat/agent-loop-types.d.ts +82 -0
  24. package/dist/chat/agent-loop-types.d.ts.map +1 -0
  25. package/dist/chat/agent-loop-types.js +8 -0
  26. package/dist/chat/agent-loop-types.js.map +1 -0
  27. package/dist/chat/agent-loop.d.ts +19 -0
  28. package/dist/chat/agent-loop.d.ts.map +1 -0
  29. package/dist/chat/agent-loop.js +261 -0
  30. package/dist/chat/agent-loop.js.map +1 -0
  31. package/dist/chat/auth-manager.d.ts +49 -0
  32. package/dist/chat/auth-manager.d.ts.map +1 -0
  33. package/dist/chat/auth-manager.js +152 -0
  34. package/dist/chat/auth-manager.js.map +1 -0
  35. package/dist/chat/browser-session.d.ts +86 -0
  36. package/dist/chat/browser-session.d.ts.map +1 -0
  37. package/dist/chat/browser-session.js +143 -0
  38. package/dist/chat/browser-session.js.map +1 -0
  39. package/dist/chat/cancellation.d.ts +54 -0
  40. package/dist/chat/cancellation.d.ts.map +1 -0
  41. package/dist/chat/cancellation.js +80 -0
  42. package/dist/chat/cancellation.js.map +1 -0
  43. package/dist/chat/chat-session.d.ts +86 -0
  44. package/dist/chat/chat-session.d.ts.map +1 -0
  45. package/dist/chat/chat-session.js +252 -0
  46. package/dist/chat/chat-session.js.map +1 -0
  47. package/dist/chat/file-handler.d.ts +63 -0
  48. package/dist/chat/file-handler.d.ts.map +1 -0
  49. package/dist/chat/file-handler.js +182 -0
  50. package/dist/chat/file-handler.js.map +1 -0
  51. package/dist/chat/fragment-buffer.d.ts +49 -0
  52. package/dist/chat/fragment-buffer.d.ts.map +1 -0
  53. package/dist/chat/fragment-buffer.js +130 -0
  54. package/dist/chat/fragment-buffer.js.map +1 -0
  55. package/dist/chat/index.d.ts +24 -0
  56. package/dist/chat/index.d.ts.map +1 -0
  57. package/dist/chat/index.js +15 -0
  58. package/dist/chat/index.js.map +1 -0
  59. package/dist/chat/mcp-bridge.d.ts +60 -0
  60. package/dist/chat/mcp-bridge.d.ts.map +1 -0
  61. package/dist/chat/mcp-bridge.js +111 -0
  62. package/dist/chat/mcp-bridge.js.map +1 -0
  63. package/dist/chat/notifications.d.ts +82 -0
  64. package/dist/chat/notifications.d.ts.map +1 -0
  65. package/dist/chat/notifications.js +119 -0
  66. package/dist/chat/notifications.js.map +1 -0
  67. package/dist/chat/output-compressor.d.ts +30 -0
  68. package/dist/chat/output-compressor.d.ts.map +1 -0
  69. package/dist/chat/output-compressor.js +95 -0
  70. package/dist/chat/output-compressor.js.map +1 -0
  71. package/dist/chat/queue.d.ts +91 -0
  72. package/dist/chat/queue.d.ts.map +1 -0
  73. package/dist/chat/queue.js +146 -0
  74. package/dist/chat/queue.js.map +1 -0
  75. package/dist/chat/response-chunker.d.ts +29 -0
  76. package/dist/chat/response-chunker.d.ts.map +1 -0
  77. package/dist/chat/response-chunker.js +163 -0
  78. package/dist/chat/response-chunker.js.map +1 -0
  79. package/dist/chat/self-update.d.ts +62 -0
  80. package/dist/chat/self-update.d.ts.map +1 -0
  81. package/dist/chat/self-update.js +90 -0
  82. package/dist/chat/self-update.js.map +1 -0
  83. package/dist/chat/types.d.ts +105 -0
  84. package/dist/chat/types.d.ts.map +1 -0
  85. package/dist/chat/types.js +8 -0
  86. package/dist/chat/types.js.map +1 -0
  87. package/dist/chat/voice.d.ts +39 -0
  88. package/dist/chat/voice.d.ts.map +1 -0
  89. package/dist/chat/voice.js +80 -0
  90. package/dist/chat/voice.js.map +1 -0
  91. package/dist/claudemd/compose.d.ts +31 -0
  92. package/dist/claudemd/compose.d.ts.map +1 -0
  93. package/dist/claudemd/compose.js +105 -0
  94. package/dist/claudemd/compose.js.map +1 -0
  95. package/dist/claudemd/index.d.ts +5 -0
  96. package/dist/claudemd/index.d.ts.map +1 -0
  97. package/dist/claudemd/index.js +3 -0
  98. package/dist/claudemd/index.js.map +1 -0
  99. package/dist/claudemd/inject.d.ts +31 -0
  100. package/dist/claudemd/inject.d.ts.map +1 -0
  101. package/dist/claudemd/inject.js +157 -0
  102. package/dist/claudemd/inject.js.map +1 -0
  103. package/dist/claudemd/types.d.ts +41 -0
  104. package/dist/claudemd/types.d.ts.map +1 -0
  105. package/dist/claudemd/types.js +5 -0
  106. package/dist/claudemd/types.js.map +1 -0
  107. package/dist/context/context-engine.d.ts +31 -0
  108. package/dist/context/context-engine.d.ts.map +1 -0
  109. package/dist/context/context-engine.js +245 -0
  110. package/dist/context/context-engine.js.map +1 -0
  111. package/dist/context/index.d.ts +3 -0
  112. package/dist/context/index.d.ts.map +1 -0
  113. package/dist/context/index.js +2 -0
  114. package/dist/context/index.js.map +1 -0
  115. package/dist/context/types.d.ts +54 -0
  116. package/dist/context/types.d.ts.map +1 -0
  117. package/dist/context/types.js +5 -0
  118. package/dist/context/types.js.map +1 -0
  119. package/dist/enforcement/adapters/claude-code.d.ts +18 -0
  120. package/dist/enforcement/adapters/claude-code.d.ts.map +1 -0
  121. package/dist/enforcement/adapters/claude-code.js +106 -0
  122. package/dist/enforcement/adapters/claude-code.js.map +1 -0
  123. package/dist/enforcement/adapters/index.d.ts +2 -0
  124. package/dist/enforcement/adapters/index.d.ts.map +1 -0
  125. package/dist/enforcement/adapters/index.js +2 -0
  126. package/dist/enforcement/adapters/index.js.map +1 -0
  127. package/dist/enforcement/index.d.ts +4 -0
  128. package/dist/enforcement/index.d.ts.map +1 -0
  129. package/dist/enforcement/index.js +3 -0
  130. package/dist/enforcement/index.js.map +1 -0
  131. package/dist/enforcement/registry.d.ts +23 -0
  132. package/dist/enforcement/registry.d.ts.map +1 -0
  133. package/dist/enforcement/registry.js +63 -0
  134. package/dist/enforcement/registry.js.map +1 -0
  135. package/dist/enforcement/types.d.ts +51 -0
  136. package/dist/enforcement/types.d.ts.map +1 -0
  137. package/dist/enforcement/types.js +8 -0
  138. package/dist/enforcement/types.js.map +1 -0
  139. package/dist/facades/facade-factory.d.ts +10 -3
  140. package/dist/facades/facade-factory.d.ts.map +1 -1
  141. package/dist/facades/facade-factory.js +94 -5
  142. package/dist/facades/facade-factory.js.map +1 -1
  143. package/dist/facades/types.d.ts +15 -1
  144. package/dist/facades/types.d.ts.map +1 -1
  145. package/dist/facades/types.js +6 -0
  146. package/dist/facades/types.js.map +1 -1
  147. package/dist/health/health-registry.d.ts +40 -0
  148. package/dist/health/health-registry.d.ts.map +1 -0
  149. package/dist/health/health-registry.js +134 -0
  150. package/dist/health/health-registry.js.map +1 -0
  151. package/dist/health/index.d.ts +5 -0
  152. package/dist/health/index.d.ts.map +1 -0
  153. package/dist/health/index.js +3 -0
  154. package/dist/health/index.js.map +1 -0
  155. package/dist/health/vault-integrity.d.ts +13 -0
  156. package/dist/health/vault-integrity.d.ts.map +1 -0
  157. package/dist/health/vault-integrity.js +49 -0
  158. package/dist/health/vault-integrity.js.map +1 -0
  159. package/dist/index.d.ts +67 -6
  160. package/dist/index.d.ts.map +1 -1
  161. package/dist/index.js +51 -3
  162. package/dist/index.js.map +1 -1
  163. package/dist/intake/intake-pipeline.d.ts +0 -7
  164. package/dist/intake/intake-pipeline.d.ts.map +1 -1
  165. package/dist/intake/intake-pipeline.js +1 -1
  166. package/dist/intake/intake-pipeline.js.map +1 -1
  167. package/dist/intelligence/loader.d.ts.map +1 -1
  168. package/dist/intelligence/loader.js +51 -5
  169. package/dist/intelligence/loader.js.map +1 -1
  170. package/dist/intelligence/types.d.ts +1 -0
  171. package/dist/intelligence/types.d.ts.map +1 -1
  172. package/dist/migrations/index.d.ts +6 -0
  173. package/dist/migrations/index.d.ts.map +1 -0
  174. package/dist/migrations/index.js +5 -0
  175. package/dist/migrations/index.js.map +1 -0
  176. package/dist/migrations/migration-runner.d.ts +51 -0
  177. package/dist/migrations/migration-runner.d.ts.map +1 -0
  178. package/dist/migrations/migration-runner.js +141 -0
  179. package/dist/migrations/migration-runner.js.map +1 -0
  180. package/dist/packs/index.d.ts +10 -0
  181. package/dist/packs/index.d.ts.map +1 -0
  182. package/dist/packs/index.js +8 -0
  183. package/dist/packs/index.js.map +1 -0
  184. package/dist/packs/lockfile.d.ts +97 -0
  185. package/dist/packs/lockfile.d.ts.map +1 -0
  186. package/dist/packs/lockfile.js +129 -0
  187. package/dist/packs/lockfile.js.map +1 -0
  188. package/dist/packs/pack-installer.d.ts +41 -0
  189. package/dist/packs/pack-installer.d.ts.map +1 -0
  190. package/dist/packs/pack-installer.js +253 -0
  191. package/dist/packs/pack-installer.js.map +1 -0
  192. package/dist/packs/resolver.d.ts +51 -0
  193. package/dist/packs/resolver.d.ts.map +1 -0
  194. package/dist/packs/resolver.js +195 -0
  195. package/dist/packs/resolver.js.map +1 -0
  196. package/dist/packs/types.d.ts +186 -0
  197. package/dist/packs/types.d.ts.map +1 -0
  198. package/dist/packs/types.js +69 -0
  199. package/dist/packs/types.js.map +1 -0
  200. package/dist/persistence/postgres-provider.d.ts +42 -7
  201. package/dist/persistence/postgres-provider.d.ts.map +1 -1
  202. package/dist/persistence/postgres-provider.js +187 -46
  203. package/dist/persistence/postgres-provider.js.map +1 -1
  204. package/dist/playbooks/index.d.ts +2 -0
  205. package/dist/playbooks/index.d.ts.map +1 -1
  206. package/dist/playbooks/index.js +2 -0
  207. package/dist/playbooks/index.js.map +1 -1
  208. package/dist/playbooks/playbook-executor.d.ts +100 -0
  209. package/dist/playbooks/playbook-executor.d.ts.map +1 -0
  210. package/dist/playbooks/playbook-executor.js +207 -0
  211. package/dist/playbooks/playbook-executor.js.map +1 -0
  212. package/dist/plugins/index.d.ts +7 -0
  213. package/dist/plugins/index.d.ts.map +1 -0
  214. package/dist/plugins/index.js +7 -0
  215. package/dist/plugins/index.js.map +1 -0
  216. package/dist/plugins/plugin-loader.d.ts +28 -0
  217. package/dist/plugins/plugin-loader.d.ts.map +1 -0
  218. package/dist/plugins/plugin-loader.js +150 -0
  219. package/dist/plugins/plugin-loader.js.map +1 -0
  220. package/dist/plugins/plugin-registry.d.ts +58 -0
  221. package/dist/plugins/plugin-registry.d.ts.map +1 -0
  222. package/dist/plugins/plugin-registry.js +157 -0
  223. package/dist/plugins/plugin-registry.js.map +1 -0
  224. package/dist/plugins/types.d.ts +180 -0
  225. package/dist/plugins/types.d.ts.map +1 -0
  226. package/dist/plugins/types.js +48 -0
  227. package/dist/plugins/types.js.map +1 -0
  228. package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
  229. package/dist/runtime/admin-extra-ops.js +181 -8
  230. package/dist/runtime/admin-extra-ops.js.map +1 -1
  231. package/dist/runtime/capture-ops.d.ts.map +1 -1
  232. package/dist/runtime/capture-ops.js +106 -7
  233. package/dist/runtime/capture-ops.js.map +1 -1
  234. package/dist/runtime/deprecation.d.ts +33 -0
  235. package/dist/runtime/deprecation.d.ts.map +1 -0
  236. package/dist/runtime/deprecation.js +41 -0
  237. package/dist/runtime/deprecation.js.map +1 -0
  238. package/dist/runtime/domain-ops.d.ts.map +1 -1
  239. package/dist/runtime/domain-ops.js +21 -2
  240. package/dist/runtime/domain-ops.js.map +1 -1
  241. package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
  242. package/dist/runtime/facades/admin-facade.js +12 -1
  243. package/dist/runtime/facades/admin-facade.js.map +1 -1
  244. package/dist/runtime/facades/agency-facade.d.ts +7 -0
  245. package/dist/runtime/facades/agency-facade.d.ts.map +1 -0
  246. package/dist/runtime/facades/agency-facade.js +103 -0
  247. package/dist/runtime/facades/agency-facade.js.map +1 -0
  248. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  249. package/dist/runtime/facades/brain-facade.js +58 -0
  250. package/dist/runtime/facades/brain-facade.js.map +1 -1
  251. package/dist/runtime/facades/chat-facade.d.ts +7 -0
  252. package/dist/runtime/facades/chat-facade.d.ts.map +1 -0
  253. package/dist/runtime/facades/chat-facade.js +808 -0
  254. package/dist/runtime/facades/chat-facade.js.map +1 -0
  255. package/dist/runtime/facades/context-facade.d.ts +7 -0
  256. package/dist/runtime/facades/context-facade.d.ts.map +1 -0
  257. package/dist/runtime/facades/context-facade.js +45 -0
  258. package/dist/runtime/facades/context-facade.js.map +1 -0
  259. package/dist/runtime/facades/index.d.ts.map +1 -1
  260. package/dist/runtime/facades/index.js +18 -0
  261. package/dist/runtime/facades/index.js.map +1 -1
  262. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  263. package/dist/runtime/facades/vault-facade.js +247 -1
  264. package/dist/runtime/facades/vault-facade.js.map +1 -1
  265. package/dist/runtime/feature-flags.d.ts +18 -0
  266. package/dist/runtime/feature-flags.d.ts.map +1 -0
  267. package/dist/runtime/feature-flags.js +90 -0
  268. package/dist/runtime/feature-flags.js.map +1 -0
  269. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  270. package/dist/runtime/orchestrate-ops.js +13 -0
  271. package/dist/runtime/orchestrate-ops.js.map +1 -1
  272. package/dist/runtime/pack-ops.d.ts +9 -0
  273. package/dist/runtime/pack-ops.d.ts.map +1 -0
  274. package/dist/runtime/pack-ops.js +76 -0
  275. package/dist/runtime/pack-ops.js.map +1 -0
  276. package/dist/runtime/playbook-ops.d.ts +3 -7
  277. package/dist/runtime/playbook-ops.d.ts.map +1 -1
  278. package/dist/runtime/playbook-ops.js +101 -10
  279. package/dist/runtime/playbook-ops.js.map +1 -1
  280. package/dist/runtime/plugin-ops.d.ts +9 -0
  281. package/dist/runtime/plugin-ops.d.ts.map +1 -0
  282. package/dist/runtime/plugin-ops.js +235 -0
  283. package/dist/runtime/plugin-ops.js.map +1 -0
  284. package/dist/runtime/runtime.d.ts.map +1 -1
  285. package/dist/runtime/runtime.js +72 -5
  286. package/dist/runtime/runtime.js.map +1 -1
  287. package/dist/runtime/telemetry-ops.d.ts +10 -0
  288. package/dist/runtime/telemetry-ops.d.ts.map +1 -0
  289. package/dist/runtime/telemetry-ops.js +53 -0
  290. package/dist/runtime/telemetry-ops.js.map +1 -0
  291. package/dist/runtime/types.d.ts +35 -0
  292. package/dist/runtime/types.d.ts.map +1 -1
  293. package/dist/runtime/vault-sharing-ops.d.ts +13 -0
  294. package/dist/runtime/vault-sharing-ops.d.ts.map +1 -0
  295. package/dist/runtime/vault-sharing-ops.js +345 -0
  296. package/dist/runtime/vault-sharing-ops.js.map +1 -0
  297. package/dist/streams/index.d.ts +1 -1
  298. package/dist/streams/index.d.ts.map +1 -1
  299. package/dist/streams/index.js +1 -1
  300. package/dist/streams/index.js.map +1 -1
  301. package/dist/streams/replayable-stream.d.ts +13 -1
  302. package/dist/streams/replayable-stream.d.ts.map +1 -1
  303. package/dist/streams/replayable-stream.js +27 -3
  304. package/dist/streams/replayable-stream.js.map +1 -1
  305. package/dist/text/similarity.d.ts +0 -1
  306. package/dist/text/similarity.d.ts.map +1 -1
  307. package/dist/text/similarity.js +1 -1
  308. package/dist/text/similarity.js.map +1 -1
  309. package/dist/transport/http-server.d.ts +56 -0
  310. package/dist/transport/http-server.d.ts.map +1 -0
  311. package/dist/transport/http-server.js +210 -0
  312. package/dist/transport/http-server.js.map +1 -0
  313. package/dist/transport/index.d.ts +11 -0
  314. package/dist/transport/index.d.ts.map +1 -0
  315. package/dist/transport/index.js +10 -0
  316. package/dist/transport/index.js.map +1 -0
  317. package/dist/transport/lsp-server.d.ts +140 -0
  318. package/dist/transport/lsp-server.d.ts.map +1 -0
  319. package/dist/transport/lsp-server.js +239 -0
  320. package/dist/transport/lsp-server.js.map +1 -0
  321. package/dist/transport/rate-limiter.d.ts +35 -0
  322. package/dist/transport/rate-limiter.d.ts.map +1 -0
  323. package/dist/transport/rate-limiter.js +72 -0
  324. package/dist/transport/rate-limiter.js.map +1 -0
  325. package/dist/transport/session-manager.d.ts +49 -0
  326. package/dist/transport/session-manager.d.ts.map +1 -0
  327. package/dist/transport/session-manager.js +83 -0
  328. package/dist/transport/session-manager.js.map +1 -0
  329. package/dist/transport/token-auth.d.ts +29 -0
  330. package/dist/transport/token-auth.d.ts.map +1 -0
  331. package/dist/transport/token-auth.js +84 -0
  332. package/dist/transport/token-auth.js.map +1 -0
  333. package/dist/transport/types.d.ts +61 -0
  334. package/dist/transport/types.d.ts.map +1 -0
  335. package/dist/transport/types.js +5 -0
  336. package/dist/transport/types.js.map +1 -0
  337. package/dist/transport/ws-server.d.ts +78 -0
  338. package/dist/transport/ws-server.d.ts.map +1 -0
  339. package/dist/transport/ws-server.js +342 -0
  340. package/dist/transport/ws-server.js.map +1 -0
  341. package/dist/vault/git-vault-sync.d.ts +107 -0
  342. package/dist/vault/git-vault-sync.d.ts.map +1 -0
  343. package/dist/vault/git-vault-sync.js +251 -0
  344. package/dist/vault/git-vault-sync.js.map +1 -0
  345. package/dist/vault/knowledge-review.d.ts +67 -0
  346. package/dist/vault/knowledge-review.d.ts.map +1 -0
  347. package/dist/vault/knowledge-review.js +133 -0
  348. package/dist/vault/knowledge-review.js.map +1 -0
  349. package/dist/vault/obsidian-sync.d.ts +94 -0
  350. package/dist/vault/obsidian-sync.d.ts.map +1 -0
  351. package/dist/vault/obsidian-sync.js +247 -0
  352. package/dist/vault/obsidian-sync.js.map +1 -0
  353. package/dist/vault/scope-detector.d.ts +31 -0
  354. package/dist/vault/scope-detector.d.ts.map +1 -0
  355. package/dist/vault/scope-detector.js +182 -0
  356. package/dist/vault/scope-detector.js.map +1 -0
  357. package/dist/vault/vault-branching.d.ts +71 -0
  358. package/dist/vault/vault-branching.d.ts.map +1 -0
  359. package/dist/vault/vault-branching.js +180 -0
  360. package/dist/vault/vault-branching.js.map +1 -0
  361. package/dist/vault/vault-manager.d.ts +89 -0
  362. package/dist/vault/vault-manager.d.ts.map +1 -0
  363. package/dist/vault/vault-manager.js +199 -0
  364. package/dist/vault/vault-manager.js.map +1 -0
  365. package/dist/vault/vault-types.d.ts +30 -0
  366. package/dist/vault/vault-types.d.ts.map +1 -0
  367. package/dist/vault/vault-types.js +10 -0
  368. package/dist/vault/vault-types.js.map +1 -0
  369. package/dist/vault/vault.d.ts +10 -0
  370. package/dist/vault/vault.d.ts.map +1 -1
  371. package/dist/vault/vault.js +36 -3
  372. package/dist/vault/vault.js.map +1 -1
  373. package/package.json +1 -1
  374. package/src/__tests__/admin-extra-ops.test.ts +31 -11
  375. package/src/__tests__/agency-manager.test.ts +374 -0
  376. package/src/__tests__/agent-loop.test.ts +256 -0
  377. package/src/__tests__/capture-ops.test.ts +275 -0
  378. package/src/__tests__/chat-differentiators.test.ts +251 -0
  379. package/src/__tests__/chat-enhanced.test.ts +390 -0
  380. package/src/__tests__/chat-transport.test.ts +665 -0
  381. package/src/__tests__/claudemd.test.ts +282 -0
  382. package/src/__tests__/context-engine.test.ts +256 -0
  383. package/src/__tests__/core-ops.test.ts +97 -5
  384. package/src/__tests__/deprecation.test.ts +78 -0
  385. package/src/__tests__/enforcement.test.ts +153 -0
  386. package/src/__tests__/facade-factory.test.ts +271 -0
  387. package/src/__tests__/feature-flags.test.ts +138 -0
  388. package/src/__tests__/git-vault-sync.test.ts +230 -0
  389. package/src/__tests__/health-registry.test.ts +173 -0
  390. package/src/__tests__/knowledge-review.test.ts +104 -0
  391. package/src/__tests__/lsp-transport.test.ts +442 -0
  392. package/src/__tests__/migration-runner.test.ts +170 -0
  393. package/src/__tests__/normalize.test.ts +10 -0
  394. package/src/__tests__/obsidian-sync.test.ts +354 -0
  395. package/src/__tests__/pack-lockfile.test.ts +261 -0
  396. package/src/__tests__/pack-ops.test.ts +146 -0
  397. package/src/__tests__/pack-system.test.ts +423 -0
  398. package/src/__tests__/playbook-executor.test.ts +249 -0
  399. package/src/__tests__/playbook-ops-execution.test.ts +189 -0
  400. package/src/__tests__/plugin-ops.test.ts +411 -0
  401. package/src/__tests__/plugin-system.test.ts +509 -0
  402. package/src/__tests__/postgres-provider.test.ts +64 -6
  403. package/src/__tests__/replayable-stream.test.ts +112 -1
  404. package/src/__tests__/scope-detector.test.ts +121 -0
  405. package/src/__tests__/session-lifecycle.test.ts +259 -0
  406. package/src/__tests__/transport.test.ts +758 -0
  407. package/src/__tests__/vault-branching.test.ts +274 -0
  408. package/src/__tests__/vault-connect.test.ts +179 -0
  409. package/src/__tests__/vault-integrity.test.ts +71 -0
  410. package/src/__tests__/vault-manager.test.ts +238 -0
  411. package/src/__tests__/vault-scaling.test.ts +281 -0
  412. package/src/__tests__/vault-sharing.test.ts +270 -0
  413. package/src/__tests__/ws-transport.test.ts +479 -0
  414. package/src/agency/agency-manager.ts +326 -0
  415. package/src/agency/index.ts +13 -0
  416. package/src/agency/types.ts +88 -0
  417. package/src/brain/brain.ts +27 -11
  418. package/src/brain/intelligence.ts +103 -0
  419. package/src/brain/types.ts +26 -0
  420. package/src/chat/agent-loop-types.ts +99 -0
  421. package/src/chat/agent-loop.ts +357 -0
  422. package/src/chat/auth-manager.ts +171 -0
  423. package/src/chat/browser-session.ts +188 -0
  424. package/src/chat/cancellation.ts +99 -0
  425. package/src/chat/chat-session.ts +283 -0
  426. package/src/chat/file-handler.ts +230 -0
  427. package/src/chat/fragment-buffer.ts +160 -0
  428. package/src/chat/index.ts +72 -0
  429. package/src/chat/mcp-bridge.ts +135 -0
  430. package/src/chat/notifications.ts +164 -0
  431. package/src/chat/output-compressor.ts +116 -0
  432. package/src/chat/queue.ts +208 -0
  433. package/src/chat/response-chunker.ts +200 -0
  434. package/src/chat/self-update.ts +117 -0
  435. package/src/chat/types.ts +126 -0
  436. package/src/chat/voice.ts +134 -0
  437. package/src/claudemd/compose.ts +142 -0
  438. package/src/claudemd/index.ts +17 -0
  439. package/src/claudemd/inject.ts +170 -0
  440. package/src/claudemd/types.ts +45 -0
  441. package/src/context/context-engine.ts +302 -0
  442. package/src/context/index.ts +11 -0
  443. package/src/context/types.ts +69 -0
  444. package/src/enforcement/adapters/claude-code.ts +135 -0
  445. package/src/enforcement/adapters/index.ts +1 -0
  446. package/src/enforcement/index.ts +10 -0
  447. package/src/enforcement/registry.ts +82 -0
  448. package/src/enforcement/types.ts +56 -0
  449. package/src/facades/facade-factory.ts +138 -5
  450. package/src/facades/types.ts +21 -0
  451. package/src/health/health-registry.ts +165 -0
  452. package/src/health/index.ts +11 -0
  453. package/src/health/vault-integrity.ts +66 -0
  454. package/src/index.ts +294 -2
  455. package/src/intake/intake-pipeline.ts +1 -1
  456. package/src/intelligence/loader.ts +58 -5
  457. package/src/intelligence/types.ts +1 -0
  458. package/src/migrations/index.ts +6 -0
  459. package/src/migrations/migration-runner.ts +185 -0
  460. package/src/packs/index.ts +20 -0
  461. package/src/packs/lockfile.ts +180 -0
  462. package/src/packs/pack-installer.ts +289 -0
  463. package/src/packs/resolver.ts +237 -0
  464. package/src/packs/types.ts +125 -0
  465. package/src/persistence/postgres-provider.ts +211 -58
  466. package/src/playbooks/index.ts +11 -0
  467. package/src/playbooks/playbook-executor.ts +301 -0
  468. package/src/plugins/index.ts +19 -0
  469. package/src/plugins/plugin-loader.ts +183 -0
  470. package/src/plugins/plugin-registry.ts +187 -0
  471. package/src/plugins/types.ts +119 -0
  472. package/src/runtime/admin-extra-ops.ts +193 -8
  473. package/src/runtime/capture-ops.ts +113 -8
  474. package/src/runtime/deprecation.ts +58 -0
  475. package/src/runtime/domain-ops.ts +21 -2
  476. package/src/runtime/facades/admin-facade.ts +16 -1
  477. package/src/runtime/facades/agency-facade.ts +111 -0
  478. package/src/runtime/facades/brain-facade.ts +60 -0
  479. package/src/runtime/facades/chat-facade.ts +918 -0
  480. package/src/runtime/facades/context-facade.ts +55 -0
  481. package/src/runtime/facades/index.ts +22 -1
  482. package/src/runtime/facades/vault-facade.ts +261 -1
  483. package/src/runtime/feature-flags.ts +101 -0
  484. package/src/runtime/orchestrate-ops.ts +13 -0
  485. package/src/runtime/pack-ops.ts +85 -0
  486. package/src/runtime/playbook-ops.ts +113 -9
  487. package/src/runtime/plugin-ops.ts +258 -0
  488. package/src/runtime/runtime.ts +84 -5
  489. package/src/runtime/telemetry-ops.ts +57 -0
  490. package/src/runtime/types.ts +35 -0
  491. package/src/runtime/vault-sharing-ops.ts +372 -0
  492. package/src/streams/index.ts +1 -1
  493. package/src/streams/replayable-stream.ts +34 -3
  494. package/src/text/similarity.ts +1 -1
  495. package/src/transport/http-server.ts +269 -0
  496. package/src/transport/index.ts +48 -0
  497. package/src/transport/lsp-server.ts +401 -0
  498. package/src/transport/rate-limiter.ts +97 -0
  499. package/src/transport/session-manager.ts +120 -0
  500. package/src/transport/token-auth.ts +96 -0
  501. package/src/transport/types.ts +66 -0
  502. package/src/transport/ws-server.ts +415 -0
  503. package/src/vault/git-vault-sync.ts +318 -0
  504. package/src/vault/knowledge-review.ts +221 -0
  505. package/src/vault/obsidian-sync.ts +346 -0
  506. package/src/vault/scope-detector.ts +219 -0
  507. package/src/vault/vault-branching.ts +264 -0
  508. package/src/vault/vault-manager.ts +237 -0
  509. package/src/vault/vault-types.ts +50 -0
  510. package/src/vault/vault.ts +41 -3
  511. package/src/governance/index.ts +0 -18
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Plugin Loader — scans directories, validates manifests, loads plugins.
3
+ *
4
+ * Plugin directories (checked in order, first occurrence wins):
5
+ * 1. ~/.{agentId}/plugins/ (global plugins)
6
+ * 2. .{agentId}/plugins/ (project plugins)
7
+ * 3. Custom directories (via config)
8
+ *
9
+ * Each plugin is a directory containing `soleri-plugin.json`.
10
+ */
11
+
12
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+ import { homedir } from 'node:os';
15
+ import {
16
+ pluginManifestSchema,
17
+ type LoadedPlugin,
18
+ type LoadResult,
19
+ type PluginProvenance,
20
+ } from './types.js';
21
+
22
+ // =============================================================================
23
+ // LOADER
24
+ // =============================================================================
25
+
26
+ const MANIFEST_FILENAME = 'soleri-plugin.json';
27
+
28
+ /**
29
+ * Load all plugins from standard + custom directories.
30
+ */
31
+ export function loadPlugins(
32
+ agentId: string,
33
+ projectPath?: string,
34
+ extraDirs: string[] = [],
35
+ ): LoadResult {
36
+ const result: LoadResult = { loaded: [], errors: [] };
37
+ const seen = new Set<string>();
38
+
39
+ const dirs: Array<{ path: string; provenance: PluginProvenance }> = [];
40
+
41
+ // Global: ~/.{agentId}/plugins/
42
+ const globalDir = join(homedir(), `.${agentId}`, 'plugins');
43
+ if (existsSync(globalDir)) {
44
+ dirs.push({ path: globalDir, provenance: 'global' });
45
+ }
46
+
47
+ // Project: .{agentId}/plugins/
48
+ if (projectPath) {
49
+ const projectDir = join(projectPath, `.${agentId}`, 'plugins');
50
+ if (existsSync(projectDir)) {
51
+ dirs.push({ path: projectDir, provenance: 'project' });
52
+ }
53
+ }
54
+
55
+ // Custom
56
+ for (const dir of extraDirs) {
57
+ if (existsSync(dir)) {
58
+ dirs.push({ path: dir, provenance: 'custom' });
59
+ }
60
+ }
61
+
62
+ for (const { path: parentDir, provenance } of dirs) {
63
+ try {
64
+ const entries = readdirSync(parentDir, { withFileTypes: true });
65
+ for (const entry of entries) {
66
+ if (!entry.isDirectory()) continue;
67
+
68
+ const pluginDir = join(parentDir, entry.name);
69
+ const loaded = loadSinglePlugin(pluginDir, provenance);
70
+
71
+ if (loaded.error) {
72
+ result.errors.push({ directory: pluginDir, error: loaded.error });
73
+ continue;
74
+ }
75
+
76
+ if (loaded.plugin) {
77
+ if (seen.has(loaded.plugin.manifest.id)) continue; // first wins
78
+ seen.add(loaded.plugin.manifest.id);
79
+ result.loaded.push(loaded.plugin);
80
+ }
81
+ }
82
+ } catch {
83
+ // Directory not scannable — skip
84
+ }
85
+ }
86
+
87
+ return result;
88
+ }
89
+
90
+ /**
91
+ * Load a single plugin from a directory.
92
+ */
93
+ function loadSinglePlugin(
94
+ pluginDir: string,
95
+ provenance: PluginProvenance,
96
+ ): { plugin?: LoadedPlugin; error?: string } {
97
+ const manifestPath = join(pluginDir, MANIFEST_FILENAME);
98
+
99
+ if (!existsSync(manifestPath)) {
100
+ return { error: `No ${MANIFEST_FILENAME} found in ${pluginDir}` };
101
+ }
102
+
103
+ let raw: unknown;
104
+ try {
105
+ raw = JSON.parse(readFileSync(manifestPath, 'utf-8'));
106
+ } catch (e) {
107
+ return {
108
+ error: `Invalid JSON in ${manifestPath}: ${e instanceof Error ? e.message : String(e)}`,
109
+ };
110
+ }
111
+
112
+ const parseResult = pluginManifestSchema.safeParse(raw);
113
+ if (!parseResult.success) {
114
+ const issues = parseResult.error.issues
115
+ .map((i) => `${i.path.join('.')}: ${i.message}`)
116
+ .join('; ');
117
+ return { error: `Invalid manifest in ${pluginDir}: ${issues}` };
118
+ }
119
+
120
+ return {
121
+ plugin: {
122
+ manifest: parseResult.data,
123
+ directory: pluginDir,
124
+ provenance,
125
+ },
126
+ };
127
+ }
128
+
129
+ // =============================================================================
130
+ // DEPENDENCY HELPERS
131
+ // =============================================================================
132
+
133
+ /**
134
+ * Validate that all plugin dependencies are satisfiable.
135
+ */
136
+ export function validateDependencies(
137
+ plugins: LoadedPlugin[],
138
+ ): Array<{ pluginId: string; missingDep: string }> {
139
+ const available = new Set(plugins.map((p) => p.manifest.id));
140
+ const errors: Array<{ pluginId: string; missingDep: string }> = [];
141
+
142
+ for (const { manifest } of plugins) {
143
+ for (const dep of manifest.dependencies) {
144
+ if (!available.has(dep)) {
145
+ errors.push({ pluginId: manifest.id, missingDep: dep });
146
+ }
147
+ }
148
+ }
149
+
150
+ return errors;
151
+ }
152
+
153
+ /**
154
+ * Topological sort by dependency order (no-deps first).
155
+ * Detects and breaks circular dependencies.
156
+ */
157
+ export function sortByDependencies(plugins: LoadedPlugin[]): LoadedPlugin[] {
158
+ const byId = new Map(plugins.map((p) => [p.manifest.id, p]));
159
+ const sorted: LoadedPlugin[] = [];
160
+ const visited = new Set<string>();
161
+ const visiting = new Set<string>();
162
+
163
+ function visit(id: string): void {
164
+ if (visited.has(id)) return;
165
+ if (visiting.has(id)) return; // circular — break
166
+ visiting.add(id);
167
+ const plugin = byId.get(id);
168
+ if (plugin) {
169
+ for (const dep of plugin.manifest.dependencies) {
170
+ visit(dep);
171
+ }
172
+ sorted.push(plugin);
173
+ }
174
+ visiting.delete(id);
175
+ visited.add(id);
176
+ }
177
+
178
+ for (const { manifest } of plugins) {
179
+ visit(manifest.id);
180
+ }
181
+
182
+ return sorted;
183
+ }
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Plugin Registry — tracks loaded plugins and their lifecycle.
3
+ *
4
+ * Not a singleton — lives on AgentRuntime for testability.
5
+ * Lifecycle: load → register → activate → (deactivate | error)
6
+ */
7
+
8
+ import type {
9
+ LoadedPlugin,
10
+ RegisteredPlugin,
11
+ PluginContext,
12
+ PluginFacadeBuilder,
13
+ } from './types.js';
14
+ import type { FacadeConfig, OpDefinition } from '../facades/types.js';
15
+ import { existsSync } from 'node:fs';
16
+ import { join } from 'node:path';
17
+ import { pathToFileURL } from 'node:url';
18
+
19
+ export class PluginRegistry {
20
+ private plugins = new Map<string, RegisteredPlugin>();
21
+
22
+ /**
23
+ * Register a loaded plugin. Does NOT activate it — call activate() separately.
24
+ */
25
+ register(loaded: LoadedPlugin): RegisteredPlugin {
26
+ const existing = this.plugins.get(loaded.manifest.id);
27
+ if (existing) {
28
+ throw new Error(`Plugin "${loaded.manifest.id}" is already registered`);
29
+ }
30
+
31
+ const registered: RegisteredPlugin = {
32
+ id: loaded.manifest.id,
33
+ manifest: loaded.manifest,
34
+ directory: loaded.directory,
35
+ provenance: loaded.provenance,
36
+ status: 'registered',
37
+ facades: [],
38
+ registeredAt: Date.now(),
39
+ };
40
+
41
+ this.plugins.set(registered.id, registered);
42
+ return registered;
43
+ }
44
+
45
+ /**
46
+ * Activate a plugin — builds facades from its manifest or JS module.
47
+ *
48
+ * If the plugin directory contains an `index.js` with a `createFacades` export,
49
+ * that function is called to build facades dynamically. Otherwise, facade stubs
50
+ * are created from the manifest's `facades` array (static ops with no-op handlers).
51
+ */
52
+ async activate(pluginId: string, ctx: PluginContext): Promise<RegisteredPlugin> {
53
+ const plugin = this.plugins.get(pluginId);
54
+ if (!plugin) throw new Error(`Plugin "${pluginId}" is not registered`);
55
+ if (plugin.status === 'active') return plugin;
56
+
57
+ try {
58
+ // Try dynamic facade builder first
59
+ let facades = await this.tryLoadFacadeBuilder(plugin, ctx);
60
+
61
+ // Fall back to static manifest facades
62
+ if (!facades) {
63
+ facades = this.buildStaticFacades(plugin);
64
+ }
65
+
66
+ plugin.facades = facades;
67
+ plugin.status = 'active';
68
+ plugin.activatedAt = Date.now();
69
+ plugin.error = undefined;
70
+ } catch (e) {
71
+ plugin.status = 'error';
72
+ plugin.error = e instanceof Error ? e.message : String(e);
73
+ }
74
+
75
+ return plugin;
76
+ }
77
+
78
+ /**
79
+ * Deactivate a plugin — removes its facades from the runtime.
80
+ */
81
+ deactivate(pluginId: string): boolean {
82
+ const plugin = this.plugins.get(pluginId);
83
+ if (!plugin) return false;
84
+
85
+ plugin.status = 'deactivated';
86
+ plugin.facades = [];
87
+ return true;
88
+ }
89
+
90
+ /**
91
+ * Unregister a plugin completely.
92
+ */
93
+ unregister(pluginId: string): boolean {
94
+ const plugin = this.plugins.get(pluginId);
95
+ if (!plugin) return false;
96
+
97
+ if (plugin.status === 'active') {
98
+ this.deactivate(pluginId);
99
+ }
100
+
101
+ return this.plugins.delete(pluginId);
102
+ }
103
+
104
+ /**
105
+ * Get a registered plugin by ID.
106
+ */
107
+ get(pluginId: string): RegisteredPlugin | undefined {
108
+ return this.plugins.get(pluginId);
109
+ }
110
+
111
+ /**
112
+ * List all registered plugins.
113
+ */
114
+ list(): RegisteredPlugin[] {
115
+ return Array.from(this.plugins.values());
116
+ }
117
+
118
+ /**
119
+ * Get all active facades from all active plugins.
120
+ */
121
+ getActiveFacades(): FacadeConfig[] {
122
+ const facades: FacadeConfig[] = [];
123
+ for (const plugin of this.plugins.values()) {
124
+ if (plugin.status === 'active') {
125
+ facades.push(...plugin.facades);
126
+ }
127
+ }
128
+ return facades;
129
+ }
130
+
131
+ /**
132
+ * Get all active ops (flattened from all active plugin facades).
133
+ */
134
+ getActiveOps(): OpDefinition[] {
135
+ return this.getActiveFacades().flatMap((f) => f.ops);
136
+ }
137
+
138
+ // ─── Private ────────────────────────────────────────────────────────
139
+
140
+ /**
141
+ * Try to load a JS module with `createFacades` export from the plugin directory.
142
+ * Returns null if no module found or no export.
143
+ */
144
+ private async tryLoadFacadeBuilder(
145
+ plugin: RegisteredPlugin,
146
+ ctx: PluginContext,
147
+ ): Promise<FacadeConfig[] | null> {
148
+ const moduleFile = join(plugin.directory, 'index.js');
149
+ if (!existsSync(moduleFile)) {
150
+ return null;
151
+ }
152
+
153
+ try {
154
+ // Dynamic import of plugin's index.js
155
+ const mod = (await import(pathToFileURL(moduleFile).href)) as {
156
+ createFacades?: PluginFacadeBuilder;
157
+ };
158
+ if (typeof mod.createFacades === 'function') {
159
+ return mod.createFacades(ctx);
160
+ }
161
+ throw new Error(`Plugin module "${moduleFile}" must export createFacades(ctx)`);
162
+ } catch (e) {
163
+ throw new Error(
164
+ `Failed to load plugin module "${moduleFile}": ${e instanceof Error ? e.message : String(e)}`, { cause: e },
165
+ );
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Build facade configs from the manifest's static facade definitions.
171
+ * These have no-op handlers — useful for schema discovery and documentation.
172
+ */
173
+ private buildStaticFacades(plugin: RegisteredPlugin): FacadeConfig[] {
174
+ return plugin.manifest.facades.map((f) => ({
175
+ name: f.name,
176
+ description: f.description,
177
+ ops: f.ops.map((op) => ({
178
+ name: op.name,
179
+ description: op.description,
180
+ auth: op.auth as 'read' | 'write' | 'admin',
181
+ handler: async () => ({
182
+ error: `Op "${op.name}" is a static plugin op — no handler implementation provided. Add an index.js with createFacades() to ${plugin.directory}`,
183
+ }),
184
+ })),
185
+ }));
186
+ }
187
+ }
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Plugin System — Types & Manifest Schema
3
+ *
4
+ * A plugin is a directory containing a `soleri-plugin.json` manifest
5
+ * and optionally additional intelligence data. Plugins register
6
+ * OpDefinition[] (facades) dynamically without re-scaffolding.
7
+ */
8
+
9
+ import { z } from 'zod';
10
+ import type { FacadeConfig } from '../facades/types.js';
11
+
12
+ // =============================================================================
13
+ // MANIFEST SCHEMA (validated at load time)
14
+ // =============================================================================
15
+
16
+ export const pluginManifestSchema = z.object({
17
+ id: z.string().regex(/^[a-z0-9-]+$/, 'Plugin ID must be lowercase alphanumeric with hyphens'),
18
+ name: z.string().min(1),
19
+ version: z.string().regex(/^\d+\.\d+\.\d+$/, 'Version must be semver (x.y.z)'),
20
+ description: z.string().optional().default(''),
21
+ /** Domain this plugin provides knowledge/ops for */
22
+ domain: z.string().optional(),
23
+ /** Plugin IDs this plugin depends on (must be loaded first) */
24
+ dependencies: z.array(z.string()).optional().default([]),
25
+ /** Facade definitions — each becomes an MCP tool */
26
+ facades: z
27
+ .array(
28
+ z.object({
29
+ name: z.string(),
30
+ description: z.string().optional().default(''),
31
+ ops: z.array(
32
+ z.object({
33
+ name: z.string(),
34
+ description: z.string().optional().default(''),
35
+ auth: z.enum(['read', 'write', 'admin']).optional().default('read'),
36
+ }),
37
+ ),
38
+ }),
39
+ )
40
+ .optional()
41
+ .default([]),
42
+ /** Intelligence entries to seed into the vault */
43
+ intelligence: z
44
+ .array(
45
+ z.object({
46
+ id: z.string(),
47
+ type: z.string(),
48
+ domain: z.string().optional(),
49
+ title: z.string(),
50
+ severity: z.enum(['critical', 'warning', 'suggestion']).optional(),
51
+ description: z.string(),
52
+ tags: z.array(z.string()).optional().default([]),
53
+ }),
54
+ )
55
+ .optional()
56
+ .default([]),
57
+ });
58
+
59
+ export type PluginManifest = z.infer<typeof pluginManifestSchema>;
60
+
61
+ // =============================================================================
62
+ // PLUGIN TYPES
63
+ // =============================================================================
64
+
65
+ export type PluginStatus = 'registered' | 'active' | 'error' | 'deactivated';
66
+ export type PluginProvenance = 'global' | 'project' | 'custom';
67
+
68
+ /**
69
+ * A loaded plugin — manifest validated, ready for activation.
70
+ */
71
+ export interface LoadedPlugin {
72
+ manifest: PluginManifest;
73
+ directory: string;
74
+ provenance: PluginProvenance;
75
+ }
76
+
77
+ /**
78
+ * A registered plugin in the runtime — tracks lifecycle state.
79
+ */
80
+ export interface RegisteredPlugin {
81
+ id: string;
82
+ manifest: PluginManifest;
83
+ directory: string;
84
+ provenance: PluginProvenance;
85
+ status: PluginStatus;
86
+ error?: string;
87
+ facades: FacadeConfig[];
88
+ activatedAt?: number;
89
+ registeredAt: number;
90
+ }
91
+
92
+ /**
93
+ * Plugin facade builder — plugins provide this function to create ops
94
+ * that have access to the agent runtime.
95
+ *
96
+ * Plugin JS modules export: `export function createFacades(ctx): FacadeConfig[]`
97
+ */
98
+ export type PluginFacadeBuilder = (ctx: PluginContext) => FacadeConfig[];
99
+
100
+ /**
101
+ * Context passed to plugin facade builders during activation.
102
+ */
103
+ export interface PluginContext {
104
+ /** The agent runtime — full access to vault, brain, planner, etc. */
105
+ runtime: unknown; // AgentRuntime — kept as unknown to avoid circular deps
106
+ /** The plugin's own manifest */
107
+ manifest: PluginManifest;
108
+ /** The plugin's directory on disk */
109
+ directory: string;
110
+ }
111
+
112
+ // =============================================================================
113
+ // LOAD RESULT
114
+ // =============================================================================
115
+
116
+ export interface LoadResult {
117
+ loaded: LoadedPlugin[];
118
+ errors: Array<{ directory: string; error: string }>;
119
+ }