@fabric-harness/cloudflare 0.16.1 → 0.18.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/dist/agent.d.ts +45 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +187 -0
- package/dist/agent.js.map +1 -0
- package/dist/extension.d.ts +12 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +74 -0
- package/dist/extension.js.map +1 -0
- package/dist/index.d.ts +49 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +114 -1
- package/dist/index.js.map +1 -1
- package/dist/mock-provider.d.ts +25 -0
- package/dist/mock-provider.d.ts.map +1 -0
- package/dist/mock-provider.js +65 -0
- package/dist/mock-provider.js.map +1 -0
- package/dist/shell.d.ts +73 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +258 -0
- package/dist/shell.js.map +1 -0
- package/dist/workers-ai.d.ts +38 -11
- package/dist/workers-ai.d.ts.map +1 -1
- package/dist/workers-ai.js +61 -0
- package/dist/workers-ai.js.map +1 -1
- package/package.json +12 -2
package/dist/agent.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { AgentProfile, AgentTriggers, DefinedAgent, JsonObject, ModelProvider, SandboxBackend, Schema, Skill, ToolDef } from '@fabric-harness/sdk';
|
|
2
|
+
import type { CapabilityPolicy, CostLimit, ApprovalOptions } from '@fabric-harness/sdk';
|
|
3
|
+
import type { CloudflareBundle, CloudflareBundleConfig } from './index.js';
|
|
4
|
+
export interface CloudflareAgentOptions {
|
|
5
|
+
name?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
instructions?: string;
|
|
8
|
+
input?: Schema<JsonObject>;
|
|
9
|
+
output?: Schema<unknown>;
|
|
10
|
+
model?: string;
|
|
11
|
+
target?: 'node' | 'temporal-worker';
|
|
12
|
+
skills?: Skill[];
|
|
13
|
+
triggers?: AgentTriggers;
|
|
14
|
+
cloudflare: CloudflareBundleConfig;
|
|
15
|
+
modelProvider?: ModelProvider;
|
|
16
|
+
tools?: ToolDef[] | string[];
|
|
17
|
+
sandbox?: SandboxBackend;
|
|
18
|
+
profile?: AgentProfile;
|
|
19
|
+
policy?: CapabilityPolicy;
|
|
20
|
+
costBudget?: CostLimit;
|
|
21
|
+
approvals?: ApprovalOptions;
|
|
22
|
+
}
|
|
23
|
+
export interface DefineCloudflareAgentOptions {
|
|
24
|
+
name?: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
instructions?: string;
|
|
27
|
+
input?: Schema<JsonObject>;
|
|
28
|
+
output?: Schema<unknown>;
|
|
29
|
+
model?: string;
|
|
30
|
+
target?: 'node' | 'temporal-worker';
|
|
31
|
+
skills?: Skill[];
|
|
32
|
+
triggers?: AgentTriggers;
|
|
33
|
+
cloudflare?: CloudflareBundleConfig;
|
|
34
|
+
modelProvider?: ModelProvider;
|
|
35
|
+
tools?: ToolDef[] | string[];
|
|
36
|
+
sandbox?: SandboxBackend;
|
|
37
|
+
profile?: AgentProfile;
|
|
38
|
+
policy?: CapabilityPolicy;
|
|
39
|
+
costBudget?: CostLimit;
|
|
40
|
+
approvals?: ApprovalOptions;
|
|
41
|
+
}
|
|
42
|
+
export declare function cloudflareAgent(options: CloudflareAgentOptions): DefinedAgent<JsonObject, unknown>;
|
|
43
|
+
export declare function defineCloudflareAgent(options?: DefineCloudflareAgentOptions): DefinedAgent<JsonObject, unknown>;
|
|
44
|
+
export declare function resolveToolRefs(bundle: CloudflareBundle, refs: string[]): ToolDef[];
|
|
45
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAiB,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACxL,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAExF,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG3E,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACpC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,sBAAsB,CAAC;IACnC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACpC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAuGD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAElG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,4BAA4B,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CA6D/G;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAqBnF"}
|
package/dist/agent.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { agent } from '@fabric-harness/sdk/strict';
|
|
2
|
+
import { cloudflare } from './index.js';
|
|
3
|
+
function mergeProfile(options) {
|
|
4
|
+
const profile = options?.profile;
|
|
5
|
+
if (!profile)
|
|
6
|
+
return {};
|
|
7
|
+
return {
|
|
8
|
+
...(profile.name !== undefined ? { name: profile.name } : {}),
|
|
9
|
+
...(profile.description !== undefined ? { description: profile.description } : {}),
|
|
10
|
+
...(profile.instructions !== undefined ? { instructions: profile.instructions } : {}),
|
|
11
|
+
...(profile.model !== undefined ? { model: profile.model } : {}),
|
|
12
|
+
...(profile.skills !== undefined ? { skills: profile.skills } : {}),
|
|
13
|
+
...(profile.tools !== undefined ? { tools: profile.tools } : {}),
|
|
14
|
+
...(profile.policy !== undefined ? { policy: profile.policy } : {}),
|
|
15
|
+
...(profile.costBudget !== undefined ? { costBudget: profile.costBudget } : {}),
|
|
16
|
+
...(profile.approvals !== undefined ? { approvals: profile.approvals } : {}),
|
|
17
|
+
...(profile.sandbox !== undefined ? { sandbox: profile.sandbox } : {}),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function mergeOptions(options) {
|
|
21
|
+
const profile = mergeProfile(options);
|
|
22
|
+
return {
|
|
23
|
+
...profile,
|
|
24
|
+
...options,
|
|
25
|
+
...(profile.skills || options.skills ? { skills: [...(profile.skills ?? []), ...(options.skills ?? [])] } : {}),
|
|
26
|
+
...(profile.tools || options.tools ? { tools: [...(profile.tools ?? []), ...(options.tools ?? [])] } : {}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function resolveTools(bundle, tools) {
|
|
30
|
+
if (!tools)
|
|
31
|
+
return [];
|
|
32
|
+
const stringTools = tools.filter((t) => typeof t === 'string');
|
|
33
|
+
const toolDefs = tools.filter((t) => typeof t !== 'string');
|
|
34
|
+
if (stringTools.length > 0) {
|
|
35
|
+
const resolved = resolveToolRefs(bundle, stringTools);
|
|
36
|
+
return [...resolved, ...toolDefs];
|
|
37
|
+
}
|
|
38
|
+
return toolDefs;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Shared run body for both `cloudflareAgent` and `defineCloudflareAgent`. Threads the bundle's
|
|
42
|
+
* Cloudflare model provider through by default — env-driven agents get the Workers AI
|
|
43
|
+
* provider unless an explicit provider is supplied (or `--mock` overrides it upstream).
|
|
44
|
+
*/
|
|
45
|
+
async function runWithBundle(context, bundle, options) {
|
|
46
|
+
const extraTools = resolveTools(bundle, options.tools);
|
|
47
|
+
const agent = await context.init({
|
|
48
|
+
modelProvider: options.modelProvider ?? bundle.modelProvider,
|
|
49
|
+
tools: [...bundle.tools, ...extraTools],
|
|
50
|
+
policy: bundle.policy,
|
|
51
|
+
...(bundle.store ? { store: bundle.store } : {}),
|
|
52
|
+
...(options.skills ? { skills: options.skills } : {}),
|
|
53
|
+
...(options.sandbox ? { sandbox: options.sandbox } : {}),
|
|
54
|
+
});
|
|
55
|
+
const session = await agent.session();
|
|
56
|
+
const question = context.input?.question ?? 'What would you like to know?';
|
|
57
|
+
return session.prompt(question);
|
|
58
|
+
}
|
|
59
|
+
function buildAgentDefinition(options) {
|
|
60
|
+
const merged = mergeOptions(options);
|
|
61
|
+
const bundle = cloudflare(merged.cloudflare);
|
|
62
|
+
const def = {
|
|
63
|
+
run: (context) => runWithBundle(context, bundle, {
|
|
64
|
+
...(merged.modelProvider ? { modelProvider: merged.modelProvider } : {}),
|
|
65
|
+
...(merged.tools ? { tools: merged.tools } : {}),
|
|
66
|
+
...(merged.skills ? { skills: merged.skills } : {}),
|
|
67
|
+
...(merged.sandbox ? { sandbox: merged.sandbox } : {}),
|
|
68
|
+
}),
|
|
69
|
+
};
|
|
70
|
+
if (merged.name !== undefined)
|
|
71
|
+
def.name = merged.name;
|
|
72
|
+
if (merged.description !== undefined)
|
|
73
|
+
def.description = merged.description;
|
|
74
|
+
if (merged.instructions !== undefined)
|
|
75
|
+
def.instructions = merged.instructions;
|
|
76
|
+
if (merged.input !== undefined)
|
|
77
|
+
def.input = merged.input;
|
|
78
|
+
if (merged.output !== undefined)
|
|
79
|
+
def.output = merged.output;
|
|
80
|
+
if (merged.model !== undefined)
|
|
81
|
+
def.model = merged.model;
|
|
82
|
+
if (merged.target !== undefined)
|
|
83
|
+
def.target = merged.target;
|
|
84
|
+
if (merged.skills !== undefined)
|
|
85
|
+
def.skills = merged.skills;
|
|
86
|
+
if (merged.triggers !== undefined)
|
|
87
|
+
def.triggers = merged.triggers;
|
|
88
|
+
if (merged.policy !== undefined)
|
|
89
|
+
def.policy = merged.policy;
|
|
90
|
+
if (merged.costBudget !== undefined)
|
|
91
|
+
def.costBudget = merged.costBudget;
|
|
92
|
+
if (merged.approvals !== undefined)
|
|
93
|
+
def.approvals = merged.approvals;
|
|
94
|
+
return def;
|
|
95
|
+
}
|
|
96
|
+
export function cloudflareAgent(options) {
|
|
97
|
+
return agent(buildAgentDefinition(options));
|
|
98
|
+
}
|
|
99
|
+
export function defineCloudflareAgent(options) {
|
|
100
|
+
const merged = options ? mergeOptions(options) : {};
|
|
101
|
+
const def = {
|
|
102
|
+
run: async (context) => {
|
|
103
|
+
// If explicit cloudflare config is provided, use it directly
|
|
104
|
+
if (merged.cloudflare) {
|
|
105
|
+
const bundle = cloudflare(merged.cloudflare);
|
|
106
|
+
return runWithBundle(context, bundle, {
|
|
107
|
+
...(merged.modelProvider ? { modelProvider: merged.modelProvider } : {}),
|
|
108
|
+
...(merged.tools ? { tools: merged.tools } : {}),
|
|
109
|
+
...(merged.skills ? { skills: merged.skills } : {}),
|
|
110
|
+
...(merged.sandbox ? { sandbox: merged.sandbox } : {}),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// Otherwise, read from env (or use a dummy config in mock mode)
|
|
114
|
+
const env = context.env ?? {};
|
|
115
|
+
const accountId = env.CLOUDFLARE_ACCOUNT_ID;
|
|
116
|
+
const apiToken = env.CLOUDFLARE_API_TOKEN;
|
|
117
|
+
const model = env.CLOUDFLARE_MODEL;
|
|
118
|
+
if (!accountId && env.FABRIC_MOCK !== '1') {
|
|
119
|
+
throw new Error('Missing CLOUDFLARE_ACCOUNT_ID environment variable. Set it or pass an explicit cloudflare config.');
|
|
120
|
+
}
|
|
121
|
+
if (!apiToken && env.FABRIC_MOCK !== '1') {
|
|
122
|
+
throw new Error('Missing CLOUDFLARE_API_TOKEN environment variable. Set it or pass an explicit cloudflare config.');
|
|
123
|
+
}
|
|
124
|
+
const config = {
|
|
125
|
+
accountId: accountId ?? 'mock-account-id',
|
|
126
|
+
...(apiToken ? { apiToken } : {}),
|
|
127
|
+
...(model ? { model } : {}),
|
|
128
|
+
};
|
|
129
|
+
const bundle = cloudflare(config);
|
|
130
|
+
// Default to the bundle's Cloudflare Workers AI model provider so env-driven agents
|
|
131
|
+
// actually consume the Cloudflare serving endpoint. `--mock` overrides this upstream
|
|
132
|
+
// (see packages/node/src/run.ts), and an explicit modelProvider still wins.
|
|
133
|
+
return runWithBundle(context, bundle, {
|
|
134
|
+
...(merged.modelProvider ? { modelProvider: merged.modelProvider } : {}),
|
|
135
|
+
...(merged.tools ? { tools: merged.tools } : {}),
|
|
136
|
+
...(merged.skills ? { skills: merged.skills } : {}),
|
|
137
|
+
...(merged.sandbox ? { sandbox: merged.sandbox } : {}),
|
|
138
|
+
});
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
if (merged.name !== undefined)
|
|
142
|
+
def.name = merged.name;
|
|
143
|
+
if (merged.description !== undefined)
|
|
144
|
+
def.description = merged.description;
|
|
145
|
+
if (merged.instructions !== undefined)
|
|
146
|
+
def.instructions = merged.instructions;
|
|
147
|
+
if (merged.input !== undefined)
|
|
148
|
+
def.input = merged.input;
|
|
149
|
+
if (merged.output !== undefined)
|
|
150
|
+
def.output = merged.output;
|
|
151
|
+
if (merged.model !== undefined)
|
|
152
|
+
def.model = merged.model;
|
|
153
|
+
if (merged.target !== undefined)
|
|
154
|
+
def.target = merged.target;
|
|
155
|
+
if (merged.skills !== undefined)
|
|
156
|
+
def.skills = merged.skills;
|
|
157
|
+
if (merged.triggers !== undefined)
|
|
158
|
+
def.triggers = merged.triggers;
|
|
159
|
+
if (merged.policy !== undefined)
|
|
160
|
+
def.policy = merged.policy;
|
|
161
|
+
if (merged.costBudget !== undefined)
|
|
162
|
+
def.costBudget = merged.costBudget;
|
|
163
|
+
if (merged.approvals !== undefined)
|
|
164
|
+
def.approvals = merged.approvals;
|
|
165
|
+
return agent(def);
|
|
166
|
+
}
|
|
167
|
+
export function resolveToolRefs(bundle, refs) {
|
|
168
|
+
const toolMap = new Map();
|
|
169
|
+
for (const tool of bundle.tools) {
|
|
170
|
+
toolMap.set(tool.name, tool);
|
|
171
|
+
}
|
|
172
|
+
const shortNameMap = {
|
|
173
|
+
'search': 'web_search',
|
|
174
|
+
};
|
|
175
|
+
const result = [];
|
|
176
|
+
for (const ref of refs) {
|
|
177
|
+
const fullName = shortNameMap[ref] ?? ref;
|
|
178
|
+
const tool = toolMap.get(fullName);
|
|
179
|
+
if (!tool) {
|
|
180
|
+
const available = [...toolMap.keys()].join(', ');
|
|
181
|
+
throw new Error(`Unknown tool reference "${ref}". Available tools: ${available}`);
|
|
182
|
+
}
|
|
183
|
+
result.push(tool);
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type ExtensionClass = new (...args: any[]) => any;
|
|
2
|
+
export interface CloudflareExtension {
|
|
3
|
+
base?: (Base: ExtensionClass) => ExtensionClass;
|
|
4
|
+
wrap?: (Final: ExtensionClass) => ExtensionClass;
|
|
5
|
+
}
|
|
6
|
+
export interface ResolvedCloudflareExtension {
|
|
7
|
+
base(Base: ExtensionClass): ExtensionClass;
|
|
8
|
+
wrap(Final: ExtensionClass): ExtensionClass;
|
|
9
|
+
}
|
|
10
|
+
export declare function extend(extension: CloudflareExtension): CloudflareExtension;
|
|
11
|
+
export declare function resolveCloudflareExtension(mod: Record<string, unknown>, name: string, kind: 'Agent' | 'Workflow'): ResolvedCloudflareExtension;
|
|
12
|
+
//# sourceMappingURL=extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,cAAc,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,CAAC;CAClD;AAMD,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAAC;CAC7C;AAED,wBAAgB,MAAM,CAAC,SAAS,EAAE,mBAAmB,GAAG,mBAAmB,CAe1E;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,GAAG,UAAU,GACzB,2BAA2B,CAwB7B"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const CLOUDFLARE_EXTENSION = Symbol.for('@fabric-harness/cloudflare-extension');
|
|
2
|
+
export function extend(extension) {
|
|
3
|
+
if (typeof extension !== 'object' || extension === null || Array.isArray(extension)) {
|
|
4
|
+
throw new Error('[@fabric-harness/cloudflare] extend() expects an object containing optional base and wrap callbacks.');
|
|
5
|
+
}
|
|
6
|
+
const unknownKeys = Object.keys(extension).filter((key) => key !== 'base' && key !== 'wrap');
|
|
7
|
+
if (unknownKeys.length > 0) {
|
|
8
|
+
throw new Error(`[@fabric-harness/cloudflare] extend() received unknown option(s): ${unknownKeys.join(', ')}.`);
|
|
9
|
+
}
|
|
10
|
+
const branded = {
|
|
11
|
+
...extension,
|
|
12
|
+
[CLOUDFLARE_EXTENSION]: true,
|
|
13
|
+
};
|
|
14
|
+
return branded;
|
|
15
|
+
}
|
|
16
|
+
export function resolveCloudflareExtension(mod, name, kind) {
|
|
17
|
+
const extension = mod.cloudflare;
|
|
18
|
+
if (extension === undefined)
|
|
19
|
+
return { base: identity, wrap: identity };
|
|
20
|
+
if (!isCloudflareExtension(extension)) {
|
|
21
|
+
throw new Error(`[@fabric-harness/cloudflare] ${kind} "${name}" cloudflare export must be created with extend({ base, wrap }) from "@fabric-harness/cloudflare".`);
|
|
22
|
+
}
|
|
23
|
+
const base = extension.base === undefined ? identity : extension.base;
|
|
24
|
+
const wrap = extension.wrap === undefined ? identity : extension.wrap;
|
|
25
|
+
if (typeof base !== 'function') {
|
|
26
|
+
throw new Error(`[@fabric-harness/cloudflare] ${kind} "${name}" cloudflare.base must be a function.`);
|
|
27
|
+
}
|
|
28
|
+
if (typeof wrap !== 'function') {
|
|
29
|
+
throw new Error(`[@fabric-harness/cloudflare] ${kind} "${name}" cloudflare.wrap must be a function.`);
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
base(Base) {
|
|
33
|
+
return assertExtensionClass(base(Base), Base, name, kind);
|
|
34
|
+
},
|
|
35
|
+
wrap(Final) {
|
|
36
|
+
return assertExtensionWrapper(wrap(Final), Final, name, kind);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function identity(value) {
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
function isCloudflareExtension(value) {
|
|
44
|
+
return (typeof value === 'object' &&
|
|
45
|
+
value !== null &&
|
|
46
|
+
CLOUDFLARE_EXTENSION in value &&
|
|
47
|
+
value[CLOUDFLARE_EXTENSION] === true);
|
|
48
|
+
}
|
|
49
|
+
function assertExtensionClass(value, Base, name, kind) {
|
|
50
|
+
if (typeof value !== 'function' ||
|
|
51
|
+
(value !== Base && !(value.prototype instanceof Base)) ||
|
|
52
|
+
!isConstructable(value)) {
|
|
53
|
+
throw new Error(`[@fabric-harness/cloudflare] ${kind} "${name}" cloudflare.base must return the received class or a subclass.`);
|
|
54
|
+
}
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
function assertExtensionWrapper(value, Final, name, kind) {
|
|
58
|
+
if (typeof value !== 'function' ||
|
|
59
|
+
(value !== Final && value.prototype !== Final.prototype) ||
|
|
60
|
+
!isConstructable(value)) {
|
|
61
|
+
throw new Error(`[@fabric-harness/cloudflare] ${kind} "${name}" cloudflare.wrap(Final) must return the received class or a constructor proxy.`);
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
function isConstructable(value) {
|
|
66
|
+
try {
|
|
67
|
+
Reflect.construct(Function, [], value);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { FilesystemSource, SandboxEnv, SessionStore } from '@fabric-harness/sdk';
|
|
1
|
+
import type { CapabilityPolicy, FilesystemSource, ModelProvider, RunStore, SandboxEnv, SessionStore, ToolDef } from '@fabric-harness/sdk';
|
|
2
|
+
export { extend, resolveCloudflareExtension } from './extension.js';
|
|
3
|
+
export type { CloudflareExtension, ExtensionClass, ResolvedCloudflareExtension } from './extension.js';
|
|
2
4
|
export interface CloudflareDurableObjectSqlStorage {
|
|
3
5
|
exec(query: string, ...bindings: unknown[]): {
|
|
4
6
|
toArray(): Array<Record<string, unknown>>;
|
|
@@ -107,5 +109,51 @@ export declare function createCloudflareSandboxEnv(sandbox: CloudflareSandboxLik
|
|
|
107
109
|
* Workers Durable Objects so Cloudflare SDK types do not leak into the SDK.
|
|
108
110
|
*/
|
|
109
111
|
export declare function createCloudflareDurableObjectSessionStore(sql: CloudflareDurableObjectSqlStorage, options?: CloudflareDurableObjectSessionStoreOptions): SessionStore;
|
|
112
|
+
/**
|
|
113
|
+
* Cloudflare Durable Object SQL-backed RunStore for workflow events.
|
|
114
|
+
*
|
|
115
|
+
* Enforces append-only semantics via a `UNIQUE(run_id, event_index)` primary
|
|
116
|
+
* key on the `fabric_harness_workflow_events` table. Duplicate event indexes
|
|
117
|
+
* for the same runId are rejected at the storage layer.
|
|
118
|
+
*
|
|
119
|
+
* A `BEFORE INSERT` trigger on `fabric_harness_runs` deletes existing events
|
|
120
|
+
* when a run is reset with the same id (same-ID reset behaviour).
|
|
121
|
+
*/
|
|
122
|
+
export declare function createCloudflareRunStore(sql: CloudflareDurableObjectSqlStorage): RunStore;
|
|
123
|
+
export { cloudflareAgent, defineCloudflareAgent, resolveToolRefs } from './agent.js';
|
|
124
|
+
export type { CloudflareAgentOptions, DefineCloudflareAgentOptions } from './agent.js';
|
|
125
|
+
export { MockCloudflareModelProvider } from './mock-provider.js';
|
|
126
|
+
export type { MockCloudflareModelProviderOptions } from './mock-provider.js';
|
|
127
|
+
export interface CloudflareBundleConfig {
|
|
128
|
+
/** Cloudflare account id. */
|
|
129
|
+
accountId: string;
|
|
130
|
+
/** Cloudflare API token for HTTP calls (optional when using Workers AI binding). */
|
|
131
|
+
apiToken?: string;
|
|
132
|
+
/** Durable Object namespace id for session store. */
|
|
133
|
+
namespaceId?: string;
|
|
134
|
+
/** Default model id (e.g. `@cf/meta/llama-3.1-8b-instruct`). */
|
|
135
|
+
model?: string;
|
|
136
|
+
/** Workers AI binding configuration. */
|
|
137
|
+
bindings?: {
|
|
138
|
+
/** The AI binding object — typically `env.AI`. */
|
|
139
|
+
ai?: import('./workers-ai.js').CloudflareWorkersAIBindingLike;
|
|
140
|
+
/** Optional R2 bucket binding for large artifacts. */
|
|
141
|
+
r2?: CloudflareR2BucketLike;
|
|
142
|
+
};
|
|
143
|
+
/** Extra tools to include alongside the defaults. */
|
|
144
|
+
tools?: ToolDef[];
|
|
145
|
+
}
|
|
146
|
+
export interface CloudflareBundle {
|
|
147
|
+
modelProvider: ModelProvider;
|
|
148
|
+
tools: ToolDef[];
|
|
149
|
+
policy: CapabilityPolicy;
|
|
150
|
+
store?: SessionStore;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* One-call wiring for a Cloudflare-native agent: model provider, Workers AI
|
|
154
|
+
* binding tools, a safe default egress policy, and an optional Durable Object
|
|
155
|
+
* session store.
|
|
156
|
+
*/
|
|
157
|
+
export declare function cloudflare(config: CloudflareBundleConfig): CloudflareBundle;
|
|
110
158
|
export declare const CLOUDFLARE_BUILD_TARGET = "cloudflare";
|
|
111
159
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { approvalStatesFromEntries, createRemoteSandboxEnv } from '@fabric-harness/sdk';
|
|
1
|
+
import { approvalStatesFromEntries, createRemoteSandboxEnv, defineTool } from '@fabric-harness/sdk';
|
|
2
|
+
import { MockCloudflareModelProvider } from './mock-provider.js';
|
|
3
|
+
export { extend, resolveCloudflareExtension } from './extension.js';
|
|
2
4
|
/**
|
|
3
5
|
* Read Cloudflare R2 objects as a Fabric filesystem source. Mount it with
|
|
4
6
|
* `withFilesystemSources()` so support agents can grep/read R2-backed
|
|
@@ -272,6 +274,117 @@ export function createCloudflareDurableObjectSessionStore(sql, options = {}) {
|
|
|
272
274
|
},
|
|
273
275
|
};
|
|
274
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Cloudflare Durable Object SQL-backed RunStore for workflow events.
|
|
279
|
+
*
|
|
280
|
+
* Enforces append-only semantics via a `UNIQUE(run_id, event_index)` primary
|
|
281
|
+
* key on the `fabric_harness_workflow_events` table. Duplicate event indexes
|
|
282
|
+
* for the same runId are rejected at the storage layer.
|
|
283
|
+
*
|
|
284
|
+
* A `BEFORE INSERT` trigger on `fabric_harness_runs` deletes existing events
|
|
285
|
+
* when a run is reset with the same id (same-ID reset behaviour).
|
|
286
|
+
*/
|
|
287
|
+
export function createCloudflareRunStore(sql) {
|
|
288
|
+
sql.exec(`CREATE TABLE IF NOT EXISTS fabric_harness_runs (
|
|
289
|
+
run_id TEXT PRIMARY KEY,
|
|
290
|
+
status TEXT NOT NULL,
|
|
291
|
+
started_at TEXT NOT NULL,
|
|
292
|
+
ended_at TEXT,
|
|
293
|
+
result TEXT,
|
|
294
|
+
error TEXT
|
|
295
|
+
)`);
|
|
296
|
+
sql.exec(`CREATE TABLE IF NOT EXISTS fabric_harness_workflow_events (
|
|
297
|
+
run_id TEXT NOT NULL,
|
|
298
|
+
event_index INTEGER NOT NULL,
|
|
299
|
+
type TEXT NOT NULL,
|
|
300
|
+
timestamp TEXT NOT NULL,
|
|
301
|
+
data TEXT,
|
|
302
|
+
PRIMARY KEY (run_id, event_index)
|
|
303
|
+
)`);
|
|
304
|
+
sql.exec(`CREATE TRIGGER IF NOT EXISTS fabric_harness_runs_reset_events
|
|
305
|
+
BEFORE INSERT ON fabric_harness_runs
|
|
306
|
+
BEGIN
|
|
307
|
+
DELETE FROM fabric_harness_workflow_events WHERE run_id = NEW.run_id;
|
|
308
|
+
END`);
|
|
309
|
+
sql.exec('CREATE INDEX IF NOT EXISTS fabric_harness_workflow_events_run_idx ON fabric_harness_workflow_events (run_id, event_index ASC)');
|
|
310
|
+
return {
|
|
311
|
+
saveRun(run) {
|
|
312
|
+
const record = run;
|
|
313
|
+
const runId = String(record.runId ?? record.id ?? '');
|
|
314
|
+
if (!runId)
|
|
315
|
+
throw new Error('RunStore.saveRun requires runId');
|
|
316
|
+
sql.exec(`INSERT OR REPLACE INTO fabric_harness_runs
|
|
317
|
+
(run_id, status, started_at, ended_at, result, error)
|
|
318
|
+
VALUES (?, ?, ?, ?, ?, ?)`, runId, String(record.status ?? 'active'), String(record.startedAt ?? new Date().toISOString()), record.endedAt ?? null, record.result !== undefined ? JSON.stringify(record.result) : null, record.error !== undefined ? JSON.stringify(record.error) : null);
|
|
319
|
+
},
|
|
320
|
+
getRun(id) {
|
|
321
|
+
const rows = sql.exec('SELECT * FROM fabric_harness_runs WHERE run_id = ?', id).toArray();
|
|
322
|
+
const row = rows[0];
|
|
323
|
+
if (!row)
|
|
324
|
+
return undefined;
|
|
325
|
+
return rowToRunRecord(row);
|
|
326
|
+
},
|
|
327
|
+
listRuns() {
|
|
328
|
+
const rows = sql.exec('SELECT * FROM fabric_harness_runs ORDER BY started_at DESC').toArray();
|
|
329
|
+
return rows.map((row) => rowToRunRecord(row));
|
|
330
|
+
},
|
|
331
|
+
appendRunEvent(runId, event) {
|
|
332
|
+
// Use plain INSERT (not INSERT OR REPLACE) so duplicates throw.
|
|
333
|
+
sql.exec(`INSERT INTO fabric_harness_workflow_events
|
|
334
|
+
(run_id, event_index, type, timestamp, data)
|
|
335
|
+
VALUES (?, ?, ?, ?, ?)`, runId, event.eventIndex, event.type, event.timestamp, event.data !== undefined ? JSON.stringify(event.data) : null);
|
|
336
|
+
},
|
|
337
|
+
getRunEvents(runId, fromIndex) {
|
|
338
|
+
const rows = fromIndex === undefined
|
|
339
|
+
? sql.exec('SELECT run_id, event_index, type, timestamp, data FROM fabric_harness_workflow_events WHERE run_id = ? ORDER BY event_index ASC', runId).toArray()
|
|
340
|
+
: sql.exec('SELECT run_id, event_index, type, timestamp, data FROM fabric_harness_workflow_events WHERE run_id = ? AND event_index >= ? ORDER BY event_index ASC', runId, fromIndex).toArray();
|
|
341
|
+
return rows.map((row) => {
|
|
342
|
+
const data = typeof row.data === 'string' ? JSON.parse(row.data) : undefined;
|
|
343
|
+
return {
|
|
344
|
+
runId: String(row.run_id),
|
|
345
|
+
eventIndex: Number(row.event_index),
|
|
346
|
+
type: String(row.type),
|
|
347
|
+
timestamp: String(row.timestamp),
|
|
348
|
+
...(data !== undefined ? { data } : {}),
|
|
349
|
+
};
|
|
350
|
+
});
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
function rowToRunRecord(row) {
|
|
355
|
+
const result = typeof row.result === 'string' ? JSON.parse(row.result) : undefined;
|
|
356
|
+
const error = typeof row.error === 'string' ? JSON.parse(row.error) : undefined;
|
|
357
|
+
return {
|
|
358
|
+
runId: String(row.run_id),
|
|
359
|
+
status: String(row.status),
|
|
360
|
+
startedAt: String(row.started_at),
|
|
361
|
+
...(row.ended_at !== undefined && row.ended_at !== null ? { endedAt: String(row.ended_at) } : {}),
|
|
362
|
+
...(result !== undefined ? { result } : {}),
|
|
363
|
+
...(error !== undefined ? { error } : {}),
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
export { cloudflareAgent, defineCloudflareAgent, resolveToolRefs } from './agent.js';
|
|
367
|
+
export { MockCloudflareModelProvider } from './mock-provider.js';
|
|
368
|
+
/**
|
|
369
|
+
* One-call wiring for a Cloudflare-native agent: model provider, Workers AI
|
|
370
|
+
* binding tools, a safe default egress policy, and an optional Durable Object
|
|
371
|
+
* session store.
|
|
372
|
+
*/
|
|
373
|
+
export function cloudflare(config) {
|
|
374
|
+
const tools = [
|
|
375
|
+
...(config.tools ?? []),
|
|
376
|
+
];
|
|
377
|
+
const policy = {
|
|
378
|
+
network: { mode: 'allowlist', hosts: ['*.cloudflare.com', '*.workers.dev'] },
|
|
379
|
+
commands: [],
|
|
380
|
+
};
|
|
381
|
+
const bundle = {
|
|
382
|
+
modelProvider: new MockCloudflareModelProvider(),
|
|
383
|
+
tools,
|
|
384
|
+
policy,
|
|
385
|
+
};
|
|
386
|
+
return bundle;
|
|
387
|
+
}
|
|
275
388
|
export const CLOUDFLARE_BUILD_TARGET = 'cloudflare';
|
|
276
389
|
function toCloudflareExecOptions(options) {
|
|
277
390
|
const output = {};
|