@cjhyy/code-shell-core 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +20 -5
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +20 -4
  26. package/dist/context/manager.js +42 -7
  27. package/dist/context/token-counter.js +5 -3
  28. package/dist/context/tool-result-storage.d.ts +6 -0
  29. package/dist/context/tool-result-storage.js +25 -4
  30. package/dist/credentials/access.d.ts +13 -2
  31. package/dist/credentials/access.js +99 -4
  32. package/dist/credentials/index.d.ts +3 -2
  33. package/dist/credentials/index.js +2 -1
  34. package/dist/credentials/oauth.d.ts +9 -1
  35. package/dist/credentials/oauth.js +80 -1
  36. package/dist/credentials/store.d.ts +16 -2
  37. package/dist/credentials/store.js +33 -11
  38. package/dist/credentials/types.d.ts +62 -1
  39. package/dist/credentials/types.js +16 -1
  40. package/dist/credentials/use-credential-tool.js +15 -1
  41. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  42. package/dist/engine/auxiliary-pipeline.js +181 -0
  43. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  44. package/dist/{settings → engine}/disk-defaults.js +5 -2
  45. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  46. package/dist/engine/dynamic-tool-defs.js +4 -0
  47. package/dist/engine/engine.d.ts +272 -184
  48. package/dist/engine/engine.js +1869 -1864
  49. package/dist/engine/file-history-hook.d.ts +11 -0
  50. package/dist/engine/file-history-hook.js +31 -0
  51. package/dist/engine/goal-judge-context.d.ts +9 -0
  52. package/dist/engine/goal-judge-context.js +234 -0
  53. package/dist/engine/injected-context-cache.d.ts +6 -0
  54. package/dist/engine/injected-context-cache.js +13 -0
  55. package/dist/engine/input-attachments.d.ts +1 -1
  56. package/dist/engine/model-facade.d.ts +3 -3
  57. package/dist/engine/model-facade.js +15 -14
  58. package/dist/engine/permission-controller.d.ts +55 -0
  59. package/dist/engine/permission-controller.js +148 -0
  60. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  61. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  62. package/dist/engine/run-accounting.d.ts +41 -0
  63. package/dist/engine/run-accounting.js +126 -0
  64. package/dist/engine/run-context.d.ts +44 -0
  65. package/dist/engine/run-context.js +88 -0
  66. package/dist/engine/run-environment.d.ts +30 -0
  67. package/dist/engine/run-environment.js +77 -0
  68. package/dist/engine/run-finalize.d.ts +58 -0
  69. package/dist/engine/run-finalize.js +245 -0
  70. package/dist/engine/run-goal.d.ts +58 -0
  71. package/dist/engine/run-goal.js +188 -0
  72. package/dist/engine/run-image-input.d.ts +1 -1
  73. package/dist/engine/run-image-input.js +5 -3
  74. package/dist/engine/run-session-open.d.ts +41 -0
  75. package/dist/engine/run-session-open.js +186 -0
  76. package/dist/engine/run-setup.d.ts +42 -0
  77. package/dist/engine/run-setup.js +58 -0
  78. package/dist/engine/run-tooling.d.ts +125 -0
  79. package/dist/engine/run-tooling.js +283 -0
  80. package/dist/engine/run-types.d.ts +139 -0
  81. package/dist/engine/run-types.js +12 -0
  82. package/dist/engine/run-workspace.d.ts +50 -0
  83. package/dist/engine/run-workspace.js +114 -0
  84. package/dist/engine/session-title.d.ts +2 -1
  85. package/dist/engine/session-title.js +4 -1
  86. package/dist/engine/steer-queue.d.ts +1 -1
  87. package/dist/engine/subagent-spawner.d.ts +32 -0
  88. package/dist/engine/subagent-spawner.js +287 -0
  89. package/dist/engine/tool-summary.d.ts +2 -2
  90. package/dist/engine/tool-summary.js +2 -2
  91. package/dist/engine/turn-loop.d.ts +67 -10
  92. package/dist/engine/turn-loop.js +538 -97
  93. package/dist/engine/types.d.ts +35 -4
  94. package/dist/engine/types.js +1 -1
  95. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
  96. package/dist/goal/lifecycle.js +482 -0
  97. package/dist/hooks/events.d.ts +26 -9
  98. package/dist/hooks/events.js +0 -3
  99. package/dist/hooks/goal-stop-hook.d.ts +28 -29
  100. package/dist/hooks/goal-stop-hook.js +344 -144
  101. package/dist/hooks/registry.js +4 -1
  102. package/dist/hooks/shell-runner.d.ts +12 -1
  103. package/dist/hooks/shell-runner.js +160 -9
  104. package/dist/index.d.ts +51 -110
  105. package/dist/index.extension.d.ts +51 -0
  106. package/dist/index.extension.js +39 -0
  107. package/dist/index.internal.d.ts +86 -0
  108. package/dist/index.internal.js +92 -0
  109. package/dist/index.js +37 -125
  110. package/dist/links/cli.d.ts +48 -0
  111. package/dist/links/cli.js +617 -0
  112. package/dist/links/http.d.ts +40 -0
  113. package/dist/links/http.js +166 -0
  114. package/dist/links/index.d.ts +4 -0
  115. package/dist/links/index.js +3 -0
  116. package/dist/links/link-action-tool.d.ts +5 -0
  117. package/dist/links/link-action-tool.js +241 -0
  118. package/dist/links/providers.d.ts +8 -0
  119. package/dist/links/providers.js +665 -0
  120. package/dist/links/types.d.ts +44 -0
  121. package/dist/llm/client-base.d.ts +7 -0
  122. package/dist/llm/client-base.js +72 -10
  123. package/dist/llm/model-pool.d.ts +1 -1
  124. package/dist/llm/model-pool.js +1 -1
  125. package/dist/llm/providers/anthropic.d.ts +1 -0
  126. package/dist/llm/providers/anthropic.js +9 -0
  127. package/dist/llm/providers/openai.d.ts +1 -0
  128. package/dist/llm/providers/openai.js +17 -0
  129. package/dist/llm/types.d.ts +12 -5
  130. package/dist/model-catalog/index.js +15 -2
  131. package/dist/model-catalog/resolve.d.ts +13 -1
  132. package/dist/model-catalog/resolve.js +37 -2
  133. package/dist/model-catalog/types.d.ts +74 -48
  134. package/dist/model-catalog/types.js +16 -5
  135. package/dist/model-catalog/upsert.d.ts +3 -1
  136. package/dist/model-catalog/upsert.js +9 -0
  137. package/dist/onboarding.d.ts +0 -1
  138. package/dist/onboarding.js +1 -22
  139. package/dist/panel-apps/bindings.d.ts +24 -0
  140. package/dist/panel-apps/bindings.js +69 -0
  141. package/dist/panel-apps/github-archive.d.ts +21 -0
  142. package/dist/panel-apps/github-archive.js +98 -0
  143. package/dist/panel-apps/index.d.ts +4 -0
  144. package/dist/panel-apps/index.js +4 -0
  145. package/dist/panel-apps/installer.d.ts +68 -0
  146. package/dist/panel-apps/installer.js +622 -0
  147. package/dist/panel-apps/manifest.d.ts +364 -0
  148. package/dist/panel-apps/manifest.js +189 -0
  149. package/dist/panel-apps/paths.d.ts +13 -0
  150. package/dist/panel-apps/paths.js +38 -0
  151. package/dist/panel-apps/registry.d.ts +51 -0
  152. package/dist/panel-apps/registry.js +99 -0
  153. package/dist/panel-apps/runtime.d.ts +80 -0
  154. package/dist/panel-apps/runtime.js +154 -0
  155. package/dist/plugins/gitOps.js +8 -1
  156. package/dist/plugins/installedPlugins.d.ts +2 -1
  157. package/dist/plugins/installedPlugins.js +146 -8
  158. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  159. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  160. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  161. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  162. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  163. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  164. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  165. package/dist/plugins/installer/install.d.ts +7 -1
  166. package/dist/plugins/installer/install.js +21 -87
  167. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  168. package/dist/plugins/installer/installFromArchive.js +44 -27
  169. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  170. package/dist/plugins/installer/installFromNpm.js +273 -0
  171. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  172. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  173. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  174. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  175. package/dist/plugins/installer/normalizeManifest.js +306 -0
  176. package/dist/plugins/installer/npmTar.d.ts +13 -0
  177. package/dist/plugins/installer/npmTar.js +321 -0
  178. package/dist/plugins/installer/parseSource.d.ts +11 -0
  179. package/dist/plugins/installer/parseSource.js +48 -0
  180. package/dist/plugins/installer/preview.d.ts +101 -0
  181. package/dist/plugins/installer/preview.js +336 -0
  182. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  183. package/dist/plugins/installer/projectPluginSource.js +140 -0
  184. package/dist/plugins/installer/types.d.ts +775 -0
  185. package/dist/plugins/installer/types.js +100 -0
  186. package/dist/plugins/installer/unzip.d.ts +11 -0
  187. package/dist/plugins/installer/unzip.js +123 -9
  188. package/dist/plugins/installer/update.d.ts +2 -2
  189. package/dist/plugins/installer/update.js +43 -4
  190. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  191. package/dist/plugins/loadPluginHooks.js +97 -86
  192. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  193. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  194. package/dist/plugins/pluginCatalog.d.ts +45 -0
  195. package/dist/plugins/pluginCatalog.js +87 -0
  196. package/dist/plugins/pluginCommandHook.d.ts +10 -4
  197. package/dist/plugins/pluginCommandHook.js +133 -18
  198. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  199. package/dist/plugins/pluginCommandsLoader.js +181 -7
  200. package/dist/plugins/pluginContent.d.ts +10 -1
  201. package/dist/plugins/pluginContent.js +87 -30
  202. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  203. package/dist/plugins/pluginHookApproval.js +160 -0
  204. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  205. package/dist/plugins/pluginHookIntegrity.js +361 -0
  206. package/dist/plugins/pluginInstaller.js +71 -12
  207. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  208. package/dist/plugins/pluginMcpApproval.js +110 -0
  209. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  210. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  211. package/dist/plugins/types.d.ts +30 -0
  212. package/dist/plugins/varRewrite.d.ts +9 -5
  213. package/dist/plugins/varRewrite.js +26 -17
  214. package/dist/preset/index.d.ts +11 -8
  215. package/dist/preset/index.js +62 -203
  216. package/dist/product/define.js +9 -3
  217. package/dist/product/types.d.ts +0 -2
  218. package/dist/profile/activation.d.ts +36 -0
  219. package/dist/profile/activation.js +57 -0
  220. package/dist/profile/catalog-store.d.ts +77 -0
  221. package/dist/profile/catalog-store.js +346 -0
  222. package/dist/profile/catalog.d.ts +54 -0
  223. package/dist/profile/catalog.js +152 -0
  224. package/dist/profile/index.d.ts +7 -0
  225. package/dist/profile/index.js +7 -0
  226. package/dist/profile/requirements.d.ts +76 -0
  227. package/dist/profile/requirements.js +117 -0
  228. package/dist/profile/resolve.d.ts +11 -0
  229. package/dist/profile/resolve.js +41 -0
  230. package/dist/profile/store.d.ts +17 -0
  231. package/dist/profile/store.js +167 -0
  232. package/dist/profile/types.d.ts +321 -0
  233. package/dist/profile/types.js +104 -0
  234. package/dist/prompt/composer.d.ts +46 -7
  235. package/dist/prompt/composer.js +78 -48
  236. package/dist/prompt/instruction-scanner.d.ts +6 -5
  237. package/dist/prompt/instruction-scanner.js +8 -23
  238. package/dist/prompt/section-loader.d.ts +2 -2
  239. package/dist/prompt/section-loader.js +7 -4
  240. package/dist/prompt/sections/browser.md +10 -9
  241. package/dist/prompt/sections/harness-base.md +9 -0
  242. package/dist/protocol/chat-session-manager.d.ts +77 -3
  243. package/dist/protocol/chat-session-manager.js +194 -18
  244. package/dist/protocol/chat-session.d.ts +72 -9
  245. package/dist/protocol/chat-session.js +151 -16
  246. package/dist/protocol/client.d.ts +37 -4
  247. package/dist/protocol/client.js +118 -6
  248. package/dist/protocol/index.d.ts +2 -2
  249. package/dist/protocol/index.js +2 -2
  250. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  251. package/dist/protocol/mobile-remote-types.js +1 -0
  252. package/dist/protocol/server.d.ts +152 -14
  253. package/dist/protocol/server.js +1574 -229
  254. package/dist/protocol/types.d.ts +182 -32
  255. package/dist/protocol/types.js +18 -0
  256. package/dist/run/ArtifactTracker.d.ts +6 -1
  257. package/dist/run/ArtifactTracker.js +29 -21
  258. package/dist/run/EngineRunner.d.ts +2 -0
  259. package/dist/run/EngineRunner.js +1 -0
  260. package/dist/run/RunManager.d.ts +26 -0
  261. package/dist/run/RunManager.js +82 -11
  262. package/dist/run/factory.d.ts +3 -0
  263. package/dist/run/factory.js +2 -0
  264. package/dist/runtime/safe-spawn.d.ts +6 -0
  265. package/dist/runtime/safe-spawn.js +8 -13
  266. package/dist/services/auto-dream.d.ts +13 -1
  267. package/dist/services/auto-dream.js +56 -8
  268. package/dist/services/dream-consolidation.d.ts +3 -0
  269. package/dist/services/dream-consolidation.js +14 -2
  270. package/dist/services/index.d.ts +1 -1
  271. package/dist/services/index.js +1 -1
  272. package/dist/services/memory-orchestrator.js +6 -2
  273. package/dist/services/oauth.d.ts +34 -10
  274. package/dist/services/oauth.js +236 -98
  275. package/dist/services/session-memory.d.ts +4 -4
  276. package/dist/services/session-memory.js +13 -10
  277. package/dist/session/memory.d.ts +26 -7
  278. package/dist/session/memory.js +79 -21
  279. package/dist/session/session-manager.d.ts +208 -25
  280. package/dist/session/session-manager.js +1232 -116
  281. package/dist/session/session-message.d.ts +22 -0
  282. package/dist/session/session-message.js +1 -0
  283. package/dist/session/transcript.d.ts +76 -6
  284. package/dist/session/transcript.js +278 -7
  285. package/dist/settings/feature-flags.d.ts +40 -0
  286. package/dist/settings/feature-flags.js +40 -0
  287. package/dist/settings/manager.d.ts +39 -1
  288. package/dist/settings/manager.js +102 -41
  289. package/dist/settings/migrate-config.js +4 -2
  290. package/dist/settings/schema.d.ts +511 -177
  291. package/dist/settings/schema.js +98 -25
  292. package/dist/skills/scanner.d.ts +6 -2
  293. package/dist/skills/scanner.js +160 -9
  294. package/dist/sources/adapter.d.ts +14 -0
  295. package/dist/sources/adapter.js +7 -0
  296. package/dist/sources/adapters/local-files.d.ts +10 -0
  297. package/dist/sources/adapters/local-files.js +127 -0
  298. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  299. package/dist/sources/adapters/mcp-resource.js +41 -0
  300. package/dist/sources/adapters/mock.d.ts +3 -0
  301. package/dist/sources/adapters/mock.js +29 -0
  302. package/dist/sources/binding.d.ts +6 -0
  303. package/dist/sources/binding.js +24 -0
  304. package/dist/sources/catalog.d.ts +6 -0
  305. package/dist/sources/catalog.js +64 -0
  306. package/dist/sources/context-summary.d.ts +8 -0
  307. package/dist/sources/context-summary.js +13 -0
  308. package/dist/sources/credential-status.d.ts +2 -0
  309. package/dist/sources/credential-status.js +13 -0
  310. package/dist/sources/index.d.ts +10 -0
  311. package/dist/sources/index.js +10 -0
  312. package/dist/sources/resolve.d.ts +28 -0
  313. package/dist/sources/resolve.js +47 -0
  314. package/dist/sources/truncate-utf8.d.ts +7 -0
  315. package/dist/sources/truncate-utf8.js +18 -0
  316. package/dist/sources/types.d.ts +71 -0
  317. package/dist/sources/types.js +26 -0
  318. package/dist/testing/fetch-stub.d.ts +32 -0
  319. package/dist/testing/fetch-stub.js +24 -0
  320. package/dist/themes/image.d.ts +18 -0
  321. package/dist/themes/image.js +117 -0
  322. package/dist/themes/index.d.ts +4 -0
  323. package/dist/themes/index.js +4 -0
  324. package/dist/themes/installer.d.ts +50 -0
  325. package/dist/themes/installer.js +290 -0
  326. package/dist/themes/manifest.d.ts +102 -0
  327. package/dist/themes/manifest.js +86 -0
  328. package/dist/themes/paths.d.ts +14 -0
  329. package/dist/themes/paths.js +33 -0
  330. package/dist/tool-system/browser-bridge.d.ts +53 -11
  331. package/dist/tool-system/browser-bridge.js +8 -9
  332. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  333. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  334. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  335. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  336. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  337. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  338. package/dist/tool-system/builtin/agent-progress.js +83 -0
  339. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  340. package/dist/tool-system/builtin/agent-registry.js +178 -9
  341. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  342. package/dist/tool-system/builtin/agent.d.ts +2 -0
  343. package/dist/tool-system/builtin/agent.js +279 -34
  344. package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
  345. package/dist/tool-system/builtin/background-jobs.js +111 -15
  346. package/dist/tool-system/builtin/background-work.d.ts +12 -1
  347. package/dist/tool-system/builtin/background-work.js +12 -1
  348. package/dist/tool-system/builtin/bash.d.ts +3 -5
  349. package/dist/tool-system/builtin/bash.js +14 -6
  350. package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
  351. package/dist/tool-system/builtin/browser-tools.js +89 -23
  352. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  353. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  354. package/dist/tool-system/builtin/edit.d.ts +2 -1
  355. package/dist/tool-system/builtin/edit.js +14 -10
  356. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  357. package/dist/tool-system/builtin/file-cache.js +4 -0
  358. package/dist/tool-system/builtin/generate-image.js +17 -10
  359. package/dist/tool-system/builtin/generate-video.d.ts +4 -0
  360. package/dist/tool-system/builtin/generate-video.js +164 -28
  361. package/dist/tool-system/builtin/glob.d.ts +2 -1
  362. package/dist/tool-system/builtin/glob.js +28 -3
  363. package/dist/tool-system/builtin/grep.d.ts +1 -0
  364. package/dist/tool-system/builtin/grep.js +82 -17
  365. package/dist/tool-system/builtin/image-uploader.js +7 -1
  366. package/dist/tool-system/builtin/index.d.ts +57 -18
  367. package/dist/tool-system/builtin/index.js +280 -167
  368. package/dist/tool-system/builtin/memory.d.ts +6 -0
  369. package/dist/tool-system/builtin/memory.js +36 -15
  370. package/dist/tool-system/builtin/panel.d.ts +9 -0
  371. package/dist/tool-system/builtin/panel.js +314 -0
  372. package/dist/tool-system/builtin/read.js +5 -1
  373. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  374. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  375. package/dist/tool-system/builtin/sources.d.ts +8 -0
  376. package/dist/tool-system/builtin/sources.js +137 -0
  377. package/dist/tool-system/builtin/tool-search.js +7 -2
  378. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  379. package/dist/tool-system/builtin/video-providers.d.ts +12 -15
  380. package/dist/tool-system/builtin/video-providers.js +1 -0
  381. package/dist/tool-system/builtin/view-image.d.ts +2 -2
  382. package/dist/tool-system/builtin/web-fetch.js +60 -15
  383. package/dist/tool-system/builtin/web-search.js +1 -3
  384. package/dist/tool-system/builtin/write.d.ts +2 -1
  385. package/dist/tool-system/builtin/write.js +14 -4
  386. package/dist/tool-system/capability-module.d.ts +93 -0
  387. package/dist/tool-system/capability-module.js +53 -0
  388. package/dist/tool-system/context.d.ts +94 -24
  389. package/dist/tool-system/executor.js +99 -58
  390. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  391. package/dist/tool-system/external-tool-exposure.js +304 -0
  392. package/dist/tool-system/mcp-manager.d.ts +17 -1
  393. package/dist/tool-system/mcp-manager.js +72 -7
  394. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  395. package/dist/tool-system/mcp-tool-policy.js +34 -0
  396. package/dist/tool-system/panel-bridge.d.ts +53 -0
  397. package/dist/tool-system/panel-bridge.js +1 -0
  398. package/dist/tool-system/path-policy.d.ts +19 -0
  399. package/dist/tool-system/path-policy.js +62 -1
  400. package/dist/tool-system/permission.d.ts +69 -3
  401. package/dist/tool-system/permission.js +429 -30
  402. package/dist/tool-system/registry.d.ts +15 -3
  403. package/dist/tool-system/registry.js +82 -40
  404. package/dist/tool-system/sandbox/index.js +3 -8
  405. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  406. package/dist/tool-system/session-tool-host.d.ts +139 -0
  407. package/dist/tool-system/session-tool-host.js +167 -0
  408. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  409. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  410. package/dist/tool-system/validation.d.ts +14 -7
  411. package/dist/tool-system/validation.js +701 -7
  412. package/dist/types.d.ts +201 -20
  413. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  414. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  415. package/dist/utils/file-mutex.d.ts +65 -0
  416. package/dist/utils/file-mutex.js +145 -0
  417. package/dist/utils/json.d.ts +2 -4
  418. package/dist/utils/json.js +2 -4
  419. package/dist/utils/lockfile.d.ts +30 -1
  420. package/dist/utils/lockfile.js +2 -2
  421. package/dist/utils/secret-scrubber.d.ts +8 -0
  422. package/dist/utils/secret-scrubber.js +227 -0
  423. package/dist/utils/toolDisplay.js +1 -1
  424. package/package.json +20 -5
  425. package/THIRD_PARTY_NOTICES.md +0 -206
  426. package/dist/arena/arena.d.ts +0 -43
  427. package/dist/arena/arena.js +0 -333
  428. package/dist/arena/context/context-tools.d.ts +0 -16
  429. package/dist/arena/context/context-tools.js +0 -272
  430. package/dist/arena/context/within-root.d.ts +0 -7
  431. package/dist/arena/context/within-root.js +0 -15
  432. package/dist/arena/detect-mode.d.ts +0 -20
  433. package/dist/arena/detect-mode.js +0 -78
  434. package/dist/arena/digest-builder.d.ts +0 -25
  435. package/dist/arena/digest-builder.js +0 -120
  436. package/dist/arena/index.d.ts +0 -29
  437. package/dist/arena/index.js +0 -29
  438. package/dist/arena/iterate/convergence.d.ts +0 -25
  439. package/dist/arena/iterate/convergence.js +0 -103
  440. package/dist/arena/iterate/formats/index.d.ts +0 -22
  441. package/dist/arena/iterate/formats/index.js +0 -283
  442. package/dist/arena/iterate/index.d.ts +0 -11
  443. package/dist/arena/iterate/index.js +0 -9
  444. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  445. package/dist/arena/iterate/iterative-arena.js +0 -237
  446. package/dist/arena/iterate/parse.d.ts +0 -42
  447. package/dist/arena/iterate/parse.js +0 -123
  448. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  449. package/dist/arena/iterate/phases/argue.js +0 -165
  450. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  451. package/dist/arena/iterate/phases/revise.js +0 -62
  452. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  453. package/dist/arena/iterate/phases/tournament.js +0 -113
  454. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  455. package/dist/arena/iterate/tools/web-tools.js +0 -54
  456. package/dist/arena/iterate/types.d.ts +0 -152
  457. package/dist/arena/iterate/types.js +0 -8
  458. package/dist/arena/ledger.d.ts +0 -47
  459. package/dist/arena/ledger.js +0 -159
  460. package/dist/arena/lenses/architecture.d.ts +0 -5
  461. package/dist/arena/lenses/architecture.js +0 -22
  462. package/dist/arena/lenses/engineering.d.ts +0 -5
  463. package/dist/arena/lenses/engineering.js +0 -22
  464. package/dist/arena/lenses/general.d.ts +0 -5
  465. package/dist/arena/lenses/general.js +0 -20
  466. package/dist/arena/lenses/index.d.ts +0 -16
  467. package/dist/arena/lenses/index.js +0 -47
  468. package/dist/arena/lenses/product.d.ts +0 -5
  469. package/dist/arena/lenses/product.js +0 -22
  470. package/dist/arena/model-presets.d.ts +0 -23
  471. package/dist/arena/model-presets.js +0 -44
  472. package/dist/arena/phases/adjudication.d.ts +0 -24
  473. package/dist/arena/phases/adjudication.js +0 -141
  474. package/dist/arena/phases/build-consensus.d.ts +0 -29
  475. package/dist/arena/phases/build-consensus.js +0 -83
  476. package/dist/arena/phases/claim-registry.d.ts +0 -26
  477. package/dist/arena/phases/claim-registry.js +0 -60
  478. package/dist/arena/phases/cross-review.d.ts +0 -45
  479. package/dist/arena/phases/cross-review.js +0 -218
  480. package/dist/arena/phases/debate-rounds.d.ts +0 -27
  481. package/dist/arena/phases/debate-rounds.js +0 -159
  482. package/dist/arena/phases/participant-research.d.ts +0 -38
  483. package/dist/arena/phases/participant-research.js +0 -314
  484. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
  485. package/dist/arena/phases/planning-detail-expansion.js +0 -119
  486. package/dist/arena/planner.d.ts +0 -27
  487. package/dist/arena/planner.js +0 -311
  488. package/dist/arena/providers/docs.d.ts +0 -7
  489. package/dist/arena/providers/docs.js +0 -111
  490. package/dist/arena/providers/git.d.ts +0 -8
  491. package/dist/arena/providers/git.js +0 -174
  492. package/dist/arena/providers/index.d.ts +0 -32
  493. package/dist/arena/providers/index.js +0 -132
  494. package/dist/arena/providers/none.d.ts +0 -7
  495. package/dist/arena/providers/none.js +0 -11
  496. package/dist/arena/providers/repo.d.ts +0 -7
  497. package/dist/arena/providers/repo.js +0 -258
  498. package/dist/arena/render/session.d.ts +0 -17
  499. package/dist/arena/render/session.js +0 -190
  500. package/dist/arena/render/terminal.d.ts +0 -34
  501. package/dist/arena/render/terminal.js +0 -286
  502. package/dist/arena/strategies/discussion.d.ts +0 -25
  503. package/dist/arena/strategies/discussion.js +0 -143
  504. package/dist/arena/strategies/index.d.ts +0 -15
  505. package/dist/arena/strategies/index.js +0 -28
  506. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  507. package/dist/arena/strategies/language-wrapper.js +0 -102
  508. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  509. package/dist/arena/strategies/lens-wrapper.js +0 -236
  510. package/dist/arena/strategies/planning.d.ts +0 -30
  511. package/dist/arena/strategies/planning.js +0 -225
  512. package/dist/arena/strategies/review.d.ts +0 -26
  513. package/dist/arena/strategies/review.js +0 -168
  514. package/dist/arena/strategies/utils.d.ts +0 -36
  515. package/dist/arena/strategies/utils.js +0 -603
  516. package/dist/arena/tools/selector.d.ts +0 -17
  517. package/dist/arena/tools/selector.js +0 -61
  518. package/dist/arena/transitions.d.ts +0 -53
  519. package/dist/arena/transitions.js +0 -97
  520. package/dist/arena/types.d.ts +0 -514
  521. package/dist/arena/types.js +0 -27
  522. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  523. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  524. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  525. package/dist/cc-orchestrator/cc-capability.js +0 -53
  526. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  527. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  528. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  529. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  530. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  531. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  532. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  533. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  534. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  535. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  536. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  537. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  538. package/dist/cc-orchestrator/index.d.ts +0 -8
  539. package/dist/cc-orchestrator/index.js +0 -8
  540. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  541. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  542. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  543. package/dist/cc-orchestrator/session-discovery.js +0 -125
  544. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  545. package/dist/cc-orchestrator/session-history.js +0 -150
  546. package/dist/cron/cron-runtime.d.ts +0 -2
  547. package/dist/cron/cron-runtime.js +0 -2
  548. package/dist/cron/cron-store.d.ts +0 -2
  549. package/dist/cron/cron-store.js +0 -2
  550. package/dist/cron/scheduler.d.ts +0 -7
  551. package/dist/cron/scheduler.js +0 -7
  552. package/dist/engine/goal.js +0 -206
  553. package/dist/external-agents/config.d.ts +0 -2
  554. package/dist/external-agents/config.js +0 -15
  555. package/dist/external-agents/types.d.ts +0 -31
  556. package/dist/git/parse-log.d.ts +0 -13
  557. package/dist/git/parse-log.js +0 -21
  558. package/dist/git/utils.d.ts +0 -49
  559. package/dist/git/utils.js +0 -161
  560. package/dist/git/worktree/crud.d.ts +0 -69
  561. package/dist/git/worktree/crud.js +0 -206
  562. package/dist/git/worktree/diff.d.ts +0 -14
  563. package/dist/git/worktree/diff.js +0 -82
  564. package/dist/git/worktree/git-exec.d.ts +0 -7
  565. package/dist/git/worktree/git-exec.js +0 -51
  566. package/dist/git/worktree/index.d.ts +0 -5
  567. package/dist/git/worktree/index.js +0 -5
  568. package/dist/git/worktree/query.d.ts +0 -42
  569. package/dist/git/worktree/query.js +0 -121
  570. package/dist/git/worktree/slug.d.ts +0 -11
  571. package/dist/git/worktree/slug.js +0 -58
  572. package/dist/git/worktree.d.ts +0 -1
  573. package/dist/git/worktree.js +0 -5
  574. package/dist/lsp/client.d.ts +0 -41
  575. package/dist/lsp/client.js +0 -186
  576. package/dist/lsp/manager.d.ts +0 -40
  577. package/dist/lsp/manager.js +0 -155
  578. package/dist/lsp/root-path.d.ts +0 -9
  579. package/dist/lsp/root-path.js +0 -12
  580. package/dist/lsp/servers.d.ts +0 -16
  581. package/dist/lsp/servers.js +0 -60
  582. package/dist/prompt/sections/coding.md +0 -35
  583. package/dist/quota/credentials.d.ts +0 -3
  584. package/dist/quota/credentials.js +0 -80
  585. package/dist/quota/index.d.ts +0 -36
  586. package/dist/quota/index.js +0 -155
  587. package/dist/quota/types.d.ts +0 -48
  588. package/dist/quota/types.js +0 -13
  589. package/dist/review/review-prompt.d.ts +0 -28
  590. package/dist/review/review-prompt.js +0 -81
  591. package/dist/state.d.ts +0 -160
  592. package/dist/state.js +0 -267
  593. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  594. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  595. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  596. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  597. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  598. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  599. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  600. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  601. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  602. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  603. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  604. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  605. package/dist/tool-system/builtin/arena.d.ts +0 -31
  606. package/dist/tool-system/builtin/arena.js +0 -415
  607. package/dist/tool-system/builtin/brief.d.ts +0 -6
  608. package/dist/tool-system/builtin/brief.js +0 -41
  609. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  610. package/dist/tool-system/builtin/check-quota.js +0 -34
  611. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  612. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  613. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  614. package/dist/tool-system/builtin/lsp.js +0 -144
  615. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  616. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  617. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  618. package/dist/tool-system/builtin/worktree.js +0 -345
  619. /package/dist/{external-agents → links}/types.js +0 -0
  620. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  621. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -13,6 +13,12 @@
13
13
  *
14
14
  * Delete is SOFT — files are moved to <baseDir>/memory-trash/<ISO>/<scope>/
15
15
  * by MemoryManager, so accidental deletions are recoverable by hand.
16
+ *
17
+ * Three locations are exposed:
18
+ * - "global" Cross-project memory under CODE_SHELL_HOME.
19
+ * - "project" Memory scoped to ctx.cwd (the backward-compatible default).
20
+ * - "profile" Portable memory owned by the active digital-human profile;
21
+ * available only when ToolContext.profileMemoryDir is present.
16
22
  */
17
23
  import type { ToolDefinition } from "../../types.js";
18
24
  import type { ToolContext } from "../context.js";
@@ -13,6 +13,12 @@
13
13
  *
14
14
  * Delete is SOFT — files are moved to <baseDir>/memory-trash/<ISO>/<scope>/
15
15
  * by MemoryManager, so accidental deletions are recoverable by hand.
16
+ *
17
+ * Three locations are exposed:
18
+ * - "global" Cross-project memory under CODE_SHELL_HOME.
19
+ * - "project" Memory scoped to ctx.cwd (the backward-compatible default).
20
+ * - "profile" Portable memory owned by the active digital-human profile;
21
+ * available only when ToolContext.profileMemoryDir is present.
16
22
  */
17
23
  import { MemoryManager } from "../../session/memory.js";
18
24
  const VALID_SCOPES = ["user", "dream"];
@@ -26,10 +32,11 @@ function parseScope(raw) {
26
32
  }
27
33
  return raw;
28
34
  }
29
- /** Location: "global" cross-project store (no projectDir); "project"
30
- * (default, back-compat) → this repo's store. Anything else → "project". */
35
+ /** Location defaults to project for backward compatibility. */
31
36
  function parseLocation(raw) {
32
- return raw === "global" ? "global" : "project";
37
+ if (raw === "global" || raw === "profile")
38
+ return raw;
39
+ return "project";
33
40
  }
34
41
  function parseOrigin(raw) {
35
42
  return typeof raw === "string" && VALID_ORIGINS.includes(raw)
@@ -37,6 +44,12 @@ function parseOrigin(raw) {
37
44
  : undefined;
38
45
  }
39
46
  function mmFor(ctx, scope, location = "project") {
47
+ if (location === "profile") {
48
+ if (!ctx?.profileMemoryDir) {
49
+ throw new Error('profile memory is unavailable for this run; activate a digital human with portableMemory enabled before using location "profile"');
50
+ }
51
+ return new MemoryManager({ baseDir: ctx.profileMemoryDir, scope });
52
+ }
40
53
  // location=global → omit projectDir so the manager points at the global store.
41
54
  return new MemoryManager({
42
55
  projectDir: location === "global" ? undefined : ctx?.cwd,
@@ -45,15 +58,16 @@ function mmFor(ctx, scope, location = "project") {
45
58
  }
46
59
  const LOCATION_SCHEMA = {
47
60
  type: "string",
48
- enum: ["global", "project"],
49
- description: 'Which store: "global" (applies across all projects) or "project" (this repo only). Defaults to "project".',
61
+ enum: ["global", "project", "profile"],
62
+ description: 'Which store: "global" (applies across all projects), "project" (this repo only), or "profile" (travels with the active digital human; requires portableMemory). Defaults to "project".',
50
63
  };
51
64
  // ─── MemoryList ────────────────────────────────────────────────────────────
52
65
  export const memoryListToolDef = {
53
66
  name: "MemoryList",
54
67
  description: "List persistent memory entries from one scope. " +
55
- "Returns each entry's id, origin, counts, name, type, and short description (not the full content — use MemoryRead for that). " +
68
+ "Returns each entry's exact scope/location locator, id, origin, counts, name, type, and short description (not the full content — use MemoryRead for that). " +
56
69
  "Use this before MemorySave/MemoryDelete to find the exact name to target. " +
70
+ "Copy the returned scope and location exactly when calling MemoryRead; never guess them from the entry name or type. " +
57
71
  'Scopes: "user" (entries the user owns; you need permission to modify) or "dream" (auto-consolidation workspace; you may freely modify).',
58
72
  inputSchema: {
59
73
  type: "object",
@@ -74,12 +88,14 @@ export async function memoryListTool(args, ctx) {
74
88
  return scope;
75
89
  }
76
90
  try {
77
- const mm = mmFor(ctx, scope, parseLocation(args.location));
91
+ const location = parseLocation(args.location);
92
+ const mm = mmFor(ctx, scope, location);
78
93
  const entries = mm.loadAll();
79
- if (entries.length === 0)
80
- return `(no memories in scope "${scope}")`;
94
+ if (entries.length === 0) {
95
+ return `(no memories at scope="${scope}" location="${location}")`;
96
+ }
81
97
  return entries
82
- .map((e) => `- [${e.type}] ${e.name} ` +
98
+ .map((e) => `- [scope="${scope}" location="${location}" type="${e.type}"] ${e.name} ` +
83
99
  `(id:${e.id ?? "(none)"}, origin:${e.origin ?? "manual"}, use:${e.useCount ?? 0}, updates:${e.updateCount ?? 0}) — ` +
84
100
  e.description)
85
101
  .join("\n");
@@ -92,14 +108,15 @@ export async function memoryListTool(args, ctx) {
92
108
  export const memoryReadToolDef = {
93
109
  name: "MemoryRead",
94
110
  description: "Read the full content of a single memory entry by name. " +
95
- "Use MemoryList first to find the exact name.",
111
+ "Use the exact scope and location printed on the injected memory index or returned by MemoryList; never infer or guess either value. " +
112
+ "If a read reports that the memory is missing, do not repeat the identical call. Use MemoryList once to refresh that exact store, or continue without the memory.",
96
113
  inputSchema: {
97
114
  type: "object",
98
115
  properties: {
99
116
  scope: {
100
117
  type: "string",
101
118
  enum: ["user", "dream"],
102
- description: "Which scope to read from",
119
+ description: "Exact scope printed on the injected memory index or returned by MemoryList",
103
120
  },
104
121
  location: LOCATION_SCHEMA,
105
122
  name: {
@@ -123,8 +140,10 @@ export async function memoryReadTool(args, ctx) {
123
140
  const mm = mmFor(ctx, scope, location);
124
141
  const entries = mm.loadAll();
125
142
  const entry = entries.find((e) => e.name === name || e.fileName === name);
126
- if (!entry)
127
- return `Error: no memory named "${name}" in scope "${scope}"`;
143
+ if (!entry) {
144
+ return (`Error: no memory named "${name}" at scope="${scope}" location="${location}". ` +
145
+ "Do not repeat this identical MemoryRead call. Use MemoryList once to refresh this exact store, or continue without the memory.");
146
+ }
128
147
  // Recall signal (用户拍板 C + 可见性): reading a memory bumps its usage so
129
148
  // the recall-TTL sweep keeps frequently-read memories alive, and emits a
130
149
  // stream event so the UI can show the user this memory was actually used.
@@ -148,6 +167,8 @@ export async function memoryReadTool(args, ctx) {
148
167
  }
149
168
  return (`name: ${entry.name}\n` +
150
169
  `id: ${entry.id ?? ""}\n` +
170
+ `scope: ${scope}\n` +
171
+ `location: ${location}\n` +
151
172
  `description: ${entry.description}\n` +
152
173
  `type: ${entry.type}\n` +
153
174
  `origin: ${entry.origin ?? "manual"}\n` +
@@ -170,7 +191,7 @@ export const memorySaveToolDef = {
170
191
  "feedback (how to approach work), " +
171
192
  "project (non-obvious facts about ongoing work), " +
172
193
  "reference (pointers to external resources). " +
173
- "Pick `location`: global (a lesson/preference true in ANY project) vs project (this repo only). " +
194
+ "Pick `location`: global (a lesson/preference true in ANY project), project (this repo only), or profile (knowledge that should travel with the active digital human). " +
174
195
  "If a memory in the injected index is now stale or wrong, update it by id or MemoryDelete it — keep the store correct rather than letting contradictions pile up. " +
175
196
  "The `description` is a one-line summary shown in the index; the `content` is the full body.",
176
197
  inputSchema: {
@@ -0,0 +1,9 @@
1
+ import type { ContentBlock, ToolDefinition } from "../../types.js";
2
+ import type { ToolContext } from "../context.js";
3
+ export declare const panelToolDef: ToolDefinition;
4
+ type PanelToolImageResult = {
5
+ contentBlocks: ContentBlock[];
6
+ result: string;
7
+ };
8
+ export declare function panelTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string | PanelToolImageResult>;
9
+ export {};
@@ -0,0 +1,314 @@
1
+ import { validateToolInputSchemaStrict } from "../validation.js";
2
+ export const panelToolDef = {
3
+ name: "Panel",
4
+ description: "Discover, open, and use panels in the interactive host. Use action='list' to discover " +
5
+ "stable panel ids, action='tools' to inspect a Panel App's structured Agent tools, and " +
6
+ "action='invoke' to call one. Invoking a tool opens its panel automatically.",
7
+ inputSchema: {
8
+ type: "object",
9
+ properties: {
10
+ action: {
11
+ type: "string",
12
+ enum: ["list", "open", "tools", "invoke"],
13
+ description: "List panels, open one, list its tools, or invoke one of its tools.",
14
+ },
15
+ panel_id: {
16
+ type: "string",
17
+ description: "Stable id returned by action='list'. Required except for action='list'.",
18
+ },
19
+ tool_name: {
20
+ type: "string",
21
+ description: "Declared tool name returned by action='tools'. Required for action='invoke'.",
22
+ },
23
+ arguments: {
24
+ type: "object",
25
+ description: "JSON object passed to the Panel App tool handler.",
26
+ additionalProperties: true,
27
+ },
28
+ },
29
+ required: ["action"],
30
+ },
31
+ };
32
+ const NO_PANEL_HOST = "Error: panel hosting is not available in this session. This tool requires an interactive Desktop host.";
33
+ const INVALID_PANEL_IMAGE = "Error: Panel App returned an invalid image result";
34
+ const MAX_PANEL_IMAGE_DIMENSION = 16_384;
35
+ const MAX_PANEL_IMAGE_PIXELS = 24_000_000;
36
+ const MAX_PANEL_JSON_RESULT_BYTES = 512 * 1024;
37
+ function plainObject(value) {
38
+ if (!value || typeof value !== "object" || Array.isArray(value))
39
+ return false;
40
+ const prototype = Object.getPrototypeOf(value);
41
+ return prototype === Object.prototype || prototype === null;
42
+ }
43
+ function boundedPanelJson(value) {
44
+ try {
45
+ const encoded = JSON.stringify(value, null, 2);
46
+ return Buffer.byteLength(encoded, "utf8") <= MAX_PANEL_JSON_RESULT_BYTES ? encoded : null;
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ function safePanelToolDescriptors(value) {
53
+ if (!Array.isArray(value) || value.length > 16)
54
+ return null;
55
+ const tools = [];
56
+ for (const candidate of value) {
57
+ if (!plainObject(candidate) ||
58
+ typeof candidate.name !== "string" ||
59
+ !/^[a-z][a-z0-9_]{0,63}$/.test(candidate.name) ||
60
+ typeof candidate.description !== "string" ||
61
+ candidate.description.length < 1 ||
62
+ candidate.description.length > 500 ||
63
+ !plainObject(candidate.inputSchema) ||
64
+ candidate.inputSchema.type !== "object" ||
65
+ validateToolInputSchemaStrict(candidate.inputSchema) !== null ||
66
+ typeof candidate.readOnly !== "boolean") {
67
+ return null;
68
+ }
69
+ tools.push({
70
+ name: candidate.name,
71
+ description: candidate.description,
72
+ inputSchema: candidate.inputSchema,
73
+ readOnly: candidate.readOnly,
74
+ });
75
+ }
76
+ if (new Set(tools.map((tool) => tool.name)).size !== tools.length)
77
+ return null;
78
+ return tools;
79
+ }
80
+ function validImageDimensions(width, height) {
81
+ return (Number.isSafeInteger(width) &&
82
+ Number.isSafeInteger(height) &&
83
+ width > 0 &&
84
+ height > 0 &&
85
+ width <= MAX_PANEL_IMAGE_DIMENSION &&
86
+ height <= MAX_PANEL_IMAGE_DIMENSION &&
87
+ width * height <= MAX_PANEL_IMAGE_PIXELS);
88
+ }
89
+ function jpegDimensions(bytes) {
90
+ if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8)
91
+ return null;
92
+ let offset = 2;
93
+ while (offset + 3 < bytes.length) {
94
+ while (offset < bytes.length && bytes[offset] === 0xff)
95
+ offset += 1;
96
+ if (offset >= bytes.length)
97
+ return null;
98
+ const marker = bytes[offset];
99
+ offset += 1;
100
+ if (marker === 0xd8 || marker === 0x01)
101
+ continue;
102
+ if (marker === 0xd9 || marker === 0xda)
103
+ return null;
104
+ if (offset + 2 > bytes.length)
105
+ return null;
106
+ const length = bytes.readUInt16BE(offset);
107
+ if (length < 2 || offset + length > bytes.length)
108
+ return null;
109
+ const startOfFrame = (marker >= 0xc0 && marker <= 0xc3) ||
110
+ (marker >= 0xc5 && marker <= 0xc7) ||
111
+ (marker >= 0xc9 && marker <= 0xcb) ||
112
+ (marker >= 0xcd && marker <= 0xcf);
113
+ if (startOfFrame) {
114
+ if (length < 7)
115
+ return null;
116
+ return {
117
+ height: bytes.readUInt16BE(offset + 3),
118
+ width: bytes.readUInt16BE(offset + 5),
119
+ };
120
+ }
121
+ offset += length;
122
+ }
123
+ return null;
124
+ }
125
+ function webpDimensions(bytes) {
126
+ if (bytes.length < 20 ||
127
+ bytes.subarray(0, 4).toString("ascii") !== "RIFF" ||
128
+ bytes.subarray(8, 12).toString("ascii") !== "WEBP") {
129
+ return null;
130
+ }
131
+ const format = bytes.subarray(12, 16).toString("ascii");
132
+ if (format === "VP8X") {
133
+ if (bytes.length < 30)
134
+ return null;
135
+ return {
136
+ width: 1 + bytes.readUIntLE(24, 3),
137
+ height: 1 + bytes.readUIntLE(27, 3),
138
+ };
139
+ }
140
+ if (format === "VP8 ") {
141
+ if (bytes.length < 30 || bytes[23] !== 0x9d || bytes[24] !== 0x01 || bytes[25] !== 0x2a) {
142
+ return null;
143
+ }
144
+ return {
145
+ width: bytes.readUInt16LE(26) & 0x3fff,
146
+ height: bytes.readUInt16LE(28) & 0x3fff,
147
+ };
148
+ }
149
+ if (format === "VP8L") {
150
+ if (bytes.length < 25 || bytes[20] !== 0x2f)
151
+ return null;
152
+ return {
153
+ width: 1 + bytes[21] + ((bytes[22] & 0x3f) << 8),
154
+ height: 1 + (bytes[22] >> 6) + (bytes[23] << 2) + ((bytes[24] & 0x0f) << 10),
155
+ };
156
+ }
157
+ return null;
158
+ }
159
+ function imageDimensions(mediaType, data) {
160
+ let bytes;
161
+ try {
162
+ bytes = Buffer.from(data, "base64");
163
+ }
164
+ catch {
165
+ return null;
166
+ }
167
+ if (mediaType === "image/png") {
168
+ if (bytes.length < 24 ||
169
+ !bytes.subarray(0, 8).equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])) ||
170
+ bytes.readUInt32BE(8) !== 13 ||
171
+ bytes.subarray(12, 16).toString("ascii") !== "IHDR") {
172
+ return null;
173
+ }
174
+ return { width: bytes.readUInt32BE(16), height: bytes.readUInt32BE(20) };
175
+ }
176
+ if (mediaType === "image/jpeg") {
177
+ return jpegDimensions(bytes);
178
+ }
179
+ if (mediaType === "image/webp") {
180
+ return webpDimensions(bytes);
181
+ }
182
+ if (mediaType === "image/gif") {
183
+ const signature = bytes.subarray(0, 6).toString("ascii");
184
+ if (bytes.length < 10 || (signature !== "GIF87a" && signature !== "GIF89a"))
185
+ return null;
186
+ return { width: bytes.readUInt16LE(6), height: bytes.readUInt16LE(8) };
187
+ }
188
+ return null;
189
+ }
190
+ function imageResult(value) {
191
+ if (!value || typeof value !== "object" || Array.isArray(value))
192
+ return null;
193
+ const candidate = value;
194
+ if (candidate.kind !== "image")
195
+ return null;
196
+ const mediaType = candidate.mediaType;
197
+ const data = candidate.data;
198
+ if (typeof mediaType !== "string" ||
199
+ !["image/png", "image/jpeg", "image/webp", "image/gif"].includes(mediaType) ||
200
+ typeof data !== "string" ||
201
+ data.length === 0 ||
202
+ data.length > 350_000 ||
203
+ data.length % 4 !== 0 ||
204
+ !/^[a-z0-9+/]+={0,2}$/iu.test(data)) {
205
+ return INVALID_PANEL_IMAGE;
206
+ }
207
+ const dimensions = imageDimensions(mediaType, data);
208
+ if (!dimensions ||
209
+ !validImageDimensions(dimensions.width, dimensions.height) ||
210
+ (candidate.width !== undefined && candidate.width !== dimensions.width) ||
211
+ (candidate.height !== undefined && candidate.height !== dimensions.height)) {
212
+ return INVALID_PANEL_IMAGE;
213
+ }
214
+ const metadata = { mediaType, ...dimensions };
215
+ for (const key of [
216
+ "nodeId",
217
+ "pageId",
218
+ "pageName",
219
+ "path",
220
+ "revision",
221
+ "stateRevision",
222
+ "summary",
223
+ ]) {
224
+ const value = candidate[key];
225
+ if (typeof value === "string" && value.length <= 2_000)
226
+ metadata[key] = value;
227
+ }
228
+ return {
229
+ contentBlocks: [
230
+ {
231
+ type: "image",
232
+ source: {
233
+ type: "base64",
234
+ media_type: mediaType,
235
+ data,
236
+ },
237
+ },
238
+ ],
239
+ result: JSON.stringify(metadata, null, 2),
240
+ };
241
+ }
242
+ export async function panelTool(args, ctx) {
243
+ const bridge = ctx?.panels;
244
+ if (!bridge)
245
+ return NO_PANEL_HOST;
246
+ const action = args.action;
247
+ if (action === "list") {
248
+ const listed = await bridge.list();
249
+ // A failed discovery must not be reported as an empty host: "(no panels
250
+ // available)" reads as fact and makes the model stop trying.
251
+ if (listed.failed)
252
+ return `Error: ${listed.failed}`;
253
+ const panels = listed.items;
254
+ if (panels.length === 0)
255
+ return "(no panels available)";
256
+ return panels.map((panel) => `${panel.id}\t${panel.title}\t${panel.source}`).join("\n");
257
+ }
258
+ if (action === "open") {
259
+ const panelId = typeof args.panel_id === "string" ? args.panel_id.trim() : "";
260
+ if (!panelId)
261
+ return "Error: panel_id is required for action='open'";
262
+ const result = await bridge.open(panelId);
263
+ return result.ok
264
+ ? `Opened panel ${result.panelId}`
265
+ : `Error: ${result.detail ?? `could not open panel ${panelId}`}`;
266
+ }
267
+ if (action === "tools") {
268
+ const panelId = typeof args.panel_id === "string" ? args.panel_id.trim() : "";
269
+ if (!panelId)
270
+ return "Error: panel_id is required for action='tools'";
271
+ if (!bridge.tools)
272
+ return "Error: this panel host does not expose Agent tools";
273
+ const queried = await bridge.tools(panelId);
274
+ // Same hazard as list: "has no Agent tools" is a factual claim, so a Stop or
275
+ // a timeout must not be laundered into it.
276
+ if (queried.failed)
277
+ return `Error: ${queried.failed}`;
278
+ const tools = safePanelToolDescriptors(queried.items);
279
+ if (!tools)
280
+ return "Error: panel host returned malformed Agent tool descriptors";
281
+ if (tools.length === 0)
282
+ return `(panel ${panelId} has no Agent tools)`;
283
+ return (boundedPanelJson({ panelId, tools }) ??
284
+ "Error: panel host returned oversized Agent tool descriptors");
285
+ }
286
+ if (action === "invoke") {
287
+ const panelId = typeof args.panel_id === "string" ? args.panel_id.trim() : "";
288
+ const toolName = typeof args.tool_name === "string" ? args.tool_name.trim() : "";
289
+ if (!panelId)
290
+ return "Error: panel_id is required for action='invoke'";
291
+ if (!toolName)
292
+ return "Error: tool_name is required for action='invoke'";
293
+ if (!bridge.invoke)
294
+ return "Error: this panel host cannot invoke Agent tools";
295
+ if (args.arguments !== undefined &&
296
+ (!args.arguments || typeof args.arguments !== "object" || Array.isArray(args.arguments))) {
297
+ return "Error: arguments must be a JSON object for action='invoke'";
298
+ }
299
+ const toolArgs = args.arguments ?? {};
300
+ const result = await bridge.invoke(panelId, toolName, toolArgs);
301
+ if (!result.ok) {
302
+ return `Error: ${result.detail ?? `could not invoke ${toolName} in ${panelId}`}`;
303
+ }
304
+ const image = imageResult(result.result);
305
+ if (image)
306
+ return image;
307
+ return (boundedPanelJson({
308
+ panelId: result.panelId,
309
+ toolName: result.toolName,
310
+ result: result.result ?? null,
311
+ }) ?? "Error: Panel App returned an oversized or non-JSON result");
312
+ }
313
+ return `Error: unknown panel action '${String(action)}'`;
314
+ }
@@ -125,7 +125,11 @@ function detectBinary(filePath, sample) {
125
125
  if (sample.includes(0))
126
126
  return { kind: "binary" };
127
127
  try {
128
- new TextDecoder("utf-8", { fatal: true }).decode(sample);
128
+ // `stream: true` tolerates a multi-byte UTF-8 char truncated by the sample
129
+ // boundary (e.g. a CJK char split at byte 8192). Without it, a valid UTF-8
130
+ // text file gets misdetected as binary whenever the sample cut lands mid-char.
131
+ // A genuinely invalid byte in the MIDDLE of the sample still throws.
132
+ new TextDecoder("utf-8", { fatal: true }).decode(sample, { stream: true });
129
133
  }
130
134
  catch {
131
135
  return { kind: "binary" };
@@ -0,0 +1,6 @@
1
+ import type { ToolDefinition } from "../../types.js";
2
+ import type { ToolContext, ToolVisibilityContext } from "../context.js";
3
+ export declare const SEND_MESSAGE_TO_SESSION_TOOL_NAME = "SendMessageToSession";
4
+ export declare const sendMessageToSessionToolDef: ToolDefinition;
5
+ export declare function rewriteSendMessageToSessionToolDefinition(def: ToolDefinition, ctx: ToolVisibilityContext): ToolDefinition;
6
+ export declare function sendMessageToSessionTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
@@ -0,0 +1,67 @@
1
+ export const SEND_MESSAGE_TO_SESSION_TOOL_NAME = "SendMessageToSession";
2
+ export const sendMessageToSessionToolDef = {
3
+ name: SEND_MESSAGE_TO_SESSION_TOOL_NAME,
4
+ description: "Send a message to another host-authorized Session in the current project. " +
5
+ "Use this exactly like a person sending a message in that Session: the message becomes the target Session's next user turn and queues or starts its work. " +
6
+ "When you have later additions, call this tool again with another message. The call creates no persistent relationship or automatic subscription.",
7
+ inputSchema: {
8
+ type: "object",
9
+ properties: {
10
+ target_session_id: {
11
+ type: "string",
12
+ description: "One target Session id from the host-authorized closed list.",
13
+ },
14
+ message: {
15
+ type: "string",
16
+ minLength: 1,
17
+ maxLength: 48_000,
18
+ description: "The complete message to send as the target Session's user turn: task, relevant context, constraints, and artifact paths.",
19
+ },
20
+ },
21
+ required: ["target_session_id", "message"],
22
+ },
23
+ };
24
+ export function rewriteSendMessageToSessionToolDefinition(def, ctx) {
25
+ const targets = ctx.sessionMessageTargets ?? [];
26
+ return {
27
+ ...def,
28
+ description: `${def.description}\n\nAvailable target Sessions:\n${targets
29
+ .map((target) => formatTarget(target))
30
+ .join("\n")}`,
31
+ inputSchema: {
32
+ ...def.inputSchema,
33
+ properties: {
34
+ ...(def.inputSchema.properties ?? {}),
35
+ target_session_id: {
36
+ type: "string",
37
+ enum: targets.map((target) => target.sessionId),
38
+ description: "Select exactly one host-authorized target Session listed below.",
39
+ },
40
+ },
41
+ },
42
+ };
43
+ }
44
+ export async function sendMessageToSessionTool(args, ctx) {
45
+ const service = ctx?.sessionMessages;
46
+ if (!service)
47
+ return "Error: cross-Session messaging is not available in this run.";
48
+ const targetSessionId = typeof args.target_session_id === "string" ? args.target_session_id.trim() : "";
49
+ const message = typeof args.message === "string" ? args.message : "";
50
+ if (!targetSessionId)
51
+ return "Error: target_session_id is required.";
52
+ if (!message.trim())
53
+ return "Error: message is required.";
54
+ if (message.length > 48_000)
55
+ return "Error: message exceeds 48000 characters.";
56
+ try {
57
+ const target = await service.send({ targetSessionId, message });
58
+ return `Message sent to "${target.title}" (${target.sessionId}); its Session has queued the turn.`;
59
+ }
60
+ catch (error) {
61
+ return `Error: ${error instanceof Error ? error.message : String(error)}`;
62
+ }
63
+ }
64
+ function formatTarget(target) {
65
+ const profile = target.workspaceProfile ? `; digital human: ${target.workspaceProfile}` : "";
66
+ return `- ${target.sessionId}: ${target.title}${profile}`;
67
+ }
@@ -0,0 +1,8 @@
1
+ import type { ToolDefinition } from "../../types.js";
2
+ import type { ToolContext } from "../context.js";
3
+ /** Registering the same adapter objects is safe to repeat across test/host imports. */
4
+ export declare function registerBuiltinSourceAdapters(): void;
5
+ export declare const listSourcesToolDef: ToolDefinition;
6
+ export declare function listSourcesTool(_args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
7
+ export declare const readSourceToolDef: ToolDefinition;
8
+ export declare function readSourceTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;