@getpaseo/server 0.1.85 → 0.1.87
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/dist/scripts/supervisor-entrypoint.js +1 -0
- package/dist/server/server/agent/agent-metadata-generator.d.ts +9 -0
- package/dist/server/server/agent/agent-metadata-generator.js +11 -2
- package/dist/server/server/agent/agent-response-loop.d.ts +1 -1
- package/dist/server/server/agent/agent-response-loop.js +3 -13
- package/dist/server/server/agent/create-agent/create.d.ts +2 -0
- package/dist/server/server/agent/create-agent/create.js +7 -0
- package/dist/server/server/agent/import-sessions.d.ts +3 -0
- package/dist/server/server/agent/import-sessions.js +11 -0
- package/dist/server/server/agent/providers/claude/agent.d.ts +2 -1
- package/dist/server/server/agent/providers/claude/agent.js +70 -0
- package/dist/server/server/agent/providers/claude/feature-definitions.d.ts +8 -0
- package/dist/server/server/agent/providers/claude/feature-definitions.js +36 -0
- package/dist/server/server/agent/providers/opencode-agent.js +4 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +6 -3
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +5 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js +62 -0
- package/dist/server/server/agent/structured-generation-providers.d.ts +29 -0
- package/dist/server/server/agent/structured-generation-providers.js +192 -0
- package/dist/server/server/bootstrap.d.ts +7 -0
- package/dist/server/server/bootstrap.js +3 -0
- package/dist/server/server/config.js +1 -0
- package/dist/server/server/daemon-config-store.js +46 -6
- package/dist/server/server/daemon-worker.js +1 -0
- package/dist/server/server/file-explorer/service.js +4 -4
- package/dist/server/server/persisted-config.d.ts +77 -22
- package/dist/server/server/persisted-config.js +13 -0
- package/dist/server/server/session.d.ts +3 -2
- package/dist/server/server/session.js +76 -24
- package/dist/server/server/speech/providers/local/runtime.js +52 -133
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +9 -2
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +7 -0
- package/dist/server/server/speech/providers/local/worker-bytes.d.ts +4 -0
- package/dist/server/server/speech/providers/local/worker-bytes.js +9 -0
- package/dist/server/server/speech/providers/local/worker-client.d.ts +80 -0
- package/dist/server/server/speech/providers/local/worker-client.js +438 -0
- package/dist/server/server/speech/providers/local/worker-process.d.ts +2 -0
- package/dist/server/server/speech/providers/local/worker-process.js +270 -0
- package/dist/server/server/speech/providers/local/worker-protocol.d.ts +95 -0
- package/dist/server/server/speech/providers/local/worker-protocol.js +2 -0
- package/dist/server/server/websocket-server.js +2 -0
- package/dist/server/server/worktree-branch-name-generator.d.ts +9 -0
- package/dist/server/server/worktree-branch-name-generator.js +11 -2
- package/dist/src/server/persisted-config.js +13 -0
- package/package.json +5 -5
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
export const DEFAULT_STRUCTURED_GENERATION_PROVIDERS = [
|
|
2
|
+
{ modelSubstring: "haiku" },
|
|
3
|
+
{ modelSubstring: "gpt-5.4-mini", thinkingOptionId: "low" },
|
|
4
|
+
{ modelSubstring: "minimax-m2.5" },
|
|
5
|
+
{ modelSubstring: "nemotron-3-super" },
|
|
6
|
+
];
|
|
7
|
+
export async function resolveStructuredGenerationProviders(options) {
|
|
8
|
+
const providerEntries = await options.providerSnapshotManager.listProviders({
|
|
9
|
+
cwd: options.cwd,
|
|
10
|
+
wait: true,
|
|
11
|
+
});
|
|
12
|
+
const enabledEntries = providerEntries.filter((entry) => entry.enabled);
|
|
13
|
+
const modelEntries = enabledEntries.filter((entry) => (entry.models?.length ?? 0) > 0);
|
|
14
|
+
const entriesByProvider = new Map(enabledEntries.map((entry) => [entry.provider, entry]));
|
|
15
|
+
const providers = [];
|
|
16
|
+
for (const configured of readConfiguredProviders(options.daemonConfig)) {
|
|
17
|
+
const resolvedConfigured = resolveConfiguredCandidate(configured, modelEntries, entriesByProvider);
|
|
18
|
+
if (!resolvedConfigured) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
providers.push(resolvedConfigured);
|
|
22
|
+
}
|
|
23
|
+
for (const identifier of DEFAULT_STRUCTURED_GENERATION_PROVIDERS) {
|
|
24
|
+
const resolved = resolveByModelSubstring(modelEntries, identifier);
|
|
25
|
+
if (resolved) {
|
|
26
|
+
providers.push(resolved);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const currentSelection = resolveCurrentSelection(options.currentSelection, modelEntries, entriesByProvider);
|
|
30
|
+
if (currentSelection) {
|
|
31
|
+
providers.push(currentSelection);
|
|
32
|
+
}
|
|
33
|
+
return dedupeProviders(providers);
|
|
34
|
+
}
|
|
35
|
+
function resolveCurrentSelection(selection, readyEntries, entriesByProvider) {
|
|
36
|
+
if (!selection) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const provider = selection.provider?.trim();
|
|
40
|
+
if (!provider) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const normalized = resolveConfiguredCandidate({
|
|
44
|
+
provider,
|
|
45
|
+
...(selection.model ? { model: selection.model } : {}),
|
|
46
|
+
...(selection.thinkingOptionId ? { thinkingOptionId: selection.thinkingOptionId } : {}),
|
|
47
|
+
}, readyEntries, entriesByProvider);
|
|
48
|
+
if (normalized) {
|
|
49
|
+
return normalized;
|
|
50
|
+
}
|
|
51
|
+
const explicitModel = selection.model?.trim();
|
|
52
|
+
if (explicitModel) {
|
|
53
|
+
return {
|
|
54
|
+
provider,
|
|
55
|
+
model: explicitModel,
|
|
56
|
+
...(selection.thinkingOptionId ? { thinkingOptionId: selection.thinkingOptionId } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const model = selectDefaultModel(entriesByProvider.get(provider)?.models ?? []);
|
|
60
|
+
if (!model) {
|
|
61
|
+
return { provider };
|
|
62
|
+
}
|
|
63
|
+
const thinkingOptionId = resolveThinkingOptionId(model, selection.thinkingOptionId);
|
|
64
|
+
return {
|
|
65
|
+
provider,
|
|
66
|
+
model: model.id,
|
|
67
|
+
...(thinkingOptionId ? { thinkingOptionId } : {}),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function resolveConfiguredCandidate(candidate, readyEntries, entriesByProvider) {
|
|
71
|
+
const provider = candidate.provider.trim();
|
|
72
|
+
if (!provider) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const topLevelEntry = entriesByProvider.get(provider);
|
|
76
|
+
const configuredModel = candidate.model?.trim();
|
|
77
|
+
if (topLevelEntry) {
|
|
78
|
+
if (configuredModel) {
|
|
79
|
+
return {
|
|
80
|
+
provider,
|
|
81
|
+
model: configuredModel,
|
|
82
|
+
...(candidate.thinkingOptionId ? { thinkingOptionId: candidate.thinkingOptionId } : {}),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const model = selectDefaultModel(topLevelEntry.models ?? []);
|
|
86
|
+
const thinkingOptionId = resolveThinkingOptionId(model, candidate.thinkingOptionId);
|
|
87
|
+
return {
|
|
88
|
+
provider,
|
|
89
|
+
...(model ? { model: model.id } : {}),
|
|
90
|
+
...(thinkingOptionId ? { thinkingOptionId } : {}),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (!configuredModel) {
|
|
94
|
+
return {
|
|
95
|
+
provider,
|
|
96
|
+
...(candidate.thinkingOptionId ? { thinkingOptionId: candidate.thinkingOptionId } : {}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const nestedMatch = resolveNestedProviderModel(provider, configuredModel, readyEntries);
|
|
100
|
+
if (!nestedMatch) {
|
|
101
|
+
return {
|
|
102
|
+
provider,
|
|
103
|
+
model: configuredModel,
|
|
104
|
+
...(candidate.thinkingOptionId ? { thinkingOptionId: candidate.thinkingOptionId } : {}),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const thinkingOptionId = resolveThinkingOptionId(nestedMatch.model, candidate.thinkingOptionId);
|
|
108
|
+
return {
|
|
109
|
+
provider: nestedMatch.provider,
|
|
110
|
+
model: nestedMatch.model.id,
|
|
111
|
+
...(thinkingOptionId ? { thinkingOptionId } : {}),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function resolveNestedProviderModel(providerId, modelId, entries) {
|
|
115
|
+
const normalizedProviderId = providerId.trim().toLowerCase();
|
|
116
|
+
const normalizedModelId = modelId.trim().toLowerCase();
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
for (const model of entry.models ?? []) {
|
|
119
|
+
const modelProviderId = readModelMetadataString(model, "providerId")?.toLowerCase();
|
|
120
|
+
const nestedModelId = readModelMetadataString(model, "modelId")?.toLowerCase();
|
|
121
|
+
if (modelProviderId !== normalizedProviderId) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (normalizedModelId === model.id.toLowerCase() ||
|
|
125
|
+
normalizedModelId === nestedModelId ||
|
|
126
|
+
model.id.toLowerCase() === `${normalizedProviderId}/${normalizedModelId}`) {
|
|
127
|
+
return { provider: entry.provider, model };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
function resolveByModelSubstring(entries, identifier) {
|
|
134
|
+
const needle = identifier.modelSubstring.trim().toLowerCase();
|
|
135
|
+
if (!needle) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
for (const entry of entries) {
|
|
139
|
+
for (const model of entry.models ?? []) {
|
|
140
|
+
const haystacks = [model.id, model.label].map((value) => value.toLowerCase());
|
|
141
|
+
if (!haystacks.some((value) => value.includes(needle))) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const thinkingOptionId = resolveThinkingOptionId(model, identifier.thinkingOptionId);
|
|
145
|
+
return {
|
|
146
|
+
provider: entry.provider,
|
|
147
|
+
model: model.id,
|
|
148
|
+
...(thinkingOptionId ? { thinkingOptionId } : {}),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
function readConfiguredProviders(daemonConfig) {
|
|
155
|
+
const metadataGeneration = daemonConfig?.metadataGeneration;
|
|
156
|
+
if (!metadataGeneration || typeof metadataGeneration !== "object") {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
const providers = "providers" in metadataGeneration ? metadataGeneration.providers : undefined;
|
|
160
|
+
return Array.isArray(providers) ? providers : [];
|
|
161
|
+
}
|
|
162
|
+
function selectDefaultModel(models) {
|
|
163
|
+
return models.find((model) => model.isDefault) ?? models[0] ?? null;
|
|
164
|
+
}
|
|
165
|
+
function resolveThinkingOptionId(model, preferredThinkingOptionId) {
|
|
166
|
+
if (!model) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
if (preferredThinkingOptionId &&
|
|
170
|
+
model.thinkingOptions?.some((option) => option.id === preferredThinkingOptionId)) {
|
|
171
|
+
return preferredThinkingOptionId;
|
|
172
|
+
}
|
|
173
|
+
return model.defaultThinkingOptionId;
|
|
174
|
+
}
|
|
175
|
+
function dedupeProviders(providers) {
|
|
176
|
+
const seen = new Set();
|
|
177
|
+
const deduped = [];
|
|
178
|
+
for (const provider of providers) {
|
|
179
|
+
const key = [provider.provider, provider.model ?? "", provider.thinkingOptionId ?? ""].join("\0");
|
|
180
|
+
if (seen.has(key)) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
seen.add(key);
|
|
184
|
+
deduped.push(provider);
|
|
185
|
+
}
|
|
186
|
+
return deduped;
|
|
187
|
+
}
|
|
188
|
+
function readModelMetadataString(model, key) {
|
|
189
|
+
const value = model.metadata?.[key];
|
|
190
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=structured-generation-providers.js.map
|
|
@@ -76,6 +76,13 @@ export interface PaseoDaemonConfig {
|
|
|
76
76
|
dictationFinalTimeoutMs?: number;
|
|
77
77
|
downloadTokenTtlMs?: number;
|
|
78
78
|
agentProviderSettings?: AgentProviderRuntimeSettingsMap;
|
|
79
|
+
metadataGeneration?: {
|
|
80
|
+
providers?: Array<{
|
|
81
|
+
provider: string;
|
|
82
|
+
model?: string;
|
|
83
|
+
thinkingOptionId?: string;
|
|
84
|
+
}>;
|
|
85
|
+
};
|
|
79
86
|
providerOverrides?: Record<string, ProviderOverride>;
|
|
80
87
|
log?: PersistedConfig["log"];
|
|
81
88
|
onLifecycleIntent?: (intent: DaemonLifecycleIntent) => void;
|
|
@@ -169,6 +169,9 @@ export async function createPaseoDaemon(config, rootLogger) {
|
|
|
169
169
|
...(override.additionalModels ? { additionalModels: override.additionalModels } : {}),
|
|
170
170
|
},
|
|
171
171
|
])),
|
|
172
|
+
metadataGeneration: {
|
|
173
|
+
providers: config.metadataGeneration?.providers ?? [],
|
|
174
|
+
},
|
|
172
175
|
autoArchiveAfterMerge: config.autoArchiveAfterMerge ?? false,
|
|
173
176
|
appendSystemPrompt: config.appendSystemPrompt ?? "",
|
|
174
177
|
}, logger);
|
|
@@ -207,6 +207,7 @@ export function loadConfig(paseoHome, options) {
|
|
|
207
207
|
voiceLlmProviderExplicit: voiceLlm.providerExplicit,
|
|
208
208
|
voiceLlmModel: voiceLlm.model,
|
|
209
209
|
agentProviderSettings: extractAgentProviderSettings(providerOverrides),
|
|
210
|
+
metadataGeneration: persisted.agents?.metadataGeneration,
|
|
210
211
|
providerOverrides,
|
|
211
212
|
log: resolveLogConfigFromEnv(env, persisted),
|
|
212
213
|
};
|
|
@@ -114,8 +114,29 @@ export class DaemonConfigStore {
|
|
|
114
114
|
}
|
|
115
115
|
function mergeMutableConfigIntoPersistedConfig(params) {
|
|
116
116
|
const { persisted, mutable } = params;
|
|
117
|
+
const metadataGenerationProviders = readMetadataGenerationProviders(mutable);
|
|
117
118
|
const providerOverrides = applyMutableProviderConfigToOverrides(persisted.agents?.providers, mutable.providers);
|
|
118
119
|
const persistedAgents = persisted.agents;
|
|
120
|
+
const persistedMetadataGeneration = {
|
|
121
|
+
providers: metadataGenerationProviders,
|
|
122
|
+
};
|
|
123
|
+
const shouldPersistMetadataGeneration = metadataGenerationProviders.length > 0 || persisted.agents?.metadataGeneration !== undefined;
|
|
124
|
+
let nextAgents = persisted.agents;
|
|
125
|
+
if (providerOverrides && Object.keys(providerOverrides).length > 0) {
|
|
126
|
+
nextAgents = {
|
|
127
|
+
...persistedAgents,
|
|
128
|
+
providers: providerOverrides,
|
|
129
|
+
...(shouldPersistMetadataGeneration
|
|
130
|
+
? { metadataGeneration: persistedMetadataGeneration }
|
|
131
|
+
: {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
else if (shouldPersistMetadataGeneration) {
|
|
135
|
+
nextAgents = {
|
|
136
|
+
...persistedAgents,
|
|
137
|
+
metadataGeneration: persistedMetadataGeneration,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
119
140
|
return {
|
|
120
141
|
...persisted,
|
|
121
142
|
daemon: {
|
|
@@ -127,12 +148,31 @@ function mergeMutableConfigIntoPersistedConfig(params) {
|
|
|
127
148
|
autoArchiveAfterMerge: mutable.autoArchiveAfterMerge,
|
|
128
149
|
appendSystemPrompt: mutable.appendSystemPrompt,
|
|
129
150
|
},
|
|
130
|
-
agents:
|
|
131
|
-
? {
|
|
132
|
-
...persistedAgents,
|
|
133
|
-
providers: providerOverrides,
|
|
134
|
-
}
|
|
135
|
-
: persisted.agents,
|
|
151
|
+
agents: nextAgents,
|
|
136
152
|
};
|
|
137
153
|
}
|
|
154
|
+
function readMetadataGenerationProviders(mutable) {
|
|
155
|
+
const metadataGeneration = mutable.metadataGeneration;
|
|
156
|
+
if (!isRecord(metadataGeneration)) {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
const providers = metadataGeneration["providers"];
|
|
160
|
+
if (!Array.isArray(providers)) {
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
163
|
+
return providers.flatMap((entry) => {
|
|
164
|
+
if (!isRecord(entry) || typeof entry["provider"] !== "string") {
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
return [
|
|
168
|
+
{
|
|
169
|
+
provider: entry["provider"],
|
|
170
|
+
...(typeof entry["model"] === "string" ? { model: entry["model"] } : {}),
|
|
171
|
+
...(typeof entry["thinkingOptionId"] === "string"
|
|
172
|
+
? { thinkingOptionId: entry["thinkingOptionId"] }
|
|
173
|
+
: {}),
|
|
174
|
+
},
|
|
175
|
+
];
|
|
176
|
+
});
|
|
177
|
+
}
|
|
138
178
|
//# sourceMappingURL=daemon-config-store.js.map
|
|
@@ -2,6 +2,7 @@ import { createPaseoDaemon } from "./bootstrap.js";
|
|
|
2
2
|
import { loadConfig } from "./config.js";
|
|
3
3
|
import { resolvePaseoHome } from "./paseo-home.js";
|
|
4
4
|
import { createRootLogger } from "./logger.js";
|
|
5
|
+
process.title = "Paseo Daemon";
|
|
5
6
|
function bootstrapFromEnvironment() {
|
|
6
7
|
try {
|
|
7
8
|
const paseoHome = resolvePaseoHome();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { constants, promises as fs } from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
-
import { resolvePathFromBase } from "../path-utils.js";
|
|
3
|
+
import { expandUserPath, resolvePathFromBase } from "../path-utils.js";
|
|
4
4
|
const TEXT_MIME_TYPES = {
|
|
5
5
|
".json": "application/json",
|
|
6
6
|
};
|
|
@@ -168,7 +168,7 @@ export async function getDownloadableFileInfo({ root, relativePath }) {
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
async function resolveScopedPath({ root, relativePath = ".", }) {
|
|
171
|
-
const normalizedRoot =
|
|
171
|
+
const normalizedRoot = expandUserPath(root);
|
|
172
172
|
const requestedPath = resolvePathFromBase(normalizedRoot, relativePath);
|
|
173
173
|
const relative = path.relative(normalizedRoot, requestedPath);
|
|
174
174
|
if (relative !== "" && (relative.startsWith("..") || path.isAbsolute(relative))) {
|
|
@@ -215,8 +215,8 @@ function isOutsideWorkspaceError(error) {
|
|
|
215
215
|
return error instanceof Error && error.message === ACCESS_OUTSIDE_WORKSPACE_MESSAGE;
|
|
216
216
|
}
|
|
217
217
|
function normalizeRelativePath({ root, targetPath }) {
|
|
218
|
-
const normalizedRoot =
|
|
219
|
-
const normalizedTarget =
|
|
218
|
+
const normalizedRoot = expandUserPath(root);
|
|
219
|
+
const normalizedTarget = expandUserPath(targetPath);
|
|
220
220
|
const relative = path.relative(normalizedRoot, normalizedTarget);
|
|
221
221
|
return relative === "" ? "." : relative.split(path.sep).join("/");
|
|
222
222
|
}
|
|
@@ -446,7 +446,41 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
446
446
|
extends?: string | undefined;
|
|
447
447
|
order?: number | undefined;
|
|
448
448
|
}>, unknown>>;
|
|
449
|
+
metadataGeneration: z.ZodOptional<z.ZodObject<{
|
|
450
|
+
providers: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
451
|
+
provider: z.ZodString;
|
|
452
|
+
model: z.ZodOptional<z.ZodString>;
|
|
453
|
+
thinkingOptionId: z.ZodOptional<z.ZodString>;
|
|
454
|
+
}, "strict", z.ZodTypeAny, {
|
|
455
|
+
provider: string;
|
|
456
|
+
model?: string | undefined;
|
|
457
|
+
thinkingOptionId?: string | undefined;
|
|
458
|
+
}, {
|
|
459
|
+
provider: string;
|
|
460
|
+
model?: string | undefined;
|
|
461
|
+
thinkingOptionId?: string | undefined;
|
|
462
|
+
}>, "many">>;
|
|
463
|
+
}, "strict", z.ZodTypeAny, {
|
|
464
|
+
providers?: {
|
|
465
|
+
provider: string;
|
|
466
|
+
model?: string | undefined;
|
|
467
|
+
thinkingOptionId?: string | undefined;
|
|
468
|
+
}[] | undefined;
|
|
469
|
+
}, {
|
|
470
|
+
providers?: {
|
|
471
|
+
provider: string;
|
|
472
|
+
model?: string | undefined;
|
|
473
|
+
thinkingOptionId?: string | undefined;
|
|
474
|
+
}[] | undefined;
|
|
475
|
+
}>>;
|
|
449
476
|
}, "strict", z.ZodTypeAny, {
|
|
477
|
+
metadataGeneration?: {
|
|
478
|
+
providers?: {
|
|
479
|
+
provider: string;
|
|
480
|
+
model?: string | undefined;
|
|
481
|
+
thinkingOptionId?: string | undefined;
|
|
482
|
+
}[] | undefined;
|
|
483
|
+
} | undefined;
|
|
450
484
|
providers?: Record<string, {
|
|
451
485
|
description?: string | undefined;
|
|
452
486
|
label?: string | undefined;
|
|
@@ -482,6 +516,13 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
482
516
|
order?: number | undefined;
|
|
483
517
|
}> | undefined;
|
|
484
518
|
}, {
|
|
519
|
+
metadataGeneration?: {
|
|
520
|
+
providers?: {
|
|
521
|
+
provider: string;
|
|
522
|
+
model?: string | undefined;
|
|
523
|
+
thinkingOptionId?: string | undefined;
|
|
524
|
+
}[] | undefined;
|
|
525
|
+
} | undefined;
|
|
485
526
|
providers?: unknown;
|
|
486
527
|
}>>;
|
|
487
528
|
features: z.ZodOptional<z.ZodObject<{
|
|
@@ -561,14 +602,14 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
561
602
|
}, "strict", z.ZodTypeAny, {
|
|
562
603
|
provider?: "local" | "openai" | undefined;
|
|
563
604
|
model?: string | undefined;
|
|
564
|
-
speed?: number | undefined;
|
|
565
605
|
voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer" | undefined;
|
|
606
|
+
speed?: number | undefined;
|
|
566
607
|
speakerId?: number | undefined;
|
|
567
608
|
}, {
|
|
568
609
|
provider?: string | undefined;
|
|
569
610
|
model?: string | undefined;
|
|
570
|
-
speed?: number | undefined;
|
|
571
611
|
voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer" | undefined;
|
|
612
|
+
speed?: number | undefined;
|
|
572
613
|
speakerId?: number | undefined;
|
|
573
614
|
}>>;
|
|
574
615
|
}, "strict", z.ZodTypeAny, {
|
|
@@ -588,8 +629,8 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
588
629
|
tts?: {
|
|
589
630
|
provider?: "local" | "openai" | undefined;
|
|
590
631
|
model?: string | undefined;
|
|
591
|
-
speed?: number | undefined;
|
|
592
632
|
voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer" | undefined;
|
|
633
|
+
speed?: number | undefined;
|
|
593
634
|
speakerId?: number | undefined;
|
|
594
635
|
} | undefined;
|
|
595
636
|
}, {
|
|
@@ -609,8 +650,8 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
609
650
|
tts?: {
|
|
610
651
|
provider?: string | undefined;
|
|
611
652
|
model?: string | undefined;
|
|
612
|
-
speed?: number | undefined;
|
|
613
653
|
voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer" | undefined;
|
|
654
|
+
speed?: number | undefined;
|
|
614
655
|
speakerId?: number | undefined;
|
|
615
656
|
} | undefined;
|
|
616
657
|
}>>;
|
|
@@ -641,8 +682,8 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
641
682
|
tts?: {
|
|
642
683
|
provider?: "local" | "openai" | undefined;
|
|
643
684
|
model?: string | undefined;
|
|
644
|
-
speed?: number | undefined;
|
|
645
685
|
voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer" | undefined;
|
|
686
|
+
speed?: number | undefined;
|
|
646
687
|
speakerId?: number | undefined;
|
|
647
688
|
} | undefined;
|
|
648
689
|
} | undefined;
|
|
@@ -673,8 +714,8 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
673
714
|
tts?: {
|
|
674
715
|
provider?: string | undefined;
|
|
675
716
|
model?: string | undefined;
|
|
676
|
-
speed?: number | undefined;
|
|
677
717
|
voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer" | undefined;
|
|
718
|
+
speed?: number | undefined;
|
|
678
719
|
speakerId?: number | undefined;
|
|
679
720
|
} | undefined;
|
|
680
721
|
} | undefined;
|
|
@@ -722,6 +763,10 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
722
763
|
}>>;
|
|
723
764
|
}, "strict", z.ZodTypeAny, {
|
|
724
765
|
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
766
|
+
console?: {
|
|
767
|
+
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
768
|
+
format?: "json" | "pretty" | undefined;
|
|
769
|
+
} | undefined;
|
|
725
770
|
file?: {
|
|
726
771
|
path?: string | undefined;
|
|
727
772
|
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
@@ -731,12 +776,12 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
731
776
|
} | undefined;
|
|
732
777
|
} | undefined;
|
|
733
778
|
format?: "json" | "pretty" | undefined;
|
|
779
|
+
}, {
|
|
780
|
+
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
734
781
|
console?: {
|
|
735
782
|
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
736
783
|
format?: "json" | "pretty" | undefined;
|
|
737
784
|
} | undefined;
|
|
738
|
-
}, {
|
|
739
|
-
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
740
785
|
file?: {
|
|
741
786
|
path?: string | undefined;
|
|
742
787
|
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
@@ -746,10 +791,6 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
746
791
|
} | undefined;
|
|
747
792
|
} | undefined;
|
|
748
793
|
format?: "json" | "pretty" | undefined;
|
|
749
|
-
console?: {
|
|
750
|
-
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
751
|
-
format?: "json" | "pretty" | undefined;
|
|
752
|
-
} | undefined;
|
|
753
794
|
}>>;
|
|
754
795
|
}, "strict", z.ZodTypeAny, {
|
|
755
796
|
version?: 1 | undefined;
|
|
@@ -780,14 +821,18 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
780
821
|
tts?: {
|
|
781
822
|
provider?: "local" | "openai" | undefined;
|
|
782
823
|
model?: string | undefined;
|
|
783
|
-
speed?: number | undefined;
|
|
784
824
|
voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer" | undefined;
|
|
825
|
+
speed?: number | undefined;
|
|
785
826
|
speakerId?: number | undefined;
|
|
786
827
|
} | undefined;
|
|
787
828
|
} | undefined;
|
|
788
829
|
} | undefined;
|
|
789
830
|
log?: {
|
|
790
831
|
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
832
|
+
console?: {
|
|
833
|
+
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
834
|
+
format?: "json" | "pretty" | undefined;
|
|
835
|
+
} | undefined;
|
|
791
836
|
file?: {
|
|
792
837
|
path?: string | undefined;
|
|
793
838
|
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
@@ -797,12 +842,15 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
797
842
|
} | undefined;
|
|
798
843
|
} | undefined;
|
|
799
844
|
format?: "json" | "pretty" | undefined;
|
|
800
|
-
console?: {
|
|
801
|
-
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
802
|
-
format?: "json" | "pretty" | undefined;
|
|
803
|
-
} | undefined;
|
|
804
845
|
} | undefined;
|
|
805
846
|
agents?: {
|
|
847
|
+
metadataGeneration?: {
|
|
848
|
+
providers?: {
|
|
849
|
+
provider: string;
|
|
850
|
+
model?: string | undefined;
|
|
851
|
+
thinkingOptionId?: string | undefined;
|
|
852
|
+
}[] | undefined;
|
|
853
|
+
} | undefined;
|
|
806
854
|
providers?: Record<string, {
|
|
807
855
|
description?: string | undefined;
|
|
808
856
|
label?: string | undefined;
|
|
@@ -901,14 +949,18 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
901
949
|
tts?: {
|
|
902
950
|
provider?: string | undefined;
|
|
903
951
|
model?: string | undefined;
|
|
904
|
-
speed?: number | undefined;
|
|
905
952
|
voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer" | undefined;
|
|
953
|
+
speed?: number | undefined;
|
|
906
954
|
speakerId?: number | undefined;
|
|
907
955
|
} | undefined;
|
|
908
956
|
} | undefined;
|
|
909
957
|
} | undefined;
|
|
910
958
|
log?: {
|
|
911
959
|
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
960
|
+
console?: {
|
|
961
|
+
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
962
|
+
format?: "json" | "pretty" | undefined;
|
|
963
|
+
} | undefined;
|
|
912
964
|
file?: {
|
|
913
965
|
path?: string | undefined;
|
|
914
966
|
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
@@ -918,12 +970,15 @@ export declare const PersistedConfigSchema: z.ZodObject<{
|
|
|
918
970
|
} | undefined;
|
|
919
971
|
} | undefined;
|
|
920
972
|
format?: "json" | "pretty" | undefined;
|
|
921
|
-
console?: {
|
|
922
|
-
level?: "error" | "fatal" | "warn" | "info" | "debug" | "trace" | undefined;
|
|
923
|
-
format?: "json" | "pretty" | undefined;
|
|
924
|
-
} | undefined;
|
|
925
973
|
} | undefined;
|
|
926
974
|
agents?: {
|
|
975
|
+
metadataGeneration?: {
|
|
976
|
+
providers?: {
|
|
977
|
+
provider: string;
|
|
978
|
+
model?: string | undefined;
|
|
979
|
+
thinkingOptionId?: string | undefined;
|
|
980
|
+
}[] | undefined;
|
|
981
|
+
} | undefined;
|
|
927
982
|
providers?: unknown;
|
|
928
983
|
} | undefined;
|
|
929
984
|
app?: {
|
|
@@ -112,6 +112,18 @@ const FeatureVoiceModeSchema = z
|
|
|
112
112
|
.optional(),
|
|
113
113
|
})
|
|
114
114
|
.strict();
|
|
115
|
+
const StructuredGenerationProviderConfigSchema = z
|
|
116
|
+
.object({
|
|
117
|
+
provider: z.string().min(1),
|
|
118
|
+
model: z.string().min(1).optional(),
|
|
119
|
+
thinkingOptionId: z.string().min(1).optional(),
|
|
120
|
+
})
|
|
121
|
+
.strict();
|
|
122
|
+
const AgentMetadataGenerationSchema = z
|
|
123
|
+
.object({
|
|
124
|
+
providers: z.array(StructuredGenerationProviderConfigSchema).optional(),
|
|
125
|
+
})
|
|
126
|
+
.strict();
|
|
115
127
|
const BUILTIN_PROVIDER_IDS = ["claude", "codex", "copilot", "opencode", "pi"];
|
|
116
128
|
function isLegacyProviderEntry(value) {
|
|
117
129
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
@@ -203,6 +215,7 @@ export const PersistedConfigSchema = z
|
|
|
203
215
|
agents: z
|
|
204
216
|
.object({
|
|
205
217
|
providers: z.preprocess(normalizeAgentProviders, ProviderOverridesSchema).optional(),
|
|
218
|
+
metadataGeneration: AgentMetadataGenerationSchema.optional(),
|
|
206
219
|
})
|
|
207
220
|
.strict()
|
|
208
221
|
.optional(),
|
|
@@ -160,7 +160,6 @@ export declare class Session {
|
|
|
160
160
|
private agentUpdatesSubscription;
|
|
161
161
|
private workspaceUpdatesSubscription;
|
|
162
162
|
private clientActivity;
|
|
163
|
-
private readonly MOBILE_BACKGROUND_STREAM_GRACE_MS;
|
|
164
163
|
private readonly terminalManager;
|
|
165
164
|
private readonly providerSnapshotManager;
|
|
166
165
|
private unsubscribeProviderSnapshotEvents;
|
|
@@ -217,6 +216,8 @@ export declare class Session {
|
|
|
217
216
|
appVisible: boolean;
|
|
218
217
|
appVisibilityChangedAt: Date;
|
|
219
218
|
} | null;
|
|
219
|
+
private getFocusedAgentSelectionForCwd;
|
|
220
|
+
private readStructuredGenerationDaemonConfig;
|
|
220
221
|
getRuntimeMetrics(): SessionRuntimeMetrics;
|
|
221
222
|
emitServerMessage(message: SessionOutboundMessage): void;
|
|
222
223
|
/**
|
|
@@ -245,7 +246,6 @@ export declare class Session {
|
|
|
245
246
|
private bindVoiceBridges;
|
|
246
247
|
private initializePerSessionManagers;
|
|
247
248
|
private subscribeToAgentEvents;
|
|
248
|
-
private shouldSkipAgentStreamForward;
|
|
249
249
|
private buildAgentStreamPayload;
|
|
250
250
|
private buildAgentPayload;
|
|
251
251
|
private buildStoredAgentPayload;
|
|
@@ -405,6 +405,7 @@ export declare class Session {
|
|
|
405
405
|
private handleCheckoutMergeFromBaseRequest;
|
|
406
406
|
private handleCheckoutPullRequest;
|
|
407
407
|
private handleCheckoutPushRequest;
|
|
408
|
+
private handleCheckoutRefreshRequest;
|
|
408
409
|
private handleCheckoutPrCreateRequest;
|
|
409
410
|
private handleCheckoutPrMergeRequest;
|
|
410
411
|
private assertCurrentPullRequestHasGithubMergeFacts;
|