@the-open-engine/zeroshot 6.28.0 → 6.29.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.
Files changed (47) hide show
  1. package/README.md +3 -3
  2. package/cli/index.js +21 -223
  3. package/docker/zeroshot-cluster/Dockerfile +2 -3
  4. package/docker/zeroshot-oecp/Cargo.toml +12 -0
  5. package/docker/zeroshot-oecp/Dockerfile +65 -0
  6. package/docker/zeroshot-oecp/src/main.rs +32 -0
  7. package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -1
  8. package/lib/agent-cli-provider/adapters/codex.js +1 -0
  9. package/lib/agent-cli-provider/adapters/codex.js.map +1 -1
  10. package/lib/cluster-worker/engine-adapter.js +11 -15
  11. package/lib/cluster-worker/engine-input.js +14 -0
  12. package/lib/cluster-worker/profiles.js +42 -1
  13. package/lib/start-cluster.js +3 -3
  14. package/lib/target/bounded-json.d.ts +6 -0
  15. package/lib/target/bounded-json.js +43 -0
  16. package/lib/target/device-flow.d.ts +5 -1
  17. package/lib/target/device-flow.js +6 -1
  18. package/lib/target/discovery.d.ts +1 -0
  19. package/lib/target/discovery.js +12 -35
  20. package/lib/target/hosted-run/client.d.ts +26 -0
  21. package/lib/target/hosted-run/client.js +158 -0
  22. package/lib/target/hosted-run/commands.d.ts +4 -0
  23. package/lib/target/hosted-run/commands.js +113 -0
  24. package/lib/target/hosted-run/contracts.d.ts +49 -0
  25. package/lib/target/hosted-run/contracts.js +3 -0
  26. package/lib/target/hosted-run/input.d.ts +5 -0
  27. package/lib/target/hosted-run/input.js +200 -0
  28. package/lib/target/hosted-run.d.ts +4 -0
  29. package/lib/target/hosted-run.js +12 -0
  30. package/lib/target/target-session.d.ts +1 -0
  31. package/lib/target/target-session.js +2 -1
  32. package/package.json +16 -3
  33. package/scripts/audit-production-dependencies.js +150 -0
  34. package/scripts/opcore-agent-gate.js +159 -0
  35. package/scripts/opcore-agent-tool-overlays.js +154 -0
  36. package/scripts/opcore-introduced-check.js +290 -0
  37. package/src/agent-cli-provider/adapters/codex.ts +1 -0
  38. package/src/isolation-manager.js +16 -1
  39. package/src/target/bounded-json.ts +48 -0
  40. package/src/target/device-flow.ts +14 -3
  41. package/src/target/discovery.ts +17 -35
  42. package/src/target/hosted-run/client.ts +198 -0
  43. package/src/target/hosted-run/commands.ts +140 -0
  44. package/src/target/hosted-run/contracts.ts +53 -0
  45. package/src/target/hosted-run/input.ts +199 -0
  46. package/src/target/hosted-run.ts +8 -0
  47. package/src/target/target-session.ts +5 -1
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
  [![npm](https://img.shields.io/npm/v/@the-open-engine/zeroshot?style=flat&labelColor=171411&color=171411)](https://www.npmjs.com/package/@the-open-engine/zeroshot)
16
16
  [![CI](https://img.shields.io/github/actions/workflow/status/the-open-engine/zeroshot/ci.yml?style=flat&labelColor=171411&label=CI)](https://github.com/the-open-engine/zeroshot/actions/workflows/ci.yml)
17
17
  [![License: MIT](https://img.shields.io/badge/license-MIT-171411?style=flat)](LICENSE)
18
- [![node](https://img.shields.io/badge/node-%E2%89%A5%2018-171411?style=flat)](#install)
18
+ [![node](https://img.shields.io/badge/node-%E2%89%A5%2022-171411?style=flat)](#install)
19
19
  [![platforms](https://img.shields.io/badge/platforms-linux%20%C2%B7%20macos-171411?style=flat)](#install)
20
20
  [![stars](https://img.shields.io/github/stars/the-open-engine/zeroshot?style=flat&labelColor=171411&color=171411)](https://github.com/the-open-engine/zeroshot)
21
21
  [![Layer 01 · The Open Engine](https://img.shields.io/badge/Layer_01-The_Open_Engine-C2240C?style=flat&labelColor=171411)](#the-open-engine)
@@ -43,7 +43,7 @@ Zeroshot is an open-source, multi-agent orchestration engine for autonomous soft
43
43
  npm install -g @the-open-engine/zeroshot
44
44
  ```
45
45
 
46
- Requires **Node ≥ 18** and at least one provider CLI (Claude Code, Codex, Gemini, or OpenCode). Linux and macOS today; Windows is deferred.
46
+ Requires **Node ≥ 22** and at least one provider CLI (Claude Code, Codex, Gemini, or OpenCode). The package includes the pinned Opcore constraints CLI; repository hook activation remains explicit. Linux and macOS today; Windows is deferred.
47
47
 
48
48
  <div align="center">
49
49
  <img src="docs/assets/zeroshot-demo.gif" alt="Zeroshot resolving an issue through the executor-verifier loop" width="760">
@@ -207,7 +207,7 @@ Zeroshot is **Layer 01 · Verification** of [The Open Engine](https://theopeneng
207
207
  | 02 | Constraints: **Opcore** | Sibling · alpha |
208
208
  | 03-05 | Intent · Context · Runtime | In development |
209
209
 
210
- Zeroshot runs the loop: an agent writes the change, and an **independent** verifier decides whether it holds: approve, or a reproducible failure. **Opcore** is the sibling layer, a deterministic, local, read-only **constraints** gate for coding agents (currently private alpha `0.1.0-alpha.0`, built in the open, not yet published). Verification asks _"does this meet the goal?"_; constraints ask _"is this within tolerance?"_
210
+ Zeroshot runs the loop: an agent writes the change, and an **independent** verifier decides whether it holds: approve, or a reproducible failure. **Opcore** is the sibling layer, a deterministic, local, read-only **constraints** gate for coding agents. Zeroshot packages Opcore `0.2.1` and uses introduced-change validation so existing repository debt never blocks an otherwise clean change. Verification asks _"does this meet the goal?"_; constraints ask _"is this within tolerance?"_
211
211
 
212
212
  Each layer ships the same way: extracted from the platform we run, then opened. **Trust nothing. Verify everything.**
213
213
 
package/cli/index.js CHANGED
@@ -2647,6 +2647,7 @@ Shell completion:
2647
2647
  );
2648
2648
 
2649
2649
  // Run command - CLUSTER with auto-detection
2650
+
2650
2651
  program
2651
2652
  .command('run <input>')
2652
2653
  .description(
@@ -3959,6 +3960,11 @@ for (const providerName of VALID_PROVIDERS) {
3959
3960
  // Settings management
3960
3961
  const settingsCmd = program.command('settings').description('Manage zeroshot settings');
3961
3962
  const INTERNAL_SETTINGS_KEYS = new Set(['lastUpdateCheckClaim', '_targets']);
3963
+ // Fail closed while hosted commands are unpublished. Keeping these names out of the
3964
+ // default `run` rewrite makes them unknown commands rather than local task input.
3965
+ // Do not add a registration import, environment gate, or preview path here; the only
3966
+ // hosted parser constructor lives in src/target/register-hosted-commands.ts.
3967
+ const UNREGISTERED_HOSTED_COMMAND_NAMES = new Set(['target', 'capsule']);
3962
3968
 
3963
3969
  function visibleSettingKeys() {
3964
3970
  return Object.keys(DEFAULT_SETTINGS).filter((key) => !INTERNAL_SETTINGS_KEYS.has(key));
@@ -4490,210 +4496,7 @@ settingsCmd.action(() => {
4490
4496
  formatSettingsList(settings, true);
4491
4497
  });
4492
4498
 
4493
- // Target management commands
4494
- // Target modules are compiled during install/package preparation for the Node 18+ CLI.
4495
- const importTarget = (mod) => import(`../lib/target/${mod}.js`);
4496
- const targetCmd = program.command('target').description('Manage named remote targets');
4497
-
4498
- targetCmd
4499
- .command('add <name>')
4500
- .description('Register a named remote target')
4501
- .requiredOption('--url <url>', 'Service URL for the target')
4502
- .action(async (name, options) => {
4503
- try {
4504
- const { addTarget } = await importTarget('target-registry');
4505
- const settingsPort = {
4506
- load: () => loadSettings(),
4507
- mutate: (fn) => mutateSettings(fn),
4508
- };
4509
- const record = addTarget(name, options.url, settingsPort);
4510
- console.log(chalk.green(`✓ Target "${name}" added (${record.url})`));
4511
- } catch (error) {
4512
- console.error(chalk.red(error.message));
4513
- process.exit(1);
4514
- }
4515
- });
4516
-
4517
- targetCmd
4518
- .command('login <name>')
4519
- .description('Authenticate with a remote target via device login')
4520
- .action(async (name) => {
4521
- try {
4522
- const { getTarget } = await importTarget('target-registry');
4523
- const { targetLogin } = await importTarget('target-session');
4524
- const { KeyringCredentialStore } = await importTarget('credential-store');
4525
- const { acquireTargetLock } = await importTarget('credential-lock');
4526
- const { discoverTargetSessionEndpoints } = await importTarget('discovery');
4527
-
4528
- const settingsPort = {
4529
- load: () => loadSettings(),
4530
- mutate: (fn) => mutateSettings(fn),
4531
- };
4532
-
4533
- const target = getTarget(name, settingsPort);
4534
- if (!target) {
4535
- console.error(chalk.red(`Target "${name}" not found.`));
4536
- process.exit(1);
4537
- }
4538
-
4539
- const http = { fetch: (url, init) => fetch(url, init) };
4540
- const discoveryEndpoints = await discoverTargetSessionEndpoints(target.url, http);
4541
-
4542
- const credentialStore = await KeyringCredentialStore.create();
4543
- const openPkg = await import('open');
4544
- const browserOpen = openPkg.default || openPkg;
4545
-
4546
- const result = await targetLogin(
4547
- name,
4548
- target,
4549
- credentialStore,
4550
- () => acquireTargetLock(target.id),
4551
- settingsPort,
4552
- {
4553
- http,
4554
- clock: { now: () => Date.now() },
4555
- browserOpener: {
4556
- open: async (url) => {
4557
- await browserOpen(url);
4558
- },
4559
- },
4560
- stderr: process.stderr,
4561
- discoveryEndpoints,
4562
- }
4563
- );
4564
-
4565
- console.log(
4566
- chalk.green(`✓ Logged in to "${name}" (organization: ${result.organization.name})`)
4567
- );
4568
- } catch (error) {
4569
- console.error(chalk.red(error.message));
4570
- process.exit(1);
4571
- }
4572
- });
4573
-
4574
- targetCmd
4575
- .command('list')
4576
- .description('List registered remote targets')
4577
- .option('--json', 'Output as JSON')
4578
- .action(async (options) => {
4579
- try {
4580
- const { listTargets } = await importTarget('target-registry');
4581
- const settingsPort = {
4582
- load: () => loadSettings(),
4583
- mutate: (fn) => mutateSettings(fn),
4584
- };
4585
-
4586
- const targets = listTargets(settingsPort);
4587
-
4588
- if (options.json) {
4589
- const output = targets.map(({ name, record }) => ({
4590
- name,
4591
- id: record.id,
4592
- url: record.url,
4593
- organization: record.organization ?? null,
4594
- loggedIn: false,
4595
- createdAt: record.createdAt,
4596
- }));
4597
-
4598
- // Try to check keyring presence for each target
4599
- try {
4600
- const { KeyringCredentialStore } = await importTarget('credential-store');
4601
- const { targetServiceKey, TARGET_ACCOUNT } = await importTarget('credential-store');
4602
- const store = await KeyringCredentialStore.create();
4603
- for (const item of output) {
4604
- const matchingTarget = targets.find((t) => t.name === item.name);
4605
- if (matchingTarget) {
4606
- const cred = await store.get(
4607
- targetServiceKey(matchingTarget.record.id),
4608
- TARGET_ACCOUNT
4609
- );
4610
- item.loggedIn = cred !== null;
4611
- }
4612
- }
4613
- } catch {
4614
- // Keyring unavailable, all show as not logged in
4615
- }
4616
-
4617
- console.log(JSON.stringify(output, null, 2));
4618
- return;
4619
- }
4620
-
4621
- if (targets.length === 0) {
4622
- console.log(
4623
- chalk.dim(
4624
- 'No targets registered. Use `zeroshot target add <name> --url <url>` to add one.'
4625
- )
4626
- );
4627
- return;
4628
- }
4629
-
4630
- for (const { name, record } of targets) {
4631
- const org = record.organization ? ` (org: ${record.organization.name})` : '';
4632
- console.log(` ${chalk.bold(name)} ${record.url}${org}`);
4633
- }
4634
- } catch (error) {
4635
- console.error(chalk.red(error.message));
4636
- process.exit(1);
4637
- }
4638
- });
4639
-
4640
- targetCmd
4641
- .command('remove <name>')
4642
- .description('Remove a named remote target')
4643
- .option('--force', 'Remove even if remote revocation fails')
4644
- .action(async (name, options) => {
4645
- try {
4646
- const { getTarget, removeTarget } = await importTarget('target-registry');
4647
- const { revokeAndCleanup } = await importTarget('target-session');
4648
- const { acquireTargetLock } = await importTarget('credential-lock');
4649
- const { discoverTargetSessionEndpoints } = await importTarget('discovery');
4650
-
4651
- const settingsPort = {
4652
- load: () => loadSettings(),
4653
- mutate: (fn) => mutateSettings(fn),
4654
- };
4655
-
4656
- const target = getTarget(name, settingsPort);
4657
- if (!target) {
4658
- console.error(chalk.red(`Target "${name}" not found.`));
4659
- process.exit(1);
4660
- }
4661
-
4662
- // Try to revoke and cleanup keyring
4663
- try {
4664
- const { KeyringCredentialStore } = await importTarget('credential-store');
4665
- const credentialStore = await KeyringCredentialStore.create();
4666
- const http = { fetch: (url, init) => fetch(url, init) };
4667
- const discoveryEndpoints = await discoverTargetSessionEndpoints(target.url, http);
4668
- await revokeAndCleanup(
4669
- target,
4670
- credentialStore,
4671
- () => acquireTargetLock(target.id),
4672
- {
4673
- http,
4674
- discoveryEndpoints,
4675
- },
4676
- !!options.force
4677
- );
4678
- } catch (error) {
4679
- if (!options.force) {
4680
- console.error(chalk.red(error.message));
4681
- process.exit(1);
4682
- }
4683
- // Force mode: continue with removal
4684
- }
4685
-
4686
- removeTarget(name, settingsPort);
4687
- console.log(chalk.green(`✓ Target "${name}" removed`));
4688
- } catch (error) {
4689
- console.error(chalk.red(error.message));
4690
- process.exit(1);
4691
- }
4692
- });
4693
-
4694
- targetCmd.action(() => {
4695
- targetCmd.help();
4696
- });
4499
+ // Hosted target commands intentionally NOT registered here — see src/target/register-hosted-commands.ts
4697
4500
 
4698
4501
  // Providers management
4699
4502
  const providersCmd = program.command('providers').description('Manage AI providers');
@@ -6255,6 +6058,16 @@ function isStartupUpdateEligible(argv, options = {}) {
6255
6058
  });
6256
6059
  }
6257
6060
 
6061
+ function applyDefaultCommand(args) {
6062
+ const firstArg = args[0];
6063
+ if (!firstArg || firstArg.startsWith('-')) return;
6064
+
6065
+ const commandNames = program.commands.map((command) => command.name());
6066
+ if (commandNames.includes(firstArg) || UNREGISTERED_HOSTED_COMMAND_NAMES.has(firstArg)) return;
6067
+
6068
+ process.argv.splice(2, 0, 'run');
6069
+ }
6070
+
6258
6071
  // Main entry point
6259
6072
  async function main() {
6260
6073
  printLegacyDistroNotice();
@@ -6280,31 +6093,16 @@ async function main() {
6280
6093
  checkForUpdates({ argv: startupArgs, eligibilityChecked: true });
6281
6094
  }
6282
6095
 
6283
- let args = startupArgs;
6096
+ const args = startupArgs;
6284
6097
 
6285
6098
  if (args.length === 0) {
6286
6099
  program.outputHelp();
6287
6100
  return;
6288
6101
  }
6289
6102
 
6290
- // Default command handling: if first arg doesn't match a known command, treat it as 'run'
6291
- // This allows `zeroshot "task"` to work the same as `zeroshot run "task"`
6292
- args = process.argv.slice(2);
6293
- if (args.length > 0) {
6294
- const firstArg = args[0];
6295
-
6296
- // Skip if it's a flag/option (starts with -)
6297
- // Skip if it's --help or --version (these are handled by commander)
6298
- if (!firstArg.startsWith('-')) {
6299
- // Get all registered command names
6300
- const commandNames = program.commands.map((cmd) => cmd.name());
6301
-
6302
- // If first arg is not a known command, prepend 'run'
6303
- if (!commandNames.includes(firstArg)) {
6304
- process.argv.splice(2, 0, 'run');
6305
- }
6306
- }
6307
- }
6103
+ // Preserve the default local run shorthand without treating hosted-only command
6104
+ // names as task input in the stable parser.
6105
+ applyDefaultCommand(args);
6308
6106
 
6309
6107
  program.parse();
6310
6108
  }
@@ -4,12 +4,11 @@
4
4
  # Build: docker build -t vibe-cluster-base vibe/cluster/docker/vibe-cluster/
5
5
  # Usage: zeroshot run <task> --docker
6
6
 
7
- FROM node:20-slim
7
+ FROM node:22-slim
8
8
 
9
9
  # Upgrade npm to fix Arborist isDescendantOf bug (npm 10.x crash on complex peer deps)
10
10
  # See: https://github.com/npm/cli/issues/7682
11
- # Pinned to npm@11 (the latest line that still supports the node:20-slim base); npm@latest (12.x)
12
- # now requires node >=22 and breaks the build with EBADENGINE.
11
+ # Pinned to npm@11 to keep the container toolchain reproducible with the supported Node 22 line.
13
12
  RUN npm install -g npm@11
14
13
 
15
14
  # Version pinning for infrastructure tools
@@ -0,0 +1,12 @@
1
+ [package]
2
+ name = "zeroshot-oecp-server"
3
+ version = "0.1.0"
4
+ edition.workspace = true
5
+ rust-version.workspace = true
6
+ license.workspace = true
7
+ repository.workspace = true
8
+ publish = false
9
+
10
+ [dependencies]
11
+ tokio.workspace = true
12
+ zeroshot-engine = { package = "zeroshot-rust", path = "../../zeroshot-rust" }
@@ -0,0 +1,65 @@
1
+ # syntax=docker/dockerfile:1
2
+
3
+ # The server and the existing Node worker ship together because OECP is the
4
+ # in-capsule process boundary. Capsule allocation and termination remain owned
5
+ # by Zero Cloud's control plane and capsule agent.
6
+ FROM rust@sha256:14b9b5f47dcc6644d0f0c1b35a2c2c5d0124f67159aaee28a348627523459b55 AS rust-builder
7
+ # Security package revisions intentionally follow the pinned Alpine release repositories.
8
+ # hadolint ignore=DL3018
9
+ RUN apk add --no-cache musl-dev
10
+ WORKDIR /build
11
+ COPY Cargo.toml Cargo.lock rust-toolchain.toml ./
12
+ COPY crates ./crates
13
+ COPY zeroshot-rust ./zeroshot-rust
14
+ COPY docker/zeroshot-oecp ./docker/zeroshot-oecp
15
+ # musl does not expose renameat2 through libc, although the Linux syscall is
16
+ # available. Keep the portable source API on glibc and use the syscall binding
17
+ # only for this musl image build.
18
+ RUN sed -i 's/libc::renameat2(/libc::syscall(libc::SYS_renameat2,/' \
19
+ zeroshot-rust/src/workspace_lease/types.rs \
20
+ && grep -Fq 'libc::syscall(libc::SYS_renameat2,' \
21
+ zeroshot-rust/src/workspace_lease/types.rs
22
+ RUN rustup component add --toolchain 1.97.0 rustfmt clippy \
23
+ && cargo +1.97.0 build --locked --release -p zeroshot-oecp-server \
24
+ && rustup default 1.97.0 \
25
+ && rustup toolchain uninstall 1.96.0 1.96.1
26
+
27
+ FROM node@sha256:c2cc26d8f991c2db236ad51a61efee843c482372d6d22570787309d511694110 AS node-builder
28
+ ARG CODEX_VERSION=0.146.0
29
+ # Security package revisions intentionally follow the pinned Alpine release repositories.
30
+ # hadolint ignore=DL3018
31
+ RUN apk add --no-cache build-base python3
32
+ WORKDIR /opt/zeroshot
33
+ COPY package.json package-lock.json ./
34
+ RUN npm ci --omit=dev --ignore-scripts --no-audit --no-fund \
35
+ && npm rebuild better-sqlite3 node-pty \
36
+ && npm install --global --no-audit --no-fund "@openai/codex@${CODEX_VERSION}"
37
+ COPY . .
38
+
39
+ FROM node@sha256:c2cc26d8f991c2db236ad51a61efee843c482372d6d22570787309d511694110 AS runtime
40
+ ARG ZEROSHOT_MIN_DISK_GB=10
41
+ ENV ZEROSHOT_MIN_DISK_GB=${ZEROSHOT_MIN_DISK_GB}
42
+ # Security package revisions intentionally follow the pinned Alpine release repositories.
43
+ # hadolint ignore=DL3018
44
+ RUN apk add --no-cache bash build-base ca-certificates git github-cli openssl python3 tini \
45
+ && install -d -m 1777 /tmp \
46
+ && install -d -m 0750 -o node -g node /workspace
47
+ COPY --from=node-builder --chown=node:node /opt/zeroshot /opt/zeroshot
48
+ COPY --from=node-builder /usr/local/lib/node_modules/@openai /usr/local/lib/node_modules/@openai
49
+ COPY --from=rust-builder --chown=node:node /usr/local/cargo/bin /usr/local/cargo/bin
50
+ COPY --from=rust-builder --chown=node:node /usr/local/rustup /usr/local/rustup
51
+ COPY --from=rust-builder /build/target/release/zeroshot-oecp-server /usr/local/bin/zeroshot-oecp-server
52
+ RUN ln -s /opt/zeroshot/bin/zeroshot-cluster-worker.js /usr/local/bin/zeroshot-cluster-worker \
53
+ && ln -s /opt/zeroshot/cli/index.js /usr/local/bin/zeroshot \
54
+ && ln -s /usr/local/lib/node_modules/@openai/codex/bin/codex.js /usr/local/bin/codex \
55
+ && for command in cargo cargo-clippy cargo-fmt clippy-driver rustc rustdoc rustfmt rustup; do \
56
+ ln -s "/usr/local/cargo/bin/${command}" "/usr/local/bin/${command}"; \
57
+ done
58
+ ENV RUSTUP_HOME=/usr/local/rustup
59
+ ENV PATH=/usr/local/cargo/bin:${PATH}
60
+ # The official Node image defines this stable application user.
61
+ # hadolint ignore=DL3066
62
+ USER node
63
+ WORKDIR /workspace
64
+ EXPOSE 8083 8084
65
+ ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/zeroshot-oecp-server"]
@@ -0,0 +1,32 @@
1
+ use std::{error::Error, net::SocketAddr, sync::Arc};
2
+
3
+ use tokio::net::TcpListener;
4
+ use zeroshot_engine::hosted_oecp::{serve, HostedBackend, OECP_PORT};
5
+
6
+ #[tokio::main]
7
+ async fn main() -> Result<(), Box<dyn Error>> {
8
+ if std::env::args().nth(1).as_deref() == Some("--healthcheck") {
9
+ println!("zeroshot OECP server ready");
10
+ return Ok(());
11
+ }
12
+ let backend = Arc::new(HostedBackend::new());
13
+ let listener = TcpListener::bind(SocketAddr::from(([127, 0, 0, 1], OECP_PORT))).await?;
14
+ serve(listener, backend, shutdown_signal()).await?;
15
+ Ok(())
16
+ }
17
+
18
+ #[cfg(unix)]
19
+ async fn shutdown_signal() {
20
+ use tokio::signal::unix::{signal, SignalKind};
21
+
22
+ let mut terminate = signal(SignalKind::terminate()).expect("SIGTERM handler must install");
23
+ tokio::select! {
24
+ _ = tokio::signal::ctrl_c() => {}
25
+ _ = terminate.recv() => {}
26
+ }
27
+ }
28
+
29
+ #[cfg(not(unix))]
30
+ async fn shutdown_signal() {
31
+ let _result = tokio::signal::ctrl_c().await;
32
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/agent-cli-provider/adapters/codex.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,+BAA+B,EAGrC,MAAM,UAAU,CAAC;AAmTlB,eAAO,MAAM,YAAY,EAAE,+BAoB1B,CAAC"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/agent-cli-provider/adapters/codex.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,+BAA+B,EAGrC,MAAM,UAAU,CAAC;AAoTlB,eAAO,MAAM,YAAY,EAAE,+BAoB1B,CAAC"}
@@ -8,6 +8,7 @@ const common_1 = require("./common");
8
8
  const codex_parser_1 = require("./codex-parser");
9
9
  const MODEL_CATALOG = {
10
10
  'gpt-5.4': { rank: 2 },
11
+ 'openai/gpt-5.4': { rank: 2 },
11
12
  'gpt-5.5': { rank: 3 },
12
13
  'gpt-5.6': { rank: 3 },
13
14
  'gpt-5.6-sol': { rank: 3 },
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/agent-cli-provider/adapters/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/agent-cli-provider/adapters/codex.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const { cloneJson } = require('./object-utils');
4
+ const { inputFromRequest } = require('./engine-input');
4
5
 
5
6
  const TERMINAL_TOPICS = new Set(['CLUSTER_COMPLETE', 'CLUSTER_FAILED']);
6
7
 
@@ -11,9 +12,14 @@ function messageKey(message) {
11
12
  function terminalEventFromMessage(message) {
12
13
  const data = message.content?.data || {};
13
14
  if (message.topic === 'CLUSTER_COMPLETE') {
15
+ let prSummary = null;
16
+ if (typeof data.pr_url === 'string' && data.pr_url) {
17
+ const number = Number.isSafeInteger(data.pr_number) ? ` #${data.pr_number}` : '';
18
+ prSummary = `Pull request${number} created: ${data.pr_url}`;
19
+ }
14
20
  return {
15
21
  type: 'complete',
16
- summary: data.reason || message.content?.text,
22
+ summary: prSummary || data.reason || message.content?.text,
17
23
  ...(Object.prototype.hasOwnProperty.call(data, 'result') ? { result: data.result } : {}),
18
24
  ...(Object.prototype.hasOwnProperty.call(data, 'artifacts')
19
25
  ? { artifacts: data.artifacts }
@@ -28,17 +34,6 @@ function terminalEventFromMessage(message) {
28
34
  };
29
35
  }
30
36
 
31
- function inputFromRequest(request, artifactManifest) {
32
- if (request.source === 'issue') return { issue: request.issue };
33
- if (request.source === 'prompt') return { text: request.prompt };
34
- return {
35
- text:
36
- 'Execute the task described by this registry-staged, byte-free artifact manifest. ' +
37
- 'Do not request interactive input.\n' +
38
- JSON.stringify(artifactManifest),
39
- };
40
- }
41
-
42
37
  function resolveOrchestrator(options) {
43
38
  if (options.orchestrator) return options.orchestrator;
44
39
  const Orchestrator = options.Orchestrator || require('../../src/orchestrator');
@@ -238,16 +233,16 @@ class CurrentEngineAdapter {
238
233
  this.stopPromise ||= this.stopResource();
239
234
  return this.stopPromise;
240
235
  }
236
+
241
237
  async waitForAllocatedCluster() {
242
238
  let cluster = this.orchestrator.getCluster(this.resource.clusterId);
243
239
  while (!cluster && !this.startSettled && !this.closed) {
244
- await new Promise((resolve) => {
245
- setTimeout(resolve, 10);
246
- });
240
+ await new Promise((resolve) => setTimeout(resolve, 10));
247
241
  cluster = this.orchestrator.getCluster(this.resource.clusterId);
248
242
  }
249
243
  return cluster;
250
244
  }
245
+
251
246
  stopAllocatedCluster(cluster = this.orchestrator.getCluster(this.resource.clusterId)) {
252
247
  if (!cluster) return Promise.resolve(false);
253
248
  if (cluster.state === 'stopped' || cluster.state === 'killed') return Promise.resolve(true);
@@ -256,6 +251,7 @@ class CurrentEngineAdapter {
256
251
  .then(() => true);
257
252
  return this.allocatedStopPromise;
258
253
  }
254
+
259
255
  async stopResource() {
260
256
  this.cleanupPromise ||= this.waitForAllocatedCluster()
261
257
  .then((cluster) => this.stopAllocatedCluster(cluster))
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ function inputFromRequest(request, artifactManifest) {
4
+ if (request.source === 'issue') return { issue: request.issue };
5
+ if (request.source === 'prompt') return { text: request.prompt };
6
+ return {
7
+ text:
8
+ 'Execute the task described by this registry-staged, byte-free artifact manifest. ' +
9
+ 'Do not request interactive input.\n' +
10
+ JSON.stringify(artifactManifest),
11
+ };
12
+ }
13
+
14
+ module.exports = { inputFromRequest };
@@ -24,6 +24,44 @@ const DEFAULT_PROVIDER_PROFILES = Object.freeze({
24
24
  }),
25
25
  });
26
26
 
27
+ const HOSTED_CODEX_OPENROUTER_PROFILE = 'provider.codex-openrouter@1';
28
+ const HOSTED_CODEX_OPENROUTER_PR_PROFILE = 'provider.codex-openrouter-pr@1';
29
+ const DEFAULT_HOSTED_MODEL = 'openai/gpt-5.4';
30
+
31
+ function providerProfilesFromEnvironment(environment = process.env) {
32
+ if (environment.ZEROSHOT_HOSTED_CODEX_OPENROUTER !== '1') {
33
+ return DEFAULT_PROVIDER_PROFILES;
34
+ }
35
+ const model = environment.ZEROSHOT_HOSTED_MODEL || DEFAULT_HOSTED_MODEL;
36
+ const levelOverrides = Object.freeze({
37
+ level1: Object.freeze({ model, reasoningEffort: 'medium' }),
38
+ level2: Object.freeze({ model, reasoningEffort: 'high' }),
39
+ level3: Object.freeze({ model, reasoningEffort: 'xhigh' }),
40
+ });
41
+ const hostedSettings = {
42
+ templateParams: { task_type: 'TASK' },
43
+ providerSettings: {
44
+ codex: {
45
+ defaultLevel: 'level2',
46
+ levelOverrides,
47
+ },
48
+ },
49
+ };
50
+ return deepFreeze({
51
+ ...DEFAULT_PROVIDER_PROFILES,
52
+ [HOSTED_CODEX_OPENROUTER_PROFILE]: {
53
+ configName: 'base-templates/single-worker',
54
+ providerOverride: 'codex',
55
+ settings: hostedSettings,
56
+ },
57
+ [HOSTED_CODEX_OPENROUTER_PR_PROFILE]: {
58
+ configName: 'base-templates/worker-validator',
59
+ providerOverride: 'codex',
60
+ settings: hostedSettings,
61
+ },
62
+ });
63
+ }
64
+
27
65
  function own(map, key) {
28
66
  return Object.prototype.hasOwnProperty.call(map, key) ? map[key] : null;
29
67
  }
@@ -38,7 +76,7 @@ function validateBounds(bounds) {
38
76
 
39
77
  function createDeploymentProfileRegistry(options = {}) {
40
78
  const isolationProfiles = options.isolationProfiles || DEFAULT_ISOLATION_PROFILES;
41
- const providerProfiles = options.providerProfiles || DEFAULT_PROVIDER_PROFILES;
79
+ const providerProfiles = options.providerProfiles || providerProfilesFromEnvironment();
42
80
  const defaultBounds = { ...DEFAULT_BOUNDS, ...(options.bounds || {}) };
43
81
  validateBounds(defaultBounds);
44
82
  const bounds = deepFreeze(defaultBounds);
@@ -77,5 +115,8 @@ module.exports = {
77
115
  DEFAULT_BOUNDS,
78
116
  DEFAULT_ISOLATION_PROFILES,
79
117
  DEFAULT_PROVIDER_PROFILES,
118
+ HOSTED_CODEX_OPENROUTER_PROFILE,
119
+ HOSTED_CODEX_OPENROUTER_PR_PROFILE,
80
120
  createDeploymentProfileRegistry,
121
+ providerProfilesFromEnvironment,
81
122
  };
@@ -176,17 +176,17 @@ function applyProviderOverrideToConfig(config, providerOverride, settings) {
176
176
  console.log(chalk.dim(`Provider override: ${providerOverride} (all agents)`));
177
177
  }
178
178
 
179
- function resolveParameterizedConfigFile(config) {
179
+ function resolveParameterizedConfigFile(config, templateParams = {}) {
180
180
  if (!config?.params || Object.keys(config.params).length === 0) {
181
181
  return config;
182
182
  }
183
183
 
184
184
  const resolver = new TemplateResolver(path.join(PACKAGE_ROOT, 'cluster-templates'));
185
- return resolver.resolveTemplate(config, {});
185
+ return resolver.resolveTemplate(config, templateParams);
186
186
  }
187
187
 
188
188
  function prepareClusterConfig(config, settings = {}, providerOverride) {
189
- const prepared = resolveParameterizedConfigFile(config);
189
+ const prepared = resolveParameterizedConfigFile(config, settings.templateParams || {});
190
190
  ensureConfigProviderDefaults(prepared, settings);
191
191
  if (providerOverride) {
192
192
  applyProviderOverrideToConfig(prepared, providerOverride, settings);