@miraland-labs/conduit-bridge 0.16.20 → 0.16.22

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Local Bridge CLI for [Conduit](https://github.com/miralandlabs/conduit). Connects a computer to one organization, claims work, and drives a local agent.
4
4
 
5
- **Package version:** `0.16.20` — `ops disconnect` now asks before it removes the runner service and clears credentials; pass `--yes` to skip the question. `ops.env` is enrollment/bootstrap defaults only: an explicit workspace does not inherit an old repository, and project switches do not rewrite global project state. `ops enroll` exchanges a single-use token, registers the machine, binds project affinity, provisions fuel keys, brings detected drivers online, and starts the runner in one command. On Linux, `ops install` refuses any effective systemd drop-in. A switch intent remains queued until the target runner heartbeat proves Bound. After every Bridge publish, operators must re-run `ops install` (LaunchAgent pins an absolute `cli.js`).
5
+ **Package version:** `0.16.21` — mutate_repo with `pr_create` opens a pull request even when `change_scope` is empty. `ops disconnect` now asks before it removes the runner service and clears credentials; pass `--yes` to skip the question. `ops.env` is enrollment/bootstrap defaults only: an explicit workspace does not inherit an old repository, and project switches do not rewrite global project state. `ops enroll` exchanges a single-use token, registers the machine, binds project affinity, provisions fuel keys, brings detected drivers online, and starts the runner in one command. On Linux, `ops install` refuses any effective systemd drop-in. A switch intent remains queued until the target runner heartbeat proves Bound. After every Bridge publish, operators must re-run `ops install` (LaunchAgent pins an absolute `cli.js`).
6
6
 
7
7
  ## Prerequisites
8
8
 
package/dist/cli.js CHANGED
@@ -520,7 +520,7 @@ async function runner() {
520
520
  const applied = await maybeApplyOnShiftIntent({
521
521
  currentWorkspace: workspace,
522
522
  onShift: hb.on_shift,
523
- runInstall: async (nextWorkspace, repo) => {
523
+ runInstall: async (nextWorkspace, repo, managedRoot) => {
524
524
  let env;
525
525
  try {
526
526
  env = loadOpsEnv();
@@ -530,7 +530,14 @@ async function runner() {
530
530
  }
531
531
  await runOps("install", [], {
532
532
  env: env
533
- ? { ...env, CONDUIT_WORKSPACE: nextWorkspace, CONDUIT_REPO: repo }
533
+ ? {
534
+ ...env,
535
+ CONDUIT_WORKSPACE: nextWorkspace,
536
+ CONDUIT_REPO: repo,
537
+ CONDUIT_MANAGED_ROOT: managedRoot === undefined
538
+ ? env.CONDUIT_MANAGED_ROOT
539
+ : managedRoot ?? "",
540
+ }
534
541
  : undefined,
535
542
  });
536
543
  },
package/dist/driver.js CHANGED
@@ -131,7 +131,7 @@ export function buildAssignmentPrompt(context) {
131
131
  if (rework)
132
132
  lines.push("", `REWORK FEEDBACK — an independent review returned this delivery; address every point\n${rework}`);
133
133
  const mustCommit = context.grants.includes("repo_write") && context.grants.includes("branch_create");
134
- const mustOpenPr = mustCommit && context.grants.includes("pr_create") && Boolean(changeScope?.length);
134
+ const mustOpenPr = mustCommit && context.grants.includes("pr_create");
135
135
  const executionClass = context.executionClass
136
136
  ?? requireStampedExecutionClass(spec.execution_class);
137
137
  // Phase B: control-plane instruction is additive evidence/class prose.
@@ -29,8 +29,10 @@ export async function commitsAheadOfBase(workspace, base) {
29
29
  }
30
30
  }
31
31
  export function needsPullRequest(report, spec, grants) {
32
+ void spec;
33
+ // Empty change_scope is "whole repo", not "no land". Run 7 committed CANARY.md with pr_create
34
+ // granted and never opened a PR because this used to require a non-empty scope.
32
35
  return Boolean(grants.includes("pr_create")
33
- && (spec.change_scope?.length ?? 0) > 0
34
36
  && report.head_commit
35
37
  && !report.pull_request_url);
36
38
  }
@@ -181,7 +183,7 @@ export async function ensureDeliveryPullRequest(input) {
181
183
  const push = input.pushOriginHead ?? pushOriginHead;
182
184
  const countAhead = input.countCommitsAhead ?? commitsAheadOfBase;
183
185
  let report = adoptPullRequestUrlFromEvidence(input.report, input.repositoryFingerprint);
184
- if ((input.spec.change_scope?.length ?? 0) > 0) {
186
+ if (input.grants.includes("pr_create") || (input.spec.change_scope?.length ?? 0) > 0) {
185
187
  const head = await readHead(input.workspace);
186
188
  if (report.head_commit && !commitsMatch(report.head_commit, head)) {
187
189
  console.error(`Agent head_commit ${report.head_commit} does not match workspace HEAD ${head}; using workspace HEAD`);
package/dist/execution.js CHANGED
@@ -1764,8 +1764,8 @@ export function validateDeliveryReport(report, spec, grants = [], actualPaths) {
1764
1764
  throw new Error("Agent reported repository changes without the repo_write grant");
1765
1765
  }
1766
1766
  // Merge-on-accept lands GitHub PRs. Local attempt commits without a PR never reach main.
1767
+ // Empty change_scope means whole-repo, not "skip the PR" (Run 7).
1767
1768
  if (grants.includes("pr_create")
1768
- && (spec.change_scope?.length ?? 0) > 0
1769
1769
  && report.head_commit
1770
1770
  && !report.pull_request_url) {
1771
1771
  throw new Error("Repository changes require a pull_request_url when pr_create is granted");
@@ -47,6 +47,6 @@ export async function maybeApplyOnShiftIntent(input) {
47
47
  return false;
48
48
  }
49
49
  console.log(`Applying on-shift workspace intent: ${target}${repo ? ` (${repo})` : ""}`);
50
- await input.runInstall(target, repo);
50
+ await input.runInstall(target, repo, input.onShift?.managed_workspace_root);
51
51
  return true;
52
52
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miraland-labs/conduit-bridge",
3
- "version": "0.16.20",
3
+ "version": "0.16.22",
4
4
  "description": "Conduit Bridge CLI — join, connect, disconnect, multi-driver lanes, and run Claude Code / Codex / Cursor / OpenCode / Pi / Kiro / Antigravity / Grok Build agents for a Conduit organization",
5
5
  "type": "module",
6
6
  "bin": {