@songsid/agend 2.3.2-beta.3 → 2.3.2-beta.5
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.
- package/THIRD_PARTY_NOTICES.md +40 -0
- package/dist/agent-cli.js +21 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +5 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/antigravity-usage-scan.d.ts +58 -0
- package/dist/antigravity-usage-scan.js +257 -0
- package/dist/antigravity-usage-scan.js.map +1 -0
- package/dist/antigravity-usage-worker.d.ts +1 -0
- package/dist/antigravity-usage-worker.js +10 -0
- package/dist/antigravity-usage-worker.js.map +1 -0
- package/dist/auth-api.js +2 -0
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/kiro-identity.d.ts +45 -0
- package/dist/backend/kiro-identity.js +74 -0
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +36 -1
- package/dist/backend/kiro.js +131 -6
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/types.d.ts +6 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-signin-guide.d.ts +1 -0
- package/dist/backend-signin-guide.js +9 -0
- package/dist/backend-signin-guide.js.map +1 -0
- package/dist/backend-signin-pending.d.ts +10 -0
- package/dist/backend-signin-pending.js +44 -0
- package/dist/backend-signin-pending.js.map +1 -0
- package/dist/browser-backend-signins.d.ts +56 -0
- package/dist/browser-backend-signins.js +189 -0
- package/dist/browser-backend-signins.js.map +1 -0
- package/dist/cache-ledger.d.ts +38 -2
- package/dist/cache-ledger.js +133 -8
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-prices.d.ts +2 -1
- package/dist/cache-prices.js +5 -2
- package/dist/cache-prices.js.map +1 -1
- package/dist/cache-service.d.ts +68 -0
- package/dist/cache-service.js +355 -13
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.js +7 -4
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/mcp-tools.js +7 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/classic-channel-manager.d.ts +5 -0
- package/dist/classic-channel-manager.js +14 -1
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +21 -2
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +22 -5
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +19 -0
- package/dist/config.js +31 -1
- package/dist/config.js.map +1 -1
- package/dist/cpu-quota.d.ts +23 -0
- package/dist/cpu-quota.js +86 -0
- package/dist/cpu-quota.js.map +1 -0
- package/dist/daemon.js +22 -7
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard-permissions.d.ts +20 -6
- package/dist/dashboard-permissions.js +58 -9
- package/dist/dashboard-permissions.js.map +1 -1
- package/dist/fleet-manager.d.ts +51 -1
- package/dist/fleet-manager.js +416 -32
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +5 -2
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +14 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +24 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +24 -1
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +6 -3
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +12 -5
- package/dist/instance-config-impact.js +10 -5
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +17 -0
- package/dist/instance-lifecycle.js +32 -4
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/kiro-db-reader.d.ts +5 -0
- package/dist/kiro-db-reader.js +18 -0
- package/dist/kiro-db-reader.js.map +1 -1
- package/dist/kiro-engine-status.d.ts +2 -0
- package/dist/kiro-engine-status.js +9 -0
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/kiro-migrate.d.ts +49 -0
- package/dist/kiro-migrate.js +105 -0
- package/dist/kiro-migrate.js.map +1 -0
- package/dist/kiro-transcript-lane.d.ts +2 -0
- package/dist/kiro-transcript-lane.js.map +1 -1
- package/dist/kiro-transcript-worker.js +1 -0
- package/dist/kiro-transcript-worker.js.map +1 -1
- package/dist/kiro-usage-run.d.ts +7 -0
- package/dist/kiro-usage-run.js +39 -0
- package/dist/kiro-usage-run.js.map +1 -0
- package/dist/kiro-usage-scan.d.ts +49 -0
- package/dist/kiro-usage-scan.js +223 -0
- package/dist/kiro-usage-scan.js.map +1 -0
- package/dist/kiro-usage-worker.d.ts +1 -0
- package/dist/kiro-usage-worker.js +10 -0
- package/dist/kiro-usage-worker.js.map +1 -0
- package/dist/kiro-usage.d.ts +58 -0
- package/dist/kiro-usage.js +310 -0
- package/dist/kiro-usage.js.map +1 -0
- package/dist/locale.js +72 -8
- package/dist/locale.js.map +1 -1
- package/dist/log-service.js +1 -1
- package/dist/log-service.js.map +1 -1
- package/dist/login-url.d.ts +4 -0
- package/dist/login-url.js +22 -0
- package/dist/login-url.js.map +1 -0
- package/dist/needs-you-hub.d.ts +2 -1
- package/dist/needs-you-hub.js +1 -1
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +8 -2
- package/dist/needs-you.js +6 -0
- package/dist/needs-you.js.map +1 -1
- package/dist/notice-delivery.d.ts +15 -0
- package/dist/notice-delivery.js +37 -0
- package/dist/notice-delivery.js.map +1 -0
- package/dist/opencode-usage-scan.d.ts +28 -0
- package/dist/opencode-usage-scan.js +92 -0
- package/dist/opencode-usage-scan.js.map +1 -0
- package/dist/opencode-usage-worker.d.ts +1 -0
- package/dist/opencode-usage-worker.js +10 -0
- package/dist/opencode-usage-worker.js.map +1 -0
- package/dist/outbound-handlers.js +22 -2
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +24 -0
- package/dist/outbound-schemas.js +21 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +1 -1
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/quickstart-api.js +13 -2
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.js +4 -1
- package/dist/quickstart.js.map +1 -1
- package/dist/reply-triggers.d.ts +2 -0
- package/dist/reply-triggers.js +3 -0
- package/dist/reply-triggers.js.map +1 -0
- package/dist/settings-api.js +27 -4
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +17 -14
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +7 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-instance-patch.js +4 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +7 -1
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-host.d.ts +9 -0
- package/dist/setup-host.js +126 -6
- package/dist/setup-host.js.map +1 -1
- package/dist/setup-signin-assets.d.ts +2 -0
- package/dist/setup-signin-assets.js +6 -0
- package/dist/setup-signin-assets.js.map +1 -0
- package/dist/setup-wizard.js +4 -0
- package/dist/setup-wizard.js.map +1 -1
- package/dist/structured-signin-transport.d.ts +8 -0
- package/dist/structured-signin-transport.js +79 -0
- package/dist/structured-signin-transport.js.map +1 -0
- package/dist/structured-signin.d.ts +131 -0
- package/dist/structured-signin.js +388 -0
- package/dist/structured-signin.js.map +1 -0
- package/dist/tool-permissions.js +12 -0
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.js +6 -2
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-sources.d.ts +26 -2
- package/dist/transcript-sources.js +87 -40
- package/dist/transcript-sources.js.map +1 -1
- package/dist/turn-reply-guard.d.ts +1 -1
- package/dist/turn-reply-guard.js +1 -1
- package/dist/turn-reply-guard.js.map +1 -1
- package/dist/types.d.ts +19 -8
- package/dist/ui/backend-signin.js +63 -10
- package/dist/ui/fleet-office-editor.js +10 -6
- package/dist/ui/fleet-office-layout.js +34 -28
- package/dist/ui/fleet-office-model.js +6 -3
- package/dist/ui/fleet-office-overview.js +2 -2
- package/dist/ui/fleet-office-pack.d.ts +3 -1
- package/dist/ui/fleet-office-pack.js +58 -7
- package/dist/ui/fleet-office-skin.js +13 -4
- package/dist/ui/fleet-office-store.js +27 -1
- package/dist/ui/fleet-office-view.js +5 -4
- package/dist/ui/fleet-office-zones.js +155 -6
- package/dist/ui/fleet-office.js +169 -41
- package/dist/ui/fleet-usage.js +19 -15
- package/dist/ui/panel-log.js +2 -2
- package/dist/ui/panel-needs.js +4 -4
- package/dist/ui/panel-settings.js +32 -10
- package/dist/ui/settings-dialogs.js +8 -1
- package/dist/ui/settings-model.js +14 -6
- package/dist/ui/settings-registry.js +4 -0
- package/dist/ui/settings-strings.js +14 -0
- package/dist/ui/shared/app-i18n.js +4 -2
- package/dist/ui/shared/app-shell.js +14 -6
- package/dist/ui/shared/app-stream.js +2 -1
- package/dist/ui/shared/app.css +18 -2
- package/dist/ui/shared/side-panel.js +95 -0
- package/dist/ui/structured-signin.js +115 -0
- package/dist/usage-report.d.ts +20 -0
- package/dist/usage-report.js +54 -17
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.d.ts +9 -1
- package/dist/usage-rollup.js +20 -4
- package/dist/usage-rollup.js.map +1 -1
- package/dist/web-api.d.ts +4 -0
- package/dist/web-api.js +110 -0
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.js +1 -1
- package/dist/web-auth.js.map +1 -1
- package/dist/web-backend-login.d.ts +1 -7
- package/dist/web-backend-login.js +2 -24
- package/dist/web-backend-login.js.map +1 -1
- package/dist/web-office-acts.d.ts +173 -0
- package/dist/web-office-acts.js +285 -0
- package/dist/web-office-acts.js.map +1 -0
- package/dist/web-office-skins.d.ts +1 -1
- package/dist/web-office-skins.js +1 -1
- package/dist/web-office-skins.js.map +1 -1
- package/dist/web-settings-patch.d.ts +2 -1
- package/dist/web-settings-patch.js +4 -1
- package/dist/web-settings-patch.js.map +1 -1
- package/package.json +2 -1
- package/templates/windows-shortcuts.ps1 +18 -7
|
@@ -156,8 +156,11 @@ left untouched; the switch copies, never moves.
|
|
|
156
156
|
- `conversation_carried_over: true` — the copy succeeded and the agent resumed
|
|
157
157
|
the same conversation on the new account. The reply also carries
|
|
158
158
|
`conversation_note`: relay it. It says the old copy is still there and
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
notes that the switch does not by itself make the prompt cache cold: within
|
|
160
|
+
the same cache scope (organization, and workspace where the provider isolates
|
|
161
|
+
them) an unchanged model and prompt prefix are usually reused. The next turn
|
|
162
|
+
may rebuild it (one slower, full-price turn) when the scope, the model or the
|
|
163
|
+
profile's settings differ, or the cache has expired. Don't promise either.
|
|
161
164
|
|
|
162
165
|
- `conversation_carried_over: false` + `carry_failed: "<reason>"` — the copy
|
|
163
166
|
could not be made. Common reasons: no session id recorded, not enough free
|
|
@@ -51,10 +51,23 @@ The user has already been shown the plain notice in this topic. When they ask, e
|
|
|
51
51
|
|
|
52
52
|
- Never start, restart, recreate or replace a stopped kiro instance to "try again". It will refuse the same way.
|
|
53
53
|
- Never change `kiro_ui` or `backend` to get an instance running. A different engine starts a different
|
|
54
|
-
conversation, and the move cannot be undone.
|
|
54
|
+
conversation, and the move cannot be undone. The one way an instance changes engine is the move below.
|
|
55
55
|
- Never run `kiro-cli` yourself, and never delete or edit anything under `~/.kiro` or kiro's data directory.
|
|
56
56
|
- Never reply to the `[system:kiro-incompat]` notice itself. It is information, not a request.
|
|
57
57
|
|
|
58
|
+
## Moving an instance from classic to the TUI engine (#2598)
|
|
59
|
+
|
|
60
|
+
kiro-cli 3.0 drops the classic engine (`kiro_ui: legacy`), so classic instances are being moved to the TUI engine,
|
|
61
|
+
**one batch at a time and only with the user's OK for that batch**. The move is `migrate_kiro_instance` (a
|
|
62
|
+
coordinator-level tool; you do not have it). It carries the conversation: the instance's classic conversation is
|
|
63
|
+
resumed once under the TUI and becomes its own. A fleet admin confirms each move in this General topic: a
|
|
64
|
+
"Move it / Cancel" prompt. Explain it if asked; never press it on the user's behalf.
|
|
65
|
+
|
|
66
|
+
- After the move, `kiro_engine_status` shows `kiro_ui: tui` and `engine_floor: "tui"`.
|
|
67
|
+
- It is one-way. AgEnD refuses to launch a moved instance on classic again, because that would resume the frozen
|
|
68
|
+
classic copy and lose everything done since. A refusal that names the engine floor means someone set `kiro_ui`
|
|
69
|
+
back. The fix is to set it to `tui` again, never to remove the floor.
|
|
70
|
+
|
|
58
71
|
## One kiro agent per instance (#906)
|
|
59
72
|
|
|
60
73
|
Since kiro-cli 2.21, each AgEnD kiro instance (tui / v2 engine) runs as its own kiro agent, holding only its own
|
|
@@ -20,6 +20,7 @@ can shape how you look there — **only your own look, and only on the surfaces
|
|
|
20
20
|
| Your identity colour | the colour people find you by in the sidebar, and where it shows (name, bar, ring) | `set_web_theme` (`identity`) |
|
|
21
21
|
| Your chat header strip and Details page | widgets: small panels of facts the dashboard draws | `set_web_widget`, `remove_web_widget` |
|
|
22
22
|
| An ambient effect in your chat | falling petals, snow, rising lanterns, twinkles, stars where a person clicks — data only, drawn by the dashboard | `set_web_ambient`, `clear_web_ambient` |
|
|
23
|
+
| Your character in Fleet → Org chart → Office | walk to a seat, a spot or a person, say a short line, hold a pose — for a few seconds (off until a person switches it on) | `office_view`, `office_set` |
|
|
23
24
|
|
|
24
25
|
None of these tools takes a target: they always act on you. You can't change another instance, the dashboard's own
|
|
25
26
|
chrome (beyond your colours on it while your chat is open), a person's sidebar widget, or a person's custom CSS.
|
|
@@ -265,6 +266,28 @@ needs no Try, no preview consent and no measurement — use it for petals, snow,
|
|
|
265
266
|
|
|
266
267
|
Then stars on a click, alongside: `set_web_ambient { "preset": "burst-on-click", "glyphs": ["✦", "✧"] }`.
|
|
267
268
|
|
|
269
|
+
## Your character in the Office view
|
|
270
|
+
|
|
271
|
+
Fleet → Org chart → **Office** draws the fleet as an office, with a little character per agent placed by its state.
|
|
272
|
+
When a person switches the **office** dashboard feature on for you (`office_access: true`; off until then — the tools
|
|
273
|
+
are not in your list), you can direct your own character for a moment:
|
|
274
|
+
|
|
275
|
+
- `office_view { office? }`: the stored offices you are in — each `{ id, name, skin, members: [{ name, display_name?,
|
|
276
|
+
state }], spots: { seats: [{ area, index, x, y }], waypoints: [{ id, x, y }], npcs: [{ id, label, x, y }], door } }` —
|
|
277
|
+
your current `act` (or null) and `cooldown_ms` (0: you may act now). `walks: false`: the office is drawn as desks (a
|
|
278
|
+
built-in style such as pixel or studio, or a pack without zones) — no spots; `say` and `pose` show, `go` is refused.
|
|
279
|
+
- `office_set { office?, go?, say?, pose?, seconds?, clear? }`: `go` is exactly one of `seat` (`"area:index"`, as
|
|
280
|
+
office_view lists it), `waypoint` (an id) or `person` (a member of the same office); `say` a line of 1..40 characters
|
|
281
|
+
(a speech bubble); `pose` one of idle, working, needs, paused; `seconds` 5..120 (default 30). `clear: true`, alone,
|
|
282
|
+
ends your act. `office` is needed only when you are in more than one.
|
|
283
|
+
- Each call replaces your act. It ends when its seconds are up or you begin new work (the turn you set it in, and being
|
|
284
|
+
idle after, keep it; working again after that, or after setting it while idle, ends it); it is not shown while you
|
|
285
|
+
need a person (needs, crashed, stuck), are paused or stopped, or are asleep at bedtime — real work always shows. At most **6 calls a minute** and **60 an hour**: a refusal says `cooldown_ms`.
|
|
286
|
+
|
|
287
|
+
```json
|
|
288
|
+
{ "go": { "person": "atlas" }, "say": "Review's ready", "seconds": 20 }
|
|
289
|
+
```
|
|
290
|
+
|
|
268
291
|
## Limits
|
|
269
292
|
|
|
270
293
|
- At least **30 s** between changes, at most **10 changes an hour** — refused with `rate_limited` and
|
|
@@ -286,7 +309,7 @@ Then stars on a click, alongside: `set_web_ambient { "preset": "burst-on-click",
|
|
|
286
309
|
From a shell: `agend-agent theme get|set key=value…|set --json '<patch>'|clear <path>…|asset <slot> <file>|reset`,
|
|
287
310
|
`agend-agent appearance`, `agend-agent appearance preview [light|dark]`, and
|
|
288
311
|
`agend-agent widget set <slot> '<spec json>' ['<data json>']|data <slot> '<data json>'|remove [slot]`,
|
|
289
|
-
`agend-agent ambient set '<spec json>'|clear [loop|click]`.
|
|
312
|
+
`agend-agent ambient set '<spec json>'|clear [loop|click]`, `agend-agent office view [office]|set '<json>'`.
|
|
290
313
|
|
|
291
314
|
## Files in your working directory
|
|
292
315
|
|
|
@@ -20,6 +20,7 @@ can shape how you look there — **only your own look, and only on the surfaces
|
|
|
20
20
|
| Your identity colour | the colour people find you by in the sidebar, and where it shows (name, bar, ring) | `set_web_theme` (`identity`) |
|
|
21
21
|
| Your chat header strip and Details page | widgets: small panels of facts the dashboard draws | `set_web_widget`, `remove_web_widget` |
|
|
22
22
|
| An ambient effect in your chat | falling petals, snow, rising lanterns, twinkles, stars where a person clicks — data only, drawn by the dashboard | `set_web_ambient`, `clear_web_ambient` |
|
|
23
|
+
| Your character in Fleet → Org chart → Office | walk to a seat, a spot or a person, say a short line, hold a pose — for a few seconds (off until a person switches it on) | `office_view`, `office_set` |
|
|
23
24
|
| A file of your look | a mod: export yours, or propose one for a person | `export_web_mod`, `propose_web_mod` |
|
|
24
25
|
| Effects in your chat | Canvas Worker animations, and Try cards an admin outside the public link may start | `upload_web_effect`, `apply_web_effect`, `preview_web_effect`, … (see Effects) |
|
|
25
26
|
|
|
@@ -273,6 +274,28 @@ Use a Canvas Worker effect (below) only for what a preset can't express.
|
|
|
273
274
|
|
|
274
275
|
Then stars on a click, alongside: `set_web_ambient { "preset": "burst-on-click", "glyphs": ["✦", "✧"] }`.
|
|
275
276
|
|
|
277
|
+
## Your character in the Office view
|
|
278
|
+
|
|
279
|
+
Fleet → Org chart → **Office** draws the fleet as an office, with a little character per agent placed by its state.
|
|
280
|
+
When a person switches the **office** dashboard feature on for you (`office_access: true`; off until then — the tools
|
|
281
|
+
are not in your list), you can direct your own character for a moment:
|
|
282
|
+
|
|
283
|
+
- `office_view { office? }`: the stored offices you are in — each `{ id, name, skin, members: [{ name, display_name?,
|
|
284
|
+
state }], spots: { seats: [{ area, index, x, y }], waypoints: [{ id, x, y }], npcs: [{ id, label, x, y }], door } }` —
|
|
285
|
+
your current `act` (or null) and `cooldown_ms` (0: you may act now). `walks: false`: the office is drawn as desks (a
|
|
286
|
+
built-in style such as pixel or studio, or a pack without zones) — no spots; `say` and `pose` show, `go` is refused.
|
|
287
|
+
- `office_set { office?, go?, say?, pose?, seconds?, clear? }`: `go` is exactly one of `seat` (`"area:index"`, as
|
|
288
|
+
office_view lists it), `waypoint` (an id) or `person` (a member of the same office); `say` a line of 1..40 characters
|
|
289
|
+
(a speech bubble); `pose` one of idle, working, needs, paused; `seconds` 5..120 (default 30). `clear: true`, alone,
|
|
290
|
+
ends your act. `office` is needed only when you are in more than one.
|
|
291
|
+
- Each call replaces your act. It ends when its seconds are up or you begin new work (the turn you set it in, and being
|
|
292
|
+
idle after, keep it; working again after that, or after setting it while idle, ends it); it is not shown while you
|
|
293
|
+
need a person (needs, crashed, stuck), are paused or stopped, or are asleep at bedtime — real work always shows. At most **6 calls a minute** and **60 an hour**: a refusal says `cooldown_ms`.
|
|
294
|
+
|
|
295
|
+
```json
|
|
296
|
+
{ "go": { "person": "atlas" }, "say": "Review's ready", "seconds": 20 }
|
|
297
|
+
```
|
|
298
|
+
|
|
276
299
|
## Mods
|
|
277
300
|
|
|
278
301
|
A mod is one file, `<name>-<version>.agendmod.json`, that carries a look: a theme with its pictures, card text,
|
|
@@ -322,7 +345,7 @@ with the tools above, then `export_web_mod`.
|
|
|
322
345
|
From a shell: `agend-agent theme get|set key=value…|set --json '<patch>'|clear <path>…|asset <slot> <file>|reset`,
|
|
323
346
|
`agend-agent appearance`, `agend-agent appearance preview [light|dark]`, and
|
|
324
347
|
`agend-agent widget set <slot> '<spec json>' ['<data json>']|data <slot> '<data json>'|remove [slot]`,
|
|
325
|
-
`agend-agent ambient set '<spec json>'|clear [loop|click]`, and
|
|
348
|
+
`agend-agent ambient set '<spec json>'|clear [loop|click]`, `agend-agent office view [office]|set '<json>'`, and
|
|
326
349
|
`agend-agent mod export <name> <version> [title]|propose <file>`.
|
|
327
350
|
|
|
328
351
|
## Files in your working directory
|
|
@@ -377,11 +377,14 @@ coordinators and full-profile instances, and each other instance only its own ro
|
|
|
377
377
|
|
|
378
378
|
**The usage report** (the `get_usage_report` tool, and Fleet → **Usage**, `/ui/fleet/usage`, #2122; the ◔ dialog's
|
|
379
379
|
**By agent →** opens it). Per instance (or backend,
|
|
380
|
-
model, credential profile, team): input, output, cache read and cache write tokens, requests, delivered messages,
|
|
380
|
+
model, credential profile, team): input, output, reasoning, cache read and cache write tokens, requests, delivered messages,
|
|
381
381
|
and an amount, over today / 7d / month / all / custom days in the fleet's timezone. **Every amount is the
|
|
382
382
|
API-equivalent at list price — not money spent** (subscriptions aren't billed per token): say "API-equivalent", never
|
|
383
|
-
"spent". Measured for Claude Code and
|
|
384
|
-
- `
|
|
383
|
+
"spent". Measured for Claude Code, Codex, Grok, Muse, OpenCode and Antigravity; **estimated** for Kiro (it records no token counts). Marks to repeat in words:
|
|
384
|
+
- `cost_reported`: the model has no list price in AgEnD's table, so the amount is what the CLI (Grok, OpenCode's provider) reported.
|
|
385
|
+
- `estimated` (a row) / `includes_estimates` (the totals, with `amountEstimated`): Kiro's tokens are estimated from text
|
|
386
|
+
size, not measured — say "estimated" and give the estimated part apart.
|
|
387
|
+
- `cache_write_not_reported`: Codex and Muse record no cache writes, so they are neither shown as 0 nor priced.
|
|
385
388
|
- `not_priced`: the tokens are shown, the amount isn't.
|
|
386
389
|
- `source_unknown`: read before #2122, when which backend and profile read it was not recorded (backend and profile
|
|
387
390
|
"unknown" — never today's).
|
|
@@ -269,7 +269,8 @@ desk to desk along the corridors in the Key's colours; a delegation in progress
|
|
|
269
269
|
desk. Hover (or tap once) a desk for its name, state and backend; click (or tap again) opens the chat. **Find** dims
|
|
270
270
|
the rest. **Show** picks a team or the Lobby and **People** pins chosen instances (both kept per browser); the
|
|
271
271
|
**Office** switcher lists offices kept on the host (`web-offices.json`, `GET`/`PUT /ui/offices`). An admin session
|
|
272
|
-
(never a read-only one, a guest or the public link) gets **Edit offices
|
|
272
|
+
(never a read-only one, a guest or the public link) gets **Edit offices** (≥1200 px: a panel docked on the right in the
|
|
273
|
+
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
|
|
273
274
|
in each (whole teams or single instances; none = everyone) and its style, and upload or delete **skin packs** (an
|
|
274
275
|
artist's pictures: `manifest.json` plus PNGs, format v1, kept in `web-office-skins/` in the AgEnD home; the host
|
|
275
276
|
checks every rule — PNG only, each strip exactly frames·w × h, a 16:9 background, size caps — and never changes a
|
|
@@ -280,7 +281,10 @@ or an uploaded pack; one the page cannot load is drawn as Desks with a note. On
|
|
|
280
281
|
**Edit layout** (admin only) shows a 1280×720 coordinate grid and lets you drag seats, furniture, the door and
|
|
281
282
|
waypoints (or Tab to one and use the arrow keys, Shift for 10), add or remove waypoints and join or unjoin
|
|
282
283
|
corridors; **Save layout** keeps the moves as that office's overrides (the pack stays as uploaded), **Reset** goes
|
|
283
|
-
back to the pack's own.
|
|
284
|
+
back to the pack's own. On a screen ≥1200 px its controls sit in the right-hand panel (the canvas whole for the
|
|
285
|
+
handles); narrower, or in fullscreen, they are the bar along the canvas's bottom. Esc is Cancel. While either editor
|
|
286
|
+
is docked the page beside it works, Ctrl+K search included; leaving the page with unsaved changes asks first
|
|
287
|
+
("Discard changes"). While it is open the office picker and Edit offices wait (**Cancel** closes it); if someone
|
|
284
288
|
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
|
|
285
289
|
only calls and work get bubbles (a few at most) and name tags show on hover or focus. **Hide paused and stopped**
|
|
286
290
|
(per browser, off by default) leaves the sleepers out. Now and then someone says a short line for their state in a
|
|
@@ -388,11 +392,14 @@ coordinators and full-profile instances, and each other instance only its own ro
|
|
|
388
392
|
|
|
389
393
|
**The usage report** (the `get_usage_report` tool, and Fleet → **Usage**, `/ui/fleet/usage`, #2122; the ◔ dialog's
|
|
390
394
|
**By agent →** opens it). Per instance (or backend,
|
|
391
|
-
model, credential profile, team): input, output, cache read and cache write tokens, requests, delivered messages,
|
|
395
|
+
model, credential profile, team): input, output, reasoning, cache read and cache write tokens, requests, delivered messages,
|
|
392
396
|
and an amount, over today / 7d / month / all / custom days in the fleet's timezone. **Every amount is the
|
|
393
397
|
API-equivalent at list price — not money spent** (subscriptions aren't billed per token): say "API-equivalent", never
|
|
394
|
-
"spent". Measured for Claude Code and
|
|
395
|
-
- `
|
|
398
|
+
"spent". Measured for Claude Code, Codex, Grok, Muse, OpenCode and Antigravity; **estimated** for Kiro (it records no token counts). Marks to repeat in words:
|
|
399
|
+
- `cost_reported`: the model has no list price in AgEnD's table, so the amount is what the CLI (Grok, OpenCode's provider) reported.
|
|
400
|
+
- `estimated` (a row) / `includes_estimates` (the totals, with `amountEstimated`): Kiro's tokens are estimated from text
|
|
401
|
+
size, not measured — say "estimated" and give the estimated part apart.
|
|
402
|
+
- `cache_write_not_reported`: Codex and Muse record no cache writes, so they are neither shown as 0 nor priced.
|
|
396
403
|
- `not_priced`: the tokens are shown, the amount isn't.
|
|
397
404
|
- `source_unknown`: read before #2122, when which backend and profile read it was not recorded (backend and profile
|
|
398
405
|
"unknown" — never today's).
|
|
@@ -25,6 +25,7 @@ export const IMPACT_ORDER = ["now", "instance", "fleet"];
|
|
|
25
25
|
export const HOT_INSTANCE_CONFIG_KEYS = new Set([
|
|
26
26
|
"tool_progress",
|
|
27
27
|
"reply_completion_guard",
|
|
28
|
+
"reply_triggers",
|
|
28
29
|
"mcp_proxy_reply",
|
|
29
30
|
"resume_interrupted_work",
|
|
30
31
|
"auto_pause_after",
|
|
@@ -38,7 +39,7 @@ export const HOT_INSTANCE_CONFIG_KEYS = new Set([
|
|
|
38
39
|
// #2303: the fleet reads it at each task board claim; the daemon only keeps it current.
|
|
39
40
|
"board_cards_at_once",
|
|
40
41
|
// The fleet reads it at each tool call; the daemon keeps it current for the next spawn's tool menu.
|
|
41
|
-
"dashboard",
|
|
42
|
+
"dashboard", "office_access",
|
|
42
43
|
]);
|
|
43
44
|
/**
|
|
44
45
|
* The hot keys a ClassicBot channel edit can use.
|
|
@@ -49,7 +50,7 @@ export const HOT_INSTANCE_CONFIG_KEYS = new Set([
|
|
|
49
50
|
* dropped on the way. Derived, not re-listed: dropping a key from the hot set
|
|
50
51
|
* drops it here too.
|
|
51
52
|
*/
|
|
52
|
-
export const CLASSIC_HOT_CONFIG_KEYS = new Set(["tool_progress", "reply_completion_guard"]
|
|
53
|
+
export const CLASSIC_HOT_CONFIG_KEYS = new Set(["tool_progress", "reply_completion_guard", "reply_triggers"]
|
|
53
54
|
.filter(key => HOT_INSTANCE_CONFIG_KEYS.has(key)));
|
|
54
55
|
/**
|
|
55
56
|
* Instance keys that are not the instance's own business: they change how the
|
|
@@ -64,7 +65,7 @@ const FLEET_SCOPED_INSTANCE_KEYS = new Set([
|
|
|
64
65
|
const INSTANCE_FIELDS = [
|
|
65
66
|
"display_name", "description", "backend", "model", "working_directory",
|
|
66
67
|
"resume_interrupted_work", "auto_pause_after", "warm_cap", "topic_id", "channel_id", "general_topic",
|
|
67
|
-
"tool_progress", "reply_completion_guard", "mcp_proxy_reply", "log_level",
|
|
68
|
+
"tool_progress", "reply_completion_guard", "reply_triggers", "mcp_proxy_reply", "log_level",
|
|
68
69
|
"systemPrompt", "tags", "hang_detector", "agent_mode", "tool_set",
|
|
69
70
|
"lightweight", "model_failover", "effort", "pre_task_command",
|
|
70
71
|
// #1005: the status reactions follow at once, but the instructions' avoid
|
|
@@ -74,12 +75,12 @@ const INSTANCE_FIELDS = [
|
|
|
74
75
|
// #2303: read by the fleet at each task board claim.
|
|
75
76
|
"board_cards_at_once",
|
|
76
77
|
// Read by the fleet at each tool call (dashboard-permissions.ts).
|
|
77
|
-
"dashboard",
|
|
78
|
+
"dashboard", "office_access",
|
|
78
79
|
];
|
|
79
80
|
/** ClassicBot channel fields the settings page renders. */
|
|
80
81
|
const CLASSIC_FIELDS = [
|
|
81
82
|
"backend", "model", "auto_pause_after", "tool_progress",
|
|
82
|
-
"reply_completion_guard", "collab", "context_lines", "pre_task_command",
|
|
83
|
+
"reply_completion_guard", "reply_triggers", "collab", "context_lines", "pre_task_command",
|
|
83
84
|
"web_echo",
|
|
84
85
|
];
|
|
85
86
|
/**
|
|
@@ -87,6 +88,10 @@ const CLASSIC_FIELDS = [
|
|
|
87
88
|
* fleet process or the channel binding rather than to an instance's config.
|
|
88
89
|
*/
|
|
89
90
|
const FLEET_FIELD_IMPACTS = {
|
|
91
|
+
"defaults.tips": "now",
|
|
92
|
+
"web.notify_login": "now",
|
|
93
|
+
"web.notice_delivery": "now",
|
|
94
|
+
"defaults.reply_triggers": "now",
|
|
90
95
|
"web.experimental.canvas_worker": "now",
|
|
91
96
|
"web.echo_to_channel": "now",
|
|
92
97
|
"web.log_tab": "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,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;
|
|
1
|
+
{"version":3,"file":"instance-config-impact.js","sourceRoot":"","sources":["../src/instance-config-impact.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,15 @@ import type { DeliveryOutbox } from "./delivery-outbox.js";
|
|
|
18
18
|
export { isFleetStartCommandLine } from "./fleet-lock.js";
|
|
19
19
|
export interface BackendInstallationInfo {
|
|
20
20
|
binary: string;
|
|
21
|
+
/** The install command shown to a person (to copy and run themselves). */
|
|
21
22
|
install: string;
|
|
23
|
+
/**
|
|
24
|
+
* The same install when AgEnD runs it with nobody at the terminal (`/login`'s install window). Codex's
|
|
25
|
+
* install.sh asks "Start Codex now? [y/N]" (and, on a conflict, whether to uninstall) on /dev/tty, so a
|
|
26
|
+
* window nobody types into waits until the install times out; CODEX_NON_INTERACTIVE=1 skips both questions.
|
|
27
|
+
* Omitted: `install` runs as it is.
|
|
28
|
+
*/
|
|
29
|
+
unattended?: string;
|
|
22
30
|
/**
|
|
23
31
|
* #1092: where this backend's own installer puts the binary, read from the
|
|
24
32
|
* installer script itself. `/login`'s install verifies on a fresh login shell
|
|
@@ -435,6 +443,15 @@ export declare class InstanceLifecycle {
|
|
|
435
443
|
* up, and the operator needs to know which conversation each instance is in.
|
|
436
444
|
*/
|
|
437
445
|
attachLaunchWarningHandler(name: string, daemon: IncidentEventSource): void;
|
|
446
|
+
/**
|
|
447
|
+
* The daemon gave up resuming after repeated startup failures and started a
|
|
448
|
+
* fresh conversation (#737, #749). Without this the only trace was an error
|
|
449
|
+
* line in daemon.log. Attached before start, because the startup spawn is
|
|
450
|
+
* where it happens; and never suppressed for a planned restart, which is
|
|
451
|
+
* exactly when the user expects the conversation to carry on. A ClassicBot's
|
|
452
|
+
* channel is the end user's chat, so its notice goes to General only.
|
|
453
|
+
*/
|
|
454
|
+
attachContextLostHandler(name: string, daemon: IncidentEventSource): void;
|
|
438
455
|
/**
|
|
439
456
|
* Daemon delivery events → the status reaction on the inbound message. The
|
|
440
457
|
* emoji for each status comes from config (#1005); this only names it.
|
|
@@ -8,7 +8,7 @@ import { execFileSync } from "node:child_process";
|
|
|
8
8
|
import { join, basename, dirname, resolve, sep as pathSep } from "node:path";
|
|
9
9
|
import { access } from "node:fs/promises";
|
|
10
10
|
import { getAgendHome, ensureWorkspaceGit } from "./paths.js";
|
|
11
|
-
import { DEFAULT_INSTANCE_CONFIG, getEffectiveInstanceDefaults, getTmuxSession } from "./config.js";
|
|
11
|
+
import { DEFAULT_INSTANCE_CONFIG, getEffectiveInstanceDefaults, getTmuxSession, newInstanceKiroUi } from "./config.js";
|
|
12
12
|
import { readStatuslineModel, uniqueInstanceName } from "./topic-commands.js";
|
|
13
13
|
import { isModelCompatible } from "./backend/types.js";
|
|
14
14
|
import { safeHandler } from "./safe-async.js";
|
|
@@ -39,6 +39,7 @@ export const BACKEND_INSTALLATION_INFO = {
|
|
|
39
39
|
// a symlink into ~/.codex/packages/standalone/current/bin (#1092).
|
|
40
40
|
codex: {
|
|
41
41
|
binary: "codex", install: "curl -fsSL https://chatgpt.com/codex/install.sh | sh",
|
|
42
|
+
unattended: "curl -fsSL https://chatgpt.com/codex/install.sh | CODEX_NON_INTERACTIVE=1 sh",
|
|
42
43
|
binDirs: (env, home) => [env.CODEX_INSTALL_DIR, localBin(home)].filter((d) => !!d),
|
|
43
44
|
},
|
|
44
45
|
opencode: { binary: "opencode", install: "curl -fsSL https://opencode.ai/install | bash", binDirs: (_env, home) => [join(home, ".opencode", "bin")] },
|
|
@@ -554,6 +555,27 @@ export class InstanceLifecycle {
|
|
|
554
555
|
this.ctx.notifyInstanceTopic(name, t("inst.backend_launch_warning", name, data.message));
|
|
555
556
|
}, this.ctx.logger, `daemon.backend_launch_warning[${name}]`));
|
|
556
557
|
}
|
|
558
|
+
/**
|
|
559
|
+
* The daemon gave up resuming after repeated startup failures and started a
|
|
560
|
+
* fresh conversation (#737, #749). Without this the only trace was an error
|
|
561
|
+
* line in daemon.log. Attached before start, because the startup spawn is
|
|
562
|
+
* where it happens; and never suppressed for a planned restart, which is
|
|
563
|
+
* exactly when the user expects the conversation to carry on. A ClassicBot's
|
|
564
|
+
* channel is the end user's chat, so its notice goes to General only.
|
|
565
|
+
*/
|
|
566
|
+
attachContextLostHandler(name, daemon) {
|
|
567
|
+
daemon.on("context_lost", safeHandler((_name, reason, attempts) => {
|
|
568
|
+
this.ctx.eventLog?.insert(name, "context_lost", { reason, ...(attempts != null ? { attempts } : {}) });
|
|
569
|
+
this.ctx.logger.warn({ name, reason, attempts }, "Instance started a fresh conversation — previous context lost");
|
|
570
|
+
const tries = attempts != null ? String(attempts) : "?";
|
|
571
|
+
if (!this.ctx.isClassicInstance?.(name))
|
|
572
|
+
this.ctx.notifyInstanceTopic(name, t("inst.context_lost", name, tries));
|
|
573
|
+
const general = this.findGeneralInstance();
|
|
574
|
+
if (general && general !== name)
|
|
575
|
+
this.ctx.notifyInstanceTopic(general, t("inst.context_lost_general", name, tries));
|
|
576
|
+
this.ctx.webhookEmit("context_lost", name, { reason, ...(attempts != null ? { attempts } : {}) });
|
|
577
|
+
}, this.ctx.logger, `daemon.context_lost[${name}]`));
|
|
578
|
+
}
|
|
557
579
|
/**
|
|
558
580
|
* Daemon delivery events → the status reaction on the inbound message. The
|
|
559
581
|
* emoji for each status comes from config (#1005); this only names it.
|
|
@@ -787,9 +809,8 @@ export class InstanceLifecycle {
|
|
|
787
809
|
recovered: data.recovered,
|
|
788
810
|
...(data.recoveryStarted ? { recoveryStarted: true } : {}),
|
|
789
811
|
});
|
|
790
|
-
// The reply guard
|
|
791
|
-
//
|
|
792
|
-
// instance-topic malformed-call notice.
|
|
812
|
+
// The reply guard owns recovery and log-only detection. Do not duplicate
|
|
813
|
+
// a possible false alarm with the older instance-topic malformed-call notice.
|
|
793
814
|
if (data.recoveryStarted)
|
|
794
815
|
return;
|
|
795
816
|
const notificationTarget = this.ptyErrorNotificationTarget(name);
|
|
@@ -803,6 +824,7 @@ export class InstanceLifecycle {
|
|
|
803
824
|
generation: data.generation,
|
|
804
825
|
reason: data.reason,
|
|
805
826
|
recoveryStarted: data.recoveryStarted,
|
|
827
|
+
...(data.message ? { message: data.message } : {}),
|
|
806
828
|
});
|
|
807
829
|
this.ctx.logger.warn(data, "Turn ended without an adapter-confirmed reply");
|
|
808
830
|
}, this.ctx.logger, `daemon.reply_drop_detected[${name}]`));
|
|
@@ -818,6 +840,7 @@ export class InstanceLifecycle {
|
|
|
818
840
|
correlationId: data.correlationId,
|
|
819
841
|
generation: data.generation,
|
|
820
842
|
reason: data.reason,
|
|
843
|
+
...(data.message ? { message: data.message } : {}),
|
|
821
844
|
});
|
|
822
845
|
this.ctx.logger.error(data, "Reply-drop recovery ended without a delivered reply");
|
|
823
846
|
}, this.ctx.logger, `daemon.reply_drop_unrecovered[${name}]`));
|
|
@@ -1363,6 +1386,7 @@ export class InstanceLifecycle {
|
|
|
1363
1386
|
// warning synchronously inside Daemon.start, long before
|
|
1364
1387
|
// attachIncidentHandlers runs (#984).
|
|
1365
1388
|
this.attachLaunchWarningHandler(name, daemon);
|
|
1389
|
+
this.attachContextLostHandler(name, daemon);
|
|
1366
1390
|
daemon.on("durable_delivery_deferred", (data) => {
|
|
1367
1391
|
// A daemon without its outbox port cannot update the row directly. The
|
|
1368
1392
|
// lifecycle owns the same-process store and records a bounded pre-write
|
|
@@ -2110,6 +2134,10 @@ export class InstanceLifecycle {
|
|
|
2110
2134
|
&& !isModelCompatible(instanceConfig.backend, instanceConfig.model)) {
|
|
2111
2135
|
delete instanceConfig.model;
|
|
2112
2136
|
}
|
|
2137
|
+
// #2598: a new kiro instance is written with the TUI engine, explicitly (an unset one is classic).
|
|
2138
|
+
const newKiroUi = newInstanceKiroUi(instanceConfig.backend, this.ctx.fleetConfig?.defaults);
|
|
2139
|
+
if (newKiroUi)
|
|
2140
|
+
instanceConfig.kiro_ui = newKiroUi;
|
|
2113
2141
|
createdConfig = instanceConfig;
|
|
2114
2142
|
const beforeCreate = structuredClone(this.ctx.fleetConfig);
|
|
2115
2143
|
const persist = () => {
|