mthds 0.9.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 +43 -21
- package/dist/agent/binaries.js +2 -2
- package/dist/agent/commands/api-commands.d.ts +8 -0
- package/dist/agent/commands/api-commands.js +310 -93
- package/dist/agent/commands/api-commands.js.map +1 -1
- package/dist/agent/commands/codex-hook.d.ts +20 -0
- package/dist/agent/commands/codex-hook.js +25 -9
- package/dist/agent/commands/codex-hook.js.map +1 -1
- package/dist/agent/commands/config.js +2 -2
- package/dist/agent/commands/config.js.map +1 -1
- package/dist/agent/output.d.ts +4 -0
- package/dist/agent/output.js +7 -0
- package/dist/agent/output.js.map +1 -1
- package/dist/agent/plugin-version.d.ts +1 -1
- package/dist/agent/plugin-version.js +1 -1
- package/dist/agent-cli.js +5 -5
- package/dist/agent-cli.js.map +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/install.js +29 -37
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/run.js +82 -69
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/setup.js +22 -23
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/utils.d.ts +9 -1
- package/dist/cli/commands/utils.js +9 -0
- package/dist/cli/commands/utils.js.map +1 -1
- package/dist/cli/commands/validate.js +29 -13
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/config/config.d.ts +14 -1
- package/dist/config/config.js +31 -6
- package/dist/config/config.js.map +1 -1
- package/dist/index.d.ts +27 -1
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/protocol/concept.d.ts +14 -0
- package/dist/protocol/concept.js +10 -0
- package/dist/protocol/concept.js.map +1 -0
- package/dist/protocol/exceptions.d.ts +10 -0
- package/dist/protocol/exceptions.js +12 -0
- package/dist/protocol/exceptions.js.map +1 -0
- package/dist/protocol/models.d.ts +150 -0
- package/dist/protocol/models.js +24 -0
- package/dist/protocol/models.js.map +1 -0
- package/dist/protocol/options.d.ts +60 -0
- package/dist/protocol/options.js +11 -0
- package/dist/protocol/options.js.map +1 -0
- package/dist/protocol/pipe_output.d.ts +11 -0
- package/dist/protocol/pipe_output.js +7 -0
- package/dist/protocol/pipe_output.js.map +1 -0
- package/dist/protocol/pipeline_inputs.d.ts +8 -0
- package/dist/protocol/pipeline_inputs.js +7 -0
- package/dist/protocol/pipeline_inputs.js.map +1 -0
- package/dist/protocol/protocol.d.ts +55 -0
- package/dist/{client → protocol}/protocol.js.map +1 -1
- package/dist/protocol/stuff.d.ts +16 -0
- package/dist/protocol/stuff.js +8 -0
- package/dist/{client/models → protocol}/stuff.js.map +1 -1
- package/dist/protocol/working_memory.d.ts +10 -0
- package/dist/protocol/working_memory.js +7 -0
- package/dist/protocol/working_memory.js.map +1 -0
- package/dist/runners/api/client.d.ts +181 -0
- package/dist/runners/api/client.js +679 -0
- package/dist/runners/api/client.js.map +1 -0
- package/dist/runners/api/exceptions.d.ts +121 -0
- package/dist/runners/api/exceptions.js +156 -0
- package/dist/runners/api/exceptions.js.map +1 -0
- package/dist/runners/api/models.d.ts +131 -0
- package/dist/runners/api/models.js +13 -0
- package/dist/runners/api/models.js.map +1 -0
- package/dist/runners/api/runs.d.ts +130 -0
- package/dist/runners/api/runs.js +93 -0
- package/dist/runners/api/runs.js.map +1 -0
- package/dist/runners/base-runner.d.ts +27 -0
- package/dist/runners/base-runner.js +25 -0
- package/dist/runners/base-runner.js.map +1 -0
- package/dist/runners/pipelex/runner.d.ts +38 -0
- package/dist/runners/{pipelex-runner.js → pipelex/runner.js} +171 -83
- package/dist/runners/pipelex/runner.js.map +1 -0
- package/dist/runners/registry.js +10 -4
- package/dist/runners/registry.js.map +1 -1
- package/dist/runners/types.d.ts +13 -71
- package/dist/runners/types.js.map +1 -1
- package/package.json +6 -3
- package/dist/agent/commands/validate.d.ts +0 -18
- package/dist/agent/commands/validate.js +0 -126
- package/dist/agent/commands/validate.js.map +0 -1
- package/dist/client/client.d.ts +0 -15
- package/dist/client/client.js +0 -127
- package/dist/client/client.js.map +0 -1
- package/dist/client/exceptions.d.ts +0 -46
- package/dist/client/exceptions.js +0 -61
- package/dist/client/exceptions.js.map +0 -1
- package/dist/client/index.d.ts +0 -5
- package/dist/client/index.js +0 -3
- package/dist/client/index.js.map +0 -1
- package/dist/client/models/index.d.ts +0 -4
- package/dist/client/models/index.js +0 -2
- package/dist/client/models/index.js.map +0 -1
- package/dist/client/models/pipe_output.d.ts +0 -2
- package/dist/client/models/pipe_output.js +0 -2
- package/dist/client/models/pipe_output.js.map +0 -1
- package/dist/client/models/pipeline_inputs.d.ts +0 -3
- package/dist/client/models/pipeline_inputs.js +0 -2
- package/dist/client/models/pipeline_inputs.js.map +0 -1
- package/dist/client/models/stuff.d.ts +0 -1
- package/dist/client/models/stuff.js +0 -2
- package/dist/client/models/working_memory.d.ts +0 -1
- package/dist/client/models/working_memory.js +0 -2
- package/dist/client/models/working_memory.js.map +0 -1
- package/dist/client/pipeline.d.ts +0 -36
- package/dist/client/pipeline.js +0 -2
- package/dist/client/pipeline.js.map +0 -1
- package/dist/client/protocol.d.ts +0 -5
- package/dist/runners/api-runner.d.ts +0 -24
- package/dist/runners/api-runner.js +0 -91
- package/dist/runners/api-runner.js.map +0 -1
- package/dist/runners/pipelex-runner.d.ts +0 -30
- package/dist/runners/pipelex-runner.js.map +0 -1
- /package/dist/{client → protocol}/protocol.js +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { RunFailedError, RunTimeoutError } from "./exceptions.js";
|
|
2
|
+
const TERMINAL_RUN_STATUSES = new Set([
|
|
3
|
+
"COMPLETED",
|
|
4
|
+
"FAILED",
|
|
5
|
+
"CANCELLED",
|
|
6
|
+
"TERMINATED",
|
|
7
|
+
"TIMED_OUT",
|
|
8
|
+
]);
|
|
9
|
+
/** A terminal status means the run is done and will not transition again. */
|
|
10
|
+
export function isTerminalRunStatus(status) {
|
|
11
|
+
return TERMINAL_RUN_STATUSES.has(status);
|
|
12
|
+
}
|
|
13
|
+
/** Only `COMPLETED` has a result; every other terminal status is a failure. */
|
|
14
|
+
export function isSuccessRunStatus(status) {
|
|
15
|
+
return status === "COMPLETED";
|
|
16
|
+
}
|
|
17
|
+
// ── Poll loop ───────────────────────────────────────────────────────
|
|
18
|
+
export const DEFAULT_POLL_INTERVAL_MS = 2_000;
|
|
19
|
+
export const DEFAULT_WAIT_TIMEOUT_MS = 1_200_000; // 20 min — matches the runner's blocking execute ceiling.
|
|
20
|
+
/**
|
|
21
|
+
* Poll a single-shot result lookup (`fetchOnce`) until the run reaches a
|
|
22
|
+
* terminal state. Returns the artifacts on `COMPLETED`, throws `RunFailedError`
|
|
23
|
+
* on any other terminal status, and throws `RunTimeoutError` if `timeoutMs`
|
|
24
|
+
* elapses first (the run keeps executing server-side — re-poll by id later).
|
|
25
|
+
*
|
|
26
|
+
* The single owner of the wait/poll/Retry-After/abort logic. Both
|
|
27
|
+
* `MthdsApiClient.waitForResult` and `BaseRunner.waitForResult` delegate here,
|
|
28
|
+
* so the behavior can never drift between the wire client and the runner layer.
|
|
29
|
+
*/
|
|
30
|
+
export async function pollUntilResult(fetchOnce, runId, options = {}) {
|
|
31
|
+
const intervalMs = options.intervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
32
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_WAIT_TIMEOUT_MS;
|
|
33
|
+
const startedAt = Date.now();
|
|
34
|
+
let attempt = 0;
|
|
35
|
+
for (;;) {
|
|
36
|
+
throwIfAborted(options.signal);
|
|
37
|
+
// Enforce the deadline BEFORE each lookup, so a poll is never issued past the
|
|
38
|
+
// timeout (the previous wait is clamped to the deadline, so the next loop
|
|
39
|
+
// would otherwise fire one extra fetch right at it).
|
|
40
|
+
const elapsedMs = Date.now() - startedAt;
|
|
41
|
+
if (elapsedMs >= timeoutMs) {
|
|
42
|
+
throw new RunTimeoutError(`Run ${runId} did not reach a terminal state within ${timeoutMs}ms.`, runId, timeoutMs);
|
|
43
|
+
}
|
|
44
|
+
const state = await fetchOnce(runId, { signal: options.signal });
|
|
45
|
+
if (state.state === "completed") {
|
|
46
|
+
return state.result;
|
|
47
|
+
}
|
|
48
|
+
if (state.state === "failed") {
|
|
49
|
+
throw new RunFailedError(state.message, runId, state.status);
|
|
50
|
+
}
|
|
51
|
+
attempt += 1;
|
|
52
|
+
options.onPoll?.({ attempt, elapsedMs });
|
|
53
|
+
const retryMs = state.retry_after_seconds != null ? state.retry_after_seconds * 1000 : 0;
|
|
54
|
+
const waitMs = Math.min(Math.max(intervalMs, retryMs), timeoutMs - elapsedMs);
|
|
55
|
+
await sleep(waitMs, options.signal);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function throwIfAborted(signal) {
|
|
59
|
+
if (signal?.aborted)
|
|
60
|
+
throw abortError(signal);
|
|
61
|
+
}
|
|
62
|
+
function abortError(signal) {
|
|
63
|
+
const reason = signal?.reason;
|
|
64
|
+
if (reason instanceof Error)
|
|
65
|
+
return reason;
|
|
66
|
+
return new DOMException("The run poll was aborted.", "AbortError");
|
|
67
|
+
}
|
|
68
|
+
/** Sleep that resolves after `ms`, or rejects immediately if `signal` aborts. */
|
|
69
|
+
function sleep(ms, signal) {
|
|
70
|
+
if (ms <= 0) {
|
|
71
|
+
throwIfAborted(signal);
|
|
72
|
+
return Promise.resolve();
|
|
73
|
+
}
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
const onAbort = () => {
|
|
76
|
+
clearTimeout(timer);
|
|
77
|
+
reject(abortError(signal));
|
|
78
|
+
};
|
|
79
|
+
const timer = setTimeout(() => {
|
|
80
|
+
signal?.removeEventListener("abort", onAbort);
|
|
81
|
+
resolve();
|
|
82
|
+
}, ms);
|
|
83
|
+
if (signal) {
|
|
84
|
+
if (signal.aborted) {
|
|
85
|
+
clearTimeout(timer);
|
|
86
|
+
reject(abortError(signal));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../src/runners/api/runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type RunResults, type RunResultState, type WaitForResultOptions } from "./api/runs.js";
|
|
2
|
+
import type { StartOptions } from "../protocol/options.js";
|
|
3
|
+
import type { RunResultStart } from "../protocol/models.js";
|
|
4
|
+
/**
|
|
5
|
+
* Shared base for every runner. Provides the two run-lifecycle COMPOSITES —
|
|
6
|
+
* `waitForResult` (poll an existing run to completion) and
|
|
7
|
+
* `startAndWaitForResult` (start a run, then wait for its result) — implemented
|
|
8
|
+
* once over the abstract primitives `start` / `getRunResult`. Concrete runners
|
|
9
|
+
* implement the primitives; a runtime with a faster blocking path (a bare
|
|
10
|
+
* runner, the local pipelex CLI) overrides `startAndWaitForResult`.
|
|
11
|
+
*
|
|
12
|
+
* The composites are deliberately NOT part of the `Runner` contract's "must
|
|
13
|
+
* implement" surface — every runner gets them for free here, so they can never
|
|
14
|
+
* drift between runtimes.
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class BaseRunner {
|
|
17
|
+
/** Start a run and return its 202 ack immediately (no waiting; no output yet). The returned `pipeline_run_id` is authoritative. */
|
|
18
|
+
abstract start(options: StartOptions): Promise<RunResultStart>;
|
|
19
|
+
/** Single-shot result lookup: running (202) / completed (200) / failed (409). */
|
|
20
|
+
abstract getRunResult(runId: string, options?: {
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
}): Promise<RunResultState>;
|
|
23
|
+
/** Poll an already-started run (by id) until it reaches a terminal state. */
|
|
24
|
+
waitForResult(runId: string, options?: WaitForResultOptions): Promise<RunResults>;
|
|
25
|
+
/** Start a run, then wait for its result — the one-call convenience. */
|
|
26
|
+
startAndWaitForResult(options: StartOptions, pollOptions?: WaitForResultOptions): Promise<RunResults>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { pollUntilResult, } from "./api/runs.js";
|
|
2
|
+
/**
|
|
3
|
+
* Shared base for every runner. Provides the two run-lifecycle COMPOSITES —
|
|
4
|
+
* `waitForResult` (poll an existing run to completion) and
|
|
5
|
+
* `startAndWaitForResult` (start a run, then wait for its result) — implemented
|
|
6
|
+
* once over the abstract primitives `start` / `getRunResult`. Concrete runners
|
|
7
|
+
* implement the primitives; a runtime with a faster blocking path (a bare
|
|
8
|
+
* runner, the local pipelex CLI) overrides `startAndWaitForResult`.
|
|
9
|
+
*
|
|
10
|
+
* The composites are deliberately NOT part of the `Runner` contract's "must
|
|
11
|
+
* implement" surface — every runner gets them for free here, so they can never
|
|
12
|
+
* drift between runtimes.
|
|
13
|
+
*/
|
|
14
|
+
export class BaseRunner {
|
|
15
|
+
/** Poll an already-started run (by id) until it reaches a terminal state. */
|
|
16
|
+
async waitForResult(runId, options) {
|
|
17
|
+
return pollUntilResult((id, opts) => this.getRunResult(id, opts), runId, options);
|
|
18
|
+
}
|
|
19
|
+
/** Start a run, then wait for its result — the one-call convenience. */
|
|
20
|
+
async startAndWaitForResult(options, pollOptions) {
|
|
21
|
+
const ack = await this.start(options);
|
|
22
|
+
return this.waitForResult(ack.pipeline_run_id, pollOptions);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=base-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-runner.js","sourceRoot":"","sources":["../../src/runners/base-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAIhB,MAAM,eAAe,CAAC;AAIvB;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,UAAU;IAU9B,6EAA6E;IAC7E,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,OAA8B;QAE9B,OAAO,eAAe,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,qBAAqB,CACzB,OAAqB,EACrB,WAAkC;QAElC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Runner, RunnerType, BuildInputsRequest, BuildOutputRequest, BuildRunnerRequest, BuildRunnerResponse, ConceptRequest, ConceptResponse, PipeSpecRequest, PipeSpecResponse, CheckModelRequest, CheckModelResponse } from "../types.js";
|
|
2
|
+
import type { RunOptions, StartOptions } from "../../protocol/options.js";
|
|
3
|
+
import type { ModelCategory, ModelDeck, ValidationResult, VersionInfo } from "../../protocol/models.js";
|
|
4
|
+
import type { DictRunResultExecute } from "../api/models.js";
|
|
5
|
+
import type { RunRead, RunResults, RunResultState, WaitForResultOptions } from "../api/runs.js";
|
|
6
|
+
import { BaseRunner } from "../base-runner.js";
|
|
7
|
+
export declare class PipelexRunner extends BaseRunner implements Runner {
|
|
8
|
+
readonly type: RunnerType;
|
|
9
|
+
private readonly libraryDirs;
|
|
10
|
+
constructor(libraryDirs?: string[]);
|
|
11
|
+
private libraryArgs;
|
|
12
|
+
private exec;
|
|
13
|
+
/**
|
|
14
|
+
* Run pipelex with stdout and stderr inherited (streamed to the terminal).
|
|
15
|
+
* Use this for long-running or interactive commands.
|
|
16
|
+
*/
|
|
17
|
+
private execStreaming;
|
|
18
|
+
buildPassthrough(subcommand: string, rawArgs: string[]): Promise<void>;
|
|
19
|
+
runPassthrough(rawArgs: string[]): Promise<void>;
|
|
20
|
+
validatePassthrough(rawArgs: string[]): Promise<void>;
|
|
21
|
+
health(): Promise<Record<string, unknown>>;
|
|
22
|
+
version(): Promise<VersionInfo>;
|
|
23
|
+
buildInputs(request: BuildInputsRequest): Promise<unknown>;
|
|
24
|
+
buildOutput(request: BuildOutputRequest): Promise<unknown>;
|
|
25
|
+
buildRunner(request: BuildRunnerRequest): Promise<BuildRunnerResponse>;
|
|
26
|
+
concept(request: ConceptRequest): Promise<ConceptResponse>;
|
|
27
|
+
pipeSpec(request: PipeSpecRequest): Promise<PipeSpecResponse>;
|
|
28
|
+
checkModel(request: CheckModelRequest): Promise<CheckModelResponse>;
|
|
29
|
+
models(category?: ModelCategory): Promise<ModelDeck>;
|
|
30
|
+
execute(options: RunOptions): Promise<DictRunResultExecute>;
|
|
31
|
+
validate(mthdsContents: string[], allowSignatures?: boolean): Promise<ValidationResult>;
|
|
32
|
+
startAndWaitForResult(options: StartOptions, _pollOptions?: WaitForResultOptions): Promise<RunResults>;
|
|
33
|
+
start(_options: StartOptions): Promise<never>;
|
|
34
|
+
getRunStatus(_runId: string): Promise<RunRead>;
|
|
35
|
+
getRunResult(_runId: string, _options?: {
|
|
36
|
+
signal?: AbortSignal;
|
|
37
|
+
}): Promise<RunResultState>;
|
|
38
|
+
}
|
|
@@ -3,7 +3,10 @@ import { promisify } from "node:util";
|
|
|
3
3
|
import { existsSync, writeFileSync, readFileSync, mkdtempSync, rmSync, } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { tmpdir } from "node:os";
|
|
6
|
-
import { Runners } from "
|
|
6
|
+
import { Runners } from "../types.js";
|
|
7
|
+
import { MTHDS_PROTOCOL_VERSION } from "../../protocol/models.js";
|
|
8
|
+
import { conceptRef } from "../../protocol/concept.js";
|
|
9
|
+
import { BaseRunner } from "../base-runner.js";
|
|
7
10
|
const execFileAsync = promisify(execFile);
|
|
8
11
|
function makeTmpDir() {
|
|
9
12
|
return mkdtempSync(join(tmpdir(), "mthds-"));
|
|
@@ -31,10 +34,11 @@ function writeMthdsContents(tmp, contents) {
|
|
|
31
34
|
}
|
|
32
35
|
return bundlePath;
|
|
33
36
|
}
|
|
34
|
-
export class PipelexRunner {
|
|
37
|
+
export class PipelexRunner extends BaseRunner {
|
|
35
38
|
type = Runners.PIPELEX;
|
|
36
39
|
libraryDirs;
|
|
37
40
|
constructor(libraryDirs) {
|
|
41
|
+
super();
|
|
38
42
|
this.libraryDirs = libraryDirs ?? [];
|
|
39
43
|
}
|
|
40
44
|
libraryArgs() {
|
|
@@ -88,10 +92,17 @@ export class PipelexRunner {
|
|
|
88
92
|
}
|
|
89
93
|
async version() {
|
|
90
94
|
const { stdout } = await this.exec(["--version"]);
|
|
91
|
-
|
|
95
|
+
const pipelexVersion = stdout.trim();
|
|
96
|
+
return {
|
|
97
|
+
protocol_version: MTHDS_PROTOCOL_VERSION,
|
|
98
|
+
runner_version: pipelexVersion,
|
|
99
|
+
// Implementation identity rides the protocol's extension-open VersionInfo.
|
|
100
|
+
implementation: "pipelex",
|
|
101
|
+
implementation_version: pipelexVersion,
|
|
102
|
+
runtime_version: pipelexVersion,
|
|
103
|
+
};
|
|
92
104
|
}
|
|
93
105
|
// ── Build ───────────────────────────────────────────────────────
|
|
94
|
-
// buildInputs and buildOutput have no CLI equivalent.
|
|
95
106
|
// pipelex-agent inputs bundle <bundle.mthds> --pipe <pipe_code>
|
|
96
107
|
async buildInputs(request) {
|
|
97
108
|
const tmp = makeTmpDir();
|
|
@@ -210,11 +221,13 @@ export class PipelexRunner {
|
|
|
210
221
|
};
|
|
211
222
|
}
|
|
212
223
|
// pipelex-agent check-model <reference> --type <type> --format json
|
|
213
|
-
//
|
|
214
|
-
//
|
|
215
|
-
//
|
|
216
|
-
//
|
|
217
|
-
//
|
|
224
|
+
// check-model is a LOCAL CLI capability of this runner only — the MTHDS API
|
|
225
|
+
// has no check-model route, so this method is NOT on the shared `Runner`
|
|
226
|
+
// interface. The local runner always forces --format json: pipelex-agent's
|
|
227
|
+
// markdown output is plain text (via print()), which can't satisfy the
|
|
228
|
+
// CheckModelResponse contract. The request's `format` field is intentionally
|
|
229
|
+
// ignored here. pipelex-agent declares --type as a required typer option (no
|
|
230
|
+
// default), so we guard here for SDK consumers that bypass the agent CLI's parser.
|
|
218
231
|
async checkModel(request) {
|
|
219
232
|
if (!request.type) {
|
|
220
233
|
throw new Error("checkModel requires `type` (one of: llm, extract, img_gen, search)");
|
|
@@ -225,58 +238,87 @@ export class PipelexRunner {
|
|
|
225
238
|
});
|
|
226
239
|
return JSON.parse(stdout);
|
|
227
240
|
}
|
|
228
|
-
// pipelex-agent models [--type <type
|
|
229
|
-
async models(
|
|
241
|
+
// pipelex-agent models [--type <type>] --format json
|
|
242
|
+
async models(category) {
|
|
230
243
|
const args = ["models"];
|
|
231
|
-
if (
|
|
232
|
-
|
|
233
|
-
args.push("--type", t);
|
|
234
|
-
}
|
|
244
|
+
if (category) {
|
|
245
|
+
args.push("--type", category);
|
|
235
246
|
}
|
|
236
247
|
args.push("--format", "json");
|
|
237
248
|
const { stdout } = await execFileAsync("pipelex-agent", args, {
|
|
238
249
|
encoding: "utf-8",
|
|
239
250
|
});
|
|
240
|
-
return JSON.parse(stdout);
|
|
251
|
+
return toModelDeck(JSON.parse(stdout));
|
|
241
252
|
}
|
|
242
|
-
// ──
|
|
253
|
+
// ── Method execution ────────────────────────────────────────────
|
|
243
254
|
// pipelex run <target> [--pipe code] [--inputs file] [--output-dir dir]
|
|
244
|
-
|
|
255
|
+
// Local, blocking, in-process — there is no durable run to poll by id, so
|
|
256
|
+
// `execute` / `startAndWaitForResult` run through here and the async
|
|
257
|
+
// primitives (start / getRunStatus / getRunResult / waitForResult) are
|
|
258
|
+
// unsupported.
|
|
259
|
+
async execute(options) {
|
|
245
260
|
const tmp = makeTmpDir();
|
|
246
261
|
try {
|
|
262
|
+
// The pipelex CLI dispatches through `run bundle <path>` / `run pipe <code>`.
|
|
247
263
|
const args = ["run"];
|
|
248
|
-
if (
|
|
249
|
-
const bundlePath = writeMthdsContents(tmp,
|
|
250
|
-
args.push(bundlePath);
|
|
264
|
+
if (options.mthds_contents?.length) {
|
|
265
|
+
const bundlePath = writeMthdsContents(tmp, options.mthds_contents);
|
|
266
|
+
args.push("bundle", bundlePath);
|
|
251
267
|
args.push("-L", tmp);
|
|
252
|
-
if (
|
|
253
|
-
args.push("--pipe",
|
|
268
|
+
if (options.pipe_code) {
|
|
269
|
+
args.push("--pipe", options.pipe_code);
|
|
254
270
|
}
|
|
255
271
|
}
|
|
256
|
-
else if (
|
|
257
|
-
args.push(
|
|
272
|
+
else if (options.pipe_code) {
|
|
273
|
+
args.push("pipe", options.pipe_code);
|
|
258
274
|
}
|
|
259
|
-
if (
|
|
275
|
+
if (options.inputs) {
|
|
260
276
|
const inputsPath = join(tmp, "inputs.json");
|
|
261
|
-
writeFileSync(inputsPath, JSON.stringify(
|
|
277
|
+
writeFileSync(inputsPath, JSON.stringify(options.inputs), "utf-8");
|
|
262
278
|
args.push("--inputs", inputsPath);
|
|
263
279
|
}
|
|
264
|
-
|
|
265
|
-
|
|
280
|
+
// Pin the working-memory artifact to a known path; other outputs go to
|
|
281
|
+
// an incremental directory under --output-dir which we don't need.
|
|
266
282
|
const wmPath = join(tmp, "working_memory.json");
|
|
283
|
+
args.push("--working-memory-path", wmPath);
|
|
284
|
+
args.push("--output-dir", join(tmp, "results"));
|
|
285
|
+
args.push("--no-pretty-print");
|
|
286
|
+
await this.execStreaming(args);
|
|
267
287
|
const raw = existsSync(wmPath)
|
|
268
288
|
? JSON.parse(readFileSync(wmPath, "utf-8"))
|
|
269
289
|
: {};
|
|
270
|
-
// The CLI
|
|
290
|
+
// The CLI writes the runtime's FULL working memory
|
|
291
|
+
// (`{root: {name: {stuff_code, stuff_name, concept: {...}, content}}, aliases}`).
|
|
292
|
+
// Reduce each stuff to the SDK wire shape `{concept: <ref string>, content}` —
|
|
293
|
+
// the same reduction the API runner performs server-side. The runtime-internal
|
|
294
|
+
// id keeps its `pipeline_run_id` name (D1: internals are out of the rename scope).
|
|
295
|
+
const rawRoot = (raw["root"] ?? {});
|
|
296
|
+
const aliases = (raw["aliases"] ?? {});
|
|
297
|
+
const reducedRoot = {};
|
|
298
|
+
for (const [stuffName, stuff] of Object.entries(rawRoot)) {
|
|
299
|
+
const conceptRaw = stuff["concept"];
|
|
300
|
+
let conceptRefStr;
|
|
301
|
+
if (conceptRaw && typeof conceptRaw === "object") {
|
|
302
|
+
const conceptObj = conceptRaw;
|
|
303
|
+
const code = typeof conceptObj["code"] === "string" ? conceptObj["code"] : "";
|
|
304
|
+
const domainCode = typeof conceptObj["domain_code"] === "string" ? conceptObj["domain_code"] : "";
|
|
305
|
+
// A missing domain_code falls back to the bare code (no leading dot).
|
|
306
|
+
conceptRefStr = domainCode ? conceptRef({ domain_code: domainCode, code }) : code;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
conceptRefStr = String(conceptRaw ?? "");
|
|
310
|
+
}
|
|
311
|
+
reducedRoot[stuffName] = { concept: conceptRefStr, content: stuff["content"] };
|
|
312
|
+
}
|
|
313
|
+
// `main_stuff_name` is a pipelex extension field riding the protocol's
|
|
314
|
+
// extension-open response — not a protocol field.
|
|
271
315
|
return {
|
|
272
|
-
pipeline_run_id:
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
: null,
|
|
279
|
-
main_stuff_name: raw["main_stuff_name"] ?? null,
|
|
316
|
+
pipeline_run_id: "",
|
|
317
|
+
pipe_output: {
|
|
318
|
+
working_memory: { root: reducedRoot, aliases },
|
|
319
|
+
pipeline_run_id: "",
|
|
320
|
+
},
|
|
321
|
+
main_stuff_name: aliases["main_stuff"] ?? "main_stuff",
|
|
280
322
|
};
|
|
281
323
|
}
|
|
282
324
|
finally {
|
|
@@ -284,61 +326,107 @@ export class PipelexRunner {
|
|
|
284
326
|
}
|
|
285
327
|
}
|
|
286
328
|
// ── Validation ──────────────────────────────────────────────────
|
|
287
|
-
// pipelex validate
|
|
288
|
-
async validate(
|
|
289
|
-
const
|
|
290
|
-
if (!url) {
|
|
291
|
-
return {
|
|
292
|
-
mthds_contents: request.mthds_contents ?? [],
|
|
293
|
-
pipelex_bundle_blueprint: { domain: "local" },
|
|
294
|
-
success: false,
|
|
295
|
-
message: "method_url is required for pipelex validation",
|
|
296
|
-
};
|
|
297
|
-
}
|
|
329
|
+
// pipelex validate bundle <bundle.mthds> [--allow-signatures]
|
|
330
|
+
async validate(mthdsContents, allowSignatures = false) {
|
|
331
|
+
const tmp = makeTmpDir();
|
|
298
332
|
try {
|
|
299
|
-
const
|
|
300
|
-
|
|
301
|
-
|
|
333
|
+
const bundlePath = writeMthdsContents(tmp, mthdsContents);
|
|
334
|
+
const args = ["validate", "bundle", bundlePath, "-L", tmp];
|
|
335
|
+
if (allowSignatures) {
|
|
336
|
+
args.push("--allow-signatures");
|
|
302
337
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
338
|
+
try {
|
|
339
|
+
await this.exec(args);
|
|
340
|
+
}
|
|
341
|
+
catch (err) {
|
|
342
|
+
const execError = err;
|
|
343
|
+
const detail = execError.stderr?.trim() || execError.stdout?.trim() || execError.message;
|
|
344
|
+
throw new Error(`Bundle validation failed:\n${detail}`);
|
|
345
|
+
}
|
|
346
|
+
// The local CLI raises on an invalid bundle (caught above), so reaching
|
|
347
|
+
// here means the verdict is valid. It emits human-readable output, not the
|
|
348
|
+
// structural artifacts — return the minimal valid arm (the `is_valid: true`
|
|
349
|
+
// discriminant), not the full report. (Per the protocol contract, a CLI
|
|
350
|
+
// runner may raise instead of materializing the invalid arm.)
|
|
351
|
+
return { is_valid: true };
|
|
310
352
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
return {
|
|
314
|
-
mthds_contents: request.mthds_contents ?? [],
|
|
315
|
-
pipelex_bundle_blueprint: { domain: "local" },
|
|
316
|
-
success: false,
|
|
317
|
-
message,
|
|
318
|
-
};
|
|
353
|
+
finally {
|
|
354
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
319
355
|
}
|
|
320
356
|
}
|
|
321
|
-
// ──
|
|
322
|
-
|
|
323
|
-
|
|
357
|
+
// ── Run lifecycle ──────────────────────────────────────────────────
|
|
358
|
+
// The local pipelex CLI runs methods in-process; there is no durable run
|
|
359
|
+
// to poll by id, so the async primitives belong to the hosted API (use
|
|
360
|
+
// --runner api). `startAndWaitForResult` is supported — it runs the CLI
|
|
361
|
+
// blocking and returns the result directly.
|
|
362
|
+
async startAndWaitForResult(options, _pollOptions) {
|
|
363
|
+
const response = await this.execute({
|
|
324
364
|
mthds_contents: options.mthds_contents ?? undefined,
|
|
325
365
|
pipe_code: options.pipe_code ?? undefined,
|
|
326
|
-
inputs: options.inputs
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
366
|
+
inputs: options.inputs ?? undefined,
|
|
367
|
+
output_name: options.output_name ?? undefined,
|
|
368
|
+
output_multiplicity: options.output_multiplicity ?? undefined,
|
|
369
|
+
dynamic_output_concept_ref: options.dynamic_output_concept_ref ?? undefined,
|
|
370
|
+
});
|
|
371
|
+
const pipeOutput = response.pipe_output;
|
|
331
372
|
return {
|
|
332
373
|
pipeline_run_id: response.pipeline_run_id,
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
pipe_output: response.pipe_output,
|
|
374
|
+
main_stuff: null,
|
|
375
|
+
// The local CLI blocking `pipe_output` carries no graph artifact.
|
|
376
|
+
graph_spec: null,
|
|
377
|
+
pipe_output: pipeOutput ?? null,
|
|
338
378
|
};
|
|
339
379
|
}
|
|
340
|
-
async
|
|
341
|
-
throw new Error(
|
|
380
|
+
async start(_options) {
|
|
381
|
+
throw new Error(RUN_LIFECYCLE_UNSUPPORTED);
|
|
382
|
+
}
|
|
383
|
+
async getRunStatus(_runId) {
|
|
384
|
+
throw new Error(RUN_LIFECYCLE_UNSUPPORTED);
|
|
385
|
+
}
|
|
386
|
+
async getRunResult(_runId, _options) {
|
|
387
|
+
throw new Error(RUN_LIFECYCLE_UNSUPPORTED);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
const RUN_LIFECYCLE_UNSUPPORTED = "Run lifecycle (start/status/result/poll) is not supported by the pipelex CLI runner. Use the API runner instead (--runner api).";
|
|
391
|
+
/**
|
|
392
|
+
* Normalize the local CLI's models output into the protocol `ModelDeck`.
|
|
393
|
+
*
|
|
394
|
+
* Accepts the deck shape verbatim (`{ models, aliases, waterfalls }`) and maps
|
|
395
|
+
* the legacy `pipelex-agent models` shape (`presets` / nested `aliases` /
|
|
396
|
+
* nested `waterfalls`, keyed by category) by flattening it.
|
|
397
|
+
*/
|
|
398
|
+
function toModelDeck(parsed) {
|
|
399
|
+
const root = (parsed && typeof parsed === "object" ? parsed : {});
|
|
400
|
+
if (Array.isArray(root.models)) {
|
|
401
|
+
return {
|
|
402
|
+
models: root.models,
|
|
403
|
+
aliases: root.aliases ?? {},
|
|
404
|
+
waterfalls: root.waterfalls ?? {},
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
const models = [];
|
|
408
|
+
const presets = (root.presets ?? {});
|
|
409
|
+
for (const [category, entries] of Object.entries(presets)) {
|
|
410
|
+
if (!Array.isArray(entries))
|
|
411
|
+
continue;
|
|
412
|
+
for (const entry of entries) {
|
|
413
|
+
if (entry && typeof entry.name === "string") {
|
|
414
|
+
models.push({ name: entry.name, type: category });
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
const aliases = {};
|
|
419
|
+
const rawAliases = (root.aliases ?? {});
|
|
420
|
+
for (const group of Object.values(rawAliases)) {
|
|
421
|
+
if (group && typeof group === "object")
|
|
422
|
+
Object.assign(aliases, group);
|
|
423
|
+
}
|
|
424
|
+
const waterfalls = {};
|
|
425
|
+
const rawWaterfalls = (root.waterfalls ?? {});
|
|
426
|
+
for (const group of Object.values(rawWaterfalls)) {
|
|
427
|
+
if (group && typeof group === "object")
|
|
428
|
+
Object.assign(waterfalls, group);
|
|
342
429
|
}
|
|
430
|
+
return { models, aliases, waterfalls };
|
|
343
431
|
}
|
|
344
|
-
//# sourceMappingURL=
|
|
432
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/runners/pipelex/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/runners/registry.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { loadConfig } from "../config/config.js";
|
|
2
2
|
import { Runners } from "./types.js";
|
|
3
|
-
import {
|
|
4
|
-
import { PipelexRunner } from "./pipelex
|
|
3
|
+
import { MthdsApiClient } from "./api/client.js";
|
|
4
|
+
import { PipelexRunner } from "./pipelex/runner.js";
|
|
5
5
|
export function createRunner(type, libraryDirs) {
|
|
6
|
-
const
|
|
6
|
+
const config = loadConfig();
|
|
7
|
+
const runnerType = type ?? config.runner;
|
|
7
8
|
switch (runnerType) {
|
|
8
9
|
case Runners.API:
|
|
9
|
-
|
|
10
|
+
// The API client IS the API runner (parity D8). Defaults flow from the
|
|
11
|
+
// resolved config (file + env), so the CLI honors `~/.mthds/config`.
|
|
12
|
+
return new MthdsApiClient({
|
|
13
|
+
baseUrl: config.baseUrl,
|
|
14
|
+
apiToken: config.apiKey || undefined,
|
|
15
|
+
});
|
|
10
16
|
case Runners.PIPELEX:
|
|
11
17
|
return new PipelexRunner(libraryDirs);
|
|
12
18
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/runners/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/runners/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,UAAU,YAAY,CAC1B,IAAiB,EACjB,WAAsB;IAEtB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC;IAEzC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,OAAO,CAAC,GAAG;YACd,uEAAuE;YACvE,qEAAqE;YACrE,OAAO,IAAI,cAAc,CAAC;gBACxB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;aACrC,CAAC,CAAC;QACL,KAAK,OAAO,CAAC,OAAO;YAClB,OAAO,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;QACxC;YACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAoB,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
|