orbitx 0.0.8 → 0.0.9
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.
- package/Readme.md +227 -67
- package/dist/core/agent-providers.d.ts +16 -0
- package/dist/core/agent-providers.d.ts.map +1 -0
- package/dist/core/agent-providers.js +21 -0
- package/dist/core/agent-providers.js.map +1 -0
- package/dist/core/ai-provider.d.ts +69 -1
- package/dist/core/ai-provider.d.ts.map +1 -1
- package/dist/core/ai-provider.js.map +1 -1
- package/dist/core/base-agent.d.ts +8 -4
- package/dist/core/base-agent.d.ts.map +1 -1
- package/dist/core/base-agent.js +220 -88
- package/dist/core/base-agent.js.map +1 -1
- package/dist/core/deepseek-provider.d.ts +10 -3
- package/dist/core/deepseek-provider.d.ts.map +1 -1
- package/dist/core/deepseek-provider.js +144 -39
- package/dist/core/deepseek-provider.js.map +1 -1
- package/dist/core/image-describer.d.ts +13 -0
- package/dist/core/image-describer.d.ts.map +1 -0
- package/dist/core/image-describer.js +33 -0
- package/dist/core/image-describer.js.map +1 -0
- package/dist/core/mcp-client.d.ts +17 -4
- package/dist/core/mcp-client.d.ts.map +1 -1
- package/dist/core/mcp-client.js +32 -16
- package/dist/core/mcp-client.js.map +1 -1
- package/dist/core/mcp-computer.d.ts +10 -2
- package/dist/core/mcp-computer.d.ts.map +1 -1
- package/dist/core/mcp-computer.js +108 -2
- package/dist/core/mcp-computer.js.map +1 -1
- package/dist/core/mcp-fs-storage.d.ts +8 -0
- package/dist/core/mcp-fs-storage.d.ts.map +1 -0
- package/dist/core/mcp-fs-storage.js +27 -0
- package/dist/core/mcp-fs-storage.js.map +1 -0
- package/dist/core/mcp-rng.d.ts +7 -0
- package/dist/core/mcp-rng.d.ts.map +1 -0
- package/dist/core/mcp-rng.js +14 -0
- package/dist/core/mcp-rng.js.map +1 -0
- package/dist/core/mcp-server.d.ts +8 -4
- package/dist/core/mcp-server.d.ts.map +1 -1
- package/dist/core/mcp-server.js +20 -3
- package/dist/core/mcp-server.js.map +1 -1
- package/dist/core/mcp-storage.d.ts +5 -0
- package/dist/core/mcp-storage.d.ts.map +1 -0
- package/dist/core/mcp-storage.js +3 -0
- package/dist/core/mcp-storage.js.map +1 -0
- package/dist/core/mcp.d.ts +37 -3
- package/dist/core/mcp.d.ts.map +1 -1
- package/dist/core/mcp.js +42 -1
- package/dist/core/mcp.js.map +1 -1
- package/dist/core/ollama-provider.d.ts +10 -3
- package/dist/core/ollama-provider.d.ts.map +1 -1
- package/dist/core/ollama-provider.js +122 -41
- package/dist/core/ollama-provider.js.map +1 -1
- package/dist/core/retry.d.ts +10 -0
- package/dist/core/retry.d.ts.map +1 -0
- package/dist/core/retry.js +39 -0
- package/dist/core/retry.js.map +1 -0
- package/dist/core/skill.d.ts +3 -0
- package/dist/core/skill.d.ts.map +1 -1
- package/dist/core/skill.js.map +1 -1
- package/dist/core/tool-schema-translator.d.ts +10 -0
- package/dist/core/tool-schema-translator.d.ts.map +1 -0
- package/dist/core/tool-schema-translator.js +29 -0
- package/dist/core/tool-schema-translator.js.map +1 -0
- package/dist/index.d.ts +34 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -5
- package/dist/index.js.map +1 -1
- package/dist/sandbox.d.ts +2 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +27 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/skills/backend-security.d.ts +4 -0
- package/dist/skills/backend-security.d.ts.map +1 -0
- package/dist/skills/backend-security.js +74 -0
- package/dist/skills/backend-security.js.map +1 -0
- package/dist/skills/big-task.d.ts +4 -0
- package/dist/skills/big-task.d.ts.map +1 -0
- package/dist/skills/big-task.js +66 -0
- package/dist/skills/big-task.js.map +1 -0
- package/dist/skills/code-verification.d.ts +4 -0
- package/dist/skills/code-verification.d.ts.map +1 -0
- package/dist/skills/code-verification.js +59 -0
- package/dist/skills/code-verification.js.map +1 -0
- package/dist/skills/long-task-efficiency.d.ts +4 -0
- package/dist/skills/long-task-efficiency.d.ts.map +1 -0
- package/dist/skills/long-task-efficiency.js +50 -0
- package/dist/skills/long-task-efficiency.js.map +1 -0
- package/dist/skills/node-backend.d.ts +4 -0
- package/dist/skills/node-backend.d.ts.map +1 -0
- package/dist/skills/node-backend.js +110 -0
- package/dist/skills/node-backend.js.map +1 -0
- package/dist/skills/planner.d.ts +4 -0
- package/dist/skills/planner.d.ts.map +1 -0
- package/dist/skills/planner.js +49 -0
- package/dist/skills/planner.js.map +1 -0
- package/dist/skills/present.d.ts +4 -0
- package/dist/skills/present.d.ts.map +1 -0
- package/dist/skills/present.js +56 -0
- package/dist/skills/present.js.map +1 -0
- package/dist/skills/question-answer.d.ts +4 -0
- package/dist/skills/question-answer.d.ts.map +1 -0
- package/dist/skills/question-answer.js +55 -0
- package/dist/skills/question-answer.js.map +1 -0
- package/dist/skills/react-frontend.d.ts +4 -0
- package/dist/skills/react-frontend.d.ts.map +1 -0
- package/dist/skills/react-frontend.js +111 -0
- package/dist/skills/react-frontend.js.map +1 -0
- package/dist/skills/research.d.ts +4 -0
- package/dist/skills/research.d.ts.map +1 -0
- package/dist/skills/research.js +81 -0
- package/dist/skills/research.js.map +1 -0
- package/dist/skills/shopping.d.ts +4 -0
- package/dist/skills/shopping.d.ts.map +1 -0
- package/dist/skills/shopping.js +71 -0
- package/dist/skills/shopping.js.map +1 -0
- package/dist/skills/ui-ux-design.d.ts +4 -0
- package/dist/skills/ui-ux-design.d.ts.map +1 -0
- package/dist/skills/ui-ux-design.js +70 -0
- package/dist/skills/ui-ux-design.js.map +1 -0
- package/dist/skills/web-end-to-end-test.d.ts +4 -0
- package/dist/skills/web-end-to-end-test.d.ts.map +1 -0
- package/dist/skills/web-end-to-end-test.js +76 -0
- package/dist/skills/web-end-to-end-test.js.map +1 -0
- package/dist/templates/simple.d.ts +1 -1
- package/dist/templates/simple.d.ts.map +1 -1
- package/dist/templates/simple.js +4 -0
- package/dist/templates/simple.js.map +1 -1
- package/dist/tests/mcp.test.js +2 -54
- package/dist/tests/mcp.test.js.map +1 -1
- package/dist/tools/bash/index.d.ts +10 -0
- package/dist/tools/bash/index.d.ts.map +1 -0
- package/dist/tools/bash/index.js +22 -0
- package/dist/tools/bash/index.js.map +1 -0
- package/dist/tools/bash/interaction.d.ts +29 -0
- package/dist/tools/bash/interaction.d.ts.map +1 -0
- package/dist/tools/bash/interaction.js +13 -0
- package/dist/tools/bash/interaction.js.map +1 -0
- package/dist/tools/bash/list.d.ts +4 -0
- package/dist/tools/bash/list.d.ts.map +1 -0
- package/dist/tools/bash/list.js +23 -0
- package/dist/tools/bash/list.js.map +1 -0
- package/dist/tools/bash/logs.d.ts +4 -0
- package/dist/tools/bash/logs.d.ts.map +1 -0
- package/dist/tools/bash/logs.js +47 -0
- package/dist/tools/bash/logs.js.map +1 -0
- package/dist/tools/bash/process-manager.d.ts +35 -0
- package/dist/tools/bash/process-manager.d.ts.map +1 -0
- package/dist/tools/bash/process-manager.js +137 -0
- package/dist/tools/bash/process-manager.js.map +1 -0
- package/dist/tools/bash/run.d.ts +5 -0
- package/dist/tools/bash/run.d.ts.map +1 -0
- package/dist/tools/bash/run.js +57 -0
- package/dist/tools/bash/run.js.map +1 -0
- package/dist/tools/bash/terminate.d.ts +5 -0
- package/dist/tools/bash/terminate.d.ts.map +1 -0
- package/dist/tools/bash/terminate.js +39 -0
- package/dist/tools/bash/terminate.js.map +1 -0
- package/dist/tools/bash/wait.d.ts +5 -0
- package/dist/tools/bash/wait.d.ts.map +1 -0
- package/dist/tools/bash/wait.js +50 -0
- package/dist/tools/bash/wait.js.map +1 -0
- package/dist/tools/bash/write-input.d.ts +5 -0
- package/dist/tools/bash/write-input.d.ts.map +1 -0
- package/dist/tools/bash/write-input.js +47 -0
- package/dist/tools/bash/write-input.js.map +1 -0
- package/dist/tools/browser/click.d.ts +5 -0
- package/dist/tools/browser/click.d.ts.map +1 -0
- package/dist/tools/browser/click.js +44 -0
- package/dist/tools/browser/click.js.map +1 -0
- package/dist/tools/browser/console.d.ts +4 -0
- package/dist/tools/browser/console.d.ts.map +1 -0
- package/dist/tools/browser/console.js +41 -0
- package/dist/tools/browser/console.js.map +1 -0
- package/dist/tools/browser/create-session.d.ts +5 -0
- package/dist/tools/browser/create-session.d.ts.map +1 -0
- package/dist/tools/browser/create-session.js +30 -0
- package/dist/tools/browser/create-session.js.map +1 -0
- package/dist/tools/browser/evaluate-safe.d.ts +10 -0
- package/dist/tools/browser/evaluate-safe.d.ts.map +1 -0
- package/dist/tools/browser/evaluate-safe.js +65 -0
- package/dist/tools/browser/evaluate-safe.js.map +1 -0
- package/dist/tools/browser/fill.d.ts +5 -0
- package/dist/tools/browser/fill.d.ts.map +1 -0
- package/dist/tools/browser/fill.js +78 -0
- package/dist/tools/browser/fill.js.map +1 -0
- package/dist/tools/browser/get-sessions.d.ts +4 -0
- package/dist/tools/browser/get-sessions.d.ts.map +1 -0
- package/dist/tools/browser/get-sessions.js +14 -0
- package/dist/tools/browser/get-sessions.js.map +1 -0
- package/dist/tools/browser/index.d.ts +19 -0
- package/dist/tools/browser/index.d.ts.map +1 -0
- package/dist/tools/browser/index.js +49 -0
- package/dist/tools/browser/index.js.map +1 -0
- package/dist/tools/browser/inject.d.ts +5 -0
- package/dist/tools/browser/inject.d.ts.map +1 -0
- package/dist/tools/browser/inject.js +51 -0
- package/dist/tools/browser/inject.js.map +1 -0
- package/dist/tools/browser/interaction.d.ts +49 -0
- package/dist/tools/browser/interaction.d.ts.map +1 -0
- package/dist/tools/browser/interaction.js +14 -0
- package/dist/tools/browser/interaction.js.map +1 -0
- package/dist/tools/browser/navigate.d.ts +5 -0
- package/dist/tools/browser/navigate.d.ts.map +1 -0
- package/dist/tools/browser/navigate.js +39 -0
- package/dist/tools/browser/navigate.js.map +1 -0
- package/dist/tools/browser/network-status.d.ts +4 -0
- package/dist/tools/browser/network-status.d.ts.map +1 -0
- package/dist/tools/browser/network-status.js +35 -0
- package/dist/tools/browser/network-status.js.map +1 -0
- package/dist/tools/browser/network.d.ts +4 -0
- package/dist/tools/browser/network.d.ts.map +1 -0
- package/dist/tools/browser/network.js +51 -0
- package/dist/tools/browser/network.js.map +1 -0
- package/dist/tools/browser/read-page.d.ts +45 -0
- package/dist/tools/browser/read-page.d.ts.map +1 -0
- package/dist/tools/browser/read-page.js +264 -0
- package/dist/tools/browser/read-page.js.map +1 -0
- package/dist/tools/browser/read.d.ts +5 -0
- package/dist/tools/browser/read.d.ts.map +1 -0
- package/dist/tools/browser/read.js +56 -0
- package/dist/tools/browser/read.js.map +1 -0
- package/dist/tools/browser/remove-session.d.ts +5 -0
- package/dist/tools/browser/remove-session.d.ts.map +1 -0
- package/dist/tools/browser/remove-session.js +29 -0
- package/dist/tools/browser/remove-session.js.map +1 -0
- package/dist/tools/browser/screenshot.d.ts +5 -0
- package/dist/tools/browser/screenshot.d.ts.map +1 -0
- package/dist/tools/browser/screenshot.js +50 -0
- package/dist/tools/browser/screenshot.js.map +1 -0
- package/dist/tools/browser/scroll-info.d.ts +4 -0
- package/dist/tools/browser/scroll-info.d.ts.map +1 -0
- package/dist/tools/browser/scroll-info.js +28 -0
- package/dist/tools/browser/scroll-info.js.map +1 -0
- package/dist/tools/browser/scroll.d.ts +5 -0
- package/dist/tools/browser/scroll.d.ts.map +1 -0
- package/dist/tools/browser/scroll.js +43 -0
- package/dist/tools/browser/scroll.js.map +1 -0
- package/dist/tools/browser/session-manager.d.ts +35 -0
- package/dist/tools/browser/session-manager.d.ts.map +1 -0
- package/dist/tools/browser/session-manager.js +101 -0
- package/dist/tools/browser/session-manager.js.map +1 -0
- package/dist/tools/browser/submit-form.d.ts +5 -0
- package/dist/tools/browser/submit-form.d.ts.map +1 -0
- package/dist/tools/browser/submit-form.js +45 -0
- package/dist/tools/browser/submit-form.js.map +1 -0
- package/dist/tools/fs/create-dir.d.ts +5 -0
- package/dist/tools/fs/create-dir.d.ts.map +1 -0
- package/dist/tools/fs/create-dir.js +28 -0
- package/dist/tools/fs/create-dir.js.map +1 -0
- package/dist/tools/fs/delete.d.ts +5 -0
- package/dist/tools/fs/delete.d.ts.map +1 -0
- package/dist/tools/fs/delete.js +45 -0
- package/dist/tools/fs/delete.js.map +1 -0
- package/dist/tools/fs/edit-file.d.ts +5 -0
- package/dist/tools/fs/edit-file.d.ts.map +1 -0
- package/dist/tools/fs/edit-file.js +74 -0
- package/dist/tools/fs/edit-file.js.map +1 -0
- package/dist/tools/fs/index.d.ts +11 -2
- package/dist/tools/fs/index.d.ts.map +1 -1
- package/dist/tools/fs/index.js +27 -2
- package/dist/tools/fs/index.js.map +1 -1
- package/dist/tools/fs/interaction.d.ts +37 -0
- package/dist/tools/fs/interaction.d.ts.map +1 -0
- package/dist/tools/fs/interaction.js +13 -0
- package/dist/tools/fs/interaction.js.map +1 -0
- package/dist/tools/fs/list-dir.d.ts +5 -0
- package/dist/tools/fs/list-dir.d.ts.map +1 -0
- package/dist/tools/fs/list-dir.js +87 -0
- package/dist/tools/fs/list-dir.js.map +1 -0
- package/dist/tools/fs/move.d.ts +5 -0
- package/dist/tools/fs/move.d.ts.map +1 -0
- package/dist/tools/fs/move.js +44 -0
- package/dist/tools/fs/move.js.map +1 -0
- package/dist/tools/fs/read-file.d.ts +4 -3
- package/dist/tools/fs/read-file.d.ts.map +1 -1
- package/dist/tools/fs/read-file.js +50 -42
- package/dist/tools/fs/read-file.js.map +1 -1
- package/dist/tools/fs/stat.d.ts +5 -0
- package/dist/tools/fs/stat.d.ts.map +1 -0
- package/dist/tools/fs/stat.js +40 -0
- package/dist/tools/fs/stat.js.map +1 -0
- package/dist/tools/fs/utils.d.ts +20 -0
- package/dist/tools/fs/utils.d.ts.map +1 -0
- package/dist/tools/fs/utils.js +33 -0
- package/dist/tools/fs/utils.js.map +1 -0
- package/dist/tools/fs/write-file.d.ts +4 -3
- package/dist/tools/fs/write-file.d.ts.map +1 -1
- package/dist/tools/fs/write-file.js +39 -58
- package/dist/tools/fs/write-file.js.map +1 -1
- package/dist/tools/present/add.d.ts +5 -0
- package/dist/tools/present/add.d.ts.map +1 -0
- package/dist/tools/present/add.js +54 -0
- package/dist/tools/present/add.js.map +1 -0
- package/dist/tools/present/clear.d.ts +5 -0
- package/dist/tools/present/clear.d.ts.map +1 -0
- package/dist/tools/present/clear.js +23 -0
- package/dist/tools/present/clear.js.map +1 -0
- package/dist/tools/present/get-list.d.ts +5 -0
- package/dist/tools/present/get-list.d.ts.map +1 -0
- package/dist/tools/present/get-list.js +24 -0
- package/dist/tools/present/get-list.js.map +1 -0
- package/dist/tools/present/index.d.ts +8 -0
- package/dist/tools/present/index.d.ts.map +1 -0
- package/dist/tools/present/index.js +14 -0
- package/dist/tools/present/index.js.map +1 -0
- package/dist/tools/present/interaction.d.ts +17 -0
- package/dist/tools/present/interaction.d.ts.map +1 -0
- package/dist/tools/present/interaction.js +15 -0
- package/dist/tools/present/interaction.js.map +1 -0
- package/dist/tools/present/utils.d.ts +12 -0
- package/dist/tools/present/utils.d.ts.map +1 -0
- package/dist/tools/present/utils.js +40 -0
- package/dist/tools/present/utils.js.map +1 -0
- package/dist/tools/question-answer/index.d.ts +5 -0
- package/dist/tools/question-answer/index.d.ts.map +1 -0
- package/dist/tools/question-answer/index.js +7 -0
- package/dist/tools/question-answer/index.js.map +1 -0
- package/dist/tools/question-answer/interaction.d.ts +14 -0
- package/dist/tools/question-answer/interaction.d.ts.map +1 -0
- package/dist/tools/question-answer/interaction.js +13 -0
- package/dist/tools/question-answer/interaction.js.map +1 -0
- package/dist/tools/question-answer/question-answer.d.ts +5 -0
- package/dist/tools/question-answer/question-answer.d.ts.map +1 -0
- package/dist/tools/question-answer/question-answer.js +24 -0
- package/dist/tools/question-answer/question-answer.js.map +1 -0
- package/dist/tools/todo/check-task.d.ts +5 -0
- package/dist/tools/todo/check-task.d.ts.map +1 -0
- package/dist/tools/todo/check-task.js +49 -0
- package/dist/tools/todo/check-task.js.map +1 -0
- package/dist/tools/todo/create-list.d.ts +5 -0
- package/dist/tools/todo/create-list.d.ts.map +1 -0
- package/dist/tools/todo/create-list.js +36 -0
- package/dist/tools/todo/create-list.js.map +1 -0
- package/dist/tools/todo/create-task.d.ts +5 -0
- package/dist/tools/todo/create-task.d.ts.map +1 -0
- package/dist/tools/todo/create-task.js +63 -0
- package/dist/tools/todo/create-task.js.map +1 -0
- package/dist/tools/todo/get-list.d.ts +4 -0
- package/dist/tools/todo/get-list.d.ts.map +1 -0
- package/dist/tools/todo/get-list.js +38 -0
- package/dist/tools/todo/get-list.js.map +1 -0
- package/dist/tools/todo/get-lists.d.ts +4 -0
- package/dist/tools/todo/get-lists.d.ts.map +1 -0
- package/dist/tools/todo/get-lists.js +18 -0
- package/dist/tools/todo/get-lists.js.map +1 -0
- package/dist/tools/todo/index.d.ts +12 -0
- package/dist/tools/todo/index.d.ts.map +1 -0
- package/dist/tools/todo/index.js +25 -0
- package/dist/tools/todo/index.js.map +1 -0
- package/dist/tools/todo/interaction.d.ts +30 -0
- package/dist/tools/todo/interaction.d.ts.map +1 -0
- package/dist/tools/todo/interaction.js +13 -0
- package/dist/tools/todo/interaction.js.map +1 -0
- package/dist/tools/todo/remove-list.d.ts +5 -0
- package/dist/tools/todo/remove-list.d.ts.map +1 -0
- package/dist/tools/todo/remove-list.js +42 -0
- package/dist/tools/todo/remove-list.js.map +1 -0
- package/dist/tools/todo/remove-task.d.ts +5 -0
- package/dist/tools/todo/remove-task.d.ts.map +1 -0
- package/dist/tools/todo/remove-task.js +45 -0
- package/dist/tools/todo/remove-task.js.map +1 -0
- package/dist/tools/todo/storage.d.ts +22 -0
- package/dist/tools/todo/storage.d.ts.map +1 -0
- package/dist/tools/todo/storage.js +44 -0
- package/dist/tools/todo/storage.js.map +1 -0
- package/dist/tools/utils/delay.d.ts +10 -0
- package/dist/tools/utils/delay.d.ts.map +1 -0
- package/dist/tools/utils/delay.js +33 -0
- package/dist/tools/utils/delay.js.map +1 -0
- package/dist/tools/utils/get-current-time.d.ts +7 -2
- package/dist/tools/utils/get-current-time.d.ts.map +1 -1
- package/dist/tools/utils/get-current-time.js +12 -31
- package/dist/tools/utils/get-current-time.js.map +1 -1
- package/dist/tools/utils/index.d.ts +2 -0
- package/dist/tools/utils/index.d.ts.map +1 -1
- package/dist/tools/utils/index.js +7 -0
- package/dist/tools/utils/index.js.map +1 -1
- package/package.json +54 -56
- package/dist/templates/researcher.d.ts +0 -27
- package/dist/templates/researcher.d.ts.map +0 -1
- package/dist/templates/researcher.js +0 -70
- package/dist/templates/researcher.js.map +0 -1
- package/dist/tools/www/fetch.d.ts +0 -4
- package/dist/tools/www/fetch.d.ts.map +0 -1
- package/dist/tools/www/fetch.js +0 -147
- package/dist/tools/www/fetch.js.map +0 -1
- package/dist/tools/www/index.d.ts +0 -4
- package/dist/tools/www/index.d.ts.map +0 -1
- package/dist/tools/www/index.js +0 -4
- package/dist/tools/www/index.js.map +0 -1
- package/dist/tools/www/read-web-page.d.ts +0 -4
- package/dist/tools/www/read-web-page.d.ts.map +0 -1
- package/dist/tools/www/read-web-page.js +0 -330
- package/dist/tools/www/read-web-page.js.map +0 -1
- package/dist/tools/www/web-search.d.ts +0 -4
- package/dist/tools/www/web-search.d.ts.map +0 -1
- package/dist/tools/www/web-search.js +0 -82
- package/dist/tools/www/web-search.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { AIProvider } from "./core/ai-provider.js";
|
|
2
|
-
export type { ChatResponse, Message, StreamCallback } from "./core/ai-provider.js";
|
|
2
|
+
export type { ChatResponse, Message, StreamCallback, ToolSchema, ToolCallRequest, MessageContentPart, ProviderCapabilities } from "./core/ai-provider.js";
|
|
3
3
|
export { BaseAgent } from "./core/base-agent.js";
|
|
4
4
|
export type { ExtractedSegment, ParsedToolCall } from "./core/base-agent.js";
|
|
5
5
|
export { DeepSeekProvider } from "./core/deepseek-provider.js";
|
|
@@ -7,12 +7,40 @@ export { MCPClient } from "./core/mcp-client.js";
|
|
|
7
7
|
export { MCPConnection } from "./core/mcp-connection.js";
|
|
8
8
|
export { MCPIPCConnection } from "./core/mcp-ipc-connection.js";
|
|
9
9
|
export { MCPServer } from "./core/mcp-server.js";
|
|
10
|
-
export { MCPTool } from "./core/mcp.js";
|
|
10
|
+
export { MCPTool, MCPCustomClass, generateRefId, normalizeToolOutput } from "./core/mcp.js";
|
|
11
|
+
export type { MCP, MCPToolOutput } from "./core/mcp.js";
|
|
11
12
|
export { OllamaProvider } from "./core/ollama-provider.js";
|
|
12
13
|
export { Skill } from "./core/skill.js";
|
|
13
|
-
export {
|
|
14
|
+
export { MCPComputer } from "./core/mcp-computer.js";
|
|
15
|
+
export { ImageDescriber } from "./core/image-describer.js";
|
|
16
|
+
export { toOpenAIFunctionTools } from "./core/tool-schema-translator.js";
|
|
17
|
+
export { resolveAgentProviders } from "./core/agent-providers.js";
|
|
18
|
+
export type { AgentProviderRole, AgentProviderEntry, AgentProvidersInput, ResolvedAgentProviders } from "./core/agent-providers.js";
|
|
14
19
|
export { SimpleAgent } from "./templates/simple.js";
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
20
|
+
export { GetCurrentTimeTool, DelayTool, UtilTools } from "./tools/utils/index.js";
|
|
21
|
+
export { TodoCreateListTool, TodoRemoveListTool, TodoGetListsTool, TodoGetListTool, TodoCreateTaskTool, TodoRemoveTaskTool, TodoCheckTaskTool, TodoTools, TodoInteraction, } from "./tools/todo/index.js";
|
|
22
|
+
export type { TodoTask, TodoList, TodoEvent } from "./tools/todo/index.js";
|
|
23
|
+
export { BrowserCreateSessionTool, BrowserRemoveSessionTool, BrowserGetSessionsTool, BrowserNavigateTool, BrowserConsoleTool, BrowserInjectTool, BrowserReadTool, BrowserClickTool, BrowserFillTool, BrowserScrollInfoTool, BrowserScrollTool, BrowserNetworkStatusTool, BrowserNetworkTool, BrowserSubmitFormTool, BrowserScreenshotTool, BrowserTools, BrowserInteraction, } from "./tools/browser/index.js";
|
|
24
|
+
export type { BrowserEvent } from "./tools/browser/index.js";
|
|
25
|
+
export { FsReadFileTool, FsWriteFileTool, FsEditFileTool, FsListDirTool, FsCreateDirTool, FsDeleteTool, FsMoveTool, FsStatTool, FsTools, FsInteraction, } from "./tools/fs/index.js";
|
|
26
|
+
export type { FsEvent } from "./tools/fs/index.js";
|
|
27
|
+
export { BashRunTool, BashWaitTool, BashLogsTool, BashListTool, BashWriteInputTool, BashTerminateTool, BashTools, BashInteraction, } from "./tools/bash/index.js";
|
|
28
|
+
export type { BashEvent } from "./tools/bash/index.js";
|
|
29
|
+
export { PresentAddTool, PresentClearTool, PresentGetListTool, PresentTools, getPresentFolder, PresentInteraction } from "./tools/present/index.js";
|
|
30
|
+
export type { PresentEvent } from "./tools/present/index.js";
|
|
31
|
+
export { QuestionAnswerTool, QuestionAnswerTools, QuestionAnswerInteraction } from "./tools/question-answer/index.js";
|
|
32
|
+
export type { QuestionAnswerEvent } from "./tools/question-answer/index.js";
|
|
33
|
+
export { BackendSecuritySkill } from "./skills/backend-security.js";
|
|
34
|
+
export { BigTaskSkill } from "./skills/big-task.js";
|
|
35
|
+
export { CodeVerificationSkill } from "./skills/code-verification.js";
|
|
36
|
+
export { LongTaskEfficiencySkill } from "./skills/long-task-efficiency.js";
|
|
37
|
+
export { NodeBackendSkill } from "./skills/node-backend.js";
|
|
38
|
+
export { PlannerSkill } from "./skills/planner.js";
|
|
39
|
+
export { PresentSkill } from "./skills/present.js";
|
|
40
|
+
export { QuestionAnswerSkill } from "./skills/question-answer.js";
|
|
41
|
+
export { ReactFrontendSkill } from "./skills/react-frontend.js";
|
|
42
|
+
export { ResearchSkill } from "./skills/research.js";
|
|
43
|
+
export { ShoppingSkill } from "./skills/shopping.js";
|
|
44
|
+
export { UiUxDesignSkill } from "./skills/ui-ux-design.js";
|
|
45
|
+
export { WebEndToEndTestSkill } from "./skills/web-end-to-end-test.js";
|
|
18
46
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1J,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5F,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEpI,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EACH,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,eAAe,GAClB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,EACH,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,GACrB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EACH,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,aAAa,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EACH,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,eAAe,GAClB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EACrB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EAC5B,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,12 +5,32 @@ export { MCPClient } from "./core/mcp-client.js";
|
|
|
5
5
|
export { MCPConnection } from "./core/mcp-connection.js";
|
|
6
6
|
export { MCPIPCConnection } from "./core/mcp-ipc-connection.js";
|
|
7
7
|
export { MCPServer } from "./core/mcp-server.js";
|
|
8
|
-
export { MCPTool } from "./core/mcp.js";
|
|
8
|
+
export { MCPTool, MCPCustomClass, generateRefId, normalizeToolOutput } from "./core/mcp.js";
|
|
9
9
|
export { OllamaProvider } from "./core/ollama-provider.js";
|
|
10
10
|
export { Skill } from "./core/skill.js";
|
|
11
|
-
export {
|
|
11
|
+
export { MCPComputer } from "./core/mcp-computer.js";
|
|
12
|
+
export { ImageDescriber } from "./core/image-describer.js";
|
|
13
|
+
export { toOpenAIFunctionTools } from "./core/tool-schema-translator.js";
|
|
14
|
+
export { resolveAgentProviders } from "./core/agent-providers.js";
|
|
12
15
|
export { SimpleAgent } from "./templates/simple.js";
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
+
export { GetCurrentTimeTool, DelayTool, UtilTools } from "./tools/utils/index.js";
|
|
17
|
+
export { TodoCreateListTool, TodoRemoveListTool, TodoGetListsTool, TodoGetListTool, TodoCreateTaskTool, TodoRemoveTaskTool, TodoCheckTaskTool, TodoTools, TodoInteraction, } from "./tools/todo/index.js";
|
|
18
|
+
export { BrowserCreateSessionTool, BrowserRemoveSessionTool, BrowserGetSessionsTool, BrowserNavigateTool, BrowserConsoleTool, BrowserInjectTool, BrowserReadTool, BrowserClickTool, BrowserFillTool, BrowserScrollInfoTool, BrowserScrollTool, BrowserNetworkStatusTool, BrowserNetworkTool, BrowserSubmitFormTool, BrowserScreenshotTool, BrowserTools, BrowserInteraction, } from "./tools/browser/index.js";
|
|
19
|
+
export { FsReadFileTool, FsWriteFileTool, FsEditFileTool, FsListDirTool, FsCreateDirTool, FsDeleteTool, FsMoveTool, FsStatTool, FsTools, FsInteraction, } from "./tools/fs/index.js";
|
|
20
|
+
export { BashRunTool, BashWaitTool, BashLogsTool, BashListTool, BashWriteInputTool, BashTerminateTool, BashTools, BashInteraction, } from "./tools/bash/index.js";
|
|
21
|
+
export { PresentAddTool, PresentClearTool, PresentGetListTool, PresentTools, getPresentFolder, PresentInteraction } from "./tools/present/index.js";
|
|
22
|
+
export { QuestionAnswerTool, QuestionAnswerTools, QuestionAnswerInteraction } from "./tools/question-answer/index.js";
|
|
23
|
+
export { BackendSecuritySkill } from "./skills/backend-security.js";
|
|
24
|
+
export { BigTaskSkill } from "./skills/big-task.js";
|
|
25
|
+
export { CodeVerificationSkill } from "./skills/code-verification.js";
|
|
26
|
+
export { LongTaskEfficiencySkill } from "./skills/long-task-efficiency.js";
|
|
27
|
+
export { NodeBackendSkill } from "./skills/node-backend.js";
|
|
28
|
+
export { PlannerSkill } from "./skills/planner.js";
|
|
29
|
+
export { PresentSkill } from "./skills/present.js";
|
|
30
|
+
export { QuestionAnswerSkill } from "./skills/question-answer.js";
|
|
31
|
+
export { ReactFrontendSkill } from "./skills/react-frontend.js";
|
|
32
|
+
export { ResearchSkill } from "./skills/research.js";
|
|
33
|
+
export { ShoppingSkill } from "./skills/shopping.js";
|
|
34
|
+
export { UiUxDesignSkill } from "./skills/ui-ux-design.js";
|
|
35
|
+
export { WebEndToEndTestSkill } from "./skills/web-end-to-end-test.js";
|
|
16
36
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":""}
|
package/dist/sandbox.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import MCPFSStorage from "./core/mcp-fs-storage.js";
|
|
2
|
+
import MCPIPCConnection from "./core/mcp-ipc-connection.js";
|
|
3
|
+
import MCPRNG from "./core/mcp-rng.js";
|
|
4
|
+
import MCPServer from "./core/mcp-server.js";
|
|
5
|
+
import { BashTools } from "./tools/bash/index.js";
|
|
6
|
+
import { BrowserTools } from "./tools/browser/index.js";
|
|
7
|
+
import { FsTools } from "./tools/fs/index.js";
|
|
8
|
+
import { PresentTools } from "./tools/present/index.js";
|
|
9
|
+
import { TodoTools } from "./tools/todo/index.js";
|
|
10
|
+
import { UtilTools } from "./tools/utils/index.js";
|
|
11
|
+
console.log("Starting Sandbox MCP Server ...");
|
|
12
|
+
const _MCPConnectionPath = process.env.MCPConnectionPath || "/tmp/mcp-server/socket.sock";
|
|
13
|
+
const _MCPConnection = new MCPIPCConnection(_MCPConnectionPath);
|
|
14
|
+
const _MCPStorage = new MCPFSStorage("/home/ubuntu/mcp-data");
|
|
15
|
+
const _MCPRNG = new MCPRNG(_MCPStorage);
|
|
16
|
+
const _MCPServer = new MCPServer(_MCPConnection, _MCPStorage, _MCPRNG);
|
|
17
|
+
const tools = [
|
|
18
|
+
...BashTools(),
|
|
19
|
+
...BrowserTools(),
|
|
20
|
+
...FsTools(),
|
|
21
|
+
...PresentTools(),
|
|
22
|
+
...TodoTools(),
|
|
23
|
+
...UtilTools()
|
|
24
|
+
];
|
|
25
|
+
tools.forEach(tool => _MCPServer.registerTool(tool));
|
|
26
|
+
console.log(`MCP Server Stared at "${_MCPConnectionPath}" with ${tools.map(t => t.getOptions().name)}`);
|
|
27
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,gBAAgB,MAAM,8BAA8B,CAAC;AAC5D,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAC/C,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,6BAA6B,CAAC;AAC1F,MAAM,cAAc,GAAG,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AAChE,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,uBAAuB,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;AACxC,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACvE,MAAM,KAAK,GAAG;IACV,GAAG,SAAS,EAAE;IACd,GAAG,YAAY,EAAE;IACjB,GAAG,OAAO,EAAE;IACZ,GAAG,YAAY,EAAE;IACjB,GAAG,SAAS,EAAE;IACd,GAAG,SAAS,EAAE;CACjB,CAAC;AACF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,OAAO,CAAC,GAAG,CAAC,yBAAyB,kBAAkB,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-security.d.ts","sourceRoot":"","sources":["../../src/skills/backend-security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AASrC,eAAO,MAAM,oBAAoB,aAmE/B,CAAC;AAEH,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import Skill from "../core/skill.js";
|
|
2
|
+
import { FsTools, } from "../tools/fs/index.js";
|
|
3
|
+
import { BashTools, } from "../tools/bash/index.js";
|
|
4
|
+
import { UtilTools } from "../tools/utils/index.js";
|
|
5
|
+
export const BackendSecuritySkill = () => new Skill({
|
|
6
|
+
name: "backend-security",
|
|
7
|
+
description: "Use this skill whenever writing, reviewing, or hardening any server-side code that handles authentication, user input, sessions, tokens, file uploads, database queries, payments, or any data that crosses a trust boundary (client to server, or one service to another). Applies regardless of framework or language. Trigger this alongside node-backend (or any other backend skill) for production code — not just when the user explicitly says 'security' — since insecure-by-default code is not production-ready even if functionally correct. Also trigger for security-focused reviews of existing code, dependency audits, and questions about auth/session/secret handling.",
|
|
8
|
+
tools: [
|
|
9
|
+
...FsTools(),
|
|
10
|
+
...BashTools(),
|
|
11
|
+
...UtilTools()
|
|
12
|
+
],
|
|
13
|
+
instructions: `
|
|
14
|
+
# Backend Security Skill
|
|
15
|
+
|
|
16
|
+
## Purpose
|
|
17
|
+
Functionally-correct backend code is not the same as production-ready backend code. This skill is the security pass that has to happen alongside (not instead of) building the feature — treat it as part of "done," not an optional hardening step for later. Apply this whenever code touches auth, user input, sessions, secrets, file handling, or a database, regardless of which backend framework skill is also active.
|
|
18
|
+
|
|
19
|
+
## Core rule
|
|
20
|
+
Never ship an endpoint that trusts client input, an unvalidated body, an unchecked auth header, or a raw string built into a query, "for now" or "to get it working first." Security is not a separate pass you do after the feature works — build it in from the first version, because retrofitting it later means finding every place trust was assumed and that search is easy to get wrong.
|
|
21
|
+
|
|
22
|
+
## Input validation and sanitization
|
|
23
|
+
- Validate every piece of external input (body, query params, path params, headers, uploaded file metadata) against an explicit schema (e.g. zod, joi, express-validator) before it touches business logic — never pass \`req.body\` straight into a service or query.
|
|
24
|
+
- Reject unexpected/extra fields rather than silently ignoring them (mass-assignment risk) — don't spread \`req.body\` directly into a DB write/update without an explicit allowlist of fields.
|
|
25
|
+
- Validate types, lengths, and formats server-side even if the frontend already validates — client-side validation is a UX nicety, not a security boundary; assume any client-side check can be bypassed entirely.
|
|
26
|
+
|
|
27
|
+
## Authentication and sessions
|
|
28
|
+
- Never store passwords in plaintext or with a fast general-purpose hash (MD5, SHA-256 alone) — use bcrypt/argon2/scrypt with an appropriate work factor.
|
|
29
|
+
- Never put sensitive data (passwords, full tokens, secrets) in JWT payloads — JWTs are signed, not encrypted, and are readable by anyone who has the token.
|
|
30
|
+
- Set cookie flags correctly for session/auth cookies: \`HttpOnly\` (blocks JS access, mitigates XSS token theft), \`Secure\` (HTTPS only), \`SameSite=Strict\` or \`Lax\` (mitigates CSRF) unless there's a specific cross-site need that's been explicitly considered.
|
|
31
|
+
- Expire and rotate tokens/sessions; implement refresh-token rotation or short-lived access tokens rather than one long-lived token that never expires.
|
|
32
|
+
- Rate-limit authentication endpoints specifically (login, password reset, signup) — these are brute-force targets even if the rest of the API isn't rate-limited as aggressively.
|
|
33
|
+
|
|
34
|
+
## Authorization (never just authentication)
|
|
35
|
+
- Authenticating a request ("who is this") is not the same as authorizing it ("are they allowed to do this specific thing to this specific resource"). Every endpoint that reads/writes a resource by ID must check that the authenticated user actually owns/can-access that specific resource — never just check "is logged in" and trust the ID in the URL/body (this is IDOR — Insecure Direct Object Reference, one of the most common real-world API vulns).
|
|
36
|
+
- Centralize authorization logic (middleware or a shared helper) rather than re-implementing ad hoc ownership checks per-route, which is easy to forget on a new endpoint.
|
|
37
|
+
|
|
38
|
+
## Injection prevention
|
|
39
|
+
- Never build a SQL/NoSQL query by string-concatenating user input. Use parameterized queries / prepared statements, or an ORM/query-builder that parameterizes by default. This applies equally to "just one quick query" written directly in a controller for convenience.
|
|
40
|
+
- For any use of a shell command, template engine, or eval-like function with user-influenced input, treat it as an injection risk and avoid interpolating raw input into it; prefer passing arguments as separate parameters (e.g. \`execFile\` with an args array, not \`exec\` with a concatenated string).
|
|
41
|
+
- Sanitize/escape any user input that will be rendered back as HTML (stored/reflected XSS) — don't rely on "the frontend framework probably escapes this" without confirming it actually does for the specific rendering path used.
|
|
42
|
+
|
|
43
|
+
## Secrets and configuration
|
|
44
|
+
- Never hardcode API keys, DB credentials, or signing secrets in source files. Use environment variables, and confirm a \`.env.example\` (without real values) exists so the requirement is visible without leaking the actual secret.
|
|
45
|
+
- Never commit a real \`.env\` file — check for and add a \`.gitignore\` entry if one doesn't already exist when creating a new project.
|
|
46
|
+
- Don't log secrets, full tokens, passwords, or full request bodies that might contain them — redact sensitive fields before logging.
|
|
47
|
+
|
|
48
|
+
## File uploads
|
|
49
|
+
- Validate uploaded file type by actual content/magic bytes where feasible, not just the client-supplied extension or MIME type header, both of which are trivially spoofable.
|
|
50
|
+
- Enforce a file size limit server-side, not just in frontend UI.
|
|
51
|
+
- Store uploads outside the web root or behind access control, and never execute uploaded files.
|
|
52
|
+
|
|
53
|
+
## Dependencies and surface area
|
|
54
|
+
- Run \`npm audit\` (or equivalent) after adding dependencies to a production project and flag any high/critical findings to the user rather than silently ignoring them.
|
|
55
|
+
- Prefer minimal, actively-maintained dependencies over adding a new package for something a few lines of code could do, especially for anything touching crypto/auth — don't hand-roll crypto primitives, but also don't add an obscure unmaintained auth library when a well-established one exists.
|
|
56
|
+
- Set security-relevant HTTP headers (e.g. via \`helmet\` in Express) — CSP, X-Content-Type-Options, X-Frame-Options, etc. — rather than leaving framework defaults that omit them.
|
|
57
|
+
|
|
58
|
+
## Error handling and information disclosure
|
|
59
|
+
- Never return raw stack traces, internal error messages, or DB error details to the client in production — log the detail server-side, return a generic message client-side.
|
|
60
|
+
- Don't let error responses leak whether a resource/user exists when they shouldn't (e.g. "no such user" vs "wrong password" on login — prefer a single generic "invalid credentials" for both, to prevent user enumeration).
|
|
61
|
+
|
|
62
|
+
## Verifying the hardening actually works
|
|
63
|
+
Writing the mitigation is not the job — confirming it holds is:
|
|
64
|
+
1. For an auth-gated endpoint, actually test it unauthenticated and with a different user's token/session to confirm it's rejected, not just that the happy path with the right user works.
|
|
65
|
+
2. For validated input, actually send malformed/oversized/wrong-type input and confirm it's rejected with a sane error, not a 500 or a silent pass-through.
|
|
66
|
+
3. For rate-limited endpoints, confirm the limit actually triggers under repeated requests rather than assuming the middleware is configured correctly.
|
|
67
|
+
4. Re-check after any refactor that moved validation/auth logic — a moved middleware that's no longer wired into the route is a silent regression.
|
|
68
|
+
|
|
69
|
+
## When this is a genuine tradeoff, not negligence
|
|
70
|
+
Some contexts (an internal prototype, a throwaway script, an explicitly-scoped demo) may reasonably skip some of this. In that case, say so explicitly to the user rather than silently skipping — "this is fine for a prototype but would need auth/rate-limiting/input validation before going to production" — so the gap is a known, stated tradeoff rather than a silent gap discovered later.
|
|
71
|
+
`
|
|
72
|
+
});
|
|
73
|
+
export default BackendSecuritySkill;
|
|
74
|
+
//# sourceMappingURL=backend-security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-security.js","sourceRoot":"","sources":["../../src/skills/backend-security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,EACH,OAAO,GACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,SAAS,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC;IAChD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,2pBAA2pB;IACxqB,KAAK,EAAE;QACH,GAAG,OAAO,EAAE;QACZ,GAAG,SAAS,EAAE;QACd,GAAG,SAAS,EAAE;KACjB;IACD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DjB;CACA,CAAC,CAAC;AAEH,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"big-task.d.ts","sourceRoot":"","sources":["../../src/skills/big-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,eAAO,MAAM,YAAY,aA8DvB,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import Skill from "../core/skill.js";
|
|
2
|
+
export const BigTaskSkill = () => new Skill({
|
|
3
|
+
name: "big-task",
|
|
4
|
+
description: "Use this skill whenever a task is large, long, open-ended, multi-domain, or has a wide/ambitious scope — the kind of request where the instinct is to say it's too big, offer a plan instead of doing it, do a small slice and declare victory, or hand it back to the user half-finished. Applies to any task regardless of domain: size and length of the work are not a reason to stop short of the actual goal. Also applies when a big job spans multiple other skills at once (e.g. backend, frontend, security, verification, and testing all on one build) — the risk there isn't stopping early on a single skill, it's finishing one skill's slice and declaring the whole job done while other required skills never actually ran.",
|
|
5
|
+
tools: [ // this is list of required tools for this job at less
|
|
6
|
+
],
|
|
7
|
+
instructions: `
|
|
8
|
+
# Big Task Skill
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
Some tasks are big: many files, many steps, a long build, a large refactor, a huge dataset, an ambitious feature, or a job that spans several other skills at once. Size is not an exception condition. This skill exists to counteract the failure mode of treating "this will take a while" as a reason to stop, downscope silently, or hand the work back unfinished. The job is the actual goal, not a gesture toward it.
|
|
12
|
+
|
|
13
|
+
## The core rule
|
|
14
|
+
Never respond to a big task by explaining that it's big instead of doing it. "This is a large task, here's how I'd approach it" is not an acceptable substitute for actually doing the task, unless the user only asked for a plan. If the user asked for the outcome, deliver the outcome. A plan, an outline, or a partial slice is only the right deliverable when that's literally what was asked for.
|
|
15
|
+
|
|
16
|
+
Do not:
|
|
17
|
+
- Announce that a task is big/complex/will take a long time as a reason to stop, pause, or ask "do you want me to continue?" when nothing is actually blocking you.
|
|
18
|
+
- Do a small representative piece of a large job and present it as if the job is done, or as a stand-in for the rest ("here's one example file, you can apply the same pattern to the rest").
|
|
19
|
+
- Silently narrow scope to something smaller and easier without saying so, then report success against the narrowed version.
|
|
20
|
+
- Stop at the first sign of friction (a long file list, a large dataset, many similar edits to make) as though friction were failure.
|
|
21
|
+
- Finish the part of a multi-skill job that happens to be done first (e.g. the backend) and present it as the whole job complete, when other required parts (frontend, security hardening, verification, testing) haven't been touched yet — see "Multi-domain big tasks" below.
|
|
22
|
+
|
|
23
|
+
Do:
|
|
24
|
+
- Break the task down (use the planner skill's todo list for anything with 3+ distinct steps or deliverables — see "Working together with planner" below) and then actually work through every item, not just the first few.
|
|
25
|
+
- Keep going across many tool calls and iterations if that's what the task genuinely requires. A task needing 50 edits needs 50 edits, not 5 plus an explanation of the other 45.
|
|
26
|
+
- If a task is repetitive (the same kind of change across many files, many rows, many components), treat the repetition as the job, not as a signal to sample it and stop.
|
|
27
|
+
- Push through errors, dead ends, and setbacks by adapting the approach and continuing, not by reporting the setback as if it were the final outcome.
|
|
28
|
+
- If real progress requires many turns or a long session, keep working turn over turn rather than pausing to ask for permission to keep going — and apply the long-task-efficiency skill's discipline so that "keep going" doesn't mean "keep going wastefully" (see below).
|
|
29
|
+
|
|
30
|
+
## Working together with planner and long-task-efficiency
|
|
31
|
+
On any job big enough that you might lose track of what's done and what's left, don't rely on memory alone:
|
|
32
|
+
- Use the **planner** skill to stand up a todo list before starting, breaking the goal into concrete checkable tasks. This is what makes "have I actually finished the big task" an answerable question rather than a vibe — check the list, don't guess.
|
|
33
|
+
- Use the **long-task-efficiency** skill's discipline for *how* you move through that list: batch independent work, avoid re-reading/re-fetching things that haven't changed, checkpoint so an interrupted session resumes cheaply. Big-task says "don't stop early"; long-task-efficiency says "don't waste turns while not stopping." Both apply simultaneously on a large job — neither one licenses skipping the other.
|
|
34
|
+
- These three skills are one workflow on a big job, not independent checklists: stand up the plan (planner), work through all of it without stopping short (big-task), and do so without wasted motion (long-task-efficiency).
|
|
35
|
+
|
|
36
|
+
## Multi-domain big tasks — don't finish one skill and call the whole job done
|
|
37
|
+
Some big tasks aren't just "many steps in one domain" — they span several other skills at once. Building a real feature often means: backend logic (node-backend) + security hardening (backend-security) + frontend UI (react-frontend) + design quality (ui-ux-design) + compiling/typechecking cleanly (code-verification) + actually testing it behaves correctly (web-end-to-end-test). The specific risk on this kind of job is finishing the *first* domain — usually the backend, since it's often built first — and reporting the job as done, when the frontend was never built, the security pass never happened, or nothing was ever actually clicked through in a browser.
|
|
38
|
+
|
|
39
|
+
- Before starting a multi-domain job, identify up front which of the other skills the full scope actually requires, and put a task for each domain's completion (not just its "build" step, but its verification step too) on the todo list. "Build the API" and "typecheck/verify the API" and "harden the API" are different tasks, not one task, even though they're all about the same backend.
|
|
40
|
+
- A domain isn't done when its code is written — it's done when the relevant verification skill for that domain has actually run (code-verification for typecheck/build; web-end-to-end-test for real behavior) and, where relevant, the security/design skills have actually been applied, not just available. Don't check off "build the frontend" the moment the component renders once — that's before ui-ux-design's states/accessibility checklist and before it's been driven end-to-end.
|
|
41
|
+
- If you notice you're about to present a multi-domain job as finished, explicitly check: did every domain this job actually touches get both built *and* verified, or did the last domain worked on absorb all the remaining attention while an earlier domain's verification step got silently dropped? A job isn't finished because *something* runs; it's finished because everything the user asked for actually works.
|
|
42
|
+
|
|
43
|
+
## Distinguishing genuine blockers from avoidance
|
|
44
|
+
Stopping early is only legitimate when something is actually, concretely blocking further progress — not because the task is large. Genuine blockers include:
|
|
45
|
+
- Missing information only the user has (a credential, a business decision, a preference between two valid approaches with materially different outcomes).
|
|
46
|
+
- An action that is destructive/irreversible and wasn't clearly authorized (deleting production data, force-pushing over history, spending real money).
|
|
47
|
+
- A true ambiguity where multiple reasonable interpretations of the goal would lead to substantially different work, and guessing wrong would waste significant effort.
|
|
48
|
+
- An external dependency that is actually unavailable (a required service is down, a resource genuinely doesn't exist).
|
|
49
|
+
|
|
50
|
+
None of these are "the task has a lot of steps." Size, length, and repetitiveness are never themselves blockers. If in doubt about whether something is a real blocker, default to continuing rather than stopping — it's better to make a reasonable assumption, state it, and keep moving than to interrupt progress on a task that could have been finished.
|
|
51
|
+
|
|
52
|
+
## Don't mistake a sandbox artifact for a genuine blocker
|
|
53
|
+
A specific version of "this looks blocked but isn't" comes up constantly in coding-heavy big tasks: an error, failure, or missing capability that looks like it's stopping you, but is actually just an artifact of the sandbox environment rather than a real problem with the work. Before treating something as a genuine blocker, apply the same triage as the code-verification skill:
|
|
54
|
+
- Is it failing only because a credential/service/database isn't present in this sandbox, but would be in the user's real deployment environment? That's not a blocker on the work itself — keep going on everything else, note it plainly, and don't let it stop unrelated parts of the task.
|
|
55
|
+
- Is it a platform/OS-specific capability that genuinely isn't available here but is valid in the user's target environment? Same treatment — recognize the class, don't let it halt progress on everything else.
|
|
56
|
+
- Only escalate to the user as a real blocker once you've actually tried to resolve it (installed the missing piece, checked real documented behavior, matched declared versions) and confirmed it's not something you can work around or verify around — "this looks like an error" is a reason to investigate, not an automatic stop.
|
|
57
|
+
|
|
58
|
+
## When you do hit a genuine blocker
|
|
59
|
+
State plainly and specifically what is blocking you and what you need to proceed. Don't wrap it in a broader claim that the whole task is too big — isolate the actual blocker, keep working on everything around it that isn't blocked, and only pause the blocked portion.
|
|
60
|
+
|
|
61
|
+
## Reporting progress honestly
|
|
62
|
+
If a big task is still in progress and you must report status (e.g. the user asks), report the real state: what's actually done, what's actually left, and what's next — not an optimistic gloss that implies more is finished than is. If the job spans multiple domains/skills, report per domain (backend: done and verified; frontend: built, not yet tested; security: not yet started) rather than one aggregate "mostly done," since an aggregate status can hide an entire untouched domain. Honest incremental progress reporting is not the same thing as stopping early; the goal is to keep working while being truthful about where things stand.
|
|
63
|
+
`
|
|
64
|
+
});
|
|
65
|
+
export default BigTaskSkill;
|
|
66
|
+
//# sourceMappingURL=big-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"big-task.js","sourceRoot":"","sources":["../../src/skills/big-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC;IACxC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,+sBAA+sB;IAC5tB,KAAK,EAAE,EAAE,sDAAsD;KAC9D;IACD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDjB;CACA,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-verification.d.ts","sourceRoot":"","sources":["../../src/skills/code-verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AASrC,eAAO,MAAM,qBAAqB,aAoDhC,CAAC;AAEH,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import Skill from "../core/skill.js";
|
|
2
|
+
import { FsTools, } from "../tools/fs/index.js";
|
|
3
|
+
import { BashTools, } from "../tools/bash/index.js";
|
|
4
|
+
import { UtilTools } from "../tools/utils/index.js";
|
|
5
|
+
export const CodeVerificationSkill = () => new Skill({
|
|
6
|
+
name: "code-verification",
|
|
7
|
+
description: "Use this skill before handing off any non-trivial code change or new code to the user — in any language, not just TypeScript. Covers running the appropriate type checker, compiler, build, linter, or test suite to catch real bugs before the user sees them, and distinguishing genuine bugs from false positives caused by sandbox limitations (missing env vars/credentials, unavailable external services, a partial file the user pasted without its surrounding project, a platform-specific API that doesn't exist in this environment but would in the user's). Trigger this alongside node-backend, react-frontend, or any other language/framework skill for real code — not just when the user explicitly asks to 'check for bugs.' Also trigger when the user pastes an isolated code snippet/file and asks for review, since the same triage logic (real bug vs. missing-context artifact) applies there too.",
|
|
8
|
+
tools: [
|
|
9
|
+
...FsTools(),
|
|
10
|
+
...BashTools(),
|
|
11
|
+
...UtilTools()
|
|
12
|
+
],
|
|
13
|
+
instructions: `
|
|
14
|
+
# Code Verification Skill
|
|
15
|
+
|
|
16
|
+
## Purpose
|
|
17
|
+
Writing code that looks right is not the same as code that's actually right. Before handing anything back as finished, run the strongest available check for that language/project — a type checker, a compiler/build, a linter, a test suite — and read the actual output. "It looks correct" is not a substitute for "it typechecks/compiles/builds/passes," when any of those are available. This is the same principle as the framework skills' "verify it runs" sections, generalized across languages and pushed one step earlier: catch the bug before the user does, not after.
|
|
18
|
+
|
|
19
|
+
## Core rule
|
|
20
|
+
Never hand off non-trivial code changes without running the appropriate verification step for that language, if the tooling is available in the environment. If it genuinely isn't available (no compiler installed, no network access to fetch a toolchain, etc.), say so explicitly rather than silently skipping verification and presenting the code as checked.
|
|
21
|
+
|
|
22
|
+
## Choosing the right check per language
|
|
23
|
+
- **TypeScript**: run the project's type checker (\`tsc --noEmit\`, or the project's existing \`npm run typecheck\`/\`build\` script if one exists — prefer the project's own script over inventing a raw command, since it'll carry the right config/paths). Read the actual diagnostic output, not just the exit code.
|
|
24
|
+
- **JavaScript (no types)**: run the project's linter if configured (ESLint etc.) and, if there's a build step (bundler, transpiler), run that too — a build failure catches syntax and some logic errors even without types.
|
|
25
|
+
- **Python**: run a type checker if the project uses type hints and has one configured (mypy, pyright), run the linter if configured (ruff, flake8), and run the test suite if one exists. If there are no types/tests/linter at all, at minimum do a syntax/import check by attempting to run or import the module.
|
|
26
|
+
- **C / C++**: actually build it (the project's existing build system — CMake, Make, etc. — rather than inventing a raw compiler invocation that skips the project's real flags/includes). A change that "looks like valid C++" but doesn't compile is not verified; compile it and read the actual compiler errors/warnings, don't just proofread the diff.
|
|
27
|
+
- **Go**: \`go build\` and \`go vet\` at minimum; \`go test\` if a test suite exists.
|
|
28
|
+
- **Rust**: \`cargo build\` (or \`cargo check\` for a faster pass) and \`cargo clippy\` if available; \`cargo test\` if a test suite exists.
|
|
29
|
+
- **Any other language**: find and use whatever the project's own strongest static check and/or build step is (check for existing scripts/config in the project — a Makefile, CI config, or package manifest scripts section usually reveals the intended check) rather than skipping verification because it's not one of the above.
|
|
30
|
+
- **No compiler/type system at all available for the language/setup**: fall back to actually running the code (or the specific changed path, or a representative test call) rather than only reading it, so at least a runtime smoke-check happens.
|
|
31
|
+
|
|
32
|
+
## Triage: real bug vs. sandbox-context false positive
|
|
33
|
+
This is the step that's easy to get wrong in the other direction — treating every error the checker prints as something you must "fix" by guessing, even when the error is actually just an artifact of the code running outside its real environment. Before treating a diagnostic as a genuine bug to fix, ask:
|
|
34
|
+
|
|
35
|
+
- **Is this failing because a credential/env var/service isn't present in this sandbox, but would be in the user's real environment?** (A DB connection failing because there's no DB running here; an API call failing because there's no real API key configured here.) This is not a code bug — don't "fix" it by changing the code to work around a missing sandbox dependency. Note it to the user as expected-to-work-once-deployed-with-real-config, rather than silently declaring it broken or silently declaring it fine without checking which case it is.
|
|
36
|
+
- **Is this a partial file/snippet the user gave you, missing surrounding project context that would resolve the error** (an import of a sibling file that wasn't shared, a type defined elsewhere in their actual project)? If so, the error may be a genuine artifact of incomplete context rather than a real bug in what they actually have. Say this plainly rather than either (a) inventing a stub definition that might not match their real one, or (b) reporting a "bug" that may not exist in their full project. If a reasonable guess at the missing piece is possible and low-risk, you can offer it, clearly labeled as an assumption.
|
|
37
|
+
- **Is this a platform/OS/architecture-specific API that doesn't exist or behaves differently in this sandbox but is valid and available in the user's actual target environment** (a native mobile API, a specific OS syscall, a GPU/hardware-specific call, a browser-only API with no DOM here)? Recognize this class rather than treating "doesn't exist here" as "doesn't exist, full stop." Cross-check against documentation/knowledge of that platform rather than assuming the sandbox's behavior is universal truth.
|
|
38
|
+
- **Is this a dependency/version mismatch specific to the sandbox** (a package that isn't installed here but is listed correctly in the project's manifest, a version pinned differently) — try installing/matching the project's actual declared versions before concluding the code itself is wrong.
|
|
39
|
+
|
|
40
|
+
**How to tell the difference in practice:** try to actually resolve it first (install the missing package, check if an env var can be stubbed safely for a smoke test, look up the platform API's real documented behavior) before concluding it's environmental — don't jump to "must be a sandbox limitation" as an excuse to skip a check that's actually catching a real bug. The default assumption should be that a checker's output is real and worth investigating; "this is probably just the sandbox" is a conclusion you reach after trying to resolve it, not a first response to any red output.
|
|
41
|
+
|
|
42
|
+
## Fixing real bugs before handoff
|
|
43
|
+
Once you've triaged and confirmed a diagnostic is a genuine bug (not an environment artifact):
|
|
44
|
+
1. Fix it, then re-run the same check to confirm the specific diagnostic is actually gone — don't assume a fix worked without re-verifying, and don't move to the next error while a fix for a previous one is unconfirmed.
|
|
45
|
+
2. If fixing one diagnostic could plausibly introduce or reveal another (e.g. a type fix that changes a function's signature and affects callers), re-run the full check afterward, not just spot-check the one line you touched.
|
|
46
|
+
3. If a large number of diagnostics appear at once, apply the big-task skill's discipline — work through all of them, don't fix a handful and present the rest as "minor issues you can clean up later" unless they are genuinely out of scope (e.g. pre-existing issues in code you didn't touch, which should be mentioned but not silently fixed as scope creep either).
|
|
47
|
+
|
|
48
|
+
## What to tell the user
|
|
49
|
+
When you hand off verified code, be explicit and honest about what was actually checked versus what couldn't be:
|
|
50
|
+
- "Typechecked clean with \`tsc --noEmit\`" / "Builds successfully with \`cargo build\`" / "Ran the test suite, all passing" — state what you actually ran.
|
|
51
|
+
- If something couldn't be verified (no toolchain available, a check requires credentials/services not present in the sandbox), say so explicitly rather than implying full verification happened — e.g. "I couldn't run this against a real database in this sandbox, so the query logic is typechecked/reviewed but not execution-tested against live data."
|
|
52
|
+
- If you identified likely sandbox-only failures (env-dependent, platform-specific), name them specifically rather than bundling them silently into "a few warnings you can ignore" — the user should know exactly what was and wasn't confirmed, and why.
|
|
53
|
+
|
|
54
|
+
## Relationship to other skills
|
|
55
|
+
This skill is the generalized, language-agnostic version of the "verify it actually runs" sections already present in node-backend and react-frontend — apply this skill's triage logic there too rather than treating those sections as sufficient on their own for anything beyond "does the dev server start." For UI-facing changes specifically, this skill covers typecheck/build/compile-level correctness; actual behavioral/rendered verification in a browser is covered by the web-app-testing and ui-ux-design skills — use both together for a frontend change (this skill: does it compile/typecheck cleanly; web-app-testing: does it actually behave correctly when clicked/used).
|
|
56
|
+
`
|
|
57
|
+
});
|
|
58
|
+
export default CodeVerificationSkill;
|
|
59
|
+
//# sourceMappingURL=code-verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-verification.js","sourceRoot":"","sources":["../../src/skills/code-verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,EACH,OAAO,GACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,SAAS,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC;IACjD,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,83BAA83B;IAC34B,KAAK,EAAE;QACH,GAAG,OAAO,EAAE;QACZ,GAAG,SAAS,EAAE;QACd,GAAG,SAAS,EAAE;KACjB;IACD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CjB;CACA,CAAC,CAAC;AAEH,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-task-efficiency.d.ts","sourceRoot":"","sources":["../../src/skills/long-task-efficiency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAGrC,eAAO,MAAM,uBAAuB,aA6ClC,CAAC;AAEH,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Skill from "../core/skill.js";
|
|
2
|
+
import { UtilTools } from "../tools/utils/index.js";
|
|
3
|
+
export const LongTaskEfficiencySkill = () => new Skill({
|
|
4
|
+
name: "long-task-efficiency",
|
|
5
|
+
description: "Use this skill in combination with big-task and planner whenever a task will require many tool calls or a long session — large builds, big refactors, multi-file changes, long research jobs. Distinct from big-task: big-task is about not giving up on large scope; this skill is about not wasting turns/tool-calls/tokens while getting through that scope. Covers batching, parallelizing independent work, avoiding redundant reads/re-reads, checkpointing progress so restarts are cheap, and recognizing when to stop gold-plating. Trigger any time efficiency (speed, tool-call count, token usage) matters as much as eventual completion.",
|
|
6
|
+
tools: [
|
|
7
|
+
...UtilTools()
|
|
8
|
+
],
|
|
9
|
+
instructions: `
|
|
10
|
+
# Long Task Efficiency Skill
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
big-task solves the failure mode of stopping early. This skill solves a different failure mode: finishing a large task correctly but wastefully — re-reading the same file five times, making 40 sequential single-line edits that could've been 4 batched ones, or re-deriving context that was already gathered three turns ago. On long tasks, tool calls and tokens are the scarce resource; treat them accordingly.
|
|
14
|
+
|
|
15
|
+
## Batch, don't trickle
|
|
16
|
+
- If you know you need N independent pieces of information (read 5 files, search 3 unrelated queries, check 4 endpoints), issue them together rather than one-per-turn when the tool/interface allows concurrent or batched calls. Sequential one-at-a-time calls are only necessary when each call's input genuinely depends on the previous call's output.
|
|
17
|
+
- When editing many similar things (the same kind of change across many files), don't interleave a full re-plan between every single edit — read what you need once, then execute the batch of edits, checking in only at natural boundaries (e.g. after each file, not after each line).
|
|
18
|
+
- Combine related small operations into one call where the tool supports it (e.g. writing a whole file's content in one call rather than many small appends), rather than many tiny calls that each carry fixed overhead.
|
|
19
|
+
|
|
20
|
+
## Don't re-fetch what you already have
|
|
21
|
+
- Once you've read a file, hold its content/line numbers in working memory for the rest of that file's edits within the same phase of work — don't re-read it before every single edit unless something has actually changed it (another edit, a tool that mutated it, a long gap where you're not sure it's still current).
|
|
22
|
+
- If a prior tool call already answered a question (a file's contents, a search result, an API response), reuse that answer instead of calling again "to be safe" — re-verification is only warranted when something plausibly changed the underlying state since you last checked, not as a default habit.
|
|
23
|
+
- When resuming after a detour or error, re-check only the specific state that might have changed (e.g. "did that one file actually save") rather than re-reading the entire project tree from scratch.
|
|
24
|
+
|
|
25
|
+
## Parallelize independent work
|
|
26
|
+
- Identify which remaining sub-tasks are genuinely independent of each other (no shared file, no output-to-input dependency) and do them in whichever order/batching minimizes round trips, rather than defaulting to a rigid top-to-bottom list order when the list order was arbitrary.
|
|
27
|
+
- Dependencies matter more than list order: if task 7 needs task 3's output but task 4 doesn't depend on anything, task 4 can happen anytime — don't block on strict sequential list position when nothing actually requires it.
|
|
28
|
+
|
|
29
|
+
## Checkpoint so restarts are cheap
|
|
30
|
+
- On long tasks, keep enough state externally (todo list, files actually written to disk, clear commit-like checkpoints) that if the session is interrupted or context is compacted, resuming costs a quick status check, not redoing work. This pairs directly with the planner skill's todo list — keep it current enough that "what's left" is always answerable in one read.
|
|
31
|
+
- Prefer incremental, verifiable steps (write file → verify it → move on) over large speculative batches of unverified work, where a single mistake early on silently propagates through everything built after it and is expensive to find later.
|
|
32
|
+
|
|
33
|
+
## Know when to stop
|
|
34
|
+
- Match effort to what was actually asked. A quick internal script doesn't need the same verification depth as a production auth flow — calibrate thoroughness to stakes and explicit scope, not to a fixed maximal checklist applied uniformly everywhere.
|
|
35
|
+
- Recognize diminishing returns: once the core requirement is verifiably met, additional polishing passes need a reason (the user asked for more, or a real defect remains) — don't keep iterating on an already-satisfied requirement while genuinely pending scope elsewhere goes untouched.
|
|
36
|
+
- If you notice you're repeating a verification you already did with no new information since, that's a signal to move on rather than re-confirm.
|
|
37
|
+
|
|
38
|
+
## Signals you're being inefficient (self-check)
|
|
39
|
+
- You've read the same file more than twice without it changing in between.
|
|
40
|
+
- You're making single-line edits one tool-call at a time when several were already known and could've been batched.
|
|
41
|
+
- You're re-explaining/re-planning the same remaining steps in prose between every action instead of just doing the next action.
|
|
42
|
+
- You're verifying something a fourth time that passed the same check three times already.
|
|
43
|
+
- You're doing work clearly outside what was asked "while you're at it," at the cost of turns that were needed for the actual scope.
|
|
44
|
+
|
|
45
|
+
## What this does NOT mean
|
|
46
|
+
Efficiency is never a reason to skip a genuine verification step (see big-task and the framework/security/design skills for what counts as actually done) or to silently narrow scope. This skill governs *how* you move through necessary work quickly — it never licenses declaring something done without doing it, or skipping a real check to save a turn. When in doubt between "faster but slightly less certain" and "slower but verified," verified wins on anything production-facing; this skill's savings should come from cutting redundant/wasted motion, not from cutting corners.
|
|
47
|
+
`
|
|
48
|
+
});
|
|
49
|
+
export default LongTaskEfficiencySkill;
|
|
50
|
+
//# sourceMappingURL=long-task-efficiency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-task-efficiency.js","sourceRoot":"","sources":["../../src/skills/long-task-efficiency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC;IACnD,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,wnBAAwnB;IACroB,KAAK,EAAE;QACH,GAAG,SAAS,EAAE;KACjB;IACD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCjB;CACA,CAAC,CAAC;AAEH,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-backend.d.ts","sourceRoot":"","sources":["../../src/skills/node-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,kBAAkB,CAAC;AASrC,eAAO,MAAM,gBAAgB,aAuG3B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
|