@gencode/cli 0.0.4 → 0.0.6
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/commands/agents.js +1 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/run.js +3 -3
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/sessions.d.ts.map +1 -1
- package/dist/commands/sessions.js +3 -4
- package/dist/commands/sessions.js.map +1 -1
- package/package.json +2 -2
- package/dist/gensign_node_bg.wasm +0 -0
- package/dist/program-glxy0j6y.js +0 -765
- package/dist/program-glxy0j6y.js.map +0 -1
package/dist/commands/agents.js
CHANGED
|
@@ -131,7 +131,7 @@ function agentsBindAction(options) {
|
|
|
131
131
|
for (const bindSpec of options.bind) {
|
|
132
132
|
const [channel, ...rest] = bindSpec.split(":");
|
|
133
133
|
const accountId = rest.join(":");
|
|
134
|
-
const validChannels = ["H5", "WEB", "KLPA", "CRON"];
|
|
134
|
+
const validChannels = ["H5", "WEB", "KLPA", "CRON", "EIP_ASSISTANT"];
|
|
135
135
|
if (!validChannels.includes(channel)) {
|
|
136
136
|
console.error(`Invalid channel: ${channel}`);
|
|
137
137
|
console.error(`Valid channels: ${validChannels.join(", ")}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/run.js
CHANGED
|
@@ -43,7 +43,7 @@ export function registerRunCommand(program) {
|
|
|
43
43
|
.option("--from-file <path>", "Load structured Message JSON from a file")
|
|
44
44
|
.option("-s, --session-id <id>", "Resume an existing session by ID")
|
|
45
45
|
.option("--message-id <id>", "Message ID for correlating events")
|
|
46
|
-
.option("-c, --channel <channel>", "Channel type: H5 | WEB | KLPA | CRON (default: WEB)", "WEB")
|
|
46
|
+
.option("-c, --channel <channel>", "Channel type: H5 | WEB | KLPA | CRON | EIP_ASSISTANT (default: WEB)", "WEB")
|
|
47
47
|
.option("--base-url <url>", "LLM API base URL (overrides AIMAX_BASE_URL)")
|
|
48
48
|
.option("--api-key <key>", "LLM API key (overrides AIMAX_API_KEY)")
|
|
49
49
|
.option("--auth-token <token>", "Auth token used to generate the API key (highest priority)")
|
|
@@ -77,8 +77,8 @@ export function registerRunCommand(program) {
|
|
|
77
77
|
process.exit(1);
|
|
78
78
|
}
|
|
79
79
|
// Validate channel
|
|
80
|
-
if (channel !== "H5" && channel !== "WEB" && channel !== "KLPA" && channel !== "CRON") {
|
|
81
|
-
writeError(`Invalid channel: ${channel}. Must be 'H5', 'WEB', 'KLPA', or '
|
|
80
|
+
if (channel !== "H5" && channel !== "WEB" && channel !== "KLPA" && channel !== "CRON" && channel !== "EIP_ASSISTANT") {
|
|
81
|
+
writeError(`Invalid channel: ${channel}. Must be 'H5', 'WEB', 'KLPA', 'CRON', or 'EIP_ASSISTANT'`);
|
|
82
82
|
process.exit(1);
|
|
83
83
|
}
|
|
84
84
|
const format = options.output === "json" ? "json" : "text";
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAoBjD,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,OAAwB;IAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAiD,EACjD,OAAiH;IAEjH,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,UAAU;QAChB,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,uBAAuB,EAAE,gDAAgD,CAAC;SACjF,MAAM,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;SAC/D,MAAM,CAAC,oBAAoB,EAAE,0CAA0C,CAAC;SACxE,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;SACnE,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,yBAAyB,EAAE,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuB9D"}
|
|
@@ -9,13 +9,12 @@ export function registerSessionsCommand(program) {
|
|
|
9
9
|
.command("sessions")
|
|
10
10
|
.description("List sessions for a data directory")
|
|
11
11
|
.requiredOption("-d, --data-dir <path>", "Data directory path")
|
|
12
|
-
.option("-c, --channel <channel>", "Filter by channel type: H5 | WEB | KLPA | CRON")
|
|
12
|
+
.option("-c, --channel <channel>", "Filter by channel type: H5 | WEB | KLPA | CRON | EIP_ASSISTANT")
|
|
13
13
|
.option("--output <format>", "Output format: text (default) or json", "text")
|
|
14
14
|
.action(async (options) => {
|
|
15
15
|
const format = options.output === "json" ? "json" : "text";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
writeError(`Invalid channel: ${options.channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);
|
|
16
|
+
if (options.channel && options.channel !== "H5" && options.channel !== "WEB" && options.channel !== "KLPA" && options.channel !== "CRON" && options.channel !== "EIP_ASSISTANT") {
|
|
17
|
+
writeError(`Invalid channel: ${options.channel}. Must be 'H5', 'WEB', 'KLPA', 'CRON', or 'EIP_ASSISTANT'`);
|
|
19
18
|
process.exit(1);
|
|
20
19
|
}
|
|
21
20
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,oBAAoB,EAAgB,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAQ/E,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oCAAoC,CAAC;SACjD,cAAc,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;SAC9D,MAAM,CAAC,yBAAyB,EAAE,
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,oBAAoB,EAAgB,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAQ/E,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oCAAoC,CAAC;SACjD,cAAc,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;SAC9D,MAAM,CAAC,yBAAyB,EAAE,gEAAgE,CAAC;SACnG,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,EAAE,MAAM,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;QACzC,MAAM,MAAM,GAAiB,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAEzE,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;YAChL,UAAU,CAAC,oBAAoB,OAAO,CAAC,OAAO,2DAA2D,CAAC,CAAC;YAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gencode/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"aimax": "./dist/bin.js"
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"commander": "^14.0.3",
|
|
22
22
|
"gensign-node": "latest",
|
|
23
|
-
"@gencode/agents": "0.0.
|
|
23
|
+
"@gencode/agents": "0.0.6"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/node": "^22.0.0",
|
|
Binary file
|
package/dist/program-glxy0j6y.js
DELETED
|
@@ -1,765 +0,0 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
import { Command } from "commander";
|
|
3
|
-
import { MemoryIndexManager, bootstrapMountLayout, initializePluginSystem, listSessionSummaries, normalizePluginsConfig, runAgent } from "@pingclaw/agents";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import gensign from "gensign-node";
|
|
6
|
-
import fs from "node:fs/promises";
|
|
7
|
-
import { addAgent, addBinding, getAgentConfig, listAgents, listBindings, loadAgentsConfig, normalizeAgentId, removeAgent, removeBindings, resolveAgentDir, resolveDefaultAgentId, updateAgentIdentity } from "@pingclaw/agents/config";
|
|
8
|
-
|
|
9
|
-
//#region src/output.ts
|
|
10
|
-
/** Writes a string to stdout without a trailing newline */
|
|
11
|
-
function write(text) {
|
|
12
|
-
process.stdout.write(text);
|
|
13
|
-
}
|
|
14
|
-
/** Writes a line to stdout */
|
|
15
|
-
function writeLine(text) {
|
|
16
|
-
process.stdout.write(text + "\n");
|
|
17
|
-
}
|
|
18
|
-
/** Writes a line to stderr */
|
|
19
|
-
function writeError(text) {
|
|
20
|
-
process.stderr.write(text + "\n");
|
|
21
|
-
}
|
|
22
|
-
/** Formats and prints a progress event during streaming execution */
|
|
23
|
-
function printProgressEvent(event) {
|
|
24
|
-
switch (event.type) {
|
|
25
|
-
case "text":
|
|
26
|
-
write(event.text);
|
|
27
|
-
break;
|
|
28
|
-
case "tool_start":
|
|
29
|
-
writeLine(`\n[tool:${event.name}] ${JSON.stringify(event.input)}`);
|
|
30
|
-
break;
|
|
31
|
-
case "tool_end":
|
|
32
|
-
writeLine(`[tool:${event.name}] ${event.isError ? "ERROR" : "OK"} ${event.output.slice(0, 200)}`);
|
|
33
|
-
break;
|
|
34
|
-
case "compaction":
|
|
35
|
-
writeLine(`\n[compaction] ${event.reason}`);
|
|
36
|
-
break;
|
|
37
|
-
case "error":
|
|
38
|
-
writeError(`\n[error] ${event.message}`);
|
|
39
|
-
break;
|
|
40
|
-
case "subagent_spawn":
|
|
41
|
-
writeLine(`\n[subagent:spawn]${event.label ? ` "${event.label}"` : ""} ${event.task}`);
|
|
42
|
-
break;
|
|
43
|
-
case "subagent_complete":
|
|
44
|
-
writeLine(`[subagent:${event.status}] ${event.task}`);
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/** Prints the final run result to stdout */
|
|
49
|
-
function printRunResult(result, format) {
|
|
50
|
-
if (format === "json") {
|
|
51
|
-
writeLine(JSON.stringify(result, null, 2));
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
writeLine("\n");
|
|
55
|
-
writeLine(`session: ${result.sessionId}`);
|
|
56
|
-
writeLine(`duration: ${result.durationMs}ms`);
|
|
57
|
-
writeLine(`tokens: input=${result.usage.input} output=${result.usage.output} total=${result.usage.total}`);
|
|
58
|
-
if (result.error) writeError(`error: ${result.error}`);
|
|
59
|
-
}
|
|
60
|
-
/** Prints the session list to stdout */
|
|
61
|
-
function printSessionList(sessions, format) {
|
|
62
|
-
if (format === "json") {
|
|
63
|
-
writeLine(JSON.stringify(sessions, null, 2));
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (sessions.length === 0) {
|
|
67
|
-
writeLine("No sessions found.");
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
for (const session of sessions) {
|
|
71
|
-
const date = session.createdAt ? new Date(session.createdAt).toLocaleString() : "unknown";
|
|
72
|
-
writeLine(`${session.id} ${date} [${session.channel}] ${session.title}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/** Prints bootstrap result to stdout */
|
|
76
|
-
function printBootstrapResult(result, format) {
|
|
77
|
-
if (format === "json") {
|
|
78
|
-
writeLine(JSON.stringify(result, null, 2));
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
writeLine("Bootstrap completed.");
|
|
82
|
-
writeLine(`dataDir: ${result.dataDir}`);
|
|
83
|
-
writeLine(`created dirs: ${result.createdDirs.length}`);
|
|
84
|
-
writeLine(`created files: ${result.createdFiles.length}`);
|
|
85
|
-
writeLine(`skipped dirs: ${result.skippedDirs.length}`);
|
|
86
|
-
writeLine(`skipped files: ${result.skippedFiles.length}`);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
//#endregion
|
|
90
|
-
//#region src/commands/bootstrap.ts
|
|
91
|
-
/** Registers the `bootstrap` subcommand on the given Commander program */
|
|
92
|
-
function registerBootstrapCommand(program) {
|
|
93
|
-
program.command("bootstrap").description("Initialize the data directory with required directories and templates").requiredOption("-d, --data-dir <path>", "Data directory path").option("--output <format>", "Output format: text (default) or json", "text").action(async (options) => {
|
|
94
|
-
const format = options.output === "json" ? "json" : "text";
|
|
95
|
-
try {
|
|
96
|
-
printBootstrapResult(await bootstrapMountLayout(options.dataDir), format);
|
|
97
|
-
} catch (err) {
|
|
98
|
-
writeError(`Error bootstrapping data directory: ${err.message}`);
|
|
99
|
-
process.exit(1);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
//#endregion
|
|
105
|
-
//#region src/auth.ts
|
|
106
|
-
if (!globalThis.getPkgPath) globalThis.getPkgPath = () => "@wizard/pingclaw";
|
|
107
|
-
function encryptWithSM4(ticket) {
|
|
108
|
-
return gensign.sm4_encrypt_ecb(ticket);
|
|
109
|
-
}
|
|
110
|
-
function generateApiKey(ticket) {
|
|
111
|
-
return encryptWithSM4(ticket);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
//#endregion
|
|
115
|
-
//#region src/config.ts
|
|
116
|
-
/**
|
|
117
|
-
* LLM configuration resolution for @pingclaw/cli.
|
|
118
|
-
*
|
|
119
|
-
* Priority: auth token > CLI flags > environment variables > error
|
|
120
|
-
*/
|
|
121
|
-
/**
|
|
122
|
-
* Resolves LLM configuration from CLI options and environment variables.
|
|
123
|
-
* CLI options take precedence over environment variables.
|
|
124
|
-
* Throws if required fields cannot be resolved.
|
|
125
|
-
*/
|
|
126
|
-
function resolveLlmConfig(options = {}) {
|
|
127
|
-
const baseUrl = options.baseUrl ?? process.env["PINGCLAW_BASE_URL"];
|
|
128
|
-
const envAuthToken = process.env["PINGCLAW_AUTH_TOKEN"];
|
|
129
|
-
const apiKey = options.authToken ? generateApiKey(options.authToken) : envAuthToken ? generateApiKey(envAuthToken) : options.apiKey ?? process.env["PINGCLAW_API_KEY"];
|
|
130
|
-
const model = options.model ?? process.env["PINGCLAW_MODEL"];
|
|
131
|
-
const missing = [];
|
|
132
|
-
if (!baseUrl) missing.push("--base-url / PINGCLAW_BASE_URL");
|
|
133
|
-
if (!apiKey) missing.push("--api-key / PINGCLAW_API_KEY");
|
|
134
|
-
if (!model) missing.push("--model / PINGCLAW_MODEL");
|
|
135
|
-
if (missing.length > 0) throw new Error(`Missing required LLM configuration: ${missing.join(", ")}`);
|
|
136
|
-
return {
|
|
137
|
-
baseUrl,
|
|
138
|
-
apiKey,
|
|
139
|
-
model,
|
|
140
|
-
contextWindow: options.contextWindow ?? (process.env["PINGCLAW_CONTEXT_WINDOW"] ? Number(process.env["PINGCLAW_CONTEXT_WINDOW"]) : void 0)
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
//#endregion
|
|
145
|
-
//#region src/plugins-config.ts
|
|
146
|
-
const CONFIG_FILE = "plugins.json";
|
|
147
|
-
function resolvePluginsConfigPath(dataDir) {
|
|
148
|
-
return path.join(dataDir, ".pingclaw", CONFIG_FILE);
|
|
149
|
-
}
|
|
150
|
-
async function loadPluginsConfig(dataDir) {
|
|
151
|
-
const filePath = resolvePluginsConfigPath(dataDir);
|
|
152
|
-
try {
|
|
153
|
-
const raw = await fs.readFile(filePath, "utf-8");
|
|
154
|
-
return JSON.parse(raw);
|
|
155
|
-
} catch (err) {
|
|
156
|
-
if (err.code === "ENOENT") return;
|
|
157
|
-
throw err;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
async function savePluginsConfig(dataDir, config) {
|
|
161
|
-
const filePath = resolvePluginsConfigPath(dataDir);
|
|
162
|
-
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
163
|
-
await fs.writeFile(filePath, JSON.stringify(config, null, 2), "utf-8");
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
//#endregion
|
|
167
|
-
//#region src/commands/run.ts
|
|
168
|
-
/** Registers the `run` subcommand on the given Commander program */
|
|
169
|
-
function registerRunCommand(program) {
|
|
170
|
-
program.command("run").description("Run an agent task").requiredOption("-d, --data-dir <path>", "Data directory path").requiredOption("--message <text>", "User message to send to the agent").option("-s, --session-id <id>", "Resume an existing session by ID").option("--message-id <id>", "Message ID for correlating events").option("-c, --channel <channel>", "Channel type: H5 | WEB | KLPA | CRON (default: WEB)", "WEB").option("--base-url <url>", "LLM API base URL (overrides PINGCLAW_BASE_URL)").option("--api-key <key>", "LLM API key (overrides PINGCLAW_API_KEY)").option("--auth-token <token>", "Auth token used to generate the API key (highest priority)").option("--model <name>", "LLM model name (overrides PINGCLAW_MODEL)").option("--context-window <n>", "LLM context window size").option("--callback-url <url>", "HTTP callback URL for progress events").option("--timeout <ms>", "Execution timeout in milliseconds (default: 600000)").option("--output <format>", "Output format: text (default) or json", "text").action(async (options) => {
|
|
171
|
-
let llm;
|
|
172
|
-
try {
|
|
173
|
-
llm = resolveLlmConfig({
|
|
174
|
-
baseUrl: options.baseUrl,
|
|
175
|
-
apiKey: options.apiKey,
|
|
176
|
-
authToken: options.authToken,
|
|
177
|
-
model: options.model,
|
|
178
|
-
contextWindow: options.contextWindow ? Number(options.contextWindow) : void 0
|
|
179
|
-
});
|
|
180
|
-
} catch (err) {
|
|
181
|
-
writeError(err.message);
|
|
182
|
-
process.exit(1);
|
|
183
|
-
}
|
|
184
|
-
const channel = options.channel ?? "WEB";
|
|
185
|
-
if (channel !== "H5" && channel !== "WEB" && channel !== "KLPA" && channel !== "CRON") {
|
|
186
|
-
writeError(`Invalid channel: ${channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);
|
|
187
|
-
process.exit(1);
|
|
188
|
-
}
|
|
189
|
-
const format = options.output === "json" ? "json" : "text";
|
|
190
|
-
const abortController = new AbortController();
|
|
191
|
-
const abort = () => abortController.abort();
|
|
192
|
-
process.once("SIGTERM", abort);
|
|
193
|
-
process.once("SIGINT", abort);
|
|
194
|
-
try {
|
|
195
|
-
const pluginsConfig = await loadPluginsConfig(options.dataDir);
|
|
196
|
-
const result = await runAgent({
|
|
197
|
-
dataDir: options.dataDir,
|
|
198
|
-
message: options.message,
|
|
199
|
-
sessionId: options.sessionId,
|
|
200
|
-
messageId: options.messageId,
|
|
201
|
-
channel,
|
|
202
|
-
llm,
|
|
203
|
-
callbackUrl: options.callbackUrl,
|
|
204
|
-
timeoutMs: options.timeout ? Number(options.timeout) : void 0,
|
|
205
|
-
abortSignal: abortController.signal,
|
|
206
|
-
plugins: pluginsConfig ? {
|
|
207
|
-
config: pluginsConfig,
|
|
208
|
-
dataDir: options.dataDir,
|
|
209
|
-
workspaceDir: path.join(options.dataDir, "workspace"),
|
|
210
|
-
bundledDir: process.env.PINGCLAW_PLUGINS_BUNDLED_DIR,
|
|
211
|
-
llmAllowlist: pluginsConfig.llmAllowlist
|
|
212
|
-
} : void 0,
|
|
213
|
-
onProgress: format === "text" ? async (event) => {
|
|
214
|
-
printProgressEvent(event);
|
|
215
|
-
} : void 0
|
|
216
|
-
});
|
|
217
|
-
printRunResult(result, format);
|
|
218
|
-
process.exit(result.error ? 1 : 0);
|
|
219
|
-
} catch (err) {
|
|
220
|
-
writeError(`Fatal: ${err.message}`);
|
|
221
|
-
process.exit(1);
|
|
222
|
-
} finally {
|
|
223
|
-
process.off("SIGTERM", abort);
|
|
224
|
-
process.off("SIGINT", abort);
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
//#endregion
|
|
230
|
-
//#region src/commands/sessions.ts
|
|
231
|
-
/** Registers the `sessions` subcommand on the given Commander program */
|
|
232
|
-
function registerSessionsCommand(program) {
|
|
233
|
-
program.command("sessions").description("List sessions for a data directory").requiredOption("-d, --data-dir <path>", "Data directory path").option("-c, --channel <channel>", "Filter by channel type: H5 | WEB | KLPA | CRON").option("--output <format>", "Output format: text (default) or json", "text").action(async (options) => {
|
|
234
|
-
const format = options.output === "json" ? "json" : "text";
|
|
235
|
-
if (options.channel && options.channel !== "H5" && options.channel !== "WEB" && options.channel !== "KLPA" && options.channel !== "CRON") {
|
|
236
|
-
writeError(`Invalid channel: ${options.channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);
|
|
237
|
-
process.exit(1);
|
|
238
|
-
}
|
|
239
|
-
try {
|
|
240
|
-
printSessionList(await listSessionSummaries(options.dataDir, options.channel), format);
|
|
241
|
-
} catch (err) {
|
|
242
|
-
writeError(`Error listing sessions: ${err.message}`);
|
|
243
|
-
process.exit(1);
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
//#endregion
|
|
249
|
-
//#region src/commands/memory.ts
|
|
250
|
-
function formatStatus(status, deep) {
|
|
251
|
-
const lines = [];
|
|
252
|
-
lines.push(`backend: ${status.backend}`);
|
|
253
|
-
lines.push(`provider: ${status.provider}${status.model ? ` (${status.model})` : ""}`);
|
|
254
|
-
if (typeof status.files === "number") lines.push(`files: ${status.files}`);
|
|
255
|
-
if (typeof status.chunks === "number") lines.push(`chunks: ${status.chunks}`);
|
|
256
|
-
if (typeof status.dirty === "boolean") lines.push(`dirty: ${status.dirty}`);
|
|
257
|
-
if (status.dbPath) lines.push(`db: ${status.dbPath}`);
|
|
258
|
-
if (status.sources?.length) lines.push(`sources: ${status.sources.join(", ")}`);
|
|
259
|
-
if (deep) {
|
|
260
|
-
if (status.fts) {
|
|
261
|
-
lines.push(`fts: enabled=${status.fts.enabled} available=${status.fts.available}`);
|
|
262
|
-
if (status.fts.error) lines.push(`fts_error: ${status.fts.error}`);
|
|
263
|
-
}
|
|
264
|
-
if (status.vector) {
|
|
265
|
-
lines.push(`vector: enabled=${status.vector.enabled} available=${status.vector.available ?? "unknown"}`);
|
|
266
|
-
if (status.vector.dims) lines.push(`vector_dims: ${status.vector.dims}`);
|
|
267
|
-
if (status.vector.loadError) lines.push(`vector_error: ${status.vector.loadError}`);
|
|
268
|
-
}
|
|
269
|
-
if (status.cache) lines.push(`cache: enabled=${status.cache.enabled} entries=${status.cache.entries ?? 0}`);
|
|
270
|
-
}
|
|
271
|
-
return lines.join("\n");
|
|
272
|
-
}
|
|
273
|
-
function getManager(dataDir, includeSessions) {
|
|
274
|
-
return MemoryIndexManager.get(dataDir, includeSessions ? {
|
|
275
|
-
experimental: { sessionMemory: true },
|
|
276
|
-
sources: ["memory", "sessions"]
|
|
277
|
-
} : void 0);
|
|
278
|
-
}
|
|
279
|
-
function registerMemoryCommand(program) {
|
|
280
|
-
const memory = program.command("memory").description("Manage semantic memory indexing and search");
|
|
281
|
-
memory.command("status").description("Show memory index status").requiredOption("-d, --data-dir <path>", "Data directory path").option("--deep", "Probe embedding/vector availability").option("--index", "Run a refresh before reporting status").option("--include-sessions", "Include session transcripts in indexing").option("--verbose", "Verbose output").option("--output <format>", "Output format: text (default) or json", "text").action(async (options) => {
|
|
282
|
-
const format = options.output === "json" ? "json" : "text";
|
|
283
|
-
try {
|
|
284
|
-
const manager = getManager(options.dataDir, options.includeSessions);
|
|
285
|
-
if (options.index) await manager.sync({ reason: "cli-status" });
|
|
286
|
-
const status = manager.status();
|
|
287
|
-
if (options.deep) {
|
|
288
|
-
const [embed, vector] = await Promise.all([manager.probeEmbeddingAvailability(), manager.probeVectorAvailability()]);
|
|
289
|
-
(status.custom ??= {}).embeddingProbe = embed;
|
|
290
|
-
(status.custom ??= {}).vectorProbe = { ok: vector };
|
|
291
|
-
}
|
|
292
|
-
if (format === "json") writeLine(JSON.stringify(status, null, 2));
|
|
293
|
-
else writeLine(formatStatus(status, options.deep));
|
|
294
|
-
} catch (err) {
|
|
295
|
-
writeError(`Error getting memory status: ${err.message}`);
|
|
296
|
-
process.exit(1);
|
|
297
|
-
}
|
|
298
|
-
});
|
|
299
|
-
memory.command("index").description("Reindex memory files").requiredOption("-d, --data-dir <path>", "Data directory path").option("--include-sessions", "Include session transcripts in indexing").option("--verbose", "Verbose output").action(async (options) => {
|
|
300
|
-
try {
|
|
301
|
-
await getManager(options.dataDir, options.includeSessions).sync({ reason: "cli-index" });
|
|
302
|
-
writeLine("Memory index refreshed.");
|
|
303
|
-
} catch (err) {
|
|
304
|
-
writeError(`Error indexing memory: ${err.message}`);
|
|
305
|
-
process.exit(1);
|
|
306
|
-
}
|
|
307
|
-
});
|
|
308
|
-
memory.command("search [query]").description("Search semantic memory").requiredOption("-d, --data-dir <path>", "Data directory path").option("--query <text>", "Search query").option("--include-sessions", "Include session transcripts in search").option("--output <format>", "Output format: text (default) or json", "text").action(async (query, options) => {
|
|
309
|
-
const format = options.output === "json" ? "json" : "text";
|
|
310
|
-
const q = options.query?.trim() || query?.trim();
|
|
311
|
-
if (!q) {
|
|
312
|
-
writeError("Query is required: provide [query] or --query <text>");
|
|
313
|
-
process.exit(1);
|
|
314
|
-
}
|
|
315
|
-
try {
|
|
316
|
-
const results = await getManager(options.dataDir, options.includeSessions).search(q);
|
|
317
|
-
if (format === "json") {
|
|
318
|
-
writeLine(JSON.stringify(results, null, 2));
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
if (results.length === 0) {
|
|
322
|
-
writeLine(`No results found for: ${q}`);
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
writeLine(results.map((r) => {
|
|
326
|
-
const base = `${r.path}:${r.startLine}-${r.endLine} (${r.score.toFixed(4)}) ${r.snippet}`;
|
|
327
|
-
return r.citation ? `${base}\n${r.citation}` : base;
|
|
328
|
-
}).join("\n"));
|
|
329
|
-
} catch (err) {
|
|
330
|
-
writeError(`Error searching memory: ${err.message}`);
|
|
331
|
-
process.exit(1);
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
//#endregion
|
|
337
|
-
//#region src/commands/agents.ts
|
|
338
|
-
/**
|
|
339
|
-
* Formats an agent binding for display.
|
|
340
|
-
*/
|
|
341
|
-
function describeBinding(binding) {
|
|
342
|
-
return `${binding.match.accountId ? `${binding.match.channel}:${binding.match.accountId}` : binding.match.channel} -> ${binding.agentId}`;
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Lists all configured agents.
|
|
346
|
-
*/
|
|
347
|
-
function agentsListAction(options) {
|
|
348
|
-
return async (dataDir) => {
|
|
349
|
-
const config = await loadAgentsConfig(dataDir);
|
|
350
|
-
const agents = listAgents(config);
|
|
351
|
-
const bindings = listBindings(config);
|
|
352
|
-
resolveDefaultAgentId(config);
|
|
353
|
-
if (options.json) {
|
|
354
|
-
console.log(JSON.stringify({
|
|
355
|
-
agents,
|
|
356
|
-
bindings
|
|
357
|
-
}, null, 2));
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
console.log("Agents:");
|
|
361
|
-
for (const agent of agents) {
|
|
362
|
-
const defaultTag = agent.default ? " (default)" : "";
|
|
363
|
-
const header = agent.name && agent.name !== agent.id ? `${agent.id}${defaultTag} (${agent.name})` : `${agent.id}${defaultTag}`;
|
|
364
|
-
console.log(` - ${header}`);
|
|
365
|
-
if (agent.identity?.emoji || agent.identity?.name) {
|
|
366
|
-
const identity = [agent.identity.emoji, agent.identity.name].filter(Boolean).join(" ");
|
|
367
|
-
console.log(` Identity: ${identity}`);
|
|
368
|
-
}
|
|
369
|
-
const agentDir = resolveAgentDir(dataDir, agent.id);
|
|
370
|
-
console.log(` Agent dir: ${agentDir}`);
|
|
371
|
-
if (agent.model) {
|
|
372
|
-
const modelStr = typeof agent.model === "string" ? agent.model : agent.model.primary;
|
|
373
|
-
console.log(` Model: ${modelStr}`);
|
|
374
|
-
}
|
|
375
|
-
const agentBindings = bindings.filter((b) => b.agentId === agent.id);
|
|
376
|
-
if (agentBindings.length > 0) {
|
|
377
|
-
console.log(` Routing rules:`);
|
|
378
|
-
for (const binding of agentBindings) console.log(` - ${describeBinding(binding)}`);
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
};
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Adds a new agent.
|
|
385
|
-
*/
|
|
386
|
-
function agentsAddAction(id, options) {
|
|
387
|
-
return async (dataDir) => {
|
|
388
|
-
if (getAgentConfig(await loadAgentsConfig(dataDir), normalizeAgentId(id))) {
|
|
389
|
-
console.error(`Agent "${id}" already exists.`);
|
|
390
|
-
process.exit(1);
|
|
391
|
-
}
|
|
392
|
-
if (!await addAgent(dataDir, {
|
|
393
|
-
id,
|
|
394
|
-
name: options.name,
|
|
395
|
-
model: options.model,
|
|
396
|
-
default: options.default
|
|
397
|
-
})) {
|
|
398
|
-
console.error(`Agent "${id}" already exists.`);
|
|
399
|
-
process.exit(1);
|
|
400
|
-
}
|
|
401
|
-
const agentDir = resolveAgentDir(dataDir, id);
|
|
402
|
-
console.log(`Agent "${id}" added successfully.`);
|
|
403
|
-
console.log(` Agent dir: ${agentDir}`);
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Deletes an agent.
|
|
408
|
-
*/
|
|
409
|
-
function agentsDeleteAction(id) {
|
|
410
|
-
return async (dataDir) => {
|
|
411
|
-
const agent = getAgentConfig(await loadAgentsConfig(dataDir), normalizeAgentId(id));
|
|
412
|
-
if (!agent) {
|
|
413
|
-
console.error(`Agent "${id}" not found.`);
|
|
414
|
-
process.exit(1);
|
|
415
|
-
}
|
|
416
|
-
if (agent.default === true) {
|
|
417
|
-
console.error(`Cannot delete default agent "${id}".`);
|
|
418
|
-
process.exit(1);
|
|
419
|
-
}
|
|
420
|
-
if (!await removeAgent(dataDir, id)) {
|
|
421
|
-
console.error(`Failed to delete agent "${id}".`);
|
|
422
|
-
process.exit(1);
|
|
423
|
-
}
|
|
424
|
-
console.log(`Agent "${id}" deleted.`);
|
|
425
|
-
};
|
|
426
|
-
}
|
|
427
|
-
/**
|
|
428
|
-
* Binds a channel to an agent.
|
|
429
|
-
*/
|
|
430
|
-
function agentsBindAction(options) {
|
|
431
|
-
return async (dataDir) => {
|
|
432
|
-
const config = await loadAgentsConfig(dataDir);
|
|
433
|
-
const agentId = options.agent ?? resolveDefaultAgentId(config);
|
|
434
|
-
if (!getAgentConfig(config, agentId)) {
|
|
435
|
-
console.error(`Agent "${agentId}" not found.`);
|
|
436
|
-
process.exit(1);
|
|
437
|
-
}
|
|
438
|
-
if (!options.bind || options.bind.length === 0) {
|
|
439
|
-
console.error("Please specify --bind <channel>[:<account>]");
|
|
440
|
-
process.exit(1);
|
|
441
|
-
}
|
|
442
|
-
for (const bindSpec of options.bind) {
|
|
443
|
-
const [channel, ...rest] = bindSpec.split(":");
|
|
444
|
-
const accountId = rest.join(":");
|
|
445
|
-
const validChannels = [
|
|
446
|
-
"H5",
|
|
447
|
-
"WEB",
|
|
448
|
-
"KLPA",
|
|
449
|
-
"CRON"
|
|
450
|
-
];
|
|
451
|
-
if (!validChannels.includes(channel)) {
|
|
452
|
-
console.error(`Invalid channel: ${channel}`);
|
|
453
|
-
console.error(`Valid channels: ${validChannels.join(", ")}`);
|
|
454
|
-
process.exit(1);
|
|
455
|
-
}
|
|
456
|
-
await addBinding(dataDir, {
|
|
457
|
-
agentId,
|
|
458
|
-
match: {
|
|
459
|
-
channel,
|
|
460
|
-
accountId: accountId || void 0
|
|
461
|
-
}
|
|
462
|
-
});
|
|
463
|
-
console.log(`Binding added: ${bindSpec} -> ${agentId}`);
|
|
464
|
-
}
|
|
465
|
-
};
|
|
466
|
-
}
|
|
467
|
-
/**
|
|
468
|
-
* Unbinds a channel from an agent.
|
|
469
|
-
*/
|
|
470
|
-
function agentsUnbindAction(options) {
|
|
471
|
-
return async (dataDir) => {
|
|
472
|
-
const config = await loadAgentsConfig(dataDir);
|
|
473
|
-
const agentId = options.agent ?? resolveDefaultAgentId(config);
|
|
474
|
-
if (!getAgentConfig(config, agentId)) {
|
|
475
|
-
console.error(`Agent "${agentId}" not found.`);
|
|
476
|
-
process.exit(1);
|
|
477
|
-
}
|
|
478
|
-
if (options.all) {
|
|
479
|
-
const removed = await removeBindings(dataDir, agentId, "*");
|
|
480
|
-
console.log(`Removed ${removed} binding(s) for agent "${agentId}".`);
|
|
481
|
-
} else if (options.bind && options.bind.length > 0) {
|
|
482
|
-
let totalRemoved = 0;
|
|
483
|
-
for (const bindSpec of options.bind) {
|
|
484
|
-
const [channel, ...rest] = bindSpec.split(":");
|
|
485
|
-
const removed = await removeBindings(dataDir, agentId, channel, rest.join(":") || void 0);
|
|
486
|
-
if (removed > 0) {
|
|
487
|
-
console.log(`Binding removed: ${bindSpec} -> ${agentId}`);
|
|
488
|
-
totalRemoved += removed;
|
|
489
|
-
} else console.log(`No binding found: ${bindSpec} -> ${agentId}`);
|
|
490
|
-
}
|
|
491
|
-
} else {
|
|
492
|
-
console.error("Please specify --bind <channel>[:<account>] or --all");
|
|
493
|
-
process.exit(1);
|
|
494
|
-
}
|
|
495
|
-
};
|
|
496
|
-
}
|
|
497
|
-
/**
|
|
498
|
-
* Lists routing bindings.
|
|
499
|
-
*/
|
|
500
|
-
function agentsBindingsAction(options) {
|
|
501
|
-
return async (dataDir) => {
|
|
502
|
-
let bindings = listBindings(await loadAgentsConfig(dataDir));
|
|
503
|
-
if (options.agent) bindings = bindings.filter((b) => b.agentId === options.agent);
|
|
504
|
-
if (options.json) {
|
|
505
|
-
console.log(JSON.stringify(bindings, null, 2));
|
|
506
|
-
return;
|
|
507
|
-
}
|
|
508
|
-
if (bindings.length === 0) {
|
|
509
|
-
console.log("No bindings configured.");
|
|
510
|
-
return;
|
|
511
|
-
}
|
|
512
|
-
console.log("Routing bindings:");
|
|
513
|
-
for (const binding of bindings) console.log(` ${describeBinding(binding)}`);
|
|
514
|
-
};
|
|
515
|
-
}
|
|
516
|
-
/**
|
|
517
|
-
* Sets agent identity.
|
|
518
|
-
*/
|
|
519
|
-
function agentsSetIdentityAction(options) {
|
|
520
|
-
return async (dataDir) => {
|
|
521
|
-
const config = await loadAgentsConfig(dataDir);
|
|
522
|
-
const agentId = options.agent ?? resolveDefaultAgentId(config);
|
|
523
|
-
if (!getAgentConfig(config, agentId)) {
|
|
524
|
-
console.error(`Agent "${agentId}" not found.`);
|
|
525
|
-
process.exit(1);
|
|
526
|
-
}
|
|
527
|
-
if (!await updateAgentIdentity(dataDir, agentId, {
|
|
528
|
-
name: options.name,
|
|
529
|
-
emoji: options.emoji,
|
|
530
|
-
avatar: options.avatar
|
|
531
|
-
})) {
|
|
532
|
-
console.error(`Failed to update identity for agent "${agentId}".`);
|
|
533
|
-
process.exit(1);
|
|
534
|
-
}
|
|
535
|
-
console.log(`Identity updated for agent "${agentId}".`);
|
|
536
|
-
};
|
|
537
|
-
}
|
|
538
|
-
/**
|
|
539
|
-
* Registers all agents subcommands with the program.
|
|
540
|
-
*/
|
|
541
|
-
function registerAgentsCommands(program, getDataDir) {
|
|
542
|
-
const agentsCmd = program.command("agents").description("Manage agents");
|
|
543
|
-
agentsCmd.command("list").description("List all configured agents").option("-j, --json", "Output as JSON").option("-b, --bindings", "Show detailed binding rules").action(async (opts) => {
|
|
544
|
-
const dataDir = getDataDir();
|
|
545
|
-
await agentsListAction(opts)(dataDir);
|
|
546
|
-
});
|
|
547
|
-
agentsCmd.command("add <id>").description("Add a new agent").option("-n, --name <name>", "Display name").option("-m, --model <model>", "Model identifier").option("--default", "Mark as default agent").action(async (id, opts) => {
|
|
548
|
-
const dataDir = getDataDir();
|
|
549
|
-
await agentsAddAction(id, opts)(dataDir);
|
|
550
|
-
});
|
|
551
|
-
agentsCmd.command("delete <id>").description("Delete an agent").action(async (id) => {
|
|
552
|
-
const dataDir = getDataDir();
|
|
553
|
-
await agentsDeleteAction(id)(dataDir);
|
|
554
|
-
});
|
|
555
|
-
agentsCmd.command("bind").description("Bind a channel to an agent").option("-a, --agent <id>", "Target agent ID").option("-b, --bind <channel...>", "Channel binding (e.g., WEB, KLPA:ops)").action(async (opts) => {
|
|
556
|
-
const dataDir = getDataDir();
|
|
557
|
-
await agentsBindAction(opts)(dataDir);
|
|
558
|
-
});
|
|
559
|
-
agentsCmd.command("unbind").description("Unbind a channel from an agent").option("-a, --agent <id>", "Target agent ID").option("-b, --bind <channel...>", "Channel binding to remove").option("--all", "Remove all bindings for the agent").action(async (opts) => {
|
|
560
|
-
const dataDir = getDataDir();
|
|
561
|
-
await agentsUnbindAction(opts)(dataDir);
|
|
562
|
-
});
|
|
563
|
-
agentsCmd.command("bindings").description("List routing bindings").option("-a, --agent <id>", "Filter by agent ID").option("-j, --json", "Output as JSON").action(async (opts) => {
|
|
564
|
-
const dataDir = getDataDir();
|
|
565
|
-
await agentsBindingsAction(opts)(dataDir);
|
|
566
|
-
});
|
|
567
|
-
agentsCmd.command("set-identity").description("Set agent identity").option("-a, --agent <id>", "Target agent ID").option("-n, --name <name>", "Agent name").option("-e, --emoji <emoji>", "Agent emoji").option("--avatar <path>", "Avatar path").action(async (opts) => {
|
|
568
|
-
const dataDir = getDataDir();
|
|
569
|
-
await agentsSetIdentityAction(opts)(dataDir);
|
|
570
|
-
});
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
//#endregion
|
|
574
|
-
//#region src/commands/plugins.ts
|
|
575
|
-
function resolveWorkspaceDir(dataDir) {
|
|
576
|
-
return path.join(dataDir, "workspace");
|
|
577
|
-
}
|
|
578
|
-
function resolveBundledDir() {
|
|
579
|
-
const raw = process.env.PINGCLAW_PLUGINS_BUNDLED_DIR;
|
|
580
|
-
return raw ? raw.trim() || void 0 : void 0;
|
|
581
|
-
}
|
|
582
|
-
function printPluginList(records) {
|
|
583
|
-
if (records.length === 0) {
|
|
584
|
-
writeLine("No plugins discovered.");
|
|
585
|
-
return;
|
|
586
|
-
}
|
|
587
|
-
for (const record of records) {
|
|
588
|
-
const status = record.status.padEnd(8, " ");
|
|
589
|
-
writeLine(`${record.id} ${status} ${record.origin} ${record.source}`);
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
function printPluginInfo(record) {
|
|
593
|
-
writeLine(`id: ${record.id}`);
|
|
594
|
-
writeLine(`status: ${record.status}`);
|
|
595
|
-
writeLine(`origin: ${record.origin}`);
|
|
596
|
-
writeLine(`source: ${record.source}`);
|
|
597
|
-
writeLine(`enabled: ${record.enabled}`);
|
|
598
|
-
if (record.error) writeLine(`error: ${record.error}`);
|
|
599
|
-
writeLine(`tools: ${record.toolCount}`);
|
|
600
|
-
writeLine(`hooks: ${record.hookCount}`);
|
|
601
|
-
if (record.skills.length > 0) writeLine(`skills: ${record.skills.join(", ")}`);
|
|
602
|
-
}
|
|
603
|
-
function normalizeAllowlist(list) {
|
|
604
|
-
return Array.from(new Set((list ?? []).map((entry) => entry.trim()).filter(Boolean)));
|
|
605
|
-
}
|
|
606
|
-
function printAllowlist(list) {
|
|
607
|
-
if (list.length === 0) {
|
|
608
|
-
writeLine("LLM allowlist is empty.");
|
|
609
|
-
return;
|
|
610
|
-
}
|
|
611
|
-
for (const entry of list) writeLine(entry);
|
|
612
|
-
}
|
|
613
|
-
function registerPluginsCommand(program, getDataDir) {
|
|
614
|
-
const cmd = program.command("plugins").description("Manage PingClaw plugins");
|
|
615
|
-
cmd.command("list").description("List discovered plugins").option("-d, --data-dir <path>", "Data directory path").action(async (options) => {
|
|
616
|
-
const dataDir = options.dataDir ?? getDataDir();
|
|
617
|
-
printPluginList(initializePluginSystem({
|
|
618
|
-
config: await loadPluginsConfig(dataDir),
|
|
619
|
-
dataDir,
|
|
620
|
-
workspaceDir: resolveWorkspaceDir(dataDir),
|
|
621
|
-
bundledDir: resolveBundledDir()
|
|
622
|
-
}).registry.plugins);
|
|
623
|
-
});
|
|
624
|
-
cmd.command("info").description("Show plugin details").argument("<id>", "Plugin id").option("-d, --data-dir <path>", "Data directory path").action(async (id, options) => {
|
|
625
|
-
const dataDir = options.dataDir ?? getDataDir();
|
|
626
|
-
const record = initializePluginSystem({
|
|
627
|
-
config: await loadPluginsConfig(dataDir),
|
|
628
|
-
dataDir,
|
|
629
|
-
workspaceDir: resolveWorkspaceDir(dataDir),
|
|
630
|
-
bundledDir: resolveBundledDir()
|
|
631
|
-
}).registry.plugins.find((entry) => entry.id === id);
|
|
632
|
-
if (!record) {
|
|
633
|
-
writeError(`Plugin not found: ${id}`);
|
|
634
|
-
process.exit(1);
|
|
635
|
-
}
|
|
636
|
-
printPluginInfo(record);
|
|
637
|
-
});
|
|
638
|
-
cmd.command("enable").description("Enable a plugin").argument("<id>", "Plugin id").option("-d, --data-dir <path>", "Data directory path").action(async (id, options) => {
|
|
639
|
-
const dataDir = options.dataDir ?? getDataDir();
|
|
640
|
-
const config = await loadPluginsConfig(dataDir) ?? {};
|
|
641
|
-
const normalized = normalizePluginsConfig(config);
|
|
642
|
-
if (!initializePluginSystem({
|
|
643
|
-
config,
|
|
644
|
-
dataDir,
|
|
645
|
-
workspaceDir: resolveWorkspaceDir(dataDir),
|
|
646
|
-
bundledDir: resolveBundledDir()
|
|
647
|
-
}).registry.plugins.some((entry) => entry.id === id)) {
|
|
648
|
-
writeError(`Plugin not found: ${id}`);
|
|
649
|
-
process.exit(1);
|
|
650
|
-
}
|
|
651
|
-
await savePluginsConfig(dataDir, {
|
|
652
|
-
...config,
|
|
653
|
-
entries: {
|
|
654
|
-
...config.entries,
|
|
655
|
-
[id]: {
|
|
656
|
-
...config.entries?.[id] ?? {},
|
|
657
|
-
enabled: true
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
});
|
|
661
|
-
writeLine(`Enabled ${id}`);
|
|
662
|
-
if (normalized.allow.length > 0 && !normalized.allow.includes(id)) writeLine("Note: plugins.allow is set; add this plugin id to allowlist if needed.");
|
|
663
|
-
});
|
|
664
|
-
cmd.command("disable").description("Disable a plugin").argument("<id>", "Plugin id").option("-d, --data-dir <path>", "Data directory path").action(async (id, options) => {
|
|
665
|
-
const dataDir = options.dataDir ?? getDataDir();
|
|
666
|
-
const config = await loadPluginsConfig(dataDir) ?? {};
|
|
667
|
-
if (!initializePluginSystem({
|
|
668
|
-
config,
|
|
669
|
-
dataDir,
|
|
670
|
-
workspaceDir: resolveWorkspaceDir(dataDir),
|
|
671
|
-
bundledDir: resolveBundledDir()
|
|
672
|
-
}).registry.plugins.some((entry) => entry.id === id)) {
|
|
673
|
-
writeError(`Plugin not found: ${id}`);
|
|
674
|
-
process.exit(1);
|
|
675
|
-
}
|
|
676
|
-
await savePluginsConfig(dataDir, {
|
|
677
|
-
...config,
|
|
678
|
-
entries: {
|
|
679
|
-
...config.entries,
|
|
680
|
-
[id]: {
|
|
681
|
-
...config.entries?.[id] ?? {},
|
|
682
|
-
enabled: false
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
});
|
|
686
|
-
writeLine(`Disabled ${id}`);
|
|
687
|
-
});
|
|
688
|
-
cmd.command("doctor").description("Validate plugin configuration").option("-d, --data-dir <path>", "Data directory path").action(async (options) => {
|
|
689
|
-
const dataDir = options.dataDir ?? getDataDir();
|
|
690
|
-
const system = initializePluginSystem({
|
|
691
|
-
config: await loadPluginsConfig(dataDir),
|
|
692
|
-
dataDir,
|
|
693
|
-
workspaceDir: resolveWorkspaceDir(dataDir),
|
|
694
|
-
bundledDir: resolveBundledDir()
|
|
695
|
-
});
|
|
696
|
-
if (system.diagnostics.length === 0) {
|
|
697
|
-
writeLine("No plugin issues detected.");
|
|
698
|
-
return;
|
|
699
|
-
}
|
|
700
|
-
for (const diag of system.diagnostics) writeLine(`${diag.level === "error" ? "ERROR" : "WARN"}${diag.pluginId ? ` ${diag.pluginId}` : ""}: ${diag.message}`);
|
|
701
|
-
if (system.diagnostics.some((d) => d.level === "error")) process.exit(1);
|
|
702
|
-
});
|
|
703
|
-
const llmCmd = cmd.command("llm-allow").description("Manage plugin LLM allowlist");
|
|
704
|
-
llmCmd.command("list").description("List LLM allowlist entries").option("-d, --data-dir <path>", "Data directory path").action(async (options) => {
|
|
705
|
-
printAllowlist(normalizeAllowlist((await loadPluginsConfig(options.dataDir ?? getDataDir()))?.llmAllowlist));
|
|
706
|
-
});
|
|
707
|
-
llmCmd.command("add").description("Add entries to the LLM allowlist (plugin id or tool name)").argument("<entry...>", "Plugin id or tool name").option("-d, --data-dir <path>", "Data directory path").action(async (entries, options) => {
|
|
708
|
-
const dataDir = options.dataDir ?? getDataDir();
|
|
709
|
-
const config = await loadPluginsConfig(dataDir) ?? {};
|
|
710
|
-
const allowlist = normalizeAllowlist([...config.llmAllowlist ?? [], ...entries]);
|
|
711
|
-
await savePluginsConfig(dataDir, {
|
|
712
|
-
...config,
|
|
713
|
-
llmAllowlist: allowlist
|
|
714
|
-
});
|
|
715
|
-
writeLine(`LLM allowlist updated (${allowlist.length} entries).`);
|
|
716
|
-
});
|
|
717
|
-
llmCmd.command("remove").description("Remove entries from the LLM allowlist").argument("<entry...>", "Plugin id or tool name").option("-d, --data-dir <path>", "Data directory path").action(async (entries, options) => {
|
|
718
|
-
const dataDir = options.dataDir ?? getDataDir();
|
|
719
|
-
const config = await loadPluginsConfig(dataDir) ?? {};
|
|
720
|
-
const removeSet = new Set(entries.map((entry) => entry.trim()).filter(Boolean));
|
|
721
|
-
const allowlist = normalizeAllowlist(config.llmAllowlist).filter((entry) => !removeSet.has(entry));
|
|
722
|
-
await savePluginsConfig(dataDir, {
|
|
723
|
-
...config,
|
|
724
|
-
llmAllowlist: allowlist
|
|
725
|
-
});
|
|
726
|
-
writeLine(`LLM allowlist updated (${allowlist.length} entries).`);
|
|
727
|
-
});
|
|
728
|
-
llmCmd.command("clear").description("Clear the LLM allowlist").option("-d, --data-dir <path>", "Data directory path").action(async (options) => {
|
|
729
|
-
const dataDir = options.dataDir ?? getDataDir();
|
|
730
|
-
await savePluginsConfig(dataDir, {
|
|
731
|
-
...await loadPluginsConfig(dataDir) ?? {},
|
|
732
|
-
llmAllowlist: []
|
|
733
|
-
});
|
|
734
|
-
writeLine("LLM allowlist cleared.");
|
|
735
|
-
});
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
//#endregion
|
|
739
|
-
//#region src/program.ts
|
|
740
|
-
/**
|
|
741
|
-
* Commander program setup for @pingclaw/cli.
|
|
742
|
-
* Exported separately from the binary entrypoint to allow unit testing.
|
|
743
|
-
*/
|
|
744
|
-
const cliPackage = createRequire(import.meta.url)("../package.json");
|
|
745
|
-
/**
|
|
746
|
-
* Resolves the data directory from environment or current working directory.
|
|
747
|
-
*/
|
|
748
|
-
function getDataDir() {
|
|
749
|
-
return process.env.PINGCLAW_DATA_DIR || process.cwd();
|
|
750
|
-
}
|
|
751
|
-
function createProgram() {
|
|
752
|
-
const program = new Command();
|
|
753
|
-
program.name("pingclaw").description("PingClaw CLI — runs agent tasks in a containerized environment").version(cliPackage.version);
|
|
754
|
-
registerRunCommand(program);
|
|
755
|
-
registerSessionsCommand(program);
|
|
756
|
-
registerBootstrapCommand(program);
|
|
757
|
-
registerMemoryCommand(program);
|
|
758
|
-
registerAgentsCommands(program, getDataDir);
|
|
759
|
-
registerPluginsCommand(program, getDataDir);
|
|
760
|
-
return program;
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
//#endregion
|
|
764
|
-
export { getDataDir as n, createProgram as t };
|
|
765
|
-
//# sourceMappingURL=program-glxy0j6y.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"program-glxy0j6y.js","names":[],"sources":["../src/output.ts","../src/commands/bootstrap.ts","../src/auth.ts","../src/config.ts","../src/plugins-config.ts","../src/commands/run.ts","../src/commands/sessions.ts","../src/commands/memory.ts","../src/commands/agents.ts","../src/commands/plugins.ts","../src/program.ts"],"sourcesContent":["/**\n * Output formatting utilities for @pingclaw/cli.\n */\n\nimport type {\n AgentRunResult,\n AgentProgressEvent,\n SessionSummary,\n BootstrapMountResult,\n} from \"@pingclaw/agents\";\n\nexport type OutputFormat = \"text\" | \"json\";\n\n/** Writes a string to stdout without a trailing newline */\nexport function write(text: string): void {\n process.stdout.write(text);\n}\n\n/** Writes a line to stdout */\nexport function writeLine(text: string): void {\n process.stdout.write(text + \"\\n\");\n}\n\n/** Writes a line to stderr */\nexport function writeError(text: string): void {\n process.stderr.write(text + \"\\n\");\n}\n\n/** Formats and prints a progress event during streaming execution */\nexport function printProgressEvent(event: AgentProgressEvent): void {\n switch (event.type) {\n case \"text\":\n write(event.text);\n break;\n case \"tool_start\":\n writeLine(`\\n[tool:${event.name}] ${JSON.stringify(event.input)}`);\n break;\n case \"tool_end\":\n writeLine(`[tool:${event.name}] ${event.isError ? \"ERROR\" : \"OK\"} ${event.output.slice(0, 200)}`);\n break;\n case \"compaction\":\n writeLine(`\\n[compaction] ${event.reason}`);\n break;\n case \"error\":\n writeError(`\\n[error] ${event.message}`);\n break;\n case \"subagent_spawn\": {\n const label = event.label ? ` \"${event.label}\"` : \"\";\n writeLine(`\\n[subagent:spawn]${label} ${event.task}`);\n break;\n }\n case \"subagent_complete\": {\n writeLine(`[subagent:${event.status}] ${event.task}`);\n break;\n }\n }\n}\n\n/** Prints the final run result to stdout */\nexport function printRunResult(result: AgentRunResult, format: OutputFormat): void {\n if (format === \"json\") {\n writeLine(JSON.stringify(result, null, 2));\n return;\n }\n writeLine(\"\\n\");\n writeLine(`session: ${result.sessionId}`);\n writeLine(`duration: ${result.durationMs}ms`);\n writeLine(`tokens: input=${result.usage.input} output=${result.usage.output} total=${result.usage.total}`);\n if (result.error) {\n writeError(`error: ${result.error}`);\n }\n}\n\n/** Prints the session list to stdout */\nexport function printSessionList(sessions: SessionSummary[], format: OutputFormat): void {\n if (format === \"json\") {\n writeLine(JSON.stringify(sessions, null, 2));\n return;\n }\n if (sessions.length === 0) {\n writeLine(\"No sessions found.\");\n return;\n }\n for (const session of sessions) {\n const date = session.createdAt ? new Date(session.createdAt).toLocaleString() : \"unknown\";\n writeLine(`${session.id} ${date} [${session.channel}] ${session.title}`);\n }\n}\n\n/** Prints bootstrap result to stdout */\nexport function printBootstrapResult(result: BootstrapMountResult, format: OutputFormat): void {\n if (format === \"json\") {\n writeLine(JSON.stringify(result, null, 2));\n return;\n }\n\n writeLine(\"Bootstrap completed.\");\n writeLine(`dataDir: ${result.dataDir}`);\n writeLine(`created dirs: ${result.createdDirs.length}`);\n writeLine(`created files: ${result.createdFiles.length}`);\n writeLine(`skipped dirs: ${result.skippedDirs.length}`);\n writeLine(`skipped files: ${result.skippedFiles.length}`);\n}\n","/**\n * `pingclaw bootstrap` command — initializes the data directory structure.\n */\n\nimport type { Command } from \"commander\";\nimport { bootstrapMountLayout } from \"@pingclaw/agents\";\nimport { printBootstrapResult, writeError, type OutputFormat } from \"../output.js\";\n\nexport type BootstrapOptions = {\n dataDir: string;\n output?: OutputFormat;\n};\n\n/** Registers the `bootstrap` subcommand on the given Commander program */\nexport function registerBootstrapCommand(program: Command): void {\n program\n .command(\"bootstrap\")\n .description(\"Initialize the data directory with required directories and templates\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: BootstrapOptions) => {\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n try {\n const result = await bootstrapMountLayout(options.dataDir);\n printBootstrapResult(result, format);\n } catch (err) {\n writeError(`Error bootstrapping data directory: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import gensign from \"gensign-node\";\n\ndeclare global {\n // Provided by gensign-node consumers to locate package info.\n // eslint-disable-next-line no-var\n var getPkgPath: () => string;\n}\n\nif (!globalThis.getPkgPath) {\n globalThis.getPkgPath = () => \"@wizard/pingclaw\";\n}\n\nexport function encryptWithSM4(ticket: string): string {\n return gensign.sm4_encrypt_ecb(ticket);\n}\n\nexport function generateApiKey(ticket: string): string {\n return encryptWithSM4(ticket);\n}\n\nexport {};\n","/**\n * LLM configuration resolution for @pingclaw/cli.\n *\n * Priority: auth token > CLI flags > environment variables > error\n */\nimport { generateApiKey } from \"./auth.js\";\n\nexport type LlmConfig = {\n baseUrl: string;\n apiKey: string;\n model: string;\n contextWindow?: number;\n};\n\n/** Resolved CLI options that may override env vars */\nexport type LlmCliOptions = {\n baseUrl?: string;\n apiKey?: string;\n authToken?: string;\n model?: string;\n contextWindow?: number;\n};\n\n/**\n * Resolves LLM configuration from CLI options and environment variables.\n * CLI options take precedence over environment variables.\n * Throws if required fields cannot be resolved.\n */\nexport function resolveLlmConfig(options: LlmCliOptions = {}): LlmConfig {\n const baseUrl = options.baseUrl ?? process.env[\"PINGCLAW_BASE_URL\"];\n const envAuthToken = process.env[\"PINGCLAW_AUTH_TOKEN\"];\n const apiKey = options.authToken\n ? generateApiKey(options.authToken)\n : (envAuthToken ? generateApiKey(envAuthToken) : (options.apiKey ?? process.env[\"PINGCLAW_API_KEY\"]));\n const model = options.model ?? process.env[\"PINGCLAW_MODEL\"];\n\n const missing: string[] = [];\n if (!baseUrl) missing.push(\"--base-url / PINGCLAW_BASE_URL\");\n if (!apiKey) missing.push(\"--api-key / PINGCLAW_API_KEY\");\n if (!model) missing.push(\"--model / PINGCLAW_MODEL\");\n\n if (missing.length > 0) {\n throw new Error(`Missing required LLM configuration: ${missing.join(\", \")}`);\n }\n\n const contextWindow = options.contextWindow\n ?? (process.env[\"PINGCLAW_CONTEXT_WINDOW\"] ? Number(process.env[\"PINGCLAW_CONTEXT_WINDOW\"]) : undefined);\n\n return { baseUrl: baseUrl!, apiKey: apiKey!, model: model!, contextWindow };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { PluginsConfig } from \"@pingclaw/agents\";\n\nconst CONFIG_FILE = \"plugins.json\";\n\nexport function resolvePluginsConfigPath(dataDir: string): string {\n return path.join(dataDir, \".pingclaw\", CONFIG_FILE);\n}\n\nexport async function loadPluginsConfig(dataDir: string): Promise<PluginsConfig | undefined> {\n const filePath = resolvePluginsConfigPath(dataDir);\n try {\n const raw = await fs.readFile(filePath, \"utf-8\");\n const parsed = JSON.parse(raw) as PluginsConfig;\n return parsed;\n } catch (err) {\n const code = (err as { code?: string }).code;\n if (code === \"ENOENT\") {\n return undefined;\n }\n throw err;\n }\n}\n\nexport async function savePluginsConfig(dataDir: string, config: PluginsConfig): Promise<void> {\n const filePath = resolvePluginsConfigPath(dataDir);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, JSON.stringify(config, null, 2), \"utf-8\");\n}\n","/**\n * `pingclaw run` command — executes an agent task.\n */\n\nimport type { Command } from \"commander\";\nimport { runAgent } from \"@pingclaw/agents\";\nimport type { Channel } from \"@pingclaw/agents\";\nimport path from \"node:path\";\nimport { resolveLlmConfig } from \"../config.js\";\nimport { printProgressEvent, printRunResult, writeError, type OutputFormat } from \"../output.js\";\nimport { loadPluginsConfig } from \"../plugins-config.js\";\n\nexport type RunOptions = {\n dataDir: string;\n message: string;\n sessionId?: string;\n messageId?: string;\n channel?: Channel;\n baseUrl?: string;\n apiKey?: string;\n authToken?: string;\n model?: string;\n contextWindow?: string;\n callbackUrl?: string;\n timeout?: string;\n output?: OutputFormat;\n};\n\n/** Registers the `run` subcommand on the given Commander program */\nexport function registerRunCommand(program: Command): void {\n program\n .command(\"run\")\n .description(\"Run an agent task\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .requiredOption(\"--message <text>\", \"User message to send to the agent\")\n .option(\"-s, --session-id <id>\", \"Resume an existing session by ID\")\n .option(\"--message-id <id>\", \"Message ID for correlating events\")\n .option(\"-c, --channel <channel>\", \"Channel type: H5 | WEB | KLPA | CRON (default: WEB)\", \"WEB\")\n .option(\"--base-url <url>\", \"LLM API base URL (overrides PINGCLAW_BASE_URL)\")\n .option(\"--api-key <key>\", \"LLM API key (overrides PINGCLAW_API_KEY)\")\n .option(\"--auth-token <token>\", \"Auth token used to generate the API key (highest priority)\")\n .option(\"--model <name>\", \"LLM model name (overrides PINGCLAW_MODEL)\")\n .option(\"--context-window <n>\", \"LLM context window size\")\n .option(\"--callback-url <url>\", \"HTTP callback URL for progress events\")\n .option(\"--timeout <ms>\", \"Execution timeout in milliseconds (default: 600000)\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: RunOptions) => {\n let llm;\n try {\n llm = resolveLlmConfig({\n baseUrl: options.baseUrl,\n apiKey: options.apiKey,\n authToken: options.authToken,\n model: options.model,\n contextWindow: options.contextWindow ? Number(options.contextWindow) : undefined,\n });\n } catch (err) {\n writeError((err as Error).message);\n process.exit(1);\n }\n\n // Validate channel\n const channel: Channel = options.channel ?? \"WEB\";\n if (channel !== \"H5\" && channel !== \"WEB\" && channel !== \"KLPA\" && channel !== \"CRON\") {\n writeError(`Invalid channel: ${channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);\n process.exit(1);\n }\n\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n\n // Wire abort signal to OS termination signals so the agent can be\n // gracefully cancelled when the container is stopped (SIGTERM) or\n // the user presses Ctrl-C (SIGINT).\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n process.once(\"SIGTERM\", abort);\n process.once(\"SIGINT\", abort);\n\n try {\n const pluginsConfig = await loadPluginsConfig(options.dataDir);\n const result = await runAgent({\n dataDir: options.dataDir,\n message: options.message,\n sessionId: options.sessionId,\n messageId: options.messageId,\n channel,\n llm,\n callbackUrl: options.callbackUrl,\n timeoutMs: options.timeout ? Number(options.timeout) : undefined,\n abortSignal: abortController.signal,\n plugins: pluginsConfig ? {\n config: pluginsConfig,\n dataDir: options.dataDir,\n workspaceDir: path.join(options.dataDir, \"workspace\"),\n bundledDir: process.env.PINGCLAW_PLUGINS_BUNDLED_DIR,\n llmAllowlist: pluginsConfig.llmAllowlist,\n } : undefined,\n onProgress: format === \"text\"\n ? async (event) => { printProgressEvent(event); }\n : undefined,\n });\n\n printRunResult(result, format);\n process.exit(result.error ? 1 : 0);\n } catch (err) {\n writeError(`Fatal: ${(err as Error).message}`);\n process.exit(1);\n } finally {\n process.off(\"SIGTERM\", abort);\n process.off(\"SIGINT\", abort);\n }\n });\n}\n","/**\n * `pingclaw sessions` command — lists sessions for a data directory.\n */\n\nimport type { Command } from \"commander\";\nimport { listSessionSummaries, type Channel } from \"@pingclaw/agents\";\nimport { printSessionList, writeError, type OutputFormat } from \"../output.js\";\n\nexport type SessionsOptions = {\n dataDir: string;\n channel?: Channel;\n output?: OutputFormat;\n};\n\n/** Registers the `sessions` subcommand on the given Commander program */\nexport function registerSessionsCommand(program: Command): void {\n program\n .command(\"sessions\")\n .description(\"List sessions for a data directory\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"-c, --channel <channel>\", \"Filter by channel type: H5 | WEB | KLPA | CRON\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: SessionsOptions) => {\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n\n // Validate channel if provided\n if (options.channel && options.channel !== \"H5\" && options.channel !== \"WEB\" && options.channel !== \"KLPA\" && options.channel !== \"CRON\") {\n writeError(`Invalid channel: ${options.channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);\n process.exit(1);\n }\n\n try {\n const sessions = await listSessionSummaries(options.dataDir, options.channel);\n printSessionList(sessions, format);\n } catch (err) {\n writeError(`Error listing sessions: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","/**\n * `pingclaw memory` command — status/index/search for semantic memory.\n */\n\nimport type { Command } from \"commander\";\nimport { MemoryIndexManager, type MemoryProviderStatus } from \"@pingclaw/agents\";\nimport { writeError, writeLine, type OutputFormat } from \"../output.js\";\n\nexport type MemoryCommandOptions = {\n dataDir: string;\n output?: OutputFormat;\n includeSessions?: boolean;\n};\n\ntype StatusOptions = MemoryCommandOptions & {\n deep?: boolean;\n index?: boolean;\n verbose?: boolean;\n};\n\ntype IndexOptions = MemoryCommandOptions & {\n verbose?: boolean;\n};\n\ntype SearchOptions = MemoryCommandOptions & {\n query?: string;\n};\n\nfunction formatStatus(status: MemoryProviderStatus, deep?: boolean): string {\n const lines: string[] = [];\n lines.push(`backend: ${status.backend}`);\n lines.push(`provider: ${status.provider}${status.model ? ` (${status.model})` : \"\"}`);\n if (typeof status.files === \"number\") {\n lines.push(`files: ${status.files}`);\n }\n if (typeof status.chunks === \"number\") {\n lines.push(`chunks: ${status.chunks}`);\n }\n if (typeof status.dirty === \"boolean\") {\n lines.push(`dirty: ${status.dirty}`);\n }\n if (status.dbPath) {\n lines.push(`db: ${status.dbPath}`);\n }\n if (status.sources?.length) {\n lines.push(`sources: ${status.sources.join(\", \")}`);\n }\n if (deep) {\n if (status.fts) {\n lines.push(`fts: enabled=${status.fts.enabled} available=${status.fts.available}`);\n if (status.fts.error) {\n lines.push(`fts_error: ${status.fts.error}`);\n }\n }\n if (status.vector) {\n lines.push(`vector: enabled=${status.vector.enabled} available=${status.vector.available ?? \"unknown\"}`);\n if (status.vector.dims) {\n lines.push(`vector_dims: ${status.vector.dims}`);\n }\n if (status.vector.loadError) {\n lines.push(`vector_error: ${status.vector.loadError}`);\n }\n }\n if (status.cache) {\n lines.push(`cache: enabled=${status.cache.enabled} entries=${status.cache.entries ?? 0}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nfunction getManager(dataDir: string, includeSessions?: boolean): MemoryIndexManager {\n return MemoryIndexManager.get(dataDir, includeSessions ? {\n experimental: { sessionMemory: true },\n sources: [\"memory\", \"sessions\"],\n } : undefined);\n}\n\nexport function registerMemoryCommand(program: Command): void {\n const memory = program.command(\"memory\").description(\"Manage semantic memory indexing and search\");\n\n memory\n .command(\"status\")\n .description(\"Show memory index status\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"--deep\", \"Probe embedding/vector availability\")\n .option(\"--index\", \"Run a refresh before reporting status\")\n .option(\"--include-sessions\", \"Include session transcripts in indexing\")\n .option(\"--verbose\", \"Verbose output\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: StatusOptions) => {\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n try {\n const manager = getManager(options.dataDir, options.includeSessions);\n if (options.index) {\n await manager.sync({ reason: \"cli-status\" });\n }\n const status = manager.status();\n if (options.deep) {\n const [embed, vector] = await Promise.all([\n manager.probeEmbeddingAvailability(),\n manager.probeVectorAvailability(),\n ]);\n (status.custom ??= {}).embeddingProbe = embed;\n (status.custom ??= {}).vectorProbe = { ok: vector };\n }\n if (format === \"json\") {\n writeLine(JSON.stringify(status, null, 2));\n } else {\n writeLine(formatStatus(status, options.deep));\n }\n } catch (err) {\n writeError(`Error getting memory status: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n memory\n .command(\"index\")\n .description(\"Reindex memory files\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"--include-sessions\", \"Include session transcripts in indexing\")\n .option(\"--verbose\", \"Verbose output\")\n .action(async (options: IndexOptions) => {\n try {\n const manager = getManager(options.dataDir, options.includeSessions);\n await manager.sync({ reason: \"cli-index\" });\n writeLine(\"Memory index refreshed.\");\n } catch (err) {\n writeError(`Error indexing memory: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n memory\n .command(\"search [query]\")\n .description(\"Search semantic memory\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"--query <text>\", \"Search query\")\n .option(\"--include-sessions\", \"Include session transcripts in search\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (query: string | undefined, options: SearchOptions) => {\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n const q = options.query?.trim() || query?.trim();\n if (!q) {\n writeError(\"Query is required: provide [query] or --query <text>\");\n process.exit(1);\n }\n try {\n const manager = getManager(options.dataDir, options.includeSessions);\n const results = await manager.search(q);\n if (format === \"json\") {\n writeLine(JSON.stringify(results, null, 2));\n return;\n }\n if (results.length === 0) {\n writeLine(`No results found for: ${q}`);\n return;\n }\n const lines = results.map((r) => {\n const base = `${r.path}:${r.startLine}-${r.endLine} (${r.score.toFixed(4)}) ${r.snippet}`;\n return r.citation ? `${base}\\n${r.citation}` : base;\n });\n writeLine(lines.join(\"\\n\"));\n } catch (err) {\n writeError(`Error searching memory: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","/**\n * Agents command group for @pingclaw/cli.\n * Manages multi-agent configuration (add, delete, list, bind, unbind, set-identity).\n */\n\nimport { Command } from \"commander\";\nimport {\n loadAgentsConfig,\n saveAgentsConfig,\n listAgents,\n listBindings,\n getAgentConfig,\n resolveDefaultAgentId,\n resolveAgentDir,\n normalizeAgentId,\n addAgent,\n removeAgent,\n addBinding,\n removeBindings,\n updateAgentIdentity,\n type AgentConfig,\n type AgentBinding,\n} from \"@pingclaw/agents/config\";\nimport fs from \"node:fs/promises\";\n\n/**\n * Formats an agent binding for display.\n */\nfunction describeBinding(binding: AgentBinding): string {\n const route = binding.match.accountId\n ? `${binding.match.channel}:${binding.match.accountId}`\n : binding.match.channel;\n return `${route} -> ${binding.agentId}`;\n}\n\n/**\n * Lists all configured agents.\n */\nfunction agentsListAction(options: { json?: boolean; bindings?: boolean }) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n const agents = listAgents(config);\n const bindings = listBindings(config);\n const defaultId = resolveDefaultAgentId(config);\n\n if (options.json) {\n console.log(JSON.stringify({ agents, bindings }, null, 2));\n return;\n }\n\n console.log(\"Agents:\");\n for (const agent of agents) {\n const defaultTag = agent.default ? \" (default)\" : \"\";\n const header =\n agent.name && agent.name !== agent.id\n ? `${agent.id}${defaultTag} (${agent.name})`\n : `${agent.id}${defaultTag}`;\n\n console.log(` - ${header}`);\n\n if (agent.identity?.emoji || agent.identity?.name) {\n const identity = [agent.identity.emoji, agent.identity.name]\n .filter(Boolean)\n .join(\" \");\n console.log(` Identity: ${identity}`);\n }\n\n const agentDir = resolveAgentDir(dataDir, agent.id);\n console.log(` Agent dir: ${agentDir}`);\n\n if (agent.model) {\n const modelStr =\n typeof agent.model === \"string\"\n ? agent.model\n : agent.model.primary;\n console.log(` Model: ${modelStr}`);\n }\n\n // 绑定规则\n const agentBindings = bindings.filter((b) => b.agentId === agent.id);\n if (agentBindings.length > 0) {\n console.log(` Routing rules:`);\n for (const binding of agentBindings) {\n console.log(` - ${describeBinding(binding)}`);\n }\n }\n }\n };\n}\n\n/**\n * Adds a new agent.\n */\nfunction agentsAddAction(\n id: string,\n options: { name?: string; model?: string; default?: boolean },\n) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n\n // 检查 ID 是否已存在\n const normalizedId = normalizeAgentId(id);\n if (getAgentConfig(config, normalizedId)) {\n console.error(`Agent \"${id}\" already exists.`);\n process.exit(1);\n }\n\n const newAgent: AgentConfig = {\n id,\n name: options.name,\n model: options.model,\n default: options.default,\n };\n\n const created = await addAgent(dataDir, newAgent);\n if (!created) {\n console.error(`Agent \"${id}\" already exists.`);\n process.exit(1);\n }\n\n const agentDir = resolveAgentDir(dataDir, id);\n console.log(`Agent \"${id}\" added successfully.`);\n console.log(` Agent dir: ${agentDir}`);\n };\n}\n\n/**\n * Deletes an agent.\n */\nfunction agentsDeleteAction(id: string) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n\n const normalizedId = normalizeAgentId(id);\n const agent = getAgentConfig(config, normalizedId);\n\n if (!agent) {\n console.error(`Agent \"${id}\" not found.`);\n process.exit(1);\n }\n\n // 不允许删除默认 agent\n if (agent.default === true) {\n console.error(`Cannot delete default agent \"${id}\".`);\n process.exit(1);\n }\n\n const removed = await removeAgent(dataDir, id);\n if (!removed) {\n console.error(`Failed to delete agent \"${id}\".`);\n process.exit(1);\n }\n\n console.log(`Agent \"${id}\" deleted.`);\n };\n}\n\n/**\n * Binds a channel to an agent.\n */\nfunction agentsBindAction(options: {\n agent?: string;\n bind?: string[];\n}) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n const agentId = options.agent ?? resolveDefaultAgentId(config);\n\n // 验证 agent 存在\n if (!getAgentConfig(config, agentId)) {\n console.error(`Agent \"${agentId}\" not found.`);\n process.exit(1);\n }\n\n if (!options.bind || options.bind.length === 0) {\n console.error(\"Please specify --bind <channel>[:<account>]\");\n process.exit(1);\n }\n\n for (const bindSpec of options.bind) {\n const [channel, ...rest] = bindSpec.split(\":\");\n const accountId = rest.join(\":\");\n\n const validChannels = [\"H5\", \"WEB\", \"KLPA\", \"CRON\"];\n if (!validChannels.includes(channel)) {\n console.error(`Invalid channel: ${channel}`);\n console.error(`Valid channels: ${validChannels.join(\", \")}`);\n process.exit(1);\n }\n\n const binding: AgentBinding = {\n agentId,\n match: {\n channel: channel as \"H5\" | \"WEB\" | \"KLPA\" | \"CRON\",\n accountId: accountId || undefined,\n },\n };\n\n await addBinding(dataDir, binding);\n console.log(`Binding added: ${bindSpec} -> ${agentId}`);\n }\n };\n}\n\n/**\n * Unbinds a channel from an agent.\n */\nfunction agentsUnbindAction(options: {\n agent?: string;\n bind?: string[];\n all?: boolean;\n}) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n const agentId = options.agent ?? resolveDefaultAgentId(config);\n\n // 验证 agent 存在\n if (!getAgentConfig(config, agentId)) {\n console.error(`Agent \"${agentId}\" not found.`);\n process.exit(1);\n }\n\n if (options.all) {\n // 删除该 agent 的所有绑定\n const removed = await removeBindings(dataDir, agentId, \"*\");\n console.log(`Removed ${removed} binding(s) for agent \"${agentId}\".`);\n } else if (options.bind && options.bind.length > 0) {\n // 删除指定绑定\n let totalRemoved = 0;\n for (const bindSpec of options.bind) {\n const [channel, ...rest] = bindSpec.split(\":\");\n const accountId = rest.join(\":\");\n\n const removed = await removeBindings(\n dataDir,\n agentId,\n channel,\n accountId || undefined,\n );\n if (removed > 0) {\n console.log(`Binding removed: ${bindSpec} -> ${agentId}`);\n totalRemoved += removed;\n } else {\n console.log(`No binding found: ${bindSpec} -> ${agentId}`);\n }\n }\n } else {\n console.error('Please specify --bind <channel>[:<account>] or --all');\n process.exit(1);\n }\n };\n}\n\n/**\n * Lists routing bindings.\n */\nfunction agentsBindingsAction(options: {\n agent?: string;\n json?: boolean;\n}) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n let bindings = listBindings(config);\n\n if (options.agent) {\n bindings = bindings.filter((b) => b.agentId === options.agent);\n }\n\n if (options.json) {\n console.log(JSON.stringify(bindings, null, 2));\n return;\n }\n\n if (bindings.length === 0) {\n console.log(\"No bindings configured.\");\n return;\n }\n\n console.log(\"Routing bindings:\");\n for (const binding of bindings) {\n console.log(` ${describeBinding(binding)}`);\n }\n };\n}\n\n/**\n * Sets agent identity.\n */\nfunction agentsSetIdentityAction(options: {\n agent?: string;\n name?: string;\n emoji?: string;\n avatar?: string;\n}) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n const agentId = options.agent ?? resolveDefaultAgentId(config);\n\n // 验证 agent 存在\n if (!getAgentConfig(config, agentId)) {\n console.error(`Agent \"${agentId}\" not found.`);\n process.exit(1);\n }\n\n const updated = await updateAgentIdentity(dataDir, agentId, {\n name: options.name,\n emoji: options.emoji,\n avatar: options.avatar,\n });\n\n if (!updated) {\n console.error(`Failed to update identity for agent \"${agentId}\".`);\n process.exit(1);\n }\n\n console.log(`Identity updated for agent \"${agentId}\".`);\n };\n}\n\n/**\n * Registers all agents subcommands with the program.\n */\nexport function registerAgentsCommands(\n program: Command,\n getDataDir: () => string,\n): void {\n const agentsCmd = program\n .command(\"agents\")\n .description(\"Manage agents\");\n\n // agents list\n agentsCmd\n .command(\"list\")\n .description(\"List all configured agents\")\n .option(\"-j, --json\", \"Output as JSON\")\n .option(\"-b, --bindings\", \"Show detailed binding rules\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsListAction(opts)(dataDir);\n });\n\n // agents add\n agentsCmd\n .command(\"add <id>\")\n .description(\"Add a new agent\")\n .option(\"-n, --name <name>\", \"Display name\")\n .option(\"-m, --model <model>\", \"Model identifier\")\n .option(\"--default\", \"Mark as default agent\")\n .action(async (id, opts) => {\n const dataDir = getDataDir();\n await agentsAddAction(id, opts)(dataDir);\n });\n\n // agents delete\n agentsCmd\n .command(\"delete <id>\")\n .description(\"Delete an agent\")\n .action(async (id) => {\n const dataDir = getDataDir();\n await agentsDeleteAction(id)(dataDir);\n });\n\n // agents bind\n agentsCmd\n .command(\"bind\")\n .description(\"Bind a channel to an agent\")\n .option(\"-a, --agent <id>\", \"Target agent ID\")\n .option(\"-b, --bind <channel...>\", \"Channel binding (e.g., WEB, KLPA:ops)\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsBindAction(opts)(dataDir);\n });\n\n // agents unbind\n agentsCmd\n .command(\"unbind\")\n .description(\"Unbind a channel from an agent\")\n .option(\"-a, --agent <id>\", \"Target agent ID\")\n .option(\"-b, --bind <channel...>\", \"Channel binding to remove\")\n .option(\"--all\", \"Remove all bindings for the agent\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsUnbindAction(opts)(dataDir);\n });\n\n // agents bindings\n agentsCmd\n .command(\"bindings\")\n .description(\"List routing bindings\")\n .option(\"-a, --agent <id>\", \"Filter by agent ID\")\n .option(\"-j, --json\", \"Output as JSON\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsBindingsAction(opts)(dataDir);\n });\n\n // agents set-identity\n agentsCmd\n .command(\"set-identity\")\n .description(\"Set agent identity\")\n .option(\"-a, --agent <id>\", \"Target agent ID\")\n .option(\"-n, --name <name>\", \"Agent name\")\n .option(\"-e, --emoji <emoji>\", \"Agent emoji\")\n .option(\"--avatar <path>\", \"Avatar path\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsSetIdentityAction(opts)(dataDir);\n });\n}\n","import type { Command } from \"commander\";\nimport path from \"node:path\";\nimport {\n initializePluginSystem,\n normalizePluginsConfig,\n type PluginsConfig,\n type PluginRecord,\n} from \"@pingclaw/agents\";\nimport { loadPluginsConfig, savePluginsConfig } from \"../plugins-config.js\";\nimport { writeError, writeLine } from \"../output.js\";\n\nfunction resolveWorkspaceDir(dataDir: string): string {\n return path.join(dataDir, \"workspace\");\n}\n\nfunction resolveBundledDir(): string | undefined {\n const raw = process.env.PINGCLAW_PLUGINS_BUNDLED_DIR;\n return raw ? raw.trim() || undefined : undefined;\n}\n\nfunction printPluginList(records: PluginRecord[]): void {\n if (records.length === 0) {\n writeLine(\"No plugins discovered.\");\n return;\n }\n for (const record of records) {\n const status = record.status.padEnd(8, \" \");\n writeLine(`${record.id} ${status} ${record.origin} ${record.source}`);\n }\n}\n\nfunction printPluginInfo(record: PluginRecord): void {\n writeLine(`id: ${record.id}`);\n writeLine(`status: ${record.status}`);\n writeLine(`origin: ${record.origin}`);\n writeLine(`source: ${record.source}`);\n writeLine(`enabled: ${record.enabled}`);\n if (record.error) {\n writeLine(`error: ${record.error}`);\n }\n writeLine(`tools: ${record.toolCount}`);\n writeLine(`hooks: ${record.hookCount}`);\n if (record.skills.length > 0) {\n writeLine(`skills: ${record.skills.join(\", \")}`);\n }\n}\n\nfunction normalizeAllowlist(list: string[] | undefined): string[] {\n return Array.from(\n new Set((list ?? []).map((entry) => entry.trim()).filter(Boolean)),\n );\n}\n\nfunction printAllowlist(list: string[]): void {\n if (list.length === 0) {\n writeLine(\"LLM allowlist is empty.\");\n return;\n }\n for (const entry of list) {\n writeLine(entry);\n }\n}\n\nexport function registerPluginsCommand(program: Command, getDataDir: () => string): void {\n const cmd = program.command(\"plugins\").description(\"Manage PingClaw plugins\");\n\n cmd\n .command(\"list\")\n .description(\"List discovered plugins\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = await loadPluginsConfig(dataDir);\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n printPluginList(system.registry.plugins);\n });\n\n cmd\n .command(\"info\")\n .description(\"Show plugin details\")\n .argument(\"<id>\", \"Plugin id\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (id: string, options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = await loadPluginsConfig(dataDir);\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n const record = system.registry.plugins.find((entry) => entry.id === id);\n if (!record) {\n writeError(`Plugin not found: ${id}`);\n process.exit(1);\n }\n printPluginInfo(record);\n });\n\n cmd\n .command(\"enable\")\n .description(\"Enable a plugin\")\n .argument(\"<id>\", \"Plugin id\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (id: string, options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const normalized = normalizePluginsConfig(config);\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n const exists = system.registry.plugins.some((entry) => entry.id === id);\n if (!exists) {\n writeError(`Plugin not found: ${id}`);\n process.exit(1);\n }\n const updated: PluginsConfig = {\n ...config,\n entries: {\n ...config.entries,\n [id]: { ...(config.entries?.[id] ?? {}), enabled: true },\n },\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(`Enabled ${id}`);\n if (normalized.allow.length > 0 && !normalized.allow.includes(id)) {\n writeLine(\"Note: plugins.allow is set; add this plugin id to allowlist if needed.\");\n }\n });\n\n cmd\n .command(\"disable\")\n .description(\"Disable a plugin\")\n .argument(\"<id>\", \"Plugin id\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (id: string, options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n const exists = system.registry.plugins.some((entry) => entry.id === id);\n if (!exists) {\n writeError(`Plugin not found: ${id}`);\n process.exit(1);\n }\n const updated: PluginsConfig = {\n ...config,\n entries: {\n ...config.entries,\n [id]: { ...(config.entries?.[id] ?? {}), enabled: false },\n },\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(`Disabled ${id}`);\n });\n\n cmd\n .command(\"doctor\")\n .description(\"Validate plugin configuration\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = await loadPluginsConfig(dataDir);\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n if (system.diagnostics.length === 0) {\n writeLine(\"No plugin issues detected.\");\n return;\n }\n for (const diag of system.diagnostics) {\n const prefix = diag.level === \"error\" ? \"ERROR\" : \"WARN\";\n const id = diag.pluginId ? ` ${diag.pluginId}` : \"\";\n writeLine(`${prefix}${id}: ${diag.message}`);\n }\n const hasError = system.diagnostics.some((d) => d.level === \"error\");\n if (hasError) {\n process.exit(1);\n }\n });\n\n const llmCmd = cmd.command(\"llm-allow\").description(\"Manage plugin LLM allowlist\");\n\n llmCmd\n .command(\"list\")\n .description(\"List LLM allowlist entries\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = await loadPluginsConfig(dataDir);\n const allowlist = normalizeAllowlist(config?.llmAllowlist);\n printAllowlist(allowlist);\n });\n\n llmCmd\n .command(\"add\")\n .description(\"Add entries to the LLM allowlist (plugin id or tool name)\")\n .argument(\"<entry...>\", \"Plugin id or tool name\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (entries: string[], options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const allowlist = normalizeAllowlist([...((config.llmAllowlist ?? [])), ...entries]);\n const updated: PluginsConfig = {\n ...config,\n llmAllowlist: allowlist,\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(`LLM allowlist updated (${allowlist.length} entries).`);\n });\n\n llmCmd\n .command(\"remove\")\n .description(\"Remove entries from the LLM allowlist\")\n .argument(\"<entry...>\", \"Plugin id or tool name\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (entries: string[], options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const removeSet = new Set(entries.map((entry) => entry.trim()).filter(Boolean));\n const current = normalizeAllowlist(config.llmAllowlist);\n const allowlist = current.filter((entry) => !removeSet.has(entry));\n const updated: PluginsConfig = {\n ...config,\n llmAllowlist: allowlist,\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(`LLM allowlist updated (${allowlist.length} entries).`);\n });\n\n llmCmd\n .command(\"clear\")\n .description(\"Clear the LLM allowlist\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const updated: PluginsConfig = {\n ...config,\n llmAllowlist: [],\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(\"LLM allowlist cleared.\");\n });\n}\n","/**\n * Commander program setup for @pingclaw/cli.\n * Exported separately from the binary entrypoint to allow unit testing.\n */\n\nimport { Command } from \"commander\";\nimport { registerBootstrapCommand } from \"./commands/bootstrap.js\";\nimport { registerRunCommand } from \"./commands/run.js\";\nimport { registerSessionsCommand } from \"./commands/sessions.js\";\nimport { registerMemoryCommand } from \"./commands/memory.js\";\nimport { registerAgentsCommands } from \"./commands/agents.js\";\nimport { registerPluginsCommand } from \"./commands/plugins.js\";\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\nconst cliPackage = require(\"../package.json\") as { version: string };\n\n/**\n * Resolves the data directory from environment or current working directory.\n */\nexport function getDataDir(): string {\n return process.env.PINGCLAW_DATA_DIR || process.cwd();\n}\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name(\"pingclaw\")\n .description(\"PingClaw CLI — runs agent tasks in a containerized environment\")\n .version(cliPackage.version);\n\n registerRunCommand(program);\n registerSessionsCommand(program);\n registerBootstrapCommand(program);\n registerMemoryCommand(program);\n registerAgentsCommands(program, getDataDir);\n registerPluginsCommand(program, getDataDir);\n\n return program;\n}\n"],"mappings":"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"}
|