@songsid/agend 2.0.11-beta.9 → 2.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/channel/adapters/discord.js +21 -16
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.js +1 -0
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-tools.js +3 -0
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/tool-router.js +29 -2
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/channel/types.d.ts +2 -0
- package/dist/classic-channel-manager.d.ts +59 -12
- package/dist/classic-channel-manager.js +121 -30
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +70 -21
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.d.ts +20 -0
- package/dist/config-validator.js +154 -0
- package/dist/config-validator.js.map +1 -0
- package/dist/fleet-manager.d.ts +21 -5
- package/dist/fleet-manager.js +412 -258
- package/dist/fleet-manager.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +1 -1
- package/dist/instance-lifecycle.js +12 -11
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/locale.d.ts +19 -0
- package/dist/locale.js +179 -0
- package/dist/locale.js.map +1 -0
- package/dist/outbound-schemas.d.ts +1 -0
- package/dist/outbound-schemas.js +1 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/quickstart.js +222 -9
- package/dist/quickstart.js.map +1 -1
- package/dist/scheduler/scheduler.js +8 -2
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/settings-api.d.ts +33 -0
- package/dist/settings-api.js +283 -0
- package/dist/settings-api.js.map +1 -0
- package/dist/topic-commands.d.ts +14 -0
- package/dist/topic-commands.js +78 -15
- package/dist/topic-commands.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/ui/settings.html +617 -0
- package/dist/ui/view.html +271 -43
- package/dist/view-api.js +86 -37
- package/dist/view-api.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared config validation for fleet.yaml and classicBot.yaml.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions with no fleet-manager / filesystem dependencies so both the
|
|
5
|
+
* CLI (`agend validate`) and the Settings API can import them. `errors` block a
|
|
6
|
+
* write (they break the fleet); `warnings` are advisory (write is allowed).
|
|
7
|
+
*/
|
|
8
|
+
/** Backends the factory can instantiate (keep in sync with backend/factory.ts). */
|
|
9
|
+
export const KNOWN_BACKENDS = ["claude-code", "gemini-cli", "codex", "opencode", "kiro-cli", "antigravity", "mock"];
|
|
10
|
+
const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
11
|
+
/** Every value is a non-empty string or a number (Telegram/Discord ids). */
|
|
12
|
+
function isIdArray(v) {
|
|
13
|
+
return Array.isArray(v) && v.every(x => (typeof x === "string" && x.length > 0) || typeof x === "number");
|
|
14
|
+
}
|
|
15
|
+
/** The adapter id used to bind instances: explicit `id`, else `type`. */
|
|
16
|
+
function channelIdOf(ch) {
|
|
17
|
+
const id = ch.id ?? ch.type;
|
|
18
|
+
return typeof id === "string" && id ? id : undefined;
|
|
19
|
+
}
|
|
20
|
+
export function validateFleetConfig(config) {
|
|
21
|
+
const errors = [];
|
|
22
|
+
const warnings = [];
|
|
23
|
+
const err = (path, message) => errors.push({ path, message });
|
|
24
|
+
const warn = (path, message) => warnings.push({ path, message });
|
|
25
|
+
if (!isObj(config)) {
|
|
26
|
+
return { valid: false, errors: [{ path: "", message: "config must be a mapping" }], warnings: [] };
|
|
27
|
+
}
|
|
28
|
+
// ── Channels ──────────────────────────────────────────────
|
|
29
|
+
// `channels: []` (multi) takes precedence; the legacy singular `channel:` is
|
|
30
|
+
// used ONLY when `channels` is absent (matching fleet-manager's
|
|
31
|
+
// `channels ?? [channel]`). Counting both would double-count a shared id and
|
|
32
|
+
// wrongly flag a "duplicate channel id".
|
|
33
|
+
const channelList = [];
|
|
34
|
+
const usingChannels = Array.isArray(config.channels);
|
|
35
|
+
if (usingChannels) {
|
|
36
|
+
config.channels.forEach((ch, i) => {
|
|
37
|
+
if (!isObj(ch)) {
|
|
38
|
+
err(`channels[${i}]`, "must be a mapping");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
channelList.push(ch);
|
|
42
|
+
});
|
|
43
|
+
if (config.channel !== undefined)
|
|
44
|
+
warn("channel", "both `channel` (deprecated) and `channels` are set — `channel` is ignored");
|
|
45
|
+
}
|
|
46
|
+
else if (config.channels !== undefined) {
|
|
47
|
+
err("channels", "must be a list");
|
|
48
|
+
}
|
|
49
|
+
else if (isObj(config.channel)) {
|
|
50
|
+
channelList.push(config.channel);
|
|
51
|
+
}
|
|
52
|
+
else if (config.channel !== undefined) {
|
|
53
|
+
err("channel", "must be a mapping");
|
|
54
|
+
}
|
|
55
|
+
if (channelList.length === 0) {
|
|
56
|
+
warn("channels", "no channel configured — the fleet has no Telegram/Discord adapter");
|
|
57
|
+
}
|
|
58
|
+
const channelIds = new Set();
|
|
59
|
+
const multi = channelList.length > 1;
|
|
60
|
+
channelList.forEach((ch, i) => {
|
|
61
|
+
const at = Array.isArray(config.channels) && i < config.channels.length ? `channels[${i}]` : "channel";
|
|
62
|
+
if (typeof ch.type !== "string" || !ch.type)
|
|
63
|
+
err(`${at}.type`, "required (e.g. \"telegram\" or \"discord\")");
|
|
64
|
+
if (typeof ch.bot_token_env !== "string" || !ch.bot_token_env)
|
|
65
|
+
err(`${at}.bot_token_env`, "required — the env var holding the bot token");
|
|
66
|
+
// With multiple channels an explicit id is needed to disambiguate bindings.
|
|
67
|
+
if (multi && (ch.id === undefined || ch.id === null || ch.id === "")) {
|
|
68
|
+
warn(`${at}.id`, "multiple channels present — set a unique `id` so instances can bind to this adapter");
|
|
69
|
+
}
|
|
70
|
+
const cid = channelIdOf(ch);
|
|
71
|
+
if (cid) {
|
|
72
|
+
if (channelIds.has(cid))
|
|
73
|
+
err(`${at}.id`, `duplicate channel id "${cid}"`);
|
|
74
|
+
channelIds.add(cid);
|
|
75
|
+
}
|
|
76
|
+
if (isObj(ch.access) && ch.access.allowed_users !== undefined && !isIdArray(ch.access.allowed_users)) {
|
|
77
|
+
err(`${at}.access.allowed_users`, "must be an array of strings/numbers");
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// ── Defaults ──────────────────────────────────────────────
|
|
81
|
+
if (config.defaults !== undefined && !isObj(config.defaults)) {
|
|
82
|
+
err("defaults", "must be a mapping");
|
|
83
|
+
}
|
|
84
|
+
else if (isObj(config.defaults)) {
|
|
85
|
+
const b = config.defaults.backend;
|
|
86
|
+
if (b !== undefined && (typeof b !== "string" || !KNOWN_BACKENDS.includes(b))) {
|
|
87
|
+
err("defaults.backend", `unknown backend "${String(b)}" (known: ${KNOWN_BACKENDS.join(", ")})`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ── Instances ─────────────────────────────────────────────
|
|
91
|
+
let generalCount = 0;
|
|
92
|
+
if (config.instances !== undefined && !isObj(config.instances)) {
|
|
93
|
+
err("instances", "must be a mapping");
|
|
94
|
+
}
|
|
95
|
+
else if (isObj(config.instances)) {
|
|
96
|
+
for (const [name, inst] of Object.entries(config.instances)) {
|
|
97
|
+
if (!isObj(inst)) {
|
|
98
|
+
err(`instances.${name}`, "must be a mapping");
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (inst.general_topic === true)
|
|
102
|
+
generalCount++;
|
|
103
|
+
// channel_id must reference a real channel id.
|
|
104
|
+
if (inst.channel_id !== undefined && inst.channel_id !== null && inst.channel_id !== "") {
|
|
105
|
+
const ref = String(inst.channel_id);
|
|
106
|
+
if (!channelIds.has(ref)) {
|
|
107
|
+
err(`instances.${name}.channel_id`, `references unknown channel "${ref}" (known: ${[...channelIds].join(", ") || "none"})`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const b = inst.backend;
|
|
111
|
+
if (b !== undefined && (typeof b !== "string" || !KNOWN_BACKENDS.includes(b))) {
|
|
112
|
+
err(`instances.${name}.backend`, `unknown backend "${String(b)}" (known: ${KNOWN_BACKENDS.join(", ")})`);
|
|
113
|
+
}
|
|
114
|
+
if (inst.working_directory !== undefined && typeof inst.working_directory !== "string") {
|
|
115
|
+
err(`instances.${name}.working_directory`, "must be a string path");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (generalCount === 0) {
|
|
120
|
+
warn("instances", "no general_topic instance — there is no general dispatcher to receive un-topic'd messages");
|
|
121
|
+
}
|
|
122
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
123
|
+
}
|
|
124
|
+
export function validateClassicBotConfig(config) {
|
|
125
|
+
const errors = [];
|
|
126
|
+
const warnings = [];
|
|
127
|
+
const err = (path, message) => errors.push({ path, message });
|
|
128
|
+
// An empty / absent classicBot.yaml is valid (classic bot is optional).
|
|
129
|
+
if (config === null || config === undefined)
|
|
130
|
+
return { valid: true, errors, warnings };
|
|
131
|
+
if (!isObj(config)) {
|
|
132
|
+
return { valid: false, errors: [{ path: "", message: "config must be a mapping" }], warnings: [] };
|
|
133
|
+
}
|
|
134
|
+
if (config.defaults !== undefined && !isObj(config.defaults)) {
|
|
135
|
+
err("defaults", "must be a mapping");
|
|
136
|
+
}
|
|
137
|
+
else if (isObj(config.defaults)) {
|
|
138
|
+
const d = config.defaults;
|
|
139
|
+
const b = d.backend;
|
|
140
|
+
if (b !== undefined && (typeof b !== "string" || !KNOWN_BACKENDS.includes(b))) {
|
|
141
|
+
err("defaults.backend", `unknown backend "${String(b)}" (known: ${KNOWN_BACKENDS.join(", ")})`);
|
|
142
|
+
}
|
|
143
|
+
for (const key of ["allowed_guilds", "admin_users", "allowed_groups", "allowed_users"]) {
|
|
144
|
+
if (d[key] !== undefined && !isIdArray(d[key])) {
|
|
145
|
+
err(`defaults.${key}`, "must be an array of strings/numbers");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (config.channels !== undefined && !isObj(config.channels)) {
|
|
150
|
+
err("channels", "must be a mapping (keyed by channelId or channelId#adapterId)");
|
|
151
|
+
}
|
|
152
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=config-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../src/config-validator.ts"],"names":[],"mappings":"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"}
|
package/dist/fleet-manager.d.ts
CHANGED
|
@@ -77,9 +77,25 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
77
77
|
loadConfig(configPath: string): FleetConfig;
|
|
78
78
|
/** Build topic routing table: { topicId -> RouteTarget } */
|
|
79
79
|
buildRoutingTable(): Map<string, RouteTarget>;
|
|
80
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Refresh each adapter's open-channel whitelist after a classic change.
|
|
82
|
+
* Classic channels are NOT registered in the routing engine (it's single-key
|
|
83
|
+
* per channel — can't represent two bots in one channel); routing resolves
|
|
84
|
+
* per-bot via ClassicChannelManager.getInstanceByChannel. Each adapter only
|
|
85
|
+
* opens the channels IT owns so a sibling bot doesn't process another's cross-
|
|
86
|
+
* guild channel.
|
|
87
|
+
*/
|
|
81
88
|
private reregisterClassicChannels;
|
|
82
89
|
getInstanceDir(name: string): string;
|
|
90
|
+
/** AgEnD package version (for the Settings "current version" / What's New). */
|
|
91
|
+
get currentVersion(): string;
|
|
92
|
+
/**
|
|
93
|
+
* Resolve a slash-command target in a channel. Classic channels are looked up
|
|
94
|
+
* per-bot (same-channel multi-bot); a fleet-topic instance is found via the
|
|
95
|
+
* routing engine. Used by commands that work in BOTH contexts (/ctx, /compact,
|
|
96
|
+
* /cancel). Classic-only commands (/chat, /load) must NOT use this.
|
|
97
|
+
*/
|
|
98
|
+
private resolveSlashTarget;
|
|
83
99
|
/** Get the adapter bound to an instance, falling back to primary adapter */
|
|
84
100
|
getAdapterForInstance(name: string): ChannelAdapter | null;
|
|
85
101
|
/** Get the world for an instance */
|
|
@@ -171,12 +187,12 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
171
187
|
saveFleetConfig(): void;
|
|
172
188
|
removeInstance(name: string): Promise<void>;
|
|
173
189
|
startStatuslineWatcher(name: string): void;
|
|
174
|
-
reactMessageStatus(chatId: string, messageId: string, emoji: string): void;
|
|
190
|
+
reactMessageStatus(instanceName: string, chatId: string, messageId: string, emoji: string): void;
|
|
175
191
|
private static FAILOVER_TRIGGER_PCT;
|
|
176
192
|
private static FAILOVER_RECOVER_PCT;
|
|
177
193
|
checkModelFailover(name: string, fiveHourPct: number): void;
|
|
178
194
|
toggleFleetCollab(instanceName: string): boolean;
|
|
179
|
-
notifyInstanceTopic(instanceName: string, text: string): void;
|
|
195
|
+
notifyInstanceTopic(instanceName: string, text: string, extraOpts?: import("./channel/types.js").SendOpts): void;
|
|
180
196
|
/** Send a "🛑 Cancel" button to the instance's topic/channel after delivery. */
|
|
181
197
|
/**
|
|
182
198
|
* Handle the DC `/save` slash command for both classic AND fleet-topic targets.
|
|
@@ -257,9 +273,9 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
257
273
|
/** Start a classic channel instance with lightweight config */
|
|
258
274
|
private startClassicInstance;
|
|
259
275
|
/** Handle /start slash command — register classic channel */
|
|
260
|
-
handleClassicStart(channelId: string, channelName: string, userId: string, guildId?: string): Promise<string>;
|
|
276
|
+
handleClassicStart(channelId: string, channelName: string, userId: string, guildId?: string, adapterId?: string): Promise<string>;
|
|
261
277
|
/** Handle /stop slash command — unregister classic channel */
|
|
262
|
-
handleClassicStop(channelId: string): Promise<string>;
|
|
278
|
+
handleClassicStop(channelId: string, adapterId?: string): Promise<string>;
|
|
263
279
|
stopAll(): Promise<void>;
|
|
264
280
|
/**
|
|
265
281
|
* Prune stale external sessions by re-querying each daemon for live sessions.
|