@agent-deck/cli 1.10.6 → 1.11.1
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/dist/agent-harness.d.ts.map +1 -1
- package/dist/agent-harness.js +28 -17
- package/dist/agent-harness.js.map +1 -1
- package/dist/codex-plugin.d.ts +65 -0
- package/dist/codex-plugin.d.ts.map +1 -0
- package/dist/codex-plugin.js +508 -0
- package/dist/codex-plugin.js.map +1 -0
- package/dist/dashboard-open.d.ts +20 -0
- package/dist/dashboard-open.d.ts.map +1 -1
- package/dist/dashboard-open.js +71 -0
- package/dist/dashboard-open.js.map +1 -1
- package/dist/mcp-bridge.d.ts +4 -4
- package/dist/mcp-bridge.d.ts.map +1 -1
- package/dist/mcp-bridge.js +6 -4
- package/dist/mcp-bridge.js.map +1 -1
- package/dist/mcp-launcher.d.ts +20 -0
- package/dist/mcp-launcher.d.ts.map +1 -1
- package/dist/mcp-launcher.js +55 -4
- package/dist/mcp-launcher.js.map +1 -1
- package/dist/menubar.d.ts +6 -2
- package/dist/menubar.d.ts.map +1 -1
- package/dist/menubar.js +38 -4
- package/dist/menubar.js.map +1 -1
- package/dist/playbook-stubs.d.ts +22 -0
- package/dist/playbook-stubs.d.ts.map +1 -1
- package/dist/playbook-stubs.js +24 -1
- package/dist/playbook-stubs.js.map +1 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +16 -0
- package/dist/setup.js.map +1 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +8 -0
- package/dist/start.js.map +1 -1
- package/dist/upgrade.d.ts +11 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +31 -13
- package/dist/upgrade.js.map +1 -1
- package/dist/use.d.ts.map +1 -1
- package/dist/use.js +46 -2
- package/dist/use.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_PLUGIN_SELECTOR = exports.AGENT_DECK_PLUGIN_NAME = void 0;
|
|
7
|
+
exports.runCodexCommand = runCodexCommand;
|
|
8
|
+
exports.inspectCodexPlugin = inspectCodexPlugin;
|
|
9
|
+
exports.manualCodexCommands = manualCodexCommands;
|
|
10
|
+
exports.remediationLine = remediationLine;
|
|
11
|
+
exports.reconcileCodexPluginAfterUpgrade = reconcileCodexPluginAfterUpgrade;
|
|
12
|
+
exports.runCodexPluginDoctor = runCodexPluginDoctor;
|
|
13
|
+
const node_child_process_1 = require("node:child_process");
|
|
14
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
+
exports.AGENT_DECK_PLUGIN_NAME = 'agent-deck';
|
|
17
|
+
exports.DEFAULT_PLUGIN_SELECTOR = 'agent-deck@agent-deck';
|
|
18
|
+
function codexBin() {
|
|
19
|
+
return process.env.CODEX_BIN?.trim() || 'codex';
|
|
20
|
+
}
|
|
21
|
+
function runCodexCommand(args) {
|
|
22
|
+
const bin = codexBin();
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
const child = (0, node_child_process_1.spawn)(bin, args, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
25
|
+
let stdout = '';
|
|
26
|
+
let stderr = '';
|
|
27
|
+
child.stdout?.on('data', (chunk) => {
|
|
28
|
+
stdout += String(chunk);
|
|
29
|
+
});
|
|
30
|
+
child.stderr?.on('data', (chunk) => {
|
|
31
|
+
stderr += String(chunk);
|
|
32
|
+
});
|
|
33
|
+
child.on('error', (error) => {
|
|
34
|
+
resolve({ code: 127, stdout: '', stderr: error instanceof Error ? error.message : String(error) });
|
|
35
|
+
});
|
|
36
|
+
child.on('exit', (code) => {
|
|
37
|
+
resolve({ code: code ?? 1, stdout, stderr });
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function asArray(value) {
|
|
42
|
+
if (Array.isArray(value)) {
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
if (value && typeof value === 'object') {
|
|
46
|
+
const record = value;
|
|
47
|
+
for (const key of ['plugins', 'marketplaces', 'items', 'data', 'results']) {
|
|
48
|
+
if (Array.isArray(record[key])) {
|
|
49
|
+
return record[key];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
function asRecord(value) {
|
|
56
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : null;
|
|
57
|
+
}
|
|
58
|
+
function asString(value) {
|
|
59
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
60
|
+
}
|
|
61
|
+
function firstString(record, keys) {
|
|
62
|
+
for (const key of keys) {
|
|
63
|
+
const value = asString(record[key]);
|
|
64
|
+
if (value) {
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
function marketplacePart(selector) {
|
|
71
|
+
const at = selector.indexOf('@');
|
|
72
|
+
if (at <= 0 || at === selector.length - 1) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
return selector.slice(at + 1);
|
|
76
|
+
}
|
|
77
|
+
function parseInstalledPlugin(entry) {
|
|
78
|
+
const record = asRecord(entry);
|
|
79
|
+
if (!record) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const name = firstString(record, ['name', 'plugin', 'id']) ?? '';
|
|
83
|
+
const selectorFromField = firstString(record, ['selector']);
|
|
84
|
+
const marketplace = firstString(record, ['marketplace', 'marketplace_name', 'registry']);
|
|
85
|
+
const selector = selectorFromField ?? (marketplace ? `${name}@${marketplace}` : name);
|
|
86
|
+
if (!name && !selector) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
const rawEnabled = record.enabled ?? record.active ?? record.disabled;
|
|
90
|
+
let enabled = true;
|
|
91
|
+
if (typeof record.enabled === 'boolean') {
|
|
92
|
+
enabled = record.enabled;
|
|
93
|
+
}
|
|
94
|
+
else if (typeof record.active === 'boolean') {
|
|
95
|
+
enabled = record.active;
|
|
96
|
+
}
|
|
97
|
+
else if (typeof record.disabled === 'boolean') {
|
|
98
|
+
enabled = !record.disabled;
|
|
99
|
+
}
|
|
100
|
+
else if (typeof rawEnabled === 'string') {
|
|
101
|
+
enabled = !['false', 'no', 'off', 'disabled'].includes(rawEnabled.toLowerCase());
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
name,
|
|
105
|
+
version: firstString(record, ['version']),
|
|
106
|
+
selector,
|
|
107
|
+
enabled,
|
|
108
|
+
marketplace,
|
|
109
|
+
root: firstString(record, ['install_root', 'root', 'path', 'location', 'dir', 'installRoot']),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function parseMarketplace(entry) {
|
|
113
|
+
const record = asRecord(entry);
|
|
114
|
+
if (!record) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
const name = firstString(record, ['name', 'selector', 'id', 'marketplace', 'marketplace_name']) ?? '';
|
|
118
|
+
if (!name) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
const root = firstString(record, ['root', 'path', 'location', 'dir', 'url']);
|
|
122
|
+
const kindRaw = firstString(record, ['source', 'kind', 'type']) ?? '';
|
|
123
|
+
const urlLike = root !== undefined && /^(https?:|git@|ssh:)/i.test(root);
|
|
124
|
+
const source = /git/i.test(kindRaw) || (/^(https?:|git@|ssh:)/i.test(kindRaw) && kindRaw.length > 0) || urlLike
|
|
125
|
+
? 'git'
|
|
126
|
+
: /local|path|dir|file/i.test(kindRaw) || (root !== undefined && !urlLike)
|
|
127
|
+
? 'local'
|
|
128
|
+
: 'unknown';
|
|
129
|
+
return { name, root, source };
|
|
130
|
+
}
|
|
131
|
+
function isAgentDeckPlugin(plugin) {
|
|
132
|
+
if (plugin.name === exports.AGENT_DECK_PLUGIN_NAME) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
if (plugin.selector === exports.DEFAULT_PLUGIN_SELECTOR || plugin.selector.startsWith('agent-deck@')) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
return plugin.name.endsWith('/agent-deck');
|
|
139
|
+
}
|
|
140
|
+
function readTransport(root) {
|
|
141
|
+
if (!root) {
|
|
142
|
+
return 'unknown';
|
|
143
|
+
}
|
|
144
|
+
let raw;
|
|
145
|
+
try {
|
|
146
|
+
raw = node_fs_1.default.readFileSync(node_path_1.default.join(root, '.mcp.json'), 'utf8');
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return 'unknown';
|
|
150
|
+
}
|
|
151
|
+
let parsed;
|
|
152
|
+
try {
|
|
153
|
+
parsed = JSON.parse(raw);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return 'unknown';
|
|
157
|
+
}
|
|
158
|
+
const record = asRecord(parsed);
|
|
159
|
+
const servers = record ? asRecord(record.mcpServers) : null;
|
|
160
|
+
const entry = servers ? asRecord(servers[exports.AGENT_DECK_PLUGIN_NAME]) : null;
|
|
161
|
+
if (!entry) {
|
|
162
|
+
return 'unknown';
|
|
163
|
+
}
|
|
164
|
+
const command = asString(entry.command) ?? '';
|
|
165
|
+
const args = Array.isArray(entry.args)
|
|
166
|
+
? entry.args.filter((a) => typeof a === 'string')
|
|
167
|
+
: [];
|
|
168
|
+
if (command === 'agent-deck' && args.includes('mcp-launch')) {
|
|
169
|
+
return 'mcp-launch';
|
|
170
|
+
}
|
|
171
|
+
const type = asString(entry.type) ?? '';
|
|
172
|
+
const url = asString(entry.url) ?? '';
|
|
173
|
+
if (type === 'http' || /^https?:/i.test(url)) {
|
|
174
|
+
return 'direct-http';
|
|
175
|
+
}
|
|
176
|
+
return 'unknown';
|
|
177
|
+
}
|
|
178
|
+
async function inspectCodexPlugin(cliVersion, runner = runCodexCommand) {
|
|
179
|
+
const base = {
|
|
180
|
+
available: true,
|
|
181
|
+
cliVersion,
|
|
182
|
+
installed: [],
|
|
183
|
+
marketplaces: [],
|
|
184
|
+
transport: 'unknown',
|
|
185
|
+
};
|
|
186
|
+
let listOut;
|
|
187
|
+
try {
|
|
188
|
+
listOut = await runner(['plugin', 'list', '--available', '--json']);
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
return {
|
|
192
|
+
...base,
|
|
193
|
+
available: false,
|
|
194
|
+
error: error instanceof Error ? error.message : String(error),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
if (listOut.code !== 0) {
|
|
198
|
+
const missing = listOut.code === 127 ||
|
|
199
|
+
/not found|no such file|ENOENT|command not found/i.test(`${listOut.stderr} ${listOut.stdout}`);
|
|
200
|
+
return { ...base, available: !missing ? true : false, error: missing ? 'codex CLI not found' : (listOut.stderr.trim() || listOut.stdout.trim() || `codex exited with code ${listOut.code}`) };
|
|
201
|
+
}
|
|
202
|
+
let marketplaceOut;
|
|
203
|
+
try {
|
|
204
|
+
marketplaceOut = await runner(['plugin', 'marketplace', 'list', '--json']);
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
return {
|
|
208
|
+
...base,
|
|
209
|
+
available: false,
|
|
210
|
+
error: error instanceof Error ? error.message : String(error),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
let pluginEntries;
|
|
214
|
+
try {
|
|
215
|
+
pluginEntries = asArray(JSON.parse(listOut.stdout));
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return { ...base, error: `could not parse \`codex plugin list --available --json\` output as JSON` };
|
|
219
|
+
}
|
|
220
|
+
const installedAll = pluginEntries
|
|
221
|
+
.map(parseInstalledPlugin)
|
|
222
|
+
.filter((p) => p !== null);
|
|
223
|
+
const installed = installedAll.filter(isAgentDeckPlugin);
|
|
224
|
+
let marketplaceEntries = [];
|
|
225
|
+
if (marketplaceOut.code === 0) {
|
|
226
|
+
try {
|
|
227
|
+
marketplaceEntries = asArray(JSON.parse(marketplaceOut.stdout));
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return { ...base, installed, error: `could not parse \`codex plugin marketplace list --json\` output as JSON` };
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
// A failed marketplace list must not silently become "no marketplaces":
|
|
235
|
+
// reconciling against an unresolved source could reinstall a stale copy.
|
|
236
|
+
base.marketplaceListError =
|
|
237
|
+
marketplaceOut.stderr.trim() ||
|
|
238
|
+
marketplaceOut.stdout.trim() ||
|
|
239
|
+
`codex exited with code ${marketplaceOut.code}`;
|
|
240
|
+
}
|
|
241
|
+
const marketplaces = marketplaceEntries
|
|
242
|
+
.map(parseMarketplace)
|
|
243
|
+
.filter((m) => m !== null);
|
|
244
|
+
if (installed.length === 0) {
|
|
245
|
+
return { ...base, installed, marketplaces, classification: 'missing' };
|
|
246
|
+
}
|
|
247
|
+
const first = installed[0];
|
|
248
|
+
if (!first.enabled) {
|
|
249
|
+
return {
|
|
250
|
+
...base,
|
|
251
|
+
installed,
|
|
252
|
+
marketplaces,
|
|
253
|
+
classification: 'disabled',
|
|
254
|
+
installedVersion: first.version,
|
|
255
|
+
selector: first.selector,
|
|
256
|
+
root: first.root,
|
|
257
|
+
transport: readTransport(first.root),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
const selectors = [...new Set(installed.map((p) => p.selector))];
|
|
261
|
+
const selector = selectors.length === 1 ? selectors[0] : undefined;
|
|
262
|
+
const part = selector ? marketplacePart(selector) : undefined;
|
|
263
|
+
const supplying = selector === undefined
|
|
264
|
+
? []
|
|
265
|
+
: marketplaces.filter((m) => {
|
|
266
|
+
if (part && (m.name === part || m.name === selector)) {
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
const roots = installed.map((p) => p.root).filter(Boolean);
|
|
270
|
+
return m.root !== undefined && roots.includes(m.root);
|
|
271
|
+
});
|
|
272
|
+
const distinctRoots = [...new Set(installed.map((p) => p.root).filter(Boolean))];
|
|
273
|
+
const ambiguous = selectors.length > 1 || supplying.length > 1 || distinctRoots.length > 1;
|
|
274
|
+
if (ambiguous) {
|
|
275
|
+
return {
|
|
276
|
+
...base,
|
|
277
|
+
installed,
|
|
278
|
+
marketplaces,
|
|
279
|
+
classification: 'ambiguous-source',
|
|
280
|
+
installedVersion: first.version,
|
|
281
|
+
selector,
|
|
282
|
+
root: distinctRoots.length === 1 ? distinctRoots[0] : first.root,
|
|
283
|
+
transport: readTransport(distinctRoots.length === 1 ? distinctRoots[0] : first.root),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
const resolvedMarketplace = supplying.length === 1 ? supplying[0] : undefined;
|
|
287
|
+
const root = first.root ?? resolvedMarketplace?.root;
|
|
288
|
+
const marketplaceName = part ?? resolvedMarketplace?.name ?? first.marketplace;
|
|
289
|
+
const sourceKind = resolvedMarketplace?.source ?? 'unknown';
|
|
290
|
+
const transport = readTransport(root);
|
|
291
|
+
if (transport === 'direct-http') {
|
|
292
|
+
return {
|
|
293
|
+
...base,
|
|
294
|
+
installed,
|
|
295
|
+
marketplaces,
|
|
296
|
+
classification: 'legacy-http',
|
|
297
|
+
installedVersion: first.version,
|
|
298
|
+
selector,
|
|
299
|
+
root,
|
|
300
|
+
marketplaceName,
|
|
301
|
+
sourceKind,
|
|
302
|
+
transport,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
if (first.version !== cliVersion) {
|
|
306
|
+
return {
|
|
307
|
+
...base,
|
|
308
|
+
installed,
|
|
309
|
+
marketplaces,
|
|
310
|
+
classification: 'version-mismatch',
|
|
311
|
+
installedVersion: first.version,
|
|
312
|
+
selector,
|
|
313
|
+
root,
|
|
314
|
+
marketplaceName,
|
|
315
|
+
sourceKind,
|
|
316
|
+
transport,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
// `compatible` requires a verified mcp-launch transport. An unreadable,
|
|
320
|
+
// missing, or unrecognised `.mcp.json` is unverifiable — never healthy.
|
|
321
|
+
if (transport !== 'mcp-launch') {
|
|
322
|
+
return {
|
|
323
|
+
...base,
|
|
324
|
+
installed,
|
|
325
|
+
marketplaces,
|
|
326
|
+
classification: 'unknown-transport',
|
|
327
|
+
installedVersion: first.version,
|
|
328
|
+
selector,
|
|
329
|
+
root,
|
|
330
|
+
marketplaceName,
|
|
331
|
+
sourceKind,
|
|
332
|
+
transport,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
return {
|
|
336
|
+
...base,
|
|
337
|
+
installed,
|
|
338
|
+
marketplaces,
|
|
339
|
+
classification: 'compatible',
|
|
340
|
+
installedVersion: first.version,
|
|
341
|
+
selector,
|
|
342
|
+
root,
|
|
343
|
+
marketplaceName,
|
|
344
|
+
sourceKind,
|
|
345
|
+
transport,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
function manualCodexCommands(selector) {
|
|
349
|
+
return [`codex plugin remove ${selector}`, `codex plugin add ${selector}`];
|
|
350
|
+
}
|
|
351
|
+
function remediationLine(selector) {
|
|
352
|
+
return `codex plugin remove ${selector} && codex plugin add ${selector}`;
|
|
353
|
+
}
|
|
354
|
+
function printManualSyncBlock(selector, marketplaceName) {
|
|
355
|
+
console.log('To sync the plugin manually, run:');
|
|
356
|
+
if (marketplaceName) {
|
|
357
|
+
console.log(` codex plugin marketplace upgrade ${marketplaceName}`);
|
|
358
|
+
}
|
|
359
|
+
for (const command of manualCodexCommands(selector)) {
|
|
360
|
+
console.log(` ${command}`);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Reconcile the installed Agent Deck plugin after a successful CLI upgrade.
|
|
365
|
+
*
|
|
366
|
+
* Only acts when exactly one installed selector and one source root resolve
|
|
367
|
+
* from a successful marketplace listing. For a Git marketplace the
|
|
368
|
+
* marketplace is refreshed first. Reinstalls through supported
|
|
369
|
+
* `codex plugin remove` / `codex plugin add` commands, then re-reads plugin
|
|
370
|
+
* state (which must verify `mcp-launch` before reporting OK). Never edits
|
|
371
|
+
* Codex files directly: every failure path prints whether the CLI upgrade
|
|
372
|
+
* succeeded and whether the plugin was left unchanged or was removed, plus
|
|
373
|
+
* the exact manual Codex commands, and returns 1.
|
|
374
|
+
*/
|
|
375
|
+
async function reconcileCodexPluginAfterUpgrade(expectedVersion, runner = runCodexCommand) {
|
|
376
|
+
const state = await inspectCodexPlugin(expectedVersion, runner);
|
|
377
|
+
const selector = state.selector ?? exports.DEFAULT_PLUGIN_SELECTOR;
|
|
378
|
+
if (!state.available) {
|
|
379
|
+
console.log('CLI upgrade complete; Codex plugin unchanged (codex CLI not found).');
|
|
380
|
+
printManualSyncBlock(selector);
|
|
381
|
+
return 1;
|
|
382
|
+
}
|
|
383
|
+
if (state.error && !state.classification) {
|
|
384
|
+
console.log(`CLI upgrade complete; Codex plugin unchanged (${state.error}).`);
|
|
385
|
+
printManualSyncBlock(selector);
|
|
386
|
+
return 1;
|
|
387
|
+
}
|
|
388
|
+
if (state.classification === 'compatible') {
|
|
389
|
+
console.log(`Codex plugin: OK (${state.installedVersion ?? expectedVersion}, ${state.transport})`);
|
|
390
|
+
return 0;
|
|
391
|
+
}
|
|
392
|
+
if (state.classification === 'missing') {
|
|
393
|
+
console.log('CLI upgrade complete; Codex plugin unchanged (plugin not installed).');
|
|
394
|
+
printManualSyncBlock(selector);
|
|
395
|
+
return 1;
|
|
396
|
+
}
|
|
397
|
+
if (state.classification === 'disabled') {
|
|
398
|
+
console.log('CLI upgrade complete; Codex plugin unchanged (plugin is disabled; leaving it as-is).');
|
|
399
|
+
printManualSyncBlock(selector, state.marketplaceName);
|
|
400
|
+
return 1;
|
|
401
|
+
}
|
|
402
|
+
if (state.classification === 'ambiguous-source' || !state.selector || !state.root) {
|
|
403
|
+
console.log('CLI upgrade complete; Codex plugin unchanged (multiple sources could supply the installed plugin).');
|
|
404
|
+
printManualSyncBlock(selector, state.marketplaceName);
|
|
405
|
+
console.log('See: codex plugin list --available --json');
|
|
406
|
+
return 1;
|
|
407
|
+
}
|
|
408
|
+
if (state.marketplaceListError) {
|
|
409
|
+
console.log(`CLI upgrade complete; Codex plugin unchanged (marketplace list failed: ${state.marketplaceListError}).`);
|
|
410
|
+
printManualSyncBlock(selector, state.marketplaceName);
|
|
411
|
+
console.log('See: codex plugin marketplace list --json');
|
|
412
|
+
return 1;
|
|
413
|
+
}
|
|
414
|
+
if (state.sourceKind === 'unknown') {
|
|
415
|
+
console.log('CLI upgrade complete; Codex plugin unchanged (could not resolve a single marketplace source for the installed plugin).');
|
|
416
|
+
printManualSyncBlock(selector, state.marketplaceName);
|
|
417
|
+
console.log('See: codex plugin marketplace list --json');
|
|
418
|
+
return 1;
|
|
419
|
+
}
|
|
420
|
+
const targetSelector = state.selector;
|
|
421
|
+
const marketplaceName = state.marketplaceName;
|
|
422
|
+
if (state.sourceKind === 'git' && marketplaceName) {
|
|
423
|
+
const refreshed = await runner(['plugin', 'marketplace', 'upgrade', marketplaceName]);
|
|
424
|
+
if (refreshed.code !== 0) {
|
|
425
|
+
console.log(`CLI upgrade complete; Codex plugin unchanged (marketplace refresh failed: ${(refreshed.stderr.trim() || refreshed.stdout.trim() || `exit ${refreshed.code}`)}).`);
|
|
426
|
+
printManualSyncBlock(targetSelector, marketplaceName);
|
|
427
|
+
return 1;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
const removed = await runner(['plugin', 'remove', targetSelector]);
|
|
431
|
+
if (removed.code !== 0) {
|
|
432
|
+
console.log(`CLI upgrade complete; Codex plugin unchanged (remove failed: ${(removed.stderr.trim() || removed.stdout.trim() || `exit ${removed.code}`)}).`);
|
|
433
|
+
printManualSyncBlock(targetSelector, marketplaceName);
|
|
434
|
+
return 1;
|
|
435
|
+
}
|
|
436
|
+
const added = await runner(['plugin', 'add', targetSelector]);
|
|
437
|
+
if (added.code !== 0) {
|
|
438
|
+
// `remove` already succeeded, so the plugin is uninstalled — not
|
|
439
|
+
// "unchanged". Say so and print only the recovery commands.
|
|
440
|
+
console.log(`CLI upgrade complete; Codex plugin removed but reinstall failed (add failed: ${(added.stderr.trim() || added.stdout.trim() || `exit ${added.code}`)}).`);
|
|
441
|
+
console.log('To restore the plugin manually, run:');
|
|
442
|
+
if (state.sourceKind === 'git' && marketplaceName) {
|
|
443
|
+
console.log(` codex plugin marketplace upgrade ${marketplaceName}`);
|
|
444
|
+
}
|
|
445
|
+
console.log(` codex plugin add ${targetSelector}`);
|
|
446
|
+
return 1;
|
|
447
|
+
}
|
|
448
|
+
const reread = await inspectCodexPlugin(expectedVersion, runner);
|
|
449
|
+
if (reread.classification === 'compatible') {
|
|
450
|
+
console.log(`Codex plugin: OK (${reread.installedVersion ?? expectedVersion}, ${reread.transport})`);
|
|
451
|
+
return 0;
|
|
452
|
+
}
|
|
453
|
+
console.log(`CLI upgrade complete; Codex plugin still ${reread.classification ?? 'unreadable'} (installed ${reread.installedVersion ?? '(unknown)'}, expected ${expectedVersion}).`);
|
|
454
|
+
printManualSyncBlock(targetSelector, marketplaceName);
|
|
455
|
+
return 1;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Read-only `doctor` section for the Codex plugin. Never mutates Codex state:
|
|
459
|
+
* it only runs `codex plugin list` / `codex plugin marketplace list` and reads
|
|
460
|
+
* the installed plugin's bundled `.mcp.json`. Returns 0 when the plugin is
|
|
461
|
+
* compatible (or Codex is entirely absent / no plugin installed — those are
|
|
462
|
+
* warnings for non-Codex users), 1 when the installed plugin is stale,
|
|
463
|
+
* disabled, ambiguous, or unreadable.
|
|
464
|
+
*/
|
|
465
|
+
async function runCodexPluginDoctor(cliVersion, runner = runCodexCommand) {
|
|
466
|
+
const state = await inspectCodexPlugin(cliVersion, runner);
|
|
467
|
+
if (!state.available) {
|
|
468
|
+
console.log('WARN: Codex CLI not found (Codex plugin check skipped)');
|
|
469
|
+
return 0;
|
|
470
|
+
}
|
|
471
|
+
if (state.error && !state.classification) {
|
|
472
|
+
console.error(`FAIL: Codex plugin state unreadable (${state.error})`);
|
|
473
|
+
console.log('Run: codex plugin list --available --json');
|
|
474
|
+
return 1;
|
|
475
|
+
}
|
|
476
|
+
switch (state.classification) {
|
|
477
|
+
case 'compatible': {
|
|
478
|
+
console.log(`Codex plugin: OK (${state.installedVersion ?? cliVersion}, ${state.transport})`);
|
|
479
|
+
return 0;
|
|
480
|
+
}
|
|
481
|
+
case 'missing': {
|
|
482
|
+
console.log('WARN: Codex plugin not installed (expected agent-deck@agent-deck)');
|
|
483
|
+
console.log(`Run: codex plugin add ${exports.DEFAULT_PLUGIN_SELECTOR}`);
|
|
484
|
+
return 0;
|
|
485
|
+
}
|
|
486
|
+
case 'disabled':
|
|
487
|
+
case 'version-mismatch':
|
|
488
|
+
case 'legacy-http':
|
|
489
|
+
case 'unknown-transport':
|
|
490
|
+
case 'ambiguous-source': {
|
|
491
|
+
const selector = state.selector ?? exports.DEFAULT_PLUGIN_SELECTOR;
|
|
492
|
+
const root = state.root ?? '(unknown)';
|
|
493
|
+
const source = state.sourceKind ?? 'unknown';
|
|
494
|
+
console.log(`Codex plugin: ${state.classification} (installed ${state.installedVersion ?? '(unknown)'}, expected ${cliVersion})`);
|
|
495
|
+
console.log(`Selector: ${selector}`);
|
|
496
|
+
console.log(`Marketplace root: ${root} (${source})`);
|
|
497
|
+
console.log(`Transport: ${state.transport}`);
|
|
498
|
+
console.log(`Remediation: ${remediationLine(selector)}`);
|
|
499
|
+
console.error(`FAIL: Codex plugin ${state.classification} (installed ${state.installedVersion ?? '(unknown)'}, expected ${cliVersion})`);
|
|
500
|
+
return 1;
|
|
501
|
+
}
|
|
502
|
+
default: {
|
|
503
|
+
console.error(`FAIL: Codex plugin state unreadable (${state.error ?? 'unknown error'})`);
|
|
504
|
+
return 1;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
//# sourceMappingURL=codex-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-plugin.js","sourceRoot":"","sources":["../src/codex-plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/dashboard-open.d.ts
CHANGED
|
@@ -22,4 +22,24 @@ export declare function openDashboardInBrowser(backendUrl: string, pathAndQuery?
|
|
|
22
22
|
message?: string;
|
|
23
23
|
}>;
|
|
24
24
|
export declare function formatDashboardStatusLine(): string;
|
|
25
|
+
export type DeckSwitchApprovalTarget = {
|
|
26
|
+
approvalPath: string;
|
|
27
|
+
requestId: string;
|
|
28
|
+
runtimeSessionId?: string;
|
|
29
|
+
};
|
|
30
|
+
/** Approval page path for one deck-switch request. Secrets never go in the URL. */
|
|
31
|
+
export declare function buildDeckSwitchApprovalPath(requestId: string, runtimeSessionId?: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* NOT-212: read the pending presentation hint returned by `switch_deck`.
|
|
34
|
+
* Only a `deck_switch_request` presentation with status `pending` and a
|
|
35
|
+
* request id is an auto-open target — `already_on_deck`, errors, and foreign
|
|
36
|
+
* shapes mean there is nothing for the human to approve.
|
|
37
|
+
*/
|
|
38
|
+
export declare function readDeckSwitchApproval(result: unknown): DeckSwitchApprovalTarget | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Mint an authenticated dashboard URL and open the switch approval page.
|
|
41
|
+
* Reuses the trusted bootstrap mechanism — the URL carries only the opaque
|
|
42
|
+
* request id, never an auth secret.
|
|
43
|
+
*/
|
|
44
|
+
export declare function openDeckSwitchApproval(backendUrl: string, result: unknown, opener?: typeof openDashboardInBrowser, env?: NodeJS.ProcessEnv): Promise<void>;
|
|
25
45
|
//# sourceMappingURL=dashboard-open.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-open.d.ts","sourceRoot":"","sources":["../src/dashboard-open.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,IAAI,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,0FAA0F;AAC1F,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,YAAY,SAAM,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAkDjC;AAED,wBAAgB,4BAA4B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAG1F;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED,4EAA4E;AAC5E,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,YAAY,SAAM,GACjB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa3D;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAElD"}
|
|
1
|
+
{"version":3,"file":"dashboard-open.d.ts","sourceRoot":"","sources":["../src/dashboard-open.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,IAAI,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,0FAA0F;AAC1F,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,YAAY,SAAM,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAkDjC;AAED,wBAAgB,4BAA4B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAG1F;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED,4EAA4E;AAC5E,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,YAAY,SAAM,GACjB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa3D;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhG;AAOD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,wBAAwB,GAAG,SAAS,CAqC5F;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EACf,MAAM,gCAAyB,EAC/B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
package/dist/dashboard-open.js
CHANGED
|
@@ -5,6 +5,9 @@ exports.shouldOpenDashboardByDefault = shouldOpenDashboardByDefault;
|
|
|
5
5
|
exports.openUrlInSystemBrowser = openUrlInSystemBrowser;
|
|
6
6
|
exports.openDashboardInBrowser = openDashboardInBrowser;
|
|
7
7
|
exports.formatDashboardStatusLine = formatDashboardStatusLine;
|
|
8
|
+
exports.buildDeckSwitchApprovalPath = buildDeckSwitchApprovalPath;
|
|
9
|
+
exports.readDeckSwitchApproval = readDeckSwitchApproval;
|
|
10
|
+
exports.openDeckSwitchApproval = openDeckSwitchApproval;
|
|
8
11
|
const node_child_process_1 = require("node:child_process");
|
|
9
12
|
const admin_secret_1 = require("./admin-secret");
|
|
10
13
|
const NONCE_TIMEOUT_MS = 10_000;
|
|
@@ -83,4 +86,72 @@ async function openDashboardInBrowser(backendUrl, pathAndQuery = '/') {
|
|
|
83
86
|
function formatDashboardStatusLine() {
|
|
84
87
|
return 'Dashboard open or reopen with: agent-deck open';
|
|
85
88
|
}
|
|
89
|
+
/** Approval page path for one deck-switch request. Secrets never go in the URL. */
|
|
90
|
+
function buildDeckSwitchApprovalPath(requestId, runtimeSessionId) {
|
|
91
|
+
const path = `/deck-switch/approve?request=${encodeURIComponent(requestId)}`;
|
|
92
|
+
return runtimeSessionId ? `${path}&session=${encodeURIComponent(runtimeSessionId)}` : path;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* NOT-212: read the pending presentation hint returned by `switch_deck`.
|
|
96
|
+
* Only a `deck_switch_request` presentation with status `pending` and a
|
|
97
|
+
* request id is an auto-open target — `already_on_deck`, errors, and foreign
|
|
98
|
+
* shapes mean there is nothing for the human to approve.
|
|
99
|
+
*/
|
|
100
|
+
function readDeckSwitchApproval(result) {
|
|
101
|
+
const toolResult = result;
|
|
102
|
+
if (!toolResult || toolResult.isError || !Array.isArray(toolResult.content)) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
for (const item of toolResult.content) {
|
|
106
|
+
if (item?.type !== 'text' || typeof item.text !== 'string') {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
const data = JSON.parse(item.text);
|
|
111
|
+
const presentation = data.presentation;
|
|
112
|
+
if (presentation?.kind !== 'deck_switch_request') {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (data.status !== 'pending' || presentation.status === 'already_on_deck') {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const requestId = typeof data.requestId === 'string' ? data.requestId.trim() : '';
|
|
119
|
+
if (!requestId) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const runtimeSessionId = typeof data.runtimeSessionId === 'string' && data.runtimeSessionId.trim()
|
|
123
|
+
? data.runtimeSessionId.trim()
|
|
124
|
+
: undefined;
|
|
125
|
+
return {
|
|
126
|
+
approvalPath: buildDeckSwitchApprovalPath(requestId, runtimeSessionId),
|
|
127
|
+
requestId,
|
|
128
|
+
...(runtimeSessionId ? { runtimeSessionId } : {}),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Other text content is not a switch_deck response.
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Mint an authenticated dashboard URL and open the switch approval page.
|
|
139
|
+
* Reuses the trusted bootstrap mechanism — the URL carries only the opaque
|
|
140
|
+
* request id, never an auth secret.
|
|
141
|
+
*/
|
|
142
|
+
async function openDeckSwitchApproval(backendUrl, result, opener = openDashboardInBrowser, env = process.env) {
|
|
143
|
+
// AGENT_DECK_NO_OPEN is an explicit opt-out; the request stays pending and
|
|
144
|
+
// the menubar inbox remains the recovery path.
|
|
145
|
+
if (!shouldOpenDashboardByDefault(env)) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const approval = readDeckSwitchApproval(result);
|
|
149
|
+
if (!approval) {
|
|
150
|
+
throw new Error('switch_deck response did not contain a pending approval request');
|
|
151
|
+
}
|
|
152
|
+
const opened = await opener(backendUrl, approval.approvalPath);
|
|
153
|
+
if (opened.code !== 0) {
|
|
154
|
+
throw new Error(opened.message ?? 'failed to open deck-switch approval');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
86
157
|
//# sourceMappingURL=dashboard-open.js.map
|