@xopcai/xopc 0.0.122 → 0.0.124

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 (273) hide show
  1. package/README.md +28 -11
  2. package/README.zh-CN.md +28 -11
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CK3s5cJo.js → agent-avatar-dicebear-B5uSVAyJ.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-BjIxt67Z.js +2 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-CWsNHtTs.js → app-management-settings-panel-CYCONLIL.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-C4b8y6iZ.js → appearance-settings-Clw3ryKg.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-QICTeGjX.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-DAtNW3Ia.js → archive-plugin-CXUGRp2i.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Dm-RY54y.js → attachment-load-Cmiub3Wg.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automation-suggestion-card-BKHewSVT.js → automation-suggestion-card-CU0-4nQ-.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-page-Car-jtiz.js +1 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-BG6Xnk71.js → binary-plugins-0Izz-N3p.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-DfndiO3h.js → block-editor-C1Kv0IkJ.js} +28 -28
  16. package/dist/gateway/static/root/assets/browser-settings-page-CMeBJzlS.js +8 -0
  17. package/dist/gateway/static/root/assets/{capability-presets-api-Cx93GLdw.js → capability-presets-api-BmQTM9Il.js} +1 -1
  18. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DZEJEoCF.js +1 -0
  19. package/dist/gateway/static/root/assets/{channel-recipient-api-DdPTtEs8.js → channel-recipient-api-BeA2aVor.js} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-kkW-xFau.js +1 -0
  21. package/dist/gateway/static/root/assets/connectors-page-BvaQvO5F.js +2 -0
  22. package/dist/gateway/static/root/assets/{directory-picker-path-field-D835EHJd.js → directory-picker-path-field-2rjzUu57.js} +1 -1
  23. package/dist/gateway/static/root/assets/{dreaming-settings-CCa1F7Fg.js → dreaming-settings-DnHO686d.js} +1 -1
  24. package/dist/gateway/static/root/assets/{extension-debug-page-W2ITCPSA.js → extension-debug-page-BGLRuWVN.js} +1 -1
  25. package/dist/gateway/static/root/assets/{extension-page-DrvUytvn.js → extension-page-D978ePp9.js} +1 -1
  26. package/dist/gateway/static/root/assets/{extension-settings-page-qM8aLT5u.js → extension-settings-page-B6Ih4Swx.js} +1 -1
  27. package/dist/gateway/static/root/assets/{fetch-ovkvM8KQ.js → fetch-BU5S0Sn7.js} +1 -1
  28. package/dist/gateway/static/root/assets/{gateway-config-api-BB3biuD0.js → gateway-config-api-BIPGwrl1.js} +1 -1
  29. package/dist/gateway/static/root/assets/gateway-settings-CMEA3r5u.js +1 -0
  30. package/dist/gateway/static/root/assets/{gateway-startup-retry-CanQ8UcR.js → gateway-startup-retry-Cd0Zz30N.js} +1 -1
  31. package/dist/gateway/static/root/assets/{goal-create-dialog-CNqNdEkQ.js → goal-create-dialog-B-KHKeXN.js} +1 -1
  32. package/dist/gateway/static/root/assets/goal-detail-page-BxrSoWdj.js +1 -0
  33. package/dist/gateway/static/root/assets/{goals-config-api-BBOX6mUl.js → goals-config-api-B95KdGMj.js} +1 -1
  34. package/dist/gateway/static/root/assets/{goals-page-BP1kfvWv.js → goals-page-BTJzIl28.js} +2 -2
  35. package/dist/gateway/static/root/assets/{goals-settings-Bh3A7OZV.js → goals-settings-BJyEuLLm.js} +1 -1
  36. package/dist/gateway/static/root/assets/heartbeat-settings-wkOjYNQT.js +1 -0
  37. package/dist/gateway/static/root/assets/index-BLaXr6Ev.css +1 -0
  38. package/dist/gateway/static/root/assets/index-c_9TVr_C.js +191 -0
  39. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B4TKJHla.js → keyboard-shortcuts-settings-BT8T4DyC.js} +1 -1
  40. package/dist/gateway/static/root/assets/logs-page-CrxBJUgI.js +2 -0
  41. package/dist/gateway/static/root/assets/{markdown-split-DcFtdLci.js → markdown-split-Dv66bO2b.js} +1 -1
  42. package/dist/gateway/static/root/assets/{media-plugins-B6SmeLVB.js → media-plugins-BhIQU5yS.js} +1 -1
  43. package/dist/gateway/static/root/assets/messages-O6TAtdFC.js +3 -0
  44. package/dist/gateway/static/root/assets/models-hub-panel-DOOpz6y1.js +2 -0
  45. package/dist/gateway/static/root/assets/notes-page-Br16pK9v.js +1 -0
  46. package/dist/gateway/static/root/assets/notes-workbench-PSJAi0ZC.js +2 -0
  47. package/dist/gateway/static/root/assets/{preview-open-alternatives-C29O19s7.js → preview-open-alternatives-DGzet1d7.js} +1 -1
  48. package/dist/gateway/static/root/assets/project-detail-page-CIGGgKuw.js +1 -0
  49. package/dist/gateway/static/root/assets/projects-page-B2grhsBt.js +1 -0
  50. package/dist/gateway/static/root/assets/remote-access-hub-CXMORxBD.js +1 -0
  51. package/dist/gateway/static/root/assets/{save-bar-controls-B4ad9GfB.js → save-bar-controls-Cqgb-jqa.js} +1 -1
  52. package/dist/gateway/static/root/assets/{schedule-field-DdYncfLR.js → schedule-field-DVZcI8Yt.js} +1 -1
  53. package/dist/gateway/static/root/assets/{schema-form-BMTrDE-7.js → schema-form-Bj7sOxC8.js} +1 -1
  54. package/dist/gateway/static/root/assets/sessions-page-Bi2wkBzU.js +1 -0
  55. package/dist/gateway/static/root/assets/settings-advanced-gate-B1L3G4IA.js +1 -0
  56. package/dist/gateway/static/root/assets/{settings-collapsible-section-MwTW2eK4.js → settings-collapsible-section-BmXn-8N6.js} +1 -1
  57. package/dist/gateway/static/root/assets/{settings-form-section-Dg6LBbcr.js → settings-form-section-BnqYMWHR.js} +1 -1
  58. package/dist/gateway/static/root/assets/settings-page-BfRSHJmO.js +1 -0
  59. package/dist/gateway/static/root/assets/{settings-page-layout-BX4T-OLF.js → settings-page-layout-CdWZU1hd.js} +1 -1
  60. package/dist/gateway/static/root/assets/{setup-status-panel-Ce1pcFtR.js → setup-status-panel-CWtPM7RK.js} +1 -1
  61. package/dist/gateway/static/root/assets/{share-preview-page-DWE-dUFh.js → share-preview-page-IB1v8i86.js} +1 -1
  62. package/dist/gateway/static/root/assets/shares-settings-ngbsBgij.js +1 -0
  63. package/dist/gateway/static/root/assets/skill-reload-api-BIe442Gv.js +1 -0
  64. package/dist/gateway/static/root/assets/skills-page-BfchZRVa.js +2 -0
  65. package/dist/gateway/static/root/assets/{system-settings-panel-Dd6Y35Cm.js → system-settings-panel-BxQ384RC.js} +1 -1
  66. package/dist/gateway/static/root/assets/{typed-models-lib-Cx6XV5A2.js → typed-models-lib-BkcpvFYO.js} +1 -1
  67. package/dist/gateway/static/root/assets/{use-channel-catalog-D4sMbmy7.js → use-channel-catalog-Cd0FaEQ4.js} +1 -1
  68. package/dist/gateway/static/root/assets/{user-profile-settings-panel-Bx-hjMQc.js → user-profile-settings-panel-DQ7NnRSY.js} +1 -1
  69. package/dist/gateway/static/root/assets/{utils-D7b_vZnv.js → utils-YKhVf7Ka.js} +1 -1
  70. package/dist/gateway/static/root/assets/voice-api-key-field-C5Ov8Uk_.js +1 -0
  71. package/dist/gateway/static/root/assets/{workflow-run-setup-panel--TdohF5N.js → workflow-run-setup-panel-BYD9BtOq.js} +2 -2
  72. package/dist/gateway/static/root/assets/{workflow-start-dialog-B0lavx_o.js → workflow-start-dialog-BNJVCWoS.js} +1 -1
  73. package/dist/gateway/static/root/assets/workflows-page-BYF29ANm.js +18 -0
  74. package/dist/gateway/static/root/index.html +5 -5
  75. package/dist/package.js +1 -1
  76. package/dist/src/agent/agent-manager.d.ts +6 -1
  77. package/dist/src/agent/agent-manager.js +28 -12
  78. package/dist/src/agent/agent-manager.js.map +1 -1
  79. package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
  80. package/dist/src/agent/embedded/xopc-tools-bridge.js +11 -7
  81. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
  82. package/dist/src/agent/lifecycle/progress.js +3 -1
  83. package/dist/src/agent/lifecycle/progress.js.map +1 -1
  84. package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +2 -2
  85. package/dist/src/agent/lifecycle/timeout-wrapper.js +4 -4
  86. package/dist/src/agent/lifecycle/timeout-wrapper.js.map +1 -1
  87. package/dist/src/agent/memory/summary-generator.d.ts +1 -1
  88. package/dist/src/agent/memory/summary-generator.js +1 -2
  89. package/dist/src/agent/memory/summary-generator.js.map +1 -1
  90. package/dist/src/agent/middleware/index.d.ts +1 -1
  91. package/dist/src/agent/middleware/self-verify.d.ts +44 -14
  92. package/dist/src/agent/middleware/self-verify.js +214 -44
  93. package/dist/src/agent/middleware/self-verify.js.map +1 -1
  94. package/dist/src/agent/orchestration/agent-event-handler.js +57 -15
  95. package/dist/src/agent/orchestration/agent-event-handler.js.map +1 -1
  96. package/dist/src/agent/prompt/sections/tooling.js +18 -13
  97. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  98. package/dist/src/agent/prompt/system-reminder.js +2 -2
  99. package/dist/src/agent/prompt/system-reminder.js.map +1 -1
  100. package/dist/src/agent/sandbox/sanitize-env-vars.d.ts +2 -2
  101. package/dist/src/agent/sandbox/sanitize-env-vars.js +2 -2
  102. package/dist/src/agent/sandbox/sanitize-env-vars.js.map +1 -1
  103. package/dist/src/agent/sandbox/types.d.ts +2 -2
  104. package/dist/src/agent/sandbox/types.js.map +1 -1
  105. package/dist/src/agent/service/btw-query.js +1 -1
  106. package/dist/src/agent/service/btw-query.js.map +1 -1
  107. package/dist/src/agent/service/process-direct-one-shot.js +6 -2
  108. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  109. package/dist/src/agent/service/process-direct-streaming.js +12 -7
  110. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  111. package/dist/src/agent/service.js +2 -1
  112. package/dist/src/agent/service.js.map +1 -1
  113. package/dist/src/agent/skills/skill-tool-gating.js +1 -1
  114. package/dist/src/agent/skills/skill-tool-gating.js.map +1 -1
  115. package/dist/src/agent/starter-agents.js +9 -9
  116. package/dist/src/agent/starter-agents.js.map +1 -1
  117. package/dist/src/agent/tools/apply-patch.d.ts +25 -0
  118. package/dist/src/agent/tools/apply-patch.js +256 -0
  119. package/dist/src/agent/tools/apply-patch.js.map +1 -0
  120. package/dist/src/agent/tools/delegate-tool.d.ts +1 -1
  121. package/dist/src/agent/tools/delegate-tool.js +3 -3
  122. package/dist/src/agent/tools/delegate-tool.js.map +1 -1
  123. package/dist/src/agent/tools/exec-command.d.ts +30 -0
  124. package/dist/src/agent/tools/exec-command.js +224 -0
  125. package/dist/src/agent/tools/exec-command.js.map +1 -0
  126. package/dist/src/agent/tools/execute-code-tool.js +7 -4
  127. package/dist/src/agent/tools/execute-code-tool.js.map +1 -1
  128. package/dist/src/agent/tools/factory.d.ts +3 -3
  129. package/dist/src/agent/tools/factory.js +8 -9
  130. package/dist/src/agent/tools/factory.js.map +1 -1
  131. package/dist/src/agent/tools/goal-tool.d.ts +5 -1
  132. package/dist/src/agent/tools/goal-tool.js +8 -2
  133. package/dist/src/agent/tools/goal-tool.js.map +1 -1
  134. package/dist/src/agent/tools/index.d.ts +4 -3
  135. package/dist/src/agent/tools/index.js +5 -4
  136. package/dist/src/agent/tools/skills-tools.d.ts +1 -1
  137. package/dist/src/agent/tools/skills-tools.js.map +1 -1
  138. package/dist/src/agent/tools/update-plan-tool.d.ts +11 -0
  139. package/dist/src/agent/tools/update-plan-tool.js +72 -0
  140. package/dist/src/agent/tools/update-plan-tool.js.map +1 -0
  141. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
  142. package/dist/src/agent/workflow/builtins/debug-incident.js +1 -1
  143. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
  144. package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
  145. package/dist/src/agent/workflow/builtins/pr-review.js +1 -1
  146. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
  147. package/dist/src/agent/workflow/builtins/release-check.d.ts +1 -1
  148. package/dist/src/agent/workflow/builtins/release-check.js +1 -1
  149. package/dist/src/agent/workflow/builtins/release-check.js.map +1 -1
  150. package/dist/src/agent/workflow/step-labels.js +7 -3
  151. package/dist/src/agent/workflow/step-labels.js.map +1 -1
  152. package/dist/src/chat-commands/agent-edit.js +1 -1
  153. package/dist/src/chat-commands/agent-edit.js.map +1 -1
  154. package/dist/src/chat-commands/builtins/goal.js +4 -1
  155. package/dist/src/chat-commands/builtins/goal.js.map +1 -1
  156. package/dist/src/chat-commands/builtins/review.d.ts +1 -0
  157. package/dist/src/chat-commands/builtins/review.js +167 -0
  158. package/dist/src/chat-commands/builtins/review.js.map +1 -0
  159. package/dist/src/chat-commands/index.d.ts +1 -0
  160. package/dist/src/chat-commands/index.js +3 -1
  161. package/dist/src/chat-commands/index.js.map +1 -1
  162. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  163. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  164. package/dist/src/config/agent-profile.js +1 -1
  165. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  166. package/dist/src/gateway/agent-builtin-tools.js +3 -2
  167. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  168. package/dist/src/gateway/agents-admin.js +1 -1
  169. package/dist/src/gateway/chat-stream/mapper.d.ts +6 -0
  170. package/dist/src/gateway/chat-stream/mapper.js +149 -6
  171. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  172. package/dist/src/gateway/chat-stream/protocol.d.ts +51 -1
  173. package/dist/src/gateway/hono/routes/commands-skills.js +21 -0
  174. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  175. package/dist/src/gateway/hono/routes/index.js +2 -0
  176. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  177. package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -0
  178. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  179. package/dist/src/gateway/hono/routes/projects.js +136 -14
  180. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  181. package/dist/src/gateway/hono/routes/search.d.ts +3 -0
  182. package/dist/src/gateway/hono/routes/search.js +47 -0
  183. package/dist/src/gateway/hono/routes/search.js.map +1 -0
  184. package/dist/src/gateway/security/dangerous-tools.js +1 -1
  185. package/dist/src/gateway/security/dangerous-tools.js.map +1 -1
  186. package/dist/src/infra/update-restart.js +1 -1
  187. package/dist/src/projects/index.d.ts +3 -0
  188. package/dist/src/projects/index.js +4 -1
  189. package/dist/src/projects/project-agent-suggestion.d.ts +14 -0
  190. package/dist/src/projects/project-agent-suggestion.js +19 -0
  191. package/dist/src/projects/project-agent-suggestion.js.map +1 -0
  192. package/dist/src/projects/project-kind.d.ts +13 -0
  193. package/dist/src/projects/project-kind.js +147 -0
  194. package/dist/src/projects/project-kind.js.map +1 -0
  195. package/dist/src/projects/project-service.d.ts +15 -0
  196. package/dist/src/projects/project-service.js +96 -3
  197. package/dist/src/projects/project-service.js.map +1 -1
  198. package/dist/src/projects/project-store.js +32 -8
  199. package/dist/src/projects/project-store.js.map +1 -1
  200. package/dist/src/projects/types.d.ts +4 -1
  201. package/dist/src/projects/workspace-project.d.ts +22 -0
  202. package/dist/src/projects/workspace-project.js +143 -0
  203. package/dist/src/projects/workspace-project.js.map +1 -0
  204. package/dist/src/review/review-git.d.ts +48 -0
  205. package/dist/src/review/review-git.js +333 -0
  206. package/dist/src/review/review-git.js.map +1 -0
  207. package/dist/src/review/review-types.d.ts +22 -0
  208. package/dist/src/review/review-types.js +29 -0
  209. package/dist/src/review/review-types.js.map +1 -0
  210. package/dist/src/session/session-context-for-llm.js +151 -0
  211. package/dist/src/session/session-context-for-llm.js.map +1 -1
  212. package/dist/src/storage/sqlite/migrations/021_projects_fts.sql +21 -0
  213. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  214. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  215. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  216. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  217. package/dist/src/storage/sqlite/schema.js +1 -1
  218. package/dist/src/tui/backends/embedded-backend.d.ts +8 -1
  219. package/dist/src/tui/backends/embedded-backend.js +60 -1
  220. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  221. package/dist/src/tui/backends/gateway-sse-backend.d.ts +9 -1
  222. package/dist/src/tui/backends/gateway-sse-backend.js +29 -0
  223. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  224. package/dist/src/tui/components/assistant-message.js +35 -0
  225. package/dist/src/tui/components/assistant-message.js.map +1 -1
  226. package/dist/src/tui/tui-agent-events.js +25 -0
  227. package/dist/src/tui/tui-agent-events.js.map +1 -1
  228. package/dist/src/tui/tui-backend.d.ts +20 -0
  229. package/dist/src/tui/tui-commands.d.ts +1 -0
  230. package/dist/src/tui/tui-commands.js +110 -4
  231. package/dist/src/tui/tui-commands.js.map +1 -1
  232. package/dist/src/tui/tui-picker-overlay.d.ts +2 -0
  233. package/dist/src/tui/tui-picker-overlay.js +153 -1
  234. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  235. package/dist/src/tui/tui.js +36 -2
  236. package/dist/src/tui/tui.js.map +1 -1
  237. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  238. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  239. package/package.json +1 -1
  240. package/dist/gateway/static/root/assets/agents-SsQrj9B-.js +0 -2
  241. package/dist/gateway/static/root/assets/apps-page-CYb6fame.js +0 -1
  242. package/dist/gateway/static/root/assets/automations-page-DpOOq1nk.js +0 -1
  243. package/dist/gateway/static/root/assets/browser-settings-page-9nXxgh4u.js +0 -8
  244. package/dist/gateway/static/root/assets/capability-presets-settings-panel-D528_YFy.js +0 -1
  245. package/dist/gateway/static/root/assets/channels-settings-Ck-3h5lI.js +0 -1
  246. package/dist/gateway/static/root/assets/connectors-page-DL-fAqE_.js +0 -2
  247. package/dist/gateway/static/root/assets/gateway-settings-mmmnIH27.js +0 -1
  248. package/dist/gateway/static/root/assets/goal-detail-page-Ceu5zrN6.js +0 -1
  249. package/dist/gateway/static/root/assets/heartbeat-settings-YoYgKlfX.js +0 -1
  250. package/dist/gateway/static/root/assets/index-DdqSO9R2.js +0 -191
  251. package/dist/gateway/static/root/assets/index-jGB-2nI-.css +0 -1
  252. package/dist/gateway/static/root/assets/logs-page-BgVk5DvZ.js +0 -2
  253. package/dist/gateway/static/root/assets/messages-B5O4OIEo.js +0 -3
  254. package/dist/gateway/static/root/assets/models-hub-panel-BU0x8PGP.js +0 -2
  255. package/dist/gateway/static/root/assets/notes-page-D6JYVP4I.js +0 -1
  256. package/dist/gateway/static/root/assets/notes-workbench-mqRJYnJS.js +0 -2
  257. package/dist/gateway/static/root/assets/project-detail-page-DOTgzoeh.js +0 -1
  258. package/dist/gateway/static/root/assets/projects-page-DGUIb4y5.js +0 -1
  259. package/dist/gateway/static/root/assets/remote-access-hub-DVKKUj3u.js +0 -1
  260. package/dist/gateway/static/root/assets/sessions-page-BVbzUWxW.js +0 -1
  261. package/dist/gateway/static/root/assets/settings-advanced-gate-DrNNoSqE.js +0 -1
  262. package/dist/gateway/static/root/assets/settings-page-CMDqgeMR.js +0 -1
  263. package/dist/gateway/static/root/assets/shares-settings-aKSraR8l.js +0 -1
  264. package/dist/gateway/static/root/assets/skill-reload-api-CS-FU_B-.js +0 -1
  265. package/dist/gateway/static/root/assets/skills-page-BaF3u0LA.js +0 -2
  266. package/dist/gateway/static/root/assets/voice-api-key-field-CkhbRt1q.js +0 -1
  267. package/dist/gateway/static/root/assets/workflows-page-CZR05Bu_.js +0 -18
  268. package/dist/src/agent/tools/edit.d.ts +0 -14
  269. package/dist/src/agent/tools/edit.js +0 -132
  270. package/dist/src/agent/tools/edit.js.map +0 -1
  271. package/dist/src/agent/tools/shell.d.ts +0 -15
  272. package/dist/src/agent/tools/shell.js +0 -158
  273. package/dist/src/agent/tools/shell.js.map +0 -1
@@ -1,158 +0,0 @@
1
- import { evaluateExecPolicy } from "../sandbox/exec-policy.js";
2
- import { spawn } from "child_process";
3
- import { Type } from "@sinclair/typebox";
4
- //#region src/agent/tools/shell.ts
5
- const MAX_SHELL_TIMEOUT = 300;
6
- const DEFAULT_MAX_BYTES = 50 * 1024;
7
- const DEFAULT_MAX_LINES = 2e3;
8
- const ShellSchema = Type.Object({ command: Type.String({ description: "Shell command to execute" }) });
9
- function formatSize(bytes) {
10
- if (bytes < 1024) return `${bytes}B`;
11
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
12
- return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
13
- }
14
- function isLikelyTestCommand(command) {
15
- return /\b(test|vitest|jest|pytest|go test|cargo test|npm test|pnpm test|yarn test)\b/i.test(command);
16
- }
17
- function truncateTail(content, maxLines = DEFAULT_MAX_LINES, maxBytes = DEFAULT_MAX_BYTES) {
18
- const totalBytes = Buffer.byteLength(content, "utf-8");
19
- const lines = content.split("\n");
20
- const totalLines = lines.length;
21
- if (totalLines <= maxLines && totalBytes <= maxBytes) return {
22
- content,
23
- truncated: false,
24
- truncatedBy: null,
25
- totalLines,
26
- totalBytes,
27
- outputLines: totalLines,
28
- outputBytes: totalBytes
29
- };
30
- const outputLinesArr = [];
31
- let outputBytesCount = 0;
32
- let truncatedBy = "lines";
33
- for (let i = lines.length - 1; i >= 0 && outputLinesArr.length < maxLines; i--) {
34
- const line = lines[i];
35
- const lineBytes = Buffer.byteLength(line, "utf-8") + (outputLinesArr.length > 0 ? 1 : 0);
36
- if (outputBytesCount + lineBytes > maxBytes) {
37
- truncatedBy = "bytes";
38
- break;
39
- }
40
- outputLinesArr.unshift(line);
41
- outputBytesCount += lineBytes;
42
- }
43
- return {
44
- content: outputLinesArr.join("\n"),
45
- truncated: true,
46
- truncatedBy,
47
- totalLines,
48
- totalBytes,
49
- outputLines: outputLinesArr.length,
50
- outputBytes: outputBytesCount
51
- };
52
- }
53
- function createShellTool(cwd, options) {
54
- return {
55
- name: "shell",
56
- description: "Execute shell command.",
57
- parameters: ShellSchema,
58
- label: "💻 Shell",
59
- async execute(toolCallId, params, _signal) {
60
- const p = params;
61
- const passthroughNames = options?.getSkillPassthroughEnvVarNames?.() ?? [];
62
- const policy = evaluateExecPolicy({
63
- command: p.command,
64
- cwd,
65
- allowedEnvVars: passthroughNames
66
- });
67
- if (!policy.allowed) return {
68
- content: [{
69
- type: "text",
70
- text: `🚫 Sandbox: ${policy.reason}`
71
- }],
72
- details: {
73
- exitCode: null,
74
- timedOut: false,
75
- truncated: false
76
- }
77
- };
78
- return new Promise((resolve) => {
79
- let output = "";
80
- let errorOutput = "";
81
- let timedOut = false;
82
- let tempStream = null;
83
- const effectiveTimeoutSec = Math.min(MAX_SHELL_TIMEOUT, Math.ceil(policy.timeoutMs / 1e3));
84
- const timeout = setTimeout(() => {
85
- timedOut = true;
86
- proc.kill("SIGKILL");
87
- }, effectiveTimeoutSec * 1e3);
88
- const proc = spawn(p.command, [], {
89
- shell: true,
90
- cwd: policy.effectiveCwd,
91
- env: {
92
- ...policy.sanitizedEnv,
93
- COLUMNS: "200"
94
- }
95
- });
96
- proc.stdout?.on("data", (data) => {
97
- const text = data.toString();
98
- output += text;
99
- });
100
- proc.stderr?.on("data", (data) => {
101
- const text = data.toString();
102
- errorOutput += text;
103
- });
104
- proc.on("close", (code) => {
105
- clearTimeout(timeout);
106
- tempStream?.end();
107
- const truncation = truncateTail(errorOutput + output);
108
- let resultText = truncation.content;
109
- if (timedOut) resultText = `⏱️ Command timed out after ${MAX_SHELL_TIMEOUT}s\n` + resultText;
110
- if (truncation.truncated) resultText += `\n\n[Output truncated: ${formatSize(truncation.outputBytes)} of ${formatSize(truncation.totalBytes)}]`;
111
- const result = {
112
- content: [{
113
- type: "text",
114
- text: resultText
115
- }],
116
- details: {
117
- exitCode: code,
118
- timedOut,
119
- truncated: truncation.truncated,
120
- truncatedBy: truncation.truncatedBy,
121
- outputBytes: truncation.outputBytes
122
- }
123
- };
124
- Promise.resolve(options?.recordGoalEvidence?.({
125
- kind: timedOut || code !== 0 ? "command" : isLikelyTestCommand(p.command) ? "test" : "command",
126
- title: `Command: ${p.command.slice(0, 120)}`,
127
- summary: resultText.slice(0, 2e3),
128
- data: {
129
- command: p.command,
130
- exitCode: code,
131
- timedOut,
132
- truncated: truncation.truncated,
133
- outputBytes: truncation.outputBytes
134
- }
135
- })).finally(() => resolve(result));
136
- });
137
- proc.on("error", (err) => {
138
- clearTimeout(timeout);
139
- resolve({
140
- content: [{
141
- type: "text",
142
- text: `Error: ${err.message}`
143
- }],
144
- details: {
145
- exitCode: null,
146
- timedOut: false,
147
- truncated: false
148
- }
149
- });
150
- });
151
- });
152
- }
153
- };
154
- }
155
- //#endregion
156
- export { createShellTool };
157
-
158
- //# sourceMappingURL=shell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell.js","names":[],"sources":["../../../../src/agent/tools/shell.ts"],"sourcesContent":["// Shell tool - executes commands with output truncation\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { spawn } from 'child_process';\nimport { evaluateExecPolicy } from '../sandbox/exec-policy.js';\nimport { createWriteStream } from 'fs';\nimport type { GoalEvidenceRecordInput } from './goal-evidence-recorder.js';\n\nconst MAX_SHELL_TIMEOUT = 300;\nconst DEFAULT_MAX_BYTES = 50 * 1024;\nconst DEFAULT_MAX_LINES = 2000;\n\nconst ShellSchema = Type.Object({\n command: Type.String({ description: 'Shell command to execute' }),\n});\n\nexport interface ShellDetails {\n exitCode: number | null;\n timedOut: boolean;\n truncated: boolean;\n truncatedBy?: 'lines' | 'bytes';\n outputBytes?: number;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\nfunction isLikelyTestCommand(command: string): boolean {\n return /\\b(test|vitest|jest|pytest|go test|cargo test|npm test|pnpm test|yarn test)\\b/i.test(command);\n}\n\nfunction truncateTail(content: string, maxLines = DEFAULT_MAX_LINES, maxBytes = DEFAULT_MAX_BYTES) {\n const totalBytes = Buffer.byteLength(content, 'utf-8');\n const lines = content.split('\\n');\n const totalLines = lines.length;\n\n if (totalLines <= maxLines && totalBytes <= maxBytes) {\n return { content, truncated: false, truncatedBy: null, totalLines, totalBytes, outputLines: totalLines, outputBytes: totalBytes };\n }\n\n const outputLinesArr: string[] = [];\n let outputBytesCount = 0;\n let truncatedBy: 'lines' | 'bytes' = 'lines';\n\n for (let i = lines.length - 1; i >= 0 && outputLinesArr.length < maxLines; i--) {\n const line = lines[i];\n const lineBytes = Buffer.byteLength(line, 'utf-8') + (outputLinesArr.length > 0 ? 1 : 0);\n\n if (outputBytesCount + lineBytes > maxBytes) {\n truncatedBy = 'bytes';\n break;\n }\n\n outputLinesArr.unshift(line);\n outputBytesCount += lineBytes;\n }\n\n return { content: outputLinesArr.join('\\n'), truncated: true, truncatedBy, totalLines, totalBytes, outputLines: outputLinesArr.length, outputBytes: outputBytesCount };\n}\n\nexport interface CreateShellToolOptions {\n /** Env var names allowed through {@link prepareSafeToolEnv} even if they match secret heuristics (skill passthrough). */\n getSkillPassthroughEnvVarNames?: () => string[];\n recordGoalEvidence?: (input: GoalEvidenceRecordInput) => Promise<void> | void;\n}\n\nexport function createShellTool(\n cwd: string,\n options?: CreateShellToolOptions,\n): AgentTool {\n return {\n name: 'shell',\n description: 'Execute shell command.',\n parameters: ShellSchema,\n label: '💻 Shell',\n\n async execute(\n toolCallId: string,\n params: any,\n _signal?: AbortSignal,\n ): Promise<AgentToolResult<ShellDetails>> {\n const p = params as { command: string };\n\n // Sandbox exec-policy check (path + command injection + env sanitization)\n const passthroughNames = options?.getSkillPassthroughEnvVarNames?.() ?? [];\n const policy = evaluateExecPolicy({\n command: p.command,\n cwd,\n allowedEnvVars: passthroughNames,\n });\n if (!policy.allowed) {\n return {\n content: [{ type: 'text', text: `🚫 Sandbox: ${policy.reason}` }],\n details: { exitCode: null, timedOut: false, truncated: false },\n };\n }\n\n return new Promise((resolve) => {\n const _startTime = Date.now();\n let output = '';\n let errorOutput = '';\n let timedOut = false;\n let _tempFile: string | null = null;\n let tempStream: ReturnType<typeof createWriteStream> | null = null;\n const useTempFile = false; // Disabled - stream directly\n\n const effectiveTimeoutSec = Math.min(\n MAX_SHELL_TIMEOUT,\n Math.ceil(policy.timeoutMs / 1000),\n );\n const timeout = setTimeout(() => {\n timedOut = true;\n proc.kill('SIGKILL');\n }, effectiveTimeoutSec * 1000);\n\n const proc = spawn(p.command, [], {\n shell: true,\n cwd: policy.effectiveCwd,\n env: {\n ...policy.sanitizedEnv,\n COLUMNS: '200',\n },\n });\n\n proc.stdout?.on('data', (data) => {\n const text = data.toString();\n if (!useTempFile) output += text;\n });\n\n proc.stderr?.on('data', (data) => {\n const text = data.toString();\n errorOutput += text;\n });\n\n proc.on('close', (code) => {\n clearTimeout(timeout);\n tempStream?.end();\n\n const fullOutput = errorOutput + output;\n const truncation = truncateTail(fullOutput);\n\n let resultText = truncation.content;\n if (timedOut) {\n resultText = `⏱️ Command timed out after ${MAX_SHELL_TIMEOUT}s\\n` + resultText;\n }\n if (truncation.truncated) {\n resultText += `\\n\\n[Output truncated: ${formatSize(truncation.outputBytes)} of ${formatSize(truncation.totalBytes)}]`;\n }\n\n const result: AgentToolResult<ShellDetails> = {\n content: [{ type: 'text', text: resultText }],\n details: {\n exitCode: code,\n timedOut,\n truncated: truncation.truncated,\n truncatedBy: truncation.truncatedBy,\n outputBytes: truncation.outputBytes,\n },\n };\n void Promise.resolve(options?.recordGoalEvidence?.({\n kind: timedOut || code !== 0 ? 'command' : isLikelyTestCommand(p.command) ? 'test' : 'command',\n title: `Command: ${p.command.slice(0, 120)}`,\n summary: resultText.slice(0, 2000),\n data: {\n command: p.command,\n exitCode: code,\n timedOut,\n truncated: truncation.truncated,\n outputBytes: truncation.outputBytes,\n },\n })).finally(() => resolve(result));\n });\n\n proc.on('error', (err) => {\n clearTimeout(timeout);\n resolve({\n content: [{ type: 'text', text: `Error: ${err.message}` }],\n details: { exitCode: null, timedOut: false, truncated: false },\n });\n });\n });\n },\n } as any;\n}\n"],"mappings":";;;;AAQA,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB,KAAK;AAC/B,MAAM,oBAAoB;AAE1B,MAAM,cAAc,KAAK,OAAO,EAC9B,SAAS,KAAK,OAAO,EAAE,aAAa,4BAA4B,CAAC,EAClE,CAAC;AAUF,SAAS,WAAW,OAAuB;AACzC,KAAI,QAAQ,KAAM,QAAO,GAAG,MAAM;AAClC,KAAI,QAAQ,OAAO,KAAM,QAAO,IAAI,QAAQ,MAAM,QAAQ,EAAE,CAAC;AAC7D,QAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,EAAE,CAAC;;AAG/C,SAAS,oBAAoB,SAA0B;AACrD,QAAO,iFAAiF,KAAK,QAAQ;;AAGvG,SAAS,aAAa,SAAiB,WAAW,mBAAmB,WAAW,mBAAmB;CACjG,MAAM,aAAa,OAAO,WAAW,SAAS,QAAQ;CACtD,MAAM,QAAQ,QAAQ,MAAM,KAAK;CACjC,MAAM,aAAa,MAAM;AAEzB,KAAI,cAAc,YAAY,cAAc,SAC1C,QAAO;EAAE;EAAS,WAAW;EAAO,aAAa;EAAM;EAAY;EAAY,aAAa;EAAY,aAAa;EAAY;CAGnI,MAAM,iBAA2B,EAAE;CACnC,IAAI,mBAAmB;CACvB,IAAI,cAAiC;AAErC,MAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,KAAK,eAAe,SAAS,UAAU,KAAK;EAC9E,MAAM,OAAO,MAAM;EACnB,MAAM,YAAY,OAAO,WAAW,MAAM,QAAQ,IAAI,eAAe,SAAS,IAAI,IAAI;AAEtF,MAAI,mBAAmB,YAAY,UAAU;AAC3C,iBAAc;AACd;;AAGF,iBAAe,QAAQ,KAAK;AAC5B,sBAAoB;;AAGtB,QAAO;EAAE,SAAS,eAAe,KAAK,KAAK;EAAE,WAAW;EAAM;EAAa;EAAY;EAAY,aAAa,eAAe;EAAQ,aAAa;EAAkB;;AASxK,SAAgB,gBACd,KACA,SACW;AACX,QAAO;EACL,MAAM;EACN,aAAa;EACb,YAAY;EACZ,OAAO;EAEP,MAAM,QACJ,YACA,QACA,SACwC;GACxC,MAAM,IAAI;GAGV,MAAM,mBAAmB,SAAS,kCAAkC,IAAI,EAAE;GAC1E,MAAM,SAAS,mBAAmB;IAChC,SAAS,EAAE;IACX;IACA,gBAAgB;IACjB,CAAC;AACF,OAAI,CAAC,OAAO,QACV,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,eAAe,OAAO;KAAU,CAAC;IACjE,SAAS;KAAE,UAAU;KAAM,UAAU;KAAO,WAAW;KAAO;IAC/D;AAGH,UAAO,IAAI,SAAS,YAAY;IAE9B,IAAI,SAAS;IACb,IAAI,cAAc;IAClB,IAAI,WAAW;IAEf,IAAI,aAA0D;IAG9D,MAAM,sBAAsB,KAAK,IAC/B,mBACA,KAAK,KAAK,OAAO,YAAY,IAAK,CACnC;IACD,MAAM,UAAU,iBAAiB;AAC/B,gBAAW;AACX,UAAK,KAAK,UAAU;OACnB,sBAAsB,IAAK;IAE9B,MAAM,OAAO,MAAM,EAAE,SAAS,EAAE,EAAE;KAChC,OAAO;KACP,KAAK,OAAO;KACZ,KAAK;MACH,GAAG,OAAO;MACV,SAAS;MACV;KACF,CAAC;AAEF,SAAK,QAAQ,GAAG,SAAS,SAAS;KAChC,MAAM,OAAO,KAAK,UAAU;AACV,eAAU;MAC5B;AAEF,SAAK,QAAQ,GAAG,SAAS,SAAS;KAChC,MAAM,OAAO,KAAK,UAAU;AAC5B,oBAAe;MACf;AAEF,SAAK,GAAG,UAAU,SAAS;AACzB,kBAAa,QAAQ;AACrB,iBAAY,KAAK;KAGjB,MAAM,aAAa,aADA,cAAc,OACU;KAE3C,IAAI,aAAa,WAAW;AAC5B,SAAI,SACF,cAAa,8BAA8B,kBAAkB,OAAO;AAEtE,SAAI,WAAW,UACb,eAAc,0BAA0B,WAAW,WAAW,YAAY,CAAC,MAAM,WAAW,WAAW,WAAW,CAAC;KAGrH,MAAM,SAAwC;MAC5C,SAAS,CAAC;OAAE,MAAM;OAAQ,MAAM;OAAY,CAAC;MAC7C,SAAS;OACP,UAAU;OACV;OACA,WAAW,WAAW;OACtB,aAAa,WAAW;OACxB,aAAa,WAAW;OACzB;MACF;AACI,aAAQ,QAAQ,SAAS,qBAAqB;MACjD,MAAM,YAAY,SAAS,IAAI,YAAY,oBAAoB,EAAE,QAAQ,GAAG,SAAS;MACrF,OAAO,YAAY,EAAE,QAAQ,MAAM,GAAG,IAAI;MAC1C,SAAS,WAAW,MAAM,GAAG,IAAK;MAClC,MAAM;OACJ,SAAS,EAAE;OACX,UAAU;OACV;OACA,WAAW,WAAW;OACtB,aAAa,WAAW;OACzB;MACF,CAAC,CAAC,CAAC,cAAc,QAAQ,OAAO,CAAC;MAClC;AAEF,SAAK,GAAG,UAAU,QAAQ;AACxB,kBAAa,QAAQ;AACrB,aAAQ;MACN,SAAS,CAAC;OAAE,MAAM;OAAQ,MAAM,UAAU,IAAI;OAAW,CAAC;MAC1D,SAAS;OAAE,UAAU;OAAM,UAAU;OAAO,WAAW;OAAO;MAC/D,CAAC;MACF;KACF;;EAEL"}