@songsid/agend 2.1.2-beta.4 → 2.1.2-beta.41
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/access-path.js +15 -6
- package/dist/access-path.js.map +1 -1
- package/dist/agent-cli-instructions.md +1 -0
- package/dist/agent-cli.js +14 -0
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +2 -0
- package/dist/agent-endpoint.js +25 -1
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/backend/antigravity.d.ts +20 -0
- package/dist/backend/antigravity.js +51 -4
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +59 -0
- package/dist/backend/claude-code.js +67 -1
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex.d.ts +27 -0
- package/dist/backend/codex.js +93 -0
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok.d.ts +25 -0
- package/dist/backend/grok.js +51 -0
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +22 -0
- package/dist/backend/kiro.js +79 -1
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/types.d.ts +58 -0
- package/dist/backend/types.js +13 -1
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +15 -0
- package/dist/channel/adapters/discord.js +100 -2
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +21 -0
- package/dist/channel/adapters/telegram.js +86 -0
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/ipc-bridge.d.ts +9 -1
- package/dist/channel/ipc-bridge.js +12 -3
- package/dist/channel/ipc-bridge.js.map +1 -1
- package/dist/channel/ipc-timeouts.d.ts +46 -0
- package/dist/channel/ipc-timeouts.js +65 -0
- package/dist/channel/ipc-timeouts.js.map +1 -0
- package/dist/channel/mcp-server.js +30 -14
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.js +30 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/reconnect-backoff.d.ts +17 -0
- package/dist/channel/reconnect-backoff.js +21 -0
- package/dist/channel/reconnect-backoff.js.map +1 -0
- package/dist/channel/types.d.ts +29 -0
- package/dist/classic-channel-manager.js +1 -5
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +227 -87
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +27 -0
- package/dist/completion.js +121 -0
- package/dist/completion.js.map +1 -0
- package/dist/config-validator.js +21 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/cost-guard.d.ts +3 -1
- package/dist/cost-guard.js +3 -1
- package/dist/cost-guard.js.map +1 -1
- package/dist/daemon.d.ts +282 -14
- package/dist/daemon.js +1062 -311
- package/dist/daemon.js.map +1 -1
- package/dist/event-log.d.ts +31 -0
- package/dist/event-log.js +96 -0
- package/dist/event-log.js.map +1 -1
- package/dist/fleet-context.d.ts +9 -0
- package/dist/fleet-lock.d.ts +28 -0
- package/dist/fleet-lock.js +130 -0
- package/dist/fleet-lock.js.map +1 -0
- package/dist/fleet-manager.d.ts +315 -2
- package/dist/fleet-manager.js +1414 -108
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +22 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +14 -23
- package/dist/general-knowledge/skills/session-management/SKILL.md +15 -34
- package/dist/hang-detector.d.ts +19 -13
- package/dist/hang-detector.js +19 -49
- package/dist/hang-detector.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +52 -3
- package/dist/instance-lifecycle.js +194 -48
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +5 -0
- package/dist/instructions.js +9 -11
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +5 -1
- package/dist/locale.js.map +1 -1
- package/dist/logger.js +14 -0
- package/dist/logger.js.map +1 -1
- package/dist/mcp-liveness.d.ts +21 -0
- package/dist/mcp-liveness.js +27 -0
- package/dist/mcp-liveness.js.map +1 -0
- package/dist/outbound-handlers.d.ts +16 -0
- package/dist/outbound-handlers.js +151 -27
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +11 -3
- package/dist/outbound-schemas.js +16 -2
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/pane-write-lock.d.ts +48 -0
- package/dist/pane-write-lock.js +73 -0
- package/dist/pane-write-lock.js.map +1 -0
- package/dist/process-memory.d.ts +31 -0
- package/dist/process-memory.js +79 -0
- package/dist/process-memory.js.map +1 -0
- package/dist/quickstart.js +17 -16
- package/dist/quickstart.js.map +1 -1
- package/dist/reply-dedup.d.ts +41 -0
- package/dist/reply-dedup.js +0 -0
- package/dist/reply-dedup.js.map +1 -0
- package/dist/scheduler/db.js +3 -0
- package/dist/scheduler/db.js.map +1 -1
- package/dist/sd-notify.d.ts +27 -0
- package/dist/sd-notify.js +33 -1
- package/dist/sd-notify.js.map +1 -1
- package/dist/secret-file.d.ts +33 -0
- package/dist/secret-file.js +36 -0
- package/dist/secret-file.js.map +1 -0
- package/dist/service-installer.d.ts +16 -0
- package/dist/service-installer.js +56 -1
- package/dist/service-installer.js.map +1 -1
- package/dist/setup-wizard.js +9 -7
- package/dist/setup-wizard.js.map +1 -1
- package/dist/tmux-control.d.ts +58 -5
- package/dist/tmux-control.js +102 -14
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-manager.d.ts +31 -1
- package/dist/tmux-manager.js +40 -11
- package/dist/tmux-manager.js.map +1 -1
- package/dist/topic-commands.d.ts +49 -9
- package/dist/topic-commands.js +267 -105
- package/dist/topic-commands.js.map +1 -1
- package/dist/tui-glyphs.d.ts +5 -1
- package/dist/tui-glyphs.js +6 -2
- package/dist/tui-glyphs.js.map +1 -1
- package/dist/types.d.ts +12 -2
- package/dist/ui/view.html +123 -2
- package/dist/update-marker.d.ts +15 -0
- package/dist/update-marker.js +69 -0
- package/dist/update-marker.js.map +1 -0
- package/dist/usage/format-rich.d.ts +11 -0
- package/dist/usage/format-rich.js +121 -0
- package/dist/usage/format-rich.js.map +1 -0
- package/dist/usage/provider-alerts.d.ts +33 -0
- package/dist/usage/provider-alerts.js +57 -0
- package/dist/usage/provider-alerts.js.map +1 -0
- package/dist/usage/providers.d.ts +130 -0
- package/dist/usage/providers.js +1063 -0
- package/dist/usage/providers.js.map +1 -0
- package/dist/usage/statusline-usage.d.ts +20 -0
- package/dist/usage/statusline-usage.js +120 -0
- package/dist/usage/statusline-usage.js.map +1 -0
- package/dist/usage/usage-api.d.ts +50 -0
- package/dist/usage/usage-api.js +197 -0
- package/dist/usage/usage-api.js.map +1 -0
- package/dist/view-api.d.ts +3 -0
- package/dist/view-api.js +11 -2
- package/dist/view-api.js.map +1 -1
- package/dist/web-api.js +5 -2
- package/dist/web-api.js.map +1 -1
- package/package.json +4 -1
- package/dist/channel/tool-tracker.d.ts +0 -13
- package/dist/channel/tool-tracker.js +0 -58
- package/dist/channel/tool-tracker.js.map +0 -1
- package/dist/daemon-entry.d.ts +0 -1
- package/dist/daemon-entry.js +0 -30
- package/dist/daemon-entry.js.map +0 -1
package/dist/channel/types.d.ts
CHANGED
|
@@ -46,6 +46,16 @@ export interface ChannelAdapter extends EventEmitter {
|
|
|
46
46
|
getChatId(): string | null;
|
|
47
47
|
promptUser(chatId: string, text: string, choices: Choice[], opts?: SendOpts): Promise<string>;
|
|
48
48
|
notifyAlert(chatId: string, alert: AlertData, opts?: SendOpts): Promise<SentMessage>;
|
|
49
|
+
/**
|
|
50
|
+
* Update an alert's text **in place, keeping its buttons**.
|
|
51
|
+
*
|
|
52
|
+
* Needed because `editMessage` cannot be reused here: on Telegram it calls
|
|
53
|
+
* `editMessageText` without `reply_markup`, and omitting that field CLEARS the
|
|
54
|
+
* inline keyboard (see `editMessageRemoveButtons`, which relies on exactly that).
|
|
55
|
+
* So editing a cancel-button message's text with `editMessage` would silently
|
|
56
|
+
* delete the cancel button. This re-sends the keyboard from `alert.choices`.
|
|
57
|
+
*/
|
|
58
|
+
editAlert?(chatId: string, messageId: string, alert: AlertData, opts?: SendOpts): Promise<void>;
|
|
49
59
|
createTopic?(name: string): Promise<number | string>;
|
|
50
60
|
deleteTopic?(topicId: number | string): Promise<void>;
|
|
51
61
|
topicExists?(topicId: number | string): Promise<boolean>;
|
|
@@ -98,6 +108,25 @@ export interface InboundMessage {
|
|
|
98
108
|
replyTo?: string;
|
|
99
109
|
replyToText?: string;
|
|
100
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* A user adding or removing a reaction on one of the bot's messages (#408).
|
|
113
|
+
*
|
|
114
|
+
* Emitted as an adapter `reaction` event. `messageId` is the bot's message, which is
|
|
115
|
+
* what lets an agent tell WHICH of its messages was reacted to — the inbound block
|
|
116
|
+
* renders message_id, so the agent can correlate.
|
|
117
|
+
*/
|
|
118
|
+
export interface InboundReaction {
|
|
119
|
+
source: string;
|
|
120
|
+
adapterId: string;
|
|
121
|
+
chatId: string;
|
|
122
|
+
threadId?: string;
|
|
123
|
+
messageId: string;
|
|
124
|
+
userId: string;
|
|
125
|
+
username: string;
|
|
126
|
+
emoji: string;
|
|
127
|
+
action: "add" | "remove";
|
|
128
|
+
timestamp: Date;
|
|
129
|
+
}
|
|
101
130
|
export interface Attachment {
|
|
102
131
|
kind: "photo" | "document" | "audio" | "voice" | "video" | "sticker";
|
|
103
132
|
fileId: string;
|
|
@@ -4,7 +4,6 @@ import yaml from "js-yaml";
|
|
|
4
4
|
import { getAgendHome } from "./paths.js";
|
|
5
5
|
import { sanitizeInstanceName } from "./topic-commands.js";
|
|
6
6
|
import { KNOWN_BACKENDS } from "./config-validator.js";
|
|
7
|
-
const EXPERIMENTAL_BACKENDS = new Set(["grok"]);
|
|
8
7
|
/** Last real channel activity recorded in a ClassicBot chat log. */
|
|
9
8
|
export function readClassicLastActivityAt(dataDir, instanceName) {
|
|
10
9
|
const logDir = join(dataDir, "workspaces", instanceName, "chat-logs");
|
|
@@ -28,10 +27,7 @@ export function readClassicLastActivityAt(dataDir, instanceName) {
|
|
|
28
27
|
export function getClassicBackendChoices() {
|
|
29
28
|
return KNOWN_BACKENDS
|
|
30
29
|
.filter(backend => backend !== "mock" && backend !== "gemini-cli")
|
|
31
|
-
.map(backend => ({
|
|
32
|
-
id: backend,
|
|
33
|
-
label: EXPERIMENTAL_BACKENDS.has(backend) ? `${backend} ⚠️` : backend,
|
|
34
|
-
}));
|
|
30
|
+
.map(backend => ({ id: backend, label: backend }));
|
|
35
31
|
}
|
|
36
32
|
/** Reject test-only/unknown values supplied through `/start <backend>`. */
|
|
37
33
|
export function isSelectableClassicBackend(backend) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classic-channel-manager.js","sourceRoot":"","sources":["../src/classic-channel-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"classic-channel-manager.js","sourceRoot":"","sources":["../src/classic-channel-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -14,7 +14,10 @@ import { getAgendHome, getTmuxSocketName } from "./paths.js";
|
|
|
14
14
|
import { readClassicLastActivityAt } from "./classic-channel-manager.js";
|
|
15
15
|
import { hasPausedMarker } from "./pause-marker.js";
|
|
16
16
|
import { PIE_PERCENT_RE } from "./tui-glyphs.js";
|
|
17
|
+
import { COMPLETION_SHELLS, completionScript } from "./completion.js";
|
|
17
18
|
import { getUpdateSelector, lookupTargetVersion, reportUpdateRestart, shouldSkipUpdate, } from "./update-check.js";
|
|
19
|
+
import { clearUpdateMarker, markUpdateInProgress } from "./update-marker.js";
|
|
20
|
+
import { acquireFleetLock, releaseProcessFleetLock, setProcessFleetLock } from "./fleet-lock.js";
|
|
18
21
|
/** Prefix tmux args with -L when socket isolation is active. */
|
|
19
22
|
function tmuxArgs(args) {
|
|
20
23
|
const socket = getTmuxSocketName();
|
|
@@ -25,6 +28,18 @@ const __dirname = dirname(__filename);
|
|
|
25
28
|
const DATA_DIR = getAgendHome();
|
|
26
29
|
const FLEET_CONFIG_PATH = join(DATA_DIR, "fleet.yaml");
|
|
27
30
|
const program = new Command();
|
|
31
|
+
function claimFleetSingleton() {
|
|
32
|
+
try {
|
|
33
|
+
setProcessFleetLock(acquireFleetLock(DATA_DIR));
|
|
34
|
+
process.once("exit", () => { releaseProcessFleetLock(); });
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
console.error(err.message);
|
|
39
|
+
process.exitCode = 1;
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
28
43
|
// Read version from package.json at build time
|
|
29
44
|
const pkgVersion = (() => {
|
|
30
45
|
try {
|
|
@@ -68,8 +83,14 @@ fleet
|
|
|
68
83
|
const fleet = loadFleetConfig(FLEET_CONFIG_PATH);
|
|
69
84
|
const port = fleet.health_port ?? 19280;
|
|
70
85
|
try {
|
|
71
|
-
|
|
72
|
-
|
|
86
|
+
// Any HTTP answer means a fleet daemon is listening — including a 503,
|
|
87
|
+
// which /health now returns when the fleet is degraded (no adapter
|
|
88
|
+
// connected, an instance crashed). Checking `.ok` here would treat a
|
|
89
|
+
// degraded fleet as "not running" and start a SECOND fleet on the same
|
|
90
|
+
// data dir, whose startup cleanup kills the first one's tmux windows.
|
|
91
|
+
// Only a connection error means nothing is there (the catch below).
|
|
92
|
+
await fetch(`http://127.0.0.1:${port}/health`);
|
|
93
|
+
{
|
|
73
94
|
try {
|
|
74
95
|
const resp = await fetch(`http://127.0.0.1:${port}/api/instance/${encodeURIComponent(instance)}/start`, { method: "POST" });
|
|
75
96
|
const body = await resp.json();
|
|
@@ -90,8 +111,65 @@ fleet
|
|
|
90
111
|
}
|
|
91
112
|
catch { /* fleet not running, fall through */ }
|
|
92
113
|
}
|
|
114
|
+
// Claim the singleton before constructing FleetManager: its constructor and
|
|
115
|
+
// startAll path touch shared tmux, sockets, state files and adapters.
|
|
116
|
+
if (!claimFleetSingleton())
|
|
117
|
+
return;
|
|
93
118
|
const { FleetManager } = await import("./fleet-manager.js");
|
|
94
119
|
const fm = new FleetManager(DATA_DIR);
|
|
120
|
+
// Register crash/signal handlers BEFORE startAll(). Startup routinely takes
|
|
121
|
+
// minutes (sequential general spawn, staggered instances, warmup waits), and
|
|
122
|
+
// without these a Ctrl-C or `systemctl stop` in that window got Node's default
|
|
123
|
+
// behaviour: instant death with fleet.pid already written, databases unclosed,
|
|
124
|
+
// and every tmux window orphaned.
|
|
125
|
+
let stopping = false;
|
|
126
|
+
const shutdown = async () => {
|
|
127
|
+
if (stopping)
|
|
128
|
+
return; // SIGINT and SIGTERM share this, and crash paths call stopAll too
|
|
129
|
+
stopping = true;
|
|
130
|
+
console.log("\nStopping fleet...");
|
|
131
|
+
await fm.stopAll().catch(err => console.error("Shutdown error:", err));
|
|
132
|
+
process.exit(0);
|
|
133
|
+
};
|
|
134
|
+
process.on("SIGINT", shutdown);
|
|
135
|
+
process.on("SIGTERM", shutdown);
|
|
136
|
+
process.on("uncaughtException", (err) => {
|
|
137
|
+
// An uncaught exception leaves unknown state — still the one case worth
|
|
138
|
+
// tearing down for.
|
|
139
|
+
console.error("Uncaught exception:", err);
|
|
140
|
+
if (stopping)
|
|
141
|
+
return;
|
|
142
|
+
stopping = true;
|
|
143
|
+
fm.stopAll().catch(() => { }).finally(() => process.exit(1));
|
|
144
|
+
});
|
|
145
|
+
process.on("unhandledRejection", (err) => {
|
|
146
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
147
|
+
// 409 = another bot poller exists — the adapter retries, don't crash.
|
|
148
|
+
if (msg.includes("409") && msg.includes("getUpdates")) {
|
|
149
|
+
console.error("Bot polling conflict (409) — retrying...");
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// Do NOT take the fleet down. A rejected promise in one instance's tmux
|
|
153
|
+
// call, health tick, or model switch used to stop every other working
|
|
154
|
+
// instance and exit(1) — the widest blast radius in the process. The
|
|
155
|
+
// per-instance health check and crash recovery handle a genuinely broken
|
|
156
|
+
// instance on their own.
|
|
157
|
+
//
|
|
158
|
+
// Surviving quietly would be its own failure mode, so this reports to the
|
|
159
|
+
// General topic as well as the log: the operator must not have to read
|
|
160
|
+
// daemon.log to learn the fleet swallowed a fault. notifyFleetError()
|
|
161
|
+
// throttles repeats, since these usually arrive from a loop.
|
|
162
|
+
console.error("Unhandled rejection (fleet continues):", err);
|
|
163
|
+
if (err instanceof Error && err.stack)
|
|
164
|
+
console.error(err.stack);
|
|
165
|
+
try {
|
|
166
|
+
fm.notifyFleetError(`⚠️ Fleet caught an unhandled error and kept running:\n\`${msg}\`\nSee daemon.log for the stack trace.`);
|
|
167
|
+
}
|
|
168
|
+
catch (notifyErr) {
|
|
169
|
+
// Never let the reporting path itself become an unhandled rejection.
|
|
170
|
+
console.error("Failed to report unhandled rejection:", notifyErr);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
95
173
|
if (instance) {
|
|
96
174
|
const config = fm.loadConfig(FLEET_CONFIG_PATH);
|
|
97
175
|
const inst = config.instances[instance];
|
|
@@ -109,30 +187,6 @@ fleet
|
|
|
109
187
|
await fm.startAll(FLEET_CONFIG_PATH);
|
|
110
188
|
}
|
|
111
189
|
console.log("Fleet started");
|
|
112
|
-
// Keep process alive + clean shutdown on Ctrl+C
|
|
113
|
-
const shutdown = async () => {
|
|
114
|
-
console.log("\nStopping fleet...");
|
|
115
|
-
await fm.stopAll();
|
|
116
|
-
process.exit(0);
|
|
117
|
-
};
|
|
118
|
-
process.on("SIGINT", shutdown);
|
|
119
|
-
process.on("SIGTERM", shutdown);
|
|
120
|
-
process.on("uncaughtException", async (err) => {
|
|
121
|
-
console.error("Uncaught exception:", err);
|
|
122
|
-
await fm.stopAll().catch(() => { });
|
|
123
|
-
process.exit(1);
|
|
124
|
-
});
|
|
125
|
-
process.on("unhandledRejection", async (err) => {
|
|
126
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
127
|
-
// 409 = another bot poller exists — adapter handles retry, don't crash
|
|
128
|
-
if (msg.includes("409") && msg.includes("getUpdates")) {
|
|
129
|
-
console.error("Bot polling conflict (409) — retrying...");
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
console.error("Unhandled rejection:", err);
|
|
133
|
-
await fm.stopAll().catch(() => { });
|
|
134
|
-
process.exit(1);
|
|
135
|
-
});
|
|
136
190
|
});
|
|
137
191
|
fleet
|
|
138
192
|
.command("stop")
|
|
@@ -319,6 +373,8 @@ fleet
|
|
|
319
373
|
}
|
|
320
374
|
console.log("Old fleet stopped. Starting with new code...");
|
|
321
375
|
// Start new fleet in this process (new Node.js process = new code loaded)
|
|
376
|
+
if (!claimFleetSingleton())
|
|
377
|
+
return;
|
|
322
378
|
const { FleetManager } = await import("./fleet-manager.js");
|
|
323
379
|
const fm = new FleetManager(DATA_DIR);
|
|
324
380
|
await fm.startAll(FLEET_CONFIG_PATH);
|
|
@@ -1106,11 +1162,23 @@ program
|
|
|
1106
1162
|
else {
|
|
1107
1163
|
console.log(`\n Updating AgEnD to ${tag}...\n`);
|
|
1108
1164
|
}
|
|
1165
|
+
// Tell the running fleet that what happens next is planned. `npm install -g`
|
|
1166
|
+
// replaces the package directory underneath the live daemon — MCP servers
|
|
1167
|
+
// die, then the restart stops every instance — and without this marker the
|
|
1168
|
+
// old daemon reports each one as a crash. The new fleet deletes the marker
|
|
1169
|
+
// once it finishes starting; it also expires on its own, so an update that
|
|
1170
|
+
// dies here does not silence real alerts.
|
|
1171
|
+
markUpdateInProgress(DATA_DIR);
|
|
1172
|
+
const failUpdate = (message) => {
|
|
1173
|
+
clearUpdateMarker(DATA_DIR);
|
|
1174
|
+
console.error(message);
|
|
1175
|
+
process.exit(1);
|
|
1176
|
+
};
|
|
1109
1177
|
// Detect and remove stale npm link (local build that shadows global install)
|
|
1110
1178
|
try {
|
|
1111
1179
|
const agendPath = execSync("which agend", { encoding: "utf-8", stdio: "pipe" }).trim();
|
|
1112
1180
|
const resolved = execSync(`readlink -f "${agendPath}"`, { encoding: "utf-8", stdio: "pipe" }).trim();
|
|
1113
|
-
if (resolved.includes("/Projects/") || resolved.includes("@suzuke") || resolved.includes("/src/")) {
|
|
1181
|
+
if (resolved.includes("/Projects/") || resolved.includes("@songsid") || resolved.includes("@suzuke") || resolved.includes("/src/")) {
|
|
1114
1182
|
console.log(` ⚠️ Detected local npm link: ${resolved}`);
|
|
1115
1183
|
console.log(" Removing link to allow global install...\n");
|
|
1116
1184
|
try {
|
|
@@ -1147,8 +1215,7 @@ program
|
|
|
1147
1215
|
execSync("curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash", { stdio: "inherit" });
|
|
1148
1216
|
}
|
|
1149
1217
|
catch {
|
|
1150
|
-
|
|
1151
|
-
process.exit(1);
|
|
1218
|
+
failUpdate(" Failed to install nvm. Install manually: https://github.com/nvm-sh/nvm");
|
|
1152
1219
|
}
|
|
1153
1220
|
}
|
|
1154
1221
|
console.log(" Using nvm to install Node 22...");
|
|
@@ -1157,12 +1224,16 @@ program
|
|
|
1157
1224
|
execSync(`bash -c '${nvmPrefix} && npm install -g ${pkg}'`, { stdio: "inherit" });
|
|
1158
1225
|
}
|
|
1159
1226
|
catch {
|
|
1160
|
-
|
|
1161
|
-
process.exit(1);
|
|
1227
|
+
failUpdate(" Failed to install via nvm.");
|
|
1162
1228
|
}
|
|
1163
1229
|
// Try to remove old system binary
|
|
1164
1230
|
console.log(" Note: removing old system install (may require sudo)...");
|
|
1165
|
-
|
|
1231
|
+
// Never wait for a password in an agent/non-interactive terminal. This is
|
|
1232
|
+
// best-effort cleanup; the new nvm install already succeeded.
|
|
1233
|
+
spawnSync("sudo", ["-n", "npm", "uninstall", "-g", "@songsid/agend"], {
|
|
1234
|
+
stdio: "inherit",
|
|
1235
|
+
timeout: 10_000,
|
|
1236
|
+
});
|
|
1166
1237
|
}
|
|
1167
1238
|
else {
|
|
1168
1239
|
// ── Direct install ──
|
|
@@ -1170,8 +1241,7 @@ program
|
|
|
1170
1241
|
execSync(`npm install -g ${pkg}`, { stdio: "inherit" });
|
|
1171
1242
|
}
|
|
1172
1243
|
catch {
|
|
1173
|
-
|
|
1174
|
-
process.exit(1);
|
|
1244
|
+
failUpdate(` Failed to update. Try: npm install -g ${pkg}`);
|
|
1175
1245
|
}
|
|
1176
1246
|
}
|
|
1177
1247
|
// ── Verify installation ──
|
|
@@ -1181,15 +1251,13 @@ program
|
|
|
1181
1251
|
? spawnSync("bash", ["-c", `source ${nvmSh2} && nvm use 22 > /dev/null 2>&1 && which agend`], { encoding: "utf-8" }).stdout?.trim()
|
|
1182
1252
|
: spawnSync("which", ["agend"], { encoding: "utf-8" }).stdout?.trim();
|
|
1183
1253
|
if (!agendPath) {
|
|
1184
|
-
console.error(" ✗ Verification failed: agend not found in PATH after install.");
|
|
1185
1254
|
if (needsSudo)
|
|
1186
1255
|
console.error(" You may need to add nvm to your shell profile and restart.");
|
|
1187
|
-
|
|
1256
|
+
failUpdate(" ✗ Verification failed: agend not found in PATH after install.");
|
|
1188
1257
|
}
|
|
1189
1258
|
const verifyResult = spawnSync(agendPath, ["--version"], { encoding: "utf-8", timeout: 5000 });
|
|
1190
1259
|
if (verifyResult.status !== 0) {
|
|
1191
|
-
|
|
1192
|
-
process.exit(1);
|
|
1260
|
+
failUpdate(" ✗ Verification failed: agend --version returned error.");
|
|
1193
1261
|
}
|
|
1194
1262
|
const newVersion = (verifyResult.stdout ?? "").trim();
|
|
1195
1263
|
console.log(` ✓ Installed: ${newVersion}`);
|
|
@@ -1217,8 +1285,12 @@ program
|
|
|
1217
1285
|
// systemd → user systemd → launchd → detached pid).
|
|
1218
1286
|
console.log(" Restarting fleet...");
|
|
1219
1287
|
const restartResult = spawnSync(agendPath, ["restart"], { encoding: "utf-8", timeout: 30000, stdio: "inherit" });
|
|
1220
|
-
if (!reportUpdateRestart(restartResult.status))
|
|
1288
|
+
if (!reportUpdateRestart(restartResult.status)) {
|
|
1289
|
+
// No new fleet is coming up to clear the marker — do it here, or the next
|
|
1290
|
+
// 15 minutes of genuine crashes would go unreported.
|
|
1291
|
+
clearUpdateMarker(DATA_DIR);
|
|
1221
1292
|
process.exitCode = 1;
|
|
1293
|
+
}
|
|
1222
1294
|
});
|
|
1223
1295
|
program
|
|
1224
1296
|
.command("reload")
|
|
@@ -1331,8 +1403,10 @@ program
|
|
|
1331
1403
|
.command("start")
|
|
1332
1404
|
.description("Start the AgEnD service (must be installed first)")
|
|
1333
1405
|
.action(async () => {
|
|
1334
|
-
const { getServicePath, startService } = await import("./service-installer.js");
|
|
1335
|
-
|
|
1406
|
+
const { getServicePath, getSystemServicePath, startService, startSystemService } = await import("./service-installer.js");
|
|
1407
|
+
const userServicePath = getServicePath();
|
|
1408
|
+
const systemServicePath = getSystemServicePath();
|
|
1409
|
+
if (!userServicePath && !systemServicePath) {
|
|
1336
1410
|
console.log("No service installed. Starting fleet directly...");
|
|
1337
1411
|
const { spawn } = await import("node:child_process");
|
|
1338
1412
|
const child = spawn("sh", ["-c", "agend fleet start"], { detached: true, stdio: "ignore" });
|
|
@@ -1340,16 +1414,16 @@ program
|
|
|
1340
1414
|
console.log("Fleet starting in background.");
|
|
1341
1415
|
return;
|
|
1342
1416
|
}
|
|
1343
|
-
|
|
1417
|
+
const started = systemServicePath ? startSystemService() : startService();
|
|
1418
|
+
if (started) {
|
|
1344
1419
|
console.log("Service started.");
|
|
1345
1420
|
}
|
|
1346
1421
|
else {
|
|
1347
|
-
//
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
console.log("Fleet starting in background.");
|
|
1422
|
+
// A service file means the service manager owns this fleet. Falling back
|
|
1423
|
+
// to a detached process here creates a second fleet when the bus recovers.
|
|
1424
|
+
console.error("Failed to start the installed AgEnD service; refusing to start a detached duplicate.");
|
|
1425
|
+
console.error("Check your service manager, then retry: systemctl --user status com.agend.fleet");
|
|
1426
|
+
process.exitCode = 1;
|
|
1353
1427
|
}
|
|
1354
1428
|
});
|
|
1355
1429
|
program
|
|
@@ -1361,18 +1435,10 @@ program
|
|
|
1361
1435
|
// service's own HOME, which may differ from what this command resolves (sudo,
|
|
1362
1436
|
// AGEND_HOME) — an absent pid file does NOT mean it's stopped. Ask the service
|
|
1363
1437
|
// manager first. This is the canonical restart the `update` flow spawns.
|
|
1364
|
-
const { detectPlatform } = await import("./service-installer.js");
|
|
1438
|
+
const { detectPlatform, getServicePath, getSystemServicePath, getSystemdServiceState } = await import("./service-installer.js");
|
|
1365
1439
|
const { spawn, spawnSync } = await import("node:child_process");
|
|
1366
1440
|
const plat = detectPlatform();
|
|
1367
1441
|
const pidPath = join(DATA_DIR, "fleet.pid");
|
|
1368
|
-
const isActive = (cmd) => {
|
|
1369
|
-
try {
|
|
1370
|
-
return spawnSync("sh", ["-c", cmd], { encoding: "utf-8", timeout: 5000 }).stdout?.trim() === "active";
|
|
1371
|
-
}
|
|
1372
|
-
catch {
|
|
1373
|
-
return false;
|
|
1374
|
-
}
|
|
1375
|
-
};
|
|
1376
1442
|
const run = (cmd) => {
|
|
1377
1443
|
try {
|
|
1378
1444
|
execSync(cmd, { stdio: "inherit", timeout: 15000 });
|
|
@@ -1383,7 +1449,15 @@ program
|
|
|
1383
1449
|
}
|
|
1384
1450
|
};
|
|
1385
1451
|
// 1. System-level systemd service "agend"
|
|
1386
|
-
|
|
1452
|
+
const systemServiceInstalled = plat !== "macos" && getSystemServicePath() !== null;
|
|
1453
|
+
const systemState = plat !== "macos" ? getSystemdServiceState("agend", false) : "stopped";
|
|
1454
|
+
if (systemServiceInstalled && systemState === "unavailable") {
|
|
1455
|
+
console.error("Cannot reach the system service manager; refusing a detached restart that could duplicate the fleet.");
|
|
1456
|
+
console.error("Check: systemctl status agend");
|
|
1457
|
+
process.exitCode = 1;
|
|
1458
|
+
return;
|
|
1459
|
+
}
|
|
1460
|
+
if (systemServiceInstalled && (systemState === "running" || systemState === "stopped")) {
|
|
1387
1461
|
run("systemctl daemon-reload");
|
|
1388
1462
|
if (run("systemctl restart agend")) {
|
|
1389
1463
|
console.log("Service restarted (system).");
|
|
@@ -1395,7 +1469,17 @@ program
|
|
|
1395
1469
|
return;
|
|
1396
1470
|
}
|
|
1397
1471
|
// 2. User-level systemd service "com.agend.fleet"
|
|
1398
|
-
|
|
1472
|
+
const userServiceInstalled = plat !== "macos" && getServicePath() !== null;
|
|
1473
|
+
const userState = plat !== "macos"
|
|
1474
|
+
? getSystemdServiceState("com.agend.fleet", true)
|
|
1475
|
+
: "stopped";
|
|
1476
|
+
if (userServiceInstalled && userState === "unavailable") {
|
|
1477
|
+
console.error("Cannot reach the user service manager; refusing a detached restart that could duplicate the fleet.");
|
|
1478
|
+
console.error("Check: systemctl --user status com.agend.fleet");
|
|
1479
|
+
process.exitCode = 1;
|
|
1480
|
+
return;
|
|
1481
|
+
}
|
|
1482
|
+
if (userServiceInstalled && (userState === "running" || userState === "stopped")) {
|
|
1399
1483
|
run("systemctl --user daemon-reload");
|
|
1400
1484
|
try {
|
|
1401
1485
|
execSync("systemctl --user reset-failed com.agend.fleet", { stdio: "pipe", timeout: 5000 });
|
|
@@ -1835,28 +1919,7 @@ async function fuzzyMatch(query, names) {
|
|
|
1835
1919
|
return null;
|
|
1836
1920
|
}
|
|
1837
1921
|
async function resolveInstance(query, config) {
|
|
1838
|
-
const names =
|
|
1839
|
-
// Include classic instances from classicBot.yaml
|
|
1840
|
-
try {
|
|
1841
|
-
const classicPath = join(DATA_DIR, "classicBot.yaml");
|
|
1842
|
-
if (existsSync(classicPath)) {
|
|
1843
|
-
const yamlMod = (await import("js-yaml")).default;
|
|
1844
|
-
const classic = yamlMod.load(readFileSync(classicPath, "utf-8"));
|
|
1845
|
-
if (classic?.channels) {
|
|
1846
|
-
for (const [key, val] of Object.entries(classic.channels)) {
|
|
1847
|
-
// New format persists instanceName; old format keyed by channelId.
|
|
1848
|
-
if (val.instanceName) {
|
|
1849
|
-
names.push(val.instanceName);
|
|
1850
|
-
continue;
|
|
1851
|
-
}
|
|
1852
|
-
const channelId = val.channelId ?? key;
|
|
1853
|
-
const chName = (val.name ?? channelId).toLowerCase().replace(/[^\p{L}\d-]/gu, "-").replace(/-+/g, "-").replace(/^-|-$/g, "") || "project";
|
|
1854
|
-
names.push(`classic-${chName}-${channelId.slice(-4)}`);
|
|
1855
|
-
}
|
|
1856
|
-
}
|
|
1857
|
-
}
|
|
1858
|
-
}
|
|
1859
|
-
catch { /* ignore */ }
|
|
1922
|
+
const names = await listInstanceNames(config);
|
|
1860
1923
|
const match = await fuzzyMatch(query, names);
|
|
1861
1924
|
if (!match) {
|
|
1862
1925
|
console.error(`No instance matching "${query}". Available: ${names.join(", ")}`);
|
|
@@ -1907,6 +1970,15 @@ function getTreeRssKb(pid, depth = 0) {
|
|
|
1907
1970
|
function getInstanceStatusStandalone(name) {
|
|
1908
1971
|
if (hasPausedMarker(join(DATA_DIR, "instances", name)))
|
|
1909
1972
|
return "paused";
|
|
1973
|
+
// daemon.pid is the shared FleetManager PID, so it remains alive when one
|
|
1974
|
+
// CLI has entered the persisted 3-crashes circuit breaker. Consult that
|
|
1975
|
+
// marker before using daemon.pid as a fallback.
|
|
1976
|
+
try {
|
|
1977
|
+
const crash = JSON.parse(readFileSync(join(DATA_DIR, "instances", name, "crash-state.json"), "utf8"));
|
|
1978
|
+
if (Number(crash?.crashesInWindow) >= 3)
|
|
1979
|
+
return "crashed";
|
|
1980
|
+
}
|
|
1981
|
+
catch { /* no valid crash-loop marker */ }
|
|
1910
1982
|
const pidPath = join(DATA_DIR, "instances", name, "daemon.pid");
|
|
1911
1983
|
if (!existsSync(pidPath))
|
|
1912
1984
|
return "stopped";
|
|
@@ -1989,10 +2061,48 @@ const defaultParser = (output) => {
|
|
|
1989
2061
|
};
|
|
1990
2062
|
/** Optional backend-specific overrides; none needed — defaultParser covers all. */
|
|
1991
2063
|
const contextParsers = {};
|
|
2064
|
+
/**
|
|
2065
|
+
* Every instance name the CLI accepts: fleet.yaml instances plus the
|
|
2066
|
+
* dynamically-created ClassicBot ones. Shared by `resolveInstance` (fuzzy
|
|
2067
|
+
* matching for `attach`) and `ls --names-only` (shell completion), so the
|
|
2068
|
+
* candidates offered by tab-completion are exactly the ones `attach` resolves.
|
|
2069
|
+
*/
|
|
2070
|
+
async function listInstanceNames(config) {
|
|
2071
|
+
const names = Object.keys(config.instances);
|
|
2072
|
+
try {
|
|
2073
|
+
const classicPath = join(DATA_DIR, "classicBot.yaml");
|
|
2074
|
+
if (existsSync(classicPath)) {
|
|
2075
|
+
const yamlMod = (await import("js-yaml")).default;
|
|
2076
|
+
const classic = yamlMod.load(readFileSync(classicPath, "utf-8"));
|
|
2077
|
+
if (classic?.channels) {
|
|
2078
|
+
for (const [key, val] of Object.entries(classic.channels)) {
|
|
2079
|
+
// New format persists instanceName; old format keyed by channelId.
|
|
2080
|
+
if (val.instanceName) {
|
|
2081
|
+
names.push(val.instanceName);
|
|
2082
|
+
continue;
|
|
2083
|
+
}
|
|
2084
|
+
const channelId = val.channelId ?? key;
|
|
2085
|
+
const chName = (val.name ?? channelId).toLowerCase().replace(/[^\p{L}\d-]/gu, "-").replace(/-+/g, "-").replace(/^-|-$/g, "") || "project";
|
|
2086
|
+
names.push(`classic-${chName}-${channelId.slice(-4)}`);
|
|
2087
|
+
}
|
|
2088
|
+
}
|
|
2089
|
+
}
|
|
2090
|
+
}
|
|
2091
|
+
catch { /* ignore */ }
|
|
2092
|
+
return names;
|
|
2093
|
+
}
|
|
1992
2094
|
async function lsAction(opts) {
|
|
1993
2095
|
const yaml = (await import("js-yaml")).default;
|
|
1994
2096
|
const config = yaml.load(readFileSync(FLEET_CONFIG_PATH, "utf-8"));
|
|
1995
2097
|
const names = Object.keys(config.instances);
|
|
2098
|
+
// --names-only feeds shell completion, so it must return before any tmux or
|
|
2099
|
+
// status work (a tab press should not wait on the fleet) and must print
|
|
2100
|
+
// nothing but names — a "no instances" notice would become a candidate.
|
|
2101
|
+
if (opts.namesOnly) {
|
|
2102
|
+
for (const n of await listInstanceNames(config))
|
|
2103
|
+
console.log(n);
|
|
2104
|
+
return;
|
|
2105
|
+
}
|
|
1996
2106
|
// Load classic channels from classicBot.yaml (keyed by channelId)
|
|
1997
2107
|
const classicPath = join(DATA_DIR, "classicBot.yaml");
|
|
1998
2108
|
let classicConfig = null;
|
|
@@ -2195,6 +2305,10 @@ async function lsAction(opts) {
|
|
|
2195
2305
|
}
|
|
2196
2306
|
// Status icon — prefer tri-state 'state' field, fall back to idle boolean
|
|
2197
2307
|
const statusIcon = (s, idle, state) => {
|
|
2308
|
+
if (s === "crashed")
|
|
2309
|
+
return "\x1b[31m●\x1b[0m";
|
|
2310
|
+
if (s === "stopped")
|
|
2311
|
+
return "\x1b[90m○\x1b[0m";
|
|
2198
2312
|
if (state === "stuck")
|
|
2199
2313
|
return "\x1b[31m●\x1b[0m";
|
|
2200
2314
|
if (state === "paused" || s === "paused")
|
|
@@ -2206,11 +2320,13 @@ async function lsAction(opts) {
|
|
|
2206
2320
|
// Fallback for when API is unreachable
|
|
2207
2321
|
if (s === "running")
|
|
2208
2322
|
return idle === false ? "\x1b[34m●\x1b[0m" : "\x1b[32m●\x1b[0m";
|
|
2209
|
-
if (s === "crashed")
|
|
2210
|
-
return "\x1b[31m●\x1b[0m";
|
|
2211
2323
|
return "\x1b[90m○\x1b[0m";
|
|
2212
2324
|
};
|
|
2213
2325
|
const statusLabel = (s, idle, state) => {
|
|
2326
|
+
if (s === "crashed")
|
|
2327
|
+
return "Crashed";
|
|
2328
|
+
if (s === "stopped")
|
|
2329
|
+
return "Stopped";
|
|
2214
2330
|
if (state === "stuck")
|
|
2215
2331
|
return "Stuck";
|
|
2216
2332
|
if (state === "paused" || s === "paused")
|
|
@@ -2221,8 +2337,6 @@ async function lsAction(opts) {
|
|
|
2221
2337
|
return "Idle";
|
|
2222
2338
|
if (s === "running")
|
|
2223
2339
|
return idle === false ? "Busy" : "Idle";
|
|
2224
|
-
if (s === "crashed")
|
|
2225
|
-
return "Crashed";
|
|
2226
2340
|
return "Stopped";
|
|
2227
2341
|
};
|
|
2228
2342
|
/** Get display width accounting for fullwidth (CJK) characters */
|
|
@@ -2278,12 +2392,38 @@ program
|
|
|
2278
2392
|
.command("ls")
|
|
2279
2393
|
.description("List all instances with status, backend, team, and last activity")
|
|
2280
2394
|
.option("--json", "Output as JSON")
|
|
2395
|
+
.option("--names-only", "Print instance names one per line (for shell completion)")
|
|
2281
2396
|
.action(async (opts) => {
|
|
2282
2397
|
await lsAction(opts);
|
|
2283
2398
|
});
|
|
2284
2399
|
program
|
|
2285
|
-
.command("
|
|
2286
|
-
.description("
|
|
2400
|
+
.command("completion")
|
|
2401
|
+
.description("Print a shell completion script (bash or zsh)")
|
|
2402
|
+
.argument("<shell>", `Shell to generate for (${COMPLETION_SHELLS.join(", ")})`)
|
|
2403
|
+
.addHelpText("after", `
|
|
2404
|
+
Install:
|
|
2405
|
+
bash echo 'eval "$(agend completion bash)"' >> ~/.bashrc
|
|
2406
|
+
zsh echo 'eval "$(agend completion zsh)"' >> ~/.zshrc
|
|
2407
|
+
|
|
2408
|
+
Then reload the shell. Tab-completes instance names for \`agend attach\` and
|
|
2409
|
+
\`agend fleet start|stop|restart\`, and subcommands elsewhere.`)
|
|
2410
|
+
.action((shell) => {
|
|
2411
|
+
if (!COMPLETION_SHELLS.includes(shell)) {
|
|
2412
|
+
console.error(`Unsupported shell: ${shell}. Supported: ${COMPLETION_SHELLS.join(", ")}`);
|
|
2413
|
+
process.exit(2);
|
|
2414
|
+
}
|
|
2415
|
+
// Subcommand names come from commander itself, so the script can't drift
|
|
2416
|
+
// out of sync with the CLI the way a hardcoded list would.
|
|
2417
|
+
const fleetCmd = program.commands.find(c => c.name() === "fleet");
|
|
2418
|
+
console.log(completionScript(shell, {
|
|
2419
|
+
topLevel: program.commands.map(c => c.name()),
|
|
2420
|
+
fleetSub: fleetCmd?.commands.map(c => c.name()) ?? [],
|
|
2421
|
+
instanceCommands: ["attach"],
|
|
2422
|
+
fleetInstanceCommands: ["start", "stop", "restart"],
|
|
2423
|
+
}));
|
|
2424
|
+
});
|
|
2425
|
+
program
|
|
2426
|
+
.command("health").description("Fleet health check — shows problems and diagnostics")
|
|
2287
2427
|
.option("--json", "Output as JSON")
|
|
2288
2428
|
.option("-q, --quiet", "One-line summary only")
|
|
2289
2429
|
.action(async (opts) => {
|