@nifrajs/agent 3.1.0 → 3.2.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 +36 -0
- package/dist/deployment.d.ts +157 -0
- package/dist/deployment.d.ts.map +1 -0
- package/dist/deployment.js +374 -0
- package/dist/deployment.js.map +1 -0
- package/dist/events.d.ts +41 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +75 -0
- package/dist/events.js.map +1 -1
- package/dist/execution-policy.d.ts.map +1 -1
- package/dist/execution-policy.js +11 -7
- package/dist/execution-policy.js.map +1 -1
- package/dist/gateway.d.ts +153 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +409 -0
- package/dist/gateway.js.map +1 -0
- package/dist/index.d.ts +86 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +163 -1
- package/dist/index.js.map +1 -1
- package/dist/mount.d.ts +59 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/mount.js +247 -0
- package/dist/mount.js.map +1 -0
- package/dist/registry.d.ts +112 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +326 -0
- package/dist/registry.js.map +1 -0
- package/package.json +12 -2
- package/src/deployment.ts +621 -0
- package/src/events.ts +125 -0
- package/src/execution-policy.ts +9 -5
- package/src/gateway.ts +607 -0
- package/src/index.ts +303 -1
- package/src/mount.ts +344 -0
- package/src/registry.ts +444 -0
package/README.md
CHANGED
|
@@ -18,6 +18,42 @@ const result = await runAgent(definition, { value: input }, ports, {
|
|
|
18
18
|
The public in-memory adapters are for local development and tests. Durable state, provider
|
|
19
19
|
credentials, and operated policy remain adapter concerns.
|
|
20
20
|
|
|
21
|
+
Gateway and deployment contracts are deliberately provider-neutral. Retry, fallback, budget,
|
|
22
|
+
deadline, workspace, and hostile-code isolation claims are admitted only from a host-approved
|
|
23
|
+
capability report. The local and replay reference profiles are not hostile-code sandboxes, and no
|
|
24
|
+
public package loads provider credentials or promises durable execution.
|
|
25
|
+
|
|
26
|
+
Several telemetry consumers can observe the same run: `combineAgentTelemetry(a, b, ...)` fans step
|
|
27
|
+
evidence out to every port in order, so an SSE evidence stream and an exporter (for example
|
|
28
|
+
`@nifrajs/agent-telemetry`'s `traceAgentRun`) compose instead of displacing each other. The HTTP
|
|
29
|
+
seams (`mountAgent`, `@nifrajs/a2a`, `@nifrajs/ag-ui`) compose their streaming evidence with any
|
|
30
|
+
telemetry port supplied through `ports`.
|
|
31
|
+
|
|
32
|
+
A model port can stream: when the caller wires an `AgentDeltaSink` into `ports.deltas`, every model
|
|
33
|
+
request carries an optional `onDelta` callback the port may call per chunk - user-visible text,
|
|
34
|
+
reasoning text, the raw argument text of the tool call being formed, or a `usage` delta reporting
|
|
35
|
+
the decision's settled token counts (optionally attributed to a provider and model, for observers
|
|
36
|
+
to sum across the run). Deltas are transient
|
|
37
|
+
observer data for live UIs (`@nifrajs/ag-ui` projects them onto `TEXT_MESSAGE_*`, `REASONING_*`,
|
|
38
|
+
and `TOOL_CALL_ARGS` frames): they are never validated, persisted, or replayed, and a failing sink
|
|
39
|
+
never fails the model step. `combineAgentDeltaSinks(a, b, ...)` fans deltas out the way
|
|
40
|
+
`combineAgentTelemetry` fans evidence.
|
|
41
|
+
|
|
42
|
+
`createAgentSharedState(initial)` is the run's shared UI state channel: a JSON document any port or
|
|
43
|
+
tool executor patches with RFC 6902 operations (`add`, `replace`, `remove`), with subscribers
|
|
44
|
+
observing every applied batch. Patches apply atomically - an invalid op rejects the whole batch -
|
|
45
|
+
and prototype-grafting pointer segments are refused. The document is per-run observer data, not
|
|
46
|
+
turn state: nothing in it is persisted by the runtime. `@nifrajs/ag-ui` projects the channel onto
|
|
47
|
+
AG-UI `STATE_SNAPSHOT`/`STATE_DELTA` events.
|
|
48
|
+
|
|
49
|
+
SSE streams are resumable: give `mountAgent` (or `@nifrajs/ag-ui`'s `mountAgUI`) an `evidenceLog`
|
|
50
|
+
and `step` frames carry `id: <seq>`. A client that loses the connection re-POSTs the same `turnId`
|
|
51
|
+
with a `Last-Event-ID` header and receives the missed evidence, rejoining a still-running turn live
|
|
52
|
+
or replaying the stored terminal frame - the run is never re-executed.
|
|
53
|
+
`createMemoryAgentEvidenceLog` (from `@nifrajs/agent/events`) is the single-process dev/test
|
|
54
|
+
reference; a durable, multi-process log is an adapter implementing the same `AgentEvidenceLog`
|
|
55
|
+
interface.
|
|
56
|
+
|
|
21
57
|
Execution policies can be required by a tool contract. `createLocalProcessAdapter` applies cwd and
|
|
22
58
|
environment filtering, timeouts, and cancellation to child processes. The local adapter is NOT a
|
|
23
59
|
security boundary. Without OS-level sandboxing it contains crashes and accidents, not hostile code.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral deployment lifecycle contracts.
|
|
3
|
+
*
|
|
4
|
+
* A deployment adapter is an execution seam, not a sandbox claim. The host owns activation,
|
|
5
|
+
* authority, cancellation, and cleanup. Public reference adapters may be local, CI, or replay, but
|
|
6
|
+
* only a capability report declaring real OS isolation can admit a hostile-code plan.
|
|
7
|
+
*/
|
|
8
|
+
export type DeploymentRuntime = "local" | "ci" | "replay" | "worker" | "unknown";
|
|
9
|
+
export type DeploymentNetwork = "none" | "outbound" | "inbound" | "unrestricted";
|
|
10
|
+
export type DeploymentFilesystem = "none" | "workspace" | "host";
|
|
11
|
+
export type DeploymentProcess = "none" | "child";
|
|
12
|
+
export type DeploymentSecrets = "none" | "caller";
|
|
13
|
+
export type DeploymentCancellation = "none" | "cooperative" | "forced";
|
|
14
|
+
export type HostileCodeIsolation = "none" | "os";
|
|
15
|
+
export interface DeploymentCapabilities {
|
|
16
|
+
readonly runtime: DeploymentRuntime;
|
|
17
|
+
readonly network: DeploymentNetwork;
|
|
18
|
+
readonly filesystem: DeploymentFilesystem;
|
|
19
|
+
readonly process: DeploymentProcess;
|
|
20
|
+
readonly secrets: DeploymentSecrets;
|
|
21
|
+
readonly workspace: {
|
|
22
|
+
readonly mode: "none" | "scoped";
|
|
23
|
+
readonly maxBytes: number;
|
|
24
|
+
};
|
|
25
|
+
readonly cancellation: DeploymentCancellation;
|
|
26
|
+
readonly hostileCodeIsolation: HostileCodeIsolation;
|
|
27
|
+
}
|
|
28
|
+
export interface DeploymentCapabilityReport {
|
|
29
|
+
readonly schemaVersion: 1;
|
|
30
|
+
readonly adapterId: string;
|
|
31
|
+
readonly capabilities: DeploymentCapabilities;
|
|
32
|
+
readonly limitations: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
export interface DeploymentAuthority {
|
|
35
|
+
readonly workspaceMaxBytes: number;
|
|
36
|
+
readonly deadlineAt?: number;
|
|
37
|
+
readonly cancellation: DeploymentCancellation;
|
|
38
|
+
readonly hostileCodeIsolation: HostileCodeIsolation;
|
|
39
|
+
}
|
|
40
|
+
export interface DeploymentActivationOptions {
|
|
41
|
+
/** Host-owned approval obtained from a separately reviewed/certified isolation decision. */
|
|
42
|
+
readonly approved?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface AgentDeploymentPlan {
|
|
45
|
+
readonly deploymentId: string;
|
|
46
|
+
readonly hostileCode?: boolean;
|
|
47
|
+
readonly workspaceMaxBytes?: number;
|
|
48
|
+
readonly deadlineAt?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface DeploymentPrepareRequest {
|
|
51
|
+
readonly plan: AgentDeploymentPlan;
|
|
52
|
+
readonly authority: DeploymentAuthority;
|
|
53
|
+
readonly signal: AbortSignal;
|
|
54
|
+
}
|
|
55
|
+
export interface DeploymentPrepareResult {
|
|
56
|
+
readonly deploymentId: string;
|
|
57
|
+
readonly state: "prepared";
|
|
58
|
+
readonly preparedRef: string;
|
|
59
|
+
}
|
|
60
|
+
export interface DeploymentStartRequest {
|
|
61
|
+
readonly deploymentId: string;
|
|
62
|
+
readonly preparedRef: string;
|
|
63
|
+
readonly authority: DeploymentAuthority;
|
|
64
|
+
readonly signal: AbortSignal;
|
|
65
|
+
}
|
|
66
|
+
export interface DeploymentStartResult {
|
|
67
|
+
readonly deploymentId: string;
|
|
68
|
+
readonly state: "running";
|
|
69
|
+
readonly handleRef: string;
|
|
70
|
+
}
|
|
71
|
+
export interface DeploymentInspectRequest {
|
|
72
|
+
readonly deploymentId: string;
|
|
73
|
+
readonly handleRef?: string;
|
|
74
|
+
readonly signal: AbortSignal;
|
|
75
|
+
}
|
|
76
|
+
export type DeploymentState = "prepared" | "running" | "cancelled" | "disposed";
|
|
77
|
+
export interface DeploymentInspection {
|
|
78
|
+
readonly deploymentId: string;
|
|
79
|
+
readonly state: DeploymentState;
|
|
80
|
+
readonly handleRef?: string;
|
|
81
|
+
}
|
|
82
|
+
export interface DeploymentCancelRequest {
|
|
83
|
+
readonly deploymentId: string;
|
|
84
|
+
readonly preparedRef?: string;
|
|
85
|
+
readonly handleRef?: string;
|
|
86
|
+
readonly signal: AbortSignal;
|
|
87
|
+
}
|
|
88
|
+
export interface DeploymentCancelResult {
|
|
89
|
+
readonly deploymentId: string;
|
|
90
|
+
readonly state: "cancelled";
|
|
91
|
+
}
|
|
92
|
+
export interface DeploymentDisposeRequest {
|
|
93
|
+
readonly deploymentId: string;
|
|
94
|
+
readonly preparedRef?: string;
|
|
95
|
+
readonly handleRef?: string;
|
|
96
|
+
readonly signal: AbortSignal;
|
|
97
|
+
}
|
|
98
|
+
export interface DeploymentDisposeResult {
|
|
99
|
+
readonly deploymentId: string;
|
|
100
|
+
readonly state: "disposed";
|
|
101
|
+
}
|
|
102
|
+
export interface AgentDeploymentAdapter {
|
|
103
|
+
readonly id: string;
|
|
104
|
+
capabilityReport(): DeploymentCapabilityReport | PromiseLike<DeploymentCapabilityReport>;
|
|
105
|
+
prepare(request: DeploymentPrepareRequest): DeploymentPrepareResult | PromiseLike<DeploymentPrepareResult>;
|
|
106
|
+
start(request: DeploymentStartRequest): DeploymentStartResult | PromiseLike<DeploymentStartResult>;
|
|
107
|
+
inspect(request: DeploymentInspectRequest): DeploymentInspection | PromiseLike<DeploymentInspection>;
|
|
108
|
+
cancel(request: DeploymentCancelRequest): DeploymentCancelResult | PromiseLike<DeploymentCancelResult>;
|
|
109
|
+
dispose(request: DeploymentDisposeRequest): DeploymentDisposeResult | PromiseLike<DeploymentDisposeResult>;
|
|
110
|
+
}
|
|
111
|
+
export type DeploymentEvidence = {
|
|
112
|
+
readonly kind: "prepared" | "started" | "inspected" | "cancelled" | "disposed" | "failed";
|
|
113
|
+
readonly deploymentId: string;
|
|
114
|
+
readonly state: DeploymentState | "new";
|
|
115
|
+
readonly code?: DeploymentErrorCode;
|
|
116
|
+
};
|
|
117
|
+
export type DeploymentErrorCode = "invalid_capabilities" | "capability_denied" | "hostile_code_requires_isolation" | "authority_expanded" | "invalid_plan" | "invalid_transition" | "malformed_callback" | "adapter_error" | "cancelled";
|
|
118
|
+
export declare class DeploymentError extends Error {
|
|
119
|
+
readonly code: DeploymentErrorCode;
|
|
120
|
+
constructor(code: DeploymentErrorCode);
|
|
121
|
+
}
|
|
122
|
+
/** Parse an untrusted capability report before the host admits an adapter. */
|
|
123
|
+
export declare function parseDeploymentCapabilityReport(value: unknown): DeploymentCapabilityReport;
|
|
124
|
+
export declare function parseDeploymentPlan(value: unknown): AgentDeploymentPlan;
|
|
125
|
+
/** Prove a child deployment authority is a subset of its parent's authority. */
|
|
126
|
+
export declare function assertDeploymentAuthorityMonotonic(parent: DeploymentAuthority, child: DeploymentAuthority): void;
|
|
127
|
+
export declare function createDeploymentAuthority(input: {
|
|
128
|
+
readonly workspaceMaxBytes: number;
|
|
129
|
+
readonly deadlineAt?: number;
|
|
130
|
+
readonly cancellation?: DeploymentCancellation;
|
|
131
|
+
readonly hostileCodeIsolation?: HostileCodeIsolation;
|
|
132
|
+
}): DeploymentAuthority;
|
|
133
|
+
/** Host-owned deterministic lifecycle wrapper for an adapter. */
|
|
134
|
+
export declare class AgentDeployment {
|
|
135
|
+
private readonly adapter;
|
|
136
|
+
private readonly signal;
|
|
137
|
+
readonly id: string;
|
|
138
|
+
private deploymentId;
|
|
139
|
+
private state;
|
|
140
|
+
private preparedRef;
|
|
141
|
+
private handleRef;
|
|
142
|
+
private report;
|
|
143
|
+
private readonly evidence;
|
|
144
|
+
constructor(adapter: AgentDeploymentAdapter, authority: DeploymentAuthority, signal?: AbortSignal, options?: DeploymentActivationOptions);
|
|
145
|
+
private readonly authority;
|
|
146
|
+
private readonly approved;
|
|
147
|
+
get lifecycleState(): "new" | DeploymentState;
|
|
148
|
+
get evidenceRecords(): readonly DeploymentEvidence[];
|
|
149
|
+
capabilityReport(): Promise<DeploymentCapabilityReport>;
|
|
150
|
+
prepare(planInput: AgentDeploymentPlan | unknown): Promise<DeploymentPrepareResult>;
|
|
151
|
+
start(): Promise<DeploymentStartResult>;
|
|
152
|
+
inspect(): Promise<DeploymentInspection>;
|
|
153
|
+
cancel(): Promise<DeploymentCancelResult>;
|
|
154
|
+
dispose(): Promise<DeploymentDisposeResult>;
|
|
155
|
+
private fail;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=deployment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral deployment lifecycle contracts.
|
|
3
|
+
*
|
|
4
|
+
* A deployment adapter is an execution seam, not a sandbox claim. The host owns activation,
|
|
5
|
+
* authority, cancellation, and cleanup. Public reference adapters may be local, CI, or replay, but
|
|
6
|
+
* only a capability report declaring real OS isolation can admit a hostile-code plan.
|
|
7
|
+
*/
|
|
8
|
+
const TOKEN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
|
|
9
|
+
const MAX_LIMIT = 10_000_000_000;
|
|
10
|
+
export class DeploymentError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
constructor(code) {
|
|
13
|
+
super(`deployment ${code}`);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.name = "DeploymentError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function isRecord(value) {
|
|
19
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
20
|
+
}
|
|
21
|
+
function boundedToken(value, _label, code = "invalid_plan") {
|
|
22
|
+
if (typeof value !== "string" || !TOKEN.test(value))
|
|
23
|
+
throw new DeploymentError(code);
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function boundedLimit(value, _label, code = "invalid_plan") {
|
|
27
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0 || value > MAX_LIMIT)
|
|
28
|
+
throw new DeploymentError(code);
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function exactKeys(value, keys, code) {
|
|
32
|
+
for (const key of Object.keys(value))
|
|
33
|
+
if (!keys.has(key))
|
|
34
|
+
throw new DeploymentError(code);
|
|
35
|
+
}
|
|
36
|
+
const RUNTIMES = new Set(["local", "ci", "replay", "worker", "unknown"]);
|
|
37
|
+
const NETWORKS = new Set(["none", "outbound", "inbound", "unrestricted"]);
|
|
38
|
+
const FILESYSTEMS = new Set(["none", "workspace", "host"]);
|
|
39
|
+
const PROCESSES = new Set(["none", "child"]);
|
|
40
|
+
const SECRETS = new Set(["none", "caller"]);
|
|
41
|
+
const CANCELLATIONS = new Set(["none", "cooperative", "forced"]);
|
|
42
|
+
const ISOLATIONS = new Set(["none", "os"]);
|
|
43
|
+
function member(value, values) {
|
|
44
|
+
if (typeof value !== "string" || !values.has(value))
|
|
45
|
+
throw new DeploymentError("invalid_capabilities");
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
/** Parse an untrusted capability report before the host admits an adapter. */
|
|
49
|
+
export function parseDeploymentCapabilityReport(value) {
|
|
50
|
+
if (!isRecord(value))
|
|
51
|
+
throw new DeploymentError("invalid_capabilities");
|
|
52
|
+
exactKeys(value, new Set(["schemaVersion", "adapterId", "capabilities", "limitations"]), "invalid_capabilities");
|
|
53
|
+
if (value.schemaVersion !== 1)
|
|
54
|
+
throw new DeploymentError("invalid_capabilities");
|
|
55
|
+
const adapterId = boundedToken(value.adapterId, "adapterId", "invalid_capabilities");
|
|
56
|
+
if (!isRecord(value.capabilities))
|
|
57
|
+
throw new DeploymentError("invalid_capabilities");
|
|
58
|
+
const capabilities = value.capabilities;
|
|
59
|
+
exactKeys(capabilities, new Set([
|
|
60
|
+
"runtime",
|
|
61
|
+
"network",
|
|
62
|
+
"filesystem",
|
|
63
|
+
"process",
|
|
64
|
+
"secrets",
|
|
65
|
+
"workspace",
|
|
66
|
+
"cancellation",
|
|
67
|
+
"hostileCodeIsolation",
|
|
68
|
+
]), "invalid_capabilities");
|
|
69
|
+
if (!isRecord(capabilities.workspace))
|
|
70
|
+
throw new DeploymentError("invalid_capabilities");
|
|
71
|
+
exactKeys(capabilities.workspace, new Set(["mode", "maxBytes"]), "invalid_capabilities");
|
|
72
|
+
const workspaceMode = member(capabilities.workspace.mode, new Set(["none", "scoped"]));
|
|
73
|
+
const maxBytes = boundedLimit(capabilities.workspace.maxBytes, "workspace.maxBytes", "invalid_capabilities");
|
|
74
|
+
if (workspaceMode === "none" && maxBytes !== 0)
|
|
75
|
+
throw new DeploymentError("invalid_capabilities");
|
|
76
|
+
const limitations = value.limitations;
|
|
77
|
+
if (!Array.isArray(limitations) ||
|
|
78
|
+
limitations.length > 32 ||
|
|
79
|
+
limitations.some((item) => typeof item !== "string" || !TOKEN.test(item)))
|
|
80
|
+
throw new DeploymentError("invalid_capabilities");
|
|
81
|
+
return Object.freeze({
|
|
82
|
+
schemaVersion: 1,
|
|
83
|
+
adapterId,
|
|
84
|
+
capabilities: Object.freeze({
|
|
85
|
+
runtime: member(capabilities.runtime, RUNTIMES),
|
|
86
|
+
network: member(capabilities.network, NETWORKS),
|
|
87
|
+
filesystem: member(capabilities.filesystem, FILESYSTEMS),
|
|
88
|
+
process: member(capabilities.process, PROCESSES),
|
|
89
|
+
secrets: member(capabilities.secrets, SECRETS),
|
|
90
|
+
workspace: Object.freeze({ mode: workspaceMode, maxBytes }),
|
|
91
|
+
cancellation: member(capabilities.cancellation, CANCELLATIONS),
|
|
92
|
+
hostileCodeIsolation: member(capabilities.hostileCodeIsolation, ISOLATIONS),
|
|
93
|
+
}),
|
|
94
|
+
limitations: Object.freeze([...limitations]),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export function parseDeploymentPlan(value) {
|
|
98
|
+
if (!isRecord(value))
|
|
99
|
+
throw new DeploymentError("invalid_plan");
|
|
100
|
+
exactKeys(value, new Set(["deploymentId", "hostileCode", "workspaceMaxBytes", "deadlineAt"]), "invalid_plan");
|
|
101
|
+
const deploymentId = boundedToken(value.deploymentId, "deploymentId");
|
|
102
|
+
if (value.hostileCode !== undefined && typeof value.hostileCode !== "boolean")
|
|
103
|
+
throw new DeploymentError("invalid_plan");
|
|
104
|
+
const workspaceMaxBytes = value.workspaceMaxBytes === undefined
|
|
105
|
+
? undefined
|
|
106
|
+
: boundedLimit(value.workspaceMaxBytes, "workspaceMaxBytes", "invalid_plan");
|
|
107
|
+
const rawDeadlineAt = value.deadlineAt;
|
|
108
|
+
const deadlineAt = rawDeadlineAt === undefined
|
|
109
|
+
? undefined
|
|
110
|
+
: typeof rawDeadlineAt === "number"
|
|
111
|
+
? rawDeadlineAt
|
|
112
|
+
: null;
|
|
113
|
+
if (deadlineAt === null ||
|
|
114
|
+
(deadlineAt !== undefined && (!Number.isSafeInteger(deadlineAt) || deadlineAt <= 0)))
|
|
115
|
+
throw new DeploymentError("invalid_plan");
|
|
116
|
+
return Object.freeze({
|
|
117
|
+
deploymentId,
|
|
118
|
+
...(value.hostileCode === undefined ? {} : { hostileCode: value.hostileCode }),
|
|
119
|
+
...(workspaceMaxBytes === undefined ? {} : { workspaceMaxBytes }),
|
|
120
|
+
...(deadlineAt === undefined ? {} : { deadlineAt }),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function parseRef(value) {
|
|
124
|
+
if (typeof value !== "string" || !TOKEN.test(value))
|
|
125
|
+
throw new DeploymentError("malformed_callback");
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
function parseCallbackState(value, expected) {
|
|
129
|
+
return isRecord(value) && value.state === expected;
|
|
130
|
+
}
|
|
131
|
+
function parsePrepare(value, deploymentId) {
|
|
132
|
+
if (!isRecord(value) ||
|
|
133
|
+
value.deploymentId !== deploymentId ||
|
|
134
|
+
!parseCallbackState(value, "prepared"))
|
|
135
|
+
throw new DeploymentError("malformed_callback");
|
|
136
|
+
return Object.freeze({
|
|
137
|
+
deploymentId,
|
|
138
|
+
state: "prepared",
|
|
139
|
+
preparedRef: parseRef(value.preparedRef),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function parseStart(value, deploymentId) {
|
|
143
|
+
if (!isRecord(value) ||
|
|
144
|
+
value.deploymentId !== deploymentId ||
|
|
145
|
+
!parseCallbackState(value, "running"))
|
|
146
|
+
throw new DeploymentError("malformed_callback");
|
|
147
|
+
return Object.freeze({ deploymentId, state: "running", handleRef: parseRef(value.handleRef) });
|
|
148
|
+
}
|
|
149
|
+
function parseInspection(value, deploymentId) {
|
|
150
|
+
if (!isRecord(value) || value.deploymentId !== deploymentId || typeof value.state !== "string")
|
|
151
|
+
throw new DeploymentError("malformed_callback");
|
|
152
|
+
if (!["prepared", "running", "cancelled", "disposed"].includes(value.state))
|
|
153
|
+
throw new DeploymentError("malformed_callback");
|
|
154
|
+
const handleRef = value.handleRef === undefined ? undefined : parseRef(value.handleRef);
|
|
155
|
+
return Object.freeze({
|
|
156
|
+
deploymentId,
|
|
157
|
+
state: value.state,
|
|
158
|
+
...(handleRef === undefined ? {} : { handleRef }),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function parseTerminal(value, deploymentId, state) {
|
|
162
|
+
if (!isRecord(value) || value.deploymentId !== deploymentId || !parseCallbackState(value, state))
|
|
163
|
+
throw new DeploymentError("malformed_callback");
|
|
164
|
+
return Object.freeze({ deploymentId, state });
|
|
165
|
+
}
|
|
166
|
+
function validateAuthority(authority) {
|
|
167
|
+
const workspaceMaxBytes = boundedLimit(authority.workspaceMaxBytes, "authority.workspaceMaxBytes", "authority_expanded");
|
|
168
|
+
if (authority.deadlineAt !== undefined &&
|
|
169
|
+
(!Number.isSafeInteger(authority.deadlineAt) || authority.deadlineAt <= 0))
|
|
170
|
+
throw new DeploymentError("authority_expanded");
|
|
171
|
+
if (!CANCELLATIONS.has(authority.cancellation) || !ISOLATIONS.has(authority.hostileCodeIsolation))
|
|
172
|
+
throw new DeploymentError("authority_expanded");
|
|
173
|
+
return Object.freeze({ ...authority, workspaceMaxBytes });
|
|
174
|
+
}
|
|
175
|
+
/** Prove a child deployment authority is a subset of its parent's authority. */
|
|
176
|
+
export function assertDeploymentAuthorityMonotonic(parent, child) {
|
|
177
|
+
const p = validateAuthority(parent);
|
|
178
|
+
const c = validateAuthority(child);
|
|
179
|
+
if (c.workspaceMaxBytes > p.workspaceMaxBytes)
|
|
180
|
+
throw new DeploymentError("authority_expanded");
|
|
181
|
+
if (p.deadlineAt !== undefined && (c.deadlineAt === undefined || c.deadlineAt > p.deadlineAt))
|
|
182
|
+
throw new DeploymentError("authority_expanded");
|
|
183
|
+
if (p.cancellation === "none" && c.cancellation !== "none")
|
|
184
|
+
throw new DeploymentError("authority_expanded");
|
|
185
|
+
if (p.cancellation === "cooperative" && c.cancellation === "forced")
|
|
186
|
+
throw new DeploymentError("authority_expanded");
|
|
187
|
+
if (p.hostileCodeIsolation === "none" && c.hostileCodeIsolation !== "none")
|
|
188
|
+
throw new DeploymentError("authority_expanded");
|
|
189
|
+
}
|
|
190
|
+
function assertCapabilityPlan(report, plan, authority, approved) {
|
|
191
|
+
const capabilities = report.capabilities;
|
|
192
|
+
if (plan.hostileCode === true && capabilities.hostileCodeIsolation !== "os")
|
|
193
|
+
throw new DeploymentError("hostile_code_requires_isolation");
|
|
194
|
+
if (plan.hostileCode === true && authority.hostileCodeIsolation !== "os")
|
|
195
|
+
throw new DeploymentError("hostile_code_requires_isolation");
|
|
196
|
+
if (plan.hostileCode === true && !approved)
|
|
197
|
+
throw new DeploymentError("hostile_code_requires_isolation");
|
|
198
|
+
if (plan.workspaceMaxBytes !== undefined &&
|
|
199
|
+
(capabilities.workspace.mode !== "scoped" ||
|
|
200
|
+
plan.workspaceMaxBytes > capabilities.workspace.maxBytes))
|
|
201
|
+
throw new DeploymentError("capability_denied");
|
|
202
|
+
if (plan.workspaceMaxBytes !== undefined && plan.workspaceMaxBytes > authority.workspaceMaxBytes)
|
|
203
|
+
throw new DeploymentError("authority_expanded");
|
|
204
|
+
if (authority.cancellation !== "none" && capabilities.cancellation === "none")
|
|
205
|
+
throw new DeploymentError("capability_denied");
|
|
206
|
+
if (plan.deadlineAt !== undefined &&
|
|
207
|
+
authority.deadlineAt !== undefined &&
|
|
208
|
+
plan.deadlineAt > authority.deadlineAt)
|
|
209
|
+
throw new DeploymentError("authority_expanded");
|
|
210
|
+
}
|
|
211
|
+
export function createDeploymentAuthority(input) {
|
|
212
|
+
return validateAuthority({
|
|
213
|
+
workspaceMaxBytes: input.workspaceMaxBytes,
|
|
214
|
+
...(input.deadlineAt === undefined ? {} : { deadlineAt: input.deadlineAt }),
|
|
215
|
+
cancellation: input.cancellation ?? "cooperative",
|
|
216
|
+
hostileCodeIsolation: input.hostileCodeIsolation ?? "none",
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/** Host-owned deterministic lifecycle wrapper for an adapter. */
|
|
220
|
+
export class AgentDeployment {
|
|
221
|
+
adapter;
|
|
222
|
+
signal;
|
|
223
|
+
id;
|
|
224
|
+
deploymentId;
|
|
225
|
+
state = "new";
|
|
226
|
+
preparedRef;
|
|
227
|
+
handleRef;
|
|
228
|
+
report;
|
|
229
|
+
evidence = [];
|
|
230
|
+
constructor(adapter, authority, signal = new AbortController().signal, options = {}) {
|
|
231
|
+
this.adapter = adapter;
|
|
232
|
+
this.signal = signal;
|
|
233
|
+
this.id = boundedToken(adapter.id, "adapter.id");
|
|
234
|
+
this.authority = validateAuthority(authority);
|
|
235
|
+
this.approved = options.approved === true;
|
|
236
|
+
}
|
|
237
|
+
authority;
|
|
238
|
+
approved;
|
|
239
|
+
get lifecycleState() {
|
|
240
|
+
return this.state;
|
|
241
|
+
}
|
|
242
|
+
get evidenceRecords() {
|
|
243
|
+
return Object.freeze([...this.evidence]);
|
|
244
|
+
}
|
|
245
|
+
async capabilityReport() {
|
|
246
|
+
if (this.report !== undefined)
|
|
247
|
+
return this.report;
|
|
248
|
+
try {
|
|
249
|
+
this.report = parseDeploymentCapabilityReport(await this.adapter.capabilityReport());
|
|
250
|
+
if (this.report.adapterId !== this.id)
|
|
251
|
+
throw new DeploymentError("invalid_capabilities");
|
|
252
|
+
return this.report;
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
throw asDeploymentError(error, "invalid_capabilities");
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
async prepare(planInput) {
|
|
259
|
+
if (this.state !== "new")
|
|
260
|
+
return this.fail("invalid_transition");
|
|
261
|
+
const plan = parseDeploymentPlan(planInput);
|
|
262
|
+
this.deploymentId = plan.deploymentId;
|
|
263
|
+
if (this.signal.aborted)
|
|
264
|
+
return this.fail("cancelled");
|
|
265
|
+
const report = await this.capabilityReport();
|
|
266
|
+
assertCapabilityPlan(report, plan, this.authority, this.approved);
|
|
267
|
+
try {
|
|
268
|
+
const result = parsePrepare(await this.adapter.prepare({ plan, authority: this.authority, signal: this.signal }), plan.deploymentId);
|
|
269
|
+
this.preparedRef = result.preparedRef;
|
|
270
|
+
this.state = "prepared";
|
|
271
|
+
this.evidence.push({ kind: "prepared", deploymentId: plan.deploymentId, state: "prepared" });
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
return this.fail(asDeploymentError(error, "adapter_error").code);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
async start() {
|
|
279
|
+
if (this.state !== "prepared" ||
|
|
280
|
+
this.preparedRef === undefined ||
|
|
281
|
+
this.deploymentId === undefined)
|
|
282
|
+
return this.fail("invalid_transition");
|
|
283
|
+
if (this.signal.aborted)
|
|
284
|
+
return this.fail("cancelled");
|
|
285
|
+
try {
|
|
286
|
+
const result = parseStart(await this.adapter.start({
|
|
287
|
+
deploymentId: this.deploymentId,
|
|
288
|
+
preparedRef: this.preparedRef,
|
|
289
|
+
authority: this.authority,
|
|
290
|
+
signal: this.signal,
|
|
291
|
+
}), this.deploymentId);
|
|
292
|
+
this.handleRef = result.handleRef;
|
|
293
|
+
this.state = "running";
|
|
294
|
+
this.evidence.push({ kind: "started", deploymentId: this.deploymentId, state: "running" });
|
|
295
|
+
return result;
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
return this.fail(asDeploymentError(error, "adapter_error").code);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
async inspect() {
|
|
302
|
+
if (this.state === "new" || this.state === "disposed" || this.deploymentId === undefined)
|
|
303
|
+
return this.fail("invalid_transition");
|
|
304
|
+
try {
|
|
305
|
+
const result = parseInspection(await this.adapter.inspect({
|
|
306
|
+
deploymentId: this.deploymentId,
|
|
307
|
+
...(this.handleRef === undefined ? {} : { handleRef: this.handleRef }),
|
|
308
|
+
signal: this.signal,
|
|
309
|
+
}), this.deploymentId);
|
|
310
|
+
this.evidence.push({
|
|
311
|
+
kind: "inspected",
|
|
312
|
+
deploymentId: this.deploymentId,
|
|
313
|
+
state: result.state,
|
|
314
|
+
});
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
return this.fail(asDeploymentError(error, "adapter_error").code);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
async cancel() {
|
|
322
|
+
if ((this.state !== "prepared" && this.state !== "running") || this.deploymentId === undefined)
|
|
323
|
+
return this.fail("invalid_transition");
|
|
324
|
+
try {
|
|
325
|
+
const result = parseTerminal(await this.adapter.cancel({
|
|
326
|
+
deploymentId: this.deploymentId,
|
|
327
|
+
...(this.preparedRef === undefined ? {} : { preparedRef: this.preparedRef }),
|
|
328
|
+
...(this.handleRef === undefined ? {} : { handleRef: this.handleRef }),
|
|
329
|
+
signal: this.signal,
|
|
330
|
+
}), this.deploymentId, "cancelled");
|
|
331
|
+
this.state = "cancelled";
|
|
332
|
+
this.evidence.push({ kind: "cancelled", deploymentId: this.deploymentId, state: "cancelled" });
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
335
|
+
catch (error) {
|
|
336
|
+
return this.fail(asDeploymentError(error, "adapter_error").code);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
async dispose() {
|
|
340
|
+
if (this.state === "disposed")
|
|
341
|
+
return { deploymentId: this.deploymentId ?? this.id, state: "disposed" };
|
|
342
|
+
try {
|
|
343
|
+
const result = parseTerminal(await this.adapter.dispose({
|
|
344
|
+
deploymentId: this.deploymentId ?? this.id,
|
|
345
|
+
...(this.preparedRef === undefined ? {} : { preparedRef: this.preparedRef }),
|
|
346
|
+
...(this.handleRef === undefined ? {} : { handleRef: this.handleRef }),
|
|
347
|
+
signal: this.signal,
|
|
348
|
+
}), this.deploymentId ?? this.id, "disposed");
|
|
349
|
+
this.state = "disposed";
|
|
350
|
+
this.evidence.push({
|
|
351
|
+
kind: "disposed",
|
|
352
|
+
deploymentId: this.deploymentId ?? this.id,
|
|
353
|
+
state: "disposed",
|
|
354
|
+
});
|
|
355
|
+
return result;
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
return this.fail(asDeploymentError(error, "adapter_error").code);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
fail(code) {
|
|
362
|
+
this.evidence.push({
|
|
363
|
+
kind: "failed",
|
|
364
|
+
deploymentId: this.deploymentId ?? this.id,
|
|
365
|
+
state: this.state,
|
|
366
|
+
code,
|
|
367
|
+
});
|
|
368
|
+
throw new DeploymentError(code);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
function asDeploymentError(error, fallback) {
|
|
372
|
+
return error instanceof DeploymentError ? error : new DeploymentError(fallback);
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=deployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"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"}
|