@pentoshi/clai 4.1.0 → 4.2.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/README.md +14 -0
- package/dist/agent/compaction-executor.d.ts +68 -0
- package/dist/agent/compaction-executor.js +343 -0
- package/dist/agent/compaction-executor.js.map +1 -0
- package/dist/agent/context-breakdown.js +2 -0
- package/dist/agent/context-breakdown.js.map +1 -1
- package/dist/agent/context-manager.d.ts +23 -9
- package/dist/agent/context-manager.js +72 -43
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/events.d.ts +3 -0
- package/dist/agent/loop-guard.d.ts +2 -0
- package/dist/agent/loop-guard.js +48 -3
- package/dist/agent/loop-guard.js.map +1 -1
- package/dist/agent/prompt-composer.js +6 -6
- package/dist/agent/prompt-composer.js.map +1 -1
- package/dist/agent/reliability-policy.d.ts +1 -0
- package/dist/agent/reliability-policy.js +6 -3
- package/dist/agent/reliability-policy.js.map +1 -1
- package/dist/agent/request-accounting.d.ts +97 -0
- package/dist/agent/request-accounting.js +207 -0
- package/dist/agent/request-accounting.js.map +1 -0
- package/dist/agent/request-budget.d.ts +2 -2
- package/dist/agent/request-budget.js +2 -4
- package/dist/agent/request-budget.js.map +1 -1
- package/dist/agent/runner.d.ts +8 -2
- package/dist/agent/runner.js +409 -178
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-title.d.ts +0 -26
- package/dist/agent/session-title.js +0 -80
- package/dist/agent/session-title.js.map +1 -1
- package/dist/agent/tool-history.d.ts +2 -2
- package/dist/agent/tool-history.js +19 -6
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/app/adapters/agent-event-adapter.js +19 -0
- package/dist/app/adapters/agent-event-adapter.js.map +1 -1
- package/dist/app/adapters/current-agent-adapter.js +4 -0
- package/dist/app/adapters/current-agent-adapter.js.map +1 -1
- package/dist/app/commands/catalog.js +24 -0
- package/dist/app/commands/catalog.js.map +1 -1
- package/dist/app/controllers/cancel-coordinator.d.ts +51 -0
- package/dist/app/controllers/cancel-coordinator.js +48 -0
- package/dist/app/controllers/cancel-coordinator.js.map +1 -0
- package/dist/app/controllers/session-compact-helper.d.ts +19 -2
- package/dist/app/controllers/session-compact-helper.js +100 -127
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-context-usage.d.ts +32 -15
- package/dist/app/controllers/session-context-usage.js +186 -51
- package/dist/app/controllers/session-context-usage.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +20 -11
- package/dist/app/controllers/session-controller.js +111 -90
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-naming.d.ts +31 -0
- package/dist/app/controllers/session-naming.js +173 -0
- package/dist/app/controllers/session-naming.js.map +1 -0
- package/dist/app/controllers/session-persistence.d.ts +2 -2
- package/dist/app/controllers/session-persistence.js +3 -6
- package/dist/app/controllers/session-persistence.js.map +1 -1
- package/dist/app/controllers/session-turn-request.d.ts +2 -1
- package/dist/app/controllers/session-turn-request.js +3 -0
- package/dist/app/controllers/session-turn-request.js.map +1 -1
- package/dist/app/controllers/turn-controller.d.ts +2 -1
- package/dist/app/controllers/turn-controller.js +1 -0
- package/dist/app/controllers/turn-controller.js.map +1 -1
- package/dist/app/events/app-event.d.ts +9 -0
- package/dist/app/events/app-event.js.map +1 -1
- package/dist/app/ports/agent-port.d.ts +8 -1
- package/dist/classic/app/ClassicApp.js +2 -1
- package/dist/classic/app/ClassicApp.js.map +1 -1
- package/dist/classic/app/app-wiring.js +1 -2
- package/dist/classic/app/app-wiring.js.map +1 -1
- package/dist/classic/app/wiring-interactions.js +2 -7
- package/dist/classic/app/wiring-interactions.js.map +1 -1
- package/dist/classic/blocks/tool-lines.js +2 -1
- package/dist/classic/blocks/tool-lines.js.map +1 -1
- package/dist/classic/input/cancel-ladder.d.ts +2 -19
- package/dist/classic/input/cancel-ladder.js +13 -20
- package/dist/classic/input/cancel-ladder.js.map +1 -1
- package/dist/commands/providers.js +2 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/llm/adapters/anthropic-tools.d.ts +31 -14
- package/dist/llm/adapters/anthropic-tools.js +124 -29
- package/dist/llm/adapters/anthropic-tools.js.map +1 -1
- package/dist/llm/adapters/gemini-tools.d.ts +16 -4
- package/dist/llm/adapters/gemini-tools.js +117 -16
- package/dist/llm/adapters/gemini-tools.js.map +1 -1
- package/dist/llm/adapters/openai-tools.d.ts +13 -2
- package/dist/llm/adapters/openai-tools.js +58 -11
- package/dist/llm/adapters/openai-tools.js.map +1 -1
- package/dist/llm/agentrouter.js +68 -45
- package/dist/llm/agentrouter.js.map +1 -1
- package/dist/llm/anthropic.js +69 -36
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/aws-mantle.js +70 -32
- package/dist/llm/aws-mantle.js.map +1 -1
- package/dist/llm/bynara.js +26 -69
- package/dist/llm/bynara.js.map +1 -1
- package/dist/llm/capabilities.d.ts +2 -1
- package/dist/llm/capabilities.js +47 -0
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/context-snapshot.d.ts +100 -0
- package/dist/llm/context-snapshot.js +277 -0
- package/dist/llm/context-snapshot.js.map +1 -0
- package/dist/llm/context-windows.d.ts +10 -0
- package/dist/llm/context-windows.js +129 -0
- package/dist/llm/context-windows.js.map +1 -0
- package/dist/llm/custom-provider-profile.d.ts +75 -0
- package/dist/llm/custom-provider-profile.js +558 -0
- package/dist/llm/custom-provider-profile.js.map +1 -0
- package/dist/llm/custom-providers.d.ts +13 -1
- package/dist/llm/custom-providers.js +77 -25
- package/dist/llm/custom-providers.js.map +1 -1
- package/dist/llm/effort-fallback.d.ts +44 -0
- package/dist/llm/effort-fallback.js +101 -0
- package/dist/llm/effort-fallback.js.map +1 -0
- package/dist/llm/fireworks.js +4 -0
- package/dist/llm/fireworks.js.map +1 -1
- package/dist/llm/free.js +4 -0
- package/dist/llm/free.js.map +1 -1
- package/dist/llm/gemini.d.ts +1 -1
- package/dist/llm/gemini.js +89 -51
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/groq.js +4 -0
- package/dist/llm/groq.js.map +1 -1
- package/dist/llm/hetzner.js +4 -0
- package/dist/llm/hetzner.js.map +1 -1
- package/dist/llm/http.d.ts +49 -10
- package/dist/llm/http.js +417 -153
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/kimchi.js +4 -0
- package/dist/llm/kimchi.js.map +1 -1
- package/dist/llm/lightning.js +4 -0
- package/dist/llm/lightning.js.map +1 -1
- package/dist/llm/meta.d.ts +2 -0
- package/dist/llm/meta.js +811 -655
- package/dist/llm/meta.js.map +1 -1
- package/dist/llm/modal.js +4 -0
- package/dist/llm/modal.js.map +1 -1
- package/dist/llm/model-families.d.ts +9 -0
- package/dist/llm/model-families.js +39 -0
- package/dist/llm/model-families.js.map +1 -0
- package/dist/llm/nvidia.js +4 -0
- package/dist/llm/nvidia.js.map +1 -1
- package/dist/llm/ollama.js +44 -40
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/openai.js +4 -0
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/openrouter.js +4 -0
- package/dist/llm/openrouter.js.map +1 -1
- package/dist/llm/operation-ledger.d.ts +60 -0
- package/dist/llm/operation-ledger.js +136 -0
- package/dist/llm/operation-ledger.js.map +1 -0
- package/dist/llm/operation-usage.d.ts +32 -0
- package/dist/llm/operation-usage.js +172 -0
- package/dist/llm/operation-usage.js.map +1 -0
- package/dist/llm/orcarouter.d.ts +7 -0
- package/dist/llm/orcarouter.js +166 -0
- package/dist/llm/orcarouter.js.map +1 -0
- package/dist/llm/provider-profile-layers.d.ts +7 -0
- package/dist/llm/provider-profile-layers.js +961 -0
- package/dist/llm/provider-profile-layers.js.map +1 -0
- package/dist/llm/provider-profile.d.ts +181 -0
- package/dist/llm/provider-profile.js +329 -0
- package/dist/llm/provider-profile.js.map +1 -0
- package/dist/llm/provider-profiles.d.ts +13 -0
- package/dist/llm/provider-profiles.js +86 -0
- package/dist/llm/provider-profiles.js.map +1 -0
- package/dist/llm/provider.d.ts +2 -0
- package/dist/llm/provider.js +67 -0
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/qwen-cloud.js +4 -0
- package/dist/llm/qwen-cloud.js.map +1 -1
- package/dist/llm/reasoning-artifacts.d.ts +101 -0
- package/dist/llm/reasoning-artifacts.js +440 -0
- package/dist/llm/reasoning-artifacts.js.map +1 -0
- package/dist/llm/request-fingerprint.d.ts +10 -0
- package/dist/llm/request-fingerprint.js +313 -0
- package/dist/llm/request-fingerprint.js.map +1 -0
- package/dist/llm/request-plan.d.ts +119 -0
- package/dist/llm/request-plan.js +279 -0
- package/dist/llm/request-plan.js.map +1 -0
- package/dist/llm/router.d.ts +19 -1
- package/dist/llm/router.js +447 -75
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/stream-events.d.ts +47 -0
- package/dist/llm/stream-events.js +55 -0
- package/dist/llm/stream-events.js.map +1 -0
- package/dist/llm/stream-terminal.d.ts +30 -0
- package/dist/llm/stream-terminal.js +51 -0
- package/dist/llm/stream-terminal.js.map +1 -0
- package/dist/llm/token-estimate-calibration.d.ts +23 -0
- package/dist/llm/token-estimate-calibration.js +140 -0
- package/dist/llm/token-estimate-calibration.js.map +1 -0
- package/dist/llm/token-usage.d.ts +35 -5
- package/dist/llm/token-usage.js +212 -162
- package/dist/llm/token-usage.js.map +1 -1
- package/dist/llm/tokenrouter.js +8 -2
- package/dist/llm/tokenrouter.js.map +1 -1
- package/dist/modes/ask.js +11 -5
- package/dist/modes/ask.js.map +1 -1
- package/dist/noninteractive/start-noninteractive.js +31 -2
- package/dist/noninteractive/start-noninteractive.js.map +1 -1
- package/dist/noninteractive/stream-blocks.js +15 -4
- package/dist/noninteractive/stream-blocks.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/system.agent.md +6 -0
- package/dist/store/config.js +5 -1
- package/dist/store/config.js.map +1 -1
- package/dist/store/history.d.ts +2 -0
- package/dist/store/history.js +19 -10
- package/dist/store/history.js.map +1 -1
- package/dist/store/plan.js +20 -14
- package/dist/store/plan.js.map +1 -1
- package/dist/tools/elevated-shell.d.ts +1 -1
- package/dist/tools/elevated-shell.js +24 -72
- package/dist/tools/elevated-shell.js.map +1 -1
- package/dist/tools/nmap-runner.js +30 -36
- package/dist/tools/nmap-runner.js.map +1 -1
- package/dist/tools/sudo-session.d.ts +83 -0
- package/dist/tools/sudo-session.js +124 -0
- package/dist/tools/sudo-session.js.map +1 -0
- package/dist/tui-v2/app/App.js +9 -24
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/components/status/context-limit-chip.js +2 -2
- package/dist/tui-v2/components/status/context-limit-chip.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 +2 -1
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/types.d.ts +156 -1
- package/dist/types.js +1 -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 +26 -3
- package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
- package/dist/ui-core/commands/picker-commands.js +11 -5
- package/dist/ui-core/commands/picker-commands.js.map +1 -1
- package/dist/ui-core/commands/session-commands.js +41 -5
- package/dist/ui-core/commands/session-commands.js.map +1 -1
- package/dist/ui-core/plan/plan-lifecycle.js +3 -2
- package/dist/ui-core/plan/plan-lifecycle.js.map +1 -1
- package/dist/ui-core/rendering/context-limit.js +4 -1
- package/dist/ui-core/rendering/context-limit.js.map +1 -1
- package/dist/ui-core/rendering/duration.d.ts +2 -1
- package/dist/ui-core/rendering/duration.js +13 -5
- package/dist/ui-core/rendering/duration.js.map +1 -1
- package/dist/ui-core/rendering/intro-header.js +2 -2
- package/dist/ui-core/rendering/intro-header.js.map +1 -1
- package/dist/ui-core/rendering/theme.d.ts +1 -0
- package/dist/ui-core/rendering/theme.js +2 -0
- package/dist/ui-core/rendering/theme.js.map +1 -1
- package/dist/ui-core/state/transcript-hydrate.js +3 -3
- package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
- package/dist/ui-core/state/transcript-reducer.d.ts +5 -0
- package/dist/ui-core/state/transcript-reducer.js +76 -3
- package/dist/ui-core/state/transcript-reducer.js.map +1 -1
- package/dist/ui-core/state/transcript-store.d.ts +10 -1
- package/dist/ui-core/state/transcript-store.js +22 -1
- package/dist/ui-core/state/transcript-store.js.map +1 -1
- package/dist/ui-core/state/transcript-types.d.ts +2 -0
- package/dist/ui-core/state/transcript-types.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +6 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { applyObservedControlRejections, resolveProviderProfile, } from "./provider-profile.js";
|
|
2
|
+
import { providerContextOverrideTokens } from "./token-usage.js";
|
|
3
|
+
import { FAMILY_LAYERS, modelLayerFor, providerDoc } from "./provider-profile-layers.js";
|
|
4
|
+
const NATIVE_WIRE_API = {
|
|
5
|
+
anthropic: "anthropic-messages",
|
|
6
|
+
gemini: "gemini-generate-content",
|
|
7
|
+
meta: "meta-responses",
|
|
8
|
+
ollama: "ollama-chat",
|
|
9
|
+
};
|
|
10
|
+
export function providerWireApi(provider, model) {
|
|
11
|
+
if (provider === "aws-mantle") {
|
|
12
|
+
return /(?:^|[./-])(?:anthropic|claude)(?:[./-]|$)/i.test(model)
|
|
13
|
+
? "anthropic-messages"
|
|
14
|
+
: "chat-completions";
|
|
15
|
+
}
|
|
16
|
+
return NATIVE_WIRE_API[provider] ?? "chat-completions";
|
|
17
|
+
}
|
|
18
|
+
export function builtInProfileLayers(provider, model) {
|
|
19
|
+
const family = FAMILY_LAYERS[provider];
|
|
20
|
+
const modelLayer = modelLayerFor(provider, model);
|
|
21
|
+
const overrideTokens = providerContextOverrideTokens(provider, model);
|
|
22
|
+
const familyWithLimits = family
|
|
23
|
+
? {
|
|
24
|
+
...family,
|
|
25
|
+
limits: overrideTokens
|
|
26
|
+
? { contextTokens: overrideTokens, source: "catalog" }
|
|
27
|
+
: family.limits,
|
|
28
|
+
}
|
|
29
|
+
: undefined;
|
|
30
|
+
return {
|
|
31
|
+
...(familyWithLimits ? { family: familyWithLimits } : {}),
|
|
32
|
+
...(modelLayer ? { builtin: modelLayer } : {}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function resolveBuiltInProfile(input) {
|
|
36
|
+
const layers = builtInProfileLayers(input.provider, input.model);
|
|
37
|
+
return applyObservedControlRejections(resolveProviderProfile({
|
|
38
|
+
provider: input.provider,
|
|
39
|
+
model: input.model,
|
|
40
|
+
wireApi: providerWireApi(input.provider, input.model),
|
|
41
|
+
endpointHash: input.endpointHash,
|
|
42
|
+
credentialHash: input.credentialHash,
|
|
43
|
+
configGeneration: input.configGeneration,
|
|
44
|
+
layers: {
|
|
45
|
+
...layers,
|
|
46
|
+
...(input.catalogLayer ? { catalog: input.catalogLayer } : {}),
|
|
47
|
+
},
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
export function directDeepSeekV4Layer() {
|
|
51
|
+
return {
|
|
52
|
+
evidence: providerDoc("deepseek-thinking-mode"),
|
|
53
|
+
reasoning: {
|
|
54
|
+
generation: "default-on",
|
|
55
|
+
control: {
|
|
56
|
+
dialect: "deepseek-thinking",
|
|
57
|
+
status: "supported",
|
|
58
|
+
evidence: providerDoc("deepseek-thinking-mode"),
|
|
59
|
+
},
|
|
60
|
+
acceptedEfforts: ["low", "high", "max"],
|
|
61
|
+
disable: "supported",
|
|
62
|
+
disableForm: "thinking-disabled",
|
|
63
|
+
replayScope: "tool-turn",
|
|
64
|
+
outputShapes: ["reasoning-content"],
|
|
65
|
+
},
|
|
66
|
+
limits: {
|
|
67
|
+
contextTokens: 1_000_000,
|
|
68
|
+
outputTokens: 384_000,
|
|
69
|
+
source: "provider-doc",
|
|
70
|
+
},
|
|
71
|
+
cache: {
|
|
72
|
+
kind: "automatic-prefix",
|
|
73
|
+
cacheAffectingFields: ["messages", "tools", "thinking", "reasoning_effort"],
|
|
74
|
+
},
|
|
75
|
+
usage: {
|
|
76
|
+
cachedInput: ["usage.prompt_cache_hit_tokens"],
|
|
77
|
+
uncachedInput: ["usage.prompt_cache_miss_tokens"],
|
|
78
|
+
},
|
|
79
|
+
terminal: {
|
|
80
|
+
proofs: ["done-sentinel", "finish-reason"],
|
|
81
|
+
naturalEofAccepted: false,
|
|
82
|
+
},
|
|
83
|
+
capabilities: { tools: "supported" },
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=provider-profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-profiles.js","sourceRoot":"","sources":["../../src/llm/provider-profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/provider.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { CompletionRequest, CompletionResult, ProviderId } from "../types.js";
|
|
2
|
+
import type { ReasoningStyle } from "./http.js";
|
|
2
3
|
export interface LlmProvider {
|
|
3
4
|
id: ProviderId;
|
|
4
5
|
displayName: string;
|
|
5
6
|
defaultModel: string;
|
|
7
|
+
reasoningStyle?: ReasoningStyle | undefined;
|
|
6
8
|
envVar?: string | undefined;
|
|
7
9
|
validateKey(key: string): boolean;
|
|
8
10
|
ping(options: ProviderAuth): Promise<void>;
|
package/dist/llm/provider.js
CHANGED
|
@@ -53,6 +53,9 @@ export const providerAliases = {
|
|
|
53
53
|
hetzner: "hetzner",
|
|
54
54
|
"hetzner-inference": "hetzner",
|
|
55
55
|
"hetzner-experiments": "hetzner",
|
|
56
|
+
orcarouter: "orcarouter",
|
|
57
|
+
"orca-router": "orcarouter",
|
|
58
|
+
orca: "orcarouter",
|
|
56
59
|
};
|
|
57
60
|
export const defaultModels = {
|
|
58
61
|
free: "free-1/deepseek-v4-flash-free",
|
|
@@ -77,6 +80,8 @@ export const defaultModels = {
|
|
|
77
80
|
meta: "muse-spark-1.2",
|
|
78
81
|
fireworks: "accounts/fireworks/models/kimi-k2p6",
|
|
79
82
|
hetzner: "Qwen/Qwen3.6-35B-A3B-FP8",
|
|
83
|
+
// OrcaRouter namespaces model ids by upstream vendor (openai/gpt-4o-mini).
|
|
84
|
+
orcarouter: "openai/gpt-4o-mini",
|
|
80
85
|
};
|
|
81
86
|
const retiredModelReplacements = {
|
|
82
87
|
groq: {
|
|
@@ -141,6 +146,7 @@ export const envVars = {
|
|
|
141
146
|
meta: "MODEL_API_KEY",
|
|
142
147
|
fireworks: "FIREWORKS_API_KEY",
|
|
143
148
|
hetzner: "HETZNER_API_KEY",
|
|
149
|
+
orcarouter: "ORCAROUTER_API_KEY",
|
|
144
150
|
};
|
|
145
151
|
/** Resolve the env var for any provider, including user-defined custom ones. */
|
|
146
152
|
export function getEnvVar(provider) {
|
|
@@ -707,6 +713,67 @@ GOOD TO KNOW
|
|
|
707
713
|
|
|
708
714
|
Docs: https://experiments.hetzner.com/docs/inference
|
|
709
715
|
API: https://inference.hetzner.com/api/v1`,
|
|
716
|
+
orcarouter: `OrcaRouter — one key for OpenAI, Anthropic, Google, DeepSeek,
|
|
717
|
+
Grok, Qwen, Kimi, MiniMax and GLM at provider cost price
|
|
718
|
+
|
|
719
|
+
WHAT IT IS
|
|
720
|
+
An OpenAI-compatible gateway at https://api.orcarouter.ai/v1 that routes
|
|
721
|
+
eleven upstream providers behind one bearer key, with zero token markup
|
|
722
|
+
(you pay each provider's published price). Model ids are vendor-prefixed:
|
|
723
|
+
openai/gpt-4o-mini, openai/gpt-5, openai/o3-mini
|
|
724
|
+
anthropic/claude-sonnet-4.6, anthropic/claude-opus-4.7
|
|
725
|
+
google/gemini-2.5-flash, google/gemini-3-pro-preview
|
|
726
|
+
deepseek/deepseek-reasoner, grok/grok-4-fast-reasoning
|
|
727
|
+
qwen/qwen3-max, kimi/kimi-k2.6, minimax/minimax-m2.7, z-ai/glm-5.1
|
|
728
|
+
Chat Completions with SSE streaming, native tool calling, structured
|
|
729
|
+
outputs (response_format json_schema), vision via image_url and a unified
|
|
730
|
+
reasoning_effort knob all work.
|
|
731
|
+
|
|
732
|
+
Base URL https://api.orcarouter.ai/v1
|
|
733
|
+
Auth Authorization: Bearer <key>
|
|
734
|
+
Endpoints /models · /chat/completions
|
|
735
|
+
|
|
736
|
+
MODELS
|
|
737
|
+
Ids are namespaced by upstream vendor and case-sensitive. /model reads the
|
|
738
|
+
live list from /models (cached 1h), filtered to models reachable over Chat
|
|
739
|
+
Completions — image/video/tts/embedding ids are hidden. orcarouter/auto
|
|
740
|
+
picks the cheapest model that fits the request.
|
|
741
|
+
|
|
742
|
+
REASONING
|
|
743
|
+
One unified syntax: top-level reasoning_effort (low/medium/high, plus
|
|
744
|
+
minimal/max on some models). The gateway translates it per upstream —
|
|
745
|
+
OpenAI native, Claude thinking budgets, Gemini thinkingConfig, Grok
|
|
746
|
+
native. /think and /effort map onto it; thinking arrives as
|
|
747
|
+
reasoning_content and folds into the usual thinking block.
|
|
748
|
+
|
|
749
|
+
COST
|
|
750
|
+
Zero markup: provider list price per token. Revenue comes from optional
|
|
751
|
+
subscription plans, not inflated token cost. clai classes it paid-cloud,
|
|
752
|
+
so /freeonly on keeps it out of the fallback chain.
|
|
753
|
+
|
|
754
|
+
SETUP
|
|
755
|
+
1. Create an API key at https://www.orcarouter.ai/console (starts sk-…).
|
|
756
|
+
2. clai set orcarouter sk-yourKey
|
|
757
|
+
3. clai use orcarouter
|
|
758
|
+
4. /model openai/gpt-4o-mini (or any id from /model)
|
|
759
|
+
|
|
760
|
+
MANAGING KEYS IN CLAI
|
|
761
|
+
clai set orcarouter <key> add a key (up to 10, rotated on failure)
|
|
762
|
+
clai set orcarouter <key2> add another; the last that worked is sticky
|
|
763
|
+
clai keys masked keys + the active endpoint
|
|
764
|
+
clai unset orcarouter remove every stored key
|
|
765
|
+
/set orcarouter TUI: multi-key editor
|
|
766
|
+
/info orcarouter this page
|
|
767
|
+
|
|
768
|
+
GOOD TO KNOW
|
|
769
|
+
- Multi-key rotation, prompt caching, tool calling and compaction behave
|
|
770
|
+
exactly like every other OpenAI-compatible provider.
|
|
771
|
+
- Per-key options at creation: name, credit limit, expiration. Rate limits
|
|
772
|
+
are workspace-level, not per-key.
|
|
773
|
+
- Env var: ORCAROUTER_API_KEY (used when nothing is stored).
|
|
774
|
+
|
|
775
|
+
Docs: https://docs.orcarouter.ai
|
|
776
|
+
API: https://api.orcarouter.ai/v1 (OpenAI-compatible; /models, /chat/completions)`,
|
|
710
777
|
};
|
|
711
778
|
export function getProviderInfoText(provider) {
|
|
712
779
|
const known = providerInfo[provider.toLowerCase()];
|
package/dist/llm/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/qwen-cloud.js
CHANGED
|
@@ -8,6 +8,7 @@ let lastFetchTime = 0;
|
|
|
8
8
|
const CACHE_TTL_MS = 60 * 60 * 1000;
|
|
9
9
|
export const qwenCloudProvider = {
|
|
10
10
|
id: "qwen-cloud",
|
|
11
|
+
reasoningStyle: "openai",
|
|
11
12
|
displayName: "Qwen Cloud",
|
|
12
13
|
defaultModel: defaultModels["qwen-cloud"],
|
|
13
14
|
envVar: "DASHSCOPE_API_KEY",
|
|
@@ -56,6 +57,7 @@ export const qwenCloudProvider = {
|
|
|
56
57
|
tools: request.tools,
|
|
57
58
|
toolChoice: request.toolChoice,
|
|
58
59
|
parallelToolCalls: request.parallelToolCalls,
|
|
60
|
+
reasoningArtifactReplayObserver: request.onReasoningArtifactReplayDecision,
|
|
59
61
|
});
|
|
60
62
|
return toCompletionResult("qwen-cloud", model, payload);
|
|
61
63
|
},
|
|
@@ -75,11 +77,13 @@ export const qwenCloudProvider = {
|
|
|
75
77
|
signal: request.signal,
|
|
76
78
|
onToken,
|
|
77
79
|
onToolCallDelta: request.onToolCallDelta,
|
|
80
|
+
onStreamEvent: request.onStreamEvent,
|
|
78
81
|
reasoning: request.thinking,
|
|
79
82
|
reasoningStyle: "openai",
|
|
80
83
|
tools: request.tools,
|
|
81
84
|
toolChoice: request.toolChoice,
|
|
82
85
|
parallelToolCalls: request.parallelToolCalls,
|
|
86
|
+
reasoningArtifactReplayObserver: request.onReasoningArtifactReplayDecision,
|
|
83
87
|
});
|
|
84
88
|
return toCompletionResult("qwen-cloud", model, payload);
|
|
85
89
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qwen-cloud.js","sourceRoot":"","sources":["../../src/llm/qwen-cloud.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,GAGd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAEnB,yEAAyE;AACzE,2FAA2F;AAC3F,MAAM,OAAO,GAAG,wDAAwD,CAAC;AAEzE,IAAI,YAAY,GAAoB,IAAI,CAAC;AACzC,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpC,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,EAAE,EAAE,YAAY;IAChB,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC;IACzC,MAAM,EAAE,mBAAmB;IAC3B,uEAAuE;IACvE,iDAAiD;IACjD,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC;IACjE,KAAK,CAAC,UAAU,CAAC,IAAkB;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,YAAY,IAAI,GAAG,GAAG,aAAa,GAAG,YAAY,EAAE,CAAC;YACvD,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,SAAS,EAAE;YAChD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;SACpD,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAoC,QAAQ,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,wBAAwB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,YAAY,GAAG,MAAM,CAAC;YACtB,aAAa,GAAG,GAAG,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAkB;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpE,MAAM,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,QAAQ,CACZ,OAA0B,EAC1B,IAAkB;QAElB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC;YAC7C,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,YAAY;YACxB,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,QAAQ;YAC3B,cAAc,EAAE,QAAQ;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"qwen-cloud.js","sourceRoot":"","sources":["../../src/llm/qwen-cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { ChatMessage, NativeToolCall, ReasoningArtifact, ReasoningArtifactKind, ReasoningArtifactProvenance, ReasoningArtifactReplayDecision, ReasoningArtifactReplayObserver, ReasoningArtifactReplayTarget, ReasoningBlock } from "../types.js";
|
|
2
|
+
/** Input accepted by the canonical artifact factory before it is frozen. */
|
|
3
|
+
export interface CreateReasoningArtifactInput {
|
|
4
|
+
readonly kind: ReasoningArtifactKind;
|
|
5
|
+
/** Raw provider payload; never use this for display or telemetry. */
|
|
6
|
+
readonly raw: ReasoningArtifact["raw"];
|
|
7
|
+
/** Display-only projection, intentionally separate from the raw payload. */
|
|
8
|
+
readonly displaySummary?: string | undefined;
|
|
9
|
+
readonly provenance: ReasoningArtifactProvenance;
|
|
10
|
+
readonly replay: ReasoningArtifact["replay"];
|
|
11
|
+
readonly position?: ReasoningArtifact["position"] | undefined;
|
|
12
|
+
}
|
|
13
|
+
/** Metadata needed at a serializer boundary to decide whether replay is safe. */
|
|
14
|
+
export interface ReasoningArtifactReplayContext {
|
|
15
|
+
readonly hasToolCalls?: boolean | undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Builds privacy-safe route provenance. Endpoint identity is a one-way hash so
|
|
19
|
+
* persisted artifacts and replay diagnostics never retain custom URL/query data.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createReasoningArtifactProvenance(input: {
|
|
22
|
+
provider: ReasoningArtifactProvenance["provider"];
|
|
23
|
+
model?: string | undefined;
|
|
24
|
+
dialect: ReasoningArtifactProvenance["dialect"];
|
|
25
|
+
endpoint?: string | undefined;
|
|
26
|
+
legacy?: true | undefined;
|
|
27
|
+
}): ReasoningArtifactProvenance;
|
|
28
|
+
/** Creates a safe serialization target without retaining the endpoint itself. */
|
|
29
|
+
export declare function createReasoningArtifactReplayTarget(input: {
|
|
30
|
+
provider: ReasoningArtifactReplayTarget["provider"];
|
|
31
|
+
model: string;
|
|
32
|
+
dialect: ReasoningArtifactReplayTarget["dialect"];
|
|
33
|
+
endpoint?: string | undefined;
|
|
34
|
+
}): ReasoningArtifactReplayTarget;
|
|
35
|
+
/**
|
|
36
|
+
* Clones and freezes raw provider state before attaching byte/token accounting.
|
|
37
|
+
* The factory is the only supported way to create artifacts from provider data.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createReasoningArtifact(input: CreateReasoningArtifactInput): ReasoningArtifact;
|
|
40
|
+
/** Returns the plaintext payload only for plaintext/signed artifact formats. */
|
|
41
|
+
export declare function reasoningArtifactText(artifact: ReasoningArtifact): string | undefined;
|
|
42
|
+
/** Returns the opaque signature only for signed/thought-signature artifacts. */
|
|
43
|
+
export declare function reasoningArtifactSignature(artifact: ReasoningArtifact): string | undefined;
|
|
44
|
+
/** Preserves encrypted items exactly as opaque JSON records for Meta replay. */
|
|
45
|
+
export declare function reasoningArtifactItems(artifact: ReasoningArtifact): Array<Record<string, unknown>>;
|
|
46
|
+
/**
|
|
47
|
+
* Returns canonical artifacts for a message. Legacy fields are converted only
|
|
48
|
+
* when canonical data is absent, preventing duplicate replay after migration.
|
|
49
|
+
*/
|
|
50
|
+
export declare function reasoningArtifactsForMessage(message: ChatMessage): readonly ReasoningArtifact[];
|
|
51
|
+
/** Projects canonical artifacts back onto the existing legacy replay surface. */
|
|
52
|
+
export declare function legacyReasoningBlockFromArtifacts(artifacts: readonly ReasoningArtifact[]): ReasoningBlock | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Hydrates persisted legacy data into canonical artifacts while retaining the
|
|
55
|
+
* original fields for older consumers and provider adapters.
|
|
56
|
+
*/
|
|
57
|
+
export declare function canonicalizeChatMessageReasoningArtifacts(message: ChatMessage): ChatMessage;
|
|
58
|
+
/** Canonical artifact accounting for a message, including un-migrated history. */
|
|
59
|
+
export declare function reasoningArtifactTokensForMessage(message: ChatMessage): number;
|
|
60
|
+
export interface SignedThinkingArtifactInput {
|
|
61
|
+
readonly sequence: number;
|
|
62
|
+
readonly thinking: string;
|
|
63
|
+
readonly signature?: string | undefined;
|
|
64
|
+
readonly raw: ReasoningArtifact["raw"];
|
|
65
|
+
readonly toolCallIndex?: number | undefined;
|
|
66
|
+
}
|
|
67
|
+
/** Builds signed Anthropic-family artifacts without deriving replay state from display text. */
|
|
68
|
+
export declare function createSignedThinkingArtifacts(input: {
|
|
69
|
+
blocks: readonly SignedThinkingArtifactInput[];
|
|
70
|
+
provenance: ReasoningArtifactProvenance;
|
|
71
|
+
}): readonly ReasoningArtifact[];
|
|
72
|
+
/**
|
|
73
|
+
* Rebinds artifact positions only after duplicate and empty tool-call ids have
|
|
74
|
+
* been repaired. Raw artifact bytes stay immutable; only the history position
|
|
75
|
+
* receives the durable call id.
|
|
76
|
+
*/
|
|
77
|
+
export declare function rebindReasoningArtifactsToToolCalls(input: {
|
|
78
|
+
artifacts: readonly ReasoningArtifact[] | undefined;
|
|
79
|
+
toolCalls: readonly NativeToolCall[];
|
|
80
|
+
}): readonly ReasoningArtifact[] | undefined;
|
|
81
|
+
/** Retain active tool artifacts unconditionally; retain final turns only by policy. */
|
|
82
|
+
export declare function reasoningArtifactsForPersistence(input: {
|
|
83
|
+
artifacts: readonly ReasoningArtifact[] | undefined;
|
|
84
|
+
hasToolCalls: boolean;
|
|
85
|
+
}): readonly ReasoningArtifact[] | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* Conservative compatibility predicate used at final serialization only. It
|
|
88
|
+
* never mutates stored history and never returns raw payloads in its decision.
|
|
89
|
+
*/
|
|
90
|
+
export declare function reasoningArtifactReplayDecision(artifact: ReasoningArtifact, target: ReasoningArtifactReplayTarget, context?: ReasoningArtifactReplayContext): ReasoningArtifactReplayDecision;
|
|
91
|
+
/**
|
|
92
|
+
* Filters only the wire projection. Omitted artifacts remain unchanged in the
|
|
93
|
+
* message/persistence timeline, while callers can emit the metadata-only
|
|
94
|
+
* decisions to their operation telemetry.
|
|
95
|
+
*/
|
|
96
|
+
export declare function selectReasoningArtifactsForReplay(input: {
|
|
97
|
+
artifacts: readonly ReasoningArtifact[] | undefined;
|
|
98
|
+
target: ReasoningArtifactReplayTarget;
|
|
99
|
+
context?: ReasoningArtifactReplayContext | undefined;
|
|
100
|
+
observe?: ReasoningArtifactReplayObserver | undefined;
|
|
101
|
+
}): readonly ReasoningArtifact[];
|