@markusylisiurunen/tau 0.3.80 → 0.3.82
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/code_mode/command.js +4 -16
- package/dist/code_mode/command.js.map +1 -1
- package/dist/code_mode/images.js +5 -6
- package/dist/code_mode/images.js.map +1 -1
- package/dist/code_mode/index.d.ts +1 -3
- package/dist/code_mode/index.js +1 -2
- package/dist/code_mode/index.js.map +1 -1
- package/dist/code_mode/runtime.d.ts +8 -4
- package/dist/code_mode/runtime.js +52 -63
- package/dist/code_mode/runtime.js.map +1 -1
- package/dist/core/code_mode/bash.js +269 -0
- package/dist/core/code_mode/bash.js.map +1 -0
- package/dist/core/code_mode/capability.js +2 -0
- package/dist/core/code_mode/capability.js.map +1 -0
- package/dist/core/code_mode/history.js +62 -0
- package/dist/core/code_mode/history.js.map +1 -0
- package/dist/core/code_mode/mcp.js +121 -0
- package/dist/core/code_mode/mcp.js.map +1 -0
- package/dist/core/code_mode/models.js +256 -0
- package/dist/core/code_mode/models.js.map +1 -0
- package/dist/core/{tools → code_mode}/nook.js +13 -77
- package/dist/core/code_mode/nook.js.map +1 -0
- package/dist/core/code_mode/sdk.js +97 -0
- package/dist/core/code_mode/sdk.js.map +1 -0
- package/dist/core/{tools → code_mode}/web.js +31 -90
- package/dist/core/code_mode/web.js.map +1 -0
- package/dist/core/commands/registry.js +0 -22
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/config/content_loader.js +3 -1
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/debug.js +1 -1
- package/dist/core/debug.js.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/models/openrouter.js +171 -0
- package/dist/core/models/openrouter.js.map +1 -0
- package/dist/core/{tool → models}/openrouter_decisions.js +6 -7
- package/dist/core/models/openrouter_decisions.js.map +1 -0
- package/dist/core/models/openrouter_media.js +128 -0
- package/dist/core/models/openrouter_media.js.map +1 -0
- package/dist/core/personas.js +2 -1
- package/dist/core/personas.js.map +1 -1
- package/dist/core/runtime/chat_runtime.js +2 -13
- package/dist/core/runtime/chat_runtime.js.map +1 -1
- package/dist/core/session/compaction.js +5 -3
- package/dist/core/session/compaction.js.map +1 -1
- package/dist/core/static/code_mode/history/documentation.md +95 -167
- package/dist/core/static/code_mode/mcp/documentation.md +144 -67
- package/dist/core/static/code_mode/nook/documentation.md +108 -169
- package/dist/core/static/code_mode/sandbox_runner.mjs +37 -20
- package/dist/core/static/code_mode/web/documentation.md +115 -213
- package/dist/core/static/tau_docs/client-tools.md +4 -4
- package/dist/core/static/tau_docs/history.md +2 -2
- package/dist/core/static/tau_docs/index.md +1 -1
- package/dist/core/static/tau_docs/node-sdk.md +6 -7
- package/dist/core/static/tau_docs/nook.md +2 -2
- package/dist/core/static/tau_docs/personas.md +2 -2
- package/dist/core/static/tau_docs/remote-sessions.md +2 -2
- package/dist/core/static/tau_docs/security.md +4 -4
- package/dist/core/static/tau_docs/session-protocol-methods.md +1 -46
- package/dist/core/static/tau_docs/session-protocol.md +11 -11
- package/dist/core/static/tau_docs/sessions.md +6 -25
- package/dist/core/static/tau_docs/subagents.md +3 -2
- package/dist/core/static/tau_docs/telegram.md +1 -1
- package/dist/core/static/tau_docs/tools.md +40 -48
- package/dist/core/static/tau_docs/troubleshooting.md +2 -2
- package/dist/core/static/tau_docs/tui.md +8 -7
- package/dist/core/subagents/registry.js +2 -1
- package/dist/core/subagents/registry.js.map +1 -1
- package/dist/core/subagents/types.js +2 -1
- package/dist/core/subagents/types.js.map +1 -1
- package/dist/core/telegram/adapter.js +1 -6
- package/dist/core/telegram/adapter.js.map +1 -1
- package/dist/core/tool/image_generate.js +2 -1
- package/dist/core/tool/image_generate.js.map +1 -1
- package/dist/core/tool/media.js +1 -49
- package/dist/core/tool/media.js.map +1 -1
- package/dist/core/tool/openrouter.js +24 -156
- package/dist/core/tool/openrouter.js.map +1 -1
- package/dist/core/tool/openrouter_input.js +77 -0
- package/dist/core/tool/openrouter_input.js.map +1 -0
- package/dist/core/tool/speech_generate.js +2 -1
- package/dist/core/tool/speech_generate.js.map +1 -1
- package/dist/core/tools/bash.js +2 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/bash_jobs.js +34 -5
- package/dist/core/tools/bash_jobs.js.map +1 -1
- package/dist/core/tools/catalog.js +18 -44
- package/dist/core/tools/catalog.js.map +1 -1
- package/dist/core/tools/code.js +100 -0
- package/dist/core/tools/code.js.map +1 -0
- package/dist/core/tools/code_mode.js +9 -30
- package/dist/core/tools/code_mode.js.map +1 -1
- package/dist/core/tools/code_mode_worker.js +2 -2
- package/dist/core/tools/presentation.js +2 -1
- package/dist/core/tools/presentation.js.map +1 -1
- package/dist/core/tools/tool_names.js +5 -7
- package/dist/core/tools/tool_names.js.map +1 -1
- package/dist/core/utils/gemini_transcription.js +81 -37
- package/dist/core/utils/gemini_transcription.js.map +1 -1
- package/dist/core/utils/media_validation.js +50 -0
- package/dist/core/utils/media_validation.js.map +1 -0
- package/dist/core/utils/user_metadata.js +0 -14
- package/dist/core/utils/user_metadata.js.map +1 -1
- package/dist/core/version.js +2 -2
- package/dist/diff_tool/app/dist/assets/{angular-html-BbLgbIhq.js → angular-html-D20byCHL.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-DXk17TRM.js → angular-ts-CvVQslm2.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-BsvksCXR.js → apl-DNIxlYWe.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-DH775E4V.js → astro-DDOw4EUG.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-Ck99Rm59.js → blade-DlhB-SLW.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-DJpHqu5J.js → c-C1f4vhDm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{chapel-Owff0Csy.js → chapel-Ctt8xOX1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-Cv2gZuhO.js → cobol-BXw71PAA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-Bji0YCf_.js → coffee-CRh_5Nmr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-DTjA_yFF.js → cpp-IlI-zWOZ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal-Dd00NOeb.js → crystal-CXeL28i7.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-D44TN1V6.js → css-BfST9hFI.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge-CVmGSi2m.js → edge--Q22k_ty.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-B8Mq7no2.js → elixir-CIfC_rQx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-CXS0I3Z2.js → elm-OkZ29XRO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-B9oDKaUo.js → erb-B8ZXgEqv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-DT-YFebH.js → git-rebase-CxkO_WGd.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-s0DXlNjq.js → glimmer-js-BVadyIrr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-QgEB5S2z.js → glimmer-ts-D5J3Qb7n.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-NA0icwbY.js → glsl-B6iy73-Y.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-0_dOlfV0.js → graphql-Dc3rUXf5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-D-mr7l1l.js → hack-q8Utf8Jp.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-B0-oQmz7.js → haml-mjMIlj_2.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-Yq9bXpWN.js → handlebars-CA-BL8Ks.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-B8bMmdRK.js → html-BmPxhYCX.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-BpxSlQb_.js → html-derivative-CvknIjuB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-hS_53mxt.js → http-DNxLDRIi.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-B2ST1kwl.js → hurl-kbd3Eq2V.js} +1 -1
- package/dist/diff_tool/app/dist/assets/index-D8ZI_2RC.js +340 -0
- package/dist/diff_tool/app/dist/assets/{java-D4mj0lZJ.js → java-BuZshgf1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-wC7rrKiV.js → javascript-DfL2oeFU.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-DbQ3o87F.js → jinja-Bu0KQihU.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-CrE9FdvP.js → jison-Bqn7Mf3Q.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-xjicDyWN.js → json-BuX5LKaB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-m28lXojQ.js → jsx-DdVJ-ZBp.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-19xkOmop.js → julia-CQeijOoQ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-Cf7OorTr.js → just-vzAktFGR.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-DDb7GQOy.js → latex-Dm60cg0k.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-DHOuQ0rf.js → liquid-vxKzm2P8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-BGyIvonw.js → lua-DIoqi4dd.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-DB5OqI1C.js → marko-BTHgFKby.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-DTyNMupO.js → mdc-CEfz8gZ9.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-DfF0fMYD.js → nginx-DNlFDEfJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-BbwsXuZD.js → nim-DnvT_0lZ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{org-BkOBBl1f.js → org-BbD-ElVf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-BTXTOl4K.js → perl-DTsbnAmK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-DIMVQWiA.js → php-CwEsJe-W.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-B_nrb4dJ.js → pug-BOttMVH-.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-1PXi8G8Z.js → qml-C8KkSItN.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-CJrAkc2Z.js → r-K4ksJj_R.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-DgPUftNd.js → razor-yuWRrrG6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-C2hS8XvL.js → regexp-CV-jhnUz.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-CDouhKnc.js → rst-CLA3Attc.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-CAjKW1uO.js → ruby-DiHR2-DX.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-qAHkHLc1.js → sas-DxIjbYJ5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-Bfx2Ydid.js → scss-CShwEaV4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-Bu76R8y2.js → shellscript-CeezOnrF.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession-BU8BL0oL.js → shellsession-CjSS2r7j.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-FRl8ozP-.js → soy-CI_v23nJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-BacQgsEs.js → sql-D9GaB00A.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-B9kkG-ET.js → stata-hK92TPE_.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-qvETr7iY.js → surrealql-UO8LtPJG.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-B0z1MgHc.js → svelte-kIlaw_oh.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-DTnPshKb.js → templ-DFRz1JP6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-Cosab9_H.js → tex-CfxIXk_z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags-DNYvLFUH.js → ts-tags-BtUHl0ff.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-Dstq6j1a.js → tsx-Cd4SAe2C.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-BzqZdwaX.js → twig-CWk4q5Y3.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-YOQ_oE25.js → typescript-BqxGJiP0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typst-DTffwfpc.js → typst-D9nAun2p.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-D4OMj_C5.js → vue-D6HYhg6_.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-kT4WrHGK.js → vue-html-1VRlaENS.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-CxeapeMO.js → vue-vine-BaH0We9y.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-DWVpuurg.js → xml-C4RWnUuj.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-C0ciup5a.js → xsl-D1iD38ga.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-98Fvyfpc.js → yaml-yAb4W0G-.js} +1 -1
- package/dist/diff_tool/app/dist/index.html +1 -1
- package/dist/host/local_session_host.js +24 -318
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/host/session_host.js.map +1 -1
- package/dist/host/session_protocol_handler.js +0 -98
- package/dist/host/session_protocol_handler.js.map +1 -1
- package/dist/nook/README.md +1 -1
- package/dist/protocol/index.d.ts +1 -1
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/session_protocol.d.ts +3 -28
- package/dist/protocol/session_protocol.js +1 -56
- package/dist/protocol/session_protocol.js.map +1 -1
- package/dist/sdk/code_mode.js +11 -17
- package/dist/sdk/code_mode.js.map +1 -1
- package/dist/sdk/index.d.ts +2 -2
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/session.js +0 -20
- package/dist/sdk/session.js.map +1 -1
- package/dist/sdk/types.d.ts +1 -7
- package/dist/store/session_snapshot_migrations.js +72 -1
- package/dist/store/session_snapshot_migrations.js.map +1 -1
- package/dist/tui/session_chat_controller.js +95 -82
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/ui/footer.js +2 -5
- package/dist/tui/ui/footer.js.map +1 -1
- package/package.json +7 -7
- package/dist/code_mode/files.d.ts +0 -47
- package/dist/code_mode/files.js +0 -296
- package/dist/code_mode/files.js.map +0 -1
- package/dist/core/session/goal.js +0 -54
- package/dist/core/session/goal.js.map +0 -1
- package/dist/core/tool/openrouter_decisions.js.map +0 -1
- package/dist/core/tool/openrouter_media.js +0 -180
- package/dist/core/tool/openrouter_media.js.map +0 -1
- package/dist/core/tools/goal.js +0 -167
- package/dist/core/tools/goal.js.map +0 -1
- package/dist/core/tools/history.js +0 -118
- package/dist/core/tools/history.js.map +0 -1
- package/dist/core/tools/mcp.js +0 -167
- package/dist/core/tools/mcp.js.map +0 -1
- package/dist/core/tools/nook.js.map +0 -1
- package/dist/core/tools/web.js.map +0 -1
- package/dist/diff_tool/app/dist/assets/index-CBT_sNIz.js +0 -340
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { openRouterModels, requestOpenRouterChat, requestOpenRouterDecisions, } from "../models/openrouter.js";
|
|
3
|
+
const kind = z.enum(["image", "audio", "video"]);
|
|
4
|
+
const attachment = z.union([
|
|
5
|
+
z.strictObject({ type: kind, path: z.string().min(1) }),
|
|
6
|
+
z.strictObject({ type: kind, data: z.string().min(1), mimeType: z.string().min(1) }),
|
|
7
|
+
]);
|
|
8
|
+
const chatOptions = z.strictObject({
|
|
9
|
+
model: z.string().min(1),
|
|
10
|
+
prompt: z.string().min(1),
|
|
11
|
+
system: z.string().min(1).optional(),
|
|
12
|
+
reasoning: z.string().optional(),
|
|
13
|
+
attachments: z.array(attachment).max(16).default([]),
|
|
14
|
+
});
|
|
15
|
+
const decisionOptions = z.strictObject({
|
|
16
|
+
model: z.string().min(1),
|
|
17
|
+
state: z.unknown(),
|
|
18
|
+
questions: z.unknown(),
|
|
19
|
+
});
|
|
20
|
+
export function createModelsCapability(backend, config, fetchImpl) {
|
|
21
|
+
return {
|
|
22
|
+
name: "models",
|
|
23
|
+
description: "Call AI models through OpenRouter for focused, standalone tasks. Example uses include extraction and summarization, image/audio/video analysis, typed classification or scoring, and second opinions. Each call uses only explicitly supplied inputs, without conversation context or agent tools.",
|
|
24
|
+
documentation: `# tau.models
|
|
25
|
+
|
|
26
|
+
Use AI models for focused tasks with explicitly supplied inputs. Calls do not inherit the conversation, persona, tools, or an implicit system prompt. Use chat for text/media understanding and free-form answers; use decisions for named classification, probability, or scoring questions.
|
|
27
|
+
|
|
28
|
+
## Interface
|
|
29
|
+
|
|
30
|
+
\`\`\`ts
|
|
31
|
+
type ModelsApi = {
|
|
32
|
+
list(): Promise<ModelList>;
|
|
33
|
+
chat(options: ChatOptions): Promise<ChatResult>;
|
|
34
|
+
decisions(options: DecisionOptions): Promise<DecisionResult>;
|
|
35
|
+
};
|
|
36
|
+
\`\`\`
|
|
37
|
+
|
|
38
|
+
## \`tau.models.list()\`
|
|
39
|
+
|
|
40
|
+
Takes no arguments and returns the fixed model catalog:
|
|
41
|
+
|
|
42
|
+
\`\`\`ts
|
|
43
|
+
type Model = {
|
|
44
|
+
id: string;
|
|
45
|
+
inputs: string[];
|
|
46
|
+
reasoning: string[];
|
|
47
|
+
role: string;
|
|
48
|
+
};
|
|
49
|
+
type ModelList = { chat: Model[]; decisions: Model[] };
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
Listing makes no provider request and requires no credentials. Select an exact ID from the appropriate list using its input modalities and role guidance. Only listed models and reasoning efforts are accepted. There is no default model, automatic substitution, or live discovery. Reuse a catalog already visible in the conversation.
|
|
53
|
+
|
|
54
|
+
## \`tau.models.chat(options)\`
|
|
55
|
+
|
|
56
|
+
Send one nonstreaming request.
|
|
57
|
+
|
|
58
|
+
\`\`\`ts
|
|
59
|
+
type Attachment = { type: "image" | "audio" | "video" } & (
|
|
60
|
+
| { path: string; data?: never; mimeType?: never }
|
|
61
|
+
| { data: string; mimeType: string; path?: never }
|
|
62
|
+
);
|
|
63
|
+
type ChatOptions = {
|
|
64
|
+
model: string;
|
|
65
|
+
prompt: string;
|
|
66
|
+
system?: string;
|
|
67
|
+
reasoning?: string;
|
|
68
|
+
attachments?: Attachment[];
|
|
69
|
+
};
|
|
70
|
+
type ChatResult = {
|
|
71
|
+
requested_model: string;
|
|
72
|
+
model: string;
|
|
73
|
+
answer: string | null;
|
|
74
|
+
finish_reason: "stop" | "length" | "content_filter";
|
|
75
|
+
id?: string;
|
|
76
|
+
provider?: string;
|
|
77
|
+
refusal?: string | null;
|
|
78
|
+
native_finish_reason?: string | null;
|
|
79
|
+
usage?: {
|
|
80
|
+
prompt_tokens: number;
|
|
81
|
+
completion_tokens: number;
|
|
82
|
+
total_tokens: number;
|
|
83
|
+
cost?: number | null;
|
|
84
|
+
[key: string]: unknown;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
\`\`\`
|
|
88
|
+
|
|
89
|
+
\`prompt\` and optional \`system\` must be nonblank. Omitted attachments default to an empty array. Omitted system instructions send no system message. Omitted reasoning leaves that setting to the provider; it does not necessarily disable reasoning. Reasoning traces are not returned as answer text.
|
|
90
|
+
|
|
91
|
+
Attachments follow the prompt in array order. Paths resolve from the current working directory. Inline data must be canonical padded base64 with a MIME type matching the actual bytes. Supply exactly one source form per attachment, not a URL. Audio/video require ffprobe on PATH. Unsupported media fail rather than being resized, converted, transcribed, or split automatically.
|
|
92
|
+
|
|
93
|
+
\`requested_model\` records the selected ID; \`model\` records the provider's returned ID. Inspect completion status before using the answer:
|
|
94
|
+
|
|
95
|
+
- \`stop\` with no refusal is complete.
|
|
96
|
+
- \`length\` is incomplete, even if answer text is empty.
|
|
97
|
+
- \`content_filter\` or a nonempty \`refusal\` is refusal, not a completed answer.
|
|
98
|
+
|
|
99
|
+
These statuses resolve normally. Invalid responses, unexpected tool calls, and a normal stop with neither answer nor refusal throw. No output token cap is sent; provider and model limits still apply.
|
|
100
|
+
|
|
101
|
+
For example, select a listed image-capable model and supply an existing screenshot:
|
|
102
|
+
|
|
103
|
+
\`\`\`js
|
|
104
|
+
const catalog = await tau.models.list();
|
|
105
|
+
const model = catalog.chat.find(item => item.id === "openai/gpt-6-luna");
|
|
106
|
+
if (!model || !model.inputs.includes("image")) throw new Error("model unavailable for images");
|
|
107
|
+
const result = await tau.models.chat({
|
|
108
|
+
model: model.id,
|
|
109
|
+
prompt: "Extract the error message and describe the visible failure.",
|
|
110
|
+
attachments: [{ type: "image", path: "./screenshot.png" }],
|
|
111
|
+
});
|
|
112
|
+
if (result.finish_reason !== "stop" || result.refusal || !result.answer)
|
|
113
|
+
throw new Error("model did not produce a complete answer");
|
|
114
|
+
printText(result.answer);
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
## \`tau.models.decisions(options)\`
|
|
118
|
+
|
|
119
|
+
Ask several named questions about one supplied state. Independent questions can share a request; dependent questions require separate calls.
|
|
120
|
+
|
|
121
|
+
\`\`\`ts
|
|
122
|
+
type Json = null | boolean | number | string | Json[] | { [key: string]: Json };
|
|
123
|
+
type Guidance = string | Json[] | { [key: string]: Json };
|
|
124
|
+
type Question =
|
|
125
|
+
| { type: "noul"; instructions: Guidance; criteria?: { true: Guidance; false: Guidance } }
|
|
126
|
+
| { type: "choice"; instructions: Guidance; criteria: Record<string, Guidance | null> }
|
|
127
|
+
| { type: "score"; instructions: Guidance; criteria: Guidance[] };
|
|
128
|
+
type DecisionOptions = {
|
|
129
|
+
model: string;
|
|
130
|
+
state: Guidance;
|
|
131
|
+
questions: Record<string, Question>;
|
|
132
|
+
};
|
|
133
|
+
type Answer =
|
|
134
|
+
| { type: "noul"; noul: number }
|
|
135
|
+
| {
|
|
136
|
+
type: "choice";
|
|
137
|
+
choice: string;
|
|
138
|
+
confidence?: number;
|
|
139
|
+
probabilities?: Record<string, number>;
|
|
140
|
+
}
|
|
141
|
+
| {
|
|
142
|
+
type: "score";
|
|
143
|
+
score: number;
|
|
144
|
+
confidence?: number;
|
|
145
|
+
probabilities?: Record<string, number>;
|
|
146
|
+
legend?: Record<string, Guidance>;
|
|
147
|
+
};
|
|
148
|
+
type DecisionResult = {
|
|
149
|
+
requested_model: string;
|
|
150
|
+
model: string;
|
|
151
|
+
answers: Record<string, Answer>;
|
|
152
|
+
usage: { input_tokens: number; output_tokens: number; cost?: number; [key: string]: unknown };
|
|
153
|
+
id?: string;
|
|
154
|
+
provider?: string;
|
|
155
|
+
};
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
\`questions\` must be nonempty with nonempty names. Choice criteria require at least one category; score criteria require a nonempty ordered rubric. Unknown question fields and the question/category name \`__proto__\` are rejected. Every question receives an answer of the corresponding type:
|
|
159
|
+
|
|
160
|
+
- \`noul\`: probability from 0 to 1, not a boolean.
|
|
161
|
+
- \`choice\`: one supplied category; optional confidence and category probabilities are from 0 to 1.
|
|
162
|
+
- \`score\`: position from 0 to the final rubric index, possibly fractional. Distribution and legend keys are rubric-index strings. Optional confidence and probabilities are from 0 to 1.
|
|
163
|
+
|
|
164
|
+
Negative judgments and low confidence are normal results. Responses with mismatched names, types, categories, or ranges throw; no decision thresholds or prose explanations are invented.
|
|
165
|
+
|
|
166
|
+
\`\`\`js
|
|
167
|
+
const catalog = await tau.models.list();
|
|
168
|
+
const model = catalog.decisions.find(item => item.id === "typesafe/jev-1.13");
|
|
169
|
+
if (!model) throw new Error("decision model unavailable");
|
|
170
|
+
const result = await tau.models.decisions({
|
|
171
|
+
model: model.id,
|
|
172
|
+
state: { ticket: "Checkout crashes when I click Pay." },
|
|
173
|
+
questions: {
|
|
174
|
+
is_bug: { type: "noul", instructions: "Does this describe broken behavior?" },
|
|
175
|
+
urgency: {
|
|
176
|
+
type: "score",
|
|
177
|
+
instructions: "How urgent is this issue?",
|
|
178
|
+
criteria: ["Can wait", "Fix soon", "Blocking revenue"],
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
printText(JSON.stringify(result.answers));
|
|
183
|
+
\`\`\`
|
|
184
|
+
|
|
185
|
+
## Limits and failures
|
|
186
|
+
|
|
187
|
+
Byte limits below use decimal bytes:
|
|
188
|
+
|
|
189
|
+
- Each prompt/system input and the decisions input: 1,000,000 UTF-8 bytes.
|
|
190
|
+
- Attachments: 16 total, including at most 4 audio and 1 video.
|
|
191
|
+
- Each image: 5,000,000 bytes; PNG/JPEG/WebP, one frame, at most 8,000 pixels per edge and 32 megapixels.
|
|
192
|
+
- Each audio/video: 12,000,000 bytes; single-stream PCM16 WAV or MP3, or H.264 MP4 up to 3840×2160 with optional AAC. Positive known duration, at most 600 seconds combined.
|
|
193
|
+
- Encoded request: 20,000,000 bytes including base64 and text; response: 8,000,000 bytes.
|
|
194
|
+
|
|
195
|
+
Validation, authentication, service failures, and malformed responses throw. There are no automatic retries. A failed or interrupted request may already be billable: inspect the outcome before retrying. Returned usage contains provider-reported metadata, not estimates; external charges are not included in session cost or usage logs.`,
|
|
196
|
+
api: {
|
|
197
|
+
list: (args) => {
|
|
198
|
+
z.tuple([]).parse(args);
|
|
199
|
+
return structuredClone(openRouterModels);
|
|
200
|
+
},
|
|
201
|
+
chat: async (args, context) => {
|
|
202
|
+
const [input] = z.tuple([chatOptions]).parse(args);
|
|
203
|
+
return await requestOpenRouterChat({
|
|
204
|
+
...input,
|
|
205
|
+
attachments: input.attachments.map(({ type, ...source }) => ({
|
|
206
|
+
kind: type,
|
|
207
|
+
...source,
|
|
208
|
+
})),
|
|
209
|
+
}, {
|
|
210
|
+
config,
|
|
211
|
+
signal: context.signal,
|
|
212
|
+
fetchImpl,
|
|
213
|
+
mediaAdapter: {
|
|
214
|
+
readFile: async (path, limit) => {
|
|
215
|
+
context.signal.throwIfAborted();
|
|
216
|
+
const file = await backend.readFileBinary(path, { maxBytes: limit });
|
|
217
|
+
context.signal.throwIfAborted();
|
|
218
|
+
return file.content;
|
|
219
|
+
},
|
|
220
|
+
probe: async (bytes, format) => {
|
|
221
|
+
const result = await backend.runNodeScript(probeScript, [], {
|
|
222
|
+
signal: context.signal,
|
|
223
|
+
timeoutMs: 20_000,
|
|
224
|
+
maxCaptureBytes: 1_000_000,
|
|
225
|
+
stdin: Buffer.from(JSON.stringify({ data: bytes.toString("base64"), format })),
|
|
226
|
+
});
|
|
227
|
+
if (result.exitCode !== 0 || result.truncated || result.timedOut || result.aborted)
|
|
228
|
+
throw new Error("failed to validate media; ensure ffprobe is installed and the media is valid");
|
|
229
|
+
return JSON.parse(result.stdout);
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
},
|
|
234
|
+
decisions: async (args, context) => {
|
|
235
|
+
const [input] = z.tuple([decisionOptions]).parse(args);
|
|
236
|
+
return await requestOpenRouterDecisions(input.model, { state: input.state, questions: input.questions }, { config, signal: context.signal, fetchImpl });
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const probeScript = `
|
|
242
|
+
const fs = require("node:fs");
|
|
243
|
+
const os = require("node:os");
|
|
244
|
+
const path = require("node:path");
|
|
245
|
+
const { execFileSync } = require("node:child_process");
|
|
246
|
+
const input = JSON.parse(fs.readFileSync(0, "utf8"));
|
|
247
|
+
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tau-model-media-"));
|
|
248
|
+
try {
|
|
249
|
+
const file = path.join(directory, "input");
|
|
250
|
+
fs.writeFileSync(file, Buffer.from(input.data, "base64"), { mode: 0o600 });
|
|
251
|
+
process.stdout.write(execFileSync("ffprobe", ["-v", "error", "-protocol_whitelist", "file", "-f", input.format, "-show_entries", "format=duration:stream=codec_type,codec_name,width,height", "-of", "json", file], { timeout: 15000, maxBuffer: 1000000 }));
|
|
252
|
+
} finally {
|
|
253
|
+
fs.rmSync(directory, { recursive: true, force: true });
|
|
254
|
+
}
|
|
255
|
+
`;
|
|
256
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/core/code_mode/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +1,15 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
|
-
import { Type } from "typebox";
|
|
3
2
|
import { z } from "zod";
|
|
4
3
|
import { createNookClientFromConfig } from "../nook/client.js";
|
|
5
4
|
import { buildNookDeployManifestFromBackend, buildNookTemplateManifestFromBackend, } from "../nook/deploy.js";
|
|
6
5
|
import { validateNookSiteSlug, validateNookTemplateName } from "../nook/validation.js";
|
|
7
6
|
import { formatZodError } from "../utils/zod.js";
|
|
8
|
-
import { buildCodeModeToolDescription, createCodeModeToolDefinition, executeInternalCodeMode, } from "./code_mode.js";
|
|
9
|
-
import { TOOL_NAME_NOOK } from "./tool_names.js";
|
|
10
|
-
const NOOK_CODE_MODE_TIMEOUT_MS = 60_000;
|
|
11
7
|
const MAX_KV_KEY_LENGTH = 256;
|
|
12
8
|
const MAX_KV_VALUE_BYTES = 64 * 1024;
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"Do not use this tool autonomously; use it only when the user asks to manage Nook, deploy/publish/host an app or artifact, inspect Nook state, or manage Nook KV.",
|
|
18
|
-
"If the user asks to deploy a static artifact or mini-app, this is usually the right deployment target.",
|
|
19
|
-
],
|
|
20
|
-
additionalDocumentation: [
|
|
21
|
-
"When app-authoring guidance is needed, treat nook.skill() as a second documentation step: after reading docs, run a separate documentation-only call that does nothing except console.log(await nook.skill()). Read the returned guide before authoring or modifying the app in later calls.",
|
|
22
|
-
],
|
|
23
|
-
});
|
|
24
|
-
export const NOOK_TOOL = {
|
|
25
|
-
name: TOOL_NAME_NOOK,
|
|
26
|
-
description: NOOK_DESCRIPTION,
|
|
27
|
-
parameters: Type.Object({
|
|
28
|
-
code: Type.String({
|
|
29
|
-
description: "JavaScript source to execute. Use console output for text and await image(block) to return images.",
|
|
30
|
-
}),
|
|
31
|
-
}, { additionalProperties: false }),
|
|
32
|
-
};
|
|
33
|
-
const nookArgsSchema = z
|
|
34
|
-
.object({
|
|
35
|
-
code: z.string().trim().min(1, "must not be empty."),
|
|
36
|
-
})
|
|
37
|
-
.strict();
|
|
9
|
+
const description = [
|
|
10
|
+
"Publish static apps and artifacts, inspect hosted sites, and manage their JSON KV on Nook.",
|
|
11
|
+
"Use tau.nook only when the user asks for deployment, hosting, or Nook management. Nook is the usual target for static mini-app publishing.",
|
|
12
|
+
].join(" ");
|
|
38
13
|
const nonEmptyStringSchema = z.string().trim().min(1);
|
|
39
14
|
const directorySchema = nonEmptyStringSchema;
|
|
40
15
|
const fileSchema = nonEmptyStringSchema;
|
|
@@ -60,34 +35,10 @@ function validatedPathLabel(validate) {
|
|
|
60
35
|
const siteSchema = validatedPathLabel(validateNookSiteSlug);
|
|
61
36
|
const templateSchema = validatedPathLabel(validateNookTemplateName);
|
|
62
37
|
const documentation = readFileSync(new URL("../static/code_mode/nook/documentation.md", import.meta.url), "utf8");
|
|
63
|
-
function parseNookArguments(raw) {
|
|
64
|
-
const rawCode = typeof raw === "object" && raw !== null && typeof raw.code === "string"
|
|
65
|
-
? raw.code
|
|
66
|
-
: "";
|
|
67
|
-
const subject = rawCode
|
|
68
|
-
.split(/\r?\n/)
|
|
69
|
-
.map((line) => line.trim())
|
|
70
|
-
.find(Boolean) ?? "(invalid code)";
|
|
71
|
-
const parsed = nookArgsSchema.safeParse(raw);
|
|
72
|
-
if (!parsed.success) {
|
|
73
|
-
return {
|
|
74
|
-
ok: false,
|
|
75
|
-
error: formatZodError(parsed.error),
|
|
76
|
-
code: rawCode,
|
|
77
|
-
subject,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
ok: true,
|
|
82
|
-
args: parsed.data,
|
|
83
|
-
code: parsed.data.code,
|
|
84
|
-
subject,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
38
|
function parseMethodArguments(method, args, schema) {
|
|
88
39
|
const parsed = schema.safeParse(args);
|
|
89
40
|
if (!parsed.success) {
|
|
90
|
-
throw new Error(`Invalid nook.${method} arguments: ${formatZodError(parsed.error)}`);
|
|
41
|
+
throw new Error(`Invalid tau.nook.${method} arguments: ${formatZodError(parsed.error)}`);
|
|
91
42
|
}
|
|
92
43
|
return parsed.data;
|
|
93
44
|
}
|
|
@@ -142,7 +93,7 @@ async function writeKvToFile(client, backend, site, key, file, signal) {
|
|
|
142
93
|
signal.throwIfAborted();
|
|
143
94
|
const content = JSON.stringify(value);
|
|
144
95
|
if (content === undefined) {
|
|
145
|
-
throw new Error(`nook.kv.getToFile received a non-JSON value for ${site}/${key}`);
|
|
96
|
+
throw new Error(`tau.nook.kv.getToFile received a non-JSON value for ${site}/${key}`);
|
|
146
97
|
}
|
|
147
98
|
const result = await backend.writeFile(file, content);
|
|
148
99
|
signal.throwIfAborted();
|
|
@@ -238,10 +189,14 @@ async function handleNookRequest(method, args, deps, config, backend, signal) {
|
|
|
238
189
|
throw new Error(`unsupported nook method '${method}'`);
|
|
239
190
|
}
|
|
240
191
|
}
|
|
241
|
-
|
|
192
|
+
const defaultDeps = { createClient: createNookClientFromConfig };
|
|
193
|
+
export function createNookCapability(backend, config, deps = defaultDeps) {
|
|
194
|
+
if (!config.nook)
|
|
195
|
+
throw new Error("nook is not configured");
|
|
242
196
|
const method = (name) => async (args, context) => await handleNookRequest(name, args, deps, config, backend, context.signal);
|
|
243
|
-
return
|
|
244
|
-
name:
|
|
197
|
+
return {
|
|
198
|
+
name: "nook",
|
|
199
|
+
description,
|
|
245
200
|
documentation,
|
|
246
201
|
api: {
|
|
247
202
|
skill: method("skill"),
|
|
@@ -266,25 +221,6 @@ function executeNookProgram(code, deps, config, backend, agentId, signal, timeou
|
|
|
266
221
|
list: method("kv.list"),
|
|
267
222
|
},
|
|
268
223
|
},
|
|
269
|
-
code,
|
|
270
|
-
agentId,
|
|
271
|
-
backend,
|
|
272
|
-
signal,
|
|
273
|
-
timeoutMs,
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
const defaultDeps = {
|
|
277
|
-
createClient: createNookClientFromConfig,
|
|
278
|
-
};
|
|
279
|
-
export function createNookToolDefinition(backend, config, deps = defaultDeps) {
|
|
280
|
-
const timeoutMs = deps.timeoutMs ?? NOOK_CODE_MODE_TIMEOUT_MS;
|
|
281
|
-
const implementation = {
|
|
282
|
-
schema: NOOK_TOOL,
|
|
283
|
-
timeoutMs,
|
|
284
|
-
parseArguments: parseNookArguments,
|
|
285
|
-
getBlockedReason: () => (config.nook ? undefined : "nook is not configured"),
|
|
286
|
-
execute: async ({ code, agentId, signal, backend: executionBackend }) => executeNookProgram(code, deps, config, executionBackend, agentId, signal, timeoutMs),
|
|
287
224
|
};
|
|
288
|
-
return createCodeModeToolDefinition(backend, implementation);
|
|
289
225
|
}
|
|
290
226
|
//# sourceMappingURL=nook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nook.js","sourceRoot":"","sources":["../../../src/core/code_mode/nook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function bindCodeModeSdk(capabilities) {
|
|
3
|
+
const byName = new Map(capabilities.map((capability) => [capability.name, capability]));
|
|
4
|
+
if (byName.size !== capabilities.length || byName.has("docs"))
|
|
5
|
+
throw new Error("duplicate or reserved code-mode capability");
|
|
6
|
+
return {
|
|
7
|
+
documentation: [
|
|
8
|
+
"## Tau capabilities",
|
|
9
|
+
"",
|
|
10
|
+
...capabilities.map(({ name, description }) => `- tau.${name}: ${description}`),
|
|
11
|
+
"",
|
|
12
|
+
'Before using a capability, read its documentation in a separate call: printText(await tau.docs("bash")). Reuse documentation already visible in the conversation. Do not guess signatures. tau.docs(name) accepts exactly one enabled capability name and returns its complete API reference.',
|
|
13
|
+
`
|
|
14
|
+
## Composing programs
|
|
15
|
+
|
|
16
|
+
Use a program when keeping intermediate data in JavaScript makes the task clearer: pass one call's result into another, combine independent evidence, or reduce a large response to the relevant facts. A single direct tool call is fine when composition adds nothing. Only enabled capabilities are callable, and their use restrictions still apply inside a program.
|
|
17
|
+
|
|
18
|
+
Plan around dependencies. Await a result before using it; run independent calls concurrently only when every result is needed, with a small explicit bound below the runtime's concurrency limit. Use service filters and pagination to bound inputs before processing them. For paginated work, print continuation values and resume in another program before exhausting its call or output budget. Keep reusable logic in small functions and avoid elaborate frameworks for one-shot work.
|
|
19
|
+
|
|
20
|
+
Check results before passing them onward: command exit and truncation fields, per-item retrieval errors, and model completion or refusal status can indicate failure even when the call itself resolves. Stop dependent work when required input is incomplete. For independent work, catch errors per item only when partial results are useful, and report what is missing rather than silently treating failures as empty data.
|
|
21
|
+
|
|
22
|
+
Print a concise result with evidence, identifiers, and any limitations needed for the next decision. Intermediate values stay in the program unless printed. Side effects and external charges are not rolled back. After failure or interruption, inspect what completed and retry only the necessary work, not the whole program blindly.
|
|
23
|
+
|
|
24
|
+
For web documentation research (requires web and Bash), search for the official site if needed, then discover its relevant page or root. Retrieve advertised Markdown or llms.txt and relevant Markdown pages with curl, using the Accept: text/markdown header for content negotiation. Do not pass these resources to tau.web.fetch. Prefer them over search highlights; use extraction for ordinary pages when no suitable representation exists or extraction is preferable.
|
|
25
|
+
|
|
26
|
+
For app authoring (requires Nook and filesystem tools), read Nook's authoring guide first. Keep a new app's complete working tree in a fresh temporary directory, create or copy its sources, build with Bash, and deploy the built static output with explicit visibility. These steps can be composed after the relevant references have been read; Nook does not build source trees itself.
|
|
27
|
+
|
|
28
|
+
### Examples for adaptation
|
|
29
|
+
|
|
30
|
+
These illustrate possibilities, not required workflows. Use only capabilities available for the task, read their references first, and adapt inputs, model choices, and result checks to the actual request.
|
|
31
|
+
|
|
32
|
+
Chain shell output into focused inference (requires Bash and models):
|
|
33
|
+
|
|
34
|
+
\`\`\`js
|
|
35
|
+
const run = await tau.bash.run({ command: "git diff --stat" });
|
|
36
|
+
if (run.exitCode !== 0 || run.truncated || run.timedOut || run.aborted)
|
|
37
|
+
throw new Error("incomplete diff summary");
|
|
38
|
+
const result = await tau.models.chat({
|
|
39
|
+
model: "openai/gpt-6-luna",
|
|
40
|
+
prompt: "Summarize this change footprint without inferring implementation details:\\n" + run.stdout,
|
|
41
|
+
});
|
|
42
|
+
if (result.finish_reason !== "stop" || result.refusal || !result.answer)
|
|
43
|
+
throw new Error("model did not produce a complete answer");
|
|
44
|
+
printText(result.answer);
|
|
45
|
+
\`\`\`
|
|
46
|
+
|
|
47
|
+
Combine a bounded set of independent searches and deduplicate evidence (requires web and a task that calls for web search):
|
|
48
|
+
|
|
49
|
+
\`\`\`js
|
|
50
|
+
const queries = ["CSS nesting browser support", "CSS nesting known limitations"];
|
|
51
|
+
const responses = await Promise.all(
|
|
52
|
+
queries.map(query => tau.web.search(query, { numResults: 3 })),
|
|
53
|
+
);
|
|
54
|
+
const unique = new Map();
|
|
55
|
+
for (const response of responses) {
|
|
56
|
+
for (const status of response.statuses) {
|
|
57
|
+
if (status.status !== "success") printText("Retrieval failed: " + status.id);
|
|
58
|
+
}
|
|
59
|
+
for (const result of response.results) unique.set(result.url, result);
|
|
60
|
+
}
|
|
61
|
+
for (const result of unique.values()) printText(result.title + "\\n" + result.url);
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
Keep useful independent results when one operation fails (requires Bash):
|
|
65
|
+
|
|
66
|
+
\`\`\`js
|
|
67
|
+
const commands = ["git status --short", "git diff --stat"];
|
|
68
|
+
const results = await Promise.allSettled(
|
|
69
|
+
commands.map(command => tau.bash.run({ command })),
|
|
70
|
+
);
|
|
71
|
+
for (const [index, result] of results.entries()) {
|
|
72
|
+
printText(commands[index]);
|
|
73
|
+
if (result.status === "rejected") {
|
|
74
|
+
printText("Command unavailable: " + String(result.reason));
|
|
75
|
+
} else {
|
|
76
|
+
const run = result.value;
|
|
77
|
+
if (run.exitCode !== 0 || run.truncated || run.timedOut || run.aborted)
|
|
78
|
+
printText("Incomplete command result; do not treat it as full evidence.");
|
|
79
|
+
printText(truncateLines(run.output, { maxLines: 30 }));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
\`\`\`
|
|
83
|
+
`,
|
|
84
|
+
].join("\n"),
|
|
85
|
+
api: {
|
|
86
|
+
...Object.fromEntries(capabilities.map(({ name, api }) => [name, api])),
|
|
87
|
+
docs: (args) => {
|
|
88
|
+
const [name] = z.tuple([z.string().min(1)]).parse(args);
|
|
89
|
+
const capability = byName.get(name);
|
|
90
|
+
if (!capability)
|
|
91
|
+
throw new Error(`unavailable code-mode capability '${name}'`);
|
|
92
|
+
return capability.documentation;
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/core/code_mode/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,eAAe,CAAC,YAAkC;IAIhE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,OAAO;QACL,aAAa,EAAE;YACb,qBAAqB;YACrB,EAAE;YACF,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,SAAS,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/E,EAAE;YACF,+RAA+R;YAC/R;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEL;SACI,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,GAAG,EAAE;YACH,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YACvE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,GAAG,CAAC,CAAC;gBAC/E,OAAO,UAAU,CAAC,aAAa,CAAC;YAClC,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|