@songsid/agend 2.2.0-beta.2 → 2.2.0-beta.4
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.js +6 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/auth-api.js +2 -0
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/claude-code.d.ts +39 -2
- package/dist/backend/claude-code.js +115 -31
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/credential-profile.d.ts +33 -3
- package/dist/backend/credential-profile.js +107 -5
- package/dist/backend/credential-profile.js.map +1 -1
- package/dist/backend/types.d.ts +1 -1
- package/dist/cache-service.d.ts +2 -0
- package/dist/cache-service.js +2 -1
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +14 -1
- package/dist/channel/adapters/discord.js +42 -0
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +18 -3
- package/dist/channel/adapters/telegram.js +66 -10
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/telegram-markdown.d.ts +6 -0
- package/dist/channel/telegram-markdown.js +104 -0
- package/dist/channel/telegram-markdown.js.map +1 -0
- package/dist/channel/tool-router.js +5 -4
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/channel/types.d.ts +27 -4
- package/dist/config-validator.js +10 -5
- package/dist/config-validator.js.map +1 -1
- package/dist/daemon.d.ts +108 -0
- package/dist/daemon.js +432 -32
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.d.ts +29 -7
- package/dist/delivery-outbox.js +134 -16
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +18 -1
- package/dist/delivery-reconciliation.js +67 -2
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/fleet-context.d.ts +1 -0
- package/dist/fleet-manager.d.ts +81 -4
- package/dist/fleet-manager.js +452 -85
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +43 -10
- package/dist/host-memory.d.ts +10 -0
- package/dist/host-memory.js +33 -1
- package/dist/host-memory.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +25 -6
- package/dist/instance-lifecycle.js +73 -26
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/locale.js +48 -18
- package/dist/locale.js.map +1 -1
- package/dist/login-controller.d.ts +20 -3
- package/dist/login-controller.js +71 -19
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.d.ts +5 -2
- package/dist/login-flows.js +5 -4
- package/dist/login-flows.js.map +1 -1
- package/dist/memory-pressure.d.ts +13 -1
- package/dist/memory-pressure.js +50 -10
- package/dist/memory-pressure.js.map +1 -1
- package/dist/outbound-handlers.d.ts +63 -0
- package/dist/outbound-handlers.js +121 -46
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +3 -2
- package/dist/outbound-schemas.js +3 -1
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +8 -5
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/settings-api.js +10 -4
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +2 -2
- package/dist/spawn-gate.js +5 -1
- package/dist/spawn-gate.js.map +1 -1
- package/dist/spawn-hold-reply.d.ts +12 -0
- package/dist/spawn-hold-reply.js +39 -0
- package/dist/spawn-hold-reply.js.map +1 -0
- package/dist/tips.js +1 -1
- package/dist/tips.js.map +1 -1
- package/dist/topic-commands.js +9 -2
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-delta-reader.d.ts +3 -3
- package/dist/transcript-delta-reader.js +8 -8
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/turn-resume.d.ts +2 -0
- package/dist/turn-resume.js +1 -1
- package/dist/turn-resume.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/ui/chat-mentions.js +63 -0
- package/dist/ui/chat-render.js +25 -0
- package/dist/ui/chat-store.js +1 -1
- package/dist/ui/chat-strings.js +12 -12
- package/dist/ui/chat-thread.js +48 -11
- package/dist/ui/panel-chat.js +20 -9
- package/dist/ui/panel-details.js +2 -0
- package/dist/ui/panel-fleet.js +51 -22
- package/dist/ui/panel-settings.js +18 -9
- package/dist/ui/preview-panel.js +48 -14
- package/dist/ui/preview.js +5 -1
- package/dist/ui/settings-strings.js +6 -2
- package/dist/ui/settings-token.js +1 -1
- package/dist/ui/shared/app-i18n.js +35 -13
- package/dist/ui/shared/app-prefs.js +249 -0
- package/dist/ui/shared/app-shell.js +17 -4
- package/dist/ui/shared/app-store.js +5 -1
- package/dist/ui/shared/app.css +41 -7
- package/dist/ui/shared/app.js +6 -1
- package/dist/ui/shared/header-tools.js +55 -5
- package/dist/ui/shared/instance-nav.js +131 -38
- package/dist/ui/shared/panel-view.js +6 -0
- package/dist/ui/shared/theme.js +39 -7
- package/dist/ui/shared/ui-icons.js +1 -0
- package/dist/ui/shared/usage-dialog.js +13 -4
- package/dist/ui/shared/view-strings.js +26 -2
- package/dist/unrecognised-prompt.d.ts +23 -0
- package/dist/unrecognised-prompt.js +74 -0
- package/dist/unrecognised-prompt.js.map +1 -0
- package/dist/view-api.js +5 -0
- package/dist/view-api.js.map +1 -1
- package/dist/web-api.d.ts +13 -1
- package/dist/web-api.js +218 -18
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.js +3 -2
- package/dist/web-auth.js.map +1 -1
- package/dist/web-mentions.d.ts +44 -0
- package/dist/web-mentions.js +75 -0
- package/dist/web-mentions.js.map +1 -0
- package/dist/web-prefs.d.ts +63 -0
- package/dist/web-prefs.js +263 -0
- package/dist/web-prefs.js.map +1 -0
- package/dist/web-session.js +1 -1
- package/dist/web-session.js.map +1 -1
- package/package.json +1 -1
package/dist/memory-pressure.js
CHANGED
|
@@ -4,6 +4,8 @@ import { platform } from "node:os";
|
|
|
4
4
|
const MiB = 1024 * 1024;
|
|
5
5
|
export const MEMORY_SAMPLE_MS = 30_000;
|
|
6
6
|
export const MEMORY_RECOVERY_MS = 30_000;
|
|
7
|
+
/** AgEnD policy, in percent; documented together in docs/memory-pressure.md. */
|
|
8
|
+
export const LINUX_PSI_THRESHOLDS = Object.freeze({ someAvg60Elevated: 10, fullAvg10Elevated: 5, fullAvg10Critical: 20 });
|
|
7
9
|
/** One fleet sampler/policy, shared by spawn admission and health. Linux reads stay synchronous; macOS uses a bounded async probe. */
|
|
8
10
|
export class MemoryPressure {
|
|
9
11
|
options;
|
|
@@ -22,13 +24,18 @@ export class MemoryPressure {
|
|
|
22
24
|
history = [];
|
|
23
25
|
listeners = new Set();
|
|
24
26
|
recoveryUntil = 0;
|
|
27
|
+
// A PSI level cannot arm RAM/swap release thresholds. Track actual triggers,
|
|
28
|
+
// including ones masked by simultaneous PSI, independently of the aggregate.
|
|
29
|
+
ramCriticalHeld = false;
|
|
30
|
+
ramLowHeld = false;
|
|
31
|
+
ramSwapHeld = false;
|
|
25
32
|
current = {
|
|
26
33
|
level: "unknown", memory: null, sampledAt: null, recovering: false, samples: 0, trend: null,
|
|
27
34
|
};
|
|
28
35
|
constructor(options = {}) {
|
|
29
36
|
this.options = options;
|
|
30
37
|
this.platform = options.platform ?? platform();
|
|
31
|
-
this.read = options.read ?? (() => readHostMemory({ platform: this.platform }));
|
|
38
|
+
this.read = options.read ?? (() => readHostMemory({ platform: this.platform, includePressure: this.platform === "linux" }));
|
|
32
39
|
this.now = options.now ?? Date.now;
|
|
33
40
|
this.monotonicNow = options.monotonicNow ?? (() => performance.now());
|
|
34
41
|
this.native = this.platform === "darwin" && !options.read ? options.darwinProbe ?? new DarwinMemoryProbe({ includePressure: true }) : null;
|
|
@@ -59,14 +66,17 @@ export class MemoryPressure {
|
|
|
59
66
|
return this.snapshot();
|
|
60
67
|
this.recoveryUntil = (this.platform === "darwin" ? this.monotonicNow() : this.now()) + MEMORY_RECOVERY_MS;
|
|
61
68
|
this.current = { ...this.current, recovering: true,
|
|
69
|
+
...(this.platform === "linux" && this.current.level === "normal" ? { signal: "recovery" } : {}),
|
|
62
70
|
level: this.current.level === "normal" ? "elevated" : this.current.level };
|
|
63
71
|
return this.snapshot();
|
|
64
72
|
}
|
|
65
73
|
/** Health readers cannot create samples or move recovery deadlines. */
|
|
66
74
|
snapshot() {
|
|
67
|
-
return { ...this.current, memory: this.current.memory && { ...this.current.memory
|
|
75
|
+
return { ...this.current, memory: this.current.memory && { ...this.current.memory,
|
|
76
|
+
...(this.current.memory.linuxPsi !== undefined ? { linuxPsi: this.current.memory.linuxPsi && { ...this.current.memory.linuxPsi } } : {}) },
|
|
77
|
+
trend: this.current.trend && { ...this.current.trend } };
|
|
68
78
|
}
|
|
69
|
-
/**
|
|
79
|
+
/** Only unknown Darwin kernel alarms bypass pressure admission; unavailable Linux PSI uses RAM fallback. */
|
|
70
80
|
advisoryOnly() {
|
|
71
81
|
return this.platform === "darwin" && this.current.level === "unknown";
|
|
72
82
|
}
|
|
@@ -134,6 +144,11 @@ export class MemoryPressure {
|
|
|
134
144
|
if (value && Number.isFinite(value.totalBytes) && value.totalBytes > 0
|
|
135
145
|
&& value.availableBytes !== null && Number.isFinite(value.availableBytes) && value.availableBytes >= 0 && value.availableBytes <= value.totalBytes) {
|
|
136
146
|
memory = { ...value, availableBytes: value.availableBytes };
|
|
147
|
+
if (value.linuxPsi !== undefined) {
|
|
148
|
+
const psi = value.linuxPsi;
|
|
149
|
+
memory.linuxPsi = psi && [psi.someAvg60, psi.fullAvg10].every(n => Number.isFinite(n) && n >= 0 && n <= 100)
|
|
150
|
+
? { ...psi } : null;
|
|
151
|
+
}
|
|
137
152
|
if (value.swapTotalBytes === null || value.swapFreeBytes === null
|
|
138
153
|
|| !Number.isFinite(value.swapTotalBytes) || !Number.isFinite(value.swapFreeBytes)
|
|
139
154
|
|| value.swapTotalBytes < 0 || value.swapFreeBytes < 0 || value.swapFreeBytes > value.swapTotalBytes) {
|
|
@@ -143,27 +158,50 @@ export class MemoryPressure {
|
|
|
143
158
|
}
|
|
144
159
|
catch { /* Unavailable data slows admissions; it cannot deadlock the fleet. */ }
|
|
145
160
|
let level = "unknown";
|
|
161
|
+
let signal = null;
|
|
146
162
|
if (memory) {
|
|
163
|
+
const linux = this.platform === "linux";
|
|
164
|
+
const psi = linux ? memory.linuxPsi : null;
|
|
147
165
|
const critical = Math.max(this.options.criticalBytes ?? 300 * MiB, memory.totalBytes * 0.02);
|
|
148
166
|
const low = Math.max(critical * 2, memory.totalBytes * 0.05);
|
|
149
167
|
const swapRatio = memory.swapTotalBytes && memory.swapFreeBytes !== null
|
|
150
168
|
? memory.swapFreeBytes / memory.swapTotalBytes : null;
|
|
151
169
|
const swapTight = swapRatio !== null && swapRatio <= 0.05;
|
|
152
|
-
const
|
|
170
|
+
const psiCritical = !!psi && psi.fullAvg10 >= LINUX_PSI_THRESHOLDS.fullAvg10Critical;
|
|
171
|
+
const psiFullElevated = !!psi && psi.fullAvg10 >= LINUX_PSI_THRESHOLDS.fullAvg10Elevated;
|
|
172
|
+
const psiSomeElevated = !!psi && psi.someAvg60 >= LINUX_PSI_THRESHOLDS.someAvg60Elevated;
|
|
173
|
+
const ramCritical = memory.availableKind === "available"
|
|
153
174
|
&& (memory.availableBytes < critical || (memory.availableBytes < low && swapTight));
|
|
175
|
+
const swapCanElevate = !linux || (!psi && memory.availableBytes < low * 2);
|
|
176
|
+
const swapLingering = swapCanElevate && swapRatio !== null && swapRatio <= 0.1;
|
|
177
|
+
if (linux) {
|
|
178
|
+
this.ramCriticalHeld = ramCritical || (this.ramCriticalHeld
|
|
179
|
+
&& memory.availableKind === "available" && memory.availableBytes < critical * 1.5);
|
|
180
|
+
this.ramLowHeld = memory.availableBytes < low || (this.ramLowHeld && memory.availableBytes < low * 1.2);
|
|
181
|
+
this.ramSwapHeld = (swapTight && swapCanElevate) || (this.ramSwapHeld && swapLingering);
|
|
182
|
+
}
|
|
183
|
+
const ramCriticalHold = linux ? this.ramCriticalHeld : ramCritical || (this.current.level === "critical"
|
|
184
|
+
&& memory.availableKind === "available" && memory.availableBytes < critical * 1.5);
|
|
185
|
+
const ramLowHold = linux ? this.ramLowHeld : memory.availableBytes < low
|
|
186
|
+
|| (this.current.level === "elevated" && memory.availableBytes < low * 1.2);
|
|
187
|
+
const ramSwapHold = linux ? this.ramSwapHeld : (swapTight && swapCanElevate)
|
|
188
|
+
|| (this.current.level === "elevated" && swapLingering);
|
|
154
189
|
// MemFree alone cannot distinguish healthy reclaimable cache from pressure.
|
|
155
190
|
// It can throttle, but must never impose an indefinite Linux procfs-failure hold.
|
|
156
|
-
if (
|
|
157
|
-
&& memory.availableKind === "available" && memory.availableBytes < critical * 1.5)) {
|
|
191
|
+
if (psiCritical || ramCriticalHold) {
|
|
158
192
|
level = "critical";
|
|
193
|
+
signal = psiCritical ? "psi-full" : memory.availableBytes < critical || !ramCritical ? "available" : "available-swap";
|
|
159
194
|
this.recoveryUntil = 0;
|
|
160
195
|
}
|
|
161
196
|
else {
|
|
162
197
|
if (this.current.level === "critical")
|
|
163
198
|
this.recoveryUntil = at + MEMORY_RECOVERY_MS;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
199
|
+
// Cold swap is not pressure. Its fallback and release hysteresis need low RAM too.
|
|
200
|
+
level = psiFullElevated || psiSomeElevated || ramLowHold || ramSwapHold
|
|
201
|
+
|| at < this.recoveryUntil ? "elevated" : "normal";
|
|
202
|
+
if (level === "elevated")
|
|
203
|
+
signal = psiFullElevated ? "psi-full" : psiSomeElevated ? "psi-some"
|
|
204
|
+
: ramLowHold ? "available" : ramSwapHold ? "available-swap" : "recovery";
|
|
167
205
|
}
|
|
168
206
|
const last = this.history.at(-1);
|
|
169
207
|
// Admission bursts must not fill history with near-identical microsecond samples.
|
|
@@ -176,6 +214,7 @@ export class MemoryPressure {
|
|
|
176
214
|
else {
|
|
177
215
|
this.history = [];
|
|
178
216
|
this.recoveryUntil = 0;
|
|
217
|
+
this.ramCriticalHeld = this.ramLowHeld = this.ramSwapHeld = false;
|
|
179
218
|
}
|
|
180
219
|
let trend = null;
|
|
181
220
|
const first = this.history[0];
|
|
@@ -189,7 +228,8 @@ export class MemoryPressure {
|
|
|
189
228
|
? (last.memory.swapFreeBytes - first.memory.swapFreeBytes) / minutes : null,
|
|
190
229
|
};
|
|
191
230
|
}
|
|
192
|
-
this.current = { level, memory, sampledAt: at, recovering: at < this.recoveryUntil, samples: this.history.length, trend
|
|
231
|
+
this.current = { level, memory, sampledAt: at, recovering: at < this.recoveryUntil, samples: this.history.length, trend,
|
|
232
|
+
...(this.platform === "linux" ? { signal } : {}) };
|
|
193
233
|
if (this.timer) {
|
|
194
234
|
try {
|
|
195
235
|
this.options.onSample?.(this.snapshot());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-pressure.js","sourceRoot":"","sources":["../src/memory-pressure.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory-pressure.js","sourceRoot":"","sources":["../src/memory-pressure.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,6 +84,8 @@ export interface OutboundContext {
|
|
|
84
84
|
/** Post a notice into an instance's own topic (used to report failed deliveries). */
|
|
85
85
|
notifyInstanceTopic?(instanceName: string, text: string): void;
|
|
86
86
|
sendCancelButton?(instanceName: string, correlationId?: string): Promise<void>;
|
|
87
|
+
/** Push a web UI event; a "message" is recorded in the instance's web chat history (#1565). */
|
|
88
|
+
emitSseEvent?(event: string, data: unknown): void;
|
|
87
89
|
clearCancelButton?(instanceName: string): void;
|
|
88
90
|
clearCancelButtonByCorrelation?(correlationId: string): void;
|
|
89
91
|
getInstanceInteraction?(name: string): InteractionSnapshot | null;
|
|
@@ -126,5 +128,66 @@ export declare function setCrossInstanceRetryForTests(cfg: {
|
|
|
126
128
|
} | null): void;
|
|
127
129
|
/** Long enough for the relaunched CLI to be listening; matches replace_instance. */
|
|
128
130
|
export declare const PROFILE_HANDOVER_SETTLE_MS = 3000;
|
|
131
|
+
/**
|
|
132
|
+
* #1692: the one creation of a team — create_team (agents) and POST /ui/teams (the web) both come here. Members must be
|
|
133
|
+
* instances fleet.yaml defines (own keys; repeats dropped); an existing team is never overwritten (409); a name every
|
|
134
|
+
* object already has (`__proto__`, `constructor`, `toString`…) is not a team name. The team and its save are one: a
|
|
135
|
+
* save that throws removes it again (500).
|
|
136
|
+
*/
|
|
137
|
+
export declare function commitTeamCreate(fleetConfig: {
|
|
138
|
+
instances: Record<string, unknown>;
|
|
139
|
+
teams?: Record<string, {
|
|
140
|
+
members: string[];
|
|
141
|
+
description?: string;
|
|
142
|
+
}>;
|
|
143
|
+
} | null, args: {
|
|
144
|
+
name: string;
|
|
145
|
+
members: string[];
|
|
146
|
+
description?: string;
|
|
147
|
+
}, save: () => void): {
|
|
148
|
+
ok: true;
|
|
149
|
+
result: {
|
|
150
|
+
created: string;
|
|
151
|
+
members: string[];
|
|
152
|
+
};
|
|
153
|
+
} | {
|
|
154
|
+
ok: false;
|
|
155
|
+
status: 400 | 409 | 500;
|
|
156
|
+
error: string;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* #1689: the one update of a team — update_team (agents) and PATCH /ui/teams/<name> (the web) both come here. Own keys
|
|
160
|
+
* only: a team or an instance is one fleet.yaml defines (`__proto__` and `constructor` are not); nothing changes unless
|
|
161
|
+
* everything is valid. `description`: "" clears it. Renaming is not an update (the org chart and agents name teams).
|
|
162
|
+
* The caller saves fleet.yaml after an ok.
|
|
163
|
+
*/
|
|
164
|
+
export declare function applyTeamUpdate(fleetConfig: {
|
|
165
|
+
instances: Record<string, unknown>;
|
|
166
|
+
teams?: Record<string, {
|
|
167
|
+
members: string[];
|
|
168
|
+
description?: string;
|
|
169
|
+
}>;
|
|
170
|
+
} | null, args: {
|
|
171
|
+
name: string;
|
|
172
|
+
add?: string[];
|
|
173
|
+
remove?: string[];
|
|
174
|
+
description?: string;
|
|
175
|
+
}): {
|
|
176
|
+
ok: true;
|
|
177
|
+
result: {
|
|
178
|
+
name: string;
|
|
179
|
+
members: string[];
|
|
180
|
+
description: string | null;
|
|
181
|
+
};
|
|
182
|
+
} | {
|
|
183
|
+
ok: false;
|
|
184
|
+
status: 400 | 404 | 500;
|
|
185
|
+
error: string;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* #1689 review: the update and its save as one — a save that fails (an I/O error) puts the team back as it was, so the
|
|
189
|
+
* live fleet never differs from fleet.yaml; that is a 500 (the input was fine), not a 400.
|
|
190
|
+
*/
|
|
191
|
+
export declare function commitTeamUpdate(fleetConfig: Parameters<typeof applyTeamUpdate>[0], args: Parameters<typeof applyTeamUpdate>[1], save: () => void): ReturnType<typeof applyTeamUpdate>;
|
|
129
192
|
export declare const outboundHandlers: Map<string, Handler>;
|
|
130
193
|
export {};
|
|
@@ -11,7 +11,7 @@ import { truncatePreview } from "./channel/markdown-chunk.js";
|
|
|
11
11
|
import { crossInstanceVisibility, senderTopicNotice, targetTopicNotice } from "./cross-instance-notice.js";
|
|
12
12
|
import { instanceSupportsSteer } from "./steer-capability.js";
|
|
13
13
|
import { assignDisplayLabels, displayInstanceName, readStatuslineModel } from "./topic-commands.js";
|
|
14
|
-
import { credentialProfileLogin, credentialSwitchStartsFresh, instanceCredentialProfile } from "./backend/credential-profile.js";
|
|
14
|
+
import { CHAT_PROFILE_LOGIN_BACKENDS, credentialProfileLogin, credentialSwitchStartsFresh, instanceCredentialProfile } from "./backend/credential-profile.js";
|
|
15
15
|
import { kiroEngineCandidates, kiroEngineStatus } from "./kiro-engine-status.js";
|
|
16
16
|
import { formatCrossInstanceInboundMessage, MAX_ASSEMBLED_CROSS_INSTANCE_MESSAGE_BYTES, } from "./cross-instance-envelope.js";
|
|
17
17
|
import { BroadcastArgs, CreateInstanceArgs, CreateTeamArgs, DelegateTaskArgs, DeleteInstanceArgs, DeleteTeamArgs, DeployTemplateArgs, DescribeInstanceArgs, ListDeploymentsArgs, ListInstancesArgs, ListTeamsArgs, ReplaceInstanceArgs, ReportResultArgs, DeliveryStatusArgs, RequestInformationArgs, RestartInstanceArgs, SendToInstanceArgs, PauseInstanceArgs, WakeInstanceArgs, StopInstanceArgs, GetInstanceLogsArgs, GetEffortArgs, KiroEngineStatusArgs, GetUsageArgs, ListModelsArgs, GetFleetConfigArgs, UpdateInstanceConfigArgs, UpdateFleetDefaultsArgs, StartInstanceArgs, TeardownDeploymentArgs, UpdateTeamArgs, validateArgs, } from "./outbound-schemas.js";
|
|
@@ -336,33 +336,43 @@ const sendToInstance = async (ctx, rawArgs, respond, meta) => {
|
|
|
336
336
|
displayName: ctx.fleetConfig?.instances[name]?.display_name,
|
|
337
337
|
})));
|
|
338
338
|
const displayLabel = (name) => fleetLabels.get(name) ?? displayInstanceName(name, ctx.fleetConfig?.instances[name]?.display_name);
|
|
339
|
+
const instances = ctx.fleetConfig?.instances ?? {};
|
|
340
|
+
const notice = { label: `${displayLabel(senderLabel)} → ${displayLabel(targetName)}`, message, requestKind, taskSummary: ipcMeta.task_summary };
|
|
341
|
+
const targetInstance = instances[targetInstanceName];
|
|
342
|
+
const targetIsGeneral = targetInstance?.general_topic === true;
|
|
343
|
+
const targetText = targetTopicNotice(crossInstanceVisibility(ctx.fleetConfig, targetInstanceName), notice);
|
|
344
|
+
const targetShown = targetText !== null && !targetIsGeneral && !ctx.sessionRegistry.has(targetName);
|
|
345
|
+
const senderInstance = instances[meta.instanceName];
|
|
346
|
+
const senderIsGeneral = senderInstance?.general_topic === true;
|
|
347
|
+
const senderText = senderTopicNotice(crossInstanceVisibility(ctx.fleetConfig, meta.instanceName), notice);
|
|
348
|
+
const senderShown = senderText !== null && !senderIsGeneral;
|
|
339
349
|
if (groupId && ctx.adapter) {
|
|
340
|
-
const instances = ctx.fleetConfig?.instances ?? {};
|
|
341
|
-
const notificationLabel = `${displayLabel(senderLabel)} → ${displayLabel(targetName)}`;
|
|
342
|
-
const notice = { label: notificationLabel, message, requestKind, taskSummary: ipcMeta.task_summary };
|
|
343
350
|
// ── Target topic notification ──
|
|
344
|
-
const targetInstance = instances[targetInstanceName];
|
|
345
351
|
const targetTopicId = targetInstance?.topic_id;
|
|
346
|
-
|
|
347
|
-
const targetText = targetTopicNotice(crossInstanceVisibility(ctx.fleetConfig, targetInstanceName), notice);
|
|
348
|
-
if (targetText !== null && targetTopicId && !targetIsGeneral && !ctx.sessionRegistry.has(targetName)) {
|
|
352
|
+
if (targetShown && targetTopicId) {
|
|
349
353
|
const targetAdapter = ctx.getAdapterForInstance?.(targetInstanceName) ?? ctx.adapter;
|
|
350
354
|
const targetGroupId = ctx.getGroupIdForInstance?.(targetInstanceName) ?? String(groupId);
|
|
351
355
|
targetAdapter.sendText(String(targetGroupId), targetText, { threadId: String(targetTopicId) })
|
|
352
356
|
.catch(e => ctx.logger.warn({ err: e }, "Failed to post target topic notification"));
|
|
353
357
|
}
|
|
354
358
|
// ── Sender topic notification ──
|
|
355
|
-
const senderInstance = instances[meta.instanceName];
|
|
356
359
|
const senderTopicId = senderInstance?.topic_id;
|
|
357
|
-
|
|
358
|
-
const senderText = senderTopicNotice(crossInstanceVisibility(ctx.fleetConfig, meta.instanceName), notice);
|
|
359
|
-
if (senderText !== null && senderTopicId && !senderIsGeneral) {
|
|
360
|
+
if (senderShown && senderTopicId) {
|
|
360
361
|
const senderAdapter = ctx.getAdapterForInstance?.(meta.instanceName) ?? ctx.adapter;
|
|
361
362
|
const senderGroupId = ctx.getGroupIdForInstance?.(meta.instanceName) ?? String(groupId);
|
|
362
363
|
senderAdapter.sendText(senderGroupId, senderText, { threadId: String(senderTopicId) })
|
|
363
364
|
.catch(e => ctx.logger.warn({ err: e }, "Failed to post sender topic notification"));
|
|
364
365
|
}
|
|
365
366
|
}
|
|
367
|
+
// #1672: the same notices in each instance's web chat — a muted status line, never an agent's or a person's message.
|
|
368
|
+
// Not gated on a topic or a chat platform (a web-only fleet, a topic-less instance); recorded in its history (#1565).
|
|
369
|
+
const webNotice = (instance, text) => ctx.emitSseEvent?.("message", {
|
|
370
|
+
instance, sender: displayLabel(senderLabel), role: "status", text, ts: new Date().toISOString(),
|
|
371
|
+
});
|
|
372
|
+
if (targetShown)
|
|
373
|
+
webNotice(targetInstanceName, targetText);
|
|
374
|
+
if (senderShown)
|
|
375
|
+
webNotice(meta.instanceName, senderText);
|
|
366
376
|
// #856: the same line, now carrying the envelope's message_id and a short
|
|
367
377
|
// content digest, so a disputed message can be matched to its outbox row
|
|
368
378
|
// and paste digests without adding a log line per delivery.
|
|
@@ -1029,7 +1039,9 @@ const updateInstanceConfig = (ctx, rawArgs, respond) => {
|
|
|
1029
1039
|
const login = credentialProfileLogin(ctx.dataDir, backendAfter, profileAfter);
|
|
1030
1040
|
if (login.state === "signed-out") {
|
|
1031
1041
|
rollback();
|
|
1032
|
-
|
|
1042
|
+
// #1699 part 2: a claude-code profile can also be signed in from chat, in the browser terminal.
|
|
1043
|
+
const fromChat = CHAT_PROFILE_LOGIN_BACKENDS.has(backendAfter) ? `\n or from chat: /login ${backendAfter} ${profileAfter}` : "";
|
|
1044
|
+
respond(null, `Rejected: credential profile "${profileAfter}" has no ${backendAfter} login yet, and switching to it would leave the agent waiting at a sign-in prompt. Log it in first:\n ${login.loginCommand}${fromChat}`);
|
|
1033
1045
|
return;
|
|
1034
1046
|
}
|
|
1035
1047
|
}
|
|
@@ -1404,30 +1416,50 @@ const broadcast = async (ctx, rawArgs, respond, meta) => {
|
|
|
1404
1416
|
});
|
|
1405
1417
|
};
|
|
1406
1418
|
// ── Teams ────────────────────────────────────────────────────────────────
|
|
1419
|
+
/**
|
|
1420
|
+
* #1692: the one creation of a team — create_team (agents) and POST /ui/teams (the web) both come here. Members must be
|
|
1421
|
+
* instances fleet.yaml defines (own keys; repeats dropped); an existing team is never overwritten (409); a name every
|
|
1422
|
+
* object already has (`__proto__`, `constructor`, `toString`…) is not a team name. The team and its save are one: a
|
|
1423
|
+
* save that throws removes it again (500).
|
|
1424
|
+
*/
|
|
1425
|
+
export function commitTeamCreate(fleetConfig, args, save) {
|
|
1426
|
+
if (!fleetConfig)
|
|
1427
|
+
return { ok: false, status: 500, error: "Fleet config not available" };
|
|
1428
|
+
if (args.name in Object.prototype)
|
|
1429
|
+
return { ok: false, status: 400, error: `Invalid team name: ${args.name}` };
|
|
1430
|
+
const invalid = args.members.filter(m => !Object.hasOwn(fleetConfig.instances, m));
|
|
1431
|
+
if (invalid.length)
|
|
1432
|
+
return { ok: false, status: 400, error: `Invalid instance names: ${invalid.join(", ")}` };
|
|
1433
|
+
if (fleetConfig.teams && Object.hasOwn(fleetConfig.teams, args.name))
|
|
1434
|
+
return { ok: false, status: 409, error: `Team already exists: ${args.name}` };
|
|
1435
|
+
const createdMap = !fleetConfig.teams;
|
|
1436
|
+
const teams = (fleetConfig.teams ??= {});
|
|
1437
|
+
const members = [...new Set(args.members)];
|
|
1438
|
+
const description = args.description?.trim();
|
|
1439
|
+
teams[args.name] = { members, ...(description ? { description } : {}) };
|
|
1440
|
+
try {
|
|
1441
|
+
save();
|
|
1442
|
+
}
|
|
1443
|
+
catch (err) {
|
|
1444
|
+
delete teams[args.name];
|
|
1445
|
+
if (createdMap)
|
|
1446
|
+
delete fleetConfig.teams;
|
|
1447
|
+
return { ok: false, status: 500, error: `Saving fleet.yaml failed; no team was created: ${err?.message ?? String(err)}` };
|
|
1448
|
+
}
|
|
1449
|
+
return { ok: true, result: { created: args.name, members } };
|
|
1450
|
+
}
|
|
1407
1451
|
const createTeam = (ctx, rawArgs, respond) => {
|
|
1408
1452
|
const v = validateArgs(CreateTeamArgs, rawArgs, "create_team");
|
|
1409
1453
|
if (!v.ok) {
|
|
1410
1454
|
respond(null, v.error);
|
|
1411
1455
|
return;
|
|
1412
1456
|
}
|
|
1413
|
-
const
|
|
1414
|
-
if (!
|
|
1415
|
-
respond(null,
|
|
1416
|
-
return;
|
|
1417
|
-
}
|
|
1418
|
-
const invalid = members.filter(m => !ctx.fleetConfig.instances[m]);
|
|
1419
|
-
if (invalid.length) {
|
|
1420
|
-
respond(null, `Invalid instance names: ${invalid.join(", ")}`);
|
|
1421
|
-
return;
|
|
1422
|
-
}
|
|
1423
|
-
ctx.fleetConfig.teams ??= {};
|
|
1424
|
-
if (ctx.fleetConfig.teams[name]) {
|
|
1425
|
-
respond(null, `Team already exists: ${name}`);
|
|
1457
|
+
const r = commitTeamCreate(ctx.fleetConfig, v.data, () => ctx.saveFleetConfig());
|
|
1458
|
+
if (!r.ok) {
|
|
1459
|
+
respond(null, r.error);
|
|
1426
1460
|
return;
|
|
1427
1461
|
}
|
|
1428
|
-
|
|
1429
|
-
ctx.saveFleetConfig();
|
|
1430
|
-
respond({ created: name, members });
|
|
1462
|
+
respond(r.result);
|
|
1431
1463
|
};
|
|
1432
1464
|
const deleteTeam = (ctx, rawArgs, respond) => {
|
|
1433
1465
|
const v = validateArgs(DeleteTeamArgs, rawArgs, "delete_team");
|
|
@@ -1461,31 +1493,74 @@ const listTeams = (ctx, rawArgs, respond) => {
|
|
|
1461
1493
|
}));
|
|
1462
1494
|
respond(result);
|
|
1463
1495
|
};
|
|
1496
|
+
/**
|
|
1497
|
+
* #1689: the one update of a team — update_team (agents) and PATCH /ui/teams/<name> (the web) both come here. Own keys
|
|
1498
|
+
* only: a team or an instance is one fleet.yaml defines (`__proto__` and `constructor` are not); nothing changes unless
|
|
1499
|
+
* everything is valid. `description`: "" clears it. Renaming is not an update (the org chart and agents name teams).
|
|
1500
|
+
* The caller saves fleet.yaml after an ok.
|
|
1501
|
+
*/
|
|
1502
|
+
export function applyTeamUpdate(fleetConfig, args) {
|
|
1503
|
+
if (!fleetConfig)
|
|
1504
|
+
return { ok: false, status: 500, error: "Fleet config not available" };
|
|
1505
|
+
const teams = fleetConfig.teams;
|
|
1506
|
+
if (!teams || !Object.hasOwn(teams, args.name))
|
|
1507
|
+
return { ok: false, status: 404, error: `Team not found: ${args.name}` };
|
|
1508
|
+
const team = teams[args.name];
|
|
1509
|
+
const invalid = (args.add ?? []).filter(m => !Object.hasOwn(fleetConfig.instances, m));
|
|
1510
|
+
if (invalid.length)
|
|
1511
|
+
return { ok: false, status: 400, error: `Invalid instance names: ${invalid.join(", ")}` };
|
|
1512
|
+
let members = [...team.members];
|
|
1513
|
+
if (args.add?.length)
|
|
1514
|
+
members = [...new Set([...members, ...args.add])];
|
|
1515
|
+
if (args.remove?.length)
|
|
1516
|
+
members = members.filter(m => !args.remove.includes(m));
|
|
1517
|
+
team.members = members;
|
|
1518
|
+
if (args.description !== undefined) {
|
|
1519
|
+
if (args.description.trim())
|
|
1520
|
+
team.description = args.description.trim();
|
|
1521
|
+
else
|
|
1522
|
+
delete team.description;
|
|
1523
|
+
}
|
|
1524
|
+
return { ok: true, result: { name: args.name, members: team.members, description: team.description ?? null } };
|
|
1525
|
+
}
|
|
1526
|
+
/**
|
|
1527
|
+
* #1689 review: the update and its save as one — a save that fails (an I/O error) puts the team back as it was, so the
|
|
1528
|
+
* live fleet never differs from fleet.yaml; that is a 500 (the input was fine), not a 400.
|
|
1529
|
+
*/
|
|
1530
|
+
export function commitTeamUpdate(fleetConfig, args, save) {
|
|
1531
|
+
const teams = fleetConfig?.teams;
|
|
1532
|
+
const team = teams && Object.hasOwn(teams, args.name) ? teams[args.name] : null;
|
|
1533
|
+
const before = team ? { members: [...team.members], hadDescription: Object.hasOwn(team, "description"), description: team.description } : null;
|
|
1534
|
+
const r = applyTeamUpdate(fleetConfig, args);
|
|
1535
|
+
if (!r.ok)
|
|
1536
|
+
return r;
|
|
1537
|
+
try {
|
|
1538
|
+
save();
|
|
1539
|
+
}
|
|
1540
|
+
catch (err) {
|
|
1541
|
+
if (team && before) {
|
|
1542
|
+
team.members = before.members;
|
|
1543
|
+
if (before.hadDescription)
|
|
1544
|
+
team.description = before.description;
|
|
1545
|
+
else
|
|
1546
|
+
delete team.description;
|
|
1547
|
+
}
|
|
1548
|
+
return { ok: false, status: 500, error: `Saving fleet.yaml failed; the team is unchanged: ${err?.message ?? String(err)}` };
|
|
1549
|
+
}
|
|
1550
|
+
return r;
|
|
1551
|
+
}
|
|
1464
1552
|
const updateTeam = (ctx, rawArgs, respond) => {
|
|
1465
1553
|
const v = validateArgs(UpdateTeamArgs, rawArgs, "update_team");
|
|
1466
1554
|
if (!v.ok) {
|
|
1467
1555
|
respond(null, v.error);
|
|
1468
1556
|
return;
|
|
1469
1557
|
}
|
|
1470
|
-
const
|
|
1471
|
-
if (!
|
|
1472
|
-
respond(null,
|
|
1558
|
+
const r = commitTeamUpdate(ctx.fleetConfig, v.data, () => ctx.saveFleetConfig());
|
|
1559
|
+
if (!r.ok) {
|
|
1560
|
+
respond(null, r.error);
|
|
1473
1561
|
return;
|
|
1474
1562
|
}
|
|
1475
|
-
|
|
1476
|
-
if (add?.length) {
|
|
1477
|
-
const invalid = add.filter(m => !ctx.fleetConfig.instances[m]);
|
|
1478
|
-
if (invalid.length) {
|
|
1479
|
-
respond(null, `Invalid instance names: ${invalid.join(", ")}`);
|
|
1480
|
-
return;
|
|
1481
|
-
}
|
|
1482
|
-
team.members = [...new Set([...team.members, ...add])];
|
|
1483
|
-
}
|
|
1484
|
-
if (remove?.length) {
|
|
1485
|
-
team.members = team.members.filter(m => !remove.includes(m));
|
|
1486
|
-
}
|
|
1487
|
-
ctx.saveFleetConfig();
|
|
1488
|
-
respond({ name, members: team.members });
|
|
1563
|
+
respond(r.result);
|
|
1489
1564
|
};
|
|
1490
1565
|
// ── Fleet Templates ────────────────────────────────────────────────────
|
|
1491
1566
|
const deployTemplate = async (ctx, rawArgs, respond) => {
|