@cjhyy/code-shell-core 0.7.1 → 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 (594) 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/permission.d.ts +26 -0
  374. package/dist/tool-system/permission.js +46 -0
  375. package/dist/tool-system/registry.d.ts +12 -1
  376. package/dist/tool-system/registry.js +31 -7
  377. package/dist/tool-system/sandbox/index.js +3 -8
  378. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  379. package/dist/tool-system/session-tool-host.d.ts +139 -0
  380. package/dist/tool-system/session-tool-host.js +167 -0
  381. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  382. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  383. package/dist/tool-system/validation.d.ts +14 -7
  384. package/dist/tool-system/validation.js +701 -7
  385. package/dist/types.d.ts +186 -20
  386. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  388. package/dist/utils/file-mutex.d.ts +65 -0
  389. package/dist/utils/file-mutex.js +145 -0
  390. package/dist/utils/json.d.ts +2 -4
  391. package/dist/utils/json.js +2 -4
  392. package/dist/utils/lockfile.d.ts +30 -1
  393. package/dist/utils/lockfile.js +2 -2
  394. package/dist/utils/secret-scrubber.d.ts +8 -0
  395. package/dist/utils/secret-scrubber.js +227 -0
  396. package/dist/utils/toolDisplay.js +1 -1
  397. package/package.json +20 -5
  398. package/THIRD_PARTY_NOTICES.md +0 -206
  399. package/dist/arena/arena.d.ts +0 -45
  400. package/dist/arena/arena.js +0 -362
  401. package/dist/arena/context/context-tools.d.ts +0 -16
  402. package/dist/arena/context/context-tools.js +0 -272
  403. package/dist/arena/context/within-root.d.ts +0 -7
  404. package/dist/arena/context/within-root.js +0 -15
  405. package/dist/arena/detect-mode.d.ts +0 -20
  406. package/dist/arena/detect-mode.js +0 -78
  407. package/dist/arena/digest-builder.d.ts +0 -25
  408. package/dist/arena/digest-builder.js +0 -120
  409. package/dist/arena/index.d.ts +0 -29
  410. package/dist/arena/index.js +0 -29
  411. package/dist/arena/iterate/convergence.d.ts +0 -25
  412. package/dist/arena/iterate/convergence.js +0 -103
  413. package/dist/arena/iterate/formats/index.d.ts +0 -22
  414. package/dist/arena/iterate/formats/index.js +0 -283
  415. package/dist/arena/iterate/index.d.ts +0 -11
  416. package/dist/arena/iterate/index.js +0 -9
  417. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  418. package/dist/arena/iterate/iterative-arena.js +0 -237
  419. package/dist/arena/iterate/parse.d.ts +0 -42
  420. package/dist/arena/iterate/parse.js +0 -123
  421. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  422. package/dist/arena/iterate/phases/argue.js +0 -165
  423. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  424. package/dist/arena/iterate/phases/revise.js +0 -62
  425. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  426. package/dist/arena/iterate/phases/tournament.js +0 -113
  427. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  428. package/dist/arena/iterate/tools/web-tools.js +0 -54
  429. package/dist/arena/iterate/types.d.ts +0 -152
  430. package/dist/arena/iterate/types.js +0 -8
  431. package/dist/arena/ledger.d.ts +0 -47
  432. package/dist/arena/ledger.js +0 -159
  433. package/dist/arena/lenses/architecture.d.ts +0 -5
  434. package/dist/arena/lenses/architecture.js +0 -22
  435. package/dist/arena/lenses/engineering.d.ts +0 -5
  436. package/dist/arena/lenses/engineering.js +0 -22
  437. package/dist/arena/lenses/general.d.ts +0 -5
  438. package/dist/arena/lenses/general.js +0 -20
  439. package/dist/arena/lenses/index.d.ts +0 -16
  440. package/dist/arena/lenses/index.js +0 -47
  441. package/dist/arena/lenses/product.d.ts +0 -5
  442. package/dist/arena/lenses/product.js +0 -22
  443. package/dist/arena/model-presets.d.ts +0 -23
  444. package/dist/arena/model-presets.js +0 -44
  445. package/dist/arena/phases/adjudication.d.ts +0 -25
  446. package/dist/arena/phases/adjudication.js +0 -142
  447. package/dist/arena/phases/build-consensus.d.ts +0 -30
  448. package/dist/arena/phases/build-consensus.js +0 -85
  449. package/dist/arena/phases/claim-registry.d.ts +0 -26
  450. package/dist/arena/phases/claim-registry.js +0 -60
  451. package/dist/arena/phases/cross-review.d.ts +0 -47
  452. package/dist/arena/phases/cross-review.js +0 -224
  453. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  454. package/dist/arena/phases/debate-rounds.js +0 -161
  455. package/dist/arena/phases/participant-research.d.ts +0 -39
  456. package/dist/arena/phases/participant-research.js +0 -316
  457. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  458. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  459. package/dist/arena/planner.d.ts +0 -28
  460. package/dist/arena/planner.js +0 -312
  461. package/dist/arena/providers/docs.d.ts +0 -7
  462. package/dist/arena/providers/docs.js +0 -111
  463. package/dist/arena/providers/git.d.ts +0 -8
  464. package/dist/arena/providers/git.js +0 -174
  465. package/dist/arena/providers/index.d.ts +0 -32
  466. package/dist/arena/providers/index.js +0 -132
  467. package/dist/arena/providers/none.d.ts +0 -7
  468. package/dist/arena/providers/none.js +0 -11
  469. package/dist/arena/providers/repo.d.ts +0 -7
  470. package/dist/arena/providers/repo.js +0 -258
  471. package/dist/arena/render/session.d.ts +0 -17
  472. package/dist/arena/render/session.js +0 -190
  473. package/dist/arena/render/terminal.d.ts +0 -34
  474. package/dist/arena/render/terminal.js +0 -286
  475. package/dist/arena/strategies/discussion.d.ts +0 -25
  476. package/dist/arena/strategies/discussion.js +0 -143
  477. package/dist/arena/strategies/index.d.ts +0 -15
  478. package/dist/arena/strategies/index.js +0 -28
  479. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  480. package/dist/arena/strategies/language-wrapper.js +0 -102
  481. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  482. package/dist/arena/strategies/lens-wrapper.js +0 -236
  483. package/dist/arena/strategies/planning.d.ts +0 -30
  484. package/dist/arena/strategies/planning.js +0 -225
  485. package/dist/arena/strategies/review.d.ts +0 -26
  486. package/dist/arena/strategies/review.js +0 -168
  487. package/dist/arena/strategies/utils.d.ts +0 -36
  488. package/dist/arena/strategies/utils.js +0 -603
  489. package/dist/arena/tools/selector.d.ts +0 -17
  490. package/dist/arena/tools/selector.js +0 -61
  491. package/dist/arena/transitions.d.ts +0 -53
  492. package/dist/arena/transitions.js +0 -97
  493. package/dist/arena/types.d.ts +0 -518
  494. package/dist/arena/types.js +0 -27
  495. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  496. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  497. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  498. package/dist/cc-orchestrator/cc-capability.js +0 -53
  499. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  500. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  501. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  502. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  503. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  504. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  505. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  506. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  507. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  508. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  509. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  510. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  511. package/dist/cc-orchestrator/index.d.ts +0 -8
  512. package/dist/cc-orchestrator/index.js +0 -8
  513. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  514. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  515. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  516. package/dist/cc-orchestrator/session-discovery.js +0 -125
  517. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  518. package/dist/cc-orchestrator/session-history.js +0 -150
  519. package/dist/cron/cron-runtime.d.ts +0 -2
  520. package/dist/cron/cron-runtime.js +0 -2
  521. package/dist/cron/cron-store.d.ts +0 -2
  522. package/dist/cron/cron-store.js +0 -2
  523. package/dist/cron/scheduler.d.ts +0 -7
  524. package/dist/cron/scheduler.js +0 -7
  525. package/dist/engine/goal.js +0 -206
  526. package/dist/external-agents/config.d.ts +0 -2
  527. package/dist/external-agents/config.js +0 -15
  528. package/dist/external-agents/types.d.ts +0 -31
  529. package/dist/git/parse-log.d.ts +0 -13
  530. package/dist/git/parse-log.js +0 -21
  531. package/dist/git/utils.d.ts +0 -49
  532. package/dist/git/utils.js +0 -161
  533. package/dist/git/worktree/crud.d.ts +0 -72
  534. package/dist/git/worktree/crud.js +0 -235
  535. package/dist/git/worktree/diff.d.ts +0 -14
  536. package/dist/git/worktree/diff.js +0 -82
  537. package/dist/git/worktree/git-exec.d.ts +0 -7
  538. package/dist/git/worktree/git-exec.js +0 -87
  539. package/dist/git/worktree/index.d.ts +0 -5
  540. package/dist/git/worktree/index.js +0 -5
  541. package/dist/git/worktree/query.d.ts +0 -43
  542. package/dist/git/worktree/query.js +0 -128
  543. package/dist/git/worktree/slug.d.ts +0 -11
  544. package/dist/git/worktree/slug.js +0 -58
  545. package/dist/git/worktree.d.ts +0 -1
  546. package/dist/git/worktree.js +0 -5
  547. package/dist/lsp/client.d.ts +0 -41
  548. package/dist/lsp/client.js +0 -186
  549. package/dist/lsp/manager.d.ts +0 -40
  550. package/dist/lsp/manager.js +0 -155
  551. package/dist/lsp/root-path.d.ts +0 -9
  552. package/dist/lsp/root-path.js +0 -12
  553. package/dist/lsp/servers.d.ts +0 -16
  554. package/dist/lsp/servers.js +0 -60
  555. package/dist/prompt/sections/coding.md +0 -35
  556. package/dist/quota/credentials.d.ts +0 -3
  557. package/dist/quota/credentials.js +0 -80
  558. package/dist/quota/index.d.ts +0 -36
  559. package/dist/quota/index.js +0 -155
  560. package/dist/quota/types.d.ts +0 -48
  561. package/dist/quota/types.js +0 -13
  562. package/dist/review/review-prompt.d.ts +0 -28
  563. package/dist/review/review-prompt.js +0 -81
  564. package/dist/state.d.ts +0 -160
  565. package/dist/state.js +0 -267
  566. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  567. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  568. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  570. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  571. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  572. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  573. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  574. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  576. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  577. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  578. package/dist/tool-system/builtin/arena.d.ts +0 -31
  579. package/dist/tool-system/builtin/arena.js +0 -416
  580. package/dist/tool-system/builtin/brief.d.ts +0 -6
  581. package/dist/tool-system/builtin/brief.js +0 -41
  582. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  583. package/dist/tool-system/builtin/check-quota.js +0 -34
  584. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  585. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  586. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  587. package/dist/tool-system/builtin/lsp.js +0 -144
  588. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  589. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  590. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  591. package/dist/tool-system/builtin/worktree.js +0 -363
  592. /package/dist/{external-agents → links}/types.js +0 -0
  593. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  594. /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.