@prestyj/cli 5.4.1 → 5.6.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 +25 -12
- package/assets/end-notification.mp3 +0 -0
- package/assets/skills/evidence-led-ui/LICENSES.md +68 -0
- package/assets/skills/evidence-led-ui/SKILL.md +139 -0
- package/{LICENSE → assets/skills/evidence-led-ui/corpus/awesome-design-md/LICENSE} +1 -1
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airbnb/DESIGN.md +545 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airtable/DESIGN.md +554 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/apple/DESIGN.md +562 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/binance/DESIGN.md +634 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw/DESIGN.md +544 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw-m/DESIGN.md +503 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bugatti/DESIGN.md +454 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cal/DESIGN.md +542 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/claude/DESIGN.md +589 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clay/DESIGN.md +541 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clickhouse/DESIGN.md +544 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cohere/DESIGN.md +451 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/coinbase/DESIGN.md +570 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/composio/DESIGN.md +506 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cursor/DESIGN.md +537 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/dell-1996/DESIGN.md +632 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/elevenlabs/DESIGN.md +504 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/expo/DESIGN.md +526 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ferrari/DESIGN.md +531 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/figma/DESIGN.md +578 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/framer/DESIGN.md +544 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hashicorp/DESIGN.md +575 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hp/DESIGN.md +670 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ibm/DESIGN.md +550 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/intercom/DESIGN.md +546 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/kraken/DESIGN.md +125 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lamborghini/DESIGN.md +288 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/linear.app/DESIGN.md +548 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lovable/DESIGN.md +298 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mastercard/DESIGN.md +365 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/meta/DESIGN.md +683 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/minimax/DESIGN.md +746 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mintlify/DESIGN.md +852 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/miro/DESIGN.md +825 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mistral.ai/DESIGN.md +773 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mongodb/DESIGN.md +767 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nike/DESIGN.md +575 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nintendo-2001/DESIGN.md +649 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/notion/DESIGN.md +821 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nvidia/DESIGN.md +640 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ollama/DESIGN.md +539 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/opencode.ai/DESIGN.md +521 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/pinterest/DESIGN.md +597 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/playstation/DESIGN.md +661 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/posthog/DESIGN.md +690 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/raycast/DESIGN.md +669 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/renault/DESIGN.md +589 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/replicate/DESIGN.md +616 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/resend/DESIGN.md +585 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/revolut/DESIGN.md +636 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/runwayml/DESIGN.md +244 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sanity/DESIGN.md +357 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sentry/DESIGN.md +551 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/shopify/DESIGN.md +516 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/slack/DESIGN.md +482 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spacex/DESIGN.md +363 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spotify/DESIGN.md +246 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/starbucks/DESIGN.md +580 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/stripe/DESIGN.md +487 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/supabase/DESIGN.md +462 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/superhuman/DESIGN.md +448 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/tesla/DESIGN.md +286 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/theverge/DESIGN.md +339 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/together.ai/DESIGN.md +633 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/uber/DESIGN.md +636 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vercel/DESIGN.md +736 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vodafone/DESIGN.md +538 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/voltagent/DESIGN.md +521 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/warp/DESIGN.md +526 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/webflow/DESIGN.md +588 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wired/DESIGN.md +497 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wise/DESIGN.md +544 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/x.ai/DESIGN.md +465 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/zapier/DESIGN.md +537 -0
- package/assets/skills/evidence-led-ui/data/corpus-manifest.json +768 -0
- package/assets/skills/evidence-led-ui/data/observations.json +47053 -0
- package/assets/skills/evidence-led-ui/references/anti-defaults.md +203 -0
- package/assets/skills/evidence-led-ui/references/archetypes.md +97 -0
- package/assets/skills/evidence-led-ui/references/craft-rulings.md +167 -0
- package/assets/skills/evidence-led-ui/references/methodology.md +72 -0
- package/assets/skills/evidence-led-ui/references/observed-patterns.md +68 -0
- package/assets/skills/evidence-led-ui/references/production-contract.md +120 -0
- package/assets/skills/evidence-led-ui/references/provenance.md +117 -0
- package/assets/skills/evidence-led-ui/references/quality-rubric.md +126 -0
- package/dist/app-sidecar.js +272 -74
- package/dist/app-sidecar.js.map +1 -1
- package/dist/chat-agents/general.d.ts +7 -0
- package/dist/chat-agents/general.d.ts.map +1 -0
- package/dist/chat-agents/general.js +16 -0
- package/dist/chat-agents/general.js.map +1 -0
- package/dist/chat-agents/general.test.d.ts +2 -0
- package/dist/chat-agents/general.test.d.ts.map +1 -0
- package/dist/chat-agents/general.test.js +50 -0
- package/dist/chat-agents/general.test.js.map +1 -0
- package/dist/chat-agents/index.d.ts +11 -0
- package/dist/chat-agents/index.d.ts.map +1 -0
- package/dist/chat-agents/index.js +89 -0
- package/dist/chat-agents/index.js.map +1 -0
- package/dist/chat-agents/jiwa.d.ts +53 -0
- package/dist/chat-agents/jiwa.d.ts.map +1 -0
- package/dist/chat-agents/jiwa.js +352 -0
- package/dist/chat-agents/jiwa.js.map +1 -0
- package/dist/chat-agents/jiwa.test.d.ts +2 -0
- package/dist/chat-agents/jiwa.test.d.ts.map +1 -0
- package/dist/chat-agents/jiwa.test.js +66 -0
- package/dist/chat-agents/jiwa.test.js.map +1 -0
- package/dist/chat-agents/memory.d.ts +53 -0
- package/dist/chat-agents/memory.d.ts.map +1 -0
- package/dist/chat-agents/memory.js +362 -0
- package/dist/chat-agents/memory.js.map +1 -0
- package/dist/chat-agents/memory.test.d.ts +2 -0
- package/dist/chat-agents/memory.test.d.ts.map +1 -0
- package/dist/chat-agents/memory.test.js +155 -0
- package/dist/chat-agents/memory.test.js.map +1 -0
- package/dist/chat-agents/research.d.ts +7 -0
- package/dist/chat-agents/research.d.ts.map +1 -0
- package/dist/chat-agents/research.js +18 -0
- package/dist/chat-agents/research.js.map +1 -0
- package/dist/chat-agents/shared.d.ts +11 -0
- package/dist/chat-agents/shared.d.ts.map +1 -0
- package/dist/chat-agents/shared.js +52 -0
- package/dist/chat-agents/shared.js.map +1 -0
- package/dist/chat-agents/specialists.test.d.ts +2 -0
- package/dist/chat-agents/specialists.test.d.ts.map +1 -0
- package/dist/chat-agents/specialists.test.js +97 -0
- package/dist/chat-agents/specialists.test.js.map +1 -0
- package/dist/chat-agents/therapist.d.ts +7 -0
- package/dist/chat-agents/therapist.d.ts.map +1 -0
- package/dist/chat-agents/therapist.js +20 -0
- package/dist/chat-agents/therapist.js.map +1 -0
- package/dist/chat-agents/types.d.ts +4 -0
- package/dist/chat-agents/types.d.ts.map +1 -0
- package/dist/chat-agents/types.js +7 -0
- package/dist/chat-agents/types.js.map +1 -0
- package/dist/cli/auth.js +1 -1
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +72 -22
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session-memory-tail.test.d.ts +2 -0
- package/dist/core/agent-session-memory-tail.test.d.ts.map +1 -0
- package/dist/core/agent-session-memory-tail.test.js +122 -0
- package/dist/core/agent-session-memory-tail.test.js.map +1 -0
- package/dist/core/agent-session-subagent-policy.test.d.ts +2 -0
- package/dist/core/agent-session-subagent-policy.test.d.ts.map +1 -0
- package/dist/core/agent-session-subagent-policy.test.js +36 -0
- package/dist/core/agent-session-subagent-policy.test.js.map +1 -0
- package/dist/core/agent-session.d.ts +39 -11
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +178 -125
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +1 -1
- package/dist/core/agents.d.ts.map +1 -1
- package/dist/core/agents.js +4 -2
- package/dist/core/agents.js.map +1 -1
- package/dist/core/auth-providers.js +5 -5
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/compaction/compactor.d.ts +7 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +73 -9
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +31 -4
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/event-bus.d.ts +2 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/goal-worker.test.js +3 -2
- package/dist/core/goal-worker.test.js.map +1 -1
- package/dist/core/loop-breaker.d.ts +23 -16
- package/dist/core/loop-breaker.d.ts.map +1 -1
- package/dist/core/loop-breaker.js +52 -11
- package/dist/core/loop-breaker.js.map +1 -1
- package/dist/core/loop-breaker.test.js +37 -16
- package/dist/core/loop-breaker.test.js.map +1 -1
- package/dist/core/mcp/defaults.d.ts +1 -1
- package/dist/core/mcp/defaults.js +1 -1
- package/dist/core/mcp/store.d.ts +2 -2
- package/dist/core/mcp/store.test.js +1 -1
- package/dist/core/mcp/store.test.js.map +1 -1
- package/dist/core/nolan-prompt.d.ts +3 -3
- package/dist/core/nolan-prompt.d.ts.map +1 -1
- package/dist/core/nolan-prompt.js +10 -10
- package/dist/core/nolan-prompt.js.map +1 -1
- package/dist/core/nolan-prompt.test.js +17 -0
- package/dist/core/nolan-prompt.test.js.map +1 -1
- package/dist/core/progress/rebuild.d.ts +3 -3
- package/dist/core/progress/rebuild.d.ts.map +1 -1
- package/dist/core/progress/rebuild.js +33 -27
- package/dist/core/progress/rebuild.js.map +1 -1
- package/dist/core/progress/rebuild.test.js +15 -0
- package/dist/core/progress/rebuild.test.js.map +1 -1
- package/dist/core/project-discovery.d.ts +1 -1
- package/dist/core/project-discovery.d.ts.map +1 -1
- package/dist/core/project-discovery.js +5 -6
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/project-discovery.test.js +14 -1
- package/dist/core/project-discovery.test.js.map +1 -1
- package/dist/core/radio.d.ts +3 -0
- package/dist/core/radio.d.ts.map +1 -1
- package/dist/core/radio.js +150 -21
- package/dist/core/radio.js.map +1 -1
- package/dist/core/radio.test.d.ts +2 -0
- package/dist/core/radio.test.d.ts.map +1 -0
- package/dist/core/radio.test.js +101 -0
- package/dist/core/radio.test.js.map +1 -0
- package/dist/core/session-history.test.js +1 -1
- package/dist/core/session-history.test.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +2 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-manager.test.js +18 -0
- package/dist/core/session-manager.test.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills-routing.test.d.ts +2 -0
- package/dist/core/skills-routing.test.d.ts.map +1 -0
- package/dist/core/skills-routing.test.js +70 -0
- package/dist/core/skills-routing.test.js.map +1 -0
- package/dist/core/skills.d.ts +2 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +32 -9
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +73 -0
- package/dist/core/subagent-manager.d.ts.map +1 -0
- package/dist/core/subagent-manager.js +412 -0
- package/dist/core/subagent-manager.js.map +1 -0
- package/dist/core/subagent-manager.test.d.ts +2 -0
- package/dist/core/subagent-manager.test.d.ts.map +1 -0
- package/dist/core/subagent-manager.test.js +103 -0
- package/dist/core/subagent-manager.test.js.map +1 -0
- package/dist/core/subagent-policy.d.ts +4 -0
- package/dist/core/subagent-policy.d.ts.map +1 -0
- package/dist/core/subagent-policy.js +19 -0
- package/dist/core/subagent-policy.js.map +1 -0
- package/dist/modes/json-mode.d.ts.map +1 -1
- package/dist/modes/json-mode.js +3 -4
- package/dist/modes/json-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts +14 -0
- package/dist/modes/subagent-worker-mode.d.ts.map +1 -0
- package/dist/modes/subagent-worker-mode.js +191 -0
- package/dist/modes/subagent-worker-mode.js.map +1 -0
- package/dist/system-prompt.js +2 -2
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +7 -5
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/generate-image.d.ts.map +1 -1
- package/dist/tools/generate-image.js +12 -5
- package/dist/tools/generate-image.js.map +1 -1
- package/dist/tools/generate-image.test.js +17 -0
- package/dist/tools/generate-image.test.js.map +1 -1
- package/dist/tools/goals.d.ts +3 -3
- package/dist/tools/index.d.ts +10 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +17 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/skill.d.ts.map +1 -1
- package/dist/tools/skill.js +8 -3
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/subagent-control.d.ts +6 -0
- package/dist/tools/subagent-control.d.ts.map +1 -0
- package/dist/tools/subagent-control.js +95 -0
- package/dist/tools/subagent-control.js.map +1 -0
- package/dist/tools/subagent-control.test.d.ts +2 -0
- package/dist/tools/subagent-control.test.d.ts.map +1 -0
- package/dist/tools/subagent-control.test.js +40 -0
- package/dist/tools/subagent-control.test.js.map +1 -0
- package/dist/tools/subagent-shared.d.ts +24 -0
- package/dist/tools/subagent-shared.d.ts.map +1 -0
- package/dist/tools/subagent-shared.js +53 -0
- package/dist/tools/subagent-shared.js.map +1 -0
- package/dist/tools/subagent-shared.test.d.ts +2 -0
- package/dist/tools/subagent-shared.test.d.ts.map +1 -0
- package/dist/tools/subagent-shared.test.js +29 -0
- package/dist/tools/subagent-shared.test.js.map +1 -0
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +21 -64
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/subagent.test.js +27 -1
- package/dist/tools/subagent.test.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +1 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +112 -35
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +146 -1
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/tools/web-search.d.ts +10 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +236 -28
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/web-search.test.js +77 -6
- package/dist/tools/web-search.test.js.map +1 -1
- package/dist/ui/App.d.ts +2 -0
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +61 -2
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
- package/dist/ui/components/SkillsOverlay.js +8 -3
- package/dist/ui/components/SkillsOverlay.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +7 -18
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.test.js +27 -0
- package/dist/ui/hooks/useAgentLoop.test.js.map +1 -1
- package/dist/ui/hooks/useModeState.d.ts +4 -2
- package/dist/ui/hooks/useModeState.d.ts.map +1 -1
- package/dist/ui/hooks/useModeState.js +14 -3
- package/dist/ui/hooks/useModeState.js.map +1 -1
- package/dist/ui/login.d.ts.map +1 -1
- package/dist/ui/login.js +13 -5
- package/dist/ui/login.js.map +1 -1
- package/dist/ui/render.d.ts +14 -0
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +2 -0
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/render.test.js +17 -0
- package/dist/ui/render.test.js.map +1 -1
- package/package.json +7 -6
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { AgentTool } from "@prestyj/agent";
|
|
2
|
+
import type { Provider, ThinkingLevel } from "@prestyj/ai";
|
|
3
|
+
import { SubAgentManager, type SubAgentSnapshot } from "../core/subagent-manager.js";
|
|
2
4
|
import { ProcessManager } from "../core/process-manager.js";
|
|
3
5
|
import { LspManager } from "../core/lsp/manager.js";
|
|
4
6
|
import { type GenerateImageAuth } from "./generate-image.js";
|
|
@@ -9,7 +11,7 @@ import type { GoalMode } from "../core/runtime-mode.js";
|
|
|
9
11
|
export interface CreateToolsOptions {
|
|
10
12
|
agents?: AgentDefinition[];
|
|
11
13
|
skills?: Skill[];
|
|
12
|
-
provider?:
|
|
14
|
+
provider?: Provider;
|
|
13
15
|
model?: string;
|
|
14
16
|
/** Custom I/O operations for remote execution (SSH, Docker, etc.). Defaults to local filesystem. */
|
|
15
17
|
operations?: ToolOperations;
|
|
@@ -49,8 +51,13 @@ export interface CreateToolsOptions {
|
|
|
49
51
|
*/
|
|
50
52
|
getCacheKey?: () => string | undefined;
|
|
51
53
|
/** Current parent provider/model, evaluated lazily when spawning a sub-agent. */
|
|
52
|
-
getProvider?: () =>
|
|
54
|
+
getProvider?: () => Provider;
|
|
53
55
|
getModel?: () => string;
|
|
56
|
+
getThinkingLevel?: () => ThinkingLevel | undefined;
|
|
57
|
+
getBaseUrl?: () => string | undefined;
|
|
58
|
+
onSubAgentState?: (snapshot: SubAgentSnapshot) => void;
|
|
59
|
+
/** Persistent child workers omit async orchestration to enforce one-level fan-out. */
|
|
60
|
+
disableAsyncSubagents?: boolean;
|
|
54
61
|
/**
|
|
55
62
|
* Append LSP diagnostics to edit/write results (default true). Servers are
|
|
56
63
|
* resolved from the project/PATH only and spawn lazily on the first edit of
|
|
@@ -86,6 +93,7 @@ export interface CreateToolsResult {
|
|
|
86
93
|
* `shutdownAll()` into their exit/cleanup paths alongside processManager.
|
|
87
94
|
*/
|
|
88
95
|
lspManager?: LspManager;
|
|
96
|
+
subAgentManager?: SubAgentManager;
|
|
89
97
|
}
|
|
90
98
|
export declare function createTools(cwd: string, opts?: CreateToolsOptions): Promise<CreateToolsResult>;
|
|
91
99
|
export { createReadTool } from "./read.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SubAgentManager } from "../core/subagent-manager.js";
|
|
1
2
|
import { ProcessManager } from "../core/process-manager.js";
|
|
2
3
|
import { LspManager } from "../core/lsp/manager.js";
|
|
3
4
|
import { createReadTool } from "./read.js";
|
|
@@ -10,6 +11,7 @@ import { createGrepTool } from "./grep.js";
|
|
|
10
11
|
import { createSearchCodeTool } from "./search-code.js";
|
|
11
12
|
import { createLsTool } from "./ls.js";
|
|
12
13
|
import { createSubAgentTool } from "./subagent.js";
|
|
14
|
+
import { createSubAgentControlTools } from "./subagent-control.js";
|
|
13
15
|
import { createWebFetchTool } from "./web-fetch.js";
|
|
14
16
|
import { createWebSearchTool } from "./web-search.js";
|
|
15
17
|
import { createSourcePathTool } from "./source-path.js";
|
|
@@ -65,8 +67,22 @@ export async function createTools(cwd, opts) {
|
|
|
65
67
|
if (opts?.provider && opts.provider !== "anthropic") {
|
|
66
68
|
tools.push(createWebSearchTool());
|
|
67
69
|
}
|
|
70
|
+
let subAgentManager;
|
|
68
71
|
if (opts?.agents && opts.agents.length > 0 && opts.provider && opts.model) {
|
|
69
72
|
tools.push(createSubAgentTool(cwd, opts.agents, () => opts.getProvider?.() ?? opts.provider, () => opts.getModel?.() ?? opts.model, opts.getCacheKey, planModeRef, goalModeRef));
|
|
73
|
+
if (!opts.disableAsyncSubagents) {
|
|
74
|
+
subAgentManager = new SubAgentManager({
|
|
75
|
+
cwd,
|
|
76
|
+
agents: opts.agents,
|
|
77
|
+
getProvider: () => opts.getProvider?.() ?? opts.provider,
|
|
78
|
+
getModel: () => opts.getModel?.() ?? opts.model,
|
|
79
|
+
getThinkingLevel: () => opts.getThinkingLevel?.(),
|
|
80
|
+
getCacheKey: opts.getCacheKey,
|
|
81
|
+
getBaseUrl: opts.getBaseUrl,
|
|
82
|
+
onState: opts.onSubAgentState,
|
|
83
|
+
});
|
|
84
|
+
tools.push(...createSubAgentControlTools(subAgentManager, planModeRef));
|
|
85
|
+
}
|
|
70
86
|
}
|
|
71
87
|
if (opts?.skills && opts.skills.length > 0) {
|
|
72
88
|
tools.push(createSkillTool(opts.skills));
|
|
@@ -91,7 +107,7 @@ export async function createTools(cwd, opts) {
|
|
|
91
107
|
}
|
|
92
108
|
}
|
|
93
109
|
const rebuildReadTool = (model) => createReadTool(cwd, readFiles, ops, opts?.onFileRead, getVideoByteLimit(model));
|
|
94
|
-
return { tools, processManager, rebuildReadTool, lspManager };
|
|
110
|
+
return { tools, processManager, rebuildReadTool, lspManager, subAgentManager };
|
|
95
111
|
}
|
|
96
112
|
export { createReadTool } from "./read.js";
|
|
97
113
|
export { createWriteTool } from "./write.js";
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,QAAA,MAAM,UAAU;;;iBAGd,CAAC;AAEH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,QAAA,MAAM,UAAU;;;iBAGd,CAAC;AAEH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,CA0B7E"}
|
package/dist/tools/skill.js
CHANGED
|
@@ -15,11 +15,14 @@ export function createSkillTool(skills) {
|
|
|
15
15
|
const available = skills.map((s) => s.name).join(", ");
|
|
16
16
|
return `Error: Skill "${input.skill}" not found. Available skills: ${available || "none"}`;
|
|
17
17
|
}
|
|
18
|
-
const parts = [`<skill_content name="${skill.name}"
|
|
18
|
+
const parts = [`<skill_content name="${skill.name}">`];
|
|
19
|
+
if (skill.root)
|
|
20
|
+
parts.push(`Skill root directory: ${skill.root}`);
|
|
21
|
+
parts.push(skill.content, `</skill_content>`);
|
|
19
22
|
if (input.args) {
|
|
20
23
|
parts.push(`\nUser context: ${input.args}`);
|
|
21
24
|
}
|
|
22
|
-
parts.push("\nTreat the above skill instructions as authoritative.
|
|
25
|
+
parts.push("\nTreat the above skill instructions as authoritative within their stated scope. Preserve higher-priority project and file/module rules while following the skill to complete the task.");
|
|
23
26
|
return parts.join("\n");
|
|
24
27
|
},
|
|
25
28
|
};
|
|
@@ -31,6 +34,8 @@ function generateSkillDescription(skills) {
|
|
|
31
34
|
const list = skills
|
|
32
35
|
.map((s) => `- **${s.name}**: ${s.description || "No description"}`)
|
|
33
36
|
.join("\n");
|
|
34
|
-
return `Invoke a skill by name to get specialized instructions for a task
|
|
37
|
+
return (`Invoke a skill by name to get specialized instructions for a task. ` +
|
|
38
|
+
`Before acting, invoke a skill when the request matches its scope and respect explicit exclusions.\n\n` +
|
|
39
|
+
`Available skills:\n${list}`);
|
|
35
40
|
}
|
|
36
41
|
//# sourceMappingURL=skill.js.map
|
package/dist/tools/skill.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,wBAAwB,CAAC,MAAM,CAAC;QAC7C,UAAU;QACV,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,OAAO,iBAAiB,KAAK,CAAC,KAAK,kCAAkC,SAAS,IAAI,MAAM,EAAE,CAAC;YAC7F,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/tools/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,wBAAwB,CAAC,MAAM,CAAC;QAC7C,UAAU;QACV,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,OAAO,iBAAiB,KAAK,CAAC,KAAK,kCAAkC,SAAS,IAAI,MAAM,EAAE,CAAC;YAC7F,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,KAAK,CAAC,IAAI,CACR,yLAAyL,CAC1L,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAe;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,4DAA4D,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,IAAI,gBAAgB,EAAE,CAAC;SACnE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,CACL,qEAAqE;QACrE,uGAAuG;QACvG,sBAAsB,IAAI,EAAE,CAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentTool } from "@prestyj/agent";
|
|
2
|
+
import type { SubAgentManager } from "../core/subagent-manager.js";
|
|
3
|
+
export declare function createSubAgentControlTools(manager: SubAgentManager, planModeRef?: {
|
|
4
|
+
current: boolean;
|
|
5
|
+
}): AgentTool[];
|
|
6
|
+
//# sourceMappingURL=subagent-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-control.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-control.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AASnE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,EACxB,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACjC,SAAS,EAAE,CA+Fb"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { isPlanModeActive, planModeRestriction } from "../core/runtime-mode.js";
|
|
3
|
+
const AgentId = z.string().min(1).describe("Eight-character agent ID returned by spawn_agent");
|
|
4
|
+
function json(value) {
|
|
5
|
+
return { content: JSON.stringify(value) };
|
|
6
|
+
}
|
|
7
|
+
export function createSubAgentControlTools(manager, planModeRef) {
|
|
8
|
+
const blocked = (name) => isPlanModeActive(planModeRef) ? planModeRestriction(name) : undefined;
|
|
9
|
+
const spawnParams = z.object({
|
|
10
|
+
task_name: z.string().min(1).describe("Short unique name for this delegated task"),
|
|
11
|
+
task: z.string().min(1).describe("Standalone task instruction for the child agent"),
|
|
12
|
+
agent: z.string().optional().describe("Optional named agent definition"),
|
|
13
|
+
});
|
|
14
|
+
const spawnTool = {
|
|
15
|
+
name: "spawn_agent",
|
|
16
|
+
description: "Start an isolated persistent child agent and return immediately after launch. Start all independent agents before waiting; shared files are not isolated.",
|
|
17
|
+
parameters: spawnParams,
|
|
18
|
+
executionMode: "parallel",
|
|
19
|
+
async execute(args) {
|
|
20
|
+
const restriction = blocked("spawn_agent");
|
|
21
|
+
if (restriction)
|
|
22
|
+
return restriction;
|
|
23
|
+
return json(await manager.spawn(args.task_name, args.task, args.agent));
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
const messageParams = z.object({ agent_id: AgentId, message: z.string().min(1) });
|
|
27
|
+
const messageTool = {
|
|
28
|
+
name: "send_message",
|
|
29
|
+
description: "Queue steering into a running child agent without starting another turn.",
|
|
30
|
+
parameters: messageParams,
|
|
31
|
+
async execute(args) {
|
|
32
|
+
const restriction = blocked("send_message");
|
|
33
|
+
if (restriction)
|
|
34
|
+
return restriction;
|
|
35
|
+
return json({
|
|
36
|
+
agent_id: args.agent_id,
|
|
37
|
+
queued: await manager.sendMessage(args.agent_id, args.message),
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
const followupParams = z.object({ agent_id: AgentId, task: z.string().min(1) });
|
|
42
|
+
const followupTool = {
|
|
43
|
+
name: "followup_task",
|
|
44
|
+
description: "Start another turn in an idle child while preserving that child's context.",
|
|
45
|
+
parameters: followupParams,
|
|
46
|
+
async execute(args) {
|
|
47
|
+
const restriction = blocked("followup_task");
|
|
48
|
+
if (restriction)
|
|
49
|
+
return restriction;
|
|
50
|
+
return json(await manager.followup(args.agent_id, args.task));
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
const waitParams = z.object({
|
|
54
|
+
agent_ids: z
|
|
55
|
+
.array(AgentId)
|
|
56
|
+
.optional()
|
|
57
|
+
.describe("Agents to wait for; omitted means active agents"),
|
|
58
|
+
condition: z.enum(["any", "all"]).optional().describe("Default: any"),
|
|
59
|
+
timeout_ms: z
|
|
60
|
+
.number()
|
|
61
|
+
.int()
|
|
62
|
+
.min(0)
|
|
63
|
+
.max(300_000)
|
|
64
|
+
.optional()
|
|
65
|
+
.describe("Default 30000; max 300000"),
|
|
66
|
+
});
|
|
67
|
+
const waitTool = {
|
|
68
|
+
name: "wait_agent",
|
|
69
|
+
description: "Wait for any or all requested child agents and return bounded result snapshots.",
|
|
70
|
+
parameters: waitParams,
|
|
71
|
+
async execute(args) {
|
|
72
|
+
return json(await manager.wait(args.agent_ids, args.condition, args.timeout_ms));
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
const listParams = z.object({});
|
|
76
|
+
const listTool = {
|
|
77
|
+
name: "list_agents",
|
|
78
|
+
description: "List child IDs, task names, lifecycle states, activity, turns, tools, and token totals.",
|
|
79
|
+
parameters: listParams,
|
|
80
|
+
async execute() {
|
|
81
|
+
return json(manager.list().map(({ output: _output, error: _error, ...summary }) => summary));
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
const interruptParams = z.object({ agent_id: AgentId });
|
|
85
|
+
const interruptTool = {
|
|
86
|
+
name: "interrupt_agent",
|
|
87
|
+
description: "Interrupt a child's current turn while retaining its context for a later follow-up.",
|
|
88
|
+
parameters: interruptParams,
|
|
89
|
+
async execute(args) {
|
|
90
|
+
return json(await manager.interrupt(args.agent_id));
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
return [spawnTool, messageTool, followupTool, waitTool, listTool, interruptTool];
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=subagent-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-control.js","sourceRoot":"","sources":["../../src/tools/subagent-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-control.test.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-control.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { createSubAgentControlTools } from "./subagent-control.js";
|
|
3
|
+
function fakeManager() {
|
|
4
|
+
return {
|
|
5
|
+
spawn: vi.fn(async (taskName) => ({
|
|
6
|
+
agent_id: "12345678",
|
|
7
|
+
task_name: taskName,
|
|
8
|
+
state: "running",
|
|
9
|
+
})),
|
|
10
|
+
sendMessage: vi.fn(async () => 1),
|
|
11
|
+
followup: vi.fn(async () => ({ agent_id: "12345678", state: "running" })),
|
|
12
|
+
wait: vi.fn(async () => ({ timed_out: false, agents: [] })),
|
|
13
|
+
list: vi.fn(() => []),
|
|
14
|
+
interrupt: vi.fn(async () => ({ agent_id: "12345678", state: "interrupted" })),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const context = { signal: new AbortController().signal, toolCallId: "test" };
|
|
18
|
+
describe("async subagent control tools", () => {
|
|
19
|
+
it("registers the six concise control surfaces", () => {
|
|
20
|
+
expect(createSubAgentControlTools(fakeManager()).map((tool) => tool.name)).toEqual([
|
|
21
|
+
"spawn_agent",
|
|
22
|
+
"send_message",
|
|
23
|
+
"followup_task",
|
|
24
|
+
"wait_agent",
|
|
25
|
+
"list_agents",
|
|
26
|
+
"interrupt_agent",
|
|
27
|
+
]);
|
|
28
|
+
});
|
|
29
|
+
it("launches through the manager and blocks mutating lifecycle calls in plan mode", async () => {
|
|
30
|
+
const manager = fakeManager();
|
|
31
|
+
const planModeRef = { current: false };
|
|
32
|
+
const tools = createSubAgentControlTools(manager, planModeRef);
|
|
33
|
+
const spawn = tools.find((tool) => tool.name === "spawn_agent");
|
|
34
|
+
await expect(spawn.execute({ task_name: "scan", task: "inspect" }, context)).resolves.toMatchObject({ content: expect.stringContaining("12345678") });
|
|
35
|
+
expect(manager.spawn).toHaveBeenCalledWith("scan", "inspect", undefined);
|
|
36
|
+
planModeRef.current = true;
|
|
37
|
+
await expect(spawn.execute({ task_name: "blocked", task: "write" }, context)).resolves.toContain("plan mode");
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=subagent-control.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-control.test.js","sourceRoot":"","sources":["../../src/tools/subagent-control.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,SAAS,WAAW;IAClB,OAAO;QACL,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YACxC,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACrB,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;KACjD,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAE7E,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,0BAA0B,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACjF,aAAa;YACb,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,iBAAiB;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,0BAA0B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAE,CAAC;QACjE,MAAM,MAAM,CACV,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAC/D,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAEzE,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,MAAM,MAAM,CACV,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAChE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Provider, ThinkingLevel } from "@prestyj/ai";
|
|
2
|
+
import type { AgentDefinition } from "../core/agents.js";
|
|
3
|
+
export declare const SUB_AGENT_MAX_TURNS = 50;
|
|
4
|
+
export declare const SUB_AGENT_MAX_OUTPUT_CHARS = 100000;
|
|
5
|
+
export declare const SUB_AGENT_MAX_OUTPUT_LINES = 500;
|
|
6
|
+
export declare const SUB_AGENT_MAX_STDERR_CHARS = 10000;
|
|
7
|
+
export declare const SUB_AGENT_TIMEOUT_MS: number;
|
|
8
|
+
export declare const SUB_AGENT_DEPTH_ENV = "GG_SUBAGENT_DEPTH";
|
|
9
|
+
export declare const MAX_BLOCKING_SUBAGENT_DEPTH = 3;
|
|
10
|
+
export interface SubAgentSelection {
|
|
11
|
+
agentDef?: AgentDefinition;
|
|
12
|
+
provider: Provider;
|
|
13
|
+
parentModel: string;
|
|
14
|
+
model: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveAgentDefinition(agents: AgentDefinition[], requestedName?: string): AgentDefinition | undefined;
|
|
17
|
+
export declare function selectSubAgent(agents: AgentDefinition[], requestedName: string | undefined, provider: Provider, parentModel: string): SubAgentSelection;
|
|
18
|
+
export declare function childThinkingLevel(level: ThinkingLevel | undefined): ThinkingLevel | undefined;
|
|
19
|
+
export declare function subAgentCacheKey(parentCacheKey: string | undefined, model: string, agentName?: string): string | undefined;
|
|
20
|
+
export declare function currentSubAgentDepth(env?: NodeJS.ProcessEnv): number;
|
|
21
|
+
export declare function childSubAgentEnv(env?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
22
|
+
export declare function resolveSubAgentCliEntry(): string;
|
|
23
|
+
export declare function boundSubAgentOutput(raw: string): string;
|
|
24
|
+
//# sourceMappingURL=subagent-shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-shared.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMzD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAClD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,oBAAoB,QAAiB,CAAC;AACnD,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AACvD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,GAAG,SAAS,CAG7B;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EAAE,EACzB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAClB,iBAAiB,CAYnB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAE9F;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,EACb,SAAS,SAAY,GACpB,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAGjF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAExF;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASvD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { getFastModel } from "../core/model-registry.js";
|
|
4
|
+
import { truncateTail } from "./truncate.js";
|
|
5
|
+
const MUTATING_TOOLS = new Set(["bash", "write", "edit"]);
|
|
6
|
+
export const SUB_AGENT_MAX_TURNS = 50;
|
|
7
|
+
export const SUB_AGENT_MAX_OUTPUT_CHARS = 100_000;
|
|
8
|
+
export const SUB_AGENT_MAX_OUTPUT_LINES = 500;
|
|
9
|
+
export const SUB_AGENT_MAX_STDERR_CHARS = 10_000;
|
|
10
|
+
export const SUB_AGENT_TIMEOUT_MS = 10 * 60 * 1000;
|
|
11
|
+
export const SUB_AGENT_DEPTH_ENV = "GG_SUBAGENT_DEPTH";
|
|
12
|
+
export const MAX_BLOCKING_SUBAGENT_DEPTH = 3;
|
|
13
|
+
export function resolveAgentDefinition(agents, requestedName) {
|
|
14
|
+
if (!requestedName)
|
|
15
|
+
return undefined;
|
|
16
|
+
return agents.find((agent) => agent.name.toLowerCase() === requestedName.toLowerCase());
|
|
17
|
+
}
|
|
18
|
+
export function selectSubAgent(agents, requestedName, provider, parentModel) {
|
|
19
|
+
const agentDef = resolveAgentDefinition(agents, requestedName);
|
|
20
|
+
const readOnly = !!agentDef &&
|
|
21
|
+
agentDef.tools.length > 0 &&
|
|
22
|
+
!agentDef.tools.some((tool) => MUTATING_TOOLS.has(tool.toLowerCase()));
|
|
23
|
+
return {
|
|
24
|
+
agentDef,
|
|
25
|
+
provider,
|
|
26
|
+
parentModel,
|
|
27
|
+
model: readOnly ? getFastModel(provider, parentModel).id : parentModel,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function childThinkingLevel(level) {
|
|
31
|
+
return level === "ultra" ? "max" : level;
|
|
32
|
+
}
|
|
33
|
+
export function subAgentCacheKey(parentCacheKey, model, agentName = "default") {
|
|
34
|
+
return parentCacheKey ? `${parentCacheKey}:subagent:${model}:${agentName}` : undefined;
|
|
35
|
+
}
|
|
36
|
+
export function currentSubAgentDepth(env = process.env) {
|
|
37
|
+
const parsed = Number.parseInt(env[SUB_AGENT_DEPTH_ENV] ?? "0", 10);
|
|
38
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;
|
|
39
|
+
}
|
|
40
|
+
export function childSubAgentEnv(env = process.env) {
|
|
41
|
+
return { ...env, [SUB_AGENT_DEPTH_ENV]: String(currentSubAgentDepth(env) + 1) };
|
|
42
|
+
}
|
|
43
|
+
export function resolveSubAgentCliEntry() {
|
|
44
|
+
const cliPath = fileURLToPath(new URL("../cli.js", import.meta.url));
|
|
45
|
+
return existsSync(cliPath) ? cliPath : process.argv[1];
|
|
46
|
+
}
|
|
47
|
+
export function boundSubAgentOutput(raw) {
|
|
48
|
+
const result = truncateTail(raw || "(no output)", SUB_AGENT_MAX_OUTPUT_LINES, SUB_AGENT_MAX_OUTPUT_CHARS);
|
|
49
|
+
return result.truncated
|
|
50
|
+
? `[Sub-agent output truncated: ${result.totalLines} total lines, showing last ${result.keptLines}]\n\n${result.content}`
|
|
51
|
+
: result.content;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=subagent-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-shared.js","sourceRoot":"","sources":["../../src/tools/subagent-shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-shared.test.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-shared.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { selectSubAgent, subAgentCacheKey } from "./subagent-shared.js";
|
|
3
|
+
describe("selectSubAgent", () => {
|
|
4
|
+
it("keeps shell-capable agents on the parent model", () => {
|
|
5
|
+
const shellAgent = {
|
|
6
|
+
name: "worker",
|
|
7
|
+
description: "Can mutate through shell commands",
|
|
8
|
+
tools: ["read", "bash"],
|
|
9
|
+
systemPrompt: "Work on the task.",
|
|
10
|
+
source: "bundled",
|
|
11
|
+
};
|
|
12
|
+
expect(selectSubAgent([shellAgent], "worker", "openai", "gpt-5.6-sol").model).toBe("gpt-5.6-sol");
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe("subAgentCacheKey", () => {
|
|
16
|
+
it("shares routing within one model and named-agent family", () => {
|
|
17
|
+
expect(subAgentCacheKey("parent", "gpt-5.6-luna", "owl")).toBe("parent:subagent:gpt-5.6-luna:owl");
|
|
18
|
+
expect(subAgentCacheKey("parent", "gpt-5.6-luna", "owl")).toBe(subAgentCacheKey("parent", "gpt-5.6-luna", "owl"));
|
|
19
|
+
});
|
|
20
|
+
it("partitions unrelated model and prompt families", () => {
|
|
21
|
+
const owl = subAgentCacheKey("parent", "gpt-5.6-luna", "owl");
|
|
22
|
+
expect(subAgentCacheKey("parent", "gpt-5.6-sol", "owl")).not.toBe(owl);
|
|
23
|
+
expect(subAgentCacheKey("parent", "gpt-5.6-luna", "bee")).not.toBe(owl);
|
|
24
|
+
});
|
|
25
|
+
it("stays unset when the parent has no stable cache identity", () => {
|
|
26
|
+
expect(subAgentCacheKey(undefined, "gpt-5.6-luna", "owl")).toBeUndefined();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=subagent-shared.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-shared.test.js","sourceRoot":"","sources":["../../src/tools/subagent-shared.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,UAAU,GAAoB;YAClC,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mCAAmC;YAChD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YACvB,YAAY,EAAE,mBAAmB;YACjC,MAAM,EAAE,SAAS;SAClB,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAChF,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAC5D,kCAAkC,CACnC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAC5D,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AAejC,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,QAAA,MAAM,cAAc;;;iBAMlB,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,EAAE,EACzB,iBAAiB,EAAE,MAAM,MAAM,EAC/B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EAC5C,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAClC,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,GAClC,SAAS,CAAC,OAAO,cAAc,CAAC,CAkRlC"}
|
package/dist/tools/subagent.js
CHANGED
|
@@ -1,46 +1,13 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { createInterface } from "node:readline";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
3
|
import { z } from "zod";
|
|
6
|
-
import { getFastModel } from "../core/model-registry.js";
|
|
7
4
|
import { log } from "../core/logger.js";
|
|
8
|
-
import { truncateTail } from "./truncate.js";
|
|
9
5
|
import { getActiveGoalMode, goalModeSubagentRestriction, isPlanModeActive, planModeRestriction, } from "../core/runtime-mode.js";
|
|
10
|
-
|
|
11
|
-
// none of these is a read-only scout (recon/research) — safe to route to the
|
|
12
|
-
// provider's fast/cheap model. An agent that can write/edit keeps the parent
|
|
13
|
-
// model so code changes never regress in quality.
|
|
14
|
-
const MUTATING_TOOLS = new Set(["write", "edit"]);
|
|
15
|
-
/**
|
|
16
|
-
* True when the sub-agent is a read-only scout: an explicit named agent with a
|
|
17
|
-
* non-empty tool allow-list that grants no mutating tool. A subagent call with
|
|
18
|
-
* no `agent` (full toolset) is NOT read-only — it keeps the parent model.
|
|
19
|
-
*/
|
|
20
|
-
function isReadOnlyAgent(agentDef) {
|
|
21
|
-
if (!agentDef || agentDef.tools.length === 0)
|
|
22
|
-
return false;
|
|
23
|
-
return !agentDef.tools.some((tool) => MUTATING_TOOLS.has(tool.toLowerCase()));
|
|
24
|
-
}
|
|
6
|
+
import { boundSubAgentOutput, childSubAgentEnv, currentSubAgentDepth, MAX_BLOCKING_SUBAGENT_DEPTH, resolveSubAgentCliEntry, selectSubAgent, subAgentCacheKey, SUB_AGENT_MAX_OUTPUT_CHARS, SUB_AGENT_MAX_STDERR_CHARS, SUB_AGENT_MAX_TURNS, SUB_AGENT_TIMEOUT_MS, } from "./subagent-shared.js";
|
|
25
7
|
/** Only retry errors that specifically mean the selected model cannot be used. */
|
|
26
8
|
export function isModelUnavailableError(stderr) {
|
|
27
9
|
return /does not recognize the requested model|requested model[^\n]*(?:not available|no access)|model[^\n]*(?:does not exist|not found|not available)/i.test(stderr);
|
|
28
10
|
}
|
|
29
|
-
const SUB_AGENT_MAX_TURNS = 50;
|
|
30
|
-
const SUB_AGENT_MAX_OUTPUT_CHARS = 100_000; // ~25k tokens, matches other tool limits
|
|
31
|
-
const SUB_AGENT_MAX_OUTPUT_LINES = 500;
|
|
32
|
-
const SUB_AGENT_MAX_STDERR_CHARS = 10_000; // Cap stderr to prevent unbounded growth
|
|
33
|
-
const SUB_AGENT_TIMEOUT_MS = 10 * 60 * 1000; // 10 minute hard timeout
|
|
34
|
-
/**
|
|
35
|
-
* Absolute path to the ezcoder CLI entry (dist/cli.js) that runs a sub-agent in
|
|
36
|
-
* JSON mode. Resolved relative to this module so it's correct no matter how the
|
|
37
|
-
* host process was launched (CLI bin, desktop app sidecar, tests). Falls back to
|
|
38
|
-
* the launching script only if the sibling file is missing.
|
|
39
|
-
*/
|
|
40
|
-
function resolveCliEntry() {
|
|
41
|
-
const cliPath = fileURLToPath(new URL("../cli.js", import.meta.url));
|
|
42
|
-
return existsSync(cliPath) ? cliPath : process.argv[1];
|
|
43
|
-
}
|
|
44
11
|
const SubAgentParams = z.object({
|
|
45
12
|
task: z.string().describe("The task to delegate to the sub-agent"),
|
|
46
13
|
agent: z
|
|
@@ -72,28 +39,25 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
|
|
|
72
39
|
if (isPlanModeActive(planModeRef)) {
|
|
73
40
|
return planModeRestriction("subagent");
|
|
74
41
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
agentDef = agents.find((a) => a.name.toLowerCase() === args.agent.toLowerCase());
|
|
80
|
-
if (!agentDef) {
|
|
81
|
-
return {
|
|
82
|
-
content: `Unknown agent: "${args.agent}". Available agents: ${agents.map((a) => a.name).join(", ") || "none"}`,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
42
|
+
if (currentSubAgentDepth() >= MAX_BLOCKING_SUBAGENT_DEPTH) {
|
|
43
|
+
return {
|
|
44
|
+
content: `Sub-agent nesting limit reached (${MAX_BLOCKING_SUBAGENT_DEPTH}). Complete this task in the current agent.`,
|
|
45
|
+
};
|
|
85
46
|
}
|
|
47
|
+
const startTime = Date.now();
|
|
86
48
|
const useProvider = getParentProvider();
|
|
87
|
-
// Read-only scouts (recon/research) run on the provider's fast/cheap model
|
|
88
|
-
// — lower TTFT + spend, no quality risk since they never edit code.
|
|
89
|
-
// Agents that can write, and default (unnamed) sub-agents, keep the
|
|
90
|
-
// parent model.
|
|
91
49
|
const parentModel = getParentModel();
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
50
|
+
const selection = selectSubAgent(agents, args.agent, useProvider, parentModel);
|
|
51
|
+
const agentDef = selection.agentDef;
|
|
52
|
+
if (args.agent && !agentDef) {
|
|
53
|
+
return {
|
|
54
|
+
content: `Unknown agent: "${args.agent}". Available agents: ${agents.map((a) => a.name).join(", ") || "none"}`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const useModel = selection.model;
|
|
95
58
|
const parentCacheKey = getParentCacheKey?.();
|
|
96
|
-
const
|
|
59
|
+
const childCacheKey = subAgentCacheKey(parentCacheKey, useModel, agentDef?.name ?? "default");
|
|
60
|
+
const subCacheKey = childCacheKey ?? "(unset)";
|
|
97
61
|
const buildCliArgs = (model) => {
|
|
98
62
|
const cliArgs = [
|
|
99
63
|
"--json",
|
|
@@ -104,11 +68,8 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
|
|
|
104
68
|
"--max-turns",
|
|
105
69
|
String(SUB_AGENT_MAX_TURNS),
|
|
106
70
|
];
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// fresh sessionId-derived key (cold cache every time).
|
|
110
|
-
if (parentCacheKey) {
|
|
111
|
-
cliArgs.push("--prompt-cache-key", `${parentCacheKey}:subagent`);
|
|
71
|
+
if (childCacheKey) {
|
|
72
|
+
cliArgs.push("--prompt-cache-key", childCacheKey);
|
|
112
73
|
}
|
|
113
74
|
if (agentDef?.systemPrompt) {
|
|
114
75
|
cliArgs.push("--system-prompt", agentDef.systemPrompt);
|
|
@@ -152,10 +113,10 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
|
|
|
152
113
|
const startAttempt = (model, fallbackFrom) => {
|
|
153
114
|
// Spawn the CLI entry, not process.argv[1]: the desktop host is the
|
|
154
115
|
// app sidecar and does not understand JSON-mode agent arguments.
|
|
155
|
-
const child = spawn(process.execPath, [
|
|
116
|
+
const child = spawn(process.execPath, [resolveSubAgentCliEntry(), ...buildCliArgs(model)], {
|
|
156
117
|
cwd,
|
|
157
118
|
stdio: ["ignore", "pipe", "pipe"],
|
|
158
|
-
env:
|
|
119
|
+
env: childSubAgentEnv(),
|
|
159
120
|
});
|
|
160
121
|
activeChild = child;
|
|
161
122
|
activeChildExited = false;
|
|
@@ -281,11 +242,7 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
|
|
|
281
242
|
});
|
|
282
243
|
return;
|
|
283
244
|
}
|
|
284
|
-
const
|
|
285
|
-
const result = truncateTail(raw, SUB_AGENT_MAX_OUTPUT_LINES, SUB_AGENT_MAX_OUTPUT_CHARS);
|
|
286
|
-
const body = result.truncated
|
|
287
|
-
? `[Sub-agent output truncated: ${result.totalLines} total lines, showing last ${result.keptLines}]\n\n${result.content}`
|
|
288
|
-
: result.content;
|
|
245
|
+
const body = boundSubAgentOutput(textOutput);
|
|
289
246
|
const content = hitMaxTurns
|
|
290
247
|
? `[Sub-agent reached its ${maxTurnsLimit}-turn limit — it stopped mid-task and this output may be incomplete.]\n\n${body}`
|
|
291
248
|
: body;
|