@cjhyy/code-shell-core 0.7.1 → 0.8.1

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 (595) 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 +7 -3
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +17 -1
  26. package/dist/context/manager.js +36 -1
  27. package/dist/credentials/access.d.ts +3 -1
  28. package/dist/credentials/access.js +24 -3
  29. package/dist/credentials/index.d.ts +1 -1
  30. package/dist/credentials/index.js +1 -1
  31. package/dist/credentials/oauth.d.ts +4 -1
  32. package/dist/credentials/oauth.js +14 -0
  33. package/dist/credentials/store.d.ts +15 -1
  34. package/dist/credentials/store.js +17 -4
  35. package/dist/credentials/types.d.ts +24 -0
  36. package/dist/credentials/use-credential-tool.js +15 -1
  37. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  38. package/dist/engine/auxiliary-pipeline.js +181 -0
  39. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  40. package/dist/{settings → engine}/disk-defaults.js +5 -2
  41. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  42. package/dist/engine/dynamic-tool-defs.js +4 -0
  43. package/dist/engine/engine.d.ts +254 -195
  44. package/dist/engine/engine.js +1812 -2041
  45. package/dist/engine/file-history-hook.d.ts +11 -0
  46. package/dist/engine/file-history-hook.js +31 -0
  47. package/dist/engine/goal-judge-context.d.ts +9 -0
  48. package/dist/engine/goal-judge-context.js +234 -0
  49. package/dist/engine/injected-context-cache.d.ts +6 -0
  50. package/dist/engine/injected-context-cache.js +13 -0
  51. package/dist/engine/input-attachments.d.ts +1 -1
  52. package/dist/engine/model-facade.d.ts +3 -3
  53. package/dist/engine/model-facade.js +15 -14
  54. package/dist/engine/permission-controller.d.ts +55 -0
  55. package/dist/engine/permission-controller.js +148 -0
  56. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  57. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  58. package/dist/engine/run-accounting.d.ts +41 -0
  59. package/dist/engine/run-accounting.js +126 -0
  60. package/dist/engine/run-context.d.ts +44 -0
  61. package/dist/engine/run-context.js +88 -0
  62. package/dist/engine/run-environment.d.ts +30 -0
  63. package/dist/engine/run-environment.js +77 -0
  64. package/dist/engine/run-finalize.d.ts +58 -0
  65. package/dist/engine/run-finalize.js +245 -0
  66. package/dist/engine/run-goal.d.ts +58 -0
  67. package/dist/engine/run-goal.js +188 -0
  68. package/dist/engine/run-image-input.d.ts +1 -1
  69. package/dist/engine/run-image-input.js +5 -3
  70. package/dist/engine/run-session-open.d.ts +41 -0
  71. package/dist/engine/run-session-open.js +186 -0
  72. package/dist/engine/run-setup.d.ts +42 -0
  73. package/dist/engine/run-setup.js +58 -0
  74. package/dist/engine/run-tooling.d.ts +125 -0
  75. package/dist/engine/run-tooling.js +283 -0
  76. package/dist/engine/run-types.d.ts +139 -0
  77. package/dist/engine/run-types.js +12 -0
  78. package/dist/engine/run-workspace.d.ts +50 -0
  79. package/dist/engine/run-workspace.js +114 -0
  80. package/dist/engine/steer-queue.d.ts +1 -1
  81. package/dist/engine/subagent-spawner.d.ts +32 -0
  82. package/dist/engine/subagent-spawner.js +287 -0
  83. package/dist/engine/tool-summary.d.ts +2 -2
  84. package/dist/engine/tool-summary.js +2 -2
  85. package/dist/engine/turn-loop.d.ts +49 -10
  86. package/dist/engine/turn-loop.js +370 -104
  87. package/dist/engine/types.d.ts +30 -3
  88. package/dist/engine/types.js +1 -1
  89. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
  90. package/dist/goal/lifecycle.js +482 -0
  91. package/dist/hooks/events.d.ts +24 -10
  92. package/dist/hooks/goal-stop-hook.d.ts +17 -28
  93. package/dist/hooks/goal-stop-hook.js +110 -465
  94. package/dist/hooks/registry.js +1 -1
  95. package/dist/index.d.ts +48 -108
  96. package/dist/index.extension.d.ts +51 -0
  97. package/dist/index.extension.js +39 -0
  98. package/dist/index.internal.d.ts +86 -0
  99. package/dist/index.internal.js +92 -0
  100. package/dist/index.js +34 -123
  101. package/dist/links/cli.d.ts +48 -0
  102. package/dist/links/cli.js +617 -0
  103. package/dist/links/http.d.ts +40 -0
  104. package/dist/links/http.js +166 -0
  105. package/dist/links/index.d.ts +4 -0
  106. package/dist/links/index.js +3 -0
  107. package/dist/links/link-action-tool.d.ts +5 -0
  108. package/dist/links/link-action-tool.js +241 -0
  109. package/dist/links/providers.d.ts +8 -0
  110. package/dist/links/providers.js +665 -0
  111. package/dist/links/types.d.ts +44 -0
  112. package/dist/llm/client-base.d.ts +7 -0
  113. package/dist/llm/client-base.js +60 -0
  114. package/dist/llm/model-pool.d.ts +1 -1
  115. package/dist/llm/model-pool.js +1 -1
  116. package/dist/llm/providers/anthropic.d.ts +1 -0
  117. package/dist/llm/providers/anthropic.js +9 -0
  118. package/dist/llm/providers/openai.d.ts +1 -0
  119. package/dist/llm/providers/openai.js +17 -0
  120. package/dist/model-catalog/index.js +15 -2
  121. package/dist/model-catalog/resolve.d.ts +13 -1
  122. package/dist/model-catalog/resolve.js +37 -2
  123. package/dist/model-catalog/types.d.ts +74 -48
  124. package/dist/model-catalog/types.js +16 -5
  125. package/dist/model-catalog/upsert.d.ts +3 -1
  126. package/dist/model-catalog/upsert.js +9 -0
  127. package/dist/onboarding.d.ts +0 -1
  128. package/dist/onboarding.js +1 -22
  129. package/dist/panel-apps/bindings.d.ts +24 -0
  130. package/dist/panel-apps/bindings.js +69 -0
  131. package/dist/panel-apps/github-archive.d.ts +21 -0
  132. package/dist/panel-apps/github-archive.js +98 -0
  133. package/dist/panel-apps/index.d.ts +4 -0
  134. package/dist/panel-apps/index.js +4 -0
  135. package/dist/panel-apps/installer.d.ts +68 -0
  136. package/dist/panel-apps/installer.js +622 -0
  137. package/dist/panel-apps/manifest.d.ts +364 -0
  138. package/dist/panel-apps/manifest.js +189 -0
  139. package/dist/panel-apps/paths.d.ts +13 -0
  140. package/dist/panel-apps/paths.js +38 -0
  141. package/dist/panel-apps/registry.d.ts +51 -0
  142. package/dist/panel-apps/registry.js +99 -0
  143. package/dist/panel-apps/runtime.d.ts +80 -0
  144. package/dist/panel-apps/runtime.js +154 -0
  145. package/dist/plugins/gitOps.js +8 -1
  146. package/dist/plugins/installedPlugins.d.ts +2 -1
  147. package/dist/plugins/installedPlugins.js +146 -8
  148. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  149. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  150. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  151. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  152. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  153. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  154. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  155. package/dist/plugins/installer/install.d.ts +7 -1
  156. package/dist/plugins/installer/install.js +21 -87
  157. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  158. package/dist/plugins/installer/installFromArchive.js +44 -27
  159. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  160. package/dist/plugins/installer/installFromNpm.js +273 -0
  161. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  162. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  163. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  164. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  165. package/dist/plugins/installer/normalizeManifest.js +306 -0
  166. package/dist/plugins/installer/npmTar.d.ts +13 -0
  167. package/dist/plugins/installer/npmTar.js +321 -0
  168. package/dist/plugins/installer/parseSource.d.ts +11 -0
  169. package/dist/plugins/installer/parseSource.js +48 -0
  170. package/dist/plugins/installer/preview.d.ts +101 -0
  171. package/dist/plugins/installer/preview.js +336 -0
  172. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  173. package/dist/plugins/installer/projectPluginSource.js +140 -0
  174. package/dist/plugins/installer/types.d.ts +775 -0
  175. package/dist/plugins/installer/types.js +100 -0
  176. package/dist/plugins/installer/unzip.d.ts +11 -0
  177. package/dist/plugins/installer/unzip.js +123 -9
  178. package/dist/plugins/installer/update.d.ts +2 -2
  179. package/dist/plugins/installer/update.js +43 -4
  180. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  181. package/dist/plugins/loadPluginHooks.js +97 -86
  182. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  183. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  184. package/dist/plugins/pluginCatalog.d.ts +45 -0
  185. package/dist/plugins/pluginCatalog.js +87 -0
  186. package/dist/plugins/pluginCommandHook.d.ts +6 -0
  187. package/dist/plugins/pluginCommandHook.js +25 -8
  188. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  189. package/dist/plugins/pluginCommandsLoader.js +181 -7
  190. package/dist/plugins/pluginContent.d.ts +10 -1
  191. package/dist/plugins/pluginContent.js +87 -30
  192. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  193. package/dist/plugins/pluginHookApproval.js +160 -0
  194. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  195. package/dist/plugins/pluginHookIntegrity.js +361 -0
  196. package/dist/plugins/pluginInstaller.js +71 -12
  197. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  198. package/dist/plugins/pluginMcpApproval.js +110 -0
  199. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  200. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  201. package/dist/plugins/types.d.ts +30 -0
  202. package/dist/plugins/varRewrite.d.ts +9 -5
  203. package/dist/plugins/varRewrite.js +26 -17
  204. package/dist/preset/index.d.ts +11 -8
  205. package/dist/preset/index.js +62 -203
  206. package/dist/product/define.js +9 -3
  207. package/dist/product/types.d.ts +0 -2
  208. package/dist/profile/activation.d.ts +36 -0
  209. package/dist/profile/activation.js +57 -0
  210. package/dist/profile/catalog-store.d.ts +77 -0
  211. package/dist/profile/catalog-store.js +346 -0
  212. package/dist/profile/catalog.d.ts +54 -0
  213. package/dist/profile/catalog.js +152 -0
  214. package/dist/profile/index.d.ts +7 -0
  215. package/dist/profile/index.js +7 -0
  216. package/dist/profile/requirements.d.ts +76 -0
  217. package/dist/profile/requirements.js +117 -0
  218. package/dist/profile/resolve.d.ts +11 -0
  219. package/dist/profile/resolve.js +41 -0
  220. package/dist/profile/store.d.ts +17 -0
  221. package/dist/profile/store.js +167 -0
  222. package/dist/profile/types.d.ts +321 -0
  223. package/dist/profile/types.js +104 -0
  224. package/dist/prompt/composer.d.ts +46 -7
  225. package/dist/prompt/composer.js +78 -48
  226. package/dist/prompt/instruction-scanner.d.ts +6 -5
  227. package/dist/prompt/instruction-scanner.js +8 -23
  228. package/dist/prompt/section-loader.d.ts +2 -2
  229. package/dist/prompt/section-loader.js +7 -4
  230. package/dist/prompt/sections/browser.md +10 -9
  231. package/dist/prompt/sections/harness-base.md +9 -0
  232. package/dist/protocol/chat-session-manager.d.ts +64 -1
  233. package/dist/protocol/chat-session-manager.js +104 -0
  234. package/dist/protocol/chat-session.d.ts +61 -10
  235. package/dist/protocol/chat-session.js +135 -25
  236. package/dist/protocol/client.d.ts +33 -3
  237. package/dist/protocol/client.js +96 -5
  238. package/dist/protocol/index.d.ts +2 -2
  239. package/dist/protocol/index.js +2 -2
  240. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  241. package/dist/protocol/mobile-remote-types.js +1 -0
  242. package/dist/protocol/server.d.ts +127 -3
  243. package/dist/protocol/server.js +1309 -182
  244. package/dist/protocol/types.d.ts +152 -34
  245. package/dist/protocol/types.js +16 -0
  246. package/dist/run/ArtifactTracker.d.ts +6 -1
  247. package/dist/run/ArtifactTracker.js +29 -21
  248. package/dist/run/EngineRunner.d.ts +2 -0
  249. package/dist/run/EngineRunner.js +1 -0
  250. package/dist/run/RunManager.d.ts +26 -0
  251. package/dist/run/RunManager.js +82 -11
  252. package/dist/run/factory.d.ts +3 -0
  253. package/dist/run/factory.js +2 -0
  254. package/dist/runtime/safe-spawn.d.ts +6 -0
  255. package/dist/runtime/safe-spawn.js +8 -13
  256. package/dist/services/auto-dream.d.ts +13 -1
  257. package/dist/services/auto-dream.js +56 -8
  258. package/dist/services/dream-consolidation.js +10 -1
  259. package/dist/services/memory-orchestrator.js +6 -2
  260. package/dist/services/oauth.js +4 -1
  261. package/dist/services/session-memory.d.ts +4 -4
  262. package/dist/services/session-memory.js +13 -10
  263. package/dist/session/memory.d.ts +26 -7
  264. package/dist/session/memory.js +79 -21
  265. package/dist/session/session-manager.d.ts +182 -28
  266. package/dist/session/session-manager.js +910 -130
  267. package/dist/session/session-message.d.ts +22 -0
  268. package/dist/session/session-message.js +1 -0
  269. package/dist/session/transcript.d.ts +46 -5
  270. package/dist/session/transcript.js +159 -3
  271. package/dist/settings/feature-flags.d.ts +40 -0
  272. package/dist/settings/feature-flags.js +40 -0
  273. package/dist/settings/manager.d.ts +39 -1
  274. package/dist/settings/manager.js +102 -41
  275. package/dist/settings/migrate-config.js +4 -2
  276. package/dist/settings/schema.d.ts +511 -177
  277. package/dist/settings/schema.js +98 -25
  278. package/dist/skills/scanner.d.ts +6 -2
  279. package/dist/skills/scanner.js +160 -9
  280. package/dist/sources/adapter.d.ts +14 -0
  281. package/dist/sources/adapter.js +7 -0
  282. package/dist/sources/adapters/local-files.d.ts +10 -0
  283. package/dist/sources/adapters/local-files.js +127 -0
  284. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  285. package/dist/sources/adapters/mcp-resource.js +41 -0
  286. package/dist/sources/adapters/mock.d.ts +3 -0
  287. package/dist/sources/adapters/mock.js +29 -0
  288. package/dist/sources/binding.d.ts +6 -0
  289. package/dist/sources/binding.js +24 -0
  290. package/dist/sources/catalog.d.ts +6 -0
  291. package/dist/sources/catalog.js +64 -0
  292. package/dist/sources/context-summary.d.ts +8 -0
  293. package/dist/sources/context-summary.js +13 -0
  294. package/dist/sources/credential-status.d.ts +2 -0
  295. package/dist/sources/credential-status.js +13 -0
  296. package/dist/sources/index.d.ts +10 -0
  297. package/dist/sources/index.js +10 -0
  298. package/dist/sources/resolve.d.ts +28 -0
  299. package/dist/sources/resolve.js +47 -0
  300. package/dist/sources/truncate-utf8.d.ts +7 -0
  301. package/dist/sources/truncate-utf8.js +18 -0
  302. package/dist/sources/types.d.ts +71 -0
  303. package/dist/sources/types.js +26 -0
  304. package/dist/testing/fetch-stub.d.ts +32 -0
  305. package/dist/testing/fetch-stub.js +24 -0
  306. package/dist/themes/image.d.ts +18 -0
  307. package/dist/themes/image.js +117 -0
  308. package/dist/themes/index.d.ts +4 -0
  309. package/dist/themes/index.js +4 -0
  310. package/dist/themes/installer.d.ts +50 -0
  311. package/dist/themes/installer.js +290 -0
  312. package/dist/themes/manifest.d.ts +102 -0
  313. package/dist/themes/manifest.js +86 -0
  314. package/dist/themes/paths.d.ts +14 -0
  315. package/dist/themes/paths.js +33 -0
  316. package/dist/tool-system/browser-bridge.d.ts +53 -11
  317. package/dist/tool-system/browser-bridge.js +8 -9
  318. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  319. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  320. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  321. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  322. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  323. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  324. package/dist/tool-system/builtin/agent-progress.js +83 -0
  325. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  326. package/dist/tool-system/builtin/agent-registry.js +178 -9
  327. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  328. package/dist/tool-system/builtin/agent.d.ts +2 -0
  329. package/dist/tool-system/builtin/agent.js +274 -33
  330. package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
  331. package/dist/tool-system/builtin/background-jobs.js +96 -4
  332. package/dist/tool-system/builtin/background-work.d.ts +6 -0
  333. package/dist/tool-system/builtin/background-work.js +8 -1
  334. package/dist/tool-system/builtin/bash.js +5 -2
  335. package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
  336. package/dist/tool-system/builtin/browser-tools.js +89 -23
  337. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  338. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  339. package/dist/tool-system/builtin/edit.js +2 -6
  340. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  341. package/dist/tool-system/builtin/file-cache.js +4 -0
  342. package/dist/tool-system/builtin/generate-image.js +17 -10
  343. package/dist/tool-system/builtin/generate-video.js +26 -7
  344. package/dist/tool-system/builtin/grep.js +2 -2
  345. package/dist/tool-system/builtin/image-uploader.js +7 -1
  346. package/dist/tool-system/builtin/index.d.ts +32 -7
  347. package/dist/tool-system/builtin/index.js +237 -167
  348. package/dist/tool-system/builtin/memory.d.ts +6 -0
  349. package/dist/tool-system/builtin/memory.js +36 -15
  350. package/dist/tool-system/builtin/panel.d.ts +9 -0
  351. package/dist/tool-system/builtin/panel.js +314 -0
  352. package/dist/tool-system/builtin/read.js +5 -1
  353. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  354. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  355. package/dist/tool-system/builtin/sources.d.ts +8 -0
  356. package/dist/tool-system/builtin/sources.js +137 -0
  357. package/dist/tool-system/builtin/tool-search.js +7 -2
  358. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  359. package/dist/tool-system/builtin/web-fetch.js +17 -13
  360. package/dist/tool-system/builtin/web-search.js +1 -3
  361. package/dist/tool-system/capability-module.d.ts +93 -0
  362. package/dist/tool-system/capability-module.js +53 -0
  363. package/dist/tool-system/context.d.ts +77 -19
  364. package/dist/tool-system/executor.js +75 -50
  365. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  366. package/dist/tool-system/external-tool-exposure.js +304 -0
  367. package/dist/tool-system/mcp-manager.d.ts +11 -1
  368. package/dist/tool-system/mcp-manager.js +19 -4
  369. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  370. package/dist/tool-system/mcp-tool-policy.js +34 -0
  371. package/dist/tool-system/panel-bridge.d.ts +53 -0
  372. package/dist/tool-system/panel-bridge.js +1 -0
  373. package/dist/tool-system/path-policy.js +99 -2
  374. package/dist/tool-system/permission.d.ts +26 -0
  375. package/dist/tool-system/permission.js +46 -0
  376. package/dist/tool-system/registry.d.ts +12 -1
  377. package/dist/tool-system/registry.js +31 -7
  378. package/dist/tool-system/sandbox/index.js +3 -8
  379. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  380. package/dist/tool-system/session-tool-host.d.ts +139 -0
  381. package/dist/tool-system/session-tool-host.js +167 -0
  382. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  383. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  384. package/dist/tool-system/validation.d.ts +14 -7
  385. package/dist/tool-system/validation.js +701 -7
  386. package/dist/types.d.ts +186 -20
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  388. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  389. package/dist/utils/file-mutex.d.ts +65 -0
  390. package/dist/utils/file-mutex.js +145 -0
  391. package/dist/utils/json.d.ts +2 -4
  392. package/dist/utils/json.js +2 -4
  393. package/dist/utils/lockfile.d.ts +30 -1
  394. package/dist/utils/lockfile.js +2 -2
  395. package/dist/utils/secret-scrubber.d.ts +8 -0
  396. package/dist/utils/secret-scrubber.js +227 -0
  397. package/dist/utils/toolDisplay.js +1 -1
  398. package/package.json +20 -5
  399. package/THIRD_PARTY_NOTICES.md +0 -206
  400. package/dist/arena/arena.d.ts +0 -45
  401. package/dist/arena/arena.js +0 -362
  402. package/dist/arena/context/context-tools.d.ts +0 -16
  403. package/dist/arena/context/context-tools.js +0 -272
  404. package/dist/arena/context/within-root.d.ts +0 -7
  405. package/dist/arena/context/within-root.js +0 -15
  406. package/dist/arena/detect-mode.d.ts +0 -20
  407. package/dist/arena/detect-mode.js +0 -78
  408. package/dist/arena/digest-builder.d.ts +0 -25
  409. package/dist/arena/digest-builder.js +0 -120
  410. package/dist/arena/index.d.ts +0 -29
  411. package/dist/arena/index.js +0 -29
  412. package/dist/arena/iterate/convergence.d.ts +0 -25
  413. package/dist/arena/iterate/convergence.js +0 -103
  414. package/dist/arena/iterate/formats/index.d.ts +0 -22
  415. package/dist/arena/iterate/formats/index.js +0 -283
  416. package/dist/arena/iterate/index.d.ts +0 -11
  417. package/dist/arena/iterate/index.js +0 -9
  418. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  419. package/dist/arena/iterate/iterative-arena.js +0 -237
  420. package/dist/arena/iterate/parse.d.ts +0 -42
  421. package/dist/arena/iterate/parse.js +0 -123
  422. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  423. package/dist/arena/iterate/phases/argue.js +0 -165
  424. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  425. package/dist/arena/iterate/phases/revise.js +0 -62
  426. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  427. package/dist/arena/iterate/phases/tournament.js +0 -113
  428. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  429. package/dist/arena/iterate/tools/web-tools.js +0 -54
  430. package/dist/arena/iterate/types.d.ts +0 -152
  431. package/dist/arena/iterate/types.js +0 -8
  432. package/dist/arena/ledger.d.ts +0 -47
  433. package/dist/arena/ledger.js +0 -159
  434. package/dist/arena/lenses/architecture.d.ts +0 -5
  435. package/dist/arena/lenses/architecture.js +0 -22
  436. package/dist/arena/lenses/engineering.d.ts +0 -5
  437. package/dist/arena/lenses/engineering.js +0 -22
  438. package/dist/arena/lenses/general.d.ts +0 -5
  439. package/dist/arena/lenses/general.js +0 -20
  440. package/dist/arena/lenses/index.d.ts +0 -16
  441. package/dist/arena/lenses/index.js +0 -47
  442. package/dist/arena/lenses/product.d.ts +0 -5
  443. package/dist/arena/lenses/product.js +0 -22
  444. package/dist/arena/model-presets.d.ts +0 -23
  445. package/dist/arena/model-presets.js +0 -44
  446. package/dist/arena/phases/adjudication.d.ts +0 -25
  447. package/dist/arena/phases/adjudication.js +0 -142
  448. package/dist/arena/phases/build-consensus.d.ts +0 -30
  449. package/dist/arena/phases/build-consensus.js +0 -85
  450. package/dist/arena/phases/claim-registry.d.ts +0 -26
  451. package/dist/arena/phases/claim-registry.js +0 -60
  452. package/dist/arena/phases/cross-review.d.ts +0 -47
  453. package/dist/arena/phases/cross-review.js +0 -224
  454. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  455. package/dist/arena/phases/debate-rounds.js +0 -161
  456. package/dist/arena/phases/participant-research.d.ts +0 -39
  457. package/dist/arena/phases/participant-research.js +0 -316
  458. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  459. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  460. package/dist/arena/planner.d.ts +0 -28
  461. package/dist/arena/planner.js +0 -312
  462. package/dist/arena/providers/docs.d.ts +0 -7
  463. package/dist/arena/providers/docs.js +0 -111
  464. package/dist/arena/providers/git.d.ts +0 -8
  465. package/dist/arena/providers/git.js +0 -174
  466. package/dist/arena/providers/index.d.ts +0 -32
  467. package/dist/arena/providers/index.js +0 -132
  468. package/dist/arena/providers/none.d.ts +0 -7
  469. package/dist/arena/providers/none.js +0 -11
  470. package/dist/arena/providers/repo.d.ts +0 -7
  471. package/dist/arena/providers/repo.js +0 -258
  472. package/dist/arena/render/session.d.ts +0 -17
  473. package/dist/arena/render/session.js +0 -190
  474. package/dist/arena/render/terminal.d.ts +0 -34
  475. package/dist/arena/render/terminal.js +0 -286
  476. package/dist/arena/strategies/discussion.d.ts +0 -25
  477. package/dist/arena/strategies/discussion.js +0 -143
  478. package/dist/arena/strategies/index.d.ts +0 -15
  479. package/dist/arena/strategies/index.js +0 -28
  480. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  481. package/dist/arena/strategies/language-wrapper.js +0 -102
  482. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  483. package/dist/arena/strategies/lens-wrapper.js +0 -236
  484. package/dist/arena/strategies/planning.d.ts +0 -30
  485. package/dist/arena/strategies/planning.js +0 -225
  486. package/dist/arena/strategies/review.d.ts +0 -26
  487. package/dist/arena/strategies/review.js +0 -168
  488. package/dist/arena/strategies/utils.d.ts +0 -36
  489. package/dist/arena/strategies/utils.js +0 -603
  490. package/dist/arena/tools/selector.d.ts +0 -17
  491. package/dist/arena/tools/selector.js +0 -61
  492. package/dist/arena/transitions.d.ts +0 -53
  493. package/dist/arena/transitions.js +0 -97
  494. package/dist/arena/types.d.ts +0 -518
  495. package/dist/arena/types.js +0 -27
  496. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  497. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  498. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  499. package/dist/cc-orchestrator/cc-capability.js +0 -53
  500. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  501. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  502. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  503. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  504. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  505. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  506. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  507. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  508. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  509. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  510. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  511. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  512. package/dist/cc-orchestrator/index.d.ts +0 -8
  513. package/dist/cc-orchestrator/index.js +0 -8
  514. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  515. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  516. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  517. package/dist/cc-orchestrator/session-discovery.js +0 -125
  518. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  519. package/dist/cc-orchestrator/session-history.js +0 -150
  520. package/dist/cron/cron-runtime.d.ts +0 -2
  521. package/dist/cron/cron-runtime.js +0 -2
  522. package/dist/cron/cron-store.d.ts +0 -2
  523. package/dist/cron/cron-store.js +0 -2
  524. package/dist/cron/scheduler.d.ts +0 -7
  525. package/dist/cron/scheduler.js +0 -7
  526. package/dist/engine/goal.js +0 -206
  527. package/dist/external-agents/config.d.ts +0 -2
  528. package/dist/external-agents/config.js +0 -15
  529. package/dist/external-agents/types.d.ts +0 -31
  530. package/dist/git/parse-log.d.ts +0 -13
  531. package/dist/git/parse-log.js +0 -21
  532. package/dist/git/utils.d.ts +0 -49
  533. package/dist/git/utils.js +0 -161
  534. package/dist/git/worktree/crud.d.ts +0 -72
  535. package/dist/git/worktree/crud.js +0 -235
  536. package/dist/git/worktree/diff.d.ts +0 -14
  537. package/dist/git/worktree/diff.js +0 -82
  538. package/dist/git/worktree/git-exec.d.ts +0 -7
  539. package/dist/git/worktree/git-exec.js +0 -87
  540. package/dist/git/worktree/index.d.ts +0 -5
  541. package/dist/git/worktree/index.js +0 -5
  542. package/dist/git/worktree/query.d.ts +0 -43
  543. package/dist/git/worktree/query.js +0 -128
  544. package/dist/git/worktree/slug.d.ts +0 -11
  545. package/dist/git/worktree/slug.js +0 -58
  546. package/dist/git/worktree.d.ts +0 -1
  547. package/dist/git/worktree.js +0 -5
  548. package/dist/lsp/client.d.ts +0 -41
  549. package/dist/lsp/client.js +0 -186
  550. package/dist/lsp/manager.d.ts +0 -40
  551. package/dist/lsp/manager.js +0 -155
  552. package/dist/lsp/root-path.d.ts +0 -9
  553. package/dist/lsp/root-path.js +0 -12
  554. package/dist/lsp/servers.d.ts +0 -16
  555. package/dist/lsp/servers.js +0 -60
  556. package/dist/prompt/sections/coding.md +0 -35
  557. package/dist/quota/credentials.d.ts +0 -3
  558. package/dist/quota/credentials.js +0 -80
  559. package/dist/quota/index.d.ts +0 -36
  560. package/dist/quota/index.js +0 -155
  561. package/dist/quota/types.d.ts +0 -48
  562. package/dist/quota/types.js +0 -13
  563. package/dist/review/review-prompt.d.ts +0 -28
  564. package/dist/review/review-prompt.js +0 -81
  565. package/dist/state.d.ts +0 -160
  566. package/dist/state.js +0 -267
  567. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  568. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  570. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  571. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  572. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  573. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  574. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  576. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  577. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  578. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  579. package/dist/tool-system/builtin/arena.d.ts +0 -31
  580. package/dist/tool-system/builtin/arena.js +0 -416
  581. package/dist/tool-system/builtin/brief.d.ts +0 -6
  582. package/dist/tool-system/builtin/brief.js +0 -41
  583. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  584. package/dist/tool-system/builtin/check-quota.js +0 -34
  585. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  586. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  587. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  588. package/dist/tool-system/builtin/lsp.js +0 -144
  589. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  590. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  591. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  592. package/dist/tool-system/builtin/worktree.js +0 -363
  593. /package/dist/{external-agents → links}/types.js +0 -0
  594. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  595. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
package/README.md CHANGED
@@ -17,10 +17,7 @@ Requires Node ≥ 20.10 and an ESM-capable runtime.
17
17
  ## Quickstart
18
18
 
19
19
  ```ts
20
- import {
21
- Engine,
22
- HeadlessApprovalBackend,
23
- } from "@cjhyy/code-shell-core";
20
+ import { Engine, HeadlessApprovalBackend } from "@cjhyy/code-shell-core";
24
21
 
25
22
  const engine = new Engine({
26
23
  llm: {
@@ -37,9 +34,7 @@ const engine = new Engine({
37
34
  headless: true,
38
35
  });
39
36
 
40
- const result = await engine.run(
41
- "list files in this directory and summarise their purpose",
42
- );
37
+ const result = await engine.run("list files in this directory and summarise their purpose");
43
38
 
44
39
  console.log(result.text);
45
40
  console.log("turns:", result.turnCount, "reason:", result.reason);
@@ -60,7 +55,9 @@ Restrict the tool set:
60
55
 
61
56
  ```ts
62
57
  new Engine({
63
- llm: { /* … */ },
58
+ llm: {
59
+ /* … */
60
+ },
64
61
  // Whitelist — only these built-in tools are registered.
65
62
  enabledBuiltinTools: ["Read", "Glob", "Grep", "WebFetch"],
66
63
  // Or blacklist — registers every built-in except these.
@@ -93,11 +90,7 @@ Direct `new Engine(...)` still works for advanced cases — but the
93
90
  protocol-mediated path is what we test, document, and avoid breaking.
94
91
 
95
92
  ```ts
96
- import {
97
- createServer,
98
- createClient,
99
- createInProcessTransport,
100
- } from "@cjhyy/code-shell-core";
93
+ import { createServer, createClient, createInProcessTransport } from "@cjhyy/code-shell-core";
101
94
 
102
95
  const [serverT, clientT] = createInProcessTransport();
103
96
  const handle = createServer({
@@ -123,6 +116,16 @@ For an out-of-process worker, swap `createInProcessTransport()` for a
123
116
  `StdioTransport` pair. The factory accepts any `Transport`, so a future
124
117
  `IpcAdapter` will compose without changing the call shape.
125
118
 
119
+ Browser UI hosts that only need the trusted Panel App lifecycle coordinator should
120
+ use the audited browser-safe subpath:
121
+
122
+ ```ts
123
+ import { PanelAppLifecycleRuntime } from "@cjhyy/code-shell-core/browser/panel-app-runtime";
124
+ ```
125
+
126
+ This entry contains no Engine, filesystem, process or Electron dependency.
127
+ The non-browser alias is `@cjhyy/code-shell-core/panel-app-runtime`.
128
+
126
129
  `StreamEvent` includes `background_agent_completed` (B2.2) so embedders
127
130
  that don't poll `notificationQueue` still observe sub-agent finish/fail
128
131
  results. `client.onBackgroundAgentCompleted((sessionId, event) => …)` is
@@ -133,16 +136,16 @@ the typed entry point; events also flow through the catch-all
133
136
 
134
137
  These exports are covered by the stability promise:
135
138
 
136
- | Area | Stable exports |
137
- | --- | --- |
138
- | Factories | `createServer`, `createClient`, `createInProcessTransport`, `StdioTransport` |
139
- | Server/client | `AgentServer`, `AgentClient` (direct use is supported but `createServer/Client` preferred) |
140
- | Engine | `Engine`, `EngineConfig`, `EngineRuntime`, `ChatSessionManager` |
141
- | Protocol types | `Methods`, `ErrorCodes`, `RpcMessage`, `RunResult`, `StreamEvent`, `StreamCallback`, `BackgroundAgentCompletedEvent` |
142
- | LLM | `LLMConfig`, `LLMResponse`, `ModelPool`, `createLLMClient`, `registerProvider` |
143
- | Tool authoring | `ToolDefinition`, `ToolCall`, `ToolResult`, `RegisteredTool`, `BUILTIN_TOOLS`, `HookContext`, `HookResult` |
144
- | Permissions | `PermissionClassifier`, `HeadlessApprovalBackend`, `AutoApprovalBackend`, `ApprovalBackend`, `PermissionMode`, `PermissionRule` |
145
- | Errors | `FrameworkError` + subclasses (`LLMError`, `ToolError`, `PermissionDeniedError`, …) |
139
+ | Area | Stable exports |
140
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------- |
141
+ | Factories | `createServer`, `createClient`, `createInProcessTransport`, `StdioTransport` |
142
+ | Server/client | `AgentServer`, `AgentClient` (direct use is supported but `createServer/Client` preferred) |
143
+ | Engine | `Engine`, `EngineConfig`, `EngineRuntime`, `ChatSessionManager` |
144
+ | Protocol types | `Methods`, `ErrorCodes`, `RpcMessage`, `RunResult`, `StreamEvent`, `StreamCallback`, `BackgroundAgentCompletedEvent` |
145
+ | LLM | `LLMConfig`, `LLMResponse`, `ModelPool`, `createLLMClient`, `registerProvider` |
146
+ | Tool authoring | `ToolDefinition`, `ToolCall`, `ToolResult`, `RegisteredTool`, `BUILTIN_TOOLS`, `HookContext`, `HookResult` |
147
+ | Permissions | `PermissionClassifier`, `HeadlessApprovalBackend`, `AutoApprovalBackend`, `ApprovalBackend`, `PermissionMode`, `PermissionRule` |
148
+ | Errors | `FrameworkError` + subclasses (`LLMError`, `ToolError`, `PermissionDeniedError`, …) |
146
149
 
147
150
  ### Treat as internal
148
151
 
@@ -153,11 +156,21 @@ experimental/internal unless explicitly documented otherwise, and may
153
156
  change between minor versions without notice. Plan to migrate via the
154
157
  protocol surface instead of deep-importing.
155
158
 
159
+ In 0.8 the plugin installer / marketplace / onboarding / self-updater exports
160
+ (`installPluginFromPath`, `installPlugin`, `addMarketplace`, `resolveApiKey`,
161
+ `checkForUpdate`, …) moved off this root entry to
162
+ `@cjhyy/code-shell-core/internal` — they are host-assembly surfaces for the
163
+ in-repo TUI/desktop apps, not part of the embeddable agent SDK.
164
+
156
165
  ## Stability
157
166
 
158
167
  Pre-1.0 — APIs may change between minor versions. The "stable surface"
159
168
  table above is the contract; everything else is mobile.
160
169
 
170
+ **Breaking in 0.8:** host-assembly exports (installer/marketplace/onboarding/
171
+ updater) left the root entry; import them from
172
+ `@cjhyy/code-shell-core/internal` if you must (no stability promise there).
173
+
161
174
  See [CHANGELOG.md](https://github.com/cjhyy/codeshell/blob/main/CHANGELOG.md) in the monorepo.
162
175
 
163
176
  ## License
@@ -7,8 +7,8 @@ export interface AgentSourceDir {
7
7
  pluginName?: string;
8
8
  }
9
9
  /**
10
- * Loads reusable sub-agent role definitions from one or more directories
11
- * of `*.md` files. Non-recursive. Malformed files are skipped with a
10
+ * Loads reusable sub-agent role definitions recursively from one or more
11
+ * directories. Malformed `.md` files are skipped with a
12
12
  * warning rather than failing the whole load — one bad role file must
13
13
  * not break the agent system.
14
14
  *
@@ -1,9 +1,9 @@
1
- import { readdirSync, readFileSync, existsSync, statSync } from "node:fs";
2
- import { join } from "node:path";
1
+ import { existsSync, readdirSync, readFileSync, realpathSync, statSync } from "node:fs";
2
+ import { isAbsolute, join, relative, sep } from "node:path";
3
3
  import { parseAgentDefinition } from "./agent-definition.js";
4
4
  /**
5
- * Loads reusable sub-agent role definitions from one or more directories
6
- * of `*.md` files. Non-recursive. Malformed files are skipped with a
5
+ * Loads reusable sub-agent role definitions recursively from one or more
6
+ * directories. Malformed `.md` files are skipped with a
7
7
  * warning rather than failing the whole load — one bad role file must
8
8
  * not break the agent system.
9
9
  *
@@ -27,14 +27,14 @@ export class AgentDefinitionRegistry {
27
27
  for (const { dir, source, pluginName } of dirs) {
28
28
  if (!existsSync(dir) || !statSync(dir).isDirectory())
29
29
  continue;
30
- for (const entry of readdirSync(dir).sort()) {
31
- if (!entry.endsWith(".md"))
32
- continue;
33
- const full = join(dir, entry);
30
+ const pluginRoot = source === "plugin" ? safeRealpath(dir) : null;
31
+ if (source === "plugin" && !pluginRoot)
32
+ continue;
33
+ for (const { full, sourceName } of collectAgentMarkdownFiles(dir, pluginRoot)) {
34
34
  try {
35
35
  if (!statSync(full).isFile())
36
36
  continue;
37
- const def = parseAgentDefinition(readFileSync(full, "utf8"), entry);
37
+ const def = parseAgentDefinition(readFileSync(full, "utf8"), sourceName);
38
38
  def.source = source;
39
39
  if (pluginName)
40
40
  def.pluginName = pluginName;
@@ -54,7 +54,7 @@ export class AgentDefinitionRegistry {
54
54
  reg.defs.set(def.name, def);
55
55
  }
56
56
  catch (err) {
57
- reg.warnings.push(`${entry}: ${err.message}`);
57
+ reg.warnings.push(`${sourceName}: ${err.message}`);
58
58
  }
59
59
  }
60
60
  }
@@ -74,3 +74,40 @@ export class AgentDefinitionRegistry {
74
74
  return [...this.defs.values()];
75
75
  }
76
76
  }
77
+ function safeRealpath(path) {
78
+ try {
79
+ return realpathSync(path);
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ function resolveContainedPluginAgent(root, candidate) {
86
+ const target = safeRealpath(candidate);
87
+ if (!target)
88
+ return null;
89
+ const rel = relative(root, target);
90
+ if (rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel))
91
+ return null;
92
+ return target;
93
+ }
94
+ function collectAgentMarkdownFiles(root, pluginRoot) {
95
+ const files = [];
96
+ const walk = (dir) => {
97
+ for (const entry of readdirSync(dir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
98
+ const candidate = join(dir, entry.name);
99
+ if (entry.isDirectory()) {
100
+ walk(candidate);
101
+ continue;
102
+ }
103
+ if (!entry.name.endsWith(".md"))
104
+ continue;
105
+ const full = pluginRoot === null ? candidate : resolveContainedPluginAgent(pluginRoot, candidate);
106
+ if (!full)
107
+ continue;
108
+ files.push({ full, sourceName: relative(root, candidate) });
109
+ }
110
+ };
111
+ walk(root);
112
+ return files;
113
+ }
@@ -1,3 +1,4 @@
1
+ import type { SandboxMode } from "../tool-system/sandbox/index.js";
1
2
  /** A reusable sub-agent role, loaded from a Markdown file. */
2
3
  export interface AgentDefinition {
3
4
  /** Unique role key, e.g. "researcher". Matched against Agent({ agent_type }). */
@@ -17,6 +18,10 @@ export interface AgentDefinition {
17
18
  * system prompt and the only ones it may invoke. Empty array → no skills.
18
19
  */
19
20
  skills?: string[];
21
+ /** Optional OS shell sandbox mode. Undefined → inherit the parent sandbox. */
22
+ sandbox?: SandboxMode;
23
+ /** Optional MCP server allowlist. Undefined → inherit all; [] → no MCP. */
24
+ mcp?: string[];
20
25
  /** Markdown body — becomes the child Engine's appendSystemPrompt. */
21
26
  systemPrompt: string;
22
27
  /** Where this def was loaded from. Runtime-only; never serialized. */
@@ -1,4 +1,8 @@
1
1
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
2
+ const SANDBOX_MODES = new Set(["off", "auto", "seatbelt", "bwrap"]);
3
+ function normalizeSandboxMode(value) {
4
+ return typeof value === "string" && SANDBOX_MODES.has(value) ? value : undefined;
5
+ }
2
6
  /**
3
7
  * Normalize a frontmatter `tools:` / `skills:` value into a string[].
4
8
  * Accepts both a YAML list (`[a, b]`) and a comma/whitespace-separated
@@ -56,6 +60,12 @@ export function parseAgentDefinition(raw, sourceName) {
56
60
  const skills = normalizeNameList(fm.skills);
57
61
  if (skills !== undefined)
58
62
  def.skills = skills;
63
+ const sandbox = normalizeSandboxMode(fm.sandbox);
64
+ if (sandbox !== undefined)
65
+ def.sandbox = sandbox;
66
+ const mcp = normalizeNameList(fm.mcp);
67
+ if (mcp !== undefined)
68
+ def.mcp = mcp;
59
69
  return def;
60
70
  }
61
71
  /**
@@ -78,6 +88,10 @@ export function serializeAgentDefinition(def) {
78
88
  fm.tools = def.tools;
79
89
  if (def.skills !== undefined)
80
90
  fm.skills = def.skills;
91
+ if (def.sandbox !== undefined)
92
+ fm.sandbox = def.sandbox;
93
+ if (def.mcp !== undefined)
94
+ fm.mcp = def.mcp;
81
95
  const yaml = stringifyYaml(fm).trimEnd();
82
96
  return `---\n${yaml}\n---\n${def.systemPrompt}\n`;
83
97
  }
@@ -6,7 +6,7 @@
6
6
  * no GUI/TTY assumptions, so the same code runs in any host
7
7
  * (docs/automation-plan-2026-05-31.md, D1).
8
8
  */
9
- import { CronScheduler } from "./scheduler.js";
9
+ import { CronScheduler, type CronJobLifecycleEvent } from "./scheduler.js";
10
10
  import { type CronRunner, type RunSubmitter } from "./runner.js";
11
11
  import type { CronStore } from "./store.js";
12
12
  export interface StartAutomationDeps {
@@ -20,6 +20,8 @@ export interface StartAutomationDeps {
20
20
  */
21
21
  runner?: CronRunner;
22
22
  runManager?: RunSubmitter;
23
+ /** Installed before persisted jobs are restored and their timers are armed. */
24
+ onJobEvent?: (event: CronJobLifecycleEvent) => void;
23
25
  }
24
26
  export interface AutomationHandle {
25
27
  scheduler: CronScheduler;
@@ -32,10 +34,11 @@ export interface AutomationHandle {
32
34
  * `runManager` when both are supplied (it gives run history).
33
35
  */
34
36
  export declare function startAutomation(deps: StartAutomationDeps): AutomationHandle;
35
- export { CronScheduler, cronScheduler, type CronJob } from "./scheduler.js";
37
+ export { CronScheduler, cronScheduler, type CronExecutionOutcome, type CronJob, type CronJobLifecycleEvent, } from "./scheduler.js";
36
38
  export { CronStore, defaultCronStorePath } from "./store.js";
37
39
  export { bindCronToEngine, bindCronToRunManager, type CronRunner, type CronRunRequest, type CronRunResult, type RunSubmitter, } from "./runner.js";
38
40
  export { isCronExpression, parseCronExpression, nextCronTime, type ParsedCron, } from "./cron-expr.js";
39
- export type { CronPermissionLevel, CreateJobOptions, UpdateJobPatch } from "./scheduler.js";
40
- export { resolveWritePolicy, wrapUntrustedInput, type WritePolicy, } from "./write-policy.js";
41
+ export { validateSchedule } from "./scheduler.js";
42
+ export type { CronPermissionLevel, CronTemplateSource, CreateJobOptions, UpdateJobPatch, } from "./scheduler.js";
43
+ export { resolveWritePolicy, wrapUntrustedInput, type WritePolicy } from "./write-policy.js";
41
44
  export { runWriteJobInWorktree, type WriteJobGitOps, type RunWriteJobInput, type RunWriteJobResult, } from "./write-run.js";
@@ -24,6 +24,7 @@ export function startAutomation(deps) {
24
24
  else {
25
25
  throw new Error("startAutomation requires either a runner or a runManager");
26
26
  }
27
+ scheduler.setJobEventListener(deps.onJobEvent);
27
28
  scheduler.loadJobs();
28
29
  return {
29
30
  scheduler,
@@ -31,9 +32,10 @@ export function startAutomation(deps) {
31
32
  };
32
33
  }
33
34
  // Re-export the building blocks so hosts import everything from one place.
34
- export { CronScheduler, cronScheduler } from "./scheduler.js";
35
+ export { CronScheduler, cronScheduler, } from "./scheduler.js";
35
36
  export { CronStore, defaultCronStorePath } from "./store.js";
36
37
  export { bindCronToEngine, bindCronToRunManager, } from "./runner.js";
37
38
  export { isCronExpression, parseCronExpression, nextCronTime, } from "./cron-expr.js";
38
- export { resolveWritePolicy, wrapUntrustedInput, } from "./write-policy.js";
39
+ export { validateSchedule } from "./scheduler.js";
40
+ export { resolveWritePolicy, wrapUntrustedInput } from "./write-policy.js";
39
41
  export { runWriteJobInWorktree, } from "./write-run.js";
@@ -58,10 +58,12 @@ export function bindCronToEngine(scheduler, runner) {
58
58
  // was deleted) auto-disables the job so it stops silently retrying.
59
59
  if (result?.stop) {
60
60
  scheduler.disableWithReason(job.id, result.stop.reason);
61
+ return { stoppedReason: result.stop.reason };
61
62
  }
62
63
  }
63
64
  catch (err) {
64
- logCronFailure(job, err);
65
+ if (!signal.aborted)
66
+ logCronFailure(job, err);
65
67
  throw err; // let the scheduler's catch record stats + keep ticking
66
68
  }
67
69
  });
@@ -13,6 +13,13 @@ import type { CronStore } from "./store.js";
13
13
  export declare function isCronMisfire(scheduledFor: number, now: number): boolean;
14
14
  /** Permission tier a scheduled job runs under (Phase 5 enforces write tiers). */
15
15
  export type CronPermissionLevel = "read-only" | "workspace-write" | "full";
16
+ /** Non-executable provenance for a job explicitly created from a plugin template. */
17
+ export interface CronTemplateSource {
18
+ installKey: string;
19
+ templateId: string;
20
+ revision: string;
21
+ pluginVersion?: string;
22
+ }
16
23
  export interface CronJob {
17
24
  id: string;
18
25
  name: string;
@@ -44,6 +51,27 @@ export interface CronJob {
44
51
  * target whose session no longer exists. Surfaced in the UI so a silently
45
52
  * stopped job is explainable; cleared when the job is re-enabled. */
46
53
  disabledReason?: string;
54
+ /**
55
+ * Immutable provenance copied when a user instantiates a plugin template.
56
+ * The job remains standalone if the plugin is later updated or uninstalled.
57
+ */
58
+ templateSource?: CronTemplateSource;
59
+ }
60
+ /**
61
+ * Job execution lifecycle event (see CronScheduler.setJobEventListener).
62
+ * job_error carries the message `fire()` would otherwise swallow.
63
+ */
64
+ export interface CronJobLifecycleEvent {
65
+ type: "job_start" | "job_end" | "job_stopped" | "job_cancelled" | "job_error";
66
+ job: CronJob;
67
+ durationMs?: number;
68
+ reason?: string;
69
+ error?: string;
70
+ }
71
+ /** Optional semantic outcome returned by an executor after a non-throwing run. */
72
+ export interface CronExecutionOutcome {
73
+ /** The run permanently disabled itself and should not be reported as success. */
74
+ stoppedReason?: string;
47
75
  }
48
76
  /** Optional metadata accepted by create(). */
49
77
  export interface CreateJobOptions {
@@ -52,6 +80,7 @@ export interface CreateJobOptions {
52
80
  permissionLevel?: CronPermissionLevel;
53
81
  once?: boolean;
54
82
  resumeSessionId?: string;
83
+ templateSource?: CronTemplateSource;
55
84
  }
56
85
  /** Fields editable via update(). Any omitted field is left unchanged. */
57
86
  export interface UpdateJobPatch {
@@ -79,6 +108,7 @@ export declare class CronScheduler {
79
108
  private runningControllers;
80
109
  private nextId;
81
110
  private onExecute?;
111
+ private onJobEvent?;
82
112
  /** Optional persistence backend. When set, every create/delete/pause/resume
83
113
  * writes the full job set to disk so jobs survive a restart. */
84
114
  private store?;
@@ -96,7 +126,16 @@ export declare class CronScheduler {
96
126
  /** Attach (or replace) the persistence backend. Used to give the shared
97
127
  * singleton a store at runtime startup without changing its identity. */
98
128
  setStore(store: CronStore): void;
99
- setExecutor(fn: (job: CronJob, signal: AbortSignal) => Promise<void>): void;
129
+ setExecutor(fn: (job: CronJob, signal: AbortSignal) => Promise<void | CronExecutionOutcome>): void;
130
+ /**
131
+ * Observe job execution lifecycle
132
+ * (job_start → job_end | job_stopped | job_cancelled | job_error). Hosts
133
+ * wire this to their notification surface so scheduled runs — especially
134
+ * failures, which `fire()` otherwise swallows — are no longer silent.
135
+ * Listener errors are swallowed; observation never affects scheduling.
136
+ */
137
+ setJobEventListener(listener: ((event: CronJobLifecycleEvent) => void) | undefined): void;
138
+ private emitJobEvent;
100
139
  /**
101
140
  * Abort the in-flight run of `jobId`, if any. Aborts the AbortSignal handed
102
141
  * to the executor (which Engine.run cooperates with — it resolves with
@@ -175,6 +214,21 @@ export declare class CronScheduler {
175
214
  * calling arm() repeatedly.
176
215
  */
177
216
  private arm;
217
+ /**
218
+ * Wait until an ABSOLUTE instant, in `setTimeout`-safe chunks.
219
+ *
220
+ * Node/Electron timers take a 32-bit signed delay: anything above
221
+ * 2,147,483,647ms (~24.8 days) does NOT wait longer — it emits
222
+ * `TimeoutOverflowWarning` and is coerced to **1ms**. A `30d` interval or a
223
+ * monthly cron therefore fired almost immediately and then kept re-firing,
224
+ * because the next absolute target was still out of range.
225
+ *
226
+ * So never hand a raw long delay to setTimeout. Sleep at most
227
+ * MAX_TIMER_DELAY_MS at a time and re-check the clock; only run `onDue` once
228
+ * the real instant has arrived. Chunked waiting also self-corrects for clock
229
+ * drift and sleep/wake, since each hop recomputes from `Date.now()`.
230
+ */
231
+ private armAt;
178
232
  private armInterval;
179
233
  private nextIntervalRunAfter;
180
234
  private armCron;
@@ -188,6 +242,8 @@ export declare class CronScheduler {
188
242
  */
189
243
  private fire;
190
244
  }
245
+ /** Validate a schedule string (interval or cron expr) without scheduling. Throws on invalid. */
246
+ export declare function validateSchedule(schedule: string, timezone?: string): void;
191
247
  /**
192
248
  * Parse a schedule string into milliseconds.
193
249
  * Supports: "30s", "5m", "1h", "1d", or raw (all-digit) milliseconds.