@di-code/coding-agent 0.1.6 → 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 (338) hide show
  1. package/README.md +112 -68
  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 +21 -7
  35. package/dist/core/session.d.ts.map +1 -1
  36. package/dist/core/session.js +77 -41
  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/i18n.d.ts.map +1 -1
  85. package/dist/i18n.js +2 -0
  86. package/dist/i18n.js.map +1 -1
  87. package/dist/index.d.ts +6 -3
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +6 -3
  90. package/dist/index.js.map +1 -1
  91. package/dist/interactive/builtin.d.ts +17 -0
  92. package/dist/interactive/builtin.d.ts.map +1 -0
  93. package/dist/interactive/builtin.js +47 -0
  94. package/dist/interactive/builtin.js.map +1 -0
  95. package/dist/interactive/controller.d.ts +85 -0
  96. package/dist/interactive/controller.d.ts.map +1 -0
  97. package/dist/interactive/controller.js +211 -0
  98. package/dist/interactive/controller.js.map +1 -0
  99. package/dist/interactive/index.d.ts +3 -0
  100. package/dist/interactive/index.d.ts.map +1 -0
  101. package/dist/interactive/index.js +3 -0
  102. package/dist/interactive/index.js.map +1 -0
  103. package/dist/interactive-host-entry.d.ts +7 -0
  104. package/dist/interactive-host-entry.d.ts.map +1 -0
  105. package/dist/interactive-host-entry.js +123 -0
  106. package/dist/interactive-host-entry.js.map +1 -0
  107. package/dist/interactive-profile.d.ts +18 -0
  108. package/dist/interactive-profile.d.ts.map +1 -0
  109. package/dist/interactive-profile.js +290 -0
  110. package/dist/interactive-profile.js.map +1 -0
  111. package/dist/interactive-resources-entry.d.ts +7 -0
  112. package/dist/interactive-resources-entry.d.ts.map +1 -0
  113. package/dist/interactive-resources-entry.js +42 -0
  114. package/dist/interactive-resources-entry.js.map +1 -0
  115. package/dist/legacy-main.d.ts +39 -0
  116. package/dist/legacy-main.d.ts.map +1 -0
  117. package/dist/legacy-main.js +611 -0
  118. package/dist/legacy-main.js.map +1 -0
  119. package/dist/main.d.ts +15 -34
  120. package/dist/main.d.ts.map +1 -1
  121. package/dist/main.js +130 -513
  122. package/dist/main.js.map +1 -1
  123. package/dist/mcp/entries.d.ts +42 -0
  124. package/dist/mcp/entries.d.ts.map +1 -0
  125. package/dist/mcp/entries.js +98 -0
  126. package/dist/mcp/entries.js.map +1 -0
  127. package/dist/mcp-client-entry.d.ts +5 -0
  128. package/dist/mcp-client-entry.d.ts.map +1 -0
  129. package/dist/mcp-client-entry.js +6 -0
  130. package/dist/mcp-client-entry.js.map +1 -0
  131. package/dist/mcp-config-entry.d.ts +5 -0
  132. package/dist/mcp-config-entry.d.ts.map +1 -0
  133. package/dist/mcp-config-entry.js +6 -0
  134. package/dist/mcp-config-entry.js.map +1 -0
  135. package/dist/mcp-tools-entry.d.ts +5 -0
  136. package/dist/mcp-tools-entry.d.ts.map +1 -0
  137. package/dist/mcp-tools-entry.js +6 -0
  138. package/dist/mcp-tools-entry.js.map +1 -0
  139. package/dist/mcp-transport-entry.d.ts +5 -0
  140. package/dist/mcp-transport-entry.d.ts.map +1 -0
  141. package/dist/mcp-transport-entry.js +6 -0
  142. package/dist/mcp-transport-entry.js.map +1 -0
  143. package/dist/modes/interactive-entry.d.ts +18 -0
  144. package/dist/modes/interactive-entry.d.ts.map +1 -0
  145. package/dist/modes/interactive-entry.js +21 -0
  146. package/dist/modes/interactive-entry.js.map +1 -0
  147. package/dist/modes/interactive-state.js +1 -1
  148. package/dist/modes/interactive-state.js.map +1 -1
  149. package/dist/modes/interactive.d.ts +16 -6
  150. package/dist/modes/interactive.d.ts.map +1 -1
  151. package/dist/modes/interactive.js +99 -33
  152. package/dist/modes/interactive.js.map +1 -1
  153. package/dist/modes/json-entry.d.ts +13 -0
  154. package/dist/modes/json-entry.d.ts.map +1 -0
  155. package/dist/modes/json-entry.js +14 -0
  156. package/dist/modes/json-entry.js.map +1 -0
  157. package/dist/modes/json.d.ts +4 -1
  158. package/dist/modes/json.d.ts.map +1 -1
  159. package/dist/modes/json.js +3 -3
  160. package/dist/modes/json.js.map +1 -1
  161. package/dist/modes/print-entry.d.ts +10 -0
  162. package/dist/modes/print-entry.d.ts.map +1 -0
  163. package/dist/modes/print-entry.js +11 -0
  164. package/dist/modes/print-entry.js.map +1 -0
  165. package/dist/modes/tree-selector.d.ts.map +1 -1
  166. package/dist/modes/tree-selector.js +4 -0
  167. package/dist/modes/tree-selector.js.map +1 -1
  168. package/dist/plugin-dump-composition.d.ts +6 -0
  169. package/dist/plugin-dump-composition.d.ts.map +1 -0
  170. package/dist/plugin-dump-composition.js +7 -0
  171. package/dist/plugin-dump-composition.js.map +1 -0
  172. package/dist/plugin-inventory.d.ts +7 -0
  173. package/dist/plugin-inventory.d.ts.map +1 -0
  174. package/dist/plugin-inventory.js +8 -0
  175. package/dist/plugin-inventory.js.map +1 -0
  176. package/dist/plugin-manager.d.ts +6 -0
  177. package/dist/plugin-manager.d.ts.map +1 -0
  178. package/dist/plugin-manager.js +7 -0
  179. package/dist/plugin-manager.js.map +1 -0
  180. package/dist/plugin-trace.d.ts +6 -0
  181. package/dist/plugin-trace.d.ts.map +1 -0
  182. package/dist/plugin-trace.js +7 -0
  183. package/dist/plugin-trace.js.map +1 -0
  184. package/dist/plugins/dynamic-broker.d.ts +76 -0
  185. package/dist/plugins/dynamic-broker.d.ts.map +1 -0
  186. package/dist/plugins/dynamic-broker.js +852 -0
  187. package/dist/plugins/dynamic-broker.js.map +1 -0
  188. package/dist/plugins/profile.d.ts +15 -0
  189. package/dist/plugins/profile.d.ts.map +1 -0
  190. package/dist/plugins/profile.js +34 -0
  191. package/dist/plugins/profile.js.map +1 -0
  192. package/dist/plugins/runtime-host.d.ts +37 -0
  193. package/dist/plugins/runtime-host.d.ts.map +1 -0
  194. package/dist/plugins/runtime-host.js +95 -0
  195. package/dist/plugins/runtime-host.js.map +1 -0
  196. package/dist/plugins/trust.d.ts +8 -0
  197. package/dist/plugins/trust.d.ts.map +1 -0
  198. package/dist/plugins/trust.js +59 -0
  199. package/dist/plugins/trust.js.map +1 -0
  200. package/dist/project-trust-entry.d.ts +15 -0
  201. package/dist/project-trust-entry.d.ts.map +1 -0
  202. package/dist/project-trust-entry.js +15 -0
  203. package/dist/project-trust-entry.js.map +1 -0
  204. package/dist/rpc/client.d.ts +78 -6
  205. package/dist/rpc/client.d.ts.map +1 -1
  206. package/dist/rpc/client.js +172 -4
  207. package/dist/rpc/client.js.map +1 -1
  208. package/dist/rpc/dispatcher.d.ts +121 -0
  209. package/dist/rpc/dispatcher.d.ts.map +1 -0
  210. package/dist/rpc/dispatcher.js +994 -0
  211. package/dist/rpc/dispatcher.js.map +1 -0
  212. package/dist/rpc/index.d.ts +2 -0
  213. package/dist/rpc/index.d.ts.map +1 -1
  214. package/dist/rpc/index.js +2 -0
  215. package/dist/rpc/index.js.map +1 -1
  216. package/dist/rpc/lifecycle.d.ts +6 -0
  217. package/dist/rpc/lifecycle.d.ts.map +1 -0
  218. package/dist/rpc/lifecycle.js +24 -0
  219. package/dist/rpc/lifecycle.js.map +1 -0
  220. package/dist/rpc/protocol.d.ts +112 -31
  221. package/dist/rpc/protocol.d.ts.map +1 -1
  222. package/dist/rpc/protocol.js +569 -117
  223. package/dist/rpc/protocol.js.map +1 -1
  224. package/dist/rpc/server-service.d.ts +7 -0
  225. package/dist/rpc/server-service.d.ts.map +1 -0
  226. package/dist/rpc/server-service.js +3 -0
  227. package/dist/rpc/server-service.js.map +1 -0
  228. package/dist/rpc/server.d.ts +16 -19
  229. package/dist/rpc/server.d.ts.map +1 -1
  230. package/dist/rpc/server.js +59 -115
  231. package/dist/rpc/server.js.map +1 -1
  232. package/dist/rpc-client-sdk-entry.d.ts +12 -0
  233. package/dist/rpc-client-sdk-entry.d.ts.map +1 -0
  234. package/dist/rpc-client-sdk-entry.js +11 -0
  235. package/dist/rpc-client-sdk-entry.js.map +1 -0
  236. package/dist/rpc-entry.js +50 -18
  237. package/dist/rpc-entry.js.map +1 -1
  238. package/dist/rpc-server-entry.d.ts +8 -0
  239. package/dist/rpc-server-entry.d.ts.map +1 -0
  240. package/dist/rpc-server-entry.js +67 -0
  241. package/dist/rpc-server-entry.js.map +1 -0
  242. package/dist/runtime/attachment-store.d.ts +13 -0
  243. package/dist/runtime/attachment-store.d.ts.map +1 -0
  244. package/dist/runtime/attachment-store.js +93 -0
  245. package/dist/runtime/attachment-store.js.map +1 -0
  246. package/dist/runtime/bootstrap.d.ts +14 -0
  247. package/dist/runtime/bootstrap.d.ts.map +1 -0
  248. package/dist/runtime/bootstrap.js +29 -0
  249. package/dist/runtime/bootstrap.js.map +1 -0
  250. package/dist/runtime/interactive-host-service.d.ts +22 -0
  251. package/dist/runtime/interactive-host-service.d.ts.map +1 -0
  252. package/dist/runtime/interactive-host-service.js +2 -0
  253. package/dist/runtime/interactive-host-service.js.map +1 -0
  254. package/dist/runtime/interactive-resource-service.d.ts +11 -0
  255. package/dist/runtime/interactive-resource-service.d.ts.map +1 -0
  256. package/dist/runtime/interactive-resource-service.js +3 -0
  257. package/dist/runtime/interactive-resource-service.js.map +1 -0
  258. package/dist/runtime/plugin-inventory-entry.d.ts +5 -0
  259. package/dist/runtime/plugin-inventory-entry.d.ts.map +1 -0
  260. package/dist/runtime/plugin-inventory-entry.js +18 -0
  261. package/dist/runtime/plugin-inventory-entry.js.map +1 -0
  262. package/dist/runtime/plugin-inventory-service.d.ts +8 -0
  263. package/dist/runtime/plugin-inventory-service.d.ts.map +1 -0
  264. package/dist/runtime/plugin-inventory-service.js +3 -0
  265. package/dist/runtime/plugin-inventory-service.js.map +1 -0
  266. package/dist/runtime/plugin-manager-entry.d.ts +20 -0
  267. package/dist/runtime/plugin-manager-entry.d.ts.map +1 -0
  268. package/dist/runtime/plugin-manager-entry.js +96 -0
  269. package/dist/runtime/plugin-manager-entry.js.map +1 -0
  270. package/dist/runtime/plugin-observability-entry.d.ts +12 -0
  271. package/dist/runtime/plugin-observability-entry.d.ts.map +1 -0
  272. package/dist/runtime/plugin-observability-entry.js +73 -0
  273. package/dist/runtime/plugin-observability-entry.js.map +1 -0
  274. package/dist/runtime/product-host.d.ts +91 -0
  275. package/dist/runtime/product-host.d.ts.map +1 -0
  276. package/dist/runtime/product-host.js +529 -0
  277. package/dist/runtime/product-host.js.map +1 -0
  278. package/dist/runtime/session-factory.d.ts +17 -0
  279. package/dist/runtime/session-factory.d.ts.map +1 -0
  280. package/dist/runtime/session-factory.js +75 -0
  281. package/dist/runtime/session-factory.js.map +1 -0
  282. package/dist/runtime/session-host.d.ts +152 -0
  283. package/dist/runtime/session-host.d.ts.map +1 -0
  284. package/dist/runtime/session-host.js +895 -0
  285. package/dist/runtime/session-host.js.map +1 -0
  286. package/dist/runtime-core-entry.d.ts +11 -0
  287. package/dist/runtime-core-entry.d.ts.map +1 -0
  288. package/dist/runtime-core-entry.js +9 -0
  289. package/dist/runtime-core-entry.js.map +1 -0
  290. package/dist/session-factory-entry.d.ts +7 -0
  291. package/dist/session-factory-entry.d.ts.map +1 -0
  292. package/dist/session-factory-entry.js +9 -0
  293. package/dist/session-factory-entry.js.map +1 -0
  294. package/dist/session-store-jsonl-entry.d.ts +7 -0
  295. package/dist/session-store-jsonl-entry.d.ts.map +1 -0
  296. package/dist/session-store-jsonl-entry.js +33 -0
  297. package/dist/session-store-jsonl-entry.js.map +1 -0
  298. package/dist/startup.d.ts +21 -1
  299. package/dist/startup.d.ts.map +1 -1
  300. package/dist/startup.js +179 -10
  301. package/dist/startup.js.map +1 -1
  302. package/dist/subagents/index.d.ts +2 -0
  303. package/dist/subagents/index.d.ts.map +1 -0
  304. package/dist/subagents/index.js +2 -0
  305. package/dist/subagents/index.js.map +1 -0
  306. package/dist/subagents/service.d.ts +50 -0
  307. package/dist/subagents/service.d.ts.map +1 -0
  308. package/dist/subagents/service.js +521 -0
  309. package/dist/subagents/service.js.map +1 -0
  310. package/dist/ui-host.d.ts +125 -0
  311. package/dist/ui-host.d.ts.map +1 -0
  312. package/dist/ui-host.js +275 -0
  313. package/dist/ui-host.js.map +1 -0
  314. package/dist/web/assets/index-BwfuGMvv.css +1 -0
  315. package/dist/web/assets/index-DPUaJqFJ.js +41 -0
  316. package/dist/web/assets/index-DPUaJqFJ.js.map +1 -0
  317. package/dist/web/index.html +14 -0
  318. package/dist/web-command.d.ts +11 -0
  319. package/dist/web-command.d.ts.map +1 -0
  320. package/dist/web-command.js +114 -0
  321. package/dist/web-command.js.map +1 -0
  322. package/dist/web-frontend.d.ts +73 -0
  323. package/dist/web-frontend.d.ts.map +1 -0
  324. package/dist/web-frontend.js +249 -0
  325. package/dist/web-frontend.js.map +1 -0
  326. package/dist/web.d.ts +254 -0
  327. package/dist/web.d.ts.map +1 -0
  328. package/dist/web.js +740 -0
  329. package/dist/web.js.map +1 -0
  330. package/dist/webui-entry.d.ts +3 -0
  331. package/dist/webui-entry.d.ts.map +1 -0
  332. package/dist/webui-entry.js +73 -0
  333. package/dist/webui-entry.js.map +1 -0
  334. package/dist/webui.d.ts +91 -0
  335. package/dist/webui.d.ts.map +1 -0
  336. package/dist/webui.js +882 -0
  337. package/dist/webui.js.map +1 -0
  338. package/package.json +89 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-broker.js","sourceRoot":"","sources":["../../src/plugins/dynamic-broker.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcessWithoutNullStreams, spawn } from \"node:child_process\";\nimport { StringDecoder } from \"node:string_decoder\";\nimport type { AgentContextProvider, AgentRequestContext, AgentTool, ToolExecutionMiddleware } from \"@di-code/agent\";\nimport { type ToolResultContent, Type } from \"@di-code/ai\";\nimport {\n\ttype ActiveRunSnapshot,\n\tDYNAMIC_PLUGIN_MAX_LINE_BYTES,\n\tDYNAMIC_PLUGIN_PROTOCOL_VERSION,\n\ttype DynamicPackageDefinition,\n\ttype DynamicPackageSnapshot,\n\ttype DynamicPluginChildInvocationRecord,\n\ttype DynamicPluginContext as DynamicPluginContextWire,\n\ttype DynamicPluginMiddlewareCapability,\n\tDynamicPluginRuntime,\n\ttype DynamicPluginToolCapability,\n\ttype Package,\n\tparseDynamicPluginCapabilityRecord,\n\tparseDynamicPluginChildInvocationRecord,\n} from \"@di-code/plugin-runtime\";\n\nexport interface DynamicPluginApproval {\n\treadonly pluginId: string;\n\treadonly version: string;\n\treadonly capabilities: readonly string[];\n\treadonly sourceHash: string;\n\treadonly sourceBytes: number;\n\treadonly impact: \"executes-session-code\";\n}\n\nexport interface DynamicPluginBrokerOptions {\n\treadonly cwd: string;\n\treadonly mode: \"interactive\" | \"print\" | \"json\";\n\treadonly model?: string;\n\treadonly projectTrusted?: boolean;\n\treadonly reservedToolNames?: readonly string[];\n\treadonly allowDynamicPlugins?: boolean;\n\treadonly confirmRun?: (approval: DynamicPluginApproval) => boolean | Promise<boolean>;\n\treadonly onDiagnostic?: (diagnostic: DynamicPluginDiagnostic) => void;\n\treadonly killGraceMs?: number;\n}\n\nexport interface DynamicPluginDiagnostic {\n\treadonly pluginId?: string;\n\treadonly runId?: string;\n\treadonly stage: \"approval\" | \"spawn\" | \"protocol\" | \"stderr\" | \"timeout\" | \"exit\" | \"cleanup\";\n\treadonly message: string;\n}\n\ninterface DynamicRun {\n\treadonly packageId: string;\n\treadonly pluginId: string;\n\treadonly runId: string;\n\treadonly child: ChildProcessWithoutNullStreams;\n\treadonly ready: Promise<void>;\n\treadonly rejectReady: (cause: unknown) => void;\n\tsettled: boolean;\n\treadyConsumed: boolean;\n\tcleanupPromise?: Promise<void>;\n\tpending: Map<string, PendingInvocation>;\n\tnexts: Map<string, (execution: Record<string, unknown>) => Promise<unknown>>;\n}\n\ninterface PendingInvocation {\n\treadonly resolve: (value: unknown) => void;\n\treadonly reject: (cause: unknown) => void;\n\treadonly signal?: AbortSignal;\n}\n\nlet invocationSequence = 0;\n\ninterface ChildRecord {\n\treadonly kind: \"ready\" | \"stopped\" | \"error\";\n\treadonly message?: string;\n}\n\nexport interface DynamicPluginContext extends DynamicPluginContextWire {\n\treadonly signal?: AbortSignal;\n}\n\nconst BOOTSTRAP = String.raw`\nimport { createInterface } from \"node:readline\";\nconst input = createInterface({ input: process.stdin });\nlet stopping = false;\nlet bootstrapped = false;\nlet sequence = 0;\nlet writes = Promise.resolve();\nconst handlers = new Map();\nconst active = new Map();\nconst pendingNext = new Map();\nconst write = (record) => {\n writes = writes.then(() => new Promise((resolve, reject) => process.stdout.write(JSON.stringify(record) + \"\\n\", (error) => error ? reject(error) : resolve())));\n return writes;\n};\nconst disposable = (send) => {\n let disposed = false;\n return { dispose: () => { if (disposed) return; disposed = true; void send().catch(() => undefined); } };\n};\nconst capability = (pluginId, runId, value, handler) => {\n const id = typeof value.id === \"string\" ? value.id : typeof value.name === \"string\" ? value.name : \"capability-\" + (++sequence);\n handlers.set(id, { type: value.type, handler });\n const record = { version: 1, id: \"cap-\" + (++sequence), method: \"capability_register\", params: { pluginId, runId, capability: { ...value, id } } };\n const registered = write(record);\n return { dispose: () => { handlers.delete(id); return registered.then(() => write({ version: 1, id: \"cap-\" + (++sequence), method: \"capability_revoke\", params: { pluginId, runId, capabilityId: id } })); } };\n};\nconst createApi = (pluginId, runId) => ({\n registerTool: (tool) => capability(pluginId, runId, { type: \"tool\", name: tool.name, description: tool.description, parameters: tool.parameters, id: tool.name }, tool.execute),\n registerPromptSection: (section) => capability(pluginId, runId, { type: \"prompt\", id: section.id, order: section.order }, section.render),\n useToolMiddleware: (middleware) => capability(pluginId, runId, { type: \"middleware\", id: middleware.id }, middleware.execute),\n on: (event, handler) => capability(pluginId, runId, { type: \"event\", id: \"event:\" + event + \":\" + (++sequence), event }, handler),\n});\nconst contextFor = (record, controller) => ({ ...record.context, signal: controller.signal });\nconst rejectPending = (invokeId, error) => {\n for (const [nextId, pending] of pendingNext) if (pending.invokeId === invokeId) { pendingNext.delete(nextId); pending.reject(error); }\n};\nconst handle = async (record) => {\n if (record.kind === \"bootstrap\") {\n if (bootstrapped) throw new Error(\"duplicate bootstrap\");\n const source = Buffer.from(record.source, \"base64url\").toString(\"utf8\");\n const module = await import(\"data:text/javascript;base64,\" + Buffer.from(source).toString(\"base64\"));\n if (typeof module.default === \"function\") await module.default(createApi(record.pluginId, record.runId));\n bootstrapped = true;\n await writes;\n await write({ kind: \"ready\" });\n return;\n }\n if (record.kind === \"stop\" && !stopping) {\n stopping = true;\n for (const [invokeId, activeInvocation] of active) { activeInvocation.abort(); rejectPending(invokeId, new Error(\"Dynamic plugin run stopped.\")); }\n await write({ kind: \"stopped\" });\n process.exit(0);\n return;\n }\n if (record.kind === \"cancel\") {\n active.get(record.invokeId)?.abort();\n rejectPending(record.invokeId, new Error(\"Dynamic plugin invocation cancelled.\"));\n return;\n }\n if (record.kind === \"middleware_next_result\") {\n const pending = pendingNext.get(record.nextId);\n if (!pending) return;\n pendingNext.delete(record.nextId);\n if (record.ok) pending.resolve(record.result); else pending.reject(new Error(record.error || \"middleware next failed\"));\n return;\n }\n if (record.kind !== \"invoke\") throw new Error(\"unexpected dynamic plugin message\");\n const entry = handlers.get(record.capabilityId);\n if (!entry) throw new Error(\"unknown dynamic capability\");\n const controller = new AbortController();\n active.set(record.invokeId, controller);\n try {\n const context = contextFor(record, controller);\n let result;\n if (record.action === \"tool\") result = await entry.handler(record.payload.toolCallId, record.payload.parameters, controller.signal, context);\n else if (record.action === \"prompt\") result = await entry.handler(context);\n else if (record.action === \"event\") result = await entry.handler(record.payload.event, context);\n else {\n const next = (execution) => {\n const nextId = \"next-\" + (++sequence);\n const promise = new Promise((resolve, reject) => pendingNext.set(nextId, { invokeId: record.invokeId, resolve, reject }));\n void write({ version: 1, kind: \"middleware_next\", invokeId: record.invokeId, nextId, execution });\n return promise;\n };\n result = await entry.handler(record.payload.execution, next, context);\n }\n await write({ version: 1, kind: \"invoke_result\", invokeId: record.invokeId, ok: true, result });\n } catch (error) {\n await write({ version: 1, kind: \"invoke_result\", invokeId: record.invokeId, ok: false, error: String(error && error.message || error).slice(0, 500) });\n } finally {\n active.delete(record.invokeId);\n rejectPending(record.invokeId, new Error(\"Dynamic plugin invocation finished.\"));\n }\n};\ninput.on(\"line\", (line) => {\n let record;\n try { record = JSON.parse(line); } catch { void write({ kind: \"error\", message: \"invalid bootstrap JSON\" }); process.exitCode = 2; return; }\n void handle(record).catch((error) => { void write({ kind: \"error\", message: String(error && error.message || error).slice(0, 500) }); process.exitCode = 2; });\n});\ninput.on(\"close\", () => { if (!stopping) process.exitCode = 0; });\n`;\n\n/** Owns dynamic plugin child processes and never executes dynamic source in the host process. */\nexport class DynamicPluginBroker {\n\treadonly runtime = new DynamicPluginRuntime();\n\tprivate readonly options: DynamicPluginBrokerOptions;\n\tprivate reservedToolNames: readonly string[];\n\tprivate readonly runs = new Map<string, DynamicRun>();\n\tprivate readonly current = new Map<string, string>();\n\tprivate sessionStartEvent?: { readonly type: string } & Record<string, unknown>;\n\tprivate disposed = false;\n\n\tconstructor(options: DynamicPluginBrokerOptions) {\n\t\tif (!options.cwd.trim()) throw new Error(\"Dynamic plugin broker cwd must be non-empty\");\n\t\tthis.options = {\n\t\t\t...options,\n\t\t\tmodel: options.model ?? \"\",\n\t\t\tprojectTrusted: options.projectTrusted ?? false,\n\t\t\treservedToolNames: [...(options.reservedToolNames ?? [])],\n\t\t\tkillGraceMs: options.killGraceMs ?? 250,\n\t\t};\n\t\tthis.reservedToolNames = [...(options.reservedToolNames ?? [])];\n\t}\n\n\t/** Adds host-owned tool names that dynamic capabilities must not shadow. */\n\tsetReservedToolNames(names: readonly string[]): void {\n\t\tthis.reservedToolNames = [...names];\n\t}\n\n\tdefine(definition: DynamicPackageDefinition): DynamicPackageSnapshot {\n\t\tthis.assertOpen();\n\t\treturn this.runtime.define(definition).snapshot();\n\t}\n\n\tinspect() {\n\t\treturn this.runtime.inspect();\n\t}\n\n\tasync run(packageId: string, signal?: AbortSignal): Promise<ActiveRunSnapshot> {\n\t\tthis.assertOpen();\n\t\tif (signal?.aborted) throw abortError();\n\t\tconst pkg = this.runtime.getPackage(packageId);\n\t\tif (!pkg) throw new Error(`Unknown package: ${packageId}`);\n\t\tawait this.approve(pkg.snapshot());\n\t\tif (signal?.aborted) throw abortError();\n\t\tconst response = this.runtime.handle({\n\t\t\tversion: DYNAMIC_PLUGIN_PROTOCOL_VERSION,\n\t\t\tid: `plugin-run-${Date.now()}`,\n\t\t\tmethod: \"plugin_run\",\n\t\t\tparams: { packageId },\n\t\t});\n\t\tif (!response.ok) throw new Error(response.error.message);\n\t\tconst runId = response.result.id;\n\t\tconst child = this.spawnChild();\n\t\tconst run = this.createRun(pkg, runId, child);\n\t\tthis.runs.set(runId, run);\n\t\tconst abort = () => void this.stop(runId).catch(() => undefined);\n\t\tsignal?.addEventListener(\"abort\", abort, { once: true });\n\t\ttry {\n\t\t\tawait run.ready;\n\t\t\trun.readyConsumed = true;\n\t\t\tif (signal?.aborted) throw abortError();\n\t\t\tthis.runtime.activateRun(runId);\n\t\t\tthis.current.set(pkg.pluginId, runId);\n\t\t\tif (this.sessionStartEvent) await this.deliverEvent(run, this.sessionStartEvent, signal);\n\t\t\treturn this.runtime.getRun(runId)?.snapshot() ?? runSnapshot(this.runtime, runId);\n\t\t} catch (cause) {\n\t\t\tif (!run.cleanupPromise) await this.fail(run, pkg.pluginId, cause);\n\t\t\tthrow cause;\n\t\t} finally {\n\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t}\n\t}\n\n\tasync update(definition: DynamicPackageDefinition, signal?: AbortSignal): Promise<ActiveRunSnapshot> {\n\t\tconst next = this.define(definition);\n\t\tconst previous = this.current.get(definition.pluginId);\n\t\ttry {\n\t\t\tconst started = await this.run(next.id, signal);\n\t\t\tif (previous !== undefined && previous !== started.id) await this.stop(previous);\n\t\t\treturn started;\n\t\t} catch (cause) {\n\t\t\tthis.reportDiagnostic({ pluginId: definition.pluginId, stage: \"cleanup\", message: safeMessage(cause) });\n\t\t\tthrow cause;\n\t\t}\n\t}\n\n\tasync stop(runId: string): Promise<ActiveRunSnapshot> {\n\t\tconst run = this.runs.get(runId);\n\t\tif (!run) {\n\t\t\tconst existing = this.runtime.getRun(runId);\n\t\t\tif (!existing) throw new Error(`Unknown run: ${runId}`);\n\t\t\treturn existing.snapshot();\n\t\t}\n\t\tif (run.cleanupPromise) {\n\t\t\tawait run.cleanupPromise;\n\t\t\treturn runSnapshot(this.runtime, runId);\n\t\t}\n\t\tconst pkg = this.runtime.getPackage(run.packageId);\n\t\trun.cleanupPromise = this.stopRun(run, pkg?.pluginId);\n\t\tawait run.cleanupPromise;\n\t\treturn runSnapshot(this.runtime, runId);\n\t}\n\n\tasync remove(packageId: string): Promise<void> {\n\t\tconst pkg = this.runtime.getPackage(packageId);\n\t\tif (!pkg) throw new Error(`Unknown package: ${packageId}`);\n\t\tfor (const run of [...this.runs.values()]) if (run.packageId === packageId) await this.stop(run.runId);\n\t\tthis.runtime.remove(packageId);\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tconst failures: unknown[] = [];\n\t\tfor (const run of [...this.runs.values()]) {\n\t\t\ttry {\n\t\t\t\tawait this.stop(run.runId);\n\t\t\t} catch (cause) {\n\t\t\t\tfailures.push(cause);\n\t\t\t}\n\t\t}\n\t\tif (failures.length > 0) throw new AggregateError(failures, \"Dynamic plugin broker disposal failed\");\n\t}\n\n\t/** Exposes the broker as model tools; execution remains subject to approval and mode checks. */\n\tcreateTools(): readonly AgentTool[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: \"plugin_inspect\",\n\t\t\t\tdescription: \"Inspect dynamic plugin packages and runs.\",\n\t\t\t\tparameters: Type.Object({}),\n\t\t\t\texecute: async () => jsonResult(this.inspect()),\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"plugin_define\",\n\t\t\t\tdescription: \"Define dynamic plugin source without executing it.\",\n\t\t\t\tparameters: definitionSchema(),\n\t\t\t\texecute: async (_id, value) => jsonResult(this.define(value as DynamicPackageDefinition)),\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"plugin_run\",\n\t\t\t\tdescription: \"Run an approved dynamic plugin package.\",\n\t\t\t\tparameters: Type.Object({ packageId: Type.String({ minLength: 1, maxLength: 128 }) }),\n\t\t\t\texecute: async (_id, value, signal) =>\n\t\t\t\t\tjsonResult(await this.run((value as { packageId: string }).packageId, signal)),\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"plugin_update\",\n\t\t\t\tdescription: \"Define and run a replacement dynamic plugin; the old run stays active if it fails.\",\n\t\t\t\tparameters: definitionSchema(),\n\t\t\t\texecute: async (_id, value, signal) => jsonResult(await this.update(value as DynamicPackageDefinition, signal)),\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"plugin_stop\",\n\t\t\t\tdescription: \"Stop a dynamic plugin run.\",\n\t\t\t\tparameters: Type.Object({ runId: Type.String({ minLength: 1, maxLength: 128 }) }),\n\t\t\t\texecute: async (_id, value) => jsonResult(await this.stop((value as { runId: string }).runId)),\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"plugin_remove\",\n\t\t\t\tdescription: \"Stop and remove a dynamic plugin package.\",\n\t\t\t\tparameters: Type.Object({ packageId: Type.String({ minLength: 1, maxLength: 128 }) }),\n\t\t\t\texecute: async (_id, value) => {\n\t\t\t\t\tawait this.remove((value as { packageId: string }).packageId);\n\t\t\t\t\treturn [{ type: \"text\", text: \"Dynamic plugin package removed.\" }];\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t}\n\n\t/** Resolves active dynamic capabilities into the Agent request snapshot. */\n\tgetContextProvider(): AgentContextProvider {\n\t\treturn { resolve: (signal) => this.resolveContext(signal) };\n\t}\n\n\tasync resolveContext(signal?: AbortSignal): Promise<AgentRequestContext> {\n\t\tconst tools: AgentTool[] = [];\n\t\tconst middleware: ToolExecutionMiddleware[] = [];\n\t\tconst prompts: Array<{ order: number; id: string; run: DynamicRun; capabilityId: string }> = [];\n\t\tfor (const run of this.activeRuns()) {\n\t\t\tconst snapshot = this.runtime.getRun(run.runId)?.snapshot();\n\t\t\tfor (const capability of snapshot?.capabilities ?? []) {\n\t\t\t\tif (capability.type === \"tool\") tools.push(this.createDynamicTool(run, capability));\n\t\t\t\telse if (capability.type === \"middleware\") middleware.push(this.createDynamicMiddleware(run, capability));\n\t\t\t\telse if (capability.type === \"prompt\")\n\t\t\t\t\tprompts.push({ order: capability.order, id: capability.id, run, capabilityId: capability.id });\n\t\t\t}\n\t\t}\n\t\tprompts.sort((a, b) => a.order - b.order || a.run.runId.localeCompare(b.run.runId) || a.id.localeCompare(b.id));\n\t\tconst rendered: string[] = [];\n\t\tfor (const prompt of prompts) {\n\t\t\ttry {\n\t\t\t\tconst value = await this.invoke(prompt.run, prompt.capabilityId, \"prompt\", {}, signal);\n\t\t\t\tif (typeof value === \"string\" && value) rendered.push(value);\n\t\t\t} catch (cause) {\n\t\t\t\tthis.reportDiagnostic({\n\t\t\t\t\tpluginId: prompt.run.pluginId,\n\t\t\t\t\trunId: prompt.run.runId,\n\t\t\t\t\tstage: \"protocol\",\n\t\t\t\t\tmessage: safeMessage(cause),\n\t\t\t\t});\n\t\t\t\tthrow new Error(`Dynamic plugin prompt section \"${prompt.id}\" failed`, { cause });\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tsystemPrompt: rendered.length > 0 ? rendered.join(\"\\n\\n\") : undefined,\n\t\t\ttools,\n\t\t\ttoolMiddleware: middleware,\n\t\t};\n\t}\n\n\t/** Delivers an Agent lifecycle event to active dynamic event capabilities. */\n\tasync emit(event: { readonly type: string } & Record<string, unknown>, signal?: AbortSignal): Promise<void> {\n\t\tif (event.type === \"session_start\") this.sessionStartEvent = { ...event };\n\t\tif (event.type === \"session_shutdown\") this.sessionStartEvent = undefined;\n\t\tfor (const run of this.activeRuns()) {\n\t\t\tawait this.deliverEvent(run, event, signal);\n\t\t}\n\t}\n\n\tprivate async deliverEvent(\n\t\trun: DynamicRun,\n\t\tevent: { readonly type: string } & Record<string, unknown>,\n\t\tsignal?: AbortSignal,\n\t): Promise<void> {\n\t\tconst capabilities = this.runtime.getRun(run.runId)?.snapshot().capabilities ?? [];\n\t\tfor (const capability of capabilities) {\n\t\t\tif (capability.type !== \"event\" || capability.event !== event.type) continue;\n\t\t\ttry {\n\t\t\t\tawait this.invoke(run, capability.id, \"event\", { event }, signal);\n\t\t\t} catch (cause) {\n\t\t\t\tthis.reportDiagnostic({\n\t\t\t\t\tpluginId: run.pluginId,\n\t\t\t\t\trunId: run.runId,\n\t\t\t\t\tstage: \"protocol\",\n\t\t\t\t\tmessage: safeMessage(cause),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate activeRuns(): DynamicRun[] {\n\t\treturn [...this.runs.values()].filter((run) => this.runtime.getRun(run.runId)?.state === \"active\");\n\t}\n\n\tprivate createDynamicTool(run: DynamicRun, capability: DynamicPluginToolCapability): AgentTool {\n\t\tif (this.reservedToolNames.includes(capability.name))\n\t\t\tthrow new Error(`Dynamic plugin tool conflicts with host tool: ${capability.name}`);\n\t\treturn {\n\t\t\tname: capability.name,\n\t\t\tdescription: capability.description,\n\t\t\tparameters: capability.parameters as never,\n\t\t\texecute: async (toolCallId, parameters, signal) => {\n\t\t\t\tconst result = await this.invoke(run, capability.id, \"tool\", { toolCallId, parameters }, signal);\n\t\t\t\treturn parseAgentToolResult(result);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate createDynamicMiddleware(\n\t\trun: DynamicRun,\n\t\tcapability: DynamicPluginMiddlewareCapability,\n\t): ToolExecutionMiddleware {\n\t\treturn async (execution, next) => {\n\t\t\tconst invokeId = `invoke-${Date.now()}-${++invocationSequence}`;\n\t\t\trun.nexts.set(invokeId, async (payload) => {\n\t\t\t\tconst parameters = payload.parameters === undefined ? execution.parameters : payload.parameters;\n\t\t\t\treturn next({ ...execution, parameters });\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tconst value = await this.invoke(\n\t\t\t\t\trun,\n\t\t\t\t\tcapability.id,\n\t\t\t\t\t\"middleware\",\n\t\t\t\t\t{\n\t\t\t\t\t\texecution: {\n\t\t\t\t\t\t\ttoolCallId: execution.toolCallId,\n\t\t\t\t\t\t\ttoolName: execution.tool.name,\n\t\t\t\t\t\t\tparameters: execution.parameters,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\texecution.signal,\n\t\t\t\t\tinvokeId,\n\t\t\t\t);\n\t\t\t\treturn parseAgentToolResult(value);\n\t\t\t} finally {\n\t\t\t\trun.nexts.delete(invokeId);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate async invoke(\n\t\trun: DynamicRun,\n\t\tcapabilityId: string,\n\t\taction: \"tool\" | \"prompt\" | \"middleware\" | \"event\",\n\t\tpayload: Record<string, unknown>,\n\t\tsignal?: AbortSignal,\n\t\tinvokeId = `invoke-${Date.now()}-${++invocationSequence}`,\n\t): Promise<unknown> {\n\t\tif (signal?.aborted) throw abortError();\n\t\tif (run.settled || this.runtime.getRun(run.runId)?.state !== \"active\")\n\t\t\tthrow new Error(\"Dynamic plugin run is not active.\");\n\t\tconst context: DynamicPluginContextWire = {\n\t\t\tcwd: this.options.cwd,\n\t\t\tmode: this.options.mode,\n\t\t\tisProjectTrusted: this.options.projectTrusted === true,\n\t\t\tmodel: this.options.model ?? \"\",\n\t\t};\n\t\tlet rejectInvocation!: (cause: unknown) => void;\n\t\tconst result = new Promise<unknown>((resolve, reject) => {\n\t\t\trejectInvocation = reject;\n\t\t\trun.pending.set(invokeId, { resolve, reject, signal });\n\t\t});\n\t\tvoid result.catch(() => undefined);\n\t\tconst abort = () => {\n\t\t\trun.pending.delete(invokeId);\n\t\t\tvoid writeChildRecord(run.child, { version: 1, kind: \"cancel\", invokeId }).catch(() => undefined);\n\t\t\tqueueMicrotask(() => rejectInvocation(abortError()));\n\t\t};\n\t\tsignal?.addEventListener(\"abort\", abort, { once: true });\n\t\ttry {\n\t\t\tawait writeChildRecord(run.child, {\n\t\t\t\tversion: 1,\n\t\t\t\tkind: \"invoke\",\n\t\t\t\tinvokeId,\n\t\t\t\tcapabilityId,\n\t\t\t\taction,\n\t\t\t\tcontext,\n\t\t\t\tpayload,\n\t\t\t});\n\t\t\treturn await result;\n\t\t} finally {\n\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t\trun.pending.delete(invokeId);\n\t\t}\n\t}\n\n\tprivate async approve(pkg: DynamicPackageSnapshot): Promise<void> {\n\t\tif (this.options.mode !== \"interactive\" || this.options.allowDynamicPlugins !== true) {\n\t\t\tthis.reportDiagnostic({\n\t\t\t\tpluginId: pkg.pluginId,\n\t\t\t\tstage: \"approval\",\n\t\t\t\tmessage: \"Dynamic plugin execution is disabled outside an approved interactive run.\",\n\t\t\t});\n\t\t\tthrow new Error(\"Dynamic plugin execution is disabled; use interactive mode with --allow-dynamic-plugins.\");\n\t\t}\n\t\tif (!this.options.confirmRun) throw new Error(\"Dynamic plugin execution requires explicit user approval.\");\n\t\tconst approved = await this.options.confirmRun({\n\t\t\tpluginId: pkg.pluginId,\n\t\t\tversion: pkg.version,\n\t\t\tcapabilities: pkg.capabilities,\n\t\t\tsourceHash: pkg.sourceHash,\n\t\t\tsourceBytes: pkg.sourceBytes,\n\t\t\timpact: \"executes-session-code\",\n\t\t});\n\t\tif (!approved) throw new Error(\"Dynamic plugin execution was not approved.\");\n\t}\n\n\tprivate spawnChild(): ChildProcessWithoutNullStreams {\n\t\ttry {\n\t\t\treturn spawn(process.execPath, [\"--input-type=module\", \"-e\", BOOTSTRAP], {\n\t\t\t\tcwd: this.options.cwd,\n\t\t\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"],\n\t\t\t\tenv: minimalEnvironment(),\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tthis.reportDiagnostic({ stage: \"spawn\", message: safeMessage(cause) });\n\t\t\tthrow cause;\n\t\t}\n\t}\n\n\tprivate createRun(pkg: Package, runId: string, child: ChildProcessWithoutNullStreams): DynamicRun {\n\t\tlet resolveReady!: () => void;\n\t\tlet rejectReady!: (cause: unknown) => void;\n\t\tlet readyState: \"pending\" | \"resolved\" | \"rejected\" = \"pending\";\n\t\tconst ready = new Promise<void>((resolve, reject) => {\n\t\t\tresolveReady = () => {\n\t\t\t\tif (readyState !== \"pending\") return;\n\t\t\t\treadyState = \"resolved\";\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\trejectReady = (cause) => {\n\t\t\t\tif (readyState !== \"pending\") return;\n\t\t\t\treadyState = \"rejected\";\n\t\t\t\treject(cause);\n\t\t\t};\n\t\t});\n\t\tlet buffer = \"\";\n\t\tlet outputBytes = 0;\n\t\tconst decoder = new StringDecoder(\"utf8\");\n\t\tconst run: DynamicRun = {\n\t\t\tpackageId: pkg.id,\n\t\t\tpluginId: pkg.pluginId,\n\t\t\trunId,\n\t\t\tchild,\n\t\t\tready,\n\t\t\trejectReady,\n\t\t\tsettled: false,\n\t\t\treadyConsumed: false,\n\t\t\tpending: new Map(),\n\t\t\tnexts: new Map(),\n\t\t};\n\t\tconst timeout = setTimeout(() => {\n\t\t\tconst error = new Error(\"Dynamic plugin run timed out.\");\n\t\t\trun.cleanupPromise ??= this.fail(run, pkg.pluginId, error, \"timeout\");\n\t\t}, pkg.limits.timeoutMs);\n\t\tchild.stdout.on(\"data\", (chunk: Buffer | string) => {\n\t\t\tconst text = typeof chunk === \"string\" ? chunk : decoder.write(chunk);\n\t\t\toutputBytes += Buffer.byteLength(text, \"utf8\");\n\t\t\tif (outputBytes > pkg.limits.maxOutputBytes) {\n\t\t\t\tconst error = new Error(`Dynamic plugin output exceeds ${pkg.limits.maxOutputBytes} bytes.`);\n\t\t\t\tthis.reportDiagnostic({ pluginId: pkg.pluginId, runId, stage: \"protocol\", message: error.message });\n\t\t\t\trejectReady(error);\n\t\t\t\tthis.kill(child);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbuffer += text;\n\t\t\tif (Buffer.byteLength(buffer, \"utf8\") > DYNAMIC_PLUGIN_MAX_LINE_BYTES) {\n\t\t\t\tthis.reportDiagnostic({\n\t\t\t\t\tpluginId: pkg.pluginId,\n\t\t\t\t\trunId,\n\t\t\t\t\tstage: \"protocol\",\n\t\t\t\t\tmessage: \"Dynamic plugin output line exceeds the size limit.\",\n\t\t\t\t});\n\t\t\t\trejectReady(new Error(\"Dynamic plugin protocol line exceeds the size limit.\"));\n\t\t\t\tthis.kill(child);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twhile (true) {\n\t\t\t\tconst index = buffer.indexOf(\"\\n\");\n\t\t\t\tif (index < 0) break;\n\t\t\t\tconst line = buffer.slice(0, index);\n\t\t\t\tbuffer = buffer.slice(index + 1);\n\t\t\t\tthis.acceptChildRecord(pkg.snapshot(), runId, line, resolveReady, rejectReady);\n\t\t\t}\n\t\t});\n\t\tchild.stderr.on(\"data\", (chunk: Buffer | string) =>\n\t\t\tthis.reportDiagnostic({ pluginId: pkg.pluginId, runId, stage: \"stderr\", message: safeMessage(chunk) }),\n\t\t);\n\t\tchild.stdin.on(\"error\", (cause) => {\n\t\t\tconst error = new Error(safeMessage(cause));\n\t\t\trun.cleanupPromise ??= this.fail(run, pkg.pluginId, error, \"protocol\");\n\t\t});\n\t\tchild.once(\"error\", (cause) => {\n\t\t\tconst error = new Error(safeMessage(cause));\n\t\t\trun.cleanupPromise ??= this.fail(run, pkg.pluginId, error, \"exit\");\n\t\t});\n\t\tchild.once(\"exit\", (code, signal) => {\n\t\t\tclearTimeout(timeout);\n\t\t\tif (!run.settled) {\n\t\t\t\tconst error = new Error(`Dynamic plugin process exited unexpectedly (${signal ?? code ?? \"code 0\"}).`);\n\t\t\t\trun.cleanupPromise ??= this.fail(run, pkg.pluginId, error, \"exit\");\n\t\t\t}\n\t\t});\n\t\tvoid writeChild(child, {\n\t\t\tkind: \"bootstrap\",\n\t\t\tpluginId: pkg.pluginId,\n\t\t\trunId,\n\t\t\tsource: Buffer.from(pkg.source, \"utf8\").toString(\"base64url\"),\n\t\t}).catch((cause) => {\n\t\t\tconst error = new Error(safeMessage(cause));\n\t\t\trun.cleanupPromise ??= this.fail(run, pkg.pluginId, error, \"protocol\");\n\t\t});\n\t\treturn run;\n\t}\n\n\tprivate acceptChildRecord(\n\t\tpkg: DynamicPackageSnapshot,\n\t\trunId: string,\n\t\tline: string,\n\t\tresolveReady: () => void,\n\t\trejectReady: (cause: unknown) => void,\n\t): void {\n\t\tlet record: ChildRecord;\n\t\ttry {\n\t\t\tif (Buffer.byteLength(line, \"utf8\") > DYNAMIC_PLUGIN_MAX_LINE_BYTES) throw new Error(\"line exceeds size limit\");\n\t\t\tconst parsed: unknown = JSON.parse(line);\n\t\t\tif (parsed && typeof parsed === \"object\" && \"method\" in parsed) {\n\t\t\t\tconst capability = parseDynamicPluginCapabilityRecord(parsed);\n\t\t\t\tif (capability.params.runId !== runId || capability.params.pluginId !== pkg.pluginId)\n\t\t\t\t\tthrow new Error(\"dynamic capability ownership mismatch\");\n\t\t\t\tconst requiredCapability =\n\t\t\t\t\tcapability.method === \"capability_register\"\n\t\t\t\t\t\t? declaredCapability(capability.params.capability.type)\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (\n\t\t\t\t\trequiredCapability !== undefined &&\n\t\t\t\t\t!declaredCapabilityAliases(requiredCapability).some((name) => pkg.capabilities.includes(name))\n\t\t\t\t)\n\t\t\t\t\tthrow new Error(`dynamic capability \"${requiredCapability}\" was not declared by the package`);\n\t\t\t\tif (\n\t\t\t\t\tcapability.method === \"capability_register\" &&\n\t\t\t\t\tcapability.params.capability.type === \"tool\" &&\n\t\t\t\t\tthis.reservedToolNames.includes(capability.params.capability.name)\n\t\t\t\t)\n\t\t\t\t\tthrow new Error(`Dynamic plugin tool conflicts with host tool: ${capability.params.capability.name}`);\n\t\t\t\tif (capability.method === \"capability_register\")\n\t\t\t\t\tthis.runtime.registerCapability(runId, capability.params.capability);\n\t\t\t\telse this.runtime.revokeCapability(runId, capability.params.capabilityId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tparsed &&\n\t\t\t\ttypeof parsed === \"object\" &&\n\t\t\t\t\"kind\" in parsed &&\n\t\t\t\t(parsed.kind === \"invoke_result\" || parsed.kind === \"middleware_next\")\n\t\t\t) {\n\t\t\t\tconst invocation = parseDynamicPluginChildInvocationRecord(parsed);\n\t\t\t\tif (invocation.kind === \"invoke_result\") this.resolveInvocation(runId, invocation);\n\t\t\t\telse this.resolveMiddlewareNext(runId, invocation);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trecord = parsed as ChildRecord;\n\t\t\tif (record.kind !== \"ready\" && record.kind !== \"stopped\" && record.kind !== \"error\")\n\t\t\t\tthrow new Error(\"unknown child record\");\n\t\t} catch (cause) {\n\t\t\tconst error = new Error(`Invalid dynamic plugin protocol: ${safeMessage(cause)}`);\n\t\t\tthis.reportDiagnostic({ pluginId: pkg.pluginId, runId, stage: \"protocol\", message: error.message });\n\t\t\trejectReady(error);\n\t\t\tthis.kill(this.runs.get(runId)?.child);\n\t\t\treturn;\n\t\t}\n\t\tif (record.kind === \"ready\") resolveReady();\n\t\tif (record.kind === \"error\") {\n\t\t\tconst message = safeMessage(record.message ?? \"Dynamic plugin child failed.\");\n\t\t\tthis.reportDiagnostic({ pluginId: pkg.pluginId, runId, stage: \"exit\", message });\n\t\t\trejectReady(new Error(message));\n\t\t}\n\t}\n\n\tprivate resolveInvocation(runId: string, record: DynamicPluginChildInvocationRecord): void {\n\t\tif (record.kind !== \"invoke_result\") throw new Error(\"invalid invocation result\");\n\t\tconst run = this.runs.get(runId);\n\t\tif (!run || record.invokeId === undefined) throw new Error(\"unknown dynamic invocation\");\n\t\tconst pending = run.pending.get(record.invokeId);\n\t\tif (!pending) return;\n\t\trun.pending.delete(record.invokeId);\n\t\tif (record.ok) pending.resolve(record.result);\n\t\telse pending.reject(new Error(safeMessage(record.error ?? \"Dynamic plugin invocation failed.\")));\n\t}\n\n\tprivate resolveMiddlewareNext(runId: string, record: DynamicPluginChildInvocationRecord): void {\n\t\tif (record.kind !== \"middleware_next\") throw new Error(\"invalid middleware next request\");\n\t\tconst run = this.runs.get(runId);\n\t\tif (!run) throw new Error(\"unknown dynamic run\");\n\t\tconst next = run.nexts.get(record.nextId) ?? run.nexts.get(record.invokeId);\n\t\tif (!next) throw new Error(\"unknown middleware next callback\");\n\t\trun.nexts.delete(record.nextId);\n\t\tvoid next(record.execution)\n\t\t\t.then((result) =>\n\t\t\t\twriteChildRecord(run.child, {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tkind: \"middleware_next_result\",\n\t\t\t\t\tnextId: record.nextId,\n\t\t\t\t\tok: true,\n\t\t\t\t\tresult,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((cause) =>\n\t\t\t\twriteChildRecord(run.child, {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tkind: \"middleware_next_result\",\n\t\t\t\t\tnextId: record.nextId,\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: safeMessage(cause),\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((cause) => this.reportDiagnostic({ runId, stage: \"protocol\", message: safeMessage(cause) }));\n\t}\n\n\tprivate fail(\n\t\trun: DynamicRun,\n\t\tpluginId: string,\n\t\tcause: unknown,\n\t\tstage: DynamicPluginDiagnostic[\"stage\"] = \"cleanup\",\n\t): Promise<void> {\n\t\trun.cleanupPromise = (async () => {\n\t\t\tconst message = safeMessage(cause);\n\t\t\tconst wasStarting = this.runtime.getRun(run.runId)?.state === \"starting\";\n\t\t\tif (wasStarting && !run.readyConsumed) run.rejectReady(new Error(message));\n\t\t\tthis.reportDiagnostic({ pluginId, runId: run.runId, stage, message });\n\t\t\ttry {\n\t\t\t\tthis.runtime.fail(run.runId, message);\n\t\t\t} catch {\n\t\t\t\t// Preserve the original failure when the runtime is already terminal.\n\t\t\t}\n\t\t\tfor (const pending of run.pending.values()) pending.reject(new Error(message));\n\t\t\trun.pending.clear();\n\t\t\trun.nexts.clear();\n\t\t\trun.settled = true;\n\t\t\tthis.kill(run.child);\n\t\t\tawait waitForExit(run.child, this.options.killGraceMs ?? 250);\n\t\t\tthis.runs.delete(run.runId);\n\t\t\tif (this.current.get(pluginId) === run.runId) this.current.delete(pluginId);\n\t\t})();\n\t\treturn run.cleanupPromise;\n\t}\n\n\tprivate stopRun(run: DynamicRun, pluginId: string | undefined): Promise<void> {\n\t\trun.settled = true;\n\t\tif (this.runtime.getRun(run.runId)?.state === \"starting\" && !run.readyConsumed) run.rejectReady(abortError());\n\t\treturn (async () => {\n\t\t\ttry {\n\t\t\t\tthis.runtime.handle({\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tid: `plugin-stop-${Date.now()}`,\n\t\t\t\t\tmethod: \"plugin_stop\",\n\t\t\t\t\tparams: { runId: run.runId },\n\t\t\t\t});\n\t\t\t\tawait writeChild(run.child, { kind: \"stop\" });\n\t\t\t\tawait waitForExit(run.child, this.options.killGraceMs ?? 250);\n\t\t\t\tthis.runtime.stop(run.runId);\n\t\t\t} catch (cause) {\n\t\t\t\tconst message = safeMessage(cause);\n\t\t\t\tthis.reportDiagnostic({ pluginId, runId: run.runId, stage: \"cleanup\", message });\n\t\t\t\tthis.runtime.fail(run.runId, message);\n\t\t\t\tthis.kill(run.child);\n\t\t\t} finally {\n\t\t\t\tfor (const pending of run.pending.values()) pending.reject(abortError());\n\t\t\t\trun.pending.clear();\n\t\t\t\trun.nexts.clear();\n\t\t\t\tthis.runs.delete(run.runId);\n\t\t\t\tif (pluginId && this.current.get(pluginId) === run.runId) this.current.delete(pluginId);\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate kill(child: ChildProcessWithoutNullStreams | undefined): void {\n\t\tif (!child || child.killed) return;\n\t\ttry {\n\t\t\tchild.kill();\n\t\t} catch (cause) {\n\t\t\tthis.reportDiagnostic({ stage: \"cleanup\", message: safeMessage(cause) });\n\t\t}\n\t}\n\n\tprivate reportDiagnostic(diagnostic: DynamicPluginDiagnostic): void {\n\t\tthis.options.onDiagnostic?.(diagnostic);\n\t}\n\tprivate assertOpen(): void {\n\t\tif (this.disposed) throw new Error(\"Dynamic plugin broker is disposed.\");\n\t}\n}\n\nfunction definitionSchema() {\n\treturn Type.Object({\n\t\tpluginId: Type.String({ minLength: 1, maxLength: 64 }),\n\t\tversion: Type.String({ minLength: 1, maxLength: 128 }),\n\t\truntimeVersion: Type.String({ minLength: 1, maxLength: 64 }),\n\t\tsource: Type.String({ minLength: 1, maxLength: 1_048_576 }),\n\t\tcapabilities: Type.Array(Type.String({ minLength: 1, maxLength: 64 }), { maxItems: 64 }),\n\t\tlimits: Type.Optional(\n\t\t\tType.Object({\n\t\t\t\ttimeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),\n\t\t\t\tmaxOutputBytes: Type.Optional(Type.Integer({ minimum: 1 })),\n\t\t\t}),\n\t\t),\n\t});\n}\n\nfunction jsonResult(value: unknown): ToolResultContent[] {\n\treturn [{ type: \"text\", text: JSON.stringify(value) }];\n}\n\nfunction parseAgentToolResult(value: unknown): ToolResultContent[] {\n\tconst content = Array.isArray(value)\n\t\t? value\n\t\t: value && typeof value === \"object\" && \"content\" in value\n\t\t\t? value.content\n\t\t\t: undefined;\n\tif (!Array.isArray(content)) throw new Error(\"Dynamic plugin tool result must contain an array of content blocks.\");\n\tfor (const block of content) {\n\t\tif (!block || typeof block !== \"object\" || (block as { type?: unknown }).type === undefined)\n\t\t\tthrow new Error(\"Dynamic plugin tool result contains an invalid content block.\");\n\t\tconst type = (block as { type: unknown }).type;\n\t\tif (type === \"text\" && typeof (block as { text?: unknown }).text !== \"string\")\n\t\t\tthrow new Error(\"Dynamic plugin text result must contain text.\");\n\t\tif (\n\t\t\ttype === \"image\" &&\n\t\t\t(typeof (block as { data?: unknown }).data !== \"string\" ||\n\t\t\t\ttypeof (block as { mimeType?: unknown }).mimeType !== \"string\")\n\t\t)\n\t\t\tthrow new Error(\"Dynamic plugin image result must contain data and mimeType.\");\n\t\tif (type !== \"text\" && type !== \"image\")\n\t\t\tthrow new Error(\"Dynamic plugin result contains an unsupported content type.\");\n\t}\n\treturn content as ToolResultContent[];\n}\nfunction runSnapshot(runtime: DynamicPluginRuntime, runId: string): ActiveRunSnapshot {\n\tconst run = runtime.getRun(runId);\n\tif (!run) throw new Error(`Unknown run: ${runId}`);\n\treturn run.snapshot();\n}\nfunction safeMessage(cause: unknown): string {\n\tconst value = cause instanceof Error ? cause.message : String(cause);\n\treturn value\n\t\t.replace(/(api[_-]?key|token|secret|authorization|password)\\s*[:=]\\s*[^\\s,;]+/gi, \"$1=[redacted]\")\n\t\t.slice(0, 500);\n}\nfunction declaredCapability(type: \"tool\" | \"prompt\" | \"middleware\" | \"event\"): string {\n\treturn type === \"tool\" ? \"tools\" : type === \"prompt\" ? \"prompts\" : type === \"middleware\" ? \"middleware\" : \"events\";\n}\nfunction declaredCapabilityAliases(value: string): readonly string[] {\n\treturn value === \"tools\"\n\t\t? [\"tools\", \"tool\"]\n\t\t: value === \"prompts\"\n\t\t\t? [\"prompts\", \"prompt\"]\n\t\t\t: value === \"middleware\"\n\t\t\t\t? [\"middleware\", \"middlewares\"]\n\t\t\t\t: [\"events\", \"event\"];\n}\nfunction abortError(): Error {\n\tconst error = new Error(\"Dynamic plugin run was cancelled.\");\n\terror.name = \"AbortError\";\n\treturn error;\n}\nfunction minimalEnvironment(): NodeJS.ProcessEnv {\n\tconst env: NodeJS.ProcessEnv = {};\n\tfor (const key of [\"PATH\", \"Path\", \"SystemRoot\", \"COMSPEC\", \"TEMP\", \"TMP\"])\n\t\tif (process.env[key]) env[key] = process.env[key];\n\treturn env;\n}\nfunction writeChild(child: ChildProcessWithoutNullStreams, record: Record<string, unknown>): Promise<void> {\n\tconst line = `${JSON.stringify(record)}\\n`;\n\treturn new Promise((resolve, reject) => {\n\t\ttry {\n\t\t\tif (child.stdin.destroyed || child.stdin.writableEnded) {\n\t\t\t\treject(new Error(\"Dynamic plugin child stdin is closed.\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tchild.stdin.write(line, (error) => (error ? reject(error) : resolve()));\n\t\t} catch (cause) {\n\t\t\treject(cause);\n\t\t}\n\t});\n}\nconst writeChildRecord = writeChild;\nfunction waitForExit(child: ChildProcessWithoutNullStreams, graceMs: number): Promise<void> {\n\tif (child.exitCode !== null || child.signalCode !== null) return Promise.resolve();\n\treturn new Promise((resolve) => {\n\t\tlet done = false;\n\t\tlet forceTimer: ReturnType<typeof setTimeout> | undefined;\n\t\tconst finish = () => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tclearTimeout(timer);\n\t\t\tif (forceTimer) clearTimeout(forceTimer);\n\t\t\tresolve();\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\ttry {\n\t\t\t\tchild.kill();\n\t\t\t} catch {}\n\t\t\tforceTimer = setTimeout(finish, Math.max(100, graceMs * 4));\n\t\t}, graceMs);\n\t\tchild.once(\"close\", finish);\n\t});\n}\n"]}
@@ -0,0 +1,15 @@
1
+ export type RuntimeProfileName = "terminal" | "headless";
2
+ export interface RuntimeProfile {
3
+ readonly name: RuntimeProfileName;
4
+ readonly mode: "interactive" | "print" | "json";
5
+ readonly frontend: string;
6
+ readonly pluginIds: readonly string[];
7
+ }
8
+ export interface RuntimeProfileOverrides {
9
+ readonly user?: Partial<Pick<RuntimeProfile, "pluginIds" | "frontend">>;
10
+ readonly project?: Partial<Pick<RuntimeProfile, "pluginIds" | "frontend">>;
11
+ readonly cli?: Partial<Pick<RuntimeProfile, "pluginIds" | "frontend">>;
12
+ }
13
+ export declare function resolveRuntimeProfile(name: string | undefined, overrides?: RuntimeProfileOverrides, mode?: RuntimeProfile["mode"]): RuntimeProfile;
14
+ export declare function listRuntimeProfiles(): readonly RuntimeProfile[];
15
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/plugins/profile.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC;IAC3E,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC;CACvE;AAOD,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,SAAS,GAAE,uBAA4B,EACvC,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAC3B,cAAc,CAqBhB;AAED,wBAAgB,mBAAmB,IAAI,SAAS,cAAc,EAAE,CAE/D"}
@@ -0,0 +1,34 @@
1
+ const BASE_PROFILES = {
2
+ terminal: { name: "terminal", mode: "interactive", frontend: "builtin", pluginIds: [] },
3
+ headless: { name: "headless", mode: "print", frontend: "headless", pluginIds: [] },
4
+ };
5
+ export function resolveRuntimeProfile(name, overrides = {}, mode) {
6
+ const selected = (name ?? "terminal");
7
+ const base = BASE_PROFILES[selected];
8
+ if (!base)
9
+ throw new Error(`Unknown runtime profile "${name}".`);
10
+ const merged = {
11
+ pluginIds: [...base.pluginIds],
12
+ frontend: base.frontend,
13
+ };
14
+ for (const value of [overrides.user, overrides.project, overrides.cli]) {
15
+ if (value?.pluginIds !== undefined)
16
+ merged.pluginIds = [...value.pluginIds];
17
+ if (value?.frontend !== undefined)
18
+ merged.frontend = value.frontend;
19
+ }
20
+ const pluginIds = [...(merged.pluginIds ?? [])];
21
+ if (new Set(pluginIds).size !== pluginIds.length)
22
+ throw new Error("Runtime profile contains duplicate plugin IDs.");
23
+ if (mode !== undefined && selected === "headless" && mode === "interactive")
24
+ throw new Error('The "headless" profile cannot use interactive mode.');
25
+ if (mode !== undefined && selected === "terminal" && mode !== "interactive")
26
+ throw new Error('The "terminal" profile requires interactive mode.');
27
+ if (selected === "headless" && merged.frontend !== "headless")
28
+ throw new Error('The "headless" profile cannot select an interactive frontend.');
29
+ return { name: selected, mode: mode ?? base.mode, frontend: merged.frontend, pluginIds };
30
+ }
31
+ export function listRuntimeProfiles() {
32
+ return Object.values(BASE_PROFILES).map((profile) => ({ ...profile, pluginIds: [...profile.pluginIds] }));
33
+ }
34
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/plugins/profile.ts"],"names":[],"mappings":"AAeA,MAAM,aAAa,GAAyD;IAC3E,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;IACvF,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;CAClF,CAAC;AAEF,MAAM,UAAU,qBAAqB,CACpC,IAAwB,EACxB,YAAqC,EAAE,EACvC,IAA6B;IAE7B,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,UAAU,CAAuB,CAAC;IAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,CAAC;IACjE,MAAM,MAAM,GAA2E;QACtF,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACvB,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,IAAI,KAAK,EAAE,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5E,IAAI,KAAK,EAAE,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACrE,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpH,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,KAAK,UAAU,IAAI,IAAI,KAAK,aAAa;QAC1E,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACxE,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,KAAK,UAAU,IAAI,IAAI,KAAK,aAAa;QAC1E,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACtE,IAAI,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU;QAC5D,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAClF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,mBAAmB;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3G,CAAC","sourcesContent":["export type RuntimeProfileName = \"terminal\" | \"headless\";\n\nexport interface RuntimeProfile {\n\treadonly name: RuntimeProfileName;\n\treadonly mode: \"interactive\" | \"print\" | \"json\";\n\treadonly frontend: string;\n\treadonly pluginIds: readonly string[];\n}\n\nexport interface RuntimeProfileOverrides {\n\treadonly user?: Partial<Pick<RuntimeProfile, \"pluginIds\" | \"frontend\">>;\n\treadonly project?: Partial<Pick<RuntimeProfile, \"pluginIds\" | \"frontend\">>;\n\treadonly cli?: Partial<Pick<RuntimeProfile, \"pluginIds\" | \"frontend\">>;\n}\n\nconst BASE_PROFILES: Readonly<Record<RuntimeProfileName, RuntimeProfile>> = {\n\tterminal: { name: \"terminal\", mode: \"interactive\", frontend: \"builtin\", pluginIds: [] },\n\theadless: { name: \"headless\", mode: \"print\", frontend: \"headless\", pluginIds: [] },\n};\n\nexport function resolveRuntimeProfile(\n\tname: string | undefined,\n\toverrides: RuntimeProfileOverrides = {},\n\tmode?: RuntimeProfile[\"mode\"],\n): RuntimeProfile {\n\tconst selected = (name ?? \"terminal\") as RuntimeProfileName;\n\tconst base = BASE_PROFILES[selected];\n\tif (!base) throw new Error(`Unknown runtime profile \"${name}\".`);\n\tconst merged: { pluginIds: readonly string[]; frontend: RuntimeProfile[\"frontend\"] } = {\n\t\tpluginIds: [...base.pluginIds],\n\t\tfrontend: base.frontend,\n\t};\n\tfor (const value of [overrides.user, overrides.project, overrides.cli]) {\n\t\tif (value?.pluginIds !== undefined) merged.pluginIds = [...value.pluginIds];\n\t\tif (value?.frontend !== undefined) merged.frontend = value.frontend;\n\t}\n\tconst pluginIds = [...(merged.pluginIds ?? [])];\n\tif (new Set(pluginIds).size !== pluginIds.length) throw new Error(\"Runtime profile contains duplicate plugin IDs.\");\n\tif (mode !== undefined && selected === \"headless\" && mode === \"interactive\")\n\t\tthrow new Error('The \"headless\" profile cannot use interactive mode.');\n\tif (mode !== undefined && selected === \"terminal\" && mode !== \"interactive\")\n\t\tthrow new Error('The \"terminal\" profile requires interactive mode.');\n\tif (selected === \"headless\" && merged.frontend !== \"headless\")\n\t\tthrow new Error('The \"headless\" profile cannot select an interactive frontend.');\n\treturn { name: selected, mode: mode ?? base.mode, frontend: merged.frontend, pluginIds };\n}\n\nexport function listRuntimeProfiles(): readonly RuntimeProfile[] {\n\treturn Object.values(BASE_PROFILES).map((profile) => ({ ...profile, pluginIds: [...profile.pluginIds] }));\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import type { AgentContextProvider, AgentTool, AgentToolResult } from "@di-code/agent";
2
+ import type { JsonValue, TSchema } from "@di-code/ai";
3
+ import { type PluginCommand, type PluginContextProviderOptions, type PluginFactory, PluginHost, type PluginInteractiveFrontend, type PluginPromptContext, type PluginScope, type PluginUiContributions } from "@di-code/plugin-runtime";
4
+ export interface CodingAgentPluginHostOptions {
5
+ readonly cwd: string;
6
+ readonly mode: PluginPromptContext["mode"];
7
+ readonly projectTrusted: boolean;
8
+ readonly model?: string;
9
+ readonly baseSystemPrompt?: string;
10
+ readonly reservedCommands?: readonly string[];
11
+ }
12
+ /** Product adapter between the host-neutral runtime and coding-agent sessions. */
13
+ export declare class CodingAgentPluginHost {
14
+ readonly runtime: PluginHost;
15
+ private readonly options;
16
+ constructor(options: CodingAgentPluginHostOptions);
17
+ get diagnostics(): readonly import("@di-code/plugin-runtime").PluginDiagnostic[];
18
+ get version(): number;
19
+ load(pluginId: string, factory: PluginFactory): Promise<PluginScope>;
20
+ listTools(): readonly AgentTool<TSchema, AgentToolResult>[];
21
+ listCommands(): readonly PluginCommand[];
22
+ listPluginIds(): readonly string[];
23
+ listInteractiveFrontends(): readonly PluginInteractiveFrontend[];
24
+ snapshot(): import("@di-code/plugin-runtime").PluginSnapshot;
25
+ getUiContributions(): PluginUiContributions;
26
+ runCommand(name: string, args: string, sessionId?: string, signal?: AbortSignal, notify?: (message: string) => void): Promise<void>;
27
+ getContextProvider(options?: PluginContextProviderOptions & {
28
+ readonly tools?: readonly AgentTool<TSchema, AgentToolResult>[];
29
+ }): AgentContextProvider;
30
+ emit(event: {
31
+ readonly type: string;
32
+ } & Record<string, unknown>, signal?: AbortSignal): Promise<void>;
33
+ projectSession(value: unknown): Promise<Readonly<Record<string, JsonValue>>>;
34
+ dispose(): Promise<void>;
35
+ }
36
+ export declare function createCodingAgentPluginHost(options: CodingAgentPluginHostOptions): CodingAgentPluginHost;
37
+ //# sourceMappingURL=runtime-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-host.d.ts","sourceRoot":"","sources":["../../src/plugins/runtime-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACN,KAAK,aAAa,EAElB,KAAK,4BAA4B,EACjC,KAAK,aAAa,EAClB,UAAU,EACV,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,kFAAkF;AAClF,qBAAa,qBAAqB;IACjC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,OAAO,EAAE,4BAA4B;IAKjD,IAAI,WAAW,kEAEd;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAEK,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAI1E,SAAS,IAAI,SAAS,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE;IAI3D,YAAY,IAAI,SAAS,aAAa,EAAE;IAIxC,aAAa,IAAI,SAAS,MAAM,EAAE;IAIlC,wBAAwB,IAAI,SAAS,yBAAyB,EAAE;IAIhE,QAAQ;IAIR,kBAAkB,IAAI,qBAAqB;IAKrC,UAAU,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,EACpB,MAAM,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAe,GAC1C,OAAO,CAAC,IAAI,CAAC;IAahB,kBAAkB,CACjB,OAAO,GAAE,4BAA4B,GAAG;QACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC;KAC3D,GACJ,oBAAoB;IAcjB,IAAI,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrG,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAW5E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B;AAUD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,4BAA4B,GAAG,qBAAqB,CAExG"}
@@ -0,0 +1,95 @@
1
+ import { PluginHost, } from "@di-code/plugin-runtime";
2
+ /** Product adapter between the host-neutral runtime and coding-agent sessions. */
3
+ export class CodingAgentPluginHost {
4
+ runtime;
5
+ options;
6
+ constructor(options) {
7
+ this.options = { ...options };
8
+ this.runtime = new PluginHost(options);
9
+ }
10
+ get diagnostics() {
11
+ return this.runtime.diagnostics;
12
+ }
13
+ get version() {
14
+ return this.runtime.version;
15
+ }
16
+ async load(pluginId, factory) {
17
+ return this.runtime.load(pluginId, factory);
18
+ }
19
+ listTools() {
20
+ return [...this.runtime.snapshot().contributions.tools];
21
+ }
22
+ listCommands() {
23
+ return [...this.runtime.snapshot().contributions.commands];
24
+ }
25
+ listPluginIds() {
26
+ return this.runtime.listPluginIds();
27
+ }
28
+ listInteractiveFrontends() {
29
+ return [...this.runtime.snapshot().contributions.frontends];
30
+ }
31
+ snapshot() {
32
+ return this.runtime.snapshot();
33
+ }
34
+ getUiContributions() {
35
+ const { panels, toolDetailRenderers } = this.runtime.snapshot().contributions;
36
+ return { panels: [...panels], toolDetailRenderers: [...toolDetailRenderers] };
37
+ }
38
+ async runCommand(name, args, sessionId, signal, notify = () => { }) {
39
+ const command = this.listCommands().find((candidate) => candidate.name === name);
40
+ if (!command)
41
+ throw new Error(`Unknown plugin command: "${name}"`);
42
+ const context = {
43
+ args,
44
+ cwd: this.options.cwd,
45
+ ...(sessionId === undefined ? {} : { sessionId }),
46
+ ...(signal === undefined ? {} : { signal }),
47
+ notify,
48
+ };
49
+ await command.handler(context);
50
+ }
51
+ getContextProvider(options = {}) {
52
+ const pluginProvider = this.runtime.getContextProvider(options);
53
+ return {
54
+ resolve: async (signal) => {
55
+ const context = await pluginProvider.resolve(signal);
56
+ return {
57
+ systemPrompt: context.systemPrompt,
58
+ tools: [...(options.tools ?? []), ...context.tools],
59
+ toolMiddleware: context.toolMiddleware,
60
+ };
61
+ },
62
+ };
63
+ }
64
+ async emit(event, signal) {
65
+ await this.runtime.emit(event.type, event, signal);
66
+ }
67
+ async projectSession(value) {
68
+ const output = {};
69
+ for (const projection of this.runtime.snapshot().contributions.sessionProjections) {
70
+ const projected = await projection.project(value);
71
+ if (!isJsonValue(projected))
72
+ throw new Error(`Plugin session projection "${projection.id}" returned non-JSON data`);
73
+ output[projection.id] = projected;
74
+ }
75
+ return output;
76
+ }
77
+ async dispose() {
78
+ await this.runtime.dispose();
79
+ }
80
+ }
81
+ function isJsonValue(value) {
82
+ if (value === null || typeof value === "string" || typeof value === "boolean")
83
+ return true;
84
+ if (typeof value === "number")
85
+ return Number.isFinite(value);
86
+ if (Array.isArray(value))
87
+ return value.every(isJsonValue);
88
+ if (typeof value !== "object")
89
+ return false;
90
+ return Object.getPrototypeOf(value) === Object.prototype && Object.values(value).every(isJsonValue);
91
+ }
92
+ export function createCodingAgentPluginHost(options) {
93
+ return new CodingAgentPluginHost(options);
94
+ }
95
+ //# sourceMappingURL=runtime-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-host.js","sourceRoot":"","sources":["../../src/plugins/runtime-host.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentContextProvider, AgentTool, AgentToolResult } from \"@di-code/agent\";\nimport type { JsonValue, TSchema } from \"@di-code/ai\";\nimport {\n\ttype PluginCommand,\n\ttype PluginCommandContext,\n\ttype PluginContextProviderOptions,\n\ttype PluginFactory,\n\tPluginHost,\n\ttype PluginInteractiveFrontend,\n\ttype PluginPromptContext,\n\ttype PluginScope,\n\ttype PluginUiContributions,\n} from \"@di-code/plugin-runtime\";\n\nexport interface CodingAgentPluginHostOptions {\n\treadonly cwd: string;\n\treadonly mode: PluginPromptContext[\"mode\"];\n\treadonly projectTrusted: boolean;\n\treadonly model?: string;\n\treadonly baseSystemPrompt?: string;\n\treadonly reservedCommands?: readonly string[];\n}\n\n/** Product adapter between the host-neutral runtime and coding-agent sessions. */\nexport class CodingAgentPluginHost {\n\treadonly runtime: PluginHost;\n\tprivate readonly options: CodingAgentPluginHostOptions;\n\n\tconstructor(options: CodingAgentPluginHostOptions) {\n\t\tthis.options = { ...options };\n\t\tthis.runtime = new PluginHost(options);\n\t}\n\n\tget diagnostics() {\n\t\treturn this.runtime.diagnostics;\n\t}\n\n\tget version(): number {\n\t\treturn this.runtime.version;\n\t}\n\n\tasync load(pluginId: string, factory: PluginFactory): Promise<PluginScope> {\n\t\treturn this.runtime.load(pluginId, factory);\n\t}\n\n\tlistTools(): readonly AgentTool<TSchema, AgentToolResult>[] {\n\t\treturn [...this.runtime.snapshot().contributions.tools];\n\t}\n\n\tlistCommands(): readonly PluginCommand[] {\n\t\treturn [...this.runtime.snapshot().contributions.commands];\n\t}\n\n\tlistPluginIds(): readonly string[] {\n\t\treturn this.runtime.listPluginIds();\n\t}\n\n\tlistInteractiveFrontends(): readonly PluginInteractiveFrontend[] {\n\t\treturn [...this.runtime.snapshot().contributions.frontends];\n\t}\n\n\tsnapshot() {\n\t\treturn this.runtime.snapshot();\n\t}\n\n\tgetUiContributions(): PluginUiContributions {\n\t\tconst { panels, toolDetailRenderers } = this.runtime.snapshot().contributions;\n\t\treturn { panels: [...panels], toolDetailRenderers: [...toolDetailRenderers] };\n\t}\n\n\tasync runCommand(\n\t\tname: string,\n\t\targs: string,\n\t\tsessionId?: string,\n\t\tsignal?: AbortSignal,\n\t\tnotify: (message: string) => void = () => {},\n\t): Promise<void> {\n\t\tconst command = this.listCommands().find((candidate) => candidate.name === name);\n\t\tif (!command) throw new Error(`Unknown plugin command: \"${name}\"`);\n\t\tconst context: PluginCommandContext = {\n\t\t\targs,\n\t\t\tcwd: this.options.cwd,\n\t\t\t...(sessionId === undefined ? {} : { sessionId }),\n\t\t\t...(signal === undefined ? {} : { signal }),\n\t\t\tnotify,\n\t\t};\n\t\tawait command.handler(context);\n\t}\n\n\tgetContextProvider(\n\t\toptions: PluginContextProviderOptions & {\n\t\t\treadonly tools?: readonly AgentTool<TSchema, AgentToolResult>[];\n\t\t} = {},\n\t): AgentContextProvider {\n\t\tconst pluginProvider = this.runtime.getContextProvider(options);\n\t\treturn {\n\t\t\tresolve: async (signal) => {\n\t\t\t\tconst context = await pluginProvider.resolve(signal);\n\t\t\t\treturn {\n\t\t\t\t\tsystemPrompt: context.systemPrompt,\n\t\t\t\t\ttools: [...(options.tools ?? []), ...context.tools],\n\t\t\t\t\ttoolMiddleware: context.toolMiddleware,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tasync emit(event: { readonly type: string } & Record<string, unknown>, signal?: AbortSignal): Promise<void> {\n\t\tawait this.runtime.emit(event.type, event, signal);\n\t}\n\n\tasync projectSession(value: unknown): Promise<Readonly<Record<string, JsonValue>>> {\n\t\tconst output: Record<string, JsonValue> = {};\n\t\tfor (const projection of this.runtime.snapshot().contributions.sessionProjections) {\n\t\t\tconst projected = await projection.project(value);\n\t\t\tif (!isJsonValue(projected))\n\t\t\t\tthrow new Error(`Plugin session projection \"${projection.id}\" returned non-JSON data`);\n\t\t\toutput[projection.id] = projected;\n\t\t}\n\t\treturn output;\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tawait this.runtime.dispose();\n\t}\n}\n\nfunction isJsonValue(value: unknown): value is JsonValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n\tif (typeof value === \"number\") return Number.isFinite(value);\n\tif (Array.isArray(value)) return value.every(isJsonValue);\n\tif (typeof value !== \"object\") return false;\n\treturn Object.getPrototypeOf(value) === Object.prototype && Object.values(value).every(isJsonValue);\n}\n\nexport function createCodingAgentPluginHost(options: CodingAgentPluginHostOptions): CodingAgentPluginHost {\n\treturn new CodingAgentPluginHost(options);\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export declare class ProjectTrustManager {
2
+ private readonly filePath;
3
+ constructor(filePath: string);
4
+ get(cwd: string): Promise<boolean | null>;
5
+ set(cwd: string, decision: boolean | null): Promise<void>;
6
+ private read;
7
+ }
8
+ //# sourceMappingURL=trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../src/plugins/trust.ts"],"names":[],"mappings":"AAgBA,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,EAAE,MAAM;IAItB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAYzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAWjD,IAAI;CASlB"}
@@ -0,0 +1,59 @@
1
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
2
+ import { dirname, parse, resolve } from "node:path";
3
+ function normalize(path) {
4
+ return resolve(path);
5
+ }
6
+ function emptyTrustFile() {
7
+ return { version: 1, projects: {} };
8
+ }
9
+ export class ProjectTrustManager {
10
+ filePath;
11
+ constructor(filePath) {
12
+ this.filePath = resolve(filePath);
13
+ }
14
+ async get(cwd) {
15
+ const data = await this.read();
16
+ let current = normalize(cwd);
17
+ while (true) {
18
+ const decision = data.projects[current];
19
+ if (decision === true || decision === false)
20
+ return decision;
21
+ const parent = parse(current).root === current ? current : resolve(current, "..");
22
+ if (parent === current)
23
+ return null;
24
+ current = parent;
25
+ }
26
+ }
27
+ async set(cwd, decision) {
28
+ const data = await this.read();
29
+ const key = normalize(cwd);
30
+ if (decision === null)
31
+ delete data.projects[key];
32
+ else
33
+ data.projects[key] = decision;
34
+ await mkdir(dirname(this.filePath), { recursive: true });
35
+ const temporaryPath = `${this.filePath}.${process.pid}.${Date.now()}.tmp`;
36
+ await writeFile(temporaryPath, `${JSON.stringify(data, null, 2)}\n`, "utf8");
37
+ await rename(temporaryPath, this.filePath);
38
+ }
39
+ async read() {
40
+ try {
41
+ const parsed = JSON.parse(await readFile(this.filePath, "utf8"));
42
+ if (!isTrustFile(parsed))
43
+ return emptyTrustFile();
44
+ return { version: 1, projects: { ...parsed.projects } };
45
+ }
46
+ catch {
47
+ return emptyTrustFile();
48
+ }
49
+ }
50
+ }
51
+ function isTrustFile(value) {
52
+ if (typeof value !== "object" || value === null)
53
+ return false;
54
+ const candidate = value;
55
+ if (candidate.version !== 1 || typeof candidate.projects !== "object" || candidate.projects === null)
56
+ return false;
57
+ return Object.values(candidate.projects).every((decision) => typeof decision === "boolean");
58
+ }
59
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/plugins/trust.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { dirname, parse, resolve } from \"node:path\";\n\ninterface TrustFile {\n\treadonly version: 1;\n\treadonly projects: Record<string, boolean>;\n}\n\nfunction normalize(path: string): string {\n\treturn resolve(path);\n}\n\nfunction emptyTrustFile(): TrustFile {\n\treturn { version: 1, projects: {} };\n}\n\nexport class ProjectTrustManager {\n\tprivate readonly filePath: string;\n\n\tconstructor(filePath: string) {\n\t\tthis.filePath = resolve(filePath);\n\t}\n\n\tasync get(cwd: string): Promise<boolean | null> {\n\t\tconst data = await this.read();\n\t\tlet current = normalize(cwd);\n\t\twhile (true) {\n\t\t\tconst decision = data.projects[current];\n\t\t\tif (decision === true || decision === false) return decision;\n\t\t\tconst parent = parse(current).root === current ? current : resolve(current, \"..\");\n\t\t\tif (parent === current) return null;\n\t\t\tcurrent = parent;\n\t\t}\n\t}\n\n\tasync set(cwd: string, decision: boolean | null): Promise<void> {\n\t\tconst data = await this.read();\n\t\tconst key = normalize(cwd);\n\t\tif (decision === null) delete data.projects[key];\n\t\telse data.projects[key] = decision;\n\t\tawait mkdir(dirname(this.filePath), { recursive: true });\n\t\tconst temporaryPath = `${this.filePath}.${process.pid}.${Date.now()}.tmp`;\n\t\tawait writeFile(temporaryPath, `${JSON.stringify(data, null, 2)}\\n`, \"utf8\");\n\t\tawait rename(temporaryPath, this.filePath);\n\t}\n\n\tprivate async read(): Promise<TrustFile> {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(await readFile(this.filePath, \"utf8\"));\n\t\t\tif (!isTrustFile(parsed)) return emptyTrustFile();\n\t\t\treturn { version: 1, projects: { ...parsed.projects } };\n\t\t} catch {\n\t\t\treturn emptyTrustFile();\n\t\t}\n\t}\n}\n\nfunction isTrustFile(value: unknown): value is TrustFile {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst candidate = value as { version?: unknown; projects?: unknown };\n\tif (candidate.version !== 1 || typeof candidate.projects !== \"object\" || candidate.projects === null) return false;\n\treturn Object.values(candidate.projects).every((decision) => typeof decision === \"boolean\");\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { ProjectTrustStore } from "@di-code/plugin-loader";
2
+ import { type PluginDefinition } from "@di-code/plugin-runtime";
3
+ export interface ProjectTrustService {
4
+ readonly store: ProjectTrustStore;
5
+ }
6
+ export interface ProjectTrustConfig {
7
+ readonly filePath: string;
8
+ }
9
+ export declare const apiVersion: 1;
10
+ export declare const name = "project-trust";
11
+ export declare const version = "0.1.7";
12
+ export declare const projectTrustKey: import("@di-code/plugin-runtime").ServiceKey<ProjectTrustService>;
13
+ export declare function createProjectTrustStore(filePath: string): ProjectTrustStore;
14
+ export declare const apply: PluginDefinition<ProjectTrustConfig>["apply"];
15
+ //# sourceMappingURL=project-trust-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-trust-entry.d.ts","sourceRoot":"","sources":["../src/project-trust-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAElF,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,EAAG,CAAU,CAAC;AACrC,eAAO,MAAM,IAAI,kBAAkB,CAAC;AACpC,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,eAAe,mEAAyD,CAAC;AACtF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAE3E;AACD,eAAO,MAAM,KAAK,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAG/D,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { join } from "node:path";
2
+ import { ProjectTrustStore } from "@di-code/plugin-loader";
3
+ import { createServiceKey } from "@di-code/plugin-runtime";
4
+ export const apiVersion = 1;
5
+ export const name = "project-trust";
6
+ export const version = "0.1.7";
7
+ export const projectTrustKey = createServiceKey("project-trust");
8
+ export function createProjectTrustStore(filePath) {
9
+ return new ProjectTrustStore(filePath);
10
+ }
11
+ export const apply = (context, config) => {
12
+ const filePath = config?.filePath ?? join(process.cwd(), ".di-code", "trust.json");
13
+ context.set(projectTrustKey, { store: new ProjectTrustStore(filePath) });
14
+ };
15
+ //# sourceMappingURL=project-trust-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-trust-entry.js","sourceRoot":"","sources":["../src/project-trust-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,yBAAyB,CAAC;AAUlF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAU,CAAC;AACrC,MAAM,CAAC,MAAM,IAAI,GAAG,eAAe,CAAC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAsB,eAAe,CAAC,CAAC;AACtF,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACvD,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AACD,MAAM,CAAC,MAAM,KAAK,GAAkD,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IACvF,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC","sourcesContent":["import { join } from \"node:path\";\nimport { ProjectTrustStore } from \"@di-code/plugin-loader\";\nimport { createServiceKey, type PluginDefinition } from \"@di-code/plugin-runtime\";\n\nexport interface ProjectTrustService {\n\treadonly store: ProjectTrustStore;\n}\n\nexport interface ProjectTrustConfig {\n\treadonly filePath: string;\n}\n\nexport const apiVersion = 1 as const;\nexport const name = \"project-trust\";\nexport const version = \"0.1.7\";\nexport const projectTrustKey = createServiceKey<ProjectTrustService>(\"project-trust\");\nexport function createProjectTrustStore(filePath: string): ProjectTrustStore {\n\treturn new ProjectTrustStore(filePath);\n}\nexport const apply: PluginDefinition<ProjectTrustConfig>[\"apply\"] = (context, config) => {\n\tconst filePath = config?.filePath ?? join(process.cwd(), \".di-code\", \"trust.json\");\n\tcontext.set(projectTrustKey, { store: new ProjectTrustStore(filePath) });\n};\n"]}