@springbrand/agent-runtime 0.1.3-alpha.3 → 0.1.3-alpha.5
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/package.json +3 -1
- package/src/adapter/cloudflare/index.ts +60 -0
- package/src/adapter/cloudflare/resources/runtime-resources.ts +86 -0
- package/src/adapter/cloudflare/sandbox/adapter.ts +1509 -0
- package/src/adapter/cloudflare/sandbox/id.ts +23 -0
- package/src/adapter/cloudflare/sandbox/policy.ts +15 -0
- package/src/adapter/cloudflare/subagent/definition.ts +574 -0
- package/src/adapter/cloudflare/subagent/runner.ts +175 -0
- package/src/adapter/cloudflare/subagent/tools.ts +256 -0
- package/src/adapter/cloudflare/universal-agent/definition.ts +71 -0
- package/src/adapter/cloudflare/universal-agent/hooks.ts +35 -0
- package/src/adapter/cloudflare/universal-agent/preparation.ts +273 -0
- package/src/adapter/cloudflare/universal-agent/tools.ts +74 -0
- package/src/adapter/cloudflare/workspace/publisher.ts +31 -0
- package/src/adapter/cloudflare/workspace/scoped-workspace.ts +376 -0
- package/src/agent-tool-runtime.ts +152 -0
- package/src/db/agent-tool.repo.ts +27 -0
- package/src/db/index.ts +33 -0
- package/src/db/interaction.repo.ts +185 -0
- package/src/db/schema.ts +15 -0
- package/src/db/submission.repo.ts +29 -0
- package/src/index.ts +53 -21
- package/src/kernel/approval-lifecycle.ts +41 -6
- package/src/kernel/bindings.ts +37 -0
- package/src/kernel/interaction-lifecycle.ts +395 -0
- package/src/kernel/public-contracts.ts +2 -0
- package/src/kernel/recoverable-chat-agent.ts +10 -2
- package/src/kernel/runtime-assembly-view.ts +37 -0
- package/src/kernel/runtime-assembly.ts +41 -0
- package/src/kernel/runtime-config.ts +4 -0
- package/src/kernel/runtime-load.ts +102 -0
- package/src/kernel/state.ts +8 -1
- package/src/kernel/submission-lifecycle.ts +30 -0
- package/src/layers/orchestration/temporary-agent/core.ts +12 -1
- package/src/layers/orchestration/temporary-agent/runner.ts +1 -2
- package/src/pi/message/contract.ts +7 -0
- package/src/pi/message/conversion.ts +9 -1
- package/src/pi/runtime-adapter/assembly.ts +17 -3
- package/src/pi/runtime-adapter/execution.ts +109 -9
- package/src/pi/runtime-adapter/index.ts +15 -5
- package/src/pi/runtime-adapter/recovery.ts +188 -1
- package/src/pi/tool/base.ts +79 -9
- package/src/pi/tool/compiler.ts +34 -0
- package/src/pi/tool/core.ts +13 -0
- package/src/pi/tool/gateway.ts +54 -0
- package/src/pi/tool/index.ts +1 -0
- package/src/pi/tool/mcp.ts +93 -64
- package/src/pi/tool/schedule.ts +11 -0
- package/src/pi/tool/subagent.ts +14 -0
- package/src/pi/tool/workspace-sandbox.ts +15 -0
- package/src/pi/turn/index.ts +20 -0
- package/src/pi/turn/interaction.ts +181 -0
- package/src/pi/turn/tool-recovery.ts +244 -1
- package/src/runtime-agent-context.ts +112 -0
- package/src/runtime-agent.ts +569 -322
- package/src/{plugins.ts → runtime-assembler.ts} +312 -379
- package/src/runtime-definition.ts +173 -0
- package/src/runtime.ts +572 -164
- package/src/tool-registry.ts +143 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@springbrand/agent-runtime",
|
|
3
|
-
"version": "0.1.3-alpha.
|
|
3
|
+
"version": "0.1.3-alpha.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"src",
|
|
@@ -11,11 +11,13 @@
|
|
|
11
11
|
},
|
|
12
12
|
"exports": {
|
|
13
13
|
".": "./src/index.ts",
|
|
14
|
+
"./adapter/cloudflare": "./src/adapter/cloudflare/index.ts",
|
|
14
15
|
"./contracts": "./src/kernel/public-contracts.ts",
|
|
15
16
|
"./models": "./src/lib/model-catalog.ts"
|
|
16
17
|
},
|
|
17
18
|
"dependencies": {
|
|
18
19
|
"@cloudflare/codemode": "0.5.0",
|
|
20
|
+
"@cloudflare/sandbox": "0.12.4",
|
|
19
21
|
"@cloudflare/shell": "0.4.3",
|
|
20
22
|
"@cloudflare/think": "0.15.0",
|
|
21
23
|
"@earendil-works/pi-agent-core": "0.83.0",
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export {
|
|
2
|
+
defineCloudflareUniversalAgent,
|
|
3
|
+
type CloudflareUniversalAgentClass,
|
|
4
|
+
type CloudflareUniversalAgentInstance,
|
|
5
|
+
} from "./universal-agent/definition";
|
|
6
|
+
export {
|
|
7
|
+
createPlatformLoader,
|
|
8
|
+
createWorkspaceLoader,
|
|
9
|
+
prepareMemory,
|
|
10
|
+
prepareSandbox,
|
|
11
|
+
prepareSubagents,
|
|
12
|
+
prepareWorkspace,
|
|
13
|
+
workspaceRequired,
|
|
14
|
+
type CloudflarePlatformBindings,
|
|
15
|
+
type PlatformLoader,
|
|
16
|
+
type WorkspaceLoader,
|
|
17
|
+
type WorkspaceRequirement,
|
|
18
|
+
} from "./universal-agent/preparation";
|
|
19
|
+
export {
|
|
20
|
+
assembleUniversalAgentTools,
|
|
21
|
+
selectTools,
|
|
22
|
+
} from "./universal-agent/tools";
|
|
23
|
+
export { createUniversalAgentHooks } from "./universal-agent/hooks";
|
|
24
|
+
|
|
25
|
+
export {
|
|
26
|
+
CloudflareSandboxAdapter,
|
|
27
|
+
createCloudflareSandboxAdapter,
|
|
28
|
+
type CloudflareSandboxAdapterOptions,
|
|
29
|
+
type SandboxAdmission,
|
|
30
|
+
type SandboxObserver,
|
|
31
|
+
} from "./sandbox/adapter";
|
|
32
|
+
export { sandboxIdForSession } from "./sandbox/id";
|
|
33
|
+
export { SANDBOX_HOST_POLICY } from "./sandbox/policy";
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
createWorkspacePortFacade,
|
|
37
|
+
ScopedWorkspace,
|
|
38
|
+
} from "./workspace/scoped-workspace";
|
|
39
|
+
export type {
|
|
40
|
+
WorkspaceConditionalWriteResult,
|
|
41
|
+
WorkspaceFileVersion,
|
|
42
|
+
WorkspacePublishPort,
|
|
43
|
+
} from "./workspace/publisher";
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
CloudflareSubAgent,
|
|
47
|
+
type CloudflareSubAgentExecution,
|
|
48
|
+
} from "./subagent/definition";
|
|
49
|
+
export {
|
|
50
|
+
runCloudflareSubAgent,
|
|
51
|
+
type CloudflareSubAgentRun,
|
|
52
|
+
} from "./subagent/runner";
|
|
53
|
+
export { createCloudflareSubAgentTools } from "./subagent/tools";
|
|
54
|
+
|
|
55
|
+
export {
|
|
56
|
+
createR2SkillSource,
|
|
57
|
+
prepareRuntimeExtensions,
|
|
58
|
+
readVerifiedR2Text,
|
|
59
|
+
type CloudflareRuntimeExtensionSource,
|
|
60
|
+
} from "./resources/runtime-resources";
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { r2, type SkillSource } from "agents/skills";
|
|
2
|
+
import type { RuntimeDegradation } from "../../../kernel/degradation";
|
|
3
|
+
import type { RuntimeExtensionConfig } from "../../../kernel/extensions";
|
|
4
|
+
import type { RuntimeExtensionContribution } from "../../../runtime-definition";
|
|
5
|
+
|
|
6
|
+
export interface CloudflareRuntimeExtensionSource {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly manifest: RuntimeExtensionConfig["manifest"];
|
|
9
|
+
readonly sourceRef: string;
|
|
10
|
+
readonly sourceHash: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function trimSlashes(value: string): string {
|
|
14
|
+
return value.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function hex(bytes: ArrayBuffer): string {
|
|
18
|
+
return [...new Uint8Array(bytes)]
|
|
19
|
+
.map((byte) => byte.toString(16).padStart(2, "0"))
|
|
20
|
+
.join("");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function createR2SkillSource(
|
|
24
|
+
bucket: R2Bucket,
|
|
25
|
+
resourceId: string,
|
|
26
|
+
contentHash: string,
|
|
27
|
+
contentRef: string,
|
|
28
|
+
): SkillSource {
|
|
29
|
+
return r2(bucket, {
|
|
30
|
+
prefix: `${trimSlashes(contentRef)}/`,
|
|
31
|
+
id: `resource-${resourceId}-${contentHash}`,
|
|
32
|
+
fingerprint: "metadata",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export async function readVerifiedR2Text(
|
|
37
|
+
bucket: R2Bucket,
|
|
38
|
+
sourceRef: string,
|
|
39
|
+
sourceHash: string,
|
|
40
|
+
): Promise<string> {
|
|
41
|
+
const object = await bucket.get(sourceRef);
|
|
42
|
+
if (!object) throw new Error(`Runtime content not found: ${sourceRef}`);
|
|
43
|
+
const source = await object.text();
|
|
44
|
+
const digest = await crypto.subtle.digest(
|
|
45
|
+
"SHA-256",
|
|
46
|
+
new TextEncoder().encode(source),
|
|
47
|
+
);
|
|
48
|
+
if (hex(digest) !== sourceHash) {
|
|
49
|
+
throw new Error(`Runtime content hash mismatch: ${sourceRef}`);
|
|
50
|
+
}
|
|
51
|
+
return source;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export async function prepareRuntimeExtensions(
|
|
55
|
+
extensions: readonly CloudflareRuntimeExtensionSource[],
|
|
56
|
+
readSource: (
|
|
57
|
+
sourceRef: string,
|
|
58
|
+
sourceHash: string,
|
|
59
|
+
) => Promise<string>,
|
|
60
|
+
): Promise<{
|
|
61
|
+
extensions: RuntimeExtensionContribution[];
|
|
62
|
+
degradations: RuntimeDegradation[];
|
|
63
|
+
}> {
|
|
64
|
+
const loaded: RuntimeExtensionContribution[] = [];
|
|
65
|
+
const degradations: RuntimeDegradation[] = [];
|
|
66
|
+
|
|
67
|
+
for (const selected of extensions) {
|
|
68
|
+
try {
|
|
69
|
+
const extension: RuntimeExtensionConfig = {
|
|
70
|
+
manifest: selected.manifest,
|
|
71
|
+
source: await readSource(selected.sourceRef, selected.sourceHash),
|
|
72
|
+
};
|
|
73
|
+
if (extension.manifest.name !== selected.name) {
|
|
74
|
+
throw new Error("manifest name mismatch");
|
|
75
|
+
}
|
|
76
|
+
loaded.push({ name: selected.name, extension });
|
|
77
|
+
} catch {
|
|
78
|
+
degradations.push({
|
|
79
|
+
capability: "extension",
|
|
80
|
+
reason: "unavailable",
|
|
81
|
+
detail: selected.name,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return { extensions: loaded, degradations };
|
|
86
|
+
}
|