@markusylisiurunen/tau 0.2.66 → 0.2.68
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 +45 -57
- package/dist/core/async/cli.js +150 -181
- package/dist/core/async/cli.js.map +1 -1
- package/dist/core/async/server_config.js +5 -8
- package/dist/core/async/server_config.js.map +1 -1
- package/dist/core/async/session_manager.js +65 -72
- package/dist/core/async/session_manager.js.map +1 -1
- package/dist/core/async/telegram.js +57 -6
- package/dist/core/async/telegram.js.map +1 -1
- package/dist/core/auth/auth_manager.js.map +1 -1
- package/dist/core/auth/auth_storage.js +55 -76
- package/dist/core/auth/auth_storage.js.map +1 -1
- package/dist/core/auth/credential_resolver.js +11 -1
- package/dist/core/auth/credential_resolver.js.map +1 -1
- package/dist/core/auth/jwt.js +9 -9
- package/dist/core/auth/jwt.js.map +1 -1
- package/dist/core/auth/providers/openai_codex.js +128 -194
- package/dist/core/auth/providers/openai_codex.js.map +1 -1
- package/dist/core/cli.js +40 -48
- package/dist/core/cli.js.map +1 -1
- package/dist/core/config/content_loader.js +118 -54
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/config/markdown_frontmatter.js.map +1 -1
- package/dist/core/config/paths.js +2 -1
- package/dist/core/config/paths.js.map +1 -1
- package/dist/core/config/runtime.js +13 -4
- package/dist/core/config/runtime.js.map +1 -1
- package/dist/core/config/schema.js +41 -45
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/skills_loader.js +5 -10
- package/dist/core/config/skills_loader.js.map +1 -1
- package/dist/core/config/virtual_bundle.js +1 -1
- package/dist/core/config/virtual_bundle.js.map +1 -1
- package/dist/core/events/parser.js +47 -25
- package/dist/core/events/parser.js.map +1 -1
- package/dist/core/install/cli.js +10 -4
- package/dist/core/install/cli.js.map +1 -1
- package/dist/core/models/catalog.js +409 -0
- package/dist/core/models/catalog.js.map +1 -0
- package/dist/core/models/tau_extensions.js +2 -0
- package/dist/core/models/tau_extensions.js.map +1 -0
- package/dist/core/personas.js +7 -7
- package/dist/core/personas.js.map +1 -1
- package/dist/core/session/session_engine.js +30 -1
- package/dist/core/session/session_engine.js.map +1 -1
- package/dist/core/subagents/control_plane.js +5 -2
- package/dist/core/subagents/control_plane.js.map +1 -1
- package/dist/core/subagents/launch_model.js +9 -15
- package/dist/core/subagents/launch_model.js.map +1 -1
- package/dist/core/subagents/subagent_engine.js +3 -4
- package/dist/core/subagents/subagent_engine.js.map +1 -1
- package/dist/core/tools/registry.js.map +1 -1
- package/dist/core/tools/send_input_to_agent.js +1 -0
- package/dist/core/tools/send_input_to_agent.js.map +1 -1
- package/dist/core/tools/spawn_agent.js +18 -2
- package/dist/core/tools/spawn_agent.js.map +1 -1
- package/dist/core/usage/cli.js +150 -130
- package/dist/core/usage/cli.js.map +1 -1
- package/dist/core/utils/agents_files.js +5 -1
- package/dist/core/utils/agents_files.js.map +1 -1
- package/dist/core/utils/model_stream.js +30 -4
- package/dist/core/utils/model_stream.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/main.js +5 -4
- package/dist/main.js.map +1 -1
- package/dist/tui/chat_controller/session_maintenance_service.js +10 -8
- package/dist/tui/chat_controller/session_maintenance_service.js.map +1 -1
- package/dist/tui/chat_controller.js +10 -18
- package/dist/tui/chat_controller.js.map +1 -1
- package/package.json +4 -4
- package/dist/core/utils/type_guards.js +0 -4
- package/dist/core/utils/type_guards.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CORE_EVENT_VERSION, } from "./types.js";
|
|
2
2
|
const stopReasons = ["stop", "length", "toolUse", "error", "aborted"];
|
|
3
3
|
const subagentStatuses = ["running", "success", "error", "aborted"];
|
|
4
|
+
const noticeSeverities = ["info", "warn", "error"];
|
|
4
5
|
const fail = (message) => ({ ok: false, message });
|
|
5
|
-
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
6
|
export function parseCoreEvent(value) {
|
|
7
7
|
const parsed = safeParseCoreEvent(value);
|
|
8
8
|
if (!parsed.ok)
|
|
@@ -10,11 +10,16 @@ export function parseCoreEvent(value) {
|
|
|
10
10
|
return parsed.value;
|
|
11
11
|
}
|
|
12
12
|
export function safeParseCoreEvent(value) {
|
|
13
|
-
if (!isRecord(value))
|
|
13
|
+
if (!isRecord(value)) {
|
|
14
14
|
return fail("core event payload must be an object");
|
|
15
|
-
|
|
15
|
+
}
|
|
16
|
+
if (typeof value.type !== "string") {
|
|
16
17
|
return fail("core event payload.type must be a string");
|
|
17
|
-
|
|
18
|
+
}
|
|
19
|
+
if (!isValidCoreEvent(value, value.type)) {
|
|
20
|
+
return fail("invalid core event payload");
|
|
21
|
+
}
|
|
22
|
+
return { ok: true, value: value };
|
|
18
23
|
}
|
|
19
24
|
export function parseCoreEventEnvelope(value) {
|
|
20
25
|
const parsed = safeParseCoreEventEnvelope(value);
|
|
@@ -23,21 +28,29 @@ export function parseCoreEventEnvelope(value) {
|
|
|
23
28
|
return parsed.value;
|
|
24
29
|
}
|
|
25
30
|
export function safeParseCoreEventEnvelope(value) {
|
|
26
|
-
if (!isRecord(value))
|
|
31
|
+
if (!isRecord(value)) {
|
|
27
32
|
return fail("core event envelope must be an object");
|
|
28
|
-
|
|
33
|
+
}
|
|
34
|
+
if (!isCoreEventVersion(value.version)) {
|
|
29
35
|
return fail(`unsupported core event version: ${String(value.version)}`);
|
|
30
36
|
}
|
|
31
37
|
const event = safeParseCoreEvent(value.event);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
if (!event.ok) {
|
|
39
|
+
return fail(`invalid core event envelope: ${event.message}`);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
ok: true,
|
|
43
|
+
value: {
|
|
44
|
+
version: CORE_EVENT_VERSION,
|
|
45
|
+
event: event.value,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
35
48
|
}
|
|
36
49
|
export function isCoreEventVersion(value) {
|
|
37
50
|
return value === CORE_EVENT_VERSION;
|
|
38
51
|
}
|
|
39
|
-
function
|
|
40
|
-
switch (
|
|
52
|
+
function isValidCoreEvent(value, eventType) {
|
|
53
|
+
switch (eventType) {
|
|
41
54
|
case "assistant_start":
|
|
42
55
|
return typeof value.historyEntryId === "string";
|
|
43
56
|
case "assistant_final":
|
|
@@ -45,8 +58,7 @@ function isCoreEvent(value) {
|
|
|
45
58
|
case "assistant_partial":
|
|
46
59
|
return typeof value.historyEntryId === "string" && isAssistantPartialSnapshot(value.snapshot);
|
|
47
60
|
case "notice":
|
|
48
|
-
return (
|
|
49
|
-
typeof value.text === "string");
|
|
61
|
+
return isOneOf(value.severity, noticeSeverities) && typeof value.text === "string";
|
|
50
62
|
case "tool_ui":
|
|
51
63
|
return isToolUiEvent(value.uiEvent);
|
|
52
64
|
case "subagent_ui":
|
|
@@ -60,8 +72,7 @@ function isCoreEvent(value) {
|
|
|
60
72
|
function isAssistantMessage(value) {
|
|
61
73
|
return (isRecord(value) &&
|
|
62
74
|
value.role === "assistant" &&
|
|
63
|
-
(value.stopReason === undefined ||
|
|
64
|
-
(typeof value.stopReason === "string" && stopReasons.includes(value.stopReason))));
|
|
75
|
+
(value.stopReason === undefined || isOneOf(value.stopReason, stopReasons)));
|
|
65
76
|
}
|
|
66
77
|
function isToolResultMessage(value) {
|
|
67
78
|
return (isRecord(value) &&
|
|
@@ -77,15 +88,18 @@ function isAssistantPartialSnapshot(value) {
|
|
|
77
88
|
typeof value.hasAnyThinking === "boolean");
|
|
78
89
|
}
|
|
79
90
|
function isToolUiEvent(value) {
|
|
80
|
-
if (!isRecord(value) || typeof value.type !== "string")
|
|
91
|
+
if (!isRecord(value) || typeof value.type !== "string") {
|
|
81
92
|
return false;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
93
|
+
}
|
|
94
|
+
if (value.type === "tool_pruned") {
|
|
95
|
+
return typeof value.toolCallId === "string" && typeof value.content === "string";
|
|
96
|
+
}
|
|
97
|
+
return typeof value.headerTarget === "string";
|
|
85
98
|
}
|
|
86
99
|
function isSubagentUiEvent(value) {
|
|
87
|
-
if (!isRecord(value) || typeof value.type !== "string")
|
|
100
|
+
if (!isRecord(value) || typeof value.type !== "string") {
|
|
88
101
|
return false;
|
|
102
|
+
}
|
|
89
103
|
switch (value.type) {
|
|
90
104
|
case "subagent_spawned":
|
|
91
105
|
case "subagent_finished":
|
|
@@ -93,9 +107,9 @@ function isSubagentUiEvent(value) {
|
|
|
93
107
|
case "subagent_progress":
|
|
94
108
|
return (typeof value.id === "string" &&
|
|
95
109
|
typeof value.text === "string" &&
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
110
|
+
isFiniteNumber(value.costTotal) &&
|
|
111
|
+
isFiniteNumber(value.turns) &&
|
|
112
|
+
isFiniteNumber(value.toolCalls));
|
|
99
113
|
case "subagent_emit_output":
|
|
100
114
|
return typeof value.id === "string" && typeof value.text === "string";
|
|
101
115
|
case "subagent_abort_requested":
|
|
@@ -109,7 +123,15 @@ function isSubagentState(value) {
|
|
|
109
123
|
typeof value.id === "string" &&
|
|
110
124
|
typeof value.name === "string" &&
|
|
111
125
|
typeof value.title === "string" &&
|
|
112
|
-
|
|
113
|
-
|
|
126
|
+
isOneOf(value.status, subagentStatuses));
|
|
127
|
+
}
|
|
128
|
+
function isRecord(value) {
|
|
129
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
130
|
+
}
|
|
131
|
+
function isFiniteNumber(value) {
|
|
132
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
133
|
+
}
|
|
134
|
+
function isOneOf(value, values) {
|
|
135
|
+
return typeof value === "string" && values.includes(value);
|
|
114
136
|
}
|
|
115
137
|
//# sourceMappingURL=parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/core/events/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/core/events/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/core/install/cli.js
CHANGED
|
@@ -51,8 +51,8 @@ function parseInstallArgs(argv) {
|
|
|
51
51
|
throw new InstallCliError("--prompt can only be provided once");
|
|
52
52
|
}
|
|
53
53
|
const parsed = parseValue(arg, argv, i);
|
|
54
|
-
i = parsed.nextIndex;
|
|
55
54
|
promptId = parsed.value;
|
|
55
|
+
i = parsed.nextIndex;
|
|
56
56
|
continue;
|
|
57
57
|
}
|
|
58
58
|
if (arg === "--skill" || arg.startsWith("--skill=")) {
|
|
@@ -60,8 +60,8 @@ function parseInstallArgs(argv) {
|
|
|
60
60
|
throw new InstallCliError("--skill can only be provided once");
|
|
61
61
|
}
|
|
62
62
|
const parsed = parseValue(arg, argv, i);
|
|
63
|
-
i = parsed.nextIndex;
|
|
64
63
|
skillName = parsed.value;
|
|
64
|
+
i = parsed.nextIndex;
|
|
65
65
|
continue;
|
|
66
66
|
}
|
|
67
67
|
if (arg.startsWith("-")) {
|
|
@@ -69,10 +69,16 @@ function parseInstallArgs(argv) {
|
|
|
69
69
|
}
|
|
70
70
|
throw new InstallCliError(`unexpected argument: ${arg}`);
|
|
71
71
|
}
|
|
72
|
-
if (promptId && skillName) {
|
|
72
|
+
if (promptId !== undefined && skillName !== undefined) {
|
|
73
73
|
throw new InstallCliError("--prompt and --skill are mutually exclusive");
|
|
74
74
|
}
|
|
75
|
-
return {
|
|
75
|
+
return {
|
|
76
|
+
help,
|
|
77
|
+
global,
|
|
78
|
+
force,
|
|
79
|
+
promptId,
|
|
80
|
+
skillName,
|
|
81
|
+
};
|
|
76
82
|
}
|
|
77
83
|
function resolveStarterContentRoot() {
|
|
78
84
|
const currentFile = fileURLToPath(import.meta.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/core/install/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,EACX,MAAM,EACN,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAsBD,SAAS,UAAU,CACjB,GAAW,EACX,IAAc,EACd,KAAa;IAEb,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,eAAe,CAAC,qBAAqB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,eAAe,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,eAAe,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc;IACtC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,QAA4B,CAAC;IACjC,IAAI,SAA6B,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QAErB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,eAAe,CAAC,oCAAoC,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/core/install/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { getModels, getProviders } from "@mariozechner/pi-ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { TAU_PROVIDER_EXTENSIONS } from "./tau_extensions.js";
|
|
4
|
+
const CostSchema = z
|
|
5
|
+
.object({
|
|
6
|
+
input: z.number().nonnegative().optional(),
|
|
7
|
+
output: z.number().nonnegative().optional(),
|
|
8
|
+
cacheRead: z.number().nonnegative().optional(),
|
|
9
|
+
cacheWrite: z.number().nonnegative().optional(),
|
|
10
|
+
})
|
|
11
|
+
.optional();
|
|
12
|
+
const ModelSchema = z
|
|
13
|
+
.object({
|
|
14
|
+
id: z.string().trim().min(1),
|
|
15
|
+
name: z.string().trim().min(1).optional(),
|
|
16
|
+
api: z.string().trim().min(1).optional(),
|
|
17
|
+
baseUrl: z.string().trim().min(1).optional(),
|
|
18
|
+
headers: z.record(z.string(), z.string()).optional(),
|
|
19
|
+
reasoning: z.boolean().optional(),
|
|
20
|
+
input: z.array(z.enum(["text", "image"])).optional(),
|
|
21
|
+
cost: CostSchema,
|
|
22
|
+
contextWindow: z.number().int().positive().optional(),
|
|
23
|
+
maxTokens: z.number().int().positive().optional(),
|
|
24
|
+
compat: z.unknown().optional(),
|
|
25
|
+
})
|
|
26
|
+
.passthrough();
|
|
27
|
+
const ProviderSchema = z
|
|
28
|
+
.object({
|
|
29
|
+
api: z.string().trim().min(1).optional(),
|
|
30
|
+
baseUrl: z.string().trim().min(1).optional(),
|
|
31
|
+
headers: z.record(z.string(), z.string()).optional(),
|
|
32
|
+
compat: z.unknown().optional(),
|
|
33
|
+
models: z.array(ModelSchema).optional(),
|
|
34
|
+
})
|
|
35
|
+
.passthrough();
|
|
36
|
+
const ModelsFileSchema = z
|
|
37
|
+
.object({
|
|
38
|
+
providers: z.record(z.string(), ProviderSchema),
|
|
39
|
+
})
|
|
40
|
+
.passthrough();
|
|
41
|
+
let catalogState;
|
|
42
|
+
let extensionApiProvidersRegistered = false;
|
|
43
|
+
function registerExtensionApiProvidersOnce() {
|
|
44
|
+
if (extensionApiProvidersRegistered) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
for (const extension of TAU_PROVIDER_EXTENSIONS) {
|
|
48
|
+
extension.registerApiProviders?.();
|
|
49
|
+
}
|
|
50
|
+
extensionApiProvidersRegistered = true;
|
|
51
|
+
}
|
|
52
|
+
function ensureProviderModels(providers, provider) {
|
|
53
|
+
const existing = providers.get(provider);
|
|
54
|
+
if (existing) {
|
|
55
|
+
return existing;
|
|
56
|
+
}
|
|
57
|
+
const created = new Map();
|
|
58
|
+
providers.set(provider, created);
|
|
59
|
+
return created;
|
|
60
|
+
}
|
|
61
|
+
function registerModel(args) {
|
|
62
|
+
const providerModels = ensureProviderModels(args.providers, args.provider);
|
|
63
|
+
const existing = providerModels.get(args.model.id);
|
|
64
|
+
if (existing) {
|
|
65
|
+
throw new Error(`duplicate model registration for '${args.provider}:${args.model.id}' from ${args.source}`);
|
|
66
|
+
}
|
|
67
|
+
providerModels.set(args.model.id, args.model);
|
|
68
|
+
}
|
|
69
|
+
function createCatalogState() {
|
|
70
|
+
registerExtensionApiProvidersOnce();
|
|
71
|
+
const providers = new Map();
|
|
72
|
+
for (const provider of getProviders()) {
|
|
73
|
+
for (const model of getModels(provider)) {
|
|
74
|
+
registerModel({ providers, provider, model, source: "pi-ai" });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const apiKeyResolvers = new Map();
|
|
78
|
+
for (const extension of TAU_PROVIDER_EXTENSIONS) {
|
|
79
|
+
if (extension.resolveApiKey) {
|
|
80
|
+
if (apiKeyResolvers.has(extension.id)) {
|
|
81
|
+
throw new Error(`duplicate api key resolver registration for provider '${extension.id}'`);
|
|
82
|
+
}
|
|
83
|
+
apiKeyResolvers.set(extension.id, extension.resolveApiKey);
|
|
84
|
+
}
|
|
85
|
+
for (const model of extension.models) {
|
|
86
|
+
if (model.provider !== extension.id) {
|
|
87
|
+
throw new Error(`invalid model registration for provider '${extension.id}': model '${model.id}' declares provider '${model.provider}'`);
|
|
88
|
+
}
|
|
89
|
+
registerModel({
|
|
90
|
+
providers,
|
|
91
|
+
provider: extension.id,
|
|
92
|
+
model,
|
|
93
|
+
source: `tau extension '${extension.id}'`,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
providers,
|
|
99
|
+
apiKeyResolvers,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function getCatalogState() {
|
|
103
|
+
if (!catalogState) {
|
|
104
|
+
catalogState = createCatalogState();
|
|
105
|
+
}
|
|
106
|
+
return catalogState;
|
|
107
|
+
}
|
|
108
|
+
function modelKey(provider, modelId) {
|
|
109
|
+
return `${provider}\u0000${modelId}`;
|
|
110
|
+
}
|
|
111
|
+
function cloneCompat(value) {
|
|
112
|
+
if (value === undefined) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
return structuredClone(value);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return value;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function cloneModel(model) {
|
|
123
|
+
return {
|
|
124
|
+
...model,
|
|
125
|
+
input: [...model.input],
|
|
126
|
+
cost: { ...model.cost },
|
|
127
|
+
...(model.headers ? { headers: { ...model.headers } } : {}),
|
|
128
|
+
...(model.compat !== undefined
|
|
129
|
+
? { compat: cloneCompat(model.compat) }
|
|
130
|
+
: {}),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function isObject(value) {
|
|
134
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
135
|
+
}
|
|
136
|
+
function mergeCompat(base, patch) {
|
|
137
|
+
if (patch === undefined) {
|
|
138
|
+
return base;
|
|
139
|
+
}
|
|
140
|
+
if (isObject(base) && isObject(patch)) {
|
|
141
|
+
return {
|
|
142
|
+
...base,
|
|
143
|
+
...patch,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return patch;
|
|
147
|
+
}
|
|
148
|
+
function applyModelPatch(model, patch) {
|
|
149
|
+
let next = cloneModel(model);
|
|
150
|
+
if (patch.api !== undefined) {
|
|
151
|
+
next = { ...next, api: patch.api };
|
|
152
|
+
}
|
|
153
|
+
if (patch.baseUrl !== undefined) {
|
|
154
|
+
next = { ...next, baseUrl: patch.baseUrl };
|
|
155
|
+
}
|
|
156
|
+
if (patch.headers !== undefined) {
|
|
157
|
+
next = {
|
|
158
|
+
...next,
|
|
159
|
+
headers: {
|
|
160
|
+
...(next.headers ?? {}),
|
|
161
|
+
...patch.headers,
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
if (patch.compat !== undefined) {
|
|
166
|
+
next = {
|
|
167
|
+
...next,
|
|
168
|
+
compat: mergeCompat(next.compat, patch.compat),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
if (patch.name !== undefined) {
|
|
172
|
+
next = { ...next, name: patch.name };
|
|
173
|
+
}
|
|
174
|
+
if (patch.reasoning !== undefined) {
|
|
175
|
+
next = { ...next, reasoning: patch.reasoning };
|
|
176
|
+
}
|
|
177
|
+
if (patch.input !== undefined) {
|
|
178
|
+
next = { ...next, input: [...patch.input] };
|
|
179
|
+
}
|
|
180
|
+
if (patch.cost !== undefined) {
|
|
181
|
+
next = {
|
|
182
|
+
...next,
|
|
183
|
+
cost: {
|
|
184
|
+
...next.cost,
|
|
185
|
+
...patch.cost,
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (patch.contextWindow !== undefined) {
|
|
190
|
+
next = { ...next, contextWindow: patch.contextWindow };
|
|
191
|
+
}
|
|
192
|
+
if (patch.maxTokens !== undefined) {
|
|
193
|
+
next = { ...next, maxTokens: patch.maxTokens };
|
|
194
|
+
}
|
|
195
|
+
return next;
|
|
196
|
+
}
|
|
197
|
+
function mergeProviderPatch(base, overlay) {
|
|
198
|
+
const mergedHeaders = {
|
|
199
|
+
...(base?.headers ?? {}),
|
|
200
|
+
...(overlay.headers ?? {}),
|
|
201
|
+
};
|
|
202
|
+
return {
|
|
203
|
+
...(base ?? {}),
|
|
204
|
+
...overlay,
|
|
205
|
+
...(Object.keys(mergedHeaders).length > 0 ? { headers: mergedHeaders } : {}),
|
|
206
|
+
compat: mergeCompat(base?.compat, overlay.compat),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
function createProviderPatch(provider) {
|
|
210
|
+
return {
|
|
211
|
+
...(provider.api !== undefined ? { api: provider.api } : {}),
|
|
212
|
+
...(provider.baseUrl !== undefined ? { baseUrl: provider.baseUrl } : {}),
|
|
213
|
+
...(provider.headers !== undefined ? { headers: provider.headers } : {}),
|
|
214
|
+
...(provider.compat !== undefined ? { compat: provider.compat } : {}),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function createModelPatch(model) {
|
|
218
|
+
return {
|
|
219
|
+
...(model.api !== undefined ? { api: model.api } : {}),
|
|
220
|
+
...(model.baseUrl !== undefined ? { baseUrl: model.baseUrl } : {}),
|
|
221
|
+
...(model.headers !== undefined ? { headers: model.headers } : {}),
|
|
222
|
+
...(model.compat !== undefined ? { compat: model.compat } : {}),
|
|
223
|
+
...(model.name !== undefined ? { name: model.name } : {}),
|
|
224
|
+
...(model.reasoning !== undefined ? { reasoning: model.reasoning } : {}),
|
|
225
|
+
...(model.input !== undefined ? { input: model.input } : {}),
|
|
226
|
+
...(model.cost !== undefined ? { cost: model.cost } : {}),
|
|
227
|
+
...(model.contextWindow !== undefined ? { contextWindow: model.contextWindow } : {}),
|
|
228
|
+
...(model.maxTokens !== undefined ? { maxTokens: model.maxTokens } : {}),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
function createSyntheticModel(provider, modelId, providerTemplates) {
|
|
232
|
+
const template = providerTemplates.get(provider);
|
|
233
|
+
if (!template) {
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
...cloneModel(template),
|
|
238
|
+
id: modelId,
|
|
239
|
+
name: modelId,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function formatZodError(error) {
|
|
243
|
+
return error.issues
|
|
244
|
+
.map((issue) => {
|
|
245
|
+
const path = issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
|
|
246
|
+
return `${path}${issue.message}`;
|
|
247
|
+
})
|
|
248
|
+
.join("; ");
|
|
249
|
+
}
|
|
250
|
+
function loadModelsFile(path, deps) {
|
|
251
|
+
let rawText;
|
|
252
|
+
try {
|
|
253
|
+
rawText = deps.fs.readFile(path);
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
return {
|
|
257
|
+
error: `${path}: failed to read models file: ${error instanceof Error ? error.message : String(error)}`,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
let parsedJson;
|
|
261
|
+
try {
|
|
262
|
+
parsedJson = JSON.parse(rawText);
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
return {
|
|
266
|
+
error: `${path}: failed to parse json: ${error instanceof Error ? error.message : String(error)}`,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
const parsed = ModelsFileSchema.safeParse(parsedJson);
|
|
270
|
+
if (!parsed.success) {
|
|
271
|
+
return {
|
|
272
|
+
error: `${path}: invalid models schema: ${formatZodError(parsed.error)}`,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return { data: parsed.data };
|
|
276
|
+
}
|
|
277
|
+
export function loadModelResolver(options) {
|
|
278
|
+
const deps = options.deps;
|
|
279
|
+
const levels = options.levels;
|
|
280
|
+
const state = getCatalogState();
|
|
281
|
+
const knownProviders = new Set(state.providers.keys());
|
|
282
|
+
const modelsByKey = new Map();
|
|
283
|
+
const providerTemplates = new Map();
|
|
284
|
+
for (const [provider, providerModels] of state.providers.entries()) {
|
|
285
|
+
const models = [...providerModels.values()];
|
|
286
|
+
if (models.length === 0) {
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
providerTemplates.set(provider, cloneModel(models[0]));
|
|
290
|
+
for (const model of models) {
|
|
291
|
+
modelsByKey.set(modelKey(provider, model.id), cloneModel(model));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
const providerPatches = new Map();
|
|
295
|
+
const errors = [];
|
|
296
|
+
for (const level of levels) {
|
|
297
|
+
if (!deps.fs.exists(level.modelsPath)) {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
const loaded = loadModelsFile(level.modelsPath, deps);
|
|
301
|
+
if (loaded.error) {
|
|
302
|
+
errors.push(loaded.error);
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (!loaded.data) {
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
for (const [providerNameRaw, providerConfig] of Object.entries(loaded.data.providers)) {
|
|
309
|
+
const providerName = providerNameRaw.trim().toLowerCase();
|
|
310
|
+
if (!providerName || !knownProviders.has(providerName)) {
|
|
311
|
+
errors.push(`${level.modelsPath}: unknown provider '${providerNameRaw}'.`);
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
const providerPatch = createProviderPatch(providerConfig);
|
|
315
|
+
if (Object.keys(providerPatch).length > 0) {
|
|
316
|
+
const mergedProviderPatch = mergeProviderPatch(providerPatches.get(providerName), providerPatch);
|
|
317
|
+
providerPatches.set(providerName, mergedProviderPatch);
|
|
318
|
+
for (const [key, candidate] of modelsByKey.entries()) {
|
|
319
|
+
if (candidate.provider !== providerName) {
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
modelsByKey.set(key, applyModelPatch(candidate, mergedProviderPatch));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
for (const modelConfig of providerConfig.models ?? []) {
|
|
326
|
+
const key = modelKey(providerName, modelConfig.id);
|
|
327
|
+
const providerPatchForModel = providerPatches.get(providerName);
|
|
328
|
+
const existing = modelsByKey.get(key) ??
|
|
329
|
+
createSyntheticModel(providerName, modelConfig.id, providerTemplates);
|
|
330
|
+
if (!existing) {
|
|
331
|
+
errors.push(`${level.modelsPath}: provider '${providerName}' does not have bundled defaults to derive model '${modelConfig.id}'.`);
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
const withProviderDefaults = providerPatchForModel
|
|
335
|
+
? applyModelPatch(existing, providerPatchForModel)
|
|
336
|
+
: existing;
|
|
337
|
+
const next = applyModelPatch(withProviderDefaults, createModelPatch(modelConfig));
|
|
338
|
+
modelsByKey.set(key, {
|
|
339
|
+
...next,
|
|
340
|
+
id: modelConfig.id,
|
|
341
|
+
name: next.name || modelConfig.id,
|
|
342
|
+
provider: providerName,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
const resolveConfiguredModel = (providerRaw, modelIdRaw) => {
|
|
348
|
+
const provider = providerRaw.trim().toLowerCase();
|
|
349
|
+
const modelId = modelIdRaw.trim();
|
|
350
|
+
if (!provider || !modelId || !knownProviders.has(provider)) {
|
|
351
|
+
return undefined;
|
|
352
|
+
}
|
|
353
|
+
const existing = modelsByKey.get(modelKey(provider, modelId));
|
|
354
|
+
if (!existing) {
|
|
355
|
+
return undefined;
|
|
356
|
+
}
|
|
357
|
+
return cloneModel(existing);
|
|
358
|
+
};
|
|
359
|
+
const resolveModel = (providerRaw, modelIdRaw) => {
|
|
360
|
+
const provider = providerRaw.trim().toLowerCase();
|
|
361
|
+
const modelId = modelIdRaw.trim();
|
|
362
|
+
if (!provider || !modelId || !knownProviders.has(provider)) {
|
|
363
|
+
return undefined;
|
|
364
|
+
}
|
|
365
|
+
const existing = resolveConfiguredModel(provider, modelId);
|
|
366
|
+
if (existing) {
|
|
367
|
+
return existing;
|
|
368
|
+
}
|
|
369
|
+
const synthetic = createSyntheticModel(provider, modelId, providerTemplates);
|
|
370
|
+
if (!synthetic) {
|
|
371
|
+
return undefined;
|
|
372
|
+
}
|
|
373
|
+
const providerPatch = providerPatches.get(provider);
|
|
374
|
+
if (!providerPatch) {
|
|
375
|
+
return synthetic;
|
|
376
|
+
}
|
|
377
|
+
return applyModelPatch(synthetic, providerPatch);
|
|
378
|
+
};
|
|
379
|
+
return {
|
|
380
|
+
resolveModel,
|
|
381
|
+
resolveConfiguredModel,
|
|
382
|
+
errors,
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
export function listProviders() {
|
|
386
|
+
return [...getCatalogState().providers.keys()];
|
|
387
|
+
}
|
|
388
|
+
export function listModels(provider) {
|
|
389
|
+
const providerModels = getCatalogState().providers.get(provider);
|
|
390
|
+
return providerModels ? [...providerModels.values()] : [];
|
|
391
|
+
}
|
|
392
|
+
export function resolveModel(provider, modelId) {
|
|
393
|
+
return getCatalogState().providers.get(provider)?.get(modelId);
|
|
394
|
+
}
|
|
395
|
+
export function resolveModelOrThrow(provider, modelId) {
|
|
396
|
+
const model = resolveModel(provider, modelId);
|
|
397
|
+
if (!model) {
|
|
398
|
+
throw new Error(`failed to resolve model '${provider}:${modelId}'`);
|
|
399
|
+
}
|
|
400
|
+
return model;
|
|
401
|
+
}
|
|
402
|
+
export function resolveProviderApiKey(args) {
|
|
403
|
+
const resolver = getCatalogState().apiKeyResolvers.get(args.provider);
|
|
404
|
+
if (!resolver) {
|
|
405
|
+
return undefined;
|
|
406
|
+
}
|
|
407
|
+
return resolver(args);
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=catalog.js.map
|