@wahack/pi-coding-agent 15.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10031 -0
- package/README.md +36 -0
- package/examples/README.md +21 -0
- package/examples/custom-tools/README.md +104 -0
- package/examples/custom-tools/hello/index.ts +20 -0
- package/examples/extensions/README.md +142 -0
- package/examples/extensions/api-demo.ts +79 -0
- package/examples/extensions/chalk-logger.ts +25 -0
- package/examples/extensions/hello.ts +31 -0
- package/examples/extensions/pirate.ts +43 -0
- package/examples/extensions/plan-mode.ts +549 -0
- package/examples/extensions/reload-runtime.ts +38 -0
- package/examples/extensions/thinking-note.ts +13 -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 +17 -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 +46 -0
- package/examples/sdk/04-skills.ts +43 -0
- package/examples/sdk/06-extensions.ts +82 -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/12-redis-sessions.ts +54 -0
- package/examples/sdk/13-sql-sessions.ts +61 -0
- package/examples/sdk/README.md +172 -0
- package/package.json +554 -0
- package/scripts/build-binary.ts +100 -0
- package/scripts/bundle-dist.ts +90 -0
- package/scripts/format-prompts.ts +68 -0
- package/scripts/generate-docs-index.ts +40 -0
- package/scripts/generate-template.ts +33 -0
- package/scripts/omp +42 -0
- package/scripts/omp.ts +19 -0
- package/src/async/index.ts +1 -0
- package/src/async/job-manager.ts +625 -0
- package/src/auto-thinking/classifier.ts +185 -0
- package/src/autoresearch/command-resume.md +14 -0
- package/src/autoresearch/dashboard.ts +436 -0
- package/src/autoresearch/git.ts +319 -0
- package/src/autoresearch/helpers.ts +218 -0
- package/src/autoresearch/index.ts +536 -0
- package/src/autoresearch/prompt-setup.md +43 -0
- package/src/autoresearch/prompt.md +103 -0
- package/src/autoresearch/resume-message.md +10 -0
- package/src/autoresearch/state.ts +273 -0
- package/src/autoresearch/storage.ts +699 -0
- package/src/autoresearch/tools/init-experiment.ts +272 -0
- package/src/autoresearch/tools/log-experiment.ts +524 -0
- package/src/autoresearch/tools/run-experiment.ts +407 -0
- package/src/autoresearch/tools/update-notes.ts +109 -0
- package/src/autoresearch/types.ts +168 -0
- package/src/bun-imports.d.ts +28 -0
- package/src/capability/context-file.ts +44 -0
- package/src/capability/extension-module.ts +34 -0
- package/src/capability/extension.ts +47 -0
- package/src/capability/fs.ts +117 -0
- package/src/capability/hook.ts +40 -0
- package/src/capability/index.ts +436 -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-buckets.ts +66 -0
- package/src/capability/rule.ts +261 -0
- package/src/capability/settings.ts +34 -0
- package/src/capability/skill.ts +63 -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 +340 -0
- package/src/cli/auth-broker-cli.ts +895 -0
- package/src/cli/auth-gateway-cli.ts +611 -0
- package/src/cli/classify-install-target.ts +76 -0
- package/src/cli/claude-trace-cli.ts +795 -0
- package/src/cli/commands/init-xdg.ts +27 -0
- package/src/cli/completion-gen.ts +550 -0
- package/src/cli/config-cli.ts +418 -0
- package/src/cli/dry-balance-cli.ts +856 -0
- package/src/cli/extension-flags.ts +48 -0
- package/src/cli/file-processor.ts +133 -0
- package/src/cli/gallery-cli.ts +230 -0
- package/src/cli/gallery-fixtures/agentic.ts +407 -0
- package/src/cli/gallery-fixtures/codeintel.ts +187 -0
- package/src/cli/gallery-fixtures/edit.ts +194 -0
- package/src/cli/gallery-fixtures/fs.ts +220 -0
- package/src/cli/gallery-fixtures/index.ts +40 -0
- package/src/cli/gallery-fixtures/interaction.ts +49 -0
- package/src/cli/gallery-fixtures/memory.ts +81 -0
- package/src/cli/gallery-fixtures/misc.ts +250 -0
- package/src/cli/gallery-fixtures/search.ts +213 -0
- package/src/cli/gallery-fixtures/shell.ts +167 -0
- package/src/cli/gallery-fixtures/types.ts +57 -0
- package/src/cli/gallery-fixtures/web.ts +158 -0
- package/src/cli/gallery-screenshot.ts +279 -0
- package/src/cli/grep-cli.ts +160 -0
- package/src/cli/grievances-cli.ts +256 -0
- package/src/cli/initial-message.ts +58 -0
- package/src/cli/list-models.ts +194 -0
- package/src/cli/plugin-cli.ts +996 -0
- package/src/cli/read-cli.ts +57 -0
- package/src/cli/session-picker.ts +79 -0
- package/src/cli/setup-cli.ts +231 -0
- package/src/cli/shell-cli.ts +176 -0
- package/src/cli/ssh-cli.ts +179 -0
- package/src/cli/startup-cwd.ts +68 -0
- package/src/cli/stats-cli.ts +238 -0
- package/src/cli/tiny-models-cli.ts +127 -0
- package/src/cli/update-cli.ts +611 -0
- package/src/cli/usage-cli.ts +603 -0
- package/src/cli/web-search-cli.ts +132 -0
- package/src/cli/worktree-cli.ts +291 -0
- package/src/cli-commands.ts +79 -0
- package/src/cli.ts +200 -0
- package/src/commands/acp.ts +24 -0
- package/src/commands/agents.ts +57 -0
- package/src/commands/auth-broker.ts +99 -0
- package/src/commands/auth-gateway.ts +69 -0
- package/src/commands/commit.ts +46 -0
- package/src/commands/complete.ts +66 -0
- package/src/commands/completions.ts +60 -0
- package/src/commands/config.ts +51 -0
- package/src/commands/dry-balance.ts +43 -0
- package/src/commands/gallery.ts +52 -0
- package/src/commands/grep.ts +48 -0
- package/src/commands/grievances.ts +51 -0
- package/src/commands/install.ts +107 -0
- package/src/commands/launch.ts +169 -0
- package/src/commands/plugin.ts +78 -0
- package/src/commands/read.ts +38 -0
- package/src/commands/setup.ts +67 -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/tiny-models.ts +36 -0
- package/src/commands/update.ts +21 -0
- package/src/commands/usage.ts +35 -0
- package/src/commands/web-search.ts +42 -0
- package/src/commands/worktree.ts +56 -0
- package/src/commit/agentic/agent.ts +317 -0
- package/src/commit/agentic/fallback.ts +96 -0
- package/src/commit/agentic/index.ts +355 -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 +146 -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 +144 -0
- package/src/commit/agentic/tools/propose-commit.ts +109 -0
- package/src/commit/agentic/tools/recent-commits.ts +81 -0
- package/src/commit/agentic/tools/schemas.ts +23 -0
- package/src/commit/agentic/tools/split-commit.ts +245 -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 +64 -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 +97 -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 +49 -0
- package/src/commit/map-reduce/utils.ts +9 -0
- package/src/commit/message.ts +11 -0
- package/src/commit/model-selection.ts +92 -0
- package/src/commit/pipeline.ts +243 -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/shared-llm.ts +77 -0
- package/src/commit/types.ts +118 -0
- package/src/commit/utils/exclusions.ts +42 -0
- package/src/commit/utils.ts +58 -0
- package/src/config/api-key-resolver.ts +60 -0
- package/src/config/append-only-context-mode.ts +31 -0
- package/src/config/config-file.ts +317 -0
- package/src/config/file-lock.ts +164 -0
- package/src/config/keybindings.ts +628 -0
- package/src/config/mcp-schema.json +230 -0
- package/src/config/model-discovery.ts +554 -0
- package/src/config/model-registry.ts +2090 -0
- package/src/config/model-resolver.ts +1502 -0
- package/src/config/model-roles.ts +74 -0
- package/src/config/models-config-schema.ts +226 -0
- package/src/config/models-config.ts +129 -0
- package/src/config/prompt-templates.ts +185 -0
- package/src/config/resolve-config-value.ts +94 -0
- package/src/config/settings-schema.ts +3530 -0
- package/src/config/settings.ts +1178 -0
- package/src/config.ts +242 -0
- package/src/cursor.ts +340 -0
- package/src/dap/client.ts +760 -0
- package/src/dap/config.ts +189 -0
- package/src/dap/defaults.json +212 -0
- package/src/dap/index.ts +4 -0
- package/src/dap/session.ts +1441 -0
- package/src/dap/types.ts +610 -0
- package/src/debug/index.ts +515 -0
- package/src/debug/log-formatting.ts +58 -0
- package/src/debug/log-viewer.ts +908 -0
- package/src/debug/profiler.ts +162 -0
- package/src/debug/protocol-probe.ts +267 -0
- package/src/debug/raw-sse-buffer.ts +273 -0
- package/src/debug/raw-sse.ts +292 -0
- package/src/debug/report-bundle.ts +374 -0
- package/src/debug/system-info.ts +111 -0
- package/src/debug/terminal-info.ts +124 -0
- package/src/discovery/agents-md.ts +67 -0
- package/src/discovery/agents.ts +230 -0
- package/src/discovery/at-imports.ts +273 -0
- package/src/discovery/builtin-defaults.ts +39 -0
- package/src/discovery/builtin-rules/index.ts +54 -0
- package/src/discovery/builtin-rules/rs-box-leak.md +48 -0
- package/src/discovery/builtin-rules/rs-future-prelude.md +23 -0
- package/src/discovery/builtin-rules/rs-lazylock.md +51 -0
- package/src/discovery/builtin-rules/rs-match-ergonomics.md +67 -0
- package/src/discovery/builtin-rules/rs-parking-lot.md +44 -0
- package/src/discovery/builtin-rules/rs-result-type.md +19 -0
- package/src/discovery/builtin-rules/ts-bare-catch.md +38 -0
- package/src/discovery/builtin-rules/ts-import-type.md +42 -0
- package/src/discovery/builtin-rules/ts-no-any.md +56 -0
- package/src/discovery/builtin-rules/ts-no-deprecated-leftovers.md +44 -0
- package/src/discovery/builtin-rules/ts-no-dynamic-import.md +39 -0
- package/src/discovery/builtin-rules/ts-no-return-type.md +45 -0
- package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
- package/src/discovery/builtin-rules/ts-no-tiny-functions.md +51 -0
- package/src/discovery/builtin-rules/ts-promise-with-resolvers.md +65 -0
- package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
- package/src/discovery/builtin-rules/ts-set-map.md +28 -0
- package/src/discovery/builtin.ts +906 -0
- package/src/discovery/claude-plugins.ts +386 -0
- package/src/discovery/claude.ts +584 -0
- package/src/discovery/cline.ts +83 -0
- package/src/discovery/codex.ts +522 -0
- package/src/discovery/cursor.ts +220 -0
- package/src/discovery/gemini.ts +383 -0
- package/src/discovery/github.ts +154 -0
- package/src/discovery/helpers.ts +1016 -0
- package/src/discovery/index.ts +81 -0
- package/src/discovery/mcp-json.ts +171 -0
- package/src/discovery/omp-extension-roots.ts +190 -0
- package/src/discovery/omp-plugins.ts +383 -0
- package/src/discovery/opencode.ts +398 -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/apply-patch/index.ts +87 -0
- package/src/edit/apply-patch/parser.ts +174 -0
- package/src/edit/diff.ts +999 -0
- package/src/edit/file-snapshot-store.ts +91 -0
- package/src/edit/hashline/block-resolver.ts +33 -0
- package/src/edit/hashline/diff.ts +290 -0
- package/src/edit/hashline/execute.ts +242 -0
- package/src/edit/hashline/filesystem.ts +130 -0
- package/src/edit/hashline/index.ts +5 -0
- package/src/edit/hashline/noop-loop-guard.ts +99 -0
- package/src/edit/hashline/params.ts +18 -0
- package/src/edit/index.ts +571 -0
- package/src/edit/modes/apply-patch.lark +19 -0
- package/src/edit/modes/apply-patch.ts +53 -0
- package/src/edit/modes/patch.ts +1891 -0
- package/src/edit/modes/replace.ts +1137 -0
- package/src/edit/normalize.ts +345 -0
- package/src/edit/notebook.ts +242 -0
- package/src/edit/read-file.ts +25 -0
- package/src/edit/renderer.ts +769 -0
- package/src/edit/streaming.ts +517 -0
- package/src/eval/__tests__/agent-bridge.test.ts +708 -0
- package/src/eval/__tests__/bridge-timeout.test.ts +64 -0
- package/src/eval/__tests__/budget-bridge.test.ts +69 -0
- package/src/eval/__tests__/completion-bridge.test.ts +412 -0
- package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
- package/src/eval/__tests__/idle-timeout.test.ts +80 -0
- package/src/eval/__tests__/js-context-manager.test.ts +241 -0
- package/src/eval/__tests__/kernel-spawn.test.ts +103 -0
- package/src/eval/agent-bridge.ts +319 -0
- package/src/eval/backend.ts +71 -0
- package/src/eval/bridge-timeout.ts +44 -0
- package/src/eval/budget-bridge.ts +48 -0
- package/src/eval/completion-bridge.ts +207 -0
- package/src/eval/concurrency-bridge.ts +34 -0
- package/src/eval/idle-timeout.ts +91 -0
- package/src/eval/index.ts +4 -0
- package/src/eval/js/context-manager.ts +502 -0
- package/src/eval/js/executor.ts +173 -0
- package/src/eval/js/index.ts +51 -0
- package/src/eval/js/shared/helpers.ts +283 -0
- package/src/eval/js/shared/indirect-eval.ts +30 -0
- package/src/eval/js/shared/local-module-loader.ts +342 -0
- package/src/eval/js/shared/prelude.ts +2 -0
- package/src/eval/js/shared/prelude.txt +246 -0
- package/src/eval/js/shared/rewrite-imports.ts +532 -0
- package/src/eval/js/shared/runtime.ts +352 -0
- package/src/eval/js/shared/types.ts +18 -0
- package/src/eval/js/tool-bridge.ts +162 -0
- package/src/eval/js/worker-core.ts +132 -0
- package/src/eval/js/worker-entry.ts +30 -0
- package/src/eval/js/worker-protocol.ts +47 -0
- package/src/eval/py/__tests__/prelude.test.ts +19 -0
- package/src/eval/py/display.ts +71 -0
- package/src/eval/py/executor.ts +742 -0
- package/src/eval/py/index.ts +68 -0
- package/src/eval/py/kernel.ts +748 -0
- package/src/eval/py/prelude.py +658 -0
- package/src/eval/py/prelude.ts +3 -0
- package/src/eval/py/runner.py +1133 -0
- package/src/eval/py/runtime.ts +276 -0
- package/src/eval/py/spawn-options.ts +126 -0
- package/src/eval/py/tool-bridge.ts +182 -0
- package/src/eval/session-id.ts +8 -0
- package/src/eval/types.ts +48 -0
- package/src/exa/index.ts +2 -0
- package/src/exa/mcp-client.ts +370 -0
- package/src/exa/types.ts +69 -0
- package/src/exec/bash-executor.ts +419 -0
- package/src/exec/exec.ts +53 -0
- package/src/exec/non-interactive-env.ts +48 -0
- package/src/export/custom-share.ts +65 -0
- package/src/export/html/index.ts +164 -0
- package/src/export/html/template.css +1051 -0
- package/src/export/html/template.generated.ts +2 -0
- package/src/export/html/template.html +46 -0
- package/src/export/html/template.js +2271 -0
- package/src/export/html/template.macro.ts +25 -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 +583 -0
- package/src/extensibility/custom-commands/bundled/ci-green/index.ts +54 -0
- package/src/extensibility/custom-commands/bundled/review/index.ts +489 -0
- package/src/extensibility/custom-commands/index.ts +2 -0
- package/src/extensibility/custom-commands/loader.ts +238 -0
- package/src/extensibility/custom-commands/types.ts +113 -0
- package/src/extensibility/custom-tools/index.ts +7 -0
- package/src/extensibility/custom-tools/loader.ts +269 -0
- package/src/extensibility/custom-tools/types.ts +270 -0
- package/src/extensibility/custom-tools/wrapper.ts +47 -0
- package/src/extensibility/extensions/compact-handler.ts +40 -0
- package/src/extensibility/extensions/get-commands-handler.ts +78 -0
- package/src/extensibility/extensions/index.ts +16 -0
- package/src/extensibility/extensions/loader.ts +572 -0
- package/src/extensibility/extensions/runner.ts +922 -0
- package/src/extensibility/extensions/types.ts +1322 -0
- package/src/extensibility/extensions/wrapper.ts +223 -0
- package/src/extensibility/hooks/index.ts +5 -0
- package/src/extensibility/hooks/loader.ts +257 -0
- package/src/extensibility/hooks/runner.ts +425 -0
- package/src/extensibility/hooks/tool-wrapper.ts +107 -0
- package/src/extensibility/hooks/types.ts +606 -0
- package/src/extensibility/legacy-pi-ai-shim.ts +24 -0
- package/src/extensibility/legacy-pi-coding-agent-shim.ts +15 -0
- package/src/extensibility/plugins/doctor.ts +65 -0
- package/src/extensibility/plugins/git-url.ts +367 -0
- package/src/extensibility/plugins/index.ts +9 -0
- package/src/extensibility/plugins/installer.ts +192 -0
- package/src/extensibility/plugins/legacy-pi-compat.ts +682 -0
- package/src/extensibility/plugins/loader.ts +313 -0
- package/src/extensibility/plugins/manager.ts +827 -0
- package/src/extensibility/plugins/marketplace/cache.ts +136 -0
- package/src/extensibility/plugins/marketplace/fetcher.ts +317 -0
- package/src/extensibility/plugins/marketplace/index.ts +6 -0
- package/src/extensibility/plugins/marketplace/manager.ts +770 -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 +191 -0
- package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
- package/src/extensibility/plugins/parser.ts +105 -0
- package/src/extensibility/plugins/types.ts +194 -0
- package/src/extensibility/shared-events.ts +343 -0
- package/src/extensibility/skills.ts +312 -0
- package/src/extensibility/slash-commands.ts +227 -0
- package/src/extensibility/tool-proxy.ts +25 -0
- package/src/extensibility/typebox.ts +418 -0
- package/src/extensibility/utils.ts +44 -0
- package/src/goals/index.ts +3 -0
- package/src/goals/runtime.ts +528 -0
- package/src/goals/state.ts +37 -0
- package/src/goals/tools/goal-tool.ts +251 -0
- package/src/hindsight/backend.ts +354 -0
- package/src/hindsight/bank.ts +156 -0
- package/src/hindsight/client.ts +598 -0
- package/src/hindsight/config.ts +175 -0
- package/src/hindsight/content.ts +210 -0
- package/src/hindsight/index.ts +8 -0
- package/src/hindsight/mental-models.ts +429 -0
- package/src/hindsight/seeds.json +32 -0
- package/src/hindsight/state.ts +488 -0
- package/src/hindsight/transcript.ts +71 -0
- package/src/index.ts +59 -0
- package/src/internal-urls/agent-protocol.ts +146 -0
- package/src/internal-urls/artifact-protocol.ts +107 -0
- package/src/internal-urls/docs-index.generated.ts +106 -0
- package/src/internal-urls/history-protocol.ts +113 -0
- package/src/internal-urls/index.ts +25 -0
- package/src/internal-urls/issue-pr-protocol.ts +584 -0
- package/src/internal-urls/json-query.ts +126 -0
- package/src/internal-urls/local-protocol.ts +287 -0
- package/src/internal-urls/mcp-protocol.ts +151 -0
- package/src/internal-urls/memory-protocol.ts +169 -0
- package/src/internal-urls/omp-protocol.ts +93 -0
- package/src/internal-urls/parse.ts +72 -0
- package/src/internal-urls/registry-helpers.ts +25 -0
- package/src/internal-urls/router.ts +105 -0
- package/src/internal-urls/rule-protocol.ts +45 -0
- package/src/internal-urls/skill-protocol.ts +96 -0
- package/src/internal-urls/types.ts +152 -0
- package/src/internal-urls/vault-protocol.ts +936 -0
- package/src/irc/bus.ts +292 -0
- package/src/lib/xai-http.ts +124 -0
- package/src/lsp/client.ts +1193 -0
- package/src/lsp/clients/biome-client.ts +264 -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 +502 -0
- package/src/lsp/defaults.json +493 -0
- package/src/lsp/diagnostics-ledger.ts +51 -0
- package/src/lsp/edits.ts +267 -0
- package/src/lsp/index.ts +2477 -0
- package/src/lsp/lspmux.ts +233 -0
- package/src/lsp/render.ts +694 -0
- package/src/lsp/startup-events.ts +13 -0
- package/src/lsp/types.ts +455 -0
- package/src/lsp/utils.ts +718 -0
- package/src/main.ts +1325 -0
- package/src/mcp/client.ts +484 -0
- package/src/mcp/config-writer.ts +225 -0
- package/src/mcp/config.ts +365 -0
- package/src/mcp/index.ts +29 -0
- package/src/mcp/json-rpc.ts +122 -0
- package/src/mcp/loader.ts +124 -0
- package/src/mcp/manager.ts +1275 -0
- package/src/mcp/oauth-discovery.ts +442 -0
- package/src/mcp/oauth-flow.ts +442 -0
- package/src/mcp/render.ts +132 -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/timeout.ts +59 -0
- package/src/mcp/tool-bridge.ts +426 -0
- package/src/mcp/tool-cache.ts +117 -0
- package/src/mcp/transports/http.ts +519 -0
- package/src/mcp/transports/index.ts +6 -0
- package/src/mcp/transports/stdio.ts +528 -0
- package/src/mcp/types.ts +423 -0
- package/src/memories/index.ts +1150 -0
- package/src/memories/storage.ts +577 -0
- package/src/memory-backend/index.ts +18 -0
- package/src/memory-backend/local-backend.ts +39 -0
- package/src/memory-backend/off-backend.ts +25 -0
- package/src/memory-backend/resolve.ts +25 -0
- package/src/memory-backend/runtime.ts +66 -0
- package/src/memory-backend/types.ts +166 -0
- package/src/mnemopi/backend.ts +547 -0
- package/src/mnemopi/config.ts +160 -0
- package/src/mnemopi/index.ts +3 -0
- package/src/mnemopi/state.ts +584 -0
- package/src/modes/acp/acp-agent.ts +2407 -0
- package/src/modes/acp/acp-client-bridge.ts +154 -0
- package/src/modes/acp/acp-event-mapper.ts +929 -0
- package/src/modes/acp/acp-mode.ts +23 -0
- package/src/modes/acp/index.ts +2 -0
- package/src/modes/acp/terminal-auth.ts +37 -0
- package/src/modes/components/agent-dashboard.ts +1206 -0
- package/src/modes/components/agent-hub.ts +1071 -0
- package/src/modes/components/assistant-message.ts +307 -0
- package/src/modes/components/bash-execution.ts +220 -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 +104 -0
- package/src/modes/components/chat-block.ts +111 -0
- package/src/modes/components/compaction-summary-message.ts +87 -0
- package/src/modes/components/copy-selector.ts +206 -0
- package/src/modes/components/countdown-timer.ts +75 -0
- package/src/modes/components/custom-editor.ts +398 -0
- package/src/modes/components/custom-message.ts +63 -0
- package/src/modes/components/diff.ts +277 -0
- package/src/modes/components/dynamic-border.ts +34 -0
- package/src/modes/components/error-banner.ts +33 -0
- package/src/modes/components/eval-execution.ts +158 -0
- package/src/modes/components/execution-shared.ts +101 -0
- package/src/modes/components/extensions/extension-dashboard.ts +399 -0
- package/src/modes/components/extensions/extension-list.ts +502 -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 +627 -0
- package/src/modes/components/extensions/types.ts +186 -0
- package/src/modes/components/footer.ts +274 -0
- package/src/modes/components/history-search.ts +280 -0
- package/src/modes/components/hook-editor.ts +167 -0
- package/src/modes/components/hook-input.ts +87 -0
- package/src/modes/components/hook-message.ts +66 -0
- package/src/modes/components/hook-selector.ts +660 -0
- package/src/modes/components/index.ts +38 -0
- package/src/modes/components/keybinding-hints.ts +65 -0
- package/src/modes/components/late-diagnostics-message.ts +60 -0
- package/src/modes/components/login-dialog.ts +164 -0
- package/src/modes/components/mcp-add-wizard.ts +1340 -0
- package/src/modes/components/message-frame.ts +88 -0
- package/src/modes/components/model-selector.ts +1271 -0
- package/src/modes/components/oauth-selector.ts +368 -0
- package/src/modes/components/omfg-panel.ts +141 -0
- package/src/modes/components/overlay-box.ts +108 -0
- package/src/modes/components/plan-review-overlay.ts +820 -0
- package/src/modes/components/plan-toc.ts +138 -0
- package/src/modes/components/plugin-selector.ts +95 -0
- package/src/modes/components/plugin-settings.ts +722 -0
- package/src/modes/components/queue-mode-selector.ts +56 -0
- package/src/modes/components/read-tool-group.ts +670 -0
- package/src/modes/components/segment-track.ts +52 -0
- package/src/modes/components/session-selector.ts +625 -0
- package/src/modes/components/settings-defs.ts +189 -0
- package/src/modes/components/settings-selector.ts +651 -0
- package/src/modes/components/show-images-selector.ts +45 -0
- package/src/modes/components/skill-message.ts +89 -0
- package/src/modes/components/status-line/component.ts +869 -0
- package/src/modes/components/status-line/context-thresholds.ts +79 -0
- package/src/modes/components/status-line/git-utils.ts +42 -0
- package/src/modes/components/status-line/index.ts +5 -0
- package/src/modes/components/status-line/presets.ts +106 -0
- package/src/modes/components/status-line/segments.ts +584 -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 +108 -0
- package/src/modes/components/theme-selector.ts +63 -0
- package/src/modes/components/thinking-selector.ts +52 -0
- package/src/modes/components/tiny-title-download-progress.ts +90 -0
- package/src/modes/components/tips.txt +19 -0
- package/src/modes/components/todo-reminder.ts +38 -0
- package/src/modes/components/tool-execution.ts +1024 -0
- package/src/modes/components/transcript-container.ts +608 -0
- package/src/modes/components/tree-selector.ts +978 -0
- package/src/modes/components/ttsr-notification.ts +122 -0
- package/src/modes/components/user-message-selector.ts +227 -0
- package/src/modes/components/user-message.ts +66 -0
- package/src/modes/components/visual-truncate.ts +63 -0
- package/src/modes/components/welcome.ts +493 -0
- package/src/modes/controllers/btw-controller.ts +105 -0
- package/src/modes/controllers/command-controller-shared.ts +109 -0
- package/src/modes/controllers/command-controller.ts +1566 -0
- package/src/modes/controllers/event-controller.ts +1054 -0
- package/src/modes/controllers/extension-ui-controller.ts +886 -0
- package/src/modes/controllers/input-controller.ts +1073 -0
- package/src/modes/controllers/mcp-command-controller.ts +2017 -0
- package/src/modes/controllers/omfg-controller.ts +283 -0
- package/src/modes/controllers/omfg-rule.ts +647 -0
- package/src/modes/controllers/selector-controller.ts +1108 -0
- package/src/modes/controllers/ssh-command-controller.ts +384 -0
- package/src/modes/controllers/streaming-reveal.ts +279 -0
- package/src/modes/controllers/tan-command-controller.ts +173 -0
- package/src/modes/controllers/todo-command-controller.ts +485 -0
- package/src/modes/data/emojis.json +1 -0
- package/src/modes/emoji-autocomplete.ts +285 -0
- package/src/modes/gradient-highlight.ts +87 -0
- package/src/modes/image-references.ts +117 -0
- package/src/modes/index.ts +17 -0
- package/src/modes/interactive-mode.ts +3370 -0
- package/src/modes/internal-url-autocomplete.ts +143 -0
- package/src/modes/loop-limit.ts +140 -0
- package/src/modes/magic-keywords.ts +20 -0
- package/src/modes/markdown-prose.ts +247 -0
- package/src/modes/oauth-manual-input.ts +69 -0
- package/src/modes/orchestrate.ts +42 -0
- package/src/modes/print-mode.ts +126 -0
- package/src/modes/prompt-action-autocomplete.ts +260 -0
- package/src/modes/rpc/host-tools.ts +186 -0
- package/src/modes/rpc/host-uris.ts +235 -0
- package/src/modes/rpc/rpc-client.ts +963 -0
- package/src/modes/rpc/rpc-mode.ts +947 -0
- package/src/modes/rpc/rpc-subagents.ts +265 -0
- package/src/modes/rpc/rpc-types.ts +458 -0
- package/src/modes/runtime-init.ts +116 -0
- package/src/modes/session-observer-registry.ts +146 -0
- package/src/modes/setup-version.ts +11 -0
- package/src/modes/setup-wizard/index.ts +99 -0
- package/src/modes/setup-wizard/lazy.ts +16 -0
- package/src/modes/setup-wizard/scenes/glyph.ts +96 -0
- package/src/modes/setup-wizard/scenes/outro.ts +35 -0
- package/src/modes/setup-wizard/scenes/providers.ts +69 -0
- package/src/modes/setup-wizard/scenes/sign-in.ts +205 -0
- package/src/modes/setup-wizard/scenes/splash.ts +201 -0
- package/src/modes/setup-wizard/scenes/theme.ts +299 -0
- package/src/modes/setup-wizard/scenes/types.ts +48 -0
- package/src/modes/setup-wizard/scenes/web-search.ts +129 -0
- package/src/modes/setup-wizard/wizard-overlay.ts +275 -0
- package/src/modes/shared.ts +47 -0
- package/src/modes/theme/dark.json +95 -0
- package/src/modes/theme/defaults/alabaster.json +93 -0
- package/src/modes/theme/defaults/amethyst.json +96 -0
- package/src/modes/theme/defaults/anthracite.json +93 -0
- package/src/modes/theme/defaults/basalt.json +91 -0
- package/src/modes/theme/defaults/birch.json +95 -0
- package/src/modes/theme/defaults/dark-abyss.json +91 -0
- package/src/modes/theme/defaults/dark-arctic.json +104 -0
- package/src/modes/theme/defaults/dark-aurora.json +95 -0
- package/src/modes/theme/defaults/dark-catppuccin.json +107 -0
- package/src/modes/theme/defaults/dark-cavern.json +91 -0
- package/src/modes/theme/defaults/dark-copper.json +95 -0
- package/src/modes/theme/defaults/dark-cosmos.json +90 -0
- package/src/modes/theme/defaults/dark-cyberpunk.json +102 -0
- package/src/modes/theme/defaults/dark-dracula.json +98 -0
- package/src/modes/theme/defaults/dark-eclipse.json +91 -0
- package/src/modes/theme/defaults/dark-ember.json +95 -0
- package/src/modes/theme/defaults/dark-equinox.json +90 -0
- package/src/modes/theme/defaults/dark-forest.json +96 -0
- package/src/modes/theme/defaults/dark-github.json +105 -0
- package/src/modes/theme/defaults/dark-gruvbox.json +112 -0
- package/src/modes/theme/defaults/dark-lavender.json +95 -0
- package/src/modes/theme/defaults/dark-lunar.json +89 -0
- package/src/modes/theme/defaults/dark-midnight.json +95 -0
- package/src/modes/theme/defaults/dark-monochrome.json +94 -0
- package/src/modes/theme/defaults/dark-monokai.json +98 -0
- package/src/modes/theme/defaults/dark-nebula.json +90 -0
- package/src/modes/theme/defaults/dark-nord.json +97 -0
- package/src/modes/theme/defaults/dark-ocean.json +101 -0
- package/src/modes/theme/defaults/dark-one.json +100 -0
- package/src/modes/theme/defaults/dark-poimandres.json +142 -0
- package/src/modes/theme/defaults/dark-rainforest.json +91 -0
- package/src/modes/theme/defaults/dark-reef.json +91 -0
- package/src/modes/theme/defaults/dark-retro.json +92 -0
- package/src/modes/theme/defaults/dark-rose-pine.json +96 -0
- package/src/modes/theme/defaults/dark-sakura.json +95 -0
- package/src/modes/theme/defaults/dark-slate.json +95 -0
- package/src/modes/theme/defaults/dark-solarized.json +97 -0
- package/src/modes/theme/defaults/dark-solstice.json +90 -0
- package/src/modes/theme/defaults/dark-starfall.json +91 -0
- package/src/modes/theme/defaults/dark-sunset.json +99 -0
- package/src/modes/theme/defaults/dark-swamp.json +90 -0
- package/src/modes/theme/defaults/dark-synthwave.json +103 -0
- package/src/modes/theme/defaults/dark-taiga.json +91 -0
- package/src/modes/theme/defaults/dark-terminal.json +95 -0
- package/src/modes/theme/defaults/dark-tokyo-night.json +101 -0
- package/src/modes/theme/defaults/dark-tundra.json +91 -0
- package/src/modes/theme/defaults/dark-twilight.json +91 -0
- package/src/modes/theme/defaults/dark-volcanic.json +91 -0
- package/src/modes/theme/defaults/graphite.json +92 -0
- package/src/modes/theme/defaults/index.ts +199 -0
- package/src/modes/theme/defaults/light-arctic.json +107 -0
- package/src/modes/theme/defaults/light-aurora-day.json +91 -0
- package/src/modes/theme/defaults/light-canyon.json +91 -0
- package/src/modes/theme/defaults/light-catppuccin.json +106 -0
- package/src/modes/theme/defaults/light-cirrus.json +90 -0
- package/src/modes/theme/defaults/light-coral.json +95 -0
- package/src/modes/theme/defaults/light-cyberpunk.json +96 -0
- package/src/modes/theme/defaults/light-dawn.json +90 -0
- package/src/modes/theme/defaults/light-dunes.json +91 -0
- package/src/modes/theme/defaults/light-eucalyptus.json +95 -0
- package/src/modes/theme/defaults/light-forest.json +100 -0
- package/src/modes/theme/defaults/light-frost.json +95 -0
- package/src/modes/theme/defaults/light-github.json +115 -0
- package/src/modes/theme/defaults/light-glacier.json +91 -0
- package/src/modes/theme/defaults/light-gruvbox.json +108 -0
- package/src/modes/theme/defaults/light-haze.json +90 -0
- package/src/modes/theme/defaults/light-honeycomb.json +95 -0
- package/src/modes/theme/defaults/light-lagoon.json +91 -0
- package/src/modes/theme/defaults/light-lavender.json +95 -0
- package/src/modes/theme/defaults/light-meadow.json +91 -0
- package/src/modes/theme/defaults/light-mint.json +95 -0
- package/src/modes/theme/defaults/light-monochrome.json +101 -0
- package/src/modes/theme/defaults/light-ocean.json +99 -0
- package/src/modes/theme/defaults/light-one.json +99 -0
- package/src/modes/theme/defaults/light-opal.json +91 -0
- package/src/modes/theme/defaults/light-orchard.json +91 -0
- package/src/modes/theme/defaults/light-paper.json +95 -0
- package/src/modes/theme/defaults/light-poimandres.json +142 -0
- package/src/modes/theme/defaults/light-prism.json +90 -0
- package/src/modes/theme/defaults/light-retro.json +98 -0
- package/src/modes/theme/defaults/light-sand.json +95 -0
- package/src/modes/theme/defaults/light-savanna.json +91 -0
- package/src/modes/theme/defaults/light-solarized.json +102 -0
- package/src/modes/theme/defaults/light-soleil.json +90 -0
- package/src/modes/theme/defaults/light-sunset.json +99 -0
- package/src/modes/theme/defaults/light-synthwave.json +98 -0
- package/src/modes/theme/defaults/light-tokyo-night.json +111 -0
- package/src/modes/theme/defaults/light-wetland.json +91 -0
- package/src/modes/theme/defaults/light-zenith.json +89 -0
- package/src/modes/theme/defaults/limestone.json +94 -0
- package/src/modes/theme/defaults/mahogany.json +97 -0
- package/src/modes/theme/defaults/marble.json +93 -0
- package/src/modes/theme/defaults/obsidian.json +91 -0
- package/src/modes/theme/defaults/onyx.json +91 -0
- package/src/modes/theme/defaults/pearl.json +93 -0
- package/src/modes/theme/defaults/porcelain.json +91 -0
- package/src/modes/theme/defaults/quartz.json +96 -0
- package/src/modes/theme/defaults/sandstone.json +95 -0
- package/src/modes/theme/defaults/titanium.json +90 -0
- package/src/modes/theme/light.json +93 -0
- package/src/modes/theme/mermaid-cache.ts +29 -0
- package/src/modes/theme/shimmer.ts +235 -0
- package/src/modes/theme/theme-schema.json +459 -0
- package/src/modes/theme/theme.ts +2676 -0
- package/src/modes/turn-budget.ts +31 -0
- package/src/modes/types.ts +359 -0
- package/src/modes/ultrathink.ts +41 -0
- package/src/modes/utils/context-usage.ts +339 -0
- package/src/modes/utils/copy-targets.ts +360 -0
- package/src/modes/utils/hotkeys-markdown.ts +61 -0
- package/src/modes/utils/keybinding-matchers.ts +51 -0
- package/src/modes/utils/tools-markdown.ts +27 -0
- package/src/modes/utils/ui-helpers.ts +801 -0
- package/src/modes/workflow.ts +42 -0
- package/src/plan-mode/approved-plan.ts +186 -0
- package/src/plan-mode/plan-handoff.ts +37 -0
- package/src/plan-mode/plan-protection.ts +31 -0
- package/src/plan-mode/state.ts +6 -0
- package/src/priority.json +41 -0
- package/src/prompts/agents/designer.md +66 -0
- package/src/prompts/agents/explore.md +58 -0
- package/src/prompts/agents/frontmatter.md +11 -0
- package/src/prompts/agents/init.md +33 -0
- package/src/prompts/agents/librarian.md +119 -0
- package/src/prompts/agents/oracle.md +55 -0
- package/src/prompts/agents/plan.md +48 -0
- package/src/prompts/agents/reviewer.md +140 -0
- package/src/prompts/agents/task.md +16 -0
- package/src/prompts/ci-green-request.md +36 -0
- package/src/prompts/dry-balance-bench.md +8 -0
- package/src/prompts/goals/goal-budget-limit.md +16 -0
- package/src/prompts/goals/goal-continuation.md +28 -0
- package/src/prompts/goals/goal-mode-active.md +23 -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-custom-request.md +22 -0
- package/src/prompts/review-headless-request.md +16 -0
- package/src/prompts/review-request.md +69 -0
- package/src/prompts/steering/user-interjection.md +10 -0
- package/src/prompts/system/agent-creation-architect.md +50 -0
- package/src/prompts/system/agent-creation-user.md +6 -0
- package/src/prompts/system/auto-continue.md +1 -0
- package/src/prompts/system/auto-thinking-difficulty-local.md +14 -0
- package/src/prompts/system/auto-thinking-difficulty.md +12 -0
- package/src/prompts/system/background-tan-dispatch.md +8 -0
- package/src/prompts/system/btw-user.md +8 -0
- package/src/prompts/system/commit-message-system.md +14 -0
- package/src/prompts/system/custom-system-prompt.md +64 -0
- package/src/prompts/system/eager-todo.md +13 -0
- package/src/prompts/system/empty-stop-retry.md +6 -0
- package/src/prompts/system/irc-incoming.md +7 -0
- package/src/prompts/system/manual-continue.md +7 -0
- package/src/prompts/system/memory-consolidation-system.md +8 -0
- package/src/prompts/system/memory-extraction-system.md +26 -0
- package/src/prompts/system/omfg-user.md +50 -0
- package/src/prompts/system/orchestrate-notice.md +40 -0
- package/src/prompts/system/plan-mode-active.md +109 -0
- package/src/prompts/system/plan-mode-approved.md +25 -0
- package/src/prompts/system/plan-mode-compact-instructions.md +16 -0
- package/src/prompts/system/plan-mode-reference.md +11 -0
- package/src/prompts/system/plan-mode-subagent.md +33 -0
- package/src/prompts/system/plan-mode-tool-decision-reminder.md +9 -0
- package/src/prompts/system/project-prompt.md +52 -0
- package/src/prompts/system/subagent-system-prompt.md +64 -0
- package/src/prompts/system/subagent-user-prompt.md +3 -0
- package/src/prompts/system/subagent-yield-reminder.md +12 -0
- package/src/prompts/system/system-prompt.md +258 -0
- package/src/prompts/system/tiny-title-system.md +8 -0
- package/src/prompts/system/title-system.md +16 -0
- package/src/prompts/system/ttsr-interrupt.md +7 -0
- package/src/prompts/system/ttsr-tool-reminder.md +5 -0
- package/src/prompts/system/ultrathink-notice.md +3 -0
- package/src/prompts/system/web-search.md +25 -0
- package/src/prompts/system/workflow-notice.md +70 -0
- package/src/prompts/tools/apply-patch.md +65 -0
- package/src/prompts/tools/ask.md +30 -0
- package/src/prompts/tools/ast-edit.md +39 -0
- package/src/prompts/tools/ast-grep.md +42 -0
- package/src/prompts/tools/async-result.md +8 -0
- package/src/prompts/tools/bash.md +46 -0
- package/src/prompts/tools/browser.md +73 -0
- package/src/prompts/tools/checkpoint.md +16 -0
- package/src/prompts/tools/debug.md +34 -0
- package/src/prompts/tools/eval.md +92 -0
- package/src/prompts/tools/find.md +36 -0
- package/src/prompts/tools/github.md +21 -0
- package/src/prompts/tools/goal.md +18 -0
- package/src/prompts/tools/image-gen.md +7 -0
- package/src/prompts/tools/inspect-image-system.md +20 -0
- package/src/prompts/tools/inspect-image.md +32 -0
- package/src/prompts/tools/irc.md +59 -0
- package/src/prompts/tools/job.md +19 -0
- package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
- package/src/prompts/tools/lsp.md +42 -0
- package/src/prompts/tools/memory-edit.md +8 -0
- package/src/prompts/tools/patch.md +70 -0
- package/src/prompts/tools/read.md +84 -0
- package/src/prompts/tools/recall.md +5 -0
- package/src/prompts/tools/reflect.md +5 -0
- package/src/prompts/tools/render-mermaid.md +9 -0
- package/src/prompts/tools/replace.md +30 -0
- package/src/prompts/tools/resolve.md +9 -0
- package/src/prompts/tools/retain.md +6 -0
- package/src/prompts/tools/rewind.md +13 -0
- package/src/prompts/tools/search-tool-bm25.md +32 -0
- package/src/prompts/tools/search.md +24 -0
- package/src/prompts/tools/ssh.md +31 -0
- package/src/prompts/tools/task-summary.md +17 -0
- package/src/prompts/tools/task.md +88 -0
- package/src/prompts/tools/todo.md +62 -0
- package/src/prompts/tools/web-search.md +10 -0
- package/src/prompts/tools/write.md +14 -0
- package/src/registry/agent-lifecycle.ts +218 -0
- package/src/registry/agent-registry.ts +151 -0
- package/src/sdk.ts +2558 -0
- package/src/secrets/index.ts +123 -0
- package/src/secrets/obfuscator.ts +298 -0
- package/src/secrets/regex.ts +21 -0
- package/src/session/agent-session.ts +10121 -0
- package/src/session/agent-storage.ts +455 -0
- package/src/session/artifacts.ts +135 -0
- package/src/session/auth-broker-config.ts +131 -0
- package/src/session/auth-storage.ts +29 -0
- package/src/session/blob-store.ts +255 -0
- package/src/session/client-bridge.ts +85 -0
- package/src/session/history-storage.ts +348 -0
- package/src/session/indexed-session-storage.ts +430 -0
- package/src/session/messages.ts +541 -0
- package/src/session/redis-session-storage.ts +170 -0
- package/src/session/session-dump-format.ts +209 -0
- package/src/session/session-history-format.ts +246 -0
- package/src/session/session-manager.ts +3676 -0
- package/src/session/session-storage.ts +529 -0
- package/src/session/shake-types.ts +43 -0
- package/src/session/sql-session-storage.ts +314 -0
- package/src/session/streaming-output.ts +1330 -0
- package/src/session/tool-choice-queue.ts +213 -0
- package/src/session/yield-queue.ts +173 -0
- package/src/slash-commands/acp-builtins.ts +70 -0
- package/src/slash-commands/builtin-registry.ts +1798 -0
- package/src/slash-commands/helpers/context-report.ts +39 -0
- package/src/slash-commands/helpers/format.ts +46 -0
- package/src/slash-commands/helpers/marketplace-manager.ts +25 -0
- package/src/slash-commands/helpers/mcp.ts +532 -0
- package/src/slash-commands/helpers/parse.ts +85 -0
- package/src/slash-commands/helpers/ssh.ts +195 -0
- package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
- package/src/slash-commands/helpers/todo.ts +279 -0
- package/src/slash-commands/helpers/usage-report.ts +95 -0
- package/src/slash-commands/marketplace-install-parser.ts +99 -0
- package/src/slash-commands/types.ts +135 -0
- package/src/ssh/config-writer.ts +183 -0
- package/src/ssh/connection-manager.ts +509 -0
- package/src/ssh/ssh-executor.ts +189 -0
- package/src/ssh/sshfs-mount.ts +140 -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/stubs/natives/index.ts +814 -0
- package/src/stubs/natives/package.json +7 -0
- package/src/stubs/tui/index.ts +282 -0
- package/src/stubs/tui/package.json +7 -0
- package/src/system-prompt.ts +611 -0
- package/src/task/agents.ts +167 -0
- package/src/task/commands.ts +132 -0
- package/src/task/discovery.ts +122 -0
- package/src/task/executor.ts +2133 -0
- package/src/task/index.ts +1419 -0
- package/src/task/name-generator.ts +1577 -0
- package/src/task/omp-command.ts +26 -0
- package/src/task/output-manager.ts +88 -0
- package/src/task/parallel.ts +116 -0
- package/src/task/render.ts +1381 -0
- package/src/task/repair-args.ts +129 -0
- package/src/task/subprocess-tool-registry.ts +88 -0
- package/src/task/types.ts +336 -0
- package/src/task/worktree.ts +514 -0
- package/src/telemetry-export.ts +144 -0
- package/src/thinking.ts +167 -0
- package/src/tiny/compiled-runtime.ts +179 -0
- package/src/tiny/device.ts +111 -0
- package/src/tiny/dtype.ts +101 -0
- package/src/tiny/models.ts +242 -0
- package/src/tiny/text.ts +165 -0
- package/src/tiny/title-client.ts +543 -0
- package/src/tiny/title-protocol.ts +56 -0
- package/src/tiny/worker.ts +568 -0
- package/src/tool-discovery/mode.ts +24 -0
- package/src/tool-discovery/tool-index.ts +256 -0
- package/src/tools/approval.ts +189 -0
- package/src/tools/archive-reader.ts +721 -0
- package/src/tools/ask.ts +928 -0
- package/src/tools/ast-edit.ts +642 -0
- package/src/tools/ast-grep.ts +452 -0
- package/src/tools/auto-generated-guard.ts +322 -0
- package/src/tools/bash-command-fixup.ts +37 -0
- package/src/tools/bash-interactive.ts +408 -0
- package/src/tools/bash-interceptor.ts +67 -0
- package/src/tools/bash-pty-selection.ts +14 -0
- package/src/tools/bash-skill-urls.ts +248 -0
- package/src/tools/bash.ts +1386 -0
- package/src/tools/browser/attach.ts +175 -0
- package/src/tools/browser/launch.ts +660 -0
- package/src/tools/browser/readable.ts +112 -0
- package/src/tools/browser/registry.ts +197 -0
- package/src/tools/browser/render.ts +216 -0
- package/src/tools/browser/tab-protocol.ts +105 -0
- package/src/tools/browser/tab-supervisor.ts +628 -0
- package/src/tools/browser/tab-worker-entry.ts +21 -0
- package/src/tools/browser/tab-worker.ts +1226 -0
- package/src/tools/browser.ts +343 -0
- package/src/tools/checkpoint.ts +136 -0
- package/src/tools/conflict-detect.ts +718 -0
- package/src/tools/context.ts +39 -0
- package/src/tools/debug.ts +1067 -0
- package/src/tools/eval-backends.ts +27 -0
- package/src/tools/eval-render.ts +752 -0
- package/src/tools/eval.ts +577 -0
- package/src/tools/fetch.ts +1926 -0
- package/src/tools/file-recorder.ts +35 -0
- package/src/tools/find.ts +609 -0
- package/src/tools/fs-cache-invalidation.ts +28 -0
- package/src/tools/gh-cache-invalidation.ts +255 -0
- package/src/tools/gh-format.ts +12 -0
- package/src/tools/gh-renderer.ts +481 -0
- package/src/tools/gh.ts +3720 -0
- package/src/tools/github-cache.ts +637 -0
- package/src/tools/grouped-file-output.ts +210 -0
- package/src/tools/image-gen.ts +1517 -0
- package/src/tools/index.ts +599 -0
- package/src/tools/inspect-image-renderer.ts +132 -0
- package/src/tools/inspect-image.ts +174 -0
- package/src/tools/irc.ts +723 -0
- package/src/tools/job.ts +557 -0
- package/src/tools/json-tree.ts +243 -0
- package/src/tools/jtd-to-json-schema.ts +219 -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/match-line-format.ts +20 -0
- package/src/tools/memory-edit.ts +59 -0
- package/src/tools/memory-recall.ts +100 -0
- package/src/tools/memory-reflect.ts +88 -0
- package/src/tools/memory-render.ts +202 -0
- package/src/tools/memory-retain.ts +91 -0
- package/src/tools/output-meta.ts +754 -0
- package/src/tools/output-schema-validator.ts +132 -0
- package/src/tools/path-utils.ts +1054 -0
- package/src/tools/plan-mode-guard.ts +108 -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/read.ts +2929 -0
- package/src/tools/render-mermaid.ts +69 -0
- package/src/tools/render-utils.ts +838 -0
- package/src/tools/renderers.ts +77 -0
- package/src/tools/report-tool-issue.ts +534 -0
- package/src/tools/resolve.ts +276 -0
- package/src/tools/review.ts +253 -0
- package/src/tools/search-tool-bm25.ts +351 -0
- package/src/tools/search.ts +1580 -0
- package/src/tools/sqlite-reader.ts +828 -0
- package/src/tools/ssh.ts +349 -0
- package/src/tools/todo.ts +982 -0
- package/src/tools/tool-errors.ts +62 -0
- package/src/tools/tool-result.ts +94 -0
- package/src/tools/tool-timeouts.ts +30 -0
- package/src/tools/tts.ts +133 -0
- package/src/tools/write.ts +1217 -0
- package/src/tools/yield.ts +269 -0
- package/src/tui/code-cell.ts +216 -0
- package/src/tui/file-list.ts +55 -0
- package/src/tui/hyperlink.ts +175 -0
- package/src/tui/index.ts +12 -0
- package/src/tui/output-block.ts +240 -0
- package/src/tui/status-line.ts +54 -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/block-context.ts +312 -0
- package/src/utils/changelog.ts +132 -0
- package/src/utils/clipboard.ts +193 -0
- package/src/utils/command-args.ts +76 -0
- package/src/utils/commit-message-generator.ts +151 -0
- package/src/utils/edit-mode.ts +41 -0
- package/src/utils/enhanced-paste.ts +230 -0
- package/src/utils/event-bus.ts +33 -0
- package/src/utils/external-editor.ts +65 -0
- package/src/utils/file-display-mode.ts +45 -0
- package/src/utils/file-mentions.ts +281 -0
- package/src/utils/git.ts +1833 -0
- package/src/utils/image-loading.ts +132 -0
- package/src/utils/image-resize.ts +309 -0
- package/src/utils/jj.ts +248 -0
- package/src/utils/lang-from-path.ts +239 -0
- package/src/utils/markit.ts +89 -0
- package/src/utils/open.ts +55 -0
- package/src/utils/session-color.ts +68 -0
- package/src/utils/shell-snapshot.ts +187 -0
- package/src/utils/sixel.ts +69 -0
- package/src/utils/title-generator.ts +373 -0
- package/src/utils/tool-choice.ts +33 -0
- package/src/utils/tools-manager.ts +363 -0
- package/src/web/kagi.ts +305 -0
- package/src/web/parallel.ts +353 -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 +97 -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 +704 -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 +173 -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 +189 -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 +94 -0
- package/src/web/scrapers/types.ts +397 -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 +325 -0
- package/src/web/search/index.ts +292 -0
- package/src/web/search/provider.ts +157 -0
- package/src/web/search/providers/anthropic.ts +318 -0
- package/src/web/search/providers/base.ts +89 -0
- package/src/web/search/providers/brave.ts +152 -0
- package/src/web/search/providers/codex.ts +591 -0
- package/src/web/search/providers/exa.ts +400 -0
- package/src/web/search/providers/gemini.ts +460 -0
- package/src/web/search/providers/jina.ts +111 -0
- package/src/web/search/providers/kagi.ts +86 -0
- package/src/web/search/providers/kimi.ts +196 -0
- package/src/web/search/providers/parallel.ts +225 -0
- package/src/web/search/providers/perplexity.ts +730 -0
- package/src/web/search/providers/searxng.ts +313 -0
- package/src/web/search/providers/synthetic.ts +114 -0
- package/src/web/search/providers/tavily.ts +176 -0
- package/src/web/search/providers/utils.ts +128 -0
- package/src/web/search/providers/zai.ts +333 -0
- package/src/web/search/render.ts +262 -0
- package/src/web/search/types.ts +482 -0
- package/src/web/search/utils.ts +17 -0
- package/src/workspace-tree.ts +286 -0
package/src/cli.ts
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
// Strip macOS malloc-stack-logging vars in the parent entrypoint, before any
|
|
3
|
+
// subprocess/worker spawn. libmalloc reads MallocStackLogging /
|
|
4
|
+
// MallocStackLoggingNoCompact during malloc bootstrap (pre-main) in every child
|
|
5
|
+
// and warns when they're present but set to "off"; a child cannot suppress its
|
|
6
|
+
// own warning, so the only fix is to keep them out of the inherited env here.
|
|
7
|
+
// (They must be unset, not set — presence is the trigger.)
|
|
8
|
+
try {
|
|
9
|
+
delete process.env.MallocStackLogging;
|
|
10
|
+
delete process.env.MallocStackLoggingNoCompact;
|
|
11
|
+
} catch {}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* CLI entry point — registers all commands explicitly and delegates to the
|
|
15
|
+
* lightweight CLI runner from pi-utils.
|
|
16
|
+
*/
|
|
17
|
+
import type { CliConfig } from "@oh-my-pi/pi-utils/cli";
|
|
18
|
+
import { APP_NAME, MIN_BUN_VERSION, VERSION } from "@oh-my-pi/pi-utils/dirs";
|
|
19
|
+
import { declareWorkerHostEntry } from "@oh-my-pi/pi-utils/env";
|
|
20
|
+
|
|
21
|
+
if (Bun.semver.order(Bun.version, MIN_BUN_VERSION) < 0) {
|
|
22
|
+
process.stderr.write(
|
|
23
|
+
`error: Bun runtime must be >= ${MIN_BUN_VERSION} (found v${Bun.version}). Please upgrade: bun upgrade\n`,
|
|
24
|
+
);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
process.title = APP_NAME;
|
|
29
|
+
|
|
30
|
+
// Declare this module as the worker-host entry: Worker threads and worker
|
|
31
|
+
// subprocesses re-enter `Bun.main` with a hidden argv selector instead of
|
|
32
|
+
// loading separate worker entrypoints (single-entry contract across source,
|
|
33
|
+
// npm bundle, and compiled binary).
|
|
34
|
+
declareWorkerHostEntry();
|
|
35
|
+
|
|
36
|
+
async function showHelp(config: CliConfig): Promise<void> {
|
|
37
|
+
const { renderRootHelp } = await import("@oh-my-pi/pi-utils/cli");
|
|
38
|
+
const { getExtraHelpText } = await import("./cli/args");
|
|
39
|
+
renderRootHelp(config);
|
|
40
|
+
const extra = getExtraHelpText();
|
|
41
|
+
if (extra.trim().length > 0) {
|
|
42
|
+
process.stdout.write(`\n${extra}\n`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Smoke-test entry. Spawns bundled workers, serves the stats dashboard once,
|
|
47
|
+
* pings everything, then exits.
|
|
48
|
+
*
|
|
49
|
+
* Purpose: catch the silent worker-load and bundled-asset regressions that hit
|
|
50
|
+
* compiled binaries and the npm CLI bundle. Version/help paths do not spawn
|
|
51
|
+
* worker modules or serve dashboard assets on a fresh install, so this probe is
|
|
52
|
+
* the minimal end-to-end test that proves those distribution-only paths work.
|
|
53
|
+
* Wired into `scripts/install-tests/run-ci.sh` so binary / source-link /
|
|
54
|
+
* tarball installs all exercise it on every CI run.
|
|
55
|
+
*/
|
|
56
|
+
async function runSmokeTest(): Promise<void> {
|
|
57
|
+
const { smokeTestSyncWorker, startServer } = await import("@oh-my-pi/omp-stats");
|
|
58
|
+
const { smokeTestTinyTitleWorker } = await import("./tiny/title-client");
|
|
59
|
+
await smokeTestSyncWorker();
|
|
60
|
+
|
|
61
|
+
const statsServer = await startServer(0);
|
|
62
|
+
try {
|
|
63
|
+
const response = await fetch(`http://127.0.0.1:${statsServer.port}/`);
|
|
64
|
+
if (!response.ok) throw new Error(`stats dashboard smoke failed: HTTP ${response.status}`);
|
|
65
|
+
const html = await response.text();
|
|
66
|
+
if (!html.includes('<div id="root"></div>') || !html.includes("index.js")) {
|
|
67
|
+
throw new Error("stats dashboard smoke failed: dashboard HTML was not served");
|
|
68
|
+
}
|
|
69
|
+
} finally {
|
|
70
|
+
statsServer.stop();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
await smokeTestTinyTitleWorker();
|
|
74
|
+
process.stdout.write("smoke-test: ok\n");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const TINY_WORKER_ARGS = new Set(["--tiny-worker", "__tiny_worker"]);
|
|
78
|
+
const STATS_SYNC_WORKER_ARG = "__omp_stats_sync_worker";
|
|
79
|
+
const TAB_WORKER_ARG = "__omp_tab_worker";
|
|
80
|
+
const JS_EVAL_WORKER_ARG = "__omp_js_eval_worker";
|
|
81
|
+
|
|
82
|
+
async function runWorkerEntrypoint(arg: string | undefined): Promise<boolean> {
|
|
83
|
+
if (arg === STATS_SYNC_WORKER_ARG) {
|
|
84
|
+
// The sync worker handles messages via `self.onmessage`, assigned during
|
|
85
|
+
// this *async* dynamic import. Bun flushes the worker's initial message
|
|
86
|
+
// buffer when the entry module's top-level evaluation finishes — before
|
|
87
|
+
// this dispatch completes — so anything the parent posted right after
|
|
88
|
+
// spawning (the smoke ping, the first parse request) would be dropped.
|
|
89
|
+
// Park early events and replay them once the module's handler is live.
|
|
90
|
+
// (The tab/eval workers are immune: `parentPort.on("message")` queues
|
|
91
|
+
// until a listener attaches.)
|
|
92
|
+
const scope = globalThis as unknown as { onmessage: ((event: MessageEvent) => void) | null };
|
|
93
|
+
const pending: MessageEvent[] = [];
|
|
94
|
+
const buffer = (event: MessageEvent): void => {
|
|
95
|
+
pending.push(event);
|
|
96
|
+
};
|
|
97
|
+
scope.onmessage = buffer;
|
|
98
|
+
await import("@oh-my-pi/omp-stats/sync-worker");
|
|
99
|
+
const handler = scope.onmessage;
|
|
100
|
+
if (handler && handler !== buffer) {
|
|
101
|
+
for (const event of pending) handler.call(scope, event);
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
if (arg === TAB_WORKER_ARG) {
|
|
106
|
+
await import("./tools/browser/tab-worker-entry");
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
if (arg === JS_EVAL_WORKER_ARG) {
|
|
110
|
+
await import("./eval/js/worker-entry");
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Hidden subcommand that boots the tiny-model worker inside this process
|
|
118
|
+
* over the parent's IPC channel. The agent's main process spawns the same
|
|
119
|
+
* binary with this flag so `onnxruntime-node` (loaded transitively by
|
|
120
|
+
* `@huggingface/transformers`) lives in a child address space. The parent
|
|
121
|
+
* `SIGKILL`s the child on shutdown so the NAPI finalizer never runs in
|
|
122
|
+
* either process — that finalizer segfaults Bun on Windows (issue #1606).
|
|
123
|
+
*/
|
|
124
|
+
async function runTinyWorker(): Promise<void> {
|
|
125
|
+
const { startTinyTitleWorker } = await import("./tiny/worker");
|
|
126
|
+
const { promise: shuttingDown, resolve: shutdown } = Promise.withResolvers<void>();
|
|
127
|
+
const send = (message: unknown): void => {
|
|
128
|
+
// `process.send` only exists when spawned with an IPC channel; the
|
|
129
|
+
// parent always spawns us that way. If it's missing, the parent
|
|
130
|
+
// vanished and there's no one to talk to.
|
|
131
|
+
const sender = (process as NodeJS.Process & { send?: (m: unknown) => boolean }).send;
|
|
132
|
+
if (!sender) {
|
|
133
|
+
shutdown();
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
sender.call(process, message);
|
|
138
|
+
} catch {
|
|
139
|
+
shutdown();
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
startTinyTitleWorker({
|
|
143
|
+
send,
|
|
144
|
+
onMessage(handler) {
|
|
145
|
+
const wrap = (data: unknown): void => handler(data as never);
|
|
146
|
+
process.on("message", wrap);
|
|
147
|
+
return () => {
|
|
148
|
+
process.off("message", wrap);
|
|
149
|
+
};
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
const keepalive = setInterval(() => {}, 2 ** 30);
|
|
153
|
+
// Parent went away (crashed, SIGKILL, etc.) — commit suicide so we don't
|
|
154
|
+
// linger as an orphan. SIGKILL via `process.kill` keeps us symmetrical
|
|
155
|
+
// with the parent's hard-kill on shutdown: skip every JS/native finalizer.
|
|
156
|
+
process.on("disconnect", () => shutdown());
|
|
157
|
+
try {
|
|
158
|
+
await shuttingDown;
|
|
159
|
+
} finally {
|
|
160
|
+
clearInterval(keepalive);
|
|
161
|
+
}
|
|
162
|
+
process.kill(process.pid, "SIGKILL");
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** Run the CLI with the given argv (no `process.argv` prefix). */
|
|
166
|
+
export async function runCli(argv: string[]): Promise<void> {
|
|
167
|
+
if (argv[0] === "--smoke-test") {
|
|
168
|
+
await runSmokeTest();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (TINY_WORKER_ARGS.has(argv[0] ?? "")) {
|
|
172
|
+
await runTinyWorker();
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (await runWorkerEntrypoint(argv[0])) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const [{ run }, { commands, resolveCliArgv }] = await Promise.all([
|
|
179
|
+
import("@oh-my-pi/pi-utils/cli"),
|
|
180
|
+
import("./cli-commands"),
|
|
181
|
+
]);
|
|
182
|
+
// --help and --version are handled by run() directly, don't rewrite those.
|
|
183
|
+
// Everything else that isn't a known subcommand routes to "launch".
|
|
184
|
+
const resolved = resolveCliArgv(argv);
|
|
185
|
+
if ("error" in resolved) {
|
|
186
|
+
process.stderr.write(`error: ${resolved.error}\n`);
|
|
187
|
+
process.exitCode = 1;
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
return run({ bin: APP_NAME, version: VERSION, argv: resolved.argv, commands, help: showHelp });
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Floating call instead of top-level await: TLA forces `--bytecode` (CJS
|
|
194
|
+
// lowering) builds to fail, and the entrypoint needs nothing after this.
|
|
195
|
+
// The catch mirrors what an unhandled TLA rejection produced: error dump to
|
|
196
|
+
// stderr, exit code 1. Success paths resolve without touching the exit code.
|
|
197
|
+
runCli(process.argv.slice(2)).catch((err: unknown) => {
|
|
198
|
+
process.stderr.write(`${Bun.inspect(err, { colors: process.stderr.isTTY === true })}\n`);
|
|
199
|
+
process.exit(1);
|
|
200
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Oh My Pi as an ACP (Agent Client Protocol) server over stdio.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around the launch flow that forces `mode: "acp"` unless the
|
|
5
|
+
* ACP terminal-auth flag asks the same command to open the interactive TUI.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from "@oh-my-pi/pi-utils/cli";
|
|
8
|
+
import { parseArgs } from "../cli/args";
|
|
9
|
+
import { runRootCommand } from "../main";
|
|
10
|
+
import { prepareAcpTerminalAuthArgs } from "../modes/acp/terminal-auth";
|
|
11
|
+
|
|
12
|
+
export default class Acp extends Command {
|
|
13
|
+
static description = "Run Oh My Pi as an ACP (Agent Client Protocol) server over stdio";
|
|
14
|
+
static strict = false;
|
|
15
|
+
|
|
16
|
+
async run(): Promise<void> {
|
|
17
|
+
const { args, terminalAuth } = prepareAcpTerminalAuthArgs(this.argv);
|
|
18
|
+
const parsed = parseArgs(args);
|
|
19
|
+
if (!terminalAuth) {
|
|
20
|
+
parsed.mode = "acp";
|
|
21
|
+
}
|
|
22
|
+
await runRootCommand(parsed, args);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manage bundled task agents.
|
|
3
|
+
*/
|
|
4
|
+
import { Args, Command, Flags, renderCommandHelp } from "@oh-my-pi/pi-utils/cli";
|
|
5
|
+
import { type AgentsAction, type AgentsCommandArgs, runAgentsCommand } from "../cli/agents-cli";
|
|
6
|
+
import { initTheme } from "../modes/theme/theme";
|
|
7
|
+
|
|
8
|
+
const ACTIONS: AgentsAction[] = ["unpack"];
|
|
9
|
+
|
|
10
|
+
export default class Agents extends Command {
|
|
11
|
+
static description = "Manage bundled task agents";
|
|
12
|
+
|
|
13
|
+
static args = {
|
|
14
|
+
action: Args.string({
|
|
15
|
+
description: "Agents action",
|
|
16
|
+
required: false,
|
|
17
|
+
options: ACTIONS,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
static flags = {
|
|
22
|
+
force: Flags.boolean({ char: "f", description: "Overwrite existing agent files" }),
|
|
23
|
+
json: Flags.boolean({ description: "Output JSON" }),
|
|
24
|
+
dir: Flags.string({ description: "Output directory (overrides --user/--project)" }),
|
|
25
|
+
user: Flags.boolean({ description: "Write to ~/.omp/agent/agents (default)" }),
|
|
26
|
+
project: Flags.boolean({ description: "Write to ./.omp/agents" }),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
static examples = [
|
|
30
|
+
"# Export bundled agents into user config (default)\n omp agents unpack",
|
|
31
|
+
"# Export bundled agents into project config\n omp agents unpack --project",
|
|
32
|
+
"# Overwrite existing local agent files\n omp agents unpack --project --force",
|
|
33
|
+
"# Export into a custom directory\n omp agents unpack --dir ./tmp/agents --json",
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
async run(): Promise<void> {
|
|
37
|
+
const { args, flags } = await this.parse(Agents);
|
|
38
|
+
if (!args.action) {
|
|
39
|
+
renderCommandHelp("omp", "agents", Agents);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const cmd: AgentsCommandArgs = {
|
|
44
|
+
action: args.action as AgentsAction,
|
|
45
|
+
flags: {
|
|
46
|
+
force: flags.force,
|
|
47
|
+
json: flags.json,
|
|
48
|
+
dir: flags.dir,
|
|
49
|
+
user: flags.user,
|
|
50
|
+
project: flags.project,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
await initTheme();
|
|
55
|
+
await runAgentsCommand(cmd);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `omp auth-broker` — manage the omp credential vault.
|
|
3
|
+
*/
|
|
4
|
+
import { Args, Command, Flags, renderCommandHelp } from "@oh-my-pi/pi-utils/cli";
|
|
5
|
+
import {
|
|
6
|
+
AUTH_BROKER_ACTIONS,
|
|
7
|
+
type AuthBrokerAction,
|
|
8
|
+
type AuthBrokerCommandArgs,
|
|
9
|
+
runAuthBrokerCommand,
|
|
10
|
+
} from "../cli/auth-broker-cli";
|
|
11
|
+
import { initTheme } from "../modes/theme/theme";
|
|
12
|
+
|
|
13
|
+
export default class AuthBroker extends Command {
|
|
14
|
+
static description = "Manage the omp auth-broker (credential vault)";
|
|
15
|
+
|
|
16
|
+
static args = {
|
|
17
|
+
action: Args.string({
|
|
18
|
+
description: "Sub-command",
|
|
19
|
+
required: false,
|
|
20
|
+
options: [...AUTH_BROKER_ACTIONS],
|
|
21
|
+
}),
|
|
22
|
+
// Second positional: provider id (login/logout) or filesystem path (import).
|
|
23
|
+
source: Args.string({
|
|
24
|
+
description: "OAuth provider id (login/logout) or path (import)",
|
|
25
|
+
required: false,
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
static flags = {
|
|
30
|
+
json: Flags.boolean({ description: "Output JSON" }),
|
|
31
|
+
bind: Flags.string({ description: "Bind address for `serve` (host:port)", char: "b" }),
|
|
32
|
+
regenerate: Flags.boolean({ description: "Regenerate the bearer token" }),
|
|
33
|
+
via: Flags.string({
|
|
34
|
+
description: "SSH user@host for remote login (login --via=user@host)",
|
|
35
|
+
}),
|
|
36
|
+
provider: Flags.string({
|
|
37
|
+
description: "Override provider id for `import` (e.g. when JSON `type` is unrecognized)",
|
|
38
|
+
}),
|
|
39
|
+
"include-disabled": Flags.boolean({
|
|
40
|
+
description: "Import credentials whose JSON has `disabled: true` (import)",
|
|
41
|
+
}),
|
|
42
|
+
"from-local": Flags.boolean({
|
|
43
|
+
description: "migrate source: local SQLite + env vars (required for `migrate`)",
|
|
44
|
+
}),
|
|
45
|
+
"include-env": Flags.boolean({
|
|
46
|
+
description: "Capture env-var API keys for providers not yet on broker (migrate)",
|
|
47
|
+
}),
|
|
48
|
+
"include-oauth": Flags.boolean({
|
|
49
|
+
description: "Also upload OAuth from local SQLite during migrate (default skips them)",
|
|
50
|
+
}),
|
|
51
|
+
"dry-run": Flags.boolean({ description: "Print actions without executing (import / login --via / migrate)" }),
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
static examples = [
|
|
55
|
+
"# Boot the broker against the local SQLite store\n omp auth-broker serve",
|
|
56
|
+
"# Boot on a non-default port\n omp auth-broker serve --bind=127.0.0.1:9000",
|
|
57
|
+
"# Print the bearer token\n omp auth-broker token",
|
|
58
|
+
"# Rotate the bearer token\n omp auth-broker token --regenerate",
|
|
59
|
+
"# List supported OAuth providers\n omp auth-broker list",
|
|
60
|
+
"# Local login (run on the broker host)\n omp auth-broker login anthropic",
|
|
61
|
+
"# Interactive provider selection\n omp auth-broker login",
|
|
62
|
+
"# Remote login over SSH tunnel\n omp auth-broker login anthropic --via=user@broker",
|
|
63
|
+
"# Log out of a provider (interactive without provider arg)\n omp auth-broker logout anthropic",
|
|
64
|
+
"# Import a CLIProxyAPI auth dump\n omp auth-broker import ~/.cliproxy/auth",
|
|
65
|
+
"# Import a single CLIProxyAPI JSON, overriding the provider mapping\n omp auth-broker import ~/.cliproxy/auth/claude-foo.json --provider anthropic",
|
|
66
|
+
"# Preview a migration from local store + env vars to the configured broker\n omp auth-broker migrate --from-local --include-env --dry-run",
|
|
67
|
+
"# Apply the migration\n omp auth-broker migrate --from-local --include-env",
|
|
68
|
+
"# Health-check the configured remote broker\n omp auth-broker status",
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
async run(): Promise<void> {
|
|
72
|
+
const { args, flags } = await this.parse(AuthBroker);
|
|
73
|
+
if (!args.action) {
|
|
74
|
+
renderCommandHelp("omp", "auth-broker", AuthBroker);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const action = args.action as AuthBrokerAction;
|
|
78
|
+
const cmd: AuthBrokerCommandArgs = {
|
|
79
|
+
action,
|
|
80
|
+
flags: {
|
|
81
|
+
json: flags.json,
|
|
82
|
+
bind: flags.bind,
|
|
83
|
+
regenerate: flags.regenerate,
|
|
84
|
+
via: flags.via,
|
|
85
|
+
// `login`/`logout` reuse the legacy `provider` slot; `import` keeps `source` separate
|
|
86
|
+
// so `provider` flag (used as an override) is unambiguous.
|
|
87
|
+
provider: action === "import" ? flags.provider : (args.source ?? flags.provider),
|
|
88
|
+
source: args.source,
|
|
89
|
+
includeDisabled: flags["include-disabled"],
|
|
90
|
+
fromLocal: flags["from-local"],
|
|
91
|
+
includeEnv: flags["include-env"],
|
|
92
|
+
includeOauth: flags["include-oauth"],
|
|
93
|
+
dryRun: flags["dry-run"],
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
await initTheme();
|
|
97
|
+
await runAuthBrokerCommand(cmd);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `omp auth-gateway` — run a forward proxy that injects auth from the broker.
|
|
3
|
+
*/
|
|
4
|
+
import { Args, Command, Flags, renderCommandHelp } from "@oh-my-pi/pi-utils/cli";
|
|
5
|
+
import {
|
|
6
|
+
AUTH_GATEWAY_ACTIONS,
|
|
7
|
+
type AuthGatewayAction,
|
|
8
|
+
type AuthGatewayCommandArgs,
|
|
9
|
+
runAuthGatewayCommand,
|
|
10
|
+
} from "../cli/auth-gateway-cli";
|
|
11
|
+
import { initTheme } from "../modes/theme/theme";
|
|
12
|
+
|
|
13
|
+
export default class AuthGateway extends Command {
|
|
14
|
+
static description = "Run an auth-gateway forward proxy backed by the configured broker";
|
|
15
|
+
|
|
16
|
+
static args = {
|
|
17
|
+
action: Args.string({
|
|
18
|
+
description: "Sub-command",
|
|
19
|
+
required: false,
|
|
20
|
+
options: [...AUTH_GATEWAY_ACTIONS],
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
static flags = {
|
|
25
|
+
json: Flags.boolean({ description: "Output JSON (token/status/check)" }),
|
|
26
|
+
bind: Flags.string({ description: "Bind address for `serve` (host:port)", char: "b" }),
|
|
27
|
+
regenerate: Flags.boolean({ description: "Regenerate the gateway bearer token (token)" }),
|
|
28
|
+
"no-auth": Flags.boolean({
|
|
29
|
+
description:
|
|
30
|
+
"Disable inbound bearer-token auth (serve). Useful when bound to loopback — any caller is allowed.",
|
|
31
|
+
}),
|
|
32
|
+
strict: Flags.boolean({
|
|
33
|
+
description:
|
|
34
|
+
"For `check`: additionally probe each credential against its provider's chat-completion endpoint. Slower; consumes a tiny amount of quota per credential.",
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
static examples = [
|
|
39
|
+
"# Boot the gateway against the configured broker\n omp auth-gateway serve",
|
|
40
|
+
"# Boot on a non-default port\n omp auth-gateway serve --bind=127.0.0.1:4000",
|
|
41
|
+
"# Print the gateway bearer token (creates one on first run)\n omp auth-gateway token",
|
|
42
|
+
"# Rotate the gateway bearer token\n omp auth-gateway token --regenerate",
|
|
43
|
+
"# Run on loopback without any bearer (anyone on this host can call)\n omp auth-gateway serve --no-auth",
|
|
44
|
+
"# Show local gateway + broker config status\n omp auth-gateway status",
|
|
45
|
+
"# Probe each broker credential to see which one is producing 401s\n omp auth-gateway check",
|
|
46
|
+
"# Same, machine-readable for scripts\n omp auth-gateway check --json",
|
|
47
|
+
"# Strict check — also exercises each credential with a real chat-completion ping\n omp auth-gateway check --strict",
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
async run(): Promise<void> {
|
|
51
|
+
const { args, flags } = await this.parse(AuthGateway);
|
|
52
|
+
if (!args.action) {
|
|
53
|
+
renderCommandHelp("omp", "auth-gateway", AuthGateway);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const cmd: AuthGatewayCommandArgs = {
|
|
57
|
+
action: args.action as AuthGatewayAction,
|
|
58
|
+
flags: {
|
|
59
|
+
json: flags.json,
|
|
60
|
+
bind: flags.bind,
|
|
61
|
+
regenerate: flags.regenerate,
|
|
62
|
+
noAuth: flags["no-auth"],
|
|
63
|
+
strict: flags.strict,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
await initTheme();
|
|
67
|
+
await runAuthGatewayCommand(cmd);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate and optionally push a commit with changelog updates.
|
|
3
|
+
*/
|
|
4
|
+
import { postmortem } from "@oh-my-pi/pi-utils";
|
|
5
|
+
import { Command, Flags } from "@oh-my-pi/pi-utils/cli";
|
|
6
|
+
import { runCommitCommand } from "../commit";
|
|
7
|
+
import type { CommitCommandArgs } from "../commit/types";
|
|
8
|
+
import { initTheme } from "../modes/theme/theme";
|
|
9
|
+
|
|
10
|
+
export default class Commit extends Command {
|
|
11
|
+
static description = "Generate a commit message and update changelogs";
|
|
12
|
+
|
|
13
|
+
static flags = {
|
|
14
|
+
push: Flags.boolean({ description: "Push after committing" }),
|
|
15
|
+
"dry-run": Flags.boolean({ description: "Preview without committing" }),
|
|
16
|
+
"no-changelog": Flags.boolean({ description: "Skip changelog updates" }),
|
|
17
|
+
legacy: Flags.boolean({ description: "Use legacy deterministic pipeline" }),
|
|
18
|
+
context: Flags.string({ char: "c", description: "Additional context for the model" }),
|
|
19
|
+
model: Flags.string({ char: "m", description: "Override model selection" }),
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
async run(): Promise<void> {
|
|
23
|
+
const { flags } = await this.parse(Commit);
|
|
24
|
+
|
|
25
|
+
const cmd: CommitCommandArgs = {
|
|
26
|
+
push: flags.push ?? false,
|
|
27
|
+
dryRun: flags["dry-run"] ?? false,
|
|
28
|
+
noChangelog: flags["no-changelog"] ?? false,
|
|
29
|
+
legacy: flags.legacy,
|
|
30
|
+
context: flags.context,
|
|
31
|
+
model: flags.model,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
await initTheme();
|
|
35
|
+
// The agentic commit flow opens keep-alive sockets to the model provider
|
|
36
|
+
// and spins up an AgentSession with background async-job + extension
|
|
37
|
+
// machinery. `session.dispose()` releases what it can, but Bun's fetch
|
|
38
|
+
// keeps idle connections warm and a few timers (Settings autosave, OAuth
|
|
39
|
+
// refresh) stay armed long enough to pin the event loop after the commit
|
|
40
|
+
// is already written. Mirror the `runPrintMode` exit pattern from
|
|
41
|
+
// `main.ts` so the CLI returns to the shell instead of stranding the user
|
|
42
|
+
// on Ctrl+C (issue #1041).
|
|
43
|
+
await runCommitCommand(cmd);
|
|
44
|
+
await postmortem.quit(0);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `omp __complete <kind> [-- <prefix>]` — dynamic completion candidates.
|
|
3
|
+
*
|
|
4
|
+
* Hidden helper invoked by the generated shell completion scripts to resolve
|
|
5
|
+
* values that can't be baked into the script: the live model catalog and
|
|
6
|
+
* on-disk sessions. Output is one `value\tdescription` line per candidate
|
|
7
|
+
* (tab-separated); shells that show descriptions parse the tab, bash uses the
|
|
8
|
+
* first field. The import surface is kept deliberately narrow so a TAB press
|
|
9
|
+
* doesn't pay for the full agent boot.
|
|
10
|
+
*/
|
|
11
|
+
import { type GeneratedProvider, getBundledModels, getBundledProviders } from "@oh-my-pi/pi-catalog/models";
|
|
12
|
+
import { Command } from "@oh-my-pi/pi-utils/cli";
|
|
13
|
+
import { SessionManager } from "../session/session-manager";
|
|
14
|
+
|
|
15
|
+
export default class Complete extends Command {
|
|
16
|
+
static hidden = true;
|
|
17
|
+
static strict = false;
|
|
18
|
+
|
|
19
|
+
async run(): Promise<void> {
|
|
20
|
+
const argv = this.argv.filter(token => token !== "--");
|
|
21
|
+
const kind = argv[0];
|
|
22
|
+
const prefix = argv.length > 1 ? argv[argv.length - 1] : "";
|
|
23
|
+
if (kind === "models") {
|
|
24
|
+
completeModels(prefix);
|
|
25
|
+
} else if (kind === "sessions") {
|
|
26
|
+
await completeSessions(prefix);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Strip control chars that would corrupt the tab-separated line protocol. */
|
|
32
|
+
function clean(text: string): string {
|
|
33
|
+
return text.replace(/[\t\r\n]+/g, " ").trim();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function completeModels(prefix: string): void {
|
|
37
|
+
const needle = prefix.toLowerCase();
|
|
38
|
+
const seen = new Set<string>();
|
|
39
|
+
const lines: string[] = [];
|
|
40
|
+
for (const provider of getBundledProviders()) {
|
|
41
|
+
for (const model of getBundledModels(provider as GeneratedProvider)) {
|
|
42
|
+
// Offer both the fully-qualified `provider/id` and the bare `id`
|
|
43
|
+
// (matches the fuzzy resolution `--model` accepts).
|
|
44
|
+
const candidates = [`${model.provider}/${model.id}`, model.id];
|
|
45
|
+
for (const candidate of candidates) {
|
|
46
|
+
if (seen.has(candidate)) continue;
|
|
47
|
+
seen.add(candidate);
|
|
48
|
+
if (needle && !candidate.toLowerCase().includes(needle)) continue;
|
|
49
|
+
lines.push(`${candidate}\t${model.provider}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
lines.sort();
|
|
54
|
+
if (lines.length > 0) process.stdout.write(`${lines.join("\n")}\n`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function completeSessions(prefix: string): Promise<void> {
|
|
58
|
+
const sessions = await SessionManager.list(process.cwd());
|
|
59
|
+
const lines: string[] = [];
|
|
60
|
+
for (const session of sessions) {
|
|
61
|
+
if (prefix && !session.id.startsWith(prefix)) continue;
|
|
62
|
+
const label = clean(session.title ?? session.firstMessage ?? "").slice(0, 72);
|
|
63
|
+
lines.push(`${session.id}\t${label}`);
|
|
64
|
+
}
|
|
65
|
+
if (lines.length > 0) process.stdout.write(`${lines.join("\n")}\n`);
|
|
66
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `omp completions <bash|zsh|fish>` — print a shell completion script.
|
|
3
|
+
*
|
|
4
|
+
* The script is derived entirely from the declarative command/flag metadata
|
|
5
|
+
* (see `cli/completion-gen.ts`), so it never drifts from the actual CLI surface.
|
|
6
|
+
*/
|
|
7
|
+
import { APP_NAME, VERSION } from "@oh-my-pi/pi-utils";
|
|
8
|
+
import { Args, type CliConfig, Command, type CommandCtor } from "@oh-my-pi/pi-utils/cli";
|
|
9
|
+
import { buildSpec, generateCompletion, type Shell } from "../cli/completion-gen";
|
|
10
|
+
import { commands } from "../cli-commands";
|
|
11
|
+
|
|
12
|
+
/** Entry name of the default command whose flags become top-level completions. */
|
|
13
|
+
const ROOT_COMMAND = "launch";
|
|
14
|
+
const SHELLS = ["bash", "zsh", "fish"] as const;
|
|
15
|
+
|
|
16
|
+
export default class Completions extends Command {
|
|
17
|
+
static description = "Print a shell completion script (bash, zsh, or fish)";
|
|
18
|
+
|
|
19
|
+
static args = {
|
|
20
|
+
shell: Args.string({
|
|
21
|
+
description: "Target shell",
|
|
22
|
+
required: true,
|
|
23
|
+
options: SHELLS,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
static examples = [
|
|
28
|
+
`# zsh — eval at startup, or write to a file in $fpath\n eval "$(${APP_NAME} completions zsh)"`,
|
|
29
|
+
`# bash\n eval "$(${APP_NAME} completions bash)"`,
|
|
30
|
+
`# fish\n ${APP_NAME} completions fish > ~/.config/fish/completions/${APP_NAME}.fish`,
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
async run(): Promise<void> {
|
|
34
|
+
const shell = this.argv[0];
|
|
35
|
+
if (!isShell(shell)) {
|
|
36
|
+
process.stderr.write(`Usage: ${APP_NAME} completions <${SHELLS.join("|")}>\n`);
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Load every command class so we can read its static flag/arg descriptors,
|
|
42
|
+
// and collect aliases from both the registration table and the class.
|
|
43
|
+
const loaded = await Promise.all(commands.map(async entry => ({ entry, Cmd: await entry.load() })));
|
|
44
|
+
const map = new Map<string, CommandCtor>();
|
|
45
|
+
const aliasMap = new Map<string, readonly string[]>();
|
|
46
|
+
for (const { entry, Cmd } of loaded) {
|
|
47
|
+
map.set(entry.name, Cmd);
|
|
48
|
+
const merged = new Set<string>([...(Cmd.aliases ?? []), ...(entry.aliases ?? [])]);
|
|
49
|
+
aliasMap.set(entry.name, [...merged]);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const config: CliConfig = { bin: APP_NAME, version: VERSION, commands: map };
|
|
53
|
+
const spec = buildSpec(config, ROOT_COMMAND, aliasMap);
|
|
54
|
+
await Bun.write(Bun.stdout, generateCompletion(shell, spec));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function isShell(value: string | undefined): value is Shell {
|
|
59
|
+
return value === "bash" || value === "zsh" || value === "fish";
|
|
60
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manage configuration settings.
|
|
3
|
+
*/
|
|
4
|
+
import { Args, Command, Flags } from "@oh-my-pi/pi-utils/cli";
|
|
5
|
+
import { type ConfigAction, type ConfigCommandArgs, runConfigCommand } from "../cli/config-cli";
|
|
6
|
+
import { initTheme } from "../modes/theme/theme";
|
|
7
|
+
|
|
8
|
+
const ACTIONS: ConfigAction[] = ["list", "get", "set", "reset", "path", "init-xdg"];
|
|
9
|
+
|
|
10
|
+
export default class Config extends Command {
|
|
11
|
+
static description = "Manage configuration settings";
|
|
12
|
+
|
|
13
|
+
static args = {
|
|
14
|
+
action: Args.string({
|
|
15
|
+
description: "Config action",
|
|
16
|
+
required: false,
|
|
17
|
+
options: ACTIONS,
|
|
18
|
+
}),
|
|
19
|
+
key: Args.string({
|
|
20
|
+
description: "Setting key",
|
|
21
|
+
required: false,
|
|
22
|
+
}),
|
|
23
|
+
value: Args.string({
|
|
24
|
+
description: "Value (for set/reset)",
|
|
25
|
+
required: false,
|
|
26
|
+
multiple: true,
|
|
27
|
+
}),
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
static flags = {
|
|
31
|
+
json: Flags.boolean({ description: "Output JSON" }),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
async run(): Promise<void> {
|
|
35
|
+
const { args, flags } = await this.parse(Config);
|
|
36
|
+
const action = (args.action ?? "list") as ConfigAction;
|
|
37
|
+
const value = Array.isArray(args.value) ? args.value.join(" ") : args.value;
|
|
38
|
+
|
|
39
|
+
const cmd: ConfigCommandArgs = {
|
|
40
|
+
action,
|
|
41
|
+
key: args.key,
|
|
42
|
+
value,
|
|
43
|
+
flags: {
|
|
44
|
+
json: flags.json,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
await initTheme();
|
|
49
|
+
await runConfigCommand(cmd);
|
|
50
|
+
}
|
|
51
|
+
}
|