@plurnk/plurnk-execs 1.3.12 → 1.4.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/.env.defaults +4 -0
- package/README.md +78 -36
- package/SPEC.md +379 -260
- package/dist/BaseExecutor.d.ts.map +1 -1
- package/dist/BaseExecutor.js +12 -13
- package/dist/BaseExecutor.js.map +1 -1
- package/dist/ErrorDetail.d.ts +8 -0
- package/dist/ErrorDetail.d.ts.map +1 -0
- package/dist/ErrorDetail.js +25 -0
- package/dist/ErrorDetail.js.map +1 -0
- package/dist/Notice.d.ts +3 -0
- package/dist/Notice.d.ts.map +1 -0
- package/dist/Notice.js +2 -0
- package/dist/Notice.js.map +1 -0
- package/dist/RuntimeTag.d.ts +5 -0
- package/dist/RuntimeTag.d.ts.map +1 -0
- package/dist/RuntimeTag.js +28 -0
- package/dist/RuntimeTag.js.map +1 -0
- package/dist/SubprocessExecutor.d.ts +1 -1
- package/dist/SubprocessExecutor.d.ts.map +1 -1
- package/dist/SubprocessExecutor.js +67 -20
- package/dist/SubprocessExecutor.js.map +1 -1
- package/dist/advertise.d.ts +4 -0
- package/dist/advertise.d.ts.map +1 -1
- package/dist/advertise.js +4 -2
- package/dist/advertise.js.map +1 -1
- package/dist/discover.d.ts.map +1 -1
- package/dist/discover.js +52 -84
- package/dist/discover.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/policy.d.ts +1 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +21 -20
- package/dist/policy.js.map +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/tokenizeArgv.d.ts +5 -0
- package/dist/tokenizeArgv.d.ts.map +1 -0
- package/dist/tokenizeArgv.js +69 -0
- package/dist/tokenizeArgv.js.map +1 -0
- package/dist/types.d.ts +6 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -15
- package/dist/TelemetryEvent.d.ts +0 -18
- package/dist/TelemetryEvent.d.ts.map +0 -1
- package/dist/TelemetryEvent.js +0 -2
- package/dist/TelemetryEvent.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseExecutor.d.ts","sourceRoot":"","sources":["../src/BaseExecutor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAWnH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,YAAa,YAAW,aAAa;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAG/C;
|
|
1
|
+
{"version":3,"file":"BaseExecutor.d.ts","sourceRoot":"","sources":["../src/BaseExecutor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAWnH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,YAAa,YAAW,aAAa;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAG/C;IAaD,IAAI,QAAQ,IAAI,cAAc,CAS7B;IAID,IAAI,cAAc,IAAI,MAAM,CAE3B;IAOD,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAO/D,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAmB5C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAE/D;IAQD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAErC;CACJ"}
|
package/dist/BaseExecutor.js
CHANGED
|
@@ -7,7 +7,7 @@ import { OutputScheme } from "@plurnk/plurnk-schemes";
|
|
|
7
7
|
// The consuming scheme owns all I/O and lifecycle machinery (db, channels,
|
|
8
8
|
// subscriptions, AbortController bridging, wake-on-completion). The executor
|
|
9
9
|
// receives sinks via ExecArgs and nothing more — it stays stateless across
|
|
10
|
-
// runs beyond its construction metadata (
|
|
10
|
+
// runs beyond its construction metadata ({§executor-role}).
|
|
11
11
|
export default class BaseExecutor {
|
|
12
12
|
runtime;
|
|
13
13
|
glyph;
|
|
@@ -15,11 +15,12 @@ export default class BaseExecutor {
|
|
|
15
15
|
this.runtime = runtime;
|
|
16
16
|
this.glyph = glyph;
|
|
17
17
|
}
|
|
18
|
-
//
|
|
18
|
+
// Output addressing: the executor produces and the consumer reads
|
|
19
|
+
// ({§executor-output-address}).
|
|
19
20
|
// The executor is a PRODUCER. Its output streams (via run()'s write/setState)
|
|
20
21
|
// into a consumer-held log entry addressed at `<tag>://<coord>`; every READ /
|
|
21
22
|
// FIND over that entry is the consumer's uniform machinery, identical across
|
|
22
|
-
// every tag
|
|
23
|
+
// every tag. The executor's only scheme-facing job is to
|
|
23
24
|
// DECLARE the output scheme's manifest — derived from the runtime decl via
|
|
24
25
|
// schemes' `manifestFromRuntime`, which is the sole reason it conforms to
|
|
25
26
|
// SchemeHandler. It serves no read: BaseExecutor implements no read/find and
|
|
@@ -43,7 +44,7 @@ export default class BaseExecutor {
|
|
|
43
44
|
// sqlite, where the daemon itself satisfies the dependency). Subclasses
|
|
44
45
|
// that depend on an external binary or external config override.
|
|
45
46
|
//
|
|
46
|
-
// The consumer probes once at boot, per
|
|
47
|
+
// The consumer probes once at boot, per runtime tag, runs probes concurrently
|
|
47
48
|
// under a per-probe timeout, and caches the result. Unlike `run()`, this
|
|
48
49
|
// MAY reject — the consumer treats a rejection as `{ available: false }` —
|
|
49
50
|
// but returning a crafted `{ available: false, detail }` for an expected
|
|
@@ -53,19 +54,17 @@ export default class BaseExecutor {
|
|
|
53
54
|
// override that spawns a child (or opens a connection) MUST hand it to that
|
|
54
55
|
// child so a resolved or timed-out probe REAPS it at once — otherwise an
|
|
55
56
|
// in-flight `--version` write can EPIPE after the host tears down
|
|
56
|
-
// (
|
|
57
|
+
// ({§executor-probe}). Optional and ignore-safe: a probe that spawns nothing
|
|
57
58
|
// needs nothing.
|
|
58
59
|
async probe(_signal) {
|
|
59
60
|
return { available: true };
|
|
60
61
|
}
|
|
61
|
-
// Side-effect class of an invocation against
|
|
62
|
-
//
|
|
63
|
-
// consumer
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
// footgun). Default `host` is the conservative, fail-safe end — anything we
|
|
68
|
-
// can't classify is treated as host code-execution and proposed.
|
|
62
|
+
// Side-effect class of an invocation against the consumer-canonical logical
|
|
63
|
+
// target ({§executor-effect}). It is normally the same value run() receives;
|
|
64
|
+
// a consumer that later materializes an addressed source may supply a stable,
|
|
65
|
+
// opaque target-present identity instead. MUST be pure, synchronous, and
|
|
66
|
+
// cheap: classify the target only, NEVER authored command text. Default
|
|
67
|
+
// `host` is conservative — anything unclassifiable is proposed.
|
|
69
68
|
effect(_target) {
|
|
70
69
|
return "host";
|
|
71
70
|
}
|
package/dist/BaseExecutor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseExecutor.js","sourceRoot":"","sources":["../src/BaseExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"BaseExecutor.js","sourceRoot":"","sources":["../src/BaseExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,4DAA4D;AAC5D,MAAM,CAAC,OAAO,OAAgB,YAAY;IAC7B,OAAO,CAAS;IAChB,KAAK,CAAS;IAEvB,YAAY,EAAE,OAAO,EAAE,KAAK,EAAoB;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,kEAAkE;IAClE,gCAAgC;IAChC,8EAA8E;IAC9E,8EAA8E;IAC9E,6EAA6E;IAC7E,yDAAyD;IACzD,2EAA2E;IAC3E,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,8EAA8E;IAC9E,IAAI,QAAQ;QACR,OAAO,YAAY,CAAC,mBAAmB,CAAC;YACpC,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAC7E;YACD,cAAc,EAAE,IAAI,CAAC,cAAc;SACtC,CAAC,CAAC;IACP,CAAC;IAED,yEAAyE;IACzE,oEAAoE;IACpE,IAAI,cAAc;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAgBD,wEAAwE;IACxE,0EAA0E;IAC1E,wEAAwE;IACxE,iEAAiE;IACjE,EAAE;IACF,8EAA8E;IAC9E,yEAAyE;IACzE,2EAA2E;IAC3E,yEAAyE;IACzE,4DAA4D;IAC5D,EAAE;IACF,sEAAsE;IACtE,4EAA4E;IAC5E,yEAAyE;IACzE,kEAAkE;IAClE,6EAA6E;IAC7E,iBAAiB;IACjB,KAAK,CAAC,KAAK,CAAC,OAAqB;QAC7B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,8EAA8E;IAC9E,yEAAyE;IACzE,wEAAwE;IACxE,gEAAgE;IAChE,MAAM,CAAC,OAAsB;QACzB,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExecResult } from "./types.ts";
|
|
2
|
+
export declare const ERROR_DETAIL_LIMIT = "PLURNK_EXECS_ERROR_DETAIL_LIMIT";
|
|
3
|
+
export default class ErrorDetail {
|
|
4
|
+
static configuredLimit(): number | null;
|
|
5
|
+
static preview(value: unknown, limit: number): string;
|
|
6
|
+
static invalidConfiguration(owner: string): ExecResult;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=ErrorDetail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorDetail.d.ts","sourceRoot":"","sources":["../src/ErrorDetail.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AAEpE,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,MAAM,CAAC,eAAe,IAAI,MAAM,GAAG,IAAI,CAKtC;IAED,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;IAED,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAarD;CACJ"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Results } from "@plurnk/plurnk-schemes";
|
|
2
|
+
export const ERROR_DETAIL_LIMIT = "PLURNK_EXECS_ERROR_DETAIL_LIMIT";
|
|
3
|
+
export default class ErrorDetail {
|
|
4
|
+
static configuredLimit() {
|
|
5
|
+
const raw = process.env[ERROR_DETAIL_LIMIT];
|
|
6
|
+
if (raw === undefined || raw === "")
|
|
7
|
+
return null;
|
|
8
|
+
const limit = Number(raw);
|
|
9
|
+
return Number.isSafeInteger(limit) && limit >= 0 ? limit : null;
|
|
10
|
+
}
|
|
11
|
+
static preview(value, limit) {
|
|
12
|
+
const text = value instanceof Error ? value.message : String(value);
|
|
13
|
+
return text.length > limit
|
|
14
|
+
? `${text.slice(0, limit)}...`
|
|
15
|
+
: text;
|
|
16
|
+
}
|
|
17
|
+
static invalidConfiguration(owner) {
|
|
18
|
+
return Results.failure(owner, "invalid-configuration", 500, `${ERROR_DETAIL_LIMIT} must be set to a non-negative integer.`, {}, {
|
|
19
|
+
configuration: ERROR_DETAIL_LIMIT,
|
|
20
|
+
stage: "configuration",
|
|
21
|
+
retryable: false,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ErrorDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorDetail.js","sourceRoot":"","sources":["../src/ErrorDetail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAEpE,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,MAAM,CAAC,eAAe;QAClB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC5C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAc,EAAE,KAAa;QACxC,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK;YACtB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK;YAC9B,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,KAAa;QACrC,OAAO,OAAO,CAAC,OAAO,CAClB,KAAK,EACL,uBAAuB,EACvB,GAAG,EACH,GAAG,kBAAkB,yCAAyC,EAC9D,EAAE,EACF;YACI,aAAa,EAAE,kBAAkB;YACjC,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,KAAK;SACnB,CACJ,CAAC;IACN,CAAC;CACJ"}
|
package/dist/Notice.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Notice.d.ts","sourceRoot":"","sources":["../src/Notice.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,aAAa,EACb,aAAa,EACb,MAAM,GACT,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC"}
|
package/dist/Notice.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Notice.js","sourceRoot":"","sources":["../src/Notice.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeTag.d.ts","sourceRoot":"","sources":["../src/RuntimeTag.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEzC;IAED,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYnD;CACJ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const SHAPE = /^[a-z][a-z0-9+.-]*$/;
|
|
2
|
+
const SHAPE_TEXT = "[a-z][a-z0-9+.-]*";
|
|
3
|
+
const RESERVED = new Map([
|
|
4
|
+
["only", "PLURNK_EXECS_ONLY"],
|
|
5
|
+
]);
|
|
6
|
+
// One admission rule for installed and module-owned executor identities
|
|
7
|
+
// ({§executor-runtime-declaration}). A runtime tag is also its output URI
|
|
8
|
+
// scheme, so canonical lowercase scheme syntax prevents folded aliases and
|
|
9
|
+
// keeps package-owned docs beneath docs/<tag>.md.
|
|
10
|
+
export default class RuntimeTag {
|
|
11
|
+
static is(value) {
|
|
12
|
+
return typeof value === "string" && SHAPE.test(value) && !RESERVED.has(value);
|
|
13
|
+
}
|
|
14
|
+
static assert(value, owner) {
|
|
15
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
16
|
+
throw new Error(`exec runtime declaration invalid: ${owner} must declare a string name matching ${SHAPE_TEXT} (lowercase URI-scheme syntax)`);
|
|
17
|
+
}
|
|
18
|
+
if (!SHAPE.test(value)) {
|
|
19
|
+
throw new Error(`exec runtime declaration invalid: ${owner} name '${value}' must match ${SHAPE_TEXT} (lowercase URI-scheme syntax)`);
|
|
20
|
+
}
|
|
21
|
+
const configuration = RESERVED.get(value);
|
|
22
|
+
if (configuration !== undefined) {
|
|
23
|
+
throw new Error(`exec runtime declaration invalid: ${owner} name '${value}' is reserved by ${configuration}`);
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=RuntimeTag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeTag.js","sourceRoot":"","sources":["../src/RuntimeTag.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,qBAAqB,CAAC;AACpC,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACrB,CAAC,MAAM,EAAE,mBAAmB,CAAC;CAChC,CAAC,CAAC;AAEH,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,kDAAkD;AAClD,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,MAAM,CAAC,EAAE,CAAC,KAAc;QACpB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAc,EAAE,KAAa;QACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,wCAAwC,UAAU,gCAAgC,CAAC,CAAC;QAClJ,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,UAAU,KAAK,gBAAgB,UAAU,gCAAgC,CAAC,CAAC;QACzI,CAAC;QACD,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,UAAU,KAAK,oBAAoB,aAAa,EAAE,CAAC,CAAC;QAClH,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
|
|
@@ -6,6 +6,6 @@ export default class SubprocessExecutor extends BaseExecutor {
|
|
|
6
6
|
effect(_target: string | null): Effect;
|
|
7
7
|
probe(signal?: AbortSignal): Promise<RuntimeAvailability>;
|
|
8
8
|
protected spawnArgs(runtime: string, command: string, target: string | null): SpawnArgs;
|
|
9
|
-
run({ runtime, command, cwd, target, env, signal, write, setState
|
|
9
|
+
run({ runtime, command, cwd, target, env, signal, write, setState }: ExecArgs): Promise<ExecResult>;
|
|
10
10
|
}
|
|
11
11
|
//# sourceMappingURL=SubprocessExecutor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubprocessExecutor.d.ts","sourceRoot":"","sources":["../src/SubprocessExecutor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SubprocessExecutor.d.ts","sourceRoot":"","sources":["../src/SubprocessExecutor.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAI7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAuB5G,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,YAAY;IACxD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAKpD;IAKD,SAAS,KAAK,MAAM,IAAI,MAAM,GAAG,IAAI,CAEpC;IAGQ,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE9C;IAEc,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2BvE;IASD,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAEtF;IAED,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAuKlG;CACJ"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { Results } from "@plurnk/plurnk-schemes";
|
|
2
3
|
import BaseExecutor from "./BaseExecutor.js";
|
|
4
|
+
import ErrorDetail, { ERROR_DETAIL_LIMIT } from "./ErrorDetail.js";
|
|
3
5
|
import Runtime from "./runtime.js";
|
|
6
|
+
import { CommandSyntaxError } from "./tokenizeArgv.js";
|
|
4
7
|
// KILL[code]: an abort reason carrying `{ signal }` (a Unix signal name or
|
|
5
8
|
// number) delivers exactly that signal, once, fire-and-forget — no escalation;
|
|
6
9
|
// the model asked for a specific code. Absent → null → the polite default.
|
|
@@ -44,10 +47,15 @@ export default class SubprocessExecutor extends BaseExecutor {
|
|
|
44
47
|
return { available: true };
|
|
45
48
|
if (signal?.aborted)
|
|
46
49
|
return { available: false };
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
const detailLimit = ErrorDetail.configuredLimit();
|
|
51
|
+
if (detailLimit === null) {
|
|
52
|
+
return { available: false, detail: `${ERROR_DETAIL_LIMIT} must be set to a non-negative integer.` };
|
|
53
|
+
}
|
|
54
|
+
// No internal deadline — the per-probe timeout is the consumer's
|
|
55
|
+
// ({§executor-probe}), handed in as `signal`. We pass it to spawn so a
|
|
56
|
+
// resolved or
|
|
49
57
|
// timed-out probe REAPS its child at once; no in-flight `--version` write
|
|
50
|
-
// can EPIPE after host teardown
|
|
58
|
+
// can EPIPE after host teardown. stdin/stderr are
|
|
51
59
|
// /dev/null'd — only stdout is read, for the version detail.
|
|
52
60
|
return new Promise((resolve) => {
|
|
53
61
|
let settled = false;
|
|
@@ -62,7 +70,7 @@ export default class SubprocessExecutor extends BaseExecutor {
|
|
|
62
70
|
? { available: false }
|
|
63
71
|
: { available: false, detail: `${bin} not found on PATH` }));
|
|
64
72
|
child.on("close", (code) => done(code === 0
|
|
65
|
-
? { available: true, detail: out.trim().split("\n")[0] || undefined }
|
|
73
|
+
? { available: true, detail: ErrorDetail.preview(out.trim().split("\n")[0], detailLimit) || undefined }
|
|
66
74
|
: { available: false, detail: `${bin} --version exited ${code}` }));
|
|
67
75
|
});
|
|
68
76
|
}
|
|
@@ -71,18 +79,45 @@ export default class SubprocessExecutor extends BaseExecutor {
|
|
|
71
79
|
// interpreter table (e.g. the common-REPL harness) override this — and so
|
|
72
80
|
// inherit run()'s streaming + process-group abort handling rather than
|
|
73
81
|
// reimplementing it. When `target` is set, the body becomes the program's
|
|
74
|
-
// stdin (
|
|
82
|
+
// stdin ({§executor-subprocess-routing}); the plugin maps it and the parent
|
|
83
|
+
// parses nothing.
|
|
75
84
|
spawnArgs(runtime, command, target) {
|
|
76
85
|
return Runtime.resolve(runtime, command, target);
|
|
77
86
|
}
|
|
78
|
-
run({ runtime, command, cwd, target, env, signal, write, setState
|
|
79
|
-
const
|
|
87
|
+
run({ runtime, command, cwd, target, env, signal, write, setState }) {
|
|
88
|
+
const detailLimit = ErrorDetail.configuredLimit();
|
|
89
|
+
if (detailLimit === null) {
|
|
90
|
+
setState("stdout", "errored");
|
|
91
|
+
setState("stderr", "errored");
|
|
92
|
+
return Promise.resolve(ErrorDetail.invalidConfiguration("executor:subprocess"));
|
|
93
|
+
}
|
|
94
|
+
let spawnArgs;
|
|
95
|
+
try {
|
|
96
|
+
spawnArgs = this.spawnArgs(runtime, command, target);
|
|
97
|
+
}
|
|
98
|
+
catch (cause) {
|
|
99
|
+
if (!(cause instanceof CommandSyntaxError))
|
|
100
|
+
throw cause;
|
|
101
|
+
setState("stdout", "errored");
|
|
102
|
+
setState("stderr", "errored");
|
|
103
|
+
return Promise.resolve(Results.failure("executor:subprocess", "invalid-command", 400, `Could not parse the '${runtime}' command: ${ErrorDetail.preview(cause, detailLimit)}.`, { exitCode: -1 }, {
|
|
104
|
+
runtime,
|
|
105
|
+
stage: "input-validation",
|
|
106
|
+
recovery: "Correct the command quoting and retry.",
|
|
107
|
+
retryable: false,
|
|
108
|
+
}));
|
|
109
|
+
}
|
|
110
|
+
const { cmd, args, useShell, stdin } = spawnArgs;
|
|
80
111
|
return new Promise((resolve) => {
|
|
81
112
|
// Already cancelled before we start — don't launch a doomed process.
|
|
82
113
|
if (signal.aborted) {
|
|
83
114
|
setState("stdout", "errored");
|
|
84
115
|
setState("stderr", "errored");
|
|
85
|
-
resolve(
|
|
116
|
+
resolve(Results.failure("executor:subprocess", "cancelled", 499, `Execution of '${runtime}' was cancelled before it started.`, { exitCode: -1 }, {
|
|
117
|
+
runtime,
|
|
118
|
+
stage: "execution",
|
|
119
|
+
retryable: false,
|
|
120
|
+
}));
|
|
86
121
|
return;
|
|
87
122
|
}
|
|
88
123
|
let settled = false;
|
|
@@ -92,11 +127,11 @@ export default class SubprocessExecutor extends BaseExecutor {
|
|
|
92
127
|
// (e.g. the `sleep` in `sh -c "sleep 30"`) that a bare SIGTERM to the
|
|
93
128
|
// direct child orphans, leaking the process and its stdout pipe. We
|
|
94
129
|
// drive cancellation manually rather than via spawn's `signal`
|
|
95
|
-
// option, which only kills the direct child (
|
|
130
|
+
// option, which only kills the direct child ({§executor-cancellation}).
|
|
96
131
|
// env: consumer-scoped when provided (drops plurnk's own secrets,
|
|
97
|
-
//
|
|
132
|
+
// {§exec-env-scoped}); host env inherited when absent.
|
|
98
133
|
// fd0: a provided stdin body gets a pipe (written + EOF'd below); NO
|
|
99
|
-
// stdin body gets /dev/null, never a dangling open pipe
|
|
134
|
+
// stdin body gets /dev/null, never a dangling open pipe. A bare
|
|
100
135
|
// interpreter reached via the sh fallthrough (`EXEC[python3]` → `sh -c
|
|
101
136
|
// "python3 …"`) reads its program from fd0 — an unclosed pipe there
|
|
102
137
|
// never EOFs, so the child blocks in the kernel (unix_stream_read) and
|
|
@@ -112,8 +147,8 @@ export default class SubprocessExecutor extends BaseExecutor {
|
|
|
112
147
|
// A fast-exiting child (`jq` on a small file — dead in milliseconds)
|
|
113
148
|
// can already be gone when this write lands; the end() then EPIPEs,
|
|
114
149
|
// and with no 'error' listener the rejection escapes and fails the
|
|
115
|
-
// consumer even though the exec succeeded
|
|
116
|
-
// the
|
|
150
|
+
// consumer even though the exec succeeded. The child's exit code is
|
|
151
|
+
// the truth; a
|
|
117
152
|
// stdin write racing child exit is expected noise, not a failure.
|
|
118
153
|
if (stdin !== undefined && child.stdin) {
|
|
119
154
|
child.stdin.on("error", () => { });
|
|
@@ -159,19 +194,31 @@ export default class SubprocessExecutor extends BaseExecutor {
|
|
|
159
194
|
child.stdout?.on("data", (chunk) => write("stdout", chunk.toString("utf8")));
|
|
160
195
|
child.stderr?.on("data", (chunk) => write("stderr", chunk.toString("utf8")));
|
|
161
196
|
child.on("error", (err) => {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
197
|
+
finish(Results.failure("executor:subprocess", "spawn-failed", 500, `Could not start '${runtime}': ${ErrorDetail.preview(err, detailLimit)}`, { exitCode: -1 }, {
|
|
198
|
+
runtime,
|
|
199
|
+
stage: "spawn",
|
|
200
|
+
errorCode: err.code,
|
|
201
|
+
retryable: false,
|
|
202
|
+
}), "errored");
|
|
167
203
|
});
|
|
168
204
|
child.on("close", (code) => {
|
|
169
205
|
if (signal.aborted) {
|
|
170
|
-
finish(
|
|
206
|
+
finish(Results.failure("executor:subprocess", "cancelled", 499, `Execution of '${runtime}' was cancelled.`, { exitCode: code ?? -1 }, {
|
|
207
|
+
runtime,
|
|
208
|
+
stage: "execution",
|
|
209
|
+
retryable: false,
|
|
210
|
+
}), "errored");
|
|
171
211
|
return;
|
|
172
212
|
}
|
|
173
213
|
const ok = code === 0;
|
|
174
|
-
finish(
|
|
214
|
+
finish(ok
|
|
215
|
+
? { status: 200, exitCode: 0 }
|
|
216
|
+
: Results.failure("executor:subprocess", "nonzero-exit", 500, `'${runtime}' exited with code ${code ?? -1}.`, { exitCode: code ?? -1 }, {
|
|
217
|
+
runtime,
|
|
218
|
+
stage: "execution",
|
|
219
|
+
recovery: "Inspect the stdout and stderr channels before correcting the command.",
|
|
220
|
+
retryable: false,
|
|
221
|
+
}), ok ? "closed" : "errored");
|
|
175
222
|
});
|
|
176
223
|
});
|
|
177
224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubprocessExecutor.js","sourceRoot":"","sources":["../src/SubprocessExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,OAAO,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"SubprocessExecutor.js","sourceRoot":"","sources":["../src/SubprocessExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,WAAW,EAAE,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,2EAA2E;AAC3E,+EAA+E;AAC/E,2EAA2E;AAC3E,MAAM,cAAc,GAAG,CAAC,MAAe,EAAkC,EAAE;IACvE,MAAM,GAAG,GAAI,MAAkD,EAAE,MAAM,CAAC;IACxE,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3F,CAAC,CAAC;AAEF,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,kFAAkF;AAClF,MAAM,iBAAiB,GAAG,CAAC,MAAe,EAAiB,EAAE;IACzD,MAAM,CAAC,GAAG,MAA0E,CAAC;IACrF,OAAO,CAAC,EAAE,YAAY,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACxF,CAAC,CAAC;AAEF,+EAA+E;AAC/E,+EAA+E;AAC/E,2CAA2C;AAC3C,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,YAAY;IACxD,IAAI,QAAQ;QACR,OAAO;YACH,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;YACnC,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;SACtC,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,uEAAuE;IACvE,qEAAqE;IACrE,IAAc,MAAM;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,gEAAgE;IACvD,MAAM,CAAC,OAAsB;QAClC,OAAO,MAAM,CAAC;IAClB,CAAC;IAEQ,KAAK,CAAC,KAAK,CAAC,MAAoB;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7C,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,yCAAyC,EAAE,CAAC;QACxG,CAAC;QACD,iEAAiE;QACjE,uEAAuE;QACvE,cAAc;QACd,0EAA0E;QAC1E,kDAAkD;QAClD,6DAA6D;QAC7D,OAAO,IAAI,OAAO,CAAsB,CAAC,OAAO,EAAE,EAAE;YAChD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,IAAI,GAAG,CAAC,CAAsB,EAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,CAAC,CAAC,CAAC;YACjG,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAE,GAA6B,CAAC,IAAI,KAAK,WAAW;gBAC/E,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;gBACtB,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,oBAAoB,EAAE,CAAC,CAAC,CAAC;YACjE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;gBACvC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,SAAS,EAAE;gBACvG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,qBAAqB,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACP,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,uEAAuE;IACvE,0EAA0E;IAC1E,4EAA4E;IAC5E,kBAAkB;IACR,SAAS,CAAC,OAAe,EAAE,OAAe,EAAE,MAAqB;QACvE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAY;QACzE,MAAM,WAAW,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,SAAoB,CAAC;QACzB,IAAI,CAAC;YACD,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC;gBAAE,MAAM,KAAK,CAAC;YACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAClC,qBAAqB,EACrB,iBAAiB,EACjB,GAAG,EACH,wBAAwB,OAAO,cAAc,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,EACvF,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAChB;gBACI,OAAO;gBACP,KAAK,EAAE,kBAAkB;gBACzB,QAAQ,EAAE,wCAAwC;gBAClD,SAAS,EAAE,KAAK;aACnB,CACJ,CAAC,CAAC;QACP,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QACjD,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE;YACvC,qEAAqE;YACrE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC9B,OAAO,CAAC,OAAO,CAAC,OAAO,CACnB,qBAAqB,EACrB,WAAW,EACX,GAAG,EACH,iBAAiB,OAAO,oCAAoC,EAC5D,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAChB;oBACI,OAAO;oBACP,KAAK,EAAE,WAAW;oBAClB,SAAS,EAAE,KAAK;iBACnB,CACJ,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YAED,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,SAAqC,CAAC;YAE1C,oEAAoE;YACpE,qEAAqE;YACrE,sEAAsE;YACtE,oEAAoE;YACpE,+DAA+D;YAC/D,wEAAwE;YACxE,kEAAkE;YAClE,uDAAuD;YACvD,qEAAqE;YACrE,gEAAgE;YAChE,uEAAuE;YACvE,oEAAoE;YACpE,uEAAuE;YACvE,oEAAoE;YACpE,sEAAsE;YACtE,6DAA6D;YAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;gBAC3B,KAAK,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAChE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI;aAClF,CAAC,CAAC;YAEH,oEAAoE;YACpE,mEAAmE;YACnE,qEAAqE;YACrE,oEAAoE;YACpE,mEAAmE;YACnE,oEAAoE;YACpE,eAAe;YACf,kEAAkE;YAClE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACrC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAA+D,CAAC,CAAC,CAAC;gBAC/F,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,GAA4B,EAAQ,EAAE;gBACrD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;oBAAE,OAAO;gBACpC,IAAI,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;YAC7E,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAS,EAAE;gBACvB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,kEAAkE;gBAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACvD,8DAA8D;gBAC9D,iEAAiE;gBACjE,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACpB,gEAAgE;gBAChE,gEAAgE;gBAChE,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,OAAO,KAAK,IAAI;oBAAE,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;YACtF,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAE,KAA2B,EAAQ,EAAE;gBACrE,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,SAAS;oBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;gBACvC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC1B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC,CAAC;YAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAErF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACtB,MAAM,CAAC,OAAO,CAAC,OAAO,CAClB,qBAAqB,EACrB,cAAc,EACd,GAAG,EACH,oBAAoB,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EACxE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAChB;oBACI,OAAO;oBACP,KAAK,EAAE,OAAO;oBACd,SAAS,EAAG,GAA6B,CAAC,IAAI;oBAC9C,SAAS,EAAE,KAAK;iBACnB,CACJ,EAAE,SAAS,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,CAAC,OAAO,CAAC,OAAO,CAClB,qBAAqB,EACrB,WAAW,EACX,GAAG,EACH,iBAAiB,OAAO,kBAAkB,EAC1C,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,EACxB;wBACI,OAAO;wBACP,KAAK,EAAE,WAAW;wBAClB,SAAS,EAAE,KAAK;qBACnB,CACJ,EAAE,SAAS,CAAC,CAAC;oBACd,OAAO;gBACX,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;gBACtB,MAAM,CAAC,EAAE;oBACL,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;oBAC9B,CAAC,CAAC,OAAO,CAAC,OAAO,CACb,qBAAqB,EACrB,cAAc,EACd,GAAG,EACH,IAAI,OAAO,sBAAsB,IAAI,IAAI,CAAC,CAAC,GAAG,EAC9C,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,EACxB;wBACI,OAAO;wBACP,KAAK,EAAE,WAAW;wBAClB,QAAQ,EAAE,uEAAuE;wBACjF,SAAS,EAAE,KAAK;qBACnB,CACJ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|
package/dist/advertise.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { ExecInfo, ExecRegistry } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Frozen 1.x compatibility helper. Hosts own executable admission
|
|
4
|
+
* and presentation through their current composition ({§executor-advertise-compat}).
|
|
5
|
+
*/
|
|
2
6
|
export default class Advertise {
|
|
3
7
|
static readonly NO_EXECS_NOTICE = "No EXEC operations permitted";
|
|
4
8
|
static contribute(registry: ExecRegistry, isPermitted: (tag: string) => boolean): {
|
package/dist/advertise.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advertise.d.ts","sourceRoot":"","sources":["../src/advertise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"advertise.d.ts","sourceRoot":"","sources":["../src/advertise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B,MAAM,CAAC,QAAQ,CAAC,eAAe,kCAAkC;IAEjE,MAAM,CAAC,UAAU,CACb,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GACtC;QAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAGlD;CACJ"}
|
package/dist/advertise.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Frozen 1.x compatibility helper. Hosts own executable admission
|
|
3
|
+
* and presentation through their current composition ({§executor-advertise-compat}).
|
|
4
|
+
*/
|
|
2
5
|
export default class Advertise {
|
|
3
|
-
// Deliberate wording — validated by the consumer probe, not free to edit (SPEC §3.4).
|
|
4
6
|
static NO_EXECS_NOTICE = "No EXEC operations permitted";
|
|
5
7
|
static contribute(registry, isPermitted) {
|
|
6
8
|
const permitted = [...registry.values()].filter(({ runtime }) => isPermitted(runtime));
|
package/dist/advertise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advertise.js","sourceRoot":"","sources":["../src/advertise.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"advertise.js","sourceRoot":"","sources":["../src/advertise.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B,MAAM,CAAU,eAAe,GAAG,8BAA8B,CAAC;IAEjE,MAAM,CAAC,UAAU,CACb,QAAsB,EACtB,WAAqC;QAErC,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,CAAC;CACJ"}
|
package/dist/discover.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAyB,MAAM,YAAY,CAAC;AA8BpF,MAAM,CAAC,OAAO,OAAO,QAAQ;;IACzB,OAAa,IAAI,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CAwCnE;CAsIJ"}
|