@oh-my-pi/pi-coding-agent 17.0.9 → 17.1.1
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 +78 -0
- package/README.md +1 -1
- package/dist/cli.js +4685 -4614
- package/dist/types/async/job-manager.d.ts +37 -1
- package/dist/types/cli/args.d.ts +2 -0
- package/dist/types/cli/bench-cli.d.ts +41 -0
- package/dist/types/commands/bench.d.ts +15 -3
- package/dist/types/commands/launch.d.ts +4 -0
- package/dist/types/config/model-registry.d.ts +3 -1
- package/dist/types/config/models-config-schema.d.ts +18 -6
- package/dist/types/config/models-config.d.ts +14 -5
- package/dist/types/config/provider-globals.d.ts +2 -2
- package/dist/types/config/service-tier.d.ts +5 -1
- package/dist/types/config/settings-schema.d.ts +374 -47
- package/dist/types/config/settings.d.ts +7 -0
- package/dist/types/dap/client.d.ts +20 -0
- package/dist/types/exec/bash-executor.d.ts +38 -0
- package/dist/types/exec/direnv.d.ts +33 -0
- package/dist/types/export/html/args.d.ts +15 -0
- package/dist/types/export/html/index.d.ts +11 -26
- package/dist/types/export/html/web-palette.d.ts +55 -116
- package/dist/types/extensibility/extensions/loader.d.ts +3 -0
- package/dist/types/extensibility/extensions/types.d.ts +17 -2
- package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +3 -0
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +13 -0
- package/dist/types/live/attestation.d.ts +2 -0
- package/dist/types/live/controller.d.ts +48 -0
- package/dist/types/live/protocol.d.ts +85 -0
- package/dist/types/live/protocol.test.d.ts +1 -0
- package/dist/types/live/transport.d.ts +35 -0
- package/dist/types/live/visualizer.d.ts +30 -0
- package/dist/types/lsp/client.d.ts +16 -1
- package/dist/types/mcp/config-writer.test.d.ts +1 -0
- package/dist/types/mcp/oauth-discovery.d.ts +2 -0
- package/dist/types/mcp/smithery-auth.d.ts +1 -1
- package/dist/types/mcp/smithery-auth.test.d.ts +1 -0
- package/dist/types/memory-backend/tool-names.d.ts +2 -0
- package/dist/types/modes/components/assistant-message.d.ts +1 -0
- package/dist/types/modes/components/custom-message.d.ts +1 -1
- package/dist/types/modes/components/login-dialog.d.ts +2 -2
- package/dist/types/modes/components/message-frame.d.ts +8 -4
- package/dist/types/modes/components/plan-review-overlay.d.ts +26 -0
- package/dist/types/modes/components/session-account-selector.d.ts +11 -0
- package/dist/types/modes/components/settings-defs.d.ts +7 -1
- package/dist/types/modes/components/status-line/component.jj-cache.test.d.ts +1 -0
- package/dist/types/modes/components/tool-execution.d.ts +9 -1
- package/dist/types/modes/controllers/command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/event-controller.d.ts +6 -1
- package/dist/types/modes/controllers/live-command-controller.d.ts +14 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +1 -0
- package/dist/types/modes/interactive-mode.d.ts +6 -0
- package/dist/types/modes/theme/theme.d.ts +1 -1
- package/dist/types/modes/types.d.ts +4 -1
- package/dist/types/modes/utils/context-usage.d.ts +12 -2
- package/dist/types/plan-mode/plan-files.d.ts +10 -0
- package/dist/types/registry/agent-lifecycle.d.ts +21 -9
- package/dist/types/registry/agent-registry.d.ts +11 -4
- package/dist/types/sdk.d.ts +15 -1
- package/dist/types/secrets/index.d.ts +15 -2
- package/dist/types/secrets/obfuscator.d.ts +113 -15
- package/dist/types/session/acp-permission-gate.d.ts +19 -0
- package/dist/types/session/agent-session-events.d.ts +84 -0
- package/dist/types/session/agent-session-types.d.ts +321 -0
- package/dist/types/session/agent-session.d.ts +135 -753
- package/dist/types/session/async-job-delivery.d.ts +28 -0
- package/dist/types/session/auth-storage.d.ts +1 -1
- package/dist/types/session/bash-runner.d.ts +75 -0
- package/dist/types/session/blob-store.d.ts +11 -1
- package/dist/types/session/blob-store.test.d.ts +1 -0
- package/dist/types/session/checkpoint-entries.d.ts +28 -0
- package/dist/types/session/eval-runner.d.ts +51 -0
- package/dist/types/session/irc-bridge.d.ts +46 -0
- package/dist/types/session/messages.d.ts +24 -0
- package/dist/types/session/model-controls.d.ts +180 -0
- package/dist/types/session/prewalk.d.ts +46 -0
- package/dist/types/session/queued-messages.d.ts +22 -0
- package/dist/types/session/redis-session-storage.d.ts +1 -0
- package/dist/types/session/retry-fallback-chains.d.ts +74 -0
- package/dist/types/session/role-models.d.ts +15 -0
- package/dist/types/session/session-advisors.d.ts +228 -0
- package/dist/types/session/session-entries.d.ts +8 -0
- package/dist/types/session/session-handoff.d.ts +70 -0
- package/dist/types/session/session-history-format.d.ts +6 -1
- package/dist/types/session/session-maintenance.d.ts +246 -0
- package/dist/types/session/session-manager.d.ts +41 -0
- package/dist/types/session/session-memory.d.ts +56 -0
- package/dist/types/session/session-provider-boundary.d.ts +62 -0
- package/dist/types/session/session-stats.d.ts +48 -0
- package/dist/types/session/session-tools.d.ts +158 -0
- package/dist/types/session/session-workspace.d.ts +32 -0
- package/dist/types/session/stream-guards.d.ts +44 -0
- package/dist/types/session/streaming-output.d.ts +8 -0
- package/dist/types/session/todo-tracker.d.ts +56 -0
- package/dist/types/session/ttsr-coordinator.d.ts +51 -0
- package/dist/types/session/turn-recovery.d.ts +225 -0
- package/dist/types/slash-commands/helpers/session-pin.d.ts +9 -0
- package/dist/types/stt/index.d.ts +0 -2
- package/dist/types/stt/stt-controller.d.ts +7 -0
- package/dist/types/system-prompt.d.ts +2 -0
- package/dist/types/task/executor.d.ts +4 -1
- package/dist/types/task/output-manager.d.ts +3 -1
- package/dist/types/tiny/title-client.d.ts +10 -0
- package/dist/types/tools/approval.d.ts +1 -0
- package/dist/types/tools/browser/launch.d.ts +5 -0
- package/dist/types/tools/builtin-names.d.ts +1 -1
- package/dist/types/tools/computer/protocol.d.ts +43 -0
- package/dist/types/tools/computer/supervisor.d.ts +32 -0
- package/dist/types/tools/computer/worker-entry.d.ts +1 -0
- package/dist/types/tools/computer/worker.d.ts +15 -0
- package/dist/types/tools/computer-renderer.d.ts +22 -0
- package/dist/types/tools/computer.d.ts +71 -0
- package/dist/types/tools/context.d.ts +2 -0
- package/dist/types/tools/default-renderer.d.ts +21 -0
- package/dist/types/tools/image-gen.d.ts +4 -4
- package/dist/types/tools/image-providers.d.ts +38 -0
- package/dist/types/tools/index.d.ts +7 -0
- package/dist/types/tools/path-utils.d.ts +8 -0
- package/dist/types/tools/todo.d.ts +10 -4
- package/dist/types/tools/xdev.d.ts +5 -1
- package/dist/types/tts/streaming-player.d.ts +10 -29
- package/dist/types/tts/vocalizer.d.ts +5 -0
- package/dist/types/utils/jj.d.ts +29 -0
- package/dist/types/utils/lang-from-path.d.ts +1 -0
- package/dist/types/utils/title-generator.d.ts +30 -0
- package/dist/types/utils/tools-manager.d.ts +1 -2
- package/dist/types/vibe/runtime.d.ts +36 -8
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/provider.d.ts +15 -5
- package/dist/types/web/search/types.d.ts +94 -0
- package/package.json +12 -12
- package/scripts/generate-share-viewer.ts +4 -6
- package/src/advisor/__tests__/advisor.test.ts +643 -0
- package/src/advisor/runtime.ts +144 -43
- package/src/async/job-manager.ts +90 -2
- package/src/cli/args.ts +3 -0
- package/src/cli/auth-gateway-cli.ts +18 -3
- package/src/cli/bench-cli.ts +395 -29
- package/src/cli/flag-tables.ts +3 -0
- package/src/cli/gc-cli.ts +2 -2
- package/src/cli/setup-cli.ts +2 -14
- package/src/cli/usage-cli.ts +10 -1
- package/src/cli.ts +8 -0
- package/src/collab/host.ts +3 -2
- package/src/commands/bench.ts +18 -4
- package/src/commands/launch.ts +4 -0
- package/src/config/model-registry.ts +16 -2
- package/src/config/models-config-schema.ts +15 -4
- package/src/config/provider-globals.ts +9 -9
- package/src/config/service-tier.ts +26 -1
- package/src/config/settings-schema.ts +270 -51
- package/src/config/settings.ts +81 -2
- package/src/dap/client.ts +37 -4
- package/src/edit/index.ts +49 -12
- package/src/eval/executor-base.ts +1 -0
- package/src/eval/js/executor.ts +2 -0
- package/src/eval/py/executor.ts +103 -33
- package/src/exec/bash-executor.ts +90 -6
- package/src/exec/direnv.ts +145 -0
- package/src/export/html/args.ts +20 -0
- package/src/export/html/index.ts +45 -47
- package/src/export/html/template.css +19 -1
- package/src/export/html/template.html +6 -0
- package/src/export/html/template.js +21 -0
- package/src/export/html/tool-views.generated.js +31 -31
- package/src/export/html/web-palette.ts +116 -132
- package/src/export/share.ts +249 -49
- package/src/extensibility/extensions/loader.ts +29 -1
- package/src/extensibility/extensions/runner.ts +6 -0
- package/src/extensibility/extensions/types.ts +33 -2
- package/src/extensibility/extensions/wrapper.ts +68 -12
- package/src/extensibility/legacy-pi-coding-agent-shim.ts +7 -1
- package/src/extensibility/plugins/legacy-pi-compat.ts +19 -1
- package/src/hindsight/state.ts +64 -6
- package/src/internal-urls/local-protocol.ts +2 -1
- package/src/internal-urls/memory-protocol.ts +2 -2
- package/src/internal-urls/skill-protocol.ts +2 -2
- package/src/internal-urls/ssh-protocol.ts +2 -1
- package/src/internal-urls/vault-protocol.ts +2 -1
- package/src/live/attestation.ts +91 -0
- package/src/live/controller.ts +517 -0
- package/src/live/prompts/agent-final-message.md +3 -0
- package/src/live/prompts/live-instructions.md +23 -0
- package/src/live/protocol.test.ts +140 -0
- package/src/live/protocol.ts +233 -0
- package/src/live/transport.ts +422 -0
- package/src/live/visualizer.ts +214 -0
- package/src/lsp/client.ts +29 -9
- package/src/lsp/index.ts +19 -4
- package/src/main.ts +8 -1
- package/src/mcp/config-writer.test.ts +43 -0
- package/src/mcp/config-writer.ts +109 -82
- package/src/mcp/oauth-discovery.ts +10 -2
- package/src/mcp/smithery-auth.test.ts +29 -0
- package/src/mcp/smithery-auth.ts +3 -2
- package/src/memories/index.ts +40 -20
- package/src/memory-backend/tool-names.ts +2 -0
- package/src/mnemopi/backend.ts +24 -7
- package/src/modes/acp/acp-agent.ts +56 -10
- package/src/modes/acp/acp-event-mapper.ts +8 -1
- package/src/modes/components/agent-hub.ts +1 -1
- package/src/modes/components/assistant-message.ts +7 -2
- package/src/modes/components/custom-message.ts +4 -1
- package/src/modes/components/login-dialog.ts +14 -4
- package/src/modes/components/message-frame.ts +14 -8
- package/src/modes/components/plan-review-overlay.ts +350 -35
- package/src/modes/components/session-account-selector.ts +62 -0
- package/src/modes/components/settings-defs.ts +23 -1
- package/src/modes/components/settings-selector.ts +169 -1
- package/src/modes/components/status-line/component.jj-cache.test.ts +229 -0
- package/src/modes/components/status-line/component.ts +123 -2
- package/src/modes/components/tool-execution.ts +28 -112
- package/src/modes/controllers/command-controller.ts +56 -15
- package/src/modes/controllers/event-controller.ts +111 -16
- package/src/modes/controllers/extension-ui-controller.test.ts +1 -0
- package/src/modes/controllers/extension-ui-controller.ts +20 -4
- package/src/modes/controllers/input-controller.ts +47 -39
- package/src/modes/controllers/live-command-controller.ts +255 -0
- package/src/modes/controllers/mcp-command-controller.ts +10 -1
- package/src/modes/controllers/omfg-controller.ts +44 -40
- package/src/modes/controllers/selector-controller.ts +80 -10
- package/src/modes/controllers/session-focus-controller.ts +6 -1
- package/src/modes/interactive-mode.ts +176 -38
- package/src/modes/runtime-init.ts +2 -0
- package/src/modes/setup-wizard/scenes/web-search.ts +17 -9
- package/src/modes/theme/theme.ts +1 -1
- package/src/modes/types.ts +4 -1
- package/src/modes/utils/context-usage.ts +23 -7
- package/src/modes/utils/ui-helpers.ts +10 -5
- package/src/plan-mode/plan-files.ts +40 -0
- package/src/prompts/bench/cache-prefix-chunk.md +1 -0
- package/src/prompts/bench/cache-prefix.md +3 -0
- package/src/prompts/bench/cache-suffix.md +1 -0
- package/src/prompts/system/computer-safety.md +14 -0
- package/src/prompts/system/custom-system-prompt.md +1 -1
- package/src/prompts/system/project-prompt.md +8 -1
- package/src/prompts/system/subagent-async-pending.md +6 -0
- package/src/prompts/system/system-prompt.md +1 -1
- package/src/prompts/system/workflow-notice.md +48 -40
- package/src/prompts/system/xdev-mount-notice.md +4 -0
- package/src/prompts/tools/computer.md +26 -0
- package/src/prompts/tools/todo.md +3 -1
- package/src/registry/agent-lifecycle.ts +116 -46
- package/src/registry/agent-registry.ts +35 -8
- package/src/registry/persisted-agents.ts +26 -2
- package/src/sdk.ts +215 -136
- package/src/secrets/index.ts +127 -4
- package/src/secrets/obfuscator.ts +2328 -105
- package/src/session/acp-permission-gate.ts +165 -0
- package/src/session/agent-session-error-log.test.ts +1 -1
- package/src/session/agent-session-events.ts +66 -0
- package/src/session/agent-session-types.ts +343 -0
- package/src/session/agent-session.ts +1940 -12218
- package/src/session/artifacts.ts +6 -5
- package/src/session/async-job-delivery.ts +74 -0
- package/src/session/auth-storage.ts +1 -0
- package/src/session/bash-runner.ts +326 -0
- package/src/session/blob-store.test.ts +56 -0
- package/src/session/blob-store.ts +18 -2
- package/src/session/checkpoint-entries.ts +81 -0
- package/src/session/eval-runner.ts +217 -0
- package/src/session/indexed-session-storage.ts +9 -2
- package/src/session/irc-bridge.ts +203 -0
- package/src/session/messages.ts +266 -1
- package/src/session/model-controls.ts +714 -0
- package/src/session/prewalk.ts +252 -0
- package/src/session/queued-messages.ts +93 -0
- package/src/session/redis-session-storage.ts +51 -11
- package/src/session/retry-fallback-chains.ts +455 -0
- package/src/session/role-models.ts +85 -0
- package/src/session/session-advisors.ts +1679 -0
- package/src/session/session-context.ts +6 -3
- package/src/session/session-entries.ts +8 -0
- package/src/session/session-handoff.ts +308 -0
- package/src/session/session-history-format.ts +20 -9
- package/src/session/session-loader.ts +0 -46
- package/src/session/session-maintenance.ts +2983 -0
- package/src/session/session-manager.ts +390 -30
- package/src/session/session-memory.ts +222 -0
- package/src/session/session-provider-boundary.ts +307 -0
- package/src/session/session-stats.ts +293 -0
- package/src/session/session-tools.ts +980 -0
- package/src/session/session-workspace.ts +53 -0
- package/src/session/stream-guards.ts +417 -0
- package/src/session/streaming-output.ts +52 -5
- package/src/session/todo-tracker.ts +380 -0
- package/src/session/ttsr-coordinator.ts +496 -0
- package/src/session/turn-recovery.ts +1629 -0
- package/src/slash-commands/builtin-registry.ts +257 -20
- package/src/slash-commands/helpers/session-pin.ts +44 -0
- package/src/slash-commands/helpers/usage-report.ts +22 -3
- package/src/stt/downloader.ts +0 -2
- package/src/stt/index.ts +0 -2
- package/src/stt/stt-controller.ts +57 -146
- package/src/system-prompt.ts +45 -17
- package/src/task/executor.ts +285 -70
- package/src/task/index.ts +98 -105
- package/src/task/output-manager.ts +25 -3
- package/src/task/persisted-revive.ts +4 -3
- package/src/task/structured-subagent.ts +1 -0
- package/src/tiny/title-client.ts +22 -0
- package/src/tools/approval.ts +55 -10
- package/src/tools/bash-interactive.ts +116 -86
- package/src/tools/bash-skill-urls.ts +28 -2
- package/src/tools/bash.ts +339 -123
- package/src/tools/browser/launch.ts +9 -1
- package/src/tools/browser/tab-supervisor.ts +8 -5
- package/src/tools/browser.ts +94 -47
- package/src/tools/builtin-names.ts +1 -0
- package/src/tools/computer/protocol.ts +28 -0
- package/src/tools/computer/supervisor.ts +258 -0
- package/src/tools/computer/worker-entry.ts +25 -0
- package/src/tools/computer/worker.ts +135 -0
- package/src/tools/computer-renderer.ts +108 -0
- package/src/tools/computer.ts +433 -0
- package/src/tools/context.ts +2 -0
- package/src/tools/default-renderer.ts +139 -0
- package/src/tools/essential-tools.ts +1 -0
- package/src/tools/image-gen.ts +20 -28
- package/src/tools/image-providers.ts +50 -0
- package/src/tools/index.ts +14 -0
- package/src/tools/path-utils.ts +49 -2
- package/src/tools/read.ts +156 -88
- package/src/tools/renderers.ts +9 -1
- package/src/tools/todo.ts +101 -11
- package/src/tools/vibe.ts +1 -2
- package/src/tools/write.ts +51 -1
- package/src/tools/xdev.ts +121 -29
- package/src/tts/streaming-player.ts +82 -283
- package/src/tts/vocalizer.ts +18 -1
- package/src/utils/clipboard.ts +1 -30
- package/src/utils/jj.ts +125 -4
- package/src/utils/lang-from-path.ts +7 -0
- package/src/utils/mac-file-urls.applescript +37 -0
- package/src/utils/title-generator.ts +137 -1
- package/src/utils/tool-choice.ts +14 -0
- package/src/utils/tools-manager.ts +1 -19
- package/src/vibe/runtime.ts +852 -72
- package/src/web/search/index.ts +3 -6
- package/src/web/search/provider.ts +31 -16
- package/src/web/search/providers/xai.ts +7 -1
- package/src/web/search/types.ts +3 -0
- package/dist/types/stt/recorder.d.ts +0 -30
- package/dist/types/stt/transcriber.d.ts +0 -14
- package/dist/types/stt/wav.d.ts +0 -29
- package/dist/types/tts/player.d.ts +0 -32
- package/src/stt/recorder.ts +0 -551
- package/src/stt/transcriber.ts +0 -60
- package/src/stt/wav.ts +0 -173
- package/src/tts/player.ts +0 -137
package/src/cli.ts
CHANGED
|
@@ -79,6 +79,7 @@ async function runSmokeTest(): Promise<void> {
|
|
|
79
79
|
const { smokeTestTtsWorker } = await import("./tts/tts-client");
|
|
80
80
|
const { smokeTestMnemopiEmbedWorker } = await import("./mnemopi/embed-client");
|
|
81
81
|
const { smokeTestJsEvalWorker } = await import("./eval/js/context-manager");
|
|
82
|
+
const { smokeTestComputerWorker } = await import("./tools/computer/supervisor");
|
|
82
83
|
// Smoke dependencies stay lazy so normal CLI startup does not load worker clients.
|
|
83
84
|
const { smokeTestDaemonBroker } = await import("./launch/client");
|
|
84
85
|
await smokeTestSyncWorker();
|
|
@@ -98,6 +99,7 @@ async function runSmokeTest(): Promise<void> {
|
|
|
98
99
|
await smokeTestTinyTitleWorker();
|
|
99
100
|
await smokeTestSttWorker();
|
|
100
101
|
await smokeTestJsEvalWorker();
|
|
102
|
+
await smokeTestComputerWorker();
|
|
101
103
|
await smokeTestTtsWorker();
|
|
102
104
|
await smokeTestMnemopiEmbedWorker();
|
|
103
105
|
await smokeTestDaemonBroker();
|
|
@@ -107,6 +109,7 @@ async function runSmokeTest(): Promise<void> {
|
|
|
107
109
|
const TINY_WORKER_ARG = "__omp_worker_tiny_inference";
|
|
108
110
|
const STATS_SYNC_WORKER_ARG = "__omp_worker_stats_sync";
|
|
109
111
|
const TAB_WORKER_ARG = "__omp_worker_tab";
|
|
112
|
+
const COMPUTER_WORKER_ARG = "__omp_worker_computer";
|
|
110
113
|
const JS_EVAL_WORKER_ARG = "__omp_worker_js_eval";
|
|
111
114
|
const JS_EVAL_PROCESS_ARG = "__omp_worker_js_eval_process";
|
|
112
115
|
const STT_WORKER_ARG = "__omp_worker_stt";
|
|
@@ -152,6 +155,11 @@ async function runWorkerEntrypoint(arg: string | undefined): Promise<boolean> {
|
|
|
152
155
|
await import("./tools/browser/tab-worker-entry");
|
|
153
156
|
return true;
|
|
154
157
|
}
|
|
158
|
+
if (arg === COMPUTER_WORKER_ARG) {
|
|
159
|
+
if (parentPort) installWorkerInbox(parentPort);
|
|
160
|
+
await import("./tools/computer/worker-entry");
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
155
163
|
if (arg === JS_EVAL_WORKER_ARG) {
|
|
156
164
|
if (parentPort) installWorkerInbox(parentPort);
|
|
157
165
|
await import("./eval/js/worker-entry");
|
package/src/collab/host.ts
CHANGED
|
@@ -614,10 +614,11 @@ export class CollabHost {
|
|
|
614
614
|
case "kill": {
|
|
615
615
|
const kill = async () => {
|
|
616
616
|
const ref = AgentRegistry.global().get(agentId);
|
|
617
|
-
if (ref
|
|
617
|
+
if (!ref) return;
|
|
618
|
+
if (ref.status === "running" && ref.session) {
|
|
618
619
|
await ref.session.abort({ reason: USER_INTERRUPT_LABEL });
|
|
619
620
|
}
|
|
620
|
-
await AgentLifecycleManager.global().release(agentId);
|
|
621
|
+
await AgentLifecycleManager.global().release(agentId, ref);
|
|
621
622
|
};
|
|
622
623
|
kill().catch(fail);
|
|
623
624
|
break;
|
package/src/commands/bench.ts
CHANGED
|
@@ -15,15 +15,24 @@ export default class Bench extends Command {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
static flags = {
|
|
18
|
-
runs: Flags.integer({ description: "Requests per model (results are averaged
|
|
19
|
-
"max-tokens": Flags.integer({ description: "Max output tokens per request
|
|
18
|
+
runs: Flags.integer({ description: "Requests per model (results are averaged; default: 10)" }),
|
|
19
|
+
"max-tokens": Flags.integer({ description: "Max output tokens per request (default: 512; cache mode: 64)" }),
|
|
20
20
|
prompt: Flags.string({ description: "Custom prompt text (default: bundled bench prompt)" }),
|
|
21
21
|
"service-tier": Flags.string({
|
|
22
22
|
description: "Service tier applied per model family (default: configured `tier.*` settings; `none` omits it)",
|
|
23
23
|
options: SERVICE_TIER_OPENAI_VALUES,
|
|
24
24
|
}),
|
|
25
25
|
json: Flags.boolean({ description: "Output JSON" }),
|
|
26
|
-
par: Flags.integer({ description: "Execute runs with N parallel queries/requests
|
|
26
|
+
par: Flags.integer({ description: "Execute runs with N parallel queries/requests (default: 4)" }),
|
|
27
|
+
cache: Flags.boolean({
|
|
28
|
+
description: "Run independent cold/warm prompt-cache pairs (not supported for openai-codex-responses)",
|
|
29
|
+
}),
|
|
30
|
+
"cache-prefix-file": Flags.string({ description: "Stable prompt prefix file for --cache" }),
|
|
31
|
+
"cache-prefix-bytes": Flags.integer({ description: "Stable prefix byte budget for --cache (default: 8192)" }),
|
|
32
|
+
"cache-pairs": Flags.integer({ description: "Cold/warm pairs per model for --cache (default: 1)" }),
|
|
33
|
+
"cache-concurrency": Flags.integer({
|
|
34
|
+
description: "Concurrent cache pairs for --cache; each pair remains sequential (default: 1)",
|
|
35
|
+
}),
|
|
27
36
|
};
|
|
28
37
|
|
|
29
38
|
static examples = [
|
|
@@ -31,7 +40,7 @@ export default class Bench extends Command {
|
|
|
31
40
|
"# Fuzzy selectors work\n omp bench opus sonnet",
|
|
32
41
|
"# Average over 3 runs each\n omp bench opus gpt-5.2 --runs 3",
|
|
33
42
|
"# Force priority serving tier\n omp bench openai-codex/gpt-5.5:low --runs 10 --service-tier priority",
|
|
34
|
-
"#
|
|
43
|
+
"# Measure one cold/warm prompt-cache pair\n omp bench openai/gpt-5.6 --cache --json",
|
|
35
44
|
];
|
|
36
45
|
|
|
37
46
|
async run(): Promise<void> {
|
|
@@ -45,6 +54,11 @@ export default class Bench extends Command {
|
|
|
45
54
|
serviceTier: flags["service-tier"],
|
|
46
55
|
json: flags.json,
|
|
47
56
|
par: flags.par,
|
|
57
|
+
cache: flags.cache,
|
|
58
|
+
cachePrefixFile: flags["cache-prefix-file"],
|
|
59
|
+
cachePrefixBytes: flags["cache-prefix-bytes"],
|
|
60
|
+
cachePairs: flags["cache-pairs"],
|
|
61
|
+
cacheConcurrency: flags["cache-concurrency"],
|
|
48
62
|
},
|
|
49
63
|
});
|
|
50
64
|
}
|
package/src/commands/launch.ts
CHANGED
|
@@ -83,6 +83,10 @@ export default class Index extends Command {
|
|
|
83
83
|
description: "Load an extra config.yml-style overlay for this run (repeatable)",
|
|
84
84
|
multiple: true,
|
|
85
85
|
}),
|
|
86
|
+
"add-dir": Flags.string({
|
|
87
|
+
description: "Add a workspace directory beyond the working directory (repeatable)",
|
|
88
|
+
multiple: true,
|
|
89
|
+
}),
|
|
86
90
|
print: Flags.boolean({
|
|
87
91
|
char: "p",
|
|
88
92
|
description: "Non-interactive mode: process prompt and exit",
|
|
@@ -65,6 +65,7 @@ const BUILT_IN_DISCOVERY_NON_AUTHORITATIVE_RETRY_MS = 5 * 60 * 1000;
|
|
|
65
65
|
import type { ApiKeyResolver, FetchImpl } from "@oh-my-pi/pi-ai";
|
|
66
66
|
import { registerOAuthProvider, unregisterOAuthProviders } from "@oh-my-pi/pi-ai/oauth";
|
|
67
67
|
import type { OAuthCredentials, OAuthLoginCallbacks } from "@oh-my-pi/pi-ai/oauth/types";
|
|
68
|
+
import { setCodexAttestationProvider } from "@oh-my-pi/pi-ai/providers/openai-codex-responses";
|
|
68
69
|
import {
|
|
69
70
|
getBundledModelReferenceIndex,
|
|
70
71
|
inheritReferenceThinking,
|
|
@@ -72,6 +73,7 @@ import {
|
|
|
72
73
|
} from "@oh-my-pi/pi-catalog/identity";
|
|
73
74
|
import { isBunTestRuntime, isRecord, logger, wrapFetchForExtraCa } from "@oh-my-pi/pi-utils";
|
|
74
75
|
import { parseModelString, resolveProviderModelReference } from "../config/model-resolver";
|
|
76
|
+
import { generateCodexAttestation } from "../live/attestation";
|
|
75
77
|
import type { AuthStorage, OAuthCredential } from "../session/auth-storage";
|
|
76
78
|
import { type ApiKeyResolverModel, type ApiKeyResolverOptions, createApiKeyResolver } from "./api-key-resolver";
|
|
77
79
|
import type { ConfigError, ConfigFile } from "./config-file";
|
|
@@ -90,6 +92,10 @@ import { ModelsConfigFile, type ProviderValidationModel, validateProviderConfigu
|
|
|
90
92
|
import type { ModelOverride, ModelsConfig, ProviderAuthMode } from "./models-config-schema";
|
|
91
93
|
import { settings } from "./settings";
|
|
92
94
|
|
|
95
|
+
// DeviceCheck attestation (`x-oai-attestation`) for ChatGPT-OAuth Codex
|
|
96
|
+
// requests; the pi-ai provider resolves it just-in-time per request.
|
|
97
|
+
setCodexAttestationProvider(generateCodexAttestation);
|
|
98
|
+
|
|
93
99
|
export const kNoAuth = "N/A";
|
|
94
100
|
|
|
95
101
|
export function isAuthenticated(apiKey: string | undefined | null): apiKey is string {
|
|
@@ -2171,13 +2177,21 @@ export class ModelRegistry {
|
|
|
2171
2177
|
/**
|
|
2172
2178
|
* Get API key for a model.
|
|
2173
2179
|
*/
|
|
2174
|
-
async getApiKey(
|
|
2180
|
+
async getApiKey(
|
|
2181
|
+
model: Model<Api>,
|
|
2182
|
+
sessionId?: string,
|
|
2183
|
+
options?: { signal?: AbortSignal },
|
|
2184
|
+
): Promise<string | undefined> {
|
|
2175
2185
|
const commandKey = this.#resolveCommandBackedApiKey(model.provider);
|
|
2176
2186
|
if (commandKey.configured) return commandKey.value;
|
|
2177
2187
|
if (this.#keylessProviders.has(model.provider) && !this.authStorage.hasAuth(model.provider)) {
|
|
2178
2188
|
return kNoAuth;
|
|
2179
2189
|
}
|
|
2180
|
-
return this.authStorage.getApiKey(model.provider, sessionId, {
|
|
2190
|
+
return this.authStorage.getApiKey(model.provider, sessionId, {
|
|
2191
|
+
baseUrl: model.baseUrl,
|
|
2192
|
+
modelId: model.id,
|
|
2193
|
+
signal: options?.signal,
|
|
2194
|
+
});
|
|
2181
2195
|
}
|
|
2182
2196
|
|
|
2183
2197
|
/**
|
|
@@ -73,8 +73,19 @@ export const OpenAICompatSchema = type({
|
|
|
73
73
|
"whenThinking?": OpenAICompatFieldsSchema,
|
|
74
74
|
});
|
|
75
75
|
|
|
76
|
+
const BedrockCompatSchema = type({
|
|
77
|
+
"promptCacheMode?": '"none" | "automatic" | "explicit"',
|
|
78
|
+
"supportsLongPromptCacheRetention?": "boolean",
|
|
79
|
+
"promptCacheMinimumTokens?": "number >= 0",
|
|
80
|
+
"promptCacheMaximumCheckpoints?": "number >= 0",
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// Provider-level overrides can target bundled models whose API is not repeated
|
|
84
|
+
// in models.yml, so preserve the sparse compat shape for each supported API.
|
|
85
|
+
const ApiCompatSchema = OpenAICompatSchema.and(BedrockCompatSchema);
|
|
86
|
+
|
|
76
87
|
const ApiSchema = type(
|
|
77
|
-
'"openai-completions" | "openai-responses" | "openai-codex-responses" | "azure-openai-responses" | "anthropic-messages" | "google-generative-ai" | "google-gemini-cli" | "google-vertex"',
|
|
88
|
+
'"openai-completions" | "openai-responses" | "openai-codex-responses" | "azure-openai-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-gemini-cli" | "google-vertex"',
|
|
78
89
|
);
|
|
79
90
|
|
|
80
91
|
const EffortSchema = type('"minimal" | "low" | "medium" | "high" | "xhigh" | "max"');
|
|
@@ -173,7 +184,7 @@ const ModelDefinitionSchema = type({
|
|
|
173
184
|
"maxTokens?": "number",
|
|
174
185
|
"omitMaxOutputTokens?": "boolean",
|
|
175
186
|
"headers?": { "[string]": "string" },
|
|
176
|
-
"compat?":
|
|
187
|
+
"compat?": ApiCompatSchema,
|
|
177
188
|
"contextPromotionTarget?": "string",
|
|
178
189
|
"compactionModel?": "string",
|
|
179
190
|
"remoteCompaction?": RemoteCompactionSchema,
|
|
@@ -222,7 +233,7 @@ export const ModelOverrideSchema = type({
|
|
|
222
233
|
"maxTokens?": "number",
|
|
223
234
|
"omitMaxOutputTokens?": "boolean",
|
|
224
235
|
"headers?": { "[string]": "string" },
|
|
225
|
-
"compat?":
|
|
236
|
+
"compat?": ApiCompatSchema,
|
|
226
237
|
"contextPromotionTarget?": "string",
|
|
227
238
|
"compactionModel?": "string",
|
|
228
239
|
"remoteCompaction?": RemoteCompactionSchema,
|
|
@@ -263,7 +274,7 @@ const ProviderConfigSchema = type({
|
|
|
263
274
|
"apiKey?": "string",
|
|
264
275
|
"api?": ApiSchema,
|
|
265
276
|
"headers?": { "[string]": "string" },
|
|
266
|
-
"compat?":
|
|
277
|
+
"compat?": ApiCompatSchema,
|
|
267
278
|
"remoteCompaction?": RemoteCompactionSchema,
|
|
268
279
|
"authHeader?": "boolean",
|
|
269
280
|
"auth?": ProviderAuthSchema,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { setImageProviderOrder } from "../tools/image-gen";
|
|
2
2
|
import * as webSearch from "../web/search";
|
|
3
3
|
|
|
4
4
|
interface ProviderGlobalSettings {
|
|
5
|
+
get(path: "providers.webSearchOrder"): unknown;
|
|
5
6
|
get(path: "providers.webSearchExclude"): unknown;
|
|
6
|
-
get(path: "providers.
|
|
7
|
-
get(path: "providers.image"): unknown;
|
|
7
|
+
get(path: "providers.imageOrder"): unknown;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export function applyProviderGlobalsFromSettings(settings: ProviderGlobalSettings): void {
|
|
@@ -13,13 +13,13 @@ export function applyProviderGlobalsFromSettings(settings: ProviderGlobalSetting
|
|
|
13
13
|
webSearch.setExcludedSearchProviders(excludedWebSearchProviders.filter(webSearch.isSearchProviderId));
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
18
|
-
webSearch.
|
|
16
|
+
const orderedWebSearchProviders = settings.get("providers.webSearchOrder");
|
|
17
|
+
if (Array.isArray(orderedWebSearchProviders)) {
|
|
18
|
+
webSearch.setSearchProviderOrder(orderedWebSearchProviders.filter(webSearch.isSearchProviderId));
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
|
|
21
|
+
const orderedImageProviders = settings.get("providers.imageOrder");
|
|
22
|
+
if (Array.isArray(orderedImageProviders)) {
|
|
23
|
+
setImageProviderOrder(orderedImageProviders.filter((entry): entry is string => typeof entry === "string"));
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ServiceTier, ServiceTierByFamily } from "@oh-my-pi/pi-ai";
|
|
1
|
+
import type { ServiceTier, ServiceTierByFamily, ServiceTierFamily } from "@oh-my-pi/pi-ai";
|
|
2
2
|
import type { SubmenuOption } from "./settings-schema";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -16,6 +16,31 @@ export type ServiceTierOpenAISettingValue = (typeof SERVICE_TIER_OPENAI_VALUES)[
|
|
|
16
16
|
export type ServiceTierAnthropicSettingValue = (typeof SERVICE_TIER_ANTHROPIC_VALUES)[number];
|
|
17
17
|
export type ServiceTierGoogleSettingValue = (typeof SERVICE_TIER_GOOGLE_VALUES)[number];
|
|
18
18
|
|
|
19
|
+
/** Whether a runtime value names a provider family with an independent service-tier knob. */
|
|
20
|
+
export function isServiceTierFamily(value: unknown): value is ServiceTierFamily {
|
|
21
|
+
return value === "openai" || value === "anthropic" || value === "google";
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Whether a runtime value is a supported service tier for one provider family. */
|
|
25
|
+
export function isServiceTierForFamily(family: string, tier: unknown): tier is ServiceTier {
|
|
26
|
+
if (typeof tier !== "string" || tier === "none") return false;
|
|
27
|
+
let values: readonly string[];
|
|
28
|
+
switch (family) {
|
|
29
|
+
case "openai":
|
|
30
|
+
values = SERVICE_TIER_OPENAI_VALUES;
|
|
31
|
+
break;
|
|
32
|
+
case "anthropic":
|
|
33
|
+
values = SERVICE_TIER_ANTHROPIC_VALUES;
|
|
34
|
+
break;
|
|
35
|
+
case "google":
|
|
36
|
+
values = SERVICE_TIER_GOOGLE_VALUES;
|
|
37
|
+
break;
|
|
38
|
+
default:
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return values.includes(tier);
|
|
42
|
+
}
|
|
43
|
+
|
|
19
44
|
/**
|
|
20
45
|
* Inherit-capable single value for the subagent/advisor tiers. The chosen tier
|
|
21
46
|
* is broadcast across families and applied to whichever family the spawned
|