cotal-ai 0.73.0 → 0.76.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 (40) hide show
  1. package/package.json +16 -16
  2. package/seeded-connectors/claude/dist/agui-map.d.ts +9 -47
  3. package/seeded-connectors/claude/dist/agui-map.d.ts.map +1 -1
  4. package/seeded-connectors/claude/dist/hook.cjs +13 -11
  5. package/seeded-connectors/claude/dist/index.js +6 -6
  6. package/seeded-connectors/claude/dist/mcp.cjs +789 -333
  7. package/seeded-connectors/claude/package.json +1 -1
  8. package/seeded-connectors/codex/dist/host.d.ts.map +1 -1
  9. package/seeded-connectors/codex/dist/host.js +742 -293
  10. package/seeded-connectors/codex/dist/index.js +6 -6
  11. package/seeded-connectors/codex/package.json +1 -1
  12. package/seeded-connectors/hermes/dist/index.js +6 -6
  13. package/seeded-connectors/hermes/dist/launch.js +735 -266
  14. package/seeded-connectors/hermes/package.json +1 -1
  15. package/seeded-connectors/hermes/plugin/cotal/_sidecar/standalone.cjs +687 -227
  16. package/seeded-connectors/jcode/dist/host.d.ts.map +1 -1
  17. package/seeded-connectors/jcode/dist/host.js +43032 -42579
  18. package/seeded-connectors/jcode/dist/index.js +6 -6
  19. package/seeded-connectors/jcode/dist/mcp.js +115 -34
  20. package/seeded-connectors/jcode/package.json +1 -1
  21. package/seeded-connectors/opencode/dist/index.js +6 -6
  22. package/seeded-connectors/opencode/dist/launch.d.ts.map +1 -1
  23. package/seeded-connectors/opencode/dist/launch.js +13 -5
  24. package/seeded-connectors/opencode/dist/plugin/index.js +718 -254
  25. package/seeded-connectors/opencode/dist/plugin.d.ts.map +1 -1
  26. package/seeded-connectors/opencode/dist/plugin2.d.ts.map +1 -1
  27. package/seeded-connectors/opencode/dist/serve.js +13 -5
  28. package/seeded-connectors/opencode/package.json +1 -1
  29. package/seeded-connectors/pi/dist/extension.d.ts.map +1 -1
  30. package/seeded-connectors/pi/dist/index.js +252 -113
  31. package/seeded-connectors/pi/dist/standalone.js +729 -270
  32. package/seeded-connectors/pi/package.json +1 -1
  33. package/seeded-connectors/web/dist/web/app.js +1 -3
  34. package/seeded-connectors/web/dist/web/graph.js +1 -1
  35. package/seeded-connectors/web/dist/web/parts.js +8 -2
  36. package/seeded-connectors/web/dist/web.d.ts +27 -36
  37. package/seeded-connectors/web/dist/web.d.ts.map +1 -1
  38. package/seeded-connectors/web/dist/web.js +75 -108
  39. package/seeded-connectors/web/dist/web.js.map +1 -1
  40. package/seeded-connectors/web/package.json +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cotal-ai",
3
- "version": "0.73.0",
3
+ "version": "0.76.0",
4
4
  "description": "Cotal — lateral agent coordination over NATS. Run `npx cotal-ai` for the CLI.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -33,24 +33,24 @@
33
33
  "node": ">=22"
34
34
  },
35
35
  "dependencies": {
36
- "@cotal-ai/auth": "0.73.0",
37
- "@cotal-ai/cli": "0.73.0",
38
- "@cotal-ai/connector-core": "0.73.0",
39
- "@cotal-ai/core": "0.73.0",
40
- "@cotal-ai/delivery": "0.73.0",
41
- "@cotal-ai/manager": "0.73.0",
42
- "@cotal-ai/runtime": "0.73.0",
43
- "@cotal-ai/workspace": "0.73.0"
36
+ "@cotal-ai/auth": "0.76.0",
37
+ "@cotal-ai/cli": "0.76.0",
38
+ "@cotal-ai/connector-core": "0.76.0",
39
+ "@cotal-ai/core": "0.76.0",
40
+ "@cotal-ai/delivery": "0.76.0",
41
+ "@cotal-ai/manager": "0.76.0",
42
+ "@cotal-ai/runtime": "0.76.0",
43
+ "@cotal-ai/workspace": "0.76.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@cotal-ai/connector-claude-code": "0.73.0",
47
- "@cotal-ai/connector-codex": "0.73.0",
48
- "@cotal-ai/connector-hermes": "0.73.0",
49
- "@cotal-ai/connector-jcode": "0.73.0",
50
- "@cotal-ai/connector-opencode": "0.73.0",
51
- "@cotal-ai/pi": "0.73.0",
46
+ "@cotal-ai/connector-claude-code": "0.76.0",
47
+ "@cotal-ai/connector-codex": "0.76.0",
48
+ "@cotal-ai/connector-hermes": "0.76.0",
49
+ "@cotal-ai/connector-jcode": "0.76.0",
50
+ "@cotal-ai/connector-opencode": "0.76.0",
51
+ "@cotal-ai/pi": "0.76.0",
52
52
  "@cotal-ai/smoke-kit": "0.0.0",
53
- "@cotal-ai/web": "0.73.0",
53
+ "@cotal-ai/web": "0.76.0",
54
54
  "@nats-io/jetstream": "^3.4.0",
55
55
  "@nats-io/transport-node": "^3.4.0",
56
56
  "typescript": "^5.9.3"
@@ -8,23 +8,13 @@
8
8
  * imported from `connector-core` and nothing about Claude goes back the other way.
9
9
  *
10
10
  * ---------------------------------------------------------------------------------------------
11
- * THREE THINGS THE PLAN DOES NOT SETTLE, RECORDED AS GAPS RATHER THAN DECIDED HERE.
11
+ * THREE THINGS THE PLAN DID NOT SETTLE.
12
12
  *
13
- * **(A) The run brackets have no vehicle, and this is a real plan defect, not a detail.** §3.1
14
- * sources `RUN_STARTED` from the `UserPromptSubmit` hook and `RUN_FINISHED` from the `Stop` hook
15
- * (`mcp.ts:72`, `:96`). But `[P6]`/§5.4 makes the durable plane READ A FILE, and the emitter's
16
- * mapper is `(record) => events` — a hook fires in a different process at a different time and
17
- * produces NO JSONL record, so there is no vehicle by which a hook-sourced event can enter a
18
- * record-sourced stream. The two halves of the design were specified against different inputs.
19
- *
20
- * What this file does instead is stated plainly so a ruling can replace it in one function:
21
- * **brackets are derived from the record stream.** A human prompt opens a run; the NEXT human
22
- * prompt closes the previous one. Two consequences, both of which a reader must know:
23
- * 1. `RUN_FINISHED` lags by one turn. It is emitted when the next turn starts, not when the turn
24
- * ends, so a consumer sees the finish later than the `Stop` hook would have said it.
25
- * 2. **The last run of a session never closes.** There is no record after it to close it on.
26
- * Neither is silently absorbed: {@link closeOpenRun} exists so the connector's `Stop` hook can shut
27
- * the run at the real boundary once a vehicle is ruled, and until then the lag is honest.
13
+ * **(A) The record stream cannot see a turn end.** A hook fires in a different process and writes
14
+ * no JSONL record, so on records alone a run closes only when the next prompt opens one, and the
15
+ * last run of a session never closes. The `Stop` and `StopFailure` hooks therefore close the open
16
+ * run through the emitter holder (`AguiEmitterHolder.closeRun`) at the real boundary, and the
17
+ * holder reports the closed run back through {@link ClaudeMapper.forgetOpenRun}.
28
18
  *
29
19
  * **(B) `origin.kind === "human"` OPENS NO RUN IN ANY AGENT-DRIVEN SESSION — MEASURED on three, and
30
20
  * this is why the mapping smoke reads a real session rather than a fixture.** §3.1's rule is right
@@ -61,8 +51,7 @@
61
51
  * peer-initiated turn can be a turn without re-emitting the peer's content. See
62
52
  * {@link ORIGIN_RULE} and {@link ABSENT_ORIGIN_RULE}, which are where this lives.
63
53
  *
64
- * On the 5938-record session the real mapper opens **67 runs** and emits **5217 events**, and
65
- * `diagnose()` returns `null`.
54
+ * On the 5938-record session the real mapper opens **67 runs** and emits **5217 events**.
66
55
  *
67
56
  * **DO NOT "FIX" THIS BY TREATING ABSENT `origin` AS HUMAN.** In a Claude session `user` is also the
68
57
  * role of a TOOL RESULT: that predicate selects **825** of the interactive session's 892 user
@@ -90,7 +79,7 @@
90
79
  * repeatedly and collapses text and reasoning into a single message in the reference reducer. The
91
80
  * provider id is preserved as `cotal.providerMessageId`, which is what it is good for.
92
81
  */
93
- import { type AguiEvent, type RecordMapper } from "@cotal-ai/connector-core";
82
+ import { type RecordMapper } from "@cotal-ai/connector-core";
94
83
  /**
95
84
  * One JSONL entry, typed to what the mapping actually reads and no further.
96
85
  *
@@ -160,23 +149,9 @@ export interface ClaudeMapperOptions {
160
149
  */
161
150
  now?: () => number;
162
151
  }
163
- /** What {@link createClaudeMapper} returns: the mapper plus the out-of-band run close. */
152
+ /** What {@link createClaudeMapper} returns: the mapper plus the report of a run the emitter closed. */
164
153
  export interface ClaudeMapper {
165
154
  map: RecordMapper<ClaudeEntry>;
166
- /**
167
- * Close the open run, if there is one, at a boundary the record stream cannot see — the `Stop`
168
- * hook. Returns `null` when no run is open, so calling it twice is not an error and cannot
169
- * manufacture a second `RUN_FINISHED` the bracket machine would refuse.
170
- *
171
- * It exists because gap (A) above is a gap: the durable plane has no way to hear a hook today,
172
- * and this is the seam a ruling plugs into rather than a rewrite.
173
- */
174
- closeOpenRun: (timestamp: number, stopReason?: string) => {
175
- runId: string;
176
- events: AguiEvent[];
177
- } | null;
178
- /** The run currently open, or `null`. Read-only view for a caller that needs to know. */
179
- openRun: () => string | null;
180
155
  /**
181
156
  * Forget a run the EMITTER closed out of band, so this mapper stops treating it as open.
182
157
  *
@@ -194,19 +169,6 @@ export interface ClaudeMapper {
194
169
  * send. A run that is not the one named is left exactly as it is.
195
170
  */
196
171
  forgetOpenRun: (runId: string) => void;
197
- /**
198
- * **WHY THIS SESSION OPENED NO RUNS** — a sentence, or `null` once any run has opened.
199
- *
200
- * A mapper that opens zero runs is byte-indistinguishable from a session nobody prompted, and
201
- * from a mapper that is simply broken. Refusing a record is a legitimate outcome; refusing it
202
- * SILENTLY is not, and the silence is the defect, not the refusal. This is the production
203
- * statement of that — it lives in the shipped mapper, not in a smoke summary, so the connector
204
- * and any operator reading it get the same sentence the suite does.
205
- *
206
- * It is deliberately NOT a throw. Some sessions genuinely contain no prompt yet, and a mapper
207
- * that threw on one would take down a live connector over an empty file.
208
- */
209
- diagnose: () => string | null;
210
172
  }
211
173
  export declare function createClaudeMapper(opts: ClaudeMapperOptions): ClaudeMapper;
212
174
  //# sourceMappingURL=agui-map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agui-map.d.ts","sourceRoot":"","sources":["../src/agui-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AACH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EAalB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KAClC,CAAC;CACH;AAmHD,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC/B;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACxG,yFAAyF;IACzF,OAAO,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;;;;;;;;;;;OAeG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;;;;;;;;;OAWG;IACH,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAC/B;AAiBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAuP1E"}
1
+ {"version":3,"file":"agui-map.d.ts","sourceRoot":"","sources":["../src/agui-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,OAAO,EAEL,KAAK,YAAY,EAalB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KAClC,CAAC;CACH;AAmHD,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,uGAAuG;AACvG,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC/B;;;;;;;;;;;;;;;OAeG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAiBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAyM1E"}
@@ -389,7 +389,7 @@ var require_util = __commonJS({
389
389
  exports2.jitter = jitter;
390
390
  exports2.backoff = backoff;
391
391
  exports2.nanos = nanos6;
392
- exports2.millis = millis;
392
+ exports2.millis = millis2;
393
393
  exports2.randomToken = randomToken;
394
394
  var encoders_1 = require_encoders();
395
395
  var errors_1 = require_errors();
@@ -444,11 +444,11 @@ var require_util = __commonJS({
444
444
  });
445
445
  return Object.assign(p, methods);
446
446
  }
447
- async function deadline(p, millis2 = 1e3) {
447
+ async function deadline(p, millis3 = 1e3) {
448
448
  const d = deferred();
449
449
  const timer = setTimeout(() => {
450
450
  d.reject(new errors_1.TimeoutError());
451
- }, millis2);
451
+ }, millis3);
452
452
  try {
453
453
  return await Promise.race([p, d]);
454
454
  } finally {
@@ -573,10 +573,10 @@ var require_util = __commonJS({
573
573
  }
574
574
  };
575
575
  }
576
- function nanos6(millis2) {
577
- return millis2 * 1e6;
576
+ function nanos6(millis3) {
577
+ return millis3 * 1e6;
578
578
  }
579
- function millis(ns) {
579
+ function millis2(ns) {
580
580
  return Math.floor(ns / 1e6);
581
581
  }
582
582
  var tokenDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
@@ -10398,10 +10398,10 @@ var require_jsmsg = __commonJS({
10398
10398
  ack() {
10399
10399
  this.doAck(exports2.ACK);
10400
10400
  }
10401
- nak(millis) {
10401
+ nak(millis2) {
10402
10402
  let payload = NAK;
10403
- if (millis) {
10404
- payload = new TextEncoder().encode(`-NAK ${JSON.stringify({ delay: (0, internal_1.nanos)(millis) })}`);
10403
+ if (millis2) {
10404
+ payload = new TextEncoder().encode(`-NAK ${JSON.stringify({ delay: (0, internal_1.nanos)(millis2) })}`);
10405
10405
  }
10406
10406
  this.doAck(payload);
10407
10407
  }
@@ -24341,7 +24341,7 @@ var RECORD_KINDS = {
24341
24341
  mediation: "mediated"
24342
24342
  },
24343
24343
  goalidx: {
24344
- // The MANAGER-ENDPOINT reconcile index (P2 item 2 must-5, Q-B): one atomic unsplit key per
24344
+ // The MANAGER-ENDPOINT reconcile index: one atomic unsplit key per
24345
24345
  // IN-FLIGHT action goal, `goalidx.<e>.<cOwner>.<cActor>.<cUid>.<goalId>`, written CREATE-ONLY
24346
24346
  // by the goal-writer BEFORE the goal bind and DELETED at the terminal. It is the endpoint's
24347
24347
  // OWN durable list of accepted-but-unterminal goals: a successor incarnation (a manager
@@ -24583,7 +24583,7 @@ var BASELINE_DELIVERY_ENDPOINT = "delivery";
24583
24583
  var BASELINE_DELIVERY_COMMANDS = Object.freeze(["join", "leave", "list"]);
24584
24584
  var BASELINE_LIFECYCLE_ENDPOINT = "manager";
24585
24585
  var BASELINE_SELF_LIFECYCLE_COMMANDS = Object.freeze(["stop", "turn-pending", "turn-yield", "run-answer"]);
24586
- var SPAWN_CREATE_COMMANDS = Object.freeze(["spawn"]);
24586
+ var SPAWN_CREATE_COMMANDS = Object.freeze(["spawn", "resolve-agent"]);
24587
24587
  var SPAWN_OWNER_LIFECYCLE_COMMANDS = Object.freeze(["despawn", "attach"]);
24588
24588
  var OPERATOR_SEAT_COMMANDS = Object.freeze(["input", "turn"]);
24589
24589
  var SPAWN_SERVICE_COMMANDS = Object.freeze(["define-persona", "inspect", "list-personas", "show-persona", "goal-result"]);
@@ -26617,9 +26617,11 @@ var Registry = class {
26617
26617
  var registry2 = new Registry();
26618
26618
 
26619
26619
  // ../../packages/core/dist/remote-manager-authority.js
26620
+ var REMOTE_MANAGER_AUTHORITY_OPERATIONS = Object.freeze(["prepare", "activate", "renew", "session", "retire", "renewStandingBundle", "renewRunDriver", "transferReader"]);
26620
26621
  var MANAGED_AGENT_RUNTIME_STATES = Object.freeze(["reserved", "creating", "bound", "create-unknown", "closing", "closed"]);
26621
26622
  var MANAGED_AGENT_RUNTIME_READINESS = Object.freeze(["ready", "bound-not-ready", "none"]);
26622
26623
  var MANAGED_AGENT_RETIREMENT_PHASES = Object.freeze(["intent", "released", "retired", "deprovisioned", "terminal"]);
26624
+ var REMOTE_MANAGER_IDENTITY_NAMES = Object.freeze(["supervisor", "executor", "serve", "goalWriter", "sessionLedger"]);
26623
26625
 
26624
26626
  // ../../packages/core/dist/agui-kind.js
26625
26627
  var AGUI_EVENT_TYPE = Object.freeze({
@@ -24,13 +24,13 @@ import { DEFAULT_SERVER, DEV_OWNER, LAUNCH_MATERIAL_ENV as LAUNCH_MATERIAL_ENV2,
24
24
  import { LAUNCH_MATERIAL_ENV, readLaunchMaterial } from "@cotal-ai/core/launch-material";
25
25
 
26
26
  // ../connector-core/dist/agent.js
27
- import { normalizeMentions, RUN_LAUNCH_DEADLINE_MS, subjectMatches, isConcreteChannel as isConcreteChannel2, assertValidChannel as assertValidChannel2, channelInAllow as channelInAllow2, resolvePeer as resolvePeerInRoster, peerLabel as peerLabel2, CotalEndpoint, BASELINE_LIFECYCLE_ENDPOINT as BASELINE_LIFECYCLE_ENDPOINT2, BIND_SPLIT_REISSUES, assertLifecycleToken as assertLifecycleToken3, EpEnvelopeError, isPublishPermissionDenied, unansweredRequest, renderLifecycleBlocked, controlReplyFrom, runAgentBearer, partsToText, assertValidRole } from "@cotal-ai/core";
27
+ import { normalizeMentions, RUN_LAUNCH_DEADLINE_MS, subjectMatches, isConcreteChannel as isConcreteChannel2, assertValidChannel as assertValidChannel2, channelInAllow as channelInAllow2, resolvePeer as resolvePeerInRoster, peerLabel as peerLabel2, CotalEndpoint, acquireLocalConsumer, BASELINE_LIFECYCLE_ENDPOINT as BASELINE_LIFECYCLE_ENDPOINT2, BIND_SPLIT_REISSUES, assertLifecycleToken as assertLifecycleToken2, EpEnvelopeError, isPublishPermissionDenied, unansweredRequest, renderLifecycleBlocked, controlReplyFrom, runAgentBearer, partsToText, assertValidRole } from "@cotal-ai/core";
28
28
 
29
29
  // ../connector-core/dist/framing.js
30
30
  import { peerLabel } from "@cotal-ai/core";
31
31
 
32
32
  // ../connector-core/dist/manager-call.js
33
- import { BASELINE_LIFECYCLE_ENDPOINT, assertLifecycleToken as assertLifecycleToken2, dialerFor, goalFollowRefusal, invokeCommand, isPermissionDenied, issuedUserCaller, replyRefusedBeforeEffect, resolveService, standaloneConnectOpts } from "@cotal-ai/core";
33
+ import { BASELINE_LIFECYCLE_ENDPOINT, dialerFor, goalFollowRefusal, invokeCommand, isPermissionDenied, issuedUserCaller, managerCallerBinding, replyRefusedBeforeEffect, resolveService, standaloneConnectOpts } from "@cotal-ai/core";
34
34
 
35
35
  // ../connector-core/dist/runtime.js
36
36
  import { tmpdir } from "node:os";
@@ -145,11 +145,11 @@ function launchEnv(opts = {}) {
145
145
  }
146
146
  function aclEnv(opts) {
147
147
  const env = {};
148
- if (opts.subscribe?.length)
148
+ if (opts.subscribe)
149
149
  env.COTAL_SUBSCRIBE = opts.subscribe.join(",");
150
- if (opts.allowSubscribe?.length)
150
+ if (opts.allowSubscribe)
151
151
  env.COTAL_ALLOW_SUBSCRIBE = opts.allowSubscribe.join(",");
152
- if (opts.allowPublish?.length)
152
+ if (opts.allowPublish)
153
153
  env.COTAL_ALLOW_PUBLISH = opts.allowPublish.join(",");
154
154
  if (opts.capabilities?.length)
155
155
  env.COTAL_CAPABILITIES = opts.capabilities.join(",");
@@ -14888,7 +14888,7 @@ function date4(params) {
14888
14888
  config(en_default());
14889
14889
 
14890
14890
  // ../connector-core/dist/tool-specs.js
14891
- import { isConcreteChannel as isConcreteChannel3, channelInAllow as channelInAllow3, AmbiguousPeerError, peerLabel as peerLabel4, assertLifecycleToken as assertLifecycleToken4, isPermissionDenied as isPermissionDenied2, renderLifecycleBlocked as renderLifecycleBlocked2, LANG_PROBLEM_DETAIL_KIND, formatAge, presenceAges } from "@cotal-ai/core";
14891
+ import { isConcreteChannel as isConcreteChannel3, channelInAllow as channelInAllow3, AmbiguousPeerError, peerLabel as peerLabel4, assertLifecycleToken as assertLifecycleToken3, isPermissionDenied as isPermissionDenied2, renderLifecycleBlocked as renderLifecycleBlocked2, EpEnvelopeError as EpEnvelopeError2, LANG_PROBLEM_DETAIL_KIND, formatAge, presenceAges } from "@cotal-ai/core";
14892
14892
 
14893
14893
  // ../connector-core/dist/orientation.js
14894
14894
  import { peerLabel as peerLabel3 } from "@cotal-ai/core";