@prismer/runtime 1.9.1 → 1.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +178 -0
- package/README.md +363 -229
- package/dist/cli.cjs +10269 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.js +10257 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.cjs +10603 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1643 -0
- package/dist/index.d.ts +1496 -1916
- package/dist/index.js +9702 -9177
- package/dist/index.js.map +1 -1
- package/package.json +31 -33
- package/dist/adapter-registry-EMZFKFYK.mjs +0 -8
- package/dist/adapter-registry-EMZFKFYK.mjs.map +0 -1
- package/dist/artifacts-uploader-N2HNBSTW.mjs +0 -159
- package/dist/artifacts-uploader-N2HNBSTW.mjs.map +0 -1
- package/dist/auto-register-M4YSPJS6.mjs +0 -204
- package/dist/auto-register-M4YSPJS6.mjs.map +0 -1
- package/dist/bin/prismer.js +0 -14988
- package/dist/chunk-BJTO5JO5.mjs +0 -11
- package/dist/chunk-BJTO5JO5.mjs.map +0 -1
- package/dist/chunk-JIEDFDVI.mjs +0 -148
- package/dist/chunk-JIEDFDVI.mjs.map +0 -1
- package/dist/chunk-NDNX2G6O.mjs +0 -68
- package/dist/chunk-NDNX2G6O.mjs.map +0 -1
- package/dist/chunk-POWV475F.mjs +0 -45
- package/dist/chunk-POWV475F.mjs.map +0 -1
- package/dist/chunk-VTFKZAUY.mjs +0 -68
- package/dist/chunk-VTFKZAUY.mjs.map +0 -1
- package/dist/dispatch-mux-MW4HHICS.mjs +0 -8
- package/dist/dispatch-mux-MW4HHICS.mjs.map +0 -1
- package/dist/dispatch-rpc-J7H6KC2V.mjs +0 -78
- package/dist/dispatch-rpc-J7H6KC2V.mjs.map +0 -1
- package/dist/fs-rpc-OSHJZYK6.mjs +0 -58
- package/dist/fs-rpc-OSHJZYK6.mjs.map +0 -1
- package/dist/heartbeat-loop-H2LAI3V5.mjs +0 -95
- package/dist/heartbeat-loop-H2LAI3V5.mjs.map +0 -1
- package/dist/index.d.mts +0 -2063
- package/dist/index.mjs +0 -8807
- package/dist/index.mjs.map +0 -1
- package/dist/mode-b-DXJ7FJAL.mjs +0 -152
- package/dist/mode-b-DXJ7FJAL.mjs.map +0 -1
- package/dist/registry-ZYU2HDFL.mjs +0 -12
- package/dist/registry-ZYU2HDFL.mjs.map +0 -1
- /package/{dist → assets}/icon +0 -0
- /package/{dist → assets}/smallicon +0 -0
package/dist/mode-b-DXJ7FJAL.mjs
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import "./chunk-BJTO5JO5.mjs";
|
|
2
|
-
|
|
3
|
-
// src/adapters/mode-b.ts
|
|
4
|
-
function validateLoopbackUrl(url) {
|
|
5
|
-
if (typeof url !== "string" || url.length === 0) {
|
|
6
|
-
return { ok: false, error: "loopback URL must be a non-empty string" };
|
|
7
|
-
}
|
|
8
|
-
let parsed;
|
|
9
|
-
try {
|
|
10
|
-
parsed = new URL(url);
|
|
11
|
-
} catch {
|
|
12
|
-
return { ok: false, error: "loopback URL malformed" };
|
|
13
|
-
}
|
|
14
|
-
if (parsed.protocol !== "http:") {
|
|
15
|
-
return { ok: false, error: `loopback URL must use http: scheme, got ${parsed.protocol}` };
|
|
16
|
-
}
|
|
17
|
-
if (parsed.hostname !== "127.0.0.1") {
|
|
18
|
-
return { ok: false, error: `loopback URL must point to 127.0.0.1, got ${parsed.hostname}` };
|
|
19
|
-
}
|
|
20
|
-
if (!parsed.port || parsed.port.length === 0) {
|
|
21
|
-
return { ok: false, error: "loopback URL must include an explicit port" };
|
|
22
|
-
}
|
|
23
|
-
if (parsed.pathname !== "/" && parsed.pathname !== "") {
|
|
24
|
-
return { ok: false, error: "loopback_url_must_be_origin_only:pathname not empty" };
|
|
25
|
-
}
|
|
26
|
-
if (parsed.search && parsed.search.length > 0) {
|
|
27
|
-
return { ok: false, error: "loopback_url_must_be_origin_only:search not empty" };
|
|
28
|
-
}
|
|
29
|
-
if (parsed.hash && parsed.hash.length > 0) {
|
|
30
|
-
return { ok: false, error: "loopback_url_must_be_origin_only:hash not empty" };
|
|
31
|
-
}
|
|
32
|
-
return { ok: true };
|
|
33
|
-
}
|
|
34
|
-
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
35
|
-
function buildModeBAdapter(config) {
|
|
36
|
-
const validation = validateLoopbackUrl(config.loopbackUrl);
|
|
37
|
-
if (!validation.ok) {
|
|
38
|
-
throw new Error(`buildModeBAdapter: ${validation.error}`);
|
|
39
|
-
}
|
|
40
|
-
if (!config.name || typeof config.name !== "string") {
|
|
41
|
-
throw new Error("buildModeBAdapter: name required");
|
|
42
|
-
}
|
|
43
|
-
const dispatchUrl = new URL("/dispatch", config.loopbackUrl).toString();
|
|
44
|
-
const healthUrl = new URL("/health", config.loopbackUrl).toString();
|
|
45
|
-
const resetUrl = new URL("/reset", config.loopbackUrl).toString();
|
|
46
|
-
const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
47
|
-
const adapter = {
|
|
48
|
-
name: config.name,
|
|
49
|
-
tiersSupported: config.tiersSupported,
|
|
50
|
-
capabilityTags: config.capabilityTags,
|
|
51
|
-
...config.metadata ? { metadata: { ...config.metadata, transport: "mode_b_http_loopback" } } : { metadata: { transport: "mode_b_http_loopback" } },
|
|
52
|
-
async dispatch(input) {
|
|
53
|
-
const body = serializeDispatchInput(input);
|
|
54
|
-
const controller = new AbortController();
|
|
55
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
56
|
-
try {
|
|
57
|
-
const resp = await fetch(dispatchUrl, {
|
|
58
|
-
method: "POST",
|
|
59
|
-
headers: { "Content-Type": "application/json" },
|
|
60
|
-
body,
|
|
61
|
-
signal: controller.signal
|
|
62
|
-
});
|
|
63
|
-
if (!resp.ok) {
|
|
64
|
-
let detail = "";
|
|
65
|
-
try {
|
|
66
|
-
detail = await resp.text();
|
|
67
|
-
if (detail.length > 200) detail = detail.slice(0, 200) + "\u2026";
|
|
68
|
-
} catch {
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
ok: false,
|
|
72
|
-
error: `mode_b_${resp.status}${detail ? `:${detail}` : ""}`
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
let parsed;
|
|
76
|
-
try {
|
|
77
|
-
parsed = await resp.json();
|
|
78
|
-
} catch (err) {
|
|
79
|
-
return {
|
|
80
|
-
ok: false,
|
|
81
|
-
error: `mode_b_invalid_response:${err.message}`
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
if (!parsed || typeof parsed !== "object") {
|
|
85
|
-
return {
|
|
86
|
-
ok: false,
|
|
87
|
-
error: "mode_b_invalid_response:body not an object"
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
return parsed;
|
|
91
|
-
} catch (err) {
|
|
92
|
-
const msg = err.message ?? String(err);
|
|
93
|
-
return { ok: false, error: `mode_b_network:${msg}` };
|
|
94
|
-
} finally {
|
|
95
|
-
clearTimeout(timer);
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
async health() {
|
|
99
|
-
try {
|
|
100
|
-
const resp = await fetch(healthUrl, {
|
|
101
|
-
signal: AbortSignal.timeout(2e3)
|
|
102
|
-
});
|
|
103
|
-
return resp.ok ? { healthy: true } : { healthy: false, reason: `loopback_${resp.status}` };
|
|
104
|
-
} catch (err) {
|
|
105
|
-
return { healthy: false, reason: err.message };
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
async reset(agentName) {
|
|
109
|
-
const controller = new AbortController();
|
|
110
|
-
const timer = setTimeout(() => controller.abort(), 2e3);
|
|
111
|
-
try {
|
|
112
|
-
const resp = await fetch(resetUrl, {
|
|
113
|
-
method: "POST",
|
|
114
|
-
headers: { "Content-Type": "application/json" },
|
|
115
|
-
body: JSON.stringify({ agentName }),
|
|
116
|
-
signal: controller.signal
|
|
117
|
-
});
|
|
118
|
-
if (!resp.ok) {
|
|
119
|
-
return { ok: false, reason: `mode_b_reset_http_${resp.status}` };
|
|
120
|
-
}
|
|
121
|
-
let parsed = {};
|
|
122
|
-
try {
|
|
123
|
-
const body = await resp.json();
|
|
124
|
-
if (body && typeof body === "object") parsed = body;
|
|
125
|
-
} catch {
|
|
126
|
-
}
|
|
127
|
-
return { ok: true, state: "mode_b_reset", ...parsed };
|
|
128
|
-
} catch (err) {
|
|
129
|
-
return { ok: false, reason: "mode_b_reset_network:" + err.message };
|
|
130
|
-
} finally {
|
|
131
|
-
clearTimeout(timer);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
return adapter;
|
|
136
|
-
}
|
|
137
|
-
function serializeDispatchInput(input) {
|
|
138
|
-
const body = {
|
|
139
|
-
taskId: input.taskId,
|
|
140
|
-
capability: input.capability,
|
|
141
|
-
prompt: input.prompt
|
|
142
|
-
};
|
|
143
|
-
if (typeof input.stepIdx === "number") body.stepIdx = input.stepIdx;
|
|
144
|
-
if (typeof input.deadlineAt === "number") body.deadlineAt = input.deadlineAt;
|
|
145
|
-
if (input.metadata && typeof input.metadata === "object") body.metadata = input.metadata;
|
|
146
|
-
return JSON.stringify(body);
|
|
147
|
-
}
|
|
148
|
-
export {
|
|
149
|
-
buildModeBAdapter,
|
|
150
|
-
validateLoopbackUrl
|
|
151
|
-
};
|
|
152
|
-
//# sourceMappingURL=mode-b-DXJ7FJAL.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/mode-b.ts"],"sourcesContent":["/**\n * Prismer Runtime — Mode B AdapterImpl factory (v1.9.x Task 3).\n *\n * The \"Mode B HTTP loopback\" pattern from\n * docs/version190/22-adapter-integration-contract.md §3.2:\n *\n * - The agent runtime (e.g. OpenClaw, Hermes) keeps a long-lived\n * process alive and exposes a tiny HTTP listener on\n * 127.0.0.1:<port>.\n * - On startup it POSTs to the daemon's\n * /api/v1/adapters/register-mode-b endpoint to announce its\n * loopback URL.\n * - The daemon builds a Mode B AdapterImpl whose `dispatch()` is an\n * HTTP POST to that loopback URL — this REPLACES whatever CLI\n * shim auto-register installed.\n *\n * Why a *factory* and not a static module export: each registration\n * carries different metadata (adapter name, tiers, capability tags,\n * loopback URL) and the daemon needs to be able to register many\n * Mode B adapters dynamically. The factory keeps the AdapterImpl\n * shape uniform with the rest of the registry.\n *\n * Security boundary: only loopback URLs (http://127.0.0.1:<port>)\n * are accepted. Anything else is rejected at construction time so\n * a compromised plugin cannot point the daemon at a remote host.\n *\n * Failure vocabulary (per 22-adapter-integration-contract.md §4):\n * mode_b_<status> — non-2xx response from loopback\n * mode_b_network:<msg> — fetch/network error talking to loopback\n * mode_b_invalid_response — loopback returned non-JSON or malformed JSON\n */\n\nimport type {\n AdapterDispatchInput,\n AdapterDispatchResult,\n AdapterImpl,\n} from '../adapter-registry.js';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface ModeBAdapterConfig {\n /** Adapter name (must match catalog name to compete with auto-register CLI shim). */\n name: string;\n /** Loopback URL the agent runtime is listening on. Must be http://127.0.0.1:<port>. */\n loopbackUrl: string;\n /** PARA tiers this adapter supports (e.g. [1,2,3,4,5,6]). */\n tiersSupported: number[];\n /** Capability tags the adapter advertises (e.g. [\"code\",\"shell\"]). */\n capabilityTags: string[];\n /** Optional: per-dispatch HTTP timeout, default 30s. */\n timeoutMs?: number;\n /** Optional metadata propagated on the descriptor. */\n metadata?: Record<string, unknown>;\n}\n\nexport interface ValidationResult {\n ok: boolean;\n error?: string;\n}\n\n// ---------------------------------------------------------------------------\n// validateLoopbackUrl\n// ---------------------------------------------------------------------------\n\n/**\n * Accept only http://127.0.0.1:<explicit-port> (origin only). Reject:\n * - https (TLS on loopback adds attack surface; not needed)\n * - non-127.0.0.1 hosts (including 'localhost' which can hijack via /etc/hosts)\n * - implicit port (URL.port becomes '' when omitted)\n * - non-http schemes (ftp://, etc.)\n * - any pathname / search / hash components — these would let a compromised\n * plug-in smuggle traffic to arbitrary local services. e.g.\n * `http://127.0.0.1:6379/proxy?target=evil` would, after string-concat\n * with `/dispatch`, become a request to a Redis-front proxy on the box.\n * Origin-only is the only safe construction.\n */\nexport function validateLoopbackUrl(url: string): ValidationResult {\n if (typeof url !== 'string' || url.length === 0) {\n return { ok: false, error: 'loopback URL must be a non-empty string' };\n }\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return { ok: false, error: 'loopback URL malformed' };\n }\n if (parsed.protocol !== 'http:') {\n return { ok: false, error: `loopback URL must use http: scheme, got ${parsed.protocol}` };\n }\n if (parsed.hostname !== '127.0.0.1') {\n return { ok: false, error: `loopback URL must point to 127.0.0.1, got ${parsed.hostname}` };\n }\n if (!parsed.port || parsed.port.length === 0) {\n return { ok: false, error: 'loopback URL must include an explicit port' };\n }\n // Origin-only: reject any pathname (other than '/' which `new URL()` injects),\n // query string, or fragment. Same defense as runner.ts §415 (localhost is the\n // boundary) — but only if we don't bridge into a non-empty path on this side.\n if (parsed.pathname !== '/' && parsed.pathname !== '') {\n return { ok: false, error: 'loopback_url_must_be_origin_only:pathname not empty' };\n }\n if (parsed.search && parsed.search.length > 0) {\n return { ok: false, error: 'loopback_url_must_be_origin_only:search not empty' };\n }\n if (parsed.hash && parsed.hash.length > 0) {\n return { ok: false, error: 'loopback_url_must_be_origin_only:hash not empty' };\n }\n return { ok: true };\n}\n\n// ---------------------------------------------------------------------------\n// buildModeBAdapter\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport function buildModeBAdapter(config: ModeBAdapterConfig): AdapterImpl {\n const validation = validateLoopbackUrl(config.loopbackUrl);\n if (!validation.ok) {\n throw new Error(`buildModeBAdapter: ${validation.error}`);\n }\n if (!config.name || typeof config.name !== 'string') {\n throw new Error('buildModeBAdapter: name required');\n }\n\n // Use `new URL(path, base)` rather than string concatenation so that any\n // unexpected characters in the loopback URL can't get smuggled into the\n // dispatch path. validateLoopbackUrl already rejects non-origin URLs but\n // safer composition is cheap.\n const dispatchUrl = new URL('/dispatch', config.loopbackUrl).toString();\n const healthUrl = new URL('/health', config.loopbackUrl).toString();\n const resetUrl = new URL('/reset', config.loopbackUrl).toString();\n const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\n const adapter: AdapterImpl = {\n name: config.name,\n tiersSupported: config.tiersSupported,\n capabilityTags: config.capabilityTags,\n ...(config.metadata\n ? { metadata: { ...config.metadata, transport: 'mode_b_http_loopback' } }\n : { metadata: { transport: 'mode_b_http_loopback' } }),\n\n async dispatch(input: AdapterDispatchInput): Promise<AdapterDispatchResult> {\n const body = serializeDispatchInput(input);\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const resp = await fetch(dispatchUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body,\n signal: controller.signal,\n });\n if (!resp.ok) {\n let detail = '';\n try {\n detail = await resp.text();\n if (detail.length > 200) detail = detail.slice(0, 200) + '…';\n } catch {\n // ignore — body read failure is non-fatal for the failure path\n }\n return {\n ok: false,\n error: `mode_b_${resp.status}${detail ? `:${detail}` : ''}`,\n };\n }\n let parsed: unknown;\n try {\n parsed = await resp.json();\n } catch (err) {\n return {\n ok: false,\n error: `mode_b_invalid_response:${(err as Error).message}`,\n };\n }\n if (!parsed || typeof parsed !== 'object') {\n return {\n ok: false,\n error: 'mode_b_invalid_response:body not an object',\n };\n }\n // Pass through the response shape verbatim — the agent runtime\n // already constructed an AdapterDispatchResult.\n return parsed as AdapterDispatchResult;\n } catch (err) {\n const msg = (err as Error).message ?? String(err);\n return { ok: false, error: `mode_b_network:${msg}` };\n } finally {\n clearTimeout(timer);\n }\n },\n\n async health() {\n try {\n const resp = await fetch(healthUrl, {\n signal: AbortSignal.timeout(2000),\n });\n return resp.ok ? { healthy: true } : { healthy: false, reason: `loopback_${resp.status}` };\n } catch (err) {\n return { healthy: false, reason: (err as Error).message };\n }\n },\n\n async reset(agentName?: string) {\n // v1.9.x agent_restart semantic: ask the adapter host to clear any\n // in-memory per-agent session state. 2s timeout matches health() above.\n // Failure is non-fatal — the caller will ack ok:false with a reason.\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 2000);\n try {\n const resp = await fetch(resetUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ agentName }),\n signal: controller.signal,\n });\n if (!resp.ok) {\n return { ok: false, reason: `mode_b_reset_http_${resp.status}` };\n }\n let parsed: Record<string, unknown> = {};\n try {\n const body = await resp.json();\n if (body && typeof body === 'object') parsed = body as Record<string, unknown>;\n } catch {\n // Treat JSON parse failure as a soft success — the loopback\n // returned 2xx, so the reset itself worked; we just can't\n // surface whatever diagnostic it tried to send.\n }\n // Merge host-reported fields but force ok:true + a default state so\n // the ack path is deterministic even when the host omits them.\n return { ok: true, state: 'mode_b_reset', ...parsed };\n } catch (err) {\n return { ok: false, reason: 'mode_b_reset_network:' + (err as Error).message };\n } finally {\n clearTimeout(timer);\n }\n },\n };\n\n return adapter;\n}\n\n// ---------------------------------------------------------------------------\n// internals\n// ---------------------------------------------------------------------------\n\nfunction serializeDispatchInput(input: AdapterDispatchInput): string {\n // Only pass through the v1 contract fields (don't leak internal state).\n const body: Record<string, unknown> = {\n taskId: input.taskId,\n capability: input.capability,\n prompt: input.prompt,\n };\n if (typeof input.stepIdx === 'number') body.stepIdx = input.stepIdx;\n if (typeof input.deadlineAt === 'number') body.deadlineAt = input.deadlineAt;\n if (input.metadata && typeof input.metadata === 'object') body.metadata = input.metadata;\n return JSON.stringify(body);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
/package/{dist → assets}/icon
RENAMED
|
File without changes
|
|
File without changes
|