@pentoshi/clai 4.11.29 → 4.12.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/README.md +49 -10
- package/dist/agent/compaction/summary-execution.js +19 -3
- package/dist/agent/compaction/summary-execution.js.map +1 -1
- package/dist/agent/confirm-port.d.ts +3 -5
- package/dist/agent/confirm-port.js +12 -6
- package/dist/agent/confirm-port.js.map +1 -1
- package/dist/agent/context/compact-with-summary.js +12 -5
- package/dist/agent/context/compact-with-summary.js.map +1 -1
- package/dist/agent/context/latest-user-message.d.ts +2 -0
- package/dist/agent/context/latest-user-message.js +10 -0
- package/dist/agent/context/latest-user-message.js.map +1 -0
- package/dist/agent/context/user-credentials.js +36 -7
- package/dist/agent/context/user-credentials.js.map +1 -1
- package/dist/agent/context-manager.js +4 -1
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/durable-envelope.d.ts +6 -0
- package/dist/agent/durable-envelope.js +50 -11
- package/dist/agent/durable-envelope.js.map +1 -1
- package/dist/agent/evidence/tool-budgets.js +4 -14
- package/dist/agent/evidence/tool-budgets.js.map +1 -1
- package/dist/agent/responder-context.d.ts +8 -0
- package/dist/agent/responder-context.js +35 -2
- package/dist/agent/responder-context.js.map +1 -1
- package/dist/agent/subagents/manager.d.ts +1 -1
- package/dist/agent/subagents/manager.js +7 -6
- package/dist/agent/subagents/manager.js.map +1 -1
- package/dist/agent/subagents/types.d.ts +1 -0
- package/dist/agent/tool-history.d.ts +2 -2
- package/dist/agent/tool-history.js +2 -1
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/agent/turn/compaction-durable-envelope.d.ts +2 -1
- package/dist/agent/turn/compaction-durable-envelope.js +22 -11
- package/dist/agent/turn/compaction-durable-envelope.js.map +1 -1
- package/dist/agent/turn/history-writer.d.ts +1 -1
- package/dist/agent/turn/history-writer.js +1 -0
- package/dist/agent/turn/history-writer.js.map +1 -1
- package/dist/agent/turn/loop/completion-interpretation.d.ts +1 -1
- package/dist/agent/turn/loop/deps.d.ts +1 -1
- package/dist/agent/turn/loop/run-rounds.js +1 -1
- package/dist/agent/turn/loop/run-rounds.js.map +1 -1
- package/dist/agent/turn/responder-read-tool.d.ts +1 -0
- package/dist/agent/turn/responder-read-tool.js +13 -6
- package/dist/agent/turn/responder-read-tool.js.map +1 -1
- package/dist/agent/turn/tool-execution/authorization.js +3 -39
- package/dist/agent/turn/tool-execution/authorization.js.map +1 -1
- package/dist/agent/turn/tool-execution/single-tool.js +1 -1
- package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
- package/dist/app/commands/catalog.js +18 -3
- package/dist/app/commands/catalog.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.js +1 -1
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +3 -1
- package/dist/app/controllers/session-controller.js +25 -12
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-usage-ledger.d.ts +5 -1
- package/dist/app/controllers/session-usage-ledger.js +19 -5
- package/dist/app/controllers/session-usage-ledger.js.map +1 -1
- package/dist/app/controllers/session-usage-source.d.ts +13 -0
- package/dist/app/controllers/session-usage-source.js +37 -0
- package/dist/app/controllers/session-usage-source.js.map +1 -0
- package/dist/app/operation-review.d.ts +7 -0
- package/dist/app/operation-review.js +61 -0
- package/dist/app/operation-review.js.map +1 -0
- package/dist/app/ports/confirm-port.d.ts +1 -1
- package/dist/app/ports/secret-port.d.ts +2 -0
- package/dist/classic/app/ClassicApp.js +1 -1
- package/dist/classic/app/ClassicApp.js.map +1 -1
- package/dist/classic/app/use-feed.js +2 -1
- package/dist/classic/app/use-feed.js.map +1 -1
- package/dist/classic/blocks/diff-lines.js +5 -8
- package/dist/classic/blocks/diff-lines.js.map +1 -1
- package/dist/classic/bootstrap/start-classic.js +3 -0
- package/dist/classic/bootstrap/start-classic.js.map +1 -1
- package/dist/classic/chrome/subagents-row.js +1 -1
- package/dist/classic/chrome/subagents-row.js.map +1 -1
- package/dist/classic/input/paste-burst.d.ts +3 -12
- package/dist/classic/input/paste-burst.js +18 -110
- package/dist/classic/input/paste-burst.js.map +1 -1
- package/dist/classic/input/paste-decoder.js +2 -4
- package/dist/classic/input/paste-decoder.js.map +1 -1
- package/dist/classic/input/terminal-sequences.d.ts +1 -2
- package/dist/classic/input/terminal-sequences.js +1 -2
- package/dist/classic/input/terminal-sequences.js.map +1 -1
- package/dist/classic/panels/confirm-panel.js +9 -3
- package/dist/classic/panels/confirm-panel.js.map +1 -1
- package/dist/classic/panels/pager-diff.js +5 -7
- package/dist/classic/panels/pager-diff.js.map +1 -1
- package/dist/classic/panels/panel-controller.d.ts +1 -0
- package/dist/classic/panels/panel-controller.js +47 -13
- package/dist/classic/panels/panel-controller.js.map +1 -1
- package/dist/classic/panels/panel-effect.d.ts +2 -0
- package/dist/classic/panels/panel-effect.js.map +1 -1
- package/dist/classic/panels/panel-effects.js +3 -0
- package/dist/classic/panels/panel-effects.js.map +1 -1
- package/dist/classic/panels/secret-panel.d.ts +1 -0
- package/dist/classic/panels/secret-panel.js +8 -1
- package/dist/classic/panels/secret-panel.js.map +1 -1
- package/dist/classic/render/ink-theme.js +1 -1
- package/dist/classic/render/ink-theme.js.map +1 -1
- package/dist/commands/providers.d.ts +5 -0
- package/dist/commands/providers.js +57 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/update/installers.js +1 -0
- package/dist/commands/update/installers.js.map +1 -1
- package/dist/index.js +24 -4
- package/dist/index.js.map +1 -1
- package/dist/llm/capabilities.js +5 -5
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/capability/state.d.ts +1 -1
- package/dist/llm/capability/tool-dialect.js +2 -0
- package/dist/llm/capability/tool-dialect.js.map +1 -1
- package/dist/llm/capability/vision-patterns.js +12 -0
- package/dist/llm/capability/vision-patterns.js.map +1 -1
- package/dist/llm/catalog-facts.js +25 -8
- package/dist/llm/catalog-facts.js.map +1 -1
- package/dist/llm/codex-auth.d.ts +3 -1
- package/dist/llm/codex-auth.js +41 -12
- package/dist/llm/codex-auth.js.map +1 -1
- package/dist/llm/codex-client.d.ts +1 -0
- package/dist/llm/codex-client.js +30 -0
- package/dist/llm/codex-client.js.map +1 -0
- package/dist/llm/codex-config.d.ts +3 -0
- package/dist/llm/codex-config.js +82 -0
- package/dist/llm/codex-config.js.map +1 -0
- package/dist/llm/codex-credential.d.ts +3 -0
- package/dist/llm/codex-credential.js +94 -0
- package/dist/llm/codex-credential.js.map +1 -0
- package/dist/llm/codex-models.d.ts +17 -0
- package/dist/llm/codex-models.js +171 -0
- package/dist/llm/codex-models.js.map +1 -0
- package/dist/llm/codex-request.d.ts +1 -0
- package/dist/llm/codex-request.js +61 -0
- package/dist/llm/codex-request.js.map +1 -0
- package/dist/llm/codex-usage.d.ts +4 -0
- package/dist/llm/codex-usage.js +96 -0
- package/dist/llm/codex-usage.js.map +1 -0
- package/dist/llm/codex.d.ts +1 -2
- package/dist/llm/codex.js +30 -217
- package/dist/llm/codex.js.map +1 -1
- package/dist/llm/context-windows.js +1 -0
- package/dist/llm/context-windows.js.map +1 -1
- package/dist/llm/freebuff-run.d.ts +3 -0
- package/dist/llm/freebuff-run.js +9 -1
- package/dist/llm/freebuff-run.js.map +1 -1
- package/dist/llm/freebuff-session-api.d.ts +3 -1
- package/dist/llm/freebuff-session-api.js +14 -1
- package/dist/llm/freebuff-session-api.js.map +1 -1
- package/dist/llm/freebuff-session.d.ts +2 -0
- package/dist/llm/freebuff-session.js +61 -28
- package/dist/llm/freebuff-session.js.map +1 -1
- package/dist/llm/freebuff-wire.d.ts +3 -0
- package/dist/llm/freebuff-wire.js +82 -0
- package/dist/llm/freebuff-wire.js.map +1 -0
- package/dist/llm/freebuff.js +61 -117
- package/dist/llm/freebuff.js.map +1 -1
- package/dist/llm/model-layers/model-rules.js +6 -0
- package/dist/llm/model-layers/model-rules.js.map +1 -1
- package/dist/llm/omnirush-auth.d.ts +40 -0
- package/dist/llm/omnirush-auth.js +264 -0
- package/dist/llm/omnirush-auth.js.map +1 -0
- package/dist/llm/omnirush-session-upload.d.ts +63 -0
- package/dist/llm/omnirush-session-upload.js +221 -0
- package/dist/llm/omnirush-session-upload.js.map +1 -0
- package/dist/llm/omnirush.d.ts +4 -0
- package/dist/llm/omnirush.js +221 -0
- package/dist/llm/omnirush.js.map +1 -0
- package/dist/llm/provider-balance.d.ts +10 -0
- package/dist/llm/provider-balance.js +22 -2
- package/dist/llm/provider-balance.js.map +1 -1
- package/dist/llm/provider-identity.js +11 -0
- package/dist/llm/provider-identity.js.map +1 -1
- package/dist/llm/provider-info-text.js +110 -4
- package/dist/llm/provider-info-text.js.map +1 -1
- package/dist/llm/provider-profile-layers.js +33 -3
- package/dist/llm/provider-profile-layers.js.map +1 -1
- package/dist/llm/reasoning-capability.js +16 -0
- package/dist/llm/reasoning-capability.js.map +1 -1
- package/dist/llm/reasoning-controls.d.ts +1 -0
- package/dist/llm/reasoning-controls.js +1 -0
- package/dist/llm/reasoning-controls.js.map +1 -1
- package/dist/llm/reasoning-errors.js +3 -1
- package/dist/llm/reasoning-errors.js.map +1 -1
- package/dist/llm/request-plan.js +18 -12
- package/dist/llm/request-plan.js.map +1 -1
- package/dist/llm/responses/item-events.js +2 -0
- package/dist/llm/responses/item-events.js.map +1 -1
- package/dist/llm/responses-config.d.ts +4 -1
- package/dist/llm/responses-config.js.map +1 -1
- package/dist/llm/responses-parse.d.ts +2 -1
- package/dist/llm/responses-parse.js +11 -45
- package/dist/llm/responses-parse.js.map +1 -1
- package/dist/llm/responses-replay.d.ts +3 -0
- package/dist/llm/responses-replay.js +48 -0
- package/dist/llm/responses-replay.js.map +1 -0
- package/dist/llm/responses-request.js +22 -8
- package/dist/llm/responses-request.js.map +1 -1
- package/dist/llm/responses-stream-accumulator.d.ts +4 -0
- package/dist/llm/responses-stream-accumulator.js +12 -1
- package/dist/llm/responses-stream-accumulator.js.map +1 -1
- package/dist/llm/responses-stream-events.js +14 -25
- package/dist/llm/responses-stream-events.js.map +1 -1
- package/dist/llm/responses-stream.js +1 -0
- package/dist/llm/responses-stream.js.map +1 -1
- package/dist/llm/responses-usage.d.ts +12 -0
- package/dist/llm/responses-usage.js +66 -0
- package/dist/llm/responses-usage.js.map +1 -0
- package/dist/llm/router.js +4 -4
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/routing/attempt-complete.js +7 -2
- package/dist/llm/routing/attempt-complete.js.map +1 -1
- package/dist/llm/routing/attempt-request.js +4 -1
- package/dist/llm/routing/attempt-request.js.map +1 -1
- package/dist/llm/routing/attempt-stream.js +8 -2
- package/dist/llm/routing/attempt-stream.js.map +1 -1
- package/dist/llm/routing/error-classification.js +2 -2
- package/dist/llm/routing/error-classification.js.map +1 -1
- package/dist/llm/routing/provider-selection.js +6 -0
- package/dist/llm/routing/provider-selection.js.map +1 -1
- package/dist/llm/tokenharbor-cache.d.ts +4 -0
- package/dist/llm/tokenharbor-cache.js +10 -0
- package/dist/llm/tokenharbor-cache.js.map +1 -0
- package/dist/llm/tokenharbor.d.ts +8 -0
- package/dist/llm/tokenharbor.js +159 -0
- package/dist/llm/tokenharbor.js.map +1 -0
- package/dist/llm/wire/chat-body.d.ts +4 -3
- package/dist/llm/wire/chat-body.js +30 -5
- package/dist/llm/wire/chat-body.js.map +1 -1
- package/dist/llm/wire/effort-preflight.js +6 -10
- package/dist/llm/wire/effort-preflight.js.map +1 -1
- package/dist/llm/wire/openai-complete.d.ts +2 -1
- package/dist/llm/wire/openai-complete.js +1 -1
- package/dist/llm/wire/openai-complete.js.map +1 -1
- package/dist/llm/wire/openai-stream.d.ts +2 -1
- package/dist/llm/wire/openai-stream.js +1 -1
- package/dist/llm/wire/openai-stream.js.map +1 -1
- package/dist/llm/wire/responses-preflight.js +1 -0
- package/dist/llm/wire/responses-preflight.js.map +1 -1
- package/dist/modes/ask.js +2 -1
- package/dist/modes/ask.js.map +1 -1
- package/dist/noninteractive/readline-prompts.d.ts +2 -1
- package/dist/noninteractive/readline-prompts.js +34 -1
- package/dist/noninteractive/readline-prompts.js.map +1 -1
- package/dist/noninteractive/start-noninteractive.js +18 -0
- package/dist/noninteractive/start-noninteractive.js.map +1 -1
- package/dist/noninteractive/stdio-confirm-port.js +18 -6
- package/dist/noninteractive/stdio-confirm-port.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.js +3 -2
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/system.agent.md +8 -8
- package/dist/safety/filesystem-permissions.d.ts +4 -0
- package/dist/safety/filesystem-permissions.js +113 -0
- package/dist/safety/filesystem-permissions.js.map +1 -0
- package/dist/safety/permission-mode.d.ts +5 -0
- package/dist/safety/permission-mode.js +22 -0
- package/dist/safety/permission-mode.js.map +1 -0
- package/dist/safety/shell-filesystem-effects.d.ts +14 -0
- package/dist/safety/shell-filesystem-effects.js +172 -0
- package/dist/safety/shell-filesystem-effects.js.map +1 -0
- package/dist/safety/shell-permission-words.d.ts +16 -0
- package/dist/safety/shell-permission-words.js +102 -0
- package/dist/safety/shell-permission-words.js.map +1 -0
- package/dist/safety/tool-classification.js +1 -1
- package/dist/safety/tool-classification.js.map +1 -1
- package/dist/store/config/endpoints.d.ts +2 -1
- package/dist/store/config/endpoints.js +5 -1
- package/dist/store/config/endpoints.js.map +1 -1
- package/dist/store/config.js +3 -0
- package/dist/store/config.js.map +1 -1
- package/dist/store/history.js +3 -0
- package/dist/store/history.js.map +1 -1
- package/dist/store/subagents.js +3 -2
- package/dist/store/subagents.js.map +1 -1
- package/dist/tools/capabilities.js +2 -2
- package/dist/tools/command-intent.d.ts +0 -1
- package/dist/tools/command-intent.js +3 -10
- package/dist/tools/command-intent.js.map +1 -1
- package/dist/tools/definitions/aggregate.js +5 -1
- package/dist/tools/definitions/aggregate.js.map +1 -1
- package/dist/tools/definitions/orchestration.js +2 -2
- package/dist/tools/definitions/orchestration.js.map +1 -1
- package/dist/tools/definitions/shell.js +6 -3
- package/dist/tools/definitions/shell.js.map +1 -1
- package/dist/tools/elevated-shell.d.ts +1 -0
- package/dist/tools/elevated-shell.js +2 -0
- package/dist/tools/elevated-shell.js.map +1 -1
- package/dist/tools/fs/search.js +12 -8
- package/dist/tools/fs/search.js.map +1 -1
- package/dist/tools/fs.d.ts +1 -0
- package/dist/tools/fs.js +22 -3
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/handlers/shell-1.js +18 -33
- package/dist/tools/handlers/shell-1.js.map +1 -1
- package/dist/tools/interactive-session-tools.js +1 -0
- package/dist/tools/interactive-session-tools.js.map +1 -1
- package/dist/tools/jobs/types.d.ts +2 -1
- package/dist/tools/jobs.js +1 -0
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/shell/internals.d.ts +1 -1
- package/dist/tools/shell/internals.js +2 -1
- package/dist/tools/shell/internals.js.map +1 -1
- package/dist/tools/shell/timeout.d.ts +1 -0
- package/dist/tools/shell/timeout.js +2 -0
- package/dist/tools/shell/timeout.js.map +1 -0
- package/dist/tools/sudo-session.d.ts +4 -5
- package/dist/tools/sudo-session.js +1 -0
- package/dist/tools/sudo-session.js.map +1 -1
- package/dist/tools/tool-types.d.ts +2 -4
- package/dist/tui-v2/app/App.js +5 -1
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js +6 -0
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/tui-v2/components/jobs/subagents-panel.js +15 -3
- package/dist/tui-v2/components/jobs/subagents-panel.js.map +1 -1
- package/dist/tui-v2/components/modal/confirm-modal.js +6 -2
- package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -1
- package/dist/tui-v2/components/modal/secret-modal.d.ts +8 -0
- package/dist/tui-v2/components/modal/secret-modal.js +27 -18
- package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
- package/dist/tui-v2/components/overlay/overlay-host.js +14 -3
- package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
- package/dist/tui-v2/components/pager/pager.js +7 -3
- package/dist/tui-v2/components/pager/pager.js.map +1 -1
- package/dist/tui-v2/components/picker/picker.js +17 -3
- package/dist/tui-v2/components/picker/picker.js.map +1 -1
- package/dist/tui-v2/components/transcript/intro-card.js +2 -1
- package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
- package/dist/tui-v2/composer/composer-editor.js +3 -2
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/tui-v2/input/paste-burst-guard.d.ts +22 -0
- package/dist/tui-v2/input/paste-burst-guard.js +123 -0
- package/dist/tui-v2/input/paste-burst-guard.js.map +1 -0
- package/dist/types.d.ts +8 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-core/bootstrap/composition-root.d.ts +2 -0
- package/dist/ui-core/bootstrap/composition-root.js +8 -0
- package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
- package/dist/ui-core/bootstrap/overlay-ports.js +14 -5
- package/dist/ui-core/bootstrap/overlay-ports.js.map +1 -1
- package/dist/ui-core/commands/command-handlers.js +4 -3
- package/dist/ui-core/commands/command-handlers.js.map +1 -1
- package/dist/ui-core/commands/key-commands.d.ts +2 -0
- package/dist/ui-core/commands/key-commands.js +173 -0
- package/dist/ui-core/commands/key-commands.js.map +1 -1
- package/dist/ui-core/commands/picker-commands.js +15 -0
- package/dist/ui-core/commands/picker-commands.js.map +1 -1
- package/dist/ui-core/commands/pickers/output-pager.js +19 -8
- package/dist/ui-core/commands/pickers/output-pager.js.map +1 -1
- package/dist/ui-core/commands/pickers/search-reasoning.js.map +1 -1
- package/dist/ui-core/commands/session-commands.d.ts +1 -1
- package/dist/ui-core/commands/session-commands.js +67 -32
- package/dist/ui-core/commands/session-commands.js.map +1 -1
- package/dist/ui-core/commands/subagent-commands.d.ts +1 -1
- package/dist/ui-core/commands/subagent-commands.js +9 -8
- package/dist/ui-core/commands/subagent-commands.js.map +1 -1
- package/dist/ui-core/composer/composer-meta.js +2 -5
- package/dist/ui-core/composer/composer-meta.js.map +1 -1
- package/dist/ui-core/controllers/overlay-controller.d.ts +6 -0
- package/dist/ui-core/controllers/overlay-controller.js +27 -6
- package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
- package/dist/ui-core/input/paste-burst.d.ts +45 -0
- package/dist/ui-core/input/paste-burst.js +170 -0
- package/dist/ui-core/input/paste-burst.js.map +1 -0
- package/dist/ui-core/input/paste-text.d.ts +1 -0
- package/dist/ui-core/input/paste-text.js +4 -0
- package/dist/ui-core/input/paste-text.js.map +1 -0
- package/dist/ui-core/rendering/duration.d.ts +2 -0
- package/dist/ui-core/rendering/duration.js +8 -0
- package/dist/ui-core/rendering/duration.js.map +1 -1
- package/dist/ui-core/rendering/exit-summary/table.js +4 -1
- package/dist/ui-core/rendering/exit-summary/table.js.map +1 -1
- package/dist/ui-core/rendering/format-usage.js +9 -2
- package/dist/ui-core/rendering/format-usage.js.map +1 -1
- package/dist/ui-core/rendering/intro-header.js +5 -6
- package/dist/ui-core/rendering/intro-header.js.map +1 -1
- package/dist/ui-core/rendering/subagent-source.d.ts +3 -2
- package/dist/ui-core/rendering/subagent-source.js +42 -6
- package/dist/ui-core/rendering/subagent-source.js.map +1 -1
- package/dist/ui-core/rendering/theme.js +4 -4
- package/dist/ui-core/rendering/usage-pager-source.js +6 -2
- package/dist/ui-core/rendering/usage-pager-source.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/dist/version.generated.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { defaultModels, } from "./provider.js";
|
|
2
|
+
import { ingestOpenAiModelCatalog, ProviderError, readJson } from "./http.js";
|
|
3
|
+
import { META_STREAM_TERMINAL } from "./stream-terminal.js";
|
|
4
|
+
import { mapResponsesEffort, responsesStream, } from "./responses-dialect.js";
|
|
5
|
+
import { importExistingOmnirushAuth, omnirushGatewayUrl, omnirushGatewayUserAgent, refreshOmnirushToken, } from "./omnirush-auth.js";
|
|
6
|
+
import { cacheAffinityKey, sessionCacheAffinityKey } from "./cache-affinity.js";
|
|
7
|
+
import { currentSessionAffinity } from "./session-affinity.js";
|
|
8
|
+
import { getProviderKeys, replaceProviderKey } from "../store/keys.js";
|
|
9
|
+
export const omnirushFallbackModels = [
|
|
10
|
+
"gpt-6-astra",
|
|
11
|
+
"gpt-6-sol",
|
|
12
|
+
"gpt-5.6-sol",
|
|
13
|
+
"meta-muse-spark",
|
|
14
|
+
"muse-spark-1.1",
|
|
15
|
+
"muse-spark-1.3",
|
|
16
|
+
"muse-spark-1.2-contributor",
|
|
17
|
+
];
|
|
18
|
+
let cachedModels = null;
|
|
19
|
+
let lastFetchTime = 0;
|
|
20
|
+
const CACHE_TTL_MS = 30 * 60 * 1000;
|
|
21
|
+
export function resetOmnirushModelCache() {
|
|
22
|
+
cachedModels = null;
|
|
23
|
+
lastFetchTime = 0;
|
|
24
|
+
}
|
|
25
|
+
function requireKey(auth) {
|
|
26
|
+
if (!auth.apiKey) {
|
|
27
|
+
throw new Error("Omnirush authentication required. Run `clai auth omnirush` to sign in with the browser device flow, or `clai auth omnirush --import` to reuse the omnirush CLI login.");
|
|
28
|
+
}
|
|
29
|
+
return auth.apiKey;
|
|
30
|
+
}
|
|
31
|
+
function gatewayBase(auth) {
|
|
32
|
+
const override = auth.baseUrl?.trim();
|
|
33
|
+
if (override) {
|
|
34
|
+
const clean = override.replace(/\/+$/, "");
|
|
35
|
+
return /\/v1$/i.test(clean) ? clean : `${clean}/v1`;
|
|
36
|
+
}
|
|
37
|
+
return omnirushGatewayUrl();
|
|
38
|
+
}
|
|
39
|
+
function gatewayHeaders(apiKey, accept) {
|
|
40
|
+
return {
|
|
41
|
+
authorization: `Bearer ${apiKey}`,
|
|
42
|
+
accept,
|
|
43
|
+
"user-agent": omnirushGatewayUserAgent(),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function isOmnirushAuthFailure(error) {
|
|
47
|
+
const status = error instanceof ProviderError ? error.status : undefined;
|
|
48
|
+
const message = error instanceof Error ? error.message : "";
|
|
49
|
+
return (status === 401 ||
|
|
50
|
+
(status === 403 && /expired|invalid|unauthorized|not allowed|denied/i.test(message)));
|
|
51
|
+
}
|
|
52
|
+
async function findOmnirushRefreshToken(currentKey, auth) {
|
|
53
|
+
if (auth.refreshToken)
|
|
54
|
+
return auth.refreshToken;
|
|
55
|
+
const keys = await getProviderKeys("omnirush").catch(() => undefined);
|
|
56
|
+
const slot = keys?.keys.find((candidate) => candidate.value === currentKey);
|
|
57
|
+
if (slot?.refreshToken)
|
|
58
|
+
return slot.refreshToken;
|
|
59
|
+
const imported = await importExistingOmnirushAuth().catch(() => undefined);
|
|
60
|
+
if (imported && imported.accessToken === currentKey)
|
|
61
|
+
return imported.refreshToken;
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
async function replaceOmnirushKey(oldKey, fresh) {
|
|
65
|
+
const metadata = { refreshToken: fresh.refreshToken };
|
|
66
|
+
try {
|
|
67
|
+
if (await replaceProviderKey("omnirush", oldKey, fresh.accessToken, metadata))
|
|
68
|
+
return;
|
|
69
|
+
const keys = await getProviderKeys("omnirush");
|
|
70
|
+
if (keys.keys.some((key) => key.value === fresh.accessToken && key.refreshToken === fresh.refreshToken)) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
throw new Error("Omnirush refreshed its credentials, but clai could not save the rotated tokens.");
|
|
76
|
+
}
|
|
77
|
+
throw new Error("Omnirush refreshed its credentials, but the matching clai account could not be found to save them.");
|
|
78
|
+
}
|
|
79
|
+
const refreshesInFlight = new Map();
|
|
80
|
+
async function refreshAndPersistOmnirushCredential(key, auth, refreshToken) {
|
|
81
|
+
const inFlight = refreshesInFlight.get(refreshToken);
|
|
82
|
+
if (inFlight) {
|
|
83
|
+
const fresh = await inFlight;
|
|
84
|
+
auth.apiKey = fresh.accessToken;
|
|
85
|
+
auth.refreshToken = fresh.refreshToken;
|
|
86
|
+
return fresh;
|
|
87
|
+
}
|
|
88
|
+
const refresh = (async () => {
|
|
89
|
+
const fresh = await refreshOmnirushToken(refreshToken);
|
|
90
|
+
auth.apiKey = fresh.accessToken;
|
|
91
|
+
auth.refreshToken = fresh.refreshToken;
|
|
92
|
+
await replaceOmnirushKey(key, fresh);
|
|
93
|
+
return fresh;
|
|
94
|
+
})();
|
|
95
|
+
refreshesInFlight.set(refreshToken, refresh);
|
|
96
|
+
try {
|
|
97
|
+
return await refresh;
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
if (refreshesInFlight.get(refreshToken) === refresh) {
|
|
101
|
+
refreshesInFlight.delete(refreshToken);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function withOmnirushCredential(auth, run, onStatus) {
|
|
106
|
+
const key = requireKey(auth);
|
|
107
|
+
const refreshToken = await findOmnirushRefreshToken(key, auth);
|
|
108
|
+
try {
|
|
109
|
+
return await run(key);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (!isOmnirushAuthFailure(error))
|
|
113
|
+
throw error;
|
|
114
|
+
if (!refreshToken)
|
|
115
|
+
throw error;
|
|
116
|
+
onStatus?.("i Omnirush authentication rejected — refreshing token");
|
|
117
|
+
const fresh = await refreshAndPersistOmnirushCredential(key, auth, refreshToken);
|
|
118
|
+
onStatus?.("i Omnirush token refreshed — retrying request");
|
|
119
|
+
return run(fresh.accessToken);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function omnirushCacheKey(context) {
|
|
123
|
+
const affinity = currentSessionAffinity();
|
|
124
|
+
const key = affinity
|
|
125
|
+
? sessionCacheAffinityKey(affinity)
|
|
126
|
+
: cacheAffinityKey("omnirush", context.model, context.messages);
|
|
127
|
+
return `${context.purpose === "auxiliary" ? "aux-" : ""}${key}`;
|
|
128
|
+
}
|
|
129
|
+
function omnirushConfigFor(baseUrl) {
|
|
130
|
+
return {
|
|
131
|
+
baseUrl,
|
|
132
|
+
providerId: "omnirush",
|
|
133
|
+
displayName: "Omnirush",
|
|
134
|
+
artifactDialect: "openai-compatible",
|
|
135
|
+
terminalPolicy: META_STREAM_TERMINAL,
|
|
136
|
+
omitSampling: true,
|
|
137
|
+
maxTokensField: "omit",
|
|
138
|
+
omitParallelToolCalls: true,
|
|
139
|
+
systemRole: "developer",
|
|
140
|
+
buildHeaders(auth, accept) {
|
|
141
|
+
return {
|
|
142
|
+
"content-type": "application/json",
|
|
143
|
+
accept,
|
|
144
|
+
...(auth.apiKey ? { authorization: `Bearer ${auth.apiKey}` } : {}),
|
|
145
|
+
"user-agent": omnirushGatewayUserAgent(),
|
|
146
|
+
};
|
|
147
|
+
},
|
|
148
|
+
reasoningPayload(reasoning) {
|
|
149
|
+
if (!reasoning?.enabled)
|
|
150
|
+
return undefined;
|
|
151
|
+
return { effort: mapResponsesEffort(reasoning.effort), summary: "auto" };
|
|
152
|
+
},
|
|
153
|
+
bodyExtras(context) {
|
|
154
|
+
return {
|
|
155
|
+
store: false,
|
|
156
|
+
prompt_cache_key: omnirushCacheKey(context),
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
async function fetchOmnirushModels(apiKey, baseUrl) {
|
|
162
|
+
const response = await fetch(`${baseUrl}/models`, {
|
|
163
|
+
headers: gatewayHeaders(apiKey, "application/json"),
|
|
164
|
+
});
|
|
165
|
+
if (!response.ok) {
|
|
166
|
+
throw new ProviderError(`Omnirush model catalog request failed (HTTP ${response.status}).`, response.status);
|
|
167
|
+
}
|
|
168
|
+
const payload = await readJson(response);
|
|
169
|
+
return ingestOpenAiModelCatalog("omnirush", payload);
|
|
170
|
+
}
|
|
171
|
+
export const omnirushProvider = {
|
|
172
|
+
id: "omnirush",
|
|
173
|
+
displayName: "Omnirush",
|
|
174
|
+
reasoningStyle: "openai",
|
|
175
|
+
defaultModel: defaultModels.omnirush,
|
|
176
|
+
envVar: "OMNIRUSH_API_KEY",
|
|
177
|
+
validateKey: (key) => key.trim().length >= 16,
|
|
178
|
+
async listModels(auth) {
|
|
179
|
+
const now = Date.now();
|
|
180
|
+
if (cachedModels && now - lastFetchTime < CACHE_TTL_MS)
|
|
181
|
+
return cachedModels;
|
|
182
|
+
const baseUrl = gatewayBase(auth);
|
|
183
|
+
let models = [];
|
|
184
|
+
try {
|
|
185
|
+
models = auth.apiKey
|
|
186
|
+
? await withOmnirushCredential(auth, (key) => fetchOmnirushModels(key, baseUrl))
|
|
187
|
+
: [];
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
models = [];
|
|
191
|
+
}
|
|
192
|
+
const result = models.length > 0 ? models : [...omnirushFallbackModels];
|
|
193
|
+
if (result.length > 0) {
|
|
194
|
+
cachedModels = result;
|
|
195
|
+
lastFetchTime = now;
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
},
|
|
199
|
+
async ping(auth) {
|
|
200
|
+
const baseUrl = gatewayBase(auth);
|
|
201
|
+
await withOmnirushCredential(auth, async (key) => {
|
|
202
|
+
const response = await fetch(`${baseUrl}/models`, {
|
|
203
|
+
headers: gatewayHeaders(key, "application/json"),
|
|
204
|
+
});
|
|
205
|
+
if (!response.ok) {
|
|
206
|
+
throw new ProviderError(`Omnirush authentication failed (HTTP ${response.status}). Run \`clai auth omnirush\` to sign in.`, response.status);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
},
|
|
210
|
+
async complete(request, auth) {
|
|
211
|
+
const model = request.model ?? defaultModels.omnirush;
|
|
212
|
+
const config = omnirushConfigFor(gatewayBase(auth));
|
|
213
|
+
return withOmnirushCredential(auth, (key) => responsesStream(config, { ...request, provider: "omnirush", model }, { apiKey: key }, () => { }, model));
|
|
214
|
+
},
|
|
215
|
+
async stream(request, auth, onToken, onStatus) {
|
|
216
|
+
const model = request.model ?? defaultModels.omnirush;
|
|
217
|
+
const config = omnirushConfigFor(gatewayBase(auth));
|
|
218
|
+
return withOmnirushCredential(auth, (key) => responsesStream(config, { ...request, provider: "omnirush", model }, { apiKey: key }, onToken, model), onStatus);
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
//# sourceMappingURL=omnirush.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omnirush.js","sourceRoot":"","sources":["../../src/llm/omnirush.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export interface BalanceBreakdown {
|
|
|
6
6
|
readonly limit: number;
|
|
7
7
|
readonly overages: number;
|
|
8
8
|
readonly currency?: string | undefined;
|
|
9
|
+
readonly unit?: "percent" | undefined;
|
|
10
|
+
readonly nextResetAt?: number | undefined;
|
|
9
11
|
}
|
|
10
12
|
export interface ProviderBalance {
|
|
11
13
|
readonly provider: ProviderId;
|
|
@@ -14,6 +16,13 @@ export interface ProviderBalance {
|
|
|
14
16
|
readonly overageStatus?: string | undefined;
|
|
15
17
|
readonly nextResetAt?: number | undefined;
|
|
16
18
|
readonly fetchedAt: number;
|
|
19
|
+
readonly accountId?: string | undefined;
|
|
20
|
+
readonly credits?: {
|
|
21
|
+
readonly remaining?: number | undefined;
|
|
22
|
+
readonly unlimited: boolean;
|
|
23
|
+
readonly available: boolean;
|
|
24
|
+
} | undefined;
|
|
25
|
+
readonly limitReached?: boolean | undefined;
|
|
17
26
|
}
|
|
18
27
|
export type BalanceState = "idle" | "loading" | "ready" | "error";
|
|
19
28
|
export interface BalanceSnapshot {
|
|
@@ -24,6 +33,7 @@ export declare const PROVIDER_BALANCE_REFRESH_MS = 60000;
|
|
|
24
33
|
type Listener = () => void;
|
|
25
34
|
export declare function subscribeProviderBalances(listener: Listener): () => void;
|
|
26
35
|
export declare function getProviderBalanceSnapshot(provider: ProviderId): BalanceSnapshot;
|
|
36
|
+
export declare function setProviderBalanceAccount(provider: ProviderId, accountId: string): void;
|
|
27
37
|
export declare function kiroBalanceFromLimits(limits: KiroUsageLimits): ProviderBalance;
|
|
28
38
|
export declare function ensureProviderBalancePolling(provider: ProviderId, fetcher: () => Promise<ProviderBalance | undefined>, intervalMs?: number): void;
|
|
29
39
|
export declare function stopProviderBalancePolling(): void;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { homedir } from "node:os";
|
|
3
2
|
import { join } from "node:path";
|
|
4
|
-
|
|
3
|
+
import { getDataDir } from "../store/paths.js";
|
|
4
|
+
const CACHE_DIR = getDataDir();
|
|
5
5
|
const CACHE_PATH = join(CACHE_DIR, "provider-balance.json");
|
|
6
6
|
export const PROVIDER_BALANCE_REFRESH_MS = 60_000;
|
|
7
7
|
const listeners = new Set();
|
|
8
8
|
const states = new Map();
|
|
9
9
|
const timers = new Map();
|
|
10
10
|
let cacheLoaded = false;
|
|
11
|
+
let pollingGeneration = 0;
|
|
11
12
|
function loadCache() {
|
|
12
13
|
if (cacheLoaded)
|
|
13
14
|
return;
|
|
@@ -54,6 +55,12 @@ export function getProviderBalanceSnapshot(provider) {
|
|
|
54
55
|
loadCache();
|
|
55
56
|
return states.get(provider) ?? { state: "idle" };
|
|
56
57
|
}
|
|
58
|
+
export function setProviderBalanceAccount(provider, accountId) {
|
|
59
|
+
loadCache();
|
|
60
|
+
const balance = states.get(provider)?.balance;
|
|
61
|
+
if (balance && balance.accountId !== accountId)
|
|
62
|
+
setState(provider, { state: "loading" });
|
|
63
|
+
}
|
|
57
64
|
export function kiroBalanceFromLimits(limits) {
|
|
58
65
|
const breakdowns = limits.breakdowns.map((b) => ({
|
|
59
66
|
label: b.displayNamePlural ?? b.displayName ?? (b.resourceType ?? "usage").toLowerCase(),
|
|
@@ -81,9 +88,16 @@ export function ensureProviderBalancePolling(provider, fetcher, intervalMs = PRO
|
|
|
81
88
|
if (!existing || existing.state === "idle") {
|
|
82
89
|
setState(provider, { state: "loading", ...(existing?.balance ? { balance: existing.balance } : {}) });
|
|
83
90
|
}
|
|
91
|
+
let refreshing = false;
|
|
92
|
+
const generation = pollingGeneration;
|
|
84
93
|
const tick = async () => {
|
|
94
|
+
if (refreshing)
|
|
95
|
+
return;
|
|
96
|
+
refreshing = true;
|
|
85
97
|
try {
|
|
86
98
|
const balance = await fetcher();
|
|
99
|
+
if (generation !== pollingGeneration)
|
|
100
|
+
return;
|
|
87
101
|
if (balance) {
|
|
88
102
|
setState(provider, { state: "ready", balance });
|
|
89
103
|
persistCache();
|
|
@@ -94,9 +108,14 @@ export function ensureProviderBalancePolling(provider, fetcher, intervalMs = PRO
|
|
|
94
108
|
}
|
|
95
109
|
}
|
|
96
110
|
catch {
|
|
111
|
+
if (generation !== pollingGeneration)
|
|
112
|
+
return;
|
|
97
113
|
const prev = states.get(provider);
|
|
98
114
|
setState(provider, { state: "error", ...(prev?.balance ? { balance: prev.balance } : {}) });
|
|
99
115
|
}
|
|
116
|
+
finally {
|
|
117
|
+
refreshing = false;
|
|
118
|
+
}
|
|
100
119
|
};
|
|
101
120
|
void tick();
|
|
102
121
|
const timer = setInterval(() => void tick(), intervalMs);
|
|
@@ -105,6 +124,7 @@ export function ensureProviderBalancePolling(provider, fetcher, intervalMs = PRO
|
|
|
105
124
|
timers.set(provider, timer);
|
|
106
125
|
}
|
|
107
126
|
export function stopProviderBalancePolling() {
|
|
127
|
+
pollingGeneration += 1;
|
|
108
128
|
for (const timer of timers.values())
|
|
109
129
|
clearInterval(timer);
|
|
110
130
|
timers.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-balance.js","sourceRoot":"","sources":["../../src/llm/provider-balance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"provider-balance.js","sourceRoot":"","sources":["../../src/llm/provider-balance.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,6 +120,13 @@ export const providerAliases = {
|
|
|
120
120
|
"kiro.dev": "kiro",
|
|
121
121
|
"kiro-desktop": "kiro",
|
|
122
122
|
"aws-kiro": "kiro",
|
|
123
|
+
omnirush: "omnirush",
|
|
124
|
+
omni: "omnirush",
|
|
125
|
+
"omnirush-ai": "omnirush",
|
|
126
|
+
"omni-rush": "omnirush",
|
|
127
|
+
tokenharbor: "tokenharbor",
|
|
128
|
+
"token-harbor": "tokenharbor",
|
|
129
|
+
"tokenharbor.ai": "tokenharbor",
|
|
123
130
|
};
|
|
124
131
|
export const defaultModels = {
|
|
125
132
|
free: "free-2/kilo-auto/free",
|
|
@@ -153,6 +160,8 @@ export const defaultModels = {
|
|
|
153
160
|
codex: "gpt-5.6-luna",
|
|
154
161
|
copilot: "gpt-4o",
|
|
155
162
|
kiro: "claude-sonnet-4.5",
|
|
163
|
+
omnirush: "gpt-6-astra",
|
|
164
|
+
tokenharbor: "claude-sonnet-5.5",
|
|
156
165
|
};
|
|
157
166
|
export const retiredModelReplacements = {
|
|
158
167
|
codex: {
|
|
@@ -219,5 +228,7 @@ export const envVars = {
|
|
|
219
228
|
codex: "CODEX_API_KEY",
|
|
220
229
|
copilot: "COPILOT_API_KEY",
|
|
221
230
|
kiro: "KIRO_API_KEY",
|
|
231
|
+
omnirush: "OMNIRUSH_API_KEY",
|
|
232
|
+
tokenharbor: "TOKENHARBOR_API_KEY",
|
|
222
233
|
};
|
|
223
234
|
//# sourceMappingURL=provider-identity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-identity.js","sourceRoot":"","sources":["../../src/llm/provider-identity.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider-identity.js","sourceRoot":"","sources":["../../src/llm/provider-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -101,6 +101,70 @@ GOOD TO KNOW
|
|
|
101
101
|
- Env var: TOKENROUTER_API_KEY (used when nothing is stored).
|
|
102
102
|
|
|
103
103
|
Docs: https://docs.tokenrouter.me`,
|
|
104
|
+
tokenharbor: `Token Harbor — one Universal Key for every frontier model
|
|
105
|
+
|
|
106
|
+
WHAT IT IS
|
|
107
|
+
An OpenAI- and Anthropic-compatible gateway that fronts Claude, GPT, Gemini,
|
|
108
|
+
Grok, Kimi, Qwen, GLM, DeepSeek and more behind a single thk_live_ key.
|
|
109
|
+
clai uses /v1/chat/completions with SSE streaming, native tool calling and
|
|
110
|
+
live reasoning streaming.
|
|
111
|
+
|
|
112
|
+
Base URL https://tokenharbor.ai/v1 (override — see ENDPOINTS below)
|
|
113
|
+
Auth Authorization: Bearer thk_live_…
|
|
114
|
+
Endpoints /models · /chat/completions
|
|
115
|
+
|
|
116
|
+
MODELS
|
|
117
|
+
/model reads the live catalog from /v1/models and lists chat-capable models
|
|
118
|
+
only (image generators and embeddings are filtered out). Context windows,
|
|
119
|
+
input modalities and the reasoning efforts each model accepts are taken
|
|
120
|
+
from that catalog whenever the gateway reports them, so /effort offers
|
|
121
|
+
exactly what the selected model supports and new models appear without a
|
|
122
|
+
clai update. Ids are case-sensitive, e.g. claude-sonnet-5.5, gpt-6-astra.
|
|
123
|
+
|
|
124
|
+
CACHING
|
|
125
|
+
- Claude models: clai places its own ephemeral cache marks on the system
|
|
126
|
+
prompt and the tail of the conversation (at most four, as content blocks)
|
|
127
|
+
so history is cached with certainty on every connection. Token Harbor
|
|
128
|
+
never rewrites a request that already carries a mark.
|
|
129
|
+
- Every other model caches upstream automatically; clai adds nothing.
|
|
130
|
+
- Gateway response caches (exact and semantic) are bypassed with
|
|
131
|
+
X-TH-Cache-Control: bypass so an agent never gets a stale answer to a
|
|
132
|
+
similar-looking question. Vendor prompt caching is unaffected.
|
|
133
|
+
- Cached tokens are read from usage.cache_read_input_tokens /
|
|
134
|
+
usage.cache_creation_input_tokens and shown in the usage totals.
|
|
135
|
+
|
|
136
|
+
COST
|
|
137
|
+
Metered per token at the upstream price (see /models on the site). Free
|
|
138
|
+
accounts are limited to 60 requests/minute and 1,800/hour; paid accounts
|
|
139
|
+
have no request-rate limit. Classed paid-cloud, so /freeonly on keeps it
|
|
140
|
+
out of the fallback chain.
|
|
141
|
+
|
|
142
|
+
SETUP
|
|
143
|
+
1. Create a key at https://tokenharbor.ai/dashboard/api-keys
|
|
144
|
+
2. clai set tokenharbor thk_live_yourKey
|
|
145
|
+
3. clai use tokenharbor
|
|
146
|
+
4. /model claude-sonnet-5.5 (or any id from /model)
|
|
147
|
+
|
|
148
|
+
MANAGING KEYS AND ENDPOINTS IN clai
|
|
149
|
+
clai set tokenharbor <key> add a key (up to 10, rotated on failure)
|
|
150
|
+
clai keys masked keys + the active endpoint
|
|
151
|
+
clai unset tokenharbor remove every stored key
|
|
152
|
+
/set tokenharbor TUI: endpoint editor, then key editor
|
|
153
|
+
/info tokenharbor this page
|
|
154
|
+
|
|
155
|
+
Base URL (optional — defaults to tokenharbor.ai):
|
|
156
|
+
clai set tokenharbor --url https://gateway.example.com/v1
|
|
157
|
+
clai unset tokenharbor --url back to the default
|
|
158
|
+
TOKENHARBOR_BASE_URL overrides the whole list.
|
|
159
|
+
|
|
160
|
+
GOOD TO KNOW
|
|
161
|
+
- A leaked key is billed to your wallet. Give each machine its own key and
|
|
162
|
+
set a spending cap on it in the dashboard; revoke one key without
|
|
163
|
+
touching the others.
|
|
164
|
+
- Rate limits answer HTTP 429 with Retry-After; clai waits and retries.
|
|
165
|
+
- Env var: TOKENHARBOR_API_KEY (used when nothing is stored).
|
|
166
|
+
|
|
167
|
+
Docs: https://tokenharbor.ai/docs`,
|
|
104
168
|
lightning: `Lightning AI Model APIs — one key for OpenAI, Anthropic, Google
|
|
105
169
|
and Lightning-hosted open models
|
|
106
170
|
|
|
@@ -953,12 +1017,13 @@ WHAT IT IS
|
|
|
953
1017
|
Auth Sign in with ChatGPT — browser OAuth (auth.openai.com), headless
|
|
954
1018
|
device code, or paste a token — or import an existing Codex CLI
|
|
955
1019
|
sign-in
|
|
956
|
-
Endpoints /responses · /models
|
|
1020
|
+
Endpoints /responses · /models · /wham/usage
|
|
957
1021
|
|
|
958
1022
|
MODELS
|
|
959
|
-
/model
|
|
960
|
-
|
|
961
|
-
|
|
1023
|
+
/model uses the live account catalog and the installed Codex client version.
|
|
1024
|
+
Models, context limits, reasoning levels, and verbosity follow the catalog.
|
|
1025
|
+
Account-scoped catalogs refresh every five minutes and persist for offline use.
|
|
1026
|
+
/usage shows subscription limits, reset times, credits, and session token usage.
|
|
962
1027
|
Free-tier quota errors are shown exactly as the backend returns them.
|
|
963
1028
|
|
|
964
1029
|
SETUP (pick one)
|
|
@@ -1062,5 +1127,46 @@ SETUP (pick one)
|
|
|
1062
1127
|
with automatic failover and token refresh on expiration.
|
|
1063
1128
|
|
|
1064
1129
|
Docs: https://kiro.dev`,
|
|
1130
|
+
omnirush: `Omnirush — free daily tokens for frontier OpenAI Responses models
|
|
1131
|
+
|
|
1132
|
+
WHAT IT IS
|
|
1133
|
+
A gateway that serves SOTA reasoning models through the OpenAI Responses
|
|
1134
|
+
API with a device-code sign-in and a daily free token allowance. Every
|
|
1135
|
+
model is reasoning-capable and accepts image input (vision).
|
|
1136
|
+
|
|
1137
|
+
AUTH
|
|
1138
|
+
Device flow (browser approval; works over SSH):
|
|
1139
|
+
clai auth omnirush
|
|
1140
|
+
Import an existing omnirush CLI login:
|
|
1141
|
+
clai auth omnirush --import
|
|
1142
|
+
Or set a token directly:
|
|
1143
|
+
clai set omnirush <access-token> env: OMNIRUSH_API_KEY
|
|
1144
|
+
Tokens live in ~/.omnirush/auth.json (OMNIRUSH_DIR overrides). The access
|
|
1145
|
+
token is rotated with its refresh token on a 401, and the rotated pair is
|
|
1146
|
+
saved against the same account in clai's multi-key store.
|
|
1147
|
+
|
|
1148
|
+
ENDPOINTS
|
|
1149
|
+
Manager https://omnirush.ai/omnirush device/authorize · token ·
|
|
1150
|
+
refresh · me
|
|
1151
|
+
Gateway https://omnirush.ai/omnirush/v1 /models · /responses
|
|
1152
|
+
Overrides: OMNIRUSH_ORIGIN, OMNIRUSH_GATEWAY_URL.
|
|
1153
|
+
|
|
1154
|
+
MODELS
|
|
1155
|
+
/model lists the live gateway catalog (cached up to 30 minutes) and falls
|
|
1156
|
+
back to the shipped ids offline. Default: gpt-6-astra. The catalog carries
|
|
1157
|
+
each model's reasoning levels (e.g. low/high/xhigh/max), context window
|
|
1158
|
+
(400000) and output limit (128000), so /effort and the context meter follow
|
|
1159
|
+
the gateway automatically.
|
|
1160
|
+
|
|
1161
|
+
LIMITS
|
|
1162
|
+
Free daily token allowance; when it is spent the gateway reports the scope
|
|
1163
|
+
(day/week) and the reset time. Earn more at https://omnirush.ai/console.
|
|
1164
|
+
|
|
1165
|
+
GOOD TO KNOW
|
|
1166
|
+
- Classed as free-cloud, so /freeonly keeps it in the fallback chain.
|
|
1167
|
+
- Reasoning streams as Responses reasoning events; clai folds them into the
|
|
1168
|
+
normal thinking block, so /think and /effort behave as usual.
|
|
1169
|
+
- Tool calls, vision, and web search are advertised per model by the
|
|
1170
|
+
gateway catalog.`,
|
|
1065
1171
|
};
|
|
1066
1172
|
//# sourceMappingURL=provider-info-text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-info-text.js","sourceRoot":"","sources":["../../src/llm/provider-info-text.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EA+CmE;IACzE,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoDmB;IAChC,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFA4EuE;IAClF,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA2H0B;IACjC,MAAM,EAAE;;;;;;;;;;;;;;;UAeA;IACR,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA+CuB;IAC7B,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DA+C8C;IACzD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAgDgC;IACzC,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFA4DqE;IACjF,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEA6D+C;IAEhE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+DAgEoD;IAC7D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA8CqC;IAC7C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA8BwB;IAClC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA8B4B;IAClC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA0CuB;IAC7B,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4BiB;IACtB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0BqB;IAC9B,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAgCoB;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA+Ce;IACzB,KAAK,EAAE,GAAG,iCAAiC
|
|
1
|
+
{"version":3,"file":"provider-info-text.js","sourceRoot":"","sources":["../../src/llm/provider-info-text.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EA+CmE;IACzE,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoDmB;IAChC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA+DmB;IAChC,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFA4EuE;IAClF,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA2H0B;IACjC,MAAM,EAAE;;;;;;;;;;;;;;;UAeA;IACR,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA+CuB;IAC7B,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DA+C8C;IACzD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAgDgC;IACzC,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFA4DqE;IACjF,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEA6D+C;IAEhE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+DAgEoD;IAC7D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA8CqC;IAC7C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA8BwB;IAClC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA8B4B;IAClC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA0CuB;IAC7B,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4BiB;IACtB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0BqB;IAC9B,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAgCoB;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA+Ce;IACzB,KAAK,EAAE,GAAG,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAmCF;IACzC,OAAO,EAAE,GAAG,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAgCH;IACpC,IAAI,EAAE,GAAG,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAqDL;IACrB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAwCS;CACpB,CAAC"}
|
|
@@ -405,6 +405,34 @@ export const FAMILY_LAYERS = {
|
|
|
405
405
|
naturalEofAccepted: false,
|
|
406
406
|
},
|
|
407
407
|
},
|
|
408
|
+
tokenharbor: {
|
|
409
|
+
evidence: providerDoc("tokenharbor-chat-completions"),
|
|
410
|
+
capabilities: { tools: "supported", images: "unknown" },
|
|
411
|
+
reasoning: {
|
|
412
|
+
control: {
|
|
413
|
+
dialect: "openai-effort",
|
|
414
|
+
status: "supported",
|
|
415
|
+
evidence: providerDoc("tokenharbor-chat-completions"),
|
|
416
|
+
},
|
|
417
|
+
outputShapes: ["reasoning-content", "reasoning-field", "structured-details"],
|
|
418
|
+
},
|
|
419
|
+
cache: {
|
|
420
|
+
kind: "explicit-breakpoint",
|
|
421
|
+
cacheAffectingFields: ["messages", "tools", "tool_choice", "cache_control"],
|
|
422
|
+
},
|
|
423
|
+
usage: {
|
|
424
|
+
cachedInput: [
|
|
425
|
+
"usage.cache_read_input_tokens",
|
|
426
|
+
"usage.prompt_tokens_details.cached_tokens",
|
|
427
|
+
],
|
|
428
|
+
cacheWrite: ["usage.cache_creation_input_tokens"],
|
|
429
|
+
reasoningOutput: ["usage.completion_tokens_details.reasoning_tokens"],
|
|
430
|
+
},
|
|
431
|
+
terminal: {
|
|
432
|
+
proofs: CHAT_COMPLETIONS_TERMINAL_PROOFS,
|
|
433
|
+
naturalEofAccepted: false,
|
|
434
|
+
},
|
|
435
|
+
},
|
|
408
436
|
fireworks: {
|
|
409
437
|
evidence: providerDoc("fireworks-chat-completions"),
|
|
410
438
|
capabilities: { tools: "supported" },
|
|
@@ -772,17 +800,19 @@ export const FAMILY_LAYERS = {
|
|
|
772
800
|
capabilities: { tools: "supported", images: "supported" },
|
|
773
801
|
reasoning: {
|
|
774
802
|
control: {
|
|
775
|
-
dialect: "openai-
|
|
803
|
+
dialect: "openai-nested-reasoning",
|
|
776
804
|
status: "supported",
|
|
777
805
|
evidence: providerDoc("codex-responses-reasoning"),
|
|
778
806
|
},
|
|
779
807
|
generation: "optional",
|
|
780
808
|
outputShapes: ["encrypted-reasoning-items"],
|
|
781
|
-
replayScope: "
|
|
809
|
+
replayScope: "all-history",
|
|
810
|
+
finalTurnPreservation: "supported",
|
|
782
811
|
},
|
|
783
812
|
cache: {
|
|
784
813
|
kind: "automatic-prefix",
|
|
785
|
-
|
|
814
|
+
affinityField: "prompt_cache_key",
|
|
815
|
+
cacheAffectingFields: ["instructions", "input", "tools", "parallel_tool_calls", "reasoning.effort", "text.verbosity", "prompt_cache_key"],
|
|
786
816
|
},
|
|
787
817
|
usage: {
|
|
788
818
|
cachedInput: [
|