@mono-agent/agent-app 0.1.0
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 +85 -0
- package/dist/app-config.d.ts +36 -0
- package/dist/app-config.d.ts.map +1 -0
- package/dist/app-config.js +164 -0
- package/dist/app-config.js.map +1 -0
- package/dist/app.d.ts +60 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +416 -0
- package/dist/app.js.map +1 -0
- package/dist/channels.d.ts +110 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +304 -0
- package/dist/channels.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +240 -0
- package/dist/cli.js.map +1 -0
- package/dist/doctor.d.ts +24 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +181 -0
- package/dist/doctor.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +30 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +126 -0
- package/dist/init.js.map +1 -0
- package/package.json +47 -0
package/dist/app.js
ADDED
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { startOperatorConsole } from "@mono-agent/operator-console";
|
|
3
|
+
import { createConfiguredAgentResponder, createConfiguredAgentRuntime } from "@mono-agent/agent-host";
|
|
4
|
+
import { registerTraceSource } from "@mono-agent/observability";
|
|
5
|
+
import { isAppCoreConfigError, loadAppCoreConfig, MONO_AGENT_APP_FIELD_GROUPS, resolveAppArtifactDir, resolveAppTraceHeartbeatMs, resolveAppTraceRegistryDir, resolveAppTraceSourceId, resolveAppTraceSourceLabel, resolveAppTraceStaleAfterMs, } from "./app-config.js";
|
|
6
|
+
import { defaultChannelDrivers } from "./channels.js";
|
|
7
|
+
/**
|
|
8
|
+
* Starts a config-first mono-agent host in `cwd`: operator console first (so
|
|
9
|
+
* an incomplete config can be fixed in the browser), then traceability, then
|
|
10
|
+
* every configured channel in parallel. Channels with incomplete config report
|
|
11
|
+
* `waiting_for_config` instead of blocking the rest.
|
|
12
|
+
*/
|
|
13
|
+
export async function startMonoAgentApp(options = {}) {
|
|
14
|
+
const cwd = resolve(options.cwd ?? process.cwd());
|
|
15
|
+
const configPath = resolve(cwd, options.configPath ?? "mono-agent.config.json");
|
|
16
|
+
const env = options.env ?? process.env;
|
|
17
|
+
const drivers = options.drivers ?? defaultChannelDrivers();
|
|
18
|
+
const input = { env, cwd, configPath };
|
|
19
|
+
let controller;
|
|
20
|
+
let consoleServer;
|
|
21
|
+
if (options.operatorConsole !== false) {
|
|
22
|
+
const consoleFactory = options.operatorConsoleFactory ?? startOperatorConsole;
|
|
23
|
+
consoleServer = await consoleFactory({
|
|
24
|
+
configPath,
|
|
25
|
+
cwd,
|
|
26
|
+
fieldGroups: options.fieldGroups ?? MONO_AGENT_APP_FIELD_GROUPS,
|
|
27
|
+
observability: {
|
|
28
|
+
artifactDir: () => resolveAppArtifactDir(input),
|
|
29
|
+
maxRuns: 100,
|
|
30
|
+
maxEventsPerRun: 750,
|
|
31
|
+
},
|
|
32
|
+
traceability: {
|
|
33
|
+
registryDir: () => resolveAppTraceRegistryDir(input),
|
|
34
|
+
staleAfterMs: () => resolveAppTraceStaleAfterMs(input),
|
|
35
|
+
maxRuns: 100,
|
|
36
|
+
maxEventsPerRun: 750,
|
|
37
|
+
},
|
|
38
|
+
applyConfigWrite: async () => {
|
|
39
|
+
if (controller === undefined) {
|
|
40
|
+
return {
|
|
41
|
+
kind: "failed",
|
|
42
|
+
message: "Mono agent app lifecycle is not ready to apply config changes.",
|
|
43
|
+
transports: [],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return await controller.applyConfigChange("operator-console-write");
|
|
47
|
+
},
|
|
48
|
+
...(options.operatorConsolePort === undefined ? {} : { port: options.operatorConsolePort }),
|
|
49
|
+
log: (event) => {
|
|
50
|
+
logOperatorConsoleEvent(options.logger, event);
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
controller = new MonoAgentAppController({
|
|
55
|
+
consoleServer,
|
|
56
|
+
cwd,
|
|
57
|
+
configPath,
|
|
58
|
+
env,
|
|
59
|
+
drivers,
|
|
60
|
+
...(options.logger === undefined ? {} : { logger: options.logger }),
|
|
61
|
+
...(options.runtime === undefined ? {} : { runtime: options.runtime }),
|
|
62
|
+
...(options.traceDefaults === undefined ? {} : { traceDefaults: options.traceDefaults }),
|
|
63
|
+
});
|
|
64
|
+
await controller.startTraceability("startup");
|
|
65
|
+
await Promise.all(drivers.map((driver) => controller?.startChannelIfConfigured(driver.id, "startup")));
|
|
66
|
+
await controller.refreshTraceSource("startup-complete");
|
|
67
|
+
return controller;
|
|
68
|
+
}
|
|
69
|
+
class MonoAgentAppController {
|
|
70
|
+
operatorConsole;
|
|
71
|
+
configPath;
|
|
72
|
+
consoleServer;
|
|
73
|
+
cwd;
|
|
74
|
+
env;
|
|
75
|
+
drivers;
|
|
76
|
+
driversById;
|
|
77
|
+
logger;
|
|
78
|
+
runtime;
|
|
79
|
+
traceDefaults;
|
|
80
|
+
activeRuntimes = [];
|
|
81
|
+
statuses = new Map();
|
|
82
|
+
running = new Map();
|
|
83
|
+
startsInFlight = new Map();
|
|
84
|
+
traceabilityStatusValue = {
|
|
85
|
+
kind: "disabled",
|
|
86
|
+
reason: "Traceability has not started yet.",
|
|
87
|
+
};
|
|
88
|
+
traceSource;
|
|
89
|
+
configApplyTail = Promise.resolve();
|
|
90
|
+
stopped = false;
|
|
91
|
+
constructor(input) {
|
|
92
|
+
this.consoleServer = input.consoleServer;
|
|
93
|
+
this.cwd = input.cwd;
|
|
94
|
+
this.configPath = input.configPath;
|
|
95
|
+
this.env = input.env;
|
|
96
|
+
this.drivers = input.drivers;
|
|
97
|
+
this.driversById = new Map(input.drivers.map((driver) => [driver.id, driver]));
|
|
98
|
+
this.logger = input.logger;
|
|
99
|
+
this.runtime = input.runtime;
|
|
100
|
+
this.traceDefaults = input.traceDefaults;
|
|
101
|
+
for (const driver of input.drivers) {
|
|
102
|
+
this.statuses.set(driver.id, {
|
|
103
|
+
kind: "waiting_for_config",
|
|
104
|
+
reason: `${driver.label} has not been configured yet.`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
this.operatorConsole = input.consoleServer === undefined
|
|
108
|
+
? undefined
|
|
109
|
+
: {
|
|
110
|
+
url: input.consoleServer.url,
|
|
111
|
+
appUrl: `${input.consoleServer.url}/?t=${input.consoleServer.token}`,
|
|
112
|
+
token: input.consoleServer.token,
|
|
113
|
+
configPath: input.configPath,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
get traceabilityStatus() {
|
|
117
|
+
return this.traceabilityStatusValue;
|
|
118
|
+
}
|
|
119
|
+
channelStatus(id) {
|
|
120
|
+
const status = this.statuses.get(id);
|
|
121
|
+
if (status === undefined) {
|
|
122
|
+
return { kind: "disabled", reason: `Channel ${id} is not registered with this app.` };
|
|
123
|
+
}
|
|
124
|
+
return status;
|
|
125
|
+
}
|
|
126
|
+
channelStatuses() {
|
|
127
|
+
return new Map(this.statuses);
|
|
128
|
+
}
|
|
129
|
+
async applyConfigChange(reason) {
|
|
130
|
+
const run = async () => {
|
|
131
|
+
if (this.stopped) {
|
|
132
|
+
return {
|
|
133
|
+
kind: "failed",
|
|
134
|
+
message: "Mono agent app has already stopped.",
|
|
135
|
+
transports: [],
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
for (const driver of this.drivers) {
|
|
139
|
+
await this.stopChannel(driver.id, `${reason}:reload`);
|
|
140
|
+
}
|
|
141
|
+
await this.stopTraceSource(`${reason}:reload`);
|
|
142
|
+
await this.startTraceability(reason);
|
|
143
|
+
await Promise.all(this.drivers.map((driver) => this.startChannelIfConfigured(driver.id, reason)));
|
|
144
|
+
await this.refreshTraceSource(`${reason}:complete`);
|
|
145
|
+
return this.applyResult();
|
|
146
|
+
};
|
|
147
|
+
const next = this.configApplyTail.then(run, run);
|
|
148
|
+
this.configApplyTail = next.then(() => undefined, () => undefined);
|
|
149
|
+
return await next;
|
|
150
|
+
}
|
|
151
|
+
async startChannelIfConfigured(id, reason) {
|
|
152
|
+
const driver = this.driversById.get(id);
|
|
153
|
+
if (driver === undefined || this.stopped) {
|
|
154
|
+
return this.channelStatus(id);
|
|
155
|
+
}
|
|
156
|
+
if (this.running.has(id)) {
|
|
157
|
+
if (reason === "operator-console-write") {
|
|
158
|
+
this.logger?.info?.(`${driver.label} is already running; restart the app to apply later config changes.`, {
|
|
159
|
+
status: "running",
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
await this.refreshTraceSource(reason);
|
|
163
|
+
return this.channelStatus(id);
|
|
164
|
+
}
|
|
165
|
+
const inFlight = this.startsInFlight.get(id);
|
|
166
|
+
if (inFlight !== undefined) {
|
|
167
|
+
return await inFlight;
|
|
168
|
+
}
|
|
169
|
+
const start = this.startChannel(driver, reason).finally(() => {
|
|
170
|
+
this.startsInFlight.delete(id);
|
|
171
|
+
});
|
|
172
|
+
this.startsInFlight.set(id, start);
|
|
173
|
+
const status = await start;
|
|
174
|
+
await this.refreshTraceSource(reason);
|
|
175
|
+
return status;
|
|
176
|
+
}
|
|
177
|
+
async startTraceability(reason) {
|
|
178
|
+
if (this.stopped) {
|
|
179
|
+
return this.traceabilityStatusValue;
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
const input = { env: this.env, cwd: this.cwd, configPath: this.configPath };
|
|
183
|
+
const [registryDir, artifactDir, sourceId, label, heartbeatMs] = await Promise.all([
|
|
184
|
+
resolveAppTraceRegistryDir(input),
|
|
185
|
+
resolveAppArtifactDir(input),
|
|
186
|
+
resolveAppTraceSourceId(input, this.traceDefaults),
|
|
187
|
+
resolveAppTraceSourceLabel(input, this.traceDefaults),
|
|
188
|
+
resolveAppTraceHeartbeatMs(input),
|
|
189
|
+
]);
|
|
190
|
+
this.traceSource = await registerTraceSource({
|
|
191
|
+
registryDir,
|
|
192
|
+
sourceId,
|
|
193
|
+
label,
|
|
194
|
+
artifactDir,
|
|
195
|
+
pid: process.pid,
|
|
196
|
+
transports: this.activeTransports(),
|
|
197
|
+
configPath: this.configPath,
|
|
198
|
+
metadata: this.traceMetadata(reason),
|
|
199
|
+
heartbeatMs,
|
|
200
|
+
});
|
|
201
|
+
this.traceabilityStatusValue = { kind: "running", sourceId, registryDir, artifactDir };
|
|
202
|
+
this.logger?.info?.("Traceability source registered.", { reason, sourceId, registryDir, artifactDir });
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
const failure = reasonOf(error);
|
|
206
|
+
this.traceabilityStatusValue = { kind: "failed", reason: failure };
|
|
207
|
+
this.logger?.error?.("Traceability source registration failed.", { reason: failure });
|
|
208
|
+
}
|
|
209
|
+
return this.traceabilityStatusValue;
|
|
210
|
+
}
|
|
211
|
+
async refreshTraceSource(reason) {
|
|
212
|
+
if (this.traceSource === undefined) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
await this.traceSource.update({
|
|
217
|
+
transports: this.activeTransports(),
|
|
218
|
+
metadata: this.traceMetadata(reason),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
this.logger?.warn?.("Traceability source update failed.", { reason: reasonOf(error) });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async stop() {
|
|
226
|
+
if (this.stopped) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
this.stopped = true;
|
|
230
|
+
for (const driver of this.drivers) {
|
|
231
|
+
await this.stopChannel(driver.id, "stop");
|
|
232
|
+
}
|
|
233
|
+
await this.stopTraceSource("stop");
|
|
234
|
+
await this.consoleServer?.stop();
|
|
235
|
+
for (const runtime of this.activeRuntimes.splice(0)) {
|
|
236
|
+
await runtime.disposeAllSessions?.().catch(() => undefined);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
async startChannel(driver, reason) {
|
|
240
|
+
const input = { env: this.env, cwd: this.cwd, configPath: this.configPath };
|
|
241
|
+
let config;
|
|
242
|
+
try {
|
|
243
|
+
config = await driver.loadConfig(input);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
if (driver.isConfigError(error)) {
|
|
247
|
+
return this.setStatus(driver.id, { kind: "waiting_for_config", reason: reasonOf(error) });
|
|
248
|
+
}
|
|
249
|
+
throw error;
|
|
250
|
+
}
|
|
251
|
+
const disabledReason = driver.disabledReason?.(config);
|
|
252
|
+
if (disabledReason !== undefined) {
|
|
253
|
+
return this.setStatus(driver.id, { kind: "disabled", reason: disabledReason });
|
|
254
|
+
}
|
|
255
|
+
const waitingReason = driver.waitingReason?.(config);
|
|
256
|
+
if (waitingReason !== undefined) {
|
|
257
|
+
return this.setStatus(driver.id, { kind: "waiting_for_config", reason: waitingReason });
|
|
258
|
+
}
|
|
259
|
+
let coreConfig;
|
|
260
|
+
try {
|
|
261
|
+
coreConfig = await loadAppCoreConfig(input);
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
if (isAppCoreConfigError(error)) {
|
|
265
|
+
this.logger?.info?.("Waiting for a valid agent config.", { reason: error.message });
|
|
266
|
+
return this.setStatus(driver.id, { kind: "waiting_for_config", reason: error.message });
|
|
267
|
+
}
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
const responder = this.buildResponder(coreConfig);
|
|
272
|
+
const runningChannel = await driver.start({
|
|
273
|
+
config,
|
|
274
|
+
coreConfig,
|
|
275
|
+
responder,
|
|
276
|
+
cwd: this.cwd,
|
|
277
|
+
...(this.logger === undefined ? {} : { logger: this.logger }),
|
|
278
|
+
onFailure: (failureReason) => {
|
|
279
|
+
this.running.delete(driver.id);
|
|
280
|
+
this.setStatus(driver.id, { kind: "failed", reason: failureReason });
|
|
281
|
+
this.logger?.error?.(`${driver.label} channel stopped with an error.`, { reason: failureReason });
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
this.running.set(driver.id, runningChannel);
|
|
285
|
+
const status = this.setStatus(driver.id, { kind: "running", summary: runningChannel.summary });
|
|
286
|
+
this.logger?.info?.(`${driver.label} channel is running.`, { reason, ...runningChannel.summary });
|
|
287
|
+
return status;
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
const failure = reasonOf(error);
|
|
291
|
+
this.logger?.error?.(`${driver.label} channel failed to start.`, { reason: failure });
|
|
292
|
+
return this.setStatus(driver.id, { kind: "failed", reason: failure });
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
async stopChannel(id, reason) {
|
|
296
|
+
const driver = this.driversById.get(id);
|
|
297
|
+
const runningChannel = this.running.get(id);
|
|
298
|
+
if (driver === undefined || runningChannel === undefined) {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
this.running.delete(id);
|
|
302
|
+
await runningChannel.stop().catch((error) => {
|
|
303
|
+
this.logger?.warn?.(`${driver.label} channel did not stop cleanly.`, { reason, error: reasonOf(error) });
|
|
304
|
+
});
|
|
305
|
+
if (!this.stopped) {
|
|
306
|
+
this.setStatus(id, {
|
|
307
|
+
kind: "waiting_for_config",
|
|
308
|
+
reason: `${driver.label} stopped while applying config.`,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
buildResponder(coreConfig) {
|
|
313
|
+
const runtime = this.runtime ?? createConfiguredAgentRuntime(coreConfig);
|
|
314
|
+
if (!this.activeRuntimes.includes(runtime)) {
|
|
315
|
+
this.activeRuntimes.push(runtime);
|
|
316
|
+
}
|
|
317
|
+
return createConfiguredAgentResponder({ config: coreConfig, runtime });
|
|
318
|
+
}
|
|
319
|
+
setStatus(id, status) {
|
|
320
|
+
this.statuses.set(id, status);
|
|
321
|
+
return status;
|
|
322
|
+
}
|
|
323
|
+
applyResult() {
|
|
324
|
+
const transports = this.activeTransports();
|
|
325
|
+
const statuses = [...this.statuses.values()];
|
|
326
|
+
const failedChannel = statuses.find((status) => status.kind === "failed");
|
|
327
|
+
const failure = failedChannel?.kind === "failed"
|
|
328
|
+
? failedChannel.reason
|
|
329
|
+
: this.traceabilityStatusValue.kind === "failed"
|
|
330
|
+
? this.traceabilityStatusValue.reason
|
|
331
|
+
: undefined;
|
|
332
|
+
if (failure !== undefined) {
|
|
333
|
+
return {
|
|
334
|
+
kind: "failed",
|
|
335
|
+
message: `Saved config, but live apply failed: ${failure}`,
|
|
336
|
+
transports,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
const hasRunningChannel = statuses.some((status) => status.kind === "running");
|
|
340
|
+
if (!hasRunningChannel && statuses.some((status) => status.kind === "waiting_for_config")) {
|
|
341
|
+
return {
|
|
342
|
+
kind: "waiting_for_config",
|
|
343
|
+
message: "Saved config, but no agent channel is running yet.",
|
|
344
|
+
transports,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
kind: "applied",
|
|
349
|
+
message: `Saved config and reloaded ${transports.join(", ")}.`,
|
|
350
|
+
transports,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
async stopTraceSource(reason) {
|
|
354
|
+
const traceSource = this.traceSource;
|
|
355
|
+
if (traceSource === undefined) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
this.traceSource = undefined;
|
|
359
|
+
await traceSource.stop({
|
|
360
|
+
metadata: this.traceMetadata(reason),
|
|
361
|
+
transports: this.activeTransports(),
|
|
362
|
+
}).catch((error) => {
|
|
363
|
+
this.logger?.warn?.("Traceability source stop update failed.", { reason: reasonOf(error) });
|
|
364
|
+
});
|
|
365
|
+
if (!this.stopped) {
|
|
366
|
+
this.traceabilityStatusValue = { kind: "disabled", reason: "Traceability source stopped while applying config." };
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
activeTransports() {
|
|
370
|
+
const transports = [];
|
|
371
|
+
if (this.consoleServer !== undefined) {
|
|
372
|
+
transports.push("operator-console");
|
|
373
|
+
}
|
|
374
|
+
for (const driver of this.drivers) {
|
|
375
|
+
if (this.statuses.get(driver.id)?.kind === "running") {
|
|
376
|
+
transports.push(driver.id);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return transports;
|
|
380
|
+
}
|
|
381
|
+
traceMetadata(reason) {
|
|
382
|
+
const channels = {};
|
|
383
|
+
for (const driver of this.drivers) {
|
|
384
|
+
const status = this.statuses.get(driver.id);
|
|
385
|
+
if (status === undefined) {
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
channels[driver.id] = status.kind === "running"
|
|
389
|
+
? { kind: "running", ...status.summary }
|
|
390
|
+
: { kind: status.kind, reason: status.reason };
|
|
391
|
+
}
|
|
392
|
+
return {
|
|
393
|
+
reason,
|
|
394
|
+
...(this.operatorConsole === undefined
|
|
395
|
+
? {}
|
|
396
|
+
: {
|
|
397
|
+
operatorConsole: {
|
|
398
|
+
url: this.operatorConsole.url,
|
|
399
|
+
configPath: this.operatorConsole.configPath,
|
|
400
|
+
},
|
|
401
|
+
}),
|
|
402
|
+
channels,
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
function logOperatorConsoleEvent(logger, event) {
|
|
407
|
+
if (event.kind === "validation_failed" || event.kind === "unauthorized") {
|
|
408
|
+
logger?.warn?.("Operator Console event.", { event });
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
logger?.debug?.("Operator Console event.", { event });
|
|
412
|
+
}
|
|
413
|
+
function reasonOf(error) {
|
|
414
|
+
return error instanceof Error ? error.message : String(error);
|
|
415
|
+
}
|
|
416
|
+
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { AgentResponder } from "@mono-agent/agent-contracts";
|
|
2
|
+
import type { MonoAgentConfig } from "@mono-agent/config";
|
|
3
|
+
import type { A2AAdapterConfig, A2AProviderOptions, A2AProviderStartResult } from "@mono-agent/a2a-adapter";
|
|
4
|
+
import type { CronAdapterConfig, CronAdapterOptions, CronAdapterStartResult } from "@mono-agent/cron-adapter";
|
|
5
|
+
import type { OpenAIApiAdapterConfig, OpenAIApiAdapterOptions, OpenAIApiAdapterStartResult } from "@mono-agent/openai-api-adapter";
|
|
6
|
+
import type { SlackAdapterConfig, SlackAdapterStartOptions, SlackAdapterStartResult } from "@mono-agent/slack-adapter";
|
|
7
|
+
import type { TelegramAdapterConfig, TelegramBotApi, TelegramLongPollerOptions, TelegramLongPollerStartOptions } from "@mono-agent/telegram-adapter";
|
|
8
|
+
import type { WebhookAdapterConfig, WebhookAdapterOptions, WebhookAdapterStartResult } from "@mono-agent/webhook-adapter";
|
|
9
|
+
import type { StartWhatsAppAdapterOptions, WhatsAppAdapterConfig, WhatsAppAdapterStartResult, WhatsAppSocketFactory } from "@mono-agent/whatsapp-adapter";
|
|
10
|
+
import type { MonoAgentAppConfigInput } from "./app-config.js";
|
|
11
|
+
export type ChannelId = "telegram" | "slack" | "a2a" | "webhook" | "openai-api" | "cron" | "whatsapp";
|
|
12
|
+
export interface MonoAgentAppLogger {
|
|
13
|
+
debug?(message: string, metadata?: Record<string, unknown>): void;
|
|
14
|
+
info?(message: string, metadata?: Record<string, unknown>): void;
|
|
15
|
+
warn?(message: string, metadata?: Record<string, unknown>): void;
|
|
16
|
+
error?(message: string, metadata?: Record<string, unknown>): void;
|
|
17
|
+
}
|
|
18
|
+
export type ChannelStatus = {
|
|
19
|
+
readonly kind: "disabled";
|
|
20
|
+
readonly reason: string;
|
|
21
|
+
} | {
|
|
22
|
+
readonly kind: "waiting_for_config";
|
|
23
|
+
readonly reason: string;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: "running";
|
|
26
|
+
readonly summary: Record<string, unknown>;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: "failed";
|
|
29
|
+
readonly reason: string;
|
|
30
|
+
};
|
|
31
|
+
export interface RunningChannel {
|
|
32
|
+
/** Channel-specific connection facts (invoke URL, agent card URL, job count). */
|
|
33
|
+
readonly summary: Record<string, unknown>;
|
|
34
|
+
stop(): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export interface ChannelStartInput<TConfig> {
|
|
37
|
+
readonly config: TConfig;
|
|
38
|
+
readonly coreConfig: MonoAgentConfig;
|
|
39
|
+
readonly responder: AgentResponder;
|
|
40
|
+
readonly cwd: string;
|
|
41
|
+
readonly logger?: MonoAgentAppLogger;
|
|
42
|
+
/** Reports a transport that died after a successful start (e.g. polling loop). */
|
|
43
|
+
readonly onFailure: (reason: string) => void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* One communication channel the app can run from config. Drivers stay thin:
|
|
47
|
+
* they reuse the adapter package's config loader and start function and add
|
|
48
|
+
* only the wiring an app host previously copied by hand.
|
|
49
|
+
*/
|
|
50
|
+
export interface ChannelDriver<TConfig = unknown> {
|
|
51
|
+
readonly id: ChannelId;
|
|
52
|
+
readonly label: string;
|
|
53
|
+
loadConfig(input: MonoAgentAppConfigInput): Promise<TConfig>;
|
|
54
|
+
/** True for the adapter's own typed config errors (incomplete config → waiting). */
|
|
55
|
+
isConfigError(error: unknown): boolean;
|
|
56
|
+
/** Reason the channel is explicitly disabled by its loaded config. */
|
|
57
|
+
disabledReason?(config: TConfig): string | undefined;
|
|
58
|
+
/** Reason a loaded, enabled config still cannot start (missing sub-section). */
|
|
59
|
+
waitingReason?(config: TConfig): string | undefined;
|
|
60
|
+
start(input: ChannelStartInput<TConfig>): Promise<RunningChannel>;
|
|
61
|
+
}
|
|
62
|
+
export interface TelegramChannelOverrides {
|
|
63
|
+
readonly api?: TelegramBotApi;
|
|
64
|
+
readonly pollerFactory?: (options: TelegramLongPollerOptions) => TelegramPollerLike;
|
|
65
|
+
}
|
|
66
|
+
export interface TelegramPollerLike {
|
|
67
|
+
start(options?: TelegramLongPollerStartOptions): Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
export declare function createTelegramChannelDriver(overrides?: TelegramChannelOverrides): ChannelDriver<TelegramAdapterConfig>;
|
|
70
|
+
export interface SlackChannelOverrides {
|
|
71
|
+
readonly createApi?: SlackAdapterStartOptions["createApi"];
|
|
72
|
+
readonly webSocketFactory?: SlackAdapterStartOptions["webSocketFactory"];
|
|
73
|
+
readonly startAdapter?: (options: SlackAdapterStartOptions) => Promise<SlackAdapterStartResult>;
|
|
74
|
+
}
|
|
75
|
+
export declare function createSlackChannelDriver(overrides?: SlackChannelOverrides): ChannelDriver<SlackAdapterConfig>;
|
|
76
|
+
export interface A2AChannelOverrides {
|
|
77
|
+
readonly providerFactory?: (options: A2AProviderOptions) => Promise<A2AProviderStartResult>;
|
|
78
|
+
}
|
|
79
|
+
export declare function createA2AChannelDriver(overrides?: A2AChannelOverrides): ChannelDriver<A2AAdapterConfig>;
|
|
80
|
+
export interface WebhookChannelOverrides {
|
|
81
|
+
readonly adapterFactory?: (options: WebhookAdapterOptions) => Promise<WebhookAdapterStartResult>;
|
|
82
|
+
}
|
|
83
|
+
export declare function createWebhookChannelDriver(overrides?: WebhookChannelOverrides): ChannelDriver<WebhookAdapterConfig>;
|
|
84
|
+
export interface OpenAIApiChannelOverrides {
|
|
85
|
+
readonly adapterFactory?: (options: OpenAIApiAdapterOptions) => Promise<OpenAIApiAdapterStartResult>;
|
|
86
|
+
}
|
|
87
|
+
export declare function createOpenAIApiChannelDriver(overrides?: OpenAIApiChannelOverrides): ChannelDriver<OpenAIApiAdapterConfig>;
|
|
88
|
+
export interface CronChannelOverrides {
|
|
89
|
+
readonly adapterFactory?: (options: CronAdapterOptions) => CronAdapterStartResult;
|
|
90
|
+
}
|
|
91
|
+
export declare function createCronChannelDriver(overrides?: CronChannelOverrides): ChannelDriver<CronAdapterConfig>;
|
|
92
|
+
export interface WhatsAppChannelOverrides {
|
|
93
|
+
/** Baileys multi-file auth state directory. Defaults to .mono-agent/whatsapp-auth. */
|
|
94
|
+
readonly authDir?: string;
|
|
95
|
+
readonly socketFactory?: WhatsAppSocketFactory;
|
|
96
|
+
readonly startAdapter?: (options: StartWhatsAppAdapterOptions) => Promise<WhatsAppAdapterStartResult>;
|
|
97
|
+
}
|
|
98
|
+
export declare function createWhatsAppChannelDriver(overrides?: WhatsAppChannelOverrides): ChannelDriver<WhatsAppAdapterConfig>;
|
|
99
|
+
export interface ChannelDriverOverrides {
|
|
100
|
+
readonly telegram?: TelegramChannelOverrides;
|
|
101
|
+
readonly slack?: SlackChannelOverrides;
|
|
102
|
+
readonly a2a?: A2AChannelOverrides;
|
|
103
|
+
readonly webhook?: WebhookChannelOverrides;
|
|
104
|
+
readonly openaiApi?: OpenAIApiChannelOverrides;
|
|
105
|
+
readonly cron?: CronChannelOverrides;
|
|
106
|
+
readonly whatsapp?: WhatsAppChannelOverrides;
|
|
107
|
+
}
|
|
108
|
+
/** Every channel the app can drive, in startup/status display order. */
|
|
109
|
+
export declare function defaultChannelDrivers(overrides?: ChannelDriverOverrides): readonly ChannelDriver[];
|
|
110
|
+
//# sourceMappingURL=channels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|