@rallycry/conveyor-agent 11.0.13 → 11.0.15

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.
@@ -6464,6 +6464,15 @@ async function seedOpenCodeOauth(env) {
6464
6464
  }
6465
6465
  }
6466
6466
 
6467
+ // src/harness/openai-model.ts
6468
+ var DEFAULT_OPENAI_CODING_MODEL = "gpt-5.6-terra";
6469
+ function resolveOpenAiCodingModel(model) {
6470
+ if (!model || model.startsWith("claude-") || model.includes("/") && !model.startsWith("openai/")) {
6471
+ return DEFAULT_OPENAI_CODING_MODEL;
6472
+ }
6473
+ return model.replace(/^openai\//, "");
6474
+ }
6475
+
6467
6476
  // src/harness/opencode/credentials.ts
6468
6477
  var PROVIDER_KEY_ENV = {
6469
6478
  openai: "OPENAI_API_KEY",
@@ -6496,6 +6505,10 @@ function buildOpenCodeChildEnv(source, configContent) {
6496
6505
  }
6497
6506
  function resolveOpenCodeModel(source, optionsModel) {
6498
6507
  const model = source.CONVEYOR_AGENT_MODEL ?? optionsModel;
6508
+ const configuredProvider = source.CONVEYOR_AGENT_PROVIDER;
6509
+ if (configuredProvider === "openai" || !configuredProvider && !model) {
6510
+ return `openai/${resolveOpenAiCodingModel(model)}`;
6511
+ }
6499
6512
  if (!model) return void 0;
6500
6513
  if (model.startsWith("zen/")) return `opencode/${model.slice("zen/".length)}`;
6501
6514
  if (model.includes("/")) return model;
@@ -6956,7 +6969,16 @@ var CodexTuiAdapter = class {
6956
6969
  cli_auth_credentials_store: "file",
6957
6970
  sqlite_home: codexSqliteHome(this.env),
6958
6971
  approval_policy: "never",
6959
- sandbox_mode: input.options.permissionMode === "plan" ? "read-only" : "danger-full-access",
6972
+ // Always full access, plan mode included. Codex's own read-only mode is
6973
+ // bubblewrap on Linux, which needs user namespaces the GKE pod spec
6974
+ // forbids (seccomp RuntimeDefault, no unprivileged userns): every shell
6975
+ // command died with "bwrap: No permissions to create a new namespace"
6976
+ // before it started. A non-full-access sandbox under approval_policy
6977
+ // "never" also rejects every mutating MCP call ("MCP tool call requires
6978
+ // approval"), so the agent could not even report the blocker. Plan
6979
+ // sessions stay read-only the way Claude and OpenCode plan sessions do:
6980
+ // reader GitHub token, mode prompt, disposable pod.
6981
+ sandbox_mode: "danger-full-access",
6960
6982
  developer_instructions: [
6961
6983
  input.options.appendSystemPrompt,
6962
6984
  "Conveyor workflow skills are stored in .claude/skills in the workspace. When instructed to run a /skill-name skill, read .claude/skills/skill-name/SKILL.md and follow its instructions. This is a file-based workflow, not a native slash command."
@@ -6981,9 +7003,8 @@ var CodexTuiAdapter = class {
6981
7003
  if (input.pluginPath) args.push("--profile", basename(dirname3(input.pluginPath)));
6982
7004
  for (const [key, value] of Object.entries(config))
6983
7005
  args.push("-c", `${key}=${tomlValue(value)}`);
6984
- const model = this.env.CONVEYOR_AGENT_MODEL ?? input.options.model;
6985
- if (model && !/^(anthropic\/|claude-)/.test(model))
6986
- args.push("--model", model.replace(/^openai\//, ""));
7006
+ const model = resolveOpenAiCodingModel(this.env.CONVEYOR_AGENT_MODEL ?? input.options.model);
7007
+ args.push("--model", model);
6987
7008
  if (input.resume) args.push("resume", input.resume);
6988
7009
  if (input.initialPrompt) args.push("--", input.initialPrompt);
6989
7010
  return { file: this.resolveBinary(), args, env, cleanupPaths };
@@ -7475,6 +7496,9 @@ function formatBaseSync(packBranch, devBranch) {
7475
7496
  function resolveMergedWorkBranch(context) {
7476
7497
  return context.featureBranch && context.githubBranch ? context.githubBranch : context.baseBranch;
7477
7498
  }
7499
+ function resolveSinglePodPackBranch(context) {
7500
+ return context.githubBranch || context.baseBranch;
7501
+ }
7478
7502
  function buildPackRunnerSystemPrompt(context, config, setupLog) {
7479
7503
  const mergedWorkBranch = resolveMergedWorkBranch(context);
7480
7504
  const parts = [
@@ -7549,7 +7573,7 @@ function buildPackRunnerSystemPrompt(context, config, setupLog) {
7549
7573
  return parts.join("\n");
7550
7574
  }
7551
7575
  function buildSinglePodPackPrompt(context, config, setupLog) {
7552
- const packBranch = resolveMergedWorkBranch(context);
7576
+ const packBranch = resolveSinglePodPackBranch(context);
7553
7577
  const parts = [
7554
7578
  `You are an autonomous Pack Runner for the "${context.title}" pack, and you implement the work yourself.`,
7555
7579
  ``,
@@ -7563,7 +7587,7 @@ function buildSinglePodPackPrompt(context, config, setupLog) {
7563
7587
  `- Children get NO branches and NO pull requests here. \`create_pull_request\` always opens the PR for the card you are bound to, so calling it mid-pack opens the PARENT's PR early and strands the remaining children. One PR, at the very end, for this parent.`,
7564
7588
  `- You move each child's status yourself: \`update_task(task_id: <child>, status: ...)\`. No per-child build fires, so a status you do not write is a board that silently lies. A child is "ReviewDev" once its commits are on \`${packBranch}\`.`,
7565
7589
  `- \`start_child_cloud_build\` and \`stop_child_build\` belong to the fan-out model and are not available to you \u2014 you are the implementer.`,
7566
- `- Merge \`origin/dev\` into \`${packBranch}\` after each child, never rebase: the branch is shared with WIP refs and rewriting it breaks them.`,
7590
+ `- Merge \`origin/${context.baseBranch}\` into \`${packBranch}\` after each child, never rebase: the branch is shared with WIP refs and rewriting it breaks them.`,
7567
7591
  `- Nothing will wake you to start the next child. Go idle only when genuinely blocked on something external.`,
7568
7592
  ``
7569
7593
  ];
package/dist/cli.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  resolveTuiKindFromEnv,
28
28
  runUsageProbe,
29
29
  sampleKeyUsage
30
- } from "./chunk-SKMNL6C2.js";
30
+ } from "./chunk-UP5CGWRY.js";
31
31
  import "./chunk-SR66HQKB.js";
32
32
  import {
33
33
  inheritedEnv,
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SessionRunner,
3
3
  unshallowRepo
4
- } from "./chunk-SKMNL6C2.js";
4
+ } from "./chunk-UP5CGWRY.js";
5
5
  import "./chunk-SR66HQKB.js";
6
6
  import "./chunk-JG3VMWRQ.js";
7
7
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rallycry/conveyor-agent",
3
- "version": "11.0.13",
3
+ "version": "11.0.15",
4
4
  "description": "Conveyor Agent Runner v10 - PTY harness for the task chat (SDK harness for audit/project-chat). Agent-as-User architecture with BaseService patterns. Works locally too.",
5
5
  "keywords": [
6
6
  "agent",
@@ -1,10 +1,8 @@
1
1
  #!/bin/sh
2
2
  # vnext shim — ALL boot logic lives in `conveyor-agent boot`
3
3
  # (packages/conveyor-agent/src/boot/). Keep this file dumb: env floor, exec.
4
- # The npm self-update preflight is no longer a separate blocking process here —
5
- # `conveyor-agent boot` runs it concurrently with the boot pipeline and gates
6
- # only the runner spawn / workbench daemon on the result (self-update.ts), so
7
- # each container saves a full node+npm process launch on the boot critical path.
4
+ # The runtime self-update is deliberately gone: `conveyor-agent boot` runs the
5
+ # image-baked agent. New versions arrive through the image-refresh path.
8
6
  set -eu
9
7
  export HOME=/home/conveyor
10
8
  export PATH="/home/conveyor/.bun/bin:${PATH}"