@songsid/agend 2.1.4-beta.3 → 2.1.4-beta.31
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 +1 -1
- package/README.zh-TW.md +1 -1
- package/dist/agent-endpoint.js +1 -1
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/backend/antigravity.d.ts +9 -5
- package/dist/backend/antigravity.js +155 -30
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +33 -21
- package/dist/backend/claude-code.js +103 -27
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex.d.ts +17 -0
- package/dist/backend/codex.js +123 -8
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/gemini-cli.js +2 -2
- package/dist/backend/gemini-cli.js.map +1 -1
- package/dist/backend/grok.js +2 -2
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +1 -0
- package/dist/backend/kiro.js +17 -3
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/opencode.d.ts +27 -11
- package/dist/backend/opencode.js +50 -39
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/types.d.ts +20 -0
- package/dist/backend/types.js +12 -1
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/adapters/discord.js +106 -19
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.js +5 -3
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/agy-mcp-launcher.d.ts +2 -0
- package/dist/channel/agy-mcp-launcher.js +28 -0
- package/dist/channel/agy-mcp-launcher.js.map +1 -0
- package/dist/channel/mcp-server.js +6 -20
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.js +4 -2
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +1 -1
- package/dist/classic-channel-manager.d.ts +40 -3
- package/dist/classic-channel-manager.js +218 -31
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +148 -33
- package/dist/cli.js.map +1 -1
- package/dist/completion-install.d.ts +70 -0
- package/dist/completion-install.js +152 -0
- package/dist/completion-install.js.map +1 -0
- package/dist/completion.d.ts +7 -1
- package/dist/completion.js +14 -4
- package/dist/completion.js.map +1 -1
- package/dist/config-validator.js +38 -7
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +177 -5
- package/dist/daemon.js +771 -99
- package/dist/daemon.js.map +1 -1
- package/dist/doctor.d.ts +26 -0
- package/dist/doctor.js +216 -0
- package/dist/doctor.js.map +1 -0
- package/dist/fleet-context.d.ts +47 -0
- package/dist/fleet-manager.d.ts +251 -10
- package/dist/fleet-manager.js +2059 -387
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-yaml-slim.d.ts +10 -0
- package/dist/fleet-yaml-slim.js +59 -0
- package/dist/fleet-yaml-slim.js.map +1 -0
- package/dist/general-knowledge/skills/backend-providers/SKILL.md +114 -0
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +3 -1
- package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +52 -0
- package/dist/general-knowledge/skills/development-workflow/SKILL.md +28 -0
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +1 -0
- package/dist/general-knowledge/skills/fleet-health/SKILL.md +1 -0
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -0
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +1 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +64 -16
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +1 -0
- package/dist/general-knowledge/skills/scheduling/SKILL.md +1 -0
- package/dist/general-knowledge/skills/session-management/SKILL.md +1 -0
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -0
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +30 -0
- package/dist/instance-lifecycle.d.ts +45 -0
- package/dist/instance-lifecycle.js +150 -5
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +12 -0
- package/dist/instructions.js +35 -1
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +750 -288
- package/dist/locale.js.map +1 -1
- package/dist/login-flows.d.ts +85 -0
- package/dist/login-flows.js +159 -0
- package/dist/login-flows.js.map +1 -0
- package/dist/login-manager.d.ts +63 -0
- package/dist/login-manager.js +134 -0
- package/dist/login-manager.js.map +1 -0
- package/dist/outbound-handlers.d.ts +8 -0
- package/dist/outbound-handlers.js +44 -5
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +5 -0
- package/dist/outbound-schemas.js +7 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/quickstart.js +25 -0
- package/dist/quickstart.js.map +1 -1
- package/dist/restart-progress.d.ts +2 -0
- package/dist/restart-progress.js +3 -0
- package/dist/restart-progress.js.map +1 -1
- package/dist/scheduler/db.d.ts +12 -0
- package/dist/scheduler/db.js +59 -0
- package/dist/scheduler/db.js.map +1 -1
- package/dist/service-installer.d.ts +11 -0
- package/dist/service-installer.js +84 -18
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.js +1 -1
- package/dist/settings-api.js.map +1 -1
- package/dist/setup-wizard.js +2 -2
- package/dist/setup-wizard.js.map +1 -1
- package/dist/tips.d.ts +44 -0
- package/dist/tips.js +355 -0
- package/dist/tips.js.map +1 -0
- package/dist/tmux-manager.d.ts +6 -0
- package/dist/tmux-manager.js +12 -0
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-progress.d.ts +40 -0
- package/dist/tool-progress.js +289 -0
- package/dist/tool-progress.js.map +1 -0
- package/dist/topic-commands.d.ts +36 -4
- package/dist/topic-commands.js +322 -64
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-monitor.d.ts +15 -2
- package/dist/transcript-monitor.js +63 -17
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +131 -0
- package/dist/transcript-sources.js +580 -0
- package/dist/transcript-sources.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/ui/dashboard.html +55 -32
- package/dist/ui/settings.html +120 -51
- package/dist/ui/view.html +23 -15
- package/dist/usage/providers.d.ts +7 -0
- package/dist/usage/providers.js +18 -1
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/usage-api.d.ts +8 -2
- package/dist/usage/usage-api.js +24 -3
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/workflow-templates/default.md +2 -1
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ import { basename, dirname, join } from "node:path";
|
|
|
14
14
|
import { writeFileSync, readFileSync, unlinkSync } from "node:fs";
|
|
15
15
|
import { IpcClient } from "./ipc-bridge.js";
|
|
16
16
|
import { TOOLS } from "./mcp-tools.js";
|
|
17
|
-
import {
|
|
17
|
+
import { buildMcpCoreInstructions } from "../instructions.js";
|
|
18
18
|
import { reconnectDelayMs } from "./reconnect-backoff.js";
|
|
19
19
|
import { mcpTimeoutMs } from "./ipc-timeouts.js";
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
@@ -171,20 +171,11 @@ function ipcRequest(tool, args) {
|
|
|
171
171
|
// to avoid drift between MCP and additive system prompt paths.
|
|
172
172
|
// ---------------------------------------------------------------------------
|
|
173
173
|
function buildMcpInstructions() {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
workflow = workflowEnv;
|
|
180
|
-
let decisions;
|
|
181
|
-
if (process.env.AGEND_DECISIONS) {
|
|
182
|
-
try {
|
|
183
|
-
decisions = JSON.parse(process.env.AGEND_DECISIONS);
|
|
184
|
-
}
|
|
185
|
-
catch { /* skip */ }
|
|
186
|
-
}
|
|
187
|
-
return buildFleetInstructions({
|
|
174
|
+
// Compact on purpose: Claude Code truncates MCP instructions around 2KB, so
|
|
175
|
+
// this carries only the non-negotiable contract. The full guidance
|
|
176
|
+
// (workflow, decisions, custom prompt) rides the additive system-prompt
|
|
177
|
+
// path, which every backend has and nothing truncates.
|
|
178
|
+
return buildMcpCoreInstructions({
|
|
188
179
|
instanceName: process.env.AGEND_INSTANCE_NAME ?? "unknown",
|
|
189
180
|
workingDirectory: process.env.AGEND_WORKING_DIR ?? process.cwd(),
|
|
190
181
|
runtimeIdentity: {
|
|
@@ -192,11 +183,6 @@ function buildMcpInstructions() {
|
|
|
192
183
|
backend: process.env.AGEND_BACKEND ?? "unknown",
|
|
193
184
|
model: process.env.AGEND_MODEL ?? "default",
|
|
194
185
|
},
|
|
195
|
-
displayName: process.env.AGEND_DISPLAY_NAME,
|
|
196
|
-
description: process.env.AGEND_DESCRIPTION,
|
|
197
|
-
customPrompt: process.env.AGEND_CUSTOM_PROMPT,
|
|
198
|
-
workflow,
|
|
199
|
-
decisions,
|
|
200
186
|
});
|
|
201
187
|
}
|
|
202
188
|
const mcp = new Server({ name: "agend", version: "0.3.0" }, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/channel/mcp-server.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/channel/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,6 +85,8 @@ const DEFS = [
|
|
|
85
85
|
"Get the reasoning-effort setting for an instance: the level in force, the levels its CLI backend accepts, and whether changing it takes effect immediately or needs a restart. Defaults to yourself."],
|
|
86
86
|
["get_usage", schemas.GetUsageArgs,
|
|
87
87
|
"Get AI subscription usage for the CLI backends logged in on this machine (Claude/Codex/Grok/Kiro). Returns per-provider metrics — use it to notice you are close to a limit and warn the user."],
|
|
88
|
+
["list_models", schemas.ListModelsArgs,
|
|
89
|
+
"List the models a backend actually offers, before naming one in create_instance or update_instance_config. Pass instance_name to read the catalog through an existing instance's own config — an instance on a custom provider can offer a different set than the account. `scope` tells you which you got. An empty list is not a failure: model names are passed through to the CLI."],
|
|
88
90
|
["get_instance_logs", schemas.GetInstanceLogsArgs,
|
|
89
91
|
"Read the last N lines of an instance's output log (default 50)."],
|
|
90
92
|
["get_fleet_config", schemas.GetFleetConfigArgs,
|
|
@@ -94,7 +96,7 @@ const DEFS = [
|
|
|
94
96
|
["update_fleet_defaults", schemas.UpdateFleetDefaultsArgs,
|
|
95
97
|
"Update fleet-wide defaults (backend, model, auto_pause_after). Saves to fleet.yaml."],
|
|
96
98
|
["create_instance", schemas.CreateInstanceArgs,
|
|
97
|
-
"Create a new instance bound to a project directory with a channel topic. If directory is omitted, a workspace is auto-created at ~/.agend/workspaces/<instance-name>."],
|
|
99
|
+
"Create a new instance bound to a project directory with a channel topic. If directory is omitted, a workspace is auto-created at ~/.agend/workspaces/<instance-name>. Use backend_options.codex.provider (for example, 'glm') to select a Codex custom provider."],
|
|
98
100
|
["delete_instance", schemas.DeleteInstanceArgs,
|
|
99
101
|
"Delete an instance: stop daemon, remove config, optionally delete topic."],
|
|
100
102
|
["replace_instance", schemas.ReplaceInstanceArgs,
|
|
@@ -145,7 +147,7 @@ export const TOOL_SETS = {
|
|
|
145
147
|
// Channel I/O (users talk to general, and send it images/files)
|
|
146
148
|
"reply", "react", "edit_message", "download_attachment",
|
|
147
149
|
// Discovery — the documented dispatch preamble
|
|
148
|
-
"list_teams", "list_instances", "describe_instance", "get_fleet_status", "get_usage", "get_effort",
|
|
150
|
+
"list_teams", "list_instances", "describe_instance", "get_fleet_status", "get_usage", "get_effort", "list_models",
|
|
149
151
|
// Dispatch
|
|
150
152
|
"send_to_instance", "delegate_task", "request_information", "report_result", "broadcast",
|
|
151
153
|
// Bring capacity online (reuse-first, but it may need to create/start)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/channel/mcp-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/channel/mcp-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/channel/types.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface InstanceStatusData {
|
|
|
10
10
|
costCents: number;
|
|
11
11
|
}
|
|
12
12
|
export interface AlertData {
|
|
13
|
-
type: "hang" | "cost_warn" | "cost_limit" | "schedule_deferred" | "rotation" | "cancel" | "interactive_prompt" | "exit_restart";
|
|
13
|
+
type: "hang" | "cost_warn" | "cost_limit" | "schedule_deferred" | "rotation" | "cancel" | "interactive_prompt" | "exit_restart" | "clear_confirm" | "tip" | "login";
|
|
14
14
|
instanceName: string;
|
|
15
15
|
message: string;
|
|
16
16
|
choices?: Choice[];
|
|
@@ -20,6 +20,8 @@ export interface ClassicChannel {
|
|
|
20
20
|
instanceName: string;
|
|
21
21
|
backend?: string;
|
|
22
22
|
model?: string;
|
|
23
|
+
displayName?: string;
|
|
24
|
+
description?: string;
|
|
23
25
|
autoPauseAfter?: number;
|
|
24
26
|
collab?: boolean;
|
|
25
27
|
preTaskCommand?: string;
|
|
@@ -35,6 +37,15 @@ export interface ClassicChannel {
|
|
|
35
37
|
* the historical name — single-bot users see no change across the upgrade.
|
|
36
38
|
*/
|
|
37
39
|
export declare function classicInstanceName(sanitizedName: string, channelId: string, adapterId?: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Infer the platform which issued a Classic channel id.
|
|
42
|
+
*
|
|
43
|
+
* Telegram group ids are negative. Telegram private-chat ids are positive but
|
|
44
|
+
* fit in 52 bits (at most 16 decimal digits), while Discord snowflakes are
|
|
45
|
+
* currently 17-20 decimal digits. Anything else is deliberately left unknown
|
|
46
|
+
* so custom/future adapters retain the backwards-compatible primary fallback.
|
|
47
|
+
*/
|
|
48
|
+
export declare function inferClassicChannelType(channelId: string): "telegram" | "discord" | undefined;
|
|
38
49
|
/**
|
|
39
50
|
* Manages classic bot channel lifecycle — register/unregister/persist.
|
|
40
51
|
* Persists to ~/.agend/classicBot.yaml with per-channel backend override.
|
|
@@ -50,14 +61,26 @@ export declare class ClassicChannelManager {
|
|
|
50
61
|
private defaults;
|
|
51
62
|
private readonly configPath;
|
|
52
63
|
private lastMtime;
|
|
53
|
-
/** The primary (channels[0]) adapter id.
|
|
64
|
+
/** The primary (channels[0]) adapter id. It names without a suffix. */
|
|
54
65
|
private primaryAdapterId?;
|
|
66
|
+
/** Config-order adapter identities, used to migrate legacy rows by platform. */
|
|
67
|
+
private adapters;
|
|
55
68
|
constructor(dataDir: string, logger: Logger);
|
|
56
69
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
70
|
+
* Backwards-compatible single-adapter configuration used by tests and older
|
|
71
|
+
* callers. Production startup supplies the complete adapter list through
|
|
72
|
+
* {@link configureAdapters} so legacy rows can be matched by platform.
|
|
59
73
|
*/
|
|
60
74
|
setPrimaryAdapterId(adapterId: string): void;
|
|
75
|
+
/**
|
|
76
|
+
* Configure all adapters in fleet.yaml order, then migrate/repair persisted
|
|
77
|
+
* Classic registrations. The full list matters when the primary adapter is
|
|
78
|
+
* a different platform from a legacy channel.
|
|
79
|
+
*/
|
|
80
|
+
configureAdapters(adapters: ReadonlyArray<{
|
|
81
|
+
id?: string;
|
|
82
|
+
type: string;
|
|
83
|
+
}>): void;
|
|
61
84
|
/** Map key for a (channelId, adapterId) pair. adapterId-less = legacy entry (pre-migration). */
|
|
62
85
|
private compositeKey;
|
|
63
86
|
/** Rebuild the channelId presence set from the entry map (call after any mutation). */
|
|
@@ -68,6 +91,16 @@ export declare class ClassicChannelManager {
|
|
|
68
91
|
* not-yet-migrated legacy entry as a defensive fallback.
|
|
69
92
|
*/
|
|
70
93
|
private find;
|
|
94
|
+
/** Type of a configured adapter id, including historical default ids. */
|
|
95
|
+
private adapterType;
|
|
96
|
+
/** Deterministically choose the first configured adapter for a platform. */
|
|
97
|
+
private adapterForType;
|
|
98
|
+
/** Preserve the pre-repair file once; instance/workspace data is never deleted. */
|
|
99
|
+
private backupBeforeAdapterRepair;
|
|
100
|
+
/**
|
|
101
|
+
* Load the persisted registry. Returns true when it migrated/repaired data
|
|
102
|
+
* and the caller should write the normalized registry back to disk.
|
|
103
|
+
*/
|
|
71
104
|
private load;
|
|
72
105
|
private save;
|
|
73
106
|
/** Poll for external file changes (call periodically, e.g. every 30s) */
|
|
@@ -87,6 +120,10 @@ export declare class ClassicChannelManager {
|
|
|
87
120
|
isAdmin(userId: string): boolean;
|
|
88
121
|
/** Set the model override for the channel owning `instanceName` and persist. Returns true if found. */
|
|
89
122
|
setModelByInstance(instanceName: string, model: string): boolean;
|
|
123
|
+
/** Persist agent-selected identity for a Classic instance. */
|
|
124
|
+
setDisplayNameByInstance(instanceName: string, displayName: string): boolean;
|
|
125
|
+
/** Persist agent-selected role/description for a Classic instance. */
|
|
126
|
+
setDescriptionByInstance(instanceName: string, description: string): boolean;
|
|
90
127
|
/** Toggle collab mode for a channel. Returns new state. */
|
|
91
128
|
toggleCollab(channelId: string, adapterId?: string): boolean;
|
|
92
129
|
isCollab(channelId: string, adapterId?: string): boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync, appendFileSync, readdirSync, unlinkSync, statSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, appendFileSync, copyFileSync, readdirSync, unlinkSync, statSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import yaml from "js-yaml";
|
|
4
4
|
import { getAgendHome } from "./paths.js";
|
|
@@ -48,6 +48,26 @@ export function classicInstanceName(sanitizedName, channelId, adapterId) {
|
|
|
48
48
|
const base = `classic-${sanitizedName}-${suffix}`;
|
|
49
49
|
return adapterId ? `${base}-${sanitizeInstanceName(adapterId)}` : base;
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Infer the platform which issued a Classic channel id.
|
|
53
|
+
*
|
|
54
|
+
* Telegram group ids are negative. Telegram private-chat ids are positive but
|
|
55
|
+
* fit in 52 bits (at most 16 decimal digits), while Discord snowflakes are
|
|
56
|
+
* currently 17-20 decimal digits. Anything else is deliberately left unknown
|
|
57
|
+
* so custom/future adapters retain the backwards-compatible primary fallback.
|
|
58
|
+
*/
|
|
59
|
+
export function inferClassicChannelType(channelId) {
|
|
60
|
+
const value = channelId.trim();
|
|
61
|
+
if (!/^-?\d+$/.test(value))
|
|
62
|
+
return undefined;
|
|
63
|
+
if (value.startsWith("-"))
|
|
64
|
+
return "telegram";
|
|
65
|
+
if (value.length >= 17 && value.length <= 20)
|
|
66
|
+
return "discord";
|
|
67
|
+
if (value.length >= 1 && value.length <= 16)
|
|
68
|
+
return "telegram";
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
51
71
|
/**
|
|
52
72
|
* Manages classic bot channel lifecycle — register/unregister/persist.
|
|
53
73
|
* Persists to ~/.agend/classicBot.yaml with per-channel backend override.
|
|
@@ -63,8 +83,10 @@ export class ClassicChannelManager {
|
|
|
63
83
|
defaults = {};
|
|
64
84
|
configPath;
|
|
65
85
|
lastMtime = 0;
|
|
66
|
-
/** The primary (channels[0]) adapter id.
|
|
86
|
+
/** The primary (channels[0]) adapter id. It names without a suffix. */
|
|
67
87
|
primaryAdapterId;
|
|
88
|
+
/** Config-order adapter identities, used to migrate legacy rows by platform. */
|
|
89
|
+
adapters = [];
|
|
68
90
|
constructor(dataDir, logger) {
|
|
69
91
|
this.dataDir = dataDir;
|
|
70
92
|
this.logger = logger;
|
|
@@ -72,17 +94,31 @@ export class ClassicChannelManager {
|
|
|
72
94
|
this.load();
|
|
73
95
|
}
|
|
74
96
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
97
|
+
* Backwards-compatible single-adapter configuration used by tests and older
|
|
98
|
+
* callers. Production startup supplies the complete adapter list through
|
|
99
|
+
* {@link configureAdapters} so legacy rows can be matched by platform.
|
|
77
100
|
*/
|
|
78
101
|
setPrimaryAdapterId(adapterId) {
|
|
79
|
-
|
|
102
|
+
this.configureAdapters([{ id: adapterId, type: adapterId }]);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Configure all adapters in fleet.yaml order, then migrate/repair persisted
|
|
106
|
+
* Classic registrations. The full list matters when the primary adapter is
|
|
107
|
+
* a different platform from a legacy channel.
|
|
108
|
+
*/
|
|
109
|
+
configureAdapters(adapters) {
|
|
110
|
+
const identities = adapters.map(adapter => ({ id: adapter.id ?? adapter.type, type: adapter.type }));
|
|
111
|
+
const primaryAdapterId = identities[0]?.id;
|
|
112
|
+
const unchanged = this.primaryAdapterId === primaryAdapterId
|
|
113
|
+
&& this.adapters.length === identities.length
|
|
114
|
+
&& this.adapters.every((adapter, index) => adapter.id === identities[index]?.id && adapter.type === identities[index]?.type);
|
|
115
|
+
if (unchanged)
|
|
80
116
|
return;
|
|
81
|
-
this.primaryAdapterId =
|
|
82
|
-
|
|
83
|
-
this.load();
|
|
84
|
-
if (
|
|
85
|
-
this.save();
|
|
117
|
+
this.primaryAdapterId = primaryAdapterId;
|
|
118
|
+
this.adapters = identities;
|
|
119
|
+
const repaired = this.load();
|
|
120
|
+
if (repaired && this.backupBeforeAdapterRepair())
|
|
121
|
+
this.save();
|
|
86
122
|
}
|
|
87
123
|
/** Map key for a (channelId, adapterId) pair. adapterId-less = legacy entry (pre-migration). */
|
|
88
124
|
compositeKey(channelId, adapterId) {
|
|
@@ -102,50 +138,171 @@ export class ClassicChannelManager {
|
|
|
102
138
|
if (exact)
|
|
103
139
|
return exact;
|
|
104
140
|
if (adapterId && adapterId === this.primaryAdapterId) {
|
|
105
|
-
|
|
141
|
+
const legacy = this.channels.get(this.compositeKey(channelId, undefined));
|
|
142
|
+
if (!legacy)
|
|
143
|
+
return undefined;
|
|
144
|
+
const inferredType = inferClassicChannelType(channelId);
|
|
145
|
+
const primaryType = this.adapterType(adapterId);
|
|
146
|
+
// A known cross-platform legacy row must wait for its owning adapter to
|
|
147
|
+
// return; never expose it to the current primary merely as a fallback.
|
|
148
|
+
if (inferredType && primaryType && inferredType !== primaryType)
|
|
149
|
+
return undefined;
|
|
150
|
+
return legacy;
|
|
106
151
|
}
|
|
107
152
|
return undefined;
|
|
108
153
|
}
|
|
154
|
+
/** Type of a configured adapter id, including historical default ids. */
|
|
155
|
+
adapterType(adapterId) {
|
|
156
|
+
if (!adapterId)
|
|
157
|
+
return undefined;
|
|
158
|
+
return this.adapters.find(adapter => adapter.id === adapterId)?.type
|
|
159
|
+
?? (adapterId === "telegram" || adapterId === "discord" ? adapterId : undefined);
|
|
160
|
+
}
|
|
161
|
+
/** Deterministically choose the first configured adapter for a platform. */
|
|
162
|
+
adapterForType(type) {
|
|
163
|
+
if (!type)
|
|
164
|
+
return undefined;
|
|
165
|
+
const primary = this.adapters.find(adapter => adapter.id === this.primaryAdapterId);
|
|
166
|
+
if (primary?.type === type)
|
|
167
|
+
return primary.id;
|
|
168
|
+
return this.adapters.find(adapter => adapter.type === type)?.id;
|
|
169
|
+
}
|
|
170
|
+
/** Preserve the pre-repair file once; instance/workspace data is never deleted. */
|
|
171
|
+
backupBeforeAdapterRepair() {
|
|
172
|
+
const backupPath = `${this.configPath}.pre-adapter-repair.bak`;
|
|
173
|
+
if (existsSync(backupPath) || !existsSync(this.configPath))
|
|
174
|
+
return true;
|
|
175
|
+
try {
|
|
176
|
+
copyFileSync(this.configPath, backupPath);
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
this.logger.warn({ err, backupPath }, "Failed to back up classicBot.yaml before adapter repair");
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Load the persisted registry. Returns true when it migrated/repaired data
|
|
186
|
+
* and the caller should write the normalized registry back to disk.
|
|
187
|
+
*/
|
|
109
188
|
load() {
|
|
110
189
|
if (!existsSync(this.configPath))
|
|
111
|
-
return;
|
|
190
|
+
return false;
|
|
112
191
|
try {
|
|
113
192
|
const raw = yaml.load(readFileSync(this.configPath, "utf-8"));
|
|
114
193
|
if (!raw)
|
|
115
|
-
return;
|
|
194
|
+
return false;
|
|
116
195
|
this.defaults = raw.defaults ?? {};
|
|
117
196
|
this.channels.clear();
|
|
197
|
+
let repaired = false;
|
|
118
198
|
if (raw.channels) {
|
|
199
|
+
const loaded = [];
|
|
119
200
|
for (const [key, val] of Object.entries(raw.channels)) {
|
|
120
201
|
// Old format: key IS the channelId, no adapterId/instanceName fields.
|
|
121
202
|
const channelId = val.channelId ?? key;
|
|
122
|
-
const
|
|
203
|
+
const inferredType = inferClassicChannelType(channelId);
|
|
204
|
+
const inferredAdapterId = this.adapterForType(inferredType);
|
|
205
|
+
// Prefer the adapter whose platform issued the id. Unknown/custom ids
|
|
206
|
+
// retain the historical primary fallback.
|
|
207
|
+
const adapterId = val.adapterId
|
|
208
|
+
?? (inferredType ? inferredAdapterId : this.primaryAdapterId);
|
|
123
209
|
const name = val.name ?? channelId;
|
|
124
|
-
//
|
|
125
|
-
|
|
210
|
+
// An explicit non-primary registration carries a suffix. A legacy
|
|
211
|
+
// registration always keeps its historical unsuffixed instance name
|
|
212
|
+
// even when platform inference moves it away from channels[0].
|
|
213
|
+
const suffixAdapter = val.adapterId && adapterId !== this.primaryAdapterId ? adapterId : undefined;
|
|
126
214
|
const instanceName = val.instanceName ?? classicInstanceName(sanitizeInstanceName(name), channelId, suffixAdapter);
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
215
|
+
loaded.push({
|
|
216
|
+
persistedAdapterId: val.adapterId,
|
|
217
|
+
inferredType,
|
|
218
|
+
channel: {
|
|
219
|
+
channelId,
|
|
220
|
+
adapterId,
|
|
221
|
+
name,
|
|
222
|
+
instanceName,
|
|
223
|
+
backend: val.backend,
|
|
224
|
+
model: val.model,
|
|
225
|
+
displayName: val.display_name,
|
|
226
|
+
description: val.description,
|
|
227
|
+
autoPauseAfter: val.auto_pause_after,
|
|
228
|
+
collab: val.collab,
|
|
229
|
+
preTaskCommand: val.pre_task_command,
|
|
230
|
+
contextLines: val.context_lines,
|
|
231
|
+
createdAt: val.createdAt ?? "",
|
|
232
|
+
createdBy: val.createdBy ?? "",
|
|
233
|
+
},
|
|
140
234
|
});
|
|
141
235
|
}
|
|
236
|
+
for (const entry of loaded) {
|
|
237
|
+
const { channel, persistedAdapterId, inferredType } = entry;
|
|
238
|
+
const inferredAdapterId = this.adapterForType(inferredType);
|
|
239
|
+
const persistedType = this.adapterType(persistedAdapterId);
|
|
240
|
+
const isLegacy = persistedAdapterId === undefined;
|
|
241
|
+
const isCrossPlatformMisbind = !!(persistedAdapterId
|
|
242
|
+
&& inferredType
|
|
243
|
+
&& inferredAdapterId
|
|
244
|
+
&& persistedType
|
|
245
|
+
&& persistedType !== inferredType);
|
|
246
|
+
if (isLegacy && channel.adapterId) {
|
|
247
|
+
repaired = true;
|
|
248
|
+
this.logger.warn({ channelId: channel.channelId, adapterId: channel.adapterId, instanceName: channel.instanceName, inferredType }, "Migrated legacy Classic channel to inferred adapter");
|
|
249
|
+
}
|
|
250
|
+
if (isLegacy && inferredType && !channel.adapterId) {
|
|
251
|
+
this.logger.warn({ channelId: channel.channelId, inferredType, instanceName: channel.instanceName }, "Classic legacy channel has no configured adapter for its platform; leaving it unbound");
|
|
252
|
+
}
|
|
253
|
+
if (isCrossPlatformMisbind) {
|
|
254
|
+
const correctlyBound = loaded.filter(candidate => candidate !== entry
|
|
255
|
+
&& candidate.channel.channelId === channel.channelId
|
|
256
|
+
&& candidate.persistedAdapterId !== undefined
|
|
257
|
+
&& this.adapterType(candidate.persistedAdapterId) === inferredType);
|
|
258
|
+
if (correctlyBound.length > 0) {
|
|
259
|
+
// A post-migration /start already created the right registration.
|
|
260
|
+
// Keep the live/correct target, drop only the phantom registry row;
|
|
261
|
+
// its instance/workspace remains on disk for manual recovery.
|
|
262
|
+
repaired = true;
|
|
263
|
+
this.logger.warn({
|
|
264
|
+
channelId: channel.channelId,
|
|
265
|
+
staleAdapterId: persistedAdapterId,
|
|
266
|
+
staleInstanceName: channel.instanceName,
|
|
267
|
+
activeAdapters: correctlyBound.map(candidate => candidate.persistedAdapterId),
|
|
268
|
+
activeInstances: correctlyBound.map(candidate => candidate.channel.instanceName),
|
|
269
|
+
}, "Removed phantom Classic channel registration; instance data retained on disk");
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
channel.adapterId = inferredAdapterId;
|
|
273
|
+
repaired = true;
|
|
274
|
+
this.logger.warn({
|
|
275
|
+
channelId: channel.channelId,
|
|
276
|
+
fromAdapterId: persistedAdapterId,
|
|
277
|
+
toAdapterId: inferredAdapterId,
|
|
278
|
+
instanceName: channel.instanceName,
|
|
279
|
+
}, "Repaired cross-platform Classic channel adapter binding");
|
|
280
|
+
}
|
|
281
|
+
const mapKey = this.compositeKey(channel.channelId, channel.adapterId);
|
|
282
|
+
const existing = this.channels.get(mapKey);
|
|
283
|
+
if (existing) {
|
|
284
|
+
// Malformed/hand-edited duplicates: prefer the already normalized
|
|
285
|
+
// explicit row and keep all instance data on disk.
|
|
286
|
+
repaired = true;
|
|
287
|
+
this.logger.warn({
|
|
288
|
+
channelId: channel.channelId,
|
|
289
|
+
adapterId: channel.adapterId,
|
|
290
|
+
keptInstanceName: existing.instanceName,
|
|
291
|
+
ignoredInstanceName: channel.instanceName,
|
|
292
|
+
}, "Ignored duplicate Classic channel registration; instance data retained on disk");
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
this.channels.set(mapKey, channel);
|
|
296
|
+
}
|
|
142
297
|
}
|
|
143
298
|
this.rebuildChannelIds();
|
|
144
299
|
this.lastMtime = statSync(this.configPath).mtimeMs;
|
|
145
300
|
this.logger.info({ count: this.channels.size }, "Loaded classic channels");
|
|
301
|
+
return repaired;
|
|
146
302
|
}
|
|
147
303
|
catch (err) {
|
|
148
304
|
this.logger.warn({ err }, "Failed to load classicBot.yaml");
|
|
305
|
+
return false;
|
|
149
306
|
}
|
|
150
307
|
}
|
|
151
308
|
save() {
|
|
@@ -165,6 +322,10 @@ export class ClassicChannelManager {
|
|
|
165
322
|
entry.backend = ch.backend;
|
|
166
323
|
if (ch.model)
|
|
167
324
|
entry.model = ch.model;
|
|
325
|
+
if (ch.displayName)
|
|
326
|
+
entry.display_name = ch.displayName;
|
|
327
|
+
if (ch.description)
|
|
328
|
+
entry.description = ch.description;
|
|
168
329
|
if (ch.autoPauseAfter !== undefined)
|
|
169
330
|
entry.auto_pause_after = ch.autoPauseAfter;
|
|
170
331
|
if (ch.contextLines)
|
|
@@ -186,12 +347,16 @@ export class ClassicChannelManager {
|
|
|
186
347
|
if (mtime <= this.lastMtime)
|
|
187
348
|
return false;
|
|
188
349
|
this.logger.info("classicBot.yaml changed — reloading");
|
|
189
|
-
this.load();
|
|
350
|
+
const repaired = this.load();
|
|
351
|
+
if (repaired && this.backupBeforeAdapterRepair())
|
|
352
|
+
this.save();
|
|
190
353
|
return true;
|
|
191
354
|
}
|
|
192
355
|
/** Reload immediately after an authenticated settings write. */
|
|
193
356
|
reloadFromDisk() {
|
|
194
|
-
this.load();
|
|
357
|
+
const repaired = this.load();
|
|
358
|
+
if (repaired && this.backupBeforeAdapterRepair())
|
|
359
|
+
this.save();
|
|
195
360
|
}
|
|
196
361
|
getDefaults() { return this.defaults; }
|
|
197
362
|
/** Check if a guild is allowed. Empty/unset/non-array allowed_guilds = allow all (backward compat). */
|
|
@@ -231,6 +396,28 @@ export class ClassicChannelManager {
|
|
|
231
396
|
}
|
|
232
397
|
return false;
|
|
233
398
|
}
|
|
399
|
+
/** Persist agent-selected identity for a Classic instance. */
|
|
400
|
+
setDisplayNameByInstance(instanceName, displayName) {
|
|
401
|
+
for (const ch of this.channels.values()) {
|
|
402
|
+
if (ch.instanceName === instanceName) {
|
|
403
|
+
ch.displayName = displayName;
|
|
404
|
+
this.save();
|
|
405
|
+
return true;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
/** Persist agent-selected role/description for a Classic instance. */
|
|
411
|
+
setDescriptionByInstance(instanceName, description) {
|
|
412
|
+
for (const ch of this.channels.values()) {
|
|
413
|
+
if (ch.instanceName === instanceName) {
|
|
414
|
+
ch.description = description;
|
|
415
|
+
this.save();
|
|
416
|
+
return true;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
234
421
|
/** Toggle collab mode for a channel. Returns new state. */
|
|
235
422
|
toggleCollab(channelId, adapterId) {
|
|
236
423
|
const ch = this.find(channelId, adapterId);
|