@songsid/agend 2.3.2-beta.1 → 2.3.2-beta.11

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 (298) hide show
  1. package/THIRD_PARTY_NOTICES.md +40 -0
  2. package/dist/agent-cli.js +69 -2
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/agent-endpoint.js +11 -0
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/agent-whats-new.js +3 -0
  7. package/dist/agent-whats-new.js.map +1 -1
  8. package/dist/antigravity-usage-scan.d.ts +58 -0
  9. package/dist/antigravity-usage-scan.js +257 -0
  10. package/dist/antigravity-usage-scan.js.map +1 -0
  11. package/dist/antigravity-usage-worker.d.ts +1 -0
  12. package/dist/antigravity-usage-worker.js +10 -0
  13. package/dist/antigravity-usage-worker.js.map +1 -0
  14. package/dist/auth-api.js +4 -0
  15. package/dist/auth-api.js.map +1 -1
  16. package/dist/backend/kiro-classic-archive.d.ts +52 -0
  17. package/dist/backend/kiro-classic-archive.js +444 -0
  18. package/dist/backend/kiro-classic-archive.js.map +1 -0
  19. package/dist/backend/kiro-identity.d.ts +83 -0
  20. package/dist/backend/kiro-identity.js +144 -0
  21. package/dist/backend/kiro-identity.js.map +1 -1
  22. package/dist/backend/kiro-migration-verify.d.ts +10 -0
  23. package/dist/backend/kiro-migration-verify.js +52 -0
  24. package/dist/backend/kiro-migration-verify.js.map +1 -0
  25. package/dist/backend/kiro-retired-model.d.ts +62 -0
  26. package/dist/backend/kiro-retired-model.js +160 -0
  27. package/dist/backend/kiro-retired-model.js.map +1 -0
  28. package/dist/backend/kiro-v2-store-worker.js +21 -1
  29. package/dist/backend/kiro-v2-store-worker.js.map +1 -1
  30. package/dist/backend/kiro-v2-store.d.ts +8 -0
  31. package/dist/backend/kiro-v2-store.js.map +1 -1
  32. package/dist/backend/kiro.d.ts +169 -2
  33. package/dist/backend/kiro.js +703 -28
  34. package/dist/backend/kiro.js.map +1 -1
  35. package/dist/backend/types.d.ts +108 -0
  36. package/dist/backend/types.js +9 -0
  37. package/dist/backend/types.js.map +1 -1
  38. package/dist/backend-signin-guide.d.ts +1 -0
  39. package/dist/backend-signin-guide.js +9 -0
  40. package/dist/backend-signin-guide.js.map +1 -0
  41. package/dist/backend-signin-pending.d.ts +10 -0
  42. package/dist/backend-signin-pending.js +44 -0
  43. package/dist/backend-signin-pending.js.map +1 -0
  44. package/dist/browser-backend-signins.d.ts +56 -0
  45. package/dist/browser-backend-signins.js +189 -0
  46. package/dist/browser-backend-signins.js.map +1 -0
  47. package/dist/cache-ledger.d.ts +38 -2
  48. package/dist/cache-ledger.js +133 -8
  49. package/dist/cache-ledger.js.map +1 -1
  50. package/dist/cache-prices.d.ts +2 -1
  51. package/dist/cache-prices.js +5 -2
  52. package/dist/cache-prices.js.map +1 -1
  53. package/dist/cache-service.d.ts +68 -0
  54. package/dist/cache-service.js +355 -13
  55. package/dist/cache-service.js.map +1 -1
  56. package/dist/channel/adapters/discord.d.ts +11 -0
  57. package/dist/channel/adapters/discord.js +71 -14
  58. package/dist/channel/adapters/discord.js.map +1 -1
  59. package/dist/channel/ipc-timeouts.js +3 -0
  60. package/dist/channel/ipc-timeouts.js.map +1 -1
  61. package/dist/channel/mcp-tools.js +41 -2
  62. package/dist/channel/mcp-tools.js.map +1 -1
  63. package/dist/channel/tool-router.js +2 -1
  64. package/dist/channel/tool-router.js.map +1 -1
  65. package/dist/classic-channel-manager.d.ts +11 -0
  66. package/dist/classic-channel-manager.js +39 -1
  67. package/dist/classic-channel-manager.js.map +1 -1
  68. package/dist/cli.js +54 -2
  69. package/dist/cli.js.map +1 -1
  70. package/dist/config-validator.d.ts +7 -1
  71. package/dist/config-validator.js +55 -10
  72. package/dist/config-validator.js.map +1 -1
  73. package/dist/config.d.ts +19 -0
  74. package/dist/config.js +33 -1
  75. package/dist/config.js.map +1 -1
  76. package/dist/cpu-quota.d.ts +23 -0
  77. package/dist/cpu-quota.js +86 -0
  78. package/dist/cpu-quota.js.map +1 -0
  79. package/dist/daemon.d.ts +68 -0
  80. package/dist/daemon.js +448 -26
  81. package/dist/daemon.js.map +1 -1
  82. package/dist/dashboard-permissions.d.ts +31 -6
  83. package/dist/dashboard-permissions.js +84 -9
  84. package/dist/dashboard-permissions.js.map +1 -1
  85. package/dist/doctor.js +2 -1
  86. package/dist/doctor.js.map +1 -1
  87. package/dist/fleet-control-audit.d.ts +1 -1
  88. package/dist/fleet-control-audit.js +3 -0
  89. package/dist/fleet-control-audit.js.map +1 -1
  90. package/dist/fleet-manager.d.ts +133 -2
  91. package/dist/fleet-manager.js +905 -94
  92. package/dist/fleet-manager.js.map +1 -1
  93. package/dist/forged-envelope-scan.d.ts +9 -0
  94. package/dist/forged-envelope-scan.js +30 -5
  95. package/dist/forged-envelope-scan.js.map +1 -1
  96. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +5 -2
  97. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +24 -1
  98. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +49 -1
  99. package/dist/general-knowledge/skills/web-appearance/SKILL.md +49 -1
  100. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +47 -9
  101. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +54 -11
  102. package/dist/instance-config-impact.js +10 -5
  103. package/dist/instance-config-impact.js.map +1 -1
  104. package/dist/instance-lifecycle.d.ts +23 -0
  105. package/dist/instance-lifecycle.js +62 -12
  106. package/dist/instance-lifecycle.js.map +1 -1
  107. package/dist/kiro-db-reader.d.ts +5 -0
  108. package/dist/kiro-db-reader.js +18 -0
  109. package/dist/kiro-db-reader.js.map +1 -1
  110. package/dist/kiro-engine-status.d.ts +2 -0
  111. package/dist/kiro-engine-status.js +9 -0
  112. package/dist/kiro-engine-status.js.map +1 -1
  113. package/dist/kiro-migrate.d.ts +60 -0
  114. package/dist/kiro-migrate.js +160 -0
  115. package/dist/kiro-migrate.js.map +1 -0
  116. package/dist/kiro-session-proof.d.ts +41 -0
  117. package/dist/kiro-session-proof.js +89 -0
  118. package/dist/kiro-session-proof.js.map +1 -0
  119. package/dist/kiro-transcript-lane.d.ts +2 -0
  120. package/dist/kiro-transcript-lane.js.map +1 -1
  121. package/dist/kiro-transcript-worker.js +1 -0
  122. package/dist/kiro-transcript-worker.js.map +1 -1
  123. package/dist/kiro-tui-forensic.d.ts +12 -0
  124. package/dist/kiro-tui-forensic.js +110 -0
  125. package/dist/kiro-tui-forensic.js.map +1 -0
  126. package/dist/kiro-usage-run.d.ts +7 -0
  127. package/dist/kiro-usage-run.js +39 -0
  128. package/dist/kiro-usage-run.js.map +1 -0
  129. package/dist/kiro-usage-scan.d.ts +49 -0
  130. package/dist/kiro-usage-scan.js +223 -0
  131. package/dist/kiro-usage-scan.js.map +1 -0
  132. package/dist/kiro-usage-worker.d.ts +1 -0
  133. package/dist/kiro-usage-worker.js +10 -0
  134. package/dist/kiro-usage-worker.js.map +1 -0
  135. package/dist/kiro-usage.d.ts +58 -0
  136. package/dist/kiro-usage.js +310 -0
  137. package/dist/kiro-usage.js.map +1 -0
  138. package/dist/locale.js +230 -8
  139. package/dist/locale.js.map +1 -1
  140. package/dist/log-service.js +1 -1
  141. package/dist/log-service.js.map +1 -1
  142. package/dist/login-url.d.ts +4 -0
  143. package/dist/login-url.js +22 -0
  144. package/dist/login-url.js.map +1 -0
  145. package/dist/needs-you-hub.d.ts +2 -1
  146. package/dist/needs-you-hub.js +1 -1
  147. package/dist/needs-you-hub.js.map +1 -1
  148. package/dist/needs-you.d.ts +10 -2
  149. package/dist/needs-you.js +10 -2
  150. package/dist/needs-you.js.map +1 -1
  151. package/dist/notice-delivery.d.ts +16 -0
  152. package/dist/notice-delivery.js +35 -0
  153. package/dist/notice-delivery.js.map +1 -0
  154. package/dist/office-share-page.d.ts +16 -0
  155. package/dist/office-share-page.js +85 -0
  156. package/dist/office-share-page.js.map +1 -0
  157. package/dist/office-share-service.d.ts +91 -0
  158. package/dist/office-share-service.js +176 -0
  159. package/dist/office-share-service.js.map +1 -0
  160. package/dist/office-share.d.ts +268 -0
  161. package/dist/office-share.js +574 -0
  162. package/dist/office-share.js.map +1 -0
  163. package/dist/opencode-usage-scan.d.ts +28 -0
  164. package/dist/opencode-usage-scan.js +92 -0
  165. package/dist/opencode-usage-scan.js.map +1 -0
  166. package/dist/opencode-usage-worker.d.ts +1 -0
  167. package/dist/opencode-usage-worker.js +10 -0
  168. package/dist/opencode-usage-worker.js.map +1 -0
  169. package/dist/outbound-handlers.js +22 -2
  170. package/dist/outbound-handlers.js.map +1 -1
  171. package/dist/outbound-schemas.d.ts +65 -2
  172. package/dist/outbound-schemas.js +56 -2
  173. package/dist/outbound-schemas.js.map +1 -1
  174. package/dist/public-web-gateway.js +7 -1
  175. package/dist/public-web-gateway.js.map +1 -1
  176. package/dist/quickstart-api.js +13 -2
  177. package/dist/quickstart-api.js.map +1 -1
  178. package/dist/quickstart.js +2 -1
  179. package/dist/quickstart.js.map +1 -1
  180. package/dist/remote-card-answer.d.ts +83 -0
  181. package/dist/remote-card-answer.js +208 -0
  182. package/dist/remote-card-answer.js.map +1 -0
  183. package/dist/remote-card-prompt.d.ts +38 -0
  184. package/dist/remote-card-prompt.js +86 -0
  185. package/dist/remote-card-prompt.js.map +1 -0
  186. package/dist/reply-triggers.d.ts +2 -0
  187. package/dist/reply-triggers.js +3 -0
  188. package/dist/reply-triggers.js.map +1 -0
  189. package/dist/settings-api.d.ts +2 -0
  190. package/dist/settings-api.js +41 -16
  191. package/dist/settings-api.js.map +1 -1
  192. package/dist/settings-change.js +20 -14
  193. package/dist/settings-change.js.map +1 -1
  194. package/dist/settings-effect.js +7 -1
  195. package/dist/settings-effect.js.map +1 -1
  196. package/dist/settings-instance-patch.js +4 -1
  197. package/dist/settings-instance-patch.js.map +1 -1
  198. package/dist/setup-form.d.ts +1 -1
  199. package/dist/setup-form.js +55 -6
  200. package/dist/setup-form.js.map +1 -1
  201. package/dist/setup-host.d.ts +9 -0
  202. package/dist/setup-host.js +127 -6
  203. package/dist/setup-host.js.map +1 -1
  204. package/dist/setup-signin-assets.d.ts +2 -0
  205. package/dist/setup-signin-assets.js +6 -0
  206. package/dist/setup-signin-assets.js.map +1 -0
  207. package/dist/setup-wizard.js +2 -0
  208. package/dist/setup-wizard.js.map +1 -1
  209. package/dist/structured-signin-transport.d.ts +8 -0
  210. package/dist/structured-signin-transport.js +79 -0
  211. package/dist/structured-signin-transport.js.map +1 -0
  212. package/dist/structured-signin.d.ts +131 -0
  213. package/dist/structured-signin.js +388 -0
  214. package/dist/structured-signin.js.map +1 -0
  215. package/dist/tool-permissions.js +29 -0
  216. package/dist/tool-permissions.js.map +1 -1
  217. package/dist/topic-commands.js +6 -2
  218. package/dist/topic-commands.js.map +1 -1
  219. package/dist/transcript-sources.d.ts +27 -2
  220. package/dist/transcript-sources.js +104 -40
  221. package/dist/transcript-sources.js.map +1 -1
  222. package/dist/turn-reply-guard.d.ts +1 -1
  223. package/dist/turn-reply-guard.js +1 -1
  224. package/dist/turn-reply-guard.js.map +1 -1
  225. package/dist/types.d.ts +33 -8
  226. package/dist/ui/backend-signin.js +63 -10
  227. package/dist/ui/chat-store.js +3 -2
  228. package/dist/ui/chat-strings.js +4 -4
  229. package/dist/ui/fleet-office-editor.js +68 -11
  230. package/dist/ui/fleet-office-layout.js +110 -35
  231. package/dist/ui/fleet-office-model.js +6 -3
  232. package/dist/ui/fleet-office-overview.js +167 -0
  233. package/dist/ui/fleet-office-pack.d.ts +13 -3
  234. package/dist/ui/fleet-office-pack.js +214 -24
  235. package/dist/ui/fleet-office-skin.js +98 -23
  236. package/dist/ui/fleet-office-store.js +82 -5
  237. package/dist/ui/fleet-office-view.js +5 -4
  238. package/dist/ui/fleet-office-zones.js +232 -21
  239. package/dist/ui/fleet-office.js +549 -186
  240. package/dist/ui/fleet-usage.js +19 -15
  241. package/dist/ui/office-share-dialog.js +145 -0
  242. package/dist/ui/office-share-page.js +164 -0
  243. package/dist/ui/panel-chat.js +22 -3
  244. package/dist/ui/panel-log.js +4 -4
  245. package/dist/ui/panel-needs.js +5 -5
  246. package/dist/ui/panel-settings.js +38 -12
  247. package/dist/ui/settings-dialogs.js +8 -1
  248. package/dist/ui/settings-guests.js +17 -7
  249. package/dist/ui/settings-model.js +22 -6
  250. package/dist/ui/settings-registry.js +4 -0
  251. package/dist/ui/settings-strings.js +18 -2
  252. package/dist/ui/shared/app-i18n.js +4 -2
  253. package/dist/ui/shared/app-shell.js +14 -6
  254. package/dist/ui/shared/app-stream.js +2 -1
  255. package/dist/ui/shared/app.css +85 -4
  256. package/dist/ui/shared/office/cozy.png +0 -0
  257. package/dist/ui/shared/side-panel.js +95 -0
  258. package/dist/ui/structured-signin.js +115 -0
  259. package/dist/usage-report.d.ts +20 -0
  260. package/dist/usage-report.js +54 -17
  261. package/dist/usage-report.js.map +1 -1
  262. package/dist/usage-rollup.d.ts +9 -1
  263. package/dist/usage-rollup.js +20 -4
  264. package/dist/usage-rollup.js.map +1 -1
  265. package/dist/web-api.d.ts +23 -1
  266. package/dist/web-api.js +292 -3
  267. package/dist/web-api.js.map +1 -1
  268. package/dist/web-auth.js +1 -1
  269. package/dist/web-auth.js.map +1 -1
  270. package/dist/web-backend-login.d.ts +1 -7
  271. package/dist/web-backend-login.js +2 -24
  272. package/dist/web-backend-login.js.map +1 -1
  273. package/dist/web-office-acts.d.ts +173 -0
  274. package/dist/web-office-acts.js +285 -0
  275. package/dist/web-office-acts.js.map +1 -0
  276. package/dist/web-office-pack-read.d.ts +35 -0
  277. package/dist/web-office-pack-read.js +252 -0
  278. package/dist/web-office-pack-read.js.map +1 -0
  279. package/dist/web-office-pack-tools.d.ts +232 -0
  280. package/dist/web-office-pack-tools.js +754 -0
  281. package/dist/web-office-pack-tools.js.map +1 -0
  282. package/dist/web-office-skins.d.ts +71 -6
  283. package/dist/web-office-skins.js +321 -35
  284. package/dist/web-office-skins.js.map +1 -1
  285. package/dist/web-office-store.d.ts +5 -2
  286. package/dist/web-office-store.js +69 -10
  287. package/dist/web-office-store.js.map +1 -1
  288. package/dist/web-settings-patch.d.ts +2 -1
  289. package/dist/web-settings-patch.js +4 -1
  290. package/dist/web-settings-patch.js.map +1 -1
  291. package/dist/working-recovery.d.ts +2 -2
  292. package/dist/working-recovery.js +43 -8
  293. package/dist/working-recovery.js.map +1 -1
  294. package/dist/working-state-journal.d.ts +2 -0
  295. package/dist/working-state-journal.js +16 -1
  296. package/dist/working-state-journal.js.map +1 -1
  297. package/package.json +3 -2
  298. package/templates/windows-shortcuts.ps1 +155 -140
@@ -0,0 +1,444 @@
1
+ /** #2598: preserve a frozen classic copy outside Kiro's merged session index.
2
+ * Only an owned, complete carried V2 copy permits this. Never called while its CLI is alive.
3
+ * Production launch preparation runs this work on the existing bounded V2 worker lane.
4
+ */
5
+ import { isDeepStrictEqual } from "node:util";
6
+ import Database from "better-sqlite3";
7
+ import { createHash, randomUUID } from "node:crypto";
8
+ import { closeSync, constants, existsSync, fstatSync, fsyncSync, linkSync, lstatSync, mkdirSync, openSync, readFileSync, readlinkSync, readdirSync, unlinkSync, writeFileSync } from "node:fs";
9
+ import { execFileSync } from "node:child_process";
10
+ import { join, resolve } from "node:path";
11
+ import { kiroAgentName, kiroFleetTag } from "./kiro-agent.js";
12
+ import { kiroCanonicalDirectory, kiroDirectoryKeys, kiroCarryCandidate, reinstateKiroCarryPin } from "./kiro-identity.js";
13
+ import { readKiroTuiAssistantTexts, snapshotKiroTuiFile } from "../kiro-tui-forensic.js";
14
+ const hash = (s) => createHash("sha256").update(s).digest("hex");
15
+ const MAX_ROW_BYTES = 32 * 1024 * 1024;
16
+ const MAX_ARCHIVE_BYTES = 96 * 1024 * 1024;
17
+ const safeId = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,199}$/;
18
+ /** Full process listing is bounded; only the matching agent/id is inspected, no command lines are logged. */
19
+ export function assertKiroConversationStopped(input, listing, ownerOf) {
20
+ const agent = kiroAgentName(input.instance, kiroFleetTag(input.agendHome));
21
+ const escape = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
22
+ const target = new RegExp(`(?:^|\\s)--(?:agent(?:=|\\s+)['"]?${escape(agent)}|resume-id(?:=|\\s+)['"]?${escape(input.sessionId)})['"]?(?=\\s|$)`);
23
+ const processes = listing ?? execFileSync("ps", ["-axo", "pid=,command="], { encoding: "utf8", timeout: 2000, maxBuffer: 4 * 1024 * 1024 });
24
+ if (!processes.trim())
25
+ throw new Error("Cannot prove the Kiro process is stopped: process listing is empty");
26
+ let parsed = 0;
27
+ for (const line of processes.split("\n")) {
28
+ const row = /^\s*(\d+)\s+(.+)$/.exec(line);
29
+ if (row)
30
+ parsed++;
31
+ if (row && target.test(row[2]))
32
+ throw new Error("The instance's Kiro process is still alive; stop it before repairing its stores");
33
+ if (row && !/--(?:agent|resume-id)(?:=|\s)/.test(row[2]) && /(?:kiro-cli(?:-chat)?(?:\s|$)|[/\\]tui\.js(?:\s|$))/.test(row[2])) {
34
+ const owner = ownerOf ? ownerOf(Number(row[1])) : listing !== undefined ? null : kiroProcessOwner(Number(row[1]), input.workingDirectory);
35
+ if (owner === input.instance || owner === null)
36
+ throw new Error("A Kiro process may still own this instance's conversation; stopped state is not proven");
37
+ }
38
+ }
39
+ if (!parsed)
40
+ throw new Error("Cannot prove the Kiro process is stopped: process listing is invalid");
41
+ }
42
+ /** Catch surviving TUI/agent children whose argv omits --agent; never log process environments. */
43
+ function kiroProcessOwner(pid, workingDirectory) {
44
+ try {
45
+ if (process.platform === "linux") {
46
+ const root = `/proc/${pid}`;
47
+ const state = readFileSync(join(root, "stat"), "utf8");
48
+ if (/^[ZX] /.test(state.slice(state.lastIndexOf(")") + 2)))
49
+ return "gone";
50
+ const env = readFileSync(join(root, "environ"));
51
+ if (env.length > 4 * 1024 * 1024)
52
+ throw new Error("Kiro process environment is unobservable");
53
+ const marker = Buffer.from("AGEND_INSTANCE_NAME=");
54
+ const at = env.indexOf(marker);
55
+ if (at >= 0 && (at === 0 || env[at - 1] === 0)) {
56
+ const end = env.indexOf(0, at);
57
+ return env.subarray(at + marker.length, end < 0 ? env.length : end).toString("utf8") || null;
58
+ }
59
+ return kiroCanonicalDirectory(readlinkSync(join(root, "cwd"))) === kiroCanonicalDirectory(workingDirectory) ? null : "other-workspace";
60
+ }
61
+ const env = execFileSync("ps", ["eww", "-p", String(pid), "-o", "command="], { encoding: "utf8", timeout: 2000, maxBuffer: 4 * 1024 * 1024 });
62
+ return /(?:^|\s)AGEND_INSTANCE_NAME=([^\s]+)/.exec(env)?.[1] ?? null;
63
+ }
64
+ catch (err) {
65
+ if (err.code === "ENOENT")
66
+ return "gone";
67
+ throw err;
68
+ }
69
+ }
70
+ function ownedFile(path) {
71
+ const st = lstatSync(path);
72
+ if (!st.isFile() || (process.getuid && st.uid !== process.getuid()))
73
+ throw new Error("Store or archive is not an owned real file");
74
+ }
75
+ function privateDirectory(path) {
76
+ const existed = existsSync(path);
77
+ if (!existed)
78
+ mkdirSync(path, { mode: 0o700 });
79
+ const st = lstatSync(path);
80
+ if (!st.isDirectory() || (process.getuid && st.uid !== process.getuid()) || (st.mode & 0o077))
81
+ throw new Error("Archive directory is not private and owned");
82
+ {
83
+ // Repeat on retry too: a previous failed sync may have left a visible but non-durable directory.
84
+ // Persist the directory itself AND its name in the parent before SQLite can remove the source.
85
+ for (const dir of [path, resolve(path, "..")]) {
86
+ const fd = openSync(dir, constants.O_RDONLY);
87
+ try {
88
+ fsyncSync(fd);
89
+ }
90
+ finally {
91
+ closeSync(fd);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ function readArchive(path) {
97
+ const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
98
+ try {
99
+ const st = fstatSync(fd);
100
+ if (!st.isFile() || st.size > MAX_ARCHIVE_BYTES || (st.mode & 0o077) || (process.getuid && st.uid !== process.getuid()))
101
+ throw new Error("Archive is not a bounded private owned file");
102
+ const value = JSON.parse(readFileSync(fd, "utf8"));
103
+ if (!value?.payload || value.payload.version !== 1 || value.sha256 !== hash(JSON.stringify(value.payload)))
104
+ throw new Error("Archive checksum or version is invalid");
105
+ return value;
106
+ }
107
+ finally {
108
+ closeSync(fd);
109
+ }
110
+ }
111
+ function writeArchive(input, rows) {
112
+ const payload = { version: 1, instance: input.instance, directory: kiroCanonicalDirectory(input.workingDirectory), profile: input.credentialProfile,
113
+ sessionId: input.sessionId, dbPath: resolve(input.dbPath), rows };
114
+ const archive = { payload, sha256: hash(JSON.stringify(payload)) };
115
+ const base = join(input.agendHome, "kiro-classic-archives");
116
+ privateDirectory(base);
117
+ const root = join(base, hash(input.instance).slice(0, 32));
118
+ privateDirectory(root);
119
+ const path = join(root, `${input.sessionId}-${archive.sha256}.json`), temp = `${path}.${randomUUID()}.tmp`;
120
+ const fd = openSync(temp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600);
121
+ try {
122
+ writeFileSync(fd, JSON.stringify(archive) + "\n");
123
+ fsyncSync(fd);
124
+ }
125
+ finally {
126
+ closeSync(fd);
127
+ }
128
+ try {
129
+ linkSync(temp, path);
130
+ }
131
+ catch (err) {
132
+ if (err.code !== "EEXIST")
133
+ throw err;
134
+ }
135
+ finally {
136
+ unlinkSync(temp);
137
+ }
138
+ const dir = openSync(root, constants.O_RDONLY);
139
+ try {
140
+ fsyncSync(dir);
141
+ }
142
+ finally {
143
+ closeSync(dir);
144
+ }
145
+ if (JSON.stringify(readArchive(path)) !== JSON.stringify(archive))
146
+ throw new Error("Archive read-back does not match the frozen rows");
147
+ return path;
148
+ }
149
+ function identity(input, engine) {
150
+ return { agendHome: input.agendHome, instance: input.instance, engine, workingDirectory: input.workingDirectory, credentialProfile: input.credentialProfile };
151
+ }
152
+ function proveOwnedCarry(input, allowAbandoned = false) {
153
+ const current = () => {
154
+ const candidate = kiroCarryCandidate(input);
155
+ return !!candidate && candidate.id === input.sessionId && (allowAbandoned || !candidate.repair);
156
+ };
157
+ if (!current())
158
+ throw new Error("Both classic and V2 must still be owned by this instance");
159
+ const metadata = snapshotKiroTuiFile(join(input.sessionsDir, `${input.sessionId}.json`), 8 * 1024 * 1024);
160
+ const meta = JSON.parse(metadata.text), state = meta.session_state;
161
+ if (meta.exported_from_v1 !== true || typeof meta.cwd !== "string" || kiroCanonicalDirectory(meta.cwd) !== kiroCanonicalDirectory(input.workingDirectory)
162
+ || !state || state.version !== "v1" || !state.conversation_metadata || state.rts_model_state?.conversation_id !== input.sessionId)
163
+ throw new Error("No complete matching carried V2 copy is proven");
164
+ const read = readKiroTuiAssistantTexts({ sessionId: input.sessionId, sessionsDir: input.sessionsDir, stillOwned: current });
165
+ if (read.kind !== "ok" || !metadata.unchanged())
166
+ throw new Error("The carried V2 transcript is incomplete, changed or unreadable");
167
+ proveClassicHistoryCoverage(input);
168
+ }
169
+ /** Kiro 2.34 preserves each classic assistant message_id and converts every history pair into two JSONL records.
170
+ * Match the entire frozen prefix (user text, assistant text/tool inputs and tool outputs), not just readable syntax.
171
+ * Unknown classic formats fail closed; original non-message metadata remains in the exact restorable archive.
172
+ */
173
+ export function proveClassicHistoryCoverage(input) {
174
+ ownedFile(input.dbPath);
175
+ const db = new Database(input.dbPath, { readonly: true, fileMustExist: true, timeout: 200 });
176
+ let values;
177
+ try {
178
+ const keys = kiroDirectoryKeys(input.workingDirectory), where = `key IN (${keys.map(() => "?").join(",")}) AND conversation_id=?`;
179
+ const sizes = db.prepare(`SELECT length(CAST(value AS BLOB)) AS n FROM conversations_v2 WHERE ${where}`).all(...keys, input.sessionId);
180
+ if (sizes.reduce((n, r) => n + r.n, 0) > MAX_ROW_BYTES)
181
+ throw new Error("Classic history exceeds the coverage limit");
182
+ values = db.prepare(`SELECT CAST(value AS BLOB) AS value FROM conversations_v2 WHERE ${where}`).all(...keys, input.sessionId).map(r => r.value);
183
+ }
184
+ finally {
185
+ db.close();
186
+ }
187
+ if (!values.length) {
188
+ const root = join(input.agendHome, "kiro-classic-archives", hash(input.instance).slice(0, 32));
189
+ for (const name of readdirSync(root)) {
190
+ if (!name.startsWith(input.sessionId + "-") || !name.endsWith(".json"))
191
+ continue;
192
+ const archive = readArchive(join(root, name)).payload;
193
+ if (archive.instance === input.instance && archive.sessionId === input.sessionId && archive.directory === kiroCanonicalDirectory(input.workingDirectory)
194
+ && archive.profile === input.credentialProfile && archive.dbPath === resolve(input.dbPath))
195
+ values.push(...archive.rows.map(r => Buffer.from(r.valueBase64, "base64")));
196
+ }
197
+ if (!values.length)
198
+ throw new Error("No frozen source or verified archive proves complete history coverage");
199
+ }
200
+ const log = snapshotKiroTuiFile(join(input.sessionsDir, input.sessionId + ".jsonl"), 64 * 1024 * 1024);
201
+ const records = log.text.split("\n").filter(line => line.trim()).map(line => JSON.parse(line));
202
+ const fail = () => { throw new Error("The carried V2 copy does not cover the complete frozen classic history"); };
203
+ for (const bytes of values) {
204
+ const classic = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
205
+ if (classic.conversation_id !== input.sessionId || !Array.isArray(classic.history) || !classic.history.length || classic.next_message != null)
206
+ fail();
207
+ for (let i = 0; i < classic.history.length; i++) {
208
+ const turn = classic.history[i], user = turn?.user?.content, assistant = turn?.assistant;
209
+ const u = records[i * 2], a = records[i * 2 + 1];
210
+ const response = assistant?.Response, tool = assistant?.ToolUse, body = response ?? tool;
211
+ if (!body || response && tool || !body.message_id || a?.kind !== "AssistantMessage" || a.data?.message_id !== body.message_id || !Array.isArray(a.data.content))
212
+ fail();
213
+ const expected = [];
214
+ if (typeof body.content !== "string")
215
+ fail();
216
+ if (body.content || response)
217
+ expected.push({ kind: "text", data: body.content });
218
+ if (tool) {
219
+ if (!Array.isArray(tool.tool_uses))
220
+ fail();
221
+ for (const call of tool.tool_uses) {
222
+ if (!call || typeof call.id !== "string" || typeof call.name !== "string" || !call.args || typeof call.args !== "object")
223
+ fail();
224
+ expected.push({ kind: "toolUse", data: { toolUseId: call.id, name: call.name, input: call.args } });
225
+ }
226
+ }
227
+ // Tool blocks may carry extra upstream metadata; compare the message-bearing fields exactly.
228
+ const actual = a.data.content.map((b) => b.kind === "toolUse" ? { kind: b.kind, data: { toolUseId: b.data?.toolUseId, name: b.data?.name, input: b.data?.input } } : b);
229
+ if (!isDeepStrictEqual(actual, expected) || !u?.data || (turn.user.images != null && (!Array.isArray(turn.user.images) || turn.user.images.length)))
230
+ fail();
231
+ if (user?.Prompt && typeof user.Prompt.prompt === "string") {
232
+ if (u.kind !== "Prompt" || !isDeepStrictEqual(u.data.content, [{ kind: "text", data: user.Prompt.prompt }]))
233
+ fail();
234
+ }
235
+ else if (Array.isArray((user?.ToolUseResults ?? user?.CancelledToolUses)?.tool_use_results)) {
236
+ if (u.kind !== "ToolResults" || !u.data.results || typeof u.data.results !== "object")
237
+ fail();
238
+ const cancelled = user?.CancelledToolUses;
239
+ const results = (user.ToolUseResults ?? cancelled).tool_use_results;
240
+ if (cancelled && (typeof cancelled.prompt !== "string" || !Array.isArray(u.data.content)
241
+ || !u.data.content.some((b) => b.kind === "text" && b.data === cancelled.prompt)))
242
+ fail();
243
+ if (Object.keys(u.data.results).length !== results.length)
244
+ fail();
245
+ for (const result of results) {
246
+ let converted;
247
+ if (cancelled)
248
+ converted = "Cancelled";
249
+ else if (result.status === "Success")
250
+ converted = { Success: { items: result.content } };
251
+ else if (result.status === "Error" && Array.isArray(result.content) && result.content.every((x) => typeof x.Text === "string"))
252
+ converted = { Error: { Custom: result.content.map((x) => x.Text).join("\n") } };
253
+ else
254
+ fail();
255
+ if (!isDeepStrictEqual(u.data.results[result.tool_use_id]?.result, converted))
256
+ fail();
257
+ }
258
+ }
259
+ else
260
+ fail();
261
+ }
262
+ }
263
+ if (!log.unchanged())
264
+ fail();
265
+ }
266
+ /** An abandoned pin is recoverable only while every later unowned same-cwd alternative remains empty. Leave all of them untouched. */
267
+ function proveNoReplacementWork(input) {
268
+ const original = JSON.parse(snapshotKiroTuiFile(join(input.sessionsDir, `${input.sessionId}.json`), 8 * 1024 * 1024).text);
269
+ const created = Date.parse(original.created_at);
270
+ if (!Number.isFinite(created))
271
+ throw new Error("Carried creation time is unavailable");
272
+ for (const name of readdirSync(input.sessionsDir)) {
273
+ if (!name.endsWith(".json") || name === `${input.sessionId}.json`)
274
+ continue;
275
+ const file = snapshotKiroTuiFile(join(input.sessionsDir, name), 8 * 1024 * 1024), meta = JSON.parse(file.text);
276
+ if (typeof meta.cwd !== "string" || kiroCanonicalDirectory(meta.cwd) !== kiroCanonicalDirectory(input.workingDirectory))
277
+ continue;
278
+ if (Date.parse(meta.created_at) < created)
279
+ continue;
280
+ if (!safeId.test(meta.session_id) || name !== `${meta.session_id}.json`)
281
+ throw new Error("Replacement session metadata is ambiguous");
282
+ const claim = join(input.agendHome, "kiro-identity", "claims", "v2", meta.session_id);
283
+ if (existsSync(claim)) {
284
+ const owner = readFileSync(claim, "utf8");
285
+ if (/^[^\n\r\0]{1,512}\n$/.test(owner) && owner !== input.instance + "\n")
286
+ continue;
287
+ throw new Error("A replacement session is already owned; automatic repair held");
288
+ }
289
+ const log = snapshotKiroTuiFile(join(input.sessionsDir, `${meta.session_id}.jsonl`), 1);
290
+ if (log.text.length !== 0 || !file.unchanged() || !log.unchanged())
291
+ throw new Error("An unowned replacement session has work or changed; automatic repair held");
292
+ }
293
+ }
294
+ /** This runs before discovery can adopt one of the empty sessions left by the old retry escape hatch. */
295
+ export function repairAbandonedKiroCarry(input, stopped = () => assertKiroConversationStopped(input)) {
296
+ const candidate = kiroCarryCandidate(input);
297
+ if (!candidate || candidate.id !== input.sessionId || !candidate.repair)
298
+ return false;
299
+ stopped();
300
+ proveOwnedCarry(input, true);
301
+ proveNoReplacementWork(input);
302
+ stopped();
303
+ reinstateKiroCarryPin(input, input.sessionId);
304
+ return true;
305
+ }
306
+ function validateInput(input) {
307
+ if (!safeId.test(input.sessionId) || !/^[^\n\r\0]{1,512}$/.test(input.instance))
308
+ throw new Error("Unsafe conversation id");
309
+ }
310
+ /** Archive all literal/canonical aliases of this exact conversation in this directory, never other conversations. */
311
+ export function archiveKiroClassicCopy(input, hooks = {}) {
312
+ validateInput(input);
313
+ if (!existsSync(input.dbPath))
314
+ return null;
315
+ ownedFile(input.dbPath);
316
+ const keys = kiroDirectoryKeys(input.workingDirectory), placeholders = keys.map(() => "?").join(",");
317
+ const db = new Database(input.dbPath, { fileMustExist: true, timeout: hooks.timeoutMs ?? 2000 });
318
+ const stopped = hooks.stopped ?? (() => assertKiroConversationStopped(input));
319
+ try {
320
+ const sizes = () => db.prepare(`SELECT length(CAST(value AS BLOB)) AS bytes FROM conversations_v2 WHERE key IN (${placeholders}) AND conversation_id=?`).all(...keys, input.sessionId);
321
+ if (!sizes().length)
322
+ return null;
323
+ stopped();
324
+ proveOwnedCarry(input);
325
+ hooks.checkpoint?.();
326
+ db.exec("BEGIN IMMEDIATE");
327
+ try {
328
+ const lengths = sizes();
329
+ if (!lengths.length) {
330
+ db.exec("COMMIT");
331
+ return null;
332
+ }
333
+ if (lengths.reduce((n, r) => n + r.bytes, 0) > MAX_ROW_BYTES)
334
+ throw new Error("Frozen classic rows exceed the archive limit");
335
+ const rows = db.prepare(`SELECT key, conversation_id AS id, CAST(value AS BLOB) AS value, created_at AS createdAt, updated_at AS updatedAt FROM conversations_v2 WHERE key IN (${placeholders}) AND conversation_id=? ORDER BY key`).all(...keys, input.sessionId);
336
+ const path = writeArchive(input, rows.map(r => ({ key: r.key, id: r.id, valueBase64: r.value.toString("base64"), createdAt: r.createdAt, updatedAt: r.updatedAt })));
337
+ hooks.checkpoint?.();
338
+ stopped();
339
+ proveOwnedCarry(input);
340
+ const del = db.prepare("DELETE FROM conversations_v2 WHERE key=? AND conversation_id=? AND CAST(value AS BLOB)=? AND created_at=? AND updated_at=?");
341
+ for (const row of rows)
342
+ if (del.run(row.key, row.id, row.value, row.createdAt, row.updatedAt).changes !== 1)
343
+ throw new Error("Frozen classic row changed; nothing removed");
344
+ hooks.checkpoint?.();
345
+ db.exec("COMMIT");
346
+ return path;
347
+ }
348
+ catch (err) {
349
+ if (db.inTransaction)
350
+ db.exec("ROLLBACK");
351
+ throw err;
352
+ }
353
+ }
354
+ finally {
355
+ db.close();
356
+ }
357
+ }
358
+ /** One automatic launch repair. Explicit fresh starts do not call this. */
359
+ export function prepareKiroCarryForLaunch(input, checkpoint) {
360
+ const candidate = kiroCarryCandidate(input);
361
+ if (!candidate)
362
+ return { sessionId: null, archivePath: null, repaired: false };
363
+ const full = { ...input, sessionId: candidate.id };
364
+ let repaired = false;
365
+ if (candidate.repair) {
366
+ if (!existsSync(input.dbPath))
367
+ throw new Error("No frozen classic copy proves this abandoned migration; repair held");
368
+ ownedFile(input.dbPath);
369
+ const db = new Database(input.dbPath, { readonly: true, fileMustExist: true });
370
+ let present;
371
+ try {
372
+ const keys = kiroDirectoryKeys(input.workingDirectory);
373
+ present = !!db.prepare(`SELECT 1 FROM conversations_v2 WHERE key IN (${keys.map(() => "?").join(",")}) AND conversation_id=? LIMIT 1`).get(...keys, candidate.id);
374
+ }
375
+ finally {
376
+ db.close();
377
+ }
378
+ if (!present) {
379
+ const root = join(input.agendHome, "kiro-classic-archives", hash(input.instance).slice(0, 32));
380
+ const completed = existsSync(root) && readdirSync(root).some(name => {
381
+ if (!name.startsWith(candidate.id + "-") || !name.endsWith(".json"))
382
+ return false;
383
+ const archive = readArchive(join(root, name)).payload;
384
+ return archive.instance === input.instance && archive.sessionId === candidate.id && archive.dbPath === resolve(input.dbPath);
385
+ });
386
+ if (!completed)
387
+ throw new Error("No frozen classic row or verified archive proves this abandoned migration; repair held");
388
+ return { sessionId: null, archivePath: null, repaired: false }; // deliberate fresh after an already archived migration
389
+ }
390
+ checkpoint?.();
391
+ repaired = repairAbandonedKiroCarry(full);
392
+ }
393
+ checkpoint?.();
394
+ proveOwnedCarry(full);
395
+ const archivePath = archiveKiroClassicCopy(full, { checkpoint });
396
+ return { sessionId: candidate.id, archivePath, repaired };
397
+ }
398
+ /** Operator recovery only: verify the archive and insert missing exact rows. Never overwrite newer/different data. */
399
+ export function restoreKiroClassicArchive(input, path, stopped = () => assertKiroConversationStopped(input)) {
400
+ validateInput(input);
401
+ const { payload } = readArchive(path);
402
+ if (payload.instance !== input.instance || payload.sessionId !== input.sessionId || payload.directory !== kiroCanonicalDirectory(input.workingDirectory)
403
+ || payload.profile !== input.credentialProfile || payload.dbPath !== resolve(input.dbPath) || !Array.isArray(payload.rows) || !payload.rows.length)
404
+ throw new Error("Archive does not match this instance/store");
405
+ const keys = new Set(kiroDirectoryKeys(input.workingDirectory));
406
+ for (const row of payload.rows)
407
+ if (!keys.has(row.key) || row.id !== input.sessionId || typeof row.valueBase64 !== "string"
408
+ || Buffer.from(row.valueBase64, "base64").toString("base64") !== row.valueBase64 || !Number.isSafeInteger(row.createdAt) || !Number.isSafeInteger(row.updatedAt))
409
+ throw new Error("Archive row is invalid");
410
+ stopped();
411
+ ownedFile(input.dbPath);
412
+ const db = new Database(input.dbPath, { fileMustExist: true, timeout: 2000 });
413
+ try {
414
+ db.exec("BEGIN IMMEDIATE");
415
+ try {
416
+ stopped();
417
+ for (const row of payload.rows) {
418
+ const old = db.prepare("SELECT CAST(value AS BLOB) AS value, created_at AS createdAt, updated_at AS updatedAt FROM conversations_v2 WHERE key=? AND conversation_id=?").get(row.key, row.id);
419
+ const bytes = Buffer.from(row.valueBase64, "base64");
420
+ if (old) {
421
+ if (!old.value.equals(bytes) || old.createdAt !== row.createdAt || old.updatedAt !== row.updatedAt)
422
+ throw new Error("A different classic row already exists; restore refused");
423
+ }
424
+ else
425
+ db.prepare("INSERT INTO conversations_v2 (key,conversation_id,value,created_at,updated_at) VALUES (?,?,CAST(? AS TEXT),?,?)").run(row.key, row.id, bytes, row.createdAt, row.updatedAt);
426
+ }
427
+ db.exec("COMMIT");
428
+ }
429
+ catch (err) {
430
+ if (db.inTransaction)
431
+ db.exec("ROLLBACK");
432
+ throw err;
433
+ }
434
+ }
435
+ finally {
436
+ db.close();
437
+ }
438
+ }
439
+ /** Metadata only, for the operator CLI to resolve the current configured store before restoration. */
440
+ export function kiroClassicArchiveMetadata(path) {
441
+ const p = readArchive(path).payload;
442
+ return { instance: p.instance, sessionId: p.sessionId, directory: p.directory, profile: p.profile, dbPath: p.dbPath };
443
+ }
444
+ //# sourceMappingURL=kiro-classic-archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-classic-archive.js","sourceRoot":"","sources":["../../src/backend/kiro-classic-archive.ts"],"names":[],"mappings":"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"}
@@ -72,6 +72,44 @@ export interface ResolveKiroIdentityOptions {
72
72
  * claiming may fail, in which case a fresh baseline will need the store.
73
73
  */
74
74
  export declare function kiroIdentityNeedsStore(opts: Omit<ResolveKiroIdentityOptions, "readStore" | "launchedBefore">): boolean;
75
+ /**
76
+ * #2648: the conversation this instance's record — else its pending adoption — names for this key, read-only (the
77
+ * small identity files only). What launch preparation reads ahead for; the resolver still decides the launch itself.
78
+ */
79
+ export declare function kiroRecordedConversation(opts: {
80
+ agendHome: string;
81
+ instance: string;
82
+ engine: RecordEngine;
83
+ workingDirectory: string;
84
+ credentialProfile: string | null;
85
+ }): string | null;
86
+ /** Read-only forensic pin: a completed record AND its live claim, never a pending adoption or directory guess. */
87
+ export declare function kiroOwnedConversation(opts: {
88
+ agendHome: string;
89
+ instance: string;
90
+ engine: RecordEngine;
91
+ workingDirectory: string;
92
+ credentialProfile: string | null;
93
+ }): string | null;
94
+ export interface KiroCarryCandidate {
95
+ id: string;
96
+ repair: boolean;
97
+ since: number;
98
+ }
99
+ /** The original classic owner identifies an incomplete carried migration; never choose a newest session. */
100
+ export declare function kiroCarryCandidate(opts: {
101
+ agendHome: string;
102
+ instance: string;
103
+ workingDirectory: string;
104
+ credentialProfile: string | null;
105
+ }): KiroCarryCandidate | null;
106
+ /** Only after external stopped-process and complete-owned-carry proofs. A failed state write leaves the old owner reserved. */
107
+ export declare function reinstateKiroCarryPin(opts: {
108
+ agendHome: string;
109
+ instance: string;
110
+ workingDirectory: string;
111
+ credentialProfile: string | null;
112
+ }, id: string): void;
75
113
  export declare function resolveKiroIdentity(opts: ResolveKiroIdentityOptions): KiroIdentityDecision;
76
114
  /** Whether `id` is recorded as already running as the instance's agent. */
77
115
  export declare function kiroAgentConfirmed(agendHome: string, instance: string, engine: RecordEngine, workingDirectory: string, credentialProfile: string | null, id: string): boolean;
@@ -83,4 +121,49 @@ export declare function kiroAgentConfirmed(agendHome: string, instance: string,
83
121
  export declare function confirmKiroAgentSwitch(agendHome: string, instance: string, engine: RecordEngine, workingDirectory: string, credentialProfile: string | null, id: string): boolean;
84
122
  /** Delete or replace: drop the instance's records and every claim it holds (active or given up). Conversations stay. */
85
123
  export declare function forgetKiroIdentity(agendHome: string, instance: string): void;
124
+ /**
125
+ * #2598 B3: the newest engine this instance has a conversation record on — v2 once it ran under the TUI, v3 under V3
126
+ * — or null (never past classic). Moving to a newer engine forks the conversation and freezes the old engine's copy, so
127
+ * a launch on an older engine than this would resume the stale copy and lose everything done since. A pending
128
+ * migration does not count: until the newer engine's launch records it, nothing has happened there.
129
+ */
130
+ export declare function kiroEngineFloor(agendHome: string, instance: string): "v2" | "v3" | null;
131
+ export type KiroTuiMigration = {
132
+ kind: "ready";
133
+ classicId: string | null;
134
+ } | {
135
+ kind: "refused";
136
+ reason: "already-tui" | "no-classic-conversation" | "unreadable" | "name";
137
+ };
138
+ /**
139
+ * #2598 B2: what moving this instance from classic (v1) to the TUI (v2) would carry, read-only. Its classic
140
+ * conversation is the one its v1 record holds (claim still held); null when it has none (a fresh or legacy-mode
141
+ * instance). Refused once it has any TUI record or a TUI adoption under way.
142
+ */
143
+ export declare function inspectKiroTuiMigration(opts: {
144
+ agendHome: string;
145
+ instance: string;
146
+ workingDirectory: string;
147
+ credentialProfile: string | null;
148
+ }): KiroTuiMigration;
149
+ /**
150
+ * #2598 B2: arm the move. The classic conversation is recorded as this instance's TUI adoption under way, so the
151
+ * next TUI launch resolves to exactly it (resolveKiroIdentity's pending path: claimed, recorded, resumed by id once —
152
+ * kiro copies the classic history into its session files). Nothing else is written; the classic record and claim
153
+ * stay as they are. With no classic conversation nothing is armed, and the TUI launch starts fresh.
154
+ * Throws when the adoption cannot be written. Returns what was armed.
155
+ */
156
+ export declare function armKiroTuiMigration(opts: {
157
+ agendHome: string;
158
+ instance: string;
159
+ workingDirectory: string;
160
+ credentialProfile: string | null;
161
+ }): KiroTuiMigration;
162
+ /** Undo armKiroTuiMigration before any TUI launch took it up (a config save that failed after arming). */
163
+ export declare function disarmKiroTuiMigration(opts: {
164
+ agendHome: string;
165
+ instance: string;
166
+ workingDirectory: string;
167
+ credentialProfile: string | null;
168
+ }): void;
86
169
  export {};