@selesai/code 0.13.3 → 0.13.5
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/CHANGELOG.md +17 -0
- package/dist/cli/credential-print.js +4 -4
- package/dist/cli.js +0 -0
- package/dist/core/compaction/utils.js +2 -2
- package/dist/core/export-html/template.css +1066 -1066
- package/dist/core/export-html/template.html +55 -55
- package/dist/core/export-html/template.js +1864 -1864
- package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
- package/dist/core/export-html/vendor/marked.min.js +78 -78
- package/dist/core/messages.js +7 -7
- package/dist/defaults/models.json +17 -1
- package/dist/extensions/context-compaction-reminder.test.ts +82 -82
- package/dist/extensions/context-compaction-reminder.ts +28 -28
- package/dist/extensions/cost-reconcile.test.ts +24 -5
- package/dist/extensions/cost-reconcile.ts +14 -7
- package/dist/extensions/pi-hermes-memory/scripts/check-min-sdk.mjs +0 -0
- package/dist/extensions/pi-hermes-memory/tests/run-all.sh +0 -0
- package/dist/extensions/pi-intercom/CHANGELOG.md +13 -0
- package/dist/extensions/pi-intercom/LICENSE +21 -21
- package/dist/extensions/pi-intercom/README.md +4 -5
- package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
- package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
- package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
- package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
- package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
- package/dist/extensions/pi-intercom/config.test.ts +3 -31
- package/dist/extensions/pi-intercom/config.ts +0 -15
- package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
- package/dist/extensions/pi-intercom/cwd.ts +31 -31
- package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
- package/dist/extensions/pi-intercom/format-context.ts +32 -32
- package/dist/extensions/pi-intercom/index.ts +9 -46
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +49 -57
- package/dist/extensions/pi-intercom/package.json +1 -1
- package/dist/extensions/pi-intercom/reply-tracker.test.ts +20 -0
- package/dist/extensions/pi-intercom/reply-tracker.ts +8 -0
- package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
- package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
- package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
- package/dist/extensions/pi-subagents/CHANGELOG.md +27 -0
- package/dist/extensions/pi-subagents/docs/tool-reference.md +4 -1
- package/dist/extensions/pi-subagents/docs/workflows.md +2 -2
- package/dist/extensions/pi-subagents/install.mjs +0 -0
- package/dist/extensions/pi-subagents/package-lock.json +2 -2
- package/dist/extensions/pi-subagents/package.json +1 -1
- package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +48 -243
- package/dist/extensions/pi-subagents/skills/council-mode/references/pass-contracts.md +150 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +87 -37
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +29 -233
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +49 -8
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -2
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +13 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +34 -27
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/review-and-validation.md +73 -0
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +157 -28
- package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +1 -0
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +1 -0
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +4 -1
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +3 -0
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +45 -2
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +3 -2
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +13 -2
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +5 -1
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +10 -2
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +3 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +11 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +98 -1
- package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +138 -4
- package/dist/extensions/pi-subagents/src/runs/shared/background-process-options.ts +9 -0
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +2 -5
- package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +52 -3
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +47 -1
- package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +45 -18
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +21 -2
- package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +15 -0
- package/dist/extensions/pi-subagents/src/shared/types.ts +34 -1
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +11 -3
- package/dist/extensions/pi-subagents/src/tui/render-helpers.ts +31 -0
- package/dist/extensions/pi-subagents/src/tui/render.ts +597 -112
- package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +40 -1
- package/dist/extensions/pi-subagents/src/workflows/host-command.ts +6 -1
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +53 -2
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +55 -6
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +111 -1
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +206 -38
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +522 -31
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +123 -0
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +48 -0
- package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +57 -1
- package/dist/extensions/pi-subagents/test/unit/background-process-options.test.ts +17 -0
- package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +44 -4
- package/dist/extensions/pi-subagents/test/unit/fork-cache-key.test.ts +91 -0
- package/dist/extensions/pi-subagents/test/unit/host-command.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +0 -1
- package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +20 -3
- package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +93 -17
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +103 -26
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +58 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +22 -2
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +13 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +54 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +2 -0
- package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +32 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-change-signature.test.ts +48 -1
- package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +21 -6
- package/dist/extensions/pi-subagents/test/unit/windows-hide-spawn.test.ts +11 -0
- package/dist/extensions/pi-web-agent/CHANGELOG.md +410 -0
- package/dist/extensions/pi-web-agent/README.md +131 -0
- package/dist/extensions/pi-web-agent/package.json +4 -2
- package/dist/extensions/pi-web-agent/src/backends/config.ts +62 -5
- package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -0
- package/dist/extensions/pi-web-agent/src/backends/factory.ts +96 -6
- package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
- package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
- package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
- package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +183 -47
- package/dist/extensions/pi-web-agent/src/extension.ts +62 -25
- package/dist/extensions/pi-web-agent/src/extract/readability.ts +19 -11
- package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
- package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
- package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
- package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
- package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
- package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +5 -4
- package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +2 -25
- package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +5 -2
- package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +2 -0
- package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
- package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
- package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +72 -7
- package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +8 -1
- package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +28 -3
- package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +4 -0
- package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
- package/dist/extensions/pi-web-agent/src/orchestration/url.ts +35 -0
- package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
- package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
- package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +18 -6
- package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
- package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +14 -2
- package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
- package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
- package/dist/extensions/pi-web-agent/src/readers/github-reader.ts +150 -0
- package/dist/extensions/pi-web-agent/src/readers/limits.ts +3 -0
- package/dist/extensions/pi-web-agent/src/readers/pdf-reader.ts +87 -0
- package/dist/extensions/pi-web-agent/src/readers/resolver.ts +25 -0
- package/dist/extensions/pi-web-agent/src/readers/types.ts +11 -0
- package/dist/extensions/pi-web-agent/src/readers/youtube-reader.ts +79 -0
- package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
- package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +32 -5
- package/dist/extensions/pi-web-agent/src/search/exa.ts +109 -0
- package/dist/extensions/pi-web-agent/src/search/fanout.ts +154 -0
- package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
- package/dist/extensions/pi-web-agent/src/search/tavily.ts +113 -0
- package/dist/extensions/pi-web-agent/src/search/youcom.ts +109 -0
- package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
- package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
- package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
- package/dist/extensions/pi-web-agent/src/tools/web-search.ts +22 -9
- package/dist/extensions/pi-web-agent/src/types.ts +19 -4
- package/dist/extensions/pi-zentui/extensions/zentui/format.ts +7 -1
- package/dist/extensions/ponytail/package.json +8 -8
- package/dist/extensions/question/constants.ts +30 -30
- package/dist/extensions/question/helpers.ts +58 -58
- package/dist/extensions/question/navigation.ts +14 -14
- package/dist/extensions/question/package.json +19 -19
- package/dist/extensions/question/selection-mode.ts +46 -46
- package/dist/extensions/question/shortcuts.ts +44 -44
- package/dist/extensions/question/types.ts +132 -132
- package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
- package/dist/extensions/test-resolve-hook.mjs +6 -6
- package/dist/extensions/web-agent-onboarding.ts +222 -222
- package/dist/package-manager-cli.js +71 -71
- package/dist/rpc-entry.js +0 -0
- package/dist/skills/improve-codebase/REFERENCE.md +78 -78
- package/docs/compaction.md +396 -396
- package/docs/containerization.md +111 -111
- package/docs/development.md +71 -71
- package/docs/docs.json +164 -164
- package/docs/environment-variables.md +86 -86
- package/docs/index.md +83 -83
- package/docs/json.md +82 -82
- package/docs/models.md +502 -502
- package/docs/packages.md +227 -227
- package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
- package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
- package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
- package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
- package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
- package/docs/prompt-templates.md +95 -95
- package/docs/providers.md +293 -293
- package/docs/security.md +59 -59
- package/docs/session-format.md +414 -414
- package/docs/sessions.md +145 -145
- package/docs/shared-host-extensions.md +109 -109
- package/docs/shell-aliases.md +13 -13
- package/docs/skills.md +231 -231
- package/docs/terminal-setup.md +142 -142
- package/docs/termux.md +127 -127
- package/docs/themes.md +295 -295
- package/docs/tmux.md +63 -63
- package/docs/tui.md +927 -927
- package/docs/windows.md +17 -17
- package/examples/README.md +25 -25
- package/examples/extensions/README.md +211 -211
- package/examples/extensions/auto-commit-on-exit.ts +49 -49
- package/examples/extensions/bash-spawn-hook.ts +30 -30
- package/examples/extensions/bookmark.ts +50 -50
- package/examples/extensions/border-status-editor.ts +150 -150
- package/examples/extensions/built-in-tool-renderer.ts +249 -249
- package/examples/extensions/claude-rules.ts +86 -86
- package/examples/extensions/commands.ts +72 -72
- package/examples/extensions/confirm-destructive.ts +59 -59
- package/examples/extensions/custom-compaction.ts +130 -130
- package/examples/extensions/custom-footer.ts +64 -64
- package/examples/extensions/custom-header.ts +73 -73
- package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
- package/examples/extensions/custom-provider-anthropic/package.json +19 -19
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
- package/examples/extensions/dirty-repo-guard.ts +56 -56
- package/examples/extensions/doom-overlay/README.md +46 -46
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -152
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
- package/examples/extensions/doom-overlay/doom-component.ts +132 -132
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
- package/examples/extensions/doom-overlay/index.ts +74 -74
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
- package/examples/extensions/dynamic-resources/SKILL.md +8 -8
- package/examples/extensions/dynamic-resources/dynamic.json +79 -79
- package/examples/extensions/dynamic-resources/dynamic.md +5 -5
- package/examples/extensions/dynamic-resources/index.ts +15 -15
- package/examples/extensions/dynamic-tools.ts +74 -74
- package/examples/extensions/event-bus.ts +43 -43
- package/examples/extensions/file-trigger.ts +41 -41
- package/examples/extensions/git-checkpoint.ts +53 -53
- package/examples/extensions/git-merge-and-resolve.ts +115 -115
- package/examples/extensions/github-issue-autocomplete.ts +185 -185
- package/examples/extensions/gondolin/index.ts +531 -531
- package/examples/extensions/gondolin/package-lock.json +185 -185
- package/examples/extensions/gondolin/package.json +19 -19
- package/examples/extensions/handoff.ts +199 -199
- package/examples/extensions/hello.ts +26 -26
- package/examples/extensions/hidden-thinking-label.ts +53 -53
- package/examples/extensions/inline-bash.ts +94 -94
- package/examples/extensions/input-transform-streaming.ts +39 -39
- package/examples/extensions/input-transform.ts +43 -43
- package/examples/extensions/interactive-shell.ts +196 -196
- package/examples/extensions/mac-system-theme.ts +47 -47
- package/examples/extensions/message-renderer.ts +59 -59
- package/examples/extensions/minimal-mode.ts +426 -426
- package/examples/extensions/modal-editor.ts +85 -85
- package/examples/extensions/model-status.ts +31 -31
- package/examples/extensions/notify.ts +55 -55
- package/examples/extensions/overlay-qa-tests.ts +1450 -1450
- package/examples/extensions/overlay-test.ts +153 -153
- package/examples/extensions/permission-gate.ts +34 -34
- package/examples/extensions/pirate.ts +47 -47
- package/examples/extensions/plan-mode/README.md +66 -66
- package/examples/extensions/plan-mode/index.ts +390 -390
- package/examples/extensions/plan-mode/utils.ts +168 -168
- package/examples/extensions/preset.ts +436 -436
- package/examples/extensions/project-trust.ts +64 -64
- package/examples/extensions/prompt-customizer.ts +97 -97
- package/examples/extensions/protected-paths.ts +30 -30
- package/examples/extensions/provider-payload.ts +18 -18
- package/examples/extensions/qna.ts +122 -122
- package/examples/extensions/question.ts +285 -285
- package/examples/extensions/questionnaire.ts +448 -448
- package/examples/extensions/rainbow-editor.ts +88 -88
- package/examples/extensions/reload-runtime.ts +37 -37
- package/examples/extensions/rpc-demo.ts +118 -118
- package/examples/extensions/sandbox/index.ts +321 -321
- package/examples/extensions/sandbox/package-lock.json +92 -92
- package/examples/extensions/sandbox/package.json +19 -19
- package/examples/extensions/send-user-message.ts +97 -97
- package/examples/extensions/session-name.ts +27 -27
- package/examples/extensions/shutdown-command.ts +63 -63
- package/examples/extensions/snake.ts +343 -343
- package/examples/extensions/space-invaders.ts +560 -560
- package/examples/extensions/ssh.ts +220 -220
- package/examples/extensions/status-line.ts +32 -32
- package/examples/extensions/structured-output.ts +65 -65
- package/examples/extensions/subagent/README.md +175 -175
- package/examples/extensions/subagent/agents/planner.md +37 -37
- package/examples/extensions/subagent/agents/reviewer.md +35 -35
- package/examples/extensions/subagent/agents/scout.md +50 -50
- package/examples/extensions/subagent/agents/worker.md +24 -24
- package/examples/extensions/subagent/agents.ts +126 -126
- package/examples/extensions/subagent/index.ts +1015 -1015
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
- package/examples/extensions/subagent/prompts/implement.md +10 -10
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
- package/examples/extensions/summarize.ts +209 -209
- package/examples/extensions/system-prompt-header.ts +17 -17
- package/examples/extensions/tic-tac-toe.ts +1008 -1008
- package/examples/extensions/timed-confirm.ts +70 -70
- package/examples/extensions/titlebar-spinner.ts +58 -58
- package/examples/extensions/todo.ts +297 -297
- package/examples/extensions/tool-override.ts +144 -144
- package/examples/extensions/tools.ts +146 -146
- package/examples/extensions/trigger-compact.ts +50 -50
- package/examples/extensions/truncated-tool.ts +195 -195
- package/examples/extensions/widget-placement.ts +9 -9
- package/examples/extensions/with-deps/index.ts +32 -32
- package/examples/extensions/with-deps/package-lock.json +31 -31
- package/examples/extensions/with-deps/package.json +22 -22
- package/examples/extensions/working-indicator.ts +123 -123
- package/examples/extensions/working-message-test.ts +25 -25
- package/examples/rpc-extension-ui.ts +632 -632
- package/examples/sdk/01-minimal.ts +26 -26
- package/examples/sdk/02-custom-model.ts +53 -53
- package/examples/sdk/03-custom-prompt.ts +75 -75
- package/examples/sdk/04-skills.ts +55 -55
- package/examples/sdk/05-tools.ts +48 -48
- package/examples/sdk/06-extensions.ts +99 -99
- package/examples/sdk/07-context-files.ts +47 -47
- package/examples/sdk/08-prompt-templates.ts +51 -51
- package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
- package/examples/sdk/10-settings.ts +53 -53
- package/examples/sdk/11-sessions.ts +52 -52
- package/examples/sdk/12-full-control.ts +79 -79
- package/examples/sdk/13-session-runtime.ts +67 -67
- package/examples/sdk/README.md +144 -144
- package/package.json +3 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +0 -57
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +0 -96
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +0 -119
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +0 -85
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +0 -620
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +0 -56
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +0 -32
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +0 -49
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +0 -93
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +0 -128
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +0 -38
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +0 -29
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +0 -171
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +0 -1261
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +0 -13
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +0 -358
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +0 -77
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +0 -512
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +0 -43
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +0 -121
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +0 -82
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +0 -210
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +0 -55
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +0 -206
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +0 -106
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +0 -356
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +0 -297
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +0 -60
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +0 -68
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +0 -106
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +0 -51
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +0 -6
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +0 -40
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +0 -52
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +0 -24
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +0 -70
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +0 -36
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +0 -61
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +0 -42
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +0 -33
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +0 -102
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +0 -21
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +0 -25
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +0 -32
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +0 -13
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +0 -52
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +0 -33
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +0 -95
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +0 -77
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +0 -63
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +0 -94
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +0 -394
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +0 -29
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +0 -120
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +0 -246
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +0 -457
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +0 -8
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +0 -8
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +0 -31
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +0 -21
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +0 -31
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +0 -3
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/demigodmode/pi-web-agent/main/docs/public/pi-web-agent-banner.png" alt="pi-web-agent: bounded web research for Pi" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# pi-web-agent
|
|
6
|
+
|
|
7
|
+
[](https://github.com/demigodmode/pi-web-agent/actions/workflows/ci.yml)
|
|
8
|
+
[](https://www.npmjs.com/package/@demigodmode/pi-web-agent)
|
|
9
|
+
[](https://demigodmode.github.io/pi-web-agent/)
|
|
10
|
+
|
|
11
|
+
One public tool, `web_explore`, that does bounded web research for Pi: search, fetch, targeted browser rendering, ranking, and honest caveats, all behind a single call.
|
|
12
|
+
|
|
13
|
+
> Most agent web tooling blurs search, fetch, rendering, and synthesis into one vague thing. `pi-web-agent` keeps that boundary simple, and it is stricter about what it actually did: bot-check pages, narrow source sets, unreadable threads, and conflicting evidence show up as caveats instead of fake confidence.
|
|
14
|
+
|
|
15
|
+
## What you get
|
|
16
|
+
|
|
17
|
+
- **One tool.** `web_explore` handles direct links, discovery, HTTP reads, targeted headless rendering, source ranking, source-quality checks, and caveats internally.
|
|
18
|
+
- **Reads the real content behind links.** Paste a GitHub, PDF, or YouTube URL and it pulls the actual thing (GitHub files/issues/PRs from the API, PDF text, YouTube transcripts), keyless. So "summarize this PDF" or "what does this repo do" works off the source, not the page shell.
|
|
19
|
+
- **Six search backends.** DuckDuckGo (keyless default), SearXNG, Brave, You.com, Exa, Tavily.
|
|
20
|
+
- **Optional search fanout.** Query several backends at once, dedupe, and rank pages that more than one provider agreed on to the top. Off by default; flip it to `on` or `auto`.
|
|
21
|
+
- **Honest by default.** Weak, narrow, blocked, or cautionary evidence gets flagged instead of dressed up as confidence.
|
|
22
|
+
- **Bounded output.** `compact` / `preview` / `verbose` transcript modes.
|
|
23
|
+
- **Zero-config to start.** Runs keyless out of the box (DuckDuckGo search, local browser, the built-in readers). Opt into hosted backends, fallback, search fanout, and per-tool output modes through config when you want more control.
|
|
24
|
+
|
|
25
|
+
## Why pi-web-agent
|
|
26
|
+
|
|
27
|
+
Compared to other web tooling for agents:
|
|
28
|
+
|
|
29
|
+
- **Hands-off.** No curator, no browser windows to approve, no step that pops you out of your session. Ask `web_explore` once and the answer comes back with caveats. Nothing to babysit.
|
|
30
|
+
- **Keyless by default.** Search, page reads, and the GitHub/PDF/YouTube readers all work with no API keys. Add hosted providers only when you want them.
|
|
31
|
+
- **Bounded and honest.** Compact output by default, and it says when a read was not good enough instead of returning fake confidence.
|
|
32
|
+
|
|
33
|
+
## Install
|
|
34
|
+
|
|
35
|
+
> `pi-web-agent` requires Pi 0.74+ (Pi packages moved to the `@earendil-works/*` scope). Update Pi before updating this package. On older Pi, stay on `@demigodmode/pi-web-agent@0.6.x`.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pi install npm:@demigodmode/pi-web-agent
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Reload or restart Pi after installing, then:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
/web-agent doctor # check it loaded and show configured backends
|
|
45
|
+
/web-agent # action menu
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Update later with `pi update --extensions`.
|
|
49
|
+
|
|
50
|
+
**Browser rendering:** headless first tries a detected Chromium-family browser (Chrome, Chromium, Edge, Brave). If none is found, it falls back to Playwright-managed Chromium. Firefox/Safari-only systems still get search and plain HTTP reads.
|
|
51
|
+
|
|
52
|
+
## Usage
|
|
53
|
+
|
|
54
|
+
Ask `web_explore` a web question:
|
|
55
|
+
|
|
56
|
+
> Find current docs and discussions on configuring Vitest coverage with the v8 provider.
|
|
57
|
+
|
|
58
|
+
Or hand it a link to read:
|
|
59
|
+
|
|
60
|
+
> Summarize this PDF: https://arxiv.org/pdf/1706.03762
|
|
61
|
+
|
|
62
|
+
If a pass comes back thin, call `web_explore` again with a narrower query.
|
|
63
|
+
|
|
64
|
+
## Backends
|
|
65
|
+
|
|
66
|
+
Defaults are DuckDuckGo search, plain HTTP fetch, and local-browser headless. Switch providers from `/web-agent settings → Backends`. API keys stay in environment variables, never in config files.
|
|
67
|
+
|
|
68
|
+
| Backend | Role | Enable with |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| DuckDuckGo | search (default) | nothing, keyless |
|
|
71
|
+
| SearXNG | search (self-hosted) | base URL |
|
|
72
|
+
| Brave | search (hosted) | `PI_WEB_AGENT_BRAVE_API_KEY` |
|
|
73
|
+
| You.com | search (hosted) | `YDC_API_KEY` |
|
|
74
|
+
| Exa | search (hosted) | `EXA_API_KEY` |
|
|
75
|
+
| Tavily | search (hosted) | `TAVILY_API_KEY` |
|
|
76
|
+
| Firecrawl | fetch (self-hosted) | base URL + `PI_WEB_AGENT_FIRECRAWL_API_KEY` |
|
|
77
|
+
| GitHub reader | content | `GITHUB_TOKEN` (optional, raises the rate limit) |
|
|
78
|
+
|
|
79
|
+
Full config shape (fallback, SearXNG/Firecrawl options, fanout): see the [self-hosted backends docs](https://demigodmode.github.io/pi-web-agent/self-hosted-backends).
|
|
80
|
+
|
|
81
|
+
## Settings
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
/web-agent settings # main UI
|
|
85
|
+
/web-agent doctor # health check
|
|
86
|
+
/web-agent show # effective config
|
|
87
|
+
/web-agent changelog
|
|
88
|
+
/web-agent mode web_explore verbose # per-tool presentation mode
|
|
89
|
+
/web-agent reset project | global
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Config is JSON, and project config overrides global:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
Global: ~/.pi/agent/extensions/pi-web-agent/config.json
|
|
96
|
+
Project: .pi/extensions/pi-web-agent/config.json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"presentation": {
|
|
102
|
+
"defaultMode": "compact",
|
|
103
|
+
"tools": { "web_explore": { "mode": "verbose" } }
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Presentation modes:
|
|
109
|
+
|
|
110
|
+
- `compact`: short summary, the default everywhere
|
|
111
|
+
- `preview`: slightly richer bounded view
|
|
112
|
+
- `verbose`: fuller bounded view
|
|
113
|
+
|
|
114
|
+
## Docs
|
|
115
|
+
|
|
116
|
+
Full docs: <https://demigodmode.github.io/pi-web-agent/>. Work on them locally with `npm run docs:dev`.
|
|
117
|
+
|
|
118
|
+
## Development
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npm install
|
|
122
|
+
npm test
|
|
123
|
+
npm run lint
|
|
124
|
+
npm run build
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Local Pi work uses `.pi/extensions/pi-web-agent.ts`; run `/reload` after changes.
|
|
128
|
+
|
|
129
|
+
## License
|
|
130
|
+
|
|
131
|
+
AGPL-3.0-only. See [LICENSE](LICENSE).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@selesai/bundled-pi-web-agent",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Bundled pi-web-agent extension for reliable web access with explicit search, fetch, and headless boundaries. Vendored source-first from @demigodmode/pi-web-agent.",
|
|
6
6
|
"type": "module",
|
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
"cheerio": "^1.1.0",
|
|
23
23
|
"jsdom": "^26.0.0",
|
|
24
24
|
"playwright": "^1.60.0",
|
|
25
|
-
"typebox": "^1.1.37"
|
|
25
|
+
"typebox": "^1.1.37",
|
|
26
|
+
"unpdf": "^1.8.1",
|
|
27
|
+
"youtube-caption-extractor": "^1.10.2"
|
|
26
28
|
},
|
|
27
29
|
"peerDependencies": {
|
|
28
30
|
"@selesai/code": "*",
|
|
@@ -1,19 +1,27 @@
|
|
|
1
|
+
import type { FanoutMode, SearchProviderName } from '../types.js';
|
|
2
|
+
|
|
1
3
|
export type SearxngOptions = {
|
|
2
4
|
categories?: string[];
|
|
3
5
|
language?: string;
|
|
4
6
|
safesearch?: 0 | 1 | 2;
|
|
5
7
|
};
|
|
6
8
|
|
|
9
|
+
export type FanoutConfig = {
|
|
10
|
+
mode: FanoutMode;
|
|
11
|
+
providers?: SearchProviderName[];
|
|
12
|
+
};
|
|
13
|
+
|
|
7
14
|
export type FirecrawlOptions = {
|
|
8
15
|
formats?: string[];
|
|
9
16
|
onlyMainContent?: boolean;
|
|
10
17
|
};
|
|
11
18
|
|
|
12
19
|
export type SearchBackendConfig = {
|
|
13
|
-
provider: 'duckduckgo' | 'searxng' | 'brave';
|
|
20
|
+
provider: 'duckduckgo' | 'searxng' | 'brave' | 'youcom' | 'exa' | 'tavily';
|
|
14
21
|
baseUrl?: string;
|
|
15
22
|
fallback?: 'duckduckgo';
|
|
16
23
|
options?: SearxngOptions;
|
|
24
|
+
fanout?: FanoutConfig;
|
|
17
25
|
};
|
|
18
26
|
|
|
19
27
|
export type FetchBackendConfig = {
|
|
@@ -39,7 +47,7 @@ export type BackendConfigOverride = {
|
|
|
39
47
|
|
|
40
48
|
export type BackendConfigFile = {
|
|
41
49
|
backends?: {
|
|
42
|
-
search?: { provider?: unknown; baseUrl?: unknown; fallback?: unknown; options?: unknown };
|
|
50
|
+
search?: { provider?: unknown; baseUrl?: unknown; fallback?: unknown; options?: unknown; fanout?: unknown };
|
|
43
51
|
fetch?: { provider?: unknown; baseUrl?: unknown; apiKey?: unknown; fallback?: unknown; options?: unknown };
|
|
44
52
|
headless?: { provider?: unknown };
|
|
45
53
|
};
|
|
@@ -78,6 +86,37 @@ function extractFirecrawlOptions(value: unknown): FirecrawlOptions | undefined {
|
|
|
78
86
|
return Object.keys(options).length > 0 ? options : undefined;
|
|
79
87
|
}
|
|
80
88
|
|
|
89
|
+
const PROVIDER_NAMES: SearchProviderName[] = ['duckduckgo', 'searxng', 'brave', 'youcom', 'exa', 'tavily'];
|
|
90
|
+
|
|
91
|
+
export function usableSearchProviders(
|
|
92
|
+
search: SearchBackendConfig,
|
|
93
|
+
env: NodeJS.ProcessEnv = process.env
|
|
94
|
+
): SearchProviderName[] {
|
|
95
|
+
// Match the provider implementations, which treat a blank/whitespace key as unconfigured.
|
|
96
|
+
const usable: SearchProviderName[] = ['duckduckgo']; // keyless, always usable
|
|
97
|
+
if (search.baseUrl?.trim()) usable.push('searxng');
|
|
98
|
+
if (env.PI_WEB_AGENT_BRAVE_API_KEY?.trim()) usable.push('brave');
|
|
99
|
+
if (env.YDC_API_KEY?.trim()) usable.push('youcom');
|
|
100
|
+
if (env.EXA_API_KEY?.trim()) usable.push('exa');
|
|
101
|
+
if (env.TAVILY_API_KEY?.trim()) usable.push('tavily');
|
|
102
|
+
return usable;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function extractFanoutConfig(value: unknown): FanoutConfig | undefined {
|
|
106
|
+
if (!value || typeof value !== 'object') return undefined;
|
|
107
|
+
const raw = value as { mode?: unknown; providers?: unknown };
|
|
108
|
+
if (raw.mode !== 'off' && raw.mode !== 'on' && raw.mode !== 'auto') return undefined;
|
|
109
|
+
const config: FanoutConfig = { mode: raw.mode };
|
|
110
|
+
if (Array.isArray(raw.providers)) {
|
|
111
|
+
const providers = raw.providers.filter(
|
|
112
|
+
(p): p is SearchProviderName => typeof p === 'string' && (PROVIDER_NAMES as string[]).includes(p)
|
|
113
|
+
);
|
|
114
|
+
if (providers.length !== raw.providers.length) return undefined; // fail loud on any invalid entry
|
|
115
|
+
if (providers.length > 0) config.providers = providers;
|
|
116
|
+
}
|
|
117
|
+
return config;
|
|
118
|
+
}
|
|
119
|
+
|
|
81
120
|
export function extractBackendConfigOverride(
|
|
82
121
|
file: BackendConfigFile | null | undefined
|
|
83
122
|
): BackendConfigOverride {
|
|
@@ -87,7 +126,10 @@ export function extractBackendConfigOverride(
|
|
|
87
126
|
if (
|
|
88
127
|
backends?.search?.provider === 'duckduckgo' ||
|
|
89
128
|
backends?.search?.provider === 'searxng' ||
|
|
90
|
-
backends?.search?.provider === 'brave'
|
|
129
|
+
backends?.search?.provider === 'brave' ||
|
|
130
|
+
backends?.search?.provider === 'youcom' ||
|
|
131
|
+
backends?.search?.provider === 'exa' ||
|
|
132
|
+
backends?.search?.provider === 'tavily'
|
|
91
133
|
) {
|
|
92
134
|
override.search = { provider: backends.search.provider };
|
|
93
135
|
if (backends.search.provider === 'searxng' && typeof backends.search.baseUrl === 'string') {
|
|
@@ -104,6 +146,11 @@ export function extractBackendConfigOverride(
|
|
|
104
146
|
}
|
|
105
147
|
}
|
|
106
148
|
|
|
149
|
+
const fanout = extractFanoutConfig(backends?.search?.fanout);
|
|
150
|
+
if (fanout) {
|
|
151
|
+
override.search = { ...(override.search ?? {}), fanout };
|
|
152
|
+
}
|
|
153
|
+
|
|
107
154
|
if (backends?.fetch?.provider === 'http' || backends?.fetch?.provider === 'firecrawl') {
|
|
108
155
|
override.fetch = { provider: backends.fetch.provider };
|
|
109
156
|
if (typeof backends.fetch.baseUrl === 'string') {
|
|
@@ -139,8 +186,8 @@ export function validateBackendConfig(config: BackendConfig): string[] {
|
|
|
139
186
|
issues.push('fetch provider firecrawl requires backends.fetch.baseUrl');
|
|
140
187
|
}
|
|
141
188
|
|
|
142
|
-
if (config.search.fallback === 'duckduckgo' && config.search.provider !== 'searxng' && config.search.provider !== 'brave') {
|
|
143
|
-
issues.push('search fallback duckduckgo is only supported when search provider is searxng or
|
|
189
|
+
if (config.search.fallback === 'duckduckgo' && config.search.provider !== 'searxng' && config.search.provider !== 'brave' && config.search.provider !== 'youcom' && config.search.provider !== 'exa' && config.search.provider !== 'tavily') {
|
|
190
|
+
issues.push('search fallback duckduckgo is only supported when search provider is searxng, brave, youcom, exa, or tavily');
|
|
144
191
|
}
|
|
145
192
|
|
|
146
193
|
if (config.fetch.fallback === 'http' && config.fetch.provider !== 'firecrawl') {
|
|
@@ -166,6 +213,16 @@ export function validateBackendConfig(config: BackendConfig): string[] {
|
|
|
166
213
|
issues.push('fetch options.formats must contain at least one format when provided');
|
|
167
214
|
}
|
|
168
215
|
|
|
216
|
+
const fanout = config.search.fanout;
|
|
217
|
+
if (fanout) {
|
|
218
|
+
if (fanout.mode !== 'off' && fanout.mode !== 'on' && fanout.mode !== 'auto') {
|
|
219
|
+
issues.push('search fanout.mode must be off, on, or auto');
|
|
220
|
+
}
|
|
221
|
+
if (fanout.providers?.includes('searxng') && !config.search.baseUrl) {
|
|
222
|
+
issues.push('search fanout with searxng requires backends.search.baseUrl');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
169
226
|
return issues;
|
|
170
227
|
}
|
|
171
228
|
|
|
@@ -18,6 +18,18 @@ function braveDoctorUrl() {
|
|
|
18
18
|
return url.toString();
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
function youcomDoctorBody() {
|
|
22
|
+
return JSON.stringify({ query: 'pi-web-agent-doctor', max_results: 1 });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function exaDoctorBody() {
|
|
26
|
+
return JSON.stringify({ query: 'pi-web-agent-doctor', numResults: 1 });
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function tavilyDoctorBody() {
|
|
30
|
+
return JSON.stringify({ query: 'pi-web-agent-doctor', max_results: 1 });
|
|
31
|
+
}
|
|
32
|
+
|
|
21
33
|
function searxngDoctorUrl(baseUrl: string, options: SearxngOptions = {}) {
|
|
22
34
|
const url = new URL('/search', baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`);
|
|
23
35
|
url.searchParams.set('q', 'pi-web-agent-doctor');
|
|
@@ -78,6 +90,99 @@ export async function checkBackendHealth(
|
|
|
78
90
|
timeout.done();
|
|
79
91
|
}
|
|
80
92
|
}
|
|
93
|
+
} else if (config.search.provider === 'youcom') {
|
|
94
|
+
const apiKey = process.env.YDC_API_KEY;
|
|
95
|
+
if (!apiKey?.trim()) {
|
|
96
|
+
lines.push('search backend: youcom warning (missing YDC_API_KEY)');
|
|
97
|
+
} else {
|
|
98
|
+
const timeout = withTimeout(timeoutMs);
|
|
99
|
+
try {
|
|
100
|
+
const response = await fetchImpl('https://api.you.com/v1/agents/search', {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
headers: {
|
|
103
|
+
Accept: 'application/json',
|
|
104
|
+
'Content-Type': 'application/json',
|
|
105
|
+
'X-API-Key': apiKey
|
|
106
|
+
},
|
|
107
|
+
body: youcomDoctorBody(),
|
|
108
|
+
signal: timeout.signal
|
|
109
|
+
});
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
lines.push(`search backend: youcom warning (HTTP ${response.status})`);
|
|
112
|
+
} else {
|
|
113
|
+
const json = (await response.json()) as { results?: unknown };
|
|
114
|
+
lines.push(Array.isArray(json.results)
|
|
115
|
+
? 'search backend: youcom ok'
|
|
116
|
+
: 'search backend: youcom warning (unexpected response)');
|
|
117
|
+
}
|
|
118
|
+
} catch (error) {
|
|
119
|
+
lines.push(`search backend: youcom warning (${message(error)})`);
|
|
120
|
+
} finally {
|
|
121
|
+
timeout.done();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
} else if (config.search.provider === 'exa') {
|
|
125
|
+
const apiKey = process.env.EXA_API_KEY;
|
|
126
|
+
if (!apiKey?.trim()) {
|
|
127
|
+
lines.push('search backend: exa warning (missing EXA_API_KEY)');
|
|
128
|
+
} else {
|
|
129
|
+
const timeout = withTimeout(timeoutMs);
|
|
130
|
+
try {
|
|
131
|
+
const response = await fetchImpl('https://api.exa.ai/search', {
|
|
132
|
+
method: 'POST',
|
|
133
|
+
headers: {
|
|
134
|
+
Accept: 'application/json',
|
|
135
|
+
'Content-Type': 'application/json',
|
|
136
|
+
'x-api-key': apiKey
|
|
137
|
+
},
|
|
138
|
+
body: exaDoctorBody(),
|
|
139
|
+
signal: timeout.signal
|
|
140
|
+
});
|
|
141
|
+
if (!response.ok) {
|
|
142
|
+
lines.push(`search backend: exa warning (HTTP ${response.status})`);
|
|
143
|
+
} else {
|
|
144
|
+
const json = (await response.json()) as { results?: unknown };
|
|
145
|
+
lines.push(Array.isArray(json.results)
|
|
146
|
+
? 'search backend: exa ok'
|
|
147
|
+
: 'search backend: exa warning (unexpected response)');
|
|
148
|
+
}
|
|
149
|
+
} catch (error) {
|
|
150
|
+
lines.push(`search backend: exa warning (${message(error)})`);
|
|
151
|
+
} finally {
|
|
152
|
+
timeout.done();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
} else if (config.search.provider === 'tavily') {
|
|
156
|
+
const apiKey = process.env.TAVILY_API_KEY;
|
|
157
|
+
if (!apiKey?.trim()) {
|
|
158
|
+
lines.push('search backend: tavily warning (missing TAVILY_API_KEY)');
|
|
159
|
+
} else {
|
|
160
|
+
const timeout = withTimeout(timeoutMs);
|
|
161
|
+
try {
|
|
162
|
+
const response = await fetchImpl('https://api.tavily.com/search', {
|
|
163
|
+
method: 'POST',
|
|
164
|
+
headers: {
|
|
165
|
+
Accept: 'application/json',
|
|
166
|
+
'Content-Type': 'application/json',
|
|
167
|
+
Authorization: `Bearer ${apiKey}`
|
|
168
|
+
},
|
|
169
|
+
body: tavilyDoctorBody(),
|
|
170
|
+
signal: timeout.signal
|
|
171
|
+
});
|
|
172
|
+
if (!response.ok) {
|
|
173
|
+
lines.push(`search backend: tavily warning (HTTP ${response.status})`);
|
|
174
|
+
} else {
|
|
175
|
+
const json = (await response.json()) as { results?: unknown };
|
|
176
|
+
lines.push(Array.isArray(json.results)
|
|
177
|
+
? 'search backend: tavily ok'
|
|
178
|
+
: 'search backend: tavily warning (unexpected response)');
|
|
179
|
+
}
|
|
180
|
+
} catch (error) {
|
|
181
|
+
lines.push(`search backend: tavily warning (${message(error)})`);
|
|
182
|
+
} finally {
|
|
183
|
+
timeout.done();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
81
186
|
} else if (!config.search.baseUrl) {
|
|
82
187
|
lines.push('search backend: searxng warning (missing baseUrl)');
|
|
83
188
|
} else {
|
|
@@ -99,6 +204,37 @@ export async function checkBackendHealth(
|
|
|
99
204
|
lines.push(`search fallback: ${config.search.fallback}`);
|
|
100
205
|
}
|
|
101
206
|
|
|
207
|
+
if (config.search.fanout && config.search.fanout.mode !== 'off') {
|
|
208
|
+
const providers = config.search.fanout.providers || ['duckduckgo', 'searxng', 'brave', 'youcom', 'exa', 'tavily'];
|
|
209
|
+
lines.push(`search fanout: ${config.search.fanout.mode} (${providers.join(', ')})`);
|
|
210
|
+
|
|
211
|
+
for (const provider of providers) {
|
|
212
|
+
if (provider === 'searxng' && !config.search.baseUrl) {
|
|
213
|
+
lines.push('search fanout provider searxng warning (missing baseUrl)');
|
|
214
|
+
} else if (provider === 'brave') {
|
|
215
|
+
const apiKey = process.env.PI_WEB_AGENT_BRAVE_API_KEY ?? readBraveKeyFromSettings();
|
|
216
|
+
if (!apiKey?.trim()) {
|
|
217
|
+
lines.push('search fanout provider brave warning (missing Brave API key — set webAgent.braveApiKey in settings.json or PI_WEB_AGENT_BRAVE_API_KEY env var)');
|
|
218
|
+
}
|
|
219
|
+
} else if (provider === 'youcom') {
|
|
220
|
+
const apiKey = process.env.YDC_API_KEY;
|
|
221
|
+
if (!apiKey?.trim()) {
|
|
222
|
+
lines.push('search fanout provider youcom warning (missing YDC_API_KEY)');
|
|
223
|
+
}
|
|
224
|
+
} else if (provider === 'exa') {
|
|
225
|
+
const apiKey = process.env.EXA_API_KEY;
|
|
226
|
+
if (!apiKey?.trim()) {
|
|
227
|
+
lines.push('search fanout provider exa warning (missing EXA_API_KEY)');
|
|
228
|
+
}
|
|
229
|
+
} else if (provider === 'tavily') {
|
|
230
|
+
const apiKey = process.env.TAVILY_API_KEY;
|
|
231
|
+
if (!apiKey?.trim()) {
|
|
232
|
+
lines.push('search fanout provider tavily warning (missing TAVILY_API_KEY)');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
102
238
|
if (config.fetch.provider === 'http') {
|
|
103
239
|
lines.push('fetch backend: http');
|
|
104
240
|
} else if (!config.fetch.baseUrl) {
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { createFirecrawlFetcher } from '../fetch/firecrawl-fetch.js';
|
|
2
2
|
import { createBraveSearchTool } from '../search/brave.js';
|
|
3
|
+
import { createYouComSearchTool } from '../search/youcom.js';
|
|
4
|
+
import { createExaSearchTool } from '../search/exa.js';
|
|
5
|
+
import { createTavilySearchTool } from '../search/tavily.js';
|
|
3
6
|
import { createSearxngSearchTool } from '../search/searxng.js';
|
|
7
|
+
import { createFanoutSearch } from '../search/fanout.js';
|
|
4
8
|
import { buildFetchPresentation } from '../presentation/fetch-presentation.js';
|
|
5
9
|
import { buildSearchPresentation } from '../presentation/search-presentation.js';
|
|
6
10
|
import { createWebFetchHeadlessTool } from '../tools/web-fetch-headless.js';
|
|
7
11
|
import { createWebFetchTool } from '../tools/web-fetch.js';
|
|
8
12
|
import { createWebSearchTool } from '../tools/web-search.js';
|
|
9
13
|
import { readBraveKeyFromSettings } from './settings-reader.js';
|
|
10
|
-
import type { WebFetchHeadlessResponse, WebFetchResponse, WebSearchResponse } from '../types.js';
|
|
11
|
-
import { DEFAULT_BACKEND_CONFIG, type BackendConfig } from './config.js';
|
|
14
|
+
import type { SearchProviderName, WebFetchHeadlessResponse, WebFetchResponse, WebSearchResponse } from '../types.js';
|
|
15
|
+
import { DEFAULT_BACKEND_CONFIG, type BackendConfig, usableSearchProviders } from './config.js';
|
|
16
|
+
import { createSpecialContentResolver } from '../readers/resolver.js';
|
|
17
|
+
import { createGithubReader } from '../readers/github-reader.js';
|
|
18
|
+
import { createPdfReader } from '../readers/pdf-reader.js';
|
|
19
|
+
import { createYoutubeReader } from '../readers/youtube-reader.js';
|
|
12
20
|
|
|
13
21
|
export type BackendSet = {
|
|
14
22
|
search: (input: { query: string }) => Promise<WebSearchResponse>;
|
|
@@ -20,6 +28,9 @@ export type BackendFactoryDeps = {
|
|
|
20
28
|
createDuckDuckGoSearch?: typeof createWebSearchTool;
|
|
21
29
|
createSearxngSearch?: typeof createSearxngSearchTool;
|
|
22
30
|
createBraveSearch?: typeof createBraveSearchTool;
|
|
31
|
+
createYouComSearch?: typeof createYouComSearchTool;
|
|
32
|
+
createExaSearch?: typeof createExaSearchTool;
|
|
33
|
+
createTavilySearch?: typeof createTavilySearchTool;
|
|
23
34
|
createHttpFetch?: typeof createWebFetchTool;
|
|
24
35
|
createFirecrawlFetch?: typeof createFirecrawlFetcher;
|
|
25
36
|
createHeadlessFetch?: typeof createWebFetchHeadlessTool;
|
|
@@ -60,7 +71,7 @@ function invalidFirecrawlFetch() {
|
|
|
60
71
|
function withSearchFallback(
|
|
61
72
|
primary: BackendSet['search'],
|
|
62
73
|
fallback: BackendSet['search'],
|
|
63
|
-
fallbackFrom: 'searxng' | 'brave'
|
|
74
|
+
fallbackFrom: 'searxng' | 'brave' | 'youcom' | 'exa' | 'tavily' | 'duckduckgo'
|
|
64
75
|
): BackendSet['search'] {
|
|
65
76
|
return async (input) => {
|
|
66
77
|
const first = await primary(input);
|
|
@@ -72,7 +83,10 @@ function withSearchFallback(
|
|
|
72
83
|
metadata: {
|
|
73
84
|
...second.metadata,
|
|
74
85
|
fallbackFrom,
|
|
75
|
-
fallbackReason: first.error?.message ?? `${fallbackFrom} search failed
|
|
86
|
+
fallbackReason: first.error?.message ?? `${fallbackFrom} search failed.`,
|
|
87
|
+
// Keep the primary's fanout provenance (which providers were tried/skipped) even though
|
|
88
|
+
// the answer came from the fallback backend.
|
|
89
|
+
...(first.metadata.fanout ? { fanout: first.metadata.fanout } : {})
|
|
76
90
|
}
|
|
77
91
|
};
|
|
78
92
|
return { ...result, presentation: buildSearchPresentation(result) };
|
|
@@ -107,17 +121,46 @@ export function createBackendSet(
|
|
|
107
121
|
const createDuckDuckGoSearch = deps.createDuckDuckGoSearch ?? createWebSearchTool;
|
|
108
122
|
const createSearxngSearch = deps.createSearxngSearch ?? createSearxngSearchTool;
|
|
109
123
|
const createBraveSearch = deps.createBraveSearch ?? createBraveSearchTool;
|
|
124
|
+
const createYouComSearch = deps.createYouComSearch ?? createYouComSearchTool;
|
|
125
|
+
const createExaSearch = deps.createExaSearch ?? createExaSearchTool;
|
|
126
|
+
const createTavilySearch = deps.createTavilySearch ?? createTavilySearchTool;
|
|
110
127
|
const createHttpFetch = deps.createHttpFetch ?? createWebFetchTool;
|
|
111
128
|
const createFirecrawlFetch = deps.createFirecrawlFetch ?? createFirecrawlFetcher;
|
|
112
129
|
const createHeadlessFetch = deps.createHeadlessFetch ?? createWebFetchHeadlessTool;
|
|
113
130
|
|
|
131
|
+
function buildProviderSearch(name: SearchProviderName): BackendSet['search'] {
|
|
132
|
+
switch (name) {
|
|
133
|
+
case 'searxng':
|
|
134
|
+
return config.search.baseUrl
|
|
135
|
+
? createSearxngSearch({ baseUrl: config.search.baseUrl, options: config.search.options })
|
|
136
|
+
: invalidSearxngSearch();
|
|
137
|
+
case 'brave':
|
|
138
|
+
return createBraveSearch({ apiKey: process.env.PI_WEB_AGENT_BRAVE_API_KEY ?? readBraveKeyFromSettings() });
|
|
139
|
+
case 'youcom':
|
|
140
|
+
return createYouComSearch({ apiKey: process.env.YDC_API_KEY });
|
|
141
|
+
case 'exa':
|
|
142
|
+
return createExaSearch({ apiKey: process.env.EXA_API_KEY });
|
|
143
|
+
case 'tavily':
|
|
144
|
+
return createTavilySearch({ apiKey: process.env.TAVILY_API_KEY });
|
|
145
|
+
case 'duckduckgo':
|
|
146
|
+
default:
|
|
147
|
+
return createDuckDuckGoSearch();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
114
151
|
let search = config.search.provider === 'searxng'
|
|
115
152
|
? config.search.baseUrl
|
|
116
153
|
? createSearxngSearch({ baseUrl: config.search.baseUrl, options: config.search.options })
|
|
117
154
|
: invalidSearxngSearch()
|
|
118
155
|
: config.search.provider === 'brave'
|
|
119
156
|
? createBraveSearch({ apiKey: process.env.PI_WEB_AGENT_BRAVE_API_KEY ?? readBraveKeyFromSettings() })
|
|
120
|
-
:
|
|
157
|
+
: config.search.provider === 'youcom'
|
|
158
|
+
? createYouComSearch({ apiKey: process.env.YDC_API_KEY })
|
|
159
|
+
: config.search.provider === 'exa'
|
|
160
|
+
? createExaSearch({ apiKey: process.env.EXA_API_KEY })
|
|
161
|
+
: config.search.provider === 'tavily'
|
|
162
|
+
? createTavilySearch({ apiKey: process.env.TAVILY_API_KEY })
|
|
163
|
+
: createDuckDuckGoSearch();
|
|
121
164
|
|
|
122
165
|
if (config.search.provider === 'searxng' && config.search.fallback === 'duckduckgo') {
|
|
123
166
|
search = withSearchFallback(search, createDuckDuckGoSearch(), 'searxng');
|
|
@@ -127,6 +170,48 @@ export function createBackendSet(
|
|
|
127
170
|
search = withSearchFallback(search, createDuckDuckGoSearch(), 'brave');
|
|
128
171
|
}
|
|
129
172
|
|
|
173
|
+
if (config.search.provider === 'youcom' && config.search.fallback === 'duckduckgo') {
|
|
174
|
+
search = withSearchFallback(search, createDuckDuckGoSearch(), 'youcom');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (config.search.provider === 'exa' && config.search.fallback === 'duckduckgo') {
|
|
178
|
+
search = withSearchFallback(search, createDuckDuckGoSearch(), 'exa');
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (config.search.provider === 'tavily' && config.search.fallback === 'duckduckgo') {
|
|
182
|
+
search = withSearchFallback(search, createDuckDuckGoSearch(), 'tavily');
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const fanoutConfig = config.search.fanout;
|
|
186
|
+
if (fanoutConfig && fanoutConfig.mode !== 'off') {
|
|
187
|
+
const baseNames =
|
|
188
|
+
fanoutConfig.providers && fanoutConfig.providers.length > 0
|
|
189
|
+
? fanoutConfig.providers
|
|
190
|
+
: usableSearchProviders(config.search);
|
|
191
|
+
// A configured DuckDuckGo fallback must still be honored under fanout: fold it into the set.
|
|
192
|
+
const providerNames =
|
|
193
|
+
config.search.fallback === 'duckduckgo' && !baseNames.includes('duckduckgo')
|
|
194
|
+
? [...baseNames, 'duckduckgo' as SearchProviderName]
|
|
195
|
+
: baseNames;
|
|
196
|
+
const ordered = [config.search.provider, ...providerNames.filter((n) => n !== config.search.provider)].filter(
|
|
197
|
+
(n, i, arr) => arr.indexOf(n) === i
|
|
198
|
+
);
|
|
199
|
+
search = createFanoutSearch({
|
|
200
|
+
providers: ordered.map((name) => ({ name, search: buildProviderSearch(name) })),
|
|
201
|
+
mode: fanoutConfig.mode
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Keep the keyless Tavily safety net for the no-key DuckDuckGo default, even under fanout —
|
|
206
|
+
// it wraps whatever search ended up being (plain DDG or the fanout set) so a total failure
|
|
207
|
+
// still has somewhere to go. Opt out with PI_WEB_AGENT_DISABLE_KEYLESS_FALLBACK=1.
|
|
208
|
+
const keylessFallbackDisabled = process.env.PI_WEB_AGENT_DISABLE_KEYLESS_FALLBACK === '1';
|
|
209
|
+
const usingDuckDuckGoDefault =
|
|
210
|
+
config.search.provider === 'duckduckgo' || !config.search.provider;
|
|
211
|
+
if (usingDuckDuckGoDefault && !keylessFallbackDisabled) {
|
|
212
|
+
search = withSearchFallback(search, createTavilySearch({ keyless: true }), 'duckduckgo');
|
|
213
|
+
}
|
|
214
|
+
|
|
130
215
|
const httpFetch = createHttpFetch();
|
|
131
216
|
let fetchPage = config.fetch.provider === 'firecrawl'
|
|
132
217
|
? config.fetch.baseUrl
|
|
@@ -144,9 +229,14 @@ export function createBackendSet(
|
|
|
144
229
|
fetchPage = withFetchFallback(fetchPage, httpFetch);
|
|
145
230
|
}
|
|
146
231
|
|
|
232
|
+
const fetchPageWithReaders = createSpecialContentResolver({
|
|
233
|
+
readers: [createGithubReader(), createPdfReader(), createYoutubeReader()],
|
|
234
|
+
fallback: fetchPage
|
|
235
|
+
});
|
|
236
|
+
|
|
147
237
|
return {
|
|
148
238
|
search,
|
|
149
|
-
fetchPage,
|
|
239
|
+
fetchPage: fetchPageWithReaders,
|
|
150
240
|
headlessFetch: createHeadlessFetch()
|
|
151
241
|
};
|
|
152
242
|
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
// ponytail: selesai stores the Brave API key in settings.json (webAgent.braveApiKey),
|
|
2
|
-
// set by the bundled web-agent-onboarding extension. Upstream pi-web-agent reads the
|
|
3
|
-
// key only from PI_WEB_AGENT_BRAVE_API_KEY env var. This helper bridges that gap with a
|
|
4
|
-
// minimal settings.json read. Ceiling: if selesai moves web search config elsewhere, this
|
|
5
|
-
// helper needs updating; upgrade path = upstream pi-web-agent adopting a settings hook.
|
|
6
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
7
|
-
import { getSettingsPath } from '@selesai/code';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Read the Brave API key from selesai settings.json (webAgent.braveApiKey).
|
|
11
|
-
* Returns undefined if settings.json or the key is absent. Never throws.
|
|
12
|
-
*/
|
|
13
|
-
export function readBraveKeyFromSettings(settingsPath: string = getSettingsPath()): string | undefined {
|
|
14
|
-
try {
|
|
15
|
-
if (!existsSync(settingsPath)) return undefined;
|
|
16
|
-
const raw = readFileSync(settingsPath, 'utf-8');
|
|
17
|
-
const parsed = JSON.parse(raw) as Record<string, unknown>;
|
|
18
|
-
const webAgent = parsed.webAgent;
|
|
19
|
-
if (!webAgent || typeof webAgent !== 'object' || Array.isArray(webAgent)) return undefined;
|
|
20
|
-
const apiKey = (webAgent as Record<string, unknown>).braveApiKey;
|
|
21
|
-
return typeof apiKey === 'string' && apiKey.trim() !== '' ? apiKey : undefined;
|
|
22
|
-
} catch {
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
1
|
+
// ponytail: selesai stores the Brave API key in settings.json (webAgent.braveApiKey),
|
|
2
|
+
// set by the bundled web-agent-onboarding extension. Upstream pi-web-agent reads the
|
|
3
|
+
// key only from PI_WEB_AGENT_BRAVE_API_KEY env var. This helper bridges that gap with a
|
|
4
|
+
// minimal settings.json read. Ceiling: if selesai moves web search config elsewhere, this
|
|
5
|
+
// helper needs updating; upgrade path = upstream pi-web-agent adopting a settings hook.
|
|
6
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
7
|
+
import { getSettingsPath } from '@selesai/code';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Read the Brave API key from selesai settings.json (webAgent.braveApiKey).
|
|
11
|
+
* Returns undefined if settings.json or the key is absent. Never throws.
|
|
12
|
+
*/
|
|
13
|
+
export function readBraveKeyFromSettings(settingsPath: string = getSettingsPath()): string | undefined {
|
|
14
|
+
try {
|
|
15
|
+
if (!existsSync(settingsPath)) return undefined;
|
|
16
|
+
const raw = readFileSync(settingsPath, 'utf-8');
|
|
17
|
+
const parsed = JSON.parse(raw) as Record<string, unknown>;
|
|
18
|
+
const webAgent = parsed.webAgent;
|
|
19
|
+
if (!webAgent || typeof webAgent !== 'object' || Array.isArray(webAgent)) return undefined;
|
|
20
|
+
const apiKey = (webAgent as Record<string, unknown>).braveApiKey;
|
|
21
|
+
return typeof apiKey === 'string' && apiKey.trim() !== '' ? apiKey : undefined;
|
|
22
|
+
} catch {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|