@ctliz/agent-intercom-codex 0.12.1 → 0.12.2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-intercom",
3
- "version": "0.1.0",
3
+ "version": "0.12.2",
4
4
  "description": "Codex MCP plugin and bridge daemon for local Pi/Codex intercom messaging.",
5
5
  "author": {
6
6
  "name": "ctliz",
package/CHANGELOG.md ADDED
@@ -0,0 +1,128 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.12.2 - 2026-09-30
6
+
7
+ - Synchronize native `thread/name/updated` notifications into Intercom presence without changing stable session IDs; retain the updated name on broker reconnect.
8
+ - Adopt persisted `thread.name` on resume instead of overriding it with launcher defaults.
9
+ - Verify rename notification schemas against Codex CLI 0.155.1 and 0.159.2; keep protocol v4 framing, durable queues, and delivery ACK semantics unchanged.
10
+
11
+ ## 0.12.1 - 2026-09-06
12
+
13
+ - Stable release of named teams without tmux. `intercom_join` works outside TmuxDeck.
14
+
15
+ ## 0.12.0-connect.8 - 2026-09-06
16
+
17
+ - Add `intercom_join` so Codex sessions can create or join a named team without tmux. Named teams share `~/.pi/agent/intercom/named-teams.json` with Pi, Claude, and OpenCode.
18
+
19
+ ## 0.12.0-connect.7 - 2026-08-24
20
+
21
+ - Document Grok Build and AGY support in detail on the npm package page, including packages, tools, identity, shared scope, Auto-Team participation, and polling-only delivery.
22
+ - Add Grok Build and AGY to npm package description and search metadata.
23
+
24
+ ## 0.12.0-connect.6 - 2026-08-24
25
+
26
+ - Synchronize companion install pins with the hosted-CI-validated Orchestrator release.
27
+
28
+ ## 0.12.0-connect.5 - 2026-08-24
29
+
30
+ - Synchronize companion install pins with the final systemd-validated Orchestrator release.
31
+
32
+ ## 0.12.0-connect.4 - 2026-08-24
33
+
34
+ - Synchronize Codex, Pi, and Orchestrator install pins with the final Grok/AGY documentation release.
35
+
36
+ ## 0.12.0-connect.3 - 2026-08-24
37
+
38
+ - Add the npm-packaged Grok Build and AGY MCP adapters to the synchronized Agent Intercom family documentation.
39
+ - Refresh npm and companion Pi/Orchestrator install examples to current releases.
40
+
41
+ ## 0.12.0-connect.2 - 2026-08-23
42
+
43
+ - Add complete OpenAI MCP tool annotations for all nine Intercom tools.
44
+ - Cover every MCP tool by name and verify the exact annotation semantics in tests.
45
+ - Explicitly disable shell execution for production child-process launches while keeping arguments separated.
46
+
47
+ ## 0.11.0-connect.1 - 2026-08-14
48
+
49
+ - Support Protocol v4 broker-enforced scope isolation (`AGENT_INTERCOM_SCOPE_ID`) and canonical `ctliz` distribution.
50
+ - Pin Core dependency to canonical commit `aad1985e125516b318181560293145bf2507cc6d` (`v0.1.0-connect.1`).
51
+ - Reject competing live runtimes that claim an active stable session ID while preserving legitimate reconnects and pending deliveries.
52
+ - Add ID-free `oldest`/`latest` selection for multiple pending asks from one sender, hide protocol IDs from pending output, and refuse a second unresolved ask to the same recipient.
53
+ - Automatically reconnect persistent bridges and MCP runtimes with their stable Intercom identity after broker restarts.
54
+ - Clarify that assignments and progress/status checkpoints use `intercom_send`, reserving `intercom_ask` for blocking decisions.
55
+ - Keep `coi` alive when Codex app-server emits retryable `error` notifications, and honor orchestrator fresh starts by discarding persisted bridge thread state.
56
+
57
+ ## 0.10.0 - 2026-07-16
58
+
59
+ - Add `intercom_team` to the MCP and app-server bridge surfaces so owned Codex coworkers can find their manager and live siblings without a global peer search.
60
+ - Forward orchestrator worker identity into Codex's MCP subprocess so team discovery resolves the owned worker instead of the helper session.
61
+
62
+ ## 0.9.3 - 2026-07-15
63
+
64
+ - Coordinate the Agent Intercom family on the `0.9.3` release line.
65
+
66
+ ## 0.9.2 - 2026-07-14
67
+
68
+ - Coordinate the Agent Intercom family on the `0.9.2` release line.
69
+ - Declare canonical GitHub repository metadata for npm provenance verification.
70
+
71
+ - Add CI for branches and pull requests.
72
+ - Add tag-driven npm trusted publishing with provenance and automatic GitHub Releases.
73
+
74
+ ## 0.9.1 - 2026-07-14
75
+
76
+ - Publish the package under the public npm scope `@dataforxyz/agent-intercom-codex`.
77
+ - Keep the Git repository and executable names unchanged.
78
+
79
+ ## 0.9.0 - 2026-07-14
80
+
81
+ - Align the Agent Intercom family on one coordinated `0.9.0` release line.
82
+ - No behavior change from the immediately preceding AGPL release.
83
+
84
+ ## 0.3.0 - 2026-07-14
85
+
86
+ ### Changed
87
+ - Changed the current project license to `AGPL-3.0-or-later`. Previously published MIT versions remain under MIT, and original `pi-intercom` notices are preserved in `THIRD_PARTY_NOTICES.md`.
88
+
89
+ ### Added
90
+ - Added protocol v3 delivery acknowledgements, explicit ask-control
91
+ confirmations, and a durable sender outbox that replays safely after broker
92
+ reconnects.
93
+ - Added an `Alt+I` shortcut to `coi` that copies the current session's usable
94
+ intercom contact target.
95
+ - Added terminal-protocol, OSC 52, editor insertion, and stable-ID fallbacks for
96
+ the shortcut, plus an opt-out flag for environments that do not want PTY
97
+ interception.
98
+
99
+ ### Changed
100
+ - Upgraded the bundled broker and client to the strict `pi-intercom` protocol
101
+ v3 and automatically replace an incompatible older local broker.
102
+ - Ask timeouts now defer the ask, preserving late replies without holding the
103
+ reverse-ask edge blocked indefinitely. Explicit cancellation still closes it.
104
+ - Made `node-pty` optional and clipboard helper execution asynchronous.
105
+
106
+ ## [0.1.0] - 2026-07-03
107
+
108
+ ### Added
109
+ - Added Codex MCP stdio server for local intercom messaging.
110
+ - Added tools for identity, status, session listing, summary updates, send,
111
+ ask, pending, and reply.
112
+ - Added Codex plugin metadata and a `codex-intercom` skill.
113
+ - Vendored the minimal pi-intercom broker/client protocol for compatibility.
114
+ - Added an app-server bridge daemon that publishes virtual Codex workers as
115
+ intercom sessions and wakes app-server turns on inbound messages.
116
+ - Added bridge config/state helpers and a `npm run codex:bridge` script.
117
+
118
+ ### Fixed
119
+ - Shut down the MCP server when stdio closes so completed Codex runs do not
120
+ leave stale intercom sessions behind.
121
+ - Defaulted bridge app-server launch to direct `codex app-server` mode so it
122
+ works without the standalone managed daemon install.
123
+
124
+ ### Docs
125
+ - Documented Codex MCP environment-variable behavior and the recommended
126
+ `intercom_set_summary` discovery flow for ad hoc multi-Codex runs.
127
+ - Documented bridge configuration, security defaults, and managed daemon proxy
128
+ mode.
package/README.md CHANGED
@@ -224,6 +224,12 @@ For longer work, use `intercom_send` and check later with `intercom_pending`.
224
224
  for that socket, creates or resumes the sidecar's app-server thread, then
225
225
  launches an interactive Codex UI attached to the same socket and thread.
226
226
 
227
+ Native thread renames (`thread/name/updated`) update the sidecar's Intercom
228
+ presence without changing its stable ID. Reconnects retain the updated name;
229
+ resuming a thread adopts its persisted `thread.name` rather than replacing it
230
+ with the launcher's default. The notification schema was checked against Codex
231
+ CLI 0.155.1 and 0.159.2. Protocol v4 and delivery ACK behavior are unchanged.
232
+
227
233
  Start a named worker:
228
234
 
229
235
  ```bash
@@ -426,6 +426,15 @@ export class VirtualCodexAgent {
426
426
  const threadId = getNotificationThreadId(message.params);
427
427
  if (!threadId || threadId !== this.threadId) return;
428
428
 
429
+ if (message.method === "thread/name/updated" && isRecord(message.params)) {
430
+ const name = message.params.threadName;
431
+ if (typeof name === "string" && name.trim() && name !== this.agent.name) {
432
+ this.agent.name = name;
433
+ this.client.updatePresence({ name });
434
+ }
435
+ return;
436
+ }
437
+
429
438
  if (message.method === "error") {
430
439
  const params = isRecord(message.params) ? message.params : {};
431
440
  const detail = isRecord(params.error) && typeof params.error.message === "string"
@@ -477,13 +486,18 @@ export class VirtualCodexAgent {
477
486
  if (this.threadId) {
478
487
  try {
479
488
  const sandbox = bridgeAgentSandboxMode(this.agent);
480
- await this.app.request("thread/resume", {
489
+ const result = await this.app.request("thread/resume", {
481
490
  threadId: this.threadId,
482
491
  cwd: this.agent.cwd,
483
492
  model: this.agent.model ?? null,
484
493
  approvalPolicy: bridgeAgentApprovalPolicy(this.agent),
485
494
  sandbox,
486
495
  });
496
+ if (isRecord(result) && isRecord(result.thread)) {
497
+ this.onNotification({ method: "thread/name/updated", params: {
498
+ threadId: this.threadId, threadName: result.thread.name,
499
+ } });
500
+ }
487
501
  return this.threadId;
488
502
  } catch {
489
503
  this.threadId = null;
@@ -243,7 +243,7 @@ export async function handleMcpRequest(request: JsonRpcRequest, runtime: CodexIn
243
243
  return ok(request.id, {
244
244
  protocolVersion: "2025-06-18",
245
245
  capabilities: { tools: {} },
246
- serverInfo: { name: "codex-intercom", version: "0.1.0" },
246
+ serverInfo: { name: "codex-intercom", version: "0.12.2" },
247
247
  });
248
248
  case "ping":
249
249
  return ok(request.id, {});
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- process.stderr.write("[agent-intercom-build] package=@ctliz/agent-intercom-codex version=0.12.1 target=bridge-daemon sourceSha256=9e94589286ec909b8fd50e96f38fa52f7c21424081d18e8155e01cd3bffde8fb\n");
2
+ process.stderr.write("[agent-intercom-build] package=@ctliz/agent-intercom-codex version=0.12.2 target=bridge-daemon sourceSha256=fb36315f414b3f19538f70942c884026e951ee63fb0060970c2c041e21aed32d\n");
3
3
 
4
4
  // codex/bridge-daemon.ts
5
5
  import { once } from "node:events";
@@ -3455,6 +3455,14 @@ var VirtualCodexAgent = class {
3455
3455
  onNotification(message) {
3456
3456
  const threadId = getNotificationThreadId(message.params);
3457
3457
  if (!threadId || threadId !== this.threadId) return;
3458
+ if (message.method === "thread/name/updated" && isRecord2(message.params)) {
3459
+ const name = message.params.threadName;
3460
+ if (typeof name === "string" && name.trim() && name !== this.agent.name) {
3461
+ this.agent.name = name;
3462
+ this.client.updatePresence({ name });
3463
+ }
3464
+ return;
3465
+ }
3458
3466
  if (message.method === "error") {
3459
3467
  const params = isRecord2(message.params) ? message.params : {};
3460
3468
  const detail = isRecord2(params.error) && typeof params.error.message === "string" ? params.error.message : "Codex turn error";
@@ -3501,13 +3509,19 @@ var VirtualCodexAgent = class {
3501
3509
  if (this.threadId) {
3502
3510
  try {
3503
3511
  const sandbox2 = bridgeAgentSandboxMode(this.agent);
3504
- await this.app.request("thread/resume", {
3512
+ const result2 = await this.app.request("thread/resume", {
3505
3513
  threadId: this.threadId,
3506
3514
  cwd: this.agent.cwd,
3507
3515
  model: this.agent.model ?? null,
3508
3516
  approvalPolicy: bridgeAgentApprovalPolicy(this.agent),
3509
3517
  sandbox: sandbox2
3510
3518
  });
3519
+ if (isRecord2(result2) && isRecord2(result2.thread)) {
3520
+ this.onNotification({ method: "thread/name/updated", params: {
3521
+ threadId: this.threadId,
3522
+ threadName: result2.thread.name
3523
+ } });
3524
+ }
3511
3525
  return this.threadId;
3512
3526
  } catch {
3513
3527
  this.threadId = null;
package/dist/broker.mjs CHANGED
@@ -1,4 +1,4 @@
1
- process.stderr.write("[agent-intercom-build] package=@ctliz/agent-intercom-codex version=0.12.1 target=broker sourceSha256=9e94589286ec909b8fd50e96f38fa52f7c21424081d18e8155e01cd3bffde8fb\n");
1
+ process.stderr.write("[agent-intercom-build] package=@ctliz/agent-intercom-codex version=0.12.2 target=broker sourceSha256=fb36315f414b3f19538f70942c884026e951ee63fb0060970c2c041e21aed32d\n");
2
2
 
3
3
  // broker/broker.ts
4
4
  import net from "net";
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@ctliz/agent-intercom-codex",
4
- "version": "0.12.1",
5
- "sourceSha256": "9e94589286ec909b8fd50e96f38fa52f7c21424081d18e8155e01cd3bffde8fb",
4
+ "version": "0.12.2",
5
+ "sourceSha256": "fb36315f414b3f19538f70942c884026e951ee63fb0060970c2c041e21aed32d",
6
6
  "targets": [
7
7
  "codex-server",
8
8
  "broker",
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- process.stderr.write("[agent-intercom-build] package=@ctliz/agent-intercom-codex version=0.12.1 target=codex-server sourceSha256=9e94589286ec909b8fd50e96f38fa52f7c21424081d18e8155e01cd3bffde8fb\n");
2
+ process.stderr.write("[agent-intercom-build] package=@ctliz/agent-intercom-codex version=0.12.2 target=codex-server sourceSha256=fb36315f414b3f19538f70942c884026e951ee63fb0060970c2c041e21aed32d\n");
3
3
 
4
4
  // codex/server.ts
5
5
  import readline from "node:readline";
@@ -3164,7 +3164,7 @@ async function handleMcpRequest(request, runtime2) {
3164
3164
  return ok(request.id, {
3165
3165
  protocolVersion: "2025-06-18",
3166
3166
  capabilities: { tools: {} },
3167
- serverInfo: { name: "codex-intercom", version: "0.1.0" }
3167
+ serverInfo: { name: "codex-intercom", version: "0.12.2" }
3168
3168
  });
3169
3169
  case "ping":
3170
3170
  return ok(request.id, {});
package/dist/coi.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- process.stderr.write("[agent-intercom-build] package=@ctliz/agent-intercom-codex version=0.12.1 target=coi sourceSha256=9e94589286ec909b8fd50e96f38fa52f7c21424081d18e8155e01cd3bffde8fb\n");
2
+ process.stderr.write("[agent-intercom-build] package=@ctliz/agent-intercom-codex version=0.12.2 target=coi sourceSha256=fb36315f414b3f19538f70942c884026e951ee63fb0060970c2c041e21aed32d\n");
3
3
 
4
4
  // codex/coi.ts
5
5
  import { once as once2 } from "node:events";
@@ -3470,6 +3470,14 @@ var VirtualCodexAgent = class {
3470
3470
  onNotification(message) {
3471
3471
  const threadId = getNotificationThreadId(message.params);
3472
3472
  if (!threadId || threadId !== this.threadId) return;
3473
+ if (message.method === "thread/name/updated" && isRecord2(message.params)) {
3474
+ const name = message.params.threadName;
3475
+ if (typeof name === "string" && name.trim() && name !== this.agent.name) {
3476
+ this.agent.name = name;
3477
+ this.client.updatePresence({ name });
3478
+ }
3479
+ return;
3480
+ }
3473
3481
  if (message.method === "error") {
3474
3482
  const params = isRecord2(message.params) ? message.params : {};
3475
3483
  const detail = isRecord2(params.error) && typeof params.error.message === "string" ? params.error.message : "Codex turn error";
@@ -3516,13 +3524,19 @@ var VirtualCodexAgent = class {
3516
3524
  if (this.threadId) {
3517
3525
  try {
3518
3526
  const sandbox2 = bridgeAgentSandboxMode(this.agent);
3519
- await this.app.request("thread/resume", {
3527
+ const result2 = await this.app.request("thread/resume", {
3520
3528
  threadId: this.threadId,
3521
3529
  cwd: this.agent.cwd,
3522
3530
  model: this.agent.model ?? null,
3523
3531
  approvalPolicy: bridgeAgentApprovalPolicy(this.agent),
3524
3532
  sandbox: sandbox2
3525
3533
  });
3534
+ if (isRecord2(result2) && isRecord2(result2.thread)) {
3535
+ this.onNotification({ method: "thread/name/updated", params: {
3536
+ threadId: this.threadId,
3537
+ threadName: result2.thread.name
3538
+ } });
3539
+ }
3526
3540
  return this.threadId;
3527
3541
  } catch {
3528
3542
  this.threadId = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ctliz/agent-intercom-codex",
3
- "version": "0.12.1",
3
+ "version": "0.12.2",
4
4
  "description": "Codex MCP plugin and wakeable worker for local messaging with Pi, Claude Code, OpenCode, Grok Build, and AGY agents.",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "type": "module",
@@ -38,6 +38,7 @@
38
38
  ".codex-plugin/**/*",
39
39
  ".mcp.json",
40
40
  "README.md",
41
+ "CHANGELOG.md",
41
42
  "LICENSE",
42
43
  "THIRD_PARTY_NOTICES.md",
43
44
  "licenses/**/*",