@songsid/agend 2.3.2-beta.5 → 2.3.2-beta.7

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 (79) hide show
  1. package/dist/backend/kiro-identity.d.ts +11 -0
  2. package/dist/backend/kiro-identity.js +16 -0
  3. package/dist/backend/kiro-identity.js.map +1 -1
  4. package/dist/backend/kiro-retired-model.d.ts +62 -0
  5. package/dist/backend/kiro-retired-model.js +160 -0
  6. package/dist/backend/kiro-retired-model.js.map +1 -0
  7. package/dist/backend/kiro.d.ts +17 -0
  8. package/dist/backend/kiro.js +77 -1
  9. package/dist/backend/kiro.js.map +1 -1
  10. package/dist/channel/adapters/discord.d.ts +11 -0
  11. package/dist/channel/adapters/discord.js +64 -10
  12. package/dist/channel/adapters/discord.js.map +1 -1
  13. package/dist/config-validator.js +25 -3
  14. package/dist/config-validator.js.map +1 -1
  15. package/dist/daemon.d.ts +2 -0
  16. package/dist/daemon.js +5 -0
  17. package/dist/daemon.js.map +1 -1
  18. package/dist/fleet-manager.d.ts +21 -5
  19. package/dist/fleet-manager.js +154 -133
  20. package/dist/fleet-manager.js.map +1 -1
  21. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +14 -1
  22. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +14 -1
  23. package/dist/instance-lifecycle.d.ts +2 -0
  24. package/dist/instance-lifecycle.js +23 -8
  25. package/dist/instance-lifecycle.js.map +1 -1
  26. package/dist/locale.js +16 -0
  27. package/dist/locale.js.map +1 -1
  28. package/dist/notice-delivery.d.ts +7 -6
  29. package/dist/notice-delivery.js +16 -18
  30. package/dist/notice-delivery.js.map +1 -1
  31. package/dist/office-share-page.d.ts +13 -0
  32. package/dist/office-share-page.js +82 -0
  33. package/dist/office-share-page.js.map +1 -0
  34. package/dist/office-share-service.d.ts +89 -0
  35. package/dist/office-share-service.js +172 -0
  36. package/dist/office-share-service.js.map +1 -0
  37. package/dist/office-share.d.ts +228 -0
  38. package/dist/office-share.js +489 -0
  39. package/dist/office-share.js.map +1 -0
  40. package/dist/public-web-gateway.js +6 -0
  41. package/dist/public-web-gateway.js.map +1 -1
  42. package/dist/quickstart.js +0 -2
  43. package/dist/quickstart.js.map +1 -1
  44. package/dist/settings-api.js +1 -1
  45. package/dist/settings-api.js.map +1 -1
  46. package/dist/setup-form.d.ts +1 -1
  47. package/dist/setup-form.js +48 -5
  48. package/dist/setup-form.js.map +1 -1
  49. package/dist/setup-host.js +4 -3
  50. package/dist/setup-host.js.map +1 -1
  51. package/dist/setup-wizard.js +0 -2
  52. package/dist/setup-wizard.js.map +1 -1
  53. package/dist/types.d.ts +12 -3
  54. package/dist/ui/fleet-office-pack.js +7 -2
  55. package/dist/ui/fleet-office-skin.js +5 -4
  56. package/dist/ui/fleet-office-zones.js +17 -6
  57. package/dist/ui/fleet-office.js +20 -10
  58. package/dist/ui/office-share-dialog.js +145 -0
  59. package/dist/ui/office-share-page.js +116 -0
  60. package/dist/ui/panel-settings.js +12 -8
  61. package/dist/ui/settings-registry.js +2 -2
  62. package/dist/ui/settings-strings.js +6 -6
  63. package/dist/ui/shared/app.css +28 -0
  64. package/dist/web-api.d.ts +14 -0
  65. package/dist/web-api.js +91 -0
  66. package/dist/web-api.js.map +1 -1
  67. package/dist/web-office-skins.d.ts +2 -1
  68. package/dist/web-office-skins.js +2 -1
  69. package/dist/web-office-skins.js.map +1 -1
  70. package/dist/web-settings-patch.js +1 -1
  71. package/dist/web-settings-patch.js.map +1 -1
  72. package/dist/working-recovery.d.ts +2 -2
  73. package/dist/working-recovery.js +43 -8
  74. package/dist/working-recovery.js.map +1 -1
  75. package/dist/working-state-journal.d.ts +2 -0
  76. package/dist/working-state-journal.js +16 -1
  77. package/dist/working-state-journal.js.map +1 -1
  78. package/package.json +1 -1
  79. package/templates/windows-shortcuts.ps1 +151 -147
@@ -281,6 +281,15 @@ default; disabled when everyone is in an office) adds the instances in no office
281
281
  only. Hover and click work across
282
282
  tiles; a tile's label, or a double-click on it, opens that office; traffic between offices flies straight across.
283
283
  Edit offices and Edit layout wait for a single office.
284
+ **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
285
+ link: anyone who opens it watches one office (or **All offices**) live, read-only, with no sign-in — names, identity
286
+ colours and states, every 5 s; no chat, no clicks into anything, no settings; agents' `office_set` lines only when
287
+ **Include agents' own status lines** is ticked; hidden instances never. 1 h by default, 15 min to 24 h
288
+ (`web.office_share.max_hours`); at most 10 open. Its own quick tunnel (`https://<random>.trycloudflare.com/o/<token>`)
289
+ 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
290
+ & security → Office share links**; each made or revoked link is announced in General (never its URL). A Cloudflare 429
291
+ says to try again in a few minutes (no retry). `web.office_share.enabled: false` turns it off and ends open links.
292
+
284
293
  The Office fills the Fleet panel and moves like the Canvas (#2540): drag to pan, the wheel or a pinch to zoom,
285
294
  **+** / **−** / **Fit** / **Fill** at the top right (the zoom shown as a percentage above them) or the `+ - 0` keys
286
295
  (with the office focused), an overview at the bottom right to jump (not on a phone). It takes the whole panel: the
@@ -300,6 +309,8 @@ A pack may add a `foreground` (a 16:9 PNG over the whole scene, zones packs only
300
309
  and items in the air, below name tags, bubbles and "+N" — door frames, pillars, table fronts that hide whoever walks
301
310
  behind them. A furniture item's `depth` may be `"y"`: drawn among the people by base y (whoever stands lower is in
302
311
  front). Numeric depths keep their meaning (under 1000 under the people, 1000 and up over them).
312
+ A pack may set `"straight": true` (#2634): each diagonal leg of a walk becomes an L (across, then up or down), so the
313
+ three walking strips always fit; lay its graph out with horizontal and vertical edges and the corners land on the aisles.
303
314
 
304
315
  **Live traffic** (**Live** switch, on by default; **Key** in the toolbar explains it, as a strip above the canvas): a line for each message between instances.
305
316
  Colour by kind — task (delegate_task) purple, send/query/update teal, report pink, broadcast orange; between teams
@@ -476,6 +487,7 @@ opencode: no dashboard sign-in. Config: `web_terminal.*` (as `/login`).
476
487
  | Agent mode, Tool set | `agent_mode`, `tool_set` | agent |
477
488
  | Tool progress; Bot-to-bot messages in topics (full / summary / hidden); Log level | `tool_progress`, `cross_instance_visibility`, `log_level` | now |
478
489
  | Require a delivered reply | `reply_completion_guard` | now |
490
+ | Daily tips (Topic / Off; always posted in General, never by DM) | `tips` | now |
479
491
  | Lightweight mode, Fallback model | `lightweight`, `model_failover` | agent |
480
492
  | System prompt | `systemPrompt` | agent |
481
493
  | Tags | `tags` | now |
@@ -510,11 +522,12 @@ progress, reply guard, **ClassicBot admins**, **Allowed guilds**.
510
522
  | Terminal session minutes (1–20) | `web_terminal.ttl_minutes` |
511
523
  | Web echo | `web.echo_to_channel` |
512
524
  | Log tab: each agent's steps | `web.log_tab` |
525
+ | Web sign-in notices (Topic / Off; never by DM, guest and public-link notices always post) | `web.notify_login` |
513
526
  | Offer temporary public web links | `web.public_link.allow_public` |
514
527
  | Public link minutes (1–480; with a fixed hostname 0–10080, 0 = no expiry) | `web.public_link.ttl_minutes` |
515
528
  | Reopen the public link when AgEnD starts (fixed hostname only) | `web.public_link.auto_open` |
516
529
  | Tunnel protocol (http2 / quic / auto) | `web.public_link.protocol` |
517
- Shown read-only ("Set in fleet.yaml"): `web.allowed_hosts`, `view_access`, `notify_login`, `preview`, `preview_port`,
530
+ Shown read-only ("Set in fleet.yaml"): `web.allowed_hosts`, `view_access`, `preview`, `preview_port`,
518
531
  `preview_origin`, `preview_on_public_link`, `usage_panel`, `search` (`retention_days`: unset and 0 = no age limit,
519
532
  300,000-row cap), `provider_secrets`, `upload_max_file_mb`,
520
533
  `upload_max_total_mb`, `web_terminal.bind`, `web_terminal.tunnel`.
@@ -296,6 +296,15 @@ default; disabled when everyone is in an office) adds the instances in no office
296
296
  only. Hover and click work across
297
297
  tiles; a tile's label, or a double-click on it, opens that office; traffic between offices flies straight across.
298
298
  Edit offices and Edit layout wait for a single office.
299
+ **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
300
+ link: anyone who opens it watches one office (or **All offices**) live, read-only, with no sign-in — names, identity
301
+ colours and states, every 5 s; no chat, no clicks into anything, no settings; agents' `office_set` lines only when
302
+ **Include agents' own status lines** is ticked; hidden instances never. 1 h by default, 15 min to 24 h
303
+ (`web.office_share.max_hours`); at most 10 open. Its own quick tunnel (`https://<random>.trycloudflare.com/o/<token>`)
304
+ 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
305
+ & security → Office share links**; each made or revoked link is announced in General (never its URL). A Cloudflare 429
306
+ says to try again in a few minutes (no retry). `web.office_share.enabled: false` turns it off and ends open links.
307
+
299
308
  The Office fills the Fleet panel and moves like the Canvas (#2540): drag to pan, the wheel or a pinch to zoom,
300
309
  **+** / **−** / **Fit** / **Fill** at the top right (the zoom shown as a percentage above them) or the `+ - 0` keys
301
310
  (with the office focused), an overview at the bottom right to jump (not on a phone). It takes the whole panel: the
@@ -315,6 +324,8 @@ A pack may add a `foreground` (a 16:9 PNG over the whole scene, zones packs only
315
324
  and items in the air, below name tags, bubbles and "+N" — door frames, pillars, table fronts that hide whoever walks
316
325
  behind them. A furniture item's `depth` may be `"y"`: drawn among the people by base y (whoever stands lower is in
317
326
  front). Numeric depths keep their meaning (under 1000 under the people, 1000 and up over them).
327
+ A pack may set `"straight": true` (#2634): each diagonal leg of a walk becomes an L (across, then up or down), so the
328
+ three walking strips always fit; lay its graph out with horizontal and vertical edges and the corners land on the aisles.
318
329
 
319
330
  **Live traffic** (**Live** switch, on by default; **Key** in the toolbar explains it, as a strip above the canvas): a line for each message between instances.
320
331
  Colour by kind — task (delegate_task) purple, send/query/update teal, report pink, broadcast orange; between teams
@@ -491,6 +502,7 @@ opencode: no dashboard sign-in. Config: `web_terminal.*` (as `/login`).
491
502
  | Agent mode, Tool set | `agent_mode`, `tool_set` | agent |
492
503
  | Tool progress; Bot-to-bot messages in topics (full / summary / hidden); Log level | `tool_progress`, `cross_instance_visibility`, `log_level` | now |
493
504
  | Require a delivered reply | `reply_completion_guard` | now |
505
+ | Daily tips (Topic / Off; always posted in General, never by DM) | `tips` | now |
494
506
  | Lightweight mode, Fallback model | `lightweight`, `model_failover` | agent |
495
507
  | System prompt | `systemPrompt` | agent |
496
508
  | Tags | `tags` | now |
@@ -525,11 +537,12 @@ progress, reply guard, **ClassicBot admins**, **Allowed guilds**.
525
537
  | Terminal session minutes (1–20) | `web_terminal.ttl_minutes` |
526
538
  | Web echo | `web.echo_to_channel` |
527
539
  | Log tab: each agent's steps | `web.log_tab` |
540
+ | Web sign-in notices (Topic / Off; never by DM, guest and public-link notices always post) | `web.notify_login` |
528
541
  | Offer temporary public web links | `web.public_link.allow_public` |
529
542
  | Public link minutes (1–480; with a fixed hostname 0–10080, 0 = no expiry) | `web.public_link.ttl_minutes` |
530
543
  | Reopen the public link when AgEnD starts (fixed hostname only) | `web.public_link.auto_open` |
531
544
  | Tunnel protocol (http2 / quic / auto) | `web.public_link.protocol` |
532
- Shown read-only ("Set in fleet.yaml"): `web.allowed_hosts`, `view_access`, `notify_login`, `preview`, `preview_port`,
545
+ Shown read-only ("Set in fleet.yaml"): `web.allowed_hosts`, `view_access`, `preview`, `preview_port`,
533
546
  `preview_origin`, `preview_on_public_link`, `usage_panel`, `search` (`retention_days`: unset and 0 = no age limit,
534
547
  300,000-row cap), `provider_secrets`, `upload_max_file_mb`,
535
548
  `upload_max_total_mb`, `web_terminal.bind`, `web_terminal.tunnel`.
@@ -201,6 +201,8 @@ export interface IncidentEventSource {
201
201
  isCodexLivePane?(): Promise<boolean>;
202
202
  /** Existing occurrence count used to preserve Codex capacity history on restart. */
203
203
  getErrorPatternOccurrenceCount?(type: "model_error", pattern: RegExp): number;
204
+ /** #2648: kiro only — what a model error on its current launch should do (restart once, say once, or nothing). */
205
+ kiroModelError?(): import("./backend/kiro-retired-model.js").KiroModelErrorVerdict | null;
204
206
  /** Present on real daemons; hang buttons attach only when it returns one. */
205
207
  getHangDetector?(): {
206
208
  on(event: string, handler: (...args: any[]) => void): unknown;
@@ -1012,15 +1012,30 @@ export class InstanceLifecycle {
1012
1012
  return;
1013
1013
  }
1014
1014
  }
1015
+ // #2648: a kiro model error — the resumed conversation's saved model retired, or the instance's own model
1016
+ // unavailable. Restart once on kiro's default (no model of its own), else say it once; never on every start.
1017
+ const kiroVerdict = data.type === "model_error" && this.backendOf(name) === "kiro-cli" ? daemon.kiroModelError?.() ?? null : null;
1018
+ if (kiroVerdict?.kind === "restart") {
1019
+ this.ctx.logger.warn({ name, model: kiroVerdict.model }, "kiro model unavailable on a resumed conversation — restarting once on kiro's default model");
1020
+ this.ctx.clearCancelButton(name);
1021
+ this.ctx.restartSingleInstance(name).catch(err => this.ctx.logger.error({ err, name }, "kiro model-switch restart failed"));
1022
+ return;
1023
+ }
1024
+ if (kiroVerdict?.kind === "quiet") {
1025
+ this.ctx.logger.info({ name }, "kiro model unavailable — already said for this conversation and model");
1026
+ return;
1027
+ }
1015
1028
  const emoji = data.type === "rate_limit" || data.type === "timeout" ? "⏳" : data.type === "auth_error" ? "🔑" : "⚠️";
1016
- const incidentMessage = data.type === "model_error" && this.backendOf(name) === "claude-code"
1017
- ? (() => {
1018
- const liveModel = readStatuslineModel(this.ctx.dataDir, name);
1019
- return liveModel
1020
- ? t("inst.claude_model_fallback", liveModel)
1021
- : t("inst.claude_model_unavailable");
1022
- })()
1023
- : data.message;
1029
+ const incidentMessage = kiroVerdict?.kind === "notify"
1030
+ ? (kiroVerdict.configured ? t("kiro.model_unavailable_configured", name, kiroVerdict.configured) : t("kiro.model_unavailable_once", name))
1031
+ : data.type === "model_error" && this.backendOf(name) === "claude-code"
1032
+ ? (() => {
1033
+ const liveModel = readStatuslineModel(this.ctx.dataDir, name);
1034
+ return liveModel
1035
+ ? t("inst.claude_model_fallback", liveModel)
1036
+ : t("inst.claude_model_unavailable");
1037
+ })()
1038
+ : data.message;
1024
1039
  const notificationTarget = this.ptyErrorNotificationTarget(name);
1025
1040
  // Auth failures are a property of the BACKEND's shared credentials, not of
1026
1041
  // one instance: every instance on that CLI fails at once, and one re-login