@dev-mainsequence/codex-plugin 0.7.9 → 0.7.11
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/README.md +149 -155
- package/build-info.json +1 -1
- package/dist/hosts/panel/panel.html +30 -5
- package/docs/agents-tools-panel.md +109 -456
- package/docs/conversational-mcp.md +86 -47
- package/package.json +3 -3
- package/docs/codex-verification.md +0 -161
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# MainSequence Codex
|
|
1
|
+
# MainSequence for Codex: capabilities and host differences
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
The plugin implements the MainSequence panel's workflows in stock Codex. The Claude
|
|
4
|
+
Desktop plugin is a read-only behaviour and layout reference; its source and dependency
|
|
5
|
+
stay unchanged. No probe or custom Codex build is shipped.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Capability matrix
|
|
8
8
|
|
|
9
9
|
| Surface | Implemented behavior |
|
|
10
10
|
| --- | --- |
|
|
@@ -19,25 +19,60 @@ and dependency stay unchanged. This is the real plugin, not a host probe.
|
|
|
19
19
|
| Settings | Existing shared account, browser login, connection check, renewal, explicit shared sign-out; repositories folder/backend/Command Center settings; diagnostics and local scan |
|
|
20
20
|
| Activity | Agent receipts/tasks plus accepted workspace operations, progress, explicit cancellation and results; accepted workspace work survives panel close/native Stop while the server remains alive |
|
|
21
21
|
|
|
22
|
-
##
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
## What the plugin exposes automatically
|
|
23
|
+
|
|
24
|
+
Enabling MainSequence registers the plugin's bundled `mainsequence` MCP server and its 16
|
|
25
|
+
integration tools (15 model-visible and one app-only submission acknowledgement), plus one
|
|
26
|
+
`ms_<tool>_<hash>` tool for every tool of every saved project MCP connection, named and
|
|
27
|
+
bound exactly as the Claude Desktop plugin names and binds them. Those tools use the
|
|
28
|
+
shared devtools session. The plugin does not mirror the central platform `/mcp` catalog as
|
|
29
|
+
individual Codex functions, and saved connections do not become separate native MCP
|
|
30
|
+
configuration entries.
|
|
31
|
+
|
|
32
|
+
The registered project tools come from devtools' shared project-tool catalog
|
|
33
|
+
(`project-tool-catalog.json` beside `mcp-connections.json`, the same file, names, schemas
|
|
34
|
+
and result shape the Claude Desktop plugin uses; devtools ADR 0004). `tools/list` answers
|
|
35
|
+
from it at once; one chat's server refreshes it in the background when it is older than 15
|
|
36
|
+
minutes or after a connection or account change, and sends `tools/list_changed`. A listing
|
|
37
|
+
is scoped to the current account's backend once the server has learned it. A call to an
|
|
38
|
+
`ms_*` tool forwards to `mcp-call` with the saved connection's backend, environment and
|
|
39
|
+
release and returns the remote tool's own content and `structuredContent`, with `summary`,
|
|
40
|
+
`error` and `effects` appended as in Claude. The catalog holds schemas only, never
|
|
41
|
+
credentials or results; one process refreshes at a time under a lock file; a connection
|
|
42
|
+
whose catalog cannot be read keeps its earlier tools and is reported in
|
|
43
|
+
`mainsequence_open` → `registeredTools.unavailable`.
|
|
44
|
+
`MAINSEQUENCE_CODEX_TOOL_CATALOG=off` stops a server from reading or writing the catalog on
|
|
45
|
+
its own (the packaged test uses it); cached tools are still listed.
|
|
46
|
+
|
|
47
|
+
Project MCP requests are slow when the project has scaled to zero: a first call to the
|
|
48
|
+
Production CRM measured 53–71 s, a warm one 7–10 s. `.mcp.json` therefore sets
|
|
49
|
+
`tool_timeout_sec: 300` (Codex's default is 60 s) and the server's own per-request limit is
|
|
50
|
+
290 s; devtools gives a project request 120 s and honours a tool's advertised
|
|
51
|
+
`_meta["mainsequence.ai/timeout-seconds/v1"]` up to 300 s. Error messages from devtools name
|
|
52
|
+
the endpoint, the request (`tools/call crm_contacts_list`) and the status, tell a timeout
|
|
53
|
+
from a connection failure, and keep a JSON-RPC error's own message; the server passes them
|
|
54
|
+
through unchanged. Every `INVALID_REQUEST` from the discovery layer names the argument and
|
|
55
|
+
what is accepted: a wrong `environmentUid` lists the account's environments; a release
|
|
56
|
+
known in another environment names that environment; an unknown release says which read
|
|
57
|
+
(`mainsequence_view connections` or `mainsequence_discover tools`) must come first; an
|
|
58
|
+
omitted `arguments` object on `mainsequence_call_tool` is an empty object; release ids match
|
|
59
|
+
regardless of case. `CONTEXT_CHANGED` carries its cause (`AUTH_REJECTED: The MCP endpoint
|
|
60
|
+
returned HTTP 401.`).
|
|
61
|
+
|
|
62
|
+
Agent icons come inline from the platform's agent directory (`include_icons: true`); the
|
|
63
|
+
panel does not request individual icon URLs, and a missing or invalid image renders the
|
|
64
|
+
placeholder. While the Agents list or an agent's details stay on screen, the panel re-reads
|
|
65
|
+
what it shows once a minute (the same directory page, or the agent view) so an icon changed
|
|
66
|
+
in Command Center is redrawn in place; the list, drafts and scroll position stay. The timer
|
|
67
|
+
ends with the screen and pauses after 240 re-reads until the screen is opened again.
|
|
68
|
+
|
|
69
|
+
The server captures its panel resources at startup and runs from a stable home directory,
|
|
70
|
+
so a plugin update that removes an older plugin cache does not break an existing chat.
|
|
71
|
+
Explicitly selected MCP backends resolve independently of the working directory; a missing
|
|
72
|
+
directory needed for an implicit project lookup returns `CURRENT_DIRECTORY_UNAVAILABLE`
|
|
73
|
+
with recovery guidance.
|
|
25
74
|
|
|
26
|
-
|
|
27
|
-
its 16 integration tools (15 model-visible and one app-only submission acknowledgement),
|
|
28
|
-
plus one `ms_<tool>_<hash>` tool for every tool of every saved project MCP connection,
|
|
29
|
-
named and bound exactly as the Claude Desktop plugin names and binds them. Those tools
|
|
30
|
-
use the shared devtools session. The plugin does not mirror the central platform `/mcp`
|
|
31
|
-
catalog as individual Codex functions. Saved connections do not become separate native
|
|
32
|
-
MCP configuration entries. The registered project tools come from devtools' shared
|
|
33
|
-
project-tool catalog (`project-tool-catalog.json` beside `mcp-connections.json`, the same
|
|
34
|
-
file, names, schemas and result shape the Claude Desktop plugin uses; devtools ADR 0004)
|
|
35
|
-
that `tools/list` answers from at once; one chat's server refreshes it in the background
|
|
36
|
-
when it is older than 15 minutes or after a connection or account change, and sends
|
|
37
|
-
`tools/list_changed`. The
|
|
38
|
-
`tools/list_changed` observation below describes the host's measured registration
|
|
39
|
-
behavior: a connection saved in the current chat is registered for the next chat, and is
|
|
40
|
-
usable immediately through `mainsequence_tools` / `mainsequence_call_tool`.
|
|
75
|
+
## Stock Codex differences
|
|
41
76
|
|
|
42
77
|
These are host-integration differences, not reasons to omit domain functionality:
|
|
43
78
|
|
|
@@ -48,12 +83,11 @@ These are host-integration differences, not reasons to omit domain functionality
|
|
|
48
83
|
- **External assistant bubbles without a model turn:** the panel cannot append arbitrary
|
|
49
84
|
assistant transcript entries. Saved replies return as native MCP results and Codex
|
|
50
85
|
presents them. They stay in context, with a Codex inference turn.
|
|
51
|
-
- **Dynamic top-level project tool registration:**
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
interface.
|
|
86
|
+
- **Dynamic top-level project tool registration:** stock Codex refreshes server status
|
|
87
|
+
after `tools/list_changed` but does not rebuild model function schemas until a host
|
|
88
|
+
plugin reload or a new chat. Project tools registered from the catalog cache are
|
|
89
|
+
therefore those known when the chat's server started; fresh tools remain usable
|
|
90
|
+
immediately through the stable `mainsequence_tools` / `mainsequence_call_tool` interface.
|
|
57
91
|
- **Native workspace/terminal controls:** the MCP App bridge exposes no native folder
|
|
58
92
|
picker, automatic multi-root session attachment, signed-terminal environment injection,
|
|
59
93
|
or start-in-devcontainer API. Folder paths, repository preparation, opening the OS
|
|
@@ -62,10 +96,10 @@ These are host-integration differences, not reasons to omit domain functionality
|
|
|
62
96
|
belong to Codex's launch configuration, not to the running panel.
|
|
63
97
|
|
|
64
98
|
Workspace operations are retained for the server lifetime; they are not replayed after
|
|
65
|
-
server restart. Agent requests
|
|
66
|
-
not imply remote cancellation or rollback.
|
|
67
|
-
|
|
68
|
-
|
|
99
|
+
server restart. Agent requests and receipts remain durable across restart. Native Stop does
|
|
100
|
+
not imply remote cancellation or rollback. The platform offers no reconciliation receipt
|
|
101
|
+
for an ambiguous message send, so the client blocks resend rather than claiming end-to-end
|
|
102
|
+
exactly-once delivery.
|
|
69
103
|
|
|
70
104
|
## Use
|
|
71
105
|
|
|
@@ -76,6 +110,19 @@ Use **Messages and recovery** on the same request after interruption. **Activity
|
|
|
76
110
|
owned task controls and workspace progress. Mutating workspace and MCP controls show the
|
|
77
111
|
selected target and explicit review; destructive operations require a fresh core preview.
|
|
78
112
|
|
|
113
|
+
Agent messaging in detail: the panel first saves an immutable request, then submits a
|
|
114
|
+
native message containing only the saved request ID and relay instructions. Codex calls
|
|
115
|
+
`mainsequence_agent_request` and quotes the returned `receipt.message`, labelled with the
|
|
116
|
+
agent name. The host obtains chat identity from Codex's thread metadata; tool arguments
|
|
117
|
+
cannot supply it, and a global panel without a chat can browse but cannot message. Records
|
|
118
|
+
are scoped by host, chat, backend and verified shared account and live in private local
|
|
119
|
+
application data under `MainSequenceCLI/agent-delivery-v1`, which holds messages and
|
|
120
|
+
receipts, never credentials. Pending messages can be cancelled and expire after 24 hours;
|
|
121
|
+
failed preparation with zero dispatches can be recovered under the same ID; errors after
|
|
122
|
+
dispatch are never retried; after a process dies during send, or a transport response is
|
|
123
|
+
ambiguous, the request is **uncertain** and resend is blocked. A new request must never be
|
|
124
|
+
used to bypass an uncertain one.
|
|
125
|
+
|
|
79
126
|
## Boundaries
|
|
80
127
|
|
|
81
128
|
| MCP tool | Public devtools operations |
|
|
@@ -97,426 +144,32 @@ selected target and explicit review; destructive operations require a fresh core
|
|
|
97
144
|
| `mainsequence_operations` | Host-owned accepted-operation status and cancellation |
|
|
98
145
|
| `mainsequence_settings` | Public shared preferences and existing shared-session login/renewal/sign-out |
|
|
99
146
|
|
|
100
|
-
The discovery tools are model- and app-accessible and return useful structured results
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
Existing native theme behavior remains covered by the bridge tests. Devtools passes 124
|
|
130
|
-
tests and its standalone package checks; Codex's suite contains 30 tests. The upgrade also
|
|
131
|
-
passes isolated stock Codex registration, without a model turn or MainSequence request.
|
|
132
|
-
|
|
133
|
-
The release lock pins the exact devtools archive. The release sequence publishes devtools
|
|
134
|
-
first and verifies registry integrity before building and publishing the Codex consumer.
|
|
135
|
-
The local-archive helper described in the README supports development before publication.
|
|
136
|
-
Desktop activation, rendering and authenticated live discovery remain separate acceptance steps.
|
|
137
|
-
|
|
138
|
-
## Live desktop acceptance — 2026-10-22
|
|
139
|
-
|
|
140
|
-
Devtools 0.3.2 and the real Codex plugin 0.4.2 are published. The plugin is enabled in stock Codex and the public marketplace points to 0.4.2.
|
|
141
|
-
|
|
142
|
-
With the user's approval, the existing shared MainSequence machine login was restored through Chrome for `http://127.0.0.1:8000`. The installed Codex plugin and Claude's devtools dependency read the same Keychain service, backend account and credential pair. No Claude code was changed and no separate Codex credential store was introduced. The earlier invalid saved record matched a synthetic SDK test token; its writer was not established.
|
|
143
|
-
|
|
144
|
-
The active native MCP tools verified the account with the backend and completed these live reads:
|
|
145
|
-
|
|
146
|
-
| Environment | Agents | MCP releases |
|
|
147
|
-
| --- | ---: | ---: |
|
|
148
|
-
| development | 2 | 2 |
|
|
149
|
-
| Production | 7 | 5 |
|
|
150
|
-
|
|
151
|
-
The already-saved Production CRM connection returned 70 tool schemas through `mainsequence_tools`. No agent messages or project tool calls were sent, and no connections were added. Directory runtime states were `unknown`; discovery does not establish runtime readiness.
|
|
152
|
-
|
|
153
|
-
The expanded desktop panel displayed the verified shared account, accepted development environment selection and rendered both Agents and Tools directories. Unsaved MCPs correctly disabled schema inspection. Actual host CSS variables supplied Codex's neutral dark colors and system font. Screenshots and sanitized receipts are recorded in `artifacts/live-desktop-acceptance-0.4.2.json`, `artifacts/live-agents-codex-0.4.2.jpg` and `artifacts/live-tools-codex-0.4.2.jpg`. Historical validation above remains the record of what was known at each earlier stage.
|
|
154
|
-
|
|
155
|
-
At the end of 0.4.2 acceptance, production messaging remained the next step. Live semantic search, pagination and agent runtime readiness were not claimed by that run. Claude remains independent and stock Codex remains the host.
|
|
156
|
-
|
|
157
|
-
## 0.5.0 / devtools 0.3.3: real agent messaging
|
|
158
|
-
|
|
159
|
-
Choose **Message**, enter text, and select **Send in Codex** or **Draft in Codex**.
|
|
160
|
-
The panel first saves an immutable request. It then submits a native message containing
|
|
161
|
-
only the saved request ID and relay instructions. Codex calls `mainsequence_agent_request`
|
|
162
|
-
and quotes the returned `receipt.message`, labelled with the agent name. The MCP result
|
|
163
|
-
and native assistant reply become conversation context. This uses stock Codex's supported
|
|
164
|
-
MCP App bridge; it does not insert an arbitrary external assistant identity.
|
|
165
|
-
|
|
166
|
-
| Tool | Behavior |
|
|
167
|
-
| --- | --- |
|
|
168
|
-
| `mainsequence_stage_message` | Validate the current discovered agent/account/chat and persist the immutable request; no remote send |
|
|
169
|
-
| `mainsequence_agent_request` | Deliver the saved request once, or cancel an unsent request |
|
|
170
|
-
| `mainsequence_agent_status` | Read-only list/get/wait and exact saved receipts; no send approval needed |
|
|
171
|
-
| `mainsequence_submission` | App-only acknowledgement bookkeeping; never evidence of remote delivery |
|
|
172
|
-
|
|
173
|
-
The host obtains chat identity from Codex's `threadId`/`thread_id` tool metadata.
|
|
174
|
-
Tool arguments cannot supply it. A global panel without a chat can browse but cannot
|
|
175
|
-
message. Records are scoped by host, chat, backend and verified shared account. Stage
|
|
176
|
-
requires the current discovery page; recovery does not need its expired context ID.
|
|
177
|
-
|
|
178
|
-
**Stop and recovery:** Stop interrupts the native waiter. Accepted work continues in
|
|
179
|
-
the MCP server and saves its receipt. Open **Messages and recovery** and recover the
|
|
180
|
-
original request. Duplicate clicks, queued duplicate native arrivals and repeated
|
|
181
|
-
recovery return the same work or receipt, without dispatching again. Reopening a panel
|
|
182
|
-
only lists saved state; it never sends automatically. Pending messages can be cancelled
|
|
183
|
-
and expire after 24 hours. Failed preparation with zero dispatches can be explicitly
|
|
184
|
-
recovered under the same ID; errors after dispatch are never retried. Delivery does not cancel the remote agent when Codex stops.
|
|
185
|
-
|
|
186
|
-
The shared devtools `AgentDelivery` service owns state, locks, readiness and dispatch.
|
|
187
|
-
After a process dies during preparation, the stable session handle can resume. After a
|
|
188
|
-
process dies during send, or a transport response is ambiguous, status is **uncertain**
|
|
189
|
-
and resend is blocked. The platform has no authoritative direct-message reconciliation
|
|
190
|
-
receipt, so this is at-most-once client dispatch, not a distributed exactly-once promise.
|
|
191
|
-
A new request must never be used to bypass an uncertain one. The initial implementation
|
|
192
|
-
supports direct-message agents; background task controls remain a later parity step.
|
|
193
|
-
|
|
194
|
-
Storage is private local application data under `MainSequenceCLI/agent-delivery-v1`.
|
|
195
|
-
It contains messages and receipts, never credentials. Receipt history is retained;
|
|
196
|
-
256 saved requests per conversation or the storage size bound refuses new writes rather
|
|
197
|
-
than deleting deduplication history. UI colors, typography and controls still use Codex
|
|
198
|
-
variables and neutral fallbacks. Claude and its pinned dependency are unchanged.
|
|
199
|
-
|
|
200
|
-
Automated coverage includes Stop before/during dispatch, simultaneous recovery,
|
|
201
|
-
process death, missing/corrupt storage, account/chat isolation, stale selections,
|
|
202
|
-
double clicks, native submission order and safe receipt rendering. The opt-in
|
|
203
|
-
`scripts/verify-agent-messaging-live.mjs ENVIRONMENT_UUID AGENT_UUID` uses a real agent
|
|
204
|
-
and the existing shared login in an isolated stock Codex app-server. Its local scripted
|
|
205
|
-
model transport inspects next-turn context; it is distinct from desktop click acceptance
|
|
206
|
-
or a free-running model's recall. It sends one harmless echo, invokes native Stop,
|
|
207
|
-
recovers the same ID twice and verifies the native transcript and subsequent model input.
|
|
208
|
-
Development archives are not published automatically; publish devtools first, verify its
|
|
209
|
-
registry integrity, then release the Codex consumer.
|
|
210
|
-
|
|
211
|
-
### Validation recorded on 2026-10-22
|
|
212
|
-
|
|
213
|
-
- Devtools: **135 tests passed**. Codex plugin: **36 tests passed**, plus archive
|
|
214
|
-
installation and detached execution checks. Claude code and dependency pins were not changed.
|
|
215
|
-
- Stock Codex `0.163.0-alpha.10.2` registers seven production MCP tools, including a
|
|
216
|
-
separate read-only status tool. Calls cannot override the host chat identity, and
|
|
217
|
-
the read-only tool refuses delivery actions.
|
|
218
|
-
- The production package, an isolated stock Codex profile and a local test backend
|
|
219
|
-
passed native `turn/interrupt`, same-ID recovery twice, exactly one recorded A2A
|
|
220
|
-
send, exact receipt reuse, native transcript persistence, and next-turn context
|
|
221
|
-
inspection without another tool call. This is a deterministic transport test,
|
|
222
|
-
not a claim of live-agent success or desktop button acceptance.
|
|
223
|
-
- The real development **MetaTables Analyst** passed the same native Stop/recovery
|
|
224
|
-
flow using the existing shared localhost account. It returned the requested echo;
|
|
225
|
-
two subsequent recovery turns reused its exact saved receipt with `sendAttempts: 1`.
|
|
226
|
-
The reply appeared in the native assistant transcript and the following turn's
|
|
227
|
-
model input, with zero recall tool calls. MainSequence ran the real agent; the
|
|
228
|
-
isolated stock Codex host used a deterministic local model transport to inspect
|
|
229
|
-
context. This verifies real delivery and native context, not desktop button clicks
|
|
230
|
-
or unrestricted model recall.
|
|
231
|
-
- The real shared account successfully authenticated, discovered agents, created the
|
|
232
|
-
Tutorial Helper session and survived native Stop. Its request reached the agent,
|
|
233
|
-
whose canonical logs recorded `agent.model.failed` with HTTP 400 followed by an
|
|
234
|
-
A2A HTTP 502. The request is `uncertain` and remains blocked from resend. No direct
|
|
235
|
-
Message receipt lookup is advertised by the platform. The failure is not a login
|
|
236
|
-
failure, and no fallback credentials or transport were introduced.
|
|
237
|
-
- The local 0.5.0 build is installed and now active in the existing desktop chat.
|
|
238
|
-
After the user's plugin toggle, the first call still reached 0.4.2 while reload
|
|
239
|
-
completed. The subsequent call returned 0.5.0 / devtools 0.3.3 with messaging enabled,
|
|
240
|
-
and the new native messaging tools appeared. Another restart was not needed.
|
|
241
|
-
|
|
242
|
-
Sanitized reports live in `artifacts/agent-messaging-live-*.json`; each distinguishes
|
|
243
|
-
`liveAgent: true` from the local test backend. The deterministic run ending in
|
|
244
|
-
`e19e8676-cae5-48ca-bf5e-de2264fa49a2` passed all six checks. The Tutorial Helper run
|
|
245
|
-
`b14f8a08-609c-43d1-b1ee-7c386b8f7999` records the live runtime failure separately.
|
|
246
|
-
The real MetaTables Analyst run `0a506f95-727b-45e6-b5c6-0b33a59f2aa6` passed all
|
|
247
|
-
five live delivery, recovery and context checks.
|
|
248
|
-
Run `node scripts/verify-agent-messaging-live.mjs --fixture` for the reproducible
|
|
249
|
-
host regression. Live mode requires explicit environment/agent IDs and sends a
|
|
250
|
-
harmless no-tools echo; an uncertain request must never be retried or replaced.
|
|
251
|
-
|
|
252
|
-
### Active desktop messaging acceptance
|
|
253
|
-
|
|
254
|
-
The real desktop panel verified the shared account, selected development, displayed
|
|
255
|
-
two agents, opened the MetaTables composer and accepted one **Send in Codex** click.
|
|
256
|
-
It saved request `f6eb8ea1-2a35-439f-8f7d-b5775eda42d0` before native submission; the
|
|
257
|
-
host acknowledged the queue entry. Development MCP discovery also returned two releases.
|
|
258
|
-
The active assistant delivered that same saved ID using the native MCP tool. The real
|
|
259
|
-
agent replied, and repeated native recovery returned the identical saved receipt with
|
|
260
|
-
`sendAttempts: 1`. Its exact reply was quoted in the native conversation.
|
|
261
|
-
|
|
262
|
-
The panel received Codex's `rgb(24, 24, 24)` dark background, white text and system font;
|
|
263
|
-
the inspected layout had no horizontal overflow. The inspector subsequently timed out,
|
|
264
|
-
so the final receipt screenshot and recovery-button click are not claimed. Native Stop
|
|
265
|
-
and next-turn context remain covered by the isolated stock-host test above; no desktop
|
|
266
|
-
Stop click was made in this acceptance run. This desktop chat's following queued turn
|
|
267
|
-
must reuse its saved receipt and must never dispatch another message.
|
|
268
|
-
|
|
269
|
-
`artifacts/live-desktop-messaging-0.5.0.json` records the actual desktop results separately
|
|
270
|
-
from the deterministic host harness. Publication remains a separate step.
|
|
271
|
-
|
|
272
|
-
## 0.6.0 layout and capability acceptance
|
|
273
|
-
|
|
274
|
-
The compact layout follows Claude's header, navigation, name/action rows, list-to-detail
|
|
275
|
-
navigation, connected-tools-first view and persistent agent selection. All UI chrome uses
|
|
276
|
-
Codex theme variables with neutral fallbacks; the brand mark is a monochrome derivative
|
|
277
|
-
of this repository's existing SVG. Real agent artwork is fetched through the new public
|
|
278
|
-
`createAgentAssets` devtools API, never through credentials exposed to the panel. Assets
|
|
279
|
-
are account/environment scoped, limited to canonical icon routes and bounded in size;
|
|
280
|
-
reduced motion uses the static PNG frame.
|
|
281
|
-
|
|
282
|
-
Regression coverage: devtools **139 tests**, Codex **41 tests**, plus both package checks.
|
|
283
|
-
New cases cover image bounds/origin/account changes, details and examples, persistent
|
|
284
|
-
drafts, connection reviews invalidated by navigation, and unknown-item execution refusal.
|
|
285
|
-
Existing native messaging, Stop/recovery and no-duplicate-send tests remain in place.
|
|
286
|
-
No additional live agent messages were sent for the visual redesign, and old uncertain
|
|
287
|
-
requests were not touched.
|
|
288
|
-
|
|
289
|
-
Read-only live acceptance uses the same shared localhost account: development exposes
|
|
290
|
-
2 agents, 2 MCP releases and 0 projects; Production exposes 7 agents, 5 releases and
|
|
291
|
-
14 projects. Both can read the account's 45 repositories. Agent icons, skills/examples,
|
|
292
|
-
project branches, saved connections and preferences were read through the production
|
|
293
|
-
package. `artifacts/design-live-acceptance-0.6.0.json` records individual results.
|
|
294
|
-
Visual acceptance uses the exact panel source in a local browser harness with a captured
|
|
295
|
-
read-only account snapshot and Codex theme variables. All mutations are disabled there;
|
|
296
|
-
this is not presented as native desktop activation evidence.
|
|
297
|
-
|
|
298
|
-
### Gaps recorded at 0.6.0 (superseded by the current matrix)
|
|
299
|
-
|
|
300
|
-
- Background task creation, progress, task cancellation and a new-agent-conversation control.
|
|
301
|
-
- Workspace setup/attachment and repository mutation controls, deployment management,
|
|
302
|
-
Docker/devcontainer operations and editable shared settings in the panel.
|
|
303
|
-
- Native dock/composer replacement: stock Codex exposes an MCP App panel and native
|
|
304
|
-
draft/send bridge, not Claude's host UI primitives. Agent replies still enter native
|
|
305
|
-
conversation context through the verified durable MCP delivery path.
|
|
306
|
-
|
|
307
|
-
The existing head implementation of organization-project setup still contains a
|
|
308
|
-
Claude-specific attachment result/instruction path. That must become host-neutral before
|
|
309
|
-
Codex exposes it. This release does not copy Claude's adapter into Codex or modify Claude.
|
|
310
|
-
Development versions remain local until a separate release: publish devtools first,
|
|
311
|
-
verify its registry integrity, rebuild the Codex archive, then publish the consumer.
|
|
312
|
-
|
|
313
|
-
## 0.7.0 validation
|
|
314
|
-
|
|
315
|
-
The reference was inspected in the actual Claude Desktop MainSequence panel, including
|
|
316
|
-
its compact Code list and project controls. The updated Codex source is checked in a
|
|
317
|
-
read-only Chrome preview at side-panel widths; this is separate from native Codex
|
|
318
|
-
activation and rendering acceptance.
|
|
319
|
-
|
|
320
|
-
Shared devtools tests cover durable preparation, direct-message Stop/recovery, task
|
|
321
|
-
receipts/cancellation, account isolation, safe workspace settings writes and deployment
|
|
322
|
-
projection/redaction. Plugin tests cover native bridge order, stale selections, scoped
|
|
323
|
-
workspace actions, previews and accepted-operation cancellation. Package verification
|
|
324
|
-
runs the detached npm bundle without node_modules. The isolated stock Codex runtime
|
|
325
|
-
loads all 16 MCP tools and the immutable panel resource without a model turn.
|
|
326
|
-
|
|
327
|
-
Read-only live acceptance uses the existing shared login: development has 2 agents,
|
|
328
|
-
2 MCP releases and 0 projects; Production has 7 agents, 5 releases and 14 projects.
|
|
329
|
-
Both environments return repository/local discovery and deployment history; run/stage
|
|
330
|
-
and log reads succeed. The existing Production CRM MCP returns 70 schemas. No agent
|
|
331
|
-
message, connection mutation, repository setup or production tool invocation is performed
|
|
332
|
-
by this read-only check. See local `artifacts/design-live-acceptance-0.7.0.json` and
|
|
333
|
-
`artifacts/parity-host-0.7.0.log` for evidence. Local development archives are not published.
|
|
334
|
-
|
|
335
|
-
### Final package and desktop activation acceptance
|
|
336
|
-
|
|
337
|
-
The completed release checks passed **144 devtools tests and 44 plugin tests**, both
|
|
338
|
-
type checks and detached package verification. The installed production bundle matched
|
|
339
|
-
all 64 generated plugin files. The isolated stock host exposed all 16 tools and refused
|
|
340
|
-
stale context, without contacting MainSequence or running a model turn.
|
|
341
|
-
|
|
342
|
-
After the user's plugin toggle, this existing native desktop chat returned plugin
|
|
343
|
-
**0.7.0 / devtools 0.3.5**, build
|
|
344
|
-
`96b8527853e477a8c0604ab20bb05a67108f0c4f6ce38ca8bc5d44eecf28930d`.
|
|
345
|
-
The native MCP App displayed the new compact header/navigation, authenticated shared
|
|
346
|
-
account, environment selector and editable Settings view. Native settings and Production
|
|
347
|
-
deployment-history reads succeeded against localhost. The inspector then timed out
|
|
348
|
-
twice, so a complete native click-through and a final native screenshot are **not**
|
|
349
|
-
claimed. This is an inspection limit, not an unresolved plugin activation.
|
|
350
|
-
|
|
351
|
-
The existing delivered request `f6eb8ea1-2a35-439f-8f7d-b5775eda42d0` was read through
|
|
352
|
-
the new native server, without delivery or staging. It remained `delivered`, with
|
|
353
|
-
`sendAttempts: 1`, the same session and the exact receipt
|
|
354
|
-
`The blue fox found seven stars.` The receipt was quoted again in this native chat.
|
|
355
|
-
This verifies persisted-receipt recovery after activation; it is not a new live Stop
|
|
356
|
-
test or a new task-mode dispatch. The earlier stock-host Stop/context acceptance and
|
|
357
|
-
the current deterministic regression tests supply those separate checks.
|
|
358
|
-
|
|
359
|
-
The read-only live suite completed 18 checks with zero failures. The final local
|
|
360
|
-
discovery check found 41 folders, 30 matched to current remote repositories. Browser
|
|
361
|
-
visual checks use the exact final HTML with a captured account snapshot and disabled
|
|
362
|
-
mutations: dark/light, 320/460-pixel widths, Home, Code/list/setup/maintenance,
|
|
363
|
-
Projects/list/detail, Agents, Tools with 70 CRM schemas, Settings and deployment
|
|
364
|
-
history/stages. They do not substitute for native host rendering evidence. Screenshots:
|
|
365
|
-
`artifacts/parity-0.7.0-agents-dark.png`,
|
|
366
|
-
`artifacts/parity-0.7.0-tools-dark.png` and
|
|
367
|
-
`artifacts/parity-0.7.0-settings-light-320.png`.
|
|
368
|
-
|
|
369
|
-
New workspace mutations and agent task controls have fixture/contract coverage; they
|
|
370
|
-
were not exercised against production resources during this visual acceptance. Workspace
|
|
371
|
-
jobs still have server-lifetime storage, while agent receipts have durable storage.
|
|
372
|
-
Claude's working tree and its devtools dependency remain unchanged. Neither development
|
|
373
|
-
version was published. `artifacts/parity-acceptance-0.7.0.json` separates these results.
|
|
374
|
-
|
|
375
|
-
## 0.7.1 live-test fixes
|
|
376
|
-
|
|
377
|
-
The next real desktop pass found that a dual-mode agent had no Task selector: Talk
|
|
378
|
-
always chose Message when both modes were supported. The composer now exposes the
|
|
379
|
-
advertised modes, preserves the draft when switching mode and keeps continued tasks
|
|
380
|
-
locked to Task. Continuing a saved task selects its saved environment before staging.
|
|
381
|
-
Read failures from workspace-entry buttons now appear in the panel, and opening a
|
|
382
|
-
workspace from Home selects the Code tab correctly.
|
|
383
|
-
|
|
384
|
-
All **47 plugin tests**, type checking, detached package validation and isolated stock
|
|
385
|
-
Codex registration pass. Shared devtools remains 0.3.5. The real 0.7.0 Code view loaded
|
|
386
|
-
local/remote repositories and checked a disposable local workspace; the CRM task-capable
|
|
387
|
-
session was prepared without a message. One container-write job failed during backend
|
|
388
|
-
verification; the target file was absent on inspection, and the operation was not
|
|
389
|
-
repeated. The later read succeeded with the same shared login. This is recorded as a
|
|
390
|
-
failed live check, not a successful write or a credential migration.
|
|
391
|
-
|
|
392
|
-
At this checkpoint 0.7.1 is installed locally and activation has been requested. Native
|
|
393
|
-
task submission/Stop/recovery and successful workspace mutations remain pending;
|
|
394
|
-
`artifacts/live-desktop-operations-0.7.0.json` records the checkpoint. Claude is unchanged.
|
|
395
|
-
|
|
396
|
-
### Update lifecycle (0.7.5)
|
|
397
|
-
|
|
398
|
-
The server captures its panel resources at startup and runs from a stable home
|
|
399
|
-
directory, so an update removing an older plugin cache does not break its existing
|
|
400
|
-
chat. Devtools 0.3.8 resolves explicitly selected MCP backends independently of cwd.
|
|
401
|
-
A missing directory needed for implicit project lookup returns
|
|
402
|
-
`CURRENT_DIRECTORY_UNAVAILABLE` with recovery guidance. The server's working
|
|
403
|
-
directory is diagnostic information only; Code actions use selected repositories.
|
|
404
|
-
|
|
405
|
-
The regression suite removes a running detached package and verifies its settings,
|
|
406
|
-
tool list and captured panel remain available. `scripts/verify-update-lifecycle-live.mjs`
|
|
407
|
-
checks account, environments, agents, saved CRM schemas and local discovery using
|
|
408
|
-
the existing shared session after removing only a disposable package copy.
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
## Inline icon correction — 0.7.8
|
|
412
|
-
|
|
413
|
-
The Agents directory, semantic search and detail request the platform's existing
|
|
414
|
-
`include_icons: true` through devtools `includeIcons: true`. Images and their
|
|
415
|
-
reduced-motion still frames are projected from `command_center_icon.idle` in that
|
|
416
|
-
same response. The panel does not request a second Command Center directory or
|
|
417
|
-
individual `/icon/` URLs. Missing or invalid inline images render the placeholder
|
|
418
|
-
without any image-fetch fallback. The legacy `view: assets` request remains a
|
|
419
|
-
network-free no-op for old panel HTML; reopen the current panel to render icons.
|
|
420
|
-
|
|
421
|
-
The shared devtools transport still coalesces the combined response across chat
|
|
422
|
-
processes. There is no periodic agent/icon refresh. Explicit Refresh requests a
|
|
423
|
-
fresh directory. No change is made to the shared login or Claude.
|
|
424
|
-
|
|
425
|
-
## Direct project tools, timeouts and distinct refusals — 0.7.8
|
|
426
|
-
|
|
427
|
-
Measured against the Production CRM release on 2026-10-23 with plain `fetch`: a cold
|
|
428
|
-
`mcp-call` took 53–71 s (release detail and exchange-launch about 2 s each, the
|
|
429
|
-
project's `initialize` 9 s to over 60 s, `tools/call crm_contacts_list` 39 s), a warm one
|
|
430
|
-
7–10 s. Codex's default `tool_timeout_sec` is 60 s, so the host failed the tool while the
|
|
431
|
-
server was still waiting; Claude Desktop runs the same devtools call with a 30-minute
|
|
432
|
-
budget and succeeds. Three changes follow from that comparison:
|
|
433
|
-
|
|
434
|
-
- `.mcp.json` sets `tool_timeout_sec: 300`. The server's own per-request limit is 290 s.
|
|
435
|
-
In 0.7.8 the server gave project MCP requests (`mainsequence_tools`,
|
|
436
|
-
`mainsequence_call_tool`, `mainsequence_connection` and the registered `ms_*` tools) a
|
|
437
|
-
120 s HTTP budget per message instead of devtools' 60 s default; since 0.7.9 that budget
|
|
438
|
-
is devtools' own default (`projectRequestTimeoutMs`), and a tool's advertised
|
|
439
|
-
`_meta["mainsequence.ai/timeout-seconds/v1"]` is honoured up to 300 s.
|
|
440
|
-
- Saved project MCP tools are registered directly as `ms_<tool>_<hash>`
|
|
441
|
-
(`src/hosts/toolCatalog.ts` in 0.7.8; devtools' shared project-tool registry since
|
|
442
|
-
0.7.9, see below), with the same FNV-1a naming as the Claude plugin, so
|
|
443
|
-
`ms_crm_contacts_list_183f8138` is the same tool in both hosts. A call forwards to
|
|
444
|
-
`mcp-call` with the saved connection's backend, environment and release and returns the
|
|
445
|
-
remote tool's own content and `structuredContent`, with `summary`, `error` and
|
|
446
|
-
`effects` appended as in Claude. No `expectedAccount` snapshot is attached; devtools
|
|
447
|
-
verifies the shared session for the connection's backend. The catalog cache holds
|
|
448
|
-
schemas only, never credentials or results; one process refreshes at a time under a
|
|
449
|
-
lock file; a connection whose catalog cannot be read keeps its earlier tools and is
|
|
450
|
-
reported in `mainsequence_open` → `registeredTools.unavailable`. `mainsequence_tools`
|
|
451
|
-
no longer discards the shared transport cache for every chat process.
|
|
452
|
-
- Every `INVALID_REQUEST` from the discovery layer now names the argument and what is
|
|
453
|
-
accepted: a wrong `environmentUid` lists the account's environments; a release known
|
|
454
|
-
in another environment names that environment; an unknown release says which read
|
|
455
|
-
(`mainsequence_view connections` or `mainsequence_discover tools`) must come first; an
|
|
456
|
-
omitted `arguments` object on `mainsequence_call_tool` is an empty object, as its
|
|
457
|
-
schema says; release ids match regardless of case. `CONTEXT_CHANGED` carries its cause
|
|
458
|
-
(`AUTH_REJECTED: The MCP endpoint returned HTTP 401.`) instead of a bare "refresh".
|
|
459
|
-
|
|
460
|
-
`MAINSEQUENCE_CODEX_TOOL_CATALOG=off` stops a server from reading or writing the
|
|
461
|
-
catalog on its own (the packaged test uses it); cached tools are still listed.
|
|
462
|
-
|
|
463
|
-
Live acceptance on 2026-10-23, Codex CLI 0.163.0, local marketplace install: a fresh
|
|
464
|
-
server's first `tools/list` returned the 16 plugin tools; its background refresh wrote
|
|
465
|
-
70 CRM schemas to the catalog and sent `tools/list_changed`; the next `tools/list`
|
|
466
|
-
returned 86 tools. In `codex exec` sessions the model found and called
|
|
467
|
-
`mcp__mainsequence__ms_crm_contacts_list_68ee6e71` directly through its code-mode tool and
|
|
468
|
-
answered with the contact's title and uid; attempts ran 20–35 s and were not cut off by
|
|
469
|
-
the host. Three earlier sessions failed on upstream errors only (`HTTP 503` and a reset
|
|
470
|
-
from the project gateway, `HTTP 500` from the development backend behind the
|
|
471
|
-
`local-backend` haproxy); a plain-fetch call made in the same minute as the successful
|
|
472
|
-
session also met one backend `HTTP 500`. Those errors now reach the model with their
|
|
473
|
-
status code instead of a generic "refresh" message.
|
|
474
|
-
|
|
475
|
-
## Shared project-tool registry — 0.7.9
|
|
476
|
-
|
|
477
|
-
The 0.7.8 comparison left two copies of the same five things in the Claude Desktop and
|
|
478
|
-
Codex plugins: the tool name, the definition, the result shape, the catalog refresh and the
|
|
479
|
-
state directory. devtools 0.3.12 owns them now (its ADR 0004, "Shared project-tool registry
|
|
480
|
-
for host plugins"), and this release consumes that API:
|
|
481
|
-
|
|
482
|
-
- `src/hosts/toolCatalog.ts` is gone. The server creates devtools'
|
|
483
|
-
`createProjectToolCatalog({ dispatch, disabled, notify })`, lists `catalog.list()` after its
|
|
484
|
-
own 16 tools, keeps `tools/list_changed`, `catalog.update()` after `mainsequence_tools`
|
|
485
|
-
and `catalog.refresh(true)` after a connection or account change, and answers an `ms_*`
|
|
486
|
-
call with `projectToolResult(mcp-call)`. Names, schemas, hints and results are the bytes
|
|
487
|
-
devtools produces, so they are the Claude Desktop plugin's.
|
|
488
|
-
- The catalog file is `project-tool-catalog.json` beside `mcp-connections.json`, shared
|
|
489
|
-
with the Claude Desktop plugin; a refresh by either host is visible to the other at its
|
|
490
|
-
next listing. The 0.7.8 file, `codex-tool-catalog.json`, is left in place and unused; the
|
|
491
|
-
first refresh writes the new one. A listing is scoped to the current account's backend,
|
|
492
|
-
so connections another backend saved into the same file stay out of this chat's tools.
|
|
493
|
-
- devtools gives project MCP requests a 120 s budget of its own and honours a tool's
|
|
494
|
-
advertised timeout up to 300 s; the server's 120 s override from 0.7.8 is removed.
|
|
495
|
-
Error messages from devtools now name the endpoint, the request (`tools/call
|
|
496
|
-
crm_contacts_list`) and the status, tell a timeout from a connection failure, and keep
|
|
497
|
-
a JSON-RPC error's own message; the server passes them through unchanged.
|
|
498
|
-
- `tests/panel-tool-catalog.test.cjs` moved to devtools (`tests/project-tools.test.cjs`,
|
|
499
|
-
with the frozen name vector `ms_crm_contacts_list_183f8138`); `panel-server.test.cjs`
|
|
500
|
-
still proves the packaged server registers a cached connection's tool with devtools'
|
|
501
|
-
name and schema.
|
|
502
|
-
|
|
503
|
-
Pins devtools 0.3.12, built from its registry archive (`npm ci --ignore-scripts`; the integrity in
|
|
504
|
-
`package-lock.json` and `build-info.json` is the registry's `dist.integrity`). `npm run
|
|
505
|
-
release:check`: 55 tests, release metadata, the standalone and npm archives, the npm archive
|
|
506
|
-
exercised as Codex installs it.
|
|
507
|
-
|
|
508
|
-
Live acceptance on 2026-10-23 with this build's packaged server over stdio
|
|
509
|
-
(`codex/dist/panel-server.js`, the shared machine session, backend `http://local-backend:8000`,
|
|
510
|
-
environment Production): `initialize` answered `mainsequence 0.7.9` with `tools.listChanged`. The
|
|
511
|
-
first `tools/list` returned 160 tools, the 16 plugin tools plus 144 project tools: before the
|
|
512
|
-
server has learned its backend from `auth-status`, the shared file's two scopes
|
|
513
|
-
(`http://127.0.0.1:8000`, written by the Claude Desktop plugin, and `http://local-backend:8000`)
|
|
514
|
-
are both listed. The background refresh learned the backend and sent `tools/list_changed` 0.5 s
|
|
515
|
-
later; the next `tools/list` returned 88 tools, the 72 CRM tools named for this backend
|
|
516
|
-
(`ms_crm_contacts_list_68ee6e71`, described `MainSequence crm [Production]: List CRM contacts
|
|
517
|
-
with bounded paging and filters.`). `tools/call ms_crm_contacts_list_68ee6e71` with
|
|
518
|
-
`page_size: 1` returned in 10.1 s with `isError` unset: two text blocks and `structuredContent`
|
|
519
|
-
`code: ok` with one contact of 212. In the same hour the Claude Desktop plugin 0.4.19 registered
|
|
520
|
-
the same release's tools from the same shared file under the `127.0.0.1:8000` names. The record
|
|
521
|
-
is the local `artifacts/live-acceptance-0.7.9.json`. The pre-backend listing of every scope is a
|
|
522
|
-
devtools follow-up: a fresh server's first list could be scoped to the configured backend.
|
|
147
|
+
The discovery tools are model- and app-accessible and return useful structured results
|
|
148
|
+
without a UI. Their arguments are allowlisted; they do not accept arbitrary devtools
|
|
149
|
+
actions. Context identifiers are short-lived server memory, not agent session IDs or a new
|
|
150
|
+
persistent settings store. Restarting the MCP process requires refreshing the panel.
|
|
151
|
+
|
|
152
|
+
Saved connections are read with devtools' read-only listing, without migrating or writing
|
|
153
|
+
them. Public typed results replace host-side backend response parsing. Devtools binds the
|
|
154
|
+
actual request and retry credentials to the selected account; the plugin keeps local
|
|
155
|
+
backend-change checks, context IDs and late-view rejection. No private package imports or
|
|
156
|
+
independent MainSequence HTTP client exist in the plugin.
|
|
157
|
+
|
|
158
|
+
The UI uses the public MCP Apps JSON-RPC bridge. All colors, typography and radii prefer
|
|
159
|
+
host CSS variables, with neutral light/dark fallbacks. Data is rendered as text, including
|
|
160
|
+
external descriptions. The UI has no external fetches, scripts or fonts and declares empty
|
|
161
|
+
connection/resource CSP lists. Its resource URI includes a build hash; the server captures
|
|
162
|
+
immutable HTML at startup and the panel checks its identity before using results.
|
|
163
|
+
|
|
164
|
+
The developer-command hook and the conversational MCP skill keep their own behaviour.
|
|
165
|
+
Those explicit workflows retain their existing mutations; directory and schema inspection
|
|
166
|
+
stay read-only. Agent messaging uses the durable workflow above.
|
|
167
|
+
|
|
168
|
+
## Verification
|
|
169
|
+
|
|
170
|
+
`npm run release:check` type-checks, builds, runs the Node tests, checks release metadata,
|
|
171
|
+
the marketplace and the documentation, packs the standalone artifact and the npm archive,
|
|
172
|
+
and verifies the npm archive as Codex installs it, without `node_modules` or the source
|
|
173
|
+
checkout. `npm run verify:codex` and `npm run verify:codex:reload` run real app-server turns
|
|
174
|
+
against a counted offline model fixture in an isolated Codex home. Live acceptance against
|
|
175
|
+
a real backend is recorded in each release's pull request and GitHub release, not here.
|