@songsid/agend 0.0.1
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/README.md +210 -0
- package/README.zh-TW.md +134 -0
- package/dist/access-path.d.ts +10 -0
- package/dist/access-path.js +32 -0
- package/dist/access-path.js.map +1 -0
- package/dist/adapter-world.d.ts +25 -0
- package/dist/adapter-world.js +41 -0
- package/dist/adapter-world.js.map +1 -0
- package/dist/agent-cli-instructions.md +50 -0
- package/dist/agent-cli.d.ts +2 -0
- package/dist/agent-cli.js +200 -0
- package/dist/agent-cli.js.map +1 -0
- package/dist/agent-endpoint.d.ts +25 -0
- package/dist/agent-endpoint.js +162 -0
- package/dist/agent-endpoint.js.map +1 -0
- package/dist/backend/antigravity.d.ts +17 -0
- package/dist/backend/antigravity.js +98 -0
- package/dist/backend/antigravity.js.map +1 -0
- package/dist/backend/claude-code.d.ts +23 -0
- package/dist/backend/claude-code.js +171 -0
- package/dist/backend/claude-code.js.map +1 -0
- package/dist/backend/codex.d.ts +18 -0
- package/dist/backend/codex.js +160 -0
- package/dist/backend/codex.js.map +1 -0
- package/dist/backend/factory.d.ts +2 -0
- package/dist/backend/factory.js +28 -0
- package/dist/backend/factory.js.map +1 -0
- package/dist/backend/gemini-cli.d.ts +17 -0
- package/dist/backend/gemini-cli.js +163 -0
- package/dist/backend/gemini-cli.js.map +1 -0
- package/dist/backend/index.d.ts +7 -0
- package/dist/backend/index.js +7 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/kiro.d.ts +17 -0
- package/dist/backend/kiro.js +147 -0
- package/dist/backend/kiro.js.map +1 -0
- package/dist/backend/marker-utils.d.ts +13 -0
- package/dist/backend/marker-utils.js +64 -0
- package/dist/backend/marker-utils.js.map +1 -0
- package/dist/backend/mock.d.ts +25 -0
- package/dist/backend/mock.js +85 -0
- package/dist/backend/mock.js.map +1 -0
- package/dist/backend/opencode.d.ts +16 -0
- package/dist/backend/opencode.js +136 -0
- package/dist/backend/opencode.js.map +1 -0
- package/dist/backend/types.d.ts +86 -0
- package/dist/backend/types.js +33 -0
- package/dist/backend/types.js.map +1 -0
- package/dist/channel/access-manager.d.ts +18 -0
- package/dist/channel/access-manager.js +153 -0
- package/dist/channel/access-manager.js.map +1 -0
- package/dist/channel/adapters/telegram.d.ts +63 -0
- package/dist/channel/adapters/telegram.js +646 -0
- package/dist/channel/adapters/telegram.js.map +1 -0
- package/dist/channel/attachment-handler.d.ts +15 -0
- package/dist/channel/attachment-handler.js +88 -0
- package/dist/channel/attachment-handler.js.map +1 -0
- package/dist/channel/factory.d.ts +12 -0
- package/dist/channel/factory.js +67 -0
- package/dist/channel/factory.js.map +1 -0
- package/dist/channel/ipc-bridge.d.ts +26 -0
- package/dist/channel/ipc-bridge.js +220 -0
- package/dist/channel/ipc-bridge.js.map +1 -0
- package/dist/channel/mcp-server.d.ts +10 -0
- package/dist/channel/mcp-server.js +288 -0
- package/dist/channel/mcp-server.js.map +1 -0
- package/dist/channel/mcp-tools.d.ts +17 -0
- package/dist/channel/mcp-tools.js +110 -0
- package/dist/channel/mcp-tools.js.map +1 -0
- package/dist/channel/message-bus.d.ts +17 -0
- package/dist/channel/message-bus.js +86 -0
- package/dist/channel/message-bus.js.map +1 -0
- package/dist/channel/message-queue.d.ts +39 -0
- package/dist/channel/message-queue.js +253 -0
- package/dist/channel/message-queue.js.map +1 -0
- package/dist/channel/tool-router.d.ts +6 -0
- package/dist/channel/tool-router.js +75 -0
- package/dist/channel/tool-router.js.map +1 -0
- package/dist/channel/tool-tracker.d.ts +13 -0
- package/dist/channel/tool-tracker.js +58 -0
- package/dist/channel/tool-tracker.js.map +1 -0
- package/dist/channel/types.d.ts +118 -0
- package/dist/channel/types.js +2 -0
- package/dist/channel/types.js.map +1 -0
- package/dist/chat-export.d.ts +4 -0
- package/dist/chat-export.js +91 -0
- package/dist/chat-export.js.map +1 -0
- package/dist/classic-channel-manager.d.ts +59 -0
- package/dist/classic-channel-manager.js +193 -0
- package/dist/classic-channel-manager.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1833 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +118 -0
- package/dist/config.js.map +1 -0
- package/dist/context-guardian.d.ts +26 -0
- package/dist/context-guardian.js +73 -0
- package/dist/context-guardian.js.map +1 -0
- package/dist/cost-guard.d.ts +36 -0
- package/dist/cost-guard.js +147 -0
- package/dist/cost-guard.js.map +1 -0
- package/dist/daemon-entry.d.ts +1 -0
- package/dist/daemon-entry.js +29 -0
- package/dist/daemon-entry.js.map +1 -0
- package/dist/daemon.d.ts +152 -0
- package/dist/daemon.js +1714 -0
- package/dist/daemon.js.map +1 -0
- package/dist/daily-summary.d.ts +13 -0
- package/dist/daily-summary.js +55 -0
- package/dist/daily-summary.js.map +1 -0
- package/dist/event-log.d.ts +36 -0
- package/dist/event-log.js +100 -0
- package/dist/event-log.js.map +1 -0
- package/dist/export-import.d.ts +2 -0
- package/dist/export-import.js +162 -0
- package/dist/export-import.js.map +1 -0
- package/dist/fleet-context.d.ts +61 -0
- package/dist/fleet-context.js +4 -0
- package/dist/fleet-context.js.map +1 -0
- package/dist/fleet-dashboard-html.d.ts +6 -0
- package/dist/fleet-dashboard-html.js +443 -0
- package/dist/fleet-dashboard-html.js.map +1 -0
- package/dist/fleet-health-server.d.ts +35 -0
- package/dist/fleet-health-server.js +290 -0
- package/dist/fleet-health-server.js.map +1 -0
- package/dist/fleet-instructions.d.ts +5 -0
- package/dist/fleet-instructions.js +161 -0
- package/dist/fleet-instructions.js.map +1 -0
- package/dist/fleet-manager.d.ts +212 -0
- package/dist/fleet-manager.js +3655 -0
- package/dist/fleet-manager.js.map +1 -0
- package/dist/fleet-rpc-handlers.d.ts +42 -0
- package/dist/fleet-rpc-handlers.js +356 -0
- package/dist/fleet-rpc-handlers.js.map +1 -0
- package/dist/fleet-system-prompt.d.ts +11 -0
- package/dist/fleet-system-prompt.js +61 -0
- package/dist/fleet-system-prompt.js.map +1 -0
- package/dist/general-knowledge/skills.md +177 -0
- package/dist/hang-detector.d.ts +16 -0
- package/dist/hang-detector.js +53 -0
- package/dist/hang-detector.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/instance-lifecycle.d.ts +90 -0
- package/dist/instance-lifecycle.js +592 -0
- package/dist/instance-lifecycle.js.map +1 -0
- package/dist/instructions.d.ts +15 -0
- package/dist/instructions.js +90 -0
- package/dist/instructions.js.map +1 -0
- package/dist/logger.d.ts +7 -0
- package/dist/logger.js +84 -0
- package/dist/logger.js.map +1 -0
- package/dist/outbound-handlers.d.ts +51 -0
- package/dist/outbound-handlers.js +739 -0
- package/dist/outbound-handlers.js.map +1 -0
- package/dist/outbound-schemas.d.ts +238 -0
- package/dist/outbound-schemas.js +248 -0
- package/dist/outbound-schemas.js.map +1 -0
- package/dist/paths.d.ts +10 -0
- package/dist/paths.js +42 -0
- package/dist/paths.js.map +1 -0
- package/dist/plugin/agend/.claude-plugin/plugin.json +5 -0
- package/dist/quickstart.d.ts +1 -0
- package/dist/quickstart.js +595 -0
- package/dist/quickstart.js.map +1 -0
- package/dist/routing-engine.d.ts +22 -0
- package/dist/routing-engine.js +44 -0
- package/dist/routing-engine.js.map +1 -0
- package/dist/safe-async.d.ts +6 -0
- package/dist/safe-async.js +20 -0
- package/dist/safe-async.js.map +1 -0
- package/dist/scheduler/db.d.ts +37 -0
- package/dist/scheduler/db.js +360 -0
- package/dist/scheduler/db.js.map +1 -0
- package/dist/scheduler/db.test.d.ts +1 -0
- package/dist/scheduler/db.test.js +92 -0
- package/dist/scheduler/db.test.js.map +1 -0
- package/dist/scheduler/index.d.ts +4 -0
- package/dist/scheduler/index.js +4 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +44 -0
- package/dist/scheduler/scheduler.js +197 -0
- package/dist/scheduler/scheduler.js.map +1 -0
- package/dist/scheduler/scheduler.test.d.ts +1 -0
- package/dist/scheduler/scheduler.test.js +119 -0
- package/dist/scheduler/scheduler.test.js.map +1 -0
- package/dist/scheduler/types.d.ts +107 -0
- package/dist/scheduler/types.js +7 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/service-installer.d.ts +17 -0
- package/dist/service-installer.js +182 -0
- package/dist/service-installer.js.map +1 -0
- package/dist/setup-wizard.d.ts +48 -0
- package/dist/setup-wizard.js +701 -0
- package/dist/setup-wizard.js.map +1 -0
- package/dist/statusline-watcher.d.ts +34 -0
- package/dist/statusline-watcher.js +73 -0
- package/dist/statusline-watcher.js.map +1 -0
- package/dist/stt.d.ts +10 -0
- package/dist/stt.js +33 -0
- package/dist/stt.js.map +1 -0
- package/dist/tmux-control.d.ts +52 -0
- package/dist/tmux-control.js +207 -0
- package/dist/tmux-control.js.map +1 -0
- package/dist/tmux-manager.d.ts +44 -0
- package/dist/tmux-manager.js +218 -0
- package/dist/tmux-manager.js.map +1 -0
- package/dist/topic-archiver.d.ts +40 -0
- package/dist/topic-archiver.js +103 -0
- package/dist/topic-archiver.js.map +1 -0
- package/dist/topic-commands.d.ts +28 -0
- package/dist/topic-commands.js +359 -0
- package/dist/topic-commands.js.map +1 -0
- package/dist/transcript-monitor.d.ts +23 -0
- package/dist/transcript-monitor.js +164 -0
- package/dist/transcript-monitor.js.map +1 -0
- package/dist/types.d.ts +211 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/dashboard.html +719 -0
- package/dist/web-api.d.ts +101 -0
- package/dist/web-api.js +648 -0
- package/dist/web-api.js.map +1 -0
- package/dist/webhook-emitter.d.ts +15 -0
- package/dist/webhook-emitter.js +41 -0
- package/dist/webhook-emitter.js.map +1 -0
- package/dist/workflow-templates/default.md +35 -0
- package/package.json +76 -0
- package/templates/launchd.plist.ejs +31 -0
- package/templates/systemd.service.ejs +16 -0
|
@@ -0,0 +1,592 @@
|
|
|
1
|
+
import { existsSync, readFileSync, mkdirSync, realpathSync } from "node:fs";
|
|
2
|
+
import { join, basename, dirname, resolve, sep as pathSep } from "node:path";
|
|
3
|
+
import { access, unlink } from "node:fs/promises";
|
|
4
|
+
import { getAgendHome } from "./paths.js";
|
|
5
|
+
import { DEFAULT_INSTANCE_CONFIG } from "./config.js";
|
|
6
|
+
import { sanitizeInstanceName } from "./topic-commands.js";
|
|
7
|
+
import { safeHandler } from "./safe-async.js";
|
|
8
|
+
export class InstanceLifecycle {
|
|
9
|
+
ctx;
|
|
10
|
+
/** Active daemon processes: instanceName → Daemon */
|
|
11
|
+
daemons = new Map();
|
|
12
|
+
constructor(ctx) {
|
|
13
|
+
this.ctx = ctx;
|
|
14
|
+
}
|
|
15
|
+
async start(name, config, topicMode) {
|
|
16
|
+
if (this.daemons.has(name)) {
|
|
17
|
+
this.ctx.logger.info({ name }, "Instance already running, skipping");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (!existsSync(config.working_directory)) {
|
|
21
|
+
this.ctx.logger.info({ name, working_directory: config.working_directory }, "Working directory does not exist — creating it");
|
|
22
|
+
mkdirSync(config.working_directory, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
const instanceDir = this.ctx.getInstanceDir(name);
|
|
25
|
+
mkdirSync(instanceDir, { recursive: true });
|
|
26
|
+
// Defense-in-depth: clear crash state before daemon start
|
|
27
|
+
try {
|
|
28
|
+
await unlink(join(instanceDir, "crash-state.json"));
|
|
29
|
+
}
|
|
30
|
+
catch { }
|
|
31
|
+
const { Daemon } = await import("./daemon.js");
|
|
32
|
+
const { createBackend } = await import("./backend/factory.js");
|
|
33
|
+
const backendName = config.backend ?? this.ctx.fleetConfig?.defaults?.backend ?? "claude-code";
|
|
34
|
+
const backend = createBackend(backendName, instanceDir);
|
|
35
|
+
const daemon = new Daemon(name, config, instanceDir, topicMode, backend, this.ctx.controlClient ?? undefined);
|
|
36
|
+
// Catch errors from daemon internals (e.g. IPC server) to prevent crashing the fleet process
|
|
37
|
+
daemon.on("error", (err) => {
|
|
38
|
+
this.ctx.logger.error({ err, name }, "Daemon emitted error — instance isolated");
|
|
39
|
+
});
|
|
40
|
+
await daemon.start();
|
|
41
|
+
this.daemons.set(name, daemon);
|
|
42
|
+
const hangDetector = daemon.getHangDetector();
|
|
43
|
+
if (hangDetector) {
|
|
44
|
+
hangDetector.on("hang", safeHandler(async () => {
|
|
45
|
+
this.ctx.eventLog?.insert(name, "hang_detected", {});
|
|
46
|
+
this.ctx.logger.warn({ name }, "Instance appears hung");
|
|
47
|
+
// Check if instance has claimed tasks — nudge it to continue
|
|
48
|
+
const claimedTasks = this.ctx.listClaimedTasks(name);
|
|
49
|
+
if (claimedTasks.length > 0) {
|
|
50
|
+
const task = claimedTasks[0];
|
|
51
|
+
this.ctx.eventLog?.insert(name, "idle_task_nudge", { taskId: task.id, taskTitle: task.title });
|
|
52
|
+
// Inject nudge message into the instance's CLI session
|
|
53
|
+
const ipc = this.ctx.instanceIpcClients.get(name);
|
|
54
|
+
if (ipc?.connected) {
|
|
55
|
+
ipc.send({
|
|
56
|
+
type: "fleet_inbound",
|
|
57
|
+
content: `[system] You have a claimed task: "${task.title}" (#${task.id}). Continue working on it, or use task(done) / task(update, status=blocked) to update status.`,
|
|
58
|
+
meta: { chat_id: "", thread_id: "", ts: new Date().toISOString() },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
await this.ctx.sendHangNotification(name);
|
|
63
|
+
this.ctx.webhookEmit("hang", name);
|
|
64
|
+
}, this.ctx.logger, `hangDetector[${name}]`));
|
|
65
|
+
}
|
|
66
|
+
daemon.on("crash_respawn", safeHandler(() => {
|
|
67
|
+
this.ctx.eventLog?.insert(name, "crash_respawn", {});
|
|
68
|
+
this.ctx.logger.warn({ name }, "Instance crashed and respawned");
|
|
69
|
+
this.ctx.notifyInstanceTopic(name, `⚠️ ${name} crashed and respawned.`);
|
|
70
|
+
const generalName = this.findGeneralInstance();
|
|
71
|
+
if (generalName && generalName !== name) {
|
|
72
|
+
this.ctx.notifyInstanceTopic(generalName, `⚠️ ${name} crashed and respawned. Check ~/.agend/daemon.log for details.`);
|
|
73
|
+
}
|
|
74
|
+
}, this.ctx.logger, `daemon.crash_respawn[${name}]`));
|
|
75
|
+
daemon.on("snapshot_failed", safeHandler(() => {
|
|
76
|
+
this.ctx.eventLog?.insert(name, "snapshot_failed", {});
|
|
77
|
+
this.ctx.notifyInstanceTopic(name, `⚠️ ${name}: restarted without context (snapshot injection failed)`);
|
|
78
|
+
}, this.ctx.logger, `daemon.snapshot_failed[${name}]`));
|
|
79
|
+
daemon.on("crash_loop", safeHandler(() => {
|
|
80
|
+
this.ctx.eventLog?.insert(name, "crash_loop", {});
|
|
81
|
+
this.ctx.logger.error({ name }, "Instance in crash loop — respawn paused");
|
|
82
|
+
this.ctx.notifyInstanceTopic(name, `🔴 ${name} keeps crashing shortly after launch — respawn paused. Check rate limits or run \`agend fleet restart\`.`);
|
|
83
|
+
this.ctx.setTopicIcon(name, "red");
|
|
84
|
+
}, this.ctx.logger, `daemon.crash_loop[${name}]`));
|
|
85
|
+
daemon.on("pty_error", safeHandler((data) => {
|
|
86
|
+
this.ctx.eventLog?.insert(name, "pty_error", { type: data.type, action: data.action });
|
|
87
|
+
this.ctx.logger.warn({ name, errorType: data.type, action: data.action }, `PTY error: ${data.message}`);
|
|
88
|
+
const emoji = data.type === "rate_limit" ? "⏳" : data.type === "auth_error" ? "🔑" : "⚠️";
|
|
89
|
+
this.ctx.notifyInstanceTopic(name, `${emoji} ${name}: ${data.message} (action: ${data.action})`);
|
|
90
|
+
this.ctx.webhookEmit("pty_error", name, { type: data.type, action: data.action, message: data.message });
|
|
91
|
+
if (data.action === "failover") {
|
|
92
|
+
this.ctx.checkModelFailover(name, 100); // Force failover trigger
|
|
93
|
+
}
|
|
94
|
+
}, this.ctx.logger, `daemon.pty_error[${name}]`));
|
|
95
|
+
daemon.on("pty_recovered", safeHandler((data) => {
|
|
96
|
+
const mins = Math.floor(data.downtime_s / 60);
|
|
97
|
+
const secs = data.downtime_s % 60;
|
|
98
|
+
const duration = mins > 0 ? `${mins}m ${secs}s` : `${secs}s`;
|
|
99
|
+
this.ctx.eventLog?.insert(name, "pty_recovered", { downtime_s: data.downtime_s });
|
|
100
|
+
this.ctx.logger.info({ name, downtime_s: data.downtime_s }, "PTY error recovered");
|
|
101
|
+
this.ctx.notifyInstanceTopic(name, `✅ ${name}: recovered after ${duration}`);
|
|
102
|
+
this.ctx.webhookEmit("pty_recovered", name, { downtime_s: data.downtime_s });
|
|
103
|
+
}, this.ctx.logger, `daemon.pty_recovered[${name}]`));
|
|
104
|
+
daemon.on("message_queued", (data) => {
|
|
105
|
+
this.ctx.reactMessageStatus(data.chatId, data.messageId, "⏳");
|
|
106
|
+
});
|
|
107
|
+
daemon.on("message_delivered", (data) => {
|
|
108
|
+
this.ctx.reactMessageStatus(data.chatId, data.messageId, "✅");
|
|
109
|
+
});
|
|
110
|
+
this.ctx.setTopicIcon(name, "green");
|
|
111
|
+
this.ctx.touchActivity(name);
|
|
112
|
+
}
|
|
113
|
+
async stop(name) {
|
|
114
|
+
this.ctx.setTopicIcon(name, "remove");
|
|
115
|
+
const daemon = this.daemons.get(name);
|
|
116
|
+
if (daemon) {
|
|
117
|
+
await daemon.stop();
|
|
118
|
+
this.daemons.delete(name);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const instanceDir = this.ctx.getInstanceDir(name);
|
|
122
|
+
const pidPath = join(instanceDir, "daemon.pid");
|
|
123
|
+
if (existsSync(pidPath)) {
|
|
124
|
+
const pid = parseInt(readFileSync(pidPath, "utf-8").trim(), 10);
|
|
125
|
+
try {
|
|
126
|
+
process.kill(pid, "SIGTERM");
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
this.ctx.logger.debug({ err: e, pid }, "SIGTERM failed for stale process");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Kill orphaned tmux window (daemon not in memory but window may persist)
|
|
133
|
+
const windowIdPath = join(instanceDir, "window-id");
|
|
134
|
+
if (existsSync(windowIdPath)) {
|
|
135
|
+
const windowId = readFileSync(windowIdPath, "utf-8").trim();
|
|
136
|
+
if (windowId) {
|
|
137
|
+
const { TmuxManager } = await import("./tmux-manager.js");
|
|
138
|
+
const { getTmuxSession } = await import("./config.js");
|
|
139
|
+
const tmux = new TmuxManager(getTmuxSession(), windowId);
|
|
140
|
+
await tmux.killWindow();
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const { unlinkSync } = await import("node:fs");
|
|
144
|
+
unlinkSync(windowIdPath);
|
|
145
|
+
}
|
|
146
|
+
catch { }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Clean up IPC client (prevents stale routing after stop)
|
|
150
|
+
const ipc = this.ctx.instanceIpcClients.get(name);
|
|
151
|
+
if (ipc) {
|
|
152
|
+
try {
|
|
153
|
+
ipc.close();
|
|
154
|
+
}
|
|
155
|
+
catch { /* already closed */ }
|
|
156
|
+
this.ctx.instanceIpcClients.delete(name);
|
|
157
|
+
}
|
|
158
|
+
// Clean up session registry entries pointing to this instance
|
|
159
|
+
for (const [session, instance] of this.ctx.sessionRegistry) {
|
|
160
|
+
if (instance === name)
|
|
161
|
+
this.ctx.sessionRegistry.delete(session);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async remove(name) {
|
|
165
|
+
const config = this.ctx.fleetConfig?.instances[name];
|
|
166
|
+
if (!config)
|
|
167
|
+
return;
|
|
168
|
+
// Never remove the General instance
|
|
169
|
+
if (config.general_topic) {
|
|
170
|
+
this.ctx.logger.warn({ name }, "Refusing to remove General instance");
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// Clean up schedules
|
|
174
|
+
// Access scheduler through fleetConfig — scheduler is managed by FleetManager
|
|
175
|
+
// We just clean up instance-related data here
|
|
176
|
+
// Stop daemon and clean up tmux window (handles both in-memory and orphaned cases)
|
|
177
|
+
await this.stop(name);
|
|
178
|
+
// Clean up backend config files (MCP config, instructions, etc.)
|
|
179
|
+
// This is needed even when daemon is not in memory — stop() only calls
|
|
180
|
+
// backend.cleanup() when daemon object exists. Without this, stale MCP
|
|
181
|
+
// entries remain in the working directory and crash new instances.
|
|
182
|
+
if (config.working_directory && config.backend) {
|
|
183
|
+
try {
|
|
184
|
+
const { createBackend } = await import("./backend/factory.js");
|
|
185
|
+
const instanceDir = this.ctx.getInstanceDir(name);
|
|
186
|
+
const backend = createBackend(config.backend, instanceDir);
|
|
187
|
+
if (backend?.cleanup) {
|
|
188
|
+
const backendConfig = {
|
|
189
|
+
workingDirectory: config.working_directory,
|
|
190
|
+
instanceDir,
|
|
191
|
+
instanceName: name,
|
|
192
|
+
mcpServers: {
|
|
193
|
+
agend: { command: "", args: [], env: {} },
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
backend.cleanup(backendConfig);
|
|
197
|
+
this.ctx.logger.info({ name }, "Cleaned up backend config files");
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
this.ctx.logger.debug({ err, name }, "Backend cleanup failed (best effort)");
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Clean up git worktree if applicable
|
|
205
|
+
if (config.worktree_source && config.working_directory) {
|
|
206
|
+
if (!existsSync(config.working_directory)) {
|
|
207
|
+
this.ctx.logger.info({ worktree: config.working_directory }, "Worktree directory already gone, skipping removal");
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
try {
|
|
211
|
+
const { execFile: execFileCb } = await import("node:child_process");
|
|
212
|
+
const { promisify } = await import("node:util");
|
|
213
|
+
const execFileAsync = promisify(execFileCb);
|
|
214
|
+
await execFileAsync("git", ["worktree", "remove", "--force", config.working_directory], {
|
|
215
|
+
cwd: config.worktree_source,
|
|
216
|
+
});
|
|
217
|
+
this.ctx.logger.info({ worktree: config.working_directory }, "Removed git worktree");
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// worktree remove failed — directory exists but isn't a valid worktree.
|
|
221
|
+
// Only rm if directory is in the expected location (sibling of source repo or under ~/.agend/).
|
|
222
|
+
const expectedParent = dirname(config.working_directory);
|
|
223
|
+
const sourceParent = dirname(config.worktree_source);
|
|
224
|
+
if (expectedParent === sourceParent || config.working_directory.startsWith(getAgendHome())) {
|
|
225
|
+
const { rm } = await import("node:fs/promises");
|
|
226
|
+
await rm(config.working_directory, { recursive: true, force: true });
|
|
227
|
+
this.ctx.logger.info({ worktree: config.working_directory }, "Removed orphaned worktree directory");
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
this.ctx.logger.warn({ worktree: config.working_directory }, "Worktree removal failed and directory is outside expected location — skipping rm");
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Prune stale worktree records (e.g. if directory was manually deleted)
|
|
235
|
+
try {
|
|
236
|
+
const { execFile: execFileCb } = await import("node:child_process");
|
|
237
|
+
const { promisify } = await import("node:util");
|
|
238
|
+
const execFileAsync = promisify(execFileCb);
|
|
239
|
+
await execFileAsync("git", ["worktree", "prune"], { cwd: config.worktree_source });
|
|
240
|
+
}
|
|
241
|
+
catch { /* best effort */ }
|
|
242
|
+
}
|
|
243
|
+
// Clean up IPC
|
|
244
|
+
const ipc = this.ctx.instanceIpcClients.get(name);
|
|
245
|
+
if (ipc) {
|
|
246
|
+
await ipc.close();
|
|
247
|
+
this.ctx.instanceIpcClients.delete(name);
|
|
248
|
+
}
|
|
249
|
+
// Remove from routing table
|
|
250
|
+
if (config.topic_id != null) {
|
|
251
|
+
this.ctx.routing.unregister(config.topic_id);
|
|
252
|
+
}
|
|
253
|
+
// Remove from fleet config and save
|
|
254
|
+
delete this.ctx.fleetConfig.instances[name];
|
|
255
|
+
this.ctx.saveFleetConfig();
|
|
256
|
+
this.ctx.logger.info({ name }, "Instance removed");
|
|
257
|
+
}
|
|
258
|
+
/** Handle create_instance tool call from a daemon. */
|
|
259
|
+
async handleCreate(args, respond, adapterId) {
|
|
260
|
+
const rawDirectory = args.directory;
|
|
261
|
+
const directory = rawDirectory ? rawDirectory.replace(/^~/, process.env.HOME || "~") : undefined;
|
|
262
|
+
const topicName = args.topic_name || (directory ? basename(directory) : undefined);
|
|
263
|
+
const description = args.description;
|
|
264
|
+
const systemPrompt = args.systemPrompt;
|
|
265
|
+
const branch = args.branch;
|
|
266
|
+
const detach = args.detach ?? false;
|
|
267
|
+
if (!directory && !topicName) {
|
|
268
|
+
respond(null, "topic_name is required when directory is not specified");
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
// Validate directory exists (only when explicitly provided)
|
|
272
|
+
if (directory) {
|
|
273
|
+
try {
|
|
274
|
+
await access(directory);
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
respond(null, `Directory does not exist: ${directory}`);
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Enforce project_roots boundary when configured. Use realpathSync so
|
|
282
|
+
// symlinks cannot be used to escape the allowed roots (a directory under
|
|
283
|
+
// an allowed root that symlinks to `/etc` would otherwise pass the string
|
|
284
|
+
// prefix check).
|
|
285
|
+
const roots = this.ctx.fleetConfig?.project_roots;
|
|
286
|
+
if (directory && roots?.length) {
|
|
287
|
+
let resolved;
|
|
288
|
+
try {
|
|
289
|
+
resolved = realpathSync(resolve(directory));
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
respond(null, `Directory "${directory}" is not accessible`);
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const allowed = roots.some(r => {
|
|
296
|
+
const raw = resolve(r.replace(/^~/, process.env.HOME || "~"));
|
|
297
|
+
let root;
|
|
298
|
+
try {
|
|
299
|
+
root = realpathSync(raw);
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
// Root doesn't exist on disk — cannot be a valid boundary.
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
return resolved === root || resolved.startsWith(root + pathSep);
|
|
306
|
+
});
|
|
307
|
+
if (!allowed) {
|
|
308
|
+
respond(null, `Directory "${directory}" is not under project_roots. Allowed: ${roots.join(", ")}`);
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Check for duplicate early (before worktree creation) — only when directory is known and no branch
|
|
313
|
+
if (directory && !branch) {
|
|
314
|
+
const expandHome = (p) => p.replace(/^~/, process.env.HOME || "~");
|
|
315
|
+
const existingInstance = Object.entries(this.ctx.fleetConfig?.instances ?? {})
|
|
316
|
+
.find(([_, config]) => expandHome(config.working_directory) === directory);
|
|
317
|
+
if (existingInstance) {
|
|
318
|
+
const [eName, eConfig] = existingInstance;
|
|
319
|
+
respond({
|
|
320
|
+
success: true,
|
|
321
|
+
status: "already_exists",
|
|
322
|
+
name: eName,
|
|
323
|
+
topic_id: eConfig.topic_id,
|
|
324
|
+
running: this.daemons.has(eName),
|
|
325
|
+
});
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
// If branch specified, create git worktree (requires directory)
|
|
330
|
+
let workDir = directory ?? "";
|
|
331
|
+
let worktreePath;
|
|
332
|
+
if (branch && !directory) {
|
|
333
|
+
respond(null, "directory is required when branch is specified");
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
if (branch) {
|
|
337
|
+
try {
|
|
338
|
+
const { execFile: execFileCb } = await import("node:child_process");
|
|
339
|
+
const { promisify } = await import("node:util");
|
|
340
|
+
const execFileAsync = promisify(execFileCb);
|
|
341
|
+
await execFileAsync("git", ["rev-parse", "--git-dir"], { cwd: directory });
|
|
342
|
+
const customPath = args.worktree_path;
|
|
343
|
+
if (customPath) {
|
|
344
|
+
worktreePath = customPath.replace(/^~/, process.env.HOME || "~");
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
const repoName = basename(directory);
|
|
348
|
+
const safeBranch = branch.replace(/\//g, "-");
|
|
349
|
+
worktreePath = join(dirname(directory), `${repoName}-${safeBranch}`);
|
|
350
|
+
}
|
|
351
|
+
let branchExists = false;
|
|
352
|
+
try {
|
|
353
|
+
await execFileAsync("git", ["rev-parse", "--verify", branch], { cwd: directory });
|
|
354
|
+
branchExists = true;
|
|
355
|
+
}
|
|
356
|
+
catch { /* branch doesn't exist */ }
|
|
357
|
+
if (detach) {
|
|
358
|
+
await execFileAsync("git", ["worktree", "add", "--detach", worktreePath, branch], { cwd: directory });
|
|
359
|
+
}
|
|
360
|
+
else if (branchExists) {
|
|
361
|
+
await execFileAsync("git", ["worktree", "add", worktreePath, branch], { cwd: directory });
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
const startPoint = args.start_point;
|
|
365
|
+
const worktreeArgs = ["worktree", "add", worktreePath, "-b", branch];
|
|
366
|
+
if (startPoint)
|
|
367
|
+
worktreeArgs.push(startPoint);
|
|
368
|
+
await execFileAsync("git", worktreeArgs, { cwd: directory });
|
|
369
|
+
}
|
|
370
|
+
this.ctx.logger.info({ worktreePath, branch, repo: directory }, "Created git worktree for instance");
|
|
371
|
+
workDir = worktreePath;
|
|
372
|
+
}
|
|
373
|
+
catch (err) {
|
|
374
|
+
respond(null, `Failed to create worktree: ${err.message}`);
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Check worktree path for duplicates
|
|
379
|
+
if (worktreePath) {
|
|
380
|
+
const expandHome = (p) => p.replace(/^~/, process.env.HOME || "~");
|
|
381
|
+
const existingInstance = Object.entries(this.ctx.fleetConfig?.instances ?? {})
|
|
382
|
+
.find(([_, config]) => expandHome(config.working_directory) === workDir);
|
|
383
|
+
if (existingInstance) {
|
|
384
|
+
const [eName, eConfig] = existingInstance;
|
|
385
|
+
respond({
|
|
386
|
+
success: true,
|
|
387
|
+
status: "already_exists",
|
|
388
|
+
name: eName,
|
|
389
|
+
topic_id: eConfig.topic_id,
|
|
390
|
+
running: this.daemons.has(eName),
|
|
391
|
+
});
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Sequential steps with rollback
|
|
396
|
+
let createdTopicId;
|
|
397
|
+
let newInstanceName;
|
|
398
|
+
try {
|
|
399
|
+
createdTopicId = await this.ctx.createForumTopic(topicName, adapterId);
|
|
400
|
+
// Use explicit topic_name as name base when provided; fall back to directory basename
|
|
401
|
+
const explicitTopicName = args.topic_name;
|
|
402
|
+
const nameBase = explicitTopicName ?? (worktreePath ? topicName : (directory ? basename(workDir) : topicName));
|
|
403
|
+
newInstanceName = `${sanitizeInstanceName(nameBase)}-t${createdTopicId}`;
|
|
404
|
+
// If no directory was provided, auto-create default workspace
|
|
405
|
+
if (!directory) {
|
|
406
|
+
workDir = join(getAgendHome(), "workspaces", newInstanceName);
|
|
407
|
+
mkdirSync(workDir, { recursive: true });
|
|
408
|
+
}
|
|
409
|
+
const instanceConfig = {
|
|
410
|
+
...DEFAULT_INSTANCE_CONFIG,
|
|
411
|
+
...this.ctx.fleetConfig.defaults,
|
|
412
|
+
working_directory: workDir,
|
|
413
|
+
topic_id: createdTopicId,
|
|
414
|
+
...(description ? { description } : {}),
|
|
415
|
+
...(systemPrompt ? { systemPrompt } : {}),
|
|
416
|
+
...(args.model ? { model: args.model } : {}),
|
|
417
|
+
...(args.backend ? { backend: args.backend } : {}),
|
|
418
|
+
...(args.model_failover ? { model_failover: args.model_failover } : {}),
|
|
419
|
+
...(args.tool_set ? { tool_set: args.tool_set } : {}),
|
|
420
|
+
...(args.skipPermissions != null ? { skipPermissions: args.skipPermissions } : {}),
|
|
421
|
+
...(args.lightweight != null ? { lightweight: args.lightweight } : {}),
|
|
422
|
+
...(args.workflow !== undefined ? { workflow: args.workflow === "false" ? false : args.workflow } : {}),
|
|
423
|
+
...(args.tags ? { tags: args.tags } : {}),
|
|
424
|
+
...(worktreePath ? { worktree_source: directory } : {}),
|
|
425
|
+
};
|
|
426
|
+
this.ctx.fleetConfig.instances[newInstanceName] = instanceConfig;
|
|
427
|
+
this.ctx.routing.register(createdTopicId, { kind: "instance", name: newInstanceName });
|
|
428
|
+
this.ctx.saveFleetConfig();
|
|
429
|
+
await this.start(newInstanceName, instanceConfig, true);
|
|
430
|
+
await this.ctx.connectIpcToInstance(newInstanceName);
|
|
431
|
+
respond({
|
|
432
|
+
success: true,
|
|
433
|
+
name: newInstanceName,
|
|
434
|
+
topic_id: createdTopicId,
|
|
435
|
+
...(worktreePath ? { worktree_path: worktreePath, branch } : {}),
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
catch (err) {
|
|
439
|
+
// Rollback in reverse order
|
|
440
|
+
if (newInstanceName && this.daemons.has(newInstanceName)) {
|
|
441
|
+
await this.stop(newInstanceName).catch(e => this.ctx.logger.error({ err: e, name: newInstanceName }, "Failed to stop instance during rollback"));
|
|
442
|
+
}
|
|
443
|
+
if (newInstanceName && this.ctx.fleetConfig?.instances[newInstanceName]) {
|
|
444
|
+
delete this.ctx.fleetConfig.instances[newInstanceName];
|
|
445
|
+
if (createdTopicId)
|
|
446
|
+
this.ctx.routing.unregister(createdTopicId);
|
|
447
|
+
this.ctx.saveFleetConfig();
|
|
448
|
+
}
|
|
449
|
+
if (createdTopicId) {
|
|
450
|
+
await this.ctx.deleteForumTopic(createdTopicId);
|
|
451
|
+
}
|
|
452
|
+
if (worktreePath) {
|
|
453
|
+
try {
|
|
454
|
+
const { execFile: execFileCb } = await import("node:child_process");
|
|
455
|
+
const { promisify } = await import("node:util");
|
|
456
|
+
const execFileAsync = promisify(execFileCb);
|
|
457
|
+
await execFileAsync("git", ["worktree", "remove", "--force", worktreePath], { cwd: directory });
|
|
458
|
+
await execFileAsync("git", ["worktree", "prune"], { cwd: directory });
|
|
459
|
+
}
|
|
460
|
+
catch { /* best-effort worktree cleanup */ }
|
|
461
|
+
}
|
|
462
|
+
else if (!directory && workDir) {
|
|
463
|
+
// Remove auto-created workspace directory
|
|
464
|
+
try {
|
|
465
|
+
const { rm } = await import("node:fs/promises");
|
|
466
|
+
await rm(workDir, { recursive: true, force: true });
|
|
467
|
+
}
|
|
468
|
+
catch { /* best-effort cleanup */ }
|
|
469
|
+
}
|
|
470
|
+
respond(null, `Failed to create instance: ${err.message}`);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
/** Handle delete_instance tool call from a daemon. */
|
|
474
|
+
async handleDelete(args, respond) {
|
|
475
|
+
const instanceName = args.name;
|
|
476
|
+
const deleteTopic = args.delete_topic ?? false;
|
|
477
|
+
const instanceConfig = this.ctx.fleetConfig?.instances[instanceName];
|
|
478
|
+
if (!instanceConfig) {
|
|
479
|
+
respond(null, `Instance not found: ${instanceName}`);
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
if (instanceConfig.general_topic) {
|
|
483
|
+
respond(null, "Cannot delete the General instance");
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
if (deleteTopic && instanceConfig.topic_id) {
|
|
487
|
+
await this.ctx.deleteForumTopic(instanceConfig.topic_id);
|
|
488
|
+
}
|
|
489
|
+
await this.ctx.removeInstance(instanceName);
|
|
490
|
+
respond({ success: true, name: instanceName, topic_deleted: deleteTopic });
|
|
491
|
+
}
|
|
492
|
+
has(name) {
|
|
493
|
+
return this.daemons.has(name);
|
|
494
|
+
}
|
|
495
|
+
/** Handle replace_instance tool call: handover → stop → create new → delete old config.
|
|
496
|
+
* If the old instance has a worktree_source, ownership transfers to the new instance
|
|
497
|
+
* implicitly via savedConfig — the worktree itself is not recreated or removed. */
|
|
498
|
+
async handleReplace(args, respond) {
|
|
499
|
+
const instanceName = args.name;
|
|
500
|
+
const reason = args.reason || "replaced";
|
|
501
|
+
const oldConfig = this.ctx.fleetConfig?.instances[instanceName];
|
|
502
|
+
if (!oldConfig) {
|
|
503
|
+
respond(null, `Instance not found: ${instanceName}`);
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
if (oldConfig.general_topic) {
|
|
507
|
+
respond(null, "Cannot replace the General instance");
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
// 1. Collect handover context from daemon ring buffer (before stopping)
|
|
511
|
+
let handoverContext = "";
|
|
512
|
+
const daemon = this.daemons.get(instanceName);
|
|
513
|
+
if (daemon) {
|
|
514
|
+
handoverContext = daemon.collectHandoverContext();
|
|
515
|
+
}
|
|
516
|
+
// 2. Remember config for recreation
|
|
517
|
+
const savedConfig = { ...oldConfig };
|
|
518
|
+
const topicId = savedConfig.topic_id;
|
|
519
|
+
// 3. Stop old instance (reversible — config still in fleet.yaml)
|
|
520
|
+
await this.stop(instanceName);
|
|
521
|
+
const oldIpc = this.ctx.instanceIpcClients.get(instanceName);
|
|
522
|
+
if (oldIpc) {
|
|
523
|
+
await oldIpc.close();
|
|
524
|
+
this.ctx.instanceIpcClients.delete(instanceName);
|
|
525
|
+
}
|
|
526
|
+
// 4. Remove old config + routing (so new instance can reuse the name/topic)
|
|
527
|
+
if (topicId != null)
|
|
528
|
+
this.ctx.routing.unregister(topicId);
|
|
529
|
+
delete this.ctx.fleetConfig.instances[instanceName];
|
|
530
|
+
this.ctx.saveFleetConfig();
|
|
531
|
+
// 5. Clean instanceDir to avoid stale rotation-state.json / crash-history
|
|
532
|
+
const instanceDir = this.ctx.getInstanceDir(instanceName);
|
|
533
|
+
try {
|
|
534
|
+
const { rm } = await import("node:fs/promises");
|
|
535
|
+
await rm(instanceDir, { recursive: true, force: true });
|
|
536
|
+
}
|
|
537
|
+
catch { /* best effort */ }
|
|
538
|
+
// 6. Create new instance with same config, reusing topic
|
|
539
|
+
const newName = `${instanceName.replace(/-t\d+$/, "")}-t${topicId}`;
|
|
540
|
+
const instanceConfig = { ...savedConfig };
|
|
541
|
+
try {
|
|
542
|
+
this.ctx.fleetConfig.instances[newName] = instanceConfig;
|
|
543
|
+
if (topicId != null)
|
|
544
|
+
this.ctx.routing.register(topicId, { kind: "instance", name: newName });
|
|
545
|
+
this.ctx.saveFleetConfig();
|
|
546
|
+
await this.start(newName, instanceConfig, true);
|
|
547
|
+
await this.ctx.connectIpcToInstance(newName);
|
|
548
|
+
// 7. Send handover context via fleet_inbound (standard message delivery path)
|
|
549
|
+
if (handoverContext) {
|
|
550
|
+
await new Promise(r => setTimeout(r, 3_000));
|
|
551
|
+
const newIpc = this.ctx.instanceIpcClients.get(newName);
|
|
552
|
+
if (newIpc) {
|
|
553
|
+
const handoverMsg = `[system:handover]\nYou are replacing instance "${instanceName}" (reason: ${reason}).\n\n${handoverContext}\n\nResume work based on this context. Do NOT reply to this message — wait for the next user message.`;
|
|
554
|
+
newIpc.send({
|
|
555
|
+
type: "fleet_inbound",
|
|
556
|
+
content: handoverMsg,
|
|
557
|
+
meta: { from_instance: "system", source: "handover", user: "system", ts: new Date().toISOString(), chat_id: "", thread_id: "" },
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
respond({
|
|
562
|
+
success: true,
|
|
563
|
+
old_name: instanceName,
|
|
564
|
+
new_name: newName,
|
|
565
|
+
topic_id: topicId,
|
|
566
|
+
reason,
|
|
567
|
+
handover_chars: handoverContext.length,
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
catch (err) {
|
|
571
|
+
// Rollback: restore old instance config (new instance failed to start)
|
|
572
|
+
if (this.daemons.has(newName))
|
|
573
|
+
await this.stop(newName).catch(() => { });
|
|
574
|
+
delete this.ctx.fleetConfig.instances[newName];
|
|
575
|
+
// Restore old config so user doesn't lose both instances
|
|
576
|
+
this.ctx.fleetConfig.instances[instanceName] = savedConfig;
|
|
577
|
+
if (topicId != null)
|
|
578
|
+
this.ctx.routing.register(topicId, { kind: "instance", name: instanceName });
|
|
579
|
+
this.ctx.saveFleetConfig();
|
|
580
|
+
respond(null, `Failed to replace instance: ${err.message}. Old instance config restored (stopped).`);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
findGeneralInstance() {
|
|
584
|
+
const instances = this.ctx.fleetConfig?.instances ?? {};
|
|
585
|
+
for (const [n, config] of Object.entries(instances)) {
|
|
586
|
+
if (config.general_topic)
|
|
587
|
+
return n;
|
|
588
|
+
}
|
|
589
|
+
return undefined;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
//# sourceMappingURL=instance-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-lifecycle.js","sourceRoot":"","sources":["../src/instance-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface FleetInstructionsParams {
|
|
2
|
+
instanceName: string;
|
|
3
|
+
workingDirectory: string;
|
|
4
|
+
displayName?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
customPrompt?: string;
|
|
7
|
+
workflow?: string | false;
|
|
8
|
+
decisions?: {
|
|
9
|
+
title: string;
|
|
10
|
+
content: string;
|
|
11
|
+
}[];
|
|
12
|
+
/** CLI mode: inject CLI quick reference instead of MCP tool usage section */
|
|
13
|
+
cliInstructions?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function buildFleetInstructions(params: FleetInstructionsParams): string;
|