@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
@@ -34,6 +34,35 @@ export class DiffToolReviewStateStore {
34
34
  brief: cloneBrief(this.state.brief),
35
35
  };
36
36
  }
37
+ clone() {
38
+ const clone = new DiffToolReviewStateStore();
39
+ clone.replaceState(this.state);
40
+ return clone;
41
+ }
42
+ replaceState(state) {
43
+ this.state.diffStyle = state.diffStyle;
44
+ this.state.overflowMode = state.overflowMode;
45
+ this.state.codeTheme = state.codeTheme;
46
+ this.state.sidebarOpen = state.sidebarOpen;
47
+ this.state.collapsedFileIds = [...state.collapsedFileIds];
48
+ this.state.viewedFileIds = [...state.viewedFileIds];
49
+ this.state.threads = state.threads.map(cloneThread);
50
+ this.state.brief = cloneBrief(state.brief);
51
+ }
52
+ replaceStatePreservingConcurrentLoading(state, previousState) {
53
+ const currentThreadLoading = new Map(this.state.threads.map((thread) => [thread.id, thread.loading]));
54
+ const previousThreadLoading = new Map(previousState.threads.map((thread) => [thread.id, thread.loading]));
55
+ const currentBriefLoading = this.state.brief.loading;
56
+ this.replaceState(state);
57
+ for (const thread of this.state.threads) {
58
+ if (thread.loading === previousThreadLoading.get(thread.id)) {
59
+ thread.loading = currentThreadLoading.get(thread.id) ?? thread.loading;
60
+ }
61
+ }
62
+ if (this.state.brief.loading === previousState.brief.loading) {
63
+ this.state.brief.loading = currentBriefLoading;
64
+ }
65
+ }
37
66
  updateState(patch) {
38
67
  if (patch.diffStyle === "split" || patch.diffStyle === "stacked") {
39
68
  this.state.diffStyle = patch.diffStyle;
@@ -168,10 +197,20 @@ export class DiffToolReviewStateStore {
168
197
  if (!userText) {
169
198
  return "";
170
199
  }
171
- const locationPrefix = thread.threadId || thread.anchor.kind !== "line"
172
- ? ""
173
- : `[${thread.anchor.filePath}:${thread.anchor.lineNumber} (${thread.anchor.side === "additions" ? "new" : "old"})]\n\n`;
174
- return `${locationPrefix}${userText}`;
200
+ if (thread.threadId) {
201
+ return userText;
202
+ }
203
+ const locationPrefix = thread.anchor.kind === "line"
204
+ ? `[${thread.anchor.filePath}:${thread.anchor.lineNumber} (${thread.anchor.side === "additions" ? "new" : "old"})]\n\n`
205
+ : "";
206
+ const hasAssistantMessage = thread.messages.some((message) => message.role === "assistant");
207
+ if (!hasAssistantMessage) {
208
+ return `${locationPrefix}${userText}`;
209
+ }
210
+ const transcript = thread.messages
211
+ .map((message) => `**${message.role === "assistant" ? "agent" : "user"}**\n\n${message.text}`)
212
+ .join("\n\n");
213
+ return `${locationPrefix}Continue this restored review conversation. Its previous transcript is included below.\n\n${transcript}`;
175
214
  }
176
215
  buildReviewText(submissionMessage) {
177
216
  const trimmedSubmissionMessage = submissionMessage?.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"review_state.js","sourceRoot":"","sources":["../../src/diff_tool/review_state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review_state.js","sourceRoot":"","sources":["../../src/diff_tool/review_state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ import { createHash } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { DIFF_TOOL_CODE_THEMES } from "./shared_types.js";
4
+ const DIFF_TOOL_REVIEW_STATE_VERSION = 1;
5
+ const MAX_PERSISTED_REVIEW_STATE_BYTES = 2 * 1024 * 1024;
6
+ const MAX_THREADS = 1_000;
7
+ const MAX_MESSAGES_PER_THREAD = 1_000;
8
+ const MAX_TEXT_LENGTH = 512 * 1024;
9
+ const MAX_ID_LENGTH = 1_024;
10
+ const MAX_FILE_IDS = 10_000;
11
+ const idSchema = z.string().min(1).max(MAX_ID_LENGTH);
12
+ const textSchema = z.string().max(MAX_TEXT_LENGTH);
13
+ const lineAnchorSchema = z
14
+ .object({
15
+ kind: z.literal("line"),
16
+ fileId: idSchema,
17
+ filePath: idSchema,
18
+ lineNumber: z.number().int().nonnegative(),
19
+ side: z.enum(["additions", "deletions"]),
20
+ })
21
+ .strict();
22
+ const detachedAnchorSchema = z.object({ kind: z.literal("detached") }).strict();
23
+ const persistedThreadSchema = z
24
+ .object({
25
+ id: idSchema,
26
+ anchor: z.union([lineAnchorSchema, detachedAnchorSchema]),
27
+ messages: z
28
+ .array(z
29
+ .object({
30
+ role: z.enum(["user", "assistant"]),
31
+ text: textSchema,
32
+ })
33
+ .strict())
34
+ .min(1)
35
+ .max(MAX_MESSAGES_PER_THREAD),
36
+ resolved: z.boolean(),
37
+ collapsed: z.boolean(),
38
+ })
39
+ .strict()
40
+ .refine((thread) => thread.messages[0]?.role === "user", {
41
+ message: "thread must start with a user message",
42
+ });
43
+ const persistedStateSchema = z
44
+ .object({
45
+ diffStyle: z.enum(["stacked", "split"]),
46
+ overflowMode: z.enum(["wrap", "scroll"]),
47
+ codeTheme: z.enum(DIFF_TOOL_CODE_THEMES),
48
+ sidebarOpen: z.boolean(),
49
+ collapsedFileIds: z.array(idSchema).max(MAX_FILE_IDS),
50
+ viewedFileIds: z.array(idSchema).max(MAX_FILE_IDS),
51
+ threads: z
52
+ .array(persistedThreadSchema)
53
+ .max(MAX_THREADS)
54
+ .refine((threads) => new Set(threads.map((thread) => thread.id)).size === threads.length, {
55
+ message: "thread ids must be unique",
56
+ }),
57
+ brief: z.object({ content: textSchema }).strict(),
58
+ })
59
+ .strict();
60
+ const persistedDocumentSchema = z
61
+ .object({
62
+ version: z.literal(DIFF_TOOL_REVIEW_STATE_VERSION),
63
+ scopeFingerprint: z.string().regex(/^[0-9a-f]{64}$/),
64
+ state: persistedStateSchema,
65
+ })
66
+ .strict();
67
+ export function createDiffReviewScopeFingerprint(context, files, patch) {
68
+ return createHash("sha256")
69
+ .update(JSON.stringify({
70
+ repoRoot: context.repoRoot,
71
+ cwd: context.cwd,
72
+ diffArgs: context.diffArgs,
73
+ diffCommand: context.diffCommand,
74
+ files,
75
+ patch,
76
+ }))
77
+ .digest("hex");
78
+ }
79
+ export function createDiffToolPersistedReviewStateDocument(scopeFingerprint, state) {
80
+ const document = {
81
+ version: DIFF_TOOL_REVIEW_STATE_VERSION,
82
+ scopeFingerprint,
83
+ state: {
84
+ diffStyle: state.diffStyle,
85
+ overflowMode: state.overflowMode,
86
+ codeTheme: state.codeTheme,
87
+ sidebarOpen: state.sidebarOpen,
88
+ collapsedFileIds: [...state.collapsedFileIds],
89
+ viewedFileIds: [...state.viewedFileIds],
90
+ threads: state.threads.map((thread) => ({
91
+ id: thread.id,
92
+ anchor: thread.anchor.kind === "line" ? { ...thread.anchor } : { kind: "detached" },
93
+ messages: thread.messages.map((message) => ({ ...message })),
94
+ resolved: thread.resolved,
95
+ collapsed: thread.collapsed,
96
+ })),
97
+ brief: { content: state.brief.content },
98
+ },
99
+ };
100
+ assertDocumentSize(document);
101
+ const parsed = persistedDocumentSchema.safeParse(document);
102
+ if (!parsed.success) {
103
+ throw new Error(`diff review state cannot be persisted: ${z.prettifyError(parsed.error)}`);
104
+ }
105
+ return parsed.data;
106
+ }
107
+ export function parseDiffToolPersistedReviewStateDocument(document, scopeFingerprint) {
108
+ assertDocumentSize(document);
109
+ const parsed = persistedDocumentSchema.safeParse(document);
110
+ if (!parsed.success) {
111
+ throw new Error(`stored diff review state is invalid: ${z.prettifyError(parsed.error)}`);
112
+ }
113
+ if (parsed.data.scopeFingerprint !== scopeFingerprint) {
114
+ throw new Error("stored diff review state belongs to a different diff snapshot");
115
+ }
116
+ return {
117
+ diffStyle: parsed.data.state.diffStyle,
118
+ overflowMode: parsed.data.state.overflowMode,
119
+ codeTheme: parsed.data.state.codeTheme,
120
+ sidebarOpen: parsed.data.state.sidebarOpen,
121
+ collapsedFileIds: [...parsed.data.state.collapsedFileIds],
122
+ viewedFileIds: [...parsed.data.state.viewedFileIds],
123
+ threads: parsed.data.state.threads.map((thread) => ({
124
+ id: thread.id,
125
+ anchor: thread.anchor.kind === "line" ? { ...thread.anchor } : { kind: "detached" },
126
+ messages: thread.messages.map((message) => ({ ...message })),
127
+ loading: false,
128
+ resolved: thread.resolved,
129
+ collapsed: thread.collapsed,
130
+ })),
131
+ brief: {
132
+ content: parsed.data.state.brief.content,
133
+ loading: false,
134
+ },
135
+ };
136
+ }
137
+ function assertDocumentSize(document) {
138
+ let serialized;
139
+ try {
140
+ serialized = JSON.stringify(document);
141
+ }
142
+ catch (error) {
143
+ throw new Error(`diff review state document is not JSON serializable: ${error instanceof Error ? error.message : String(error)}`);
144
+ }
145
+ if (serialized === undefined) {
146
+ throw new Error("diff review state document is not JSON serializable");
147
+ }
148
+ if (Buffer.byteLength(serialized, "utf8") > MAX_PERSISTED_REVIEW_STATE_BYTES) {
149
+ throw new Error(`diff review state document exceeds ${MAX_PERSISTED_REVIEW_STATE_BYTES} bytes`);
150
+ }
151
+ }
152
+ //# sourceMappingURL=review_state_persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review_state_persistence.js","sourceRoot":"","sources":["../../src/diff_tool/review_state_persistence.ts"],"names":[],"mappings":"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"}
@@ -85,9 +85,7 @@ export class LocalSessionHost {
85
85
  ? { usageCheckpoint: { ...recovered.snapshot.agentState.usageCheckpoint } }
86
86
  : {}),
87
87
  });
88
- if (recovered.changed || agentRecovery.recoveredToolResults.length > 0) {
89
- await hostedSession.persistRecoveredAgentState(agentRecovery);
90
- }
88
+ await hostedSession.reconcileRecoveredState(agentRecovery);
91
89
  return hostedSession;
92
90
  }
93
91
  catch (error) {
@@ -415,6 +413,7 @@ class LocalHostedSessionHandle {
415
413
  goal;
416
414
  pendingGoalCommit;
417
415
  forceNextSnapshotRevision;
416
+ projectionFailure;
418
417
  disposed = false;
419
418
  constructor(runtime, promptBootstrap, catalog, bootstrap, remoteCatalog, getLatestRemoteModelCatalog, includeAgentContext, executionEnvironment, store, history, historyRemote, attributes, createdAt, committedSnapshot, forceNextSnapshotRevision, recordUsage, removeFromHost = () => { }) {
420
419
  this.runtime = runtime;
@@ -433,15 +432,15 @@ class LocalHostedSessionHandle {
433
432
  this.recordUsage = recordUsage;
434
433
  this.removeFromHost = removeFromHost;
435
434
  this.session = runtime;
436
- this.committedSnapshot = committedSnapshot
437
- ? cloneSessionProtocolSnapshot(committedSnapshot)
438
- : undefined;
439
435
  this.persistedSnapshot = committedSnapshot
440
436
  ? cloneSessionProtocolSnapshot(committedSnapshot)
441
437
  : undefined;
442
438
  this.goal = structuredClone(committedSnapshot?.goal ?? null);
443
439
  this.forceNextSnapshotRevision = forceNextSnapshotRevision;
444
440
  this.restoreProtocolState(committedSnapshot);
441
+ this.committedSnapshot = committedSnapshot
442
+ ? cloneSessionProtocolSnapshot(committedSnapshot)
443
+ : { ...this.buildSnapshotDraft(), revision: 1 };
445
444
  }
446
445
  getRemoteModelCatalog() {
447
446
  return this.remoteCatalog;
@@ -869,15 +868,12 @@ class LocalHostedSessionHandle {
869
868
  }
870
869
  async setReasoning(reasoning) {
871
870
  this.assertActive();
872
- return await this.enqueueMutation(async () => {
873
- const fromRevision = this.committedSnapshot?.revision;
871
+ return await this.enqueueConfigurationMutation(async () => {
872
+ const fromRevision = this.committedSnapshot.revision;
874
873
  this.runtime.setReasoning(reasoning);
875
874
  this.bootstrap.persona.settings.reasoning = reasoning;
876
875
  const snapshot = await this.commitSnapshot();
877
- if (fromRevision === undefined) {
878
- this.emitSnapshotReset("configuration", snapshot);
879
- }
880
- else if (snapshot.revision !== fromRevision) {
876
+ if (snapshot.revision !== fromRevision) {
881
877
  this.emitDelta(createSessionProtocolDeltaMessage({
882
878
  sessionId: snapshot.sessionId,
883
879
  fromRevision,
@@ -908,7 +904,7 @@ class LocalHostedSessionHandle {
908
904
  includeAgentContext: this.includeAgentContext,
909
905
  agentContextFiles: runtimeConfig.config.agentContextFiles ?? [],
910
906
  });
911
- return await this.enqueueMutation(async () => {
907
+ return await this.enqueueConfigurationMutation(async () => {
912
908
  this.runtime.setRuntimeConfig(runtimeConfig.config, runtimeConfig.bootstrap.modelResolver.resolveModel);
913
909
  this.runtime.updatePromptContext(runtimeContext.promptBootstrap.promptContext);
914
910
  this.runtime.setPersona(selectedPersona, {
@@ -945,7 +941,7 @@ class LocalHostedSessionHandle {
945
941
  includeAgentContext: this.includeAgentContext,
946
942
  agentContextFiles: runtimeConfig.config.agentContextFiles ?? [],
947
943
  });
948
- return await this.enqueueMutation(async () => {
944
+ return await this.enqueueConfigurationMutation(async () => {
949
945
  this.runtime.setRuntimeConfig(runtimeConfig.config, runtimeConfig.bootstrap.modelResolver.resolveModel);
950
946
  this.runtime.updatePromptContext(runtimeContext.promptBootstrap.promptContext);
951
947
  this.runtime.setPersona(nextPersona, {
@@ -1019,7 +1015,7 @@ class LocalHostedSessionHandle {
1019
1015
  return await this.pathAutocompleteLoad;
1020
1016
  }
1021
1017
  async compact(options) {
1022
- return await this.runMaintenance(async (signal) => {
1018
+ return await this.runAgentStateMutation(() => this.runMaintenance(async (signal) => {
1023
1019
  const result = await this.session.compact({
1024
1020
  mode: options.mode === "summary-only" ? "only-summary" : "with-last-assistant",
1025
1021
  ...(options.guidance !== undefined ? { guidance: options.guidance } : {}),
@@ -1031,7 +1027,7 @@ class LocalHostedSessionHandle {
1031
1027
  compactionMessage: result.compactionMessage,
1032
1028
  includedLastAssistant: result.includedLastAssistant,
1033
1029
  };
1034
- });
1030
+ }));
1035
1031
  }
1036
1032
  async runMaintenance(operation) {
1037
1033
  this.assertActive();
@@ -1077,14 +1073,16 @@ class LocalHostedSessionHandle {
1077
1073
  if (!this.timeline.items.some((item) => item.type === "message" && item.messageId === historyEntryId)) {
1078
1074
  throw new Error("rewind failed");
1079
1075
  }
1080
- const result = await this.session.rewindToHistoryEntryId(historyEntryId);
1081
- if (!result) {
1082
- throw new Error("rewind failed");
1083
- }
1084
- return {
1085
- snapshot: await this.snapshot(),
1086
- ...result,
1087
- };
1076
+ return await this.runAgentStateMutation(async () => {
1077
+ const result = await this.session.rewindToHistoryEntryId(historyEntryId);
1078
+ if (!result) {
1079
+ throw new Error("rewind failed");
1080
+ }
1081
+ return {
1082
+ snapshot: await this.snapshot(),
1083
+ ...result,
1084
+ };
1085
+ });
1088
1086
  }
1089
1087
  async interruptSubagent(subagentId) {
1090
1088
  this.assertActive();
@@ -1139,11 +1137,9 @@ class LocalHostedSessionHandle {
1139
1137
  }
1140
1138
  async snapshot() {
1141
1139
  this.assertActive();
1142
- return await this.enqueueMutation(async () => this.runtime.isTurnRunning && this.committedSnapshot
1143
- ? await this.commitProjectedSnapshot()
1144
- : await this.commitSnapshot());
1140
+ return await this.enqueueMutation(() => this.commitProjectedSnapshot());
1145
1141
  }
1146
- async persistRecoveredAgentState(recovery) {
1142
+ async reconcileRecoveredState(recovery) {
1147
1143
  this.assertActive();
1148
1144
  await this.enqueueMutation(async () => {
1149
1145
  const recoveredTools = [];
@@ -1347,7 +1343,7 @@ class LocalHostedSessionHandle {
1347
1343
  if (options.removeMissingAgents) {
1348
1344
  this.removeMissingSubagentActivities();
1349
1345
  }
1350
- return cloneSessionProtocolSnapshot(this.committedSnapshot ?? snapshot);
1346
+ return cloneSessionProtocolSnapshot(this.committedSnapshot);
1351
1347
  }
1352
1348
  await this.store.commitSessionSnapshot(snapshot, {
1353
1349
  expectedRevision: this.persistedSnapshot?.revision ?? 0,
@@ -1361,11 +1357,7 @@ class LocalHostedSessionHandle {
1361
1357
  }
1362
1358
  async commitProjectedSnapshot() {
1363
1359
  this.assertNotDisposed();
1364
- const current = this.committedSnapshot;
1365
- if (!current) {
1366
- return await this.commitSnapshot();
1367
- }
1368
- const snapshot = cloneSessionProtocolSnapshot(current);
1360
+ const snapshot = cloneSessionProtocolSnapshot(this.committedSnapshot);
1369
1361
  if (this.persistedSnapshot && isDeepStrictEqual(this.persistedSnapshot, snapshot)) {
1370
1362
  return snapshot;
1371
1363
  }
@@ -1378,9 +1370,6 @@ class LocalHostedSessionHandle {
1378
1370
  async commitSnapshotPatch(cause, changes) {
1379
1371
  this.assertNotDisposed();
1380
1372
  const current = this.committedSnapshot;
1381
- if (!current) {
1382
- throw new Error("cannot persist a session patch without a committed snapshot");
1383
- }
1384
1373
  const delta = createSessionProtocolDeltaMessage({
1385
1374
  sessionId: current.sessionId,
1386
1375
  fromRevision: current.revision,
@@ -1613,38 +1602,67 @@ class LocalHostedSessionHandle {
1613
1602
  }
1614
1603
  }
1615
1604
  }
1605
+ async enqueueConfigurationMutation(mutation) {
1606
+ try {
1607
+ return await this.enqueueMutation(mutation);
1608
+ }
1609
+ catch (error) {
1610
+ this.invalidateProjection(error);
1611
+ throw error;
1612
+ }
1613
+ }
1614
+ async runAgentStateMutation(mutation) {
1615
+ const runtimeState = this.runtime.snapshot();
1616
+ try {
1617
+ return await mutation();
1618
+ }
1619
+ catch (error) {
1620
+ if (!isDeepStrictEqual(this.runtime.snapshot(), runtimeState)) {
1621
+ this.invalidateProjection(error);
1622
+ }
1623
+ throw error;
1624
+ }
1625
+ }
1616
1626
  enqueueMutation(mutation) {
1617
1627
  const result = this.mutationQueue
1618
1628
  .catch(() => undefined)
1619
1629
  .then(async () => {
1630
+ this.assertProjectionValid();
1620
1631
  try {
1621
1632
  return await mutation();
1622
1633
  }
1623
1634
  catch (error) {
1624
- if (this.committedSnapshot) {
1625
- this.goal = structuredClone(this.committedSnapshot.goal);
1626
- this.restoreProtocolState(this.committedSnapshot);
1627
- }
1635
+ this.goal = structuredClone(this.committedSnapshot.goal);
1636
+ this.restoreProtocolState(this.committedSnapshot);
1628
1637
  throw error;
1629
1638
  }
1630
1639
  });
1631
1640
  this.mutationQueue = result.then(() => undefined, () => undefined);
1632
1641
  return result;
1633
1642
  }
1643
+ invalidateProjection(error) {
1644
+ this.projectionFailure ??= new Error("session state is inconsistent after a failed mutation", {
1645
+ cause: error,
1646
+ });
1647
+ }
1648
+ assertProjectionValid() {
1649
+ if (this.projectionFailure) {
1650
+ throw this.projectionFailure;
1651
+ }
1652
+ }
1634
1653
  assertActive() {
1635
1654
  if (this.disposing || this.disposed) {
1636
1655
  throw new Error(`session is shut down: ${this.sessionId}`);
1637
1656
  }
1657
+ this.assertProjectionValid();
1638
1658
  }
1639
1659
  assertNotDisposed() {
1640
1660
  if (this.disposed) {
1641
1661
  throw new Error(`session is shut down: ${this.sessionId}`);
1642
1662
  }
1663
+ this.assertProjectionValid();
1643
1664
  }
1644
1665
  nextSnapshotRevision(next) {
1645
- if (!this.committedSnapshot) {
1646
- return 1;
1647
- }
1648
1666
  if (this.forceNextSnapshotRevision) {
1649
1667
  this.forceNextSnapshotRevision = false;
1650
1668
  return this.committedSnapshot.revision + 1;
@@ -1688,7 +1706,7 @@ class LocalHostedSessionHandle {
1688
1706
  ]);
1689
1707
  }
1690
1708
  async appendToolHistory(tool, resultHistoryEntryId, result) {
1691
- const callMessage = this.committedSnapshot?.messages.find((message) => message.id === tool.call.messageId);
1709
+ const callMessage = this.committedSnapshot.messages.find((message) => message.id === tool.call.messageId);
1692
1710
  const call = callMessage?.message.role === "assistant"
1693
1711
  ? callMessage.message.content[tool.call.contentIndex]
1694
1712
  : undefined;
@@ -1928,7 +1946,7 @@ class LocalHostedSessionHandle {
1928
1946
  message: event.message,
1929
1947
  },
1930
1948
  },
1931
- ...(this.committedSnapshot?.lifecycle !== lifecycle
1949
+ ...(this.committedSnapshot.lifecycle !== lifecycle
1932
1950
  ? [{ type: "lifecycle.set", lifecycle }]
1933
1951
  : []),
1934
1952
  ...toolChanges,
@@ -2295,17 +2313,6 @@ class LocalHostedSessionHandle {
2295
2313
  if (changes.length === 0) {
2296
2314
  return;
2297
2315
  }
2298
- if (!this.committedSnapshot) {
2299
- if (options.persist === false) {
2300
- const snapshot = { ...this.buildSnapshotDraft(), revision: 1 };
2301
- this.committedSnapshot = snapshot;
2302
- this.emitSnapshotReset(cause, snapshot);
2303
- return;
2304
- }
2305
- const snapshot = await this.commitSnapshot();
2306
- this.emitSnapshotReset(cause, snapshot);
2307
- return;
2308
- }
2309
2316
  if (options.persist !== false) {
2310
2317
  this.emitDelta(await this.commitSnapshotPatch(cause, changes));
2311
2318
  return;
@@ -2333,7 +2340,7 @@ class LocalHostedSessionHandle {
2333
2340
  await this.enqueueMutation(() => this.emitSnapshotResetIfChanged(cause));
2334
2341
  }
2335
2342
  async emitSnapshotResetIfChanged(cause) {
2336
- const previousRevision = this.committedSnapshot?.revision;
2343
+ const previousRevision = this.committedSnapshot.revision;
2337
2344
  const snapshot = await this.commitSnapshot();
2338
2345
  if (snapshot.revision !== previousRevision) {
2339
2346
  this.emitSnapshotReset(cause, snapshot);
@@ -2399,7 +2406,7 @@ class LocalHostedSessionHandle {
2399
2406
  return;
2400
2407
  }
2401
2408
  const interruptedMessage = createInterruptedAssistantMessage(draft, this.runtime.persona.model);
2402
- await this.session.commitInterruptedAssistant(interruptedMessage, draft.id);
2409
+ await this.runAgentStateMutation(() => this.session.commitInterruptedAssistant(interruptedMessage, draft.id));
2403
2410
  }
2404
2411
  async cleanupFailedTurn(rootHistoryEntryId, error) {
2405
2412
  if (this.draftAssistantMessage) {