poe-code 3.0.11 → 3.0.13
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/cli/commands/mcp.js +32 -27
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/skill.d.ts +3 -0
- package/dist/cli/commands/skill.js +232 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/commands/spawn.js +114 -35
- package/dist/cli/commands/spawn.js.map +1 -1
- package/dist/cli/mcp-output-format.d.ts +2 -0
- package/dist/cli/mcp-output-format.js +22 -0
- package/dist/cli/mcp-output-format.js.map +1 -0
- package/dist/cli/mcp-server.d.ts +6 -6
- package/dist/cli/mcp-server.js +117 -63
- package/dist/cli/mcp-server.js.map +1 -1
- package/dist/cli/program.js +5 -0
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/service-registry.js +13 -1
- package/dist/cli/service-registry.js.map +1 -1
- package/dist/sdk/spawn.d.ts +20 -12
- package/dist/sdk/spawn.js +90 -36
- package/dist/sdk/spawn.js.map +1 -1
- package/dist/sdk/types.d.ts +4 -0
- package/package.json +7 -3
- package/dist/cli/mcp-agents.d.ts +0 -8
- package/dist/cli/mcp-agents.js +0 -60
- package/dist/cli/mcp-agents.js.map +0 -1
package/dist/cli/commands/mcp.js
CHANGED
|
@@ -3,12 +3,11 @@ import { loadCredentials } from "../../services/credentials.js";
|
|
|
3
3
|
import { initializeClient } from "../../services/client-instance.js";
|
|
4
4
|
import { runMcpServerWithTransport, formatMcpToolsDocs } from "../mcp-server.js";
|
|
5
5
|
import { createExecutionResources, resolveCommandFlags } from "./shared.js";
|
|
6
|
-
import {
|
|
7
|
-
import { supportedAgents, configure, unconfigure } from "@poe-code/agent-mcp-config";
|
|
6
|
+
import { parseMcpOutputFormatPreferences } from "../mcp-output-format.js";
|
|
7
|
+
import { supportedAgents, configure, unconfigure, resolveAgentSupport } from "@poe-code/agent-mcp-config";
|
|
8
8
|
import { getCurrentExecutionContext, toMcpServerCommand } from "../../utils/execution-context.js";
|
|
9
|
-
import { DEFAULT_AGENT, MCP_AGENT_PROFILES, formatAgentsList, getAgentProfile } from "../mcp-agents.js";
|
|
10
9
|
const DEFAULT_MCP_AGENT = "claude-code";
|
|
11
|
-
function createMcpServerEntry(
|
|
10
|
+
function createMcpServerEntry() {
|
|
12
11
|
const context = getCurrentExecutionContext(import.meta.url);
|
|
13
12
|
const mcpCommand = toMcpServerCommand(context.command, "mcp");
|
|
14
13
|
return {
|
|
@@ -16,20 +15,18 @@ function createMcpServerEntry(profileName = DEFAULT_AGENT) {
|
|
|
16
15
|
config: {
|
|
17
16
|
transport: "stdio",
|
|
18
17
|
command: mcpCommand.command,
|
|
19
|
-
args: [...mcpCommand.args, "serve"
|
|
18
|
+
args: [...mcpCommand.args, "serve"]
|
|
20
19
|
}
|
|
21
20
|
};
|
|
22
21
|
}
|
|
23
22
|
function buildHelpText() {
|
|
24
|
-
const server = createMcpServerEntry(
|
|
23
|
+
const server = createMcpServerEntry();
|
|
25
24
|
const lines = [
|
|
26
25
|
"",
|
|
27
26
|
"Configuration:",
|
|
28
27
|
JSON.stringify({ [server.name]: server.config }, null, 2),
|
|
29
28
|
"",
|
|
30
|
-
formatMcpToolsDocs()
|
|
31
|
-
"",
|
|
32
|
-
formatAgentsList()
|
|
29
|
+
formatMcpToolsDocs()
|
|
33
30
|
];
|
|
34
31
|
return lines.join("\n");
|
|
35
32
|
}
|
|
@@ -44,15 +41,10 @@ export function registerMcpCommand(program, container) {
|
|
|
44
41
|
mcp
|
|
45
42
|
.command("serve")
|
|
46
43
|
.description("Run MCP server on stdin/stdout")
|
|
47
|
-
.option("--
|
|
44
|
+
.option("--output-format <format>", 'Preferred MCP media output format(s): "url", "base64", or comma-separated list (default: "url").')
|
|
48
45
|
.addHelpText("after", buildHelpText())
|
|
49
|
-
.action(async
|
|
50
|
-
|
|
51
|
-
const profile = getAgentProfile(agent);
|
|
52
|
-
if (!profile) {
|
|
53
|
-
throw new ValidationError(`Unknown agent: ${agent}. Available agents: ${Object.keys(MCP_AGENT_PROFILES).join(", ")}`);
|
|
54
|
-
}
|
|
55
|
-
await runMcpServer(container, profile);
|
|
46
|
+
.action(async (options) => {
|
|
47
|
+
await runMcpServer(container, { outputFormat: options.outputFormat });
|
|
56
48
|
});
|
|
57
49
|
mcp
|
|
58
50
|
.command("configure [agent]")
|
|
@@ -79,11 +71,17 @@ export function registerMcpCommand(program, container) {
|
|
|
79
71
|
}
|
|
80
72
|
}
|
|
81
73
|
resources.logger.intro(`mcp configure ${agent}`);
|
|
82
|
-
|
|
74
|
+
const support = resolveAgentSupport(agent);
|
|
75
|
+
if (support.status === "unknown") {
|
|
83
76
|
resources.logger.error(`Unknown agent: ${agent}`);
|
|
84
77
|
return;
|
|
85
78
|
}
|
|
86
|
-
|
|
79
|
+
if (support.status === "unsupported") {
|
|
80
|
+
resources.logger.error(`MCP not supported for ${support.id}.`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const resolvedAgent = support.id ?? agent;
|
|
84
|
+
await configure(resolvedAgent, createMcpServerEntry(), {
|
|
87
85
|
fs: container.fs,
|
|
88
86
|
homeDir: container.env.homeDir,
|
|
89
87
|
platform: process.platform,
|
|
@@ -102,8 +100,8 @@ export function registerMcpCommand(program, container) {
|
|
|
102
100
|
}
|
|
103
101
|
});
|
|
104
102
|
resources.context.complete({
|
|
105
|
-
success: `Configured MCP for ${
|
|
106
|
-
dry: `Would configure MCP for ${
|
|
103
|
+
success: `Configured MCP for ${resolvedAgent}.`,
|
|
104
|
+
dry: `Would configure MCP for ${resolvedAgent}.`
|
|
107
105
|
});
|
|
108
106
|
resources.context.finalize();
|
|
109
107
|
});
|
|
@@ -114,11 +112,17 @@ export function registerMcpCommand(program, container) {
|
|
|
114
112
|
const flags = resolveCommandFlags(program);
|
|
115
113
|
const resources = createExecutionResources(container, flags, "mcp");
|
|
116
114
|
resources.logger.intro(`mcp unconfigure ${agent}`);
|
|
117
|
-
|
|
115
|
+
const support = resolveAgentSupport(agent);
|
|
116
|
+
if (support.status === "unknown") {
|
|
118
117
|
resources.logger.error(`Unknown agent: ${agent}`);
|
|
119
118
|
return;
|
|
120
119
|
}
|
|
121
|
-
|
|
120
|
+
if (support.status === "unsupported") {
|
|
121
|
+
resources.logger.error(`MCP not supported for ${support.id}.`);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const resolvedAgent = support.id ?? agent;
|
|
125
|
+
await unconfigure(resolvedAgent, "poe-code", {
|
|
122
126
|
fs: container.fs,
|
|
123
127
|
homeDir: container.env.homeDir,
|
|
124
128
|
platform: process.platform,
|
|
@@ -137,13 +141,14 @@ export function registerMcpCommand(program, container) {
|
|
|
137
141
|
}
|
|
138
142
|
});
|
|
139
143
|
resources.context.complete({
|
|
140
|
-
success: `Removed MCP configuration from ${
|
|
141
|
-
dry: `Would remove MCP configuration from ${
|
|
144
|
+
success: `Removed MCP configuration from ${resolvedAgent}.`,
|
|
145
|
+
dry: `Would remove MCP configuration from ${resolvedAgent}.`
|
|
142
146
|
});
|
|
143
147
|
resources.context.finalize();
|
|
144
148
|
});
|
|
145
149
|
}
|
|
146
|
-
async function runMcpServer(container,
|
|
150
|
+
async function runMcpServer(container, options) {
|
|
151
|
+
const outputFormatPreferences = parseMcpOutputFormatPreferences(options.outputFormat);
|
|
147
152
|
const apiKey = await loadCredentials({
|
|
148
153
|
fs: container.fs,
|
|
149
154
|
filePath: container.env.credentialsPath
|
|
@@ -158,6 +163,6 @@ async function runMcpServer(container, profile) {
|
|
|
158
163
|
baseUrl: container.env.poeApiBaseUrl,
|
|
159
164
|
httpClient: container.httpClient
|
|
160
165
|
});
|
|
161
|
-
await runMcpServerWithTransport(
|
|
166
|
+
await runMcpServerWithTransport(outputFormatPreferences);
|
|
162
167
|
}
|
|
163
168
|
//# sourceMappingURL=mcp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,SAAS,EACT,WAAW,EACX,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAExC,SAAS,oBAAoB;IAC3B,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9D,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;SACpC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAa;QACtB,EAAE;QACF,gBAAgB;QAChB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,EAAE;QACF,kBAAkB,EAAE;KACrB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,SAAuB;IAEvB,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,qBAAqB,CAAC;SAClC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC;SACrC,MAAM,CAAC,KAAK;QACX,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CACL,0BAA0B,EAC1B,kGAAkG,CACnG;SACA,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,OAAkC,EAAE,EAAE;QACnD,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAEpE,IAAI,KAAK,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,KAAK,GAAG,iBAAiB,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;oBAC5B,OAAO,EAAE,4BAA4B;oBACrC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC9D,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBACD,KAAK,GAAG,QAAkB,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACrC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC;QAC1C,MAAM,SAAS,CAAC,aAAa,EAAE,oBAAoB,EAAE,EAAE;YACrD,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAwC;YAC1D,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE;gBACT,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;oBACnB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;gBACD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;oBAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACrC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;aACF;SACF,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,OAAO,EAAE,sBAAsB,aAAa,GAAG;YAC/C,GAAG,EAAE,2BAA2B,aAAa,GAAG;SACjD,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAEpE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACrC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC;QAC1C,MAAM,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE;YAC3C,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAwC;YAC1D,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE;gBACT,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;oBACnB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;gBACD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;oBAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACrC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;aACF;SACF,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,OAAO,EAAE,kCAAkC,aAAa,GAAG;YAC3D,GAAG,EAAE,uCAAuC,aAAa,GAAG;SAC7D,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,SAAuB,EACvB,OAAkC;IAElC,MAAM,uBAAuB,GAAG,+BAA+B,CAC7D,OAAO,CAAC,YAAY,CACrB,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe;KACxC,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,gBAAgB,CAAC;QACrB,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe;QAC9C,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa;QACpC,UAAU,EAAE,SAAS,CAAC,UAAU;KACjC,CAAC,CAAC;IAEH,MAAM,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { select, isCancel, cancel } from "@poe-code/design-system";
|
|
2
|
+
import { supportedAgents, configure, unconfigure, resolveAgentSupport } from "@poe-code/agent-skill-config";
|
|
3
|
+
import { createExecutionResources, resolveCommandFlags } from "./shared.js";
|
|
4
|
+
const DEFAULT_SKILL_AGENT = "claude-code";
|
|
5
|
+
function buildHelpText() {
|
|
6
|
+
return [
|
|
7
|
+
"",
|
|
8
|
+
"Skill directories:",
|
|
9
|
+
"- poe-code skill configure installs skill directories for supported agents.",
|
|
10
|
+
"- poe-code skill unconfigure removes skill directories."
|
|
11
|
+
].join("\n");
|
|
12
|
+
}
|
|
13
|
+
export function registerSkillCommand(program, container) {
|
|
14
|
+
const skill = program
|
|
15
|
+
.command("skill")
|
|
16
|
+
.description("Skill directory commands")
|
|
17
|
+
.addHelpText("after", buildHelpText())
|
|
18
|
+
.action(async function () {
|
|
19
|
+
this.help();
|
|
20
|
+
});
|
|
21
|
+
skill
|
|
22
|
+
.command("configure [agent]")
|
|
23
|
+
.description("Install skill directories for an agent")
|
|
24
|
+
.option("--agent <name>", "Agent to configure skills for")
|
|
25
|
+
.option("--local", "Use local scope (in the current project)")
|
|
26
|
+
.option("--global", "Use global scope (in the user home directory)")
|
|
27
|
+
.action(async (agentArg, options) => {
|
|
28
|
+
const flags = resolveCommandFlags(program);
|
|
29
|
+
const resources = createExecutionResources(container, flags, "skill");
|
|
30
|
+
if (options.local && options.global) {
|
|
31
|
+
resources.logger.error("Use either --local or --global, not both.");
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
let agent = options.agent ?? agentArg;
|
|
35
|
+
if (!agent) {
|
|
36
|
+
if (flags.assumeYes) {
|
|
37
|
+
agent = DEFAULT_SKILL_AGENT;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const selected = await select({
|
|
41
|
+
message: "Select agent to configure:",
|
|
42
|
+
options: supportedAgents.map((a) => ({ value: a, label: a }))
|
|
43
|
+
});
|
|
44
|
+
if (isCancel(selected)) {
|
|
45
|
+
cancel("Operation cancelled");
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
agent = selected;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const support = resolveAgentSupport(agent);
|
|
52
|
+
if (support.status === "unknown") {
|
|
53
|
+
resources.logger.error(`Unknown agent: ${agent}`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (support.status === "unsupported") {
|
|
57
|
+
resources.logger.error(`Skills not supported for ${support.id}.`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const resolvedAgent = support.id ?? agent;
|
|
61
|
+
const config = support.config;
|
|
62
|
+
let scope;
|
|
63
|
+
if (options.local) {
|
|
64
|
+
scope = "local";
|
|
65
|
+
}
|
|
66
|
+
else if (options.global) {
|
|
67
|
+
scope = "global";
|
|
68
|
+
}
|
|
69
|
+
else if (flags.assumeYes) {
|
|
70
|
+
scope = "global";
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const selected = await select({
|
|
74
|
+
message: "Select scope:",
|
|
75
|
+
options: [
|
|
76
|
+
{ value: "global", label: "Global" },
|
|
77
|
+
{ value: "local", label: "Local" }
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
if (isCancel(selected)) {
|
|
81
|
+
cancel("Operation cancelled");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
scope = selected;
|
|
85
|
+
}
|
|
86
|
+
const displayPath = scope === "global"
|
|
87
|
+
? config.globalSkillDir
|
|
88
|
+
: config.localSkillDir.startsWith("./")
|
|
89
|
+
? config.localSkillDir
|
|
90
|
+
: `./${config.localSkillDir}`;
|
|
91
|
+
resources.logger.intro(`skill configure ${resolvedAgent}`);
|
|
92
|
+
await configure(resolvedAgent, {
|
|
93
|
+
fs: container.fs,
|
|
94
|
+
homeDir: container.env.homeDir,
|
|
95
|
+
cwd: container.env.cwd,
|
|
96
|
+
scope,
|
|
97
|
+
dryRun: flags.dryRun,
|
|
98
|
+
observers: {
|
|
99
|
+
onStart: (details) => {
|
|
100
|
+
if (flags.dryRun) {
|
|
101
|
+
resources.logger.dryRun(`Would ${details.label.toLowerCase()}`);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
onComplete: (details, outcome) => {
|
|
105
|
+
if (!flags.dryRun && outcome.changed) {
|
|
106
|
+
resources.logger.verbose(details.label);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
resources.context.complete({
|
|
112
|
+
success: `Configured skills for ${resolvedAgent} at ${displayPath}`,
|
|
113
|
+
dry: `Would configure skills for ${resolvedAgent} at ${displayPath}`
|
|
114
|
+
});
|
|
115
|
+
resources.context.finalize();
|
|
116
|
+
});
|
|
117
|
+
skill
|
|
118
|
+
.command("unconfigure [agent]")
|
|
119
|
+
.description("Remove skill directories for an agent")
|
|
120
|
+
.option("--agent <name>", "Agent to unconfigure skills for")
|
|
121
|
+
.option("--local", "Use local scope (in the current project)")
|
|
122
|
+
.option("--global", "Use global scope (in the user home directory)")
|
|
123
|
+
.option("--force", "Remove directory even if it contains files")
|
|
124
|
+
.action(async (agentArg, options) => {
|
|
125
|
+
const flags = resolveCommandFlags(program);
|
|
126
|
+
const resources = createExecutionResources(container, flags, "skill");
|
|
127
|
+
if (options.local && options.global) {
|
|
128
|
+
resources.logger.error("Use either --local or --global, not both.");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
let agent = options.agent ?? agentArg;
|
|
132
|
+
if (!agent) {
|
|
133
|
+
const selected = await select({
|
|
134
|
+
message: "Select agent to unconfigure:",
|
|
135
|
+
options: supportedAgents.map((a) => ({ value: a, label: a }))
|
|
136
|
+
});
|
|
137
|
+
if (isCancel(selected)) {
|
|
138
|
+
cancel("Operation cancelled");
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
agent = selected;
|
|
142
|
+
}
|
|
143
|
+
const support = resolveAgentSupport(agent);
|
|
144
|
+
if (support.status === "unknown") {
|
|
145
|
+
resources.logger.error(`Unknown agent: ${agent}`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (support.status === "unsupported") {
|
|
149
|
+
resources.logger.error(`Skills not supported for ${support.id}.`);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const resolvedAgent = support.id ?? agent;
|
|
153
|
+
const config = support.config;
|
|
154
|
+
let scope;
|
|
155
|
+
if (options.local) {
|
|
156
|
+
scope = "local";
|
|
157
|
+
}
|
|
158
|
+
else if (options.global) {
|
|
159
|
+
scope = "global";
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
const selected = await select({
|
|
163
|
+
message: "Select scope:",
|
|
164
|
+
options: [
|
|
165
|
+
{ value: "global", label: "Global" },
|
|
166
|
+
{ value: "local", label: "Local" }
|
|
167
|
+
]
|
|
168
|
+
});
|
|
169
|
+
if (isCancel(selected)) {
|
|
170
|
+
cancel("Operation cancelled");
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
scope = selected;
|
|
174
|
+
}
|
|
175
|
+
const displayPath = scope === "global" ? config.globalSkillDir : config.localSkillDir;
|
|
176
|
+
resources.logger.intro(`skill unconfigure ${resolvedAgent}`);
|
|
177
|
+
let targetPath;
|
|
178
|
+
let removed = false;
|
|
179
|
+
await unconfigure(resolvedAgent, {
|
|
180
|
+
fs: container.fs,
|
|
181
|
+
homeDir: container.env.homeDir,
|
|
182
|
+
cwd: container.env.cwd,
|
|
183
|
+
scope,
|
|
184
|
+
force: Boolean(options.force),
|
|
185
|
+
dryRun: flags.dryRun,
|
|
186
|
+
observers: {
|
|
187
|
+
onStart: (details) => {
|
|
188
|
+
if (flags.dryRun) {
|
|
189
|
+
resources.logger.dryRun(`Would ${details.label.toLowerCase()}`);
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
onComplete: (details, outcome) => {
|
|
193
|
+
targetPath = details.targetPath;
|
|
194
|
+
removed = outcome.changed;
|
|
195
|
+
if (!flags.dryRun && outcome.changed) {
|
|
196
|
+
resources.logger.verbose(details.label);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
if (flags.dryRun) {
|
|
202
|
+
resources.context.complete({
|
|
203
|
+
success: `Removed skill directory for ${resolvedAgent} at ${displayPath}`,
|
|
204
|
+
dry: `Would remove skill directory for ${resolvedAgent} at ${displayPath}`
|
|
205
|
+
});
|
|
206
|
+
resources.context.finalize();
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (removed) {
|
|
210
|
+
resources.context.complete({
|
|
211
|
+
success: `Removed skill directory for ${resolvedAgent} at ${displayPath}`,
|
|
212
|
+
dry: `Would remove skill directory for ${resolvedAgent} at ${displayPath}`
|
|
213
|
+
});
|
|
214
|
+
resources.context.finalize();
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
if (!options.force && targetPath) {
|
|
218
|
+
try {
|
|
219
|
+
const entries = await container.fs.readdir(targetPath);
|
|
220
|
+
if (entries.length > 0) {
|
|
221
|
+
resources.logger.warn(`Skill directory for ${resolvedAgent} at ${displayPath} has files. Use --force to remove.`);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// Directory missing or unreadable.
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
resources.logger.info(`No skill directory found for ${resolvedAgent} at ${displayPath}.`);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/cli/commands/skill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EACL,eAAe,EACf,SAAS,EACT,WAAW,EACX,mBAAmB,EAEpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAE1C,SAAS,aAAa;IACpB,OAAO;QACL,EAAE;QACF,oBAAoB;QACpB,6EAA6E;QAC7E,yDAAyD;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,SAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0BAA0B,CAAC;SACvC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC;SACrC,MAAM,CAAC,KAAK;QACX,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,gBAAgB,EAAE,+BAA+B,CAAC;SACzD,MAAM,CAAC,SAAS,EAAE,0CAA0C,CAAC;SAC7D,MAAM,CAAC,UAAU,EAAE,+CAA+C,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEtE,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,IAAI,KAAK,GAAuB,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,KAAK,GAAG,mBAAmB,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;oBAC5B,OAAO,EAAE,4BAA4B;oBACrC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC9D,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBACD,KAAK,GAAG,QAAkB,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACrC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;QAE/B,IAAI,KAAiB,CAAC;QACtB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,GAAG,OAAO,CAAC;QAClB,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,KAAK,GAAG,QAAQ,CAAC;QACnB,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAC3B,KAAK,GAAG,QAAQ,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;gBAC5B,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACpC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;iBACnC;aACF,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,KAAK,GAAG,QAAsB,CAAC;QACjC,CAAC;QAED,MAAM,WAAW,GACf,KAAK,KAAK,QAAQ;YAChB,CAAC,CAAC,MAAM,CAAC,cAAc;YACvB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;gBACrC,CAAC,CAAC,MAAM,CAAC,aAAa;gBACtB,CAAC,CAAC,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;QAEpC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC;QAE3D,MAAM,SAAS,CAAC,aAAa,EAAE;YAC7B,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO;YAC9B,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG;YACtB,KAAK;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE;gBACT,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;oBACnB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;gBACD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;oBAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACrC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;aACF;SACF,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,OAAO,EAAE,yBAAyB,aAAa,OAAO,WAAW,EAAE;YACnE,GAAG,EAAE,8BAA8B,aAAa,OAAO,WAAW,EAAE;SACrE,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;SAC3D,MAAM,CAAC,SAAS,EAAE,0CAA0C,CAAC;SAC7D,MAAM,CAAC,UAAU,EAAE,+CAA+C,CAAC;SACnE,MAAM,CAAC,SAAS,EAAE,4CAA4C,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEtE,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,IAAI,KAAK,GAAuB,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;gBAC5B,OAAO,EAAE,8BAA8B;gBACvC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;aAC9D,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,KAAK,GAAG,QAAkB,CAAC;QAC7B,CAAC;QAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACrC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;QAE/B,IAAI,KAA6B,CAAC;QAClC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,GAAG,OAAO,CAAC;QAClB,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,KAAK,GAAG,QAAQ,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;gBAC5B,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACpC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;iBACnC;aACF,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,KAAK,GAAG,QAAsB,CAAC;QACjC,CAAC;QAED,MAAM,WAAW,GACf,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAEpE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC;QAE7D,IAAI,UAA8B,CAAC;QACnC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,WAAW,CAAC,aAAa,EAAE;YAC/B,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO;YAC9B,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG;YACtB,KAAK;YACL,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE;gBACT,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;oBACnB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;gBACD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;oBAC/B,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;oBAChC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;oBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACrC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;aACF;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACzB,OAAO,EAAE,+BAA+B,aAAa,OAAO,WAAW,EAAE;gBACzE,GAAG,EAAE,oCAAoC,aAAa,OAAO,WAAW,EAAE;aAC3E,CAAC,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACzB,OAAO,EAAE,+BAA+B,aAAa,OAAO,WAAW,EAAE;gBACzE,GAAG,EAAE,oCAAoC,aAAa,OAAO,WAAW,EAAE;aAC3E,CAAC,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACvD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,SAAS,CAAC,MAAM,CAAC,IAAI,CACnB,uBAAuB,aAAa,OAAO,WAAW,oCAAoC,CAC3F,CAAC;oBACF,OAAO;gBACT,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,mCAAmC;YACrC,CAAC;QACH,CAAC;QAED,SAAS,CAAC,MAAM,CAAC,IAAI,CACnB,gCAAgC,aAAa,OAAO,WAAW,GAAG,CACnE,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
+
import { renderAcpStream } from "@poe-code/agent-spawn";
|
|
3
|
+
import { allAgents, resolveAgentId } from "@poe-code/agent-defs";
|
|
4
|
+
import { text } from "@poe-code/design-system";
|
|
2
5
|
import { createExecutionResources, resolveCommandFlags, resolveServiceAdapter, formatServiceList } from "./shared.js";
|
|
3
6
|
import { spawnCore } from "../../sdk/spawn-core.js";
|
|
7
|
+
import { spawn as spawnSdk } from "../../sdk/spawn.js";
|
|
4
8
|
export function registerSpawnCommand(program, container, options = {}) {
|
|
5
9
|
const spawnServices = container.registry
|
|
6
10
|
.list()
|
|
@@ -73,47 +77,122 @@ export function registerSpawnCommand(program, container, options = {}) {
|
|
|
73
77
|
resources.logger.intro(`spawn ${canonicalService}`);
|
|
74
78
|
const canonicalHandler = options.handlers?.[canonicalService];
|
|
75
79
|
if (canonicalHandler) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
try {
|
|
81
|
+
await canonicalHandler({
|
|
82
|
+
container,
|
|
83
|
+
service: canonicalService,
|
|
84
|
+
options: spawnOptions,
|
|
85
|
+
flags,
|
|
86
|
+
resources
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
resources.context.finalize();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
if (flags.dryRun) {
|
|
96
|
+
// spawnCore already logs the dry run details.
|
|
97
|
+
await spawnCore(container, canonicalService, spawnOptions, {
|
|
98
|
+
dryRun: true,
|
|
99
|
+
verbose: flags.verbose
|
|
100
|
+
});
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const { events, result } = spawnSdk(canonicalService, {
|
|
104
|
+
prompt: spawnOptions.prompt,
|
|
105
|
+
args: spawnOptions.args,
|
|
106
|
+
model: spawnOptions.model,
|
|
107
|
+
cwd: spawnOptions.cwd
|
|
82
108
|
});
|
|
83
|
-
|
|
84
|
-
|
|
109
|
+
await renderAcpStream(events);
|
|
110
|
+
const final = await result;
|
|
111
|
+
if (final.exitCode !== 0) {
|
|
112
|
+
const detail = final.stderr.trim() || final.stdout.trim();
|
|
113
|
+
const suffix = detail ? `: ${detail}` : "";
|
|
114
|
+
throw new Error(`${adapter.label} spawn failed with exit code ${final.exitCode}${suffix}`);
|
|
115
|
+
}
|
|
116
|
+
const trimmedStdout = final.stdout.trim();
|
|
117
|
+
if (trimmedStdout) {
|
|
118
|
+
resources.logger.info(trimmedStdout);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const trimmedStderr = final.stderr.trim();
|
|
122
|
+
if (trimmedStderr) {
|
|
123
|
+
resources.logger.info(trimmedStderr);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
resources.logger.info(`${adapter.label} spawn completed.`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (final.threadId) {
|
|
130
|
+
const resolvedId = resolveAgentId(canonicalService) ?? canonicalService;
|
|
131
|
+
const agentDefinition = allAgents.find((agent) => agent.id === resolvedId);
|
|
132
|
+
const binaryName = agentDefinition?.binaryName;
|
|
133
|
+
if (binaryName) {
|
|
134
|
+
const resumeCwd = spawnOptions.cwd ?? process.cwd();
|
|
135
|
+
const resumeCommand = `${binaryName} resume -C ${shlexQuote(resumeCwd)} ${final.threadId}`;
|
|
136
|
+
resources.logger.info(text.muted(`\nResume: ${resumeCommand}`));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
85
139
|
}
|
|
86
|
-
|
|
87
|
-
const result = await spawnCore(container, canonicalService, spawnOptions, {
|
|
88
|
-
dryRun: flags.dryRun,
|
|
89
|
-
verbose: flags.verbose
|
|
90
|
-
});
|
|
91
|
-
// Handle dry run - spawnCore already logged the message
|
|
92
|
-
if (flags.dryRun) {
|
|
140
|
+
finally {
|
|
93
141
|
resources.context.finalize();
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
// Handle result output
|
|
97
|
-
if (result.exitCode !== 0) {
|
|
98
|
-
const detail = result.stderr.trim() || result.stdout.trim();
|
|
99
|
-
const suffix = detail ? `: ${detail}` : "";
|
|
100
|
-
throw new Error(`${adapter.label} spawn failed with exit code ${result.exitCode}${suffix}`);
|
|
101
142
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
function shlexQuote(value) {
|
|
146
|
+
if (value.length === 0) {
|
|
147
|
+
return "''";
|
|
148
|
+
}
|
|
149
|
+
let isSafe = true;
|
|
150
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
151
|
+
if (!isSafeShellChar(value.charCodeAt(index))) {
|
|
152
|
+
isSafe = false;
|
|
153
|
+
break;
|
|
107
154
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
155
|
+
}
|
|
156
|
+
if (isSafe) {
|
|
157
|
+
return value;
|
|
158
|
+
}
|
|
159
|
+
let output = "'";
|
|
160
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
161
|
+
const char = value[index];
|
|
162
|
+
if (char === "'") {
|
|
163
|
+
output += `'"'"'`;
|
|
164
|
+
continue;
|
|
113
165
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
166
|
+
output += char;
|
|
167
|
+
}
|
|
168
|
+
output += "'";
|
|
169
|
+
return output;
|
|
170
|
+
}
|
|
171
|
+
function isSafeShellChar(code) {
|
|
172
|
+
if (code >= 48 && code <= 57) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
if (code >= 65 && code <= 90) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
if (code >= 97 && code <= 122) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
switch (code) {
|
|
182
|
+
case 95: // _
|
|
183
|
+
case 64: // @
|
|
184
|
+
case 37: // %
|
|
185
|
+
case 43: // +
|
|
186
|
+
case 61: // =
|
|
187
|
+
case 58: // :
|
|
188
|
+
case 44: // ,
|
|
189
|
+
case 46: // .
|
|
190
|
+
case 47: // /
|
|
191
|
+
case 45: // -
|
|
192
|
+
return true;
|
|
193
|
+
default:
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
117
196
|
}
|
|
118
197
|
function resolveSpawnWorkingDirectory(baseDir, candidate) {
|
|
119
198
|
if (!candidate || candidate.trim().length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/cli/commands/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/cli/commands/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAmBvD,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,SAAuB,EACvB,UAAuC,EAAE;IAEzC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ;SACrC,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC;SACxD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IAClD,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC;IACzD,MAAM,kBAAkB,GACtB,iBAAiB,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;IAEpD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;SAC9E,MAAM,CAAC,kBAAkB,EAAE,qCAAqC,CAAC;SACjE,MAAM,CAAC,SAAS,EAAE,4BAA4B,CAAC;SAC/C,QAAQ,CACP,SAAS,EACT,kBAAkB,CACnB;SACA,QAAQ,CAAC,UAAU,EAAE,sCAAsC,CAAC;SAC5D,QAAQ,CACP,gBAAgB,EAChB,iDAAiD,CAClD;SACA,MAAM,CAAC,KAAK,WAEX,OAAe,EACf,UAA8B,EAC9B,YAAsB,EAAE;QAExB,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAqD,CAAC;QACtF,MAAM,WAAW,GAAG,4BAA4B,CAC9C,SAAS,CAAC,GAAG,CAAC,GAAG,EACjB,cAAc,CAAC,GAAG,CACnB,CAAC;QAEF,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,KAAK,IAAI,CAAC;QACrD,MAAM,mBAAmB,GACvB,cAAc;YACd,UAAU,KAAK,GAAG;YAClB,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,aAAa,GAAG,cAAc;YAClC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;YACrD,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YACvB,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,UAAU,IAAI,mBAAmB,EAAE,CAAC;YACvC,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,YAAY,GAAwB;YACxC,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,mBAAmB;SAC9B,CAAC;QAEF,kCAAkC;QAClC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,SAAS,OAAO,EAAE,CACnB,CAAC;YACF,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;YAC3C,MAAM,aAAa,CAAC;gBAClB,SAAS;gBACT,OAAO;gBACP,OAAO,EAAE,YAAY;gBACrB,KAAK;gBACL,SAAS;aACV,CAAC,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;QACtC,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,SAAS,gBAAgB,EAAE,CAC5B,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;QACpD,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAC9D,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,gBAAgB,CAAC;oBACrB,SAAS;oBACT,OAAO,EAAE,gBAAgB;oBACzB,OAAO,EAAE,YAAY;oBACrB,KAAK;oBACL,SAAS;iBACV,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,8CAA8C;gBAC9C,MAAM,SAAS,CAAC,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE;oBACzD,MAAM,EAAE,IAAI;oBACZ,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,gBAAgB,EAAE;gBACpD,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,GAAG,EAAE,YAAY,CAAC,GAAG;aACtB,CAAC,CAAC;YAEH,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;YAE3B,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,gCAAgC,KAAK,CAAC,QAAQ,GAAG,MAAM,EAAE,CAC1E,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI,aAAa,EAAE,CAAC;gBAClB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,aAAa,EAAE,CAAC;oBAClB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,mBAAmB,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,cAAc,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,CAAC;gBACxE,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;gBAC3E,MAAM,UAAU,GAAG,eAAe,EAAE,UAAU,CAAC;gBAC/C,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBACpD,MAAM,aAAa,GACjB,GAAG,UAAU,cAAc,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACvE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,aAAa,EAAE,CAAC,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,KAAK,CAAC;YACf,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,OAAO,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,CAAC;IACd,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,EAAE,IAAI;YACX,OAAO,IAAI,CAAC;QACd;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CACnC,OAAe,EACf,SAAkB;IAElB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ValidationError } from "./errors.js";
|
|
2
|
+
export function parseMcpOutputFormatPreferences(value) {
|
|
3
|
+
if (value === undefined) {
|
|
4
|
+
return ["url"];
|
|
5
|
+
}
|
|
6
|
+
const rawParts = value.split(",");
|
|
7
|
+
const preferences = [];
|
|
8
|
+
for (const raw of rawParts) {
|
|
9
|
+
const normalized = raw.trim().toLowerCase();
|
|
10
|
+
if (normalized.length === 0) {
|
|
11
|
+
throw new ValidationError(`Invalid --output-format: empty entry in "${value}". ` +
|
|
12
|
+
`Use "url", "base64", or a comma-separated list like "base64,url".`);
|
|
13
|
+
}
|
|
14
|
+
if (normalized !== "url" && normalized !== "base64") {
|
|
15
|
+
throw new ValidationError(`Invalid --output-format entry "${raw.trim()}". ` +
|
|
16
|
+
`Expected "url" or "base64".`);
|
|
17
|
+
}
|
|
18
|
+
preferences.push(normalized);
|
|
19
|
+
}
|
|
20
|
+
return preferences;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=mcp-output-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-output-format.js","sourceRoot":"","sources":["../../src/cli/mcp-output-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,UAAU,+BAA+B,CAC7C,KAAyB;IAEzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,eAAe,CACvB,4CAA4C,KAAK,KAAK;gBACpD,mEAAmE,CACtE,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,eAAe,CACvB,kCAAkC,GAAG,CAAC,IAAI,EAAE,KAAK;gBAC/C,6BAA6B,CAChC,CAAC;QACJ,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,UAA6B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|