@songsid/agend 2.0.11-beta.8 → 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.
Files changed (46) hide show
  1. package/dist/channel/adapters/discord.js +21 -16
  2. package/dist/channel/adapters/discord.js.map +1 -1
  3. package/dist/channel/adapters/telegram.js +1 -0
  4. package/dist/channel/adapters/telegram.js.map +1 -1
  5. package/dist/channel/mcp-tools.js +3 -0
  6. package/dist/channel/mcp-tools.js.map +1 -1
  7. package/dist/channel/tool-router.js +29 -2
  8. package/dist/channel/tool-router.js.map +1 -1
  9. package/dist/channel/types.d.ts +2 -0
  10. package/dist/classic-channel-manager.d.ts +59 -12
  11. package/dist/classic-channel-manager.js +121 -30
  12. package/dist/classic-channel-manager.js.map +1 -1
  13. package/dist/cli.js +70 -21
  14. package/dist/cli.js.map +1 -1
  15. package/dist/config-validator.d.ts +20 -0
  16. package/dist/config-validator.js +154 -0
  17. package/dist/config-validator.js.map +1 -0
  18. package/dist/fleet-manager.d.ts +21 -5
  19. package/dist/fleet-manager.js +412 -258
  20. package/dist/fleet-manager.js.map +1 -1
  21. package/dist/instance-lifecycle.d.ts +1 -1
  22. package/dist/instance-lifecycle.js +12 -11
  23. package/dist/instance-lifecycle.js.map +1 -1
  24. package/dist/locale.d.ts +19 -0
  25. package/dist/locale.js +179 -0
  26. package/dist/locale.js.map +1 -0
  27. package/dist/outbound-schemas.d.ts +1 -0
  28. package/dist/outbound-schemas.js +1 -0
  29. package/dist/outbound-schemas.js.map +1 -1
  30. package/dist/quickstart.js +222 -9
  31. package/dist/quickstart.js.map +1 -1
  32. package/dist/scheduler/scheduler.js +8 -2
  33. package/dist/scheduler/scheduler.js.map +1 -1
  34. package/dist/settings-api.d.ts +33 -0
  35. package/dist/settings-api.js +283 -0
  36. package/dist/settings-api.js.map +1 -0
  37. package/dist/topic-commands.d.ts +14 -0
  38. package/dist/topic-commands.js +78 -15
  39. package/dist/topic-commands.js.map +1 -1
  40. package/dist/types.d.ts +2 -0
  41. package/dist/ui/settings.html +617 -0
  42. package/dist/ui/view.html +271 -43
  43. package/dist/view-api.d.ts +9 -0
  44. package/dist/view-api.js +101 -41
  45. package/dist/view-api.js.map +1 -1
  46. 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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"}
@@ -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
- /** Re-register classic channels after routing rebuild (rebuild clears the table) */
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.