@agntk/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +227 -0
- package/dist/advanced/index.d.ts +35 -0
- package/dist/advanced/index.d.ts.map +1 -0
- package/dist/advanced/index.js +52 -0
- package/dist/advanced/index.js.map +1 -0
- package/dist/agent.d.ts +46 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +381 -0
- package/dist/agent.js.map +1 -0
- package/dist/config/defaults.d.ts +10 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +34 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +11 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +54 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +222 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +912 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +119 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants.d.ts +17 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/evals/assertions.d.ts +54 -0
- package/dist/evals/assertions.d.ts.map +1 -0
- package/dist/evals/assertions.js +200 -0
- package/dist/evals/assertions.js.map +1 -0
- package/dist/evals/index.d.ts +9 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +8 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evals/runner.d.ts +34 -0
- package/dist/evals/runner.d.ts.map +1 -0
- package/dist/evals/runner.js +186 -0
- package/dist/evals/runner.js.map +1 -0
- package/dist/evals/types.d.ts +68 -0
- package/dist/evals/types.d.ts.map +1 -0
- package/dist/evals/types.js +5 -0
- package/dist/evals/types.js.map +1 -0
- package/dist/guardrails/built-ins.d.ts +48 -0
- package/dist/guardrails/built-ins.d.ts.map +1 -0
- package/dist/guardrails/built-ins.js +149 -0
- package/dist/guardrails/built-ins.js.map +1 -0
- package/dist/guardrails/index.d.ts +8 -0
- package/dist/guardrails/index.d.ts.map +1 -0
- package/dist/guardrails/index.js +7 -0
- package/dist/guardrails/index.js.map +1 -0
- package/dist/guardrails/runner.d.ts +49 -0
- package/dist/guardrails/runner.d.ts.map +1 -0
- package/dist/guardrails/runner.js +148 -0
- package/dist/guardrails/runner.js.map +1 -0
- package/dist/guardrails/types.d.ts +63 -0
- package/dist/guardrails/types.d.ts.map +1 -0
- package/dist/guardrails/types.js +22 -0
- package/dist/guardrails/types.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/engine.d.ts +130 -0
- package/dist/memory/engine.d.ts.map +1 -0
- package/dist/memory/engine.js +227 -0
- package/dist/memory/engine.js.map +1 -0
- package/dist/memory/extraction.d.ts +24 -0
- package/dist/memory/extraction.d.ts.map +1 -0
- package/dist/memory/extraction.js +130 -0
- package/dist/memory/extraction.js.map +1 -0
- package/dist/memory/loader.d.ts +20 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +73 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/memory/store.d.ts +42 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +120 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/tools.d.ts +39 -0
- package/dist/memory/tools.d.ts.map +1 -0
- package/dist/memory/tools.js +225 -0
- package/dist/memory/tools.js.map +1 -0
- package/dist/memory/types.d.ts +46 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/vectra-store.d.ts +31 -0
- package/dist/memory/vectra-store.d.ts.map +1 -0
- package/dist/memory/vectra-store.js +122 -0
- package/dist/memory/vectra-store.js.map +1 -0
- package/dist/models.d.ts +37 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +131 -0
- package/dist/models.js.map +1 -0
- package/dist/observability/index.d.ts +6 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/langfuse.d.ts +47 -0
- package/dist/observability/langfuse.d.ts.map +1 -0
- package/dist/observability/langfuse.js +112 -0
- package/dist/observability/langfuse.js.map +1 -0
- package/dist/observability/types.d.ts +37 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +5 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/pool/index.d.ts +7 -0
- package/dist/pool/index.d.ts.map +1 -0
- package/dist/pool/index.js +6 -0
- package/dist/pool/index.js.map +1 -0
- package/dist/pool/specialist-pool.d.ts +59 -0
- package/dist/pool/specialist-pool.d.ts.map +1 -0
- package/dist/pool/specialist-pool.js +224 -0
- package/dist/pool/specialist-pool.js.map +1 -0
- package/dist/pool/tools.d.ts +63 -0
- package/dist/pool/tools.d.ts.map +1 -0
- package/dist/pool/tools.js +83 -0
- package/dist/pool/tools.js.map +1 -0
- package/dist/pool/types.d.ts +79 -0
- package/dist/pool/types.d.ts.map +1 -0
- package/dist/pool/types.js +5 -0
- package/dist/pool/types.js.map +1 -0
- package/dist/presets/index.d.ts +5 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +5 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/role-registry.d.ts +41 -0
- package/dist/presets/role-registry.d.ts.map +1 -0
- package/dist/presets/role-registry.js +213 -0
- package/dist/presets/role-registry.js.map +1 -0
- package/dist/presets/roles.d.ts +105 -0
- package/dist/presets/roles.d.ts.map +1 -0
- package/dist/presets/roles.js +207 -0
- package/dist/presets/roles.js.map +1 -0
- package/dist/presets/sub-agent-configs.d.ts +19 -0
- package/dist/presets/sub-agent-configs.d.ts.map +1 -0
- package/dist/presets/sub-agent-configs.js +71 -0
- package/dist/presets/sub-agent-configs.js.map +1 -0
- package/dist/presets/tool-preset-registry.d.ts +34 -0
- package/dist/presets/tool-preset-registry.d.ts.map +1 -0
- package/dist/presets/tool-preset-registry.js +107 -0
- package/dist/presets/tool-preset-registry.js.map +1 -0
- package/dist/presets/tools.d.ts +278 -0
- package/dist/presets/tools.d.ts.map +1 -0
- package/dist/presets/tools.js +108 -0
- package/dist/presets/tools.js.map +1 -0
- package/dist/prompts/context.d.ts +47 -0
- package/dist/prompts/context.d.ts.map +1 -0
- package/dist/prompts/context.js +187 -0
- package/dist/prompts/context.js.map +1 -0
- package/dist/prompts/template.d.ts +17 -0
- package/dist/prompts/template.d.ts.map +1 -0
- package/dist/prompts/template.js +32 -0
- package/dist/prompts/template.js.map +1 -0
- package/dist/prompts/templates.d.ts +11 -0
- package/dist/prompts/templates.d.ts.map +1 -0
- package/dist/prompts/templates.js +115 -0
- package/dist/prompts/templates.js.map +1 -0
- package/dist/reflection.d.ts +48 -0
- package/dist/reflection.d.ts.map +1 -0
- package/dist/reflection.js +91 -0
- package/dist/reflection.js.map +1 -0
- package/dist/skills/index.d.ts +6 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +5 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +84 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +400 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/types.d.ts +66 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +6 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/streaming/data-parts.d.ts +163 -0
- package/dist/streaming/data-parts.d.ts.map +1 -0
- package/dist/streaming/data-parts.js +14 -0
- package/dist/streaming/data-parts.js.map +1 -0
- package/dist/streaming/index.d.ts +8 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +10 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/transient.d.ts +136 -0
- package/dist/streaming/transient.d.ts.map +1 -0
- package/dist/streaming/transient.js +201 -0
- package/dist/streaming/transient.js.map +1 -0
- package/dist/tools/approval.d.ts +67 -0
- package/dist/tools/approval.d.ts.map +1 -0
- package/dist/tools/approval.js +113 -0
- package/dist/tools/approval.js.map +1 -0
- package/dist/tools/ast-grep/cli.d.ts +16 -0
- package/dist/tools/ast-grep/cli.d.ts.map +1 -0
- package/dist/tools/ast-grep/cli.js +198 -0
- package/dist/tools/ast-grep/cli.js.map +1 -0
- package/dist/tools/ast-grep/constants.d.ts +24 -0
- package/dist/tools/ast-grep/constants.d.ts.map +1 -0
- package/dist/tools/ast-grep/constants.js +247 -0
- package/dist/tools/ast-grep/constants.js.map +1 -0
- package/dist/tools/ast-grep/downloader.d.ts +6 -0
- package/dist/tools/ast-grep/downloader.d.ts.map +1 -0
- package/dist/tools/ast-grep/downloader.js +137 -0
- package/dist/tools/ast-grep/downloader.js.map +1 -0
- package/dist/tools/ast-grep/index.d.ts +7 -0
- package/dist/tools/ast-grep/index.d.ts.map +1 -0
- package/dist/tools/ast-grep/index.js +6 -0
- package/dist/tools/ast-grep/index.js.map +1 -0
- package/dist/tools/ast-grep/tools.d.ts +33 -0
- package/dist/tools/ast-grep/tools.d.ts.map +1 -0
- package/dist/tools/ast-grep/tools.js +140 -0
- package/dist/tools/ast-grep/tools.js.map +1 -0
- package/dist/tools/ast-grep/types.d.ts +68 -0
- package/dist/tools/ast-grep/types.d.ts.map +1 -0
- package/dist/tools/ast-grep/types.js +2 -0
- package/dist/tools/ast-grep/types.js.map +1 -0
- package/dist/tools/ast-grep/utils.d.ts +4 -0
- package/dist/tools/ast-grep/utils.d.ts.map +1 -0
- package/dist/tools/ast-grep/utils.js +55 -0
- package/dist/tools/ast-grep/utils.js.map +1 -0
- package/dist/tools/browser/index.d.ts +6 -0
- package/dist/tools/browser/index.d.ts.map +1 -0
- package/dist/tools/browser/index.js +5 -0
- package/dist/tools/browser/index.js.map +1 -0
- package/dist/tools/browser/stream.d.ts +112 -0
- package/dist/tools/browser/stream.d.ts.map +1 -0
- package/dist/tools/browser/stream.js +228 -0
- package/dist/tools/browser/stream.js.map +1 -0
- package/dist/tools/browser/tool.d.ts +144 -0
- package/dist/tools/browser/tool.d.ts.map +1 -0
- package/dist/tools/browser/tool.js +214 -0
- package/dist/tools/browser/tool.js.map +1 -0
- package/dist/tools/browser/types.d.ts +216 -0
- package/dist/tools/browser/types.d.ts.map +1 -0
- package/dist/tools/browser/types.js +146 -0
- package/dist/tools/browser/types.js.map +1 -0
- package/dist/tools/deep-reasoning/constants.d.ts +11 -0
- package/dist/tools/deep-reasoning/constants.d.ts.map +1 -0
- package/dist/tools/deep-reasoning/constants.js +35 -0
- package/dist/tools/deep-reasoning/constants.js.map +1 -0
- package/dist/tools/deep-reasoning/engine.d.ts +20 -0
- package/dist/tools/deep-reasoning/engine.d.ts.map +1 -0
- package/dist/tools/deep-reasoning/engine.js +77 -0
- package/dist/tools/deep-reasoning/engine.js.map +1 -0
- package/dist/tools/deep-reasoning/index.d.ts +5 -0
- package/dist/tools/deep-reasoning/index.d.ts.map +1 -0
- package/dist/tools/deep-reasoning/index.js +7 -0
- package/dist/tools/deep-reasoning/index.js.map +1 -0
- package/dist/tools/deep-reasoning/tools.d.ts +12 -0
- package/dist/tools/deep-reasoning/tools.d.ts.map +1 -0
- package/dist/tools/deep-reasoning/tools.js +23 -0
- package/dist/tools/deep-reasoning/tools.js.map +1 -0
- package/dist/tools/deep-reasoning/types.d.ts +66 -0
- package/dist/tools/deep-reasoning/types.d.ts.map +1 -0
- package/dist/tools/deep-reasoning/types.js +13 -0
- package/dist/tools/deep-reasoning/types.js.map +1 -0
- package/dist/tools/factory.d.ts +109 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +166 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/file/index.d.ts +8 -0
- package/dist/tools/file/index.d.ts.map +1 -0
- package/dist/tools/file/index.js +8 -0
- package/dist/tools/file/index.js.map +1 -0
- package/dist/tools/file/tools.d.ts +45 -0
- package/dist/tools/file/tools.d.ts.map +1 -0
- package/dist/tools/file/tools.js +206 -0
- package/dist/tools/file/tools.js.map +1 -0
- package/dist/tools/glob/cli.d.ts +8 -0
- package/dist/tools/glob/cli.d.ts.map +1 -0
- package/dist/tools/glob/cli.js +168 -0
- package/dist/tools/glob/cli.js.map +1 -0
- package/dist/tools/glob/constants.d.ts +7 -0
- package/dist/tools/glob/constants.d.ts.map +1 -0
- package/dist/tools/glob/constants.js +17 -0
- package/dist/tools/glob/constants.js.map +1 -0
- package/dist/tools/glob/index.d.ts +6 -0
- package/dist/tools/glob/index.d.ts.map +1 -0
- package/dist/tools/glob/index.js +5 -0
- package/dist/tools/glob/index.js.map +1 -0
- package/dist/tools/glob/tools.d.ts +15 -0
- package/dist/tools/glob/tools.d.ts.map +1 -0
- package/dist/tools/glob/tools.js +74 -0
- package/dist/tools/glob/tools.js.map +1 -0
- package/dist/tools/glob/types.d.ts +20 -0
- package/dist/tools/glob/types.d.ts.map +1 -0
- package/dist/tools/glob/types.js +2 -0
- package/dist/tools/glob/types.js.map +1 -0
- package/dist/tools/glob/utils.d.ts +3 -0
- package/dist/tools/glob/utils.d.ts.map +1 -0
- package/dist/tools/glob/utils.js +20 -0
- package/dist/tools/glob/utils.js.map +1 -0
- package/dist/tools/grep/cli.d.ts +4 -0
- package/dist/tools/grep/cli.d.ts.map +1 -0
- package/dist/tools/grep/cli.js +224 -0
- package/dist/tools/grep/cli.js.map +1 -0
- package/dist/tools/grep/constants.d.ts +19 -0
- package/dist/tools/grep/constants.d.ts.map +1 -0
- package/dist/tools/grep/constants.js +115 -0
- package/dist/tools/grep/constants.js.map +1 -0
- package/dist/tools/grep/downloader.d.ts +3 -0
- package/dist/tools/grep/downloader.d.ts.map +1 -0
- package/dist/tools/grep/downloader.js +164 -0
- package/dist/tools/grep/downloader.js.map +1 -0
- package/dist/tools/grep/index.d.ts +7 -0
- package/dist/tools/grep/index.d.ts.map +1 -0
- package/dist/tools/grep/index.js +6 -0
- package/dist/tools/grep/index.js.map +1 -0
- package/dist/tools/grep/tools.d.ts +19 -0
- package/dist/tools/grep/tools.d.ts.map +1 -0
- package/dist/tools/grep/tools.js +82 -0
- package/dist/tools/grep/tools.js.map +1 -0
- package/dist/tools/grep/types.d.ts +37 -0
- package/dist/tools/grep/types.d.ts.map +1 -0
- package/dist/tools/grep/types.js +2 -0
- package/dist/tools/grep/types.js.map +1 -0
- package/dist/tools/grep/utils.d.ts +4 -0
- package/dist/tools/grep/utils.d.ts.map +1 -0
- package/dist/tools/grep/utils.js +41 -0
- package/dist/tools/grep/utils.js.map +1 -0
- package/dist/tools/index.d.ts +21 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +33 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/model-retry.d.ts +54 -0
- package/dist/tools/model-retry.d.ts.map +1 -0
- package/dist/tools/model-retry.js +110 -0
- package/dist/tools/model-retry.js.map +1 -0
- package/dist/tools/plan/constants.d.ts +18 -0
- package/dist/tools/plan/constants.d.ts.map +1 -0
- package/dist/tools/plan/constants.js +13 -0
- package/dist/tools/plan/constants.js.map +1 -0
- package/dist/tools/plan/index.d.ts +5 -0
- package/dist/tools/plan/index.d.ts.map +1 -0
- package/dist/tools/plan/index.js +7 -0
- package/dist/tools/plan/index.js.map +1 -0
- package/dist/tools/plan/tools.d.ts +16 -0
- package/dist/tools/plan/tools.d.ts.map +1 -0
- package/dist/tools/plan/tools.js +217 -0
- package/dist/tools/plan/tools.js.map +1 -0
- package/dist/tools/plan/types.d.ts +75 -0
- package/dist/tools/plan/types.d.ts.map +1 -0
- package/dist/tools/plan/types.js +16 -0
- package/dist/tools/plan/types.js.map +1 -0
- package/dist/tools/plan/utils.d.ts +9 -0
- package/dist/tools/plan/utils.d.ts.map +1 -0
- package/dist/tools/plan/utils.js +27 -0
- package/dist/tools/plan/utils.js.map +1 -0
- package/dist/tools/progress/index.d.ts +53 -0
- package/dist/tools/progress/index.d.ts.map +1 -0
- package/dist/tools/progress/index.js +144 -0
- package/dist/tools/progress/index.js.map +1 -0
- package/dist/tools/provider.d.ts +97 -0
- package/dist/tools/provider.d.ts.map +1 -0
- package/dist/tools/provider.js +178 -0
- package/dist/tools/provider.js.map +1 -0
- package/dist/tools/search-skills.d.ts +44 -0
- package/dist/tools/search-skills.d.ts.map +1 -0
- package/dist/tools/search-skills.js +134 -0
- package/dist/tools/search-skills.js.map +1 -0
- package/dist/tools/shell/background.d.ts +38 -0
- package/dist/tools/shell/background.d.ts.map +1 -0
- package/dist/tools/shell/background.js +229 -0
- package/dist/tools/shell/background.js.map +1 -0
- package/dist/tools/shell/constants.d.ts +10 -0
- package/dist/tools/shell/constants.d.ts.map +1 -0
- package/dist/tools/shell/constants.js +55 -0
- package/dist/tools/shell/constants.js.map +1 -0
- package/dist/tools/shell/index.d.ts +7 -0
- package/dist/tools/shell/index.d.ts.map +1 -0
- package/dist/tools/shell/index.js +5 -0
- package/dist/tools/shell/index.js.map +1 -0
- package/dist/tools/shell/tools.d.ts +22 -0
- package/dist/tools/shell/tools.d.ts.map +1 -0
- package/dist/tools/shell/tools.js +70 -0
- package/dist/tools/shell/tools.js.map +1 -0
- package/dist/tools/shell/types.d.ts +30 -0
- package/dist/tools/shell/types.d.ts.map +1 -0
- package/dist/tools/shell/types.js +10 -0
- package/dist/tools/shell/types.js.map +1 -0
- package/dist/tools/shell/utils.d.ts +7 -0
- package/dist/tools/shell/utils.d.ts.map +1 -0
- package/dist/tools/shell/utils.js +26 -0
- package/dist/tools/shell/utils.js.map +1 -0
- package/dist/tools/spawn-agent/index.d.ts +96 -0
- package/dist/tools/spawn-agent/index.d.ts.map +1 -0
- package/dist/tools/spawn-agent/index.js +168 -0
- package/dist/tools/spawn-agent/index.js.map +1 -0
- package/dist/tools/utils/errors.d.ts +21 -0
- package/dist/tools/utils/errors.d.ts.map +1 -0
- package/dist/tools/utils/errors.js +29 -0
- package/dist/tools/utils/errors.js.map +1 -0
- package/dist/tools/utils/shell.d.ts +23 -0
- package/dist/tools/utils/shell.d.ts.map +1 -0
- package/dist/tools/utils/shell.js +99 -0
- package/dist/tools/utils/shell.js.map +1 -0
- package/dist/tools/utils/tool-result.d.ts +6 -0
- package/dist/tools/utils/tool-result.d.ts.map +1 -0
- package/dist/tools/utils/tool-result.js +22 -0
- package/dist/tools/utils/tool-result.js.map +1 -0
- package/dist/types/agent.d.ts +218 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +6 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lifecycle.d.ts +218 -0
- package/dist/types/lifecycle.d.ts.map +1 -0
- package/dist/types/lifecycle.js +99 -0
- package/dist/types/lifecycle.js.map +1 -0
- package/dist/types/streaming.d.ts +120 -0
- package/dist/types/streaming.d.ts.map +1 -0
- package/dist/types/streaming.js +6 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/usage-limits.d.ts +63 -0
- package/dist/usage-limits.d.ts.map +1 -0
- package/dist/usage-limits.js +88 -0
- package/dist/usage-limits.js.map +1 -0
- package/dist/utils/logger.d.ts +35 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +149 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/workflow/builders/adapt.d.ts +20 -0
- package/dist/workflow/builders/adapt.d.ts.map +1 -0
- package/dist/workflow/builders/adapt.js +33 -0
- package/dist/workflow/builders/adapt.js.map +1 -0
- package/dist/workflow/builders/index.d.ts +8 -0
- package/dist/workflow/builders/index.d.ts.map +1 -0
- package/dist/workflow/builders/index.js +7 -0
- package/dist/workflow/builders/index.js.map +1 -0
- package/dist/workflow/builders/parallel.d.ts +25 -0
- package/dist/workflow/builders/parallel.d.ts.map +1 -0
- package/dist/workflow/builders/parallel.js +60 -0
- package/dist/workflow/builders/parallel.js.map +1 -0
- package/dist/workflow/builders/pipeline.d.ts +22 -0
- package/dist/workflow/builders/pipeline.d.ts.map +1 -0
- package/dist/workflow/builders/pipeline.js +48 -0
- package/dist/workflow/builders/pipeline.js.map +1 -0
- package/dist/workflow/builders/types.d.ts +54 -0
- package/dist/workflow/builders/types.d.ts.map +1 -0
- package/dist/workflow/builders/types.js +5 -0
- package/dist/workflow/builders/types.js.map +1 -0
- package/dist/workflow/durable-agent.d.ts +128 -0
- package/dist/workflow/durable-agent.d.ts.map +1 -0
- package/dist/workflow/durable-agent.js +323 -0
- package/dist/workflow/durable-agent.js.map +1 -0
- package/dist/workflow/durable-tool.d.ts +103 -0
- package/dist/workflow/durable-tool.d.ts.map +1 -0
- package/dist/workflow/durable-tool.js +173 -0
- package/dist/workflow/durable-tool.js.map +1 -0
- package/dist/workflow/hooks.d.ts +318 -0
- package/dist/workflow/hooks.d.ts.map +1 -0
- package/dist/workflow/hooks.js +629 -0
- package/dist/workflow/hooks.js.map +1 -0
- package/dist/workflow/index.d.ts +17 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +24 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/schedulers.d.ts +231 -0
- package/dist/workflow/schedulers.d.ts.map +1 -0
- package/dist/workflow/schedulers.js +250 -0
- package/dist/workflow/schedulers.js.map +1 -0
- package/dist/workflow/team/create-team.d.ts +34 -0
- package/dist/workflow/team/create-team.d.ts.map +1 -0
- package/dist/workflow/team/create-team.js +242 -0
- package/dist/workflow/team/create-team.js.map +1 -0
- package/dist/workflow/team/index.d.ts +9 -0
- package/dist/workflow/team/index.d.ts.map +1 -0
- package/dist/workflow/team/index.js +8 -0
- package/dist/workflow/team/index.js.map +1 -0
- package/dist/workflow/team/machines.d.ts +152 -0
- package/dist/workflow/team/machines.d.ts.map +1 -0
- package/dist/workflow/team/machines.js +197 -0
- package/dist/workflow/team/machines.js.map +1 -0
- package/dist/workflow/team/task-board.d.ts +47 -0
- package/dist/workflow/team/task-board.d.ts.map +1 -0
- package/dist/workflow/team/task-board.js +111 -0
- package/dist/workflow/team/task-board.js.map +1 -0
- package/dist/workflow/team/tools.d.ts +66 -0
- package/dist/workflow/team/tools.d.ts.map +1 -0
- package/dist/workflow/team/tools.js +100 -0
- package/dist/workflow/team/tools.js.map +1 -0
- package/dist/workflow/team/types.d.ts +109 -0
- package/dist/workflow/team/types.d.ts.map +1 -0
- package/dist/workflow/team/types.js +5 -0
- package/dist/workflow/team/types.js.map +1 -0
- package/dist/workflow/templates.d.ts +71 -0
- package/dist/workflow/templates.d.ts.map +1 -0
- package/dist/workflow/templates.js +132 -0
- package/dist/workflow/templates.js.map +1 -0
- package/dist/workflow/utils.d.ts +29 -0
- package/dist/workflow/utils.d.ts.map +1 -0
- package/dist/workflow/utils.js +84 -0
- package/dist/workflow/utils.js.map +1 -0
- package/dist/wrappers/best-of-n.d.ts +69 -0
- package/dist/wrappers/best-of-n.d.ts.map +1 -0
- package/dist/wrappers/best-of-n.js +242 -0
- package/dist/wrappers/best-of-n.js.map +1 -0
- package/package.json +101 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @agntk/core - Background Process Management Tool
|
|
3
|
+
*
|
|
4
|
+
* Manages long-running background processes with session tracking.
|
|
5
|
+
* Ported from @agntk/brain shell to consolidate shell tools.
|
|
6
|
+
*/
|
|
7
|
+
import { tool } from 'ai';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { spawn } from 'node:child_process';
|
|
10
|
+
import { isDangerousCommand } from '../utils/shell.js';
|
|
11
|
+
import { MAX_COMMAND_LENGTH, MAX_CWD_LENGTH } from './constants.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Session Store
|
|
14
|
+
// ============================================================================
|
|
15
|
+
const MAX_BUFFER = 1024 * 1024; // 1MB
|
|
16
|
+
const ROLLING_BUFFER = 512 * 1024; // 512KB
|
|
17
|
+
const backgroundSessions = new Map();
|
|
18
|
+
function generateSessionId() {
|
|
19
|
+
return `bg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
20
|
+
}
|
|
21
|
+
/** Get all sessions (for testing). */
|
|
22
|
+
export function getBackgroundSessions() {
|
|
23
|
+
return backgroundSessions;
|
|
24
|
+
}
|
|
25
|
+
/** Clear all sessions (for testing). */
|
|
26
|
+
export function clearBackgroundSessions() {
|
|
27
|
+
for (const session of backgroundSessions.values()) {
|
|
28
|
+
if (session.status === 'running') {
|
|
29
|
+
try {
|
|
30
|
+
session.process.kill('SIGTERM');
|
|
31
|
+
}
|
|
32
|
+
catch (_e) { /* ignore */ }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
backgroundSessions.clear();
|
|
36
|
+
}
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// Background Process Lifecycle
|
|
39
|
+
// ============================================================================
|
|
40
|
+
function startBackgroundProcess(command, options = {}) {
|
|
41
|
+
const sessionId = generateSessionId();
|
|
42
|
+
const { cwd = process.cwd(), env } = options;
|
|
43
|
+
const proc = spawn('bash', ['-c', command], {
|
|
44
|
+
cwd,
|
|
45
|
+
env: { ...process.env, ...env, TERM: 'dumb' },
|
|
46
|
+
detached: true,
|
|
47
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
48
|
+
});
|
|
49
|
+
const session = {
|
|
50
|
+
id: sessionId,
|
|
51
|
+
command,
|
|
52
|
+
process: proc,
|
|
53
|
+
stdout: '',
|
|
54
|
+
stderr: '',
|
|
55
|
+
startedAt: Date.now(),
|
|
56
|
+
status: 'running',
|
|
57
|
+
cwd,
|
|
58
|
+
};
|
|
59
|
+
proc.stdout?.on('data', (data) => {
|
|
60
|
+
session.stdout += data.toString();
|
|
61
|
+
if (session.stdout.length > MAX_BUFFER) {
|
|
62
|
+
session.stdout = session.stdout.slice(-ROLLING_BUFFER);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
proc.stderr?.on('data', (data) => {
|
|
66
|
+
session.stderr += data.toString();
|
|
67
|
+
if (session.stderr.length > MAX_BUFFER) {
|
|
68
|
+
session.stderr = session.stderr.slice(-ROLLING_BUFFER);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
proc.on('close', (code) => {
|
|
72
|
+
session.status = code === 0 ? 'completed' : 'failed';
|
|
73
|
+
session.exitCode = code ?? 1;
|
|
74
|
+
});
|
|
75
|
+
proc.on('error', () => {
|
|
76
|
+
session.status = 'failed';
|
|
77
|
+
session.exitCode = 1;
|
|
78
|
+
});
|
|
79
|
+
backgroundSessions.set(sessionId, session);
|
|
80
|
+
return session;
|
|
81
|
+
}
|
|
82
|
+
// ============================================================================
|
|
83
|
+
// Tool Factory
|
|
84
|
+
// ============================================================================
|
|
85
|
+
const backgroundInputSchema = z.object({
|
|
86
|
+
operation: z.enum(['start', 'status', 'output', 'stop', 'list']).describe('Operation to perform'),
|
|
87
|
+
command: z.string().max(MAX_COMMAND_LENGTH).optional().describe('Command to run (required for start)'),
|
|
88
|
+
sessionId: z.string().optional().describe('Session ID (required for status/output/stop)'),
|
|
89
|
+
cwd: z.string().max(MAX_CWD_LENGTH).optional().describe('Working directory (for start)'),
|
|
90
|
+
env: z.record(z.string()).optional().describe('Environment variables (for start)'),
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* Create a background process management tool.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const tools = { shell: createShellTool('/my/project'), background: createBackgroundTool() };
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export function createBackgroundTool() {
|
|
101
|
+
return tool({
|
|
102
|
+
description: `Run long-running processes in the background without blocking.
|
|
103
|
+
|
|
104
|
+
Operations:
|
|
105
|
+
- start: Start a new background process, returns session ID
|
|
106
|
+
- status: Check if a process is still running
|
|
107
|
+
- output: Get stdout/stderr from a running or completed process
|
|
108
|
+
- stop: Terminate a background process
|
|
109
|
+
- list: List all active background sessions
|
|
110
|
+
|
|
111
|
+
Use this tool for:
|
|
112
|
+
- Development servers (npm run dev, python -m http.server)
|
|
113
|
+
- Long-running builds or tests
|
|
114
|
+
- Watch commands (npm run watch)
|
|
115
|
+
- Database servers or other daemons
|
|
116
|
+
|
|
117
|
+
Examples:
|
|
118
|
+
- { "operation": "start", "command": "npm run dev" }
|
|
119
|
+
- { "operation": "status", "sessionId": "bg-123-abc" }
|
|
120
|
+
- { "operation": "output", "sessionId": "bg-123-abc" }
|
|
121
|
+
- { "operation": "stop", "sessionId": "bg-123-abc" }
|
|
122
|
+
- { "operation": "list" }`,
|
|
123
|
+
inputSchema: backgroundInputSchema,
|
|
124
|
+
execute: async ({ operation, command, sessionId, cwd, env }) => {
|
|
125
|
+
switch (operation) {
|
|
126
|
+
case 'start': {
|
|
127
|
+
if (!command) {
|
|
128
|
+
return JSON.stringify({ success: false, error: 'Command is required for start operation' });
|
|
129
|
+
}
|
|
130
|
+
if (isDangerousCommand(command)) {
|
|
131
|
+
return JSON.stringify({ success: false, error: 'Command blocked for safety', blocked: true });
|
|
132
|
+
}
|
|
133
|
+
const session = startBackgroundProcess(command, { cwd, env });
|
|
134
|
+
return JSON.stringify({
|
|
135
|
+
success: true,
|
|
136
|
+
sessionId: session.id,
|
|
137
|
+
command: command.slice(0, 100),
|
|
138
|
+
status: 'running',
|
|
139
|
+
message: 'Process started in background. Use status/output to monitor.',
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
case 'status': {
|
|
143
|
+
if (!sessionId) {
|
|
144
|
+
return JSON.stringify({ success: false, error: 'Session ID is required for status operation' });
|
|
145
|
+
}
|
|
146
|
+
const session = backgroundSessions.get(sessionId);
|
|
147
|
+
if (!session) {
|
|
148
|
+
return JSON.stringify({ success: false, error: `Session not found: ${sessionId}` });
|
|
149
|
+
}
|
|
150
|
+
return JSON.stringify({
|
|
151
|
+
success: true,
|
|
152
|
+
sessionId: session.id,
|
|
153
|
+
status: session.status,
|
|
154
|
+
exitCode: session.exitCode,
|
|
155
|
+
runningFor: session.status === 'running'
|
|
156
|
+
? Math.round((Date.now() - session.startedAt) / 1000) + 's'
|
|
157
|
+
: undefined,
|
|
158
|
+
command: session.command.slice(0, 100),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
case 'output': {
|
|
162
|
+
if (!sessionId) {
|
|
163
|
+
return JSON.stringify({ success: false, error: 'Session ID is required for output operation' });
|
|
164
|
+
}
|
|
165
|
+
const session = backgroundSessions.get(sessionId);
|
|
166
|
+
if (!session) {
|
|
167
|
+
return JSON.stringify({ success: false, error: `Session not found: ${sessionId}` });
|
|
168
|
+
}
|
|
169
|
+
return JSON.stringify({
|
|
170
|
+
success: true,
|
|
171
|
+
sessionId: session.id,
|
|
172
|
+
status: session.status,
|
|
173
|
+
stdout: session.stdout.slice(-10000),
|
|
174
|
+
stderr: session.stderr.slice(-5000),
|
|
175
|
+
exitCode: session.exitCode,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
case 'stop': {
|
|
179
|
+
if (!sessionId) {
|
|
180
|
+
return JSON.stringify({ success: false, error: 'Session ID is required for stop operation' });
|
|
181
|
+
}
|
|
182
|
+
const session = backgroundSessions.get(sessionId);
|
|
183
|
+
if (!session) {
|
|
184
|
+
return JSON.stringify({ success: false, error: `Session not found: ${sessionId}` });
|
|
185
|
+
}
|
|
186
|
+
if (session.status !== 'running') {
|
|
187
|
+
return JSON.stringify({
|
|
188
|
+
success: true,
|
|
189
|
+
message: `Session already ${session.status}`,
|
|
190
|
+
exitCode: session.exitCode,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
session.process.kill('SIGTERM');
|
|
195
|
+
session.status = 'stopped';
|
|
196
|
+
setTimeout(() => {
|
|
197
|
+
try {
|
|
198
|
+
if (session.status === 'running') {
|
|
199
|
+
session.process.kill('SIGKILL');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (_e) { /* ignore */ }
|
|
203
|
+
}, 5000);
|
|
204
|
+
return JSON.stringify({ success: true, message: 'Process terminated', sessionId: session.id });
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
return JSON.stringify({
|
|
208
|
+
success: false,
|
|
209
|
+
error: `Failed to stop process: ${error instanceof Error ? error.message : String(error)}`,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
case 'list': {
|
|
214
|
+
const sessions = Array.from(backgroundSessions.values()).map((s) => ({
|
|
215
|
+
sessionId: s.id,
|
|
216
|
+
command: s.command.slice(0, 50),
|
|
217
|
+
status: s.status,
|
|
218
|
+
startedAt: new Date(s.startedAt).toISOString(),
|
|
219
|
+
exitCode: s.exitCode,
|
|
220
|
+
}));
|
|
221
|
+
return JSON.stringify({ success: true, count: sessions.length, sessions });
|
|
222
|
+
}
|
|
223
|
+
default:
|
|
224
|
+
return JSON.stringify({ success: false, error: `Unknown operation: ${operation}` });
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../../../src/tools/shell/background.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAkBjE,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AACtC,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAE3C,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEhE,SAAS,iBAAiB;IACxB,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,uBAAuB;IACrC,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,EAAW,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,kBAAkB,CAAC,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E,SAAS,sBAAsB,CAC7B,OAAe,EACf,UAA0D,EAAE;IAE5D,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAE7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;QAC1C,GAAG;QACH,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QAC7C,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAsB;QACjC,EAAE,EAAE,SAAS;QACb,OAAO;QACP,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,MAAM,EAAE,SAAS;QACjB,GAAG;KACJ,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACvC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACvC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACvC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACvC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,OAAO,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrD,OAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACpB,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC1B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACjG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACtG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACzF,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACxF,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACnF,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;0BAoBS;QACtB,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;YAC7D,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAC;oBAC9F,CAAC;oBACD,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;wBAChC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBAChG,CAAC;oBAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;oBAC9D,OAAO,IAAI,CAAC,SAAS,CAAC;wBACpB,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBAC9B,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,8DAA8D;qBACxE,CAAC,CAAC;gBACL,CAAC;gBAED,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC,CAAC;oBAClG,CAAC;oBACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAClD,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC,CAAC;oBACtF,CAAC;oBACD,OAAO,IAAI,CAAC,SAAS,CAAC;wBACpB,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS;4BACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG;4BAC3D,CAAC,CAAC,SAAS;wBACb,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;qBACvC,CAAC,CAAC;gBACL,CAAC;gBAED,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC,CAAC;oBAClG,CAAC;oBACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAClD,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC,CAAC;oBACtF,CAAC;oBACD,OAAO,IAAI,CAAC,SAAS,CAAC;wBACpB,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;wBACpC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;wBACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBAED,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC,CAAC;oBAChG,CAAC;oBACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAClD,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC,CAAC;oBACtF,CAAC;oBACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACjC,OAAO,IAAI,CAAC,SAAS,CAAC;4BACpB,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,mBAAmB,OAAO,CAAC,MAAM,EAAE;4BAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;yBAC3B,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC;wBACH,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAChC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;wBAC3B,UAAU,CAAC,GAAG,EAAE;4BACd,IAAI,CAAC;gCACH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oCACjC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gCAClC,CAAC;4BACH,CAAC;4BAAC,OAAO,EAAW,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;wBACxC,CAAC,EAAE,IAAI,CAAC,CAAC;wBACT,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjG,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,IAAI,CAAC,SAAS,CAAC;4BACpB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;yBAC3F,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACnE,SAAS,EAAE,CAAC,CAAC,EAAE;wBACf,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;wBAC/B,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;wBAC9C,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC,CAAC,CAAC;oBACJ,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7E,CAAC;gBAED;oBACE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell tool constants
|
|
3
|
+
*/
|
|
4
|
+
export declare const SHELL_DESCRIPTION = "Execute shell commands for tasks that specialized tools cannot accomplish.\nThis tool runs bash commands with safety checks and optional allowlisting.\n\nWhen to use this tool:\n- Running build commands (npm run build, make, cargo build)\n- Installing packages (npm install, pip install)\n- Running scripts (./scripts/deploy.sh)\n- Git operations not covered by specialized tools (git stash, git cherry-pick)\n- System inspection (ls, find, df, du)\n- Development servers (npm run dev, python -m http.server)\n\nWhen NOT to use this tool:\n- Reading/writing files \u2192 use fs tool\n- Searching code \u2192 use fs tool with grep action\n- Background processes that need monitoring \u2192 use delegate tool with background action\n- Any task where a specialized tool exists\n\nSafety features:\n- Dangerous command patterns are blocked (rm -rf /, sudo, etc.)\n- Interactive commands are rejected (vim, nano, htop)\n- Commands can be allowlisted for repeated use without re-confirmation\n- Timeout protection (default 30s, max 5min)\n\nCommand allowlisting:\nUse allow: true on first execution to add a command pattern to the allowlist.\nSubsequent calls with the same command won't require the \"allow\" flag.\nThis is useful for commands you'll run repeatedly (npm test, make build, etc.)\n\nParameters explained:\n- command: Required. The bash command to execute.\n- cwd: Working directory (default: project root).\n- timeout: Timeout in milliseconds (default: 30000, max: 300000).\n- allow: If true, add this command pattern to the allowlist.\n- stream: If true, stream output in chunks (for long-running commands).\n\nYou should:\n1. Prefer specialized tools when available\n2. Use allow: true for commands you'll run repeatedly\n3. Set appropriate timeout for long-running commands\n4. Use stream: true for commands with continuous output\n5. Check exitCode to determine success (0 = success)\n6. Review stderr even on success for warnings";
|
|
5
|
+
export declare const DEFAULT_TIMEOUT = 30000;
|
|
6
|
+
export declare const MAX_TIMEOUT = 300000;
|
|
7
|
+
export declare const MAX_COMMAND_LENGTH = 10000;
|
|
8
|
+
export declare const MAX_CWD_LENGTH = 1000;
|
|
9
|
+
export declare const INTERACTIVE_COMMANDS: readonly ["vi", "vim", "nvim", "nano", "emacs", "pico", "htop", "top", "less", "more", "man", "screen", "tmux", "ssh", "telnet", "ftp"];
|
|
10
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,iBAAiB,65DAyCgB,CAAC;AAE/C,eAAO,MAAM,eAAe,QAAQ,CAAC;AACrC,eAAO,MAAM,WAAW,SAAS,CAAC;AAClC,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,eAAO,MAAM,oBAAoB,yIAIvB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell tool constants
|
|
3
|
+
*/
|
|
4
|
+
export const SHELL_DESCRIPTION = `Execute shell commands for tasks that specialized tools cannot accomplish.
|
|
5
|
+
This tool runs bash commands with safety checks and optional allowlisting.
|
|
6
|
+
|
|
7
|
+
When to use this tool:
|
|
8
|
+
- Running build commands (npm run build, make, cargo build)
|
|
9
|
+
- Installing packages (npm install, pip install)
|
|
10
|
+
- Running scripts (./scripts/deploy.sh)
|
|
11
|
+
- Git operations not covered by specialized tools (git stash, git cherry-pick)
|
|
12
|
+
- System inspection (ls, find, df, du)
|
|
13
|
+
- Development servers (npm run dev, python -m http.server)
|
|
14
|
+
|
|
15
|
+
When NOT to use this tool:
|
|
16
|
+
- Reading/writing files → use fs tool
|
|
17
|
+
- Searching code → use fs tool with grep action
|
|
18
|
+
- Background processes that need monitoring → use delegate tool with background action
|
|
19
|
+
- Any task where a specialized tool exists
|
|
20
|
+
|
|
21
|
+
Safety features:
|
|
22
|
+
- Dangerous command patterns are blocked (rm -rf /, sudo, etc.)
|
|
23
|
+
- Interactive commands are rejected (vim, nano, htop)
|
|
24
|
+
- Commands can be allowlisted for repeated use without re-confirmation
|
|
25
|
+
- Timeout protection (default 30s, max 5min)
|
|
26
|
+
|
|
27
|
+
Command allowlisting:
|
|
28
|
+
Use allow: true on first execution to add a command pattern to the allowlist.
|
|
29
|
+
Subsequent calls with the same command won't require the "allow" flag.
|
|
30
|
+
This is useful for commands you'll run repeatedly (npm test, make build, etc.)
|
|
31
|
+
|
|
32
|
+
Parameters explained:
|
|
33
|
+
- command: Required. The bash command to execute.
|
|
34
|
+
- cwd: Working directory (default: project root).
|
|
35
|
+
- timeout: Timeout in milliseconds (default: 30000, max: 300000).
|
|
36
|
+
- allow: If true, add this command pattern to the allowlist.
|
|
37
|
+
- stream: If true, stream output in chunks (for long-running commands).
|
|
38
|
+
|
|
39
|
+
You should:
|
|
40
|
+
1. Prefer specialized tools when available
|
|
41
|
+
2. Use allow: true for commands you'll run repeatedly
|
|
42
|
+
3. Set appropriate timeout for long-running commands
|
|
43
|
+
4. Use stream: true for commands with continuous output
|
|
44
|
+
5. Check exitCode to determine success (0 = success)
|
|
45
|
+
6. Review stderr even on success for warnings`;
|
|
46
|
+
export const DEFAULT_TIMEOUT = 30000;
|
|
47
|
+
export const MAX_TIMEOUT = 300000;
|
|
48
|
+
export const MAX_COMMAND_LENGTH = 10000;
|
|
49
|
+
export const MAX_CWD_LENGTH = 1000;
|
|
50
|
+
export const INTERACTIVE_COMMANDS = [
|
|
51
|
+
'vi', 'vim', 'nvim', 'nano', 'emacs', 'pico',
|
|
52
|
+
'htop', 'top', 'less', 'more', 'man',
|
|
53
|
+
'screen', 'tmux', 'ssh', 'telnet', 'ftp',
|
|
54
|
+
];
|
|
55
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/tools/shell/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CAyCa,CAAC;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;IACpC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK;CAChC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createShellTool, shellTool, executeShellCommand } from './tools.js';
|
|
2
|
+
export { createBackgroundTool, clearBackgroundSessions, getBackgroundSessions } from './background.js';
|
|
3
|
+
export type { BackgroundSession } from './background.js';
|
|
4
|
+
export { addToAllowlist, clearAllowlist, getAllowlist } from './utils.js';
|
|
5
|
+
export type { ShellInput, ShellResult } from './types.js';
|
|
6
|
+
export { SHELL_DESCRIPTION, DEFAULT_TIMEOUT, MAX_TIMEOUT, INTERACTIVE_COMMANDS, } from './constants.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpG,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createShellTool, shellTool, executeShellCommand } from './tools.js';
|
|
2
|
+
export { createBackgroundTool, clearBackgroundSessions, getBackgroundSessions } from './background.js';
|
|
3
|
+
export { addToAllowlist, clearAllowlist, getAllowlist } from './utils.js';
|
|
4
|
+
export { SHELL_DESCRIPTION, DEFAULT_TIMEOUT, MAX_TIMEOUT, INTERACTIVE_COMMANDS, } from './constants.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/shell/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAEpG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare function createShellTool(workspaceRoot: string): import("ai").Tool<{
|
|
2
|
+
command: string;
|
|
3
|
+
timeout?: number | undefined;
|
|
4
|
+
cwd?: string | undefined;
|
|
5
|
+
allow?: boolean | undefined;
|
|
6
|
+
stream?: boolean | undefined;
|
|
7
|
+
}, string>;
|
|
8
|
+
export declare const shellTool: import("ai").Tool<{
|
|
9
|
+
command: string;
|
|
10
|
+
timeout?: number | undefined;
|
|
11
|
+
cwd?: string | undefined;
|
|
12
|
+
allow?: boolean | undefined;
|
|
13
|
+
stream?: boolean | undefined;
|
|
14
|
+
}, string>;
|
|
15
|
+
export declare const executeShellCommand: import("ai").ToolExecuteFunction<{
|
|
16
|
+
command: string;
|
|
17
|
+
timeout?: number | undefined;
|
|
18
|
+
cwd?: string | undefined;
|
|
19
|
+
allow?: boolean | undefined;
|
|
20
|
+
stream?: boolean | undefined;
|
|
21
|
+
}, string>;
|
|
22
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/tools.ts"],"names":[],"mappings":"AAUA,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM;;;;;;WAwEpD;AAED,eAAO,MAAM,SAAS;;;;;;UAAiC,CAAC;AAGxD,eAAO,MAAM,mBAAmB;;;;;;UAAqB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { executeCommand, isDangerousCommand } from '../utils/shell.js';
|
|
3
|
+
import { success, error } from '../utils/tool-result.js';
|
|
4
|
+
import { ToolError, ToolErrorType } from '../utils/errors.js';
|
|
5
|
+
import { SHELL_DESCRIPTION, DEFAULT_TIMEOUT } from './constants.js';
|
|
6
|
+
import { shellInputSchema } from './types.js';
|
|
7
|
+
import { isInteractiveCommand, isCommandAllowed, addToAllowlist } from './utils.js';
|
|
8
|
+
export function createShellTool(workspaceRoot) {
|
|
9
|
+
return tool({
|
|
10
|
+
description: SHELL_DESCRIPTION,
|
|
11
|
+
inputSchema: shellInputSchema,
|
|
12
|
+
execute: async (input) => {
|
|
13
|
+
const { command, cwd, timeout = DEFAULT_TIMEOUT, allow = false, stream = false } = input;
|
|
14
|
+
if (isDangerousCommand(command)) {
|
|
15
|
+
throw new ToolError('Command blocked for safety. This command pattern is potentially destructive.', ToolErrorType.COMMAND_BLOCKED, { command: command.slice(0, 100), patterns: 'rm -rf, sudo, shutdown, etc.' });
|
|
16
|
+
}
|
|
17
|
+
if (isInteractiveCommand(command)) {
|
|
18
|
+
const firstWord = command.trim().split(/\s+/)[0];
|
|
19
|
+
return error(`Interactive command '${firstWord}' not supported`, {
|
|
20
|
+
suggestion: 'Use the fs tool to read/write files, or run non-interactive alternatives.',
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (allow && !isCommandAllowed(command)) {
|
|
24
|
+
addToAllowlist(command);
|
|
25
|
+
}
|
|
26
|
+
const effectiveCwd = cwd ?? workspaceRoot;
|
|
27
|
+
const result = await executeCommand(command, {
|
|
28
|
+
cwd: effectiveCwd,
|
|
29
|
+
timeout,
|
|
30
|
+
maxBuffer: stream ? 10 * 1024 * 1024 : 1024 * 1024,
|
|
31
|
+
});
|
|
32
|
+
if (result.error) {
|
|
33
|
+
return error(result.error, {
|
|
34
|
+
command: command.slice(0, 100),
|
|
35
|
+
cwd: effectiveCwd,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (result.killed) {
|
|
39
|
+
return error('Command timed out', {
|
|
40
|
+
timeout,
|
|
41
|
+
durationMs: result.durationMs,
|
|
42
|
+
stdoutPreview: result.stdout.slice(0, 500),
|
|
43
|
+
stderrPreview: result.stderr.slice(0, 500),
|
|
44
|
+
hint: 'Increase timeout or use delegate with background action for long-running commands.',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const output = {
|
|
48
|
+
stdout: result.stdout,
|
|
49
|
+
stderr: result.stderr,
|
|
50
|
+
exitCode: result.exitCode,
|
|
51
|
+
durationMs: Math.round(result.durationMs),
|
|
52
|
+
};
|
|
53
|
+
if (result.exitCode !== 0) {
|
|
54
|
+
return success({
|
|
55
|
+
...output,
|
|
56
|
+
status: 'failed',
|
|
57
|
+
hint: 'Non-zero exit code indicates command failure. Check stderr for details.',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return success({
|
|
61
|
+
...output,
|
|
62
|
+
status: 'success',
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export const shellTool = createShellTool(process.cwd());
|
|
68
|
+
// Direct export for testing (bypasses optional `execute` type from AI SDK)
|
|
69
|
+
export const executeShellCommand = shellTool.execute;
|
|
70
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/shell/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const shellInputSchema: z.ZodObject<{
|
|
3
|
+
command: z.ZodString;
|
|
4
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
5
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
allow: z.ZodOptional<z.ZodBoolean>;
|
|
7
|
+
stream: z.ZodOptional<z.ZodBoolean>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
command: string;
|
|
10
|
+
timeout?: number | undefined;
|
|
11
|
+
cwd?: string | undefined;
|
|
12
|
+
allow?: boolean | undefined;
|
|
13
|
+
stream?: boolean | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
command: string;
|
|
16
|
+
timeout?: number | undefined;
|
|
17
|
+
cwd?: string | undefined;
|
|
18
|
+
allow?: boolean | undefined;
|
|
19
|
+
stream?: boolean | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export type ShellInput = z.infer<typeof shellInputSchema>;
|
|
22
|
+
export interface ShellResult {
|
|
23
|
+
stdout: string;
|
|
24
|
+
stderr: string;
|
|
25
|
+
exitCode: number;
|
|
26
|
+
durationMs: number;
|
|
27
|
+
status: 'success' | 'failed';
|
|
28
|
+
hint?: string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MAX_COMMAND_LENGTH, MAX_CWD_LENGTH, MAX_TIMEOUT } from './constants.js';
|
|
3
|
+
export const shellInputSchema = z.object({
|
|
4
|
+
command: z.string().max(MAX_COMMAND_LENGTH).describe('Bash command to execute'),
|
|
5
|
+
cwd: z.string().max(MAX_CWD_LENGTH).optional().describe('Working directory'),
|
|
6
|
+
timeout: z.number().min(100).max(MAX_TIMEOUT).optional().describe('Timeout in ms (default: 30000)'),
|
|
7
|
+
allow: z.boolean().optional().describe('Add to allowlist for future calls'),
|
|
8
|
+
stream: z.boolean().optional().describe('Stream output (for long commands)'),
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/shell/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC/E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACnG,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC3E,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAC7E,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function isInteractiveCommand(command: string): boolean;
|
|
2
|
+
export declare function getCommandPattern(command: string): string;
|
|
3
|
+
export declare function isCommandAllowed(command: string): boolean;
|
|
4
|
+
export declare function addToAllowlist(command: string): void;
|
|
5
|
+
export declare function clearAllowlist(): void;
|
|
6
|
+
export declare function getAllowlist(): string[];
|
|
7
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tools/shell/utils.ts"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGpD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { INTERACTIVE_COMMANDS } from './constants.js';
|
|
2
|
+
const allowedCommands = new Set();
|
|
3
|
+
export function isInteractiveCommand(command) {
|
|
4
|
+
const firstWord = command.trim().split(/\s+/)[0];
|
|
5
|
+
return firstWord ? INTERACTIVE_COMMANDS.includes(firstWord) : false;
|
|
6
|
+
}
|
|
7
|
+
export function getCommandPattern(command) {
|
|
8
|
+
const normalized = command.trim().replace(/\s+/g, ' ');
|
|
9
|
+
const firstWord = normalized.split(' ')[0];
|
|
10
|
+
return firstWord ?? normalized;
|
|
11
|
+
}
|
|
12
|
+
export function isCommandAllowed(command) {
|
|
13
|
+
const pattern = getCommandPattern(command);
|
|
14
|
+
return allowedCommands.has(pattern);
|
|
15
|
+
}
|
|
16
|
+
export function addToAllowlist(command) {
|
|
17
|
+
const pattern = getCommandPattern(command);
|
|
18
|
+
allowedCommands.add(pattern);
|
|
19
|
+
}
|
|
20
|
+
export function clearAllowlist() {
|
|
21
|
+
allowedCommands.clear();
|
|
22
|
+
}
|
|
23
|
+
export function getAllowlist() {
|
|
24
|
+
return Array.from(allowedCommands);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tools/shell/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,SAAS,CAAC,CAAC,CAAE,oBAA0C,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,SAAS,IAAI,UAAU,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,eAAe,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @agntk/core - Spawn Agent Tool
|
|
3
|
+
* Tool for spawning sub-agents with streaming output
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
export interface SpawnAgentOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Maximum spawn depth to prevent infinite recursion
|
|
9
|
+
* Sub-agents spawned by this tool will have depth-1
|
|
10
|
+
*/
|
|
11
|
+
maxSpawnDepth?: number;
|
|
12
|
+
/**
|
|
13
|
+
* Current spawn depth (0 = main agent)
|
|
14
|
+
*/
|
|
15
|
+
currentDepth?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Agent factory function - must be provided to enable spawning
|
|
18
|
+
* This is called to create the sub-agent instance
|
|
19
|
+
*/
|
|
20
|
+
createAgent?: (options: {
|
|
21
|
+
role: string;
|
|
22
|
+
instructions?: string;
|
|
23
|
+
tools?: string[];
|
|
24
|
+
maxSpawnDepth?: number;
|
|
25
|
+
}) => {
|
|
26
|
+
stream: (input: {
|
|
27
|
+
prompt: string;
|
|
28
|
+
}) => {
|
|
29
|
+
fullStream: AsyncIterable<{
|
|
30
|
+
type: string;
|
|
31
|
+
textDelta?: string;
|
|
32
|
+
}>;
|
|
33
|
+
text: Promise<string>;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Optional callback for streaming sub-agent output
|
|
38
|
+
* Called with each text delta chunk
|
|
39
|
+
*/
|
|
40
|
+
onStream?: (data: SubAgentStreamData) => void;
|
|
41
|
+
}
|
|
42
|
+
export interface SubAgentStreamData {
|
|
43
|
+
type: 'sub-agent-stream';
|
|
44
|
+
agentId: string;
|
|
45
|
+
role: string;
|
|
46
|
+
text: string;
|
|
47
|
+
status: 'streaming' | 'complete';
|
|
48
|
+
}
|
|
49
|
+
export declare const spawnAgentParametersSchema: z.ZodObject<{
|
|
50
|
+
task: z.ZodString;
|
|
51
|
+
role: z.ZodDefault<z.ZodEnum<["coder", "researcher", "analyst", "generic"]>>;
|
|
52
|
+
context: z.ZodOptional<z.ZodString>;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
role: "generic" | "coder" | "researcher" | "analyst";
|
|
55
|
+
task: string;
|
|
56
|
+
context?: string | undefined;
|
|
57
|
+
}, {
|
|
58
|
+
task: string;
|
|
59
|
+
role?: "generic" | "coder" | "researcher" | "analyst" | undefined;
|
|
60
|
+
context?: string | undefined;
|
|
61
|
+
}>;
|
|
62
|
+
export type SpawnAgentInput = z.infer<typeof spawnAgentParametersSchema>;
|
|
63
|
+
export interface SpawnAgentResult {
|
|
64
|
+
success: boolean;
|
|
65
|
+
agentId?: string;
|
|
66
|
+
role?: string;
|
|
67
|
+
summary?: string;
|
|
68
|
+
message?: string;
|
|
69
|
+
error?: string;
|
|
70
|
+
suggestion?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Creates a spawn agent tool definition for use with AI SDK
|
|
74
|
+
*
|
|
75
|
+
* @param options - Spawn options including depth limits, agent factory, and stream callback
|
|
76
|
+
* @returns Tool definition object compatible with AI SDK
|
|
77
|
+
*/
|
|
78
|
+
export declare function createSpawnAgentTool(options?: SpawnAgentOptions): {
|
|
79
|
+
description: string;
|
|
80
|
+
inputSchema: z.ZodObject<{
|
|
81
|
+
task: z.ZodString;
|
|
82
|
+
role: z.ZodDefault<z.ZodEnum<["coder", "researcher", "analyst", "generic"]>>;
|
|
83
|
+
context: z.ZodOptional<z.ZodString>;
|
|
84
|
+
}, "strip", z.ZodTypeAny, {
|
|
85
|
+
role: "generic" | "coder" | "researcher" | "analyst";
|
|
86
|
+
task: string;
|
|
87
|
+
context?: string | undefined;
|
|
88
|
+
}, {
|
|
89
|
+
task: string;
|
|
90
|
+
role?: "generic" | "coder" | "researcher" | "analyst" | undefined;
|
|
91
|
+
context?: string | undefined;
|
|
92
|
+
}>;
|
|
93
|
+
execute: (input: SpawnAgentInput) => Promise<SpawnAgentResult>;
|
|
94
|
+
};
|
|
95
|
+
export default createSpawnAgentTool;
|
|
96
|
+
//# sourceMappingURL=index.d.ts.map
|