@kenkaiiii/ggcoder 4.3.231 → 4.3.233
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 +1 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -89
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -1
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +29 -0
- package/dist/config.test.js.map +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/ideal-review.d.ts +20 -0
- package/dist/core/ideal-review.d.ts.map +1 -0
- package/dist/core/ideal-review.js +55 -0
- package/dist/core/ideal-review.js.map +1 -0
- package/dist/core/ideal-review.test.d.ts +2 -0
- package/dist/core/ideal-review.test.d.ts.map +1 -0
- package/dist/core/ideal-review.test.js +59 -0
- package/dist/core/ideal-review.test.js.map +1 -0
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +8 -16
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.js +14 -44
- package/dist/core/prompt-commands.test.js.map +1 -1
- package/dist/core/runtime-mode.d.ts +0 -11
- package/dist/core/runtime-mode.d.ts.map +1 -1
- package/dist/core/runtime-mode.js +0 -9
- package/dist/core/runtime-mode.js.map +1 -1
- package/dist/core/session-restore-display.test.js +4 -110
- package/dist/core/session-restore-display.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 +2 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/system-prompt.d.ts +1 -2
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +11 -58
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +3 -158
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/bash.d.ts +1 -4
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +3 -12
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/checkpoint-hook.test.js +3 -3
- package/dist/tools/checkpoint-hook.test.js.map +1 -1
- package/dist/tools/edit.d.ts +1 -4
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +5 -13
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/enter-plan.js +1 -1
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/html-extract.d.ts +58 -0
- package/dist/tools/html-extract.d.ts.map +1 -0
- package/dist/tools/html-extract.js +130 -0
- package/dist/tools/html-extract.js.map +1 -0
- package/dist/tools/html-extract.test.d.ts +2 -0
- package/dist/tools/html-extract.test.d.ts.map +1 -0
- package/dist/tools/html-extract.test.js +60 -0
- package/dist/tools/html-extract.test.js.map +1 -0
- package/dist/tools/index.d.ts +0 -9
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/pdf-extract.d.ts +18 -0
- package/dist/tools/pdf-extract.d.ts.map +1 -0
- package/dist/tools/pdf-extract.js +43 -0
- package/dist/tools/pdf-extract.js.map +1 -0
- package/dist/tools/pdf-extract.test.d.ts +2 -0
- package/dist/tools/pdf-extract.test.d.ts.map +1 -0
- package/dist/tools/pdf-extract.test.js +15 -0
- package/dist/tools/pdf-extract.test.js.map +1 -0
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +2 -3
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/screenshot.d.ts +1 -1
- package/dist/tools/subagent.d.ts +1 -4
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +2 -5
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +16 -1
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +357 -45
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +263 -2
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/tools/web-search.d.ts +14 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +321 -35
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/web-search.test.js +144 -1
- package/dist/tools/web-search.test.js.map +1 -1
- package/dist/tools/write.d.ts +1 -4
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +5 -13
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/App.d.ts +7 -20
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +124 -309
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-items.d.ts +36 -25
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js +39 -0
- package/dist/ui/app-items.js.map +1 -1
- package/dist/ui/app-items.test.d.ts +2 -0
- package/dist/ui/app-items.test.d.ts.map +1 -0
- package/dist/ui/app-items.test.js +38 -0
- package/dist/ui/app-items.test.js.map +1 -0
- package/dist/ui/app-state-persistence.test.js +14 -318
- package/dist/ui/app-state-persistence.test.js.map +1 -1
- package/dist/ui/chat-layout-pinning.test.js +74 -4
- package/dist/ui/chat-layout-pinning.test.js.map +1 -1
- package/dist/ui/components/AssistantMessage.test.js +6 -9
- package/dist/ui/components/AssistantMessage.test.js.map +1 -1
- package/dist/ui/components/Banner.js +1 -1
- package/dist/ui/components/Banner.js.map +1 -1
- package/dist/ui/components/ChatFooterPane.d.ts +1 -5
- package/dist/ui/components/ChatFooterPane.d.ts.map +1 -1
- package/dist/ui/components/ChatFooterPane.js +3 -4
- package/dist/ui/components/ChatFooterPane.js.map +1 -1
- package/dist/ui/components/ChatInputStack.d.ts +3 -1
- package/dist/ui/components/ChatInputStack.d.ts.map +1 -1
- package/dist/ui/components/ChatInputStack.js +4 -3
- package/dist/ui/components/ChatInputStack.js.map +1 -1
- package/dist/ui/components/ChatScreen.d.ts +3 -16
- package/dist/ui/components/ChatScreen.d.ts.map +1 -1
- package/dist/ui/components/ChatScreen.js +2 -3
- package/dist/ui/components/ChatScreen.js.map +1 -1
- package/dist/ui/components/Footer.d.ts +3 -8
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +5 -25
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/IdealHookMessage.d.ts +12 -0
- package/dist/ui/components/IdealHookMessage.d.ts.map +1 -0
- package/dist/ui/components/IdealHookMessage.js +24 -0
- package/dist/ui/components/IdealHookMessage.js.map +1 -0
- package/dist/ui/components/InputArea.d.ts +1 -9
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +2 -44
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/LiveToolPanel.d.ts +30 -0
- package/dist/ui/components/LiveToolPanel.d.ts.map +1 -0
- package/dist/ui/components/LiveToolPanel.js +66 -0
- package/dist/ui/components/LiveToolPanel.js.map +1 -0
- package/dist/ui/components/ToolExecution.js +0 -2
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/TranscriptViewport.d.ts +1 -1
- package/dist/ui/components/TranscriptViewport.js +1 -1
- package/dist/ui/footer-jump-regression.test.js +12 -2
- package/dist/ui/footer-jump-regression.test.js.map +1 -1
- package/dist/ui/footer-status-layout.test.js +4 -12
- package/dist/ui/footer-status-layout.test.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +45 -1
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +3 -4
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.js +26 -4
- package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -1
- package/dist/ui/hooks/useModeState.d.ts +4 -19
- package/dist/ui/hooks/useModeState.d.ts.map +1 -1
- package/dist/ui/hooks/useModeState.js +5 -45
- package/dist/ui/hooks/useModeState.js.map +1 -1
- package/dist/ui/hooks/usePixelFixFlow.js +2 -2
- package/dist/ui/layout-decisions.d.ts +11 -34
- package/dist/ui/layout-decisions.d.ts.map +1 -1
- package/dist/ui/layout-decisions.js +15 -42
- package/dist/ui/layout-decisions.js.map +1 -1
- package/dist/ui/live-area-height.d.ts.map +1 -1
- package/dist/ui/live-area-height.js +6 -1
- package/dist/ui/live-area-height.js.map +1 -1
- package/dist/ui/live-frame-height.test.js +26 -1
- package/dist/ui/live-frame-height.test.js.map +1 -1
- package/dist/ui/plan-overlay.test.js +1 -1
- package/dist/ui/plan-overlay.test.js.map +1 -1
- package/dist/ui/prompt-routing.d.ts +1 -19
- package/dist/ui/prompt-routing.d.ts.map +1 -1
- package/dist/ui/prompt-routing.js +1 -79
- package/dist/ui/prompt-routing.js.map +1 -1
- package/dist/ui/render.d.ts +6 -18
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +2 -10
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/scroll-stabilization.test.js +1 -7
- package/dist/ui/scroll-stabilization.test.js.map +1 -1
- package/dist/ui/slash-command-images.test.js +11 -86
- package/dist/ui/slash-command-images.test.js.map +1 -1
- package/dist/ui/streaming-flush-bounce.test.d.ts +2 -0
- package/dist/ui/streaming-flush-bounce.test.d.ts.map +1 -0
- package/dist/ui/streaming-flush-bounce.test.js +156 -0
- package/dist/ui/streaming-flush-bounce.test.js.map +1 -0
- package/dist/ui/submit-prompt-command.d.ts +1 -16
- package/dist/ui/submit-prompt-command.d.ts.map +1 -1
- package/dist/ui/submit-prompt-command.js +4 -54
- package/dist/ui/submit-prompt-command.js.map +1 -1
- package/dist/ui/submit-slash-commands.d.ts +0 -1
- package/dist/ui/submit-slash-commands.d.ts.map +1 -1
- package/dist/ui/submit-slash-commands.js +0 -4
- package/dist/ui/submit-slash-commands.js.map +1 -1
- package/dist/ui/terminal-history-status-renderers.d.ts +0 -1
- package/dist/ui/terminal-history-status-renderers.d.ts.map +1 -1
- package/dist/ui/terminal-history-status-renderers.js +0 -3
- package/dist/ui/terminal-history-status-renderers.js.map +1 -1
- package/dist/ui/terminal-history.d.ts.map +1 -1
- package/dist/ui/terminal-history.js +19 -56
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/terminal-history.test.js +6 -33
- package/dist/ui/terminal-history.test.js.map +1 -1
- package/dist/ui/tool-line-summary.d.ts +29 -0
- package/dist/ui/tool-line-summary.d.ts.map +1 -0
- package/dist/ui/tool-line-summary.js +153 -0
- package/dist/ui/tool-line-summary.js.map +1 -0
- package/dist/ui/transcript/TranscriptRenderer.d.ts +1 -1
- package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
- package/dist/ui/transcript/TranscriptRenderer.js +21 -12
- package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
- package/dist/ui/transcript/presentation.d.ts +1 -17
- package/dist/ui/transcript/presentation.d.ts.map +1 -1
- package/dist/ui/transcript/presentation.js +0 -26
- package/dist/ui/transcript/presentation.js.map +1 -1
- package/dist/ui/transcript/spacing.d.ts +2 -2
- package/dist/ui/transcript/spacing.d.ts.map +1 -1
- package/dist/ui/transcript/spacing.js +15 -9
- package/dist/ui/transcript/spacing.js.map +1 -1
- package/dist/ui/transcript/spacing.test.js +7 -8
- package/dist/ui/transcript/spacing.test.js.map +1 -1
- package/dist/ui/transcript/tool-presentation.js +1 -1
- package/dist/ui/transcript/tool-presentation.js.map +1 -1
- package/dist/ui/transcript/transcript-lines.d.ts.map +1 -1
- package/dist/ui/transcript/transcript-lines.js +4 -0
- package/dist/ui/transcript/transcript-lines.js.map +1 -1
- package/dist/ui/tui-history-parity.test.js +8 -47
- package/dist/ui/tui-history-parity.test.js.map +1 -1
- package/dist/ui/tui-simulation.test.js +2 -1
- package/dist/ui/tui-simulation.test.js.map +1 -1
- package/dist/utils/format.js +7 -0
- package/dist/utils/format.js.map +1 -1
- package/package.json +11 -5
- package/dist/core/goal-controller.d.ts +0 -82
- package/dist/core/goal-controller.d.ts.map +0 -1
- package/dist/core/goal-controller.js +0 -838
- package/dist/core/goal-controller.js.map +0 -1
- package/dist/core/goal-controller.test.d.ts +0 -2
- package/dist/core/goal-controller.test.d.ts.map +0 -1
- package/dist/core/goal-controller.test.js +0 -1279
- package/dist/core/goal-controller.test.js.map +0 -1
- package/dist/core/goal-engine.d.ts +0 -61
- package/dist/core/goal-engine.d.ts.map +0 -1
- package/dist/core/goal-engine.js +0 -123
- package/dist/core/goal-engine.js.map +0 -1
- package/dist/core/goal-engine.test.d.ts +0 -2
- package/dist/core/goal-engine.test.d.ts.map +0 -1
- package/dist/core/goal-engine.test.js +0 -295
- package/dist/core/goal-engine.test.js.map +0 -1
- package/dist/core/goal-integration.d.ts +0 -80
- package/dist/core/goal-integration.d.ts.map +0 -1
- package/dist/core/goal-integration.js +0 -296
- package/dist/core/goal-integration.js.map +0 -1
- package/dist/core/goal-integration.test.d.ts +0 -2
- package/dist/core/goal-integration.test.d.ts.map +0 -1
- package/dist/core/goal-integration.test.js +0 -369
- package/dist/core/goal-integration.test.js.map +0 -1
- package/dist/core/goal-lifecycle-smoke.test.d.ts +0 -2
- package/dist/core/goal-lifecycle-smoke.test.d.ts.map +0 -1
- package/dist/core/goal-lifecycle-smoke.test.js +0 -248
- package/dist/core/goal-lifecycle-smoke.test.js.map +0 -1
- package/dist/core/goal-overhead-harness.d.ts +0 -33
- package/dist/core/goal-overhead-harness.d.ts.map +0 -1
- package/dist/core/goal-overhead-harness.js +0 -268
- package/dist/core/goal-overhead-harness.js.map +0 -1
- package/dist/core/goal-prerequisites.d.ts +0 -23
- package/dist/core/goal-prerequisites.d.ts.map +0 -1
- package/dist/core/goal-prerequisites.js +0 -114
- package/dist/core/goal-prerequisites.js.map +0 -1
- package/dist/core/goal-prerequisites.test.d.ts +0 -2
- package/dist/core/goal-prerequisites.test.d.ts.map +0 -1
- package/dist/core/goal-prerequisites.test.js +0 -154
- package/dist/core/goal-prerequisites.test.js.map +0 -1
- package/dist/core/goal-references.d.ts +0 -14
- package/dist/core/goal-references.d.ts.map +0 -1
- package/dist/core/goal-references.js +0 -153
- package/dist/core/goal-references.js.map +0 -1
- package/dist/core/goal-references.test.d.ts +0 -2
- package/dist/core/goal-references.test.d.ts.map +0 -1
- package/dist/core/goal-references.test.js +0 -77
- package/dist/core/goal-references.test.js.map +0 -1
- package/dist/core/goal-store.d.ts +0 -289
- package/dist/core/goal-store.d.ts.map +0 -1
- package/dist/core/goal-store.js +0 -1156
- package/dist/core/goal-store.js.map +0 -1
- package/dist/core/goal-store.test.d.ts +0 -2
- package/dist/core/goal-store.test.d.ts.map +0 -1
- package/dist/core/goal-store.test.js +0 -530
- package/dist/core/goal-store.test.js.map +0 -1
- package/dist/core/goal-verifier.d.ts +0 -17
- package/dist/core/goal-verifier.d.ts.map +0 -1
- package/dist/core/goal-verifier.js +0 -87
- package/dist/core/goal-verifier.js.map +0 -1
- package/dist/core/goal-verifier.test.d.ts +0 -2
- package/dist/core/goal-verifier.test.d.ts.map +0 -1
- package/dist/core/goal-verifier.test.js +0 -131
- package/dist/core/goal-verifier.test.js.map +0 -1
- package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts +0 -2
- package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts.map +0 -1
- package/dist/core/goal-worker-dev-server-lifecycle.test.js +0 -68
- package/dist/core/goal-worker-dev-server-lifecycle.test.js.map +0 -1
- package/dist/core/goal-worker.d.ts +0 -61
- package/dist/core/goal-worker.d.ts.map +0 -1
- package/dist/core/goal-worker.js +0 -467
- package/dist/core/goal-worker.js.map +0 -1
- package/dist/core/goal-worker.test.d.ts +0 -2
- package/dist/core/goal-worker.test.d.ts.map +0 -1
- package/dist/core/goal-worker.test.js +0 -493
- package/dist/core/goal-worker.test.js.map +0 -1
- package/dist/core/goal-worktree.d.ts +0 -108
- package/dist/core/goal-worktree.d.ts.map +0 -1
- package/dist/core/goal-worktree.js +0 -300
- package/dist/core/goal-worktree.js.map +0 -1
- package/dist/core/goal-worktree.test.d.ts +0 -2
- package/dist/core/goal-worktree.test.d.ts.map +0 -1
- package/dist/core/goal-worktree.test.js +0 -448
- package/dist/core/goal-worktree.test.js.map +0 -1
- package/dist/tools/goal-mode.test.d.ts +0 -2
- package/dist/tools/goal-mode.test.d.ts.map +0 -1
- package/dist/tools/goal-mode.test.js +0 -121
- package/dist/tools/goal-mode.test.js.map +0 -1
- package/dist/tools/goals.d.ts +0 -143
- package/dist/tools/goals.d.ts.map +0 -1
- package/dist/tools/goals.js +0 -1038
- package/dist/tools/goals.js.map +0 -1
- package/dist/tools/goals.test.d.ts +0 -2
- package/dist/tools/goals.test.d.ts.map +0 -1
- package/dist/tools/goals.test.js +0 -1444
- package/dist/tools/goals.test.js.map +0 -1
- package/dist/ui/components/GoalOverlay.d.ts +0 -83
- package/dist/ui/components/GoalOverlay.d.ts.map +0 -1
- package/dist/ui/components/GoalOverlay.js +0 -710
- package/dist/ui/components/GoalOverlay.js.map +0 -1
- package/dist/ui/components/GoalPickerMenu.d.ts +0 -9
- package/dist/ui/components/GoalPickerMenu.d.ts.map +0 -1
- package/dist/ui/components/GoalPickerMenu.js +0 -37
- package/dist/ui/components/GoalPickerMenu.js.map +0 -1
- package/dist/ui/components/GoalStatusBar.d.ts +0 -26
- package/dist/ui/components/GoalStatusBar.d.ts.map +0 -1
- package/dist/ui/components/GoalStatusBar.js +0 -130
- package/dist/ui/components/GoalStatusBar.js.map +0 -1
- package/dist/ui/components/GoalStatusBar.test.d.ts +0 -2
- package/dist/ui/components/GoalStatusBar.test.d.ts.map +0 -1
- package/dist/ui/components/GoalStatusBar.test.js +0 -17
- package/dist/ui/components/GoalStatusBar.test.js.map +0 -1
- package/dist/ui/goal-events.d.ts +0 -125
- package/dist/ui/goal-events.d.ts.map +0 -1
- package/dist/ui/goal-events.js +0 -407
- package/dist/ui/goal-events.js.map +0 -1
- package/dist/ui/goal-events.test.d.ts +0 -2
- package/dist/ui/goal-events.test.d.ts.map +0 -1
- package/dist/ui/goal-events.test.js +0 -416
- package/dist/ui/goal-events.test.js.map +0 -1
- package/dist/ui/goal-lifecycle-orchestration.test.d.ts +0 -2
- package/dist/ui/goal-lifecycle-orchestration.test.d.ts.map +0 -1
- package/dist/ui/goal-lifecycle-orchestration.test.js +0 -555
- package/dist/ui/goal-lifecycle-orchestration.test.js.map +0 -1
- package/dist/ui/goal-overlay.test.d.ts +0 -2
- package/dist/ui/goal-overlay.test.d.ts.map +0 -1
- package/dist/ui/goal-overlay.test.js +0 -384
- package/dist/ui/goal-overlay.test.js.map +0 -1
- package/dist/ui/goal-progress.d.ts +0 -31
- package/dist/ui/goal-progress.d.ts.map +0 -1
- package/dist/ui/goal-progress.js +0 -149
- package/dist/ui/goal-progress.js.map +0 -1
- package/dist/ui/goal-run-helpers.d.ts +0 -12
- package/dist/ui/goal-run-helpers.d.ts.map +0 -1
- package/dist/ui/goal-run-helpers.js +0 -42
- package/dist/ui/goal-run-helpers.js.map +0 -1
- package/dist/ui/goal-status-bar.test.d.ts +0 -2
- package/dist/ui/goal-status-bar.test.d.ts.map +0 -1
- package/dist/ui/goal-status-bar.test.js +0 -174
- package/dist/ui/goal-status-bar.test.js.map +0 -1
- package/dist/ui/goal-summary.d.ts +0 -14
- package/dist/ui/goal-summary.d.ts.map +0 -1
- package/dist/ui/goal-summary.js +0 -194
- package/dist/ui/goal-summary.js.map +0 -1
- package/dist/ui/hooks/useGoalOrchestration.d.ts +0 -82
- package/dist/ui/hooks/useGoalOrchestration.d.ts.map +0 -1
- package/dist/ui/hooks/useGoalOrchestration.js +0 -863
- package/dist/ui/hooks/useGoalOrchestration.js.map +0 -1
- package/dist/ui/hooks/useGoalPickerController.d.ts +0 -22
- package/dist/ui/hooks/useGoalPickerController.d.ts.map +0 -1
- package/dist/ui/hooks/useGoalPickerController.js +0 -35
- package/dist/ui/hooks/useGoalPickerController.js.map +0 -1
- package/dist/ui/prompt-routing.test.d.ts +0 -2
- package/dist/ui/prompt-routing.test.d.ts.map +0 -1
- package/dist/ui/prompt-routing.test.js +0 -48
- package/dist/ui/prompt-routing.test.js.map +0 -1
- package/dist/ui/transcript/GoalRows.d.ts +0 -10
- package/dist/ui/transcript/GoalRows.d.ts.map +0 -1
- package/dist/ui/transcript/GoalRows.js +0 -35
- package/dist/ui/transcript/GoalRows.js.map +0 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Options as TurndownOptions } from "turndown";
|
|
2
|
+
/** Raised when one of the optional extraction dependencies is not installed. */
|
|
3
|
+
export declare class ExtractorUnavailable extends Error {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
interface LinkedomModule {
|
|
7
|
+
parseHTML(html: string): {
|
|
8
|
+
document: Document;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
interface ReadabilityArticle {
|
|
12
|
+
title?: string | null;
|
|
13
|
+
content?: string | null;
|
|
14
|
+
textContent?: string | null;
|
|
15
|
+
length?: number | null;
|
|
16
|
+
}
|
|
17
|
+
interface ReadabilityModule {
|
|
18
|
+
Readability: new (doc: Document, options?: {
|
|
19
|
+
charThreshold?: number;
|
|
20
|
+
}) => {
|
|
21
|
+
parse(): ReadabilityArticle | null;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
interface TurndownInstance {
|
|
25
|
+
turndown(html: string): string;
|
|
26
|
+
use(plugin: unknown): TurndownInstance;
|
|
27
|
+
addRule(key: string, rule: unknown): TurndownInstance;
|
|
28
|
+
remove(filter: string | string[]): TurndownInstance;
|
|
29
|
+
}
|
|
30
|
+
interface TurndownModule {
|
|
31
|
+
default: new (options?: TurndownOptions) => TurndownInstance;
|
|
32
|
+
}
|
|
33
|
+
interface ExtractorModules {
|
|
34
|
+
parseHTML: LinkedomModule["parseHTML"];
|
|
35
|
+
Readability: ReadabilityModule["Readability"];
|
|
36
|
+
TurndownService: TurndownModule["default"];
|
|
37
|
+
gfm: unknown;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Lazily resolve the HTML→Markdown extraction stack (linkedom, Readability,
|
|
41
|
+
* Turndown + GFM plugin). Mirrors `loadChromium()` in screenshot.ts: dynamic
|
|
42
|
+
* imports behind a non-literal specifier so `tsc` does not statically require
|
|
43
|
+
* the optional dependencies, with results cached. Throws `ExtractorUnavailable`
|
|
44
|
+
* if any are missing so callers can degrade to the regex path.
|
|
45
|
+
*/
|
|
46
|
+
export declare function loadExtractor(): Promise<ExtractorModules>;
|
|
47
|
+
/**
|
|
48
|
+
* Run Readability over the page HTML and convert the extracted main content to
|
|
49
|
+
* clean Markdown (headings, lists, GFM tables, fenced code preserved). Returns
|
|
50
|
+
* `null` when extraction fails or the article is too short, so the caller can
|
|
51
|
+
* fall back to `htmlToCleanText`.
|
|
52
|
+
*/
|
|
53
|
+
export declare function extractToMarkdown(html: string, url: string): Promise<{
|
|
54
|
+
markdown: string;
|
|
55
|
+
title?: string;
|
|
56
|
+
} | null>;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=html-extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-extract.d.ts","sourceRoot":"","sources":["../../src/tools/html-extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAS3D,gFAAgF;AAChF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,UAAU,cAAc;IACtB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;CACjD;AAED,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,UAAU,iBAAiB;IACzB,WAAW,EAAE,KACX,GAAG,EAAE,QAAQ,EACb,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,KACjC;QAAE,KAAK,IAAI,kBAAkB,GAAG,IAAI,CAAA;KAAE,CAAC;CAC7C;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACtD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,gBAAgB,CAAC;CACrD;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,OAAO,CAAC,EAAE,eAAe,KAAK,gBAAgB,CAAC;CAC9D;AAMD,UAAU,gBAAgB;IACxB,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACvC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC9C,eAAe,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3C,GAAG,EAAE,OAAO,CAAC;CACd;AAID;;;;;;GAMG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAiC/D;AA8BD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA2CtD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimum article length (in characters, per Readability's `length` field)
|
|
3
|
+
* required before we trust the extraction. Below this we fall back to the
|
|
4
|
+
* regex-based `htmlToCleanText` so short/empty pages don't degrade output.
|
|
5
|
+
*/
|
|
6
|
+
const CHAR_THRESHOLD = 250;
|
|
7
|
+
/** Raised when one of the optional extraction dependencies is not installed. */
|
|
8
|
+
export class ExtractorUnavailable extends Error {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "ExtractorUnavailable";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
let cached = null;
|
|
15
|
+
/**
|
|
16
|
+
* Lazily resolve the HTML→Markdown extraction stack (linkedom, Readability,
|
|
17
|
+
* Turndown + GFM plugin). Mirrors `loadChromium()` in screenshot.ts: dynamic
|
|
18
|
+
* imports behind a non-literal specifier so `tsc` does not statically require
|
|
19
|
+
* the optional dependencies, with results cached. Throws `ExtractorUnavailable`
|
|
20
|
+
* if any are missing so callers can degrade to the regex path.
|
|
21
|
+
*/
|
|
22
|
+
export async function loadExtractor() {
|
|
23
|
+
if (cached)
|
|
24
|
+
return cached;
|
|
25
|
+
const linkedomName = "linkedom";
|
|
26
|
+
const readabilityName = "@mozilla/readability";
|
|
27
|
+
const turndownName = "turndown";
|
|
28
|
+
const gfmName = "turndown-plugin-gfm";
|
|
29
|
+
try {
|
|
30
|
+
const [linkedom, readability, turndown, gfmMod] = (await Promise.all([
|
|
31
|
+
import(linkedomName),
|
|
32
|
+
import(readabilityName),
|
|
33
|
+
import(turndownName),
|
|
34
|
+
import(gfmName),
|
|
35
|
+
]));
|
|
36
|
+
if (!linkedom.parseHTML || !readability.Readability || !turndown.default || !gfmMod.gfm) {
|
|
37
|
+
throw new ExtractorUnavailable("extraction modules loaded but expected exports are missing");
|
|
38
|
+
}
|
|
39
|
+
cached = {
|
|
40
|
+
parseHTML: linkedom.parseHTML,
|
|
41
|
+
Readability: readability.Readability,
|
|
42
|
+
TurndownService: turndown.default,
|
|
43
|
+
gfm: gfmMod.gfm,
|
|
44
|
+
};
|
|
45
|
+
return cached;
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err instanceof ExtractorUnavailable)
|
|
49
|
+
throw err;
|
|
50
|
+
throw new ExtractorUnavailable(err instanceof Error ? err.message : "failed to load extraction modules");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function buildTurndown(mods) {
|
|
54
|
+
const service = new mods.TurndownService({
|
|
55
|
+
headingStyle: "atx",
|
|
56
|
+
codeBlockStyle: "fenced",
|
|
57
|
+
bulletListMarker: "-",
|
|
58
|
+
});
|
|
59
|
+
service.use(mods.gfm);
|
|
60
|
+
// Preserve fenced code blocks: keep <pre>/<code> structure intact rather
|
|
61
|
+
// than collapsing whitespace inside them.
|
|
62
|
+
service.addRule("fencedPre", {
|
|
63
|
+
filter: ["pre"],
|
|
64
|
+
replacement(_content, node) {
|
|
65
|
+
const code = (node.textContent ?? "").replace(/\n$/, "");
|
|
66
|
+
return `\n\n\`\`\`\n${code}\n\`\`\`\n\n`;
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
// Drop anchors without an href (navigation/JS noise) — keep their text only.
|
|
70
|
+
service.addRule("bareAnchor", {
|
|
71
|
+
filter(node) {
|
|
72
|
+
return node.nodeName === "A" && !node.getAttribute("href");
|
|
73
|
+
},
|
|
74
|
+
replacement(content) {
|
|
75
|
+
return content;
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
return service;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Run Readability over the page HTML and convert the extracted main content to
|
|
82
|
+
* clean Markdown (headings, lists, GFM tables, fenced code preserved). Returns
|
|
83
|
+
* `null` when extraction fails or the article is too short, so the caller can
|
|
84
|
+
* fall back to `htmlToCleanText`.
|
|
85
|
+
*/
|
|
86
|
+
export async function extractToMarkdown(html, url) {
|
|
87
|
+
const mods = await loadExtractor();
|
|
88
|
+
let document;
|
|
89
|
+
try {
|
|
90
|
+
document = mods.parseHTML(html).document;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
// Readability reads <base>/document URL for resolving links; set a baseURI
|
|
96
|
+
// hint via a <base> tag when none is present so relative links resolve.
|
|
97
|
+
try {
|
|
98
|
+
if (!document.querySelector("base")) {
|
|
99
|
+
const base = document.createElement("base");
|
|
100
|
+
base.setAttribute("href", url);
|
|
101
|
+
document.head?.appendChild(base);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// best-effort; ignore if the DOM shim disallows it
|
|
106
|
+
}
|
|
107
|
+
let article;
|
|
108
|
+
try {
|
|
109
|
+
article = new mods.Readability(document, { charThreshold: CHAR_THRESHOLD }).parse();
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
if (!article || !article.content)
|
|
115
|
+
return null;
|
|
116
|
+
if ((article.length ?? 0) < CHAR_THRESHOLD)
|
|
117
|
+
return null;
|
|
118
|
+
let markdown;
|
|
119
|
+
try {
|
|
120
|
+
markdown = buildTurndown(mods).turndown(article.content);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
markdown = markdown.replace(/\n{3,}/g, "\n\n").trim();
|
|
126
|
+
if (!markdown)
|
|
127
|
+
return null;
|
|
128
|
+
return { markdown, title: article.title ?? undefined };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=html-extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-extract.js","sourceRoot":"","sources":["../../src/tools/html-extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-extract.test.d.ts","sourceRoot":"","sources":["../../src/tools/html-extract.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { extractToMarkdown, loadExtractor } from "./html-extract.js";
|
|
3
|
+
// Probe at module load so describe.skipIf sees the real value at collection time.
|
|
4
|
+
const extractorInstalled = await loadExtractor()
|
|
5
|
+
.then(() => true)
|
|
6
|
+
.catch(() => false);
|
|
7
|
+
const ARTICLE_HTML = `
|
|
8
|
+
<html>
|
|
9
|
+
<head><title>Test Article</title></head>
|
|
10
|
+
<body>
|
|
11
|
+
<nav>Home Products Pricing Docs</nav>
|
|
12
|
+
<aside class="advert">Sponsored: buy now</aside>
|
|
13
|
+
<article>
|
|
14
|
+
<h1>Understanding the Fetch API</h1>
|
|
15
|
+
<p>The Fetch API provides a modern interface for making HTTP requests in
|
|
16
|
+
JavaScript. It returns promises and is widely supported across browsers.
|
|
17
|
+
This paragraph is intentionally long enough to clear the Readability
|
|
18
|
+
content-length threshold so extraction succeeds in tests reliably.</p>
|
|
19
|
+
<h2>Example</h2>
|
|
20
|
+
<pre><code>const res = await fetch(url);
|
|
21
|
+
const data = await res.json();</code></pre>
|
|
22
|
+
<h2>Comparison</h2>
|
|
23
|
+
<table>
|
|
24
|
+
<thead><tr><th>Method</th><th>Returns</th></tr></thead>
|
|
25
|
+
<tbody>
|
|
26
|
+
<tr><td>fetch</td><td>Promise</td></tr>
|
|
27
|
+
<tr><td>XHR</td><td>callback</td></tr>
|
|
28
|
+
</tbody>
|
|
29
|
+
</table>
|
|
30
|
+
<ul><li>First item</li><li>Second item</li></ul>
|
|
31
|
+
<p>A closing paragraph with more substantial body text so the article
|
|
32
|
+
comfortably exceeds the minimum length that Readability requires before it
|
|
33
|
+
is considered a real article worth extracting.</p>
|
|
34
|
+
</article>
|
|
35
|
+
<footer>Legal links and copyright</footer>
|
|
36
|
+
</body>
|
|
37
|
+
</html>
|
|
38
|
+
`;
|
|
39
|
+
describe.skipIf(!extractorInstalled)("extractToMarkdown", () => {
|
|
40
|
+
it("extracts main content as markdown with title, code fence, and table", async () => {
|
|
41
|
+
const result = await extractToMarkdown(ARTICLE_HTML, "https://example.com/article");
|
|
42
|
+
expect(result).not.toBeNull();
|
|
43
|
+
const md = result?.markdown ?? "";
|
|
44
|
+
expect(result?.title).toBe("Test Article");
|
|
45
|
+
expect(md).toContain("Understanding the Fetch API");
|
|
46
|
+
expect(md).toContain("```");
|
|
47
|
+
expect(md).toContain("await fetch(url)");
|
|
48
|
+
// GFM table rendered with pipe separators.
|
|
49
|
+
expect(md).toMatch(/\|\s*Method\s*\|/);
|
|
50
|
+
expect(md).toContain("First item");
|
|
51
|
+
// Nav, ads, and footer boilerplate dropped.
|
|
52
|
+
expect(md).not.toContain("Sponsored: buy now");
|
|
53
|
+
expect(md).not.toContain("Home Products Pricing");
|
|
54
|
+
});
|
|
55
|
+
it("returns null for trivially short content", async () => {
|
|
56
|
+
const result = await extractToMarkdown("<html><body><p>Too short.</p></body></html>", "https://example.com/short");
|
|
57
|
+
expect(result).toBeNull();
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=html-extract.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-extract.test.js","sourceRoot":"","sources":["../../src/tools/html-extract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAErE,kFAAkF;AAClF,MAAM,kBAAkB,GAAG,MAAM,aAAa,EAAE;KAC7C,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAEtB,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BpB,CAAC;AAEF,QAAQ,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC7D,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,6BAA6B,CAAC,CAAC;QACpF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;QAElC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACzC,2CAA2C;QAC3C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACnC,4CAA4C;QAC5C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC,6CAA6C,EAC7C,2BAA2B,CAC5B,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -3,8 +3,6 @@ import { ProcessManager } from "../core/process-manager.js";
|
|
|
3
3
|
import { type ToolOperations } from "./operations.js";
|
|
4
4
|
import type { AgentDefinition } from "../core/agents.js";
|
|
5
5
|
import type { Skill } from "../core/skills.js";
|
|
6
|
-
import type { GoalReference } from "../core/goal-store.js";
|
|
7
|
-
import type { GoalMode } from "../core/runtime-mode.js";
|
|
8
6
|
export interface CreateToolsOptions {
|
|
9
7
|
agents?: AgentDefinition[];
|
|
10
8
|
skills?: Skill[];
|
|
@@ -12,10 +10,6 @@ export interface CreateToolsOptions {
|
|
|
12
10
|
model?: string;
|
|
13
11
|
/** Custom I/O operations for remote execution (SSH, Docker, etc.). Defaults to local filesystem. */
|
|
14
12
|
operations?: ToolOperations;
|
|
15
|
-
/** Ref for checking Goal orchestration mode inside tool execute functions. */
|
|
16
|
-
goalModeRef?: {
|
|
17
|
-
current: GoalMode;
|
|
18
|
-
};
|
|
19
13
|
/** Ref for checking plan mode inside tool execute functions. */
|
|
20
14
|
planModeRef?: {
|
|
21
15
|
current: boolean;
|
|
@@ -34,8 +28,6 @@ export interface CreateToolsOptions {
|
|
|
34
28
|
* absolute path.
|
|
35
29
|
*/
|
|
36
30
|
onPreFileMutation?: (filePath: string) => void | Promise<void>;
|
|
37
|
-
/** Getter for active /goal reference context while setup persists durable Goal state. */
|
|
38
|
-
getGoalReferences?: () => readonly GoalReference[] | undefined;
|
|
39
31
|
/**
|
|
40
32
|
* Getter for parent's prompt-cache routing key, evaluated lazily at
|
|
41
33
|
* sub-agent spawn time. Returning a stable key from this getter lets every
|
|
@@ -64,7 +56,6 @@ export { createSourcePathTool } from "./source-path.js";
|
|
|
64
56
|
export { createTaskOutputTool } from "./task-output.js";
|
|
65
57
|
export { createTaskStopTool } from "./task-stop.js";
|
|
66
58
|
export { createTasksTool } from "./tasks.js";
|
|
67
|
-
export { createGoalsTool } from "./goals.js";
|
|
68
59
|
export { createSkillTool } from "./skill.js";
|
|
69
60
|
export { createScreenshotTool } from "./screenshot.js";
|
|
70
61
|
export { createEnterPlanTool } from "./enter-plan.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,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,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
|
@@ -13,7 +13,6 @@ import { createSourcePathTool } from "./source-path.js";
|
|
|
13
13
|
import { createTaskOutputTool } from "./task-output.js";
|
|
14
14
|
import { createTaskStopTool } from "./task-stop.js";
|
|
15
15
|
import { createTasksTool } from "./tasks.js";
|
|
16
|
-
import { createGoalsTool } from "./goals.js";
|
|
17
16
|
import { createSkillTool } from "./skill.js";
|
|
18
17
|
import { createScreenshotTool } from "./screenshot.js";
|
|
19
18
|
import { createEnterPlanTool } from "./enter-plan.js";
|
|
@@ -23,13 +22,12 @@ export function createTools(cwd, opts) {
|
|
|
23
22
|
const readFiles = new Map();
|
|
24
23
|
const processManager = new ProcessManager();
|
|
25
24
|
const ops = opts?.operations ?? localOperations;
|
|
26
|
-
const goalModeRef = opts?.goalModeRef;
|
|
27
25
|
const planModeRef = opts?.planModeRef;
|
|
28
26
|
const tools = [
|
|
29
27
|
createReadTool(cwd, readFiles, ops, opts?.onFileRead),
|
|
30
|
-
createWriteTool(cwd, readFiles, ops,
|
|
31
|
-
createEditTool(cwd, readFiles, ops,
|
|
32
|
-
createBashTool(cwd, processManager, ops,
|
|
28
|
+
createWriteTool(cwd, readFiles, ops, planModeRef, opts?.onFileMutated, opts?.onPreFileMutation),
|
|
29
|
+
createEditTool(cwd, readFiles, ops, planModeRef, opts?.onFileMutated, opts?.onPreFileMutation),
|
|
30
|
+
createBashTool(cwd, processManager, ops, planModeRef),
|
|
33
31
|
createFindTool(cwd),
|
|
34
32
|
createGrepTool(cwd, ops),
|
|
35
33
|
createLsTool(cwd, ops),
|
|
@@ -38,7 +36,6 @@ export function createTools(cwd, opts) {
|
|
|
38
36
|
createTaskOutputTool(processManager),
|
|
39
37
|
createTaskStopTool(processManager),
|
|
40
38
|
createTasksTool(cwd),
|
|
41
|
-
createGoalsTool(cwd, goalModeRef, opts?.getGoalReferences),
|
|
42
39
|
createScreenshotTool(cwd),
|
|
43
40
|
];
|
|
44
41
|
// Add web search tool for providers without reliable native web search
|
|
@@ -46,7 +43,7 @@ export function createTools(cwd, opts) {
|
|
|
46
43
|
tools.push(createWebSearchTool());
|
|
47
44
|
}
|
|
48
45
|
if (opts?.agents && opts.agents.length > 0 && opts.provider && opts.model) {
|
|
49
|
-
tools.push(createSubAgentTool(cwd, opts.agents, opts.provider, opts.model,
|
|
46
|
+
tools.push(createSubAgentTool(cwd, opts.agents, opts.provider, opts.model, opts.getCacheKey, planModeRef));
|
|
50
47
|
}
|
|
51
48
|
if (opts?.skills && opts.skills.length > 0) {
|
|
52
49
|
tools.push(createSkillTool(opts.skills));
|
|
@@ -72,7 +69,6 @@ export { createSourcePathTool } from "./source-path.js";
|
|
|
72
69
|
export { createTaskOutputTool } from "./task-output.js";
|
|
73
70
|
export { createTaskStopTool } from "./task-stop.js";
|
|
74
71
|
export { createTasksTool } from "./tasks.js";
|
|
75
|
-
export { createGoalsTool } from "./goals.js";
|
|
76
72
|
export { createSkillTool } from "./skill.js";
|
|
77
73
|
export { createScreenshotTool } from "./screenshot.js";
|
|
78
74
|
export { createEnterPlanTool } from "./enter-plan.js";
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF text extraction via the optional `unpdf` dependency (bundles pdf.js,
|
|
3
|
+
* zero-config). Lazy-loaded behind a function so the base install works without
|
|
4
|
+
* it; callers degrade to an install-hint string when it is absent.
|
|
5
|
+
*/
|
|
6
|
+
/** Raised when the optional `unpdf` dependency is not installed. */
|
|
7
|
+
export declare class PdfExtractorUnavailable extends Error {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Extract merged page text from a PDF buffer. Returns the concatenated text and
|
|
12
|
+
* total page count. Throws `PdfExtractorUnavailable` if `unpdf` is not present.
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractPdfText(bytes: Uint8Array): Promise<{
|
|
15
|
+
text: string;
|
|
16
|
+
pages: number;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=pdf-extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-extract.d.ts","sourceRoot":"","sources":["../../src/tools/pdf-extract.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oEAAoE;AACpE,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AA6BD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAKhG"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF text extraction via the optional `unpdf` dependency (bundles pdf.js,
|
|
3
|
+
* zero-config). Lazy-loaded behind a function so the base install works without
|
|
4
|
+
* it; callers degrade to an install-hint string when it is absent.
|
|
5
|
+
*/
|
|
6
|
+
/** Raised when the optional `unpdf` dependency is not installed. */
|
|
7
|
+
export class PdfExtractorUnavailable extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = "PdfExtractorUnavailable";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
let cached = null;
|
|
14
|
+
async function loadUnpdf() {
|
|
15
|
+
if (cached)
|
|
16
|
+
return cached;
|
|
17
|
+
// Non-literal specifier so tsc does not statically resolve the optional dep.
|
|
18
|
+
const moduleName = "unpdf";
|
|
19
|
+
try {
|
|
20
|
+
const mod = (await import(moduleName));
|
|
21
|
+
if (!mod.getDocumentProxy || !mod.extractText) {
|
|
22
|
+
throw new PdfExtractorUnavailable("unpdf loaded but expected exports are missing");
|
|
23
|
+
}
|
|
24
|
+
cached = mod;
|
|
25
|
+
return cached;
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
if (err instanceof PdfExtractorUnavailable)
|
|
29
|
+
throw err;
|
|
30
|
+
throw new PdfExtractorUnavailable(err instanceof Error ? err.message : "failed to load unpdf");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Extract merged page text from a PDF buffer. Returns the concatenated text and
|
|
35
|
+
* total page count. Throws `PdfExtractorUnavailable` if `unpdf` is not present.
|
|
36
|
+
*/
|
|
37
|
+
export async function extractPdfText(bytes) {
|
|
38
|
+
const unpdf = await loadUnpdf();
|
|
39
|
+
const pdf = await unpdf.getDocumentProxy(bytes);
|
|
40
|
+
const { totalPages, text } = await unpdf.extractText(pdf, { mergePages: true });
|
|
41
|
+
return { text, pages: totalPages };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=pdf-extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-extract.js","sourceRoot":"","sources":["../../src/tools/pdf-extract.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oEAAoE;AACpE,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAUD,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC,KAAK,UAAU,SAAS;IACtB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,MAAM,UAAU,GAAW,OAAO,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAA2B,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAuB,CAAC,+CAA+C,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,GAAG,GAAG,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uBAAuB;YAAE,MAAM,GAAG,CAAC;QACtD,MAAM,IAAI,uBAAuB,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB;IACpD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-extract.test.d.ts","sourceRoot":"","sources":["../../src/tools/pdf-extract.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { extractPdfText } from "./pdf-extract.js";
|
|
5
|
+
const fixturePath = fileURLToPath(new URL("./__fixtures__/sample.pdf", import.meta.url));
|
|
6
|
+
const unpdfInstalled = await import("unpdf").then(() => true).catch(() => false);
|
|
7
|
+
describe.skipIf(!unpdfInstalled)("extractPdfText", () => {
|
|
8
|
+
it("extracts text and page count from a minimal PDF", async () => {
|
|
9
|
+
const bytes = new Uint8Array(await readFile(fixturePath));
|
|
10
|
+
const { text, pages } = await extractPdfText(bytes);
|
|
11
|
+
expect(text).toContain("Hello PDF World");
|
|
12
|
+
expect(pages).toBe(1);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=pdf-extract.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-extract.test.js","sourceRoot":"","sources":["../../src/tools/pdf-extract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzF,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAEjF,QAAQ,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,gBAAgB,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAEpD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-hints.d.ts","sourceRoot":"","sources":["../../src/tools/prompt-hints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"prompt-hints.d.ts","sourceRoot":"","sources":["../../src/tools/prompt-hints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0BpD,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAmB/C,CAAC"}
|
|
@@ -12,10 +12,10 @@ export const TOOL_PROMPT_HINTS = {
|
|
|
12
12
|
find: "Find files/dirs by name pattern. Faster than bash find, respects .gitignore.",
|
|
13
13
|
grep: "Regex search across files. Use for usages, definitions, imports.",
|
|
14
14
|
source_path: "Resolve installed package/repo source via opensrc. Use before assuming dependency APIs; inspect returned absolute path with read/grep/find/ls.",
|
|
15
|
-
web_search: "Search the web. Use before web_fetch to find pages.",
|
|
15
|
+
web_search: "Search the web. Use before web_fetch to find pages; supports include/exclude_domains and a time_range recency filter.",
|
|
16
|
+
web_fetch: "Fetch page content as Markdown (or text/html). Pass `urls` to fetch many at once; reads PDFs, follows safe redirects, and prefers a site's /llms.txt for docs.",
|
|
16
17
|
task_output: "Read new output from a background process by id.",
|
|
17
18
|
task_stop: "Stop a background process by id.",
|
|
18
|
-
goals: "Manage durable Goal runs for /goal and Ctrl+G workflows. Use for Goal setup, coordinator evidence, worker tasks, verifier records, final completion audits, blockers, and completion state.",
|
|
19
19
|
enter_plan: "Enter read-only plan mode for complex/risky tasks before implementation; draft a plan under .gg/plans/.",
|
|
20
20
|
exit_plan: "Submit a .gg/plans/ markdown plan for user approval and leave plan mode.",
|
|
21
21
|
subagent: "Delegate focused, isolated subtasks (research, parallel exploration).",
|
|
@@ -37,7 +37,6 @@ export const DEFAULT_TOOL_NAMES = [
|
|
|
37
37
|
"web_fetch",
|
|
38
38
|
"task_output",
|
|
39
39
|
"task_stop",
|
|
40
|
-
"goals",
|
|
41
40
|
"enter_plan",
|
|
42
41
|
"exit_plan",
|
|
43
42
|
"subagent",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-hints.js","sourceRoot":"","sources":["../../src/tools/prompt-hints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,IAAI,EAAE,uDAAuD;IAC7D,KAAK,EAAE,gFAAgF;IACvF,IAAI,EAAE,kIAAkI;IACxI,IAAI,EAAE,oHAAoH;IAC1H,IAAI,EAAE,8EAA8E;IACpF,IAAI,EAAE,kEAAkE;IACxE,WAAW,EACT,gJAAgJ;IAClJ,UAAU,
|
|
1
|
+
{"version":3,"file":"prompt-hints.js","sourceRoot":"","sources":["../../src/tools/prompt-hints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,IAAI,EAAE,uDAAuD;IAC7D,KAAK,EAAE,gFAAgF;IACvF,IAAI,EAAE,kIAAkI;IACxI,IAAI,EAAE,oHAAoH;IAC1H,IAAI,EAAE,8EAA8E;IACpF,IAAI,EAAE,kEAAkE;IACxE,WAAW,EACT,gJAAgJ;IAClJ,UAAU,EACR,uHAAuH;IACzH,SAAS,EACP,gKAAgK;IAClK,WAAW,EAAE,kDAAkD;IAC/D,SAAS,EAAE,kCAAkC;IAC7C,UAAU,EACR,yGAAyG;IAC3G,SAAS,EAAE,0EAA0E;IACrF,QAAQ,EAAE,uEAAuE;IACjF,KAAK,EAAE,oDAAoD;IAC3D,uCAAuC,EACrC,qNAAqN;IACvN,oCAAoC,EAClC,6LAA6L;IAC/L,iCAAiC,EAC/B,+OAA+O;CAClP,CAAC;AAEF,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,aAAa;IACb,WAAW;IACX,aAAa;IACb,WAAW;IACX,YAAY;IACZ,WAAW;IACX,UAAU;IACV,OAAO;IACP,uCAAuC;IACvC,oCAAoC;IACpC,iCAAiC;CAClC,CAAC"}
|
|
@@ -12,8 +12,8 @@ declare const ScreenshotParams: z.ZodObject<{
|
|
|
12
12
|
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
13
13
|
type: z.ZodEnum<{
|
|
14
14
|
type: "type";
|
|
15
|
-
wait: "wait";
|
|
16
15
|
click: "click";
|
|
16
|
+
wait: "wait";
|
|
17
17
|
}>;
|
|
18
18
|
selector: z.ZodOptional<z.ZodString>;
|
|
19
19
|
text: z.ZodOptional<z.ZodString>;
|
package/dist/tools/subagent.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import type { AgentTool } from "@kenkaiiii/gg-agent";
|
|
3
3
|
import type { AgentDefinition } from "../core/agents.js";
|
|
4
|
-
import { type GoalMode } from "../core/runtime-mode.js";
|
|
5
4
|
declare const SubAgentParams: z.ZodObject<{
|
|
6
5
|
task: z.ZodString;
|
|
7
6
|
agent: z.ZodOptional<z.ZodString>;
|
|
@@ -22,9 +21,7 @@ export interface SubAgentDetails {
|
|
|
22
21
|
};
|
|
23
22
|
durationMs: number;
|
|
24
23
|
}
|
|
25
|
-
export declare function createSubAgentTool(cwd: string, agents: AgentDefinition[], parentProvider: string, parentModel: string,
|
|
26
|
-
current: GoalMode;
|
|
27
|
-
}, getParentCacheKey?: () => string | undefined, planModeRef?: {
|
|
24
|
+
export declare function createSubAgentTool(cwd: string, agents: AgentDefinition[], parentProvider: string, parentModel: string, getParentCacheKey?: () => string | undefined, planModeRef?: {
|
|
28
25
|
current: boolean;
|
|
29
26
|
}): AgentTool<typeof SubAgentParams>;
|
|
30
27
|
export {};
|
|
@@ -1 +1 @@
|
|
|
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,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
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,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWzD,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,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EAC5C,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACjC,SAAS,CAAC,OAAO,cAAc,CAAC,CA4PlC"}
|
package/dist/tools/subagent.js
CHANGED
|
@@ -3,7 +3,7 @@ import { createInterface } from "node:readline";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { log } from "../core/logger.js";
|
|
5
5
|
import { truncateTail } from "./truncate.js";
|
|
6
|
-
import {
|
|
6
|
+
import { isPlanModeActive, planModeRestriction } from "../core/runtime-mode.js";
|
|
7
7
|
const SUB_AGENT_MAX_TURNS = 10;
|
|
8
8
|
const SUB_AGENT_MAX_OUTPUT_CHARS = 100_000; // ~25k tokens, matches other tool limits
|
|
9
9
|
const SUB_AGENT_MAX_OUTPUT_LINES = 500;
|
|
@@ -16,7 +16,7 @@ const SubAgentParams = z.object({
|
|
|
16
16
|
.optional()
|
|
17
17
|
.describe("Named agent definition to use (from ~/.gg/agents/ or .gg/agents/)"),
|
|
18
18
|
});
|
|
19
|
-
export function createSubAgentTool(cwd, agents, parentProvider, parentModel,
|
|
19
|
+
export function createSubAgentTool(cwd, agents, parentProvider, parentModel, getParentCacheKey, planModeRef) {
|
|
20
20
|
const agentList = agents.map((a) => `- ${a.name}: ${a.description}`).join("\n");
|
|
21
21
|
const agentDesc = agentList
|
|
22
22
|
? `\n\nAvailable named agents:\n${agentList}`
|
|
@@ -33,9 +33,6 @@ export function createSubAgentTool(cwd, agents, parentProvider, parentModel, goa
|
|
|
33
33
|
// sequential, so this only fans out when every call in the turn is parallel.
|
|
34
34
|
executionMode: "parallel",
|
|
35
35
|
async execute(args, context) {
|
|
36
|
-
if (isGoalModeActive(goalModeRef)) {
|
|
37
|
-
return goalModeRestriction("subagent", "Goal task creation through the goals tool");
|
|
38
|
-
}
|
|
39
36
|
if (isPlanModeActive(planModeRef)) {
|
|
40
37
|
return planModeRestriction("subagent");
|
|
41
38
|
}
|