borgmcp 3.9.0 → 3.10.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/SECURITY.md +1 -1
  2. package/dist/claude.js +3 -3
  3. package/dist/claude.js.map +1 -1
  4. package/dist/cli-help.js +5 -5
  5. package/dist/cli-help.js.map +1 -1
  6. package/dist/cubes.js +2 -2
  7. package/dist/cubes.js.map +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +4 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/log-stream.d.ts +6 -2
  12. package/dist/log-stream.d.ts.map +1 -1
  13. package/dist/log-stream.js +36 -11
  14. package/dist/log-stream.js.map +1 -1
  15. package/dist/opencode-drone.d.ts +7 -2
  16. package/dist/opencode-drone.d.ts.map +1 -1
  17. package/dist/opencode-drone.js +291 -64
  18. package/dist/opencode-drone.js.map +1 -1
  19. package/dist/opencode-plugin.d.ts.map +1 -1
  20. package/dist/opencode-plugin.js +12 -2
  21. package/dist/opencode-plugin.js.map +1 -1
  22. package/dist/remote-client.d.ts +13 -0
  23. package/dist/remote-client.d.ts.map +1 -1
  24. package/dist/remote-client.js +25 -0
  25. package/dist/remote-client.js.map +1 -1
  26. package/dist/seat-commands.js +12 -12
  27. package/dist/seat-commands.js.map +1 -1
  28. package/dist/stream-status.d.ts.map +1 -1
  29. package/dist/stream-status.js +1 -0
  30. package/dist/stream-status.js.map +1 -1
  31. package/dist/unknown-subcommand.d.ts +1 -1
  32. package/dist/unknown-subcommand.d.ts.map +1 -1
  33. package/dist/unknown-subcommand.js +1 -1
  34. package/dist/unknown-subcommand.js.map +1 -1
  35. package/docs/RELEASING.md +94 -23
  36. package/package.json +1 -1
  37. package/src/claude.ts +3 -3
  38. package/src/cli-help.ts +5 -5
  39. package/src/cubes.ts +2 -2
  40. package/src/index.ts +4 -1
  41. package/src/log-stream.ts +49 -12
  42. package/src/opencode-drone.ts +328 -65
  43. package/src/opencode-plugin.ts +13 -1
  44. package/src/remote-client.ts +36 -0
  45. package/src/seat-commands.ts +12 -12
  46. package/src/stream-status.ts +3 -0
  47. package/src/unknown-subcommand.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"stream-status.js","sourceRoot":"","sources":["../src/stream-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream-status.js","sourceRoot":"","sources":["../src/stream-status.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@
11
11
  * (`--cli`, `--remote`, agent passthrough, …) still fall through to launch.
12
12
  */
13
13
  /** The subcommands the claude.ts router dispatches on (lines 107-176). */
14
- export declare const KNOWN_SUBCOMMANDS: readonly ["setup", "update", "doctor", "assimilate", "reset-local-connection", "recover-enrollment", "spawn", "cleanup", "seats", "launch", "launch-all", "server"];
14
+ export declare const KNOWN_SUBCOMMANDS: readonly ["setup", "update", "doctor", "assimilate", "reset-local-connection", "recover-enrollment", "spawn", "cleanup", "drones", "launch", "launch-all", "server"];
15
15
  /**
16
16
  * Returns the offending command string when argv[2] is an unknown non-flag
17
17
  * positional (caller should error + exit 1), or null when it's bare `borg`,
@@ -1 +1 @@
1
- {"version":3,"file":"unknown-subcommand.d.ts","sourceRoot":"","sources":["../src/unknown-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,qKAapB,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK1E"}
1
+ {"version":3,"file":"unknown-subcommand.d.ts","sourceRoot":"","sources":["../src/unknown-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,sKAapB,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK1E"}
@@ -20,7 +20,7 @@ export const KNOWN_SUBCOMMANDS = [
20
20
  'recover-enrollment',
21
21
  'spawn',
22
22
  'cleanup',
23
- 'seats',
23
+ 'drones',
24
24
  'launch',
25
25
  'launch-all',
26
26
  'server',
@@ -1 +1 @@
1
- {"version":3,"file":"unknown-subcommand.js","sourceRoot":"","sources":["../src/unknown-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,wBAAwB;IACxB,oBAAoB;IACpB,OAAO;IACP,SAAS;IACT,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,QAAQ;CACA,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,CAAC,cAAc;IACpD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,8BAA8B;IACtE,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,OAAO,KAAK,CAAC,CAAC,wCAAwC;AACxD,CAAC"}
1
+ {"version":3,"file":"unknown-subcommand.js","sourceRoot":"","sources":["../src/unknown-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,wBAAwB;IACxB,oBAAoB;IACpB,OAAO;IACP,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,QAAQ;CACA,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,CAAC,cAAc;IACpD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,8BAA8B;IACtE,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,OAAO,KAAK,CAAC,CAAC,wCAAwC;AACxD,CAAC"}
package/docs/RELEASING.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Publishing `borgmcp`
2
2
 
3
- The GitHub Actions workflow publishes one immutable, reviewed `borgmcp` version
4
- from a protected annotated tag. The protected publish job uses npm Trusted
5
- Publishing; no long-lived npm token is stored or exposed.
3
+ The GitHub Actions workflow submits one immutable, reviewed `borgmcp` tarball to
4
+ npm staged publishing from a protected annotated tag. A designated operator
5
+ later approves that stage to make the version live. The protected stage job uses
6
+ npm Trusted Publishing; no long-lived npm token is stored or exposed.
6
7
 
7
8
  ## Release Integrity
8
9
 
@@ -22,9 +23,9 @@ Before creating the release tag, independently verify all of these conditions:
22
23
  - the exact audited registry dependency `borgmcp-shared@0.11.0` remains locked to
23
24
  its canonical tarball and integrity
24
25
  `sha512-I8mixCbSrLKyOAAyqEI/HZJ8cML2rz3r812Up8pr547OdAk9LxZevdCo7ojG42ZwrUmS5u7iKQPg7Vk1XvtX1g==`;
25
- - the coupled client/server release is published only after the server artifact
26
- is rebuilt against `borgmcp-shared@0.11.0` and both pass the complete local
27
- dogfood gate;
26
+ - the coupled shared/server/client candidates have all been built against the
27
+ same exact `borgmcp-shared` version and passed the complete local dogfood gate
28
+ before any stage is approved;
28
29
  - the selected stable client version is unused and the exact release commit is
29
30
  on protected `main`;
30
31
  - the repository and protected npm environment settings pass an operator audit;
@@ -54,7 +55,9 @@ Before preparing a candidate, independently verify:
54
55
  existing `borgmcp` package. It must contain no npm token.
55
56
  2. npm Trusted Publishing is configured for organization `Byte-Ventures`,
56
57
  repository `borg-mcp-client`, workflow `publish.yml`, and environment
57
- `npm-publish`.
58
+ `npm-publish`. Its allowed actions enable `npm stage publish` and disable
59
+ direct `npm publish`; package publishing requires two-factor authentication
60
+ and disallows tokens.
58
61
  3. `refs/tags/v*.*.*` cannot be updated, deleted, or force-moved. Release tags
59
62
  are annotated, match the package version, and point to a commit on protected
60
63
  `main`.
@@ -292,40 +295,97 @@ The unprivileged `verify` job performs one sequence:
292
295
  release artifact.
293
296
 
294
297
  After `verify` succeeds, the designated Queen operator alone approves the
295
- `npm-publish` environment. There is no separate pre-publication exact-artifact
298
+ `npm-publish` environment. There is no separate pre-stage exact-artifact
296
299
  Security gate: the verify job is the mechanical authority for the exact bytes
297
- that the publish job consumes. Environment approval authorizes publication; it
298
- does not permit a rerun, a rebuilt artifact, or approval by another actor.
300
+ that the stage job consumes. Environment approval authorizes submitting those
301
+ bytes to npm's private staged-publishing service; it does not make the version
302
+ public, permit a rerun or rebuilt artifact, or authorize approval by another
303
+ actor.
299
304
 
300
305
  The protected `publish` job alone receives `id-token: write`. It downloads the
301
306
  same-run artifact and rejects a report whose package name or version differs
302
307
  from the release, a version that already exists, an unclaimed package, or an
303
308
  owner set that differs from `NPM_EXPECTED_OWNER`. It requires the GitHub OIDC
304
- request context, rejects a legacy `NODE_AUTH_TOKEN`, and publishes the exact
305
- tarball path once with lifecycle scripts disabled and provenance enabled. It
309
+ request context, rejects a legacy `NODE_AUTH_TOKEN`, and stages the exact tarball
310
+ path once with lifecycle scripts disabled and provenance enabled. It
306
311
  does not install project dependencies, rebuild, retest, repack, or reverify the
307
312
  package.
308
313
 
309
- Successful completion of `npm publish` is the terminal release boundary. There
310
- is no post-publication registry readback job: registry metadata and install
311
- visibility propagate asynchronously and cannot invalidate an immutable
312
- publication after npm accepts it.
314
+ Successful completion of the workflow means npm accepted the immutable staged
315
+ tarball. It does not mean the version is public. Stage acceptance consumes the
316
+ tagged attempt and version under the burned-version rule, but must not trigger
317
+ release announcements, issue closure, consumer pins, site synchronization, or
318
+ claims that the version was published. There is no workflow registry readback:
319
+ stage inspection and approval require an interactive npm identity and cannot use
320
+ the workflow's OIDC credential.
321
+
322
+ ### Coupled stage approval
323
+
324
+ Before approving anything, the operator requires successful stage workflows for
325
+ `borgmcp-shared`, `borgmcp-server`, and `borgmcp`. Use authenticated
326
+ `npm stage list` and `npm stage view <UUID>` to record and inspect all three stage
327
+ UUIDs and verify each package, version, and eventual `latest` tag. For every
328
+ package, `npm stage download <UUID>` is mandatory; compute its SHA-512 SRI and
329
+ require an exact match with that workflow run's same-run artifact report. Bind
330
+ the source annotated tag object, commit, and workflow run separately from GitHub
331
+ evidence, because npm stage inspection does not expose them. Exercise the exact
332
+ downloaded coupled set before approval. Confirm that public `latest`, public
333
+ `versions`, and client update resolution still expose the prior coherent release
334
+ set. If a pending stage appears on any public surface, approve nothing and halt
335
+ this mechanism before consumers can observe it.
336
+
337
+ Approve the verified UUIDs in one operator session, using interactive 2FA, in
338
+ this exact order:
339
+
340
+ 1. `npm stage approve <shared-stage-uuid>`
341
+ 2. `npm stage approve <server-stage-uuid>`
342
+ 3. `npm stage approve <client-stage-uuid>`
343
+
344
+ The approvals are not atomic. Shared approval leaves existing client and server
345
+ pins coherent. Server approval opens a bounded mismatch window between public
346
+ server `latest` and client `latest`; client approval closes it. After an approval
347
+ returns successfully, continue only while the next stage remains valid. For an
348
+ ambiguous result, inspect authenticated stage state and canonical public package
349
+ version/integrity before acting; never repeat an approval blindly.
350
+
351
+ The terminal release boundary is successful interactive stage approval followed
352
+ by canonical registry visibility, integrity verification, and registry
353
+ provenance-attestation inspection. Stage inspection cannot establish provenance
354
+ before approval; Trusted Publishing carries it to the live package, where the
355
+ registry attestation is authoritative. Only then may the release be announced,
356
+ issues closed, consumer pins or site data synchronized, or the version described
357
+ as published.
358
+
359
+ After all three packages cross that boundary, create their GitHub Releases in
360
+ the same shared → server → client operator session. In each package repository,
361
+ run:
362
+
363
+ ```sh
364
+ GITHUB_TOKEN="$(gh auth token)" node scripts/create-github-release.mjs <version>
365
+ ```
366
+
367
+ The script binds the annotated tag, merged release pull request, successful tag
368
+ workflow artifact, and live npm integrity before creating the Release. It copies
369
+ the merged release pull request body verbatim and refuses an existing Release.
313
370
 
314
371
  Separately, once the release is installable from the canonical registry, install
315
372
  it into an isolated prefix and exercise the real user update path end to end.
316
- This is product verification, not publication validation: failure routes a new
373
+ This is product verification, not candidate validation: failure routes a new
317
374
  reviewed fix and never invalidates, rebuilds, retags, or reruns the immutable
318
- release. Do not repeat byte comparisons, integrity/SRI checks, packed-version
319
- checks, source-tree verification, dist-tag readback, or provenance readback that
320
- the exact-artifact `verify` and publish jobs already completed.
375
+ release. Do not repeat byte comparisons, packed-version checks, source-tree
376
+ verification, dist-tag readback, or provenance reconstruction that the
377
+ exact-artifact `verify` and stage jobs already completed. The canonical
378
+ live-version integrity check is required because it establishes the approval
379
+ boundary; it is not a duplicate candidate verification.
321
380
 
322
381
  No separate checksum file is needed: the tarball verifier records canonical
323
382
  SHA-512 SRI in the artifact report. GitHub's same-run artifact transport and the
324
383
  report bind the reviewed candidate without repeated SHA512 choreography.
325
384
 
326
- Rely on npm Trusted Publishing. Do not perform post-publication provenance
327
- readback or reconstruct DSSE, in-toto, SLSA, workflow-ref, or builder statements
328
- locally.
385
+ Rely on npm Trusted Publishing. Perform the one authoritative registry
386
+ provenance-attestation inspection at the approved-live boundary; do not
387
+ reconstruct DSSE, in-toto, SLSA, workflow-ref, or builder statements locally or
388
+ add redundant provenance readback.
329
389
  Do not add cross-run tuple variables, cross-run artifact selection, duplicate
330
390
  builds, duplicate package verification, checksum bundles, or SBOM ceremony.
331
391
 
@@ -336,3 +396,14 @@ authorization evidence is missing or inconsistent. Never move or reuse a failed
336
396
  tag, rerun a failed release workflow, overwrite an npm version, unpublish to hide
337
397
  a failure, or substitute a local rebuild. Recovery starts from a fresh reviewed
338
398
  source change and, after any registry mutation, a separately authorized version.
399
+
400
+ Before any approval, missing or inconsistent stage evidence means approve none.
401
+ Reject all three stages only when abandoning the coupled candidate; Borg treats
402
+ every rejected or unusable tagged stage as burned, even though npm permits some
403
+ re-staging. Replacement versions require fresh review, tags, and stage runs.
404
+ After shared approval but before server approval, stopping is compatibility-safe
405
+ for the existing client/server pair, but shared is immutable and any repair uses
406
+ fresh versions. After server approval, prioritize the already-verified client
407
+ approval because the public pair is mismatched. If that client stage cannot be
408
+ approved, do not reject it or rerun the tag; prepare newly reviewed matching
409
+ server/client recovery versions and state the live mismatch window explicitly.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "borgmcp",
3
- "version": "3.9.0",
3
+ "version": "3.10.0",
4
4
  "description": "Coordinate AI coding agents in shared cubes. Works with Claude Code, Codex, and OpenCode.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/claude.ts CHANGED
@@ -301,11 +301,11 @@ async function main() {
301
301
  const code = await runCleanup({}, parsed.options);
302
302
  process.exit(code);
303
303
  }
304
- if (process.argv[2] === 'seats') {
304
+ if (process.argv[2] === 'drones') {
305
305
  const parsed = parseSeatsArgs(process.argv.slice(3));
306
306
  if (!parsed.ok) {
307
- process.stderr.write(chalk.red(`${consolePrefix()}◼ borg seats: ${parsed.error}\n`));
308
- process.stderr.write(`Run \`borg seats --help\` for usage.\n`);
307
+ process.stderr.write(chalk.red(`${consolePrefix()}◼ borg drones: ${parsed.error}\n`));
308
+ process.stderr.write(`Run \`borg drones --help\` for usage.\n`);
309
309
  process.exit(1);
310
310
  }
311
311
  process.exit(await runSeats(buildDefaultSeatCommandDeps()));
package/src/cli-help.ts CHANGED
@@ -53,10 +53,10 @@ export function launchAllHelpText(version: string): string {
53
53
 
54
54
  export function seatsHelpText(version: string): string {
55
55
  return (
56
- `borg seats (borgmcp ${version}) — list this machine's registered drones\n\n` +
56
+ `borg drones (borgmcp ${version}) — list this machine's registered drones\n\n` +
57
57
  `Usage:\n` +
58
- ` borg seats Show drone, cube, worktree, agent CLI, and local state\n` +
59
- ` borg seats --help Show this help\n\n` +
58
+ ` borg drones Show drone, cube, worktree, agent CLI, and local state\n` +
59
+ ` borg drones --help Show this help\n\n` +
60
60
  `The local registry belongs to this machine only.\n`
61
61
  );
62
62
  }
@@ -95,7 +95,7 @@ export function clientSubcommandHelpText(
95
95
  case 'reset-local-connection': return resetLocalSeatHelpText(version);
96
96
  case 'recover-enrollment': return recoverEnrollmentHelpText(version);
97
97
  case 'cleanup': return cleanupHelpText(version);
98
- case 'seats': return seatsHelpText(version);
98
+ case 'drones': return seatsHelpText(version);
99
99
  case 'launch': return launchSeatHelpText(version);
100
100
  case 'launch-all': return launchAllHelpText(version);
101
101
  case 'doctor': return doctorHelpText(version);
@@ -136,7 +136,7 @@ export function topLevelHelpText(version: string): string {
136
136
  ` borg reset-local-connection Clear ONLY this worktree's saved connection to its cube (offline; after a rejection)\n` +
137
137
  ` borg recover-enrollment Restore or clear ONLY one failed server enrollment transaction\n` +
138
138
  ` borg cleanup [--prune] Report (or --prune) worktrees orphaned by evicted drones\n` +
139
- ` borg seats List this machine's registered drones and worktrees\n` +
139
+ ` borg drones List this machine's registered drones and worktrees\n` +
140
140
  ` borg launch <drone-label-or-id-prefix> Reopen one registered drone from its worktree\n` +
141
141
  ` borg launch-all [cube] Launch all drone worktrees of a cube (default: active cube)\n` +
142
142
  ` borg server <command> [arguments]\n` +
package/src/cubes.ts CHANGED
@@ -91,8 +91,8 @@ export class LaunchSeatIdentityChangedError extends Error {
91
91
 
92
92
  constructor(droneLabel: string) {
93
93
  super(
94
- `borg launch: did not launch '${droneLabel}' — its seat registration changed before the launch could start. ` +
95
- 'Run `borg seats` to see the current state, then try again.',
94
+ `borg launch: did not launch '${droneLabel}' — its registration changed before the launch could start. ` +
95
+ 'Run `borg drones` to see the current state, then try again.',
96
96
  );
97
97
  this.name = 'LaunchSeatIdentityChangedError';
98
98
  }
package/src/index.ts CHANGED
@@ -133,6 +133,7 @@ import { resolveReportableSessionAgentKind } from './agent-runtime.js';
133
133
  import {
134
134
  connectOpenCodeDrone,
135
135
  injectOpenCodeEntry,
136
+ settleOpenCodeEntry,
136
137
  configuredOpenCodePort,
137
138
  OPEN_CODE_PORT_MISSING_DIAGNOSTIC,
138
139
  openCodeLaunchBinding,
@@ -314,7 +315,9 @@ export async function main() {
314
315
  installBorgPlugin();
315
316
  const active = await getActiveCube();
316
317
  if (active && openCodeRuntime) {
317
- if (await connectOpenCodeRuntime(active)) setModuleInjectOpenCode(injectOpenCodeEntry);
318
+ if (await connectOpenCodeRuntime(active)) {
319
+ setModuleInjectOpenCode(injectOpenCodeEntry, settleOpenCodeEntry);
320
+ }
318
321
  }
319
322
  },
320
323
  };
package/src/log-stream.ts CHANGED
@@ -59,6 +59,7 @@ import { formatCubeActivityWakeMessage } from './cube-activity-wake-copy.js';
59
59
  import { readBoundedResponseBody } from './server-response.js';
60
60
  import { BorgServerError } from './server-errors.js';
61
61
  import { markSeatRejected } from './seats.js';
62
+ import { hasPendingWakeEntry as hasPendingDurableWakeEntry } from './remote-client.js';
62
63
  import {
63
64
  acquireStreamLease,
64
65
  readOwnershipSnapshot,
@@ -124,13 +125,16 @@ function isProcessAlive(pid: number): boolean {
124
125
  * Used by defaultDeps when no explicit injectOpenCode is supplied.
125
126
  */
126
127
  let _moduleInjectOpenCode:
127
- | ((text: string, entryId: string, allowSubmit: boolean) => Promise<boolean>)
128
+ | ((text: string, entryId: string, allowSubmit: boolean, sourceEntryId?: string) => Promise<boolean>)
128
129
  | undefined;
130
+ let _moduleSettleOpenCodeEntry: ((sourceEntryId: string) => void) | undefined;
129
131
 
130
132
  export function setModuleInjectOpenCode(
131
- fn: (text: string, entryId: string, allowSubmit: boolean) => Promise<boolean>
133
+ fn: (text: string, entryId: string, allowSubmit: boolean, sourceEntryId?: string) => Promise<boolean>,
134
+ settle: (sourceEntryId: string) => void,
132
135
  ): void {
133
136
  _moduleInjectOpenCode = fn;
137
+ _moduleSettleOpenCodeEntry = settle;
134
138
  }
135
139
 
136
140
  /**
@@ -403,8 +407,13 @@ export interface StreamDeps {
403
407
  injectOpenCode?: (
404
408
  text: string,
405
409
  entryId: string,
406
- allowSubmit: boolean
410
+ allowSubmit: boolean,
411
+ sourceEntryId?: string,
407
412
  ) => Promise<boolean>;
413
+ /** Inspect whether one retry source remains beyond the durable unread cursor. */
414
+ hasPendingWakeEntry?: (active: ActiveCube, entryId: string) => Promise<boolean>;
415
+ /** Clear in-process retry diagnostics after the durable entry is consumed. */
416
+ settleOpenCodeEntry?: (sourceEntryId: string) => void;
408
417
  }
409
418
 
410
419
  const defaultDeps: Required<StreamDeps> = {
@@ -420,10 +429,15 @@ const defaultDeps: Required<StreamDeps> = {
420
429
  abortSignal: new AbortController().signal,
421
430
  ownerDeps: {},
422
431
  ownerStaleMs: 70_000,
423
- injectOpenCode: (text, entryId, allowSubmit) =>
432
+ injectOpenCode: (text, entryId, allowSubmit, sourceEntryId) =>
424
433
  _moduleInjectOpenCode
425
- ? _moduleInjectOpenCode(text, entryId, allowSubmit)
434
+ ? _moduleInjectOpenCode(text, entryId, allowSubmit, sourceEntryId)
426
435
  : Promise.resolve(false),
436
+ hasPendingWakeEntry: (active, entryId) => hasPendingDurableWakeEntry(
437
+ active as Parameters<typeof hasPendingDurableWakeEntry>[0],
438
+ entryId,
439
+ ),
440
+ settleOpenCodeEntry: (sourceEntryId) => _moduleSettleOpenCodeEntry?.(sourceEntryId),
427
441
  };
428
442
 
429
443
  // ------------------------------------------------------------------
@@ -678,6 +692,8 @@ export async function streamOnce(
678
692
  hwmDivergenceGraceMs,
679
693
  abortSignal,
680
694
  injectOpenCode,
695
+ hasPendingWakeEntry,
696
+ settleOpenCodeEntry,
681
697
  } = { ...defaultDeps, ...deps };
682
698
 
683
699
  assertUuidShape(active.cubeId, 'cube_id');
@@ -819,6 +835,17 @@ export async function streamOnce(
819
835
  pendingHwmDivergence = { hwm, timer };
820
836
  };
821
837
 
838
+ const shouldDeliverWakeRetry = async (entryId: string): Promise<boolean> => {
839
+ try {
840
+ if (await hasPendingWakeEntry(active, entryId)) return true;
841
+ settleOpenCodeEntry(entryId);
842
+ } catch {
843
+ // A retry is never authoritative enough to cross the model boundary on
844
+ // its own. The durable inbox and a later retry remain available.
845
+ }
846
+ return false;
847
+ };
848
+
822
849
  // Bounded recent-id set for replay-on-reconnect dedup per spec §(3).
823
850
  // Set + FIFO array for O(1) membership + bounded memory.
824
851
  const recentIds = new Set<string>();
@@ -844,6 +871,10 @@ export async function streamOnce(
844
871
  const line = formatInboxLine(withSseEventId(ev.data, ev.id));
845
872
  const deliveryId = ev.wake_nonce ?? ev.id;
846
873
  const isReping = ev.wake_nonce !== undefined;
874
+ if (isReping && !(await shouldDeliverWakeRetry(ev.id))) {
875
+ markEventPersisted(ev.id, ev.data?.created_at ?? '');
876
+ return 'persisted-skip';
877
+ }
847
878
  const eventHwm = ev.data?.created_at
848
879
  ? { id: ev.id, created_at: ev.data.created_at }
849
880
  : null;
@@ -867,12 +898,11 @@ export async function streamOnce(
867
898
  await hasInboxEntryId(active.cubeId, active.droneId, ev.id, line)
868
899
  );
869
900
  if (alreadyPersisted) {
870
- // An ordinary entry at/before the persisted cursor is already delivered
871
- // and must not re-enter the OpenCode queue. Re-pings are the explicit
872
- // exception: each wake nonce is a new delivery identity even when the
873
- // underlying inbox line is already durable.
901
+ // An ordinary entry at/before the persisted cursor must not re-enter the
902
+ // OpenCode queue. A still-unread re-ping may reconcile the prior attempt;
903
+ // its source entry ID prevents a new nonce from resubmitting that prompt.
874
904
  if (isReping) {
875
- await injectOpenCode(formatOpenCodeWakePrompt(line), deliveryId, true);
905
+ await injectOpenCode(formatOpenCodeWakePrompt(line), deliveryId, true, ev.id);
876
906
  }
877
907
  markEventPersisted(ev.id, ev.data?.created_at ?? '');
878
908
  return 'persisted-skip';
@@ -880,7 +910,10 @@ export async function streamOnce(
880
910
  // The inbox append is the durable record. OpenCode injection is only the
881
911
  // wake attempt and may return before the agent finishes processing.
882
912
  await appendLine(active.cubeId, active.droneId, line);
883
- if (!(await injectOpenCode(formatOpenCodeWakePrompt(line), deliveryId, true))) {
913
+ const openCodeDelivered = isReping
914
+ ? await injectOpenCode(formatOpenCodeWakePrompt(line), deliveryId, true, ev.id)
915
+ : await injectOpenCode(formatOpenCodeWakePrompt(line), deliveryId, true);
916
+ if (!openCodeDelivered) {
884
917
  if (ev.wake_nonce === undefined) wakeCodex(formatCodexWakePrompt(line));
885
918
  else wakeCodex(formatCodexWakePrompt(line), ev.wake_nonce);
886
919
  }
@@ -1198,7 +1231,11 @@ export async function streamOnce(
1198
1231
  if (isRecentWakeReplay) {
1199
1232
  const line = formatInboxLine(withSseEventId(event.data, event.id));
1200
1233
  const wakeNonce = event.wake_nonce;
1201
- if (wakeNonce !== undefined && !(await injectOpenCode(formatOpenCodeWakePrompt(line), wakeNonce, true))) {
1234
+ if (
1235
+ wakeNonce !== undefined &&
1236
+ await shouldDeliverWakeRetry(event.id) &&
1237
+ !(await injectOpenCode(formatOpenCodeWakePrompt(line), wakeNonce, true, event.id))
1238
+ ) {
1202
1239
  wakeCodex(formatCodexWakePrompt(line), wakeNonce);
1203
1240
  }
1204
1241
  continue;