@cjhyy/code-shell-core 0.5.0-rc.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 (484) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/dist/agent/coordinator.d.ts +49 -0
  4. package/dist/agent/coordinator.js +77 -0
  5. package/dist/arena/arena.d.ts +43 -0
  6. package/dist/arena/arena.js +334 -0
  7. package/dist/arena/context/context-tools.d.ts +16 -0
  8. package/dist/arena/context/context-tools.js +231 -0
  9. package/dist/arena/detect-mode.d.ts +20 -0
  10. package/dist/arena/detect-mode.js +78 -0
  11. package/dist/arena/digest-builder.d.ts +25 -0
  12. package/dist/arena/digest-builder.js +120 -0
  13. package/dist/arena/index.d.ts +29 -0
  14. package/dist/arena/index.js +29 -0
  15. package/dist/arena/iterate/convergence.d.ts +25 -0
  16. package/dist/arena/iterate/convergence.js +103 -0
  17. package/dist/arena/iterate/formats/index.d.ts +22 -0
  18. package/dist/arena/iterate/formats/index.js +283 -0
  19. package/dist/arena/iterate/index.d.ts +11 -0
  20. package/dist/arena/iterate/index.js +9 -0
  21. package/dist/arena/iterate/iterative-arena.d.ts +23 -0
  22. package/dist/arena/iterate/iterative-arena.js +237 -0
  23. package/dist/arena/iterate/parse.d.ts +42 -0
  24. package/dist/arena/iterate/parse.js +123 -0
  25. package/dist/arena/iterate/phases/argue.d.ts +22 -0
  26. package/dist/arena/iterate/phases/argue.js +159 -0
  27. package/dist/arena/iterate/phases/revise.d.ts +16 -0
  28. package/dist/arena/iterate/phases/revise.js +62 -0
  29. package/dist/arena/iterate/phases/tournament.d.ts +34 -0
  30. package/dist/arena/iterate/phases/tournament.js +113 -0
  31. package/dist/arena/iterate/tools/web-tools.d.ts +13 -0
  32. package/dist/arena/iterate/tools/web-tools.js +54 -0
  33. package/dist/arena/iterate/types.d.ts +152 -0
  34. package/dist/arena/iterate/types.js +8 -0
  35. package/dist/arena/ledger.d.ts +47 -0
  36. package/dist/arena/ledger.js +151 -0
  37. package/dist/arena/lenses/architecture.d.ts +5 -0
  38. package/dist/arena/lenses/architecture.js +22 -0
  39. package/dist/arena/lenses/engineering.d.ts +5 -0
  40. package/dist/arena/lenses/engineering.js +22 -0
  41. package/dist/arena/lenses/general.d.ts +5 -0
  42. package/dist/arena/lenses/general.js +20 -0
  43. package/dist/arena/lenses/index.d.ts +16 -0
  44. package/dist/arena/lenses/index.js +47 -0
  45. package/dist/arena/lenses/product.d.ts +5 -0
  46. package/dist/arena/lenses/product.js +22 -0
  47. package/dist/arena/model-presets.d.ts +23 -0
  48. package/dist/arena/model-presets.js +44 -0
  49. package/dist/arena/phases/adjudication.d.ts +24 -0
  50. package/dist/arena/phases/adjudication.js +144 -0
  51. package/dist/arena/phases/build-consensus.d.ts +29 -0
  52. package/dist/arena/phases/build-consensus.js +86 -0
  53. package/dist/arena/phases/claim-registry.d.ts +26 -0
  54. package/dist/arena/phases/claim-registry.js +60 -0
  55. package/dist/arena/phases/cross-review.d.ts +45 -0
  56. package/dist/arena/phases/cross-review.js +224 -0
  57. package/dist/arena/phases/debate-rounds.d.ts +27 -0
  58. package/dist/arena/phases/debate-rounds.js +162 -0
  59. package/dist/arena/phases/participant-research.d.ts +38 -0
  60. package/dist/arena/phases/participant-research.js +317 -0
  61. package/dist/arena/phases/planning-detail-expansion.d.ts +38 -0
  62. package/dist/arena/phases/planning-detail-expansion.js +121 -0
  63. package/dist/arena/planner.d.ts +27 -0
  64. package/dist/arena/planner.js +312 -0
  65. package/dist/arena/providers/docs.d.ts +6 -0
  66. package/dist/arena/providers/docs.js +108 -0
  67. package/dist/arena/providers/git.d.ts +8 -0
  68. package/dist/arena/providers/git.js +174 -0
  69. package/dist/arena/providers/index.d.ts +32 -0
  70. package/dist/arena/providers/index.js +132 -0
  71. package/dist/arena/providers/none.d.ts +7 -0
  72. package/dist/arena/providers/none.js +11 -0
  73. package/dist/arena/providers/repo.d.ts +6 -0
  74. package/dist/arena/providers/repo.js +255 -0
  75. package/dist/arena/render/session.d.ts +17 -0
  76. package/dist/arena/render/session.js +190 -0
  77. package/dist/arena/render/terminal.d.ts +34 -0
  78. package/dist/arena/render/terminal.js +286 -0
  79. package/dist/arena/strategies/discussion.d.ts +25 -0
  80. package/dist/arena/strategies/discussion.js +143 -0
  81. package/dist/arena/strategies/index.d.ts +15 -0
  82. package/dist/arena/strategies/index.js +28 -0
  83. package/dist/arena/strategies/language-wrapper.d.ts +17 -0
  84. package/dist/arena/strategies/language-wrapper.js +102 -0
  85. package/dist/arena/strategies/lens-wrapper.d.ts +16 -0
  86. package/dist/arena/strategies/lens-wrapper.js +236 -0
  87. package/dist/arena/strategies/planning.d.ts +30 -0
  88. package/dist/arena/strategies/planning.js +225 -0
  89. package/dist/arena/strategies/review.d.ts +26 -0
  90. package/dist/arena/strategies/review.js +168 -0
  91. package/dist/arena/strategies/utils.d.ts +39 -0
  92. package/dist/arena/strategies/utils.js +647 -0
  93. package/dist/arena/tools/selector.d.ts +17 -0
  94. package/dist/arena/tools/selector.js +61 -0
  95. package/dist/arena/transitions.d.ts +48 -0
  96. package/dist/arena/transitions.js +92 -0
  97. package/dist/arena/types.d.ts +508 -0
  98. package/dist/arena/types.js +27 -0
  99. package/dist/cli/agent-server-stdio.d.ts +32 -0
  100. package/dist/cli/agent-server-stdio.js +116 -0
  101. package/dist/colorizer.d.ts +23 -0
  102. package/dist/colorizer.js +12 -0
  103. package/dist/context/compaction.d.ts +116 -0
  104. package/dist/context/compaction.js +534 -0
  105. package/dist/context/manager.d.ts +145 -0
  106. package/dist/context/manager.js +423 -0
  107. package/dist/context/token-counter.d.ts +27 -0
  108. package/dist/context/token-counter.js +91 -0
  109. package/dist/context/tool-result-storage.d.ts +96 -0
  110. package/dist/context/tool-result-storage.js +296 -0
  111. package/dist/cost-tracker.d.ts +64 -0
  112. package/dist/cost-tracker.js +314 -0
  113. package/dist/cron/scheduler.d.ts +34 -0
  114. package/dist/cron/scheduler.js +115 -0
  115. package/dist/data/deepseek-models.json +46 -0
  116. package/dist/data/gemini-models.json +67 -0
  117. package/dist/data/openai-models.json +175 -0
  118. package/dist/data/openrouter-models.d.ts +35 -0
  119. package/dist/data/openrouter-models.js +36 -0
  120. package/dist/data/openrouter-models.json +4626 -0
  121. package/dist/data/openrouter-sync.d.ts +16 -0
  122. package/dist/data/openrouter-sync.js +53 -0
  123. package/dist/data/static-catalogs.d.ts +25 -0
  124. package/dist/data/static-catalogs.js +26 -0
  125. package/dist/data/zai-models.json +56 -0
  126. package/dist/engine/cost-store.d.ts +22 -0
  127. package/dist/engine/cost-store.js +15 -0
  128. package/dist/engine/engine.d.ts +295 -0
  129. package/dist/engine/engine.js +1467 -0
  130. package/dist/engine/model-facade.d.ts +24 -0
  131. package/dist/engine/model-facade.js +194 -0
  132. package/dist/engine/parse-task.d.ts +59 -0
  133. package/dist/engine/parse-task.js +135 -0
  134. package/dist/engine/patch-orphaned-tools.d.ts +52 -0
  135. package/dist/engine/patch-orphaned-tools.js +95 -0
  136. package/dist/engine/query.d.ts +50 -0
  137. package/dist/engine/query.js +107 -0
  138. package/dist/engine/runtime.d.ts +50 -0
  139. package/dist/engine/runtime.js +59 -0
  140. package/dist/engine/streaming-tool-queue.d.ts +34 -0
  141. package/dist/engine/streaming-tool-queue.js +61 -0
  142. package/dist/engine/token-budget.d.ts +22 -0
  143. package/dist/engine/token-budget.js +40 -0
  144. package/dist/engine/tool-summary.d.ts +13 -0
  145. package/dist/engine/tool-summary.js +35 -0
  146. package/dist/engine/turn-loop.d.ts +122 -0
  147. package/dist/engine/turn-loop.js +602 -0
  148. package/dist/engine/turn-state.d.ts +20 -0
  149. package/dist/engine/turn-state.js +17 -0
  150. package/dist/exceptions.d.ts +61 -0
  151. package/dist/exceptions.js +116 -0
  152. package/dist/git/utils.d.ts +35 -0
  153. package/dist/git/utils.js +98 -0
  154. package/dist/git/worktree.d.ts +36 -0
  155. package/dist/git/worktree.js +139 -0
  156. package/dist/hooks/events.d.ts +114 -0
  157. package/dist/hooks/events.js +4 -0
  158. package/dist/hooks/inject.d.ts +19 -0
  159. package/dist/hooks/inject.js +29 -0
  160. package/dist/hooks/registry.d.ts +15 -0
  161. package/dist/hooks/registry.js +84 -0
  162. package/dist/hooks/shell-runner.d.ts +45 -0
  163. package/dist/hooks/shell-runner.js +173 -0
  164. package/dist/index.d.ts +117 -0
  165. package/dist/index.js +145 -0
  166. package/dist/llm/api-key-sanitize.d.ts +22 -0
  167. package/dist/llm/api-key-sanitize.js +81 -0
  168. package/dist/llm/capabilities/index.d.ts +20 -0
  169. package/dist/llm/capabilities/index.js +39 -0
  170. package/dist/llm/capabilities/rules.d.ts +26 -0
  171. package/dist/llm/capabilities/rules.js +215 -0
  172. package/dist/llm/capabilities/types.d.ts +114 -0
  173. package/dist/llm/capabilities/types.js +24 -0
  174. package/dist/llm/client-base.d.ts +29 -0
  175. package/dist/llm/client-base.js +137 -0
  176. package/dist/llm/client-factory.d.ts +10 -0
  177. package/dist/llm/client-factory.js +29 -0
  178. package/dist/llm/model-cache.d.ts +21 -0
  179. package/dist/llm/model-cache.js +46 -0
  180. package/dist/llm/model-fetcher.d.ts +29 -0
  181. package/dist/llm/model-fetcher.js +282 -0
  182. package/dist/llm/model-pool.d.ts +95 -0
  183. package/dist/llm/model-pool.js +246 -0
  184. package/dist/llm/provider-catalog.d.ts +32 -0
  185. package/dist/llm/provider-catalog.js +50 -0
  186. package/dist/llm/provider-kinds.d.ts +21 -0
  187. package/dist/llm/provider-kinds.js +132 -0
  188. package/dist/llm/providers/anthropic.d.ts +19 -0
  189. package/dist/llm/providers/anthropic.js +267 -0
  190. package/dist/llm/providers/openai.d.ts +64 -0
  191. package/dist/llm/providers/openai.js +606 -0
  192. package/dist/llm/retry.d.ts +12 -0
  193. package/dist/llm/retry.js +17 -0
  194. package/dist/llm/stream-watchdog.d.ts +42 -0
  195. package/dist/llm/stream-watchdog.js +70 -0
  196. package/dist/llm/token-counter.d.ts +17 -0
  197. package/dist/llm/token-counter.js +36 -0
  198. package/dist/llm/types.d.ts +37 -0
  199. package/dist/llm/types.js +4 -0
  200. package/dist/logging/logger.d.ts +109 -0
  201. package/dist/logging/logger.js +390 -0
  202. package/dist/logging/sanitize-messages.d.ts +42 -0
  203. package/dist/logging/sanitize-messages.js +150 -0
  204. package/dist/logging/session-recorder.d.ts +90 -0
  205. package/dist/logging/session-recorder.js +304 -0
  206. package/dist/lsp/client.d.ts +41 -0
  207. package/dist/lsp/client.js +166 -0
  208. package/dist/lsp/manager.d.ts +40 -0
  209. package/dist/lsp/manager.js +124 -0
  210. package/dist/lsp/servers.d.ts +16 -0
  211. package/dist/lsp/servers.js +60 -0
  212. package/dist/migrate-models.d.ts +45 -0
  213. package/dist/migrate-models.js +179 -0
  214. package/dist/onboarding.d.ts +189 -0
  215. package/dist/onboarding.js +625 -0
  216. package/dist/plugins/gitOps.d.ts +32 -0
  217. package/dist/plugins/gitOps.js +62 -0
  218. package/dist/plugins/installedPlugins.d.ts +15 -0
  219. package/dist/plugins/installedPlugins.js +56 -0
  220. package/dist/plugins/knownMarketplaces.d.ts +10 -0
  221. package/dist/plugins/knownMarketplaces.js +46 -0
  222. package/dist/plugins/loadPluginHooks.d.ts +52 -0
  223. package/dist/plugins/loadPluginHooks.js +162 -0
  224. package/dist/plugins/marketplaceManager.d.ts +49 -0
  225. package/dist/plugins/marketplaceManager.js +142 -0
  226. package/dist/plugins/parseMarketplaceInput.d.ts +16 -0
  227. package/dist/plugins/parseMarketplaceInput.js +73 -0
  228. package/dist/plugins/pluginCommandHook.d.ts +54 -0
  229. package/dist/plugins/pluginCommandHook.js +180 -0
  230. package/dist/plugins/pluginCommandsLoader.d.ts +25 -0
  231. package/dist/plugins/pluginCommandsLoader.js +114 -0
  232. package/dist/plugins/pluginInstaller.d.ts +36 -0
  233. package/dist/plugins/pluginInstaller.js +228 -0
  234. package/dist/plugins/schemas.d.ts +9 -0
  235. package/dist/plugins/schemas.js +136 -0
  236. package/dist/plugins/types.d.ts +75 -0
  237. package/dist/plugins/types.js +7 -0
  238. package/dist/plugins/varRewrite.d.ts +42 -0
  239. package/dist/plugins/varRewrite.js +129 -0
  240. package/dist/preset/index.d.ts +60 -0
  241. package/dist/preset/index.js +159 -0
  242. package/dist/product/define.d.ts +60 -0
  243. package/dist/product/define.js +123 -0
  244. package/dist/product/index.d.ts +5 -0
  245. package/dist/product/index.js +4 -0
  246. package/dist/product/types.d.ts +111 -0
  247. package/dist/product/types.js +21 -0
  248. package/dist/prompt/composer.d.ts +49 -0
  249. package/dist/prompt/composer.js +168 -0
  250. package/dist/prompt/instruction-scanner.d.ts +54 -0
  251. package/dist/prompt/instruction-scanner.js +187 -0
  252. package/dist/prompt/section-cache.d.ts +15 -0
  253. package/dist/prompt/section-cache.js +31 -0
  254. package/dist/prompt/section-loader.d.ts +26 -0
  255. package/dist/prompt/section-loader.js +53 -0
  256. package/dist/prompt/sections/base.md +35 -0
  257. package/dist/prompt/sections/coding.md +31 -0
  258. package/dist/prompt/sections/orchestration.md +16 -0
  259. package/dist/prompt/sections/tone.md +9 -0
  260. package/dist/protocol/chat-session-manager.d.ts +33 -0
  261. package/dist/protocol/chat-session-manager.js +65 -0
  262. package/dist/protocol/chat-session.d.ts +49 -0
  263. package/dist/protocol/chat-session.js +86 -0
  264. package/dist/protocol/client.d.ts +104 -0
  265. package/dist/protocol/client.js +260 -0
  266. package/dist/protocol/factories.d.ts +93 -0
  267. package/dist/protocol/factories.js +64 -0
  268. package/dist/protocol/helpers.d.ts +42 -0
  269. package/dist/protocol/helpers.js +55 -0
  270. package/dist/protocol/index.d.ts +4 -0
  271. package/dist/protocol/index.js +4 -0
  272. package/dist/protocol/server.d.ts +80 -0
  273. package/dist/protocol/server.js +855 -0
  274. package/dist/protocol/transport.d.ts +37 -0
  275. package/dist/protocol/transport.js +85 -0
  276. package/dist/protocol/types.d.ts +221 -0
  277. package/dist/protocol/types.js +61 -0
  278. package/dist/remote/bridge.d.ts +37 -0
  279. package/dist/remote/bridge.js +103 -0
  280. package/dist/run/ArtifactTracker.d.ts +38 -0
  281. package/dist/run/ArtifactTracker.js +132 -0
  282. package/dist/run/CheckpointWriter.d.ts +53 -0
  283. package/dist/run/CheckpointWriter.js +135 -0
  284. package/dist/run/EngineRunner.d.ts +72 -0
  285. package/dist/run/EngineRunner.js +119 -0
  286. package/dist/run/Evaluator.d.ts +56 -0
  287. package/dist/run/Evaluator.js +62 -0
  288. package/dist/run/FileRunStore.d.ts +39 -0
  289. package/dist/run/FileRunStore.js +176 -0
  290. package/dist/run/Heartbeat.d.ts +54 -0
  291. package/dist/run/Heartbeat.js +123 -0
  292. package/dist/run/RunApprovalBackend.d.ts +53 -0
  293. package/dist/run/RunApprovalBackend.js +85 -0
  294. package/dist/run/RunLock.d.ts +40 -0
  295. package/dist/run/RunLock.js +98 -0
  296. package/dist/run/RunManager.d.ts +82 -0
  297. package/dist/run/RunManager.js +587 -0
  298. package/dist/run/RunQueue.d.ts +27 -0
  299. package/dist/run/RunQueue.js +73 -0
  300. package/dist/run/RunStore.d.ts +25 -0
  301. package/dist/run/RunStore.js +9 -0
  302. package/dist/run/factory.d.ts +63 -0
  303. package/dist/run/factory.js +51 -0
  304. package/dist/run/index.d.ts +17 -0
  305. package/dist/run/index.js +23 -0
  306. package/dist/run/types.d.ts +136 -0
  307. package/dist/run/types.js +28 -0
  308. package/dist/runtime/safe-spawn.d.ts +118 -0
  309. package/dist/runtime/safe-spawn.js +268 -0
  310. package/dist/services/analytics.d.ts +29 -0
  311. package/dist/services/analytics.js +84 -0
  312. package/dist/services/auto-dream.d.ts +49 -0
  313. package/dist/services/auto-dream.js +124 -0
  314. package/dist/services/diagnostics.d.ts +41 -0
  315. package/dist/services/diagnostics.js +99 -0
  316. package/dist/services/extract-memories.d.ts +31 -0
  317. package/dist/services/extract-memories.js +71 -0
  318. package/dist/services/index.d.ts +11 -0
  319. package/dist/services/index.js +17 -0
  320. package/dist/services/memory-orchestrator.d.ts +60 -0
  321. package/dist/services/memory-orchestrator.js +133 -0
  322. package/dist/services/notifier.d.ts +25 -0
  323. package/dist/services/notifier.js +69 -0
  324. package/dist/services/oauth.d.ts +27 -0
  325. package/dist/services/oauth.js +153 -0
  326. package/dist/services/session-memory.d.ts +37 -0
  327. package/dist/services/session-memory.js +81 -0
  328. package/dist/session/file-history.d.ts +41 -0
  329. package/dist/session/file-history.js +115 -0
  330. package/dist/session/memory.d.ts +104 -0
  331. package/dist/session/memory.js +310 -0
  332. package/dist/session/session-manager.d.ts +41 -0
  333. package/dist/session/session-manager.js +261 -0
  334. package/dist/session/transcript.d.ts +39 -0
  335. package/dist/session/transcript.js +186 -0
  336. package/dist/settings/manager.d.ts +36 -0
  337. package/dist/settings/manager.js +187 -0
  338. package/dist/settings/schema.d.ts +1219 -0
  339. package/dist/settings/schema.js +246 -0
  340. package/dist/skills/frontmatter.d.ts +13 -0
  341. package/dist/skills/frontmatter.js +70 -0
  342. package/dist/skills/index.d.ts +7 -0
  343. package/dist/skills/index.js +6 -0
  344. package/dist/skills/scanner.d.ts +31 -0
  345. package/dist/skills/scanner.js +171 -0
  346. package/dist/state.d.ts +160 -0
  347. package/dist/state.js +267 -0
  348. package/dist/tool-system/builtin/agent-notifications.d.ts +84 -0
  349. package/dist/tool-system/builtin/agent-notifications.js +197 -0
  350. package/dist/tool-system/builtin/agent-registry.d.ts +67 -0
  351. package/dist/tool-system/builtin/agent-registry.js +126 -0
  352. package/dist/tool-system/builtin/agent-transcript-translator.d.ts +22 -0
  353. package/dist/tool-system/builtin/agent-transcript-translator.js +160 -0
  354. package/dist/tool-system/builtin/agent.d.ts +16 -0
  355. package/dist/tool-system/builtin/agent.js +364 -0
  356. package/dist/tool-system/builtin/apply-patch/applier.d.ts +26 -0
  357. package/dist/tool-system/builtin/apply-patch/applier.js +250 -0
  358. package/dist/tool-system/builtin/apply-patch/index.d.ts +20 -0
  359. package/dist/tool-system/builtin/apply-patch/index.js +101 -0
  360. package/dist/tool-system/builtin/apply-patch/parser.d.ts +17 -0
  361. package/dist/tool-system/builtin/apply-patch/parser.js +212 -0
  362. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +18 -0
  363. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +123 -0
  364. package/dist/tool-system/builtin/apply-patch/types.d.ts +49 -0
  365. package/dist/tool-system/builtin/apply-patch/types.js +13 -0
  366. package/dist/tool-system/builtin/arena.d.ts +31 -0
  367. package/dist/tool-system/builtin/arena.js +416 -0
  368. package/dist/tool-system/builtin/ask-user.d.ts +20 -0
  369. package/dist/tool-system/builtin/ask-user.js +99 -0
  370. package/dist/tool-system/builtin/bash.d.ts +21 -0
  371. package/dist/tool-system/builtin/bash.js +149 -0
  372. package/dist/tool-system/builtin/brief.d.ts +6 -0
  373. package/dist/tool-system/builtin/brief.js +41 -0
  374. package/dist/tool-system/builtin/config.d.ts +6 -0
  375. package/dist/tool-system/builtin/config.js +67 -0
  376. package/dist/tool-system/builtin/cron.d.ts +10 -0
  377. package/dist/tool-system/builtin/cron.js +61 -0
  378. package/dist/tool-system/builtin/edit.d.ts +6 -0
  379. package/dist/tool-system/builtin/edit.js +100 -0
  380. package/dist/tool-system/builtin/file-cache.d.ts +11 -0
  381. package/dist/tool-system/builtin/file-cache.js +39 -0
  382. package/dist/tool-system/builtin/glob.d.ts +7 -0
  383. package/dist/tool-system/builtin/glob.js +76 -0
  384. package/dist/tool-system/builtin/grep.d.ts +7 -0
  385. package/dist/tool-system/builtin/grep.js +150 -0
  386. package/dist/tool-system/builtin/index.d.ts +20 -0
  387. package/dist/tool-system/builtin/index.js +449 -0
  388. package/dist/tool-system/builtin/lsp.d.ts +6 -0
  389. package/dist/tool-system/builtin/lsp.js +141 -0
  390. package/dist/tool-system/builtin/mcp-tools.d.ts +10 -0
  391. package/dist/tool-system/builtin/mcp-tools.js +102 -0
  392. package/dist/tool-system/builtin/memory.d.ts +26 -0
  393. package/dist/tool-system/builtin/memory.js +226 -0
  394. package/dist/tool-system/builtin/notebook-edit.d.ts +6 -0
  395. package/dist/tool-system/builtin/notebook-edit.js +124 -0
  396. package/dist/tool-system/builtin/plan.d.ts +15 -0
  397. package/dist/tool-system/builtin/plan.js +55 -0
  398. package/dist/tool-system/builtin/powershell.d.ts +11 -0
  399. package/dist/tool-system/builtin/powershell.js +64 -0
  400. package/dist/tool-system/builtin/read.d.ts +6 -0
  401. package/dist/tool-system/builtin/read.js +70 -0
  402. package/dist/tool-system/builtin/remote-trigger.d.ts +6 -0
  403. package/dist/tool-system/builtin/remote-trigger.js +54 -0
  404. package/dist/tool-system/builtin/repl.d.ts +11 -0
  405. package/dist/tool-system/builtin/repl.js +82 -0
  406. package/dist/tool-system/builtin/send-message.d.ts +6 -0
  407. package/dist/tool-system/builtin/send-message.js +47 -0
  408. package/dist/tool-system/builtin/skill-prompt.d.ts +20 -0
  409. package/dist/tool-system/builtin/skill-prompt.js +52 -0
  410. package/dist/tool-system/builtin/skill.d.ts +9 -0
  411. package/dist/tool-system/builtin/skill.js +55 -0
  412. package/dist/tool-system/builtin/sleep.d.ts +6 -0
  413. package/dist/tool-system/builtin/sleep.js +33 -0
  414. package/dist/tool-system/builtin/task.d.ts +48 -0
  415. package/dist/tool-system/builtin/task.js +139 -0
  416. package/dist/tool-system/builtin/tool-search.d.ts +11 -0
  417. package/dist/tool-system/builtin/tool-search.js +90 -0
  418. package/dist/tool-system/builtin/web-fetch.d.ts +10 -0
  419. package/dist/tool-system/builtin/web-fetch.js +328 -0
  420. package/dist/tool-system/builtin/web-search.d.ts +25 -0
  421. package/dist/tool-system/builtin/web-search.js +174 -0
  422. package/dist/tool-system/builtin/worktree.d.ts +10 -0
  423. package/dist/tool-system/builtin/worktree.js +95 -0
  424. package/dist/tool-system/builtin/write.d.ts +6 -0
  425. package/dist/tool-system/builtin/write.js +36 -0
  426. package/dist/tool-system/context.d.ts +165 -0
  427. package/dist/tool-system/context.js +18 -0
  428. package/dist/tool-system/executor.d.ts +49 -0
  429. package/dist/tool-system/executor.js +495 -0
  430. package/dist/tool-system/investigation-guard.d.ts +46 -0
  431. package/dist/tool-system/investigation-guard.js +155 -0
  432. package/dist/tool-system/mcp-manager.d.ts +67 -0
  433. package/dist/tool-system/mcp-manager.js +249 -0
  434. package/dist/tool-system/permission.d.ts +111 -0
  435. package/dist/tool-system/permission.js +774 -0
  436. package/dist/tool-system/registry.d.ts +32 -0
  437. package/dist/tool-system/registry.js +131 -0
  438. package/dist/tool-system/sandbox/bwrap.d.ts +13 -0
  439. package/dist/tool-system/sandbox/bwrap.js +63 -0
  440. package/dist/tool-system/sandbox/index.d.ts +78 -0
  441. package/dist/tool-system/sandbox/index.js +222 -0
  442. package/dist/tool-system/sandbox/off.d.ts +2 -0
  443. package/dist/tool-system/sandbox/off.js +8 -0
  444. package/dist/tool-system/sandbox/seatbelt.d.ts +18 -0
  445. package/dist/tool-system/sandbox/seatbelt.js +109 -0
  446. package/dist/tool-system/task-guard.d.ts +29 -0
  447. package/dist/tool-system/task-guard.js +70 -0
  448. package/dist/tool-system/validation.d.ts +5 -0
  449. package/dist/tool-system/validation.js +39 -0
  450. package/dist/types.d.ts +376 -0
  451. package/dist/types.js +4 -0
  452. package/dist/updater.d.ts +65 -0
  453. package/dist/updater.js +405 -0
  454. package/dist/utils/debug.d.ts +41 -0
  455. package/dist/utils/debug.js +110 -0
  456. package/dist/utils/earlyInput.d.ts +43 -0
  457. package/dist/utils/earlyInput.js +166 -0
  458. package/dist/utils/env.d.ts +24 -0
  459. package/dist/utils/env.js +104 -0
  460. package/dist/utils/envUtils.d.ts +51 -0
  461. package/dist/utils/envUtils.js +135 -0
  462. package/dist/utils/execFileNoThrow.d.ts +39 -0
  463. package/dist/utils/execFileNoThrow.js +74 -0
  464. package/dist/utils/format.d.ts +44 -0
  465. package/dist/utils/format.js +236 -0
  466. package/dist/utils/intl.d.ts +22 -0
  467. package/dist/utils/intl.js +83 -0
  468. package/dist/utils/lockfile.d.ts +15 -0
  469. package/dist/utils/lockfile.js +30 -0
  470. package/dist/utils/memoize.d.ts +19 -0
  471. package/dist/utils/memoize.js +14 -0
  472. package/dist/utils/semver.d.ts +6 -0
  473. package/dist/utils/semver.js +13 -0
  474. package/dist/utils/sliceAnsi.d.ts +12 -0
  475. package/dist/utils/sliceAnsi.js +62 -0
  476. package/dist/utils/systemTheme.d.ts +40 -0
  477. package/dist/utils/systemTheme.js +108 -0
  478. package/dist/utils/task-sanitizer.d.ts +6 -0
  479. package/dist/utils/task-sanitizer.js +24 -0
  480. package/dist/utils/theme.d.ts +93 -0
  481. package/dist/utils/theme.js +544 -0
  482. package/dist/utils/toolDisplay.d.ts +31 -0
  483. package/dist/utils/toolDisplay.js +188 -0
  484. package/package.json +72 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * LSPTool — language server protocol operations for code intelligence.
3
+ */
4
+ import { getLSPManager } from "../../lsp/manager.js";
5
+ import { detectLSPServer } from "../../lsp/servers.js";
6
+ import { pathToFileURL } from "node:url";
7
+ export const lspToolDef = {
8
+ name: "LSP",
9
+ description: "Use Language Server Protocol for code intelligence operations. " +
10
+ "Available actions: goToDefinition, findReferences, hover, getDiagnostics, getSymbols. " +
11
+ "Requires a language server to be installed for the target language.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {
15
+ action: {
16
+ type: "string",
17
+ enum: ["goToDefinition", "findReferences", "hover", "getDiagnostics", "getSymbols"],
18
+ description: "The LSP operation to perform",
19
+ },
20
+ file_path: {
21
+ type: "string",
22
+ description: "Absolute path to the file",
23
+ },
24
+ line: {
25
+ type: "number",
26
+ description: "Line number (0-based). Required for goToDefinition, findReferences, hover.",
27
+ },
28
+ character: {
29
+ type: "number",
30
+ description: "Character offset (0-based). Required for goToDefinition, findReferences, hover.",
31
+ },
32
+ },
33
+ required: ["action", "file_path"],
34
+ },
35
+ };
36
+ export async function lspTool(args) {
37
+ const action = args.action;
38
+ const filePath = args.file_path;
39
+ const line = args.line ?? 0;
40
+ const character = args.character ?? 0;
41
+ if (!filePath)
42
+ return "Error: file_path is required";
43
+ const manager = getLSPManager();
44
+ if (!manager)
45
+ return "Error: LSP is not initialized. Language servers are not available.";
46
+ // Detect the appropriate server
47
+ const serverConfig = detectLSPServer(filePath);
48
+ if (!serverConfig)
49
+ return `Error: No language server configured for ${filePath}`;
50
+ const client = await manager.getClient(serverConfig.name);
51
+ if (!client) {
52
+ return `Error: Language server "${serverConfig.name}" is not available. Install: ${serverConfig.installHint}`;
53
+ }
54
+ const uri = pathToFileURL(filePath).href;
55
+ const position = { line, character };
56
+ try {
57
+ switch (action) {
58
+ case "goToDefinition": {
59
+ const result = await client.request("textDocument/definition", {
60
+ textDocument: { uri },
61
+ position,
62
+ });
63
+ return formatLocationResult(result, "Definition");
64
+ }
65
+ case "findReferences": {
66
+ const result = await client.request("textDocument/references", {
67
+ textDocument: { uri },
68
+ position,
69
+ context: { includeDeclaration: true },
70
+ });
71
+ return formatLocationResult(result, "References");
72
+ }
73
+ case "hover": {
74
+ const result = await client.request("textDocument/hover", {
75
+ textDocument: { uri },
76
+ position,
77
+ });
78
+ if (!result)
79
+ return "No hover information available.";
80
+ const content = typeof result.contents === "string"
81
+ ? result.contents
82
+ : result.contents?.value ?? JSON.stringify(result.contents);
83
+ return `Hover:\n${content}`;
84
+ }
85
+ case "getDiagnostics": {
86
+ // Open the document to trigger diagnostics
87
+ const { readFileSync } = await import("node:fs");
88
+ const text = readFileSync(filePath, "utf-8");
89
+ await client.notify("textDocument/didOpen", {
90
+ textDocument: { uri, languageId: serverConfig.language, version: 1, text },
91
+ });
92
+ // Wait briefly for diagnostics
93
+ await new Promise((r) => setTimeout(r, 2000));
94
+ return "Diagnostics requested. Check LSP notifications for results.";
95
+ }
96
+ case "getSymbols": {
97
+ const result = await client.request("textDocument/documentSymbol", {
98
+ textDocument: { uri },
99
+ });
100
+ if (!result?.length)
101
+ return "No symbols found.";
102
+ const lines = result.map((s) => {
103
+ const kind = SYMBOL_KINDS[s.kind] ?? `kind:${s.kind}`;
104
+ const range = s.range ?? s.location?.range;
105
+ const loc = range ? `:${range.start.line + 1}` : "";
106
+ return ` ${kind} ${s.name}${loc}`;
107
+ });
108
+ return `Symbols in ${filePath}:\n${lines.join("\n")}`;
109
+ }
110
+ default:
111
+ return `Unknown action: ${action}`;
112
+ }
113
+ }
114
+ catch (err) {
115
+ return `LSP error: ${err.message}`;
116
+ }
117
+ }
118
+ function formatLocationResult(result, label) {
119
+ if (!result)
120
+ return `No ${label.toLowerCase()} found.`;
121
+ const locations = Array.isArray(result) ? result : [result];
122
+ if (locations.length === 0)
123
+ return `No ${label.toLowerCase()} found.`;
124
+ const lines = locations.map((loc) => {
125
+ const uri = loc.uri ?? loc.targetUri ?? "";
126
+ const range = loc.range ?? loc.targetRange ?? {};
127
+ const path = uri.replace("file://", "");
128
+ const line = (range.start?.line ?? 0) + 1;
129
+ return ` ${path}:${line}`;
130
+ });
131
+ return `${label} (${locations.length}):\n${lines.join("\n")}`;
132
+ }
133
+ const SYMBOL_KINDS = {
134
+ 1: "File", 2: "Module", 3: "Namespace", 4: "Package",
135
+ 5: "Class", 6: "Method", 7: "Property", 8: "Field",
136
+ 9: "Constructor", 10: "Enum", 11: "Interface", 12: "Function",
137
+ 13: "Variable", 14: "Constant", 15: "String", 16: "Number",
138
+ 17: "Boolean", 18: "Array", 19: "Object", 20: "Key",
139
+ 21: "Null", 22: "EnumMember", 23: "Struct", 24: "Event",
140
+ 25: "Operator", 26: "TypeParameter",
141
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * MCP (Model Context Protocol) tools — list, read, and auth for MCP resources.
3
+ */
4
+ import type { ToolDefinition } from "../../types.js";
5
+ export declare const mcpToolDef: ToolDefinition;
6
+ export declare function mcpToolExecute(args: Record<string, unknown>): Promise<string>;
7
+ export declare const listMcpResourcesToolDef: ToolDefinition;
8
+ export declare function listMcpResourcesTool(args: Record<string, unknown>): Promise<string>;
9
+ export declare const readMcpResourceToolDef: ToolDefinition;
10
+ export declare function readMcpResourceTool(args: Record<string, unknown>): Promise<string>;
@@ -0,0 +1,102 @@
1
+ /**
2
+ * MCP (Model Context Protocol) tools — list, read, and auth for MCP resources.
3
+ */
4
+ // ─── MCPTool — invoke an MCP tool on a connected server ─────────
5
+ export const mcpToolDef = {
6
+ name: "MCPTool",
7
+ description: "Call a tool provided by a connected MCP server. The tool name should include the server prefix.",
8
+ inputSchema: {
9
+ type: "object",
10
+ properties: {
11
+ server: {
12
+ type: "string",
13
+ description: "The MCP server name to call the tool on",
14
+ },
15
+ tool: {
16
+ type: "string",
17
+ description: "The tool name to invoke",
18
+ },
19
+ arguments: {
20
+ type: "object",
21
+ description: "Arguments to pass to the tool",
22
+ },
23
+ },
24
+ required: ["server", "tool"],
25
+ },
26
+ };
27
+ export async function mcpToolExecute(args) {
28
+ const server = args.server;
29
+ const tool = args.tool;
30
+ const toolArgs = args.arguments ?? {};
31
+ try {
32
+ const { MCPManager } = await import("../mcp-manager.js");
33
+ const manager = MCPManager.getInstance();
34
+ const result = await manager.callTool(server, tool, toolArgs);
35
+ return typeof result === "string" ? result : JSON.stringify(result, null, 2);
36
+ }
37
+ catch (err) {
38
+ return `MCP tool error: ${err.message}`;
39
+ }
40
+ }
41
+ // ─── ListMcpResources — list available MCP resources ────────────
42
+ export const listMcpResourcesToolDef = {
43
+ name: "ListMcpResources",
44
+ description: "List available resources from connected MCP servers.",
45
+ inputSchema: {
46
+ type: "object",
47
+ properties: {
48
+ server: {
49
+ type: "string",
50
+ description: "Optional: filter by MCP server name. If omitted, lists all.",
51
+ },
52
+ },
53
+ },
54
+ };
55
+ export async function listMcpResourcesTool(args) {
56
+ const server = args.server ?? "";
57
+ try {
58
+ const { MCPManager } = await import("../mcp-manager.js");
59
+ const manager = MCPManager.getInstance();
60
+ const resources = await manager.listResources(server || undefined);
61
+ if (!resources || resources.length === 0) {
62
+ return "No MCP resources available.";
63
+ }
64
+ const lines = resources.map((r) => ` ${r.uri ?? r.name} — ${r.description ?? ""}`);
65
+ return `MCP Resources (${resources.length}):\n${lines.join("\n")}`;
66
+ }
67
+ catch (err) {
68
+ return `Error listing MCP resources: ${err.message}`;
69
+ }
70
+ }
71
+ // ─── ReadMcpResource — read a specific MCP resource ─────────────
72
+ export const readMcpResourceToolDef = {
73
+ name: "ReadMcpResource",
74
+ description: "Read the content of an MCP resource by its URI.",
75
+ inputSchema: {
76
+ type: "object",
77
+ properties: {
78
+ server: {
79
+ type: "string",
80
+ description: "The MCP server name providing the resource",
81
+ },
82
+ uri: {
83
+ type: "string",
84
+ description: "The URI of the resource to read",
85
+ },
86
+ },
87
+ required: ["server", "uri"],
88
+ },
89
+ };
90
+ export async function readMcpResourceTool(args) {
91
+ const server = args.server;
92
+ const uri = args.uri;
93
+ try {
94
+ const { MCPManager } = await import("../mcp-manager.js");
95
+ const manager = MCPManager.getInstance();
96
+ const content = await manager.readResource(server, uri);
97
+ return typeof content === "string" ? content : JSON.stringify(content, null, 2);
98
+ }
99
+ catch (err) {
100
+ return `Error reading MCP resource: ${err.message}`;
101
+ }
102
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Built-in memory tools — let the LLM list / read / save / delete persistent
3
+ * memory entries via schema-validated tool calls (no JSON-in-text parsing).
4
+ *
5
+ * Two scopes are exposed:
6
+ * - "user" Entries the user owns. Save / Delete here is permission-gated
7
+ * (permissionDefault: "ask" set in the registry) so the user
8
+ * confirms each modification. Reading is always free.
9
+ * - "dream" The auto-consolidation workspace. Save / Delete go through
10
+ * with no prompt — this is the LLM's scratch area for the
11
+ * auto-dream pipeline (and also reachable in normal sessions
12
+ * when the user asks to clean it up).
13
+ *
14
+ * Delete is SOFT — files are moved to <baseDir>/memory-trash/<ISO>/<scope>/
15
+ * by MemoryManager, so accidental deletions are recoverable by hand.
16
+ */
17
+ import type { ToolDefinition } from "../../types.js";
18
+ import type { ToolContext } from "../context.js";
19
+ export declare const memoryListToolDef: ToolDefinition;
20
+ export declare function memoryListTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
21
+ export declare const memoryReadToolDef: ToolDefinition;
22
+ export declare function memoryReadTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
23
+ export declare const memorySaveToolDef: ToolDefinition;
24
+ export declare function memorySaveTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
25
+ export declare const memoryDeleteToolDef: ToolDefinition;
26
+ export declare function memoryDeleteTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Built-in memory tools — let the LLM list / read / save / delete persistent
3
+ * memory entries via schema-validated tool calls (no JSON-in-text parsing).
4
+ *
5
+ * Two scopes are exposed:
6
+ * - "user" Entries the user owns. Save / Delete here is permission-gated
7
+ * (permissionDefault: "ask" set in the registry) so the user
8
+ * confirms each modification. Reading is always free.
9
+ * - "dream" The auto-consolidation workspace. Save / Delete go through
10
+ * with no prompt — this is the LLM's scratch area for the
11
+ * auto-dream pipeline (and also reachable in normal sessions
12
+ * when the user asks to clean it up).
13
+ *
14
+ * Delete is SOFT — files are moved to <baseDir>/memory-trash/<ISO>/<scope>/
15
+ * by MemoryManager, so accidental deletions are recoverable by hand.
16
+ */
17
+ import { MemoryManager } from "../../session/memory.js";
18
+ const VALID_SCOPES = ["user", "dream"];
19
+ const VALID_TYPES = ["user", "feedback", "project", "reference"];
20
+ function parseScope(raw) {
21
+ if (typeof raw !== "string")
22
+ return "Error: scope is required (\"user\" or \"dream\")";
23
+ if (!VALID_SCOPES.includes(raw)) {
24
+ return `Error: scope must be "user" or "dream", got "${raw}"`;
25
+ }
26
+ return raw;
27
+ }
28
+ function mmFor(ctx, scope) {
29
+ return new MemoryManager({ projectDir: ctx?.cwd, scope });
30
+ }
31
+ // ─── MemoryList ────────────────────────────────────────────────────────────
32
+ export const memoryListToolDef = {
33
+ name: "MemoryList",
34
+ description: "List persistent memory entries from one scope. " +
35
+ "Returns each entry's name, type, and short description (not the full content — use MemoryRead for that). " +
36
+ "Use this before MemorySave/MemoryDelete to find the exact name to target. " +
37
+ 'Scopes: "user" (entries the user owns; you need permission to modify) or "dream" (auto-consolidation workspace; you may freely modify).',
38
+ inputSchema: {
39
+ type: "object",
40
+ properties: {
41
+ scope: {
42
+ type: "string",
43
+ enum: ["user", "dream"],
44
+ description: "Which scope to list",
45
+ },
46
+ },
47
+ required: ["scope"],
48
+ },
49
+ };
50
+ export async function memoryListTool(args, ctx) {
51
+ const scope = parseScope(args.scope);
52
+ if (typeof scope !== "string" || !VALID_SCOPES.includes(scope)) {
53
+ return scope;
54
+ }
55
+ try {
56
+ const mm = mmFor(ctx, scope);
57
+ const entries = mm.loadAll();
58
+ if (entries.length === 0)
59
+ return `(no memories in scope "${scope}")`;
60
+ return entries
61
+ .map((e) => `- [${e.type}] ${e.name} — ${e.description}`)
62
+ .join("\n");
63
+ }
64
+ catch (err) {
65
+ return `Error listing memories: ${err.message}`;
66
+ }
67
+ }
68
+ // ─── MemoryRead ────────────────────────────────────────────────────────────
69
+ export const memoryReadToolDef = {
70
+ name: "MemoryRead",
71
+ description: "Read the full content of a single memory entry by name. " +
72
+ "Use MemoryList first to find the exact name.",
73
+ inputSchema: {
74
+ type: "object",
75
+ properties: {
76
+ scope: {
77
+ type: "string",
78
+ enum: ["user", "dream"],
79
+ description: "Which scope to read from",
80
+ },
81
+ name: {
82
+ type: "string",
83
+ description: "The memory entry's name (from MemoryList output)",
84
+ },
85
+ },
86
+ required: ["scope", "name"],
87
+ },
88
+ };
89
+ export async function memoryReadTool(args, ctx) {
90
+ const scope = parseScope(args.scope);
91
+ if (typeof scope !== "string" || !VALID_SCOPES.includes(scope)) {
92
+ return scope;
93
+ }
94
+ const name = args.name;
95
+ if (typeof name !== "string" || !name)
96
+ return "Error: name is required";
97
+ try {
98
+ const mm = mmFor(ctx, scope);
99
+ const entries = mm.loadAll();
100
+ const entry = entries.find((e) => e.name === name || e.fileName === name);
101
+ if (!entry)
102
+ return `Error: no memory named "${name}" in scope "${scope}"`;
103
+ return (`name: ${entry.name}\n` +
104
+ `description: ${entry.description}\n` +
105
+ `type: ${entry.type}\n` +
106
+ `\n${entry.content}`);
107
+ }
108
+ catch (err) {
109
+ return `Error reading memory: ${err.message}`;
110
+ }
111
+ }
112
+ // ─── MemorySave ────────────────────────────────────────────────────────────
113
+ export const memorySaveToolDef = {
114
+ name: "MemorySave",
115
+ description: "Create or overwrite a memory entry. Same name → overwrite. " +
116
+ 'Saving to scope "user" requires user permission (you will see a confirmation prompt). ' +
117
+ 'Saving to scope "dream" is automatic — it is your auto-consolidation workspace. ' +
118
+ "Pick `type` carefully: " +
119
+ "user (info about the user), " +
120
+ "feedback (how to approach work), " +
121
+ "project (non-obvious facts about ongoing work), " +
122
+ "reference (pointers to external resources). " +
123
+ "The `description` is a one-line summary shown in the index; the `content` is the full body.",
124
+ inputSchema: {
125
+ type: "object",
126
+ properties: {
127
+ scope: {
128
+ type: "string",
129
+ enum: ["user", "dream"],
130
+ description: "Which scope to save to",
131
+ },
132
+ name: {
133
+ type: "string",
134
+ description: "Short kebab-case identifier (also becomes the filename slug)",
135
+ },
136
+ description: {
137
+ type: "string",
138
+ description: "One-line summary (used in the memory index)",
139
+ },
140
+ type: {
141
+ type: "string",
142
+ enum: ["user", "feedback", "project", "reference"],
143
+ description: "Memory category",
144
+ },
145
+ content: {
146
+ type: "string",
147
+ description: "Full memory body in markdown",
148
+ },
149
+ },
150
+ required: ["scope", "name", "description", "type", "content"],
151
+ },
152
+ };
153
+ export async function memorySaveTool(args, ctx) {
154
+ const scope = parseScope(args.scope);
155
+ if (typeof scope !== "string" || !VALID_SCOPES.includes(scope)) {
156
+ return scope;
157
+ }
158
+ const name = args.name;
159
+ const description = args.description;
160
+ const type = args.type;
161
+ const content = args.content;
162
+ if (typeof name !== "string" || !name)
163
+ return "Error: name is required";
164
+ if (typeof description !== "string")
165
+ return "Error: description is required";
166
+ if (typeof content !== "string")
167
+ return "Error: content is required";
168
+ if (typeof type !== "string" || !VALID_TYPES.includes(type)) {
169
+ return `Error: type must be one of ${VALID_TYPES.join(", ")}`;
170
+ }
171
+ try {
172
+ const mm = mmFor(ctx, scope);
173
+ const fileName = mm.save({
174
+ name,
175
+ description,
176
+ type: type,
177
+ content,
178
+ });
179
+ return `Saved memory "${name}" → ${scope}/${fileName}`;
180
+ }
181
+ catch (err) {
182
+ return `Error saving memory: ${err.message}`;
183
+ }
184
+ }
185
+ // ─── MemoryDelete ──────────────────────────────────────────────────────────
186
+ export const memoryDeleteToolDef = {
187
+ name: "MemoryDelete",
188
+ description: "Soft-delete a memory entry by name (moves it to a trash directory; recoverable). " +
189
+ 'Deleting from scope "user" requires user permission. ' +
190
+ 'Deleting from scope "dream" is automatic. ' +
191
+ "Use MemoryList to find the exact name first.",
192
+ inputSchema: {
193
+ type: "object",
194
+ properties: {
195
+ scope: {
196
+ type: "string",
197
+ enum: ["user", "dream"],
198
+ description: "Which scope to delete from",
199
+ },
200
+ name: {
201
+ type: "string",
202
+ description: "The memory entry's name (from MemoryList output)",
203
+ },
204
+ },
205
+ required: ["scope", "name"],
206
+ },
207
+ };
208
+ export async function memoryDeleteTool(args, ctx) {
209
+ const scope = parseScope(args.scope);
210
+ if (typeof scope !== "string" || !VALID_SCOPES.includes(scope)) {
211
+ return scope;
212
+ }
213
+ const name = args.name;
214
+ if (typeof name !== "string" || !name)
215
+ return "Error: name is required";
216
+ try {
217
+ const mm = mmFor(ctx, scope);
218
+ const ok = mm.delete(name);
219
+ return ok
220
+ ? `Deleted memory "${name}" from scope "${scope}" (moved to memory-trash/)`
221
+ : `Error: no memory named "${name}" in scope "${scope}"`;
222
+ }
223
+ catch (err) {
224
+ return `Error deleting memory: ${err.message}`;
225
+ }
226
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * NotebookEditTool — read and edit Jupyter notebook (.ipynb) cells.
3
+ */
4
+ import type { ToolDefinition } from "../../types.js";
5
+ export declare const notebookEditToolDef: ToolDefinition;
6
+ export declare function notebookEditTool(args: Record<string, unknown>): Promise<string>;
@@ -0,0 +1,124 @@
1
+ /**
2
+ * NotebookEditTool — read and edit Jupyter notebook (.ipynb) cells.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync } from "node:fs";
5
+ export const notebookEditToolDef = {
6
+ name: "NotebookEdit",
7
+ description: "Edit a Jupyter notebook (.ipynb) file. Supports actions: " +
8
+ "'read' to view cells, 'insert' to add a cell, 'replace' to update a cell, " +
9
+ "'delete' to remove a cell.",
10
+ inputSchema: {
11
+ type: "object",
12
+ properties: {
13
+ file_path: {
14
+ type: "string",
15
+ description: "Path to the .ipynb file",
16
+ },
17
+ action: {
18
+ type: "string",
19
+ enum: ["read", "insert", "replace", "delete"],
20
+ description: "Operation to perform",
21
+ },
22
+ cell_index: {
23
+ type: "number",
24
+ description: "Cell index (0-based). Required for replace and delete.",
25
+ },
26
+ cell_type: {
27
+ type: "string",
28
+ enum: ["code", "markdown", "raw"],
29
+ description: "Cell type for insert/replace (default: 'code')",
30
+ },
31
+ source: {
32
+ type: "string",
33
+ description: "Cell content for insert/replace",
34
+ },
35
+ },
36
+ required: ["file_path", "action"],
37
+ },
38
+ };
39
+ export async function notebookEditTool(args) {
40
+ const filePath = args.file_path;
41
+ const action = args.action;
42
+ if (!filePath)
43
+ return "Error: file_path is required";
44
+ if (!filePath.endsWith(".ipynb"))
45
+ return "Error: file must be a .ipynb file";
46
+ if (action === "read") {
47
+ if (!existsSync(filePath))
48
+ return `Error: File not found: ${filePath}`;
49
+ const nb = readNotebook(filePath);
50
+ const lines = [`Notebook: ${filePath} (${nb.cells.length} cells)\n`];
51
+ nb.cells.forEach((cell, i) => {
52
+ const source = cell.source.join("");
53
+ const preview = source.slice(0, 200);
54
+ lines.push(`[${i}] ${cell.cell_type}: ${preview}${source.length > 200 ? "..." : ""}`);
55
+ });
56
+ return lines.join("\n");
57
+ }
58
+ if (action === "insert") {
59
+ const nb = existsSync(filePath) ? readNotebook(filePath) : createEmptyNotebook();
60
+ const cellType = args.cell_type ?? "code";
61
+ const source = args.source ?? "";
62
+ const index = args.cell_index ?? nb.cells.length;
63
+ const newCell = createCell(cellType, source);
64
+ nb.cells.splice(index, 0, newCell);
65
+ writeNotebook(filePath, nb);
66
+ return `Inserted ${cellType} cell at index ${index}.`;
67
+ }
68
+ if (action === "replace") {
69
+ if (!existsSync(filePath))
70
+ return `Error: File not found: ${filePath}`;
71
+ const nb = readNotebook(filePath);
72
+ const index = args.cell_index;
73
+ if (index === undefined || index < 0 || index >= nb.cells.length) {
74
+ return `Error: Invalid cell_index ${index}. Notebook has ${nb.cells.length} cells.`;
75
+ }
76
+ const cellType = args.cell_type ?? nb.cells[index].cell_type;
77
+ const source = args.source ?? "";
78
+ nb.cells[index] = createCell(cellType, source);
79
+ writeNotebook(filePath, nb);
80
+ return `Replaced cell ${index} with ${cellType} cell.`;
81
+ }
82
+ if (action === "delete") {
83
+ if (!existsSync(filePath))
84
+ return `Error: File not found: ${filePath}`;
85
+ const nb = readNotebook(filePath);
86
+ const index = args.cell_index;
87
+ if (index === undefined || index < 0 || index >= nb.cells.length) {
88
+ return `Error: Invalid cell_index ${index}. Notebook has ${nb.cells.length} cells.`;
89
+ }
90
+ nb.cells.splice(index, 1);
91
+ writeNotebook(filePath, nb);
92
+ return `Deleted cell ${index}. Notebook now has ${nb.cells.length} cells.`;
93
+ }
94
+ return `Unknown action: ${action}`;
95
+ }
96
+ function readNotebook(filePath) {
97
+ return JSON.parse(readFileSync(filePath, "utf-8"));
98
+ }
99
+ function writeNotebook(filePath, nb) {
100
+ writeFileSync(filePath, JSON.stringify(nb, null, 1) + "\n", "utf-8");
101
+ }
102
+ function createEmptyNotebook() {
103
+ return {
104
+ cells: [],
105
+ metadata: {
106
+ kernelspec: { display_name: "Python 3", language: "python", name: "python3" },
107
+ language_info: { name: "python", version: "3.10.0" },
108
+ },
109
+ nbformat: 4,
110
+ nbformat_minor: 5,
111
+ };
112
+ }
113
+ function createCell(type, source) {
114
+ const cell = {
115
+ cell_type: type,
116
+ source: source.split("\n").map((line, i, arr) => (i < arr.length - 1 ? line + "\n" : line)),
117
+ metadata: {},
118
+ };
119
+ if (type === "code") {
120
+ cell.outputs = [];
121
+ cell.execution_count = null;
122
+ }
123
+ return cell;
124
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Plan mode — restricts the agent to read-only exploration and text output.
3
+ *
4
+ * In plan mode the agent:
5
+ * - Can only use read-only tools (Read, Glob, Grep, Bash read-only, WebSearch, etc.)
6
+ * - CANNOT write, edit, or create files
7
+ * - Outputs its plan as text directly in the conversation
8
+ * - Exits plan mode when the user approves or via ExitPlanMode tool
9
+ */
10
+ import type { ToolDefinition } from "../../types.js";
11
+ import type { ToolContext } from "../context.js";
12
+ export declare const enterPlanModeToolDef: ToolDefinition;
13
+ export declare const exitPlanModeToolDef: ToolDefinition;
14
+ export declare function enterPlanModeTool(_args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
15
+ export declare function exitPlanModeTool(_args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;