@executioncontrolprotocol/cli 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -0
- package/dist/commands/invoke.d.ts +17 -0
- package/dist/commands/invoke.d.ts.map +1 -0
- package/dist/commands/invoke.js +47 -0
- package/dist/commands/invoke.js.map +1 -0
- package/dist/commands/serve.d.ts +15 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +53 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/test/rerun.d.ts +16 -0
- package/dist/commands/test/rerun.d.ts.map +1 -0
- package/dist/commands/test/rerun.js +38 -0
- package/dist/commands/test/rerun.js.map +1 -0
- package/dist/commands/test/run.d.ts +14 -0
- package/dist/commands/test/run.d.ts.map +1 -0
- package/dist/commands/test/run.js +36 -0
- package/dist/commands/test/run.js.map +1 -0
- package/dist/commands/test/start.d.ts +17 -0
- package/dist/commands/test/start.d.ts.map +1 -0
- package/dist/commands/test/start.js +43 -0
- package/dist/commands/test/start.js.map +1 -0
- package/dist/commands/test/status.d.ts +12 -0
- package/dist/commands/test/status.d.ts.map +1 -0
- package/dist/commands/test/status.js +24 -0
- package/dist/commands/test/status.js.map +1 -0
- package/dist/commands/test.d.ts +9 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +32 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/up.d.ts +18 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +95 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/lib/http/create-serve-handler.d.ts +15 -0
- package/dist/lib/http/create-serve-handler.d.ts.map +1 -0
- package/dist/lib/http/create-serve-handler.js +34 -0
- package/dist/lib/http/create-serve-handler.js.map +1 -0
- package/dist/lib/http/create-serve.d.ts +30 -0
- package/dist/lib/http/create-serve.d.ts.map +1 -0
- package/dist/lib/http/create-serve.js +43 -0
- package/dist/lib/http/create-serve.js.map +1 -0
- package/dist/lib/http/handle-invoke.d.ts +42 -0
- package/dist/lib/http/handle-invoke.d.ts.map +1 -0
- package/dist/lib/http/handle-invoke.js +66 -0
- package/dist/lib/http/handle-invoke.js.map +1 -0
- package/dist/lib/http/read-body.d.ts +7 -0
- package/dist/lib/http/read-body.d.ts.map +1 -0
- package/dist/lib/http/read-body.js +12 -0
- package/dist/lib/http/read-body.js.map +1 -0
- package/dist/lib/http/write-json.d.ts +7 -0
- package/dist/lib/http/write-json.d.ts.map +1 -0
- package/dist/lib/http/write-json.js +11 -0
- package/dist/lib/http/write-json.js.map +1 -0
- package/dist/lib/test-session-io.d.ts +12 -0
- package/dist/lib/test-session-io.d.ts.map +1 -0
- package/dist/lib/test-session-io.js +36 -0
- package/dist/lib/test-session-io.js.map +1 -0
- package/dist/lib/up/constants.d.ts +15 -0
- package/dist/lib/up/constants.d.ts.map +1 -0
- package/dist/lib/up/constants.js +21 -0
- package/dist/lib/up/constants.js.map +1 -0
- package/dist/lib/up/cors.d.ts +12 -0
- package/dist/lib/up/cors.d.ts.map +1 -0
- package/dist/lib/up/cors.js +28 -0
- package/dist/lib/up/cors.js.map +1 -0
- package/dist/lib/up/create-daemon.d.ts +37 -0
- package/dist/lib/up/create-daemon.d.ts.map +1 -0
- package/dist/lib/up/create-daemon.js +63 -0
- package/dist/lib/up/create-daemon.js.map +1 -0
- package/dist/lib/up/handle-request.d.ts +19 -0
- package/dist/lib/up/handle-request.d.ts.map +1 -0
- package/dist/lib/up/handle-request.js +49 -0
- package/dist/lib/up/handle-request.js.map +1 -0
- package/dist/lib/up/open-browser.d.ts +19 -0
- package/dist/lib/up/open-browser.d.ts.map +1 -0
- package/dist/lib/up/open-browser.js +43 -0
- package/dist/lib/up/open-browser.js.map +1 -0
- package/dist/lib/up/read-body.d.ts +3 -0
- package/dist/lib/up/read-body.d.ts.map +1 -0
- package/dist/lib/up/read-body.js +3 -0
- package/dist/lib/up/read-body.js.map +1 -0
- package/package.json +8 -7
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import { environment, extension } from "@executioncontrolprotocol/node";
|
|
3
|
+
import "@executioncontrolprotocol/extension-ollama";
|
|
4
|
+
import { registerOllamaExtension } from "@executioncontrolprotocol/extension-ollama";
|
|
5
|
+
import { DEFAULT_CORS_ORIGINS, DEFAULT_ECP_UP_HOST, DEFAULT_ECP_UP_PORT, DEFAULT_OLLAMA_URL, } from "./constants.js";
|
|
6
|
+
import { createUpRequestHandler } from "./handle-request.js";
|
|
7
|
+
/**
|
|
8
|
+
* Start the local ECP daemon (`ecp up`).
|
|
9
|
+
* @category CLI
|
|
10
|
+
*/
|
|
11
|
+
export async function startEcpUpDaemon(options) {
|
|
12
|
+
const port = options.port ?? DEFAULT_ECP_UP_PORT;
|
|
13
|
+
const host = options.host ?? DEFAULT_ECP_UP_HOST;
|
|
14
|
+
const ollamaUrl = options.ollamaUrl ?? DEFAULT_OLLAMA_URL;
|
|
15
|
+
const token = options.token;
|
|
16
|
+
await registerOllamaExtension();
|
|
17
|
+
const env = (await environment("ecp-up")).withExtensions([
|
|
18
|
+
extension("@executioncontrolprotocol/ollama").with({
|
|
19
|
+
baseURL: ollamaUrl,
|
|
20
|
+
}),
|
|
21
|
+
]);
|
|
22
|
+
const ecp = await env.init();
|
|
23
|
+
const allowOrigins = new Set([
|
|
24
|
+
...DEFAULT_CORS_ORIGINS,
|
|
25
|
+
...(options.corsOrigins ?? []),
|
|
26
|
+
]);
|
|
27
|
+
const handler = createUpRequestHandler({
|
|
28
|
+
ecp,
|
|
29
|
+
allowOrigins,
|
|
30
|
+
token,
|
|
31
|
+
ollamaUrl,
|
|
32
|
+
});
|
|
33
|
+
const server = createServer((req, res) => {
|
|
34
|
+
void handler(req, res).catch((err) => {
|
|
35
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
36
|
+
if (!res.headersSent) {
|
|
37
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
38
|
+
}
|
|
39
|
+
res.end(JSON.stringify({ error: message }));
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
await new Promise((resolve, reject) => {
|
|
43
|
+
server.once("error", reject);
|
|
44
|
+
server.listen(port, host, () => {
|
|
45
|
+
server.off("error", reject);
|
|
46
|
+
resolve();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
server,
|
|
51
|
+
ecp,
|
|
52
|
+
port,
|
|
53
|
+
host,
|
|
54
|
+
token,
|
|
55
|
+
close: async () => {
|
|
56
|
+
await new Promise((resolve, reject) => {
|
|
57
|
+
server.close((err) => (err ? reject(err) : resolve()));
|
|
58
|
+
});
|
|
59
|
+
await ecp.terminate();
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=create-daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-daemon.js","sourceRoot":"","sources":["../../../src/lib/up/create-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import type { Ecp } from "@executioncontrolprotocol/core";
|
|
3
|
+
/** Dependencies for {@link createUpRequestHandler}. @category CLI */
|
|
4
|
+
export interface UpRequestHandlerOptions {
|
|
5
|
+
/** Operational ECP instance. */
|
|
6
|
+
ecp: Ecp;
|
|
7
|
+
/** Allowlisted CORS origins. */
|
|
8
|
+
allowOrigins: ReadonlySet<string>;
|
|
9
|
+
/** Pairing token for `/v1/*`. */
|
|
10
|
+
token: string;
|
|
11
|
+
/** Ollama base URL used for `/health` reachability. */
|
|
12
|
+
ollamaUrl: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create the HTTP request handler for `ecp up`.
|
|
16
|
+
* @category CLI
|
|
17
|
+
*/
|
|
18
|
+
export declare function createUpRequestHandler(options: UpRequestHandlerOptions): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
19
|
+
//# sourceMappingURL=handle-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-request.d.ts","sourceRoot":"","sources":["../../../src/lib/up/handle-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAA;AAOzD,qEAAqE;AACrE,MAAM,WAAW,uBAAuB;IACtC,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAA;IACR,gCAAgC;IAChC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,IAInE,KAAK,eAAe,EACpB,KAAK,cAAc,KAClB,OAAO,CAAC,IAAI,CAAC,CAwCjB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { listOllamaModels } from "@executioncontrolprotocol/extension-ollama";
|
|
2
|
+
import { handleInvokePost } from "../http/handle-invoke.js";
|
|
3
|
+
import { writeJson } from "../http/write-json.js";
|
|
4
|
+
import { ECP_UP_VERSION } from "./constants.js";
|
|
5
|
+
import { readBearerToken, setCorsAndPna } from "./cors.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create the HTTP request handler for `ecp up`.
|
|
8
|
+
* @category CLI
|
|
9
|
+
*/
|
|
10
|
+
export function createUpRequestHandler(options) {
|
|
11
|
+
const { ecp, allowOrigins, token, ollamaUrl } = options;
|
|
12
|
+
return async function handleUpRequest(req, res) {
|
|
13
|
+
setCorsAndPna(req, res, allowOrigins);
|
|
14
|
+
if (req.method === "OPTIONS") {
|
|
15
|
+
res.writeHead(204);
|
|
16
|
+
res.end();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "127.0.0.1"}`);
|
|
20
|
+
const pathname = url.pathname;
|
|
21
|
+
if (req.method === "GET" && pathname === "/health") {
|
|
22
|
+
let ollamaReachable = false;
|
|
23
|
+
try {
|
|
24
|
+
await listOllamaModels(ollamaUrl, { signal: AbortSignal.timeout(2000) });
|
|
25
|
+
ollamaReachable = true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
ollamaReachable = false;
|
|
29
|
+
}
|
|
30
|
+
writeJson(res, 200, {
|
|
31
|
+
ok: true,
|
|
32
|
+
version: ECP_UP_VERSION,
|
|
33
|
+
ollamaReachable,
|
|
34
|
+
});
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (req.method === "POST" && pathname === "/v1/invoke") {
|
|
38
|
+
const presented = readBearerToken(req);
|
|
39
|
+
if (!presented || presented !== token) {
|
|
40
|
+
writeJson(res, 401, { error: "Unauthorized" });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
await handleInvokePost(ecp, req, res);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
writeJson(res, 404, { error: "Not found" });
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=handle-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-request.js","sourceRoot":"","sources":["../../../src/lib/up/handle-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAc1D;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAEvD,OAAO,KAAK,UAAU,eAAe,CACnC,GAAoB,EACpB,GAAmB;QAEnB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAA;QAErC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,CAAC,GAAG,EAAE,CAAA;YACT,OAAM;QACR,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAA;QAChF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;QAE7B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnD,IAAI,eAAe,GAAG,KAAK,CAAA;YAC3B,IAAI,CAAC;gBACH,MAAM,gBAAgB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACxE,eAAe,GAAG,IAAI,CAAA;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe,GAAG,KAAK,CAAA;YACzB,CAAC;YACD,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE;gBAClB,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,cAAc;gBACvB,eAAe;aAChB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;YACtC,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACtC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAA;gBAC9C,OAAM;YACR,CAAC;YACD,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QAED,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;IAC7C,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open a URL in the default browser (best-effort, fire-and-forget).
|
|
3
|
+
* @category CLI
|
|
4
|
+
*/
|
|
5
|
+
export declare function openBrowserUrl(url: string): void;
|
|
6
|
+
/**
|
|
7
|
+
* Build the demo open URL with pairing token (and optional bridge base).
|
|
8
|
+
* @category CLI
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildDemoOpenUrl(openUrl: string, options: {
|
|
11
|
+
token: string;
|
|
12
|
+
bridgeBaseURL?: string;
|
|
13
|
+
}): string;
|
|
14
|
+
/**
|
|
15
|
+
* Origin (scheme + host + port) for CORS allowlisting from an open URL.
|
|
16
|
+
* @category CLI
|
|
17
|
+
*/
|
|
18
|
+
export declare function originFromUrl(raw: string): string | undefined;
|
|
19
|
+
//# sourceMappingURL=open-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../../src/lib/up/open-browser.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAWhD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,MAAM,CAOR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO7D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
/**
|
|
3
|
+
* Open a URL in the default browser (best-effort, fire-and-forget).
|
|
4
|
+
* @category CLI
|
|
5
|
+
*/
|
|
6
|
+
export function openBrowserUrl(url) {
|
|
7
|
+
const platform = process.platform;
|
|
8
|
+
if (platform === "win32") {
|
|
9
|
+
spawn("cmd", ["/c", "start", "", url], { detached: true, stdio: "ignore" }).unref();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (platform === "darwin") {
|
|
13
|
+
spawn("open", [url], { detached: true, stdio: "ignore" }).unref();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
spawn("xdg-open", [url], { detached: true, stdio: "ignore" }).unref();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build the demo open URL with pairing token (and optional bridge base).
|
|
20
|
+
* @category CLI
|
|
21
|
+
*/
|
|
22
|
+
export function buildDemoOpenUrl(openUrl, options) {
|
|
23
|
+
const url = new URL(openUrl);
|
|
24
|
+
url.searchParams.set("token", options.token);
|
|
25
|
+
if (options.bridgeBaseURL) {
|
|
26
|
+
url.searchParams.set("bridge", options.bridgeBaseURL);
|
|
27
|
+
}
|
|
28
|
+
return url.toString();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Origin (scheme + host + port) for CORS allowlisting from an open URL.
|
|
32
|
+
* @category CLI
|
|
33
|
+
*/
|
|
34
|
+
export function originFromUrl(raw) {
|
|
35
|
+
try {
|
|
36
|
+
const url = new URL(raw);
|
|
37
|
+
return url.origin;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=open-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../../src/lib/up/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACjC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;QACnF,OAAM;IACR,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;QACjE,OAAM;IACR,CAAC;IACD,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,OAAkD;IAElD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAC5C,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IACvD,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QACxB,OAAO,GAAG,CAAC,MAAM,CAAA;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-body.d.ts","sourceRoot":"","sources":["../../../src/lib/up/read-body.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-body.js","sourceRoot":"","sources":["../../../src/lib/up/read-body.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@executioncontrolprotocol/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "ECP command-line interface",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -19,18 +19,19 @@
|
|
|
19
19
|
"start": "node ./bin/dev.js"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
|
-
"@executioncontrolprotocol/core": "^0.
|
|
23
|
-
"@executioncontrolprotocol/types": "^0.
|
|
22
|
+
"@executioncontrolprotocol/core": "^0.11.0",
|
|
23
|
+
"@executioncontrolprotocol/types": "^0.11.0",
|
|
24
24
|
"zod": "^3.24.0"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@executioncontrolprotocol/node": "0.
|
|
28
|
-
"@executioncontrolprotocol/secrets": "0.
|
|
27
|
+
"@executioncontrolprotocol/node": "0.11.0",
|
|
28
|
+
"@executioncontrolprotocol/secrets": "0.11.0",
|
|
29
|
+
"@executioncontrolprotocol/extension-ollama": "0.11.0",
|
|
29
30
|
"@oclif/core": "^4.10.0"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
|
-
"@executioncontrolprotocol/core": "0.
|
|
33
|
-
"@executioncontrolprotocol/types": "0.
|
|
33
|
+
"@executioncontrolprotocol/core": "0.11.0",
|
|
34
|
+
"@executioncontrolprotocol/types": "0.11.0",
|
|
34
35
|
"typescript": "^5.7.0",
|
|
35
36
|
"zod": "^3.24.0"
|
|
36
37
|
},
|