@agent-deck/cli 1.8.2 → 1.10.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.
- package/dist/agent-harness.d.ts +5 -2
- package/dist/agent-harness.d.ts.map +1 -1
- package/dist/agent-harness.js +18 -7
- package/dist/agent-harness.js.map +1 -1
- package/dist/debug-mcp.d.ts +25 -0
- package/dist/debug-mcp.d.ts.map +1 -1
- package/dist/debug-mcp.js +93 -25
- package/dist/debug-mcp.js.map +1 -1
- package/dist/grant-issue.d.ts +0 -5
- package/dist/grant-issue.d.ts.map +1 -1
- package/dist/grant-issue.js +19 -70
- package/dist/grant-issue.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/mcp-bridge.d.ts +182 -0
- package/dist/mcp-bridge.d.ts.map +1 -0
- package/dist/mcp-bridge.js +856 -0
- package/dist/mcp-bridge.js.map +1 -0
- package/dist/mcp-config.d.ts.map +1 -1
- package/dist/mcp-config.js +8 -5
- package/dist/mcp-config.js.map +1 -1
- package/dist/mcp-launcher.d.ts +9 -0
- package/dist/mcp-launcher.d.ts.map +1 -1
- package/dist/mcp-launcher.js +47 -0
- package/dist/mcp-launcher.js.map +1 -1
- package/dist/ports.d.ts +38 -0
- package/dist/ports.d.ts.map +1 -1
- package/dist/ports.js +63 -0
- package/dist/ports.js.map +1 -1
- package/dist/setup.d.ts +6 -4
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +51 -26
- package/dist/setup.js.map +1 -1
- package/dist/start.d.ts +1 -0
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +6 -2
- package/dist/start.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -0
- package/dist/status.js.map +1 -1
- package/package.json +3 -3
- package/dist/coordinator.d.ts +0 -2
- package/dist/coordinator.d.ts.map +0 -1
- package/dist/coordinator.js +0 -153
- package/dist/coordinator.js.map +0 -1
package/dist/agent-harness.d.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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;
|
|
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"}
|
package/dist/agent-harness.js
CHANGED
|
@@ -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:**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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:
|
|
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
|
|
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":";;;;;;
|
|
1
|
+
{"version":3,"file":"agent-harness.js","sourceRoot":"","sources":["../src/agent-harness.ts"],"names":[],"mappings":"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"}
|
package/dist/debug-mcp.d.ts
CHANGED
|
@@ -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
|
package/dist/debug-mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-mcp.d.ts","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":"
|
|
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
|
|
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
|
|
69
|
+
return { kind: 'missing' };
|
|
64
70
|
}
|
|
65
|
-
return
|
|
71
|
+
return { kind: 'entry', entry };
|
|
66
72
|
}
|
|
67
73
|
catch (error) {
|
|
68
|
-
return
|
|
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
|
|
124
|
-
if (
|
|
125
|
-
console.log(`OK ${
|
|
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(`
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
139
|
-
console.log(`
|
|
201
|
+
else {
|
|
202
|
+
console.log(`FAIL ${init.detail}`);
|
|
203
|
+
ok = false;
|
|
140
204
|
}
|
|
141
205
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|
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
|
}
|
package/dist/debug-mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-mcp.js","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"debug-mcp.js","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/grant-issue.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/grant-issue.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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
|
|
66
|
-
|
|
67
|
-
|
|
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
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
|
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
|
-
|
|
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 {
|
package/dist/grant-issue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grant-issue.js","sourceRoot":"","sources":["../src/grant-issue.ts"],"names":[],"mappings":";;
|
|
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]
|