@agentconnect.md/daemon 1.0.0-rc.259 → 1.0.0-rc.260
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/{acp-host-hnOn2UR9.js → acp-host-DRbb-vvg.js} +2 -2
- package/dist/{acp-host-hnOn2UR9.js.map → acp-host-DRbb-vvg.js.map} +1 -1
- package/dist/{agent-list-7JSTLtcu.js → agent-list-csC2r5tB.js} +2 -2
- package/dist/{agent-list-7JSTLtcu.js.map → agent-list-csC2r5tB.js.map} +1 -1
- package/dist/{chat-DJDh08Id.js → chat-BxQhnDKg.js} +3 -3
- package/dist/{chat-DJDh08Id.js.map → chat-BxQhnDKg.js.map} +1 -1
- package/dist/index.js +4 -4
- package/dist/{load-agents-DspcHKeP.js → load-agents-CW9Q6eYo.js} +282 -17
- package/dist/load-agents-CW9Q6eYo.js.map +1 -0
- package/dist/{login-BDX6YKlb.js → login-CiTSpQlT.js} +3 -3
- package/dist/{login-BDX6YKlb.js.map → login-CiTSpQlT.js.map} +1 -1
- package/dist/{run-foreground-FYqgRmz9.js → run-foreground-BqNCGDXc.js} +191 -39
- package/dist/{run-foreground-FYqgRmz9.js.map → run-foreground-BqNCGDXc.js.map} +1 -1
- package/dist/run-foreground-C0awGplP.js +2 -0
- package/package.json +1 -1
- package/dist/load-agents-DspcHKeP.js.map +0 -1
- package/dist/run-foreground-CD5jrAvS.js +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as loadConfig, t as discoverAgents } from "./load-agents-
|
|
1
|
+
import { o as loadConfig, t as discoverAgents } from "./load-agents-CW9Q6eYo.js";
|
|
2
2
|
//#region src/cli/agent-list.ts
|
|
3
3
|
async function runAgentList(opts) {
|
|
4
4
|
const out = opts.out ?? process.stdout;
|
|
@@ -18,4 +18,4 @@ async function runAgentList(opts) {
|
|
|
18
18
|
//#endregion
|
|
19
19
|
export { runAgentList };
|
|
20
20
|
|
|
21
|
-
//# sourceMappingURL=agent-list-
|
|
21
|
+
//# sourceMappingURL=agent-list-csC2r5tB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-list-
|
|
1
|
+
{"version":3,"file":"agent-list-csC2r5tB.js","names":[],"sources":["../src/cli/agent-list.ts"],"sourcesContent":["import { loadConfig } from '../config/load-config.js'\nimport { discoverAgents } from '../agents/load-agents.js'\n\nexport interface RunAgentListOpts {\n agentsDir?: string\n configPath?: string\n root?: string\n out?: NodeJS.WritableStream\n}\n\n// Read-only view of the local agent directory. Mutating agents (add/remove/\n// enable/disable) is intentionally not a CLI command — agent business config is\n// owned by the Control Plane (agent/upsert + register/ok roster, see\n// cp/cp-agent-registry.ts) or by hand-editing agent.json; the daemon only\n// reconciles what it finds on disk. This lists what that discovery sees.\nexport async function runAgentList(opts: RunAgentListOpts): Promise<void> {\n const out = opts.out ?? process.stdout\n const cfg = loadConfig({\n root: opts.root,\n configPath: opts.configPath,\n optional: true,\n overrides: { agentsDir: opts.agentsDir }\n })\n const agentsDir = cfg.agentsDir!\n const discovered = discoverAgents(agentsDir)\n if (discovered.length === 0) {\n out.write(`no agents found under ${agentsDir}\\n`)\n return\n }\n for (const { agent, dir } of discovered) {\n out.write(`${agent.id}\\t${agent.status}\\t${agent.runtime}\\t${agent.name}\\t${dir}\\n`)\n }\n}\n"],"mappings":";;AAeA,eAAsB,aAAa,MAAuC;CACxE,MAAM,MAAM,KAAK,OAAO,QAAQ;CAOhC,MAAM,YANM,WAAW;EACrB,MAAM,KAAK;EACX,YAAY,KAAK;EACjB,UAAU;EACV,WAAW,EAAE,WAAW,KAAK,UAAU;CACzC,CACoB,CAAC,CAAC;CACtB,MAAM,aAAa,eAAe,SAAS;CAC3C,IAAI,WAAW,WAAW,GAAG;EAC3B,IAAI,MAAM,yBAAyB,UAAU,GAAG;EAChD;CACF;CACA,KAAK,MAAM,EAAE,OAAO,SAAS,YAC3B,IAAI,MAAM,GAAG,MAAM,GAAG,IAAI,MAAM,OAAO,IAAI,MAAM,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,GAAG;AAEvF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as agentChildEnv, i as selectAgent, o as loadConfig } from "./load-agents-
|
|
1
|
+
import { a as agentChildEnv, i as selectAgent, o as loadConfig } from "./load-agents-CW9Q6eYo.js";
|
|
2
2
|
import { l as resolveRoot } from "./paths-DEcUO8lC.js";
|
|
3
|
-
import { S as resolveRuntimes, d as memoryProviderFor, i as prepareWorkspace, t as AcpHost } from "./acp-host-
|
|
3
|
+
import { S as resolveRuntimes, d as memoryProviderFor, i as prepareWorkspace, t as AcpHost } from "./acp-host-DRbb-vvg.js";
|
|
4
4
|
import { createInterface } from "node:readline";
|
|
5
5
|
//#region src/cli/chat.ts
|
|
6
6
|
function renderUpdate(out) {
|
|
@@ -79,4 +79,4 @@ async function runChat(opts) {
|
|
|
79
79
|
//#endregion
|
|
80
80
|
export { renderUpdate, runChat };
|
|
81
81
|
|
|
82
|
-
//# sourceMappingURL=chat-
|
|
82
|
+
//# sourceMappingURL=chat-BxQhnDKg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-
|
|
1
|
+
{"version":3,"file":"chat-BxQhnDKg.js","names":[],"sources":["../src/cli/chat.ts"],"sourcesContent":["import { createInterface } from 'node:readline'\nimport type { ContentBlock, SessionUpdate } from '@agentclientprotocol/sdk'\nimport { loadConfig } from '../config/load-config.js'\nimport { resolveRuntimes } from '../runtimes/registry.js'\nimport { selectAgent } from '../agents/load-agents.js'\nimport { agentChildEnv } from '../agents/agent-env.js'\nimport { memoryProviderFor } from '../agents/memory-provider.js'\nimport { prepareWorkspace } from '../workspace/workspace-manager.js'\nimport { AcpHost } from '../acp/acp-host.js'\nimport { resolveRoot } from '../paths.js'\n\nexport function renderUpdate(out: NodeJS.WritableStream) {\n return (_sessionId: string, update: SessionUpdate): void => {\n if (update.sessionUpdate === 'agent_message_chunk' && update.content.type === 'text') {\n out.write(update.content.text)\n } else if (update.sessionUpdate === 'tool_call') {\n const title = ('title' in update && update.title) || update.toolCallId || 'tool'\n out.write(`\\n[tool] ${title}\\n`)\n }\n }\n}\n\nexport interface RunChatOpts {\n agentsDir?: string\n agentName?: string\n message?: string\n configPath?: string\n root?: string\n out?: NodeJS.WritableStream\n input?: NodeJS.ReadableStream\n}\n\nexport async function runChat(opts: RunChatOpts): Promise<void> {\n const out = opts.out ?? process.stdout\n const root = resolveRoot(opts.root)\n const cfg = loadConfig({\n root: opts.root,\n configPath: opts.configPath,\n optional: true,\n overrides: { agentsDir: opts.agentsDir }\n })\n const agent = selectAgent(cfg.agentsDir!, opts.agentName)\n\n const runtimes = await resolveRuntimes(cfg, root, { neededRuntimes: [agent.runtime], mode: 'cache-first' })\n const runtime = runtimes[agent.runtime]\n if (!runtime) {\n const available = Object.keys(runtimes).sort().join(', ') || '(none)'\n throw new Error(`runtime \"${agent.runtime}\" not found. Available: ${available}`)\n }\n\n const host = new AcpHost(runtime, {\n onUpdate: renderUpdate(out),\n // Memory-backend env for parity with the daemon (managed disables the runtime's\n // own memory; native redirects it under the agent root).\n env: { ...agentChildEnv(agent), ...memoryProviderFor(agent, runtime).runtimeEnv() },\n configPrefs: {\n model: agent.runtimeOverrides?.model,\n permissionMode: agent.permissionMode,\n reasoningEffort: agent.reasoningEffort,\n fastMode: agent.fastMode\n }\n })\n await host.start()\n try {\n const cwd = await prepareWorkspace(agent)\n const sessionId = await host.newSession(cwd)\n\n const send = async (text: string) => {\n const blocks: ContentBlock[] = [{ type: 'text', text }]\n await host.prompt(sessionId, blocks)\n out.write('\\n')\n }\n\n if (typeof opts.message === 'string' && opts.message.length > 0) {\n await send(opts.message)\n return\n }\n\n const rl = createInterface({ input: opts.input ?? process.stdin })\n out.write(`Chatting with ${agent.name} (${agent.id}). Type .exit to quit.\\n> `)\n try {\n for await (const line of rl) {\n const text = line.trim()\n if (text === '.exit' || text === '.quit') break\n if (text.length > 0) await send(text)\n out.write('> ')\n }\n } finally {\n rl.close()\n }\n } finally {\n await host.stop()\n }\n}\n"],"mappings":";;;;;AAWA,SAAgB,aAAa,KAA4B;CACvD,QAAQ,YAAoB,WAAgC;EAC1D,IAAI,OAAO,kBAAkB,yBAAyB,OAAO,QAAQ,SAAS,QAC5E,IAAI,MAAM,OAAO,QAAQ,IAAI;OACxB,IAAI,OAAO,kBAAkB,aAAa;GAC/C,MAAM,QAAS,WAAW,UAAU,OAAO,SAAU,OAAO,cAAc;GAC1E,IAAI,MAAM,YAAY,MAAM,GAAG;EACjC;CACF;AACF;AAYA,eAAsB,QAAQ,MAAkC;CAC9D,MAAM,MAAM,KAAK,OAAO,QAAQ;CAChC,MAAM,OAAO,YAAY,KAAK,IAAI;CAClC,MAAM,MAAM,WAAW;EACrB,MAAM,KAAK;EACX,YAAY,KAAK;EACjB,UAAU;EACV,WAAW,EAAE,WAAW,KAAK,UAAU;CACzC,CAAC;CACD,MAAM,QAAQ,YAAY,IAAI,WAAY,KAAK,SAAS;CAExD,MAAM,WAAW,MAAM,gBAAgB,KAAK,MAAM;EAAE,gBAAgB,CAAC,MAAM,OAAO;EAAG,MAAM;CAAc,CAAC;CAC1G,MAAM,UAAU,SAAS,MAAM;CAC/B,IAAI,CAAC,SAAS;EACZ,MAAM,YAAY,OAAO,KAAK,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,KAAK;EAC7D,MAAM,IAAI,MAAM,YAAY,MAAM,QAAQ,0BAA0B,WAAW;CACjF;CAEA,MAAM,OAAO,IAAI,QAAQ,SAAS;EAChC,UAAU,aAAa,GAAG;EAG1B,KAAK;GAAE,GAAG,cAAc,KAAK;GAAG,GAAG,kBAAkB,OAAO,OAAO,CAAC,CAAC,WAAW;EAAE;EAClF,aAAa;GACX,OAAO,MAAM,kBAAkB;GAC/B,gBAAgB,MAAM;GACtB,iBAAiB,MAAM;GACvB,UAAU,MAAM;EAClB;CACF,CAAC;CACD,MAAM,KAAK,MAAM;CACjB,IAAI;EACF,MAAM,MAAM,MAAM,iBAAiB,KAAK;EACxC,MAAM,YAAY,MAAM,KAAK,WAAW,GAAG;EAE3C,MAAM,OAAO,OAAO,SAAiB;GACnC,MAAM,SAAyB,CAAC;IAAE,MAAM;IAAQ;GAAK,CAAC;GACtD,MAAM,KAAK,OAAO,WAAW,MAAM;GACnC,IAAI,MAAM,IAAI;EAChB;EAEA,IAAI,OAAO,KAAK,YAAY,YAAY,KAAK,QAAQ,SAAS,GAAG;GAC/D,MAAM,KAAK,KAAK,OAAO;GACvB;EACF;EAEA,MAAM,KAAK,gBAAgB,EAAE,OAAO,KAAK,SAAS,QAAQ,MAAM,CAAC;EACjE,IAAI,MAAM,iBAAiB,MAAM,KAAK,IAAI,MAAM,GAAG,2BAA2B;EAC9E,IAAI;GACF,WAAW,MAAM,QAAQ,IAAI;IAC3B,MAAM,OAAO,KAAK,KAAK;IACvB,IAAI,SAAS,WAAW,SAAS,SAAS;IAC1C,IAAI,KAAK,SAAS,GAAG,MAAM,KAAK,IAAI;IACpC,IAAI,MAAM,IAAI;GAChB;EACF,UAAU;GACR,GAAG,MAAM;EACX;CACF,UAAU;EACR,MAAM,KAAK,KAAK;CAClB;AACF"}
|
package/dist/index.js
CHANGED
|
@@ -68492,9 +68492,9 @@ const telemetry = startDaemonOpenTelemetry({ serviceVersion: DAEMON_VERSION });
|
|
|
68492
68492
|
const [{ Command }, { fileURLToPath }, { runChat }, { runLogin }, { runForeground }, { resolveController }, { acquireSingletonLock }, { resolveRoot }] = await Promise.all([
|
|
68493
68493
|
import("./commander-B5QVEFzH.js"),
|
|
68494
68494
|
import("node:url"),
|
|
68495
|
-
import("./chat-
|
|
68496
|
-
import("./login-
|
|
68497
|
-
import("./run-foreground-
|
|
68495
|
+
import("./chat-BxQhnDKg.js"),
|
|
68496
|
+
import("./login-CiTSpQlT.js"),
|
|
68497
|
+
import("./run-foreground-C0awGplP.js"),
|
|
68498
68498
|
import("./service-6w0WKhdx.js"),
|
|
68499
68499
|
import("./lock-CA9Bm8_s.js"),
|
|
68500
68500
|
import("./paths-CcRUjFjy.js")
|
|
@@ -68652,7 +68652,7 @@ program.command("git-credential").description("Git credential helper backed by t
|
|
|
68652
68652
|
program.command("agent").description("Inspect local agent directories").command("list").description("List agents discovered under --agents-dir (id, status, runtime, name, dir)").action(async () => {
|
|
68653
68653
|
const opts = program.opts();
|
|
68654
68654
|
try {
|
|
68655
|
-
const { runAgentList } = await import("./agent-list-
|
|
68655
|
+
const { runAgentList } = await import("./agent-list-csC2r5tB.js");
|
|
68656
68656
|
await runAgentList({
|
|
68657
68657
|
agentsDir: opts.agentsDir,
|
|
68658
68658
|
configPath: opts.config,
|
|
@@ -3,6 +3,25 @@ import { l as resolveRoot, r as defaultAgentsDir, t as configPath } from "./path
|
|
|
3
3
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
|
+
//#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/compat.js
|
|
7
|
+
/** @deprecated Use the raw string literal codes instead, e.g. "invalid_type". */
|
|
8
|
+
const ZodIssueCode = {
|
|
9
|
+
invalid_type: "invalid_type",
|
|
10
|
+
too_big: "too_big",
|
|
11
|
+
too_small: "too_small",
|
|
12
|
+
invalid_format: "invalid_format",
|
|
13
|
+
not_multiple_of: "not_multiple_of",
|
|
14
|
+
unrecognized_keys: "unrecognized_keys",
|
|
15
|
+
invalid_union: "invalid_union",
|
|
16
|
+
invalid_key: "invalid_key",
|
|
17
|
+
invalid_element: "invalid_element",
|
|
18
|
+
invalid_value: "invalid_value",
|
|
19
|
+
custom: "custom"
|
|
20
|
+
};
|
|
21
|
+
/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */
|
|
22
|
+
var ZodFirstPartyTypeKind;
|
|
23
|
+
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
24
|
+
//#endregion
|
|
6
25
|
//#region ../protocol/dist/envelope.js
|
|
7
26
|
/**
|
|
8
27
|
* The protocol envelope — every frame, both directions, is wrapped in this.
|
|
@@ -389,12 +408,38 @@ const IntegrationBindRule = object({
|
|
|
389
408
|
thread: string().optional(),
|
|
390
409
|
match: BindMatch
|
|
391
410
|
});
|
|
392
|
-
/**
|
|
411
|
+
/**
|
|
412
|
+
* The Slack config a daemon receives (no signingSecret). `mode` splits the two
|
|
413
|
+
* distribution paths of shared-bot-relay.md §7.3:
|
|
414
|
+
*
|
|
415
|
+
* - `direct` (today's behaviour, the default): the daemon owns the whole bot —
|
|
416
|
+
* it opens the Socket Mode connection itself (needs `appToken`) and arbitrates
|
|
417
|
+
* inbound locally (`bindRules`). Unchanged from before shared bots existed.
|
|
418
|
+
* - `shared`: the bot's INBOUND lives on a relay (§4.1), so the daemon gets
|
|
419
|
+
* xoxb ONLY — enough to SEND (`chat.postMessage`, attachment fetch). No
|
|
420
|
+
* `appToken` (credential domaining: the daemon must not be able to subscribe
|
|
421
|
+
* the event stream) and no `bindRules` (routing is arbitrated in the relay,
|
|
422
|
+
* delivered pre-addressed). `botUserId` is optional and lazily resolved by the
|
|
423
|
+
* daemon via `auth.test` (same as direct) if the sender ever needs it.
|
|
424
|
+
*
|
|
425
|
+
* Modeled as a flat object with a defaulted discriminator (not a
|
|
426
|
+
* `discriminatedUnion`) so specs persisted before this field existed still decode
|
|
427
|
+
* as `direct`. `.superRefine` enforces the one hard per-mode requirement the union
|
|
428
|
+
* would otherwise give: direct needs the app-level token.
|
|
429
|
+
*/
|
|
393
430
|
const IntegrationSlackConfig = object({
|
|
431
|
+
mode: _enum(["direct", "shared"]).default("direct"),
|
|
394
432
|
botToken: string(),
|
|
395
|
-
appToken: string(),
|
|
433
|
+
appToken: string().optional(),
|
|
434
|
+
botUserId: string().optional(),
|
|
396
435
|
allowedUserIds: array(string()).default([]),
|
|
397
436
|
bindRules: array(IntegrationBindRule).default([])
|
|
437
|
+
}).superRefine((c, ctx) => {
|
|
438
|
+
if (c.mode === "direct" && !c.appToken) ctx.addIssue({
|
|
439
|
+
code: ZodIssueCode.custom,
|
|
440
|
+
message: "direct slack requires appToken",
|
|
441
|
+
path: ["appToken"]
|
|
442
|
+
});
|
|
398
443
|
});
|
|
399
444
|
/**
|
|
400
445
|
* The Telegram config the daemon needs to open long-polling + route (grammY).
|
|
@@ -1465,6 +1510,167 @@ function encode(frame) {
|
|
|
1465
1510
|
return JSON.stringify(frame);
|
|
1466
1511
|
}
|
|
1467
1512
|
//#endregion
|
|
1513
|
+
//#region ../protocol/dist/frames/relay-cp.js
|
|
1514
|
+
const RcAuth = object({
|
|
1515
|
+
method: _enum(["token", "apikey"]),
|
|
1516
|
+
credential: string().min(1)
|
|
1517
|
+
});
|
|
1518
|
+
const RcAuthOk = object({
|
|
1519
|
+
heartbeatSec: number().int(),
|
|
1520
|
+
serverTime: string().datetime()
|
|
1521
|
+
});
|
|
1522
|
+
const RcRegister = object({
|
|
1523
|
+
name: string().min(1),
|
|
1524
|
+
daemonUrl: string().min(1)
|
|
1525
|
+
});
|
|
1526
|
+
const RcRegistered = object({ relayId: string().uuid() });
|
|
1527
|
+
const RcHeartbeat = object({});
|
|
1528
|
+
const RcVerify = object({
|
|
1529
|
+
kind: _enum(["daemon-key", "webchat-token"]),
|
|
1530
|
+
credential: string().min(1)
|
|
1531
|
+
});
|
|
1532
|
+
const RcVerifyResult = object({
|
|
1533
|
+
ok: boolean(),
|
|
1534
|
+
reason: string().optional(),
|
|
1535
|
+
orgId: string().optional(),
|
|
1536
|
+
daemonId: string().uuid().optional(),
|
|
1537
|
+
userId: string().optional(),
|
|
1538
|
+
user: string().optional(),
|
|
1539
|
+
agentId: string().uuid().optional()
|
|
1540
|
+
});
|
|
1541
|
+
const RcHookAssign = object({
|
|
1542
|
+
hookId: string().uuid(),
|
|
1543
|
+
kind: _enum(["webhook", "github"]),
|
|
1544
|
+
agentId: string().uuid(),
|
|
1545
|
+
daemonId: string().uuid(),
|
|
1546
|
+
sessionMode: _enum([
|
|
1547
|
+
"perDelivery",
|
|
1548
|
+
"perThread",
|
|
1549
|
+
"shared"
|
|
1550
|
+
]),
|
|
1551
|
+
target: CronTarget.optional(),
|
|
1552
|
+
webhook: object({
|
|
1553
|
+
urlToken: string().min(1),
|
|
1554
|
+
hmacSecret: string().optional()
|
|
1555
|
+
}).optional(),
|
|
1556
|
+
github: object({
|
|
1557
|
+
repoId: string(),
|
|
1558
|
+
repoFullName: string(),
|
|
1559
|
+
events: array(string()),
|
|
1560
|
+
labelFilter: array(string()),
|
|
1561
|
+
mentionOnly: boolean(),
|
|
1562
|
+
installationIds: array(string())
|
|
1563
|
+
}).optional()
|
|
1564
|
+
});
|
|
1565
|
+
const RcHookRemove = object({ hookId: string().uuid() });
|
|
1566
|
+
const RcRunReport = object({
|
|
1567
|
+
hookId: string().uuid(),
|
|
1568
|
+
deliveryKey: string().min(1),
|
|
1569
|
+
firedAt: string().datetime(),
|
|
1570
|
+
agentId: string().uuid(),
|
|
1571
|
+
daemonId: string().uuid().optional(),
|
|
1572
|
+
event: string().optional(),
|
|
1573
|
+
status: _enum(["accepted", "failed"]),
|
|
1574
|
+
reason: string().optional()
|
|
1575
|
+
});
|
|
1576
|
+
const RcDaemonRevoke = object({ daemonId: string().uuid() });
|
|
1577
|
+
const SHARED_CONFIG_ACTION_ID = "ac_shared_channel_config";
|
|
1578
|
+
const AttributedRoute = object({
|
|
1579
|
+
agentId: string().uuid(),
|
|
1580
|
+
daemonId: string().uuid(),
|
|
1581
|
+
integrationId: string().uuid(),
|
|
1582
|
+
scope: object({
|
|
1583
|
+
channel: string().optional(),
|
|
1584
|
+
thread: string().optional()
|
|
1585
|
+
}).optional(),
|
|
1586
|
+
match: BindMatch
|
|
1587
|
+
});
|
|
1588
|
+
const RcBotSecrets = object({
|
|
1589
|
+
botToken: string(),
|
|
1590
|
+
appToken: string().optional()
|
|
1591
|
+
});
|
|
1592
|
+
const RcAgentDirEntry = object({
|
|
1593
|
+
agentId: string().uuid(),
|
|
1594
|
+
name: string(),
|
|
1595
|
+
daemonId: string().uuid()
|
|
1596
|
+
});
|
|
1597
|
+
/** `type` string → payload schema for the relay↔CP wire. */
|
|
1598
|
+
const RELAY_CP_SCHEMAS = {
|
|
1599
|
+
"rc/auth": RcAuth,
|
|
1600
|
+
"rc/auth/ok": RcAuthOk,
|
|
1601
|
+
"rc/register": RcRegister,
|
|
1602
|
+
"rc/registered": RcRegistered,
|
|
1603
|
+
"rc/heartbeat": RcHeartbeat,
|
|
1604
|
+
"rc/verify": RcVerify,
|
|
1605
|
+
"rc/verify/ok": RcVerifyResult,
|
|
1606
|
+
"rc/hook-assign": RcHookAssign,
|
|
1607
|
+
"rc/hook-remove": RcHookRemove,
|
|
1608
|
+
"rc/run-report": RcRunReport,
|
|
1609
|
+
"rc/daemon-revoke": RcDaemonRevoke,
|
|
1610
|
+
"rc/bot-assign": object({
|
|
1611
|
+
botId: string().uuid(),
|
|
1612
|
+
platform: _enum([
|
|
1613
|
+
"slack",
|
|
1614
|
+
"telegram",
|
|
1615
|
+
"discord"
|
|
1616
|
+
]),
|
|
1617
|
+
botUserId: string().optional(),
|
|
1618
|
+
secrets: RcBotSecrets,
|
|
1619
|
+
members: array(object({
|
|
1620
|
+
daemonId: string().uuid(),
|
|
1621
|
+
agentIds: array(string().uuid())
|
|
1622
|
+
})),
|
|
1623
|
+
agents: array(RcAgentDirEntry).default([]),
|
|
1624
|
+
routes: array(AttributedRoute),
|
|
1625
|
+
defaultAgentId: string().uuid().optional(),
|
|
1626
|
+
defaultDaemonId: string().uuid().optional()
|
|
1627
|
+
}),
|
|
1628
|
+
"rc/bot-unassign": object({ botId: string().uuid() }),
|
|
1629
|
+
"rc/routes": object({
|
|
1630
|
+
botId: string().uuid(),
|
|
1631
|
+
members: array(object({
|
|
1632
|
+
daemonId: string().uuid(),
|
|
1633
|
+
agentIds: array(string().uuid())
|
|
1634
|
+
})),
|
|
1635
|
+
agents: array(RcAgentDirEntry).default([]),
|
|
1636
|
+
routes: array(AttributedRoute),
|
|
1637
|
+
defaultAgentId: string().uuid().optional(),
|
|
1638
|
+
defaultDaemonId: string().uuid().optional()
|
|
1639
|
+
}),
|
|
1640
|
+
"rc/assign": object({
|
|
1641
|
+
botId: string().uuid(),
|
|
1642
|
+
sessionKey: string().min(1),
|
|
1643
|
+
agentId: string().uuid(),
|
|
1644
|
+
daemonId: string().uuid()
|
|
1645
|
+
}),
|
|
1646
|
+
"rc/set-channel-agent": object({
|
|
1647
|
+
botId: string().uuid(),
|
|
1648
|
+
channelId: string().min(1),
|
|
1649
|
+
agentId: string().uuid().nullable()
|
|
1650
|
+
}),
|
|
1651
|
+
error: ErrorFrame
|
|
1652
|
+
};
|
|
1653
|
+
Object.keys(RELAY_CP_SCHEMAS);
|
|
1654
|
+
discriminatedUnion("type", [
|
|
1655
|
+
frameSchema("rc/auth", RELAY_CP_SCHEMAS["rc/auth"]),
|
|
1656
|
+
frameSchema("rc/auth/ok", RELAY_CP_SCHEMAS["rc/auth/ok"]),
|
|
1657
|
+
frameSchema("rc/register", RELAY_CP_SCHEMAS["rc/register"]),
|
|
1658
|
+
frameSchema("rc/registered", RELAY_CP_SCHEMAS["rc/registered"]),
|
|
1659
|
+
frameSchema("rc/heartbeat", RELAY_CP_SCHEMAS["rc/heartbeat"]),
|
|
1660
|
+
frameSchema("rc/verify", RELAY_CP_SCHEMAS["rc/verify"]),
|
|
1661
|
+
frameSchema("rc/verify/ok", RELAY_CP_SCHEMAS["rc/verify/ok"]),
|
|
1662
|
+
frameSchema("rc/hook-assign", RELAY_CP_SCHEMAS["rc/hook-assign"]),
|
|
1663
|
+
frameSchema("rc/hook-remove", RELAY_CP_SCHEMAS["rc/hook-remove"]),
|
|
1664
|
+
frameSchema("rc/run-report", RELAY_CP_SCHEMAS["rc/run-report"]),
|
|
1665
|
+
frameSchema("rc/daemon-revoke", RELAY_CP_SCHEMAS["rc/daemon-revoke"]),
|
|
1666
|
+
frameSchema("rc/bot-assign", RELAY_CP_SCHEMAS["rc/bot-assign"]),
|
|
1667
|
+
frameSchema("rc/bot-unassign", RELAY_CP_SCHEMAS["rc/bot-unassign"]),
|
|
1668
|
+
frameSchema("rc/routes", RELAY_CP_SCHEMAS["rc/routes"]),
|
|
1669
|
+
frameSchema("rc/assign", RELAY_CP_SCHEMAS["rc/assign"]),
|
|
1670
|
+
frameSchema("rc/set-channel-agent", RELAY_CP_SCHEMAS["rc/set-channel-agent"]),
|
|
1671
|
+
frameSchema("error", RELAY_CP_SCHEMAS["error"])
|
|
1672
|
+
]);
|
|
1673
|
+
//#endregion
|
|
1468
1674
|
//#region ../protocol/dist/frames/relay-daemon.js
|
|
1469
1675
|
/**
|
|
1470
1676
|
* relay↔daemon frames (`rd/*`) — shared-bot-relay.md §7.2.
|
|
@@ -1522,24 +1728,82 @@ const RelayWebchatOp = discriminatedUnion("op", [
|
|
|
1522
1728
|
object({ op: literal("cancel") }),
|
|
1523
1729
|
object({ op: literal("close") })
|
|
1524
1730
|
]);
|
|
1525
|
-
const
|
|
1731
|
+
const RdMsgWebchat = object({
|
|
1526
1732
|
source: literal("webchat"),
|
|
1527
1733
|
agentId: string().uuid(),
|
|
1528
1734
|
sessionKey: string().min(1),
|
|
1529
1735
|
msgId: string().min(1),
|
|
1530
1736
|
chatId: string().uuid(),
|
|
1531
1737
|
payload: RelayWebchatOp
|
|
1532
|
-
})
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1738
|
+
});
|
|
1739
|
+
const WireAttachment = object({
|
|
1740
|
+
id: string(),
|
|
1741
|
+
name: string(),
|
|
1742
|
+
mimeType: string(),
|
|
1743
|
+
size: number().optional(),
|
|
1744
|
+
sourceUrl: string()
|
|
1745
|
+
});
|
|
1746
|
+
const WireNormalizedMessage = object({
|
|
1747
|
+
msgId: string(),
|
|
1748
|
+
traceId: string(),
|
|
1749
|
+
source: _enum([
|
|
1750
|
+
"user",
|
|
1751
|
+
"cron",
|
|
1752
|
+
"agent"
|
|
1753
|
+
]),
|
|
1754
|
+
platform: _enum([
|
|
1755
|
+
"slack",
|
|
1756
|
+
"telegram",
|
|
1757
|
+
"webchat",
|
|
1758
|
+
"discord"
|
|
1759
|
+
]),
|
|
1760
|
+
channel: string(),
|
|
1761
|
+
thread: string().optional(),
|
|
1762
|
+
sender: object({
|
|
1763
|
+
id: string(),
|
|
1764
|
+
isBot: boolean()
|
|
1765
|
+
}),
|
|
1766
|
+
text: string(),
|
|
1767
|
+
mentionedBots: array(string()),
|
|
1768
|
+
attachments: array(WireAttachment).optional(),
|
|
1769
|
+
isDm: boolean(),
|
|
1770
|
+
replyTo: string().optional(),
|
|
1771
|
+
telegramTopicId: string().optional(),
|
|
1772
|
+
telegramThreadRoot: string().optional(),
|
|
1773
|
+
discordTopLevel: boolean().optional(),
|
|
1774
|
+
trigger: _enum([
|
|
1775
|
+
"mention",
|
|
1776
|
+
"dm",
|
|
1777
|
+
"keyword",
|
|
1778
|
+
"auto",
|
|
1779
|
+
"cron"
|
|
1780
|
+
]).optional(),
|
|
1781
|
+
headless: boolean().optional()
|
|
1782
|
+
});
|
|
1783
|
+
const RdMsg = discriminatedUnion("source", [
|
|
1784
|
+
RdMsgWebchat,
|
|
1785
|
+
object({
|
|
1786
|
+
source: literal("im"),
|
|
1787
|
+
agentId: string().uuid(),
|
|
1788
|
+
sessionKey: string().min(1),
|
|
1789
|
+
msgId: string().min(1),
|
|
1790
|
+
botId: string().uuid(),
|
|
1791
|
+
integrationId: string().uuid(),
|
|
1792
|
+
chatId: string().optional(),
|
|
1793
|
+
payload: WireNormalizedMessage
|
|
1794
|
+
}),
|
|
1795
|
+
object({
|
|
1796
|
+
source: literal("hook"),
|
|
1797
|
+
agentId: string().uuid(),
|
|
1798
|
+
sessionKey: string().min(1),
|
|
1799
|
+
msgId: string().min(1),
|
|
1800
|
+
hookId: string().uuid(),
|
|
1801
|
+
deliveryKey: string().min(1),
|
|
1802
|
+
firedAt: string().datetime(),
|
|
1803
|
+
context: HookContext.optional(),
|
|
1804
|
+
target: CronTarget.optional()
|
|
1805
|
+
})
|
|
1806
|
+
]);
|
|
1543
1807
|
const RdAck = object({
|
|
1544
1808
|
msgId: string(),
|
|
1545
1809
|
accepted: boolean(),
|
|
@@ -1777,8 +2041,9 @@ const BindRuleConfigSchema = object({
|
|
|
1777
2041
|
match: BindMatchSchema
|
|
1778
2042
|
});
|
|
1779
2043
|
const SlackConfigSchema = object({
|
|
2044
|
+
mode: _enum(["direct", "shared"]).default("direct"),
|
|
1780
2045
|
botToken: string(),
|
|
1781
|
-
appToken: string(),
|
|
2046
|
+
appToken: string().optional(),
|
|
1782
2047
|
signingSecret: string().optional(),
|
|
1783
2048
|
botUserId: string().optional(),
|
|
1784
2049
|
allowedUserIds: array(string()).default([]),
|
|
@@ -2015,6 +2280,6 @@ function selectAgent(agentsDir, name) {
|
|
|
2015
2280
|
return agents[0];
|
|
2016
2281
|
}
|
|
2017
2282
|
//#endregion
|
|
2018
|
-
export {
|
|
2283
|
+
export { ZodIssueCode as C, RESERVED_MCP_SERVER_NAME as S, buildEnvelope as _, agentChildEnv as a, MAX_FRAME_BYTES as b, persistRelays as c, normalizeGitUrl as d, RELAY_DAEMON_SUBPROTOCOL as f, SHARED_CONFIG_ACTION_ID as g, decodeRelayDaemonFrame as h, selectAgent as i, ConfigSchema as l, buildRelayDaemonFrame as m, findAgentFiles as n, loadConfig as o, RELAY_DAEMON_WS_PATH as p, loadAgents as r, persistDaemonId as s, discoverAgents as t, isFrame as u, decodeEnvelope as v, MEMORY_INDEX as x, encode as y };
|
|
2019
2284
|
|
|
2020
|
-
//# sourceMappingURL=load-agents-
|
|
2285
|
+
//# sourceMappingURL=load-agents-CW9Q6eYo.js.map
|