@f5-sales-demo/xcsh 19.51.2
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 +7073 -0
- package/README.md +14 -0
- package/examples/README.md +21 -0
- package/examples/custom-tools/README.md +109 -0
- package/examples/custom-tools/hello/index.ts +20 -0
- package/examples/custom-tools/todo/index.ts +206 -0
- package/examples/extensions/README.md +143 -0
- package/examples/extensions/api-demo.ts +89 -0
- package/examples/extensions/chalk-logger.ts +25 -0
- package/examples/extensions/hello.ts +32 -0
- package/examples/extensions/pirate.ts +43 -0
- package/examples/extensions/plan-mode.ts +551 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/todo.ts +296 -0
- package/examples/extensions/tools.ts +145 -0
- package/examples/extensions/with-deps/index.ts +36 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +16 -0
- package/examples/hooks/README.md +56 -0
- package/examples/hooks/auto-commit-on-exit.ts +48 -0
- package/examples/hooks/confirm-destructive.ts +58 -0
- package/examples/hooks/custom-compaction.ts +115 -0
- package/examples/hooks/dirty-repo-guard.ts +51 -0
- package/examples/hooks/file-trigger.ts +40 -0
- package/examples/hooks/git-checkpoint.ts +52 -0
- package/examples/hooks/handoff.ts +149 -0
- package/examples/hooks/permission-gate.ts +33 -0
- package/examples/hooks/protected-paths.ts +29 -0
- package/examples/hooks/qna.ts +118 -0
- package/examples/hooks/status-line.ts +39 -0
- package/examples/sdk/01-minimal.ts +21 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +43 -0
- package/examples/sdk/04-skills.ts +43 -0
- package/examples/sdk/06-extensions.ts +80 -0
- package/examples/sdk/06-hooks.ts +61 -0
- package/examples/sdk/07-context-files.ts +35 -0
- package/examples/sdk/08-prompt-templates.ts +41 -0
- package/examples/sdk/08-slash-commands.ts +46 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +54 -0
- package/examples/sdk/11-sessions.ts +47 -0
- package/examples/sdk/README.md +172 -0
- package/package.json +539 -0
- package/scripts/build-info/resolvers.ts +51 -0
- package/scripts/capture-ax-fixture.ts +84 -0
- package/scripts/capture-login-fixture.ts +30 -0
- package/scripts/check-workflow-field-coverage.ts +101 -0
- package/scripts/extension-uat-harness.ts +340 -0
- package/scripts/format-prompts.ts +68 -0
- package/scripts/generate-api-spec-index.ts +580 -0
- package/scripts/generate-branding-index.ts +81 -0
- package/scripts/generate-build-info.ts +106 -0
- package/scripts/generate-console-catalog.ts +88 -0
- package/scripts/generate-console-field-metadata.ts +74 -0
- package/scripts/generate-docs-index.ts +40 -0
- package/scripts/generate-template.ts +32 -0
- package/scripts/generate-terraform-index.ts +81 -0
- package/scripts/mermaid-gallery.ts +132 -0
- package/scripts/uat-matrix-modalities.ts +451 -0
- package/scripts/uat-matrix-report.ts +175 -0
- package/scripts/uat-matrix.ts +353 -0
- package/src/async/index.ts +2 -0
- package/src/async/job-manager.ts +416 -0
- package/src/async/support.ts +5 -0
- package/src/autoresearch/apply-contract-to-state.ts +1 -0
- package/src/autoresearch/command-resume.md +17 -0
- package/src/autoresearch/contract.ts +205 -0
- package/src/autoresearch/dashboard.ts +374 -0
- package/src/autoresearch/git.ts +191 -0
- package/src/autoresearch/helpers.ts +328 -0
- package/src/autoresearch/index.ts +402 -0
- package/src/autoresearch/prompt.md +236 -0
- package/src/autoresearch/resume-message.md +16 -0
- package/src/autoresearch/state.ts +303 -0
- package/src/autoresearch/tools/init-experiment.ts +400 -0
- package/src/autoresearch/tools/log-experiment.ts +793 -0
- package/src/autoresearch/tools/run-experiment.ts +679 -0
- package/src/autoresearch/types.ts +114 -0
- package/src/browser/acquire.ts +249 -0
- package/src/browser/actions.ts +126 -0
- package/src/browser/auth.ts +176 -0
- package/src/browser/ax.ts +134 -0
- package/src/browser/cdp-core.ts +45 -0
- package/src/browser/cdp-page-actions.ts +51 -0
- package/src/browser/chrome-locate.ts +66 -0
- package/src/browser/dom-context.ts +89 -0
- package/src/browser/dt-context.ts +100 -0
- package/src/browser/extension-bridge.ts +182 -0
- package/src/browser/extension-page-actions.ts +397 -0
- package/src/browser/extension-provider.ts +373 -0
- package/src/browser/index.ts +17 -0
- package/src/browser/input-commit.ts +74 -0
- package/src/browser/native-messaging.ts +20 -0
- package/src/browser/page-actions.ts +18 -0
- package/src/browser/provider.ts +155 -0
- package/src/browser/resolver.ts +126 -0
- package/src/browser/selector.ts +40 -0
- package/src/bun-imports.d.ts +22 -0
- package/src/capability/context-file.ts +43 -0
- package/src/capability/extension-module.ts +34 -0
- package/src/capability/extension.ts +47 -0
- package/src/capability/fs.ts +107 -0
- package/src/capability/hook.ts +40 -0
- package/src/capability/index.ts +438 -0
- package/src/capability/instruction.ts +37 -0
- package/src/capability/mcp.ts +74 -0
- package/src/capability/prompt.ts +35 -0
- package/src/capability/rule.ts +224 -0
- package/src/capability/settings.ts +34 -0
- package/src/capability/skill.ts +50 -0
- package/src/capability/slash-command.ts +40 -0
- package/src/capability/ssh.ts +41 -0
- package/src/capability/system-prompt.ts +34 -0
- package/src/capability/tool.ts +38 -0
- package/src/capability/types.ts +168 -0
- package/src/cli/agents-cli.ts +138 -0
- package/src/cli/args.ts +286 -0
- package/src/cli/chrome-cli.ts +88 -0
- package/src/cli/classify-install-target.ts +50 -0
- package/src/cli/commands/init-xdg.ts +27 -0
- package/src/cli/config-cli.ts +418 -0
- package/src/cli/file-processor.ts +121 -0
- package/src/cli/grep-cli.ts +160 -0
- package/src/cli/grievances-cli.ts +78 -0
- package/src/cli/initial-message.ts +58 -0
- package/src/cli/jupyter-cli.ts +106 -0
- package/src/cli/list-models.ts +128 -0
- package/src/cli/plugin-cli.ts +964 -0
- package/src/cli/read-cli.ts +68 -0
- package/src/cli/session-picker.ts +52 -0
- package/src/cli/setup-cli.ts +479 -0
- package/src/cli/shell-cli.ts +174 -0
- package/src/cli/ssh-cli.ts +179 -0
- package/src/cli/stats-cli.ts +182 -0
- package/src/cli/update-cli.ts +446 -0
- package/src/cli/web-search-cli.ts +203 -0
- package/src/cli.ts +123 -0
- package/src/commands/agents.ts +57 -0
- package/src/commands/chrome-host.ts +71 -0
- package/src/commands/chrome.ts +28 -0
- package/src/commands/commit.ts +36 -0
- package/src/commands/config.ts +51 -0
- package/src/commands/grep.ts +48 -0
- package/src/commands/grievances.ts +20 -0
- package/src/commands/jupyter.ts +32 -0
- package/src/commands/launch.ts +144 -0
- package/src/commands/plugin.ts +78 -0
- package/src/commands/read.ts +33 -0
- package/src/commands/setup.ts +42 -0
- package/src/commands/shell.ts +29 -0
- package/src/commands/ssh.ts +60 -0
- package/src/commands/stats.ts +29 -0
- package/src/commands/update.ts +21 -0
- package/src/commands/web-search.ts +46 -0
- package/src/commit/agentic/agent.ts +314 -0
- package/src/commit/agentic/fallback.ts +96 -0
- package/src/commit/agentic/index.ts +354 -0
- package/src/commit/agentic/prompts/analyze-file.md +22 -0
- package/src/commit/agentic/prompts/session-user.md +25 -0
- package/src/commit/agentic/prompts/split-confirm.md +1 -0
- package/src/commit/agentic/prompts/system.md +38 -0
- package/src/commit/agentic/state.ts +60 -0
- package/src/commit/agentic/tools/analyze-file.ts +127 -0
- package/src/commit/agentic/tools/git-file-diff.ts +191 -0
- package/src/commit/agentic/tools/git-hunk.ts +50 -0
- package/src/commit/agentic/tools/git-overview.ts +81 -0
- package/src/commit/agentic/tools/index.ts +54 -0
- package/src/commit/agentic/tools/propose-changelog.ts +139 -0
- package/src/commit/agentic/tools/propose-commit.ts +122 -0
- package/src/commit/agentic/tools/recent-commits.ts +81 -0
- package/src/commit/agentic/tools/schemas.ts +31 -0
- package/src/commit/agentic/tools/split-commit.ts +251 -0
- package/src/commit/agentic/topo-sort.ts +44 -0
- package/src/commit/agentic/trivial.ts +51 -0
- package/src/commit/agentic/validation.ts +183 -0
- package/src/commit/analysis/conventional.ts +122 -0
- package/src/commit/analysis/index.ts +4 -0
- package/src/commit/analysis/scope.ts +242 -0
- package/src/commit/analysis/summary.ts +105 -0
- package/src/commit/analysis/validation.ts +66 -0
- package/src/commit/changelog/detect.ts +40 -0
- package/src/commit/changelog/generate.ts +101 -0
- package/src/commit/changelog/index.ts +234 -0
- package/src/commit/changelog/parse.ts +44 -0
- package/src/commit/cli.ts +85 -0
- package/src/commit/git/diff.ts +148 -0
- package/src/commit/index.ts +5 -0
- package/src/commit/map-reduce/index.ts +69 -0
- package/src/commit/map-reduce/map-phase.ts +193 -0
- package/src/commit/map-reduce/reduce-phase.ts +108 -0
- package/src/commit/map-reduce/utils.ts +9 -0
- package/src/commit/message.ts +11 -0
- package/src/commit/model-selection.ts +66 -0
- package/src/commit/pipeline.ts +242 -0
- package/src/commit/prompts/analysis-system.md +148 -0
- package/src/commit/prompts/analysis-user.md +38 -0
- package/src/commit/prompts/changelog-system.md +50 -0
- package/src/commit/prompts/changelog-user.md +18 -0
- package/src/commit/prompts/file-observer-system.md +24 -0
- package/src/commit/prompts/file-observer-user.md +8 -0
- package/src/commit/prompts/reduce-system.md +50 -0
- package/src/commit/prompts/reduce-user.md +17 -0
- package/src/commit/prompts/summary-retry.md +3 -0
- package/src/commit/prompts/summary-system.md +38 -0
- package/src/commit/prompts/summary-user.md +13 -0
- package/src/commit/prompts/types-description.md +2 -0
- package/src/commit/types.ts +118 -0
- package/src/commit/utils/exclusions.ts +42 -0
- package/src/commit/utils.ts +44 -0
- package/src/config/auto-config.ts +698 -0
- package/src/config/context-schema.json +115 -0
- package/src/config/file-lock.ts +121 -0
- package/src/config/keybindings.ts +493 -0
- package/src/config/mcp-schema.json +230 -0
- package/src/config/model-equivalence.ts +675 -0
- package/src/config/model-registry.ts +2265 -0
- package/src/config/model-resolver.ts +1289 -0
- package/src/config/prompt-templates.ts +271 -0
- package/src/config/resolve-config-value.ts +110 -0
- package/src/config/settings-schema.ts +2155 -0
- package/src/config/settings.ts +730 -0
- package/src/config.ts +418 -0
- package/src/cursor.ts +323 -0
- package/src/dap/client.ts +674 -0
- package/src/dap/config.ts +150 -0
- package/src/dap/defaults.json +211 -0
- package/src/dap/index.ts +4 -0
- package/src/dap/session.ts +1255 -0
- package/src/dap/types.ts +600 -0
- package/src/debug/index.ts +440 -0
- package/src/debug/log-formatting.ts +58 -0
- package/src/debug/log-viewer.ts +908 -0
- package/src/debug/profiler.ts +158 -0
- package/src/debug/report-bundle.ts +365 -0
- package/src/debug/system-info.ts +107 -0
- package/src/discovery/agents-md.ts +67 -0
- package/src/discovery/agents.ts +219 -0
- package/src/discovery/builtin.ts +851 -0
- package/src/discovery/claude-plugins.ts +297 -0
- package/src/discovery/claude.ts +543 -0
- package/src/discovery/cline.ts +83 -0
- package/src/discovery/codex.ts +535 -0
- package/src/discovery/cursor.ts +220 -0
- package/src/discovery/gemini.ts +396 -0
- package/src/discovery/github.ts +118 -0
- package/src/discovery/helpers.ts +934 -0
- package/src/discovery/index.ts +79 -0
- package/src/discovery/language.ts +46 -0
- package/src/discovery/mcp-json.ts +171 -0
- package/src/discovery/opencode.ts +393 -0
- package/src/discovery/plugin-dir-roots.ts +28 -0
- package/src/discovery/ssh.ts +153 -0
- package/src/discovery/substitute-plugin-root.ts +29 -0
- package/src/discovery/vscode.ts +105 -0
- package/src/discovery/windsurf.ts +147 -0
- package/src/edit/diff.ts +818 -0
- package/src/edit/index.ts +481 -0
- package/src/edit/line-hash.ts +67 -0
- package/src/edit/modes/chunk.ts +762 -0
- package/src/edit/modes/hashline.ts +1366 -0
- package/src/edit/modes/patch.ts +1791 -0
- package/src/edit/modes/replace.ts +1115 -0
- package/src/edit/normalize.ts +375 -0
- package/src/edit/renderer.ts +627 -0
- package/src/exa/factory.ts +61 -0
- package/src/exa/index.ts +27 -0
- package/src/exa/mcp-client.ts +293 -0
- package/src/exa/render.ts +232 -0
- package/src/exa/researcher.ts +47 -0
- package/src/exa/search.ts +86 -0
- package/src/exa/types.ts +166 -0
- package/src/exa/websets.ts +247 -0
- package/src/exec/bash-executor.ts +332 -0
- package/src/exec/exec.ts +53 -0
- package/src/exec/idle-timeout-watchdog.ts +126 -0
- package/src/exec/non-interactive-env.ts +48 -0
- package/src/export/custom-share.ts +65 -0
- package/src/export/html/index.ts +161 -0
- package/src/export/html/template.css +1001 -0
- package/src/export/html/template.generated.ts +2 -0
- package/src/export/html/template.html +46 -0
- package/src/export/html/template.js +1950 -0
- package/src/export/html/template.macro.ts +24 -0
- package/src/export/html/vendor/highlight.min.js +1213 -0
- package/src/export/html/vendor/marked.min.js +6 -0
- package/src/export/ttsr.ts +434 -0
- package/src/extensibility/custom-commands/bundled/ci-green/index.ts +25 -0
- package/src/extensibility/custom-commands/bundled/review/index.ts +456 -0
- package/src/extensibility/custom-commands/index.ts +2 -0
- package/src/extensibility/custom-commands/loader.ts +236 -0
- package/src/extensibility/custom-commands/types.ts +111 -0
- package/src/extensibility/custom-tools/index.ts +7 -0
- package/src/extensibility/custom-tools/loader.ts +238 -0
- package/src/extensibility/custom-tools/types.ts +251 -0
- package/src/extensibility/custom-tools/wrapper.ts +47 -0
- package/src/extensibility/extensions/index.ts +15 -0
- package/src/extensibility/extensions/loader.ts +572 -0
- package/src/extensibility/extensions/runner.ts +848 -0
- package/src/extensibility/extensions/types.ts +1394 -0
- package/src/extensibility/extensions/wrapper.ts +191 -0
- package/src/extensibility/hooks/index.ts +5 -0
- package/src/extensibility/hooks/loader.ts +255 -0
- package/src/extensibility/hooks/runner.ts +425 -0
- package/src/extensibility/hooks/tool-wrapper.ts +108 -0
- package/src/extensibility/hooks/types.ts +826 -0
- package/src/extensibility/plugins/doctor.ts +66 -0
- package/src/extensibility/plugins/git-url.ts +281 -0
- package/src/extensibility/plugins/index.ts +9 -0
- package/src/extensibility/plugins/installer.ts +192 -0
- package/src/extensibility/plugins/loader.ts +267 -0
- package/src/extensibility/plugins/manager.ts +731 -0
- package/src/extensibility/plugins/marketplace/cache.ts +136 -0
- package/src/extensibility/plugins/marketplace/fetcher.ts +318 -0
- package/src/extensibility/plugins/marketplace/index.ts +6 -0
- package/src/extensibility/plugins/marketplace/manager.ts +781 -0
- package/src/extensibility/plugins/marketplace/prerequisites.ts +255 -0
- package/src/extensibility/plugins/marketplace/registry.ts +196 -0
- package/src/extensibility/plugins/marketplace/source-resolver.ts +147 -0
- package/src/extensibility/plugins/marketplace/types.ts +201 -0
- package/src/extensibility/plugins/parser.ts +105 -0
- package/src/extensibility/plugins/types.ts +194 -0
- package/src/extensibility/skills.ts +269 -0
- package/src/extensibility/slash-commands.ts +246 -0
- package/src/extensibility/tool-proxy.ts +25 -0
- package/src/extensibility/utils.ts +38 -0
- package/src/index.ts +61 -0
- package/src/internal-urls/agent-protocol.ts +136 -0
- package/src/internal-urls/api-catalog-resolve.ts +495 -0
- package/src/internal-urls/api-catalog-types.ts +94 -0
- package/src/internal-urls/api-spec-resolve.ts +1036 -0
- package/src/internal-urls/api-spec-types.ts +239 -0
- package/src/internal-urls/artifact-protocol.ts +97 -0
- package/src/internal-urls/branding-index.generated.ts +88 -0
- package/src/internal-urls/build-info-runtime.ts +302 -0
- package/src/internal-urls/build-info.generated.ts +33 -0
- package/src/internal-urls/computer-profile.ts +692 -0
- package/src/internal-urls/console-catalog-types.ts +21 -0
- package/src/internal-urls/console-catalog.generated.ts +532 -0
- package/src/internal-urls/console-field-metadata-types.ts +59 -0
- package/src/internal-urls/console-field-metadata.generated.ts +4841 -0
- package/src/internal-urls/console-resolve.ts +178 -0
- package/src/internal-urls/docs-index.generated.ts +698 -0
- package/src/internal-urls/extension-api.md +147 -0
- package/src/internal-urls/index.ts +46 -0
- package/src/internal-urls/jobs-protocol.ts +119 -0
- package/src/internal-urls/json-query.ts +126 -0
- package/src/internal-urls/local-protocol.ts +206 -0
- package/src/internal-urls/mcp-protocol.ts +156 -0
- package/src/internal-urls/memory-protocol.ts +133 -0
- package/src/internal-urls/parse.ts +72 -0
- package/src/internal-urls/profile-collectors.ts +106 -0
- package/src/internal-urls/router.ts +55 -0
- package/src/internal-urls/rule-protocol.ts +55 -0
- package/src/internal-urls/skill-protocol.ts +111 -0
- package/src/internal-urls/terraform-index.generated.ts +1852 -0
- package/src/internal-urls/terraform-resolve.ts +184 -0
- package/src/internal-urls/terraform-types.ts +45 -0
- package/src/internal-urls/types.ts +52 -0
- package/src/internal-urls/user-profile.ts +363 -0
- package/src/internal-urls/xcsh-protocol.ts +644 -0
- package/src/ipy/cancellation.ts +28 -0
- package/src/ipy/executor.ts +1155 -0
- package/src/ipy/gateway-coordinator.ts +424 -0
- package/src/ipy/kernel.ts +1091 -0
- package/src/ipy/modules.ts +144 -0
- package/src/ipy/prelude.py +849 -0
- package/src/ipy/prelude.ts +3 -0
- package/src/ipy/runtime.ts +221 -0
- package/src/locales/ar.json +512 -0
- package/src/locales/de.json +512 -0
- package/src/locales/en.json +549 -0
- package/src/locales/es.json +512 -0
- package/src/locales/fr.json +512 -0
- package/src/locales/hi.json +512 -0
- package/src/locales/index.ts +29 -0
- package/src/locales/it.json +512 -0
- package/src/locales/ja.json +512 -0
- package/src/locales/ko.json +512 -0
- package/src/locales/pt-br.json +512 -0
- package/src/locales/th.json +512 -0
- package/src/locales/zh-cn.json +512 -0
- package/src/locales/zh-tw.json +512 -0
- package/src/lsp/client.ts +941 -0
- package/src/lsp/clients/biome-client.ts +202 -0
- package/src/lsp/clients/index.ts +50 -0
- package/src/lsp/clients/lsp-linter-client.ts +93 -0
- package/src/lsp/clients/swiftlint-client.ts +120 -0
- package/src/lsp/config.ts +418 -0
- package/src/lsp/defaults.json +999 -0
- package/src/lsp/edits.ts +109 -0
- package/src/lsp/index.ts +1746 -0
- package/src/lsp/lspmux.ts +233 -0
- package/src/lsp/render.ts +692 -0
- package/src/lsp/startup-events.ts +13 -0
- package/src/lsp/types.ts +444 -0
- package/src/lsp/utils.ts +691 -0
- package/src/main.ts +944 -0
- package/src/mcp/client.ts +482 -0
- package/src/mcp/config-writer.ts +225 -0
- package/src/mcp/config.ts +365 -0
- package/src/mcp/discoverable-tool-metadata.ts +202 -0
- package/src/mcp/index.ts +29 -0
- package/src/mcp/json-rpc.ts +84 -0
- package/src/mcp/loader.ts +124 -0
- package/src/mcp/manager.ts +1152 -0
- package/src/mcp/oauth-discovery.ts +349 -0
- package/src/mcp/oauth-flow.ts +387 -0
- package/src/mcp/render.ts +157 -0
- package/src/mcp/smithery-auth.ts +104 -0
- package/src/mcp/smithery-connect.ts +145 -0
- package/src/mcp/smithery-registry.ts +477 -0
- package/src/mcp/tool-bridge.ts +417 -0
- package/src/mcp/tool-cache.ts +117 -0
- package/src/mcp/transports/http.ts +475 -0
- package/src/mcp/transports/index.ts +6 -0
- package/src/mcp/transports/stdio.ts +325 -0
- package/src/mcp/types.ts +423 -0
- package/src/memories/index.ts +1115 -0
- package/src/memories/storage.ts +577 -0
- package/src/modes/acp/acp-agent.ts +1361 -0
- package/src/modes/acp/acp-event-mapper.ts +538 -0
- package/src/modes/acp/acp-mode.ts +15 -0
- package/src/modes/acp/index.ts +2 -0
- package/src/modes/components/agent-dashboard.ts +1124 -0
- package/src/modes/components/assistant-message.ts +213 -0
- package/src/modes/components/bash-execution.ts +345 -0
- package/src/modes/components/bordered-loader.ts +41 -0
- package/src/modes/components/branch-summary-message.ts +45 -0
- package/src/modes/components/btw-panel.ts +103 -0
- package/src/modes/components/compaction-summary-message.ts +51 -0
- package/src/modes/components/context-add-wizard.ts +534 -0
- package/src/modes/components/countdown-timer.ts +75 -0
- package/src/modes/components/custom-editor.ts +238 -0
- package/src/modes/components/custom-message.ts +91 -0
- package/src/modes/components/diff.ts +210 -0
- package/src/modes/components/dynamic-border.ts +25 -0
- package/src/modes/components/extensions/extension-dashboard.ts +326 -0
- package/src/modes/components/extensions/extension-list.ts +492 -0
- package/src/modes/components/extensions/index.ts +9 -0
- package/src/modes/components/extensions/inspector-panel.ts +317 -0
- package/src/modes/components/extensions/state-manager.ts +587 -0
- package/src/modes/components/extensions/types.ts +191 -0
- package/src/modes/components/footer.ts +262 -0
- package/src/modes/components/gutter-block.ts +315 -0
- package/src/modes/components/history-search.ts +158 -0
- package/src/modes/components/hook-editor.ts +151 -0
- package/src/modes/components/hook-input.ts +81 -0
- package/src/modes/components/hook-message.ts +100 -0
- package/src/modes/components/hook-selector.ts +192 -0
- package/src/modes/components/index.ts +36 -0
- package/src/modes/components/keybinding-hints.ts +65 -0
- package/src/modes/components/login-dialog.ts +164 -0
- package/src/modes/components/mcp-add-wizard.ts +1314 -0
- package/src/modes/components/model-selector.ts +946 -0
- package/src/modes/components/oauth-selector.ts +211 -0
- package/src/modes/components/plugin-selector.ts +95 -0
- package/src/modes/components/plugin-settings.ts +477 -0
- package/src/modes/components/plugins/index.ts +5 -0
- package/src/modes/components/plugins/plugin-dashboard.ts +523 -0
- package/src/modes/components/plugins/plugin-inspector-pane.ts +84 -0
- package/src/modes/components/plugins/plugin-list-pane.ts +109 -0
- package/src/modes/components/plugins/state-manager.ts +229 -0
- package/src/modes/components/plugins/types.ts +51 -0
- package/src/modes/components/plugins/utils.ts +6 -0
- package/src/modes/components/python-execution.ts +244 -0
- package/src/modes/components/queue-mode-selector.ts +56 -0
- package/src/modes/components/read-tool-group.ts +137 -0
- package/src/modes/components/session-observer-overlay.ts +483 -0
- package/src/modes/components/session-selector.ts +343 -0
- package/src/modes/components/settings-defs.ts +568 -0
- package/src/modes/components/settings-selector.ts +641 -0
- package/src/modes/components/show-images-selector.ts +45 -0
- package/src/modes/components/skill-message.ts +90 -0
- package/src/modes/components/status-line/context-gradient.ts +64 -0
- package/src/modes/components/status-line/git-utils.ts +42 -0
- package/src/modes/components/status-line/hex-ansi.ts +29 -0
- package/src/modes/components/status-line/index.ts +4 -0
- package/src/modes/components/status-line/presets.ts +174 -0
- package/src/modes/components/status-line/segments.ts +494 -0
- package/src/modes/components/status-line/separators.ts +55 -0
- package/src/modes/components/status-line/token-rate.ts +66 -0
- package/src/modes/components/status-line/types.ts +96 -0
- package/src/modes/components/status-line-segment-editor.ts +361 -0
- package/src/modes/components/status-line.ts +729 -0
- package/src/modes/components/theme-selector.ts +63 -0
- package/src/modes/components/thinking-selector.ts +52 -0
- package/src/modes/components/todo-reminder.ts +54 -0
- package/src/modes/components/tool-execution.ts +781 -0
- package/src/modes/components/tree-selector.ts +908 -0
- package/src/modes/components/ttsr-notification.ts +80 -0
- package/src/modes/components/user-message-selector.ts +141 -0
- package/src/modes/components/user-message.ts +100 -0
- package/src/modes/components/visual-truncate.ts +63 -0
- package/src/modes/components/welcome-checks.ts +313 -0
- package/src/modes/components/welcome.ts +270 -0
- package/src/modes/controllers/btw-controller.ts +193 -0
- package/src/modes/controllers/chord-routing.ts +37 -0
- package/src/modes/controllers/command-controller.ts +1293 -0
- package/src/modes/controllers/context-command-controller.ts +61 -0
- package/src/modes/controllers/event-controller.ts +743 -0
- package/src/modes/controllers/extension-ui-controller.ts +983 -0
- package/src/modes/controllers/input-controller.ts +877 -0
- package/src/modes/controllers/mcp-command-controller.ts +1940 -0
- package/src/modes/controllers/selector-controller.ts +1292 -0
- package/src/modes/controllers/ssh-command-controller.ts +421 -0
- package/src/modes/index.ts +34 -0
- package/src/modes/interactive-mode.ts +1781 -0
- package/src/modes/oauth-manual-input.ts +42 -0
- package/src/modes/print-mode.ts +196 -0
- package/src/modes/prompt-action-autocomplete.ts +231 -0
- package/src/modes/rpc/host-tools.ts +186 -0
- package/src/modes/rpc/rpc-client.ts +762 -0
- package/src/modes/rpc/rpc-mode.ts +877 -0
- package/src/modes/rpc/rpc-types.ts +322 -0
- package/src/modes/session-observer-registry.ts +146 -0
- package/src/modes/shared.ts +30 -0
- package/src/modes/theme/defaults/index.ts +7 -0
- package/src/modes/theme/defaults/xcsh-dark.json +113 -0
- package/src/modes/theme/defaults/xcsh-light.json +115 -0
- package/src/modes/theme/mermaid-cache.ts +151 -0
- package/src/modes/theme/mermaid-palette.ts +39 -0
- package/src/modes/theme/theme-schema.json +553 -0
- package/src/modes/theme/theme.ts +2563 -0
- package/src/modes/types.ts +273 -0
- package/src/modes/utils/hotkeys-markdown.ts +60 -0
- package/src/modes/utils/keybinding-matchers.ts +30 -0
- package/src/modes/utils/read-group-outcome-aggregator.ts +55 -0
- package/src/modes/utils/sanitize-error-message.ts +60 -0
- package/src/modes/utils/tools-markdown.ts +28 -0
- package/src/modes/utils/ui-helpers.ts +734 -0
- package/src/plan-mode/approved-plan.ts +55 -0
- package/src/plan-mode/state.ts +6 -0
- package/src/priority.json +37 -0
- package/src/prompts/agents/designer.md +67 -0
- package/src/prompts/agents/explore.md +61 -0
- package/src/prompts/agents/frontmatter.md +10 -0
- package/src/prompts/agents/init.md +36 -0
- package/src/prompts/agents/librarian.md +121 -0
- package/src/prompts/agents/plan.md +49 -0
- package/src/prompts/agents/reviewer.md +127 -0
- package/src/prompts/agents/task.md +16 -0
- package/src/prompts/ci-green-request.md +35 -0
- package/src/prompts/compaction/branch-summary-context.md +5 -0
- package/src/prompts/compaction/branch-summary-preamble.md +2 -0
- package/src/prompts/compaction/branch-summary.md +30 -0
- package/src/prompts/compaction/compaction-short-summary.md +9 -0
- package/src/prompts/compaction/compaction-summary-context.md +5 -0
- package/src/prompts/compaction/compaction-summary.md +38 -0
- package/src/prompts/compaction/compaction-turn-prefix.md +17 -0
- package/src/prompts/compaction/compaction-update-summary.md +45 -0
- package/src/prompts/memories/consolidation.md +30 -0
- package/src/prompts/memories/read-path.md +11 -0
- package/src/prompts/memories/stage_one_input.md +6 -0
- package/src/prompts/memories/stage_one_system.md +21 -0
- package/src/prompts/review-request.md +70 -0
- package/src/prompts/system/agent-creation-architect.md +65 -0
- package/src/prompts/system/agent-creation-user.md +6 -0
- package/src/prompts/system/auto-handoff-threshold-focus.md +1 -0
- package/src/prompts/system/btw-user.md +8 -0
- package/src/prompts/system/commit-message-system.md +2 -0
- package/src/prompts/system/custom-system-prompt.md +82 -0
- package/src/prompts/system/eager-todo.md +13 -0
- package/src/prompts/system/file-operations.md +10 -0
- package/src/prompts/system/handoff-document.md +48 -0
- package/src/prompts/system/plan-mode-active.md +114 -0
- package/src/prompts/system/plan-mode-approved.md +23 -0
- package/src/prompts/system/plan-mode-reference.md +14 -0
- package/src/prompts/system/plan-mode-subagent.md +34 -0
- package/src/prompts/system/plan-mode-tool-decision-reminder.md +9 -0
- package/src/prompts/system/subagent-submit-reminder.md +7 -0
- package/src/prompts/system/subagent-system-prompt.md +36 -0
- package/src/prompts/system/subagent-user-prompt.md +12 -0
- package/src/prompts/system/summarization-system.md +3 -0
- package/src/prompts/system/system-prompt.md +698 -0
- package/src/prompts/system/title-system.md +2 -0
- package/src/prompts/system/ttsr-interrupt.md +7 -0
- package/src/prompts/system/web-search.md +28 -0
- package/src/prompts/tools/ask.md +28 -0
- package/src/prompts/tools/ast-edit.md +48 -0
- package/src/prompts/tools/ast-grep.md +54 -0
- package/src/prompts/tools/async-result.md +5 -0
- package/src/prompts/tools/bash.md +67 -0
- package/src/prompts/tools/browser.md +26 -0
- package/src/prompts/tools/calculator.md +10 -0
- package/src/prompts/tools/cancel-job.md +5 -0
- package/src/prompts/tools/catalog-workflow-runner.md +13 -0
- package/src/prompts/tools/checkpoint.md +16 -0
- package/src/prompts/tools/chunk-edit.md +279 -0
- package/src/prompts/tools/debug.md +43 -0
- package/src/prompts/tools/display-image.md +23 -0
- package/src/prompts/tools/exit-plan-mode.md +41 -0
- package/src/prompts/tools/find.md +26 -0
- package/src/prompts/tools/gemini-image.md +7 -0
- package/src/prompts/tools/grep.md +29 -0
- package/src/prompts/tools/hashline.md +131 -0
- package/src/prompts/tools/inspect-image-system.md +20 -0
- package/src/prompts/tools/inspect-image.md +32 -0
- package/src/prompts/tools/lsp.md +33 -0
- package/src/prompts/tools/patch.md +77 -0
- package/src/prompts/tools/poll.md +5 -0
- package/src/prompts/tools/python.md +60 -0
- package/src/prompts/tools/read-chunk.md +35 -0
- package/src/prompts/tools/read.md +63 -0
- package/src/prompts/tools/render-mermaid.md +9 -0
- package/src/prompts/tools/replace.md +36 -0
- package/src/prompts/tools/resolve.md +8 -0
- package/src/prompts/tools/rewind.md +13 -0
- package/src/prompts/tools/search-tool-bm25.md +34 -0
- package/src/prompts/tools/ssh.md +44 -0
- package/src/prompts/tools/task-summary.md +28 -0
- package/src/prompts/tools/task.md +131 -0
- package/src/prompts/tools/todo-write.md +89 -0
- package/src/prompts/tools/vim.md +98 -0
- package/src/prompts/tools/web-search.md +10 -0
- package/src/prompts/tools/write.md +14 -0
- package/src/prompts/tools/xcsh-api.md +283 -0
- package/src/resource-management/index.ts +42 -0
- package/src/sdk.ts +2123 -0
- package/src/secrets/index.ts +146 -0
- package/src/secrets/obfuscator.ts +290 -0
- package/src/secrets/regex.ts +21 -0
- package/src/services/context-env.ts +102 -0
- package/src/services/xcsh-api-client.ts +230 -0
- package/src/services/xcsh-context-command.ts +803 -0
- package/src/services/xcsh-context-display.ts +49 -0
- package/src/services/xcsh-context-indicators.ts +17 -0
- package/src/services/xcsh-context-segment.ts +39 -0
- package/src/services/xcsh-context.ts +1410 -0
- package/src/services/xcsh-env.ts +107 -0
- package/src/services/xcsh-knowledge.ts +177 -0
- package/src/services/xcsh-table.ts +164 -0
- package/src/session/agent-session.ts +6690 -0
- package/src/session/agent-storage.ts +451 -0
- package/src/session/artifacts.ts +132 -0
- package/src/session/auth-storage.ts +17 -0
- package/src/session/blob-store.ts +135 -0
- package/src/session/compaction/branch-summarization.ts +322 -0
- package/src/session/compaction/compaction.ts +1388 -0
- package/src/session/compaction/index.ts +7 -0
- package/src/session/compaction/pruning.ts +91 -0
- package/src/session/compaction/utils.ts +184 -0
- package/src/session/history-storage.ts +253 -0
- package/src/session/messages.ts +597 -0
- package/src/session/session-dump-format.ts +203 -0
- package/src/session/session-manager.ts +2816 -0
- package/src/session/session-storage.ts +370 -0
- package/src/session/streaming-output.ts +770 -0
- package/src/session/tool-choice-queue.ts +213 -0
- package/src/slash-commands/builtin-registry.ts +1614 -0
- package/src/slash-commands/export-command.ts +178 -0
- package/src/slash-commands/marketplace-install-parser.ts +99 -0
- package/src/slash-commands/resource-commands.ts +250 -0
- package/src/ssh/config-writer.ts +183 -0
- package/src/ssh/connection-manager.ts +445 -0
- package/src/ssh/ssh-executor.ts +131 -0
- package/src/ssh/sshfs-mount.ts +137 -0
- package/src/ssh/utils.ts +8 -0
- package/src/stt/downloader.ts +71 -0
- package/src/stt/index.ts +3 -0
- package/src/stt/recorder.ts +351 -0
- package/src/stt/setup.ts +52 -0
- package/src/stt/stt-controller.ts +160 -0
- package/src/stt/transcribe.py +70 -0
- package/src/stt/transcriber.ts +91 -0
- package/src/system-prompt.ts +688 -0
- package/src/task/agents.ts +166 -0
- package/src/task/commands.ts +131 -0
- package/src/task/discovery.ts +126 -0
- package/src/task/executor.ts +1324 -0
- package/src/task/index.ts +1197 -0
- package/src/task/isolation-backend.ts +72 -0
- package/src/task/name-generator.ts +1577 -0
- package/src/task/output-manager.ts +107 -0
- package/src/task/parallel.ts +116 -0
- package/src/task/render.ts +1035 -0
- package/src/task/subprocess-tool-registry.ts +88 -0
- package/src/task/template.ts +33 -0
- package/src/task/types.ts +230 -0
- package/src/task/worktree.ts +580 -0
- package/src/task/xcsh-command.ts +26 -0
- package/src/thinking.ts +87 -0
- package/src/tools/action-renderer.ts +198 -0
- package/src/tools/archive-reader.ts +315 -0
- package/src/tools/ask.ts +791 -0
- package/src/tools/ast-edit.ts +492 -0
- package/src/tools/ast-grep.ts +453 -0
- package/src/tools/auto-generated-guard.ts +305 -0
- package/src/tools/bash-interactive.ts +383 -0
- package/src/tools/bash-interceptor.ts +67 -0
- package/src/tools/bash-normalize.ts +107 -0
- package/src/tools/bash-skill-urls.ts +246 -0
- package/src/tools/bash.ts +878 -0
- package/src/tools/browser-renderer.ts +129 -0
- package/src/tools/browser.ts +1366 -0
- package/src/tools/calculator.ts +543 -0
- package/src/tools/cancel-job.ts +100 -0
- package/src/tools/catalog-workflow-runner.ts +718 -0
- package/src/tools/checkpoint.ts +133 -0
- package/src/tools/context.ts +39 -0
- package/src/tools/debug.ts +1004 -0
- package/src/tools/display-image-renderer.ts +96 -0
- package/src/tools/display-image.ts +109 -0
- package/src/tools/exit-plan-mode.ts +101 -0
- package/src/tools/fetch.ts +1462 -0
- package/src/tools/find.ts +437 -0
- package/src/tools/fs-cache-invalidation.ts +33 -0
- package/src/tools/gemini-image.ts +1004 -0
- package/src/tools/grep.ts +705 -0
- package/src/tools/index.ts +442 -0
- package/src/tools/inspect-image-renderer.ts +101 -0
- package/src/tools/inspect-image.ts +176 -0
- package/src/tools/json-tree.ts +266 -0
- package/src/tools/jtd-to-json-schema.ts +199 -0
- package/src/tools/jtd-to-typescript.ts +136 -0
- package/src/tools/jtd-utils.ts +102 -0
- package/src/tools/list-limit.ts +40 -0
- package/src/tools/mermaid-renderer.ts +127 -0
- package/src/tools/notebook.ts +288 -0
- package/src/tools/output-meta.ts +588 -0
- package/src/tools/path-utils.ts +560 -0
- package/src/tools/plan-mode-guard.ts +41 -0
- package/src/tools/poll-tool.ts +177 -0
- package/src/tools/puppeteer/00_stealth_tampering.txt +63 -0
- package/src/tools/puppeteer/01_stealth_activity.txt +20 -0
- package/src/tools/puppeteer/02_stealth_hairline.txt +11 -0
- package/src/tools/puppeteer/03_stealth_botd.txt +384 -0
- package/src/tools/puppeteer/04_stealth_iframe.txt +81 -0
- package/src/tools/puppeteer/05_stealth_webgl.txt +75 -0
- package/src/tools/puppeteer/06_stealth_screen.txt +72 -0
- package/src/tools/puppeteer/07_stealth_fonts.txt +97 -0
- package/src/tools/puppeteer/08_stealth_audio.txt +51 -0
- package/src/tools/puppeteer/09_stealth_locale.txt +46 -0
- package/src/tools/puppeteer/10_stealth_plugins.txt +206 -0
- package/src/tools/puppeteer/11_stealth_hardware.txt +8 -0
- package/src/tools/puppeteer/12_stealth_codecs.txt +40 -0
- package/src/tools/puppeteer/13_stealth_worker.txt +74 -0
- package/src/tools/python.ts +1184 -0
- package/src/tools/read.ts +1591 -0
- package/src/tools/render-mermaid.ts +93 -0
- package/src/tools/render-utils.ts +677 -0
- package/src/tools/renderers.ts +82 -0
- package/src/tools/report-tool-issue.ts +80 -0
- package/src/tools/resolve.ts +196 -0
- package/src/tools/review.ts +238 -0
- package/src/tools/search-tool-bm25.ts +288 -0
- package/src/tools/sqlite-reader.ts +623 -0
- package/src/tools/ssh.ts +322 -0
- package/src/tools/submit-result.ts +229 -0
- package/src/tools/todo-render.ts +33 -0
- package/src/tools/todo-write.ts +440 -0
- package/src/tools/tool-errors.ts +62 -0
- package/src/tools/tool-result.ts +93 -0
- package/src/tools/tool-timeouts.ts +30 -0
- package/src/tools/vim.ts +981 -0
- package/src/tools/write.ts +671 -0
- package/src/tools/xcsh-api-renderer.ts +402 -0
- package/src/tools/xcsh-api.ts +887 -0
- package/src/tui/code-cell.ts +101 -0
- package/src/tui/file-list.ts +47 -0
- package/src/tui/index.ts +11 -0
- package/src/tui/output-block.ts +175 -0
- package/src/tui/status-line.ts +39 -0
- package/src/tui/tree-list.ts +84 -0
- package/src/tui/types.ts +15 -0
- package/src/tui/utils.ts +103 -0
- package/src/utils/changelog.ts +98 -0
- package/src/utils/clipboard.ts +80 -0
- package/src/utils/command-args.ts +76 -0
- package/src/utils/commit-message-generator.ts +137 -0
- package/src/utils/edit-mode.ts +50 -0
- package/src/utils/event-bus.ts +33 -0
- package/src/utils/external-editor.ts +65 -0
- package/src/utils/file-display-mode.ts +37 -0
- package/src/utils/file-mentions.ts +376 -0
- package/src/utils/fuzzy.ts +108 -0
- package/src/utils/git.ts +1495 -0
- package/src/utils/gitstatus.ts +140 -0
- package/src/utils/image-convert.ts +27 -0
- package/src/utils/image-loading.ts +98 -0
- package/src/utils/image-passthrough.ts +118 -0
- package/src/utils/image-resize.ts +272 -0
- package/src/utils/image-viewer.ts +17 -0
- package/src/utils/lang-from-path.ts +239 -0
- package/src/utils/markit.ts +81 -0
- package/src/utils/open.ts +20 -0
- package/src/utils/session-color.ts +55 -0
- package/src/utils/shell-snapshot.ts +188 -0
- package/src/utils/title-generator.ts +193 -0
- package/src/utils/tool-choice.ts +28 -0
- package/src/utils/tools-manager.ts +356 -0
- package/src/vim/buffer.ts +309 -0
- package/src/vim/commands.ts +382 -0
- package/src/vim/engine.ts +2426 -0
- package/src/vim/parser.ts +151 -0
- package/src/vim/render.ts +252 -0
- package/src/vim/types.ts +197 -0
- package/src/web/kagi.ts +174 -0
- package/src/web/parallel.ts +346 -0
- package/src/web/scrapers/artifacthub.ts +207 -0
- package/src/web/scrapers/arxiv.ts +83 -0
- package/src/web/scrapers/aur.ts +162 -0
- package/src/web/scrapers/biorxiv.ts +133 -0
- package/src/web/scrapers/bluesky.ts +262 -0
- package/src/web/scrapers/brew.ts +172 -0
- package/src/web/scrapers/cheatsh.ts +68 -0
- package/src/web/scrapers/chocolatey.ts +196 -0
- package/src/web/scrapers/choosealicense.ts +95 -0
- package/src/web/scrapers/cisa-kev.ts +87 -0
- package/src/web/scrapers/clojars.ts +154 -0
- package/src/web/scrapers/coingecko.ts +177 -0
- package/src/web/scrapers/crates-io.ts +110 -0
- package/src/web/scrapers/crossref.ts +136 -0
- package/src/web/scrapers/devto.ts +147 -0
- package/src/web/scrapers/discogs.ts +306 -0
- package/src/web/scrapers/discourse.ts +197 -0
- package/src/web/scrapers/dockerhub.ts +138 -0
- package/src/web/scrapers/docs-rs.ts +653 -0
- package/src/web/scrapers/fdroid.ts +134 -0
- package/src/web/scrapers/firefox-addons.ts +191 -0
- package/src/web/scrapers/flathub.ts +223 -0
- package/src/web/scrapers/github-gist.ts +58 -0
- package/src/web/scrapers/github.ts +452 -0
- package/src/web/scrapers/gitlab.ts +401 -0
- package/src/web/scrapers/go-pkg.ts +266 -0
- package/src/web/scrapers/hackage.ts +140 -0
- package/src/web/scrapers/hackernews.ts +189 -0
- package/src/web/scrapers/hex.ts +105 -0
- package/src/web/scrapers/huggingface.ts +321 -0
- package/src/web/scrapers/iacr.ts +89 -0
- package/src/web/scrapers/index.ts +252 -0
- package/src/web/scrapers/jetbrains-marketplace.ts +159 -0
- package/src/web/scrapers/lemmy.ts +203 -0
- package/src/web/scrapers/lobsters.ts +175 -0
- package/src/web/scrapers/mastodon.ts +292 -0
- package/src/web/scrapers/maven.ts +138 -0
- package/src/web/scrapers/mdn.ts +169 -0
- package/src/web/scrapers/metacpan.ts +222 -0
- package/src/web/scrapers/musicbrainz.ts +250 -0
- package/src/web/scrapers/npm.ts +98 -0
- package/src/web/scrapers/nuget.ts +183 -0
- package/src/web/scrapers/nvd.ts +222 -0
- package/src/web/scrapers/ollama.ts +239 -0
- package/src/web/scrapers/open-vsx.ts +106 -0
- package/src/web/scrapers/opencorporates.ts +292 -0
- package/src/web/scrapers/openlibrary.ts +336 -0
- package/src/web/scrapers/orcid.ts +286 -0
- package/src/web/scrapers/osv.ts +176 -0
- package/src/web/scrapers/packagist.ts +160 -0
- package/src/web/scrapers/pub-dev.ts +143 -0
- package/src/web/scrapers/pubmed.ts +211 -0
- package/src/web/scrapers/pypi.ts +112 -0
- package/src/web/scrapers/rawg.ts +110 -0
- package/src/web/scrapers/readthedocs.ts +120 -0
- package/src/web/scrapers/reddit.ts +95 -0
- package/src/web/scrapers/repology.ts +251 -0
- package/src/web/scrapers/rfc.ts +201 -0
- package/src/web/scrapers/rubygems.ts +103 -0
- package/src/web/scrapers/searchcode.ts +190 -0
- package/src/web/scrapers/sec-edgar.ts +261 -0
- package/src/web/scrapers/semantic-scholar.ts +171 -0
- package/src/web/scrapers/snapcraft.ts +187 -0
- package/src/web/scrapers/sourcegraph.ts +336 -0
- package/src/web/scrapers/spdx.ts +108 -0
- package/src/web/scrapers/spotify.ts +198 -0
- package/src/web/scrapers/stackoverflow.ts +120 -0
- package/src/web/scrapers/terraform.ts +277 -0
- package/src/web/scrapers/tldr.ts +47 -0
- package/src/web/scrapers/twitter.ts +93 -0
- package/src/web/scrapers/types.ts +267 -0
- package/src/web/scrapers/utils.ts +109 -0
- package/src/web/scrapers/vimeo.ts +133 -0
- package/src/web/scrapers/vscode-marketplace.ts +187 -0
- package/src/web/scrapers/w3c.ts +156 -0
- package/src/web/scrapers/wikidata.ts +344 -0
- package/src/web/scrapers/wikipedia.ts +84 -0
- package/src/web/scrapers/youtube.ts +313 -0
- package/src/web/search/errors.ts +120 -0
- package/src/web/search/index.ts +346 -0
- package/src/web/search/params.ts +129 -0
- package/src/web/search/provider.ts +97 -0
- package/src/web/search/providers/anthropic.ts +339 -0
- package/src/web/search/providers/base.ts +35 -0
- package/src/web/search/providers/brave.ts +150 -0
- package/src/web/search/providers/codex.ts +402 -0
- package/src/web/search/providers/exa.ts +264 -0
- package/src/web/search/providers/firecrawl.ts +115 -0
- package/src/web/search/providers/gemini.ts +566 -0
- package/src/web/search/providers/jina.ts +99 -0
- package/src/web/search/providers/kagi.ts +70 -0
- package/src/web/search/providers/kimi.ts +157 -0
- package/src/web/search/providers/parallel.ts +63 -0
- package/src/web/search/providers/perplexity.ts +546 -0
- package/src/web/search/providers/synthetic.ts +113 -0
- package/src/web/search/providers/tavily.ts +162 -0
- package/src/web/search/providers/utils.ts +36 -0
- package/src/web/search/providers/zai.ts +311 -0
- package/src/web/search/render.ts +348 -0
- package/src/web/search/types.ts +438 -0
- package/src/web/search/utils.ts +17 -0
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import type { AutocompleteItem } from "@f5xc-salesdemos/pi-tui";
|
|
4
|
+
import { prompt } from "@f5xc-salesdemos/pi-utils";
|
|
5
|
+
import type { ExtensionContext, ExtensionFactory } from "../extensibility/extensions";
|
|
6
|
+
import commandResumeTemplate from "./command-resume.md" with { type: "text" };
|
|
7
|
+
import { pathMatchesContractPath } from "./contract";
|
|
8
|
+
import { createDashboardController } from "./dashboard";
|
|
9
|
+
import { ensureAutoresearchBranch } from "./git";
|
|
10
|
+
import {
|
|
11
|
+
formatNum,
|
|
12
|
+
isAutoresearchCommittableFile,
|
|
13
|
+
isAutoresearchLocalStatePath,
|
|
14
|
+
normalizeAutoresearchPath,
|
|
15
|
+
readMaxExperiments,
|
|
16
|
+
readPendingRunSummary,
|
|
17
|
+
resolveWorkDir,
|
|
18
|
+
validateWorkDir,
|
|
19
|
+
} from "./helpers";
|
|
20
|
+
import promptTemplate from "./prompt.md" with { type: "text" };
|
|
21
|
+
import resumeMessageTemplate from "./resume-message.md" with { type: "text" };
|
|
22
|
+
import {
|
|
23
|
+
cloneExperimentState,
|
|
24
|
+
createExperimentState,
|
|
25
|
+
createRuntimeStore,
|
|
26
|
+
currentResults,
|
|
27
|
+
findBaselineMetric,
|
|
28
|
+
findBestKeptResult,
|
|
29
|
+
reconstructControlState,
|
|
30
|
+
reconstructStateFromJsonl,
|
|
31
|
+
} from "./state";
|
|
32
|
+
import { createInitExperimentTool } from "./tools/init-experiment";
|
|
33
|
+
import { createLogExperimentTool } from "./tools/log-experiment";
|
|
34
|
+
import { createRunExperimentTool } from "./tools/run-experiment";
|
|
35
|
+
import type { AutoresearchRuntime, ExperimentResult, PendingRunSummary } from "./types";
|
|
36
|
+
|
|
37
|
+
const EXPERIMENT_TOOL_NAMES = ["init_experiment", "run_experiment", "log_experiment"];
|
|
38
|
+
const EXPERIMENT_TOOL_SET = new Set(EXPERIMENT_TOOL_NAMES);
|
|
39
|
+
const addExperimentTools = (tools: string[]) => [...new Set([...tools, ...EXPERIMENT_TOOL_NAMES])];
|
|
40
|
+
const removeExperimentTools = (tools: string[]) => tools.filter(name => !EXPERIMENT_TOOL_SET.has(name));
|
|
41
|
+
export const createAutoresearchExtension: ExtensionFactory = api => {
|
|
42
|
+
const runtimeStore = createRuntimeStore();
|
|
43
|
+
const dashboard = createDashboardController();
|
|
44
|
+
const getSessionKey = (ctx: ExtensionContext): string => ctx.sessionManager.getSessionId();
|
|
45
|
+
const getRuntime = (ctx: ExtensionContext): AutoresearchRuntime => runtimeStore.ensure(getSessionKey(ctx));
|
|
46
|
+
const rehydrate = async (ctx: ExtensionContext): Promise<void> => {
|
|
47
|
+
const runtime = getRuntime(ctx);
|
|
48
|
+
const workDir = resolveWorkDir(ctx.cwd);
|
|
49
|
+
const reconstructed = reconstructStateFromJsonl(workDir);
|
|
50
|
+
const control = reconstructControlState(ctx.sessionManager.getBranch());
|
|
51
|
+
const loggedRunNumbers = collectLoggedRunNumbers(reconstructed.state.results);
|
|
52
|
+
runtime.state = cloneExperimentState(reconstructed.state);
|
|
53
|
+
runtime.state.maxExperiments = readMaxExperiments(ctx.cwd);
|
|
54
|
+
runtime.goal = control.goal;
|
|
55
|
+
runtime.autoresearchMode = control.autoresearchMode;
|
|
56
|
+
runtime.autoResumeArmed = false;
|
|
57
|
+
runtime.lastAutoResumePendingRunNumber = null;
|
|
58
|
+
applyPendingRunToRuntime(runtime, await readPendingRunSummary(workDir, loggedRunNumbers));
|
|
59
|
+
runtime.runningExperiment = null;
|
|
60
|
+
dashboard.updateWidget(ctx, runtime);
|
|
61
|
+
const activeTools = api.getActiveTools();
|
|
62
|
+
|
|
63
|
+
const nextActiveTools = runtime.autoresearchMode
|
|
64
|
+
? addExperimentTools(activeTools)
|
|
65
|
+
: removeExperimentTools(activeTools);
|
|
66
|
+
const toolsChanged =
|
|
67
|
+
nextActiveTools.length !== activeTools.length ||
|
|
68
|
+
nextActiveTools.some((name, index) => name !== activeTools[index]);
|
|
69
|
+
if (toolsChanged) await api.setActiveTools(nextActiveTools);
|
|
70
|
+
};
|
|
71
|
+
const setMode = (
|
|
72
|
+
ctx: ExtensionContext,
|
|
73
|
+
enabled: boolean,
|
|
74
|
+
goal: string | null,
|
|
75
|
+
mode: "on" | "off" | "clear",
|
|
76
|
+
): void => {
|
|
77
|
+
const runtime = getRuntime(ctx);
|
|
78
|
+
runtime.autoresearchMode = enabled;
|
|
79
|
+
runtime.autoResumeArmed = false;
|
|
80
|
+
runtime.goal = goal;
|
|
81
|
+
runtime.lastAutoResumePendingRunNumber = null;
|
|
82
|
+
api.appendEntry("autoresearch-control", goal ? { mode, goal } : { mode });
|
|
83
|
+
};
|
|
84
|
+
api.registerTool(createInitExperimentTool({ dashboard, getRuntime, pi: api }));
|
|
85
|
+
api.registerTool(createRunExperimentTool({ dashboard, getRuntime, pi: api }));
|
|
86
|
+
api.registerTool(createLogExperimentTool({ dashboard, getRuntime, pi: api }));
|
|
87
|
+
api.on("tool_call", (event, ctx) => {
|
|
88
|
+
const runtime = getRuntime(ctx);
|
|
89
|
+
if (!runtime.autoresearchMode) return;
|
|
90
|
+
if (event.toolName !== "write" && event.toolName !== "edit" && event.toolName !== "ast_edit") return;
|
|
91
|
+
|
|
92
|
+
const rawPaths =
|
|
93
|
+
event.toolName === "write" || event.toolName === "ast_edit"
|
|
94
|
+
? typeof event.input.path === "string"
|
|
95
|
+
? [event.input.path]
|
|
96
|
+
: null
|
|
97
|
+
: event.toolName === "edit"
|
|
98
|
+
? ["path", "rename", "move"].map(k => event.input[k]).filter((v): v is string => typeof v === "string")
|
|
99
|
+
: [];
|
|
100
|
+
if (rawPaths === null)
|
|
101
|
+
return {
|
|
102
|
+
block: true,
|
|
103
|
+
reason:
|
|
104
|
+
"Autoresearch requires an explicit target path for this editing tool so it can enforce Files in Scope and Off Limits before changes are made.",
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const workDir = resolveWorkDir(ctx.cwd);
|
|
108
|
+
for (const rawPath of rawPaths) {
|
|
109
|
+
const relativePath = resolveAutoresearchRelativePath(workDir, rawPath);
|
|
110
|
+
if (!relativePath.ok) return { block: true, reason: relativePath.reason };
|
|
111
|
+
const validationError = validateEditableAutoresearchPath(relativePath.relativePath, runtime);
|
|
112
|
+
if (validationError)
|
|
113
|
+
return {
|
|
114
|
+
block: true,
|
|
115
|
+
reason: `Autoresearch blocked edits to ${relativePath.relativePath}: ${validationError}`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
api.registerCommand("autoresearch", {
|
|
120
|
+
description: "Toggle builtin autoresearch mode, or pass off / clear, or a goal message.",
|
|
121
|
+
getArgumentCompletions(argumentPrefix: string): AutocompleteItem[] | null {
|
|
122
|
+
if (argumentPrefix.includes(" ")) return null;
|
|
123
|
+
const normalized = argumentPrefix.trim().toLowerCase();
|
|
124
|
+
// No suggestions for an empty argument prefix so Tab after "/autoresearch " does not
|
|
125
|
+
// force-complete into off/clear; bare command submit toggles like /plan.
|
|
126
|
+
if (normalized.length === 0) return null;
|
|
127
|
+
const completions: AutocompleteItem[] = [
|
|
128
|
+
{ label: "off", value: "off", description: "Leave autoresearch mode" },
|
|
129
|
+
{ label: "clear", value: "clear", description: "Delete autoresearch.jsonl and leave autoresearch mode" },
|
|
130
|
+
];
|
|
131
|
+
const filtered = completions.filter(item => item.label.startsWith(normalized));
|
|
132
|
+
return filtered.length > 0 ? filtered : null;
|
|
133
|
+
},
|
|
134
|
+
async handler(args, ctx): Promise<void> {
|
|
135
|
+
const trimmed = args.trim();
|
|
136
|
+
const runtime = getRuntime(ctx);
|
|
137
|
+
const workDirError = validateWorkDir(ctx.cwd);
|
|
138
|
+
if (workDirError) {
|
|
139
|
+
ctx.ui.notify(workDirError, "error");
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if ((trimmed === "" && runtime.autoresearchMode) || trimmed === "off" || trimmed === "clear") {
|
|
144
|
+
if (trimmed === "clear") {
|
|
145
|
+
const workDir = resolveWorkDir(ctx.cwd);
|
|
146
|
+
fs.rmSync(path.join(workDir, "autoresearch.jsonl"), { force: true });
|
|
147
|
+
fs.rmSync(path.join(workDir, ".autoresearch"), { force: true, recursive: true });
|
|
148
|
+
runtime.state = createExperimentState();
|
|
149
|
+
runtime.state.maxExperiments = readMaxExperiments(ctx.cwd);
|
|
150
|
+
runtime.goal = null;
|
|
151
|
+
applyPendingRunToRuntime(runtime, null);
|
|
152
|
+
}
|
|
153
|
+
const mode = trimmed === "clear" ? "clear" : "off";
|
|
154
|
+
setMode(ctx, false, mode === "clear" ? null : runtime.goal, mode);
|
|
155
|
+
dashboard.updateWidget(ctx, runtime);
|
|
156
|
+
await api.setActiveTools(removeExperimentTools(api.getActiveTools()));
|
|
157
|
+
ctx.ui.notify(mode === "clear" ? "Autoresearch local state cleared" : "Autoresearch mode disabled", "info");
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const workDir = resolveWorkDir(ctx.cwd);
|
|
162
|
+
const autoresearchMdPath = path.join(workDir, "autoresearch.md");
|
|
163
|
+
const hasAutoresearchMd = fs.existsSync(autoresearchMdPath);
|
|
164
|
+
const controlState = reconstructControlState(ctx.sessionManager.getBranch());
|
|
165
|
+
const shouldResumeExistingNotes =
|
|
166
|
+
hasAutoresearchMd &&
|
|
167
|
+
(fs.existsSync(path.join(workDir, "autoresearch.jsonl")) ||
|
|
168
|
+
fs.existsSync(path.join(workDir, ".autoresearch")) ||
|
|
169
|
+
(controlState.lastMode !== "clear" && trimmed.length === 0));
|
|
170
|
+
|
|
171
|
+
const goal = shouldResumeExistingNotes
|
|
172
|
+
? (runtime.goal ?? runtime.state.name ?? null)
|
|
173
|
+
: trimmed.length > 0
|
|
174
|
+
? trimmed
|
|
175
|
+
: null;
|
|
176
|
+
const branchResult = await ensureAutoresearchBranch(api, workDir, goal);
|
|
177
|
+
if (!branchResult.ok) {
|
|
178
|
+
ctx.ui.notify(branchResult.error, "error");
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
setMode(ctx, true, goal, "on");
|
|
183
|
+
dashboard.updateWidget(ctx, runtime);
|
|
184
|
+
await api.setActiveTools(addExperimentTools(api.getActiveTools()));
|
|
185
|
+
|
|
186
|
+
if (shouldResumeExistingNotes) {
|
|
187
|
+
api.sendUserMessage(
|
|
188
|
+
prompt.render(commandResumeTemplate, {
|
|
189
|
+
autoresearch_md_path: autoresearchMdPath,
|
|
190
|
+
branch_status_line: branchResult.created
|
|
191
|
+
? `Created and checked out dedicated git branch \`${branchResult.branchName}\` before resuming.`
|
|
192
|
+
: `Using dedicated git branch \`${branchResult.branchName}\`.`,
|
|
193
|
+
has_resume_context: trimmed.length > 0,
|
|
194
|
+
resume_context: trimmed,
|
|
195
|
+
}),
|
|
196
|
+
);
|
|
197
|
+
} else if (trimmed.length > 0) {
|
|
198
|
+
api.sendUserMessage(trimmed);
|
|
199
|
+
} else {
|
|
200
|
+
ctx.ui.notify("Autoresearch enabled\u2014describe what to optimize in your next message.", "info");
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
api.registerShortcut("ctrl+x", {
|
|
205
|
+
description: "Toggle autoresearch dashboard",
|
|
206
|
+
handler(ctx): void {
|
|
207
|
+
const runtime = getRuntime(ctx);
|
|
208
|
+
if (runtime.state.results.length === 0 && !runtime.runningExperiment) {
|
|
209
|
+
ctx.ui.notify("No autoresearch results yet", "info");
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
runtime.dashboardExpanded = !runtime.dashboardExpanded;
|
|
213
|
+
dashboard.updateWidget(ctx, runtime);
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
api.registerShortcut("ctrl+shift+x", {
|
|
217
|
+
description: "Show autoresearch dashboard overlay",
|
|
218
|
+
handler(ctx): Promise<void> {
|
|
219
|
+
return dashboard.showOverlay(ctx, getRuntime(ctx));
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
api.on("session_start", (_event, ctx) => rehydrate(ctx));
|
|
223
|
+
api.on("session_switch", (_event, ctx) => rehydrate(ctx));
|
|
224
|
+
api.on("session_branch", (_event, ctx) => rehydrate(ctx));
|
|
225
|
+
api.on("session_tree", (_event, ctx) => rehydrate(ctx));
|
|
226
|
+
api.on("session_shutdown", (_event, ctx) => {
|
|
227
|
+
dashboard.clear(ctx);
|
|
228
|
+
runtimeStore.clear(getSessionKey(ctx));
|
|
229
|
+
});
|
|
230
|
+
api.on("agent_end", async (_event, ctx) => {
|
|
231
|
+
const runtime = getRuntime(ctx);
|
|
232
|
+
runtime.runningExperiment = null;
|
|
233
|
+
dashboard.updateWidget(ctx, runtime);
|
|
234
|
+
dashboard.requestRender();
|
|
235
|
+
if (!runtime.autoresearchMode) return;
|
|
236
|
+
if (ctx.hasPendingMessages()) {
|
|
237
|
+
runtime.autoResumeArmed = false;
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const workDir = resolveWorkDir(ctx.cwd);
|
|
241
|
+
const pendingRun = await refreshPendingRun(runtime, workDir);
|
|
242
|
+
const shouldResumePendingRun =
|
|
243
|
+
pendingRun !== null && runtime.lastAutoResumePendingRunNumber !== pendingRun.runNumber;
|
|
244
|
+
if (!shouldResumePendingRun && !runtime.autoResumeArmed) return;
|
|
245
|
+
runtime.autoResumeArmed = false;
|
|
246
|
+
runtime.lastAutoResumePendingRunNumber = pendingRun?.runNumber ?? null;
|
|
247
|
+
const autoresearchMdPath = path.join(workDir, "autoresearch.md");
|
|
248
|
+
const ideasPath = path.join(workDir, "autoresearch.ideas.md");
|
|
249
|
+
api.sendMessage(
|
|
250
|
+
{
|
|
251
|
+
customType: "autoresearch-resume",
|
|
252
|
+
content: prompt.render(resumeMessageTemplate, {
|
|
253
|
+
autoresearch_md_path: autoresearchMdPath,
|
|
254
|
+
has_ideas: fs.existsSync(ideasPath),
|
|
255
|
+
has_pending_run: Boolean(pendingRun),
|
|
256
|
+
}),
|
|
257
|
+
display: false,
|
|
258
|
+
attribution: "agent",
|
|
259
|
+
},
|
|
260
|
+
{ deliverAs: "nextTurn", triggerTurn: true },
|
|
261
|
+
);
|
|
262
|
+
});
|
|
263
|
+
api.on("before_agent_start", async (event, ctx) => {
|
|
264
|
+
const runtime = getRuntime(ctx);
|
|
265
|
+
if (!runtime.autoresearchMode) return;
|
|
266
|
+
const workDir = resolveWorkDir(ctx.cwd);
|
|
267
|
+
const autoresearchMdPath = path.join(workDir, "autoresearch.md");
|
|
268
|
+
const checksPath = path.join(workDir, "autoresearch.checks.sh");
|
|
269
|
+
const ideasPath = path.join(workDir, "autoresearch.ideas.md");
|
|
270
|
+
const pendingRun = await refreshPendingRun(runtime, workDir);
|
|
271
|
+
const currentSegmentResults = currentResults(runtime.state.results, runtime.state.currentSegment);
|
|
272
|
+
const baselineMetric = findBaselineMetric(runtime.state.results, runtime.state.currentSegment);
|
|
273
|
+
const bestKept = findBestKeptResult(runtime.state);
|
|
274
|
+
const goal = runtime.goal ?? runtime.state.name ?? "";
|
|
275
|
+
const recentResults = currentSegmentResults.slice(-3).map(result => {
|
|
276
|
+
const asiSummary = summarizeExperimentAsi(result);
|
|
277
|
+
return {
|
|
278
|
+
asi_summary: asiSummary,
|
|
279
|
+
description: result.description,
|
|
280
|
+
has_asi_summary: Boolean(asiSummary),
|
|
281
|
+
metric_display: formatNum(result.metric, runtime.state.metricUnit),
|
|
282
|
+
run_number: result.runNumber ?? runtime.state.results.indexOf(result) + 1,
|
|
283
|
+
status: result.status,
|
|
284
|
+
};
|
|
285
|
+
});
|
|
286
|
+
const hasPendingMetric = pendingRun?.parsedPrimary != null;
|
|
287
|
+
return {
|
|
288
|
+
systemPrompt: prompt.render(promptTemplate, {
|
|
289
|
+
base_system_prompt: event.systemPrompt,
|
|
290
|
+
has_goal: goal.trim().length > 0,
|
|
291
|
+
goal,
|
|
292
|
+
has_autoresearch_md: fs.existsSync(autoresearchMdPath),
|
|
293
|
+
working_dir: workDir,
|
|
294
|
+
default_metric_name: runtime.state.metricName,
|
|
295
|
+
metric_name: runtime.state.metricName,
|
|
296
|
+
autoresearch_md_path: autoresearchMdPath,
|
|
297
|
+
has_checks: fs.existsSync(checksPath),
|
|
298
|
+
checks_path: checksPath,
|
|
299
|
+
has_ideas: fs.existsSync(ideasPath),
|
|
300
|
+
ideas_path: ideasPath,
|
|
301
|
+
current_segment: runtime.state.currentSegment + 1,
|
|
302
|
+
current_segment_run_count: currentSegmentResults.length,
|
|
303
|
+
has_baseline_metric: baselineMetric !== null,
|
|
304
|
+
baseline_metric_display: formatNum(baselineMetric, runtime.state.metricUnit),
|
|
305
|
+
has_best_result: Boolean(bestKept),
|
|
306
|
+
best_metric_display: bestKept
|
|
307
|
+
? formatNum(bestKept.result.metric, runtime.state.metricUnit)
|
|
308
|
+
: formatNum(baselineMetric, runtime.state.metricUnit),
|
|
309
|
+
best_run_number: bestKept ? (bestKept.result.runNumber ?? bestKept.index + 1) : null,
|
|
310
|
+
has_recent_results: recentResults.length > 0,
|
|
311
|
+
recent_results: recentResults,
|
|
312
|
+
has_pending_run: Boolean(pendingRun),
|
|
313
|
+
pending_run_number: pendingRun?.runNumber,
|
|
314
|
+
pending_run_command: pendingRun?.command,
|
|
315
|
+
pending_run_directory: pendingRun?.runDirectory,
|
|
316
|
+
pending_run_passed: pendingRun?.passed ?? false,
|
|
317
|
+
has_pending_run_metric: hasPendingMetric,
|
|
318
|
+
pending_run_metric_display: hasPendingMetric
|
|
319
|
+
? formatNum(pendingRun!.parsedPrimary!, runtime.state.metricUnit)
|
|
320
|
+
: null,
|
|
321
|
+
}),
|
|
322
|
+
};
|
|
323
|
+
});
|
|
324
|
+
};
|
|
325
|
+
function summarizeExperimentAsi(result: ExperimentResult): string | null {
|
|
326
|
+
const parts = ["hypothesis", "rollback_reason", "next_action_hint"]
|
|
327
|
+
.map(k => (typeof result.asi?.[k] === "string" ? (result.asi[k] as string).trim() : ""))
|
|
328
|
+
.filter(Boolean);
|
|
329
|
+
return parts.length > 0 ? parts.join(" | ").slice(0, 220) : null;
|
|
330
|
+
}
|
|
331
|
+
function resolveAutoresearchRelativePath(
|
|
332
|
+
workDir: string,
|
|
333
|
+
rawPath: string,
|
|
334
|
+
): { ok: false; reason: string } | { ok: true; relativePath: string } {
|
|
335
|
+
if (/^[a-z][a-z0-9+.-]*:\/\//i.test(rawPath))
|
|
336
|
+
return { ok: false, reason: `Autoresearch cannot validate internal URL paths during scoped editing: ${rawPath}` };
|
|
337
|
+
const resolvedPath = path.isAbsolute(rawPath) ? path.resolve(rawPath) : path.resolve(workDir, rawPath);
|
|
338
|
+
const canonicalWorkDir = canonicalizeExistingPath(workDir);
|
|
339
|
+
const canonicalTargetPath = canonicalizeTargetPath(resolvedPath);
|
|
340
|
+
const relativePath = path.relative(canonicalWorkDir, canonicalTargetPath);
|
|
341
|
+
if (relativePath === ".." || relativePath.startsWith(`..${path.sep}`) || path.isAbsolute(relativePath))
|
|
342
|
+
return { ok: false, reason: `Autoresearch blocked edits outside the working tree: ${rawPath}` };
|
|
343
|
+
return { ok: true, relativePath: relativePath.length === 0 ? "." : normalizeAutoresearchPath(relativePath) };
|
|
344
|
+
}
|
|
345
|
+
function validateEditableAutoresearchPath(relativePath: string, runtime: AutoresearchRuntime): string | null {
|
|
346
|
+
if (isAutoresearchLocalStatePath(relativePath))
|
|
347
|
+
return "autoresearch local state files are managed by the experiment tools and cannot be edited directly";
|
|
348
|
+
if (runtime.state.offLimits.some(spec => pathMatchesContractPath(relativePath, spec)))
|
|
349
|
+
return "this path is listed under Off Limits in autoresearch.md";
|
|
350
|
+
if (isAutoresearchCommittableFile(relativePath)) return null;
|
|
351
|
+
if (runtime.state.scopePaths.length === 0)
|
|
352
|
+
return "Files in Scope is not initialized yet; only autoresearch control files may be edited before init_experiment runs";
|
|
353
|
+
if (!runtime.state.scopePaths.some(spec => pathMatchesContractPath(relativePath, spec)))
|
|
354
|
+
return "this path is outside Files in Scope in autoresearch.md";
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
function collectLoggedRunNumbers(results: ExperimentResult[]): Set<number> {
|
|
358
|
+
return new Set(results.map(r => r.runNumber).filter((n): n is number => n !== null));
|
|
359
|
+
}
|
|
360
|
+
function applyPendingRunToRuntime(runtime: AutoresearchRuntime, summary: PendingRunSummary | null): void {
|
|
361
|
+
runtime.lastRunSummary = summary;
|
|
362
|
+
runtime.lastRunChecks = summaryToChecks(summary);
|
|
363
|
+
runtime.lastRunDuration = summary?.durationSeconds ?? null;
|
|
364
|
+
runtime.lastRunAsi = summary?.parsedAsi ?? null;
|
|
365
|
+
runtime.lastRunArtifactDir = summary?.runDirectory ?? null;
|
|
366
|
+
runtime.lastRunNumber = summary?.runNumber ?? null;
|
|
367
|
+
}
|
|
368
|
+
function summaryToChecks(summary: PendingRunSummary | null): AutoresearchRuntime["lastRunChecks"] {
|
|
369
|
+
if (!summary || summary.checksPass === null) return null;
|
|
370
|
+
return {
|
|
371
|
+
pass: summary.checksPass,
|
|
372
|
+
output: "",
|
|
373
|
+
duration: summary.checksDurationSeconds ?? 0,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
function canonicalizeExistingPath(targetPath: string): string {
|
|
377
|
+
try {
|
|
378
|
+
return fs.realpathSync.native(targetPath);
|
|
379
|
+
} catch {
|
|
380
|
+
return path.resolve(targetPath);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function canonicalizeTargetPath(targetPath: string): string {
|
|
384
|
+
const pendingSegments: string[] = [];
|
|
385
|
+
let currentPath = path.resolve(targetPath);
|
|
386
|
+
while (!fs.existsSync(currentPath)) {
|
|
387
|
+
const parentPath = path.dirname(currentPath);
|
|
388
|
+
if (parentPath === currentPath) return currentPath;
|
|
389
|
+
pendingSegments.unshift(path.basename(currentPath));
|
|
390
|
+
currentPath = parentPath;
|
|
391
|
+
}
|
|
392
|
+
return path.resolve(canonicalizeExistingPath(currentPath), ...pendingSegments);
|
|
393
|
+
}
|
|
394
|
+
async function refreshPendingRun(runtime: AutoresearchRuntime, workDir: string): Promise<PendingRunSummary | null> {
|
|
395
|
+
const pendingRun =
|
|
396
|
+
runtime.lastRunSummary ?? (await readPendingRunSummary(workDir, collectLoggedRunNumbers(runtime.state.results)));
|
|
397
|
+
runtime.lastRunSummary = pendingRun;
|
|
398
|
+
runtime.lastRunChecks = summaryToChecks(pendingRun);
|
|
399
|
+
runtime.lastRunDuration = pendingRun?.durationSeconds ?? runtime.lastRunDuration;
|
|
400
|
+
runtime.lastRunAsi = pendingRun?.parsedAsi ?? runtime.lastRunAsi;
|
|
401
|
+
return pendingRun;
|
|
402
|
+
}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
{{{base_system_prompt}}}
|
|
2
|
+
|
|
3
|
+
## Autoresearch Mode
|
|
4
|
+
|
|
5
|
+
Autoresearch mode is active.
|
|
6
|
+
|
|
7
|
+
{{#if has_goal}}
|
|
8
|
+
Primary goal:
|
|
9
|
+
{{goal}}
|
|
10
|
+
{{else}}
|
|
11
|
+
{{#if has_autoresearch_md}}
|
|
12
|
+
Primary goal is documented in `autoresearch.md` for this session.
|
|
13
|
+
{{else}}
|
|
14
|
+
There is no `autoresearch.md` yet. Infer what to optimize from the latest user message and the conversation; after you create `autoresearch.md`, keep it as the durable source of truth for goal and benchmark contract.
|
|
15
|
+
{{/if}}
|
|
16
|
+
{{/if}}
|
|
17
|
+
|
|
18
|
+
Working directory:
|
|
19
|
+
`{{working_dir}}`
|
|
20
|
+
|
|
21
|
+
You are running an autonomous experiment loop. Keep iterating until the user interrupts you or the configured maximum iteration count is reached.
|
|
22
|
+
{{#if has_recent_results}}
|
|
23
|
+
|
|
24
|
+
### Current Segment Snapshot
|
|
25
|
+
|
|
26
|
+
- segment: `{{current_segment}}`
|
|
27
|
+
- runs in current segment: `{{current_segment_run_count}}`
|
|
28
|
+
{{#if has_baseline_metric}}
|
|
29
|
+
- baseline `{{metric_name}}`: `{{baseline_metric_display}}`
|
|
30
|
+
{{/if}}
|
|
31
|
+
{{#if has_best_result}}
|
|
32
|
+
- best kept `{{metric_name}}`: `{{best_metric_display}}`{{#if best_run_number}} from run `#{{best_run_number}}`{{/if}}
|
|
33
|
+
{{/if}}
|
|
34
|
+
|
|
35
|
+
Recent runs:
|
|
36
|
+
{{#each recent_results}}
|
|
37
|
+
- run `#{{run_number}}`: `{{status}}` `{{metric_display}}` — {{description}}
|
|
38
|
+
{{#if has_asi_summary}}
|
|
39
|
+
ASI: {{asi_summary}}
|
|
40
|
+
{{/if}}
|
|
41
|
+
{{/each}}
|
|
42
|
+
{{/if}}
|
|
43
|
+
{{#if has_pending_run}}
|
|
44
|
+
|
|
45
|
+
### Pending Run
|
|
46
|
+
|
|
47
|
+
An unlogged run artifact exists at `{{pending_run_directory}}`.
|
|
48
|
+
|
|
49
|
+
- run: `#{{pending_run_number}}`
|
|
50
|
+
- command: `{{pending_run_command}}`
|
|
51
|
+
{{#if has_pending_run_metric}}
|
|
52
|
+
- parsed `{{metric_name}}`: `{{pending_run_metric_display}}`
|
|
53
|
+
{{/if}}
|
|
54
|
+
- result status: {{#if pending_run_passed}}passed{{else}}failed{{/if}}
|
|
55
|
+
- finish the `log_experiment` step before starting another benchmark
|
|
56
|
+
{{/if}}
|
|
57
|
+
|
|
58
|
+
### Available tools
|
|
59
|
+
|
|
60
|
+
- `init_experiment` — initialize or reset the experiment session for the current optimization target.
|
|
61
|
+
- `run_experiment` — run a benchmark or experiment command with timing, output capture, structured metric parsing, and optional backpressure checks.
|
|
62
|
+
- `log_experiment` — record the result, update the dashboard, persist JSONL history, auto-commit kept experiments, and revert only run-modified files for discarded or failed experiments (pre-existing uncommitted changes are preserved).
|
|
63
|
+
|
|
64
|
+
### Operating protocol
|
|
65
|
+
|
|
66
|
+
1. Understand the target before touching code.
|
|
67
|
+
- Read the relevant source files.
|
|
68
|
+
- Identify the true bottleneck or quality constraint.
|
|
69
|
+
- Check existing scripts, benchmark harnesses, and config files.
|
|
70
|
+
- Verify prerequisites, one-time setup, and benchmark inputs before the first run of a segment.
|
|
71
|
+
2. Keep your notes in `autoresearch.md`.
|
|
72
|
+
- Record the goal, the benchmark command, the primary metric, important secondary metrics, the files in scope, hard constraints, preflight requirements, and the benchmark comparability invariant.
|
|
73
|
+
- Update the notes whenever the strategy changes.
|
|
74
|
+
- Keep durable conclusions in `autoresearch.md`.
|
|
75
|
+
- Use `autoresearch.ideas.md` for deferred experiment ideas that are promising but not active yet.
|
|
76
|
+
3. The benchmark command in `autoresearch.md` is the canonical entrypoint.
|
|
77
|
+
- If it does not exist yet, create a benchmark script.
|
|
78
|
+
- Make it print structured metric lines in the form `METRIC name=value`.
|
|
79
|
+
- Quality scores (`direction: higher`) are first-class — not every benchmark is a timing measurement.
|
|
80
|
+
- Use the same workload every run unless you intentionally re-initialize with a new segment.
|
|
81
|
+
4. Initialize the loop with `init_experiment` before the first logged run of a segment.
|
|
82
|
+
- Pass `from_autoresearch_md: true` with only `name` to load the benchmark contract from `autoresearch.md` without mirroring every field in the tool call.
|
|
83
|
+
- Use `abandon_unlogged_runs: true` only when you intentionally discard unlogged run artifacts and need a fresh segment (for example after a bad or obsolete benchmark directory).
|
|
84
|
+
5. Run a baseline first.
|
|
85
|
+
- Establish the baseline metric before attempting optimizations.
|
|
86
|
+
- Track secondary metrics only when they matter to correctness, quality, or obvious regressions.
|
|
87
|
+
6. Iterate.
|
|
88
|
+
- Make one coherent experiment at a time.
|
|
89
|
+
- Run `run_experiment`.
|
|
90
|
+
- Interpret the result honestly.
|
|
91
|
+
- Call `log_experiment` after every run (it refreshes benchmark/scope fields from `autoresearch.md` before logging so keep validation matches the file on disk).
|
|
92
|
+
- Use `run_experiment` with `force: true` only when you must override the segment benchmark command.
|
|
93
|
+
- After any code change, verify with `bun check:ts` or the project test suite before logging. A kept experiment that breaks the build is worse than a discarded one.
|
|
94
|
+
- On `log_experiment`, `force: true` relaxes ASI requirements and allows keeping a primary-metric regression; prefer normal logging when possible.
|
|
95
|
+
7. Keep the primary metric as the decision maker.
|
|
96
|
+
- `keep` when the primary metric improves.
|
|
97
|
+
- `discard` when it regresses or stays flat.
|
|
98
|
+
- `crash` when the run fails.
|
|
99
|
+
- `checks_failed` when the benchmark passes but backpressure checks fail.
|
|
100
|
+
8. Record ASI on every `log_experiment` call.
|
|
101
|
+
- At minimum include `hypothesis`.
|
|
102
|
+
- On `discard`, `crash`, or `checks_failed`, also include `rollback_reason` and `next_action_hint`.
|
|
103
|
+
- Use ASI to capture what you learned, not just what you changed.
|
|
104
|
+
9. Prefer simpler wins.
|
|
105
|
+
- Remove dead ends.
|
|
106
|
+
- Keep equal or near-equal results when they materially simplify the implementation.
|
|
107
|
+
- Do not keep ugly complexity for tiny gains unless the payoff is clearly worth it.
|
|
108
|
+
- Do not thrash between unrelated ideas without writing down the conclusion.
|
|
109
|
+
10. When confidence is low, confirm.
|
|
110
|
+
- The dashboard confidence score compares the best observed improvement against the observed noise floor.
|
|
111
|
+
- Below `1.0x` usually means the improvement is within noise.
|
|
112
|
+
- Re-run promising changes when needed before keeping them.
|
|
113
|
+
|
|
114
|
+
### Benchmark harness guidance
|
|
115
|
+
|
|
116
|
+
Your benchmark script SHOULD:
|
|
117
|
+
|
|
118
|
+
- match the benchmark command from `autoresearch.md`
|
|
119
|
+
- run from `{{working_dir}}`
|
|
120
|
+
- fail with a non-zero exit status on invalid runs
|
|
121
|
+
- print the primary metric as `METRIC {{default_metric_name}}=<number>` or another explicit metric name chosen during initialization
|
|
122
|
+
- print secondary metrics as additional `METRIC name=value` lines
|
|
123
|
+
- avoid extra randomness when possible
|
|
124
|
+
- use repeated samples and median-style summaries for fast benchmarks
|
|
125
|
+
- preserve the comparability invariant for the current segment
|
|
126
|
+
- keep the ground-truth evaluator and fixed benchmark inputs unchanged unless the segment is explicitly re-initialized
|
|
127
|
+
|
|
128
|
+
### Notes file template
|
|
129
|
+
|
|
130
|
+
Keep `autoresearch.md` concise and current.
|
|
131
|
+
|
|
132
|
+
Suggested structure:
|
|
133
|
+
|
|
134
|
+
```md
|
|
135
|
+
# Autoresearch
|
|
136
|
+
|
|
137
|
+
## Goal
|
|
138
|
+
{{#if has_goal}}
|
|
139
|
+
- {{goal}}
|
|
140
|
+
{{else}}
|
|
141
|
+
{{#if has_autoresearch_md}}
|
|
142
|
+
- document the active target here before the first benchmark
|
|
143
|
+
{{else}}
|
|
144
|
+
- (derive from the user's messages, then record here)
|
|
145
|
+
{{/if}}
|
|
146
|
+
{{/if}}
|
|
147
|
+
|
|
148
|
+
## Benchmark
|
|
149
|
+
- command:
|
|
150
|
+
- primary metric:
|
|
151
|
+
- metric unit:
|
|
152
|
+
- direction:
|
|
153
|
+
- secondary metrics: memory_mb, rss_mb
|
|
154
|
+
|
|
155
|
+
## Files in Scope
|
|
156
|
+
- path:
|
|
157
|
+
|
|
158
|
+
## Off Limits
|
|
159
|
+
- path:
|
|
160
|
+
|
|
161
|
+
## Constraints
|
|
162
|
+
- rule:
|
|
163
|
+
|
|
164
|
+
## Baseline
|
|
165
|
+
- metric:
|
|
166
|
+
- notes:
|
|
167
|
+
|
|
168
|
+
## Current best
|
|
169
|
+
- metric:
|
|
170
|
+
- why it won:
|
|
171
|
+
|
|
172
|
+
## What's Been Tried
|
|
173
|
+
- experiment:
|
|
174
|
+
- lesson:
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Guardrails
|
|
178
|
+
|
|
179
|
+
- Do not game the benchmark.
|
|
180
|
+
- Do not overfit to synthetic inputs if the real workload is broader.
|
|
181
|
+
- Preserve correctness.
|
|
182
|
+
- Only modify files that are explicitly in scope for the current session.
|
|
183
|
+
- Do not use the general shell tool for file mutations during autoresearch. Use `write`, `edit`, or `ast_edit` for scoped code changes and `run_experiment` for benchmark execution.
|
|
184
|
+
- If you create `autoresearch.checks.sh`, treat it as a hard gate for `keep`.
|
|
185
|
+
- If the user sends another message while a run is in progress, finish the current run and logging cycle first, then address the new input in the next iteration.
|
|
186
|
+
|
|
187
|
+
{{#if has_autoresearch_md}}
|
|
188
|
+
### Resume mode
|
|
189
|
+
|
|
190
|
+
`autoresearch.md` already exists at `{{autoresearch_md_path}}`.
|
|
191
|
+
|
|
192
|
+
Resume from the existing notes:
|
|
193
|
+
|
|
194
|
+
- read `autoresearch.md`
|
|
195
|
+
- inspect recent git history
|
|
196
|
+
- inspect `autoresearch.jsonl`
|
|
197
|
+
- continue from the most promising unfinished direction on the current protected branch
|
|
198
|
+
|
|
199
|
+
{{else}}
|
|
200
|
+
### Initial setup
|
|
201
|
+
|
|
202
|
+
`autoresearch.md` does not exist yet. You decide the benchmark contract, harness, and scope from the user's messages and the repository—do not ask the user to re-type benchmark commands or metric names in a separate UI prompt.
|
|
203
|
+
|
|
204
|
+
Before the first benchmark:
|
|
205
|
+
|
|
206
|
+
- Write `autoresearch.md` with goal, benchmark command, primary metric name and unit, direction (`lower` or `higher`), tradeoff metrics if relevant, files in scope, off limits, and constraints.
|
|
207
|
+
- Add a short preflight section: prerequisites, one-time setup, and the comparability invariant that must stay fixed across runs.
|
|
208
|
+
- Mark ground-truth evaluators, fixed datasets, and other measurement-critical files as off limits or hard constraints when they define the benchmark contract.
|
|
209
|
+
- Create a benchmark script; print the primary metric as `METRIC <name>=<number>` and optional secondary metrics as additional `METRIC` lines.
|
|
210
|
+
- Optionally add `autoresearch.checks.sh` if correctness or quality needs a hard gate.
|
|
211
|
+
- Call `init_experiment` with arguments that match `autoresearch.md` exactly (benchmark command, metric, unit, direction, scope paths, off limits, constraints).
|
|
212
|
+
- Run and log the baseline.
|
|
213
|
+
|
|
214
|
+
Until `init_experiment` succeeds, only autoresearch control files (`autoresearch.md`, `autoresearch.sh`, `autoresearch.ideas.md`, `autoresearch.checks.sh`) may be edited; after initialization, respect Files in Scope from the contract.
|
|
215
|
+
|
|
216
|
+
{{/if}}
|
|
217
|
+
{{#if has_checks}}
|
|
218
|
+
### Backpressure checks
|
|
219
|
+
|
|
220
|
+
`autoresearch.checks.sh` exists at `{{checks_path}}` and runs automatically after passing benchmark runs.
|
|
221
|
+
|
|
222
|
+
Treat failing checks as a failed experiment:
|
|
223
|
+
|
|
224
|
+
- do not `keep` a run when checks fail
|
|
225
|
+
- log it as `checks_failed`
|
|
226
|
+
- diagnose the regression before continuing
|
|
227
|
+
|
|
228
|
+
{{/if}}
|
|
229
|
+
{{#if has_ideas}}
|
|
230
|
+
### Ideas backlog
|
|
231
|
+
|
|
232
|
+
`autoresearch.ideas.md` exists at `{{ideas_path}}`.
|
|
233
|
+
|
|
234
|
+
Use it to keep promising but deferred experiments. `autoresearch.md` should hold durable conclusions; `autoresearch.ideas.md` is the scratch backlog. Prune stale ideas when they are disproven or superseded.
|
|
235
|
+
|
|
236
|
+
{{/if}}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Continue the autoresearch loop now.
|
|
2
|
+
|
|
3
|
+
@{{autoresearch_md_path}}
|
|
4
|
+
|
|
5
|
+
- Read `autoresearch.md` and `autoresearch.jsonl`.
|
|
6
|
+
- Treat `autoresearch.md` as the source of truth for the current direction, scope, and constraints.
|
|
7
|
+
- Inspect recent git history for context.
|
|
8
|
+
{{#if has_pending_run}}
|
|
9
|
+
- Inspect the latest unlogged `run.json` under `.autoresearch/runs/` and finish the pending `log_experiment` step before starting a new benchmark.
|
|
10
|
+
{{/if}}
|
|
11
|
+
- Continue from the most promising unfinished direction.
|
|
12
|
+
{{#if has_ideas}}
|
|
13
|
+
- Review `autoresearch.ideas.md` for deferred next steps and prune stale items.
|
|
14
|
+
{{/if}}
|
|
15
|
+
- Keep iterating until interrupted or until the configured iteration cap is reached.
|
|
16
|
+
- Preserve correctness and do not game the benchmark.
|