@markusylisiurunen/tau 0.3.59 → 0.3.61

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.
Files changed (126) hide show
  1. package/dist/code_mode/runtime.js +4 -2
  2. package/dist/code_mode/runtime.js.map +1 -1
  3. package/dist/core/config/schema.js.map +1 -1
  4. package/dist/core/diff_review/review_instructions.js +2 -1
  5. package/dist/core/diff_review/review_instructions.js.map +1 -1
  6. package/dist/core/diff_review/tool.js +1 -1
  7. package/dist/core/diff_review/tool.js.map +1 -1
  8. package/dist/core/session/compaction.js +8 -7
  9. package/dist/core/session/compaction.js.map +1 -1
  10. package/dist/core/static/code_mode/sandbox_runner.mjs +2 -1
  11. package/dist/core/static/tau_docs/configuration.md +1 -1
  12. package/dist/core/static/tau_docs/getting-started.md +3 -4
  13. package/dist/core/static/tau_docs/history.md +1 -1
  14. package/dist/core/static/tau_docs/index.md +1 -0
  15. package/dist/core/static/tau_docs/manifest.json +1 -0
  16. package/dist/core/static/tau_docs/node-sdk.md +6 -0
  17. package/dist/core/static/tau_docs/nook.md +3 -3
  18. package/dist/core/static/tau_docs/sdk-diff-review.md +79 -0
  19. package/dist/core/static/tau_docs/telegram.md +21 -22
  20. package/dist/core/static/tau_docs/tools.md +4 -4
  21. package/dist/core/static/tau_docs/troubleshooting.md +2 -2
  22. package/dist/core/telegram/config.js +20 -2
  23. package/dist/core/telegram/config.js.map +1 -1
  24. package/dist/core/telegram/workspace.js +3 -39
  25. package/dist/core/telegram/workspace.js.map +1 -1
  26. package/dist/core/version.js +1 -1
  27. package/dist/diff_tool/app/dist/assets/{angular-html-DoxI_och.js → angular-html-DuYRAXV5.js} +1 -1
  28. package/dist/diff_tool/app/dist/assets/{angular-ts-C7CUd-D2.js → angular-ts-DgeuYxSF.js} +1 -1
  29. package/dist/diff_tool/app/dist/assets/{apl-7dieYM-l.js → apl-wxWa3Ydu.js} +1 -1
  30. package/dist/diff_tool/app/dist/assets/{astro-Czj3O4jM.js → astro-C4ttudxw.js} +1 -1
  31. package/dist/diff_tool/app/dist/assets/{blade-ClS0E2cC.js → blade-DWkdu_xo.js} +1 -1
  32. package/dist/diff_tool/app/dist/assets/{c-BKvTh-Jt.js → c-DiBfVf2Z.js} +1 -1
  33. package/dist/diff_tool/app/dist/assets/{chapel-qvFrfwEr.js → chapel-Bean9Neq.js} +1 -1
  34. package/dist/diff_tool/app/dist/assets/{cobol-B0vsaB-J.js → cobol-BU20Tg-_.js} +1 -1
  35. package/dist/diff_tool/app/dist/assets/{coffee-BUlcrU75.js → coffee-BNUM3vlm.js} +1 -1
  36. package/dist/diff_tool/app/dist/assets/{cpp-CKqEgX1l.js → cpp-BZ8z_KH7.js} +1 -1
  37. package/dist/diff_tool/app/dist/assets/{crystal-FCqSmIJ_.js → crystal-B5GhOPvy.js} +1 -1
  38. package/dist/diff_tool/app/dist/assets/{css-zZvYFJFc.js → css-DUSE-ie6.js} +1 -1
  39. package/dist/diff_tool/app/dist/assets/{edge-BKlbCo1f.js → edge-DzxgXKaz.js} +1 -1
  40. package/dist/diff_tool/app/dist/assets/{elixir-B2gSxtgZ.js → elixir-ycLoSLHp.js} +1 -1
  41. package/dist/diff_tool/app/dist/assets/{elm-DFEdzPJz.js → elm-DwDckPwp.js} +1 -1
  42. package/dist/diff_tool/app/dist/assets/{erb-DSgn8fHS.js → erb-CJOEvUBw.js} +1 -1
  43. package/dist/diff_tool/app/dist/assets/{git-rebase-CcgDECQr.js → git-rebase-BDL_AWDi.js} +1 -1
  44. package/dist/diff_tool/app/dist/assets/{glimmer-js-Dwxi4cX2.js → glimmer-js-z-oDGObE.js} +1 -1
  45. package/dist/diff_tool/app/dist/assets/{glimmer-ts-BnJVER8W.js → glimmer-ts-PtiYCBTb.js} +1 -1
  46. package/dist/diff_tool/app/dist/assets/{glsl-z7_gU-HN.js → glsl-Bzae6vfC.js} +1 -1
  47. package/dist/diff_tool/app/dist/assets/{graphql-Dt7V-d3L.js → graphql-BrEGWNkj.js} +1 -1
  48. package/dist/diff_tool/app/dist/assets/{hack-jVkr6EC8.js → hack-Dn4MCbdB.js} +1 -1
  49. package/dist/diff_tool/app/dist/assets/{haml-BF7cRiOF.js → haml-m4zNurSd.js} +1 -1
  50. package/dist/diff_tool/app/dist/assets/{handlebars-DAhNxR3E.js → handlebars-BnDqrwGf.js} +1 -1
  51. package/dist/diff_tool/app/dist/assets/{html-B7QW5YvU.js → html-BX2wi91g.js} +1 -1
  52. package/dist/diff_tool/app/dist/assets/{html-derivative-B-vyaE-N.js → html-derivative-DgD5ucSP.js} +1 -1
  53. package/dist/diff_tool/app/dist/assets/{http-Drkl04RP.js → http-Dp9EXJcu.js} +1 -1
  54. package/dist/diff_tool/app/dist/assets/{hurl-7gTFrvcN.js → hurl-BeZOac4Y.js} +1 -1
  55. package/dist/diff_tool/app/dist/assets/index-BV57bp-I.css +1 -0
  56. package/dist/diff_tool/app/dist/assets/{index-C9CiIimI.js → index-ScvXFe2C.js} +5 -5
  57. package/dist/diff_tool/app/dist/assets/{java-ZmvXuvs3.js → java-gPCWrEej.js} +1 -1
  58. package/dist/diff_tool/app/dist/assets/{javascript-C-OECu_Z.js → javascript-McqleDP-.js} +1 -1
  59. package/dist/diff_tool/app/dist/assets/{jinja-hvkV87CG.js → jinja-IsM9Sv2h.js} +1 -1
  60. package/dist/diff_tool/app/dist/assets/{jison-eJBDxKI8.js → jison-DwGiYqd_.js} +1 -1
  61. package/dist/diff_tool/app/dist/assets/{json-BPQU2w0u.js → json-Ct3yo1MZ.js} +1 -1
  62. package/dist/diff_tool/app/dist/assets/{jsx-C19s5MOj.js → jsx-zWyK7x89.js} +1 -1
  63. package/dist/diff_tool/app/dist/assets/{julia-CYISvCwi.js → julia-BUDOglEU.js} +1 -1
  64. package/dist/diff_tool/app/dist/assets/{just-5omBg5pB.js → just-BFEGZnDI.js} +1 -1
  65. package/dist/diff_tool/app/dist/assets/{latex-B_L85F2z.js → latex-BqtnpXRd.js} +1 -1
  66. package/dist/diff_tool/app/dist/assets/{liquid-BxbaQPPS.js → liquid-Dp6kE-SV.js} +1 -1
  67. package/dist/diff_tool/app/dist/assets/{lua-DQA0z-44.js → lua-VsbzDN8O.js} +1 -1
  68. package/dist/diff_tool/app/dist/assets/{marko-Dj5RV8IH.js → marko-CI82Cfi_.js} +1 -1
  69. package/dist/diff_tool/app/dist/assets/{mdc-CoHI6VJN.js → mdc-CX8BBCs1.js} +1 -1
  70. package/dist/diff_tool/app/dist/assets/{nginx-COnrY-gb.js → nginx-C43WH_V_.js} +1 -1
  71. package/dist/diff_tool/app/dist/assets/{nim-Ccfp0p1j.js → nim-CSnVEePF.js} +1 -1
  72. package/dist/diff_tool/app/dist/assets/{org-RForNsWm.js → org-Cmyc8nHh.js} +1 -1
  73. package/dist/diff_tool/app/dist/assets/{perl-DhHRsiUu.js → perl-CozuBSKr.js} +1 -1
  74. package/dist/diff_tool/app/dist/assets/{php-BlxKhJek.js → php-DQ3CuepV.js} +1 -1
  75. package/dist/diff_tool/app/dist/assets/{pug-o9YxnGzH.js → pug-BpRKzivp.js} +1 -1
  76. package/dist/diff_tool/app/dist/assets/{qml-Dzf494vL.js → qml-9RzFciO7.js} +1 -1
  77. package/dist/diff_tool/app/dist/assets/{r-Dp0OUrF6.js → r-CGfCJAgp.js} +1 -1
  78. package/dist/diff_tool/app/dist/assets/{razor-gylahu-m.js → razor-5S5yhlXJ.js} +1 -1
  79. package/dist/diff_tool/app/dist/assets/{regexp-C0rsDjCm.js → regexp-oQnZo4wn.js} +1 -1
  80. package/dist/diff_tool/app/dist/assets/{rst-D-DRAFtq.js → rst-CjLPbx7h.js} +1 -1
  81. package/dist/diff_tool/app/dist/assets/{ruby-BnY40vXq.js → ruby-1JWX2ibq.js} +1 -1
  82. package/dist/diff_tool/app/dist/assets/{sas-BaSo_s7i.js → sas-DaA-thHB.js} +1 -1
  83. package/dist/diff_tool/app/dist/assets/{scss-BX5R-Yyw.js → scss-CZ0MRiRt.js} +1 -1
  84. package/dist/diff_tool/app/dist/assets/{shellscript-CpRFVBRj.js → shellscript-BoYsyXZ_.js} +1 -1
  85. package/dist/diff_tool/app/dist/assets/{shellsession-BGRUDtms.js → shellsession-DPqct_qW.js} +1 -1
  86. package/dist/diff_tool/app/dist/assets/{soy-C2WL9FSb.js → soy-CCm_-AyN.js} +1 -1
  87. package/dist/diff_tool/app/dist/assets/{sql-CGmNnOfz.js → sql-Bfu-3tRP.js} +1 -1
  88. package/dist/diff_tool/app/dist/assets/{stata-CDamV3Uz.js → stata-mJR2kwNh.js} +1 -1
  89. package/dist/diff_tool/app/dist/assets/{surrealql-BqI4o6tP.js → surrealql-JwQqQzxg.js} +1 -1
  90. package/dist/diff_tool/app/dist/assets/{svelte-DPaOUioa.js → svelte-Cv-fRyqg.js} +1 -1
  91. package/dist/diff_tool/app/dist/assets/{templ-aqrZIEoc.js → templ-yxSnbTDs.js} +1 -1
  92. package/dist/diff_tool/app/dist/assets/{tex-Bjjtfacp.js → tex-CKB2BLjY.js} +1 -1
  93. package/dist/diff_tool/app/dist/assets/{ts-tags-BGFnsvdQ.js → ts-tags-BI6TUx3p.js} +1 -1
  94. package/dist/diff_tool/app/dist/assets/{tsx-C_rOxPqZ.js → tsx-BJh43aDa.js} +1 -1
  95. package/dist/diff_tool/app/dist/assets/{twig-DYqVwCOf.js → twig-CYqEEuwX.js} +1 -1
  96. package/dist/diff_tool/app/dist/assets/{typescript-CppQYc7K.js → typescript-AdEpX3cM.js} +1 -1
  97. package/dist/diff_tool/app/dist/assets/{typst-KIbA0FZG.js → typst-ChqNVVBe.js} +1 -1
  98. package/dist/diff_tool/app/dist/assets/{vue-iOYoJEJi.js → vue-8USuF5fp.js} +1 -1
  99. package/dist/diff_tool/app/dist/assets/{vue-html-DcZpMui9.js → vue-html-BQzG9utp.js} +1 -1
  100. package/dist/diff_tool/app/dist/assets/{vue-vine-C6v6c0Lr.js → vue-vine-BqtwbefK.js} +1 -1
  101. package/dist/diff_tool/app/dist/assets/{xml-zR0RltJO.js → xml-DJ0gKoKh.js} +1 -1
  102. package/dist/diff_tool/app/dist/assets/{xsl-B9pBLsIV.js → xsl-V1Fg3vOx.js} +1 -1
  103. package/dist/diff_tool/app/dist/assets/{yaml-sicIihvu.js → yaml-DmkHyU0p.js} +1 -1
  104. package/dist/diff_tool/app/dist/index.html +2 -2
  105. package/dist/diff_tool/http_server.js +129 -36
  106. package/dist/diff_tool/http_server.js.map +1 -1
  107. package/dist/diff_tool/index.js.map +1 -1
  108. package/dist/diff_tool/review_state.js +43 -4
  109. package/dist/diff_tool/review_state.js.map +1 -1
  110. package/dist/diff_tool/review_state_persistence.js +152 -0
  111. package/dist/diff_tool/review_state_persistence.js.map +1 -0
  112. package/dist/host/local_session_host.js +66 -59
  113. package/dist/host/local_session_host.js.map +1 -1
  114. package/dist/sdk/diff_review.d.ts +40 -0
  115. package/dist/sdk/diff_review.js +111 -0
  116. package/dist/sdk/diff_review.js.map +1 -0
  117. package/dist/sdk/index.d.ts +1 -0
  118. package/dist/sdk/index.js +1 -0
  119. package/dist/sdk/index.js.map +1 -1
  120. package/dist/sdk/session_tool_execution_backend.d.ts +16 -0
  121. package/dist/sdk/session_tool_execution_backend.js +157 -0
  122. package/dist/sdk/session_tool_execution_backend.js.map +1 -0
  123. package/dist/tui/session_tool_execution_backend.js +1 -156
  124. package/dist/tui/session_tool_execution_backend.js.map +1 -1
  125. package/package.json +1 -1
  126. package/dist/diff_tool/app/dist/assets/index-Az_6lupE.css +0 -1
@@ -0,0 +1,111 @@
1
+ import { DiffReviewBridge } from "../core/diff_review/bridge.js";
2
+ import { buildDiffReviewInstructions } from "../core/diff_review/review_instructions.js";
3
+ import { captureDiffReviewSnapshot } from "../core/diff_review/snapshot.js";
4
+ import { DiffToolHttpServer } from "../diff_tool/http_server.js";
5
+ import { DiffReviewProtocolClient, parseDiffToolLaunchEnvironment, } from "../diff_tool/protocol_client.js";
6
+ import { createSdkDiffSnapshotDeps, createSdkToolExecutionBackend, } from "./session_tool_execution_backend.js";
7
+ export async function startTauSdkDiffReview(options) {
8
+ options.signal?.throwIfAborted();
9
+ const sessionSnapshot = await options.session.snapshot();
10
+ const cwd = sessionSnapshot.executionEnvironment.cwd;
11
+ const backend = createSdkToolExecutionBackend({
12
+ executionEnvironment: options.session,
13
+ cwd,
14
+ });
15
+ const snapshot = await captureDiffReviewSnapshot({
16
+ cwd,
17
+ source: options.source,
18
+ ...(options.signal ? { signal: options.signal } : {}),
19
+ deps: createSdkDiffSnapshotDeps({ backend, cwd }),
20
+ });
21
+ options.signal?.throwIfAborted();
22
+ const ephemeral = await options.session.createEphemeralContext({
23
+ instructions: buildDiffReviewInstructions(snapshot),
24
+ tools: ["bash", "view_image"],
25
+ });
26
+ const bridge = new DiffReviewBridge({
27
+ snapshot,
28
+ contextWindow: sessionSnapshot.bootstrap.model.contextWindow,
29
+ submitThreadMessage: (submitOptions) => options.session.submitEphemeralThread({
30
+ contextId: ephemeral.contextId,
31
+ threadId: submitOptions.threadId,
32
+ ...(submitOptions.forkFromThreadId
33
+ ? { forkFromThreadId: submitOptions.forkFromThreadId }
34
+ : {}),
35
+ message: submitOptions.message,
36
+ }),
37
+ });
38
+ const unsubscribeEphemeral = options.session.onEphemeral((message) => {
39
+ const event = message.event;
40
+ if (event.type !== "ephemeral-agent.thread-update" || event.contextId !== ephemeral.contextId) {
41
+ return;
42
+ }
43
+ bridge.applyThreadUpdate(event.threadId, {
44
+ costTotal: event.update.costTotal,
45
+ usage: { ...event.update.usage },
46
+ ...(event.update.lastActivityText ? { lastActivityText: event.update.lastActivityText } : {}),
47
+ });
48
+ });
49
+ let server;
50
+ let removeAbortListener = () => undefined;
51
+ try {
52
+ await bridge.start();
53
+ options.signal?.throwIfAborted();
54
+ const client = new DiffReviewProtocolClient(parseDiffToolLaunchEnvironment(bridge.launchEnvironment));
55
+ const onSubmit = options.onSubmit;
56
+ server = new DiffToolHttpServer({
57
+ client,
58
+ ...(options.host !== undefined ? { host: options.host } : {}),
59
+ ...(options.port !== undefined ? { port: options.port } : {}),
60
+ ...(options.storage ? { storage: options.storage } : {}),
61
+ ...(onSubmit
62
+ ? {
63
+ onSubmit: async (submission) => {
64
+ await onSubmit({
65
+ review: submission.review,
66
+ diffCommand: submission.context.diffCommand,
67
+ reviewedFiles: submission.files.map((file) => file.path),
68
+ });
69
+ },
70
+ }
71
+ : {}),
72
+ });
73
+ const started = await server.start();
74
+ options.signal?.throwIfAborted();
75
+ const onAbort = () => {
76
+ void bridge.cancel("controller_cancelled");
77
+ };
78
+ options.signal?.addEventListener("abort", onAbort, { once: true });
79
+ removeAbortListener = () => options.signal?.removeEventListener("abort", onAbort);
80
+ let cleanedUp = false;
81
+ const cleanup = async () => {
82
+ if (cleanedUp)
83
+ return;
84
+ cleanedUp = true;
85
+ removeAbortListener();
86
+ unsubscribeEphemeral();
87
+ await options.session.closeEphemeralContext(ephemeral.contextId).catch(() => undefined);
88
+ await server?.close().catch(() => undefined);
89
+ await bridge.close().catch(() => undefined);
90
+ };
91
+ const result = bridge.result.finally(cleanup);
92
+ return {
93
+ url: started.url,
94
+ result,
95
+ async close() {
96
+ await bridge.cancel("controller_cancelled");
97
+ await result;
98
+ },
99
+ };
100
+ }
101
+ catch (error) {
102
+ removeAbortListener();
103
+ unsubscribeEphemeral();
104
+ await server?.close().catch(() => undefined);
105
+ await bridge.cancel("launch_failed").catch(() => undefined);
106
+ await bridge.close().catch(() => undefined);
107
+ await options.session.closeEphemeralContext(ephemeral.contextId).catch(() => undefined);
108
+ throw error;
109
+ }
110
+ }
111
+ //# sourceMappingURL=diff_review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff_review.js","sourceRoot":"","sources":["../../src/sdk/diff_review.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export { createTauSdkClient, createTauSdkWebSocketClient } from "./client.js";
8
8
  export { runTauClientToolCommand, TAU_CLIENT_TOOL_COMMAND_PROTOCOL_VERSION, type TauClientToolCommandDefinition, type TauClientToolCommandHandler, type TauClientToolCommandPresentation, } from "./client_tool_command.js";
9
9
  export { type TauClientToolPresentation, type TauClientToolTextTruncationOptions, truncateTauClientToolText, } from "./client_tool_presentation.js";
10
10
  export { createTauCodeModeClientTool, type TauSdkCodeModeClientToolOptions, } from "./code_mode.js";
11
+ export { type StartedTauSdkDiffReview, type StartTauSdkDiffReviewOptions, startTauSdkDiffReview, type TauSdkDiffReviewResult, type TauSdkDiffReviewSource, type TauSdkDiffReviewStorage, type TauSdkDiffReviewSubmission, } from "./diff_review.js";
11
12
  export { createTauSdkClientFromTransport } from "./session.js";
12
13
  export type { TauSdkAutocompletePathsResult, TauSdkClient, TauSdkClientOptions, TauSdkClientTool, TauSdkClientToolContext, TauSdkClientToolDescribeContext, TauSdkClientToolExecutionEnvironment, TauSdkClientToolResult, TauSdkCreateSessionInput, TauSdkDelta, TauSdkDeltaListener, TauSdkEphemeral, TauSdkEphemeralAgentTool, TauSdkEphemeralCloseResult, TauSdkEphemeralCreateResult, TauSdkEphemeralListener, TauSdkEphemeralSubmitResult, TauSdkHostDiagnostic, TauSdkInitializeParams, TauSdkPendingUserMessagesListener, TauSdkPendingUserMessagesMessage, TauSdkPendingUserMessagesState, TauSdkReadyMessage, TauSdkRequestId, TauSdkResolvePromptResult, TauSdkSession, TauSdkSessionCancelPendingMessagesResult, TauSdkSessionClearGoalResult, TauSdkSessionClient, TauSdkSessionCompactResult, TauSdkSessionExecOptions, TauSdkSessionExecResult, TauSdkSessionInterruptResult, TauSdkSessionInterruptSubagentResult, TauSdkSessionProtocolMethod, TauSdkSessionQueueResult, TauSdkSessionRecordResult, TauSdkSessionReloadResult, TauSdkSessionResumeGoalResult, TauSdkSessionRetryResult, TauSdkSessionRewindResult, TauSdkSessionSampleInput, TauSdkSessionSampleResult, TauSdkSessionSetPersonaResult, TauSdkSessionSetReasoningResult, TauSdkSessionSnapshotResult, TauSdkSessionStartGoalResult, TauSdkSessionSteerResult, TauSdkSessionSubmitResult, TauSdkSessionSummary, TauSdkSessionTurnOutcome, TauSdkSessionTurnRecord, TauSdkSessionUnobserveResult, TauSdkSessionUserMessageOptions, TauSdkSubagentActivitiesListener, TauSdkSubagentActivitiesMessage, TauSdkSubagentActivitiesState, TauSdkTransportClientOptions, TauSdkWebSocketClientOptions, } from "./types.js";
13
14
  export type { TauSdkUserTextProjection } from "./user_text.js";
package/dist/sdk/index.js CHANGED
@@ -5,6 +5,7 @@ export { createTauSdkClient, createTauSdkWebSocketClient } from "./client.js";
5
5
  export { runTauClientToolCommand, TAU_CLIENT_TOOL_COMMAND_PROTOCOL_VERSION, } from "./client_tool_command.js";
6
6
  export { truncateTauClientToolText, } from "./client_tool_presentation.js";
7
7
  export { createTauCodeModeClientTool, } from "./code_mode.js";
8
+ export { startTauSdkDiffReview, } from "./diff_review.js";
8
9
  export { createTauSdkClientFromTransport } from "./session.js";
9
10
  export { getTauUserDisplayText, getTauUserModelText, projectTauUserText } from "./user_text.js";
10
11
  export function getTauSdkSessionTurnRecord(snapshot, userHistoryEntryId) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,+BAA+B,EAC/B,kBAAkB,EAClB,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AAgBjC,OAAO,EACL,yBAAyB,EACzB,6CAA6C,GAC9C,MAAM,sBAAsB,CAAC;AAY9B,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EACL,uBAAuB,EACvB,wCAAwC,GAIzC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,GAE5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AA+D/D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEhG,MAAM,UAAU,0BAA0B,CACxC,QAAgE,EAChE,kBAA0B;IAE1B,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;QACtD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACpC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAgE,EAChE,kBAA0B;IAE1B,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACxE,OAAO,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,+BAA+B,EAC/B,kBAAkB,EAClB,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AAgBjC,OAAO,EACL,yBAAyB,EACzB,6CAA6C,GAC9C,MAAM,sBAAsB,CAAC;AAY9B,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EACL,uBAAuB,EACvB,wCAAwC,GAIzC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,GAE5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,qBAAqB,GAKtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AA+D/D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEhG,MAAM,UAAU,0BAA0B,CACxC,QAAgE,EAChE,kBAA0B;IAE1B,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;QACtD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACpC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAgE,EAChE,kBAA0B;IAE1B,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACxE,OAAO,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { CoreDeps } from "../core/runtime/deps.js";
2
+ import type { ToolExecutionBackend } from "../core/tools/execution_backend.js";
3
+ import type { TauSdkClientToolExecutionEnvironment } from "./types.js";
4
+ export declare function createSdkToolExecutionBackend(options: {
5
+ executionEnvironment: TauSdkClientToolExecutionEnvironment;
6
+ cwd: string;
7
+ }): ToolExecutionBackend;
8
+ export declare function createSdkDiffSnapshotDeps(options: {
9
+ backend: ToolExecutionBackend;
10
+ cwd: string;
11
+ }): Pick<CoreDeps, "spawn"> & {
12
+ env: Pick<CoreDeps["env"], "env">;
13
+ fs: {
14
+ readFile: (path: string) => Promise<string>;
15
+ };
16
+ };
@@ -0,0 +1,157 @@
1
+ import { basename } from "node:path";
2
+ import { SESSION_PROTOCOL_MAX_EXEC_STDIN_BYTES } from "../protocol/session_protocol.js";
3
+ const HELPER_TIMEOUT_MS = 10_000;
4
+ const MAX_FILE_BYTES = SESSION_PROTOCOL_MAX_EXEC_STDIN_BYTES;
5
+ const MAX_FILE_READ_CAPTURE_BYTES = 4 * Math.ceil(MAX_FILE_BYTES / 3) + 1024;
6
+ const EXEC_ARGUMENTS_COMMAND = 'exec "$0" "$@"';
7
+ export function createSdkToolExecutionBackend(options) {
8
+ const { executionEnvironment, cwd } = options;
9
+ const runBash = async (command, runOptions = {}) => {
10
+ const result = await executionEnvironment.exec(command, {
11
+ ...(runOptions.args !== undefined ? { args: runOptions.args } : {}),
12
+ ...(runOptions.env !== undefined ? { env: runOptions.env } : {}),
13
+ ...(runOptions.stdin !== undefined ? { stdin: runOptions.stdin } : {}),
14
+ cwd: runOptions.cwd ?? cwd,
15
+ ...(runOptions.timeoutMs !== undefined ? { timeoutMs: runOptions.timeoutMs } : {}),
16
+ ...(runOptions.maxCaptureBytes !== undefined
17
+ ? { maxCaptureBytes: runOptions.maxCaptureBytes }
18
+ : {}),
19
+ ...(runOptions.signal ? { signal: runOptions.signal } : {}),
20
+ });
21
+ runOptions.signal?.throwIfAborted();
22
+ return result;
23
+ };
24
+ const runNodeScript = (script, args = [], runOptions = {}) => runBash(EXEC_ARGUMENTS_COMMAND, {
25
+ ...runOptions,
26
+ args: ["node", "-e", script, ...args],
27
+ });
28
+ return {
29
+ async dispose() { },
30
+ runBash,
31
+ runNodeScript,
32
+ async readFile(path) {
33
+ const result = await this.readFileBinary(path, { maxBytes: MAX_FILE_BYTES });
34
+ return { path, content: result.content.toString("utf-8") };
35
+ },
36
+ async readFileBinary(path, readOptions = {}) {
37
+ const result = await runNodeHelper(runNodeScript, READ_FILE_BINARY_SCRIPT, [path, String(readOptions.maxBytes ?? MAX_FILE_BYTES)], {
38
+ cwd,
39
+ timeoutMs: HELPER_TIMEOUT_MS,
40
+ maxCaptureBytes: MAX_FILE_READ_CAPTURE_BYTES,
41
+ });
42
+ const parsed = JSON.parse(result);
43
+ return {
44
+ path,
45
+ content: Buffer.from(parsed.contentBase64, "base64"),
46
+ bytes: parsed.bytes,
47
+ };
48
+ },
49
+ async writeFile(path, content) {
50
+ const result = await writeFile(runNodeScript, cwd, path, Buffer.from(content, "utf-8"));
51
+ return { ...result, lines: content.split("\n").length };
52
+ },
53
+ async writeFileBinary(path, content) {
54
+ return await writeFile(runNodeScript, cwd, path, content);
55
+ },
56
+ async listDir(path) {
57
+ const result = await runNodeHelper(runNodeScript, LIST_DIR_SCRIPT, [path], {
58
+ cwd,
59
+ timeoutMs: HELPER_TIMEOUT_MS,
60
+ });
61
+ return { path, entries: JSON.parse(result) };
62
+ },
63
+ };
64
+ }
65
+ export function createSdkDiffSnapshotDeps(options) {
66
+ return {
67
+ spawn: async (cmd, args, spawnOptions = {}) => {
68
+ spawnOptions.signal?.throwIfAborted();
69
+ const result = await options.backend.runBash(EXEC_ARGUMENTS_COMMAND, {
70
+ args: [cmd, ...args],
71
+ cwd: spawnOptions.cwd ?? options.cwd,
72
+ ...(spawnOptions.env ? { env: definedEnvironment(spawnOptions.env) } : {}),
73
+ ...(spawnOptions.timeoutMs !== undefined ? { timeoutMs: spawnOptions.timeoutMs } : {}),
74
+ ...(spawnOptions.maxCaptureBytes !== undefined
75
+ ? { maxCaptureBytes: spawnOptions.maxCaptureBytes }
76
+ : {}),
77
+ ...(spawnOptions.signal ? { signal: spawnOptions.signal } : {}),
78
+ });
79
+ spawnOptions.signal?.throwIfAborted();
80
+ return {
81
+ stdout: result.stdout,
82
+ stderr: result.stderr,
83
+ ...(spawnOptions.captureOutput === "combined" ||
84
+ spawnOptions.captureOutput === "combined-and-split"
85
+ ? { output: result.output }
86
+ : {}),
87
+ exitCode: result.exitCode,
88
+ captureLimitExceeded: result.truncated,
89
+ timedOut: result.timedOut,
90
+ aborted: result.aborted,
91
+ closeSignal: result.closeSignal,
92
+ };
93
+ },
94
+ env: { env: () => ({}) },
95
+ fs: {
96
+ readFile: async (path) => (await options.backend.readFile(path)).content,
97
+ },
98
+ };
99
+ }
100
+ function definedEnvironment(env) {
101
+ return Object.fromEntries(Object.entries(env).filter((entry) => entry[1] !== undefined));
102
+ }
103
+ async function runNodeHelper(runNodeScript, script, args, options) {
104
+ const result = await runNodeScript(script, args, options);
105
+ if (result.truncated) {
106
+ throw new Error(`${basename(args[0] ?? "helper")} output exceeded the capture limit`);
107
+ }
108
+ if (result.exitCode !== 0) {
109
+ throw new Error(result.stderr.trim() || result.stdout.trim() || `${basename(args[0] ?? "helper")} failed`);
110
+ }
111
+ return result.stdout;
112
+ }
113
+ async function writeFile(runNodeScript, cwd, path, content) {
114
+ if (content.byteLength > MAX_FILE_BYTES) {
115
+ throw new Error(`file exceeds maximum size of ${MAX_FILE_BYTES} bytes`);
116
+ }
117
+ const result = await runNodeHelper(runNodeScript, WRITE_FILE_SCRIPT, [path], {
118
+ cwd,
119
+ timeoutMs: HELPER_TIMEOUT_MS,
120
+ stdin: content,
121
+ });
122
+ return JSON.parse(result);
123
+ }
124
+ const READ_FILE_BINARY_SCRIPT = `
125
+ const fs = require("fs");
126
+ const path = process.argv[1];
127
+ const maxBytes = Number(process.argv[2]);
128
+ const stats = fs.statSync(path);
129
+ if (!stats.isFile()) throw new Error("path is not a file");
130
+ if (stats.size > maxBytes) {
131
+ throw new Error(\`file exceeds maximum size of \${maxBytes} bytes (got \${stats.size} bytes)\`);
132
+ }
133
+ const content = fs.readFileSync(path);
134
+ process.stdout.write(JSON.stringify({
135
+ contentBase64: content.toString("base64"),
136
+ bytes: content.byteLength,
137
+ }));
138
+ `.trim();
139
+ const WRITE_FILE_SCRIPT = `
140
+ const fs = require("fs");
141
+ const path = require("path");
142
+ const file = process.argv[1];
143
+ const content = fs.readFileSync(0);
144
+ fs.mkdirSync(path.dirname(file), { recursive: true });
145
+ fs.writeFileSync(file, content);
146
+ process.stdout.write(JSON.stringify({ path: file, bytes: content.byteLength }));
147
+ `.trim();
148
+ const LIST_DIR_SCRIPT = `
149
+ const fs = require("fs");
150
+ const entries = fs.readdirSync(process.argv[1], { withFileTypes: true }).map((entry) => ({
151
+ name: entry.name,
152
+ isDirectory: entry.isDirectory(),
153
+ isSymlink: entry.isSymbolicLink(),
154
+ }));
155
+ process.stdout.write(JSON.stringify(entries));
156
+ `.trim();
157
+ //# sourceMappingURL=session_tool_execution_backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session_tool_execution_backend.js","sourceRoot":"","sources":["../../src/sdk/session_tool_execution_backend.ts"],"names":[],"mappings":"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"}
@@ -1,157 +1,2 @@
1
- import { basename } from "node:path";
2
- import { SESSION_PROTOCOL_MAX_EXEC_STDIN_BYTES } from "../protocol/session_protocol.js";
3
- const HELPER_TIMEOUT_MS = 10_000;
4
- const MAX_FILE_BYTES = SESSION_PROTOCOL_MAX_EXEC_STDIN_BYTES;
5
- const MAX_FILE_READ_CAPTURE_BYTES = 4 * Math.ceil(MAX_FILE_BYTES / 3) + 1024;
6
- const EXEC_ARGUMENTS_COMMAND = 'exec "$0" "$@"';
7
- export function createSdkToolExecutionBackend(options) {
8
- const { executionEnvironment, cwd } = options;
9
- const runBash = async (command, runOptions = {}) => {
10
- const result = await executionEnvironment.exec(command, {
11
- ...(runOptions.args !== undefined ? { args: runOptions.args } : {}),
12
- ...(runOptions.env !== undefined ? { env: runOptions.env } : {}),
13
- ...(runOptions.stdin !== undefined ? { stdin: runOptions.stdin } : {}),
14
- cwd: runOptions.cwd ?? cwd,
15
- ...(runOptions.timeoutMs !== undefined ? { timeoutMs: runOptions.timeoutMs } : {}),
16
- ...(runOptions.maxCaptureBytes !== undefined
17
- ? { maxCaptureBytes: runOptions.maxCaptureBytes }
18
- : {}),
19
- ...(runOptions.signal ? { signal: runOptions.signal } : {}),
20
- });
21
- runOptions.signal?.throwIfAborted();
22
- return result;
23
- };
24
- const runNodeScript = (script, args = [], runOptions = {}) => runBash(EXEC_ARGUMENTS_COMMAND, {
25
- ...runOptions,
26
- args: ["node", "-e", script, ...args],
27
- });
28
- return {
29
- async dispose() { },
30
- runBash,
31
- runNodeScript,
32
- async readFile(path) {
33
- const result = await this.readFileBinary(path, { maxBytes: MAX_FILE_BYTES });
34
- return { path, content: result.content.toString("utf-8") };
35
- },
36
- async readFileBinary(path, readOptions = {}) {
37
- const result = await runNodeHelper(runNodeScript, READ_FILE_BINARY_SCRIPT, [path, String(readOptions.maxBytes ?? MAX_FILE_BYTES)], {
38
- cwd,
39
- timeoutMs: HELPER_TIMEOUT_MS,
40
- maxCaptureBytes: MAX_FILE_READ_CAPTURE_BYTES,
41
- });
42
- const parsed = JSON.parse(result);
43
- return {
44
- path,
45
- content: Buffer.from(parsed.contentBase64, "base64"),
46
- bytes: parsed.bytes,
47
- };
48
- },
49
- async writeFile(path, content) {
50
- const result = await writeFile(runNodeScript, cwd, path, Buffer.from(content, "utf-8"));
51
- return { ...result, lines: content.split("\n").length };
52
- },
53
- async writeFileBinary(path, content) {
54
- return await writeFile(runNodeScript, cwd, path, content);
55
- },
56
- async listDir(path) {
57
- const result = await runNodeHelper(runNodeScript, LIST_DIR_SCRIPT, [path], {
58
- cwd,
59
- timeoutMs: HELPER_TIMEOUT_MS,
60
- });
61
- return { path, entries: JSON.parse(result) };
62
- },
63
- };
64
- }
65
- export function createSdkDiffSnapshotDeps(options) {
66
- return {
67
- spawn: async (cmd, args, spawnOptions = {}) => {
68
- spawnOptions.signal?.throwIfAborted();
69
- const result = await options.backend.runBash(EXEC_ARGUMENTS_COMMAND, {
70
- args: [cmd, ...args],
71
- cwd: spawnOptions.cwd ?? options.cwd,
72
- ...(spawnOptions.env ? { env: definedEnvironment(spawnOptions.env) } : {}),
73
- ...(spawnOptions.timeoutMs !== undefined ? { timeoutMs: spawnOptions.timeoutMs } : {}),
74
- ...(spawnOptions.maxCaptureBytes !== undefined
75
- ? { maxCaptureBytes: spawnOptions.maxCaptureBytes }
76
- : {}),
77
- ...(spawnOptions.signal ? { signal: spawnOptions.signal } : {}),
78
- });
79
- spawnOptions.signal?.throwIfAborted();
80
- return {
81
- stdout: result.stdout,
82
- stderr: result.stderr,
83
- ...(spawnOptions.captureOutput === "combined" ||
84
- spawnOptions.captureOutput === "combined-and-split"
85
- ? { output: result.output }
86
- : {}),
87
- exitCode: result.exitCode,
88
- captureLimitExceeded: result.truncated,
89
- timedOut: result.timedOut,
90
- aborted: result.aborted,
91
- closeSignal: result.closeSignal,
92
- };
93
- },
94
- env: { env: () => ({}) },
95
- fs: {
96
- readFile: async (path) => (await options.backend.readFile(path)).content,
97
- },
98
- };
99
- }
100
- function definedEnvironment(env) {
101
- return Object.fromEntries(Object.entries(env).filter((entry) => entry[1] !== undefined));
102
- }
103
- async function runNodeHelper(runNodeScript, script, args, options) {
104
- const result = await runNodeScript(script, args, options);
105
- if (result.truncated) {
106
- throw new Error(`${basename(args[0] ?? "helper")} output exceeded the capture limit`);
107
- }
108
- if (result.exitCode !== 0) {
109
- throw new Error(result.stderr.trim() || result.stdout.trim() || `${basename(args[0] ?? "helper")} failed`);
110
- }
111
- return result.stdout;
112
- }
113
- async function writeFile(runNodeScript, cwd, path, content) {
114
- if (content.byteLength > MAX_FILE_BYTES) {
115
- throw new Error(`file exceeds maximum size of ${MAX_FILE_BYTES} bytes`);
116
- }
117
- const result = await runNodeHelper(runNodeScript, WRITE_FILE_SCRIPT, [path], {
118
- cwd,
119
- timeoutMs: HELPER_TIMEOUT_MS,
120
- stdin: content,
121
- });
122
- return JSON.parse(result);
123
- }
124
- const READ_FILE_BINARY_SCRIPT = `
125
- const fs = require("fs");
126
- const path = process.argv[1];
127
- const maxBytes = Number(process.argv[2]);
128
- const stats = fs.statSync(path);
129
- if (!stats.isFile()) throw new Error("path is not a file");
130
- if (stats.size > maxBytes) {
131
- throw new Error(\`file exceeds maximum size of \${maxBytes} bytes (got \${stats.size} bytes)\`);
132
- }
133
- const content = fs.readFileSync(path);
134
- process.stdout.write(JSON.stringify({
135
- contentBase64: content.toString("base64"),
136
- bytes: content.byteLength,
137
- }));
138
- `.trim();
139
- const WRITE_FILE_SCRIPT = `
140
- const fs = require("fs");
141
- const path = require("path");
142
- const file = process.argv[1];
143
- const content = fs.readFileSync(0);
144
- fs.mkdirSync(path.dirname(file), { recursive: true });
145
- fs.writeFileSync(file, content);
146
- process.stdout.write(JSON.stringify({ path: file, bytes: content.byteLength }));
147
- `.trim();
148
- const LIST_DIR_SCRIPT = `
149
- const fs = require("fs");
150
- const entries = fs.readdirSync(process.argv[1], { withFileTypes: true }).map((entry) => ({
151
- name: entry.name,
152
- isDirectory: entry.isDirectory(),
153
- isSymlink: entry.isSymbolicLink(),
154
- }));
155
- process.stdout.write(JSON.stringify(entries));
156
- `.trim();
1
+ export { createSdkDiffSnapshotDeps, createSdkToolExecutionBackend, } from "../sdk/session_tool_execution_backend.js";
157
2
  //# sourceMappingURL=session_tool_execution_backend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session_tool_execution_backend.js","sourceRoot":"","sources":["../../src/tui/session_tool_execution_backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session_tool_execution_backend.js","sourceRoot":"","sources":["../../src/tui/session_tool_execution_backend.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,0CAA0C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markusylisiurunen/tau",
3
- "version": "0.3.59",
3
+ "version": "0.3.61",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "tau": "dist/main.js"
@@ -1 +0,0 @@
1
- *,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;tab-size:4;font-family:system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;line-height:1.15}body{margin:0}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{border-color:currentColor}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%;line-height:1.15}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}.btn{border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:var(--font-size-ui);cursor:pointer;white-space:nowrap;border-radius:0;align-items:center;gap:5px;padding:4px 10px;display:inline-flex}.btn:hover{background:var(--surface-hover)}.btn:disabled{opacity:.35;cursor:not-allowed}.btn.primary{background:var(--accent-primary);color:var(--text-inverse);border-color:#0000;font-weight:500}.btn.primary:hover{background:var(--accent-primary-hover)}.btn.ghost{color:var(--text-muted);background:0 0;border-color:#0000}.btn.ghost:hover{background:var(--surface-hover);color:var(--text)}.btn-group{align-items:center;gap:2px;display:inline-flex}.icon-btn{aspect-ratio:1;color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.icon-btn:hover{background:var(--surface-hover);color:var(--text)}.icon-btn.active{background:var(--surface-hover);border-color:var(--border);color:var(--text)}.icon-btn.ghost{color:var(--text-muted)}.icon-btn.ghost:hover{color:var(--text)}.text-input-area{border:1px solid var(--border);background:var(--bg);width:100%;color:var(--text);font:inherit;border-radius:0;padding:6px 8px;display:block}.text-input-area:focus{border-color:var(--border-focus);outline:none}@font-face{font-family:JetBrains Mono;font-weight:400;font-style:normal;font-display:swap;src:url(/fonts/JetBrainsMono-Regular.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-weight:500;font-style:normal;font-display:swap;src:url(/fonts/JetBrainsMono-Medium.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-weight:600;font-style:normal;font-display:swap;src:url(/fonts/JetBrainsMono-SemiBold.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-weight:700;font-style:normal;font-display:swap;src:url(/fonts/JetBrainsMono-Bold.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-weight:400;font-style:italic;font-display:swap;src:url(/fonts/JetBrainsMono-Italic.woff2)format("woff2")}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#111;--surface:#121212;--surface-hover:#171717;--file-header-bg:color-mix(in srgb, var(--bg) 97%, var(--text));--file-header-bg-hover:color-mix(in srgb, var(--bg) 95%, var(--text));--border:#1f1f1f;--border-focus:#333;--text:#bdbdbd;--text-muted:#666;--accent-add:#5ae28c;--accent-del:#f86363;--accent-change:#b38bf9;--accent-del-muted:#f87272b8;--accent-del-subtle:#f8727214;--accent-del-subtle-hover:#f8727224;--accent-primary:#e0e0e0;--text-inverse:#090909;--accent-primary-hover:#f0f0f0;--thread-border-muted:#d6d6d626;--thread-border-strong:#d6d6d629;--thread-border-subtle:#d6d6d614;--thread-surface-subtle:#ffffff05;--thread-agent-surface:color-mix(in srgb, var(--accent-add) 4%, transparent);--sidebar-status-add:color-mix(in srgb, var(--accent-add) 55%, var(--text-muted));--sidebar-status-del:color-mix(in srgb, var(--accent-del) 45%, var(--text-muted));--sidebar-status-change:color-mix(in srgb, var(--accent-change) 45%, var(--text-muted));--dialog-backdrop:#000c;--popover-shadow:#00000073;--button-split-border:color-mix(in srgb, var(--text-inverse) 18%, transparent);--code-inline-bg:color-mix(in srgb, var(--accent-add) 7%, transparent);--code-inline-text:color-mix(in srgb, var(--accent-add) 82%, var(--text));--bar-height:48px;--sidebar-width:300px;--content-padding-x:12px;--file-gap:12px;--font-size-ui:1rem;--font-size-lg:1.07143rem;--font-size-sm:.928571rem;--font-size-xs:.857143rem;--font-size-code:.928571rem;--font-weight-ui:400;--font-weight-code:400;--letter-spacing-ui:0;--letter-spacing-code:0;--font-family-ui:system-ui, sans-serif;--font-family-code:"JetBrains Mono", monospace;--line-height-ui:1.5;--diffs-font-family:var(--font-family-code);--diffs-line-height:1.75;font-family:var(--font-family-ui);font-size:14px;font-weight:var(--font-weight-ui);letter-spacing:var(--letter-spacing-ui);line-height:var(--line-height-ui)}*,:before,:after{box-sizing:border-box;margin:0}body{background:var(--bg);color:var(--text);min-height:100vh}button,input,textarea{color:inherit;font:inherit}.app{min-height:100vh}.content{min-height:calc(100vh - var(--bar-height));padding:var(--content-padding-x)}.app.sidebar-open .content{margin-left:var(--sidebar-width)}.submit-popover{background:var(--surface);border:1px solid var(--border);box-shadow:0 18px 48px var(--popover-shadow);z-index:35;flex-direction:column;gap:12px;width:min(420px,100vw - 24px);padding:12px;display:flex;position:fixed}.submit-popover-input{resize:vertical;min-height:calc(7.5em + 1.5rem)}.submit-popover-actions{justify-content:flex-end;align-items:center;gap:6px;display:flex}.empty{color:var(--text-muted);padding:32px 16px}.diff-stats{align-items:center;gap:6px;display:inline-flex}.stat-add{color:var(--accent-add)}.stat-del{color:var(--accent-del)}.brief-dialog-body-wrap{flex:auto;min-height:0;display:block;overflow:auto}.brief-dialog-empty{color:var(--text-muted);padding:1rem;font-size:16px}.brief-dialog-body{padding:1rem;font-size:16px}.dialog-backdrop{background:var(--dialog-backdrop);z-index:40;justify-content:center;align-items:flex-start;padding-block:40px 20px;padding-inline:20px;display:flex;position:fixed;inset:0}.dialog{background:var(--surface);border:1px solid var(--border);flex-direction:column;width:min(760px,100%);min-height:0;max-height:calc(100vh - 60px);display:flex;overflow:hidden}.dialog-header{background:var(--bg);border-bottom:1px solid var(--border);z-index:1;justify-content:space-between;align-items:center;gap:8px;padding:1rem;display:flex;position:sticky;top:0}.dialog-heading{min-width:0}.dialog-title{color:var(--text);font-size:16px}.dialog-actions{flex-shrink:0}.dialog-close{width:24px;height:24px;padding:0}.dialog-body-wrap{flex-direction:column;flex:auto;min-height:0;display:flex;overflow:auto}.markdown-content{--markdown-code-block-border-color:color-mix(in srgb, var(--border) 86%, var(--bg));line-height:var(--line-height-ui);--markdown-code-block-font-size:calc(14 / 15 * 1rem);--markdown-code-block-margin-block:1em;--markdown-code-block-padding:8px 10px;--markdown-heading-letter-spacing:-.01em;--markdown-heading-margin-block:1em .75em;--markdown-heading-size:1.2em;--markdown-heading-weight:650;--markdown-inline-code-font-size:.9375em;--markdown-inline-code-padding-x:5px;--markdown-inline-code-padding-y:1px;--markdown-list-item-gap:.125em;--markdown-list-margin-block:1em;--markdown-list-nested-gap:.25em;--markdown-list-padding:1.5em;--markdown-paragraph-margin-block:1em;--markdown-prose-color:color-mix(in srgb, var(--text) 74%, var(--text-muted));--markdown-blockquote-color:color-mix(in srgb, var(--text) 47%, var(--text-muted));overflow-wrap:anywhere;white-space:normal;width:100%;min-width:0;max-width:100%}.markdown-content>:first-child{margin-block-start:0!important}.markdown-content>:last-child{margin-block-end:0!important}.markdown-content :where(h1,h2,h3,h4,h5,h6){color:var(--text);font-size:var(--markdown-heading-size);font-weight:var(--markdown-heading-weight);letter-spacing:var(--markdown-heading-letter-spacing);margin-block:var(--markdown-heading-margin-block);line-height:1.2}.markdown-content p{margin-block:var(--markdown-paragraph-margin-block)}.markdown-content p,.markdown-content li{color:var(--markdown-prose-color)}.markdown-content code{background:var(--code-inline-bg);color:var(--code-inline-text);font-family:var(--font-family-code);font-size:var(--markdown-inline-code-font-size);font-weight:var(--font-weight-code);letter-spacing:var(--letter-spacing-code);padding-block:var(--markdown-inline-code-padding-y);padding-inline:var(--markdown-inline-code-padding-x)}.markdown-content pre{border:1px solid var(--markdown-code-block-border-color);box-sizing:border-box;contain:inline-size;margin-block:var(--markdown-code-block-margin-block);min-width:0;max-width:100%;padding:var(--markdown-code-block-padding);white-space:pre;overflow-x:auto;background:var(--bg)!important}.markdown-content pre code{color:var(--text-muted);font-size:var(--markdown-code-block-font-size);min-width:0;max-width:100%;white-space:inherit;background:0 0;padding:0;display:block}.markdown-content ul,.markdown-content ol{margin-block:var(--markdown-list-margin-block);padding-left:var(--markdown-list-padding)}.markdown-content :where(h1,h2,h3,h4,h5,h6)+ul,.markdown-content :where(h1,h2,h3,h4,h5,h6)+ol{margin-block-start:0}.markdown-content ul{list-style:outside}.markdown-content ol{list-style:decimal}.markdown-content li+li{margin-top:var(--markdown-list-item-gap)}.markdown-content li::marker{color:var(--text-muted)}.markdown-content li>p{margin:0}.markdown-content li>p+p{margin-top:var(--markdown-list-nested-gap)}.markdown-content li>ul,.markdown-content li>ol{margin-block:var(--markdown-list-nested-gap) 0}.markdown-content blockquote{border-inline-start:2px solid var(--text-muted);color:var(--markdown-blockquote-color);padding-inline-start:.75em}.markdown-content strong{color:var(--text);font-weight:600}.markdown-content hr{border-bottom:0;border-inline:0;border-top:1px solid var(--thread-border-subtle);margin:1.5em 0}.markdown-content a{color:var(--text);text-underline-offset:2px;text-decoration:underline}.checkbox-btn{color:var(--text-muted);cursor:pointer;font-size:var(--font-size-xs);white-space:nowrap;align-items:center;gap:6px;padding:4px 0;display:inline-flex;position:relative}.checkbox-btn:hover{color:var(--text)}.checkbox-input{opacity:0;position:absolute;inset:0}.checkbox-box{border:1px solid var(--text-muted);color:var(--text-inverse);background:0 0;border-radius:0;flex:0 0 14px;justify-content:center;align-items:center;width:14px;height:14px;display:inline-flex}.checkbox-btn:hover .checkbox-box{border-color:var(--text)}.checkbox-input:focus-visible+.checkbox-box{border-color:var(--border-focus)}.checkbox-input:checked+.checkbox-box{background:var(--accent-add);border-color:var(--accent-add);color:var(--text-inverse)}.detached-thread-dialog-body-wrap{flex:auto;min-height:0;font-size:15px;display:flex;overflow:hidden}.detached-thread-dialog-layout{flex-direction:column;flex:auto;min-height:0;display:flex}.detached-thread-dialog-messages{flex:auto;min-height:0;overflow:auto}.detached-thread-dialog-message{padding:1rem}.detached-thread-dialog-message+.detached-thread-dialog-message{border-top:1px solid var(--border)}.detached-thread-dialog-message-assistant{background:var(--thread-agent-surface)}.detached-thread-dialog-message-header{justify-content:flex-start;align-items:center;gap:8px;margin-bottom:.5rem;display:flex}.detached-thread-dialog-role{color:var(--text);font-weight:600;display:inline-block}.detached-thread-dialog-delete{appearance:none;color:var(--text-muted);cursor:pointer;background:0 0;border:none;align-items:center;padding:.125rem;display:inline-flex}.detached-thread-dialog-delete:hover{color:var(--text)}.detached-thread-dialog-thinking{color:var(--text-muted);display:block}.detached-thread-dialog-composer{background:var(--bg);border-top:1px solid var(--border);flex:none;padding:1rem}.detached-thread-dialog-composer .btn,.detached-thread-dialog-composer .checkbox-btn{font-size:15px}.detached-thread-dialog-input{resize:vertical;min-height:96px}.detached-thread-dialog-actions{justify-content:flex-end;align-items:center;gap:8px;margin-top:.5rem;display:flex}.detached-thread-dialog-secondary{border-color:var(--thread-border-subtle);color:var(--text-muted);background:0 0}.detached-thread-dialog-secondary:hover{border-color:var(--border);background:var(--surface-hover);color:var(--text)}.comment-editor{border:1px solid var(--border);border-left:2px solid var(--thread-border-muted);background:var(--surface);box-sizing:border-box;font-size:var(--font-size-ui);border-radius:0;max-width:800px;margin:6px 10px 8px;padding:8px 10px 8px 12px}.comment-input{min-height:56px;font-size:var(--font-size-ui);resize:vertical}.comment-actions{justify-content:flex-end;align-items:center;gap:4px;margin-top:6px;display:flex}.comment-actions .checkbox-btn{font-size:var(--font-size-ui);margin-inline-end:auto}.thread-card{background:var(--surface);border:1px solid var(--border);font-size:var(--font-size-lg);max-width:800px;margin:.25rem}.thread-card.resolved{border-color:var(--thread-border-strong)}.thread-header-row,.thread-collapsed-row{font-size:var(--font-size-sm);padding-block:.375rem;padding-inline:1rem}.thread-toggle{appearance:none;color:var(--text-muted);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:.25rem;margin-block:0;margin-inline:-.5rem;padding-block:.25rem;padding-inline:.5rem;display:inline-flex}.thread-toggle:hover{color:var(--text)}.thread-msg{padding-block:1rem;padding-inline:1rem}.thread-messages>:first-child{padding-block-start:0;padding-inline:1rem}.thread-msg+.thread-msg{border-top:1px solid var(--border)}.thread-msg-assistant{background:var(--thread-agent-surface)}.thread-msg-header{justify-content:flex-start;align-items:center;gap:8px;margin-block-end:.25rem;display:flex}.thread-msg-role{color:var(--text);font-weight:600;display:inline-block}.thread-msg-delete{appearance:none;color:var(--text-muted);cursor:pointer;background:0 0;border:none;align-items:center;padding:.125rem;display:inline-flex}.thread-msg-delete:hover{color:var(--text)}.thread-msg-thinking{color:var(--text-muted);display:block}.thread-footer{background:var(--bg);border-block-start:1px solid var(--border);padding-block:.5rem;padding-inline:1rem}.thread-reply-input{resize:vertical;min-height:calc(4.5em + 1.5rem);padding:.75rem}.thread-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.25rem;display:flex}.thread-reply-input+.thread-actions{margin-block-start:.75rem}.thread-actions .checkbox-btn{font-size:var(--font-size-ui);margin-inline-end:auto}.file-section{border:1px solid var(--border);background:var(--surface);scroll-margin-top:calc(var(--bar-height) + var(--file-gap));border-radius:0}.file-section+.file-section{margin-top:var(--file-gap)}.file-header{top:var(--bar-height);z-index:10;padding:0 var(--content-padding-x);background:var(--file-header-bg);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;height:36px;display:flex;position:sticky}.file-header:hover{background:var(--file-header-bg-hover)}.file-section.collapsed .file-header{border-bottom:none}.file-toggle{color:var(--text-muted);cursor:pointer;background:0 0;border:none;align-items:center;gap:4px;min-width:0;padding:0;display:flex}.file-toggle:hover{color:var(--text)}.file-path{font-size:var(--font-size-ui);color:var(--text);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.file-thread-count{color:var(--text-muted);font-size:var(--font-size-xs);flex-shrink:0;align-items:center;gap:4px;margin-left:4px;display:inline-flex}.file-meta{font-size:var(--font-size-ui);flex-shrink:0;align-items:center;gap:10px;display:flex}.viewed-checkbox{font-size:var(--font-size-xs)}.file-body{background:var(--bg);border-bottom-right-radius:8px;border-bottom-left-radius:8px}.diff-view{width:100%;font-size:var(--font-size-code);font-weight:var(--font-weight-code);letter-spacing:var(--letter-spacing-code);display:block}.diff-placeholder{color:var(--text-muted);font-size:var(--font-size-ui);padding:1rem var(--content-padding-x)}.sidebar{background:var(--surface);border-right:1px solid var(--border);bottom:0;left:0;top:var(--bar-height);width:var(--sidebar-width);z-index:15;flex-direction:column;gap:12px;padding-block:12px;display:flex;position:fixed;overflow-y:auto;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.sidebar-section{flex-direction:column;gap:6px;display:flex}.sidebar-section-header{justify-content:space-between;align-items:center;gap:8px;padding-inline:12px;display:flex}.sidebar-section-title{color:var(--text);font-size:var(--font-size-sm);font-weight:500}.sidebar-action{min-height:28px;padding:0 8px}.sidebar-conversations,.sidebar-file-list{flex-direction:column;display:flex}.sidebar-divider{background:var(--border);flex:0 0 1px;height:1px}.sidebar-empty{color:var(--text-muted);font-size:var(--font-size-sm);padding-inline:12px}.sidebar-thread-item{color:var(--text);cursor:pointer;text-align:left;background:0 0;border:none;width:100%;padding-block:4px;padding-inline:12px;display:block}.sidebar-thread-item:hover,.sidebar-thread-item.selected{background:var(--surface-hover)}.sidebar-thread-item.resolved{color:var(--text-muted)}.sidebar-thread-row{justify-content:space-between;align-items:center;gap:8px;width:100%;display:flex}.sidebar-thread-kind{color:currentColor;opacity:.5;flex:none}.sidebar-thread-name{color:currentColor;font-size:var(--font-size-ui);text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;display:block;overflow:hidden}.sidebar-thread-status-dot{background:var(--text-muted);border-radius:999px;flex:0 0 6px;width:6px;height:6px}.sidebar-thread-status-dot.active{background:var(--accent-add)}.sidebar-file-group{flex-direction:column;display:flex}.sidebar-file-directory{color:var(--text-muted);font-family:var(--font-family-code);text-overflow:ellipsis;white-space:nowrap;height:28px;padding:4px 12px;line-height:1.25;overflow:hidden}.sidebar-item{color:var(--text);cursor:pointer;font-family:var(--font-family-code);text-align:left;background:0 0;border:none;width:100%;height:28px;padding:4px 12px 4px 18px;line-height:1.25;display:block}.sidebar-row{justify-content:space-between;align-items:center;gap:8px;width:100%;height:100%;display:flex}.sidebar-item:hover{background:var(--surface-hover)}.sidebar-item.viewed{color:var(--text-muted)}.sidebar-item.viewed .sidebar-file-status,.sidebar-item.viewed .stat-add,.sidebar-item.viewed .stat-del{opacity:.55}.sidebar-file-status{color:var(--text-muted);flex:none}.sidebar-file-status.added{color:var(--sidebar-status-add)}.sidebar-file-status.deleted{color:var(--sidebar-status-del)}.sidebar-file-status.modified,.sidebar-file-status.renamed,.sidebar-file-status.copied,.sidebar-file-status.type-changed,.sidebar-file-status.unmerged{color:var(--sidebar-status-change)}.sidebar-file-name{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;display:block;overflow:hidden}.sidebar-stats{flex-shrink:0;gap:8px;display:flex}.top-bar{--top-bar-gap:8px;z-index:20;width:100%;max-width:100vw;height:var(--bar-height);background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:0 12px;display:flex;position:sticky;top:0;overflow:hidden}.top-bar-left,.top-bar-right{align-items:center;gap:var(--top-bar-gap);min-width:0;display:flex}.top-bar-left{flex:1 1 0;overflow:hidden}.top-bar-right{flex:none}.top-bar-meta{color:var(--text-muted);font-size:var(--font-size-sm)}.top-bar-meta-dim{opacity:.5}.top-bar-status{font-size:var(--font-size-xs)}.top-bar-brief-action{border-color:var(--thread-border-subtle);min-height:26px;color:var(--text);background:0 0;padding:0 8px}.top-bar-brief-action:hover{background:var(--surface-hover)}.top-bar-diff-meta{align-items:center;gap:var(--top-bar-gap);min-width:0;font-size:var(--font-size-sm);flex:1 1 0;display:inline-flex;overflow:hidden}.top-bar-diff-meta .diff-stats{flex:none}.top-bar-diff-command{text-overflow:ellipsis;white-space:nowrap;opacity:.4;flex:auto;min-width:0;overflow:hidden}.top-bar-viewed{align-items:center;gap:var(--top-bar-gap);color:var(--text-muted);font-size:var(--font-size-sm);white-space:nowrap;display:inline-flex}.top-bar-viewed-ring{border-radius:999px;flex:0 0 16px;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.top-bar-viewed-ring-inner{background:var(--surface);border-radius:999px;width:10px;height:10px;display:block}.top-bar-viewed-text{color:var(--text-muted)}.top-bar-toggle{align-items:center;gap:var(--top-bar-gap);color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:2px 0;display:inline-flex}.top-bar-toggle:hover{color:var(--text)}.top-bar-toggle-switch{border:1px solid var(--border);background:var(--surface-hover);border-radius:0;align-items:center;width:24px;height:14px;padding:1px;display:inline-flex}.top-bar-toggle-thumb{background:var(--text-muted);border-radius:0;width:10px;height:10px;display:block}.top-bar-toggle.active{color:var(--text)}.top-bar-toggle.active .top-bar-toggle-switch{background:var(--accent-add);border-color:var(--accent-add)}.top-bar-toggle.active .top-bar-toggle-thumb{background:var(--text-inverse);transform:translate(10px)}.top-bar-action{border:1px solid var(--border);background:var(--surface);min-height:28px;font-size:var(--font-size-ui);gap:6px;padding:0 10px}.top-bar-action:hover{background:var(--surface-hover)}.top-bar-action-primary{color:var(--text-inverse);border-color:var(--accent-primary);background:var(--accent-primary);font-weight:500}.top-bar-action-primary:hover{color:var(--text-inverse);background:var(--accent-primary-hover)}.top-bar-submit-group{display:inline-flex}.top-bar-submit-main{border-right-color:var(--button-split-border)}.top-bar-submit-menu{justify-content:center;min-width:28px;padding-inline:6px}.top-bar-submit-main+.top-bar-submit-menu{border-left:0}.top-bar-action-cancel{min-width:28px;color:var(--accent-del-muted);background:var(--accent-del-subtle);border-color:#0000;justify-content:center;padding:0}.top-bar-action-cancel:hover{color:var(--accent-del);background:var(--accent-del-subtle-hover);border-color:#0000}.toggle-group{border:1px solid var(--border);border-radius:0;display:inline-flex;overflow:hidden}.toggle-group-item{color:var(--text-muted);font-size:var(--font-size-ui);cursor:pointer;background:0 0;border:none;padding:4px 10px}.toggle-group-item.active{background:var(--surface-hover);color:var(--text)}.toggle-group-item:hover:not(.active){color:var(--text)}