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

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 (132) hide show
  1. package/README.md +4 -0
  2. package/README.zh-TW.md +4 -0
  3. package/dist/agent-cli.js +48 -0
  4. package/dist/agent-cli.js.map +1 -1
  5. package/dist/agent-endpoint.js +6 -0
  6. package/dist/agent-endpoint.js.map +1 -1
  7. package/dist/agent-whats-new.js +3 -0
  8. package/dist/agent-whats-new.js.map +1 -1
  9. package/dist/backend/kiro-classic-archive.d.ts +52 -0
  10. package/dist/backend/kiro-classic-archive.js +444 -0
  11. package/dist/backend/kiro-classic-archive.js.map +1 -0
  12. package/dist/backend/kiro-identity.d.ts +19 -0
  13. package/dist/backend/kiro-identity.js +43 -0
  14. package/dist/backend/kiro-identity.js.map +1 -1
  15. package/dist/backend/kiro-migration-verify.d.ts +10 -0
  16. package/dist/backend/kiro-migration-verify.js +52 -0
  17. package/dist/backend/kiro-migration-verify.js.map +1 -0
  18. package/dist/backend/kiro-v2-store-worker.js +21 -1
  19. package/dist/backend/kiro-v2-store-worker.js.map +1 -1
  20. package/dist/backend/kiro-v2-store.d.ts +8 -0
  21. package/dist/backend/kiro-v2-store.js.map +1 -1
  22. package/dist/backend/kiro.d.ts +99 -1
  23. package/dist/backend/kiro.js +352 -18
  24. package/dist/backend/kiro.js.map +1 -1
  25. package/dist/backend/types.d.ts +49 -0
  26. package/dist/backend/types.js +9 -0
  27. package/dist/backend/types.js.map +1 -1
  28. package/dist/channel/ipc-timeouts.js +3 -0
  29. package/dist/channel/ipc-timeouts.js.map +1 -1
  30. package/dist/channel/mcp-tools.js +12 -0
  31. package/dist/channel/mcp-tools.js.map +1 -1
  32. package/dist/cli.js +33 -0
  33. package/dist/cli.js.map +1 -1
  34. package/dist/config-validator.js +2 -0
  35. package/dist/config-validator.js.map +1 -1
  36. package/dist/config.js +2 -0
  37. package/dist/config.js.map +1 -1
  38. package/dist/daemon.d.ts +45 -0
  39. package/dist/daemon.js +342 -19
  40. package/dist/daemon.js.map +1 -1
  41. package/dist/dashboard-permissions.d.ts +15 -4
  42. package/dist/dashboard-permissions.js +49 -23
  43. package/dist/dashboard-permissions.js.map +1 -1
  44. package/dist/fleet-control-audit.d.ts +1 -1
  45. package/dist/fleet-control-audit.js +3 -0
  46. package/dist/fleet-control-audit.js.map +1 -1
  47. package/dist/fleet-manager.d.ts +61 -2
  48. package/dist/fleet-manager.js +421 -28
  49. package/dist/fleet-manager.js.map +1 -1
  50. package/dist/general-knowledge/skills/docker-install/SKILL.md +25 -0
  51. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +10 -0
  52. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +28 -0
  53. package/dist/general-knowledge/skills/web-appearance/SKILL.md +28 -0
  54. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +20 -2
  55. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +20 -2
  56. package/dist/instance-config-impact.js +2 -2
  57. package/dist/instance-config-impact.js.map +1 -1
  58. package/dist/instance-lifecycle.d.ts +4 -0
  59. package/dist/instance-lifecycle.js +7 -0
  60. package/dist/instance-lifecycle.js.map +1 -1
  61. package/dist/kiro-migrate.d.ts +11 -0
  62. package/dist/kiro-migrate.js +86 -31
  63. package/dist/kiro-migrate.js.map +1 -1
  64. package/dist/kiro-session-proof.d.ts +41 -0
  65. package/dist/kiro-session-proof.js +89 -0
  66. package/dist/kiro-session-proof.js.map +1 -0
  67. package/dist/kiro-tui-forensic.d.ts +5 -0
  68. package/dist/kiro-tui-forensic.js +3 -3
  69. package/dist/kiro-tui-forensic.js.map +1 -1
  70. package/dist/locale.js +142 -0
  71. package/dist/locale.js.map +1 -1
  72. package/dist/log-service.js +1 -1
  73. package/dist/log-service.js.map +1 -1
  74. package/dist/needs-you.d.ts +3 -1
  75. package/dist/needs-you.js +4 -2
  76. package/dist/needs-you.js.map +1 -1
  77. package/dist/office-share.d.ts +12 -2
  78. package/dist/office-share.js +27 -2
  79. package/dist/office-share.js.map +1 -1
  80. package/dist/outbound-schemas.d.ts +39 -0
  81. package/dist/outbound-schemas.js +29 -0
  82. package/dist/outbound-schemas.js.map +1 -1
  83. package/dist/remote-card-prompt.d.ts +38 -0
  84. package/dist/remote-card-prompt.js +86 -0
  85. package/dist/remote-card-prompt.js.map +1 -0
  86. package/dist/settings-change.js +8 -5
  87. package/dist/settings-change.js.map +1 -1
  88. package/dist/settings-instance-patch.js +1 -1
  89. package/dist/settings-instance-patch.js.map +1 -1
  90. package/dist/tool-permissions.js +17 -0
  91. package/dist/tool-permissions.js.map +1 -1
  92. package/dist/transcript-sources.d.ts +1 -0
  93. package/dist/transcript-sources.js +2 -1
  94. package/dist/transcript-sources.js.map +1 -1
  95. package/dist/types.d.ts +5 -0
  96. package/dist/ui/chat-store.js +3 -2
  97. package/dist/ui/chat-strings.js +2 -2
  98. package/dist/ui/fleet-office-editor.js +54 -2
  99. package/dist/ui/fleet-office-layout.js +44 -7
  100. package/dist/ui/fleet-office-pack.d.ts +9 -3
  101. package/dist/ui/fleet-office-pack.js +117 -19
  102. package/dist/ui/fleet-office-store.js +43 -0
  103. package/dist/ui/fleet-office-zones.js +92 -17
  104. package/dist/ui/fleet-office.js +102 -16
  105. package/dist/ui/panel-chat.js +14 -2
  106. package/dist/ui/panel-log.js +2 -2
  107. package/dist/ui/panel-needs.js +1 -1
  108. package/dist/ui/panel-settings.js +5 -5
  109. package/dist/ui/settings-model.js +17 -9
  110. package/dist/ui/settings-strings.js +2 -0
  111. package/dist/ui/shared/app-i18n.js +2 -2
  112. package/dist/ui/shared/app-stream.js +1 -1
  113. package/dist/ui/shared/app.css +18 -2
  114. package/dist/web-api.d.ts +5 -1
  115. package/dist/web-api.js +91 -3
  116. package/dist/web-api.js.map +1 -1
  117. package/dist/web-office-acts.js +2 -2
  118. package/dist/web-office-acts.js.map +1 -1
  119. package/dist/web-office-pack-read.d.ts +35 -0
  120. package/dist/web-office-pack-read.js +252 -0
  121. package/dist/web-office-pack-read.js.map +1 -0
  122. package/dist/web-office-pack-tools.d.ts +232 -0
  123. package/dist/web-office-pack-tools.js +754 -0
  124. package/dist/web-office-pack-tools.js.map +1 -0
  125. package/dist/web-office-skins.d.ts +68 -4
  126. package/dist/web-office-skins.js +318 -33
  127. package/dist/web-office-skins.js.map +1 -1
  128. package/dist/web-office-store.d.ts +21 -2
  129. package/dist/web-office-store.js +78 -18
  130. package/dist/web-office-store.js.map +1 -1
  131. package/package.json +1 -1
  132. package/templates/windows-shortcuts.ps1 +16 -15
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: docker-install
3
+ description: Set up AgEnD in Docker for a person, or maintain one — follow the Docker runbook step by step
4
+ roles: [general]
5
+ ---
6
+
7
+ ## AgEnD in Docker
8
+
9
+ When a person wants AgEnD in Docker (a trial, a demo, a machine without Node.js), or asks you to maintain an existing
10
+ Docker install, follow the runbook exactly. It has the Dockerfile, entrypoint, compose file, CLI installs, first
11
+ fleet.yaml, verification, updates, backups and troubleshooting:
12
+
13
+ - English: https://github.com/songsid/AgEnD/blob/main/docs/docker.md
14
+ - 繁體中文: https://github.com/songsid/AgEnD/blob/main/docs/docker.zh-TW.md
15
+
16
+ Read the raw file (`https://raw.githubusercontent.com/songsid/AgEnD/main/docs/docker.md`) before you start, and run
17
+ every check it gives.
18
+
19
+ **Rules that hold even without the runbook at hand:**
20
+ - Never run `agend update`, `agend restart`, `agend stop` or `agend install` inside the container, and never `/update`
21
+ in that fleet's chat. Update by rebuilding the image (`docker compose build --pull --no-cache && docker compose up -d`);
22
+ restart with `docker compose restart`.
23
+ - Tokens and API keys go in the compose folder's `.env`, never in fleet.yaml or a chat.
24
+ - The dashboard stays published on `127.0.0.1` unless the person asks otherwise.
25
+ - AgEnD's data, the CLIs and their logins live in the `agend-home` volume: back it up before anything destructive.
@@ -63,6 +63,16 @@ coordinator-level tool; you do not have it). It carries the conversation: the in
63
63
  resumed once under the TUI and becomes its own. A fleet admin confirms each move in this General topic: a
64
64
  "Move it / Cancel" prompt. Explain it if asked; never press it on the user's behalf.
65
65
 
66
+ The Confirm prompt warns about sudo/interactive passwords and explains both launches. AgEnD requires an idle
67
+ instance, a supported Kiro 2.34+ version and a known model. It carries once, verifies the owned V2 reader, then does
68
+ an ordinary restart: while the target CLI is stopped, it archives the exact frozen classic rows before removing
69
+ the duplicate from Kiro's index. It verifies the same conversation/model and attached V2 transcript again, and
70
+ reports the forensic verdict in General and the instance's topic. Queued work waits until this finishes. Failure
71
+ stops and error-pauses the instance; inspect the cause before an explicit retry. Never use a fresh conversation
72
+ or classic as a recovery shortcut. Archives are private and restorable with `agend kiro restore-classic` (see CLI docs).
73
+ The raw Log-history gate remains closed: the verification proves the launched/pinned reader, not ongoing pane
74
+ session identity after `/chat` or `/clear`.
75
+
66
76
  - After the move, `kiro_engine_status` shows `kiro_ui: tui` and `engine_floor: "tui"`.
67
77
  - It is one-way. AgEnD refuses to launch a moved instance on classic again, because that would resume the frozen
68
78
  classic copy and lose everything done since. A refusal that names the engine floor means someone set `kiro_ui`
@@ -288,6 +288,34 @@ are not in your list), you can direct your own character for a moment:
288
288
  { "go": { "person": "atlas" }, "say": "Review's ready", "seconds": 20 }
289
289
  ```
290
290
 
291
+ ## Office skin packs (everyone's)
292
+
293
+ The Office view draws offices in **skin packs**, which every viewer on the fleet sees. When a person switches the
294
+ **office_packs** dashboard feature on for you (`office_pack_access: true`, its own switch — off until then, and the
295
+ tools are not in your list), you can publish them yourself instead of asking a person to upload each fix by hand:
296
+
297
+ - `office_pack_list {}` first: each pack's `id`, `name`, `files`, `bytes`, `version`, `previous` (a kept previous
298
+ version you can restore, or null) and the `offices` drawn in it; the stored offices and their style; the fleet's
299
+ `approval` (`"apply"`: at once; `"approve"`: a fleet admin's yes first — the default); your `pending` changes; the
300
+ `limits` and what is `left` of your hour.
301
+ - `office_pack_check { dir }` runs the host's own checks and stores nothing: `{ result: "PACK OK", packs: [...] }` or the
302
+ first refusal. `dir` is a folder with its `manifest.json` and the PNGs at the paths the manifest names, in your working
303
+ directory or the fleet's shared folder (`~/.agend/shared`); a symlink is followed and must stay inside. Only those
304
+ files are read. Or `manifest` (the object) + `files` (`{ "<name it uses>": "<path>" }`); `packs: [...]` for several.
305
+ - `office_pack_upload` (the same inputs) keeps it — an id the fleet keeps is **replaced** at once (no delete first; on
306
+ any failure the old one stays) and its previous version is kept. If a stored office's layout overrides would no
307
+ longer fit (a seat count changed, a seat left its area, an item is gone), check and upload refuse with the office
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.
310
+ - `office_pack_restore { id }` brings back the previous version (the replaced one becomes the previous);
311
+ `office_pack_delete { id, keep_previous? }`; `office_set_style { office, pack }` points a stored office at a pack or a
312
+ built-in style (pixel, studio, cozy).
313
+ - Every change is logged with each picture's sha256 and told to the fleet's admins. At most **20 batches and 200 MiB an
314
+ hour**: one call is one batch (up to 16 packs), so send a whole set of fixes in one `packs: [...]`.
315
+
316
+ The skin-pack manifest format — every key, its ranges, a minimal example — and the limits are in the Office guide:
317
+ [docs/office.md → Make a skin pack](https://github.com/songsid/AgEnD/blob/main/docs/office.md#make-a-skin-pack). Point people there too when they ask how the Office works.
318
+
291
319
  ## Limits
292
320
 
293
321
  - At least **30 s** between changes, at most **10 changes an hour** — refused with `rate_limited` and
@@ -296,6 +296,34 @@ are not in your list), you can direct your own character for a moment:
296
296
  { "go": { "person": "atlas" }, "say": "Review's ready", "seconds": 20 }
297
297
  ```
298
298
 
299
+ ## Office skin packs (everyone's)
300
+
301
+ The Office view draws offices in **skin packs**, which every viewer on the fleet sees. When a person switches the
302
+ **office_packs** dashboard feature on for you (`office_pack_access: true`, its own switch — off until then, and the
303
+ tools are not in your list), you can publish them yourself instead of asking a person to upload each fix by hand:
304
+
305
+ - `office_pack_list {}` first: each pack's `id`, `name`, `files`, `bytes`, `version`, `previous` (a kept previous
306
+ version you can restore, or null) and the `offices` drawn in it; the stored offices and their style; the fleet's
307
+ `approval` (`"apply"`: at once; `"approve"`: a fleet admin's yes first — the default); your `pending` changes; the
308
+ `limits` and what is `left` of your hour.
309
+ - `office_pack_check { dir }` runs the host's own checks and stores nothing: `{ result: "PACK OK", packs: [...] }` or the
310
+ first refusal. `dir` is a folder with its `manifest.json` and the PNGs at the paths the manifest names, in your working
311
+ directory or the fleet's shared folder (`~/.agend/shared`); a symlink is followed and must stay inside. Only those
312
+ files are read. Or `manifest` (the object) + `files` (`{ "<name it uses>": "<path>" }`); `packs: [...]` for several.
313
+ - `office_pack_upload` (the same inputs) keeps it — an id the fleet keeps is **replaced** at once (no delete first; on
314
+ any failure the old one stays) and its previous version is kept. If a stored office's layout overrides would no
315
+ longer fit (a seat count changed, a seat left its area, an item is gone), check and upload refuse with the office
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.
318
+ - `office_pack_restore { id }` brings back the previous version (the replaced one becomes the previous);
319
+ `office_pack_delete { id, keep_previous? }`; `office_set_style { office, pack }` points a stored office at a pack or a
320
+ built-in style (pixel, studio, cozy).
321
+ - Every change is logged with each picture's sha256 and told to the fleet's admins. At most **20 batches and 200 MiB an
322
+ hour**: one call is one batch (up to 16 packs), so send a whole set of fixes in one `packs: [...]`.
323
+
324
+ The skin-pack manifest format — every key, its ranges, a minimal example — and the limits are in the Office guide:
325
+ [docs/office.md → Make a skin pack](https://github.com/songsid/AgEnD/blob/main/docs/office.md#make-a-skin-pack). Point people there too when they ask how the Office works.
326
+
299
327
  ## Mods
300
328
 
301
329
  A mod is one file, `<name>-<version>.agendmod.json`, that carries a look: a theme with its pictures, card text,
@@ -187,6 +187,9 @@ tab title. Items, grouped by instance, oldest first:
187
187
  - the instance: "Paused: sign-in needed", "Crashed";
188
188
  - deliveries from the last 24 h: "Could not confirm delivery", "Delivery failed" (source → target · kind).
189
189
 
190
+ "Asking you a question" is a kiro V3 question card, posted to the instance's chat with a button per answer and a box
191
+ for answering in words (on Discord/Telegram: reply to the post); an MCP input request offers Decline / Cancel and is
192
+ filled in at the terminal (View).
190
193
  A prompt shows its own answer buttons (first answer wins); a delivery has **Acknowledge** (clears it everywhere);
191
194
  "Paused: sign-in needed" has **Sign in** when the dashboard can run that login (#2233); every item has **Open chat**. **Notify me on this device** (Turn on / Turn off) gives desktop notifications while the
192
195
  tab is hidden — per browser, not on phones or plain-HTTP addresses. Config: `needs_you.live_message` (default on),
@@ -250,6 +253,10 @@ Click a team header to fold it. **Find** dims everything that doesn't match. A c
250
253
  and backend; clicking it opens the chat. List mode adds the description, model, a link to the Discord thread or
251
254
  Telegram topic, and **Open chat**.
252
255
 
256
+ **The Office guide** (`docs/office.md` in the AgEnD repository; `docs/office.zh-TW.md` in Traditional Chinese) is the one page for people: setting up offices, the
257
+ skin-pack manifest format and its limits, Edit layout and seat reservations, bedtime, share links, agents' office and
258
+ pack tools, and rolling back. Point people there for more than the summary below; it marks what is not released yet.
259
+
253
260
  **Office** (the third view, remembered per device) draws the same fleet as a pixel office: a room per team, a desk
254
261
  per instance with a name tag, General and "Not in a team" in the **Lobby**. Each little person is its state: typing
255
262
  with the lamp on (working), tea break (idle), asleep behind a **Closed** sign (paused/stopped), a hand up under a
@@ -263,7 +270,11 @@ in each (whole teams or single instances; none = everyone) and its style, and up
263
270
  artist's pictures: `manifest.json` plus PNGs, format v1, kept in `web-office-skins/` in the AgEnD home; the host
264
271
  checks every rule — PNG only, each strip exactly frames·w × h, a 16:9 background, size caps — and never changes a
265
272
  pack; a strip may give its displayed size, `dw`/`dh`, apart from its pictures' size, and a character may walk four
266
- ways with `walkDown`, `walkUp` and `walkSide`, the side one mirrored for left). **Style** (per browser for the whole fleet, per office for a stored one): **Desks**,
273
+ ways with `walkDown`, `walkUp` and `walkSide`, the side one mirrored for left). #2692: an agent with **Office skin
274
+ packs** on (`office_pack_access`, Dashboard access) can check, upload, replace, delete and restore packs itself (one
275
+ previous version kept per pack); **Agents changing packs** under the packs names those agents, sets whether their changes
276
+ **Need my yes** (the default) or **Apply at once**, and approves or rejects the waiting ones (also from the notice's
277
+ buttons in General); every change is logged and told in General. **Style** (per browser for the whole fleet, per office for a stored one): **Desks**,
267
278
  **Studio** (one scene — Work, Lounge, Help desk, Nap corner — where each instance walks to the area for its state),
268
279
  **Cozy** (#2631: the same in a warm pixel-art office drawn as one picture; its notice board says a skin pack can
269
280
  restyle it; the default for a browser that has not picked a style and for a new office — a saved office keeps its
@@ -273,7 +284,10 @@ Cozy or a pack,
273
284
  waypoints (or Tab to one and use the arrow keys, Shift for 10), add or remove waypoints and join or unjoin
274
285
  corridors; an item that sleeps at bedtime (a pack's `night`) has a night handle too ("Item {id} (night)": its night
275
286
  picture faint, a moon, a line to its day place; on the day place while it sleeps in place) — drag it to give the item
276
- its own night place, **Back to the pack's night place** undoes it (#2665); **Save layout** keeps the moves as that
287
+ its own night place, **Back to the pack's night place** undoes it (#2665); a selected seat has **Reserved for** (the
288
+ office's members, several allowed) and **Lend when away** (#2691) — whoever it is for sits there first when they come
289
+ to its area, nobody else does unless it is lent while they are all away (a borrower moves off when one comes), and a
290
+ reserved seat's handle is ringed; a pack can reserve seats as well; **Save layout** keeps the moves as that
277
291
  office's overrides (the pack stays as uploaded), **Reset** goes back to the pack's own. While it is open the office picker and Edit offices wait (**Cancel** closes it); if someone
278
292
  saved the offices meanwhile, Save says so and keeps your layout — Save again puts it on the current list. A crowded area packs extra people into a tighter grid, then shows "+N" in its corner; there
279
293
  only calls and work get bubbles (a few at most) and name tags show on hover or focus. **Hide paused and stopped**
@@ -314,6 +328,10 @@ A pack may add a `foreground` (a 16:9 PNG over the whole scene, zones packs only
314
328
  and items in the air, below name tags, bubbles and "+N" — door frames, pillars, table fronts that hide whoever walks
315
329
  behind them. A furniture item's `depth` may be `"y"`: drawn among the people by base y (whoever stands lower is in
316
330
  front). Numeric depths keep their meaning (under 1000 under the people, 1000 and up over them).
331
+ An item with `activeWhen` may wait for its person (#2698): `"activeOn": "seated"` turns it active only once one of its
332
+ `activeFor` people in that state has arrived at their seat, and back as they walk off (default `"state"`: as the state
333
+ changes); `"hides": true` (needs `activeFor`) stops drawing those people while it is active (walking, they are drawn),
334
+ puts their name tags (one row at the item's tag point) and bubbles on it, and makes hovering or clicking it hit them.
317
335
  A pack may set `"straight": true` (#2634): each diagonal leg of a walk becomes an L (across, then up or down), so the
318
336
  three walking strips always fit; lay its graph out with horizontal and vertical edges and the corners land on the aisles.
319
337
 
@@ -196,6 +196,9 @@ tab title. Items, grouped by instance, oldest first:
196
196
  - the instance: "Paused: sign-in needed", "Crashed";
197
197
  - deliveries from the last 24 h: "Could not confirm delivery", "Delivery failed" (source → target · kind).
198
198
 
199
+ "Asking you a question" is a kiro V3 question card, posted to the instance's chat with a button per answer and a box
200
+ for answering in words (on Discord/Telegram: reply to the post); an MCP input request offers Decline / Cancel and is
201
+ filled in at the terminal (View).
199
202
  A prompt shows its own answer buttons (first answer wins); a delivery has **Acknowledge** (clears it everywhere);
200
203
  "Paused: sign-in needed" has **Sign in** when the dashboard can run that login (#2233); every item has **Open chat**. **Notify me on this device** (Turn on / Turn off) gives desktop notifications while the
201
204
  tab is hidden — per browser, not on phones or plain-HTTP addresses. Config: `needs_you.live_message` (default on),
@@ -261,6 +264,10 @@ Click a team header to fold it. **Find** dims everything that doesn't match. A c
261
264
  and backend; clicking it opens the chat. List mode adds the description, model, a link to the Discord thread or
262
265
  Telegram topic, and **Open chat**.
263
266
 
267
+ **The Office guide** (`docs/office.md` in the AgEnD repository; `docs/office.zh-TW.md` in Traditional Chinese) is the one page for people: setting up offices, the
268
+ skin-pack manifest format and its limits, Edit layout and seat reservations, bedtime, share links, agents' office and
269
+ pack tools, and rolling back. Point people there for more than the summary below; it marks what is not released yet.
270
+
264
271
  **Office** (the third view, remembered per device) draws the same fleet as a pixel office: a room per team, a desk
265
272
  per instance with a name tag, General and "Not in a team" in the **Lobby**. Each little person is its state: typing
266
273
  with the lamp on (working), tea break (idle), asleep behind a **Closed** sign (paused/stopped), a hand up under a
@@ -275,7 +282,11 @@ in each (whole teams or single instances; none = everyone) and its style, and up
275
282
  artist's pictures: `manifest.json` plus PNGs, format v1, kept in `web-office-skins/` in the AgEnD home; the host
276
283
  checks every rule — PNG only, each strip exactly frames·w × h, a 16:9 background, size caps — and never changes a
277
284
  pack; a strip may give its displayed size, `dw`/`dh`, apart from its pictures' size, and a character may walk four
278
- ways with `walkDown`, `walkUp` and `walkSide`, the side one mirrored for left). **Style** (per browser for the whole fleet, per office for a stored one): **Desks**,
285
+ ways with `walkDown`, `walkUp` and `walkSide`, the side one mirrored for left). #2692: an agent with **Office skin
286
+ packs** on (`office_pack_access`, Dashboard access) can check, upload, replace, delete and restore packs itself (one
287
+ previous version kept per pack); **Agents changing packs** under the packs names those agents, sets whether their changes
288
+ **Need my yes** (the default) or **Apply at once**, and approves or rejects the waiting ones (also from the notice's
289
+ buttons in General); every change is logged and told in General. **Style** (per browser for the whole fleet, per office for a stored one): **Desks**,
279
290
  **Studio** (one scene — Work, Lounge, Help desk, Nap corner — where each instance walks to the area for its state),
280
291
  **Cozy** (#2631: the same in a warm pixel-art office drawn as one picture; its notice board says a skin pack can
281
292
  restyle it; the default for a browser that has not picked a style and for a new office — a saved office keeps its
@@ -285,7 +296,10 @@ Cozy or a pack,
285
296
  waypoints (or Tab to one and use the arrow keys, Shift for 10), add or remove waypoints and join or unjoin
286
297
  corridors; an item that sleeps at bedtime (a pack's `night`) has a night handle too ("Item {id} (night)": its night
287
298
  picture faint, a moon, a line to its day place; on the day place while it sleeps in place) — drag it to give the item
288
- its own night place, **Back to the pack's night place** undoes it (#2665); **Save layout** keeps the moves as that
299
+ its own night place, **Back to the pack's night place** undoes it (#2665); a selected seat has **Reserved for** (the
300
+ office's members, several allowed) and **Lend when away** (#2691) — whoever it is for sits there first when they come
301
+ to its area, nobody else does unless it is lent while they are all away (a borrower moves off when one comes), and a
302
+ reserved seat's handle is ringed; a pack can reserve seats as well; **Save layout** keeps the moves as that
289
303
  office's overrides (the pack stays as uploaded), **Reset** goes back to the pack's own. On a screen ≥1200 px its controls sit in the right-hand panel (the canvas whole for the
290
304
  handles); narrower, or in fullscreen, they are the bar along the canvas's bottom. Esc is Cancel. While either editor
291
305
  is docked the page beside it works, Ctrl+K search included; leaving the page with unsaved changes asks first
@@ -329,6 +343,10 @@ A pack may add a `foreground` (a 16:9 PNG over the whole scene, zones packs only
329
343
  and items in the air, below name tags, bubbles and "+N" — door frames, pillars, table fronts that hide whoever walks
330
344
  behind them. A furniture item's `depth` may be `"y"`: drawn among the people by base y (whoever stands lower is in
331
345
  front). Numeric depths keep their meaning (under 1000 under the people, 1000 and up over them).
346
+ An item with `activeWhen` may wait for its person (#2698): `"activeOn": "seated"` turns it active only once one of its
347
+ `activeFor` people in that state has arrived at their seat, and back as they walk off (default `"state"`: as the state
348
+ changes); `"hides": true` (needs `activeFor`) stops drawing those people while it is active (walking, they are drawn),
349
+ puts their name tags (one row at the item's tag point) and bubbles on it, and makes hovering or clicking it hit them.
332
350
  A pack may set `"straight": true` (#2634): each diagonal leg of a walk becomes an L (across, then up or down), so the
333
351
  three walking strips always fit; lay its graph out with horizontal and vertical edges and the corners land on the aisles.
334
352
 
@@ -39,7 +39,7 @@ export const HOT_INSTANCE_CONFIG_KEYS = new Set([
39
39
  // #2303: the fleet reads it at each task board claim; the daemon only keeps it current.
40
40
  "board_cards_at_once",
41
41
  // The fleet reads it at each tool call; the daemon keeps it current for the next spawn's tool menu.
42
- "dashboard", "office_access",
42
+ "dashboard", "office_access", "office_pack_access",
43
43
  ]);
44
44
  /**
45
45
  * The hot keys a ClassicBot channel edit can use.
@@ -75,7 +75,7 @@ const INSTANCE_FIELDS = [
75
75
  // #2303: read by the fleet at each task board claim.
76
76
  "board_cards_at_once",
77
77
  // Read by the fleet at each tool call (dashboard-permissions.ts).
78
- "dashboard", "office_access",
78
+ "dashboard", "office_access", "office_pack_access",
79
79
  ];
80
80
  /** ClassicBot channel fields the settings page renders. */
81
81
  const CLASSIC_FIELDS = [
@@ -1 +1 @@
1
- {"version":3,"file":"instance-config-impact.js","sourceRoot":"","sources":["../src/instance-config-impact.ts"],"names":[],"mappings":"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"}
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"}
@@ -108,6 +108,10 @@ export interface LifecycleContext {
108
108
  notifyInstanceTopic(name: string, text: string): boolean | void;
109
109
  /** Notify the blocked instance and offer an interactive assist action in General. */
110
110
  notifyInteractivePrompt(name: string, kind: string): Promise<void>;
111
+ /** #2675: a card the CLI shows in place of its composer: put it to the people who talk to the instance, with its answers. */
112
+ postRemoteCard?(name: string, card: import("./backend/types.js").RemoteCard): Promise<void>;
113
+ /** #2675: that card is gone from the screen: its post's buttons collapse. */
114
+ retireRemoteCard?(name: string, identity: string | null): void;
111
115
  /** #1386: an instance's interaction observation, pause or wake changed ("Needs you" recomputes at once, not at its tick). */
112
116
  onAttentionChanged?(name: string): void;
113
117
  /**
@@ -940,6 +940,13 @@ export class InstanceLifecycle {
940
940
  }
941
941
  await this.ctx.notifyInteractivePrompt(name, data.kind);
942
942
  }, this.ctx.logger, `daemon.interactive_prompt[${name}]`));
943
+ daemon.on("remote_card", safeHandler(async (data) => {
944
+ this.ctx.eventLog?.insert(name, "remote_card", { kind: data.card.kind });
945
+ await this.ctx.postRemoteCard?.(name, data.card);
946
+ }, this.ctx.logger, `daemon.remote_card[${name}]`));
947
+ daemon.on("remote_card_gone", safeHandler((data) => {
948
+ this.ctx.retireRemoteCard?.(name, data.identity);
949
+ }, this.ctx.logger, `daemon.remote_card_gone[${name}]`));
943
950
  daemon.on("pty_error", safeHandler(async (data) => {
944
951
  this.ctx.eventLog?.insert(name, "pty_error", { type: data.type, action: data.action });
945
952
  this.ctx.logger.warn({ name, errorType: data.type, action: data.action }, `PTY error: ${data.message}`);