@agent-deck/cli 1.8.2 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,13 @@
1
1
  import type { McpClient, SetupScope } from './mcp-config';
2
+ export type HarnessClient = McpClient | 'codex';
2
3
  export declare const HARNESS_MARKER_START = "<!-- agent-deck:harness:start -->";
3
4
  export declare const HARNESS_MARKER_END = "<!-- agent-deck:harness:end -->";
4
5
  export declare const CURSOR_RULE_FILENAME = "agent-deck.mdc";
5
6
  /** One-line rule description (Cursor rule picker / skill-style discoverability). */
6
7
  export declare const HARNESS_RULE_DESCRIPTION = "Use when user mentions decks, playbooks, deck MCP tools, or corrects playbook output \u2014 Agent Deck harness";
7
8
  export declare function buildClaudeHarnessBlock(scope: SetupScope): string;
9
+ /** Codex uses the same protocol guidance, merged into AGENTS.md. */
10
+ export declare function buildCodexHarnessBlock(scope: SetupScope): string;
8
11
  /** Merge only the agent-deck section; never replace other Cursor rules or skills. */
9
12
  export declare function mergeCursorHarnessFile(existing: string, harnessInner: string, description?: string): {
10
13
  content: string;
@@ -15,12 +18,12 @@ export declare function mergeClaudeHarness(existing: string, harnessBlock: strin
15
18
  content: string;
16
19
  changed: boolean;
17
20
  };
18
- export declare function resolveHarnessPath(client: McpClient, scope: SetupScope): string | null;
21
+ export declare function resolveHarnessPath(client: HarnessClient, scope: SetupScope): string | null;
19
22
  export type HarnessInstallResult = {
20
23
  installed: boolean;
21
24
  path?: string;
22
25
  action?: 'created' | 'updated' | 'unchanged';
23
26
  message: string;
24
27
  };
25
- export declare function installAgentHarness(client: McpClient, scope: SetupScope): HarnessInstallResult;
28
+ export declare function installAgentHarness(client: HarnessClient, scope: SetupScope): HarnessInstallResult;
26
29
  //# sourceMappingURL=agent-harness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-harness.d.ts","sourceRoot":"","sources":["../src/agent-harness.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1D,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AACpE,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,mHACwE,CAAC;AAoD9G,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMjE;AAUD,qFAAqF;AACrF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAiC,GAC7C;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAuBvC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEhE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAevC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAetF;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAcF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,oBAAoB,CA6C9F"}
1
+ {"version":3,"file":"agent-harness.d.ts","sourceRoot":"","sources":["../src/agent-harness.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhD,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AACpE,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,mHACwE,CAAC;AAsD9G,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMjE;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEhE;AAUD,qFAAqF;AACrF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAiC,GAC7C;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAuBvC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEhE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAevC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAoB1F;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAcF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,oBAAoB,CA6ClG"}
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.HARNESS_RULE_DESCRIPTION = exports.CURSOR_RULE_FILENAME = exports.HARNESS_MARKER_END = exports.HARNESS_MARKER_START = void 0;
7
7
  exports.buildClaudeHarnessBlock = buildClaudeHarnessBlock;
8
+ exports.buildCodexHarnessBlock = buildCodexHarnessBlock;
8
9
  exports.mergeCursorHarnessFile = mergeCursorHarnessFile;
9
10
  exports.buildCursorHarnessFile = buildCursorHarnessFile;
10
11
  exports.mergeClaudeHarness = mergeClaudeHarness;
@@ -18,11 +19,13 @@ exports.HARNESS_MARKER_END = '<!-- agent-deck:harness:end -->';
18
19
  exports.CURSOR_RULE_FILENAME = 'agent-deck.mdc';
19
20
  /** One-line rule description (Cursor rule picker / skill-style discoverability). */
20
21
  exports.HARNESS_RULE_DESCRIPTION = 'Use when user mentions decks, playbooks, deck MCP tools, or corrects playbook output — Agent Deck harness';
21
- const GLOBAL_BODY = `**Connect first:** Ensure Agent Deck MCP is connected before using deck tools (\`agent-deck setup --client cursor|claude --start\`, then restart the host). Claude Code: \`claude mcp list\` should show agent-deck as Connected when the backend is running.
22
+ const GLOBAL_BODY = `**Connect first:** Connection has three layers: host transport, folder assignment, then session bootstrap. Cursor / Claude users configure transport with \`agent-deck setup --client cursor|claude --start\`, then restart the host. Codex transport comes from the enabled Agent Deck plugin's bundled \`.mcp.json\`, which launches \`agent-deck mcp-launch\`; \`agent-deck setup --client codex\` installs or refreshes this AGENTS.md guidance but does not install the plugin. Run \`agent-deck use <deck>\` in an IDE folder when its assignment is missing or legacy, then reload or retry MCP. Claude Code: \`claude mcp list\` should show agent-deck as Connected when the backend is running.
22
23
 
23
- **Session opener (first turn only):** When Agent Deck MCP is connected and this is a new conversation in a workspace, call \`get_session_binding\` then \`get_bound_deck\`, and tell the user **exactly one line** using \`display_summary\` (e.g. \`◆ dev · 2 MCP · 0 keys · 1 playbooks\`). Grant auth is automatic from \`agent-deck use\` do **not** call \`get_decks\` or pick a deck. On \`GRANT_REQUIRED\`, tell the user to run \`agent-deck use <deck>\` and stop. Do **not** repeat the status line every turn unless the user asks or the bind changes.
24
+ **Agent Deck hard gate:** When Agent Deck MCP is configured for the current session, or \`.agent-deck/use.json\` indicates that it is expected, bootstrap is mandatory. This includes launch-selected sessions that deliberately have no assignment file. Before reading repo files, running task commands, or answering the task, require \`get_session_binding\` and \`get_bound_deck\` to succeed. If the tools are unavailable, disconnected, return \`GRANT_REQUIRED\`, or otherwise fail, stop and report the connection problem do not improvise without the deck. Checking for the optional assignment signal, checking whether Agent Deck is configured, and other read-only connection diagnostics are allowed before the gate passes.
24
25
 
25
- **Later turns:** Deck scope comes from the workspace grant. Do not re-bind unless the user asks for deck administration.
26
+ **Session opener (first turn only):** These calls verify an existing connection; they do not create it. When Agent Deck MCP is configured for the session, call \`get_session_binding\` then \`get_bound_deck\`, and tell the user **exactly one line** using \`display_summary\` (e.g. \`◆ dev · 2 MCP · 0 keys · 1 playbooks\`). Deck authority comes from the launch-selected connection — do **not** call \`get_decks\` or pick a deck. Match the task against the returned playbook triggers and call \`get_playbook\` for every match before taking task action. If tools are unavailable, repair the host transport first. On \`GRANT_REQUIRED\` or "No deck selected", run \`agent-deck use <deck>\` for a missing/legacy IDE folder assignment, or fix \`x-agent-deck-deck-id\` / the launch config for an unattended session. Then reload or retry MCP. Do **not** repeat the status line every turn unless the user asks or the bind changes.
27
+
28
+ **Later turns:** Deck scope comes from the launch-selected connection. Do not re-bind unless the user asks for deck administration.
26
29
 
27
30
  Before declining for missing tools (Slack, Linear, GitHub, etc.), use agent-deck MCP: \`get_bound_deck\`, \`call_service_tool\`. Don't hardcode deck IDs.
28
31
 
@@ -64,7 +67,7 @@ Tell the user in one line that a proposal was filed (or a signal was logged for
64
67
  | Change trigger phrases | \`set_triggers\` | Then user runs \`agent-deck use <deck>\` to refresh stubs |
65
68
 
66
69
  Wrong: \`amend_item\` with a prose sentence as anchor → **409** at propose. Right: \`rewrite_body\` for prose edits.`;
67
- const PROJECT_BODY_EXTRA = 'In this repo: run \`agent-deck use <deck>\` once (writes MCP + trigger stubs + \`.agent-deck/use.json\`). \`bind_workspace\` with the workspace root and that \`deckId\`. When a task matches a stub or deck \`triggers\`, \`get_playbook\` before improvising. After accepting playbook patches that change triggers, run \`agent-deck use --refresh\`.';
70
+ const PROJECT_BODY_EXTRA = 'In this repo: \`agent-deck use <deck>\` is the optional persistent folder-assignment path (writes MCP + trigger stubs + \`.agent-deck/use.json\`); launch-selected sessions can be bound without that file. When a task matches a stub or deck \`triggers\`, \`get_playbook\` before improvising. After accepting playbook patches that change triggers, run \`agent-deck use --refresh\`.';
68
71
  function buildClaudeHarnessBlock(scope) {
69
72
  const lines = ['## Agent Deck', '', GLOBAL_BODY];
70
73
  if (scope === 'project') {
@@ -72,6 +75,10 @@ function buildClaudeHarnessBlock(scope) {
72
75
  }
73
76
  return lines.join('\n');
74
77
  }
78
+ /** Codex uses the same protocol guidance, merged into AGENTS.md. */
79
+ function buildCodexHarnessBlock(scope) {
80
+ return buildClaudeHarnessBlock(scope);
81
+ }
75
82
  function buildCursorHarnessInner(scope) {
76
83
  const body = scope === 'project' ? `${GLOBAL_BODY}\n\n${PROJECT_BODY_EXTRA}` : GLOBAL_BODY;
77
84
  return `# Agent Deck\n\n${body}`;
@@ -128,6 +135,10 @@ function resolveHarnessPath(client, scope) {
128
135
  if (client === 'claude') {
129
136
  return scope === 'project' ? node_path_1.default.join(cwd, 'CLAUDE.md') : node_path_1.default.join(home, '.claude', 'CLAUDE.md');
130
137
  }
138
+ if (client === 'codex') {
139
+ const codexHome = process.env.CODEX_HOME?.trim() || node_path_1.default.join(home, '.codex');
140
+ return scope === 'project' ? node_path_1.default.join(cwd, 'AGENTS.md') : node_path_1.default.join(codexHome, 'AGENTS.md');
141
+ }
131
142
  return null;
132
143
  }
133
144
  function readTextFile(filePath) {
@@ -145,7 +156,7 @@ function installAgentHarness(client, scope) {
145
156
  if (!harnessPath) {
146
157
  return {
147
158
  installed: false,
148
- message: 'Agent harness applies to Cursor and Claude Code. For Claude Desktop, add the same snippets from docs/AGENT_HARNESS.md to your Claude Code global CLAUDE.md if you use both.',
159
+ message: 'Agent harness applies to Cursor, Claude Code, and Codex. For Claude Desktop, add the same snippets from docs/AGENT_HARNESS.md to your Claude Code global CLAUDE.md if you use both.',
149
160
  };
150
161
  }
151
162
  if (client === 'cursor') {
@@ -164,7 +175,7 @@ function installAgentHarness(client, scope) {
164
175
  : `Installed agent harness → ${harnessPath} (other rules/skills untouched)`,
165
176
  };
166
177
  }
167
- const block = buildClaudeHarnessBlock(scope);
178
+ const block = client === 'codex' ? buildCodexHarnessBlock(scope) : buildClaudeHarnessBlock(scope);
168
179
  const existing = readTextFile(harnessPath);
169
180
  const { content, changed } = mergeClaudeHarness(existing, block);
170
181
  const action = !existing.trim() ? 'created' : changed ? 'updated' : 'unchanged';
@@ -177,7 +188,7 @@ function installAgentHarness(client, scope) {
177
188
  action,
178
189
  message: action === 'unchanged'
179
190
  ? `Agent harness already current → ${harnessPath}`
180
- : `Installed agent harness → ${harnessPath} (rest of CLAUDE.md untouched)`,
191
+ : `Installed agent harness → ${harnessPath} (rest of ${client === 'codex' ? 'AGENTS.md' : 'CLAUDE.md'} untouched)`,
181
192
  };
182
193
  }
183
194
  //# sourceMappingURL=agent-harness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-harness.js","sourceRoot":"","sources":["../src/agent-harness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-harness.js","sourceRoot":"","sources":["../src/agent-harness.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,27 @@
1
+ export declare function probeMcpInitialize(mcpUrl: string, launchHeaders?: Record<string, string>): Promise<{
2
+ ok: boolean;
3
+ detail: string;
4
+ }>;
5
+ type ClaudeMcpEntryRead = {
6
+ kind: 'missing';
7
+ } | {
8
+ kind: 'entry';
9
+ entry: unknown;
10
+ } | {
11
+ kind: 'error';
12
+ message: string;
13
+ };
14
+ export type ClaudeMcpConfigAssessment = {
15
+ ok: boolean;
16
+ lines: string[];
17
+ };
18
+ export declare function assessClaudeMcpConfig(project: ClaudeMcpEntryRead, user: ClaudeMcpEntryRead): ClaudeMcpConfigAssessment;
19
+ export declare function buildMcpProbePlan(workspaceRoot: string, assignment: {
20
+ deckId: string;
21
+ } | null): {
22
+ shouldProbe: boolean;
23
+ launchHeaders: Record<string, string>;
24
+ };
1
25
  export declare function runDebugMcp(): Promise<number>;
26
+ export {};
2
27
  //# sourceMappingURL=debug-mcp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug-mcp.d.ts","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":"AA0EA,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAiGnD"}
1
+ {"version":3,"file":"debug-mcp.d.ts","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":"AAwBA,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACzC,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAmC1C;AAED,KAAK,kBAAkB,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAwBF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,kBAAkB,GACvB,yBAAyB,CAmD3B;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACpC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAWjE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA8GnD"}
package/dist/debug-mcp.js CHANGED
@@ -3,12 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.probeMcpInitialize = probeMcpInitialize;
7
+ exports.assessClaudeMcpConfig = assessClaudeMcpConfig;
8
+ exports.buildMcpProbePlan = buildMcpProbePlan;
6
9
  exports.runDebugMcp = runDebugMcp;
7
10
  const node_fs_1 = __importDefault(require("node:fs"));
8
11
  const node_os_1 = __importDefault(require("node:os"));
9
12
  const node_path_1 = __importDefault(require("node:path"));
13
+ const shared_1 = require("@agent-deck/shared");
14
+ const assignment_1 = require("./assignment");
10
15
  const ports_1 = require("./ports");
11
16
  const defaults_1 = require("./defaults");
17
+ const mcp_config_1 = require("./mcp-config");
12
18
  async function fetchText(url, init) {
13
19
  try {
14
20
  const response = await fetch(url, { ...init, signal: AbortSignal.timeout(5000) });
@@ -20,7 +26,7 @@ async function fetchText(url, init) {
20
26
  return { ok: false, status: 0, body: message };
21
27
  }
22
28
  }
23
- async function probeMcpInitialize(mcpUrl) {
29
+ async function probeMcpInitialize(mcpUrl, launchHeaders = {}) {
24
30
  const endpoint = `${mcpUrl}/mcp`;
25
31
  const payload = {
26
32
  jsonrpc: '2.0',
@@ -37,6 +43,7 @@ async function probeMcpInitialize(mcpUrl) {
37
43
  headers: {
38
44
  'Content-Type': 'application/json',
39
45
  Accept: 'application/json, text/event-stream',
46
+ ...launchHeaders,
40
47
  },
41
48
  body: JSON.stringify(payload),
42
49
  });
@@ -51,28 +58,85 @@ async function probeMcpInitialize(mcpUrl) {
51
58
  detail: `POST ${endpoint} → HTTP ${result.status}: ${result.body.slice(0, 200)}`,
52
59
  };
53
60
  }
54
- function readClaudeMcpEntry() {
55
- const configPath = node_path_1.default.join(node_os_1.default.homedir(), '.claude.json');
61
+ function readClaudeMcpEntry(configPath, displayPath) {
56
62
  if (!node_fs_1.default.existsSync(configPath)) {
57
- return null;
63
+ return { kind: 'missing' };
58
64
  }
59
65
  try {
60
66
  const parsed = JSON.parse(node_fs_1.default.readFileSync(configPath, 'utf8'));
61
67
  const entry = parsed.mcpServers?.['agent-deck'];
62
68
  if (!entry) {
63
- return 'agent-deck not in ~/.claude.json mcpServers';
69
+ return { kind: 'missing' };
64
70
  }
65
- return JSON.stringify(entry);
71
+ return { kind: 'entry', entry };
66
72
  }
67
73
  catch (error) {
68
- return `Could not parse ~/.claude.json: ${error instanceof Error ? error.message : error}`;
74
+ return {
75
+ kind: 'error',
76
+ message: `Could not parse ${displayPath}: ${error instanceof Error ? error.message : error}`,
77
+ };
69
78
  }
70
79
  }
80
+ function assessClaudeMcpConfig(project, user) {
81
+ const lines = [];
82
+ let ok = true;
83
+ const assess = (label, displayPath, result, conflictingLauncher = null) => {
84
+ if (result.kind === 'missing') {
85
+ return false;
86
+ }
87
+ if (result.kind === 'error') {
88
+ lines.push(`WARN ${result.message}`);
89
+ ok = false;
90
+ return false;
91
+ }
92
+ const serialized = JSON.stringify(result.entry);
93
+ if ((0, mcp_config_1.isMcpLaunchEntry)(result.entry)) {
94
+ lines.push(`OK Claude ${label} config (${displayPath}): ${serialized}`);
95
+ return true;
96
+ }
97
+ const shape = (0, mcp_config_1.isLegacyBareHttpAgentDeckEntry)(result.entry)
98
+ ? 'bare HTTP entry'
99
+ : 'custom entry';
100
+ const conflict = conflictingLauncher
101
+ ? ` conflicts with the ${conflictingLauncher} launcher and`
102
+ : '';
103
+ lines.push(`WARN Claude ${label} config (${displayPath}) has a ${shape} that${conflict} cannot select a deck: ${serialized}`);
104
+ lines.push(` Expected the trusted \`agent-deck mcp-launch\` stdio entry.`);
105
+ const scope = label === 'project' ? 'project' : 'user';
106
+ const setupScope = label === 'project' ? ' --scope project' : '';
107
+ lines.push(` Fix: claude mcp remove agent-deck -s ${scope} && agent-deck setup --client claude${setupScope}`);
108
+ ok = false;
109
+ return false;
110
+ };
111
+ const projectTrusted = project.kind === 'entry' && (0, mcp_config_1.isMcpLaunchEntry)(project.entry);
112
+ const userTrusted = user.kind === 'entry' && (0, mcp_config_1.isMcpLaunchEntry)(user.entry);
113
+ assess('project', './.mcp.json', project, userTrusted ? 'user' : null);
114
+ assess('user', '~/.claude.json', user, projectTrusted ? 'project' : null);
115
+ if (!projectTrusted && !userTrusted && project.kind === 'missing' && user.kind === 'missing') {
116
+ lines.push('Claude config: no agent-deck entry in ./.mcp.json or ~/.claude.json');
117
+ lines.push(' Fix: agent-deck setup --client claude');
118
+ }
119
+ return { ok, lines };
120
+ }
121
+ function buildMcpProbePlan(workspaceRoot, assignment) {
122
+ if (!assignment) {
123
+ return { shouldProbe: false, launchHeaders: {} };
124
+ }
125
+ return {
126
+ shouldProbe: true,
127
+ launchHeaders: {
128
+ [shared_1.AGENT_DECK_DECK_ID_HEADER]: assignment.deckId,
129
+ [shared_1.AGENT_DECK_WORKSPACE_HEADER]: workspaceRoot,
130
+ },
131
+ };
132
+ }
71
133
  async function runDebugMcp() {
72
134
  const host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
73
135
  const backendPort = (0, defaults_1.readCliBackendPort)();
74
136
  const mcpPort = (0, defaults_1.parseCliMcpPort)(process.env.AGENT_DECK_MCP_PORT);
75
137
  const mcpUrl = `http://${host}:${mcpPort}`;
138
+ const workspaceRoot = node_path_1.default.resolve(process.env.AGENT_DECK_WORKSPACE?.trim() || process.cwd());
139
+ const assignment = await (0, assignment_1.readAssignment)(workspaceRoot);
76
140
  console.log('Agent Deck MCP debug');
77
141
  console.log(` host ${host} API :${backendPort} MCP :${mcpPort}`);
78
142
  console.log('');
@@ -120,29 +184,33 @@ async function runDebugMcp() {
120
184
  console.log(`FAIL GET ${probe.mcpUrl}/backend-status (${backendStatus.body})`);
121
185
  ok = false;
122
186
  }
123
- const init = await probeMcpInitialize(probe.mcpUrl);
124
- if (init.ok) {
125
- console.log(`OK ${init.detail} (same handshake Claude uses)`);
187
+ const probePlan = buildMcpProbePlan(workspaceRoot, assignment);
188
+ if (assignment) {
189
+ console.log(`OK Folder assignment ${assignment.deckName} (${assignment.source}) @ ${workspaceRoot}`);
126
190
  }
127
191
  else {
128
- console.log(`FAIL ${init.detail}`);
129
- ok = false;
130
- }
131
- console.log('');
132
- const claudeEntry = readClaudeMcpEntry();
133
- if (claudeEntry) {
134
- console.log(`Claude config (~/.claude.json agent-deck): ${claudeEntry}`);
135
- if (!claudeEntry.includes('"type":"http"') && !claudeEntry.includes('"type": "http"')) {
136
- console.log('WARN expected "type": "http" for Claude Code streamable HTTP');
192
+ console.log(`WARN No v2/v3 folder assignment @ ${workspaceRoot}`);
193
+ console.log(' Run `agent-deck use <deck>` for an IDE folder, or supply the deck header in an unattended launch.');
194
+ console.log('INFO Skipping authenticated MCP initialize probe; the deck must come from the launcher.');
195
+ }
196
+ if (probePlan.shouldProbe) {
197
+ const init = await probeMcpInitialize(probe.mcpUrl, probePlan.launchHeaders);
198
+ if (init.ok) {
199
+ console.log(`OK ${init.detail} (same deck headers mcp-launch uses)`);
137
200
  }
138
- if (!claudeEntry.includes(`127.0.0.1:${mcpPort}`) && !claudeEntry.includes(`localhost:${mcpPort}`)) {
139
- console.log(`WARN URL may not match running MCP (:${mcpPort})`);
201
+ else {
202
+ console.log(`FAIL ${init.detail}`);
203
+ ok = false;
140
204
  }
141
205
  }
142
- else {
143
- console.log('Claude config: no agent-deck entry in ~/.claude.json');
144
- console.log(` Fix: claude mcp add --scope user --transport http agent-deck http://127.0.0.1:${mcpPort}/mcp`);
206
+ console.log('');
207
+ const projectClaudeEntry = readClaudeMcpEntry(node_path_1.default.join(workspaceRoot, '.mcp.json'), './.mcp.json');
208
+ const userClaudeEntry = readClaudeMcpEntry(node_path_1.default.join(node_os_1.default.homedir(), '.claude.json'), '~/.claude.json');
209
+ const claudeAssessment = assessClaudeMcpConfig(projectClaudeEntry, userClaudeEntry);
210
+ for (const line of claudeAssessment.lines) {
211
+ console.log(line);
145
212
  }
213
+ ok = ok && claudeAssessment.ok;
146
214
  console.log('');
147
215
  if (ok) {
148
216
  console.log('MCP stack looks healthy. If Claude still fails:');
@@ -159,7 +227,7 @@ async function runDebugMcp() {
159
227
  console.log(' Fix: npx @agent-deck/cli start');
160
228
  }
161
229
  else {
162
- console.log('Diagnosis: MCP reachable but handshake or API link failed — see FAIL lines above.');
230
+ console.log('Diagnosis: MCP reachable but launch selection, host config, or API link failed — see WARN/FAIL lines above.');
163
231
  }
164
232
  return ok ? 0 : 1;
165
233
  }
@@ -1 +1 @@
1
- {"version":3,"file":"debug-mcp.js","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug-mcp.js","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":"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"}
@@ -7,11 +7,6 @@ export type IssuedGrant = {
7
7
  secret: string;
8
8
  status: 'pending' | 'active';
9
9
  };
10
- /** Prefer Fastify `message` / API `error` over a bare status phrase like "Bad Request". */
11
- export declare function formatTrustedWriterError(status: number, payload: {
12
- error?: string;
13
- message?: string;
14
- } | null, fallback: string): string;
15
10
  export declare function issueWorkspaceGrant(input: {
16
11
  workspaceRoot: string;
17
12
  deckId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"grant-issue.d.ts","sourceRoot":"","sources":["../src/grant-issue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAKjE,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B,CAAC;AAyBF,2FAA2F;AAC3F,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACpD,QAAQ,EAAE,MAAM,GACf,MAAM,CAYR;AAoBD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiC3C;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAqCtF;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BpC;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAM,GAAG,UAAmB,GAClC,sBAAsB,CAYxB"}
1
+ {"version":3,"file":"grant-issue.d.ts","sourceRoot":"","sources":["../src/grant-issue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAKjE,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B,CAAC;AA4BF,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B3C;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBtF;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWpC;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAM,GAAG,UAAmB,GAClC,sBAAsB,CAYxB"}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatTrustedWriterError = formatTrustedWriterError;
4
3
  exports.issueWorkspaceGrant = issueWorkspaceGrant;
5
4
  exports.activateWorkspaceGrant = activateWorkspaceGrant;
6
5
  exports.revokePendingWorkspaceGrant = revokePendingWorkspaceGrant;
@@ -10,7 +9,7 @@ const admin_secret_1 = require("./admin-secret");
10
9
  function resolveBackendUrl(host) {
11
10
  return `http://${host}:${(0, defaults_1.readCliBackendPort)()}`;
12
11
  }
13
- async function trustedWriterAuth() {
12
+ async function trustedWriterHeaders(_host) {
14
13
  const adminSecret = await (0, admin_secret_1.readAdminSecret)();
15
14
  if (!adminSecret) {
16
15
  return {
@@ -20,102 +19,52 @@ async function trustedWriterAuth() {
20
19
  }
21
20
  return {
22
21
  ok: true,
23
- authorization: `Bearer ${adminSecret}`,
22
+ headers: {
23
+ Authorization: `Bearer ${adminSecret}`,
24
+ 'Content-Type': 'application/json',
25
+ },
24
26
  };
25
27
  }
26
- /** Prefer Fastify `message` / API `error` over a bare status phrase like "Bad Request". */
27
- function formatTrustedWriterError(status, payload, fallback) {
28
- const detail = payload?.message?.trim() || payload?.error?.trim();
29
- if (detail && detail.toLowerCase() !== 'bad request' && detail.toLowerCase() !== 'error') {
30
- return detail;
31
- }
32
- if (payload?.error?.trim() && payload.error.trim().toLowerCase() !== 'bad request') {
33
- return payload.error.trim();
34
- }
35
- if (detail) {
36
- return `${detail} (${status})`;
37
- }
38
- return `${fallback} (${status})`;
39
- }
40
- async function readJsonPayload(response) {
41
- try {
42
- return (await response.json());
43
- }
44
- catch {
45
- return null;
46
- }
47
- }
48
28
  async function issueWorkspaceGrant(input) {
49
- const auth = await trustedWriterAuth();
29
+ const auth = await trustedWriterHeaders(input.host);
50
30
  if (!auth.ok) {
51
31
  return { error: auth.error };
52
32
  }
53
33
  const backendUrl = resolveBackendUrl(input.host ?? process.env.AGENT_DECK_HOST ?? '127.0.0.1');
54
34
  const response = await fetch(`${backendUrl}/api/trusted-session/workspace-grants/issue`, {
55
35
  method: 'POST',
56
- headers: {
57
- Authorization: auth.authorization,
58
- 'Content-Type': 'application/json',
59
- },
36
+ headers: auth.headers,
60
37
  body: JSON.stringify({
61
38
  workspaceRoot: input.workspaceRoot,
62
39
  deckId: input.deckId,
63
40
  }),
64
41
  });
65
- const payload = await readJsonPayload(response);
66
- const data = payload?.data;
67
- if (!response.ok || !payload?.success || !data) {
68
- return {
69
- error: formatTrustedWriterError(response.status, payload, 'Grant issuance failed'),
70
- };
42
+ const payload = (await response.json());
43
+ if (!response.ok || !payload.success || !payload.data) {
44
+ return { error: payload.error ?? `Grant issuance failed (${response.status})` };
71
45
  }
72
- return data;
46
+ return payload.data;
73
47
  }
74
48
  async function activateWorkspaceGrant(input) {
75
- const auth = await trustedWriterAuth();
49
+ const auth = await trustedWriterHeaders(input.host);
76
50
  if (!auth.ok) {
77
51
  return { error: auth.error };
78
52
  }
79
53
  const backendUrl = resolveBackendUrl(input.host ?? process.env.AGENT_DECK_HOST ?? '127.0.0.1');
80
- // Fastify rejects Content-Type: application/json with an empty body
81
- // (FST_ERR_CTP_EMPTY_JSON_BODY). Send {}.
82
- const response = await fetch(`${backendUrl}/api/trusted-session/workspace-grants/${encodeURIComponent(input.grantId)}/activate`, {
83
- method: 'POST',
84
- headers: {
85
- Authorization: auth.authorization,
86
- 'Content-Type': 'application/json',
87
- },
88
- body: '{}',
89
- });
90
- const payload = await readJsonPayload(response);
91
- const data = payload?.data;
92
- if (!response.ok || !payload?.success || !data) {
93
- return {
94
- error: formatTrustedWriterError(response.status, payload, 'Grant activation failed'),
95
- };
54
+ const response = await fetch(`${backendUrl}/api/trusted-session/workspace-grants/${encodeURIComponent(input.grantId)}/activate`, { method: 'POST', headers: auth.headers });
55
+ const payload = (await response.json());
56
+ if (!response.ok || !payload.success || !payload.data) {
57
+ return { error: payload.error ?? `Grant activation failed (${response.status})` };
96
58
  }
97
- return data;
59
+ return payload.data;
98
60
  }
99
61
  async function revokePendingWorkspaceGrant(input) {
100
- const auth = await trustedWriterAuth();
62
+ const auth = await trustedWriterHeaders(input.host);
101
63
  if (!auth.ok) {
102
64
  return { error: auth.error };
103
65
  }
104
66
  const backendUrl = resolveBackendUrl(input.host ?? process.env.AGENT_DECK_HOST ?? '127.0.0.1');
105
- const response = await fetch(`${backendUrl}/api/trusted-session/workspace-grants/${encodeURIComponent(input.grantId)}/revoke-pending`, {
106
- method: 'POST',
107
- headers: {
108
- Authorization: auth.authorization,
109
- 'Content-Type': 'application/json',
110
- },
111
- body: '{}',
112
- });
113
- if (!response.ok) {
114
- const payload = await readJsonPayload(response);
115
- return {
116
- error: formatTrustedWriterError(response.status, payload, 'Grant revoke-pending failed'),
117
- };
118
- }
67
+ await fetch(`${backendUrl}/api/trusted-session/workspace-grants/${encodeURIComponent(input.grantId)}/revoke-pending`, { method: 'POST', headers: auth.headers });
119
68
  }
120
69
  function toGrantManifest(issued, mcpUrl, store = 'file') {
121
70
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"grant-issue.js","sourceRoot":"","sources":["../src/grant-issue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grant-issue.js","sourceRoot":"","sources":["../src/grant-issue.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -37,7 +37,7 @@ function printUsage() {
37
37
  agent-deck open [--path /...]
38
38
  agent-deck statusline [--workspace <path>]
39
39
  agent-deck menubar
40
- agent-deck setup --client cursor|claude|claude-desktop [--scope global|project] [--start]
40
+ agent-deck setup --client codex|cursor|claude|claude-desktop [--scope global|project] [--start]
41
41
  agent-deck use <deck> [--client cursor|claude|both] [--refresh] [--mcp-port PORT]
42
42
  agent-deck install [--to VERSION] [--migrate-cli] [--purge-global]
43
43
  agent-deck upgrade [--check] [--to VERSION]