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

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 (92) hide show
  1. package/README.md +2 -0
  2. package/README.zh-TW.md +2 -0
  3. package/dist/backend/claude-code.js +23 -1
  4. package/dist/backend/claude-code.js.map +1 -1
  5. package/dist/backend/kiro.d.ts +2 -0
  6. package/dist/backend/kiro.js +7 -0
  7. package/dist/backend/kiro.js.map +1 -1
  8. package/dist/cache-service.d.ts +13 -1
  9. package/dist/cache-service.js +45 -2
  10. package/dist/cache-service.js.map +1 -1
  11. package/dist/channel/mcp-tools.js +4 -4
  12. package/dist/channel/mcp-tools.js.map +1 -1
  13. package/dist/config-validator.js +4 -1
  14. package/dist/config-validator.js.map +1 -1
  15. package/dist/fleet-manager.d.ts +14 -0
  16. package/dist/fleet-manager.js +36 -5
  17. package/dist/fleet-manager.js.map +1 -1
  18. package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -3
  19. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
  20. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +24 -0
  21. package/dist/general-knowledge/skills/session-management/SKILL.md +1 -1
  22. package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -1
  23. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +3 -1
  24. package/dist/general-knowledge/skills/web-appearance/SKILL.md +3 -1
  25. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +27 -13
  26. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +27 -13
  27. package/dist/instance-config-impact.js +1 -0
  28. package/dist/instance-config-impact.js.map +1 -1
  29. package/dist/kiro-reconcile.js +11 -3
  30. package/dist/kiro-reconcile.js.map +1 -1
  31. package/dist/locale.js +4 -0
  32. package/dist/locale.js.map +1 -1
  33. package/dist/office-levels.d.ts +64 -0
  34. package/dist/office-levels.js +66 -0
  35. package/dist/office-levels.js.map +1 -0
  36. package/dist/office-share-page.js +1 -1
  37. package/dist/office-share-page.js.map +1 -1
  38. package/dist/office-share.d.ts +18 -2
  39. package/dist/office-share.js +22 -4
  40. package/dist/office-share.js.map +1 -1
  41. package/dist/public-web-gateway.js +1 -1
  42. package/dist/public-web-gateway.js.map +1 -1
  43. package/dist/scheduler/task-board.d.ts +28 -6
  44. package/dist/scheduler/task-board.js +66 -11
  45. package/dist/scheduler/task-board.js.map +1 -1
  46. package/dist/settings-api.js +4 -0
  47. package/dist/settings-api.js.map +1 -1
  48. package/dist/settings-change.js +2 -0
  49. package/dist/settings-change.js.map +1 -1
  50. package/dist/settings-effect.js +2 -0
  51. package/dist/settings-effect.js.map +1 -1
  52. package/dist/task-board-waker.js +7 -2
  53. package/dist/task-board-waker.js.map +1 -1
  54. package/dist/types.d.ts +5 -0
  55. package/dist/ui/fleet-office-card.js +114 -0
  56. package/dist/ui/fleet-office-editor.js +27 -7
  57. package/dist/ui/fleet-office-levels.js +105 -0
  58. package/dist/ui/fleet-office-model.js +9 -1
  59. package/dist/ui/fleet-office-pack.d.ts +2 -0
  60. package/dist/ui/fleet-office-pack.js +48 -2
  61. package/dist/ui/fleet-office-skin.js +39 -3
  62. package/dist/ui/fleet-office-store.js +13 -0
  63. package/dist/ui/fleet-office.js +172 -26
  64. package/dist/ui/fleet-org.js +2 -0
  65. package/dist/ui/fleet-task-card.js +2 -2
  66. package/dist/ui/fleet-task-common.js +30 -7
  67. package/dist/ui/fleet-task-work.js +2 -2
  68. package/dist/ui/fleet-tasks.js +10 -11
  69. package/dist/ui/office-share-page.js +1 -0
  70. package/dist/ui/panel-settings.js +7 -1
  71. package/dist/ui/settings-registry.js +1 -0
  72. package/dist/ui/settings-strings.js +2 -0
  73. package/dist/ui/shared/app.css +44 -0
  74. package/dist/usage-rollup.d.ts +34 -3
  75. package/dist/usage-rollup.js +56 -3
  76. package/dist/usage-rollup.js.map +1 -1
  77. package/dist/web-api.d.ts +5 -0
  78. package/dist/web-api.js +42 -10
  79. package/dist/web-api.js.map +1 -1
  80. package/dist/web-auth.js +1 -1
  81. package/dist/web-auth.js.map +1 -1
  82. package/dist/web-office-acts.d.ts +5 -2
  83. package/dist/web-office-acts.js +7 -2
  84. package/dist/web-office-acts.js.map +1 -1
  85. package/dist/web-office-store.d.ts +6 -1
  86. package/dist/web-office-store.js +5 -0
  87. package/dist/web-office-store.js.map +1 -1
  88. package/dist/web-settings-patch.d.ts +3 -1
  89. package/dist/web-settings-patch.js +4 -1
  90. package/dist/web-settings-patch.js.map +1 -1
  91. package/dist/workflow-templates/default.md +1 -1
  92. package/package.json +1 -1
@@ -38,11 +38,13 @@ For `backend: kiro-cli` instances, `kiro_ui` selects the CLI's UI/agent profile:
38
38
  instances:
39
39
  my-kiro:
40
40
  backend: kiro-cli
41
- kiro_ui: legacy # default — current stable behavior
42
- # kiro_ui: tui # try the newer TUI
41
+ kiro_ui: tui # what every new kiro instance is written with (#2598)
42
+ # kiro_ui: legacy # the classic engine; also what an entry with no kiro_ui runs
43
43
  ```
44
44
  `kiro_ui: v3` is refused by validation — do not set it.
45
- Leave unset (or `legacy`) unless testing a newer profile. Ignored by other backends.
45
+ kiro-cli 3.0 drops the classic engine. Never change `kiro_ui` by hand to move an instance: that starts it on an
46
+ empty conversation. An existing classic instance moves with its conversation through `migrate_kiro_instance`
47
+ (the kiro-engine-migration skill). Ignored by other backends.
46
48
 
47
49
  ## Reply completion guard
48
50
 
@@ -35,7 +35,7 @@ agend update --yes # from a fleet session: the installed channel's la
35
35
  agend update --version 2.2.0 --yes # a specific version
36
36
  ```
37
37
 
38
- It installs the selected release, checks the install, and restarts the fleet service. `--alpha` / `--beta` / `--stable` pick a channel; details in docs/cli.md.
38
+ It installs the selected release, checks the install, and restarts the fleet service. `--alpha` / `--beta` / `--stable` pick a channel; details in docs/cli.md. A beta install stays on the beta channel: to move it to the stable release (for example from a 2.3.2 beta to 2.3.2), use `agend update --stable --yes`, and only when the user asked for it.
39
39
 
40
40
  **Manual restart (if update isn't needed):**
41
41
  ```bash
@@ -43,6 +43,7 @@ The user has already been shown the plain notice in this topic. When they ask, e
43
43
  - **Go back to a kiro-cli version that ran them.** `history` shows which versions launches were prepared
44
44
  with; the user knows which of those worked. Installing such a version again is the likely way back, but
45
45
  do not promise it. The user, or whoever administers the host, does this; you do not.
46
+ - **Move it to the TUI engine** with its conversation (below), if the user wants that.
46
47
  - **Wait for AgEnD's migration to V3.** It will convert each conversation once, verify it, and switch the
47
48
  instance, one instance at a time and only with the user's confirmation. It is not available yet: say so
48
49
  plainly, and never promise a date.
@@ -73,11 +74,34 @@ or classic as a recovery shortcut. Archives are private and restorable with `age
73
74
  The raw Log-history gate remains closed: the verification proves the launched/pinned reader, not ongoing pane
74
75
  session identity after `/chat` or `/clear`.
75
76
 
77
+ - **After a `/compact`** classic kiro continues under a new conversation id. The move follows the same proven
78
+ compaction chain a classic restart follows and carries the newest conversation. When the chain can't be proven
79
+ (the store can't be read, two conversations continue the old one, or one belongs to another instance), the move
80
+ is refused and nothing changes: tell the user why, don't retry with `start_fresh`.
76
81
  - After the move, `kiro_engine_status` shows `kiro_ui: tui` and `engine_floor: "tui"`.
77
82
  - It is one-way. AgEnD refuses to launch a moved instance on classic again, because that would resume the frozen
78
83
  classic copy and lose everything done since. A refusal that names the engine floor means someone set `kiro_ui`
79
84
  back. The fix is to set it to `tui` again, never to remove the floor.
80
85
 
86
+ ## Other kiro behaviour users ask about
87
+
88
+ - **kiro never updates itself under AgEnD.** Every kiro process AgEnD starts carries `KIRO_NO_AUTO_UPDATE=1`, so a
89
+ self-update to kiro-cli 3.0 can't break classic instances. `app.disableAutoupdates: true` in
90
+ `~/.kiro/settings/cli.json` also stops kiro-cli's own updates; that file is the user's to change, not yours.
91
+ - **Classic restarts follow a `/compact` (#2714, #2738)** to the conversation kiro kept writing, only on proof it is
92
+ this instance's. When it can't be proven, or the check passes its 30 s / 2 GiB limit, the instance resumes the
93
+ conversation on record and the Log tab says why.
94
+ - **Two conversations after an interrupted carry (#2753).** When a stopped TUI instance has its original carried
95
+ conversation and a newer one with work, recovery holds instead of choosing. `reconcile_kiro_instance` (full and
96
+ coordinator tool sets) asks a fleet admin to confirm, in General, keeping the original and archiving the named
97
+ newer one intact. Offer it only after the user chose those exact ids; docs/kiro-reconciliation.md explains it.
98
+ - **"Kiro's terminal is in use by another program" (#2682).** While a kiro pane runs `/editor`, `/transcript`, a
99
+ `!` command or a focused `/kvim` panel (legacy: `/editor`, `/reply`, `!`), AgEnD holds deliveries. Tell the user
100
+ to finish or close that program in the instance's pane; held messages go in once kiro's input row is back.
101
+ - **A retired model (#2648).** An instance with no model of its own whose saved conversation uses a model kiro no
102
+ longer offers resumes on kiro's default model and says so once. One configured to use that model is told once to
103
+ pick another; it is never switched.
104
+
81
105
  ## One kiro agent per instance (#906)
82
106
 
83
107
  Since kiro-cli 2.21, each AgEnD kiro instance (tui / v2 engine) runs as its own kiro agent, holding only its own
@@ -151,7 +151,7 @@ for ts, sid in sorted(out, reverse=True):
151
151
  ```
152
152
  It opens many files, but only one line each, so it stays cheap.
153
153
 
154
- **Restore:** `codex exec resume <session-id> "<prompt>"` non-interactively, or `codex resume <session-id>` for the TUI (bare `codex resume` opens a picker). AgEnD launches `codex resume <id>` with the thread recorded for this exact directory; `codex resume --last` is only its fallback (an unreadable session DB, no other codex instance in the repository). The ID argument also accepts a session *name*.
154
+ **Restore:** `codex exec resume <session-id> "<prompt>"` non-interactively, or `codex resume <session-id>` for the TUI (bare `codex resume` opens a picker). AgEnD launches `codex resume <id>` with the thread recorded for this exact directory; `codex resume --last` is only its fallback (an unreadable session DB, no other codex instance in the repository). On a machine where Codex never ran, a missing session DB means a new conversation, with no warning (#2743). The ID argument also accepts a session *name*.
155
155
 
156
156
  **Summary:** ❌ none available without parsing. `session_meta` carries only id/cwd/timestamp; to describe a session you must read further `event_msg` lines. Tell the user the timestamp and let them pick, rather than guessing at a topic.
157
157
 
@@ -18,7 +18,7 @@ instances:
18
18
  ```
19
19
 
20
20
  **kiro_ui 模式差異:**
21
- - `kiro_ui: tui`:Kiro v2 TUI(需明確設定;預設是 `legacy`);本 skill 適用。
21
+ - `kiro_ui: tui`:Kiro v2 TUI(新建立的 kiro instance 都會寫入這個值;沒設定 `kiro_ui` 的既有項目仍是 `legacy`);本 skill 適用。
22
22
  - `kiro_ui: v3`:目前會被設定驗證拒絕,不要設定。
23
23
  - `kiro_ui: legacy`:舊 UI,互動行為不同,本 skill 不適用。
24
24
 
@@ -306,7 +306,9 @@ tools are not in your list), you can publish them yourself instead of asking a p
306
306
  any failure the old one stays) and its previous version is kept. If a stored office's layout overrides would no
307
307
  longer fit (a seat count changed, a seat left its area, an item is gone), check and upload refuse with the office
308
308
  and the rule: fix the pack, or send `drop_invalid_overrides: true` to drop exactly those entries (the result names
309
- them). With `"approve"` the answer is `{ pending }`: it waits for an admin's yes — say so; do not upload it again.
309
+ them). With `"approve"` the answer is `{ pending }`: it waits for an admin's yes — say so; do not upload it again. A pending change that drops layout entries is applied
310
+ only if it still drops exactly the entries its notice named: if an office was edited meanwhile, the approval is
311
+ refused and you send the change again (#2695).
310
312
  - `office_pack_restore { id }` brings back the previous version (the replaced one becomes the previous);
311
313
  `office_pack_delete { id, keep_previous? }`; `office_set_style { office, pack }` points a stored office at a pack or a
312
314
  built-in style (pixel, studio, cozy).
@@ -314,7 +314,9 @@ tools are not in your list), you can publish them yourself instead of asking a p
314
314
  any failure the old one stays) and its previous version is kept. If a stored office's layout overrides would no
315
315
  longer fit (a seat count changed, a seat left its area, an item is gone), check and upload refuse with the office
316
316
  and the rule: fix the pack, or send `drop_invalid_overrides: true` to drop exactly those entries (the result names
317
- them). With `"approve"` the answer is `{ pending }`: it waits for an admin's yes — say so; do not upload it again.
317
+ them). With `"approve"` the answer is `{ pending }`: it waits for an admin's yes — say so; do not upload it again. A pending change that drops layout entries is applied
318
+ only if it still drops exactly the entries its notice named: if an office was edited meanwhile, the approval is
319
+ refused and you send the change again (#2695).
318
320
  - `office_pack_restore { id }` brings back the previous version (the replaced one becomes the previous);
319
321
  `office_pack_delete { id, keep_previous? }`; `office_set_style { office, pack }` points a stored office at a pack or a
320
322
  built-in style (pixel, studio, cozy).
@@ -83,7 +83,7 @@ who is not a fleet admin gets a code privately, by sending `/web` or from an adm
83
83
  as their own Discord or Telegram account. What a guest sees:
84
84
  - **With explicit grants** (`web.guests.grants`, set in Settings → Access & security → Guests): exactly the agents an
85
85
  admin granted that person, nothing else (default deny once the key exists). The admin picks the person from people
86
- AgEnD has seen writing to an agent, ticks their agents, saves (giving access or more agents waits for a fleet admin in
86
+ AgEnD has seen writing to an agent, ticks their agents (or ClassicBot rooms, #2667), saves (giving access or more agents waits for a fleet admin in
87
87
  General; taking away applies at once and ends their sessions), then presses **Send sign-in code**, a DM, never a post.
88
88
  Each code sent and each change to someone's access is in the event log (`guest_code_sent`, `guest_grant_changed`),
89
89
  shown to admins under **Recent changes** in that section (no agent's Log tab shows them).
@@ -229,8 +229,9 @@ values reloaded after Save. Password fields keep the browser's behaviour.
229
229
  The sidebar's **Fleet** (zh "Fleet 概覽", at the top) and the phone's Fleet tab open the Fleet tab this device used last
230
230
  (`agend_last_fleet_tab`; the Org chart the first time). The sidebar has no separate Fleet (Details) or View row.
231
231
  - **Tasks** — the task board: Home lists **projects** (with % done) and what waits for the person (**Confirm** /
232
- **Send back** finished work, **Answer** a blocked card); **No project** holds `task`-tool tasks. A project is a board
233
- of main tasks (M-n) by status — To do, In progress, Blocked, Waiting for you, Done — with drag to move, an assignee
232
+ **Send back** finished work, **Answer** a blocked card — #2756: only the cards the person handed out, as Needs you;
233
+ an agent's card in review says "Waiting for <agent>"); **No project** holds `task`-tool tasks. A project is a board
234
+ of main tasks (M-n) by status — To do, In progress, Blocked, To confirm, Done — with drag to move, an assignee
234
235
  filter and each main task's sub tasks (S-n). A card opens in a dialog: every field editable, its sub tasks, comments,
235
236
  progress log, history. **Search cards** in the header. Only a signed-in person confirms the work they handed out
236
237
  (an instance's `done` on such a card is review); a card an agent handed out, that agent confirms (#2434). No
@@ -262,11 +263,15 @@ per instance with a name tag, General and "Not in a team" in the **Lobby**. Each
262
263
  with the lamp on (working), tea break (idle), asleep behind a **Closed** sign (paused/stopped), a hand up under a
263
264
  blinking light (needs you, crashed, looks stuck). With **Live** on, each message, delegation and report is carried
264
265
  desk to desk along the corridors in the Key's colours; a delegation in progress is a purple folder on the worker's
265
- desk. Hover (or tap once) a desk for its name, state and backend; click (or tap again) opens the chat. **Find** dims
266
+ desk. Hover a desk for its name, state and backend; a click or tap (or Enter in the desk list) opens the
267
+ person's profile card (#2661: a 320 px popover beside them, following them; Esc, a press elsewhere or the same person
268
+ again closes it; on a phone a bottom sheet): level and XP, office and area, model, backend, today, first seen, the
269
+ activity line, **Find in office** and **Chat**. A double-click opens the chat directly. Each name tag has a level badge
270
+ (lifetime work, docs/office.md § Levels; **Settings → Web dashboard → Office levels**, `web.office_levels`). **Find** dims
266
271
  the rest. **Show** picks a team or the Lobby and **People** pins chosen instances (both kept per browser); the
267
272
  **Office** switcher lists offices kept on the host (`web-offices.json`, `GET`/`PUT /ui/offices`). An admin session
268
273
  (never a read-only one, a guest or the public link) gets **Edit offices**: add, rename and delete offices, pick who is
269
- in each (whole teams or single instances; none = everyone) and its style, and upload or delete **skin packs** (an
274
+ in each (Everyone, Picked: whole teams or single instances, or #2752 Nobody: its style's NPCs only; none picked = everyone) and its style, and upload or delete **skin packs** (an
270
275
  artist's pictures: `manifest.json` plus PNGs, format v1, kept in `web-office-skins/` in the AgEnD home; the host
271
276
  checks every rule — PNG only, each strip exactly frames·w × h, a 16:9 background, size caps — and never changes a
272
277
  pack; a strip may give its displayed size, `dw`/`dh`, apart from its pictures' size, and a character may walk four
@@ -303,7 +308,7 @@ tiles; a tile's label, or a double-click on it, opens that office; traffic betwe
303
308
  Edit offices and Edit layout wait for a single office.
304
309
  **Share…** (#2636; an admin session, on the dashboard reached directly or over the public link — never read-only or a guest; the URL shows only to its maker, in the dialog) makes an Office share
305
310
  link: anyone who opens it watches **Whole fleet** (#2716, in the fleet's style), one office or **All offices** live, in the link's **Look** (#2715: Light, Dark or the viewer's device; default what the maker's dashboard shows now), read-only, with no sign-in — names, identity
306
- colours and states, every 5 s; no chat, no clicks into anything, no settings; agents' `office_set` lines only when
311
+ colours and states, every 5 s; no chat, no settings (a click shows a card with name, title, state, office and level only); agents' `office_set` lines only when
307
312
  **Include agents' own status lines** is ticked; hidden instances never. 1 h by default, 15 min to 24 h
308
313
  (`web.office_share.max_hours`); at most 10 open. Its own quick tunnel (`https://<random>.trycloudflare.com/o/<token>`)
309
314
  starts with the first link and stops with the last; the token is shown once. There is no chat command: the button only. Open links and **Revoke** are in **Settings → Access
@@ -311,8 +316,8 @@ starts with the first link and stops with the last; the token is shown once. The
311
316
  says to try again in a few minutes (no retry). `web.office_share.enabled: false` turns it off and ends open links.
312
317
 
313
318
  The Office fills the Fleet panel and moves like the Canvas (#2540): drag to pan, the wheel or a pinch to zoom,
314
- **+** / **−** / **Fit** / **Fill** at the top right (the zoom shown as a percentage above them) or the `+ - 0` keys
315
- (with the office focused), an overview at the bottom right to jump (not on a phone; hidden while a single office
319
+ **+** / **−** / **Fit** / **Fill** at the top right (the zoom shown as a percentage above them; on a phone, outside
320
+ fullscreen, a row along the top of the scene) or the `+ - 0` keys (with the office focused), an overview at the bottom right to jump (not on a phone; hidden while a single office
316
321
  is all in view, #2737). It takes the whole panel: the
317
322
  Fleet area's full width, down to the window's foot. **Fit** shows the whole scene as large as the panel allows
318
323
  (any scale, so it fills the panel's width or height); **Fill** (a toggle, kept per office) fills the panel instead,
@@ -379,7 +384,8 @@ to that instance's Log).
379
384
  colours only; status colours (Needs you count, state dots, errors, focus ring) never change. The header follows the
380
385
  page, not the chat. Off with agents' themes off or `?safe=1`.
381
386
 
382
- Phone layout: bottom tabs Chat, Needs you, Fleet, Settings. Chat is current on any of an agent's pages and goes to its
387
+ Phone layout: bottom tabs Chat, Needs you, Fleet, Settings. Settings opens on its list of sections (search on top);
388
+ each section opens on its own page with "‹ Settings", and dialogs and the setup wizard are full-screen sheets. Chat is current on any of an agent's pages and goes to its
383
389
  chat; View, Log and Details are the switch under the header.
384
390
 
385
391
  ## Usage and the cache report
@@ -496,7 +502,10 @@ signed in? kiro logs out first; **Use a temporary public link** where allowed),
496
502
  sign-in terminal** + its one-time access code (this browser only, no DM). While it runs every admin page shows
497
503
  "Signing in to X (started on <device>)" with **Open**; another browser sees no code and may **Cancel sign-in**. Ends
498
504
  when the browser session ends. A missing CLI is not installed here (the dialog says the install command). agy and
499
- opencode: no dashboard sign-in. Config: `web_terminal.*` (as `/login`).
505
+ opencode: no dashboard sign-in. Config: `web_terminal.*` (as `/login`). Default Kiro, Claude Code and Codex
506
+ accounts sign in with named browser controls instead (#2599): Kiro's account method, Start URL and region and Claude's
507
+ code are entered in the browser, Codex shows its link and device code; credential profiles keep the dialog above. A
508
+ backend skipped at first setup shows in Needs you even before an agent uses it.
500
509
 
501
510
  **Agents** — **New agent**; per agent **Settings**, **Pause / Wake**, **Start / Stop** (direct), ⋯ **Delete agent**
502
511
  (staged; on Apply it waits for a fleet admin's confirmation in General, then the agent is stopped and removed, as
@@ -533,10 +542,12 @@ Advanced **Context lines** (these restart the room's agent); Tool progress and R
533
542
 
534
543
  **Agent defaults** — **Project folders** (`project_roots`: where New agent may put an agent; empty = anywhere;
535
544
  changing it waits for a fleet admin's OK) and the fleet defaults (`defaults.*`): **Language (bot replies)** (`locale`: Auto / en / zh-TW), default
536
- backend and model, auto-pause, tool progress, bot-to-bot visibility, reply guard; Advanced: tool set, agent mode, log
545
+ backend and model, auto-pause, tool progress, bot-to-bot visibility, reply guard, **Native replies trigger ClassicBot**
546
+ (`reply_triggers`: a native reply triggers a ClassicBot bot; off by default, #2576); Advanced: tool set, agent mode, log
537
547
  level, **Hang detector enabled** / **Stuck timeout** (`hang_detector.*`), **Startup concurrency** (1–20) and
538
548
  **Stagger delay** (`startup.*`, restart AgEnD). ClassicBot defaults (in Chat & connections; `classicBot.yaml defaults.*`): default backend, tool
539
- progress, reply guard, **ClassicBot admins**, **Allowed guilds**.
549
+ progress, reply guard, **Native replies trigger ClassicBot** (`reply_triggers`, also per room), **ClassicBot admins**,
550
+ **Allowed guilds**.
540
551
 
541
552
  **Access & security** (sessions, browser terminal, public link and fixed address, guests, web authority; web echo is in Chat & connections, the Log tab and usage over the link in **Web dashboard**) — all apply at once; loosening waits for an admin; disabled over a public link.
542
553
  | Label | Key |
@@ -563,7 +574,10 @@ connections are off (and the setup wizard); while those have unsaved changes, th
563
574
 
564
575
  **Setup wizard** — agent (backend, directory, name) → platform → token and server/group, your user ID → preview →
565
576
  **Create and start**. The directory may be left empty: the agent gets its own folder, `~/.agend/workspaces/<name>`
566
- (shown under the field); one that is entered must be absolute.
577
+ (shown under the field); one that is entered must be absolute. On a Telegram or Discord connection the first agent
578
+ is named `general` by default and becomes the fleet's General, in the chat's General topic or channel, when its
579
+ directory is left empty; with a directory it is the worker `agent-1` and the fleet adds its General in its own folder.
580
+ Once a fleet has a connection or a General, a new agent can't be called `general`.
567
581
 
568
582
  **First setup, before any fleet** (`agend setup`, the page the Windows installer opens): the same steps on its own
569
583
  page, in English or 繁體中文 (the browser's language; the button at the top switches). The working directory may be
@@ -91,7 +91,7 @@ who is not a fleet admin gets a code privately, by sending `/web` or from an adm
91
91
  as their own Discord or Telegram account. What a guest sees:
92
92
  - **With explicit grants** (`web.guests.grants`, set in Settings → Access & security → Guests): exactly the agents an
93
93
  admin granted that person, nothing else (default deny once the key exists). The admin picks the person from people
94
- AgEnD has seen writing to an agent, ticks their agents, saves (giving access or more agents waits for a fleet admin in
94
+ AgEnD has seen writing to an agent, ticks their agents (or ClassicBot rooms, #2667), saves (giving access or more agents waits for a fleet admin in
95
95
  General; taking away applies at once and ends their sessions), then presses **Send sign-in code**, a DM, never a post.
96
96
  Each code sent and each change to someone's access is in the event log (`guest_code_sent`, `guest_grant_changed`),
97
97
  shown to admins under **Recent changes** in that section (no agent's Log tab shows them).
@@ -238,8 +238,9 @@ values reloaded after Save. Password fields keep the browser's behaviour.
238
238
  The sidebar's **Fleet** (zh "Fleet 概覽", at the top) and the phone's Fleet tab open the Fleet tab this device used last
239
239
  (`agend_last_fleet_tab`; the Org chart the first time). The sidebar has no separate Fleet (Details) or View row.
240
240
  - **Tasks** — the task board: Home lists **projects** (with % done) and what waits for the person (**Confirm** /
241
- **Send back** finished work, **Answer** a blocked card); **No project** holds `task`-tool tasks. A project is a board
242
- of main tasks (M-n) by status — To do, In progress, Blocked, Waiting for you, Done — with drag to move, an assignee
241
+ **Send back** finished work, **Answer** a blocked card — #2756: only the cards the person handed out, as Needs you;
242
+ an agent's card in review says "Waiting for <agent>"); **No project** holds `task`-tool tasks. A project is a board
243
+ of main tasks (M-n) by status — To do, In progress, Blocked, To confirm, Done — with drag to move, an assignee
243
244
  filter and each main task's sub tasks (S-n). A card opens in a dialog: every field editable, its sub tasks, comments,
244
245
  progress log, history. **Search cards** in the header. Only a signed-in person confirms the work they handed out
245
246
  (an instance's `done` on such a card is review); a card an agent handed out, that agent confirms (#2434). No
@@ -273,12 +274,16 @@ per instance with a name tag, General and "Not in a team" in the **Lobby**. Each
273
274
  with the lamp on (working), tea break (idle), asleep behind a **Closed** sign (paused/stopped), a hand up under a
274
275
  blinking light (needs you, crashed, looks stuck). With **Live** on, each message, delegation and report is carried
275
276
  desk to desk along the corridors in the Key's colours; a delegation in progress is a purple folder on the worker's
276
- desk. Hover (or tap once) a desk for its name, state and backend; click (or tap again) opens the chat. **Find** dims
277
+ desk. Hover a desk for its name, state and backend; a click or tap (or Enter in the desk list) opens the
278
+ person's profile card (#2661: a 320 px popover beside them, following them; Esc, a press elsewhere or the same person
279
+ again closes it; on a phone a bottom sheet): level and XP, office and area, model, backend, today, first seen, the
280
+ activity line, **Find in office** and **Chat**. A double-click opens the chat directly. Each name tag has a level badge
281
+ (lifetime work, docs/office.md § Levels; **Settings → Web dashboard → Office levels**, `web.office_levels`). **Find** dims
277
282
  the rest. **Show** picks a team or the Lobby and **People** pins chosen instances (both kept per browser); the
278
283
  **Office** switcher lists offices kept on the host (`web-offices.json`, `GET`/`PUT /ui/offices`). An admin session
279
284
  (never a read-only one, a guest or the public link) gets **Edit offices** (≥1200 px: a panel docked on the right in the
280
285
  usage rail's place, the Office in use beside it, × or Esc closes it and the rail returns; narrower: a centred dialog): add, rename and delete offices, pick who is
281
- in each (whole teams or single instances; none = everyone) and its style, and upload or delete **skin packs** (an
286
+ in each (Everyone, Picked: whole teams or single instances, or #2752 Nobody: its style's NPCs only; none picked = everyone) and its style, and upload or delete **skin packs** (an
282
287
  artist's pictures: `manifest.json` plus PNGs, format v1, kept in `web-office-skins/` in the AgEnD home; the host
283
288
  checks every rule — PNG only, each strip exactly frames·w × h, a 16:9 background, size caps — and never changes a
284
289
  pack; a strip may give its displayed size, `dw`/`dh`, apart from its pictures' size, and a character may walk four
@@ -318,7 +323,7 @@ tiles; a tile's label, or a double-click on it, opens that office; traffic betwe
318
323
  Edit offices and Edit layout wait for a single office.
319
324
  **Share…** (#2636; an admin session, on the dashboard reached directly or over the public link — never read-only or a guest; the URL shows only to its maker, in the dialog) makes an Office share
320
325
  link: anyone who opens it watches **Whole fleet** (#2716, in the fleet's style), one office or **All offices** live, in the link's **Look** (#2715: Light, Dark or the viewer's device; default what the maker's dashboard shows now), read-only, with no sign-in — names, identity
321
- colours and states, every 5 s; no chat, no clicks into anything, no settings; agents' `office_set` lines only when
326
+ colours and states, every 5 s; no chat, no settings (a click shows a card with name, title, state, office and level only); agents' `office_set` lines only when
322
327
  **Include agents' own status lines** is ticked; hidden instances never. 1 h by default, 15 min to 24 h
323
328
  (`web.office_share.max_hours`); at most 10 open. Its own quick tunnel (`https://<random>.trycloudflare.com/o/<token>`)
324
329
  starts with the first link and stops with the last; the token is shown once. There is no chat command: the button only. Open links and **Revoke** are in **Settings → Access
@@ -326,8 +331,8 @@ starts with the first link and stops with the last; the token is shown once. The
326
331
  says to try again in a few minutes (no retry). `web.office_share.enabled: false` turns it off and ends open links.
327
332
 
328
333
  The Office fills the Fleet panel and moves like the Canvas (#2540): drag to pan, the wheel or a pinch to zoom,
329
- **+** / **−** / **Fit** / **Fill** at the top right (the zoom shown as a percentage above them) or the `+ - 0` keys
330
- (with the office focused), an overview at the bottom right to jump (not on a phone; hidden while a single office
334
+ **+** / **−** / **Fit** / **Fill** at the top right (the zoom shown as a percentage above them; on a phone, outside
335
+ fullscreen, a row along the top of the scene) or the `+ - 0` keys (with the office focused), an overview at the bottom right to jump (not on a phone; hidden while a single office
331
336
  is all in view, #2737). It takes the whole panel: the
332
337
  Fleet area's full width, down to the window's foot. **Fit** shows the whole scene as large as the panel allows
333
338
  (any scale, so it fills the panel's width or height); **Fill** (a toggle, kept per office) fills the panel instead,
@@ -394,7 +399,8 @@ to that instance's Log).
394
399
  colours only; status colours (Needs you count, state dots, errors, focus ring) never change. The header follows the
395
400
  page, not the chat. Off with agents' themes off or `?safe=1`.
396
401
 
397
- Phone layout: bottom tabs Chat, Needs you, Fleet, Settings. Chat is current on any of an agent's pages and goes to its
402
+ Phone layout: bottom tabs Chat, Needs you, Fleet, Settings. Settings opens on its list of sections (search on top);
403
+ each section opens on its own page with "‹ Settings", and dialogs and the setup wizard are full-screen sheets. Chat is current on any of an agent's pages and goes to its
398
404
  chat; View, Log and Details are the switch under the header.
399
405
 
400
406
  ## Usage and the cache report
@@ -511,7 +517,10 @@ signed in? kiro logs out first; **Use a temporary public link** where allowed),
511
517
  sign-in terminal** + its one-time access code (this browser only, no DM). While it runs every admin page shows
512
518
  "Signing in to X (started on <device>)" with **Open**; another browser sees no code and may **Cancel sign-in**. Ends
513
519
  when the browser session ends. A missing CLI is not installed here (the dialog says the install command). agy and
514
- opencode: no dashboard sign-in. Config: `web_terminal.*` (as `/login`).
520
+ opencode: no dashboard sign-in. Config: `web_terminal.*` (as `/login`). Default Kiro, Claude Code and Codex
521
+ accounts sign in with named browser controls instead (#2599): Kiro's account method, Start URL and region and Claude's
522
+ code are entered in the browser, Codex shows its link and device code; credential profiles keep the dialog above. A
523
+ backend skipped at first setup shows in Needs you even before an agent uses it.
515
524
 
516
525
  **Agents** — **New agent**; per agent **Settings**, **Pause / Wake**, **Start / Stop** (direct), ⋯ **Delete agent**
517
526
  (staged; on Apply it waits for a fleet admin's confirmation in General, then the agent is stopped and removed, as
@@ -548,10 +557,12 @@ Advanced **Context lines** (these restart the room's agent); Tool progress and R
548
557
 
549
558
  **Agent defaults** — **Project folders** (`project_roots`: where New agent may put an agent; empty = anywhere;
550
559
  changing it waits for a fleet admin's OK) and the fleet defaults (`defaults.*`): **Language (bot replies)** (`locale`: Auto / en / zh-TW; read at startup: restart AgEnD), default
551
- backend and model, auto-pause, tool progress, bot-to-bot visibility, reply guard; Advanced: tool set, agent mode, log
560
+ backend and model, auto-pause, tool progress, bot-to-bot visibility, reply guard, **Native replies trigger ClassicBot**
561
+ (`reply_triggers`: a native reply triggers a ClassicBot bot; off by default, #2576); Advanced: tool set, agent mode, log
552
562
  level, **Hang detector enabled** / **Stuck timeout** (`hang_detector.*`), **Startup concurrency** (1–20) and
553
563
  **Stagger delay** (`startup.*`, used from the next agent start, no restart). ClassicBot defaults (in Chat & connections; `classicBot.yaml defaults.*`): default backend, tool
554
- progress, reply guard, **ClassicBot admins**, **Allowed guilds**.
564
+ progress, reply guard, **Native replies trigger ClassicBot** (`reply_triggers`, also per room), **ClassicBot admins**,
565
+ **Allowed guilds**.
555
566
 
556
567
  **Access & security** (sessions, browser terminal, public link and fixed address, guests, web authority; web echo is in Chat & connections, the Log tab and usage over the link in **Web dashboard**) — all apply at once; loosening waits for an admin; disabled over a public link.
557
568
  | Label | Key |
@@ -578,7 +589,10 @@ connections are off (and the setup wizard); while those have unsaved changes, th
578
589
 
579
590
  **Setup wizard** — agent (backend, directory, name) → platform → token and server/group, your user ID → preview →
580
591
  **Create and start**. The directory may be left empty: the agent gets its own folder, `~/.agend/workspaces/<name>`
581
- (shown under the field); one that is entered must be absolute.
592
+ (shown under the field); one that is entered must be absolute. On a Telegram or Discord connection the first agent
593
+ is named `general` by default and becomes the fleet's General, in the chat's General topic or channel, when its
594
+ directory is left empty; with a directory it is the worker `agent-1` and the fleet adds its General in its own folder.
595
+ Once a fleet has a connection or a General, a new agent can't be called `general`.
582
596
 
583
597
  **First setup, before any fleet** (`agend setup`, the page the Windows installer opens): the same steps on its own
584
598
  page, in English or 繁體中文 (the browser's language; the button at the top switches). The working directory may be
@@ -96,6 +96,7 @@ const FLEET_FIELD_IMPACTS = {
96
96
  "web.echo_to_channel": "now",
97
97
  "web.log_tab": "now",
98
98
  "web.usage_report_on_public_link": "now",
99
+ "web.office_levels": "now",
99
100
  "web.public_link.allow_public": "now",
100
101
  "web.public_link.ttl_minutes": "now",
101
102
  "web.public_link.protocol": "now",
@@ -1 +1 @@
1
- {"version":3,"file":"instance-config-impact.js","sourceRoot":"","sources":["../src/instance-config-impact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAM9C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,YAAY,GAA4B,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAElF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsC,IAAI,GAAG,CAAuB;IACvG,eAAe;IACf,wBAAwB;IACxB,gBAAgB;IAChB,iBAAiB;IACjB,yBAAyB;IACzB,kBAAkB;IAClB,UAAU;IACV,cAAc;IACd,aAAa;IACb,MAAM;IACN,WAAW;IACX,sFAAsF;IACtF,2BAA2B;IAC3B,wFAAwF;IACxF,qBAAqB;IACrB,oGAAoG;IACpG,WAAW,EAAE,eAAe,EAAE,oBAAoB;CACnD,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAChE,CAAC,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,CAAW;KACrE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACpD,CAAC;AAEF;;;GAGG;AACH,MAAM,0BAA0B,GAAwB,IAAI,GAAG,CAAC;IAC9D,UAAU;IACV,YAAY;IACZ,eAAe;CAChB,CAAC,CAAC;AAEH,wDAAwD;AACxD,MAAM,eAAe,GAAG;IACtB,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB;IACtE,yBAAyB,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe;IACpG,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW;IAC3F,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU;IACjE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,kBAAkB;IAC7D,0EAA0E;IAC1E,kEAAkE;IAClE,eAAe;IACf,2BAA2B;IAC3B,qDAAqD;IACrD,qBAAqB;IACrB,kEAAkE;IAClE,WAAW,EAAE,eAAe,EAAE,oBAAoB;CAC1C,CAAC;AAEX,2DAA2D;AAC3D,MAAM,cAAc,GAAG;IACrB,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe;IACvD,wBAAwB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB;IACzF,UAAU;CACF,CAAC;AAEX;;;GAGG;AACH,MAAM,mBAAmB,GAA2C;IAClE,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;IACzB,qBAAqB,EAAE,KAAK;IAC5B,yBAAyB,EAAE,KAAK;IAChC,gCAAgC,EAAE,KAAK;IACvC,qBAAqB,EAAE,KAAK;IAC5B,aAAa,EAAE,KAAK;IACpB,iCAAiC,EAAE,KAAK;IACxC,8BAA8B,EAAE,KAAK;IACrC,6BAA6B,EAAE,KAAK;IACpC,0BAA0B,EAAE,KAAK;IACjC,0BAA0B,EAAE,KAAK;IACjC,kCAAkC,EAAE,KAAK;IACzC,6BAA6B,EAAE,KAAK;IACpC,sDAAsD;IACtD,2BAA2B,EAAE,OAAO;IACpC,+EAA+E;IAC/E,kCAAkC,EAAE,KAAK;IACzC,8BAA8B,EAAE,KAAK;IACrC,oGAAoG;IACpG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB;QAC/I,sBAAsB,EAAE,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,KAAc,CAAC,CAAC,CAAC;IACpG,sBAAsB,EAAE,KAAK;IAC7B,0BAA0B,EAAE,KAAK;IACjC,mHAAmH;IACnH,qDAAqD;IACrD,YAAY,EAAE,KAAK;IACnB,wBAAwB,EAAE,KAAK;IAC/B,+GAA+G;IAC/G,iBAAiB,EAAE,OAAO;IAC1B,gBAAgB,EAAE,OAAO;IACzB,2BAA2B,EAAE,OAAO;IACpC,oCAAoC,EAAE,OAAO;IAC7C,gHAAgH;IAChH,2GAA2G;IAC3G,qCAAqC,EAAE,KAAK;IAC5C,sHAAsH;IACtH,yBAAyB,EAAE,KAAK;IAChC,wBAAwB,EAAE,KAAK;IAC/B,kHAAkH;IAClH,qBAAqB,EAAE,KAAK;IAC5B,qBAAqB,EAAE,OAAO;IAC9B,wBAAwB,EAAE,OAAO;IACjC,qGAAqG;IACrG,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IAIvD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAwE,EAAE,CAAC;QACzH,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,KAAc,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;mEACmE;AACnE,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,wBAAwB;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAuB,EACvB,IAAoB;IAEpB,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,gEAAgE;IAChE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,IAAI,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACxD,OAAO,wBAAwB,CAAC,GAAG,CAAC,GAA2B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAuB,EAAE,QAAuC;IAC1F,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrF,OAAO,YAAY,CAAC,KAAK,CAAE,CAAC;AAC9B,CAAC;AASD,qDAAqD;AACrD,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAAiC,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACzE,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACtD,wEAAwE;QACxE,sEAAsE;QACtE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAClG,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACpD,OAAO,CAAC,oBAAoB,GAAG,EAAE,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"instance-config-impact.js","sourceRoot":"","sources":["../src/instance-config-impact.ts"],"names":[],"mappings":"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"}
@@ -19,15 +19,20 @@ export async function planKiroReconciliation(deps, name, keep, archive, rollback
19
19
  export function kiroReconciliationPrompt(p) {
20
20
  return t(p.plan.rollbackReceipt ? "kiro_reconcile.rollback_prompt" : "kiro_reconcile.prompt", p.name, p.input.sessionId, p.input.archiveId);
21
21
  }
22
+ function failureText(name, reason, receipt) {
23
+ // Reasons are complete localized sentences; the outer notice owns the separator.
24
+ return t(receipt ? "kiro_reconcile.failed" : "kiro_reconcile.failed_no_receipt", name, reason.replace(/[.。]+\s*$/, ""));
25
+ }
22
26
  export async function applyKiroReconciliation(deps, p, actor) {
23
27
  let lease;
24
28
  try {
25
29
  lease = deps.reserve(p.name);
26
30
  }
27
31
  catch (error) {
28
- return { ok: false, text: t("kiro_reconcile.failed", p.name, error.message) };
32
+ return { ok: false, text: failureText(p.name, error.message) };
29
33
  }
30
34
  let receipt;
35
+ let storageStarted = false;
31
36
  const current = () => {
32
37
  if (!lease.current())
33
38
  throw new Error(t("kiro_reconcile.changed"));
@@ -44,6 +49,9 @@ export async function applyKiroReconciliation(deps, p, actor) {
44
49
  current();
45
50
  if (model !== p.input.model)
46
51
  throw new Error(t("kiro_reconcile.changed"));
52
+ // A rejected preflight has not touched storage or launched anything. Once the
53
+ // worker begins, even a failure without a returned receipt requires a stop.
54
+ storageStarted = true;
47
55
  const result = await deps.store(p.input, p.plan, actor);
48
56
  receipt = result.receipt;
49
57
  current();
@@ -63,7 +71,7 @@ export async function applyKiroReconciliation(deps, p, actor) {
63
71
  }
64
72
  catch (error) {
65
73
  let reason = error instanceof SyntaxError ? "Malformed reconciliation data" : error.message;
66
- if (lease.current()) {
74
+ if (storageStarted && lease.current()) {
67
75
  try {
68
76
  await deps.stop(p.name);
69
77
  }
@@ -71,7 +79,7 @@ export async function applyKiroReconciliation(deps, p, actor) {
71
79
  reason += " " + t("kiro_migrate.stop_unconfirmed");
72
80
  }
73
81
  }
74
- return { ok: false, ...(receipt ? { receipt } : {}), text: t("kiro_reconcile.failed", p.name, reason) };
82
+ return { ok: false, ...(receipt ? { receipt } : {}), text: failureText(p.name, reason, receipt) };
75
83
  }
76
84
  finally {
77
85
  lease.release();
@@ -1 +1 @@
1
- {"version":3,"file":"kiro-reconcile.js","sourceRoot":"","sources":["../src/kiro-reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kiro-reconcile.js","sourceRoot":"","sources":["../src/kiro-reconcile.ts"],"names":[],"mappings":"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"}
package/dist/locale.js CHANGED
@@ -419,10 +419,12 @@ const enMessages = {
419
419
  "kiro_reconcile.audit_failed": "Reconciliation audit log is unavailable; no changes were made.",
420
420
  "kiro_reconcile.stopped_required": "Reconciliation requires a stopped TUI fleet instance with an explicit model and directory.",
421
421
  "kiro_reconcile.changed": "Reconciliation evidence or instance ownership changed; request confirmation again.",
422
+ "kiro_reconcile.applying": "Reconciling the saved conversations of {0}…",
422
423
  "kiro_reconcile.prompt": "Reconcile {0}?\nKeep original conversation: {1}\nArchive intact (never delete): {2}\nPreserve both V2 file sets, repair the original pin, archive its frozen classic duplicate, then verify two starts with the same model. A failure stops in place. A receipt allows rollback into a stopped hold.",
423
424
  "kiro_reconcile.rollback_prompt": "Roll back reconciliation for {0}?\nKeep ID: {1}\nArchived ID: {2}\nRestore the prior AgEnD identity and exact frozen classic index rows into a stopped hold. All V2 files and archives stay intact. Nothing is started.",
424
425
  "kiro_reconcile.done": "{0}: original conversation restored and plain restart verified. Archive/rollback receipt: {1}. Both V2 conversations are preserved.",
425
426
  "kiro_reconcile.rolled_back": "{0}: prior identity restored; instance stays stopped. Archives retained. Receipt: {1}.",
427
+ "kiro_reconcile.failed_no_receipt": "{0}: reconciliation did not complete: {1}. No fresh or classic fallback. No receipt was returned; inspect the Log before retrying.",
426
428
  "kiro_reconcile.failed": "{0}: reconciliation did not complete: {1}. No fresh or classic fallback. Inspect the receipt before retrying.",
427
429
  "kiro_migrate.requested": "Asked in General for a fleet admin's confirmation. Nothing changes until it is confirmed.",
428
430
  "kiro_migrate.no_general": "There is no General topic to ask a fleet admin in, so the move cannot be confirmed.",
@@ -1836,10 +1838,12 @@ const zhTWMessages = {
1836
1838
  "kiro_reconcile.audit_failed": "對話處理的稽核紀錄目前無法寫入,沒有進行任何變更。",
1837
1839
  "kiro_reconcile.stopped_required": "接續處理需要已停止的 TUI fleet agent,並明確設定模型與目錄。",
1838
1840
  "kiro_reconcile.changed": "接續處理的證據或 agent 擁有權已改變,請重新要求確認。",
1841
+ "kiro_reconcile.applying": "正在處理 {0} 的已儲存對話…",
1839
1842
  "kiro_reconcile.prompt": "要處理 {0} 的對話嗎?\n保留原對話:{1}\n完整封存(絕不刪除):{2}\n會保留兩份 V2 檔案、修復原對話登記、備份並移出凍結的經典副本,再以相同模型驗證兩次啟動。失敗就停止;可用收據復原到停止等待的狀態。",
1840
1843
  "kiro_reconcile.rollback_prompt": "要復原 {0} 的對話處理嗎?\n保留的對話 ID:{1}\n封存的對話 ID:{2}\n會復原先前的 AgEnD 登記與凍結的經典索引原始資料,並維持停止;所有 V2 檔與封存都保留,不啟動任何 agent。",
1841
1844
  "kiro_reconcile.done": "{0}:已接回原對話,並驗證一般重啟。封存/復原收據:{1}。兩份 V2 對話都已保留。",
1842
1845
  "kiro_reconcile.rolled_back": "{0}:已復原先前登記並維持停止,封存仍保留。收據:{1}。",
1846
+ "kiro_reconcile.failed_no_receipt": "{0}:對話處理未完成:{1}。沒有改開新對話或切回經典模式;未取得收據,重試前請先查看紀錄。",
1843
1847
  "kiro_reconcile.failed": "{0}:對話處理未完成:{1}。沒有改開新對話或切回經典模式;重試前請先檢查收據。",
1844
1848
  "kiro_migrate.requested": "已在 General 請 fleet admin 確認。確認前不會有任何變更。",
1845
1849
  "kiro_migrate.no_general": "沒有 General topic 可以請 fleet admin 確認,所以無法搬移。",