create-cf-open-agents-api 0.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/LICENSE +202 -0
- package/NOTICE +25 -0
- package/README.md +96 -0
- package/dist/answers.d.ts +30 -0
- package/dist/answers.js +83 -0
- package/dist/answers.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +31 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/doctor.d.ts +51 -0
- package/dist/commands/doctor.js +26 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +177 -0
- package/dist/commands/init.js +85 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/setup.d.ts +67 -0
- package/dist/commands/setup.js +31 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/vendor.d.ts +69 -0
- package/dist/commands/vendor.js +37 -0
- package/dist/commands/vendor.js.map +1 -0
- package/dist/doctor.d.ts +26 -0
- package/dist/doctor.js +136 -0
- package/dist/doctor.js.map +1 -0
- package/dist/exec.d.ts +16 -0
- package/dist/exec.js +33 -0
- package/dist/exec.js.map +1 -0
- package/dist/fs.d.ts +24 -0
- package/dist/fs.js +54 -0
- package/dist/fs.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +37 -0
- package/dist/init.js +179 -0
- package/dist/init.js.map +1 -0
- package/dist/jsonc.d.ts +17 -0
- package/dist/jsonc.js +55 -0
- package/dist/jsonc.js.map +1 -0
- package/dist/plan.d.ts +23 -0
- package/dist/plan.js +36 -0
- package/dist/plan.js.map +1 -0
- package/dist/project.d.ts +62 -0
- package/dist/project.js +52 -0
- package/dist/project.js.map +1 -0
- package/dist/setup.d.ts +26 -0
- package/dist/setup.js +139 -0
- package/dist/setup.js.map +1 -0
- package/dist/steps/agents-file.d.ts +5 -0
- package/dist/steps/agents-file.js +19 -0
- package/dist/steps/agents-file.js.map +1 -0
- package/dist/steps/dev-vars.d.ts +17 -0
- package/dist/steps/dev-vars.js +65 -0
- package/dist/steps/dev-vars.js.map +1 -0
- package/dist/steps/entry.d.ts +7 -0
- package/dist/steps/entry.js +36 -0
- package/dist/steps/entry.js.map +1 -0
- package/dist/steps/gitignore.d.ts +5 -0
- package/dist/steps/gitignore.js +20 -0
- package/dist/steps/gitignore.js.map +1 -0
- package/dist/steps/package-json.d.ts +12 -0
- package/dist/steps/package-json.js +45 -0
- package/dist/steps/package-json.js.map +1 -0
- package/dist/steps/standalone.d.ts +8 -0
- package/dist/steps/standalone.js +18 -0
- package/dist/steps/standalone.js.map +1 -0
- package/dist/steps/tsconfig.d.ts +4 -0
- package/dist/steps/tsconfig.js +18 -0
- package/dist/steps/tsconfig.js.map +1 -0
- package/dist/steps/vendor.d.ts +30 -0
- package/dist/steps/vendor.js +158 -0
- package/dist/steps/vendor.js.map +1 -0
- package/dist/steps/wrangler.d.ts +35 -0
- package/dist/steps/wrangler.js +197 -0
- package/dist/steps/wrangler.js.map +1 -0
- package/dist/templates/agents.d.ts +27 -0
- package/dist/templates/agents.js +265 -0
- package/dist/templates/agents.js.map +1 -0
- package/dist/templates/standalone.d.ts +12 -0
- package/dist/templates/standalone.js +44 -0
- package/dist/templates/standalone.js.map +1 -0
- package/dist/token.d.ts +3 -0
- package/dist/token.js +7 -0
- package/dist/token.js.map +1 -0
- package/dist/ui.d.ts +33 -0
- package/dist/ui.js +82 -0
- package/dist/ui.js.map +1 -0
- package/dist/vendor.d.ts +9 -0
- package/dist/vendor.js +14 -0
- package/dist/vendor.js.map +1 -0
- package/dist/versions.d.ts +30 -0
- package/dist/versions.js +33 -0
- package/dist/versions.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, mkdtempSync, readdirSync, renameSync, rmSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { basename, join, resolve } from "node:path";
|
|
4
|
+
import { run } from "../exec.js";
|
|
5
|
+
import { display, readIfExists } from "../fs.js";
|
|
6
|
+
import { CliError } from "../plan.js";
|
|
7
|
+
import { GITHUB_REPOSITORY, LIBRARY_NAME, VENDOR_DIRECTORY } from "../versions.js";
|
|
8
|
+
/** What the two Dockerfiles copy: the same set `docker/Harness.Dockerfile` reads from the repository. */
|
|
9
|
+
const SNAPSHOT_FILES = [
|
|
10
|
+
"package.json",
|
|
11
|
+
"pnpm-lock.yaml",
|
|
12
|
+
"pnpm-workspace.yaml",
|
|
13
|
+
"tsconfig.json",
|
|
14
|
+
".dockerignore",
|
|
15
|
+
"LICENSE",
|
|
16
|
+
"NOTICE",
|
|
17
|
+
"examples/worker/package.json",
|
|
18
|
+
];
|
|
19
|
+
const SNAPSHOT_DIRECTORIES = ["docker", "packages"];
|
|
20
|
+
const REQUIRED = [
|
|
21
|
+
"docker/Harness.Dockerfile",
|
|
22
|
+
"docker/Sandbox.Dockerfile",
|
|
23
|
+
"packages/supervisor/package.json",
|
|
24
|
+
];
|
|
25
|
+
const EXCLUDED_DIRECTORIES = new Set(["dist", "node_modules", "test", "tests", ".wrangler"]);
|
|
26
|
+
export const SKIP_VENDOR_VARIABLE = "CF_OPEN_AGENTS_API_SKIP_VENDOR";
|
|
27
|
+
export const SOURCE_VARIABLE = "CF_OPEN_AGENTS_API_SOURCE";
|
|
28
|
+
export function vendorDirectory(root) {
|
|
29
|
+
return join(root, VENDOR_DIRECTORY);
|
|
30
|
+
}
|
|
31
|
+
export function readVendorManifest(root) {
|
|
32
|
+
const text = readIfExists(join(vendorDirectory(root), "manifest.json"));
|
|
33
|
+
if (!text)
|
|
34
|
+
return;
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(text);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function isComplete(root) {
|
|
43
|
+
return REQUIRED.every((file) => existsSync(join(vendorDirectory(root), file)));
|
|
44
|
+
}
|
|
45
|
+
/** Ensures `.cf-open-agents-api/` holds the snapshot the Dockerfiles build from. */
|
|
46
|
+
export async function ensureVendor(options) {
|
|
47
|
+
const env = options.env ?? process.env;
|
|
48
|
+
const target = vendorDirectory(options.root);
|
|
49
|
+
const file = `${display(options.root, target)}/`;
|
|
50
|
+
const ref = options.ref ?? `v${options.version}`;
|
|
51
|
+
const source = options.source ?? env[SOURCE_VARIABLE];
|
|
52
|
+
const expectedSource = source ? resolve(source) : "github";
|
|
53
|
+
const current = readVendorManifest(options.root);
|
|
54
|
+
const status = current ? "updated" : "created";
|
|
55
|
+
// A complete snapshot of the wanted ref is current wherever it came from; only an
|
|
56
|
+
// explicit source that differs from the recorded one replaces it.
|
|
57
|
+
const sameSource = !source || current?.source === expectedSource;
|
|
58
|
+
if (!options.force && current?.ref === ref && sameSource && isComplete(options.root))
|
|
59
|
+
return { status: "skipped", file };
|
|
60
|
+
if (env[SKIP_VENDOR_VARIABLE])
|
|
61
|
+
return {
|
|
62
|
+
status: "skipped",
|
|
63
|
+
file,
|
|
64
|
+
note: `${SKIP_VENDOR_VARIABLE} is set; the image snapshot was not refreshed.`,
|
|
65
|
+
};
|
|
66
|
+
if (options.dryRun)
|
|
67
|
+
return {
|
|
68
|
+
status,
|
|
69
|
+
file,
|
|
70
|
+
note: `Would snapshot ${source ? resolve(source) : `${GITHUB_REPOSITORY}@${ref}`} into ${file}`,
|
|
71
|
+
};
|
|
72
|
+
const staging = mkdtempSync(join(tmpdir(), "cf-open-agents-vendor-"));
|
|
73
|
+
try {
|
|
74
|
+
const checkout = source
|
|
75
|
+
? validateSource(resolve(source))
|
|
76
|
+
: await download(ref, staging, options);
|
|
77
|
+
const snapshot = join(staging, "snapshot");
|
|
78
|
+
copySnapshot(checkout, snapshot);
|
|
79
|
+
const manifest = {
|
|
80
|
+
name: LIBRARY_NAME,
|
|
81
|
+
version: options.version,
|
|
82
|
+
ref,
|
|
83
|
+
source: expectedSource,
|
|
84
|
+
createdAt: new Date().toISOString(),
|
|
85
|
+
};
|
|
86
|
+
writeFileSync(join(snapshot, "manifest.json"), `${JSON.stringify(manifest, null, 2)}\n`);
|
|
87
|
+
swap(snapshot, target);
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
rmSync(staging, { recursive: true, force: true });
|
|
91
|
+
}
|
|
92
|
+
return { status, file };
|
|
93
|
+
}
|
|
94
|
+
function validateSource(source) {
|
|
95
|
+
const missing = REQUIRED.find((file) => !existsSync(join(source, file)));
|
|
96
|
+
if (missing)
|
|
97
|
+
throw new CliError(`${source} is not a CF-Open-Agents-API checkout: ${missing} is missing`);
|
|
98
|
+
return source;
|
|
99
|
+
}
|
|
100
|
+
async function download(ref, staging, options) {
|
|
101
|
+
const url = `https://github.com/${GITHUB_REPOSITORY}/archive/${ref}.tar.gz`;
|
|
102
|
+
const response = await (options.fetch ?? fetch)(url);
|
|
103
|
+
if (response.status === 404)
|
|
104
|
+
throw new CliError(`No source archive for ${ref} at ${url} yet. Pass --source <checkout> or --ref main, or set ${SOURCE_VARIABLE}=<checkout> (${SKIP_VENDOR_VARIABLE}=1 skips the snapshot).`);
|
|
105
|
+
if (!response.ok)
|
|
106
|
+
throw new CliError(`Downloading ${url} failed with HTTP ${response.status}`);
|
|
107
|
+
const archive = join(staging, "source.tar.gz");
|
|
108
|
+
writeFileSync(archive, new Uint8Array(await response.arrayBuffer()));
|
|
109
|
+
const checkout = join(staging, "checkout");
|
|
110
|
+
mkdirSync(checkout);
|
|
111
|
+
const tar = (options.runner ?? run)("tar", [
|
|
112
|
+
"-xzf",
|
|
113
|
+
archive,
|
|
114
|
+
"-C",
|
|
115
|
+
checkout,
|
|
116
|
+
"--strip-components=1",
|
|
117
|
+
]);
|
|
118
|
+
if (!tar.ok)
|
|
119
|
+
throw new CliError(`Extracting the archive needs tar on PATH (${tar.stderr.trim()}); pass --source <checkout> instead.`);
|
|
120
|
+
return validateSource(checkout);
|
|
121
|
+
}
|
|
122
|
+
function keep(path) {
|
|
123
|
+
return !EXCLUDED_DIRECTORIES.has(basename(path)) && !basename(path).startsWith(".tmp-");
|
|
124
|
+
}
|
|
125
|
+
function copySnapshot(checkout, snapshot) {
|
|
126
|
+
mkdirSync(snapshot, { recursive: true });
|
|
127
|
+
for (const directory of SNAPSHOT_DIRECTORIES)
|
|
128
|
+
cpSync(join(checkout, directory), join(snapshot, directory), { recursive: true, filter: keep });
|
|
129
|
+
for (const file of SNAPSHOT_FILES) {
|
|
130
|
+
const from = join(checkout, file);
|
|
131
|
+
if (!existsSync(from))
|
|
132
|
+
continue;
|
|
133
|
+
mkdirSync(join(snapshot, file, ".."), { recursive: true });
|
|
134
|
+
cpSync(from, join(snapshot, file));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function swap(snapshot, target) {
|
|
138
|
+
const previous = `${target}.previous`;
|
|
139
|
+
rmSync(previous, { recursive: true, force: true });
|
|
140
|
+
if (existsSync(target))
|
|
141
|
+
renameSync(target, previous);
|
|
142
|
+
try {
|
|
143
|
+
mkdirSync(join(target, ".."), { recursive: true });
|
|
144
|
+
cpSync(snapshot, target, { recursive: true });
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
if (existsSync(previous))
|
|
148
|
+
renameSync(previous, target);
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
rmSync(previous, { recursive: true, force: true });
|
|
152
|
+
}
|
|
153
|
+
/** The package directories a snapshot holds, for `doctor`. */
|
|
154
|
+
export function snapshotPackages(root) {
|
|
155
|
+
const packages = join(vendorDirectory(root), "packages");
|
|
156
|
+
return existsSync(packages) ? readdirSync(packages) : [];
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=vendor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../src/steps/vendor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,EACV,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,GAAG,EAAe,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAwBnF,yGAAyG;AACzG,MAAM,cAAc,GAAG;IACrB,cAAc;IACd,gBAAgB;IAChB,qBAAqB;IACrB,eAAe;IACf,eAAe;IACf,SAAS;IACT,QAAQ;IACR,8BAA8B;CACtB,CAAC;AACX,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAU,CAAC;AAC7D,MAAM,QAAQ,GAAG;IACf,2BAA2B;IAC3B,2BAA2B;IAC3B,kCAAkC;CACnC,CAAC;AACF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,gCAAgC,CAAC;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAE3D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAsB;IACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,kFAAkF;IAClF,kEAAkE;IAClE,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,OAAO,EAAE,MAAM,KAAK,cAAc,CAAC;IACjE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,EAAE,GAAG,KAAK,GAAG,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;QAClF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrC,IAAI,GAAG,CAAC,oBAAoB,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,IAAI;YACJ,IAAI,EAAE,GAAG,oBAAoB,gDAAgD;SAC9E,CAAC;IACJ,IAAI,OAAO,CAAC,MAAM;QAChB,OAAO;YACL,MAAM;YACN,IAAI;YACJ,IAAI,EAAE,kBAAkB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,IAAI,GAAG,EAAE,SAAS,IAAI,EAAE;SAChG,CAAC;IACJ,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM;YACrB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAmB;YAC/B,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG;YACH,MAAM,EAAE,cAAc;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,OAAO;QACT,MAAM,IAAI,QAAQ,CAAC,GAAG,MAAM,0CAA0C,OAAO,aAAa,CAAC,CAAC;IAC9F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,OAAe,EAAE,OAAsB;IAC1E,MAAM,GAAG,GAAG,sBAAsB,iBAAiB,YAAY,GAAG,SAAS,CAAC;IAC5E,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QACzB,MAAM,IAAI,QAAQ,CAChB,yBAAyB,GAAG,OAAO,GAAG,wDAAwD,eAAe,gBAAgB,oBAAoB,yBAAyB,CAC3K,CAAC;IACJ,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,QAAQ,CAAC,eAAe,GAAG,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC/C,aAAa,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpB,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE;QACzC,MAAM;QACN,OAAO;QACP,IAAI;QACJ,QAAQ;QACR,sBAAsB;KACvB,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,MAAM,IAAI,QAAQ,CAChB,6CAA6C,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,sCAAsC,CACrG,CAAC;IACJ,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,QAAgB;IACtD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,KAAK,MAAM,SAAS,IAAI,oBAAoB;QAC1C,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAClG,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,QAAgB,EAAE,MAAc;IAC5C,MAAM,QAAQ,GAAG,GAAG,MAAM,WAAW,CAAC;IACtC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IACzD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface WranglerInput {
|
|
2
|
+
name: string;
|
|
3
|
+
/** A Worker that composes elsewhere reaches the API through a self binding named AGENTS. */
|
|
4
|
+
agentsBinding: boolean;
|
|
5
|
+
workersAi: boolean;
|
|
6
|
+
codeLoader: boolean;
|
|
7
|
+
force: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface WranglerOutcome {
|
|
10
|
+
text: string;
|
|
11
|
+
changed: boolean;
|
|
12
|
+
notes: string[];
|
|
13
|
+
}
|
|
14
|
+
/** Binding names are fixed by `AgentBindings` and `ContainerBindings`; only the classes are exported. */
|
|
15
|
+
export declare const DURABLE_OBJECTS: readonly {
|
|
16
|
+
name: string;
|
|
17
|
+
class_name: string;
|
|
18
|
+
}[];
|
|
19
|
+
export interface ContainerSpec {
|
|
20
|
+
class_name: string;
|
|
21
|
+
image: string;
|
|
22
|
+
image_build_context: string;
|
|
23
|
+
instance_type: string;
|
|
24
|
+
max_instances: number;
|
|
25
|
+
}
|
|
26
|
+
export declare const CONTAINERS: readonly ContainerSpec[];
|
|
27
|
+
export declare const BUCKETS: readonly [{
|
|
28
|
+
readonly binding: "CHECKPOINTS";
|
|
29
|
+
readonly suffix: "checkpoints";
|
|
30
|
+
}, {
|
|
31
|
+
readonly binding: "BACKUP_BUCKET";
|
|
32
|
+
readonly suffix: "workspaces";
|
|
33
|
+
}];
|
|
34
|
+
/** Applies every section in order and reports whether the text changed. */
|
|
35
|
+
export declare function upsertWranglerConfig(text: string, input: WranglerInput, file: string): WranglerOutcome;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { appendItem, collapsePrimitiveArrays, openJsonc, parseJsonc, setValue, } from "../jsonc.js";
|
|
2
|
+
import { CliError } from "../plan.js";
|
|
3
|
+
import { CTX_EXPORTS_DATE, VENDOR_DIRECTORY } from "../versions.js";
|
|
4
|
+
/** Binding names are fixed by `AgentBindings` and `ContainerBindings`; only the classes are exported. */
|
|
5
|
+
export const DURABLE_OBJECTS = [
|
|
6
|
+
{ name: "SESSIONS", class_name: "SessionDO" },
|
|
7
|
+
{ name: "CATALOG", class_name: "TenantCatalogDO" },
|
|
8
|
+
{ name: "HARNESS", class_name: "HarnessDO" },
|
|
9
|
+
{ name: "SANDBOX", class_name: "SandboxDO" },
|
|
10
|
+
];
|
|
11
|
+
export const CONTAINERS = [
|
|
12
|
+
{
|
|
13
|
+
class_name: "HarnessDO",
|
|
14
|
+
image: `${VENDOR_DIRECTORY}/docker/Harness.Dockerfile`,
|
|
15
|
+
image_build_context: VENDOR_DIRECTORY,
|
|
16
|
+
instance_type: "basic",
|
|
17
|
+
max_instances: 10,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
class_name: "SandboxDO",
|
|
21
|
+
image: `${VENDOR_DIRECTORY}/docker/Sandbox.Dockerfile`,
|
|
22
|
+
image_build_context: VENDOR_DIRECTORY,
|
|
23
|
+
instance_type: "standard-1",
|
|
24
|
+
max_instances: 10,
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
export const BUCKETS = [
|
|
28
|
+
{ binding: "CHECKPOINTS", suffix: "checkpoints" },
|
|
29
|
+
{ binding: "BACKUP_BUCKET", suffix: "workspaces" },
|
|
30
|
+
];
|
|
31
|
+
const config = (state) => parseJsonc(state.document.text, state.file);
|
|
32
|
+
const set = (state, path, value) => {
|
|
33
|
+
state.document = setValue(state.document, path, value);
|
|
34
|
+
};
|
|
35
|
+
const append = (state, path, value) => {
|
|
36
|
+
state.document = appendItem(state.document, path, value);
|
|
37
|
+
};
|
|
38
|
+
/** Applies every section in order and reports whether the text changed. */
|
|
39
|
+
export function upsertWranglerConfig(text, input, file) {
|
|
40
|
+
const state = { document: openJsonc(text), file, input, notes: [] };
|
|
41
|
+
ensureName(state);
|
|
42
|
+
ensureFlags(state);
|
|
43
|
+
ensureWorkerLoaders(state);
|
|
44
|
+
ensureDurableObjects(state);
|
|
45
|
+
ensureMigrations(state);
|
|
46
|
+
ensureContainers(state);
|
|
47
|
+
ensureBuckets(state);
|
|
48
|
+
ensureServices(state);
|
|
49
|
+
ensureBackupVariable(state);
|
|
50
|
+
ensureAi(state);
|
|
51
|
+
noteNamedEnvironments(state);
|
|
52
|
+
if (state.document.text !== text)
|
|
53
|
+
state.document = collapsePrimitiveArrays(state.document);
|
|
54
|
+
return { text: state.document.text, changed: state.document.text !== text, notes: state.notes };
|
|
55
|
+
}
|
|
56
|
+
function ensureName(state) {
|
|
57
|
+
if (!config(state).name)
|
|
58
|
+
set(state, ["name"], state.input.name);
|
|
59
|
+
}
|
|
60
|
+
function ensureFlags(state) {
|
|
61
|
+
const current = config(state);
|
|
62
|
+
const flags = [...(current.compatibility_flags ?? [])];
|
|
63
|
+
const wanted = ["nodejs_compat"];
|
|
64
|
+
if ((current.compatibility_date ?? "") < CTX_EXPORTS_DATE) {
|
|
65
|
+
wanted.push("enable_ctx_exports");
|
|
66
|
+
if (!flags.includes("enable_ctx_exports"))
|
|
67
|
+
state.notes.push(`compatibility_date is before ${CTX_EXPORTS_DATE}; enable_ctx_exports was added because the Container SDK needs ctx.exports.`);
|
|
68
|
+
}
|
|
69
|
+
const missing = wanted.filter((flag) => !flags.includes(flag));
|
|
70
|
+
if (missing.length === 0)
|
|
71
|
+
return;
|
|
72
|
+
set(state, ["compatibility_flags"], [...flags, ...missing]);
|
|
73
|
+
}
|
|
74
|
+
function ensureWorkerLoaders(state) {
|
|
75
|
+
if (!state.input.codeLoader)
|
|
76
|
+
return;
|
|
77
|
+
const loaders = config(state).worker_loaders ?? [];
|
|
78
|
+
if (!loaders.some((loader) => loader.binding === "CODE_LOADER"))
|
|
79
|
+
append(state, ["worker_loaders"], { binding: "CODE_LOADER" });
|
|
80
|
+
}
|
|
81
|
+
function ensureDurableObjects(state) {
|
|
82
|
+
const bindings = config(state).durable_objects?.bindings ?? [];
|
|
83
|
+
for (const wanted of DURABLE_OBJECTS) {
|
|
84
|
+
const byName = bindings.find((binding) => binding.name === wanted.name);
|
|
85
|
+
const byClass = bindings.find((binding) => binding.class_name === wanted.class_name);
|
|
86
|
+
if (byName && (byName.class_name !== wanted.class_name || byName.script_name))
|
|
87
|
+
throw new CliError(`${state.file}: Durable Object binding ${wanted.name} must be class ${wanted.class_name} in this Worker (found ${byName.class_name ?? "?"}${byName.script_name ? ` in ${byName.script_name}` : ""}). The library reads env.${wanted.name}.`);
|
|
88
|
+
if (!byName && byClass)
|
|
89
|
+
throw new CliError(`${state.file}: class ${wanted.class_name} is bound as ${byClass.name ?? "?"}; the library expects the binding name ${wanted.name}.`);
|
|
90
|
+
if (!byName)
|
|
91
|
+
append(state, ["durable_objects", "bindings"], wanted);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const nextTag = (tags) => {
|
|
95
|
+
const numbers = tags.map((tag) => /^v(\d+)$/.exec(tag ?? "")?.[1]).filter((n) => n !== undefined);
|
|
96
|
+
let next = numbers.length > 0 ? Math.max(...numbers.map(Number)) + 1 : tags.length + 1;
|
|
97
|
+
while (tags.includes(`v${next}`))
|
|
98
|
+
next += 1;
|
|
99
|
+
return `v${next}`;
|
|
100
|
+
};
|
|
101
|
+
function ensureMigrations(state) {
|
|
102
|
+
const migrations = config(state).migrations ?? [];
|
|
103
|
+
const covered = new Set(migrations.flatMap((migration) => [
|
|
104
|
+
...(migration.new_sqlite_classes ?? []),
|
|
105
|
+
...(migration.renamed_classes ?? []).map((rename) => rename.to ?? ""),
|
|
106
|
+
]));
|
|
107
|
+
const classes = DURABLE_OBJECTS.map((object) => object.class_name);
|
|
108
|
+
const kv = classes.find((name) => migrations.some((m) => m.new_classes?.includes(name)));
|
|
109
|
+
if (kv)
|
|
110
|
+
throw new CliError(`${state.file}: ${kv} is declared in new_classes; the library's Durable Objects need SQLite storage (new_sqlite_classes).`);
|
|
111
|
+
const missing = classes.filter((name) => !covered.has(name));
|
|
112
|
+
if (missing.length === 0)
|
|
113
|
+
return;
|
|
114
|
+
append(state, ["migrations"], {
|
|
115
|
+
tag: nextTag(migrations.map((m) => m.tag)),
|
|
116
|
+
new_sqlite_classes: missing,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function ensureContainers(state) {
|
|
120
|
+
const containers = config(state).containers ?? [];
|
|
121
|
+
for (const entry of CONTAINERS) {
|
|
122
|
+
const index = containers.findIndex((container) => container.class_name === entry.class_name);
|
|
123
|
+
const existing = containers[index];
|
|
124
|
+
if (!existing) {
|
|
125
|
+
append(state, ["containers"], entry);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (existing.image === entry.image &&
|
|
129
|
+
existing.image_build_context === entry.image_build_context)
|
|
130
|
+
continue;
|
|
131
|
+
if (!state.input.force) {
|
|
132
|
+
state.notes.push(`containers[${entry.class_name}] keeps image ${existing.image ?? "?"}; the snapshot Dockerfile is ${entry.image} (--force rewrites it).`);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
set(state, ["containers", index, "image"], entry.image);
|
|
136
|
+
set(state, ["containers", index, "image_build_context"], entry.image_build_context);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function ensureBuckets(state) {
|
|
140
|
+
const buckets = config(state).r2_buckets ?? [];
|
|
141
|
+
for (const wanted of BUCKETS)
|
|
142
|
+
if (!buckets.some((bucket) => bucket.binding === wanted.binding))
|
|
143
|
+
append(state, ["r2_buckets"], {
|
|
144
|
+
binding: wanted.binding,
|
|
145
|
+
bucket_name: `${state.input.name}-${wanted.suffix}`,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function ensureServices(state) {
|
|
149
|
+
const wanted = [
|
|
150
|
+
{ binding: "MODEL_GATEWAY", service: state.input.name, entrypoint: "Models" },
|
|
151
|
+
];
|
|
152
|
+
if (state.input.agentsBinding)
|
|
153
|
+
wanted.push({ binding: "AGENTS", service: state.input.name, entrypoint: "Agents" });
|
|
154
|
+
for (const service of wanted) {
|
|
155
|
+
const services = config(state).services ?? [];
|
|
156
|
+
const index = services.findIndex((entry) => entry.binding === service.binding);
|
|
157
|
+
const existing = services[index];
|
|
158
|
+
if (!existing) {
|
|
159
|
+
append(state, ["services"], service);
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if (existing.service === service.service && existing.entrypoint === service.entrypoint)
|
|
163
|
+
continue;
|
|
164
|
+
if (!state.input.force)
|
|
165
|
+
throw new CliError(`${state.file}: services[${service.binding}] must point at this Worker's ${service.entrypoint} entrypoint (found ${existing.service ?? "?"}#${existing.entrypoint ?? "default"}); --force rewrites it.`);
|
|
166
|
+
set(state, ["services", index], service);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function ensureBackupVariable(state) {
|
|
170
|
+
const current = config(state);
|
|
171
|
+
const bucket = current.r2_buckets?.find((entry) => entry.binding === "BACKUP_BUCKET")?.bucket_name;
|
|
172
|
+
if (!bucket)
|
|
173
|
+
return;
|
|
174
|
+
const value = current.vars?.BACKUP_BUCKET_NAME;
|
|
175
|
+
if (value === bucket)
|
|
176
|
+
return;
|
|
177
|
+
if (value !== undefined)
|
|
178
|
+
state.notes.push(`vars.BACKUP_BUCKET_NAME now equals the BACKUP_BUCKET bucket name (${bucket}); it was ${JSON.stringify(value)}.`);
|
|
179
|
+
set(state, ["vars", "BACKUP_BUCKET_NAME"], bucket);
|
|
180
|
+
}
|
|
181
|
+
function ensureAi(state) {
|
|
182
|
+
if (!state.input.workersAi)
|
|
183
|
+
return;
|
|
184
|
+
const ai = config(state).ai;
|
|
185
|
+
if (!ai) {
|
|
186
|
+
set(state, ["ai"], { binding: "AI" });
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (ai.binding !== "AI")
|
|
190
|
+
throw new CliError(`${state.file}: the Workers AI binding is ${ai.binding ?? "?"}; the generated composition reads env.AI.`);
|
|
191
|
+
}
|
|
192
|
+
function noteNamedEnvironments(state) {
|
|
193
|
+
const environments = Object.keys(config(state).env ?? {});
|
|
194
|
+
if (environments.length > 0)
|
|
195
|
+
state.notes.push(`Named environments (${environments.join(", ")}) were not changed; Wrangler does not inherit Durable Object, R2 or service bindings into them.`);
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=wrangler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrangler.js","sourceRoot":"","sources":["../../src/steps/wrangler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type Provider = "openai" | "anthropic" | "workers-ai" | "openai-compatible";
|
|
2
|
+
export declare const PROVIDERS: readonly Provider[];
|
|
3
|
+
export type Harness = "codex" | "claude-code" | "opencode";
|
|
4
|
+
export declare const HARNESSES: readonly Harness[];
|
|
5
|
+
export interface CompositionInput {
|
|
6
|
+
provider: Provider;
|
|
7
|
+
harnesses: readonly Harness[];
|
|
8
|
+
/** Adds the `workers` preset (Workers AI) next to another provider. */
|
|
9
|
+
workersAi: boolean;
|
|
10
|
+
/** `openai-compatible` only. */
|
|
11
|
+
baseURL?: string;
|
|
12
|
+
model?: string;
|
|
13
|
+
/** A standalone Worker exports the API as its default export. */
|
|
14
|
+
standalone: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const PRESET_NAMES: Record<Harness, string>;
|
|
17
|
+
/** The secret the generated composition reads for the provider, if any. */
|
|
18
|
+
export declare function providerSecret(provider: Provider): string | undefined;
|
|
19
|
+
/** npm packages the composition imports, pinned like the workspace example. */
|
|
20
|
+
export declare function providerPackages(input: CompositionInput): Record<string, string>;
|
|
21
|
+
/** The provider secret with a `.dev.vars` comment naming the presets that need it. */
|
|
22
|
+
export declare function describeSecret(input: CompositionInput): {
|
|
23
|
+
name: string;
|
|
24
|
+
comment: string;
|
|
25
|
+
} | undefined;
|
|
26
|
+
/** Renders the composition module; the standalone form is byte-identical to examples/worker/src/index.ts. */
|
|
27
|
+
export declare function renderComposition(input: CompositionInput): string;
|