@songsid/agend 2.3.0-beta.1 → 2.3.0-beta.11
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/dist/agent-cli-instructions.md +5 -2
- package/dist/agent-cli.js +43 -7
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +4 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.d.ts +14 -6
- package/dist/agent-file-read.js +207 -19
- package/dist/agent-file-read.js.map +1 -1
- package/dist/agent-whats-new.d.ts +11 -0
- package/dist/agent-whats-new.js +29 -15
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/auth-api.d.ts +30 -1
- package/dist/auth-api.js +45 -13
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.d.ts +38 -0
- package/dist/authority/authority-state.js +114 -0
- package/dist/authority/authority-state.js.map +1 -0
- package/dist/authority/session-authorizations.d.ts +43 -0
- package/dist/authority/session-authorizations.js +102 -0
- package/dist/authority/session-authorizations.js.map +1 -0
- package/dist/authority/web-authority.d.ts +120 -0
- package/dist/authority/web-authority.js +157 -0
- package/dist/authority/web-authority.js.map +1 -0
- package/dist/backend/claude-code.d.ts +2 -2
- package/dist/backend/claude-code.js +10 -5
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/types.d.ts +14 -0
- package/dist/backend/types.js +25 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-availability.d.ts +120 -0
- package/dist/backend-availability.js +396 -0
- package/dist/backend-availability.js.map +1 -0
- package/dist/backend-command.d.ts +21 -3
- package/dist/backend-command.js +23 -4
- package/dist/backend-command.js.map +1 -1
- package/dist/bundled-skills.d.ts +14 -0
- package/dist/bundled-skills.js +29 -0
- package/dist/bundled-skills.js.map +1 -0
- package/dist/cache-analysis.d.ts +47 -1
- package/dist/cache-analysis.js +68 -8
- package/dist/cache-analysis.js.map +1 -1
- package/dist/cache-ledger.d.ts +16 -3
- package/dist/cache-ledger.js +33 -13
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-report-tool.d.ts +17 -0
- package/dist/cache-report-tool.js +40 -0
- package/dist/cache-report-tool.js.map +1 -0
- package/dist/cache-service.d.ts +70 -3
- package/dist/cache-service.js +178 -17
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +7 -0
- package/dist/channel/adapters/discord.js +35 -0
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/mcp-tools.js +22 -10
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +6 -0
- package/dist/classic-channel-manager.d.ts +10 -5
- package/dist/classic-channel-manager.js +12 -9
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +130 -31
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +103 -4
- package/dist/config-validator.js.map +1 -1
- package/dist/daemon.d.ts +7 -0
- package/dist/daemon.js +63 -16
- package/dist/daemon.js.map +1 -1
- package/dist/decision-list.d.ts +25 -0
- package/dist/decision-list.js +30 -0
- package/dist/decision-list.js.map +1 -0
- package/dist/delivery-outbox.d.ts +10 -0
- package/dist/delivery-outbox.js +12 -1
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/fleet-context.d.ts +10 -0
- package/dist/fleet-manager.d.ts +417 -11
- package/dist/fleet-manager.js +1387 -109
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-traffic.d.ts +74 -0
- package/dist/fleet-traffic.js +196 -0
- package/dist/fleet-traffic.js.map +1 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +20 -5
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +6 -1
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +3 -2
- package/dist/general-knowledge/skills/persona-emoji/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +257 -23
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +478 -0
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/human-delivery-receipts.d.ts +24 -1
- package/dist/human-delivery-receipts.js +64 -11
- package/dist/human-delivery-receipts.js.map +1 -1
- package/dist/instance-config-impact.js +3 -1
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-names.d.ts +4 -0
- package/dist/instance-names.js +12 -0
- package/dist/instance-names.js.map +1 -0
- package/dist/instructions.d.ts +12 -1
- package/dist/instructions.js +13 -2
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +100 -8
- package/dist/locale.js.map +1 -1
- package/dist/ls-attach-resolve.d.ts +95 -0
- package/dist/ls-attach-resolve.js +174 -0
- package/dist/ls-attach-resolve.js.map +1 -0
- package/dist/memory-hogs.d.ts +27 -0
- package/dist/memory-hogs.js +124 -0
- package/dist/memory-hogs.js.map +1 -0
- package/dist/outbound-handlers.d.ts +10 -0
- package/dist/outbound-handlers.js +122 -2
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +164 -4
- package/dist/outbound-schemas.js +99 -3
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +8 -2
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +9 -0
- package/dist/public-web-link.js +8 -0
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.d.ts +10 -1
- package/dist/quickstart-api.js +12 -4
- package/dist/quickstart-api.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +4 -0
- package/dist/reply-buttons-controller.js +2 -2
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/restart-progress.d.ts +65 -1
- package/dist/restart-progress.js +236 -10
- package/dist/restart-progress.js.map +1 -1
- package/dist/rollout-index.d.ts +5 -0
- package/dist/rollout-index.js +26 -5
- package/dist/rollout-index.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts +12 -0
- package/dist/scheduler/scheduler.js +83 -10
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/service-installer.d.ts +2 -1
- package/dist/service-installer.js +18 -3
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.d.ts +19 -0
- package/dist/settings-api.js +137 -2
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +104 -0
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +17 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/tmux-manager.d.ts +5 -0
- package/dist/tmux-manager.js +16 -0
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-permissions.d.ts +4 -6
- package/dist/tool-permissions.js +53 -5
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.d.ts +7 -1
- package/dist/topic-commands.js +18 -4
- package/dist/topic-commands.js.map +1 -1
- package/dist/types.d.ts +48 -1
- package/dist/ui/app-effects.js +77 -31
- package/dist/ui/chat-ambient.js +307 -0
- package/dist/ui/chat-effect-posters.js +8 -8
- package/dist/ui/chat-effects.js +101 -13
- package/dist/ui/chat-render.js +21 -3
- package/dist/ui/chat-strings.js +59 -6
- package/dist/ui/chat-thread.js +159 -21
- package/dist/ui/effect-trial-controller.js +13 -8
- package/dist/ui/effect-trial-panel.js +19 -16
- package/dist/ui/fleet-cache.js +23 -1
- package/dist/ui/fleet-canvas-layout.js +111 -0
- package/dist/ui/fleet-canvas.js +525 -0
- package/dist/ui/fleet-org.js +27 -12
- package/dist/ui/fleet-traffic.js +343 -0
- package/dist/ui/fleet-usage.js +401 -0
- package/dist/ui/panel-chat.js +154 -49
- package/dist/ui/panel-details.js +2 -1
- package/dist/ui/panel-fleet.js +43 -17
- package/dist/ui/panel-settings.js +26 -8
- package/dist/ui/preview.js +3 -2
- package/dist/ui/settings-appearance.js +42 -18
- package/dist/ui/settings-catalog.js +92 -0
- package/dist/ui/settings-dialogs.js +40 -12
- package/dist/ui/settings-effects.js +4 -3
- package/dist/ui/settings-guests.js +117 -0
- package/dist/ui/settings-learn.js +25 -0
- package/dist/ui/settings-model.js +15 -6
- package/dist/ui/settings-mods.js +23 -9
- package/dist/ui/settings-owner-effects.js +9 -9
- package/dist/ui/settings-strings.js +120 -42
- package/dist/ui/settings-web-authority.js +91 -0
- package/dist/ui/shared/agend-auth.js +1 -1
- package/dist/ui/shared/app-i18n.js +4 -2
- package/dist/ui/shared/app-prefs.js +5 -4
- package/dist/ui/shared/app-route.js +19 -1
- package/dist/ui/shared/app-session.js +2 -0
- package/dist/ui/shared/app-shell.js +92 -27
- package/dist/ui/shared/app-store.js +26 -1
- package/dist/ui/shared/app-stream.js +3 -1
- package/dist/ui/shared/app-themes.js +24 -6
- package/dist/ui/shared/app.css +365 -17
- package/dist/ui/shared/app.js +21 -14
- package/dist/ui/shared/card-strings.js +4 -0
- package/dist/ui/shared/effect-app-runtime.js +68 -19
- package/dist/ui/shared/effect-chat-runtime.js +16 -3
- package/dist/ui/shared/effect-frame.js +26 -7
- package/dist/ui/shared/effect-geometry.js +24 -9
- package/dist/ui/shared/effect-policy.js +21 -7
- package/dist/ui/shared/effect-profiler.js +31 -9
- package/dist/ui/shared/effect-registry.js +87 -48
- package/dist/ui/shared/effect-stock-snapshot.js +9 -0
- package/dist/ui/shared/effect-stock-trust.js +62 -10
- package/dist/ui/shared/effect-trial-shadow.js +62 -0
- package/dist/ui/shared/effect-trial-source.js +1 -1
- package/dist/ui/shared/effect-trial-stage.js +54 -31
- package/dist/ui/shared/effect-trial.css +40 -0
- package/dist/ui/shared/fx-motion.js +67 -0
- package/dist/ui/shared/identity-card.js +75 -4
- package/dist/ui/shared/identity-color.js +3 -3
- package/dist/ui/shared/instance-nav.js +194 -28
- package/dist/ui/shared/panel-view.js +24 -4
- package/dist/ui/shared/tokens.css +9 -3
- package/dist/ui/shared/ui-icons.js +1 -0
- package/dist/ui/shared/usage-dialog.js +22 -2
- package/dist/ui/shared/view-strings.js +68 -2
- package/dist/ui/shared/web-authorize.js +151 -0
- package/dist/ui/signin.html +1 -1
- package/dist/ui/web-terminal/terminal.css +4 -4
- package/dist/usage/providers.d.ts +28 -0
- package/dist/usage/providers.js +126 -36
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage-report.d.ts +158 -0
- package/dist/usage-report.js +226 -0
- package/dist/usage-report.js.map +1 -0
- package/dist/usage-rollup.d.ts +51 -0
- package/dist/usage-rollup.js +168 -0
- package/dist/usage-rollup.js.map +1 -0
- package/dist/view-api.d.ts +39 -0
- package/dist/view-api.js +65 -4
- package/dist/view-api.js.map +1 -1
- package/dist/web-ambient.d.ts +72 -0
- package/dist/web-ambient.js +161 -0
- package/dist/web-ambient.js.map +1 -0
- package/dist/web-api.d.ts +69 -5
- package/dist/web-api.js +362 -45
- package/dist/web-api.js.map +1 -1
- package/dist/web-appearance-policy.d.ts +4 -6
- package/dist/web-appearance-policy.js +5 -12
- package/dist/web-appearance-policy.js.map +1 -1
- package/dist/web-appearance-tools.d.ts +3 -0
- package/dist/web-appearance-tools.js +22 -3
- package/dist/web-appearance-tools.js.map +1 -1
- package/dist/web-appearance-view.d.ts +27 -2
- package/dist/web-appearance-view.js +129 -14
- package/dist/web-appearance-view.js.map +1 -1
- package/dist/web-appearance.d.ts +17 -3
- package/dist/web-appearance.js +82 -7
- package/dist/web-appearance.js.map +1 -1
- package/dist/web-asset-parts.d.ts +5 -10
- package/dist/web-asset-parts.js +3 -3
- package/dist/web-asset-parts.js.map +1 -1
- package/dist/web-auth.js +3 -1
- package/dist/web-auth.js.map +1 -1
- package/dist/web-card.d.ts +14 -0
- package/dist/web-card.js +40 -6
- package/dist/web-card.js.map +1 -1
- package/dist/web-channel-echo.d.ts +7 -1
- package/dist/web-channel-echo.js +6 -2
- package/dist/web-channel-echo.js.map +1 -1
- package/dist/web-chat-history.d.ts +50 -0
- package/dist/web-chat-history.js +87 -5
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +1 -0
- package/dist/web-effect-bootstrap.d.ts +12 -0
- package/dist/web-effect-bootstrap.js +49 -0
- package/dist/web-effect-bootstrap.js.map +1 -0
- package/dist/web-effect-bundle.js +46 -1
- package/dist/web-effect-bundle.js.map +1 -1
- package/dist/web-effect-playback.d.ts +30 -0
- package/dist/web-effect-playback.js +71 -0
- package/dist/web-effect-playback.js.map +1 -0
- package/dist/web-effect-profiles.d.ts +4 -4
- package/dist/web-effect-service.d.ts +11 -4
- package/dist/web-effect-service.js +28 -5
- package/dist/web-effect-service.js.map +1 -1
- package/dist/web-effect-tools.d.ts +1 -0
- package/dist/web-effect-tools.js +8 -5
- package/dist/web-effect-tools.js.map +1 -1
- package/dist/web-effect-trials.d.ts +4 -4
- package/dist/web-effect-trials.js +6 -6
- package/dist/web-effect-trials.js.map +1 -1
- package/dist/web-effect-upload.d.ts +2 -4
- package/dist/web-effect-upload.js +3 -8
- package/dist/web-effect-upload.js.map +1 -1
- package/dist/web-effect-worker.d.ts +1 -1
- package/dist/web-effect-worker.js +2 -2
- package/dist/web-effect-worker.js.map +1 -1
- package/dist/web-effect.d.ts +14 -0
- package/dist/web-effect.js +21 -0
- package/dist/web-effect.js.map +1 -1
- package/dist/web-guest-access.d.ts +125 -0
- package/dist/web-guest-access.js +234 -0
- package/dist/web-guest-access.js.map +1 -0
- package/dist/web-guest-rooms.d.ts +82 -0
- package/dist/web-guest-rooms.js +135 -0
- package/dist/web-guest-rooms.js.map +1 -0
- package/dist/web-identity-color.d.ts +1 -1
- package/dist/web-identity-color.js +2 -2
- package/dist/web-identity-color.js.map +1 -1
- package/dist/web-identity-palette.d.ts +1 -1
- package/dist/web-identity-palette.js +2 -2
- package/dist/web-identity-palette.js.map +1 -1
- package/dist/web-image-meta.d.ts +13 -0
- package/dist/web-image-meta.js +62 -0
- package/dist/web-image-meta.js.map +1 -1
- package/dist/web-login.d.ts +47 -0
- package/dist/web-login.js +115 -0
- package/dist/web-login.js.map +1 -1
- package/dist/web-mod-agent.d.ts +1 -1
- package/dist/web-mod-agent.js +12 -8
- package/dist/web-mod-agent.js.map +1 -1
- package/dist/web-mod-bundle.d.ts +14 -1
- package/dist/web-mod-bundle.js +68 -3
- package/dist/web-mod-bundle.js.map +1 -1
- package/dist/web-mod-export.d.ts +9 -0
- package/dist/web-mod-export.js +21 -0
- package/dist/web-mod-export.js.map +1 -1
- package/dist/web-mod-store.d.ts +7 -1
- package/dist/web-mod-store.js +21 -7
- package/dist/web-mod-store.js.map +1 -1
- package/dist/web-prefs.d.ts +14 -0
- package/dist/web-prefs.js +24 -4
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +6 -2
- package/dist/web-preview.js +4 -2
- package/dist/web-preview.js.map +1 -1
- package/dist/web-returning-device.d.ts +41 -0
- package/dist/web-returning-device.js +57 -5
- package/dist/web-returning-device.js.map +1 -1
- package/dist/web-session-authorization.d.ts +132 -0
- package/dist/web-session-authorization.js +193 -0
- package/dist/web-session-authorization.js.map +1 -0
- package/dist/web-session.d.ts +70 -10
- package/dist/web-session.js +137 -22
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +49 -2
- package/dist/web-settings-patch.js +145 -1
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +89 -0
- package/dist/web-settings-tools.js +270 -0
- package/dist/web-settings-tools.js.map +1 -0
- package/dist/web-shell-routes.d.ts +1 -1
- package/dist/web-shell-routes.js +1 -1
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-theme-store.d.ts +39 -0
- package/dist/web-theme-store.js +122 -11
- package/dist/web-theme-store.js.map +1 -1
- package/dist/web-theme.d.ts +2 -0
- package/dist/web-theme.js +10 -1
- package/dist/web-theme.js.map +1 -1
- package/dist/web-upload.d.ts +13 -0
- package/dist/web-upload.js +39 -3
- package/dist/web-upload.js.map +1 -1
- package/dist/workflow-templates/default.md +1 -1
- package/package.json +1 -1
- package/templates/systemd.service.ejs +8 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2015: which processes hold the most memory in the fleet's service, and whose they are. When host memory pressure
|
|
3
|
+
* rises, General is told the top few — the fleet, tmux, or an instance's CLI or a command it ran — so a person can stop
|
|
4
|
+
* a runaway before the kernel's OOM killer picks a victim (2026-10-17: one agent's 19 GB script).
|
|
5
|
+
*
|
|
6
|
+
* The processes are the fleet cgroup's (cgroup v2 `cgroup.procs`: everything the service runs), else the fleet's
|
|
7
|
+
* descendants. Each one's owner is found by walking its parents to a tmux pane's shell: the pane's window name is the
|
|
8
|
+
* instance. Every read is a small /proc file, read one at a time, never more than one at once in memory.
|
|
9
|
+
*/
|
|
10
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
11
|
+
/** At most this many processes are looked at (a bound on the work, not a cut of the answer on a normal host). */
|
|
12
|
+
export const MEMORY_HOGS_SCAN_MAX = 4096;
|
|
13
|
+
async function readText(path) {
|
|
14
|
+
try {
|
|
15
|
+
return await readFile(path, "utf8");
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Name, VmRSS (bytes) and parent pid of one process, or null (gone, a kernel thread, unreadable). */
|
|
22
|
+
async function statusOf(procRoot, pid) {
|
|
23
|
+
const s = await readText(`${procRoot}/${pid}/status`);
|
|
24
|
+
if (!s)
|
|
25
|
+
return null;
|
|
26
|
+
const name = /^Name:\s*(.*)$/m.exec(s)?.[1]?.trim() ?? "?";
|
|
27
|
+
const rss = /^VmRSS:\s+(\d+) kB$/m.exec(s)?.[1];
|
|
28
|
+
const ppid = /^PPid:\s+(\d+)$/m.exec(s)?.[1];
|
|
29
|
+
if (!rss || !ppid)
|
|
30
|
+
return null;
|
|
31
|
+
return { name, rss: Number.parseInt(rss, 10) * 1024, ppid: Number.parseInt(ppid, 10) };
|
|
32
|
+
}
|
|
33
|
+
/** Every descendant of `roots` (the roots included), breadth first, from one pass over every process's parent. */
|
|
34
|
+
async function descendants(procRoot, roots) {
|
|
35
|
+
let entries = [];
|
|
36
|
+
try {
|
|
37
|
+
entries = await readdir(procRoot);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return roots;
|
|
41
|
+
}
|
|
42
|
+
const children = new Map();
|
|
43
|
+
for (const e of entries.slice(0, 65536)) {
|
|
44
|
+
if (!/^\d+$/.test(e))
|
|
45
|
+
continue;
|
|
46
|
+
const st = await statusOf(procRoot, Number(e));
|
|
47
|
+
if (!st)
|
|
48
|
+
continue;
|
|
49
|
+
const list = children.get(st.ppid) ?? [];
|
|
50
|
+
list.push(Number(e));
|
|
51
|
+
children.set(st.ppid, list);
|
|
52
|
+
}
|
|
53
|
+
const out = [];
|
|
54
|
+
const queue = [...roots];
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
while (queue.length && out.length < MEMORY_HOGS_SCAN_MAX) {
|
|
57
|
+
const pid = queue.shift();
|
|
58
|
+
if (seen.has(pid))
|
|
59
|
+
continue;
|
|
60
|
+
seen.add(pid);
|
|
61
|
+
out.push(pid);
|
|
62
|
+
queue.push(...(children.get(pid) ?? []));
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The pids the service runs: its cgroup's, else the fleet process and its descendants. The tmux server holding the
|
|
68
|
+
* instances can outlive a fleet restart in another cgroup (a fleet started again from another terminal moves to a new
|
|
69
|
+
* scope; tmux stays): when it is not among the cgroup's processes, its descendants (every pane's CLI and what it ran)
|
|
70
|
+
* are added (#2036 review).
|
|
71
|
+
*/
|
|
72
|
+
async function servicePids(deps, procRoot) {
|
|
73
|
+
// The cgroup v2 path (the "0::" line), as process-memory.ts reads it.
|
|
74
|
+
const line = (await readText(`${procRoot}/${deps.fleetPid}/cgroup`))?.split("\n").find(l => l.startsWith("0::"));
|
|
75
|
+
const cg = line ? line.slice(3).trim() : null;
|
|
76
|
+
const cgRoot = deps.cgroupRoot ?? "/sys/fs/cgroup";
|
|
77
|
+
if (cg && cg !== "/") {
|
|
78
|
+
const procs = await readText(`${cgRoot}${cg}/cgroup.procs`);
|
|
79
|
+
if (procs) {
|
|
80
|
+
const pids = procs.split("\n").map(l => Number.parseInt(l, 10)).filter(n => Number.isSafeInteger(n) && n > 0).slice(0, MEMORY_HOGS_SCAN_MAX);
|
|
81
|
+
if (!deps.tmuxServerPid || pids.includes(deps.tmuxServerPid))
|
|
82
|
+
return pids;
|
|
83
|
+
const outside = (await descendants(procRoot, [deps.tmuxServerPid])).filter(p => !pids.includes(p));
|
|
84
|
+
return [...pids, ...outside].slice(0, MEMORY_HOGS_SCAN_MAX);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// No cgroup v2 view: the fleet's and tmux's descendants.
|
|
88
|
+
return descendants(procRoot, [deps.fleetPid, ...(deps.tmuxServerPid ? [deps.tmuxServerPid] : [])]);
|
|
89
|
+
}
|
|
90
|
+
/** The `limit` processes with the most RSS in the fleet's service, largest first, each with its owner. */
|
|
91
|
+
export async function topMemoryHogs(deps, limit = 3) {
|
|
92
|
+
const procRoot = deps.procRoot ?? "/proc";
|
|
93
|
+
const pids = await servicePids(deps, procRoot);
|
|
94
|
+
const info = new Map();
|
|
95
|
+
for (const pid of pids) {
|
|
96
|
+
const st = await statusOf(procRoot, pid);
|
|
97
|
+
if (st)
|
|
98
|
+
info.set(pid, st);
|
|
99
|
+
}
|
|
100
|
+
const paneOf = new Map(deps.panes.map(p => [p.pid, p.window]));
|
|
101
|
+
const ownerOf = async (pid) => {
|
|
102
|
+
let at = pid;
|
|
103
|
+
for (let hops = 0; hops < 64 && at > 1; hops++) {
|
|
104
|
+
const pane = paneOf.get(at);
|
|
105
|
+
if (pane !== undefined)
|
|
106
|
+
return deps.isInstance(pane) ? { owner: "instance", instance: pane } : { owner: "other" };
|
|
107
|
+
if (at === deps.tmuxServerPid)
|
|
108
|
+
return { owner: "tmux" };
|
|
109
|
+
if (at === deps.fleetPid)
|
|
110
|
+
return { owner: "fleet" };
|
|
111
|
+
const parent = info.get(at)?.ppid ?? (await statusOf(procRoot, at))?.ppid;
|
|
112
|
+
if (!parent)
|
|
113
|
+
break;
|
|
114
|
+
at = parent;
|
|
115
|
+
}
|
|
116
|
+
return { owner: "other" };
|
|
117
|
+
};
|
|
118
|
+
const top = [...info.entries()].sort((a, b) => b[1].rss - a[1].rss).slice(0, Math.max(0, limit));
|
|
119
|
+
const out = [];
|
|
120
|
+
for (const [pid, st] of top)
|
|
121
|
+
out.push({ pid, name: st.name, rssBytes: st.rss, ...(await ownerOf(pid)) });
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=memory-hogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-hogs.js","sourceRoot":"","sources":["../src/memory-hogs.ts"],"names":[],"mappings":"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"}
|
|
@@ -109,6 +109,16 @@ export interface OutboundContext {
|
|
|
109
109
|
getInstanceExecutionState?(name: string): "idle" | "working" | "stuck" | "paused" | null;
|
|
110
110
|
/** Subscription provider IDs used by running or paused fleet/Classic instances. */
|
|
111
111
|
getActiveUsageProviderIds?(): ReadonlySet<string>;
|
|
112
|
+
/** #2056: Settings → Web appearance for the user (web-settings-tools.ts). */
|
|
113
|
+
webSettings?: import("./web-settings-tools.js").WebSettingsTools;
|
|
114
|
+
/** #2001: the cache report as last worked out (CacheService.published) — never a transcript read. */
|
|
115
|
+
cacheReportPublished?(window: string): Promise<import("./cache-service.js").CacheReport>;
|
|
116
|
+
/** #2122: the usage report; `only`: just that instance (an ordinary caller's own row). */
|
|
117
|
+
usageReport?(params: {
|
|
118
|
+
range: import("./usage-report.js").UsageRange;
|
|
119
|
+
group: import("./usage-report.js").UsageGroup;
|
|
120
|
+
only?: string;
|
|
121
|
+
}): Promise<import("./usage-report.js").UsageReport>;
|
|
112
122
|
/** Effective process state used to annotate cross-instance delivery results. */
|
|
113
123
|
getInstanceStatus?(name: string): "running" | "paused" | "stopped" | "crashed";
|
|
114
124
|
/** #1808: whether `backend` takes this model name (the rule /backend applies too); `choices`: what it offers. */
|
|
@@ -15,7 +15,7 @@ import { CHAT_PROFILE_LOGIN_BACKENDS, credentialProfileLogin, credentialSwitchCa
|
|
|
15
15
|
import { kiroEngineCandidates, kiroEngineStatus } from "./kiro-engine-status.js";
|
|
16
16
|
import { noPlaceMarkers, placeRef, renderPlaceRefs, stripPlaceRefs, webRoute } from "./topic-link.js";
|
|
17
17
|
import { formatCrossInstanceInboundMessage, MAX_ASSEMBLED_CROSS_INSTANCE_MESSAGE_BYTES, } from "./cross-instance-envelope.js";
|
|
18
|
-
import { BroadcastArgs, CreateInstanceArgs, CreateTeamArgs, DelegateTaskArgs, DeleteInstanceArgs, DeleteTeamArgs, DeployTemplateArgs, DescribeInstanceArgs, ListDeploymentsArgs, ListInstancesArgs, ListTeamsArgs, ReplaceInstanceArgs, ReportResultArgs, DeliveryStatusArgs, RequestInformationArgs, RestartInstanceArgs, SendToInstanceArgs, PauseInstanceArgs, WakeInstanceArgs, StopInstanceArgs, GetInstanceLogsArgs, GetEffortArgs, ClosePollArgs, KiroEngineStatusArgs, GetUsageArgs, ListModelsArgs, GetFleetConfigArgs, UpdateInstanceConfigArgs, UpdateFleetDefaultsArgs, StartInstanceArgs, TeardownDeploymentArgs, UpdateTeamArgs, validateArgs, } from "./outbound-schemas.js";
|
|
18
|
+
import { BroadcastArgs, CreateInstanceArgs, CreateTeamArgs, DelegateTaskArgs, DeleteInstanceArgs, DeleteTeamArgs, DeployTemplateArgs, DescribeInstanceArgs, ListDeploymentsArgs, ListInstancesArgs, ListTeamsArgs, ReplaceInstanceArgs, ReportResultArgs, DeliveryStatusArgs, RequestInformationArgs, RestartInstanceArgs, SendToInstanceArgs, PauseInstanceArgs, WakeInstanceArgs, StopInstanceArgs, GetInstanceLogsArgs, GetEffortArgs, ClosePollArgs, KiroEngineStatusArgs, GetUsageArgs, GetCacheReportArgs, GetUsageReportArgs, GetWebSettingsArgs, SetWebSettingsArgs, ListModelsArgs, GetFleetConfigArgs, UpdateInstanceConfigArgs, UpdateFleetDefaultsArgs, StartInstanceArgs, TeardownDeploymentArgs, UpdateTeamArgs, validateArgs, } from "./outbound-schemas.js";
|
|
19
19
|
const HOME_DIR = homedir();
|
|
20
20
|
function formatByteSize(bytes) {
|
|
21
21
|
if (bytes < 1024)
|
|
@@ -522,7 +522,8 @@ const listInstances = (ctx, rawArgs, respond, meta) => {
|
|
|
522
522
|
}
|
|
523
523
|
if (filterName) {
|
|
524
524
|
const lowerName = filterName.toLowerCase();
|
|
525
|
-
allInstances = allInstances.filter(i => i.name.toLowerCase().includes(lowerName)
|
|
525
|
+
allInstances = allInstances.filter(i => i.name.toLowerCase().includes(lowerName) ||
|
|
526
|
+
(i.display_name?.toLowerCase().includes(lowerName) ?? false));
|
|
526
527
|
}
|
|
527
528
|
if (filterBackend) {
|
|
528
529
|
allInstances = allInstances.filter(i => i.backend === filterBackend);
|
|
@@ -552,6 +553,7 @@ const listInstances = (ctx, rawArgs, respond, meta) => {
|
|
|
552
553
|
const compactInstances = allInstances.map(i => ({
|
|
553
554
|
name: i.name,
|
|
554
555
|
status: i.status,
|
|
556
|
+
...(i.display_name ? { display_name: i.display_name } : {}),
|
|
555
557
|
backend: i.backend,
|
|
556
558
|
model: i.model,
|
|
557
559
|
kind: i.kind,
|
|
@@ -603,6 +605,7 @@ const describeInstance = (ctx, rawArgs, respond) => {
|
|
|
603
605
|
name: targetName,
|
|
604
606
|
type: "instance",
|
|
605
607
|
kind: "fleet-topic",
|
|
608
|
+
display_name: config.display_name ?? null,
|
|
606
609
|
description: config.description ?? null,
|
|
607
610
|
tags: config.tags ?? [],
|
|
608
611
|
working_directory: config.working_directory,
|
|
@@ -871,6 +874,119 @@ const getUsage = async (ctx, rawArgs, respond) => {
|
|
|
871
874
|
respond(null, `Usage fetch failed: ${err.message}`);
|
|
872
875
|
}
|
|
873
876
|
};
|
|
877
|
+
/**
|
|
878
|
+
* #2056: Settings → Web appearance for the user — get_web_settings / set_web_settings, through the page's own stores and
|
|
879
|
+
* checks (web-settings-tools.ts). Who may call them is the tool profile (General, coordinator, full), at every sink.
|
|
880
|
+
*/
|
|
881
|
+
const getWebSettings = async (ctx, rawArgs, respond) => {
|
|
882
|
+
const v = validateArgs(GetWebSettingsArgs, rawArgs, "get_web_settings");
|
|
883
|
+
if (!v.ok) {
|
|
884
|
+
respond(null, v.error);
|
|
885
|
+
return;
|
|
886
|
+
}
|
|
887
|
+
if (!ctx.webSettings) {
|
|
888
|
+
respond(null, "get_web_settings is unavailable on this fleet");
|
|
889
|
+
return;
|
|
890
|
+
}
|
|
891
|
+
const r = ctx.webSettings.read(v.data.person);
|
|
892
|
+
if (r.ok)
|
|
893
|
+
respond(r);
|
|
894
|
+
else
|
|
895
|
+
respond(null, `get_web_settings: ${r.error}${r.detail ? ` — ${r.detail}` : ""}`);
|
|
896
|
+
};
|
|
897
|
+
const setWebSettings = async (ctx, rawArgs, respond) => {
|
|
898
|
+
const v = validateArgs(SetWebSettingsArgs, rawArgs, "set_web_settings");
|
|
899
|
+
if (!v.ok) {
|
|
900
|
+
respond(null, v.error);
|
|
901
|
+
return;
|
|
902
|
+
}
|
|
903
|
+
if (!ctx.webSettings) {
|
|
904
|
+
respond(null, "set_web_settings is unavailable on this fleet");
|
|
905
|
+
return;
|
|
906
|
+
}
|
|
907
|
+
try {
|
|
908
|
+
respond(ctx.webSettings.change(v.data.person, v.data.change));
|
|
909
|
+
}
|
|
910
|
+
catch (err) {
|
|
911
|
+
respond(null, `set_web_settings failed: ${err.message}`);
|
|
912
|
+
}
|
|
913
|
+
};
|
|
914
|
+
/**
|
|
915
|
+
* #2001: the prompt-cache report for an agent. From the last scan (cacheReportPublished: in-memory ledgers, reused
|
|
916
|
+
* for a minute) — no transcript read and no process on the fleet loop. Who sees what: cacheReportScope.
|
|
917
|
+
*/
|
|
918
|
+
const getCacheReport = async (ctx, rawArgs, respond, meta) => {
|
|
919
|
+
const v = validateArgs(GetCacheReportArgs, rawArgs, "get_cache_report");
|
|
920
|
+
if (!v.ok) {
|
|
921
|
+
respond(null, v.error);
|
|
922
|
+
return;
|
|
923
|
+
}
|
|
924
|
+
const caller = meta?.instanceName;
|
|
925
|
+
if (!caller) {
|
|
926
|
+
respond(null, "get_cache_report: the calling instance is unknown");
|
|
927
|
+
return;
|
|
928
|
+
}
|
|
929
|
+
if (!ctx.cacheReportPublished) {
|
|
930
|
+
respond(null, "get_cache_report is unavailable on this fleet");
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
933
|
+
const { resolveToolSet, cacheReportScope } = await import("./tool-permissions.js");
|
|
934
|
+
const { cacheReportForTool } = await import("./cache-report-tool.js");
|
|
935
|
+
const scope = cacheReportScope(resolveToolSet(ctx.fleetConfig?.instances[caller], caller));
|
|
936
|
+
try {
|
|
937
|
+
const out = cacheReportForTool(await ctx.cacheReportPublished(v.data.window ?? "7d"), { scope, caller, instance: v.data.instance, top: v.data.top });
|
|
938
|
+
if ("error" in out && typeof out.error === "string")
|
|
939
|
+
respond(null, out.error);
|
|
940
|
+
else
|
|
941
|
+
respond(out);
|
|
942
|
+
}
|
|
943
|
+
catch (err) {
|
|
944
|
+
respond(null, `get_cache_report failed: ${err.message}`);
|
|
945
|
+
}
|
|
946
|
+
};
|
|
947
|
+
/**
|
|
948
|
+
* #2122: the usage report for an agent — the dashboard's Fleet → Usage, from the last scan (no transcript read). Who
|
|
949
|
+
* sees what: cacheReportScope (its own row, or the fleet). Every amount carries `basis`: the API-equivalent at list
|
|
950
|
+
* price, not money spent.
|
|
951
|
+
*/
|
|
952
|
+
const getUsageReport = async (ctx, rawArgs, respond, meta) => {
|
|
953
|
+
const v = validateArgs(GetUsageReportArgs, rawArgs, "get_usage_report");
|
|
954
|
+
if (!v.ok) {
|
|
955
|
+
respond(null, v.error);
|
|
956
|
+
return;
|
|
957
|
+
}
|
|
958
|
+
const caller = meta?.instanceName;
|
|
959
|
+
if (!caller) {
|
|
960
|
+
respond(null, "get_usage_report: the calling instance is unknown");
|
|
961
|
+
return;
|
|
962
|
+
}
|
|
963
|
+
if (!ctx.usageReport) {
|
|
964
|
+
respond(null, "get_usage_report is unavailable on this fleet");
|
|
965
|
+
return;
|
|
966
|
+
}
|
|
967
|
+
const { resolveToolSet, cacheReportScope } = await import("./tool-permissions.js");
|
|
968
|
+
const { usageRange, usageGroup } = await import("./usage-report.js");
|
|
969
|
+
const scope = cacheReportScope(resolveToolSet(ctx.fleetConfig?.instances[caller], caller));
|
|
970
|
+
if (scope === "own" && v.data.instance !== undefined && v.data.instance !== caller) {
|
|
971
|
+
respond(null, "get_usage_report: an instance reads only its own row");
|
|
972
|
+
return;
|
|
973
|
+
}
|
|
974
|
+
const only = scope === "own" ? caller : v.data.instance;
|
|
975
|
+
try {
|
|
976
|
+
const r = await ctx.usageReport({ range: usageRange(v.data.range, v.data.from, v.data.to), group: scope === "own" ? "instance" : usageGroup(v.data.group), ...(only ? { only } : {}) });
|
|
977
|
+
const top = v.data.top ?? 10;
|
|
978
|
+
respond({
|
|
979
|
+
basis: r.basis, range: r.range, zone: r.zone, granularity: r.granularity, group: r.group,
|
|
980
|
+
rows: r.rows.slice(0, top).map(row => ({ ...row, basis: r.basis })),
|
|
981
|
+
more: Math.max(0, r.rows.length - top),
|
|
982
|
+
totals: { ...r.totals, basis: r.basis },
|
|
983
|
+
notMeasured: r.notMeasured, shared: r.shared, scanning: r.scanning,
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
catch (err) {
|
|
987
|
+
respond(null, `get_usage_report failed: ${err.message}`);
|
|
988
|
+
}
|
|
989
|
+
};
|
|
874
990
|
/**
|
|
875
991
|
* Enumerate a backend's models. Read-only and best-effort by design: the
|
|
876
992
|
* catalog is an aid for picking a name, and AgEnD passes model strings through
|
|
@@ -1993,6 +2109,10 @@ export const outboundHandlers = new Map([
|
|
|
1993
2109
|
["close_poll", closePoll],
|
|
1994
2110
|
["kiro_engine_status", kiroEngineStatusHandler],
|
|
1995
2111
|
["get_usage", getUsage],
|
|
2112
|
+
["get_cache_report", getCacheReport],
|
|
2113
|
+
["get_usage_report", getUsageReport],
|
|
2114
|
+
["get_web_settings", getWebSettings],
|
|
2115
|
+
["set_web_settings", setWebSettings],
|
|
1996
2116
|
["list_models", listModels],
|
|
1997
2117
|
["get_instance_logs", getInstanceLogs],
|
|
1998
2118
|
["get_fleet_config", getFleetConfig],
|