@songsid/agend 2.3.2-beta.13 → 2.3.2-beta.15

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 (105) hide show
  1. package/dist/backend/codex-session-lookup.d.ts +15 -0
  2. package/dist/backend/codex-session-lookup.js +58 -0
  3. package/dist/backend/codex-session-lookup.js.map +1 -1
  4. package/dist/backend/codex.js +15 -4
  5. package/dist/backend/codex.js.map +1 -1
  6. package/dist/backend/kiro-classic-archive.d.ts +5 -0
  7. package/dist/backend/kiro-classic-archive.js +187 -9
  8. package/dist/backend/kiro-classic-archive.js.map +1 -1
  9. package/dist/backend/kiro-classic-links.d.ts +24 -0
  10. package/dist/backend/kiro-classic-links.js +135 -0
  11. package/dist/backend/kiro-classic-links.js.map +1 -0
  12. package/dist/backend/kiro-identity.d.ts +20 -3
  13. package/dist/backend/kiro-identity.js +26 -39
  14. package/dist/backend/kiro-identity.js.map +1 -1
  15. package/dist/backend/kiro-reconcile-store.d.ts +27 -0
  16. package/dist/backend/kiro-reconcile-store.js +344 -0
  17. package/dist/backend/kiro-reconcile-store.js.map +1 -0
  18. package/dist/backend/kiro-v2-store-worker.js +17 -3
  19. package/dist/backend/kiro-v2-store-worker.js.map +1 -1
  20. package/dist/backend/kiro-v2-store.d.ts +23 -1
  21. package/dist/backend/kiro-v2-store.js +22 -12
  22. package/dist/backend/kiro-v2-store.js.map +1 -1
  23. package/dist/backend/kiro.d.ts +4 -0
  24. package/dist/backend/kiro.js +25 -3
  25. package/dist/backend/kiro.js.map +1 -1
  26. package/dist/channel/mcp-tools.js +3 -1
  27. package/dist/channel/mcp-tools.js.map +1 -1
  28. package/dist/cli.js +17 -4
  29. package/dist/cli.js.map +1 -1
  30. package/dist/fleet-manager.d.ts +9 -1
  31. package/dist/fleet-manager.js +100 -11
  32. package/dist/fleet-manager.js.map +1 -1
  33. package/dist/general-instance.d.ts +24 -0
  34. package/dist/general-instance.js +53 -0
  35. package/dist/general-instance.js.map +1 -1
  36. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +2 -0
  37. package/dist/general-knowledge/skills/web-appearance/SKILL.md +2 -0
  38. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +6 -4
  39. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +6 -4
  40. package/dist/kiro-migrate.d.ts +4 -3
  41. package/dist/kiro-migrate.js +13 -8
  42. package/dist/kiro-migrate.js.map +1 -1
  43. package/dist/kiro-reconcile.d.ts +21 -0
  44. package/dist/kiro-reconcile.js +80 -0
  45. package/dist/kiro-reconcile.js.map +1 -0
  46. package/dist/kiro-tui-forensic.d.ts +7 -0
  47. package/dist/kiro-tui-forensic.js +17 -3
  48. package/dist/kiro-tui-forensic.js.map +1 -1
  49. package/dist/locale.js +24 -0
  50. package/dist/locale.js.map +1 -1
  51. package/dist/log-service.js +1 -1
  52. package/dist/log-service.js.map +1 -1
  53. package/dist/office-share-page.d.ts +3 -1
  54. package/dist/office-share-page.js +7 -2
  55. package/dist/office-share-page.js.map +1 -1
  56. package/dist/office-share-service.d.ts +4 -3
  57. package/dist/office-share-service.js +6 -6
  58. package/dist/office-share-service.js.map +1 -1
  59. package/dist/office-share.d.ts +17 -6
  60. package/dist/office-share.js +28 -11
  61. package/dist/office-share.js.map +1 -1
  62. package/dist/outbound-handlers.js +20 -1
  63. package/dist/outbound-handlers.js.map +1 -1
  64. package/dist/outbound-schemas.d.ts +6 -0
  65. package/dist/outbound-schemas.js +6 -0
  66. package/dist/outbound-schemas.js.map +1 -1
  67. package/dist/quickstart-api.d.ts +25 -1
  68. package/dist/quickstart-api.js +53 -6
  69. package/dist/quickstart-api.js.map +1 -1
  70. package/dist/service-installer.d.ts +13 -0
  71. package/dist/service-installer.js +15 -0
  72. package/dist/service-installer.js.map +1 -1
  73. package/dist/service-owner.d.ts +25 -0
  74. package/dist/service-owner.js +43 -2
  75. package/dist/service-owner.js.map +1 -1
  76. package/dist/setup-form.js +17 -3
  77. package/dist/setup-form.js.map +1 -1
  78. package/dist/setup-i18n.js +2 -0
  79. package/dist/setup-i18n.js.map +1 -1
  80. package/dist/tool-permissions.js +1 -0
  81. package/dist/tool-permissions.js.map +1 -1
  82. package/dist/ui/fleet-office-layout.js +14 -6
  83. package/dist/ui/fleet-office-pack.d.ts +4 -0
  84. package/dist/ui/fleet-office-pack.js +15 -5
  85. package/dist/ui/fleet-office-store.js +18 -3
  86. package/dist/ui/fleet-office-view.js +8 -0
  87. package/dist/ui/fleet-office-zones.js +10 -2
  88. package/dist/ui/fleet-office.js +36 -4
  89. package/dist/ui/office-share-dialog.js +31 -7
  90. package/dist/ui/panel-log.js +2 -2
  91. package/dist/ui/settings-strings.js +2 -0
  92. package/dist/ui/settings-wizard.js +15 -4
  93. package/dist/ui/shared/app.css +6 -0
  94. package/dist/ui/shared/setup-host-text.js +2 -0
  95. package/dist/web-api.js +74 -4
  96. package/dist/web-api.js.map +1 -1
  97. package/dist/web-office-pack-tools.d.ts +10 -1
  98. package/dist/web-office-pack-tools.js +36 -5
  99. package/dist/web-office-pack-tools.js.map +1 -1
  100. package/dist/web-office-skins.js +6 -0
  101. package/dist/web-office-skins.js.map +1 -1
  102. package/dist/web-office-store.d.ts +22 -3
  103. package/dist/web-office-store.js +44 -8
  104. package/dist/web-office-store.js.map +1 -1
  105. package/package.json +1 -1
@@ -0,0 +1,344 @@
1
+ /** Explicit option-A reconciliation. Native V2 files are read/copied, never moved, rewritten or deleted. */
2
+ import { createHash } from "node:crypto";
3
+ import { closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync, readSync, readdirSync, unlinkSync, writeFileSync } from "node:fs";
4
+ import { dirname, join } from "node:path";
5
+ import { atomicWriteFileSync } from "../atomic-write.js";
6
+ import { kiroCanonicalDirectory, kiroCarryCandidate, kiroOwnedConversation, kiroEngineFloor, isConsistentKiroIdentityRecord } from "./kiro-identity.js";
7
+ const hash = (v) => createHash("sha256").update(v).digest("hex");
8
+ const idPattern = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,199}$/;
9
+ const receiptPattern = /^[a-f0-9]{64}$/;
10
+ const equal = (a, b) => JSON.stringify(a) === JSON.stringify(b);
11
+ function syncDir(path) { const fd = openSync(path, constants.O_RDONLY); try {
12
+ fsyncSync(fd);
13
+ }
14
+ finally {
15
+ closeSync(fd);
16
+ } }
17
+ function privateDir(path) {
18
+ if (!existsSync(path))
19
+ mkdirSync(path, { mode: 0o700 });
20
+ const s = lstatSync(path);
21
+ if (!s.isDirectory() || s.mode & 0o077 || process.getuid && s.uid !== process.getuid())
22
+ throw new Error("Reconciliation directory is not private and owned");
23
+ syncDir(path);
24
+ syncDir(dirname(path));
25
+ }
26
+ function checkPrivateDir(path) {
27
+ const s = lstatSync(path);
28
+ if (!s.isDirectory() || s.mode & 0o077 || process.getuid && s.uid !== process.getuid())
29
+ throw new Error("Reconciliation directory is not private and owned");
30
+ }
31
+ function read(path, limit, privateFile = false) {
32
+ const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
33
+ try {
34
+ const s = fstatSync(fd);
35
+ if (!s.isFile() || s.size > limit || process.getuid && s.uid !== process.getuid() || privateFile && s.mode & 0o077)
36
+ throw new Error("Reconciliation file is unsafe or oversized");
37
+ const bytes = Buffer.alloc(s.size);
38
+ let offset = 0;
39
+ while (offset < bytes.length) {
40
+ const n = readSync(fd, bytes, offset, bytes.length - offset, offset);
41
+ if (!n)
42
+ throw new Error("Reconciliation file was truncated");
43
+ offset += n;
44
+ }
45
+ const after = fstatSync(fd), atPath = lstatSync(path);
46
+ if (bytes.length !== s.size || after.size !== s.size || after.mtimeMs !== s.mtimeMs || after.ctimeMs !== s.ctimeMs
47
+ || atPath.dev !== s.dev || atPath.ino !== s.ino)
48
+ throw new Error("Reconciliation file changed while reading");
49
+ return { bytes, fingerprint: { hash: hash(bytes), size: s.size, dev: s.dev, ino: s.ino, mtime: s.mtimeMs, ctime: s.ctimeMs } };
50
+ }
51
+ finally {
52
+ closeSync(fd);
53
+ }
54
+ }
55
+ function optional(path, limit, privateFile = false) {
56
+ try {
57
+ return read(path, limit, privateFile);
58
+ }
59
+ catch (e) {
60
+ if (e.code === "ENOENT")
61
+ return null;
62
+ throw e;
63
+ }
64
+ }
65
+ function atomic(path, text) {
66
+ atomicWriteFileSync(path, text, { mode: 0o600 });
67
+ syncDir(dirname(path));
68
+ }
69
+ function writeNew(path, bytes) {
70
+ if (!existsSync(path)) {
71
+ const fd = openSync(path, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
72
+ try {
73
+ writeFileSync(fd, bytes);
74
+ fsyncSync(fd);
75
+ }
76
+ finally {
77
+ closeSync(fd);
78
+ }
79
+ syncDir(dirname(path));
80
+ }
81
+ if (!read(path, bytes.length, true).bytes.equals(bytes))
82
+ throw new Error("Reconciliation archive read-back failed");
83
+ // A prior attempt may have left a visible file after fsync failed. Retry must
84
+ // establish durability too, before publishing any authority to re-pin.
85
+ const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
86
+ try {
87
+ fsyncSync(fd);
88
+ }
89
+ finally {
90
+ closeSync(fd);
91
+ }
92
+ syncDir(dirname(path));
93
+ }
94
+ function scope(input) {
95
+ if (!idPattern.test(input.sessionId) || !idPattern.test(input.archiveId) || input.sessionId === input.archiveId
96
+ || !/^[^\r\n\0]{1,512}$/.test(input.instance) || !input.model)
97
+ throw new Error("Invalid explicit reconciliation selection");
98
+ }
99
+ function paths(input) {
100
+ const ownerHash = hash(input.instance).slice(0, 32), root = join(input.agendHome, "kiro-reconciliations", ownerHash);
101
+ return { root, active: join(root, "active.json"), identity: join(input.agendHome, "kiro-identity", "instances", ownerHash + ".json"),
102
+ classicClaim: join(input.agendHome, "kiro-identity", "claims", "v1", input.sessionId),
103
+ keepClaim: join(input.agendHome, "kiro-identity", "claims", "v2", input.sessionId),
104
+ archiveClaim: join(input.agendHome, "kiro-identity", "claims", "v2", input.archiveId) };
105
+ }
106
+ function fileNames(input) { return [input.sessionId, input.archiveId].flatMap(id => [id + ".json", id + ".jsonl", id + ".history"]); }
107
+ function limit(name) { return name.endsWith(".jsonl") ? 64 * 1024 * 1024 : name.endsWith(".json") ? 8 * 1024 * 1024 : 16 * 1024 * 1024; }
108
+ function files(input) {
109
+ return Object.fromEntries(fileNames(input).map(name => [name, name.endsWith(".history")
110
+ ? optional(join(input.sessionsDir, name), limit(name)) : read(join(input.sessionsDir, name), limit(name))]));
111
+ }
112
+ function state(input) {
113
+ const p = paths(input);
114
+ return { identity: read(p.identity, 1024 * 1024).bytes.toString("utf8"),
115
+ classicClaim: read(p.classicClaim, 1024).bytes.toString("utf8"),
116
+ keepClaim: read(p.keepClaim, 1024).bytes.toString("utf8"), archiveClaim: optional(p.archiveClaim, 1024)?.bytes.toString("utf8") ?? null };
117
+ }
118
+ function peerProof(input) {
119
+ const dir = dirname(paths(input).identity), names = readdirSync(dir);
120
+ if (names.length > 4096)
121
+ throw new Error("Too many Kiro identities to prove ownership");
122
+ for (const name of names) {
123
+ if (!name.endsWith(".json") || name === hash(input.instance).slice(0, 32) + ".json")
124
+ continue;
125
+ const other = JSON.parse(read(join(dir, name), 1024 * 1024).bytes.toString("utf8"));
126
+ if (name.endsWith(".adopting.json")) {
127
+ if (!other || typeof other !== "object" || Array.isArray(other))
128
+ throw new Error("Alternative adoption ownership is not exclusive");
129
+ for (const [key, id] of Object.entries(other)) {
130
+ const tuple = JSON.parse(key);
131
+ if (!Array.isArray(tuple) || tuple.length !== 3 || !["v1", "v2", "v3"].includes(tuple[0]) || typeof tuple[1] !== "string"
132
+ || tuple[2] !== null && typeof tuple[2] !== "string" || typeof id !== "string" || !idPattern.test(id) || id === input.archiveId)
133
+ throw new Error("Alternative adoption ownership is not exclusive");
134
+ }
135
+ }
136
+ else {
137
+ if (other.version !== 2 || typeof other.instance !== "string" || !other.keys || Object.entries(other.keys).some(([k, r]) => !isConsistentKiroIdentityRecord(k, r))
138
+ || Object.values(other.keys).some((r) => r.engine === "v2" && (r.id === input.archiveId
139
+ || r.id === null && kiroCanonicalDirectory(r.workingDirectory) === kiroCanonicalDirectory(input.workingDirectory))))
140
+ throw new Error("Alternative session may belong to another instance");
141
+ }
142
+ }
143
+ }
144
+ /** Planning is read-only; only hashes/metadata leave the worker. */
145
+ export function inspectKiroReconciliation(input, classicHash) {
146
+ scope(input);
147
+ if (kiroEngineFloor(input.agendHome, input.instance) !== "v2")
148
+ throw new Error("Only the original V2 carry can be reconciled");
149
+ const candidate = kiroCarryCandidate(input);
150
+ if (!candidate?.repair || candidate.id !== input.sessionId)
151
+ throw new Error("Reconciliation requires the original abandoned carry");
152
+ const snapshots = files(input), keep = JSON.parse(snapshots[input.sessionId + ".json"].bytes.toString("utf8")), other = JSON.parse(snapshots[input.archiveId + ".json"].bytes.toString("utf8"));
153
+ for (const [id, meta] of [[input.sessionId, keep], [input.archiveId, other]]) {
154
+ if (meta.session_id !== id || meta.session_state?.version !== "v1" || meta.session_state?.rts_model_state?.conversation_id !== id
155
+ || typeof meta.cwd !== "string" || kiroCanonicalDirectory(meta.cwd) !== kiroCanonicalDirectory(input.workingDirectory)
156
+ || !Number.isFinite(Date.parse(meta.created_at)))
157
+ throw new Error("Reconciliation session/cwd is not proven");
158
+ }
159
+ if (Date.parse(other.created_at) <= Date.parse(keep.created_at) || !snapshots[input.archiveId + ".jsonl"].bytes.length)
160
+ throw new Error("The named alternative is not newer work");
161
+ const before = state(input);
162
+ if (before.classicClaim !== input.instance + "\n" || before.keepClaim !== input.instance + "\nabandoned\n"
163
+ || before.archiveClaim !== null && before.archiveClaim !== input.instance + "\n")
164
+ throw new Error("Reconciliation claims are not exclusively owned");
165
+ peerProof(input);
166
+ const digest = hash(JSON.stringify({ input, classicHash, before, active: optional(paths(input).active, 4096, true)?.fingerprint ?? null,
167
+ files: Object.fromEntries(Object.entries(snapshots).map(([n, f]) => [n, f?.fingerprint ?? null])) }));
168
+ return { digest };
169
+ }
170
+ function manifestAt(input, receipt) {
171
+ scope(input);
172
+ if (!receiptPattern.test(receipt))
173
+ throw new Error("Invalid reconciliation receipt");
174
+ const root = join(paths(input).root, receipt);
175
+ for (const dir of [join(input.agendHome, "kiro-reconciliations"), paths(input).root, root])
176
+ checkPrivateDir(dir);
177
+ const manifest = JSON.parse(read(join(root, "manifest.json"), 2 * 1024 * 1024, true).bytes.toString("utf8"));
178
+ if (hash(JSON.stringify(manifest)) !== receipt || manifest.version !== 1 || !equal(manifest.input, input)
179
+ || !equal(Object.keys(manifest.files).sort(), fileNames(input).sort()))
180
+ throw new Error("Reconciliation receipt scope/checksum differs");
181
+ for (const [name, f] of Object.entries(manifest.files))
182
+ if (f) {
183
+ const copy = read(join(root, name), limit(name), true);
184
+ if (copy.fingerprint.hash !== f.hash || copy.fingerprint.size !== f.size)
185
+ throw new Error("Reconciliation archive checksum differs");
186
+ }
187
+ return { manifest, root };
188
+ }
189
+ function journal(input) {
190
+ const file = optional(paths(input).active, 4096, true);
191
+ if (!file)
192
+ return null;
193
+ const value = JSON.parse(file.bytes.toString("utf8"));
194
+ if (!receiptPattern.test(value.receipt) || !["prepared", "selected", "rollback_pending", "rolled_back"].includes(value.phase))
195
+ throw new Error("Reconciliation journal is invalid");
196
+ return value;
197
+ }
198
+ function setPhase(input, receipt, phase) { atomic(paths(input).active, JSON.stringify({ receipt, phase }) + "\n"); }
199
+ export function preserveKiroReconciliation(input, plan, classicHash, actor) {
200
+ if (inspectKiroReconciliation(input, classicHash).digest !== plan.digest || !actor || actor.length > 512)
201
+ throw new Error("Reconciliation confirmation is stale");
202
+ const snapshots = files(input), before = state(input);
203
+ const manifest = { version: 1, input, actor, classicHash, files: Object.fromEntries(Object.entries(snapshots).map(([n, f]) => [n, f?.fingerprint ?? null])),
204
+ identityBefore: before.identity, classicClaimBefore: before.classicClaim, keepClaimBefore: before.keepClaim, archiveClaimBefore: before.archiveClaim };
205
+ const receipt = hash(JSON.stringify(manifest)), base = join(input.agendHome, "kiro-reconciliations");
206
+ privateDir(base);
207
+ privateDir(paths(input).root);
208
+ const root = join(paths(input).root, receipt);
209
+ privateDir(root);
210
+ for (const [name, f] of Object.entries(snapshots))
211
+ if (f)
212
+ writeNew(join(root, name), f.bytes);
213
+ writeNew(join(root, "manifest.json"), Buffer.from(JSON.stringify(manifest)));
214
+ manifestAt(input, receipt);
215
+ if (inspectKiroReconciliation(input, classicHash).digest !== plan.digest)
216
+ throw new Error("Reconciliation sources changed while preserving");
217
+ setPhase(input, receipt, "prepared");
218
+ return receipt;
219
+ }
220
+ /** An active/rolled-back intent is never interpreted as permission for a fresh conversation. */
221
+ export function assertKiroReconciliationLaunch(input) {
222
+ const j = journal({ ...input, archiveId: "unused", model: "unused" });
223
+ if (!j)
224
+ return null;
225
+ if (j.phase === "rollback_pending" || j.phase === "rolled_back")
226
+ throw new Error("Kiro reconciliation was rolled back; explicit confirmation is required before starting");
227
+ if (!receiptPattern.test(j.receipt))
228
+ throw new Error("Invalid reconciliation receipt");
229
+ const path = join(paths({ ...input, archiveId: "unused", model: "unused" }).root, j.receipt, "manifest.json");
230
+ const m = JSON.parse(read(path, 2 * 1024 * 1024, true).bytes.toString("utf8"));
231
+ if (!archivedKiroAlternative({ ...input, sessionId: m.input.sessionId }, m.input.archiveId))
232
+ throw new Error("Reconciliation selection is not proven");
233
+ if (j.phase === "prepared")
234
+ inspectKiroReconciliationRollback(m.input, j.receipt);
235
+ return j.phase === "prepared" ? { input: m.input, classicHash: m.classicHash } : null;
236
+ }
237
+ export function archivedKiroAlternative(input, alternative) {
238
+ const j = journal({ ...input, archiveId: alternative, model: "unused" });
239
+ if (!j)
240
+ return null;
241
+ if (j.phase !== "prepared" && j.phase !== "selected")
242
+ return null;
243
+ // The receipt supplies the model; every storage/root/selection field still has to match this launch.
244
+ if (!receiptPattern.test(j.receipt))
245
+ throw new Error("Invalid reconciliation receipt");
246
+ const path = join(paths({ ...input, archiveId: alternative, model: "unused" }).root, j.receipt, "manifest.json");
247
+ const m = JSON.parse(read(path, 2 * 1024 * 1024, true).bytes.toString("utf8"));
248
+ if (m.input.archiveId !== alternative)
249
+ return null;
250
+ const scoped = { ...input, archiveId: alternative, model: m.input.model };
251
+ const { manifest } = manifestAt(scoped, j.receipt);
252
+ peerProof(scoped);
253
+ const claim = state(scoped).archiveClaim;
254
+ if (claim !== manifest.archiveClaimBefore && claim !== input.instance + "\nabandoned\n")
255
+ throw new Error("Archived alternative ownership changed");
256
+ const unchanged = () => {
257
+ const now = files(scoped);
258
+ const names = j.phase === "prepared" ? fileNames(scoped) : [alternative + ".json", alternative + ".jsonl", alternative + ".history"];
259
+ return names.every(name => equal(now[name]?.fingerprint ?? null, manifest.files[name]));
260
+ };
261
+ if (!unchanged())
262
+ throw new Error("Archived alternative changed; reconciliation held");
263
+ return unchanged;
264
+ }
265
+ export function completeKiroSelection(input, receipt) {
266
+ manifestAt(input, receipt);
267
+ const p = paths(input), current = state(input), value = JSON.parse(current.identity), key = JSON.stringify(["v2", kiroCanonicalDirectory(input.workingDirectory), input.credentialProfile]);
268
+ if (kiroOwnedConversation({ ...input, engine: "v2" }) !== input.sessionId || current.keepClaim !== input.instance + "\n")
269
+ throw new Error("Original selection is no longer owned");
270
+ if (current.archiveClaim !== null && current.archiveClaim !== input.instance + "\n" && current.archiveClaim !== input.instance + "\nabandoned\n")
271
+ throw new Error("Archived alternative acquired another owner");
272
+ value.keys[key].abandoned = [...new Set([...value.keys[key].abandoned, input.archiveId])];
273
+ if (current.archiveClaim === null) {
274
+ const fd = openSync(p.archiveClaim, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
275
+ try {
276
+ writeFileSync(fd, input.instance + "\nabandoned\n");
277
+ fsyncSync(fd);
278
+ }
279
+ finally {
280
+ closeSync(fd);
281
+ }
282
+ syncDir(dirname(p.archiveClaim));
283
+ }
284
+ else
285
+ atomic(p.archiveClaim, input.instance + "\nabandoned\n");
286
+ atomic(p.identity, JSON.stringify(value) + "\n");
287
+ setPhase(input, receipt, "selected");
288
+ }
289
+ /** Finish a confirmed intent after a worker/process interruption, before publishing a resumed CLI. */
290
+ export function finishKiroReconciliationLaunch(input) {
291
+ const j = journal({ ...input, archiveId: "unused", model: "unused" });
292
+ if (j?.phase !== "prepared")
293
+ return;
294
+ const path = join(paths({ ...input, archiveId: "unused", model: "unused" }).root, j.receipt, "manifest.json");
295
+ const m = JSON.parse(read(path, 2 * 1024 * 1024, true).bytes.toString("utf8"));
296
+ const scoped = { ...input, archiveId: m.input.archiveId, model: m.input.model };
297
+ manifestAt(scoped, j.receipt);
298
+ completeKiroSelection(scoped, j.receipt);
299
+ }
300
+ export function inspectKiroReconciliationRollback(input, receipt) {
301
+ const { manifest } = manifestAt(input, receipt), j = journal(input);
302
+ if (j?.receipt !== receipt || j.phase === "rolled_back")
303
+ throw new Error("Receipt is not the active reconciliation");
304
+ const current = state(input), before = JSON.parse(manifest.identityBefore), now = JSON.parse(current.identity);
305
+ const key = JSON.stringify(["v2", kiroCanonicalDirectory(input.workingDirectory), input.credentialProfile]);
306
+ const old = before.keys[key], live = now.keys[key];
307
+ const selected = { ...old, id: input.sessionId, abandoned: old.abandoned.filter((id) => id !== input.sessionId), agentConfirmed: live?.agentConfirmed };
308
+ const retired = { ...selected, abandoned: [...new Set([...selected.abandoned, input.archiveId])] };
309
+ if (!live || typeof live.agentConfirmed !== "boolean" || ![old, selected, retired].some(expected => equal(live, expected)))
310
+ throw new Error("A newer selection supersedes rollback");
311
+ delete before.keys[key];
312
+ delete now.keys[key];
313
+ if (!equal(before, now) || current.classicClaim !== manifest.classicClaimBefore || ![manifest.keepClaimBefore, input.instance + "\n"].includes(current.keepClaim)
314
+ || ![manifest.archiveClaimBefore, input.instance + "\nabandoned\n"].includes(current.archiveClaim))
315
+ throw new Error("Identity or claims changed; rollback refused");
316
+ return { digest: hash(JSON.stringify({ receipt, current, phase: j.phase })), rollbackReceipt: receipt };
317
+ }
318
+ export function rollbackKiroSelection(input, plan) {
319
+ const receipt = plan.rollbackReceipt;
320
+ if (inspectKiroReconciliationRollback(input, receipt).digest !== plan.digest)
321
+ throw new Error("Rollback confirmation is stale");
322
+ const { manifest } = manifestAt(input, receipt), p = paths(input);
323
+ setPhase(input, receipt, "rollback_pending");
324
+ atomic(p.keepClaim, manifest.keepClaimBefore);
325
+ if (manifest.archiveClaimBefore === null) {
326
+ if (existsSync(p.archiveClaim))
327
+ unlinkSync(p.archiveClaim);
328
+ syncDir(dirname(p.archiveClaim));
329
+ }
330
+ else
331
+ atomic(p.archiveClaim, manifest.archiveClaimBefore);
332
+ atomic(p.identity, manifest.identityBefore);
333
+ setPhase(input, receipt, "rolled_back");
334
+ return receipt;
335
+ }
336
+ export function beginKiroReconciliationRollback(input, plan) {
337
+ const receipt = plan.rollbackReceipt;
338
+ if (inspectKiroReconciliationRollback(input, receipt).digest !== plan.digest)
339
+ throw new Error("Rollback confirmation is stale");
340
+ const { manifest } = manifestAt(input, receipt);
341
+ setPhase(input, receipt, "rollback_pending");
342
+ return { plan: inspectKiroReconciliationRollback(input, receipt), classicHash: manifest.classicHash };
343
+ }
344
+ //# sourceMappingURL=kiro-reconcile-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-reconcile-store.js","sourceRoot":"","sources":["../../src/backend/kiro-reconcile-store.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@ import { parentPort } from "node:worker_threads";
3
3
  import { performance } from "node:perf_hooks";
4
4
  import { readdirSync, readFileSync, statSync } from "node:fs";
5
5
  import { join } from "node:path";
6
- import { prepareKiroCarryForLaunch } from "./kiro-classic-archive.js";
6
+ import { prepareKiroCarryForLaunch, planKiroCarryReconciliation, applyKiroCarryReconciliation } from "./kiro-classic-archive.js";
7
+ import { computeKiroClassicLinks } from "./kiro-classic-links.js";
7
8
  const CACHE_LIMIT = 4096;
8
9
  const CACHE_BYTES = 4 * 1024 * 1024;
9
10
  let cacheBytes = 0;
@@ -85,7 +86,20 @@ function scan({ keys, sessionsDir }, deadlineAt) {
85
86
  parentPort?.on("message", ({ id, input, deadlineAt }) => {
86
87
  let reply;
87
88
  try {
88
- if (input.migration) {
89
+ if (input.reconciliation) {
90
+ const checkpoint = () => { if (performance.now() >= deadlineAt)
91
+ throw new Error("Kiro reconciliation timed out"); };
92
+ checkpoint();
93
+ const r = input.reconciliation;
94
+ reply = { kind: "ok", sessions: [], diagnostics: { reads: 0, hits: 0 }, reconciliation: r.plan
95
+ ? { receipt: applyKiroCarryReconciliation(r.input, r.plan, r.actor ?? "", checkpoint) }
96
+ : { plan: planKiroCarryReconciliation(r.input, r.rollbackReceipt) } };
97
+ }
98
+ else if (input.classicLinks) {
99
+ reply = { kind: "ok", sessions: [], diagnostics: { reads: 0, hits: 0 },
100
+ classicLinks: computeKiroClassicLinks(input.classicLinks, () => performance.now() >= deadlineAt) };
101
+ }
102
+ else if (input.migration) {
89
103
  if (performance.now() >= deadlineAt)
90
104
  throw new Error("Kiro verification timed out");
91
105
  reply = { kind: "ok", sessions: [], diagnostics: { reads: 0, hits: 0 }, verification: verifyKiroMigrationStore(input.migration) };
@@ -100,7 +114,7 @@ parentPort?.on("message", ({ id, input, deadlineAt }) => {
100
114
  reply = scan(input, deadlineAt);
101
115
  }
102
116
  catch (err) {
103
- reply = { kind: "unreadable", detail: err.message };
117
+ reply = { kind: "unreadable", detail: input.reconciliation && err instanceof SyntaxError ? "Malformed reconciliation data" : err.message };
104
118
  }
105
119
  parentPort?.postMessage({ id, reply });
106
120
  });
@@ -1 +1 @@
1
- {"version":3,"file":"kiro-v2-store-worker.js","sourceRoot":"","sources":["../../src/backend/kiro-v2-store-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kiro-v2-store-worker.js","sourceRoot":"","sources":["../../src/backend/kiro-v2-store-worker.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,23 @@
1
1
  import type { KiroMigrationVerificationInput } from "./kiro-migration-verify.js";
2
2
  import type { KiroClassicArchiveInput, KiroCarryPreparation } from "./kiro-classic-archive.js";
3
+ import type { KiroClassicLinks, KiroClassicLinksInput } from "./kiro-classic-links.js";
4
+ import type { KiroReconcileInput, KiroReconcilePlan } from "./kiro-reconcile-store.js";
3
5
  export declare const KIRO_V2_STORE_BUDGET_MS = 15000;
6
+ /** #2738: a classic store's compaction links read every transcript of the instance's key — its own lane, its own budget. */
7
+ export declare const KIRO_CLASSIC_LINKS_BUDGET_MS = 30000;
4
8
  export declare const KIRO_V2_STORE_QUEUE_LIMIT = 64;
5
9
  export interface KiroV2StoreInput {
6
10
  keys: string[];
7
11
  sessionsDir: string;
8
12
  carry?: Omit<KiroClassicArchiveInput, "sessionId">;
9
13
  migration?: KiroMigrationVerificationInput;
14
+ classicLinks?: KiroClassicLinksInput;
15
+ reconciliation?: {
16
+ input: KiroReconcileInput;
17
+ plan?: KiroReconcilePlan;
18
+ actor?: string;
19
+ rollbackReceipt?: string;
20
+ };
10
21
  }
11
22
  export type KiroV2StoreReply = {
12
23
  kind: "ok";
@@ -23,6 +34,11 @@ export type KiroV2StoreReply = {
23
34
  verification?: {
24
35
  forensic: string;
25
36
  };
37
+ classicLinks?: KiroClassicLinks;
38
+ reconciliation?: {
39
+ plan?: KiroReconcilePlan;
40
+ receipt?: string;
41
+ };
26
42
  } | {
27
43
  kind: "unreadable";
28
44
  detail: string;
@@ -47,11 +63,15 @@ declare function createIsolate(): Isolate;
47
63
  export declare class KiroV2StoreLane {
48
64
  private factory;
49
65
  private now;
66
+ private budgetMs;
67
+ private label;
50
68
  private worker;
51
69
  private retiring;
52
70
  private nextId;
53
71
  private pending;
54
- constructor(factory?: typeof createIsolate, now?: () => number);
72
+ constructor(factory?: typeof createIsolate, now?: () => number, budgetMs?: number, label?: string);
73
+ /** The detail of a reply that ran out of this lane's budget. */
74
+ get timedOut(): string;
55
75
  read(input: KiroV2StoreInput): Promise<KiroV2StoreReply>;
56
76
  close(): void;
57
77
  private settle;
@@ -59,4 +79,6 @@ export declare class KiroV2StoreLane {
59
79
  private pump;
60
80
  }
61
81
  export declare const sharedKiroV2StoreLane: KiroV2StoreLane;
82
+ /** #2738: apart from the v2 lane, so a long classic read never spends a v2 launch's budget in its queue. */
83
+ export declare const sharedKiroClassicLinksLane: KiroV2StoreLane;
62
84
  export {};
@@ -1,6 +1,8 @@
1
1
  import { Worker } from "node:worker_threads";
2
2
  import { performance } from "node:perf_hooks";
3
3
  export const KIRO_V2_STORE_BUDGET_MS = 15_000;
4
+ /** #2738: a classic store's compaction links read every transcript of the instance's key — its own lane, its own budget. */
5
+ export const KIRO_CLASSIC_LINKS_BUDGET_MS = 30_000;
4
6
  export const KIRO_V2_STORE_QUEUE_LIMIT = 64;
5
7
  const unreadable = (detail) => ({ kind: "unreadable", detail });
6
8
  function createIsolate() {
@@ -15,30 +17,36 @@ function createIsolate() {
15
17
  export class KiroV2StoreLane {
16
18
  factory;
17
19
  now;
20
+ budgetMs;
21
+ label;
18
22
  worker = null;
19
23
  retiring = false;
20
24
  nextId = 0;
21
25
  pending = new Map();
22
- constructor(factory = createIsolate, now = () => performance.now()) {
26
+ constructor(factory = createIsolate, now = () => performance.now(), budgetMs = KIRO_V2_STORE_BUDGET_MS, label = "v2 session discovery") {
23
27
  this.factory = factory;
24
28
  this.now = now;
29
+ this.budgetMs = budgetMs;
30
+ this.label = label;
25
31
  }
32
+ /** The detail of a reply that ran out of this lane's budget. */
33
+ get timedOut() { return `${this.label} timed out`; }
26
34
  read(input) {
27
35
  if (this.pending.size >= KIRO_V2_STORE_QUEUE_LIMIT)
28
- return Promise.resolve(unreadable("v2 session discovery queue full"));
29
- const id = ++this.nextId, deadlineAt = this.now() + KIRO_V2_STORE_BUDGET_MS;
36
+ return Promise.resolve(unreadable(`${this.label} queue full`));
37
+ const id = ++this.nextId, deadlineAt = this.now() + this.budgetMs;
30
38
  const promise = new Promise(resolve => {
31
39
  this.pending.set(id, { input, deadlineAt, sent: false, resolve, timer: setTimeout(() => {
32
- this.settle(id, unreadable("v2 session discovery timed out"));
40
+ this.settle(id, unreadable(this.timedOut));
33
41
  this.retire();
34
- }, KIRO_V2_STORE_BUDGET_MS) });
42
+ }, this.budgetMs) });
35
43
  });
36
44
  this.pump();
37
45
  return promise;
38
46
  }
39
47
  close() {
40
48
  for (const id of this.pending.keys())
41
- this.settle(id, unreadable("v2 session discovery closed"));
49
+ this.settle(id, unreadable(`${this.label} closed`));
42
50
  this.retire();
43
51
  }
44
52
  settle(id, reply) {
@@ -57,7 +65,7 @@ export class KiroV2StoreLane {
57
65
  this.retiring = true;
58
66
  for (const [id, request] of this.pending)
59
67
  if (request.sent)
60
- this.settle(id, unreadable("v2 session discovery worker retired"));
68
+ this.settle(id, unreadable(`${this.label} worker retired`));
61
69
  try {
62
70
  void this.worker.terminate().catch(() => { });
63
71
  }
@@ -68,7 +76,7 @@ export class KiroV2StoreLane {
68
76
  return;
69
77
  for (const [id, request] of this.pending) {
70
78
  if (this.now() >= request.deadlineAt)
71
- this.settle(id, unreadable("v2 session discovery timed out"));
79
+ this.settle(id, unreadable(this.timedOut));
72
80
  }
73
81
  if (!this.pending.size)
74
82
  return;
@@ -83,7 +91,7 @@ export class KiroV2StoreLane {
83
91
  if (!request)
84
92
  return;
85
93
  if (this.now() >= request.deadlineAt) {
86
- this.settle(message.id, unreadable("v2 session discovery timed out"));
94
+ this.settle(message.id, unreadable(this.timedOut));
87
95
  this.retire();
88
96
  }
89
97
  else
@@ -98,13 +106,13 @@ export class KiroV2StoreLane {
98
106
  this.retiring = false;
99
107
  for (const [id, request] of this.pending)
100
108
  if (request.sent)
101
- this.settle(id, unreadable("v2 session discovery worker exited"));
109
+ this.settle(id, unreadable(`${this.label} worker exited`));
102
110
  this.pump();
103
111
  });
104
112
  }
105
113
  catch {
106
114
  for (const id of this.pending.keys())
107
- this.settle(id, unreadable("cannot start v2 session discovery worker"));
115
+ this.settle(id, unreadable(`cannot start ${this.label} worker`));
108
116
  return;
109
117
  }
110
118
  }
@@ -112,7 +120,7 @@ export class KiroV2StoreLane {
112
120
  if (request.sent)
113
121
  continue;
114
122
  if (this.now() >= request.deadlineAt) {
115
- this.settle(id, unreadable("v2 session discovery timed out"));
123
+ this.settle(id, unreadable(this.timedOut));
116
124
  continue;
117
125
  }
118
126
  try {
@@ -128,4 +136,6 @@ export class KiroV2StoreLane {
128
136
  }
129
137
  }
130
138
  export const sharedKiroV2StoreLane = new KiroV2StoreLane();
139
+ /** #2738: apart from the v2 lane, so a long classic read never spends a v2 launch's budget in its queue. */
140
+ export const sharedKiroClassicLinksLane = new KiroV2StoreLane(createIsolate, () => performance.now(), KIRO_CLASSIC_LINKS_BUDGET_MS, "classic compaction links");
131
141
  //# sourceMappingURL=kiro-v2-store.js.map