@di-code/coding-agent 0.1.7 → 0.1.8

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 (333) hide show
  1. package/README.md +104 -46
  2. package/compositions/base.yml +54 -0
  3. package/compositions/interactive.yml +14 -0
  4. package/compositions/json.yml +6 -0
  5. package/compositions/print.yml +5 -0
  6. package/compositions/rpc.yml +12 -0
  7. package/compositions/webui.yml +9 -0
  8. package/dist/cli.d.ts +22 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +97 -3
  11. package/dist/cli.js.map +1 -1
  12. package/dist/composition-loader-entry.d.ts +11 -0
  13. package/dist/composition-loader-entry.d.ts.map +1 -0
  14. package/dist/composition-loader-entry.js +12 -0
  15. package/dist/composition-loader-entry.js.map +1 -0
  16. package/dist/compositions.d.ts +32 -0
  17. package/dist/compositions.d.ts.map +1 -0
  18. package/dist/compositions.js +173 -0
  19. package/dist/compositions.js.map +1 -0
  20. package/dist/core/session/session-manager.d.ts +9 -2
  21. package/dist/core/session/session-manager.d.ts.map +1 -1
  22. package/dist/core/session/session-manager.js +28 -0
  23. package/dist/core/session/session-manager.js.map +1 -1
  24. package/dist/core/session/session-storage.d.ts.map +1 -1
  25. package/dist/core/session/session-storage.js +20 -3
  26. package/dist/core/session/session-storage.js.map +1 -1
  27. package/dist/core/session/types.d.ts +11 -2
  28. package/dist/core/session/types.d.ts.map +1 -1
  29. package/dist/core/session/types.js.map +1 -1
  30. package/dist/core/session-tools.d.ts +5 -0
  31. package/dist/core/session-tools.d.ts.map +1 -0
  32. package/dist/core/session-tools.js +17 -0
  33. package/dist/core/session-tools.js.map +1 -0
  34. package/dist/core/session.d.ts +19 -7
  35. package/dist/core/session.d.ts.map +1 -1
  36. package/dist/core/session.js +71 -39
  37. package/dist/core/session.js.map +1 -1
  38. package/dist/core/tools/bash.d.ts +1 -38
  39. package/dist/core/tools/bash.d.ts.map +1 -1
  40. package/dist/core/tools/bash.js +1 -207
  41. package/dist/core/tools/bash.js.map +1 -1
  42. package/dist/core/tools/edit-diff.d.ts +1 -24
  43. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  44. package/dist/core/tools/edit-diff.js +1 -135
  45. package/dist/core/tools/edit-diff.js.map +1 -1
  46. package/dist/core/tools/edit.d.ts +1 -26
  47. package/dist/core/tools/edit.d.ts.map +1 -1
  48. package/dist/core/tools/edit.js +1 -140
  49. package/dist/core/tools/edit.js.map +1 -1
  50. package/dist/core/tools/file-mutation-queue.d.ts +1 -1
  51. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  52. package/dist/core/tools/file-mutation-queue.js +1 -23
  53. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  54. package/dist/core/tools/file-search.d.ts +1 -13
  55. package/dist/core/tools/file-search.d.ts.map +1 -1
  56. package/dist/core/tools/file-search.js +1 -98
  57. package/dist/core/tools/file-search.js.map +1 -1
  58. package/dist/core/tools/glob.d.ts +1 -10
  59. package/dist/core/tools/glob.d.ts.map +1 -1
  60. package/dist/core/tools/glob.js +1 -43
  61. package/dist/core/tools/glob.js.map +1 -1
  62. package/dist/core/tools/grep.d.ts +1 -12
  63. package/dist/core/tools/grep.d.ts.map +1 -1
  64. package/dist/core/tools/grep.js +1 -66
  65. package/dist/core/tools/grep.js.map +1 -1
  66. package/dist/core/tools/load-skill.d.ts +1 -9
  67. package/dist/core/tools/load-skill.d.ts.map +1 -1
  68. package/dist/core/tools/load-skill.js +1 -21
  69. package/dist/core/tools/load-skill.js.map +1 -1
  70. package/dist/core/tools/path-boundary.d.ts +1 -4
  71. package/dist/core/tools/path-boundary.d.ts.map +1 -1
  72. package/dist/core/tools/path-boundary.js +1 -65
  73. package/dist/core/tools/path-boundary.js.map +1 -1
  74. package/dist/core/tools/read.d.ts +1 -16
  75. package/dist/core/tools/read.d.ts.map +1 -1
  76. package/dist/core/tools/read.js +1 -131
  77. package/dist/core/tools/read.js.map +1 -1
  78. package/dist/core/tools/write.d.ts +1 -16
  79. package/dist/core/tools/write.d.ts.map +1 -1
  80. package/dist/core/tools/write.js +1 -44
  81. package/dist/core/tools/write.js.map +1 -1
  82. package/dist/entry.js +30 -28
  83. package/dist/entry.js.map +1 -1
  84. package/dist/index.d.ts +6 -3
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +6 -3
  87. package/dist/index.js.map +1 -1
  88. package/dist/interactive/builtin.d.ts +17 -0
  89. package/dist/interactive/builtin.d.ts.map +1 -0
  90. package/dist/interactive/builtin.js +47 -0
  91. package/dist/interactive/builtin.js.map +1 -0
  92. package/dist/interactive/controller.d.ts +85 -0
  93. package/dist/interactive/controller.d.ts.map +1 -0
  94. package/dist/interactive/controller.js +211 -0
  95. package/dist/interactive/controller.js.map +1 -0
  96. package/dist/interactive/index.d.ts +3 -0
  97. package/dist/interactive/index.d.ts.map +1 -0
  98. package/dist/interactive/index.js +3 -0
  99. package/dist/interactive/index.js.map +1 -0
  100. package/dist/interactive-host-entry.d.ts +7 -0
  101. package/dist/interactive-host-entry.d.ts.map +1 -0
  102. package/dist/interactive-host-entry.js +123 -0
  103. package/dist/interactive-host-entry.js.map +1 -0
  104. package/dist/interactive-profile.d.ts +18 -0
  105. package/dist/interactive-profile.d.ts.map +1 -0
  106. package/dist/interactive-profile.js +290 -0
  107. package/dist/interactive-profile.js.map +1 -0
  108. package/dist/interactive-resources-entry.d.ts +7 -0
  109. package/dist/interactive-resources-entry.d.ts.map +1 -0
  110. package/dist/interactive-resources-entry.js +42 -0
  111. package/dist/interactive-resources-entry.js.map +1 -0
  112. package/dist/legacy-main.d.ts +39 -0
  113. package/dist/legacy-main.d.ts.map +1 -0
  114. package/dist/legacy-main.js +611 -0
  115. package/dist/legacy-main.js.map +1 -0
  116. package/dist/main.d.ts +15 -34
  117. package/dist/main.d.ts.map +1 -1
  118. package/dist/main.js +130 -518
  119. package/dist/main.js.map +1 -1
  120. package/dist/mcp/entries.d.ts +42 -0
  121. package/dist/mcp/entries.d.ts.map +1 -0
  122. package/dist/mcp/entries.js +98 -0
  123. package/dist/mcp/entries.js.map +1 -0
  124. package/dist/mcp-client-entry.d.ts +5 -0
  125. package/dist/mcp-client-entry.d.ts.map +1 -0
  126. package/dist/mcp-client-entry.js +6 -0
  127. package/dist/mcp-client-entry.js.map +1 -0
  128. package/dist/mcp-config-entry.d.ts +5 -0
  129. package/dist/mcp-config-entry.d.ts.map +1 -0
  130. package/dist/mcp-config-entry.js +6 -0
  131. package/dist/mcp-config-entry.js.map +1 -0
  132. package/dist/mcp-tools-entry.d.ts +5 -0
  133. package/dist/mcp-tools-entry.d.ts.map +1 -0
  134. package/dist/mcp-tools-entry.js +6 -0
  135. package/dist/mcp-tools-entry.js.map +1 -0
  136. package/dist/mcp-transport-entry.d.ts +5 -0
  137. package/dist/mcp-transport-entry.d.ts.map +1 -0
  138. package/dist/mcp-transport-entry.js +6 -0
  139. package/dist/mcp-transport-entry.js.map +1 -0
  140. package/dist/modes/interactive-entry.d.ts +18 -0
  141. package/dist/modes/interactive-entry.d.ts.map +1 -0
  142. package/dist/modes/interactive-entry.js +21 -0
  143. package/dist/modes/interactive-entry.js.map +1 -0
  144. package/dist/modes/interactive.d.ts +16 -6
  145. package/dist/modes/interactive.d.ts.map +1 -1
  146. package/dist/modes/interactive.js +81 -32
  147. package/dist/modes/interactive.js.map +1 -1
  148. package/dist/modes/json-entry.d.ts +13 -0
  149. package/dist/modes/json-entry.d.ts.map +1 -0
  150. package/dist/modes/json-entry.js +14 -0
  151. package/dist/modes/json-entry.js.map +1 -0
  152. package/dist/modes/json.d.ts +4 -1
  153. package/dist/modes/json.d.ts.map +1 -1
  154. package/dist/modes/json.js +3 -3
  155. package/dist/modes/json.js.map +1 -1
  156. package/dist/modes/print-entry.d.ts +10 -0
  157. package/dist/modes/print-entry.d.ts.map +1 -0
  158. package/dist/modes/print-entry.js +11 -0
  159. package/dist/modes/print-entry.js.map +1 -0
  160. package/dist/modes/tree-selector.d.ts.map +1 -1
  161. package/dist/modes/tree-selector.js +4 -0
  162. package/dist/modes/tree-selector.js.map +1 -1
  163. package/dist/plugin-dump-composition.d.ts +6 -0
  164. package/dist/plugin-dump-composition.d.ts.map +1 -0
  165. package/dist/plugin-dump-composition.js +7 -0
  166. package/dist/plugin-dump-composition.js.map +1 -0
  167. package/dist/plugin-inventory.d.ts +7 -0
  168. package/dist/plugin-inventory.d.ts.map +1 -0
  169. package/dist/plugin-inventory.js +8 -0
  170. package/dist/plugin-inventory.js.map +1 -0
  171. package/dist/plugin-manager.d.ts +6 -0
  172. package/dist/plugin-manager.d.ts.map +1 -0
  173. package/dist/plugin-manager.js +7 -0
  174. package/dist/plugin-manager.js.map +1 -0
  175. package/dist/plugin-trace.d.ts +6 -0
  176. package/dist/plugin-trace.d.ts.map +1 -0
  177. package/dist/plugin-trace.js +7 -0
  178. package/dist/plugin-trace.js.map +1 -0
  179. package/dist/plugins/dynamic-broker.d.ts +76 -0
  180. package/dist/plugins/dynamic-broker.d.ts.map +1 -0
  181. package/dist/plugins/dynamic-broker.js +852 -0
  182. package/dist/plugins/dynamic-broker.js.map +1 -0
  183. package/dist/plugins/profile.d.ts +15 -0
  184. package/dist/plugins/profile.d.ts.map +1 -0
  185. package/dist/plugins/profile.js +34 -0
  186. package/dist/plugins/profile.js.map +1 -0
  187. package/dist/plugins/runtime-host.d.ts +37 -0
  188. package/dist/plugins/runtime-host.d.ts.map +1 -0
  189. package/dist/plugins/runtime-host.js +95 -0
  190. package/dist/plugins/runtime-host.js.map +1 -0
  191. package/dist/plugins/trust.d.ts +8 -0
  192. package/dist/plugins/trust.d.ts.map +1 -0
  193. package/dist/plugins/trust.js +59 -0
  194. package/dist/plugins/trust.js.map +1 -0
  195. package/dist/project-trust-entry.d.ts +15 -0
  196. package/dist/project-trust-entry.d.ts.map +1 -0
  197. package/dist/project-trust-entry.js +15 -0
  198. package/dist/project-trust-entry.js.map +1 -0
  199. package/dist/rpc/client.d.ts +78 -6
  200. package/dist/rpc/client.d.ts.map +1 -1
  201. package/dist/rpc/client.js +172 -4
  202. package/dist/rpc/client.js.map +1 -1
  203. package/dist/rpc/dispatcher.d.ts +121 -0
  204. package/dist/rpc/dispatcher.d.ts.map +1 -0
  205. package/dist/rpc/dispatcher.js +994 -0
  206. package/dist/rpc/dispatcher.js.map +1 -0
  207. package/dist/rpc/index.d.ts +2 -0
  208. package/dist/rpc/index.d.ts.map +1 -1
  209. package/dist/rpc/index.js +2 -0
  210. package/dist/rpc/index.js.map +1 -1
  211. package/dist/rpc/lifecycle.d.ts +6 -0
  212. package/dist/rpc/lifecycle.d.ts.map +1 -0
  213. package/dist/rpc/lifecycle.js +24 -0
  214. package/dist/rpc/lifecycle.js.map +1 -0
  215. package/dist/rpc/protocol.d.ts +112 -31
  216. package/dist/rpc/protocol.d.ts.map +1 -1
  217. package/dist/rpc/protocol.js +569 -117
  218. package/dist/rpc/protocol.js.map +1 -1
  219. package/dist/rpc/server-service.d.ts +7 -0
  220. package/dist/rpc/server-service.d.ts.map +1 -0
  221. package/dist/rpc/server-service.js +3 -0
  222. package/dist/rpc/server-service.js.map +1 -0
  223. package/dist/rpc/server.d.ts +16 -19
  224. package/dist/rpc/server.d.ts.map +1 -1
  225. package/dist/rpc/server.js +59 -115
  226. package/dist/rpc/server.js.map +1 -1
  227. package/dist/rpc-client-sdk-entry.d.ts +12 -0
  228. package/dist/rpc-client-sdk-entry.d.ts.map +1 -0
  229. package/dist/rpc-client-sdk-entry.js +11 -0
  230. package/dist/rpc-client-sdk-entry.js.map +1 -0
  231. package/dist/rpc-entry.js +50 -18
  232. package/dist/rpc-entry.js.map +1 -1
  233. package/dist/rpc-server-entry.d.ts +8 -0
  234. package/dist/rpc-server-entry.d.ts.map +1 -0
  235. package/dist/rpc-server-entry.js +67 -0
  236. package/dist/rpc-server-entry.js.map +1 -0
  237. package/dist/runtime/attachment-store.d.ts +13 -0
  238. package/dist/runtime/attachment-store.d.ts.map +1 -0
  239. package/dist/runtime/attachment-store.js +93 -0
  240. package/dist/runtime/attachment-store.js.map +1 -0
  241. package/dist/runtime/bootstrap.d.ts +14 -0
  242. package/dist/runtime/bootstrap.d.ts.map +1 -0
  243. package/dist/runtime/bootstrap.js +29 -0
  244. package/dist/runtime/bootstrap.js.map +1 -0
  245. package/dist/runtime/interactive-host-service.d.ts +22 -0
  246. package/dist/runtime/interactive-host-service.d.ts.map +1 -0
  247. package/dist/runtime/interactive-host-service.js +2 -0
  248. package/dist/runtime/interactive-host-service.js.map +1 -0
  249. package/dist/runtime/interactive-resource-service.d.ts +11 -0
  250. package/dist/runtime/interactive-resource-service.d.ts.map +1 -0
  251. package/dist/runtime/interactive-resource-service.js +3 -0
  252. package/dist/runtime/interactive-resource-service.js.map +1 -0
  253. package/dist/runtime/plugin-inventory-entry.d.ts +5 -0
  254. package/dist/runtime/plugin-inventory-entry.d.ts.map +1 -0
  255. package/dist/runtime/plugin-inventory-entry.js +18 -0
  256. package/dist/runtime/plugin-inventory-entry.js.map +1 -0
  257. package/dist/runtime/plugin-inventory-service.d.ts +8 -0
  258. package/dist/runtime/plugin-inventory-service.d.ts.map +1 -0
  259. package/dist/runtime/plugin-inventory-service.js +3 -0
  260. package/dist/runtime/plugin-inventory-service.js.map +1 -0
  261. package/dist/runtime/plugin-manager-entry.d.ts +20 -0
  262. package/dist/runtime/plugin-manager-entry.d.ts.map +1 -0
  263. package/dist/runtime/plugin-manager-entry.js +96 -0
  264. package/dist/runtime/plugin-manager-entry.js.map +1 -0
  265. package/dist/runtime/plugin-observability-entry.d.ts +12 -0
  266. package/dist/runtime/plugin-observability-entry.d.ts.map +1 -0
  267. package/dist/runtime/plugin-observability-entry.js +73 -0
  268. package/dist/runtime/plugin-observability-entry.js.map +1 -0
  269. package/dist/runtime/product-host.d.ts +91 -0
  270. package/dist/runtime/product-host.d.ts.map +1 -0
  271. package/dist/runtime/product-host.js +529 -0
  272. package/dist/runtime/product-host.js.map +1 -0
  273. package/dist/runtime/session-factory.d.ts +17 -0
  274. package/dist/runtime/session-factory.d.ts.map +1 -0
  275. package/dist/runtime/session-factory.js +75 -0
  276. package/dist/runtime/session-factory.js.map +1 -0
  277. package/dist/runtime/session-host.d.ts +152 -0
  278. package/dist/runtime/session-host.d.ts.map +1 -0
  279. package/dist/runtime/session-host.js +895 -0
  280. package/dist/runtime/session-host.js.map +1 -0
  281. package/dist/runtime-core-entry.d.ts +11 -0
  282. package/dist/runtime-core-entry.d.ts.map +1 -0
  283. package/dist/runtime-core-entry.js +9 -0
  284. package/dist/runtime-core-entry.js.map +1 -0
  285. package/dist/session-factory-entry.d.ts +7 -0
  286. package/dist/session-factory-entry.d.ts.map +1 -0
  287. package/dist/session-factory-entry.js +9 -0
  288. package/dist/session-factory-entry.js.map +1 -0
  289. package/dist/session-store-jsonl-entry.d.ts +7 -0
  290. package/dist/session-store-jsonl-entry.d.ts.map +1 -0
  291. package/dist/session-store-jsonl-entry.js +33 -0
  292. package/dist/session-store-jsonl-entry.js.map +1 -0
  293. package/dist/startup.d.ts +12 -1
  294. package/dist/startup.d.ts.map +1 -1
  295. package/dist/startup.js +106 -15
  296. package/dist/startup.js.map +1 -1
  297. package/dist/subagents/index.d.ts +2 -0
  298. package/dist/subagents/index.d.ts.map +1 -0
  299. package/dist/subagents/index.js +2 -0
  300. package/dist/subagents/index.js.map +1 -0
  301. package/dist/subagents/service.d.ts +50 -0
  302. package/dist/subagents/service.d.ts.map +1 -0
  303. package/dist/subagents/service.js +521 -0
  304. package/dist/subagents/service.js.map +1 -0
  305. package/dist/ui-host.d.ts +125 -0
  306. package/dist/ui-host.d.ts.map +1 -0
  307. package/dist/ui-host.js +275 -0
  308. package/dist/ui-host.js.map +1 -0
  309. package/dist/web/assets/index-BwfuGMvv.css +1 -0
  310. package/dist/web/assets/index-DPUaJqFJ.js +41 -0
  311. package/dist/web/assets/index-DPUaJqFJ.js.map +1 -0
  312. package/dist/web/index.html +14 -0
  313. package/dist/web-command.d.ts +11 -0
  314. package/dist/web-command.d.ts.map +1 -0
  315. package/dist/web-command.js +114 -0
  316. package/dist/web-command.js.map +1 -0
  317. package/dist/web-frontend.d.ts +73 -0
  318. package/dist/web-frontend.d.ts.map +1 -0
  319. package/dist/web-frontend.js +249 -0
  320. package/dist/web-frontend.js.map +1 -0
  321. package/dist/web.d.ts +254 -0
  322. package/dist/web.d.ts.map +1 -0
  323. package/dist/web.js +740 -0
  324. package/dist/web.js.map +1 -0
  325. package/dist/webui-entry.d.ts +3 -0
  326. package/dist/webui-entry.d.ts.map +1 -0
  327. package/dist/webui-entry.js +73 -0
  328. package/dist/webui-entry.js.map +1 -0
  329. package/dist/webui.d.ts +91 -0
  330. package/dist/webui.d.ts.map +1 -0
  331. package/dist/webui.js +882 -0
  332. package/dist/webui.js.map +1 -0
  333. package/package.json +89 -8
package/dist/rpc-entry.js CHANGED
@@ -1,28 +1,60 @@
1
1
  #!/usr/bin/env node
2
- import { resolve } from "node:path";
3
- import { AgentSession } from "./core/session.js";
4
- import { RpcServer } from "./rpc/server.js";
5
- import { loadStartupConfiguration, resolveStartupRuntime } from "./startup.js";
2
+ import { homedir } from "node:os";
3
+ import { join, resolve } from "node:path";
4
+ import { createCompositionLoader } from "@di-code/plugin-loader";
5
+ import { createRootContext } from "@di-code/plugin-runtime";
6
+ import { importCompositionModule, resolveCompositionEntries, resolveManagedCompositionEntries, } from "./compositions.js";
7
+ import { createProjectTrustStore } from "./project-trust-entry.js";
8
+ import { disposeRpcComposition } from "./rpc/lifecycle.js";
9
+ import { rpcServerKey } from "./rpc/server-service.js";
10
+ const allowedRoot = resolve(process.cwd());
11
+ const agentDir = resolve(join(homedir(), ".di-code"));
12
+ let loader;
13
+ let context;
14
+ let shutdownRpc;
15
+ const stop = () => {
16
+ void shutdownRpc?.().catch((error) => process.stderr.write(`${error.message}\n`));
17
+ };
18
+ process.once("SIGINT", stop);
19
+ process.once("SIGTERM", stop);
6
20
  try {
7
- const allowedRoot = resolve(process.cwd());
8
- const configuration = await loadStartupConfiguration(allowedRoot);
9
- const runtime = resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);
10
- const session = new AgentSession({
11
- allowedRoot,
12
- provider: runtime.provider,
13
- model: runtime.model,
21
+ const projectTrusted = (await createProjectTrustStore(join(agentDir, "trust.json")).get(allowedRoot)) === true;
22
+ context = createRootContext({ id: "rpc-profile", mode: "rpc", trustedProject: projectTrusted });
23
+ loader = createCompositionLoader({
24
+ context,
25
+ entries: [
26
+ ...(await resolveCompositionEntries("rpc", {
27
+ cwd: allowedRoot,
28
+ agentDir,
29
+ includeProjectComposition: projectTrusted,
30
+ allowedRoot,
31
+ })),
32
+ ...(await resolveManagedCompositionEntries(agentDir)),
33
+ ],
34
+ importModule: importCompositionModule,
35
+ projectTrusted,
14
36
  });
15
- const server = new RpcServer({
16
- session,
17
- input: process.stdin,
18
- output: process.stdout,
19
- onError: (error) => process.stderr.write(`${error.message}\n`),
20
- });
21
- server.start();
37
+ await loader.load();
38
+ const rpcServer = context.require(rpcServerKey);
39
+ shutdownRpc = rpcServer.shutdown;
40
+ await rpcServer.finished();
22
41
  }
23
42
  catch (cause) {
24
43
  const message = cause instanceof Error ? cause.message : "Unknown RPC startup error";
25
44
  process.stderr.write(`${message}\n`);
26
45
  process.exitCode = 1;
27
46
  }
47
+ finally {
48
+ shutdownRpc = undefined;
49
+ process.off("SIGINT", stop);
50
+ process.off("SIGTERM", stop);
51
+ try {
52
+ await disposeRpcComposition(() => loader?.dispose(), () => context?.dispose());
53
+ }
54
+ catch (cause) {
55
+ const message = cause instanceof Error ? cause.message : "Unknown RPC dispose error";
56
+ process.stderr.write(`${message}\n`);
57
+ process.exitCode = 1;
58
+ }
59
+ }
28
60
  //# sourceMappingURL=rpc-entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-entry.js","sourceRoot":"","sources":["../src/rpc-entry.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE/E,IAAI,CAAC;IACJ,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,qBAAqB,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClH,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;QAChC,WAAW;QACX,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;KACpB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC5B,OAAO;QACP,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC;KAC9D,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC;IACrF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport { resolve } from \"node:path\";\nimport { AgentSession } from \"./core/session.ts\";\nimport { RpcServer } from \"./rpc/server.ts\";\nimport { loadStartupConfiguration, resolveStartupRuntime } from \"./startup.ts\";\n\ntry {\n\tconst allowedRoot = resolve(process.cwd());\n\tconst configuration = await loadStartupConfiguration(allowedRoot);\n\tconst runtime = resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);\n\tconst session = new AgentSession({\n\t\tallowedRoot,\n\t\tprovider: runtime.provider,\n\t\tmodel: runtime.model,\n\t});\n\tconst server = new RpcServer({\n\t\tsession,\n\t\tinput: process.stdin,\n\t\toutput: process.stdout,\n\t\tonError: (error) => process.stderr.write(`${error.message}\\n`),\n\t});\n\tserver.start();\n} catch (cause) {\n\tconst message = cause instanceof Error ? cause.message : \"Unknown RPC startup error\";\n\tprocess.stderr.write(`${message}\\n`);\n\tprocess.exitCode = 1;\n}\n"]}
1
+ {"version":3,"file":"rpc-entry.js","sourceRoot":"","sources":["../src/rpc-entry.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { createCompositionLoader } from \"@di-code/plugin-loader\";\nimport { createRootContext } from \"@di-code/plugin-runtime\";\nimport {\n\timportCompositionModule,\n\tresolveCompositionEntries,\n\tresolveManagedCompositionEntries,\n} from \"./compositions.ts\";\nimport { createProjectTrustStore } from \"./project-trust-entry.ts\";\nimport { disposeRpcComposition } from \"./rpc/lifecycle.ts\";\nimport { rpcServerKey } from \"./rpc/server-service.ts\";\n\nconst allowedRoot = resolve(process.cwd());\nconst agentDir = resolve(join(homedir(), \".di-code\"));\nlet loader: ReturnType<typeof createCompositionLoader> | undefined;\nlet context: ReturnType<typeof createRootContext> | undefined;\nlet shutdownRpc: (() => Promise<void>) | undefined;\nconst stop = (): void => {\n\tvoid shutdownRpc?.().catch((error: Error) => process.stderr.write(`${error.message}\\n`));\n};\n\nprocess.once(\"SIGINT\", stop);\nprocess.once(\"SIGTERM\", stop);\n\ntry {\n\tconst projectTrusted = (await createProjectTrustStore(join(agentDir, \"trust.json\")).get(allowedRoot)) === true;\n\tcontext = createRootContext({ id: \"rpc-profile\", mode: \"rpc\", trustedProject: projectTrusted });\n\tloader = createCompositionLoader({\n\t\tcontext,\n\t\tentries: [\n\t\t\t...(await resolveCompositionEntries(\"rpc\", {\n\t\t\t\tcwd: allowedRoot,\n\t\t\t\tagentDir,\n\t\t\t\tincludeProjectComposition: projectTrusted,\n\t\t\t\tallowedRoot,\n\t\t\t})),\n\t\t\t...(await resolveManagedCompositionEntries(agentDir)),\n\t\t],\n\t\timportModule: importCompositionModule,\n\t\tprojectTrusted,\n\t});\n\tawait loader.load();\n\tconst rpcServer = context.require(rpcServerKey);\n\tshutdownRpc = rpcServer.shutdown;\n\tawait rpcServer.finished();\n} catch (cause) {\n\tconst message = cause instanceof Error ? cause.message : \"Unknown RPC startup error\";\n\tprocess.stderr.write(`${message}\\n`);\n\tprocess.exitCode = 1;\n} finally {\n\tshutdownRpc = undefined;\n\tprocess.off(\"SIGINT\", stop);\n\tprocess.off(\"SIGTERM\", stop);\n\ttry {\n\t\tawait disposeRpcComposition(\n\t\t\t() => loader?.dispose(),\n\t\t\t() => context?.dispose(),\n\t\t);\n\t} catch (cause) {\n\t\tconst message = cause instanceof Error ? cause.message : \"Unknown RPC dispose error\";\n\t\tprocess.stderr.write(`${message}\\n`);\n\t\tprocess.exitCode = 1;\n\t}\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { PluginDefinition } from "@di-code/plugin-runtime";
2
+ export { type RpcServerService, rpcServerKey } from "./rpc/server-service.ts";
3
+ /** Creates the process RPC server from composition services and releases it with its owner Fiber. */
4
+ export declare const apiVersion: 1;
5
+ export declare const name = "rpc-server";
6
+ export declare const version = "0.1.7";
7
+ export declare const apply: PluginDefinition["apply"];
8
+ //# sourceMappingURL=rpc-server-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-server-entry.d.ts","sourceRoot":"","sources":["../src/rpc-server-entry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,OAAO,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE9E,qGAAqG;AACrG,eAAO,MAAM,UAAU,EAAG,CAAU,CAAC;AACrC,eAAO,MAAM,IAAI,eAAe,CAAC;AACjC,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAwD3C,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { modeRegistryKey, rpcMethodRegistryKey, runtimeSelectionKey, workspaceCapabilityKey } from "@di-code/builtins";
4
+ import { RpcServer } from "./rpc/server.js";
5
+ import { rpcServerKey } from "./rpc/server-service.js";
6
+ import { createProductHost } from "./runtime/product-host.js";
7
+ import { createSessionHost } from "./runtime/session-host.js";
8
+ import { loadStartupConfiguration, resolveStartupRuntime } from "./startup.js";
9
+ export { rpcServerKey } from "./rpc/server-service.js";
10
+ /** Creates the process RPC server from composition services and releases it with its owner Fiber. */
11
+ export const apiVersion = 1;
12
+ export const name = "rpc-server";
13
+ export const version = "0.1.7";
14
+ export const apply = async (context, _config, fiber) => {
15
+ const selection = context.require(runtimeSelectionKey).selected();
16
+ const session = await createSessionHost(context, {
17
+ cwd: context.require(workspaceCapabilityKey).allowedRoot,
18
+ agentDir: join(homedir(), ".di-code"),
19
+ provider: selection.provider,
20
+ model: selection.model,
21
+ });
22
+ const product = createProductHost({
23
+ context,
24
+ cwd: context.require(workspaceCapabilityKey).allowedRoot,
25
+ agentDir: join(homedir(), ".di-code"),
26
+ projectTrusted: context.capabilities.trustedProject,
27
+ provider: selection.provider,
28
+ model: selection.model,
29
+ runtimeSnapshot: () => {
30
+ const ui = session.ui();
31
+ return {
32
+ providerId: ui.providerId,
33
+ modelId: ui.modelId,
34
+ ...(ui.thinkingLevel ? { thinkingLevel: ui.thinkingLevel } : {}),
35
+ };
36
+ },
37
+ reloadRuntime: async () => {
38
+ const cwd = context.require(workspaceCapabilityKey).allowedRoot;
39
+ const agentDir = join(homedir(), ".di-code");
40
+ const configuration = await loadStartupConfiguration(cwd, process.env, agentDir);
41
+ const runtime = resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);
42
+ session.setRuntimeValue(runtime.provider, runtime.model);
43
+ return configuration;
44
+ },
45
+ reloadConfiguration: () => loadStartupConfiguration(context.require(workspaceCapabilityKey).allowedRoot, process.env, join(homedir(), ".di-code")),
46
+ refreshResources: (projectTrusted) => session.refreshResources(projectTrusted),
47
+ });
48
+ if (!session.state().activeSession)
49
+ await session.createSession();
50
+ const server = new RpcServer({
51
+ session,
52
+ methods: context.require(rpcMethodRegistryKey),
53
+ productState: { projectTrusted: context.capabilities.trustedProject },
54
+ productHost: product,
55
+ input: process.stdin,
56
+ output: process.stdout,
57
+ onError: (error) => process.stderr.write(`${error.message}\n`),
58
+ });
59
+ await context.require(modeRegistryKey).execute("rpc", { run: () => server.start() });
60
+ context.set(rpcServerKey, { shutdown: () => server.shutdown(), finished: () => server.finished() });
61
+ fiber.addDisposer(async () => {
62
+ await server.shutdown();
63
+ await product.dispose();
64
+ await session.dispose();
65
+ });
66
+ };
67
+ //# sourceMappingURL=rpc-server-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-server-entry.js","sourceRoot":"","sources":["../src/rpc-server-entry.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { modeRegistryKey, rpcMethodRegistryKey, runtimeSelectionKey, workspaceCapabilityKey } from \"@di-code/builtins\";\nimport type { PluginDefinition } from \"@di-code/plugin-runtime\";\nimport { RpcServer } from \"./rpc/server.ts\";\nimport { rpcServerKey } from \"./rpc/server-service.ts\";\nimport { createProductHost } from \"./runtime/product-host.ts\";\nimport { createSessionHost } from \"./runtime/session-host.ts\";\nimport { loadStartupConfiguration, resolveStartupRuntime } from \"./startup.ts\";\n\nexport { type RpcServerService, rpcServerKey } from \"./rpc/server-service.ts\";\n\n/** Creates the process RPC server from composition services and releases it with its owner Fiber. */\nexport const apiVersion = 1 as const;\nexport const name = \"rpc-server\";\nexport const version = \"0.1.7\";\nexport const apply: PluginDefinition[\"apply\"] = async (context, _config, fiber) => {\n\tconst selection = context.require(runtimeSelectionKey).selected();\n\tconst session = await createSessionHost(context, {\n\t\tcwd: context.require(workspaceCapabilityKey).allowedRoot,\n\t\tagentDir: join(homedir(), \".di-code\"),\n\t\tprovider: selection.provider,\n\t\tmodel: selection.model,\n\t});\n\tconst product = createProductHost({\n\t\tcontext,\n\t\tcwd: context.require(workspaceCapabilityKey).allowedRoot,\n\t\tagentDir: join(homedir(), \".di-code\"),\n\t\tprojectTrusted: context.capabilities.trustedProject,\n\t\tprovider: selection.provider,\n\t\tmodel: selection.model,\n\t\truntimeSnapshot: () => {\n\t\t\tconst ui = session.ui();\n\t\t\treturn {\n\t\t\t\tproviderId: ui.providerId,\n\t\t\t\tmodelId: ui.modelId,\n\t\t\t\t...(ui.thinkingLevel ? { thinkingLevel: ui.thinkingLevel } : {}),\n\t\t\t};\n\t\t},\n\t\treloadRuntime: async () => {\n\t\t\tconst cwd = context.require(workspaceCapabilityKey).allowedRoot;\n\t\t\tconst agentDir = join(homedir(), \".di-code\");\n\t\t\tconst configuration = await loadStartupConfiguration(cwd, process.env, agentDir);\n\t\t\tconst runtime = resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);\n\t\t\tsession.setRuntimeValue(runtime.provider, runtime.model);\n\t\t\treturn configuration;\n\t\t},\n\t\treloadConfiguration: () =>\n\t\t\tloadStartupConfiguration(\n\t\t\t\tcontext.require(workspaceCapabilityKey).allowedRoot,\n\t\t\t\tprocess.env,\n\t\t\t\tjoin(homedir(), \".di-code\"),\n\t\t\t),\n\t\trefreshResources: (projectTrusted) => session.refreshResources(projectTrusted),\n\t});\n\tif (!session.state().activeSession) await session.createSession();\n\tconst server = new RpcServer({\n\t\tsession,\n\t\tmethods: context.require(rpcMethodRegistryKey),\n\t\tproductState: { projectTrusted: context.capabilities.trustedProject },\n\t\tproductHost: product,\n\t\tinput: process.stdin,\n\t\toutput: process.stdout,\n\t\tonError: (error) => process.stderr.write(`${error.message}\\n`),\n\t});\n\tawait context.require(modeRegistryKey).execute(\"rpc\", { run: () => server.start() });\n\tcontext.set(rpcServerKey, { shutdown: () => server.shutdown(), finished: () => server.finished() });\n\tfiber.addDisposer(async () => {\n\t\tawait server.shutdown();\n\t\tawait product.dispose();\n\t\tawait session.dispose();\n\t});\n};\n"]}
@@ -0,0 +1,13 @@
1
+ import type { RpcAttachmentStore } from "../rpc/dispatcher.ts";
2
+ export interface ManagedAttachmentStoreOptions {
3
+ readonly directory: string;
4
+ readonly ttlMs?: number;
5
+ readonly maxCount?: number;
6
+ readonly maxBytes?: number;
7
+ }
8
+ /**
9
+ * Creates an actor-owned attachment directory. Only opaque IDs cross the RPC boundary; backing paths remain local
10
+ * and are deleted on consumption, expiration, or host disposal.
11
+ */
12
+ export declare function createManagedAttachmentStore(options: ManagedAttachmentStoreOptions): Promise<RpcAttachmentStore>;
13
+ //# sourceMappingURL=attachment-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-store.d.ts","sourceRoot":"","sources":["../../src/runtime/attachment-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD;;;GAGG;AACH,wBAAsB,4BAA4B,CACjD,OAAO,EAAE,6BAA6B,GACpC,OAAO,CAAC,kBAAkB,CAAC,CAiF7B"}
@@ -0,0 +1,93 @@
1
+ import { lstat, mkdir, readFile, rm, unlink, writeFile } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { RpcProtocolError } from "../rpc/protocol.js";
4
+ /**
5
+ * Creates an actor-owned attachment directory. Only opaque IDs cross the RPC boundary; backing paths remain local
6
+ * and are deleted on consumption, expiration, or host disposal.
7
+ */
8
+ export async function createManagedAttachmentStore(options) {
9
+ const directory = resolve(options.directory);
10
+ await mkdir(directory, { recursive: true });
11
+ const stats = await lstat(directory);
12
+ if (!stats.isDirectory() || stats.isSymbolicLink())
13
+ throw new Error("Managed attachment storage must be a real directory.");
14
+ const ttlMs = options.ttlMs ?? 10 * 60 * 1000;
15
+ const maxCount = options.maxCount ?? 32;
16
+ const maxBytes = options.maxBytes ?? 64 * 1024 * 1024;
17
+ const attachments = new Map();
18
+ let disposed = false;
19
+ const ensureOpen = () => {
20
+ if (disposed)
21
+ throw new RpcProtocolError("DISPOSED", "Attachment storage has been disposed.");
22
+ };
23
+ const remove = async (id) => {
24
+ const attachment = attachments.get(id);
25
+ if (!attachment)
26
+ return;
27
+ attachments.delete(id);
28
+ await unlink(attachment.path).catch((cause) => {
29
+ if (cause instanceof Error && "code" in cause && cause.code === "ENOENT")
30
+ return;
31
+ throw cause;
32
+ });
33
+ };
34
+ const prune = async () => {
35
+ const cutoff = Date.now() - ttlMs;
36
+ await Promise.all([...attachments.values()].filter((item) => item.createdAt <= cutoff).map((item) => remove(item.info.id)));
37
+ };
38
+ return {
39
+ create: async (input) => {
40
+ ensureOpen();
41
+ await prune();
42
+ const usedBytes = [...attachments.values()].reduce((total, item) => total + item.info.bytes, 0);
43
+ if (attachments.size >= maxCount || usedBytes + input.bytes > maxBytes)
44
+ throw new RpcProtocolError("BUSY", "Attachment storage is full; consume or retry later.");
45
+ const info = {
46
+ id: input.id,
47
+ name: input.name,
48
+ contentType: input.contentType,
49
+ bytes: input.bytes,
50
+ };
51
+ const path = join(directory, `${input.id}.attachment`);
52
+ await writeFile(path, Buffer.from(input.data, "base64"), { flag: "wx" });
53
+ attachments.set(input.id, { info, path, createdAt: Date.now() });
54
+ return info;
55
+ },
56
+ take: async (ids) => {
57
+ ensureOpen();
58
+ await prune();
59
+ const selected = ids.map((id) => {
60
+ const attachment = attachments.get(id);
61
+ if (!attachment)
62
+ throw new RpcProtocolError("NOT_FOUND", "RPC attachment was not found.");
63
+ return attachment;
64
+ });
65
+ const images = [];
66
+ for (const attachment of selected) {
67
+ try {
68
+ images.push({
69
+ type: "image",
70
+ data: (await readFile(attachment.path)).toString("base64"),
71
+ mimeType: attachment.info.contentType,
72
+ });
73
+ }
74
+ finally {
75
+ await remove(attachment.info.id);
76
+ }
77
+ }
78
+ return images;
79
+ },
80
+ discard: async (ids) => {
81
+ for (const id of ids)
82
+ await remove(id);
83
+ },
84
+ dispose: async () => {
85
+ if (disposed)
86
+ return;
87
+ disposed = true;
88
+ attachments.clear();
89
+ await rm(directory, { recursive: true, force: true });
90
+ },
91
+ };
92
+ }
93
+ //# sourceMappingURL=attachment-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-store.js","sourceRoot":"","sources":["../../src/runtime/attachment-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { lstat, mkdir, readFile, rm, unlink, writeFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport type { ImageContent } from \"@di-code/ai\";\nimport type { RpcAttachmentStore } from \"../rpc/dispatcher.ts\";\nimport { type RpcAttachmentInfo, RpcProtocolError } from \"../rpc/protocol.ts\";\n\nexport interface ManagedAttachmentStoreOptions {\n\treadonly directory: string;\n\treadonly ttlMs?: number;\n\treadonly maxCount?: number;\n\treadonly maxBytes?: number;\n}\n\ninterface StoredAttachment {\n\treadonly info: RpcAttachmentInfo;\n\treadonly path: string;\n\treadonly createdAt: number;\n}\n\n/**\n * Creates an actor-owned attachment directory. Only opaque IDs cross the RPC boundary; backing paths remain local\n * and are deleted on consumption, expiration, or host disposal.\n */\nexport async function createManagedAttachmentStore(\n\toptions: ManagedAttachmentStoreOptions,\n): Promise<RpcAttachmentStore> {\n\tconst directory = resolve(options.directory);\n\tawait mkdir(directory, { recursive: true });\n\tconst stats = await lstat(directory);\n\tif (!stats.isDirectory() || stats.isSymbolicLink())\n\t\tthrow new Error(\"Managed attachment storage must be a real directory.\");\n\tconst ttlMs = options.ttlMs ?? 10 * 60 * 1000;\n\tconst maxCount = options.maxCount ?? 32;\n\tconst maxBytes = options.maxBytes ?? 64 * 1024 * 1024;\n\tconst attachments = new Map<string, StoredAttachment>();\n\tlet disposed = false;\n\n\tconst ensureOpen = (): void => {\n\t\tif (disposed) throw new RpcProtocolError(\"DISPOSED\", \"Attachment storage has been disposed.\");\n\t};\n\tconst remove = async (id: string): Promise<void> => {\n\t\tconst attachment = attachments.get(id);\n\t\tif (!attachment) return;\n\t\tattachments.delete(id);\n\t\tawait unlink(attachment.path).catch((cause: unknown) => {\n\t\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\") return;\n\t\t\tthrow cause;\n\t\t});\n\t};\n\tconst prune = async (): Promise<void> => {\n\t\tconst cutoff = Date.now() - ttlMs;\n\t\tawait Promise.all(\n\t\t\t[...attachments.values()].filter((item) => item.createdAt <= cutoff).map((item) => remove(item.info.id)),\n\t\t);\n\t};\n\n\treturn {\n\t\tcreate: async (input) => {\n\t\t\tensureOpen();\n\t\t\tawait prune();\n\t\t\tconst usedBytes = [...attachments.values()].reduce((total, item) => total + item.info.bytes, 0);\n\t\t\tif (attachments.size >= maxCount || usedBytes + input.bytes > maxBytes)\n\t\t\t\tthrow new RpcProtocolError(\"BUSY\", \"Attachment storage is full; consume or retry later.\");\n\t\t\tconst info: RpcAttachmentInfo = {\n\t\t\t\tid: input.id,\n\t\t\t\tname: input.name,\n\t\t\t\tcontentType: input.contentType,\n\t\t\t\tbytes: input.bytes,\n\t\t\t};\n\t\t\tconst path = join(directory, `${input.id}.attachment`);\n\t\t\tawait writeFile(path, Buffer.from(input.data, \"base64\"), { flag: \"wx\" });\n\t\t\tattachments.set(input.id, { info, path, createdAt: Date.now() });\n\t\t\treturn info;\n\t\t},\n\t\ttake: async (ids) => {\n\t\t\tensureOpen();\n\t\t\tawait prune();\n\t\t\tconst selected = ids.map((id) => {\n\t\t\t\tconst attachment = attachments.get(id);\n\t\t\t\tif (!attachment) throw new RpcProtocolError(\"NOT_FOUND\", \"RPC attachment was not found.\");\n\t\t\t\treturn attachment;\n\t\t\t});\n\t\t\tconst images: ImageContent[] = [];\n\t\t\tfor (const attachment of selected) {\n\t\t\t\ttry {\n\t\t\t\t\timages.push({\n\t\t\t\t\t\ttype: \"image\",\n\t\t\t\t\t\tdata: (await readFile(attachment.path)).toString(\"base64\"),\n\t\t\t\t\t\tmimeType: attachment.info.contentType,\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tawait remove(attachment.info.id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn images;\n\t\t},\n\t\tdiscard: async (ids) => {\n\t\t\tfor (const id of ids) await remove(id);\n\t\t},\n\t\tdispose: async () => {\n\t\t\tif (disposed) return;\n\t\t\tdisposed = true;\n\t\t\tattachments.clear();\n\t\t\tawait rm(directory, { recursive: true, force: true });\n\t\t},\n\t};\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { type CompositionLoader, type PluginInventory } from "@di-code/plugin-loader";
2
+ import { type Context, type RuntimeMode } from "@di-code/plugin-runtime";
3
+ export interface PluginRuntime {
4
+ readonly context: Context;
5
+ readonly loader: CompositionLoader;
6
+ readonly inventory: PluginInventory;
7
+ readonly dispose: () => Promise<void>;
8
+ }
9
+ /** Starts the reference built-in composition without constructing product services in the caller. */
10
+ export declare function startMinimalPluginRuntime(options?: {
11
+ readonly mode?: RuntimeMode;
12
+ readonly trustedProject?: boolean;
13
+ }): Promise<PluginRuntime>;
14
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAA2B,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,KAAK,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE5F,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,qGAAqG;AACrG,wBAAsB,yBAAyB,CAC9C,OAAO,GAAE;IACR,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC7B,GACJ,OAAO,CAAC,aAAa,CAAC,CAwBxB"}
@@ -0,0 +1,29 @@
1
+ import { createCompositionLoader } from "@di-code/plugin-loader";
2
+ import { createRootContext } from "@di-code/plugin-runtime";
3
+ /** Starts the reference built-in composition without constructing product services in the caller. */
4
+ export async function startMinimalPluginRuntime(options = {}) {
5
+ const context = createRootContext({ mode: options.mode ?? "print", trustedProject: options.trustedProject ?? true });
6
+ const loader = createCompositionLoader({
7
+ context,
8
+ entries: [
9
+ { id: "provider-registry", name: "@di-code/builtins/provider-registry" },
10
+ {
11
+ id: "provider-faux",
12
+ name: "@di-code/builtins/provider-faux",
13
+ dependsOn: ["provider-registry"],
14
+ },
15
+ { id: "session-memory", name: "@di-code/builtins/session-memory" },
16
+ ],
17
+ });
18
+ const inventory = await loader.load();
19
+ return {
20
+ context,
21
+ loader,
22
+ inventory,
23
+ dispose: async () => {
24
+ await loader.dispose();
25
+ await context.dispose();
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,uBAAuB,EAAwB,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAgB,iBAAiB,EAAoB,MAAM,yBAAyB,CAAC;AAS5F,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,UAGI,EAAE;IAEN,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC,CAAC;IACrH,MAAM,MAAM,GAAG,uBAAuB,CAAC;QACtC,OAAO;QACP,OAAO,EAAE;YACR,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,qCAAqC,EAAE;YACxE;gBACC,EAAE,EAAE,eAAe;gBACnB,IAAI,EAAE,iCAAiC;gBACvC,SAAS,EAAE,CAAC,mBAAmB,CAAC;aAChC;YACD,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,kCAAkC,EAAE;SAClE;KACD,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtC,OAAO;QACN,OAAO;QACP,MAAM;QACN,SAAS;QACT,OAAO,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["import { type CompositionLoader, createCompositionLoader, type PluginInventory } from \"@di-code/plugin-loader\";\nimport { type Context, createRootContext, type RuntimeMode } from \"@di-code/plugin-runtime\";\n\nexport interface PluginRuntime {\n\treadonly context: Context;\n\treadonly loader: CompositionLoader;\n\treadonly inventory: PluginInventory;\n\treadonly dispose: () => Promise<void>;\n}\n\n/** Starts the reference built-in composition without constructing product services in the caller. */\nexport async function startMinimalPluginRuntime(\n\toptions: {\n\t\treadonly mode?: RuntimeMode;\n\t\treadonly trustedProject?: boolean;\n\t} = {},\n): Promise<PluginRuntime> {\n\tconst context = createRootContext({ mode: options.mode ?? \"print\", trustedProject: options.trustedProject ?? true });\n\tconst loader = createCompositionLoader({\n\t\tcontext,\n\t\tentries: [\n\t\t\t{ id: \"provider-registry\", name: \"@di-code/builtins/provider-registry\" },\n\t\t\t{\n\t\t\t\tid: \"provider-faux\",\n\t\t\t\tname: \"@di-code/builtins/provider-faux\",\n\t\t\t\tdependsOn: [\"provider-registry\"],\n\t\t\t},\n\t\t\t{ id: \"session-memory\", name: \"@di-code/builtins/session-memory\" },\n\t\t],\n\t});\n\tconst inventory = await loader.load();\n\treturn {\n\t\tcontext,\n\t\tloader,\n\t\tinventory,\n\t\tdispose: async () => {\n\t\t\tawait loader.dispose();\n\t\t\tawait context.dispose();\n\t\t},\n\t};\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import type { CliCommand } from "../cli.ts";
2
+ import type { InteractiveModeEntryOptions } from "../modes/interactive-entry.ts";
3
+ export interface InteractiveBootstrapOptions {
4
+ readonly isInteractiveTerminal: boolean;
5
+ readonly promptProjectTrust?: (cwd: string) => Promise<boolean>;
6
+ readonly startInteractiveMode?: (options: InteractiveModeEntryOptions) => number;
7
+ }
8
+ export type InteractiveCliCommand = Extract<CliCommand, {
9
+ kind: "run";
10
+ }> & {
11
+ readonly mode: "interactive";
12
+ };
13
+ /** Input supplied by bootstrap to the composition-owned interactive host command. */
14
+ export interface InteractiveHostRequest {
15
+ readonly command: InteractiveCliCommand;
16
+ readonly cwd: string;
17
+ readonly agentDir: string;
18
+ readonly projectTrusted: boolean;
19
+ readonly stderr: (text: string) => void;
20
+ readonly startInteractiveMode?: (options: InteractiveModeEntryOptions) => number;
21
+ }
22
+ //# sourceMappingURL=interactive-host-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-host-service.d.ts","sourceRoot":"","sources":["../../src/runtime/interactive-host-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,MAAM,CAAC;CACjF;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5G,qFAAqF;AACrF,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,MAAM,CAAC;CACjF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interactive-host-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-host-service.js","sourceRoot":"","sources":["../../src/runtime/interactive-host-service.ts"],"names":[],"mappings":"","sourcesContent":["import type { CliCommand } from \"../cli.ts\";\nimport type { InteractiveModeEntryOptions } from \"../modes/interactive-entry.ts\";\n\nexport interface InteractiveBootstrapOptions {\n\treadonly isInteractiveTerminal: boolean;\n\treadonly promptProjectTrust?: (cwd: string) => Promise<boolean>;\n\treadonly startInteractiveMode?: (options: InteractiveModeEntryOptions) => number;\n}\n\nexport type InteractiveCliCommand = Extract<CliCommand, { kind: \"run\" }> & { readonly mode: \"interactive\" };\n\n/** Input supplied by bootstrap to the composition-owned interactive host command. */\nexport interface InteractiveHostRequest {\n\treadonly command: InteractiveCliCommand;\n\treadonly cwd: string;\n\treadonly agentDir: string;\n\treadonly projectTrusted: boolean;\n\treadonly stderr: (text: string) => void;\n\treadonly startInteractiveMode?: (options: InteractiveModeEntryOptions) => number;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { ResourceLoaderOptions, ResourceSnapshot } from "../core/resources/types.ts";
2
+ export interface InteractiveResourceSnapshot {
3
+ readonly resources: ResourceSnapshot;
4
+ readonly systemPrompt: string;
5
+ }
6
+ /** Loads interactive resources and composes the prompt from registry-owned sections. */
7
+ export interface InteractiveResourceService {
8
+ readonly load: (options: ResourceLoaderOptions) => Promise<InteractiveResourceSnapshot>;
9
+ }
10
+ export declare const interactiveResourceServiceKey: import("@di-code/plugin-runtime").ServiceKey<InteractiveResourceService>;
11
+ //# sourceMappingURL=interactive-resource-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-resource-service.d.ts","sourceRoot":"","sources":["../../src/runtime/interactive-resource-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC9B;AAED,wFAAwF;AACxF,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACxF;AAED,eAAO,MAAM,6BAA6B,0EAAwE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createServiceKey } from "@di-code/plugin-runtime";
2
+ export const interactiveResourceServiceKey = createServiceKey("interactive-resources");
3
+ //# sourceMappingURL=interactive-resource-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-resource-service.js","sourceRoot":"","sources":["../../src/runtime/interactive-resource-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAa3D,MAAM,CAAC,MAAM,6BAA6B,GAAG,gBAAgB,CAA6B,uBAAuB,CAAC,CAAC","sourcesContent":["import { createServiceKey } from \"@di-code/plugin-runtime\";\nimport type { ResourceLoaderOptions, ResourceSnapshot } from \"../core/resources/types.ts\";\n\nexport interface InteractiveResourceSnapshot {\n\treadonly resources: ResourceSnapshot;\n\treadonly systemPrompt: string;\n}\n\n/** Loads interactive resources and composes the prompt from registry-owned sections. */\nexport interface InteractiveResourceService {\n\treadonly load: (options: ResourceLoaderOptions) => Promise<InteractiveResourceSnapshot>;\n}\n\nexport const interactiveResourceServiceKey = createServiceKey<InteractiveResourceService>(\"interactive-resources\");\n"]}
@@ -0,0 +1,5 @@
1
+ import type { PluginDefinition } from "@di-code/plugin-runtime";
2
+ export { type PluginInventoryService, pluginInventoryKey } from "./plugin-inventory-service.ts";
3
+ /** Stores the Loader-owned inventory without duplicating lifecycle state. */
4
+ export declare const pluginInventory: PluginDefinition;
5
+ //# sourceMappingURL=plugin-inventory-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-inventory-entry.d.ts","sourceRoot":"","sources":["../../src/runtime/plugin-inventory-entry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,KAAK,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEhG,6EAA6E;AAC7E,eAAO,MAAM,eAAe,EAAE,gBAa7B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { pluginInventoryKey } from "./plugin-inventory-service.js";
2
+ export { pluginInventoryKey } from "./plugin-inventory-service.js";
3
+ /** Stores the Loader-owned inventory without duplicating lifecycle state. */
4
+ export const pluginInventory = {
5
+ apiVersion: 1,
6
+ name: "plugin-inventory",
7
+ version: "0.1.7",
8
+ apply(context) {
9
+ let inventory;
10
+ context.set(pluginInventoryKey, {
11
+ set: (value) => {
12
+ inventory = value;
13
+ },
14
+ snapshot: () => inventory,
15
+ });
16
+ },
17
+ };
18
+ //# sourceMappingURL=plugin-inventory-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-inventory-entry.js","sourceRoot":"","sources":["../../src/runtime/plugin-inventory-entry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAA+B,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEhG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAqB;IAChD,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,OAAO;QACZ,IAAI,SAAsC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE;YAC/B,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;gBACd,SAAS,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;SACzB,CAAC,CAAC;IACJ,CAAC;CACD,CAAC","sourcesContent":["import type { PluginInventory } from \"@di-code/plugin-loader\";\nimport type { PluginDefinition } from \"@di-code/plugin-runtime\";\nimport { pluginInventoryKey } from \"./plugin-inventory-service.ts\";\n\nexport { type PluginInventoryService, pluginInventoryKey } from \"./plugin-inventory-service.ts\";\n\n/** Stores the Loader-owned inventory without duplicating lifecycle state. */\nexport const pluginInventory: PluginDefinition = {\n\tapiVersion: 1,\n\tname: \"plugin-inventory\",\n\tversion: \"0.1.7\",\n\tapply(context) {\n\t\tlet inventory: PluginInventory | undefined;\n\t\tcontext.set(pluginInventoryKey, {\n\t\t\tset: (value) => {\n\t\t\t\tinventory = value;\n\t\t\t},\n\t\t\tsnapshot: () => inventory,\n\t\t});\n\t},\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import type { PluginInventory } from "@di-code/plugin-loader";
2
+ /** Loader inventory projection consumed by bootstrap and observation entries. */
3
+ export interface PluginInventoryService {
4
+ readonly set: (inventory: PluginInventory) => void;
5
+ readonly snapshot: () => PluginInventory | undefined;
6
+ }
7
+ export declare const pluginInventoryKey: import("@di-code/plugin-runtime").ServiceKey<PluginInventoryService>;
8
+ //# sourceMappingURL=plugin-inventory-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-inventory-service.d.ts","sourceRoot":"","sources":["../../src/runtime/plugin-inventory-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;CACrD;AAED,eAAO,MAAM,kBAAkB,sEAA+D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createServiceKey } from "@di-code/plugin-runtime";
2
+ export const pluginInventoryKey = createServiceKey("plugin-inventory");
3
+ //# sourceMappingURL=plugin-inventory-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-inventory-service.js","sourceRoot":"","sources":["../../src/runtime/plugin-inventory-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQ3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAyB,kBAAkB,CAAC,CAAC","sourcesContent":["import type { PluginInventory } from \"@di-code/plugin-loader\";\nimport { createServiceKey } from \"@di-code/plugin-runtime\";\n\n/** Loader inventory projection consumed by bootstrap and observation entries. */\nexport interface PluginInventoryService {\n\treadonly set: (inventory: PluginInventory) => void;\n\treadonly snapshot: () => PluginInventory | undefined;\n}\n\nexport const pluginInventoryKey = createServiceKey<PluginInventoryService>(\"plugin-inventory\");\n"]}
@@ -0,0 +1,20 @@
1
+ import { type ManagedPlugin } from "@di-code/plugin-loader";
2
+ import { type PluginDefinition } from "@di-code/plugin-runtime";
3
+ export type PluginManagementAction = "install" | "list" | "get" | "enable" | "disable" | "update" | "remove";
4
+ export interface PluginManagementCommand {
5
+ readonly action: PluginManagementAction;
6
+ readonly argument?: string;
7
+ readonly stdout: (text: string) => void;
8
+ readonly stderr: (text: string) => void;
9
+ }
10
+ export interface PluginManagerService {
11
+ readonly execute: (command: PluginManagementCommand) => Promise<number>;
12
+ readonly list: () => Promise<readonly ManagedPlugin[]>;
13
+ }
14
+ export interface PluginManagerEntryConfig {
15
+ readonly agentDir?: string;
16
+ }
17
+ export declare const pluginManagerKey: import("@di-code/plugin-runtime").ServiceKey<PluginManagerService>;
18
+ /** Registers the composition-owned, non-provider plugin management command. */
19
+ export declare const pluginManager: PluginDefinition<PluginManagerEntryConfig>;
20
+ //# sourceMappingURL=plugin-manager-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager-entry.d.ts","sourceRoot":"","sources":["../../src/runtime/plugin-manager-entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAoB,KAAK,gBAAgB,EAAuB,MAAM,yBAAyB,CAAC;AAEvG,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7G,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,oEAA2D,CAAC;AA6BzF,+EAA+E;AAC/E,eAAO,MAAM,aAAa,EAAE,gBAAgB,CAAC,wBAAwB,CAgEpE,CAAC"}