@songsid/agend 2.1.4-beta.2 → 2.1.4-beta.20

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.
Files changed (128) hide show
  1. package/dist/agent-endpoint.js +1 -1
  2. package/dist/agent-endpoint.js.map +1 -1
  3. package/dist/backend/antigravity.d.ts +1 -0
  4. package/dist/backend/antigravity.js +4 -0
  5. package/dist/backend/antigravity.js.map +1 -1
  6. package/dist/backend/claude-code.js +23 -2
  7. package/dist/backend/claude-code.js.map +1 -1
  8. package/dist/backend/codex.d.ts +17 -0
  9. package/dist/backend/codex.js +122 -7
  10. package/dist/backend/codex.js.map +1 -1
  11. package/dist/backend/kiro.d.ts +1 -0
  12. package/dist/backend/kiro.js +14 -0
  13. package/dist/backend/kiro.js.map +1 -1
  14. package/dist/backend/opencode.d.ts +27 -11
  15. package/dist/backend/opencode.js +48 -37
  16. package/dist/backend/opencode.js.map +1 -1
  17. package/dist/backend/types.d.ts +14 -0
  18. package/dist/backend/types.js +7 -0
  19. package/dist/backend/types.js.map +1 -1
  20. package/dist/channel/adapters/discord.js +72 -25
  21. package/dist/channel/adapters/discord.js.map +1 -1
  22. package/dist/channel/adapters/telegram.js +5 -3
  23. package/dist/channel/adapters/telegram.js.map +1 -1
  24. package/dist/channel/mcp-server.js +6 -20
  25. package/dist/channel/mcp-server.js.map +1 -1
  26. package/dist/channel/mcp-tools.js +4 -2
  27. package/dist/channel/mcp-tools.js.map +1 -1
  28. package/dist/channel/types.d.ts +1 -1
  29. package/dist/classic-channel-manager.d.ts +40 -3
  30. package/dist/classic-channel-manager.js +218 -31
  31. package/dist/classic-channel-manager.js.map +1 -1
  32. package/dist/cli.js +159 -36
  33. package/dist/cli.js.map +1 -1
  34. package/dist/completion-install.d.ts +70 -0
  35. package/dist/completion-install.js +152 -0
  36. package/dist/completion-install.js.map +1 -0
  37. package/dist/completion.d.ts +7 -1
  38. package/dist/completion.js +14 -4
  39. package/dist/completion.js.map +1 -1
  40. package/dist/config-validator.js +38 -7
  41. package/dist/config-validator.js.map +1 -1
  42. package/dist/config.d.ts +2 -0
  43. package/dist/config.js +10 -1
  44. package/dist/config.js.map +1 -1
  45. package/dist/daemon.d.ts +171 -5
  46. package/dist/daemon.js +696 -82
  47. package/dist/daemon.js.map +1 -1
  48. package/dist/doctor.d.ts +26 -0
  49. package/dist/doctor.js +216 -0
  50. package/dist/doctor.js.map +1 -0
  51. package/dist/fleet-context.d.ts +14 -0
  52. package/dist/fleet-manager.d.ts +231 -10
  53. package/dist/fleet-manager.js +1798 -493
  54. package/dist/fleet-manager.js.map +1 -1
  55. package/dist/fleet-yaml-slim.d.ts +10 -0
  56. package/dist/fleet-yaml-slim.js +59 -0
  57. package/dist/fleet-yaml-slim.js.map +1 -0
  58. package/dist/general-knowledge/skills/backend-providers/SKILL.md +114 -0
  59. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +3 -1
  60. package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +52 -0
  61. package/dist/general-knowledge/skills/development-workflow/SKILL.md +28 -0
  62. package/dist/general-knowledge/skills/fleet-config/SKILL.md +1 -0
  63. package/dist/general-knowledge/skills/fleet-health/SKILL.md +1 -0
  64. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -0
  65. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +1 -0
  66. package/dist/general-knowledge/skills/model-discovery/SKILL.md +64 -16
  67. package/dist/general-knowledge/skills/multi-channel/SKILL.md +1 -0
  68. package/dist/general-knowledge/skills/scheduling/SKILL.md +1 -0
  69. package/dist/general-knowledge/skills/session-management/SKILL.md +1 -0
  70. package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -0
  71. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +30 -0
  72. package/dist/instance-lifecycle.d.ts +8 -0
  73. package/dist/instance-lifecycle.js +46 -25
  74. package/dist/instance-lifecycle.js.map +1 -1
  75. package/dist/instructions.d.ts +12 -0
  76. package/dist/instructions.js +33 -0
  77. package/dist/instructions.js.map +1 -1
  78. package/dist/locale.js +656 -220
  79. package/dist/locale.js.map +1 -1
  80. package/dist/outbound-handlers.d.ts +8 -0
  81. package/dist/outbound-handlers.js +44 -5
  82. package/dist/outbound-handlers.js.map +1 -1
  83. package/dist/outbound-schemas.d.ts +5 -0
  84. package/dist/outbound-schemas.js +7 -0
  85. package/dist/outbound-schemas.js.map +1 -1
  86. package/dist/quickstart.js +25 -0
  87. package/dist/quickstart.js.map +1 -1
  88. package/dist/restart-progress.d.ts +9 -1
  89. package/dist/restart-progress.js +30 -6
  90. package/dist/restart-progress.js.map +1 -1
  91. package/dist/scheduler/db.d.ts +5 -0
  92. package/dist/scheduler/db.js +35 -0
  93. package/dist/scheduler/db.js.map +1 -1
  94. package/dist/service-installer.d.ts +11 -0
  95. package/dist/service-installer.js +84 -18
  96. package/dist/service-installer.js.map +1 -1
  97. package/dist/settings-api.js +1 -1
  98. package/dist/settings-api.js.map +1 -1
  99. package/dist/tips.d.ts +39 -0
  100. package/dist/tips.js +351 -0
  101. package/dist/tips.js.map +1 -0
  102. package/dist/tool-progress.d.ts +40 -0
  103. package/dist/tool-progress.js +289 -0
  104. package/dist/tool-progress.js.map +1 -0
  105. package/dist/topic-commands.d.ts +28 -4
  106. package/dist/topic-commands.js +217 -65
  107. package/dist/topic-commands.js.map +1 -1
  108. package/dist/transcript-monitor.d.ts +15 -2
  109. package/dist/transcript-monitor.js +63 -17
  110. package/dist/transcript-monitor.js.map +1 -1
  111. package/dist/transcript-sources.d.ts +106 -0
  112. package/dist/transcript-sources.js +428 -0
  113. package/dist/transcript-sources.js.map +1 -0
  114. package/dist/types.d.ts +11 -0
  115. package/dist/ui/dashboard.html +55 -32
  116. package/dist/ui/settings.html +120 -51
  117. package/dist/ui/view.html +23 -15
  118. package/dist/update-marker.d.ts +30 -0
  119. package/dist/update-marker.js +71 -20
  120. package/dist/update-marker.js.map +1 -1
  121. package/dist/update-progress.d.ts +6 -0
  122. package/dist/update-progress.js +29 -0
  123. package/dist/update-progress.js.map +1 -0
  124. package/dist/usage/usage-api.d.ts +8 -2
  125. package/dist/usage/usage-api.js +24 -3
  126. package/dist/usage/usage-api.js.map +1 -1
  127. package/dist/workflow-templates/default.md +2 -1
  128. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ import { type SpawnSyncReturns } from "node:child_process";
2
+ import type { ServiceInfo } from "./service-installer.js";
3
+ export type DoctorCheckStatus = "ok" | "warn" | "error";
4
+ export interface DoctorCheck {
5
+ section: "Prerequisites" | "Service" | "Fleet" | "MCP IPC";
6
+ status: DoctorCheckStatus;
7
+ label: string;
8
+ detail: string;
9
+ }
10
+ export interface DoctorReport {
11
+ checks: DoctorCheck[];
12
+ errors: number;
13
+ warnings: number;
14
+ }
15
+ interface DoctorDeps {
16
+ env: NodeJS.ProcessEnv;
17
+ platform: NodeJS.Platform;
18
+ run: (file: string, args: string[]) => SpawnSyncReturns<string>;
19
+ processAlive: (pid: number) => boolean;
20
+ connectSocket: (path: string) => Promise<boolean>;
21
+ }
22
+ export declare function connectUnixSocket(path: string, timeoutMs?: number): Promise<boolean>;
23
+ /** Collect read-only diagnostics. Dependencies are injectable for deterministic tests. */
24
+ export declare function collectDoctorReport(dataDir: string, service: ServiceInfo, overrides?: Partial<DoctorDeps>): Promise<DoctorReport>;
25
+ export declare function formatDoctorReport(report: DoctorReport): string;
26
+ export {};
package/dist/doctor.js ADDED
@@ -0,0 +1,216 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { platform } from "node:os";
4
+ import { spawnSync } from "node:child_process";
5
+ import net from "node:net";
6
+ import { loadRawFleetConfig } from "./config.js";
7
+ import { hasPausedMarker } from "./pause-marker.js";
8
+ import { getTmuxSessionName, getTmuxSocketName } from "./paths.js";
9
+ import { BACKENDS } from "./setup-wizard.js";
10
+ import { t } from "./locale.js";
11
+ const defaultDeps = {
12
+ env: process.env,
13
+ platform: platform(),
14
+ run: (file, args) => spawnSync(file, args, { encoding: "utf8", timeout: 5000 }),
15
+ processAlive: pid => {
16
+ try {
17
+ process.kill(pid, 0);
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ },
24
+ connectSocket: connectUnixSocket,
25
+ };
26
+ function tmuxArgs(args) {
27
+ const socket = getTmuxSocketName();
28
+ return socket ? ["-L", socket, ...args] : args;
29
+ }
30
+ function readPid(path) {
31
+ try {
32
+ const pid = Number.parseInt(readFileSync(path, "utf8").trim(), 10);
33
+ return Number.isInteger(pid) && pid > 0 ? pid : null;
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ function hasCrashLoop(dataDir, name) {
40
+ try {
41
+ const value = JSON.parse(readFileSync(join(dataDir, "instances", name, "crash-state.json"), "utf8"));
42
+ return Number(value?.crashesInWindow) >= 3;
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ export async function connectUnixSocket(path, timeoutMs = 1000) {
49
+ if (!existsSync(path))
50
+ return false;
51
+ return new Promise(resolve => {
52
+ const client = net.createConnection(path);
53
+ let settled = false;
54
+ const finish = (value) => {
55
+ if (settled)
56
+ return;
57
+ settled = true;
58
+ clearTimeout(timer);
59
+ client.destroy();
60
+ resolve(value);
61
+ };
62
+ const timer = setTimeout(() => finish(false), timeoutMs);
63
+ timer.unref?.();
64
+ client.once("connect", () => finish(true));
65
+ client.once("error", () => finish(false));
66
+ });
67
+ }
68
+ /** Collect read-only diagnostics. Dependencies are injectable for deterministic tests. */
69
+ export async function collectDoctorReport(dataDir, service, overrides = {}) {
70
+ const deps = { ...defaultDeps, ...overrides };
71
+ const checks = [];
72
+ const add = (section, status, label, detail) => {
73
+ checks.push({ section, status, label, detail });
74
+ };
75
+ const configPath = join(dataDir, "fleet.yaml");
76
+ let raw = {};
77
+ try {
78
+ raw = loadRawFleetConfig(configPath);
79
+ }
80
+ catch (err) {
81
+ add("Fleet", "error", "fleet.yaml", t("doctor.config_invalid", err.message.split("\n")[0]));
82
+ }
83
+ const defaultBackend = raw.defaults?.backend ?? "claude-code";
84
+ const backendIds = new Set([defaultBackend]);
85
+ for (const config of Object.values(raw.instances ?? {})) {
86
+ backendIds.add(config.backend ?? defaultBackend);
87
+ }
88
+ for (const id of backendIds) {
89
+ // `mock` is an in-process test backend and deliberately has no CLI binary.
90
+ if (id === "mock")
91
+ continue;
92
+ const backend = BACKENDS.find(item => item.id === id);
93
+ if (!backend) {
94
+ add("Prerequisites", "error", t("doctor.backend_label", id), t("doctor.backend_unknown"));
95
+ continue;
96
+ }
97
+ const result = deps.run(backend.binary, ["--version"]);
98
+ const version = String(result.stdout ?? "").trim().split("\n")[0];
99
+ if (!result.error && result.status === 0) {
100
+ add("Prerequisites", "ok", backend.label, version || t("doctor.binary_available", backend.binary));
101
+ }
102
+ else {
103
+ add("Prerequisites", "error", backend.label, t("doctor.binary_missing", backend.binary));
104
+ }
105
+ }
106
+ const tmuxVersion = deps.run("tmux", ["-V"]);
107
+ const tmuxAvailable = !tmuxVersion.error && tmuxVersion.status === 0;
108
+ add("Prerequisites", tmuxAvailable ? "ok" : "error", "tmux", tmuxAvailable ? String(tmuxVersion.stdout ?? "").trim() : t("doctor.not_found"));
109
+ add("Prerequisites", deps.env.TERM ? "ok" : "warn", "TERM", deps.env.TERM || t("doctor.term_unset"));
110
+ if (!service.installed) {
111
+ add("Service", "warn", t("doctor.service_installed"), t("doctor.service_none"));
112
+ }
113
+ else {
114
+ const managerUnavailable = service.manager === "systemd --user"
115
+ ? t("doctor.manager_user_unavailable")
116
+ : t("doctor.manager_unavailable");
117
+ add("Service", "ok", t("doctor.service_installed"), `${service.manager}: ${service.path}`);
118
+ add("Service", service.enabled === true ? "ok" : "warn", t("doctor.service_enabled"), service.enabled == null ? managerUnavailable : service.enabled ? t("doctor.yes") : t("doctor.no_install"));
119
+ add("Service", service.active === true ? "ok" : "warn", t("doctor.service_active"), service.active == null ? managerUnavailable : service.active ? t("doctor.service_running") : t("doctor.inactive_start"));
120
+ }
121
+ if (deps.platform === "linux") {
122
+ add("Service", deps.env.DBUS_SESSION_BUS_ADDRESS ? "ok" : "warn", "D-Bus", deps.env.DBUS_SESSION_BUS_ADDRESS
123
+ ? t("doctor.dbus_set")
124
+ : t("doctor.dbus_unset"));
125
+ }
126
+ const fleetPidPath = join(dataDir, "fleet.pid");
127
+ const fleetPid = readPid(fleetPidPath);
128
+ const fleetAlive = fleetPid != null && deps.processAlive(fleetPid);
129
+ if (!existsSync(fleetPidPath)) {
130
+ add("Fleet", "warn", t("doctor.fleet_process"), t("doctor.pid_missing"));
131
+ }
132
+ else if (fleetPid == null) {
133
+ add("Fleet", "error", t("doctor.fleet_process"), t("doctor.pid_invalid"));
134
+ }
135
+ else if (!fleetAlive) {
136
+ add("Fleet", "error", t("doctor.fleet_process"), t("doctor.pid_stale", fleetPid));
137
+ }
138
+ else {
139
+ add("Fleet", "ok", t("doctor.fleet_process"), t("doctor.pid_alive", fleetPid));
140
+ }
141
+ const sessionName = getTmuxSessionName();
142
+ const tmuxSession = tmuxAvailable
143
+ ? deps.run("tmux", tmuxArgs(["has-session", "-t", sessionName]))
144
+ : null;
145
+ const sessionAlive = !!tmuxSession && !tmuxSession.error && tmuxSession.status === 0;
146
+ add("Fleet", sessionAlive ? "ok" : fleetAlive ? "error" : "warn", t("doctor.tmux_session"), sessionAlive ? t("doctor.session_exists", sessionName) : t("doctor.session_missing", sessionName));
147
+ if (!existsSync(configPath)) {
148
+ add("Fleet", "warn", t("doctor.instances"), t("doctor.config_missing", configPath));
149
+ }
150
+ const names = Object.keys(raw.instances ?? {});
151
+ const counts = { running: 0, paused: 0, stopped: 0, crashed: 0 };
152
+ const runningNames = [];
153
+ for (const name of names) {
154
+ const instanceDir = join(dataDir, "instances", name);
155
+ if (hasPausedMarker(instanceDir)) {
156
+ counts.paused++;
157
+ continue;
158
+ }
159
+ if (hasCrashLoop(dataDir, name)) {
160
+ counts.crashed++;
161
+ continue;
162
+ }
163
+ const pid = readPid(join(instanceDir, "daemon.pid"));
164
+ if (pid != null && deps.processAlive(pid)) {
165
+ counts.running++;
166
+ runningNames.push(name);
167
+ }
168
+ else {
169
+ counts.stopped++;
170
+ }
171
+ }
172
+ add("Fleet", "ok", t("doctor.instances"), t("doctor.instance_counts", counts.running, counts.paused, counts.stopped, counts.crashed, names.length));
173
+ const ipcResults = await Promise.all(runningNames.map(async (name) => {
174
+ const socketPath = join(dataDir, "instances", name, "channel.sock");
175
+ return { name, socketPath, exists: existsSync(socketPath), connected: await deps.connectSocket(socketPath) };
176
+ }));
177
+ const connected = ipcResults.filter(result => result.connected).length;
178
+ const missing = ipcResults.filter(result => !result.exists).map(result => result.name);
179
+ const unreachable = ipcResults.filter(result => result.exists && !result.connected).map(result => result.name);
180
+ const ipcProblems = [...missing, ...unreachable];
181
+ add("MCP IPC", ipcProblems.length === 0 ? "ok" : "error", "channel.sock", ipcProblems.length === 0
182
+ ? t("doctor.ipc_ok", connected, runningNames.length)
183
+ : t("doctor.ipc_failed", connected, runningNames.length, ipcProblems.join(", ")));
184
+ return {
185
+ checks,
186
+ errors: checks.filter(check => check.status === "error").length,
187
+ warnings: checks.filter(check => check.status === "warn").length,
188
+ };
189
+ }
190
+ export function formatDoctorReport(report) {
191
+ const sectionLabels = {
192
+ Prerequisites: t("doctor.section.prerequisites"),
193
+ Service: t("doctor.section.service"),
194
+ Fleet: t("doctor.section.fleet"),
195
+ "MCP IPC": t("doctor.section.ipc"),
196
+ };
197
+ const lines = ["", ` \x1b[1m${t("doctor.title")}\x1b[0m`];
198
+ let section;
199
+ for (const check of report.checks) {
200
+ if (check.section !== section) {
201
+ section = check.section;
202
+ lines.push("", ` \x1b[1m${sectionLabels[section]}\x1b[0m`);
203
+ }
204
+ const icon = check.status === "ok"
205
+ ? "\x1b[32m✓\x1b[0m"
206
+ : check.status === "warn"
207
+ ? "\x1b[33m⚠\x1b[0m"
208
+ : "\x1b[31m✗\x1b[0m";
209
+ lines.push(` ${icon} ${check.label}: ${check.detail}`);
210
+ }
211
+ lines.push("", report.errors === 0
212
+ ? ` \x1b[32m✓ ${t("doctor.complete", report.warnings)}\x1b[0m`
213
+ : ` \x1b[31m✗ ${t("doctor.errors", report.errors, report.warnings)}\x1b[0m`, "");
214
+ return lines.join("\n");
215
+ }
216
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,10 @@ export interface FleetContext {
54
54
  readonly classicChannels: ClassicChannelManager | null;
55
55
  getSysInfo(): SysInfo;
56
56
  getInstanceStatus(name: string): "running" | "paused" | "stopped" | "crashed";
57
+ /** Current cancellation epoch stamped onto direct daemon IPC deliveries. */
58
+ getDeliveryEpoch?(name: string): number;
59
+ /** Subscription provider IDs used by running or paused fleet/Classic instances. */
60
+ getActiveUsageProviderIds?(): ReadonlySet<string>;
57
61
  toggleFleetCollab(instanceName: string): boolean;
58
62
  /** Apply a model to an instance (runtime paste or persist + restart). Returns a status string. */
59
63
  applyModel(instanceName: string, model: string): Promise<string>;
@@ -80,6 +84,11 @@ export interface FleetContext {
80
84
  ready: boolean;
81
85
  token: string | null;
82
86
  };
87
+ /** Persist and edit one `/update` message across the fleet process restart. */
88
+ beginUpdateProgress?(adapter: import("./channel/types.js").ChannelAdapter, chatId: string, threadId: string | undefined, messageId: string): void;
89
+ failUpdateProgress?(message: string): void;
90
+ /** Post one random, not-yet-dismissed tip with a dismiss button. */
91
+ promptTip?(generalName: string, adapter: import("./channel/types.js").ChannelAdapter, chatId: string, threadId?: string): Promise<"posted" | "empty" | "unavailable">;
83
92
  /** Human-readable effective model for an instance (resolves inherited defaults). */
84
93
  modelDisplayForInstance?(name: string): string;
85
94
  /**
@@ -97,4 +106,9 @@ export interface FleetContext {
97
106
  applyEffort?(instanceName: string, level: string): Promise<string>;
98
107
  /** TG inline-keyboard effort menu; same contract as promptModelMenu. */
99
108
  promptEffortMenu?(instanceName: string, userId: string, channelId: string, adapter: import("./channel/types.js").ChannelAdapter, chatId: string, threadId?: string): Promise<string | null>;
109
+ /**
110
+ * Post a nonce-armed confirmation before the destructive `/clear` command.
111
+ * Returns null when the buttons were posted, otherwise a user-facing error.
112
+ */
113
+ promptClearConfirmation?(instanceName: string, channelId: string, adapter: import("./channel/types.js").ChannelAdapter, chatId: string, threadId?: string): Promise<string | null>;
100
114
  }