@ctliz/agent-intercom-codex 0.12.0-connect.8 → 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.
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +128 -0
- package/README.md +8 -2
- package/codex/bridge-daemon.ts +15 -1
- package/codex/mcp-protocol.ts +1 -1
- package/dist/bridge-daemon.mjs +16 -2
- package/dist/broker.mjs +1 -1
- package/dist/build-info.json +2 -2
- package/dist/codex-server.mjs +2 -2
- package/dist/coi.mjs +16 -2
- package/package.json +2 -1
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
|
@@ -131,7 +131,7 @@ For normal use, install the package so the command-line entry points are on
|
|
|
131
131
|
```bash
|
|
132
132
|
npm install -g @ctliz/agent-intercom-codex@connect
|
|
133
133
|
# or by exact prerelease version
|
|
134
|
-
npm install -g @ctliz/agent-intercom-codex@0.12.
|
|
134
|
+
npm install -g @ctliz/agent-intercom-codex@0.12.1
|
|
135
135
|
```
|
|
136
136
|
|
|
137
137
|
This provides:
|
|
@@ -163,7 +163,7 @@ stable names or IDs.
|
|
|
163
163
|
To let a Pi manager create Codex workers with owned systemd cgroups, leases, model/effort selection, logs, and verified cleanup, install the companion Pi packages:
|
|
164
164
|
|
|
165
165
|
```bash
|
|
166
|
-
pi install git:github.com/ctliz/agent-intercom-pi@v0.12.
|
|
166
|
+
pi install git:github.com/ctliz/agent-intercom-pi@v0.12.2
|
|
167
167
|
pi install git:github.com/ctliz/agent-intercom-orchestrator@v0.12.0-connect.5
|
|
168
168
|
```
|
|
169
169
|
|
|
@@ -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
|
package/codex/bridge-daemon.ts
CHANGED
|
@@ -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;
|
package/codex/mcp-protocol.ts
CHANGED
|
@@ -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.
|
|
246
|
+
serverInfo: { name: "codex-intercom", version: "0.12.2" },
|
|
247
247
|
});
|
|
248
248
|
case "ping":
|
|
249
249
|
return ok(request.id, {});
|
package/dist/bridge-daemon.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.
|
|
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
|
+
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";
|
package/dist/build-info.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "@ctliz/agent-intercom-codex",
|
|
4
|
-
"version": "0.12.
|
|
5
|
-
"sourceSha256": "
|
|
4
|
+
"version": "0.12.2",
|
|
5
|
+
"sourceSha256": "fb36315f414b3f19538f70942c884026e951ee63fb0060970c2c041e21aed32d",
|
|
6
6
|
"targets": [
|
|
7
7
|
"codex-server",
|
|
8
8
|
"broker",
|
package/dist/codex-server.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.
|
|
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.
|
|
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.
|
|
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.
|
|
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/**/*",
|