@aexol/spectral 0.9.230 → 0.9.234
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 +2 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +89 -14
- package/dist/backend/generated-images.d.ts +1 -1
- package/dist/backend/generated-images.d.ts.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +12 -1
- package/dist/designer/data/skills/blog-post.d.ts +3 -0
- package/dist/designer/data/skills/blog-post.d.ts.map +1 -0
- package/dist/designer/data/skills/blog-post.js +84 -0
- package/dist/designer/data/skills/blog-post.ts +87 -0
- package/dist/designer/data/skills/critique.d.ts +3 -0
- package/dist/designer/data/skills/critique.d.ts.map +1 -0
- package/dist/designer/data/skills/critique.js +109 -0
- package/dist/designer/data/skills/critique.ts +112 -0
- package/dist/designer/data/skills/dashboard.d.ts +3 -0
- package/dist/designer/data/skills/dashboard.d.ts.map +1 -0
- package/dist/designer/data/skills/dashboard.js +165 -0
- package/dist/designer/data/skills/dashboard.ts +168 -0
- package/dist/designer/data/skills/design-brief.d.ts +3 -0
- package/dist/designer/data/skills/design-brief.d.ts.map +1 -0
- package/dist/designer/data/skills/design-brief.js +141 -0
- package/dist/designer/data/skills/design-brief.ts +144 -0
- package/dist/designer/data/skills/design-skill.d.ts +10 -0
- package/dist/designer/data/skills/design-skill.d.ts.map +1 -0
- package/dist/designer/data/skills/design-skill.js +1 -0
- package/dist/designer/data/skills/design-skill.ts +9 -0
- package/dist/designer/data/skills/docs-page.d.ts +3 -0
- package/dist/designer/data/skills/docs-page.d.ts.map +1 -0
- package/dist/designer/data/skills/docs-page.js +68 -0
- package/dist/designer/data/skills/docs-page.ts +71 -0
- package/dist/designer/data/skills/index.d.ts +3 -0
- package/dist/designer/data/skills/index.d.ts.map +1 -0
- package/dist/designer/data/skills/index.js +28 -0
- package/dist/designer/data/skills/index.ts +30 -0
- package/dist/designer/data/skills/magazine-poster.d.ts +3 -0
- package/dist/designer/data/skills/magazine-poster.d.ts.map +1 -0
- package/dist/designer/data/skills/magazine-poster.js +70 -0
- package/dist/designer/data/skills/magazine-poster.ts +73 -0
- package/dist/designer/data/skills/mobile-app.d.ts +3 -0
- package/dist/designer/data/skills/mobile-app.d.ts.map +1 -0
- package/dist/designer/data/skills/mobile-app.js +229 -0
- package/dist/designer/data/skills/mobile-app.ts +232 -0
- package/dist/designer/data/skills/motion-frames.d.ts +3 -0
- package/dist/designer/data/skills/motion-frames.d.ts.map +1 -0
- package/dist/designer/data/skills/motion-frames.js +121 -0
- package/dist/designer/data/skills/motion-frames.ts +124 -0
- package/dist/designer/data/skills/pricing-page.d.ts +3 -0
- package/dist/designer/data/skills/pricing-page.d.ts.map +1 -0
- package/dist/designer/data/skills/pricing-page.js +76 -0
- package/dist/designer/data/skills/pricing-page.ts +79 -0
- package/dist/designer/data/skills/saas-landing.d.ts +3 -0
- package/dist/designer/data/skills/saas-landing.d.ts.map +1 -0
- package/dist/designer/data/skills/saas-landing.js +71 -0
- package/dist/designer/data/skills/saas-landing.ts +74 -0
- package/dist/designer/data/skills/slide-deck.d.ts +3 -0
- package/dist/designer/data/skills/slide-deck.d.ts.map +1 -0
- package/dist/designer/data/skills/slide-deck.js +213 -0
- package/dist/designer/data/skills/slide-deck.ts +216 -0
- package/dist/designer/data/skills/social-carousel.d.ts +3 -0
- package/dist/designer/data/skills/social-carousel.d.ts.map +1 -0
- package/dist/designer/data/skills/social-carousel.js +135 -0
- package/dist/designer/data/skills/social-carousel.ts +138 -0
- package/dist/designer/data/skills/web-prototype.d.ts +3 -0
- package/dist/designer/data/skills/web-prototype.d.ts.map +1 -0
- package/dist/designer/data/skills/web-prototype.js +159 -0
- package/dist/designer/data/skills/web-prototype.ts +162 -0
- package/dist/designer/skills.d.ts +4 -10
- package/dist/designer/skills.d.ts.map +1 -1
- package/dist/designer/skills.js +2 -1643
- package/dist/extensions/logic-trace.d.ts +1 -1
- package/dist/extensions/logic-trace.d.ts.map +1 -1
- package/dist/extensions/logic-trace.js +199 -70
- package/dist/extensions/video-generation/index.d.ts +3 -0
- package/dist/extensions/video-generation/index.d.ts.map +1 -0
- package/dist/extensions/video-generation/index.js +299 -0
- package/dist/extensions/wizard/index.js +9 -1
- package/dist/generated/parser/ast/nodes.d.ts +115 -0
- package/dist/generated/parser/ast/nodes.d.ts.map +1 -0
- package/dist/generated/parser/ast/nodes.js +8 -0
- package/dist/generated/parser/lexer/lexer.d.ts +28 -0
- package/dist/generated/parser/lexer/lexer.d.ts.map +1 -0
- package/dist/generated/parser/{lexer.js → lexer/lexer.js} +1 -180
- package/dist/generated/parser/{lexer.d.ts → lexer/tokens.d.ts} +5 -24
- package/dist/generated/parser/lexer/tokens.d.ts.map +1 -0
- package/dist/generated/parser/lexer/tokens.js +187 -0
- package/dist/generated/parser/mod.d.ts +5 -7
- package/dist/generated/parser/mod.d.ts.map +1 -1
- package/dist/generated/parser/mod.js +2 -1
- package/dist/generated/parser/parser/cursor.d.ts +47 -0
- package/dist/generated/parser/parser/cursor.d.ts.map +1 -0
- package/dist/generated/parser/parser/cursor.js +12 -0
- package/dist/generated/parser/parser/definitions.d.ts +16 -0
- package/dist/generated/parser/parser/definitions.d.ts.map +1 -0
- package/dist/generated/parser/parser/definitions.js +353 -0
- package/dist/generated/parser/parser/expressions.d.ts +17 -0
- package/dist/generated/parser/parser/expressions.d.ts.map +1 -0
- package/dist/generated/parser/parser/expressions.js +165 -0
- package/dist/generated/parser/parser.d.ts +18 -133
- package/dist/generated/parser/parser.d.ts.map +1 -1
- package/dist/generated/parser/parser.js +9 -505
- package/dist/generated/parser/tokenizer.d.ts +1 -2
- package/dist/generated/parser/tokenizer.d.ts.map +1 -1
- package/dist/generated/parser/tokenizer.js +2 -1
- package/dist/generated/parser/validator.d.ts +1 -1
- package/dist/generated/parser/validator.d.ts.map +1 -1
- package/dist/generated/zeus/const.d.ts.map +1 -1
- package/dist/generated/zeus/const.js +30 -0
- package/dist/generated/zeus/index.d.ts +140 -0
- package/dist/generated/zeus/index.d.ts.map +1 -1
- package/dist/generated/zeus/index.js +5 -0
- package/dist/mcp/glimpse-ui.js +9 -1
- package/dist/relay/dispatcher.d.ts +23 -104
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +21 -1130
- package/dist/relay/rest.d.ts +31 -0
- package/dist/relay/rest.d.ts.map +1 -0
- package/dist/relay/rest.js +85 -0
- package/dist/relay/routing.d.ts +109 -0
- package/dist/relay/routing.d.ts.map +1 -0
- package/dist/relay/routing.js +669 -0
- package/dist/relay/wizard-login.d.ts +17 -0
- package/dist/relay/wizard-login.d.ts.map +1 -0
- package/dist/relay/wizard-login.js +419 -0
- package/dist/sdk/agent-core/agent-loop.d.ts +2 -9
- package/dist/sdk/agent-core/agent-loop.d.ts.map +1 -1
- package/dist/sdk/agent-core/agent-loop.js +17 -291
- package/dist/sdk/agent-core/agent.d.ts +11 -4
- package/dist/sdk/agent-core/agent.d.ts.map +1 -1
- package/dist/sdk/agent-core/agent.js +16 -4
- package/dist/sdk/agent-core/tool-call-registry.d.ts +75 -0
- package/dist/sdk/agent-core/tool-call-registry.d.ts.map +1 -0
- package/dist/sdk/agent-core/tool-call-registry.js +131 -0
- package/dist/sdk/agent-core/tool-execution.d.ts +33 -0
- package/dist/sdk/agent-core/tool-execution.d.ts.map +1 -0
- package/dist/sdk/agent-core/tool-execution.js +399 -0
- package/dist/sdk/agent-core/types.d.ts +15 -4
- package/dist/sdk/agent-core/types.d.ts.map +1 -1
- package/dist/sdk/ai/env-api-keys.js +9 -1
- package/dist/sdk/ai/index.d.ts +3 -0
- package/dist/sdk/ai/index.d.ts.map +1 -1
- package/dist/sdk/ai/index.js +3 -0
- package/dist/sdk/ai/providers/faux.d.ts.map +1 -1
- package/dist/sdk/ai/providers/faux.js +3 -0
- package/dist/sdk/ai/providers/leaked-tool-call-parser.d.ts +39 -6
- package/dist/sdk/ai/providers/leaked-tool-call-parser.d.ts.map +1 -1
- package/dist/sdk/ai/providers/leaked-tool-call-parser.js +159 -18
- package/dist/sdk/ai/providers/openai/reasoning-replay.d.ts +48 -0
- package/dist/sdk/ai/providers/openai/reasoning-replay.d.ts.map +1 -0
- package/dist/sdk/ai/providers/openai/reasoning-replay.js +209 -0
- package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -1
- package/dist/sdk/ai/providers/openai-completions.js +23 -211
- package/dist/sdk/ai/providers/openrouter-videos.d.ts +3 -0
- package/dist/sdk/ai/providers/openrouter-videos.d.ts.map +1 -0
- package/dist/sdk/ai/providers/openrouter-videos.js +412 -0
- package/dist/sdk/ai/providers/register-builtins.d.ts.map +1 -1
- package/dist/sdk/ai/providers/register-builtins.js +6 -0
- package/dist/sdk/ai/providers/simple-options.d.ts +1 -6
- package/dist/sdk/ai/providers/simple-options.d.ts.map +1 -1
- package/dist/sdk/ai/providers/simple-options.js +0 -22
- package/dist/sdk/ai/providers/transform-messages.d.ts.map +1 -1
- package/dist/sdk/ai/providers/transform-messages.js +52 -1
- package/dist/sdk/ai/types.d.ts +91 -10
- package/dist/sdk/ai/types.d.ts.map +1 -1
- package/dist/sdk/ai/video-models.d.ts +10 -0
- package/dist/sdk/ai/video-models.d.ts.map +1 -0
- package/dist/sdk/ai/video-models.generated.d.ts +440 -0
- package/dist/sdk/ai/video-models.generated.d.ts.map +1 -0
- package/dist/sdk/ai/video-models.generated.js +441 -0
- package/dist/sdk/ai/video-models.js +22 -0
- package/dist/sdk/ai/videos-api-registry.d.ts +14 -0
- package/dist/sdk/ai/videos-api-registry.d.ts.map +1 -0
- package/dist/sdk/ai/videos-api-registry.js +21 -0
- package/dist/sdk/ai/videos.d.ts +4 -0
- package/dist/sdk/ai/videos.d.ts.map +1 -0
- package/dist/sdk/ai/videos.js +13 -0
- package/dist/sdk/coding-agent/core/agent-session.d.ts +8 -0
- package/dist/sdk/coding-agent/core/agent-session.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/agent-session.js +11 -0
- package/dist/sdk/coding-agent/core/compaction/compaction.d.ts +6 -118
- package/dist/sdk/coding-agent/core/compaction/compaction.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/compaction/compaction.js +11 -733
- package/dist/sdk/coding-agent/core/compaction/cut-points.d.ts +58 -0
- package/dist/sdk/coding-agent/core/compaction/cut-points.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/cut-points.js +191 -0
- package/dist/sdk/coding-agent/core/compaction/dedupe.d.ts +28 -0
- package/dist/sdk/coding-agent/core/compaction/dedupe.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/dedupe.js +156 -0
- package/dist/sdk/coding-agent/core/compaction/summarize.d.ts +21 -0
- package/dist/sdk/coding-agent/core/compaction/summarize.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/summarize.js +181 -0
- package/dist/sdk/coding-agent/core/compaction/tokens.d.ts +47 -0
- package/dist/sdk/coding-agent/core/compaction/tokens.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/tokens.js +224 -0
- package/dist/sdk/coding-agent/core/extensions/loader.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/loader.js +14 -0
- package/dist/sdk/coding-agent/core/extensions/native-extensions.d.ts +26 -0
- package/dist/sdk/coding-agent/core/extensions/native-extensions.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/native-extensions.js +23 -0
- package/dist/sdk/coding-agent/core/extensions/session-events.d.ts +157 -0
- package/dist/sdk/coding-agent/core/extensions/session-events.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/session-events.js +13 -0
- package/dist/sdk/coding-agent/core/extensions/types.d.ts +10 -367
- package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/types.js +2 -10
- package/dist/sdk/coding-agent/core/extensions/ui-types.d.ts +219 -0
- package/dist/sdk/coding-agent/core/extensions/ui-types.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/ui-types.js +4 -0
- package/dist/sdk/coding-agent/core/messages.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/messages.js +42 -2
- package/dist/sdk/coding-agent/core/package/default-package-manager.d.ts +115 -0
- package/dist/sdk/coding-agent/core/package/default-package-manager.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/default-package-manager.js +1184 -0
- package/dist/sdk/coding-agent/core/package/discovery.d.ts +20 -0
- package/dist/sdk/coding-agent/core/package/discovery.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/discovery.js +283 -0
- package/dist/sdk/coding-agent/core/package/ignore.d.ts +29 -0
- package/dist/sdk/coding-agent/core/package/ignore.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/ignore.js +235 -0
- package/dist/sdk/coding-agent/core/package/types.d.ts +128 -0
- package/dist/sdk/coding-agent/core/package/types.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/types.js +18 -0
- package/dist/sdk/coding-agent/core/package/update-check.d.ts +43 -0
- package/dist/sdk/coding-agent/core/package/update-check.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/update-check.js +253 -0
- package/dist/sdk/coding-agent/core/package-manager.d.ts +2 -188
- package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/package-manager.js +1 -1940
- package/dist/sdk/coding-agent/core/resource-loader.d.ts +11 -0
- package/dist/sdk/coding-agent/core/resource-loader.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/resource-loader.js +23 -6
- package/dist/sdk/coding-agent/core/sdk.d.ts +24 -2
- package/dist/sdk/coding-agent/core/sdk.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/sdk.js +15 -3
- package/dist/sdk/coding-agent/core/session/migrate.d.ts +18 -0
- package/dist/sdk/coding-agent/core/session/migrate.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/session/migrate.js +78 -0
- package/dist/sdk/coding-agent/core/session/types.d.ts +165 -0
- package/dist/sdk/coding-agent/core/session/types.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/session/types.js +4 -0
- package/dist/sdk/coding-agent/core/session-manager.d.ts +3 -161
- package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/session-manager.js +4 -72
- package/dist/sdk/coding-agent/core/settings-manager.d.ts +0 -8
- package/dist/sdk/coding-agent/core/settings-manager.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/settings-manager.js +3 -3
- package/dist/sdk/coding-agent/index.d.ts +2 -2
- package/dist/sdk/coding-agent/index.d.ts.map +1 -1
- package/dist/sdk/coding-agent/index.js +1 -1
- package/dist/sdk-public.d.ts +96 -0
- package/dist/sdk-public.d.ts.map +1 -0
- package/dist/sdk-public.js +109 -0
- package/dist/server/agent-bridge/rehydrate.d.ts +2 -2
- package/dist/server/agent-bridge/rehydrate.d.ts.map +1 -1
- package/dist/server/agent-bridge/rehydrate.js +14 -0
- package/dist/server/agent-bridge.d.ts +8 -2
- package/dist/server/agent-bridge.d.ts.map +1 -1
- package/dist/server/agent-bridge.js +25 -2
- package/dist/server/session-stream.d.ts +19 -0
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +35 -0
- package/dist/server/wire.d.ts +13 -0
- package/dist/server/wire.d.ts.map +1 -1
- package/package.json +8 -2
- package/dist/generated/parser/lexer.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import OpenAI from "openai";
|
|
2
|
-
import { coerceLeakedParameterValue, extractLeakedToolCalls, findLeakedToolCallOpener, } from "./leaked-tool-call-parser.js";
|
|
2
|
+
import { coerceLeakedParameterValue, extractLeakedToolCalls, findLeakedToolCallOpener, salvageLeakedToolCallTail, } from "./leaked-tool-call-parser.js";
|
|
3
3
|
import { backendHostedImageResolver } from "../utils/hosted-image-resolver.js";
|
|
4
4
|
import { getApiUrl, readConfig } from "../../../config.js";
|
|
5
5
|
import { getEnvApiKey } from "../env-api-keys.js";
|
|
@@ -13,6 +13,7 @@ import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
|
|
|
13
13
|
import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js";
|
|
14
14
|
import { buildBaseOptions } from "./simple-options.js";
|
|
15
15
|
import { transformMessages } from "./transform-messages.js";
|
|
16
|
+
import { assistantHasReasoningReplay, extractReasoningDelta, extractReasoningMetadata, extractReasoningSignature, hasEncryptedReasoningMetadata, mergeThinkingMetadata, normalizeReasoningReplayField, setAssistantReasoningField, setAssistantReasoningLifecycleSidecars, splitInlineThinkingDelta, } from "./openai/reasoning-replay.js";
|
|
16
17
|
/**
|
|
17
18
|
* Check if conversation messages contain tool calls or tool results.
|
|
18
19
|
* This is needed because Anthropic (via proxy) requires the tools param
|
|
@@ -76,15 +77,6 @@ async function backendImageBaseUrl(explicit) {
|
|
|
76
77
|
function defaultWarn(message) {
|
|
77
78
|
console.warn(`[spectral] ${message}`);
|
|
78
79
|
}
|
|
79
|
-
const SAFE_REASONING_REPLAY_FIELDS = [
|
|
80
|
-
"reasoning_content",
|
|
81
|
-
"reasoning",
|
|
82
|
-
"reasoning_text",
|
|
83
|
-
"reasoning_summary",
|
|
84
|
-
"reasoning_summary_text",
|
|
85
|
-
"summary_text",
|
|
86
|
-
"summary",
|
|
87
|
-
];
|
|
88
80
|
function isOpenRouterModel(model) {
|
|
89
81
|
return model.provider === "openrouter" ||
|
|
90
82
|
model.baseUrl.includes("openrouter.ai");
|
|
@@ -99,200 +91,6 @@ function resolveCacheRetention(cacheRetention) {
|
|
|
99
91
|
}
|
|
100
92
|
return "short";
|
|
101
93
|
}
|
|
102
|
-
function asRecord(value) {
|
|
103
|
-
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
104
|
-
? value
|
|
105
|
-
: undefined;
|
|
106
|
-
}
|
|
107
|
-
function collectReasoningText(value) {
|
|
108
|
-
if (typeof value === "string")
|
|
109
|
-
return value;
|
|
110
|
-
if (Array.isArray(value))
|
|
111
|
-
return value.map(collectReasoningText).join("");
|
|
112
|
-
const record = asRecord(value);
|
|
113
|
-
if (!record)
|
|
114
|
-
return "";
|
|
115
|
-
const direct = [
|
|
116
|
-
record.delta,
|
|
117
|
-
record.text,
|
|
118
|
-
record.value,
|
|
119
|
-
record.output_text,
|
|
120
|
-
record.reasoning_text,
|
|
121
|
-
record.reasoning_content,
|
|
122
|
-
record.reasoning_summary,
|
|
123
|
-
record.reasoning_summary_text,
|
|
124
|
-
record.summary_text,
|
|
125
|
-
];
|
|
126
|
-
for (const candidate of direct) {
|
|
127
|
-
if (typeof candidate === "string" && candidate.length > 0)
|
|
128
|
-
return candidate;
|
|
129
|
-
}
|
|
130
|
-
return [record.summary, record.parts, record.content, record.annotations]
|
|
131
|
-
.map(collectReasoningText)
|
|
132
|
-
.join("");
|
|
133
|
-
}
|
|
134
|
-
function extractReasoningDelta(deltaFields) {
|
|
135
|
-
const reasoningFields = [
|
|
136
|
-
"reasoning_content",
|
|
137
|
-
"reasoning",
|
|
138
|
-
"reasoning_text",
|
|
139
|
-
"reasoning_summary",
|
|
140
|
-
"reasoning_summary_text",
|
|
141
|
-
"summary_text",
|
|
142
|
-
"summary",
|
|
143
|
-
];
|
|
144
|
-
for (const field of reasoningFields) {
|
|
145
|
-
const delta = collectReasoningText(deltaFields[field]);
|
|
146
|
-
if (delta.length > 0)
|
|
147
|
-
return { field, delta };
|
|
148
|
-
}
|
|
149
|
-
const details = collectReasoningText(deltaFields.reasoning_details);
|
|
150
|
-
return details.length > 0
|
|
151
|
-
? { field: "reasoning_details", delta: details }
|
|
152
|
-
: undefined;
|
|
153
|
-
}
|
|
154
|
-
function extractReasoningSignature(value) {
|
|
155
|
-
if (typeof value === "string" && value.length > 0)
|
|
156
|
-
return value;
|
|
157
|
-
const record = asRecord(value);
|
|
158
|
-
if (!record)
|
|
159
|
-
return undefined;
|
|
160
|
-
for (const candidate of [
|
|
161
|
-
record.id,
|
|
162
|
-
record.item_id,
|
|
163
|
-
record.data,
|
|
164
|
-
]) {
|
|
165
|
-
if (typeof candidate === "string" && candidate.length > 0)
|
|
166
|
-
return candidate;
|
|
167
|
-
}
|
|
168
|
-
return undefined;
|
|
169
|
-
}
|
|
170
|
-
function extractReasoningMetadata(value) {
|
|
171
|
-
const record = asRecord(value);
|
|
172
|
-
if (!record)
|
|
173
|
-
return undefined;
|
|
174
|
-
const metadata = {};
|
|
175
|
-
for (const key of [
|
|
176
|
-
"id",
|
|
177
|
-
"item_id",
|
|
178
|
-
"output_index",
|
|
179
|
-
"summary_index",
|
|
180
|
-
"encrypted_content",
|
|
181
|
-
"type",
|
|
182
|
-
]) {
|
|
183
|
-
if (record[key] !== undefined && record[key] !== null)
|
|
184
|
-
metadata[key] = record[key];
|
|
185
|
-
}
|
|
186
|
-
return Object.keys(metadata).length > 0 ? metadata : undefined;
|
|
187
|
-
}
|
|
188
|
-
function stringMetadata(metadata, key) {
|
|
189
|
-
const value = metadata?.[key];
|
|
190
|
-
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
191
|
-
}
|
|
192
|
-
function numberMetadata(metadata, key) {
|
|
193
|
-
const value = metadata?.[key];
|
|
194
|
-
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
195
|
-
}
|
|
196
|
-
function hasEncryptedReasoningMetadata(block) {
|
|
197
|
-
return stringMetadata(block.thinkingMetadata, "encrypted_content") !== undefined;
|
|
198
|
-
}
|
|
199
|
-
function buildResponsesReasoningSidecar(metadata, includeOutputIndex) {
|
|
200
|
-
const sidecar = {};
|
|
201
|
-
const id = stringMetadata(metadata, "id");
|
|
202
|
-
if (id)
|
|
203
|
-
sidecar.id = id;
|
|
204
|
-
const itemId = stringMetadata(metadata, "item_id");
|
|
205
|
-
if (itemId)
|
|
206
|
-
sidecar.item_id = itemId;
|
|
207
|
-
if (includeOutputIndex) {
|
|
208
|
-
const outputIndex = numberMetadata(metadata, "output_index");
|
|
209
|
-
if (outputIndex !== undefined)
|
|
210
|
-
sidecar.output_index = outputIndex;
|
|
211
|
-
const summaryIndex = numberMetadata(metadata, "summary_index");
|
|
212
|
-
if (summaryIndex !== undefined)
|
|
213
|
-
sidecar.summary_index = summaryIndex;
|
|
214
|
-
}
|
|
215
|
-
const encryptedContent = stringMetadata(metadata, "encrypted_content");
|
|
216
|
-
if (encryptedContent)
|
|
217
|
-
sidecar.encrypted_content = encryptedContent;
|
|
218
|
-
return sidecar;
|
|
219
|
-
}
|
|
220
|
-
function isSafeReasoningReplayField(field) {
|
|
221
|
-
return SAFE_REASONING_REPLAY_FIELDS.includes(field);
|
|
222
|
-
}
|
|
223
|
-
function normalizeReasoningReplayField(field, model) {
|
|
224
|
-
const normalized = model.provider === "opencode-go" && field === "reasoning"
|
|
225
|
-
? "reasoning_content"
|
|
226
|
-
: field;
|
|
227
|
-
return normalized && isSafeReasoningReplayField(normalized)
|
|
228
|
-
? normalized
|
|
229
|
-
: "reasoning_content";
|
|
230
|
-
}
|
|
231
|
-
function setAssistantReasoningField(message, field, value) {
|
|
232
|
-
const messageWithSidecars = message;
|
|
233
|
-
messageWithSidecars[field] = value;
|
|
234
|
-
}
|
|
235
|
-
function setAssistantReasoningLifecycleSidecars(message, blocks) {
|
|
236
|
-
const encryptedBlock = blocks.find(hasEncryptedReasoningMetadata);
|
|
237
|
-
if (!encryptedBlock)
|
|
238
|
-
return;
|
|
239
|
-
const messageWithSidecars = message;
|
|
240
|
-
messageWithSidecars.reasoning_start = buildResponsesReasoningSidecar(encryptedBlock.thinkingMetadata, true);
|
|
241
|
-
messageWithSidecars.reasoning_content = blocks
|
|
242
|
-
.map((block) => block.thinking)
|
|
243
|
-
.join("\n");
|
|
244
|
-
messageWithSidecars.reasoning_end = buildResponsesReasoningSidecar(encryptedBlock.thinkingMetadata, false);
|
|
245
|
-
}
|
|
246
|
-
function assistantHasReasoningReplay(message) {
|
|
247
|
-
const messageWithSidecars = message;
|
|
248
|
-
return messageWithSidecars.reasoning_start !== undefined ||
|
|
249
|
-
messageWithSidecars.reasoning_end !== undefined ||
|
|
250
|
-
SAFE_REASONING_REPLAY_FIELDS.some((field) => typeof messageWithSidecars[field] === "string");
|
|
251
|
-
}
|
|
252
|
-
function mergeThinkingMetadata(block, metadata) {
|
|
253
|
-
if (!metadata)
|
|
254
|
-
return;
|
|
255
|
-
block.thinkingMetadata = { ...(block.thinkingMetadata ?? {}), ...metadata };
|
|
256
|
-
}
|
|
257
|
-
function splitInlineThinkingDelta(pending, inInlineThinking, delta) {
|
|
258
|
-
const parts = [];
|
|
259
|
-
let buffer = pending + delta;
|
|
260
|
-
let thinking = inInlineThinking;
|
|
261
|
-
const append = (type, value) => {
|
|
262
|
-
if (!value)
|
|
263
|
-
return;
|
|
264
|
-
const last = parts[parts.length - 1];
|
|
265
|
-
if (last?.type === type) {
|
|
266
|
-
last.delta += value;
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
parts.push({ type, delta: value });
|
|
270
|
-
};
|
|
271
|
-
while (buffer.length > 0) {
|
|
272
|
-
const tag = thinking ? "</think>" : "<think>";
|
|
273
|
-
const idx = buffer.toLowerCase().indexOf(tag);
|
|
274
|
-
if (idx >= 0) {
|
|
275
|
-
append(thinking ? "thinking" : "text", buffer.slice(0, idx));
|
|
276
|
-
buffer = buffer.slice(idx + tag.length);
|
|
277
|
-
thinking = !thinking;
|
|
278
|
-
continue;
|
|
279
|
-
}
|
|
280
|
-
const maxTagLength = "</think>".length - 1;
|
|
281
|
-
let keep = 0;
|
|
282
|
-
const limit = Math.min(maxTagLength, buffer.length);
|
|
283
|
-
for (let size = limit; size > 0; size--) {
|
|
284
|
-
const suffix = buffer.slice(-size).toLowerCase();
|
|
285
|
-
if ("<think>".startsWith(suffix) || "</think>".startsWith(suffix)) {
|
|
286
|
-
keep = size;
|
|
287
|
-
break;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
append(thinking ? "thinking" : "text", buffer.slice(0, buffer.length - keep));
|
|
291
|
-
buffer = buffer.slice(buffer.length - keep);
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
return { parts, pending: buffer, inInlineThinking: thinking };
|
|
295
|
-
}
|
|
296
94
|
export const streamOpenAICompletions = (model, context, options) => {
|
|
297
95
|
const stream = new AssistantMessageEventStream();
|
|
298
96
|
(async () => {
|
|
@@ -381,9 +179,11 @@ export const streamOpenAICompletions = (model, context, options) => {
|
|
|
381
179
|
let inlineThinkingPending = "";
|
|
382
180
|
let inInlineThinking = false;
|
|
383
181
|
// Leaked tool-call XML: some OpenRouter models emit antml-style
|
|
384
|
-
// markup in plain content instead of native tool_calls
|
|
385
|
-
//
|
|
386
|
-
//
|
|
182
|
+
// markup in plain content instead of native tool_calls — either a
|
|
183
|
+
// wrapper block or orphan pi-style invoke blocks with no wrapper
|
|
184
|
+
// at all. Text is buffered here until a complete block arrives,
|
|
185
|
+
// then parsed into real toolCall blocks (see
|
|
186
|
+
// leaked-tool-call-parser.ts).
|
|
387
187
|
let leakMode = false;
|
|
388
188
|
let leakBuffer = "";
|
|
389
189
|
let leakPending = "";
|
|
@@ -750,11 +550,23 @@ export const streamOpenAICompletions = (model, context, options) => {
|
|
|
750
550
|
}
|
|
751
551
|
inlineThinkingPending = "";
|
|
752
552
|
}
|
|
753
|
-
// Flush leak buffers. A never-closed block is
|
|
754
|
-
//
|
|
755
|
-
//
|
|
553
|
+
// Flush leak buffers. A never-closed block is first offered to the
|
|
554
|
+
// end-of-stream salvage (models that were cut off after emitting
|
|
555
|
+
// complete parameter values); whatever it cannot recover is emitted
|
|
556
|
+
// as plain text (graceful degradation) so no content is lost. A
|
|
557
|
+
// held-back tail without an opener is just prose.
|
|
756
558
|
if (leakMode && leakBuffer) {
|
|
757
|
-
|
|
559
|
+
const salvaged = salvageLeakedToolCallTail(leakBuffer);
|
|
560
|
+
if (salvaged &&
|
|
561
|
+
salvaged.length > 0 &&
|
|
562
|
+
salvaged.every((call) => availableToolNames.has(call.name))) {
|
|
563
|
+
for (const call of salvaged)
|
|
564
|
+
emitSyntheticToolCall(call);
|
|
565
|
+
emittedLeakedToolCalls = true;
|
|
566
|
+
}
|
|
567
|
+
else {
|
|
568
|
+
emitTextDelta(leakBuffer);
|
|
569
|
+
}
|
|
758
570
|
leakBuffer = "";
|
|
759
571
|
leakMode = false;
|
|
760
572
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ProviderVideosOptions, VideosContext, VideosModel, VideosResult } from "../types.js";
|
|
2
|
+
export declare function generateOpenRouterVideos(model: VideosModel<"openrouter-videos">, context: VideosContext, options?: ProviderVideosOptions): Promise<VideosResult>;
|
|
3
|
+
//# sourceMappingURL=openrouter-videos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-videos.d.ts","sourceRoot":"","sources":["../../../../src/sdk/ai/providers/openrouter-videos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,qBAAqB,EAIrB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,MAAM,aAAa,CAAC;AAgarB,wBAAsB,wBAAwB,CAC7C,KAAK,EAAE,WAAW,CAAC,mBAAmB,CAAC,EACvC,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,YAAY,CAAC,CAkCvB"}
|