@relkit/runtime-hono 0.4.0 → 0.5.1
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/dist/agent-active-execution.d.ts +13 -0
- package/dist/agent-active-execution.d.ts.map +1 -0
- package/dist/agent-active-execution.js +8 -0
- package/dist/agent-active-execution.js.map +1 -0
- package/dist/agent-approval-coordinator.d.ts +20 -0
- package/dist/agent-approval-coordinator.d.ts.map +1 -0
- package/dist/agent-approval-coordinator.js +148 -0
- package/dist/agent-approval-coordinator.js.map +1 -0
- package/dist/agent-capability-negotiation.d.ts +2 -0
- package/dist/agent-capability-negotiation.d.ts.map +1 -0
- package/dist/agent-capability-negotiation.js +16 -0
- package/dist/agent-capability-negotiation.js.map +1 -0
- package/dist/agent-compatibility.d.ts +5 -0
- package/dist/agent-compatibility.d.ts.map +1 -0
- package/dist/agent-compatibility.js +47 -0
- package/dist/agent-compatibility.js.map +1 -0
- package/dist/agent-content-sink.d.ts +11 -0
- package/dist/agent-content-sink.d.ts.map +1 -0
- package/dist/agent-content-sink.js +132 -0
- package/dist/agent-content-sink.js.map +1 -0
- package/dist/agent-control-worker.d.ts +8 -0
- package/dist/agent-control-worker.d.ts.map +1 -0
- package/dist/agent-control-worker.js +131 -0
- package/dist/agent-control-worker.js.map +1 -0
- package/dist/agent-follow-up.d.ts +12 -0
- package/dist/agent-follow-up.d.ts.map +1 -0
- package/dist/agent-follow-up.js +106 -0
- package/dist/agent-follow-up.js.map +1 -0
- package/dist/agent-inspector-projection.d.ts +7 -0
- package/dist/agent-inspector-projection.d.ts.map +1 -0
- package/dist/agent-inspector-projection.js +121 -0
- package/dist/agent-inspector-projection.js.map +1 -0
- package/dist/agent-inspector.d.ts +5 -0
- package/dist/agent-inspector.d.ts.map +1 -0
- package/dist/agent-inspector.js +107 -0
- package/dist/agent-inspector.js.map +1 -0
- package/dist/agent-progress-sink.d.ts +10 -0
- package/dist/agent-progress-sink.d.ts.map +1 -0
- package/dist/agent-progress-sink.js +52 -0
- package/dist/agent-progress-sink.js.map +1 -0
- package/dist/agent-protocol-encoding.d.ts +3 -0
- package/dist/agent-protocol-encoding.d.ts.map +1 -0
- package/dist/agent-protocol-encoding.js +123 -0
- package/dist/agent-protocol-encoding.js.map +1 -0
- package/dist/agent-protocol-frame-state.d.ts +8 -0
- package/dist/agent-protocol-frame-state.d.ts.map +1 -0
- package/dist/agent-protocol-frame-state.js +124 -0
- package/dist/agent-protocol-frame-state.js.map +1 -0
- package/dist/agent-protocol-progress.d.ts +8 -0
- package/dist/agent-protocol-progress.d.ts.map +1 -0
- package/dist/agent-protocol-progress.js +5 -0
- package/dist/agent-protocol-progress.js.map +1 -0
- package/dist/agent-protocol-stream.d.ts +57 -0
- package/dist/agent-protocol-stream.d.ts.map +1 -0
- package/dist/agent-protocol-stream.js +77 -0
- package/dist/agent-protocol-stream.js.map +1 -0
- package/dist/agent-protocol-support.d.ts +19 -0
- package/dist/agent-protocol-support.d.ts.map +1 -0
- package/dist/agent-protocol-support.js +108 -0
- package/dist/agent-protocol-support.js.map +1 -0
- package/dist/agent-protocol-tool.d.ts +12 -0
- package/dist/agent-protocol-tool.d.ts.map +1 -0
- package/dist/agent-protocol-tool.js +65 -0
- package/dist/agent-protocol-tool.js.map +1 -0
- package/dist/agent-protocol.d.ts +4 -0
- package/dist/agent-protocol.d.ts.map +1 -0
- package/dist/agent-protocol.js +101 -0
- package/dist/agent-protocol.js.map +1 -0
- package/dist/agent-rpc-errors.d.ts +5 -0
- package/dist/agent-rpc-errors.d.ts.map +1 -0
- package/dist/agent-rpc-errors.js +65 -0
- package/dist/agent-rpc-errors.js.map +1 -0
- package/dist/agent-rpc-read.d.ts +42 -0
- package/dist/agent-rpc-read.d.ts.map +1 -0
- package/dist/agent-rpc-read.js +127 -0
- package/dist/agent-rpc-read.js.map +1 -0
- package/dist/agent-rpc-resume.d.ts +13 -0
- package/dist/agent-rpc-resume.d.ts.map +1 -0
- package/dist/agent-rpc-resume.js +72 -0
- package/dist/agent-rpc-resume.js.map +1 -0
- package/dist/agent-rpc-support.d.ts +44 -0
- package/dist/agent-rpc-support.d.ts.map +1 -0
- package/dist/agent-rpc-support.js +111 -0
- package/dist/agent-rpc-support.js.map +1 -0
- package/dist/agent-rpc-worker.d.ts +7 -0
- package/dist/agent-rpc-worker.d.ts.map +1 -0
- package/dist/agent-rpc-worker.js +135 -0
- package/dist/agent-rpc-worker.js.map +1 -0
- package/dist/agent-rpc-write.d.ts +6 -0
- package/dist/agent-rpc-write.d.ts.map +1 -0
- package/dist/agent-rpc-write.js +109 -0
- package/dist/agent-rpc-write.js.map +1 -0
- package/dist/agent-rpc.d.ts +21 -0
- package/dist/agent-rpc.d.ts.map +1 -0
- package/dist/agent-rpc.js +42 -0
- package/dist/agent-rpc.js.map +1 -0
- package/dist/agent-run-journal.d.ts +12 -0
- package/dist/agent-run-journal.d.ts.map +1 -0
- package/dist/agent-run-journal.js +96 -0
- package/dist/agent-run-journal.js.map +1 -0
- package/dist/agent-run-tasks.d.ts +3 -0
- package/dist/agent-run-tasks.d.ts.map +1 -0
- package/dist/agent-run-tasks.js +16 -0
- package/dist/agent-run-tasks.js.map +1 -0
- package/dist/agent-runtime.d.ts +17 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +2 -0
- package/dist/agent-runtime.js.map +1 -0
- package/dist/api-docs.js +1 -1
- package/dist/api-docs.js.map +1 -1
- package/dist/auth.d.ts +3 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +5 -1
- package/dist/auth.js.map +1 -1
- package/dist/bun.d.ts +2 -0
- package/dist/bun.d.ts.map +1 -0
- package/dist/bun.js +2 -0
- package/dist/bun.js.map +1 -0
- package/dist/client-authorization.d.ts +2 -0
- package/dist/client-authorization.d.ts.map +1 -0
- package/dist/client-authorization.js +21 -0
- package/dist/client-authorization.js.map +1 -0
- package/dist/client-identity.d.ts +24 -0
- package/dist/client-identity.d.ts.map +1 -0
- package/dist/client-identity.js +46 -0
- package/dist/client-identity.js.map +1 -0
- package/dist/create-app.d.ts +2 -0
- package/dist/create-app.d.ts.map +1 -1
- package/dist/create-app.js +10 -0
- package/dist/create-app.js.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/internal-endpoint-paths.d.ts +4 -0
- package/dist/internal-endpoint-paths.d.ts.map +1 -0
- package/dist/internal-endpoint-paths.js +16 -0
- package/dist/internal-endpoint-paths.js.map +1 -0
- package/dist/internal-endpoints.d.ts +1 -3
- package/dist/internal-endpoints.d.ts.map +1 -1
- package/dist/internal-endpoints.js +4 -12
- package/dist/internal-endpoints.js.map +1 -1
- package/dist/jobs/authorization.d.ts +14 -0
- package/dist/jobs/authorization.d.ts.map +1 -0
- package/dist/jobs/authorization.js +60 -0
- package/dist/jobs/authorization.js.map +1 -0
- package/dist/jobs/common.d.ts +22 -0
- package/dist/jobs/common.d.ts.map +1 -0
- package/dist/jobs/common.js +127 -0
- package/dist/jobs/common.js.map +1 -0
- package/dist/jobs/cursors.d.ts +10 -0
- package/dist/jobs/cursors.d.ts.map +1 -0
- package/dist/jobs/cursors.js +64 -0
- package/dist/jobs/cursors.js.map +1 -0
- package/dist/jobs/handlers-mutations.d.ts +8 -0
- package/dist/jobs/handlers-mutations.d.ts.map +1 -0
- package/dist/jobs/handlers-mutations.js +73 -0
- package/dist/jobs/handlers-mutations.js.map +1 -0
- package/dist/jobs/handlers-read.d.ts +8 -0
- package/dist/jobs/handlers-read.d.ts.map +1 -0
- package/dist/jobs/handlers-read.js +70 -0
- package/dist/jobs/handlers-read.js.map +1 -0
- package/dist/jobs/handlers-stream.d.ts +7 -0
- package/dist/jobs/handlers-stream.d.ts.map +1 -0
- package/dist/jobs/handlers-stream.js +72 -0
- package/dist/jobs/handlers-stream.js.map +1 -0
- package/dist/jobs/handlers-validation.d.ts +6 -0
- package/dist/jobs/handlers-validation.d.ts.map +1 -0
- package/dist/jobs/handlers-validation.js +119 -0
- package/dist/jobs/handlers-validation.js.map +1 -0
- package/dist/jobs/handlers.d.ts +4 -0
- package/dist/jobs/handlers.d.ts.map +1 -0
- package/dist/jobs/handlers.js +4 -0
- package/dist/jobs/handlers.js.map +1 -0
- package/dist/jobs/projection-stream.d.ts +4 -0
- package/dist/jobs/projection-stream.d.ts.map +1 -0
- package/dist/jobs/projection-stream.js +82 -0
- package/dist/jobs/projection-stream.js.map +1 -0
- package/dist/jobs/projection-validation.d.ts +5 -0
- package/dist/jobs/projection-validation.d.ts.map +1 -0
- package/dist/jobs/projection-validation.js +143 -0
- package/dist/jobs/projection-validation.js.map +1 -0
- package/dist/jobs/projection.d.ts +11 -0
- package/dist/jobs/projection.d.ts.map +1 -0
- package/dist/jobs/projection.js +89 -0
- package/dist/jobs/projection.js.map +1 -0
- package/dist/jobs/rpc.d.ts +5 -0
- package/dist/jobs/rpc.d.ts.map +1 -0
- package/dist/jobs/rpc.js +115 -0
- package/dist/jobs/rpc.js.map +1 -0
- package/dist/jobs/support.d.ts +31 -0
- package/dist/jobs/support.d.ts.map +1 -0
- package/dist/jobs/support.js +144 -0
- package/dist/jobs/support.js.map +1 -0
- package/dist/jobs/types.d.ts +48 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +22 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/materialize-routes-utils.d.ts.map +1 -1
- package/dist/materialize-routes-utils.js +12 -0
- package/dist/materialize-routes-utils.js.map +1 -1
- package/dist/materialize-routes-validation.d.ts +3 -0
- package/dist/materialize-routes-validation.d.ts.map +1 -0
- package/dist/materialize-routes-validation.js +28 -0
- package/dist/materialize-routes-validation.js.map +1 -0
- package/dist/materialize-routes.d.ts +21 -1
- package/dist/materialize-routes.d.ts.map +1 -1
- package/dist/materialize-routes.js +12 -28
- package/dist/materialize-routes.js.map +1 -1
- package/dist/native-stream.d.ts +3 -0
- package/dist/native-stream.d.ts.map +1 -0
- package/dist/native-stream.js +72 -0
- package/dist/native-stream.js.map +1 -0
- package/dist/realtime-rpc-support.d.ts +19 -0
- package/dist/realtime-rpc-support.d.ts.map +1 -0
- package/dist/realtime-rpc-support.js +63 -0
- package/dist/realtime-rpc-support.js.map +1 -0
- package/dist/realtime-rpc.d.ts +4 -0
- package/dist/realtime-rpc.d.ts.map +1 -0
- package/dist/realtime-rpc.js +134 -0
- package/dist/realtime-rpc.js.map +1 -0
- package/dist/realtime-runtime.d.ts +13 -0
- package/dist/realtime-runtime.d.ts.map +1 -0
- package/dist/realtime-runtime.js +2 -0
- package/dist/realtime-runtime.js.map +1 -0
- package/dist/rpc-identity.d.ts +10 -0
- package/dist/rpc-identity.d.ts.map +1 -0
- package/dist/rpc-identity.js +26 -0
- package/dist/rpc-identity.js.map +1 -0
- package/dist/rpc-response.d.ts +5 -0
- package/dist/rpc-response.d.ts.map +1 -0
- package/dist/rpc-response.js +45 -0
- package/dist/rpc-response.js.map +1 -0
- package/dist/rpc-route-types.d.ts +10 -0
- package/dist/rpc-route-types.d.ts.map +1 -0
- package/dist/rpc-route-types.js +50 -0
- package/dist/rpc-route-types.js.map +1 -0
- package/dist/rpc-websocket.d.ts +6 -0
- package/dist/rpc-websocket.d.ts.map +1 -0
- package/dist/rpc-websocket.js +48 -0
- package/dist/rpc-websocket.js.map +1 -0
- package/dist/rpc.d.ts +8 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +46 -59
- package/dist/rpc.js.map +1 -1
- package/dist/transport-security.d.ts +19 -0
- package/dist/transport-security.d.ts.map +1 -0
- package/dist/transport-security.js +124 -0
- package/dist/transport-security.js.map +1 -0
- package/package.json +25 -11
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AcceptRunReceipt, ExecutionClaim } from "@relkit/agents";
|
|
2
|
+
export interface ActiveAgentExecution {
|
|
3
|
+
receipt: AcceptRunReceipt;
|
|
4
|
+
claim: ExecutionClaim;
|
|
5
|
+
readonly controlRunIds: string[];
|
|
6
|
+
readonly steering: AgentSteeringBuffer;
|
|
7
|
+
}
|
|
8
|
+
export interface AgentSteeringBuffer {
|
|
9
|
+
readonly push: (message: string) => void;
|
|
10
|
+
readonly drain: () => readonly string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function createAgentSteeringBuffer(): AgentSteeringBuffer;
|
|
13
|
+
//# sourceMappingURL=agent-active-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-active-execution.d.ts","sourceRoot":"","sources":["../src/agent-active-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,wBAAgB,yBAAyB,IAAI,mBAAmB,CAM/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-active-execution.js","sourceRoot":"","sources":["../src/agent-active-execution.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAChD,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AcceptRunReceipt, AgentStateProvider, ExecutionClaim, PendingApproval } from "@relkit/agents";
|
|
2
|
+
import { type OperationId } from "@relkit/contracts";
|
|
3
|
+
import type { agentContext } from "./agent-rpc-support.js";
|
|
4
|
+
import type { RouteMaterializationOptions } from "./materialize-routes.js";
|
|
5
|
+
import type { ActiveAgentExecution } from "./agent-active-execution.js";
|
|
6
|
+
type ResolvedAgent = Awaited<ReturnType<typeof agentContext>>;
|
|
7
|
+
export declare class AgentApprovalCoordinator {
|
|
8
|
+
private readonly resolved;
|
|
9
|
+
private readonly active;
|
|
10
|
+
private readonly options;
|
|
11
|
+
private readonly waiting;
|
|
12
|
+
private flushQueued;
|
|
13
|
+
constructor(resolved: ResolvedAgent, active: ActiveAgentExecution, options: RouteMaterializationOptions);
|
|
14
|
+
readonly request: (approval: PendingApproval) => Promise<"approved" | "denied">;
|
|
15
|
+
continue(operationId: OperationId, payload: unknown, beforeResume?: () => Promise<void>): Promise<void>;
|
|
16
|
+
private flush;
|
|
17
|
+
}
|
|
18
|
+
export declare function claimRun(provider: AgentStateProvider, resolved: ResolvedAgent, receipt: AcceptRunReceipt, options: RouteMaterializationOptions): Promise<ExecutionClaim>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=agent-approval-coordinator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-approval-coordinator.d.ts","sourceRoot":"","sources":["../src/agent-approval-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC;AAS9D,qBAAa,wBAAwB;IAKjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,WAAW,CAAS;gBAGT,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,2BAA2B;IAGvD,QAAQ,CAAC,OAAO,GAAI,UAAU,eAAe,KAAG,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,CAuB5E;IAEI,QAAQ,CACZ,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;YAiDF,KAAK;CAwCpB;AAED,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,cAAc,CAAC,CASzB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { REALTIME_RUNTIME_LIMITS } from "@relkit/contracts";
|
|
2
|
+
import { createOperationId } from "@relkit/realtime";
|
|
3
|
+
import { agentLimits, digest, encodedBytes } from "./agent-rpc-support.js";
|
|
4
|
+
export class AgentApprovalCoordinator {
|
|
5
|
+
resolved;
|
|
6
|
+
active;
|
|
7
|
+
options;
|
|
8
|
+
waiting = new Map();
|
|
9
|
+
flushQueued = false;
|
|
10
|
+
constructor(resolved, active, options) {
|
|
11
|
+
this.resolved = resolved;
|
|
12
|
+
this.active = active;
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
request = (approval) => {
|
|
16
|
+
const approvalId = digest({
|
|
17
|
+
runId: this.active.receipt.runId,
|
|
18
|
+
invocationId: approval.invocationId,
|
|
19
|
+
toolCallId: approval.toolCallId,
|
|
20
|
+
});
|
|
21
|
+
const existing = this.waiting.get(approvalId);
|
|
22
|
+
if (existing !== undefined)
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
const original = existing.resolve;
|
|
25
|
+
existing.resolve = (decision) => {
|
|
26
|
+
original(decision);
|
|
27
|
+
resolve(decision);
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
const result = new Promise((resolve) => {
|
|
31
|
+
this.waiting.set(approvalId, { approval, approvalId, resolve });
|
|
32
|
+
});
|
|
33
|
+
if (!this.flushQueued) {
|
|
34
|
+
this.flushQueued = true;
|
|
35
|
+
queueMicrotask(() => void this.flush());
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
async continue(operationId, payload, beforeResume) {
|
|
40
|
+
const entries = [...this.waiting.values()];
|
|
41
|
+
if (entries.length === 0)
|
|
42
|
+
throw new Error("No approval interruption is pending.");
|
|
43
|
+
const decisions = approvalDecisions(payload);
|
|
44
|
+
if (entries.some(({ approvalId }) => decisions[approvalId] === undefined)) {
|
|
45
|
+
throw new Error("Every open approval requires a decision.");
|
|
46
|
+
}
|
|
47
|
+
const interruptSetDigest = entries[0]?.interruptSetDigest;
|
|
48
|
+
if (interruptSetDigest === undefined ||
|
|
49
|
+
entries.some((entry) => entry.interruptSetDigest !== interruptSetDigest)) {
|
|
50
|
+
throw new Error("Approval interrupt set is not ready.");
|
|
51
|
+
}
|
|
52
|
+
const interruptedRunId = this.active.receipt.runId;
|
|
53
|
+
const semanticDigest = digest({ interruptedRunId, interruptSetDigest, decisions });
|
|
54
|
+
const continuation = await this.resolved.provider.admitContinuation({
|
|
55
|
+
...this.resolved.scope,
|
|
56
|
+
operationId,
|
|
57
|
+
semanticDigest,
|
|
58
|
+
kind: "approval",
|
|
59
|
+
threadId: this.active.receipt.threadId,
|
|
60
|
+
interruptedRunId,
|
|
61
|
+
interruptSetDigest,
|
|
62
|
+
decisions,
|
|
63
|
+
admittedAt: new Date().toISOString(),
|
|
64
|
+
receiptExpiresAt: receiptExpiry(),
|
|
65
|
+
});
|
|
66
|
+
this.active.receipt = {
|
|
67
|
+
operationId: continuation.operationId,
|
|
68
|
+
threadId: continuation.threadId,
|
|
69
|
+
runId: continuation.runId,
|
|
70
|
+
status: "accepted",
|
|
71
|
+
duplicate: continuation.duplicate,
|
|
72
|
+
};
|
|
73
|
+
this.active.controlRunIds.push(continuation.runId);
|
|
74
|
+
this.active.claim = await claimRun(this.resolved.provider, this.resolved, this.active.receipt, this.options);
|
|
75
|
+
await beforeResume?.();
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
this.waiting.delete(entry.approvalId);
|
|
78
|
+
entry.resolve(decisions[entry.approvalId] === "approve" ? "approved" : "denied");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async flush() {
|
|
82
|
+
this.flushQueued = false;
|
|
83
|
+
const entries = [...this.waiting.values()].filter((entry) => entry.interruptSetDigest === undefined);
|
|
84
|
+
if (entries.length === 0)
|
|
85
|
+
return;
|
|
86
|
+
const interruptSetDigest = digest(entries.map(({ approvalId }) => approvalId).sort());
|
|
87
|
+
for (const entry of entries) {
|
|
88
|
+
entry.interruptSetDigest = interruptSetDigest;
|
|
89
|
+
const value = {
|
|
90
|
+
approvalId: entry.approvalId,
|
|
91
|
+
runId: this.active.receipt.runId,
|
|
92
|
+
interruptSetDigest,
|
|
93
|
+
interruptSetSize: entries.length,
|
|
94
|
+
status: "open",
|
|
95
|
+
publicRequest: {
|
|
96
|
+
toolCallId: entry.approval.toolCallId,
|
|
97
|
+
toolId: entry.approval.toolId,
|
|
98
|
+
sideEffect: entry.approval.sideEffect,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
await this.resolved.provider.appendJournal({
|
|
102
|
+
...this.resolved.scope,
|
|
103
|
+
threadId: this.active.receipt.threadId,
|
|
104
|
+
runId: this.active.receipt.runId,
|
|
105
|
+
claim: this.active.claim,
|
|
106
|
+
operationId: createOperationId(),
|
|
107
|
+
semanticDigest: digest(value),
|
|
108
|
+
record: {
|
|
109
|
+
recordId: crypto.randomUUID(),
|
|
110
|
+
runId: this.active.receipt.runId,
|
|
111
|
+
kind: "approval",
|
|
112
|
+
publicValue: value,
|
|
113
|
+
encodedBytes: encodedBytes(value),
|
|
114
|
+
createdAt: new Date().toISOString(),
|
|
115
|
+
},
|
|
116
|
+
limits: agentLimits,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export function claimRun(provider, resolved, receipt, options) {
|
|
122
|
+
return provider.claimRun({
|
|
123
|
+
...resolved.scope,
|
|
124
|
+
threadId: receipt.threadId,
|
|
125
|
+
runId: receipt.runId,
|
|
126
|
+
workerId: crypto.randomUUID(),
|
|
127
|
+
generationId: options.agentRuntime.generationId,
|
|
128
|
+
expiresAt: new Date(Date.now() + REALTIME_RUNTIME_LIMITS.leaseExpiryMs).toISOString(),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function approvalDecisions(value) {
|
|
132
|
+
if (value === null || typeof value !== "object")
|
|
133
|
+
return {};
|
|
134
|
+
const payload = value;
|
|
135
|
+
if (typeof payload.approvalId === "string" && isDecision(payload.decision)) {
|
|
136
|
+
return { [payload.approvalId]: payload.decision };
|
|
137
|
+
}
|
|
138
|
+
if (payload.decisions === null || typeof payload.decisions !== "object")
|
|
139
|
+
return {};
|
|
140
|
+
return Object.fromEntries(Object.entries(payload.decisions).filter((entry) => isDecision(entry[1])));
|
|
141
|
+
}
|
|
142
|
+
function isDecision(value) {
|
|
143
|
+
return value === "approve" || value === "deny";
|
|
144
|
+
}
|
|
145
|
+
function receiptExpiry() {
|
|
146
|
+
return new Date(Date.now() + REALTIME_RUNTIME_LIMITS.agentReceiptMs).toISOString();
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=agent-approval-coordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-approval-coordinator.js","sourceRoot":"","sources":["../src/agent-approval-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-capability-negotiation.d.ts","sourceRoot":"","sources":["../src/agent-capability-negotiation.ts"],"names":[],"mappings":"AAOA,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY9D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ORPCError } from "@orpc/server";
|
|
2
|
+
import { AGENT_CAPABILITY_HEADER, AGENT_CAPABILITY_QUERY, AGENT_STREAM_CAPABILITIES, } from "@relkit/contracts";
|
|
3
|
+
export function assertAgentCapabilities(request) {
|
|
4
|
+
const value = request.headers.get(AGENT_CAPABILITY_HEADER) ??
|
|
5
|
+
new URL(request.url).searchParams.get(AGENT_CAPABILITY_QUERY) ??
|
|
6
|
+
"";
|
|
7
|
+
const offered = new Set(value.split(",").map((entry) => entry.trim()));
|
|
8
|
+
const missing = AGENT_STREAM_CAPABILITIES.filter((capability) => !offered.has(capability));
|
|
9
|
+
if (missing.length === 0)
|
|
10
|
+
return;
|
|
11
|
+
throw new ORPCError("AGENT_CAPABILITIES_UNSUPPORTED", {
|
|
12
|
+
message: "The client does not support the required native agent stream capabilities.",
|
|
13
|
+
data: { required: AGENT_STREAM_CAPABILITIES, missing },
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=agent-capability-negotiation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-capability-negotiation.js","sourceRoot":"","sources":["../src/agent-capability-negotiation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,KAAK,GACT,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC5C,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC;QAC7D,EAAE,CAAC;IACL,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,IAAI,SAAS,CAAC,gCAAgC,EAAE;QACpD,OAAO,EAAE,4EAA4E;QACrF,IAAI,EAAE,EAAE,QAAQ,EAAE,yBAAyB,EAAE,OAAO,EAAE;KACvD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type AgentRunCompatibility, type StoredRun, type ThreadSnapshot } from "@relkit/contracts";
|
|
2
|
+
export declare function agentRunCompatibility(run: StoredRun | undefined, waitingRunId?: string): AgentRunCompatibility;
|
|
3
|
+
export declare function clientAgentSnapshot(snapshot: ThreadSnapshot): ThreadSnapshot;
|
|
4
|
+
export declare function assertAgentRunWritable(snapshot: ThreadSnapshot, runId?: string): void;
|
|
5
|
+
//# sourceMappingURL=agent-compatibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-compatibility.d.ts","sourceRoot":"","sources":["../src/agent-compatibility.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,YAAY,CAAC,EAAE,MAAM,GACpB,qBAAqB,CAiBvB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAM5E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CASrF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ORPCError } from "@orpc/server";
|
|
2
|
+
import { AGENT_STATE_SCHEMA_VERSION, AGENT_STREAM_VERSION, } from "@relkit/contracts";
|
|
3
|
+
export function agentRunCompatibility(run, waitingRunId) {
|
|
4
|
+
if (run === undefined) {
|
|
5
|
+
return { runtime: "native", access: "read-write", resumableCheckpoint: false };
|
|
6
|
+
}
|
|
7
|
+
const owner = run.owner;
|
|
8
|
+
const native = owner?.protocolVersion === AGENT_STREAM_VERSION &&
|
|
9
|
+
owner.schemaVersion === AGENT_STATE_SCHEMA_VERSION;
|
|
10
|
+
return {
|
|
11
|
+
runtime: native ? "native" : "ai-sdk",
|
|
12
|
+
access: native ? "read-write" : "read-only",
|
|
13
|
+
resumableCheckpoint: native && waitingRunId === run.runId,
|
|
14
|
+
...(typeof owner?.protocolVersion === "number"
|
|
15
|
+
? { protocolVersion: owner.protocolVersion }
|
|
16
|
+
: {}),
|
|
17
|
+
...(typeof owner?.schemaVersion === "number" ? { schemaVersion: owner.schemaVersion } : {}),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function clientAgentSnapshot(snapshot) {
|
|
21
|
+
const run = currentRun(snapshot);
|
|
22
|
+
const compatibility = agentRunCompatibility(run, snapshot.waiting?.runId);
|
|
23
|
+
if (compatibility.access === "read-write")
|
|
24
|
+
return { ...snapshot, compatibility };
|
|
25
|
+
const { waiting: _waiting, ...readOnly } = snapshot;
|
|
26
|
+
return { ...readOnly, compatibility };
|
|
27
|
+
}
|
|
28
|
+
export function assertAgentRunWritable(snapshot, runId) {
|
|
29
|
+
const run = runId === undefined
|
|
30
|
+
? currentRun(snapshot)
|
|
31
|
+
: snapshot.currentRuns.find((candidate) => candidate.runId === runId);
|
|
32
|
+
if (agentRunCompatibility(run, snapshot.waiting?.runId).access === "read-write")
|
|
33
|
+
return;
|
|
34
|
+
throw new ORPCError("AGENT_RUN_READ_ONLY", {
|
|
35
|
+
message: "Historical AI SDK runs are read-only and have no native resumable checkpoint.",
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function currentRun(snapshot) {
|
|
39
|
+
const active = snapshot.activeRun?.runId;
|
|
40
|
+
if (active !== undefined) {
|
|
41
|
+
const run = snapshot.currentRuns.find((candidate) => candidate.runId === active);
|
|
42
|
+
if (run !== undefined)
|
|
43
|
+
return run;
|
|
44
|
+
}
|
|
45
|
+
return [...snapshot.currentRuns].sort((left, right) => right.acceptedAt.localeCompare(left.acceptedAt))[0];
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=agent-compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-compatibility.js","sourceRoot":"","sources":["../src/agent-compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AgentContentSink } from "@relkit/agents";
|
|
2
|
+
import type { ActiveAgentExecution } from "./agent-active-execution.js";
|
|
3
|
+
import type { agentContext } from "./agent-rpc-support.js";
|
|
4
|
+
type ResolvedAgent = Awaited<ReturnType<typeof agentContext>>;
|
|
5
|
+
export interface AgentJournalSink extends AgentContentSink {
|
|
6
|
+
readonly ensureOutput: (value: unknown, signal: AbortSignal) => Promise<void>;
|
|
7
|
+
readonly isWaiting: () => boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function createAgentContentSink(resolved: ResolvedAgent, active: ActiveAgentExecution, messageId: string, assistantCreatedAt: string): AgentJournalSink;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=agent-content-sink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-content-sink.d.ts","sourceRoot":"","sources":["../src/agent-content-sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAsC,MAAM,gBAAgB,CAAC;AAE3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAM3D,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC;AAE9D,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;CACnC;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,GACzB,gBAAgB,CAkKlB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { appendAgentMessage, appendBrowserMessage } from "./agent-run-journal.js";
|
|
2
|
+
import { agentLimits, digest, encodedBytes } from "./agent-rpc-support.js";
|
|
3
|
+
import { createOperationId } from "@relkit/realtime";
|
|
4
|
+
import { createAgentProgressSink } from "./agent-progress-sink.js";
|
|
5
|
+
export function createAgentContentSink(resolved, active, messageId, assistantCreatedAt) {
|
|
6
|
+
const toolParts = new Map();
|
|
7
|
+
const toolCreatedAt = new Map();
|
|
8
|
+
let latestOutput;
|
|
9
|
+
let hasOutput = false;
|
|
10
|
+
let outputFinished = false;
|
|
11
|
+
let waiting = false;
|
|
12
|
+
return Object.freeze({
|
|
13
|
+
isWaiting: () => waiting,
|
|
14
|
+
emitWaiting: async (value, signal) => {
|
|
15
|
+
if (waiting)
|
|
16
|
+
return;
|
|
17
|
+
if (signal.aborted)
|
|
18
|
+
throw signal.reason;
|
|
19
|
+
await resolved.provider.suspendRun({
|
|
20
|
+
...resolved.scope,
|
|
21
|
+
operationId: createOperationId(),
|
|
22
|
+
threadId: active.receipt.threadId,
|
|
23
|
+
runId: active.receipt.runId,
|
|
24
|
+
claim: active.claim,
|
|
25
|
+
waiting: { ...value, runId: active.receipt.runId },
|
|
26
|
+
suspendedAt: new Date().toISOString(),
|
|
27
|
+
});
|
|
28
|
+
waiting = true;
|
|
29
|
+
},
|
|
30
|
+
ensureOutput: async (value, signal) => {
|
|
31
|
+
if (outputFinished)
|
|
32
|
+
return;
|
|
33
|
+
if (signal.aborted)
|
|
34
|
+
throw signal.reason;
|
|
35
|
+
await appendAgentMessage(resolved, active.receipt, active.claim, "assistant", hasOutput ? latestOutput : value, messageId, assistantCreatedAt, "complete");
|
|
36
|
+
outputFinished = true;
|
|
37
|
+
},
|
|
38
|
+
emitEvent: async (value, signal) => {
|
|
39
|
+
if (signal.aborted)
|
|
40
|
+
throw signal.reason;
|
|
41
|
+
await resolved.provider.appendJournal({
|
|
42
|
+
...resolved.scope,
|
|
43
|
+
threadId: active.receipt.threadId,
|
|
44
|
+
runId: active.receipt.runId,
|
|
45
|
+
claim: active.claim,
|
|
46
|
+
operationId: createOperationId(),
|
|
47
|
+
semanticDigest: digest(value),
|
|
48
|
+
record: {
|
|
49
|
+
recordId: crypto.randomUUID(),
|
|
50
|
+
runId: active.receipt.runId,
|
|
51
|
+
kind: "event",
|
|
52
|
+
publicValue: value,
|
|
53
|
+
encodedBytes: encodedBytes(value),
|
|
54
|
+
createdAt: value.occurredAt,
|
|
55
|
+
},
|
|
56
|
+
limits: agentLimits,
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
emitMessage: async (value, signal) => {
|
|
60
|
+
if (signal.aborted)
|
|
61
|
+
throw signal.reason;
|
|
62
|
+
await appendBrowserMessage(resolved, active.receipt, active.claim, {
|
|
63
|
+
...value,
|
|
64
|
+
runId: active.receipt.runId,
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
progressSinkForTool: (tool) => createAgentProgressSink(resolved, active, tool),
|
|
68
|
+
emitOutput: (value, signal) => {
|
|
69
|
+
if (signal.aborted)
|
|
70
|
+
throw signal.reason;
|
|
71
|
+
latestOutput = value;
|
|
72
|
+
hasOutput = true;
|
|
73
|
+
return appendAgentMessage(resolved, active.receipt, active.claim, "assistant", value, messageId, assistantCreatedAt, "streaming");
|
|
74
|
+
},
|
|
75
|
+
finishOutput: async (signal) => {
|
|
76
|
+
if (signal.aborted)
|
|
77
|
+
throw signal.reason;
|
|
78
|
+
if (!hasOutput || outputFinished)
|
|
79
|
+
return;
|
|
80
|
+
await appendAgentMessage(resolved, active.receipt, active.claim, "assistant", latestOutput, messageId, assistantCreatedAt, "complete");
|
|
81
|
+
outputFinished = true;
|
|
82
|
+
},
|
|
83
|
+
emitTool: async (value, signal) => {
|
|
84
|
+
if (signal.aborted)
|
|
85
|
+
throw signal.reason;
|
|
86
|
+
const toolMessageId = `${active.receipt.runId}:tool:${value.toolCallId}`;
|
|
87
|
+
const prior = toolParts.get(value.toolCallId);
|
|
88
|
+
const part = {
|
|
89
|
+
...(prior ?? {
|
|
90
|
+
partId: `${toolMessageId}:state`,
|
|
91
|
+
kind: "tool",
|
|
92
|
+
toolCallId: value.toolCallId,
|
|
93
|
+
toolId: value.toolId,
|
|
94
|
+
}),
|
|
95
|
+
state: value.state,
|
|
96
|
+
...(value.state === "input-streaming" && typeof value.value === "string"
|
|
97
|
+
? { inputText: value.value }
|
|
98
|
+
: {}),
|
|
99
|
+
...(value.state === "input-ready" ? { input: value.value } : {}),
|
|
100
|
+
...(value.state === "succeeded" ? { output: value.value } : {}),
|
|
101
|
+
};
|
|
102
|
+
toolParts.set(value.toolCallId, part);
|
|
103
|
+
const createdAt = toolCreatedAt.get(value.toolCallId) ?? new Date().toISOString();
|
|
104
|
+
toolCreatedAt.set(value.toolCallId, createdAt);
|
|
105
|
+
const message = {
|
|
106
|
+
messageId: toolMessageId,
|
|
107
|
+
runId: active.receipt.runId,
|
|
108
|
+
role: "tool",
|
|
109
|
+
parts: [part],
|
|
110
|
+
createdAt,
|
|
111
|
+
};
|
|
112
|
+
await resolved.provider.appendJournal({
|
|
113
|
+
...resolved.scope,
|
|
114
|
+
threadId: active.receipt.threadId,
|
|
115
|
+
runId: active.receipt.runId,
|
|
116
|
+
claim: active.claim,
|
|
117
|
+
operationId: createOperationId(),
|
|
118
|
+
semanticDigest: digest(message),
|
|
119
|
+
record: {
|
|
120
|
+
recordId: crypto.randomUUID(),
|
|
121
|
+
runId: active.receipt.runId,
|
|
122
|
+
kind: "message",
|
|
123
|
+
publicValue: message,
|
|
124
|
+
encodedBytes: encodedBytes(message),
|
|
125
|
+
createdAt: message.createdAt,
|
|
126
|
+
},
|
|
127
|
+
limits: agentLimits,
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=agent-content-sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-content-sink.js","sourceRoot":"","sources":["../src/agent-content-sink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RouteMaterializationOptions } from "./materialize-routes.js";
|
|
2
|
+
import type { agentContext } from "./agent-rpc-support.js";
|
|
3
|
+
import { AgentApprovalCoordinator } from "./agent-approval-coordinator.js";
|
|
4
|
+
import type { ActiveAgentExecution } from "./agent-active-execution.js";
|
|
5
|
+
type ResolvedAgent = Awaited<ReturnType<typeof agentContext>>;
|
|
6
|
+
export declare function consumeAgentControls(resolved: ResolvedAgent, active: ActiveAgentExecution, options: RouteMaterializationOptions, runController: AbortController, approvals: AgentApprovalCoordinator, signal: AbortSignal): Promise<void>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=agent-control-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-control-worker.d.ts","sourceRoot":"","sources":["../src/agent-control-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC;AAE9D,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,2BAA2B,EACpC,aAAa,EAAE,eAAe,EAC9B,SAAS,EAAE,wBAAwB,EACnC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { REALTIME_RUNTIME_LIMITS } from "@relkit/contracts";
|
|
2
|
+
import { AgentApprovalCoordinator } from "./agent-approval-coordinator.js";
|
|
3
|
+
export async function consumeAgentControls(resolved, active, options, runController, approvals, signal) {
|
|
4
|
+
let afterSequence;
|
|
5
|
+
let runId = active.receipt.runId;
|
|
6
|
+
while (!signal.aborted) {
|
|
7
|
+
if (runId !== active.receipt.runId) {
|
|
8
|
+
runId = active.receipt.runId;
|
|
9
|
+
afterSequence = undefined;
|
|
10
|
+
}
|
|
11
|
+
const page = await resolved.provider.readControls({
|
|
12
|
+
...resolved.scope,
|
|
13
|
+
threadId: active.receipt.threadId,
|
|
14
|
+
runId,
|
|
15
|
+
...(afterSequence === undefined ? {} : { afterSequence }),
|
|
16
|
+
limit: 32,
|
|
17
|
+
});
|
|
18
|
+
for (const operationId of page.operationIds) {
|
|
19
|
+
await applyControl(resolved, active.receipt.threadId, runId, options, operationId, runController, approvals, active).catch(() => undefined);
|
|
20
|
+
}
|
|
21
|
+
afterSequence = page.nextSequence;
|
|
22
|
+
if (!page.hasMore)
|
|
23
|
+
await resolved.provider.waitForControls({
|
|
24
|
+
...resolved.scope,
|
|
25
|
+
threadId: active.receipt.threadId,
|
|
26
|
+
runId,
|
|
27
|
+
afterSequence: page.nextSequence,
|
|
28
|
+
deadlineMs: Date.now() + 15_000,
|
|
29
|
+
signal,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function applyControl(resolved, threadId, runId, options, operationId, runController, approvals, active) {
|
|
34
|
+
const snapshot = await resolved.provider.loadThread({
|
|
35
|
+
...resolved.scope,
|
|
36
|
+
threadId,
|
|
37
|
+
maxEncodedBytes: REALTIME_RUNTIME_LIMITS.initialSnapshotBytes,
|
|
38
|
+
});
|
|
39
|
+
const record = snapshot.controls.find((candidate) => candidate.controlId === operationId);
|
|
40
|
+
if (record === undefined)
|
|
41
|
+
return;
|
|
42
|
+
if (record.kind === "follow-up")
|
|
43
|
+
return;
|
|
44
|
+
const claim = await resolved.provider.claimControl({
|
|
45
|
+
...resolved.scope,
|
|
46
|
+
threadId,
|
|
47
|
+
runId,
|
|
48
|
+
operationId,
|
|
49
|
+
workerId: crypto.randomUUID(),
|
|
50
|
+
generationId: options.agentRuntime.generationId,
|
|
51
|
+
expiresAt: new Date(Date.now() + 45_000).toISOString(),
|
|
52
|
+
});
|
|
53
|
+
const now = new Date().toISOString();
|
|
54
|
+
if (record.kind === "stop") {
|
|
55
|
+
await resolved.provider.markControlEffectStarted({
|
|
56
|
+
...resolved.scope,
|
|
57
|
+
threadId,
|
|
58
|
+
runId,
|
|
59
|
+
operationId,
|
|
60
|
+
claim,
|
|
61
|
+
});
|
|
62
|
+
runController.abort(new Error("Agent stopped."));
|
|
63
|
+
await resolved.provider.settleControl({
|
|
64
|
+
...resolved.scope,
|
|
65
|
+
threadId,
|
|
66
|
+
runId,
|
|
67
|
+
operationId,
|
|
68
|
+
claim,
|
|
69
|
+
status: "applied",
|
|
70
|
+
effect: "confirmed",
|
|
71
|
+
settledAt: now,
|
|
72
|
+
});
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (record.kind === "approve") {
|
|
76
|
+
await approvals.continue(operationId, record.publicPayload, async () => {
|
|
77
|
+
await resolved.provider.markControlEffectStarted({
|
|
78
|
+
...resolved.scope,
|
|
79
|
+
threadId,
|
|
80
|
+
runId,
|
|
81
|
+
operationId,
|
|
82
|
+
claim,
|
|
83
|
+
downstreamOperationId: operationId,
|
|
84
|
+
});
|
|
85
|
+
await resolved.provider.settleControl({
|
|
86
|
+
...resolved.scope,
|
|
87
|
+
threadId,
|
|
88
|
+
runId,
|
|
89
|
+
operationId,
|
|
90
|
+
claim,
|
|
91
|
+
status: "applied",
|
|
92
|
+
effect: "confirmed",
|
|
93
|
+
downstreamOperationId: operationId,
|
|
94
|
+
settledAt: now,
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (record.kind === "steer" && typeof record.publicPayload === "string") {
|
|
100
|
+
await resolved.provider.markControlEffectStarted({
|
|
101
|
+
...resolved.scope,
|
|
102
|
+
threadId,
|
|
103
|
+
runId,
|
|
104
|
+
operationId,
|
|
105
|
+
claim,
|
|
106
|
+
});
|
|
107
|
+
active.steering.push(record.publicPayload);
|
|
108
|
+
await resolved.provider.settleControl({
|
|
109
|
+
...resolved.scope,
|
|
110
|
+
threadId,
|
|
111
|
+
runId,
|
|
112
|
+
operationId,
|
|
113
|
+
claim,
|
|
114
|
+
status: "applied",
|
|
115
|
+
effect: "confirmed",
|
|
116
|
+
settledAt: now,
|
|
117
|
+
});
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
await resolved.provider.settleControl({
|
|
121
|
+
...resolved.scope,
|
|
122
|
+
threadId,
|
|
123
|
+
runId,
|
|
124
|
+
operationId,
|
|
125
|
+
claim,
|
|
126
|
+
status: "rejected",
|
|
127
|
+
effect: "not-started",
|
|
128
|
+
settledAt: now,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=agent-control-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-control-worker.js","sourceRoot":"","sources":["../src/agent-control-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ActiveAgentExecution } from "./agent-active-execution.js";
|
|
2
|
+
import type { agentContext } from "./agent-rpc-support.js";
|
|
3
|
+
import type { RouteMaterializationOptions } from "./materialize-routes.js";
|
|
4
|
+
type ResolvedAgent = Awaited<ReturnType<typeof agentContext>>;
|
|
5
|
+
export interface NextAgentRun {
|
|
6
|
+
readonly receipt: Awaited<ReturnType<ResolvedAgent["provider"]["acceptRun"]>>;
|
|
7
|
+
readonly input: unknown;
|
|
8
|
+
readonly controlRunIds: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function processAgentFollowUps(resolved: ResolvedAgent, active: ActiveAgentExecution, options: RouteMaterializationOptions, startNext: boolean): Promise<NextAgentRun | undefined>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=agent-follow-up.d.ts.map
|