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

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 (266) hide show
  1. package/THIRD_PARTY_NOTICES.md +40 -0
  2. package/dist/agent-cli.js +21 -2
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/agent-endpoint.js +5 -0
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/antigravity-usage-scan.d.ts +58 -0
  7. package/dist/antigravity-usage-scan.js +257 -0
  8. package/dist/antigravity-usage-scan.js.map +1 -0
  9. package/dist/antigravity-usage-worker.d.ts +1 -0
  10. package/dist/antigravity-usage-worker.js +10 -0
  11. package/dist/antigravity-usage-worker.js.map +1 -0
  12. package/dist/auth-api.js +4 -0
  13. package/dist/auth-api.js.map +1 -1
  14. package/dist/backend/kiro-identity.d.ts +64 -0
  15. package/dist/backend/kiro-identity.js +101 -0
  16. package/dist/backend/kiro-identity.js.map +1 -1
  17. package/dist/backend/kiro-retired-model.d.ts +62 -0
  18. package/dist/backend/kiro-retired-model.js +160 -0
  19. package/dist/backend/kiro-retired-model.js.map +1 -0
  20. package/dist/backend/kiro.d.ts +71 -2
  21. package/dist/backend/kiro.js +352 -11
  22. package/dist/backend/kiro.js.map +1 -1
  23. package/dist/backend/types.d.ts +59 -0
  24. package/dist/backend/types.js.map +1 -1
  25. package/dist/backend-signin-guide.d.ts +1 -0
  26. package/dist/backend-signin-guide.js +9 -0
  27. package/dist/backend-signin-guide.js.map +1 -0
  28. package/dist/backend-signin-pending.d.ts +10 -0
  29. package/dist/backend-signin-pending.js +44 -0
  30. package/dist/backend-signin-pending.js.map +1 -0
  31. package/dist/browser-backend-signins.d.ts +56 -0
  32. package/dist/browser-backend-signins.js +189 -0
  33. package/dist/browser-backend-signins.js.map +1 -0
  34. package/dist/cache-ledger.d.ts +38 -2
  35. package/dist/cache-ledger.js +133 -8
  36. package/dist/cache-ledger.js.map +1 -1
  37. package/dist/cache-prices.d.ts +2 -1
  38. package/dist/cache-prices.js +5 -2
  39. package/dist/cache-prices.js.map +1 -1
  40. package/dist/cache-service.d.ts +68 -0
  41. package/dist/cache-service.js +355 -13
  42. package/dist/cache-service.js.map +1 -1
  43. package/dist/channel/adapters/discord.d.ts +11 -0
  44. package/dist/channel/adapters/discord.js +71 -14
  45. package/dist/channel/adapters/discord.js.map +1 -1
  46. package/dist/channel/mcp-tools.js +29 -2
  47. package/dist/channel/mcp-tools.js.map +1 -1
  48. package/dist/channel/tool-router.js +2 -1
  49. package/dist/channel/tool-router.js.map +1 -1
  50. package/dist/classic-channel-manager.d.ts +11 -0
  51. package/dist/classic-channel-manager.js +39 -1
  52. package/dist/classic-channel-manager.js.map +1 -1
  53. package/dist/cli.js +21 -2
  54. package/dist/cli.js.map +1 -1
  55. package/dist/config-validator.d.ts +7 -1
  56. package/dist/config-validator.js +53 -10
  57. package/dist/config-validator.js.map +1 -1
  58. package/dist/config.d.ts +19 -0
  59. package/dist/config.js +31 -1
  60. package/dist/config.js.map +1 -1
  61. package/dist/cpu-quota.d.ts +23 -0
  62. package/dist/cpu-quota.js +86 -0
  63. package/dist/cpu-quota.js.map +1 -0
  64. package/dist/daemon.d.ts +23 -0
  65. package/dist/daemon.js +106 -7
  66. package/dist/daemon.js.map +1 -1
  67. package/dist/dashboard-permissions.d.ts +20 -6
  68. package/dist/dashboard-permissions.js +58 -9
  69. package/dist/dashboard-permissions.js.map +1 -1
  70. package/dist/doctor.js +2 -1
  71. package/dist/doctor.js.map +1 -1
  72. package/dist/fleet-manager.d.ts +72 -0
  73. package/dist/fleet-manager.js +507 -89
  74. package/dist/fleet-manager.js.map +1 -1
  75. package/dist/forged-envelope-scan.d.ts +9 -0
  76. package/dist/forged-envelope-scan.js +30 -5
  77. package/dist/forged-envelope-scan.js.map +1 -1
  78. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +5 -2
  79. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +14 -1
  80. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +24 -1
  81. package/dist/general-knowledge/skills/web-appearance/SKILL.md +24 -1
  82. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +37 -9
  83. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +44 -11
  84. package/dist/instance-config-impact.js +10 -5
  85. package/dist/instance-config-impact.js.map +1 -1
  86. package/dist/instance-lifecycle.d.ts +19 -0
  87. package/dist/instance-lifecycle.js +55 -12
  88. package/dist/instance-lifecycle.js.map +1 -1
  89. package/dist/kiro-db-reader.d.ts +5 -0
  90. package/dist/kiro-db-reader.js +18 -0
  91. package/dist/kiro-db-reader.js.map +1 -1
  92. package/dist/kiro-engine-status.d.ts +2 -0
  93. package/dist/kiro-engine-status.js +9 -0
  94. package/dist/kiro-engine-status.js.map +1 -1
  95. package/dist/kiro-migrate.d.ts +49 -0
  96. package/dist/kiro-migrate.js +105 -0
  97. package/dist/kiro-migrate.js.map +1 -0
  98. package/dist/kiro-transcript-lane.d.ts +2 -0
  99. package/dist/kiro-transcript-lane.js.map +1 -1
  100. package/dist/kiro-transcript-worker.js +1 -0
  101. package/dist/kiro-transcript-worker.js.map +1 -1
  102. package/dist/kiro-tui-forensic.d.ts +7 -0
  103. package/dist/kiro-tui-forensic.js +110 -0
  104. package/dist/kiro-tui-forensic.js.map +1 -0
  105. package/dist/kiro-usage-run.d.ts +7 -0
  106. package/dist/kiro-usage-run.js +39 -0
  107. package/dist/kiro-usage-run.js.map +1 -0
  108. package/dist/kiro-usage-scan.d.ts +49 -0
  109. package/dist/kiro-usage-scan.js +223 -0
  110. package/dist/kiro-usage-scan.js.map +1 -0
  111. package/dist/kiro-usage-worker.d.ts +1 -0
  112. package/dist/kiro-usage-worker.js +10 -0
  113. package/dist/kiro-usage-worker.js.map +1 -0
  114. package/dist/kiro-usage.d.ts +58 -0
  115. package/dist/kiro-usage.js +310 -0
  116. package/dist/kiro-usage.js.map +1 -0
  117. package/dist/locale.js +88 -8
  118. package/dist/locale.js.map +1 -1
  119. package/dist/log-service.js +1 -1
  120. package/dist/log-service.js.map +1 -1
  121. package/dist/login-url.d.ts +4 -0
  122. package/dist/login-url.js +22 -0
  123. package/dist/login-url.js.map +1 -0
  124. package/dist/needs-you-hub.d.ts +2 -1
  125. package/dist/needs-you-hub.js +1 -1
  126. package/dist/needs-you-hub.js.map +1 -1
  127. package/dist/needs-you.d.ts +8 -2
  128. package/dist/needs-you.js +6 -0
  129. package/dist/needs-you.js.map +1 -1
  130. package/dist/notice-delivery.d.ts +16 -0
  131. package/dist/notice-delivery.js +35 -0
  132. package/dist/notice-delivery.js.map +1 -0
  133. package/dist/office-share-page.d.ts +16 -0
  134. package/dist/office-share-page.js +85 -0
  135. package/dist/office-share-page.js.map +1 -0
  136. package/dist/office-share-service.d.ts +91 -0
  137. package/dist/office-share-service.js +176 -0
  138. package/dist/office-share-service.js.map +1 -0
  139. package/dist/office-share.d.ts +258 -0
  140. package/dist/office-share.js +549 -0
  141. package/dist/office-share.js.map +1 -0
  142. package/dist/opencode-usage-scan.d.ts +28 -0
  143. package/dist/opencode-usage-scan.js +92 -0
  144. package/dist/opencode-usage-scan.js.map +1 -0
  145. package/dist/opencode-usage-worker.d.ts +1 -0
  146. package/dist/opencode-usage-worker.js +10 -0
  147. package/dist/opencode-usage-worker.js.map +1 -0
  148. package/dist/outbound-handlers.js +22 -2
  149. package/dist/outbound-handlers.js.map +1 -1
  150. package/dist/outbound-schemas.d.ts +26 -2
  151. package/dist/outbound-schemas.js +27 -2
  152. package/dist/outbound-schemas.js.map +1 -1
  153. package/dist/public-web-gateway.js +7 -1
  154. package/dist/public-web-gateway.js.map +1 -1
  155. package/dist/quickstart-api.js +13 -2
  156. package/dist/quickstart-api.js.map +1 -1
  157. package/dist/quickstart.js +2 -1
  158. package/dist/quickstart.js.map +1 -1
  159. package/dist/remote-card-answer.d.ts +83 -0
  160. package/dist/remote-card-answer.js +208 -0
  161. package/dist/remote-card-answer.js.map +1 -0
  162. package/dist/reply-triggers.d.ts +2 -0
  163. package/dist/reply-triggers.js +3 -0
  164. package/dist/reply-triggers.js.map +1 -0
  165. package/dist/settings-api.d.ts +2 -0
  166. package/dist/settings-api.js +41 -16
  167. package/dist/settings-api.js.map +1 -1
  168. package/dist/settings-change.js +17 -14
  169. package/dist/settings-change.js.map +1 -1
  170. package/dist/settings-effect.js +7 -1
  171. package/dist/settings-effect.js.map +1 -1
  172. package/dist/settings-instance-patch.js +4 -1
  173. package/dist/settings-instance-patch.js.map +1 -1
  174. package/dist/setup-form.d.ts +1 -1
  175. package/dist/setup-form.js +55 -6
  176. package/dist/setup-form.js.map +1 -1
  177. package/dist/setup-host.d.ts +9 -0
  178. package/dist/setup-host.js +127 -6
  179. package/dist/setup-host.js.map +1 -1
  180. package/dist/setup-signin-assets.d.ts +2 -0
  181. package/dist/setup-signin-assets.js +6 -0
  182. package/dist/setup-signin-assets.js.map +1 -0
  183. package/dist/setup-wizard.js +2 -0
  184. package/dist/setup-wizard.js.map +1 -1
  185. package/dist/structured-signin-transport.d.ts +8 -0
  186. package/dist/structured-signin-transport.js +79 -0
  187. package/dist/structured-signin-transport.js.map +1 -0
  188. package/dist/structured-signin.d.ts +131 -0
  189. package/dist/structured-signin.js +388 -0
  190. package/dist/structured-signin.js.map +1 -0
  191. package/dist/tool-permissions.js +12 -0
  192. package/dist/tool-permissions.js.map +1 -1
  193. package/dist/topic-commands.js +6 -2
  194. package/dist/topic-commands.js.map +1 -1
  195. package/dist/transcript-sources.d.ts +26 -2
  196. package/dist/transcript-sources.js +103 -40
  197. package/dist/transcript-sources.js.map +1 -1
  198. package/dist/turn-reply-guard.d.ts +1 -1
  199. package/dist/turn-reply-guard.js +1 -1
  200. package/dist/turn-reply-guard.js.map +1 -1
  201. package/dist/types.d.ts +28 -8
  202. package/dist/ui/backend-signin.js +63 -10
  203. package/dist/ui/chat-strings.js +2 -2
  204. package/dist/ui/fleet-office-editor.js +14 -9
  205. package/dist/ui/fleet-office-layout.js +70 -32
  206. package/dist/ui/fleet-office-model.js +6 -3
  207. package/dist/ui/fleet-office-overview.js +167 -0
  208. package/dist/ui/fleet-office-pack.d.ts +7 -2
  209. package/dist/ui/fleet-office-pack.js +119 -15
  210. package/dist/ui/fleet-office-skin.js +98 -23
  211. package/dist/ui/fleet-office-store.js +39 -5
  212. package/dist/ui/fleet-office-view.js +5 -4
  213. package/dist/ui/fleet-office-zones.js +172 -12
  214. package/dist/ui/fleet-office.js +547 -186
  215. package/dist/ui/fleet-usage.js +19 -15
  216. package/dist/ui/office-share-dialog.js +145 -0
  217. package/dist/ui/office-share-page.js +164 -0
  218. package/dist/ui/panel-chat.js +8 -1
  219. package/dist/ui/panel-log.js +2 -2
  220. package/dist/ui/panel-needs.js +4 -4
  221. package/dist/ui/panel-settings.js +37 -11
  222. package/dist/ui/settings-dialogs.js +8 -1
  223. package/dist/ui/settings-guests.js +17 -7
  224. package/dist/ui/settings-model.js +14 -6
  225. package/dist/ui/settings-registry.js +4 -0
  226. package/dist/ui/settings-strings.js +16 -2
  227. package/dist/ui/shared/app-i18n.js +4 -2
  228. package/dist/ui/shared/app-shell.js +14 -6
  229. package/dist/ui/shared/app-stream.js +2 -1
  230. package/dist/ui/shared/app.css +67 -2
  231. package/dist/ui/shared/office/cozy.png +0 -0
  232. package/dist/ui/shared/side-panel.js +95 -0
  233. package/dist/ui/structured-signin.js +115 -0
  234. package/dist/usage-report.d.ts +20 -0
  235. package/dist/usage-report.js +54 -17
  236. package/dist/usage-report.js.map +1 -1
  237. package/dist/usage-rollup.d.ts +9 -1
  238. package/dist/usage-rollup.js +20 -4
  239. package/dist/usage-rollup.js.map +1 -1
  240. package/dist/web-api.d.ts +18 -0
  241. package/dist/web-api.js +201 -0
  242. package/dist/web-api.js.map +1 -1
  243. package/dist/web-auth.js +1 -1
  244. package/dist/web-auth.js.map +1 -1
  245. package/dist/web-backend-login.d.ts +1 -7
  246. package/dist/web-backend-login.js +2 -24
  247. package/dist/web-backend-login.js.map +1 -1
  248. package/dist/web-office-acts.d.ts +173 -0
  249. package/dist/web-office-acts.js +285 -0
  250. package/dist/web-office-acts.js.map +1 -0
  251. package/dist/web-office-skins.d.ts +3 -2
  252. package/dist/web-office-skins.js +3 -2
  253. package/dist/web-office-skins.js.map +1 -1
  254. package/dist/web-office-store.js +40 -7
  255. package/dist/web-office-store.js.map +1 -1
  256. package/dist/web-settings-patch.d.ts +2 -1
  257. package/dist/web-settings-patch.js +4 -1
  258. package/dist/web-settings-patch.js.map +1 -1
  259. package/dist/working-recovery.d.ts +2 -2
  260. package/dist/working-recovery.js +43 -8
  261. package/dist/working-recovery.js.map +1 -1
  262. package/dist/working-state-journal.d.ts +2 -0
  263. package/dist/working-state-journal.js +16 -1
  264. package/dist/working-state-journal.js.map +1 -1
  265. package/package.json +3 -2
  266. package/templates/windows-shortcuts.ps1 +155 -140
@@ -0,0 +1,160 @@
1
+ /**
2
+ * #2648: a kiro conversation saved with a model kiro has since retired. Resumed as is, kiro answers every start with
3
+ * "Model unavailable — use /model to switch", and an instance with no model of its own never gets past it.
4
+ *
5
+ * `--model` on a resume overrides the conversation's saved model in every engine and launch form (probed on 2.30.0:
6
+ * classic and TUI, interactive and not); the model given answers and becomes the saved one. So, for an instance with
7
+ * no model of its own (none on the instance and none inherited from the fleet):
8
+ * 1. at launch, the conversation it resumes is read (its own row or session file, read-only); a saved model that is
9
+ * not in kiro's cached model list launches with kiro's default model instead;
10
+ * 2. a model error after a resume that (1) could not foresee restarts it once on that default, per conversation;
11
+ * 3. the switch is announced once per conversation.
12
+ * An instance whose own model is the retired one is a configuration error: it is said once, never switched (4).
13
+ *
14
+ * The records live in the instance's directory (kiro-model.json); a missing or damaged file reads as empty.
15
+ */
16
+ import { readFileSync } from "node:fs";
17
+ import { readFile, stat } from "node:fs/promises";
18
+ import { join } from "node:path";
19
+ import Database from "better-sqlite3";
20
+ import { atomicWriteFileSync } from "../atomic-write.js";
21
+ import { CLI_ENV_TTL_MS } from "./types.js";
22
+ import { kiroDirectoryKeys } from "./kiro-identity.js";
23
+ /** kiro's own default model: what `--list-models` names `default_model` (2.30.0: "auto", which kiro routes itself). */
24
+ export const KIRO_FALLBACK_MODEL = "auto";
25
+ const RECORD_FILE = "kiro-model.json";
26
+ /** Bounds the records an instance keeps (one per conversation it has had switched or reported). */
27
+ const MAX_ENTRIES = 32;
28
+ /** A v2 session file larger than this is not read on the launch path (the model sits near its top, but JSON is whole). */
29
+ const MAX_SESSION_FILE_BYTES = 8 * 1024 * 1024;
30
+ function empty() {
31
+ return { switched: Object.create(null), restarted: [], notified: [] };
32
+ }
33
+ export function readKiroModelRecords(instanceDir) {
34
+ const out = empty();
35
+ let raw;
36
+ try {
37
+ raw = JSON.parse(readFileSync(join(instanceDir, RECORD_FILE), "utf-8"));
38
+ }
39
+ catch {
40
+ return out;
41
+ }
42
+ if (!raw || typeof raw !== "object")
43
+ return out;
44
+ const r = raw;
45
+ if (r.switched && typeof r.switched === "object") {
46
+ for (const [id, v] of Object.entries(r.switched)) {
47
+ const s = v;
48
+ if (!s || typeof s.to !== "string" || !s.to)
49
+ continue;
50
+ out.switched[id] = { from: typeof s.from === "string" ? s.from : null, to: s.to, announced: s.announced === true };
51
+ }
52
+ }
53
+ const strings = (v) => Array.isArray(v) ? v.filter((x) => typeof x === "string") : [];
54
+ out.restarted = strings(r.restarted);
55
+ out.notified = strings(r.notified);
56
+ return out;
57
+ }
58
+ export function writeKiroModelRecords(instanceDir, records) {
59
+ const switched = Object.entries(records.switched).slice(-MAX_ENTRIES);
60
+ atomicWriteFileSync(join(instanceDir, RECORD_FILE), JSON.stringify({
61
+ switched: Object.fromEntries(switched),
62
+ restarted: records.restarted.slice(-MAX_ENTRIES),
63
+ notified: records.notified.slice(-MAX_ENTRIES),
64
+ }) + "\n", { mode: 0o600 });
65
+ }
66
+ /**
67
+ * v1: the model a conversation was saved with, or null when it cannot be read (never an error: step 2 covers it). The
68
+ * owned row only — this directory's keys and this conversation id, through the (key, updated_at) index — in a
69
+ * read-only connection with a short busy timeout. Synchronous, on the launch path: one indexed row.
70
+ */
71
+ export function readKiroV1SavedModel(launch) {
72
+ let db = null;
73
+ try {
74
+ db = new Database(launch.dbPath, { readonly: true, fileMustExist: true, timeout: 200 });
75
+ const [a, b = a, c = b] = kiroDirectoryKeys(launch.workingDirectory);
76
+ const row = db.prepare("SELECT json_extract(value, '$.model_info.model_id') AS m FROM conversations_v2 INDEXED BY idx_conversations_v2_key_updated"
77
+ + " WHERE key IN (?, ?, ?) AND conversation_id = ? LIMIT 1").get(a, b, c, launch.id);
78
+ return typeof row?.m === "string" && row.m ? row.m : null;
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ finally {
84
+ try {
85
+ db?.close();
86
+ }
87
+ catch { /* closed */ }
88
+ }
89
+ }
90
+ /**
91
+ * v2: the model in a session file's `rts_model_state`, or null. Asynchronous — session files are never read on the
92
+ * fleet loop (#1417) — so it runs in the launch's preparation, for the conversation the instance has recorded.
93
+ */
94
+ export async function readKiroV2SavedModel(sessionsDir, id) {
95
+ if (!/^[A-Za-z0-9-]{8,64}$/.test(id))
96
+ return null;
97
+ const path = join(sessionsDir, `${id}.json`);
98
+ try {
99
+ if ((await stat(path)).size > MAX_SESSION_FILE_BYTES)
100
+ return null;
101
+ const session = JSON.parse(await readFile(path, "utf-8"));
102
+ const model = session?.session_state?.rts_model_state?.model_info?.model_id;
103
+ return typeof model === "string" && model ? model : null;
104
+ }
105
+ catch {
106
+ return null;
107
+ }
108
+ }
109
+ /** kiro's model list from AgEnD's cached probe (cli-env/kiro-cli.json); null when missing, damaged or stale. */
110
+ export function readKiroKnownModels(agendHome, now = Date.now()) {
111
+ try {
112
+ const env = JSON.parse(readFileSync(join(agendHome, "cli-env", "kiro-cli.json"), "utf-8"));
113
+ if (typeof env?.probedAt !== "number" || now - env.probedAt >= CLI_ENV_TTL_MS)
114
+ return null;
115
+ const models = new Set((env.models ?? []).map(m => m?.id).filter((id) => typeof id === "string" && !!id));
116
+ if (models.size === 0)
117
+ return null;
118
+ const defaultModel = typeof env.currentModel === "string" && models.has(env.currentModel) ? env.currentModel : KIRO_FALLBACK_MODEL;
119
+ return { models, defaultModel };
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ }
125
+ /**
126
+ * What a kiro model error should do. `ownModel` = the model this launch was given from the instance's (or fleet's)
127
+ * configuration; `launchModel` = the --model it ran with (its own, or a fallback from a switch); `conversation` = the
128
+ * resumed conversation, null for a fresh one. Records what it decides.
129
+ */
130
+ export function decideKiroModelError(instanceDir, launch, fallbackModel) {
131
+ const records = readKiroModelRecords(instanceDir);
132
+ const save = () => { try {
133
+ writeKiroModelRecords(instanceDir, records);
134
+ return true;
135
+ }
136
+ catch {
137
+ return false;
138
+ } };
139
+ if (!launch.ownModel && launch.conversation && !launch.launchModel && !records.restarted.includes(launch.conversation)) {
140
+ const before = records.switched[launch.conversation];
141
+ records.restarted.push(launch.conversation);
142
+ records.switched[launch.conversation] = { from: before?.from ?? null, to: fallbackModel, announced: false };
143
+ // The restart is the record's to authorize: one that cannot be committed would restart again on the same error,
144
+ // and the next launch would not know to switch. Then it is only said (#2649 review).
145
+ if (save())
146
+ return { kind: "restart", model: fallbackModel };
147
+ records.restarted.pop();
148
+ if (before)
149
+ records.switched[launch.conversation] = before;
150
+ else
151
+ delete records.switched[launch.conversation];
152
+ }
153
+ const key = `${launch.conversation ?? "-"}|${launch.launchModel ?? "-"}`;
154
+ if (records.notified.includes(key))
155
+ return { kind: "quiet" };
156
+ records.notified.push(key);
157
+ save();
158
+ return { kind: "notify", configured: launch.ownModel };
159
+ }
160
+ //# sourceMappingURL=kiro-retired-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-retired-model.js","sourceRoot":"","sources":["../../src/backend/kiro-retired-model.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import { type BackendAgentSwitch, type CliBackend, type CliBackendConfig, type ErrorPattern, type StartupDialog, type RuntimeDialog, type SteerComposerMode } from "./types.js";
1
+ import { type BackendAgentSwitch, type CliBackend, type CliBackendConfig, type ErrorPattern, type StartupDialog, type RuntimeDialog, type RemoteInputCard, type RemoteQuestionCard, type SteerComposerMode } from "./types.js";
2
+ import { type KiroModelErrorVerdict } from "./kiro-retired-model.js";
2
3
  import type { KiroLogLaunch } from "../kiro-log-gate.js";
4
+ import type { KiroTranscriptLaunch } from "../transcript-sources.js";
3
5
  export declare const KIRO_LEGACY_UI_MIN = "1.27.0";
4
6
  export declare const KIRO_EFFORT_FLAG_MIN = "2.6.0";
5
7
  /** Oldest kiro-cli AgEnD claims: older ones still launch, with a warning. */
@@ -14,7 +16,7 @@ export declare const KIRO_INSTANCE_AGENT_MIN = "2.21.0";
14
16
  * the binary's own --help instead of the version table, and the operator is
15
17
  * told the version is unverified.
16
18
  */
17
- export declare const KIRO_TESTED_MAX = "2.33.0";
19
+ export declare const KIRO_TESTED_MAX = "2.34.0";
18
20
  /**
19
21
  * kiro-cli versions, per TUI front-end, whose mid-turn steering AgEnD drives (#1405). Only kiro's TUI steers — typed
20
22
  * input while a turn runs is injected into it ("steer", the default) or held for its end ("queue", Ctrl+S toggles); the
@@ -22,6 +24,8 @@ export declare const KIRO_TESTED_MAX = "2.33.0";
22
24
  * queued message mid-tool — has been captured (tests/fixtures/kiro-steer-1405, 2026-10-08: 2.27.1 `--tui
23
25
  * --agent-engine=v2` and `--v3`, 2.28.0 `--tui --agent-engine=v2`; identical rows on all three). Any other version,
24
26
  * 2.28.0's v3, the legacy UI and an undetected version all deliver a steer as an ordinary message after the turn.
27
+ * 2.34.0 TUI was checked on the user-authorized #2598 D5 run (tests/fixtures/kiro-2.34.0-tui-d5):
28
+ * native steer during a read-only tool, a fleet message queued mid-tool, and a native queue entry in the busy turn.
25
29
  */
26
30
  export declare const KIRO_STEER_VERIFIED: Readonly<Record<string, ReadonlyArray<"tui" | "v3">>>;
27
31
  export declare function readKiroSteerComposer(pane: string): SteerComposerMode | null;
@@ -59,6 +63,41 @@ export declare function kiroTrustPromptState(pane: string): KiroLaunchPromptStat
59
63
  * mid-session "cancel" and notice variants, and any other shape, are active with an unknown cursor — held, never keyed.
60
64
  */
61
65
  export declare function kiroWorkspaceTrustState(pane: string): KiroLaunchPromptState;
66
+ /**
67
+ * #2587: kiro-cli 2.34.0's V3 engine answers an MCP server's `elicitation/create` (a tool asking the user for input)
68
+ * with a card in place of the composer: a divider, `Input requested · <server>`, a divider, the server's message and
69
+ * one row per form field then Submit / Decline (form mode) — or Host, URL and Open in browser / Copy URL / I'll open it
70
+ * myself / Decline / Cancel (url mode) — with exactly one `❯` cursor row, a divider, and the key hints as the last row
71
+ * (tests/fixtures/kiro-2.34.0-audit). Bottom-anchored: the card is live only while it is what the pane ends with. The
72
+ * answer can carry credentials or a sign-in, so it is the person's: never a key, and no delivery's Enter may land in it.
73
+ */
74
+ export declare function kiroMcpInputRequestActive(pane: string): boolean;
75
+ /**
76
+ * #2592: kiro's V3 engine shows the agent's question to the user (`question_request`) as a card in place of the
77
+ * composer: a divider, `Question` (or `<name> > Question`), the question, numbered options (a description row under
78
+ * one, `(recommended)` after one) and `Type a different answer…`, a divider, and the key hints as the last row — or, in
79
+ * an option's sub-options, `[✓] <title>` rows and `esc to go back · … · space to toggle · ↵ to submit`
80
+ * (tests/fixtures/kiro-question-2592; unchanged from 2.33.1 to 2.34.0). Any typed character turns the card into a free
81
+ * answer and Enter submits it, so a delivered message would become the answer to a question nobody read. The person
82
+ * answers it in the pane (the user's decision on #2592); it is never keyed. Bottom-anchored like
83
+ * kiroMcpInputRequestActive: the header is the row right under the nearest divider above the key hints' divider.
84
+ */
85
+ export declare function kiroQuestionCardActive(pane: string): boolean;
86
+ /**
87
+ * #2675: the live Question card (see kiroQuestionCardActive), read for a person to answer from the chat: the question,
88
+ * the numbered options (`(recommended)` and the description row under one), the typed-answer row, and where the `❯`
89
+ * is (tui.js `A0`; tests/fixtures/kiro-question-2592). On a sub-options page the rows are the `[✓]` boxes; while an
90
+ * answer is being typed the last row is `❯ <text>`. A row the shapes above do not account for is a wrapped title (the
91
+ * card's own indent) or description (deeper), joined to the row it continues; one before any option belongs to the
92
+ * question. Null when the card is not live, or when it is in a shape this reader does not know.
93
+ */
94
+ export declare function readKiroQuestionCard(pane: string): RemoteQuestionCard | null;
95
+ /**
96
+ * #2675: the live MCP `Input requested` card (see kiroMcpInputRequestActive), read for the chat: the server, the body
97
+ * as painted, with the `URL:` row masked (a sign-in link stays in the pane), its action rows, and the `❯` row. Its
98
+ * identity is the server, the mode, the message's first row and the actions: moving or filling in a field keeps it.
99
+ */
100
+ export declare function readKiroMcpInputCard(pane: string): RemoteInputCard | null;
62
101
  /**
63
102
  * Kiro's service-unavailable path opens the same picker as `/model`, but only
64
103
  * the former needs incident escalation. The runtime scanner and delivery gate
@@ -116,6 +155,15 @@ export declare const KIRO_CLASSIC_NUDGE_V3: KiroLaunchPromptSpec;
116
155
  * flag; the quoted names in its description are the fallback.
117
156
  */
118
157
  export declare function parseKiroAgentEngines(help: string): string[] | null;
158
+ /**
159
+ * #2598 (D1): kiro-cli-chat skips its self-update when this is set (2.30.0 and 2.34.0 both read it). AgEnD pins the
160
+ * kiro version it has audited; an in-place update can swap the engine a running fleet depends on (3.0 drops legacy).
161
+ * Every chat AgEnD starts carries it: the instance launch (a shell prefix) and the probes (their child env). The
162
+ * host-wide `app.disableAutoupdates` setting is the operator's half; this holds even where that was never set.
163
+ */
164
+ export declare const KIRO_NO_AUTO_UPDATE = "KIRO_NO_AUTO_UPDATE";
165
+ /** A kiro child's environment: the given one (default: ours) with self-update off. */
166
+ export declare function kiroChildEnv(base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
119
167
  /**
120
168
  * Probe once per binary generation. A version AgEnD has run (<= TESTED_MAX)
121
169
  * is answered from the table without a second CLI call; anything newer, or a
@@ -211,6 +259,8 @@ export declare class KiroBackend implements CliBackend {
211
259
  private activeTrustAll;
212
260
  /** Version-gate notice for the launch just built (consumeLaunchWarning). */
213
261
  private launchWarning;
262
+ /** #2648: what this launch's model came from, for a model error to be judged by (decideKiroModelError). */
263
+ private launchModels;
214
264
  /**
215
265
  * What this launch attempt resumes and as which agent (#906), resolved once per attempt in writeConfig — it claims
216
266
  * conversations and records fresh starts — and read by the buildCommand that follows it.
@@ -221,6 +271,8 @@ export declare class KiroBackend implements CliBackend {
221
271
  /** #1218: the last launch built in full (cleared when a build starts, set only when it returns). */
222
272
  private builtLaunch;
223
273
  private preparedV2Store;
274
+ /** #2648: the saved model of the v2 conversation this instance has recorded, read in prepareLaunch (off the loop). */
275
+ private preparedV2Model;
224
276
  private storePreparation;
225
277
  private storeKey;
226
278
  private readPreparedV2Store;
@@ -273,6 +325,18 @@ export declare class KiroBackend implements CliBackend {
273
325
  private agentSpec;
274
326
  /** A shared file AgEnD could not bring to the state isolation needs: said, never reported as isolated. */
275
327
  private noteShared;
328
+ /**
329
+ * #2648 steps 1 and 3: the model a resumed conversation is launched on instead of its saved one, or null to launch as
330
+ * before. Only for an instance with no model of its own. The conversation's current saved model decides, every
331
+ * launch: one kiro's cached list no longer has is switched to kiro's default; one it has — or, without a list, one
332
+ * other than the model that failed (a later /model choice, or the default kiro saved after a switch) — is launched
333
+ * as saved, even after an earlier switch (#2649 review). Only when the saved model cannot be read does a recorded
334
+ * switch (step 2's restart) still apply. Announced once per conversation; the record also keeps that dedupe.
335
+ */
336
+ private retiredModelFallback;
337
+ private saveModelRecords;
338
+ /** #2648 steps 2 and 4: what a model error on this launch should do (records it); null before any launch. */
339
+ onModelError(): KiroModelErrorVerdict | null;
276
340
  private addLaunchWarning;
277
341
  /**
278
342
  * The launch plan of one attempt (#906, design §2/§5): the engine the plan pins, and — when this kiro-cli has
@@ -319,6 +383,11 @@ export declare class KiroBackend implements CliBackend {
319
383
  getRuntimeDialogs(): RuntimeDialog[];
320
384
  getContextUsage(): number | null;
321
385
  logLaunch(): KiroLogLaunch | null;
386
+ /**
387
+ * #2598 B1: the store is the launch's engine's (v1 = the classic sqlite store, v2 = the TUI's session files), and the
388
+ * conversation is the one the launch resumed by id. A fresh or legacy-mode launch owns no id yet.
389
+ */
390
+ transcriptLaunch(): KiroTranscriptLaunch | null;
322
391
  getSessionId(): string | null;
323
392
  getQuitCommand(): string;
324
393
  getCompactCommand(): string;