@agent-deck/cli 1.2.3 → 1.2.5
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 +7 -1
- package/dist/agent-harness.js.map +1 -1
- package/dist/mcp-config.d.ts.map +1 -1
- package/dist/mcp-config.js +2 -1
- package/dist/mcp-config.js.map +1 -1
- package/dist/repo-deck-init.d.ts +11 -0
- package/dist/repo-deck-init.d.ts.map +1 -0
- package/dist/repo-deck-init.js +119 -0
- package/dist/repo-deck-init.js.map +1 -0
- package/dist/setup.d.ts +3 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +62 -8
- package/dist/setup.js.map +1 -1
- package/dist/statusline-setup.d.ts +16 -0
- package/dist/statusline-setup.d.ts.map +1 -0
- package/dist/statusline-setup.js +146 -0
- package/dist/statusline-setup.js.map +1 -0
- package/dist/statusline.d.ts +2 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +56 -24
- package/dist/statusline.js.map +1 -1
- package/dist/strip-ansi.d.ts +5 -0
- package/dist/strip-ansi.d.ts.map +1 -0
- package/dist/strip-ansi.js +24 -0
- package/dist/strip-ansi.js.map +1 -0
- package/package.json +3 -3
|
@@ -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,6GACkE,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,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AACpE,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,6GACkE,CAAC;AA6BxG,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"}
|
package/dist/agent-harness.js
CHANGED
|
@@ -18,7 +18,13 @@ exports.HARNESS_MARKER_END = '<!-- agent-deck:harness:end -->';
|
|
|
18
18
|
exports.CURSOR_RULE_FILENAME = 'agent-deck.mdc';
|
|
19
19
|
/** One-line rule description (Cursor rule picker / skill-style discoverability). */
|
|
20
20
|
exports.HARNESS_RULE_DESCRIPTION = 'Agent Deck MCP — check decks for tools; playbooks for recipes; self-improve playbooks from feedback';
|
|
21
|
-
const GLOBAL_BODY =
|
|
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
|
+
|
|
23
|
+
**Session opener (first turn only):** When Agent Deck MCP is connected and this is a new conversation in a workspace, call \`bind_workspace\` with the project root (use \`get_repo_deck_status\` first if \`.agent-deck/deck.yaml\` may be missing), then \`get_session_binding\`, and tell the user **exactly one line** using \`display_summary\` (e.g. \`◆ dev · 2 MCP · 0 keys · 1 playbooks\`). This is the deck-status line for IDE Agent chat — there is no host footer there. Do **not** repeat it every turn unless the user asks or the bind changes (\`switch_bound_deck\`, new repo).
|
|
24
|
+
|
|
25
|
+
**Later turns:** Call \`bind_workspace\` before the first deck-scoped tool if not already bound. Terminal hosts may also show the deck in the prompt footer via \`statusLine\`; do not duplicate unless the user asks.
|
|
26
|
+
|
|
27
|
+
Before declining for missing tools (Slack, Linear, GitHub, etc.), use agent-deck MCP: \`bind_workspace\`, \`list_bound_deck_services\`, \`call_service_tool\`. Don't hardcode deck IDs.
|
|
22
28
|
|
|
23
29
|
Deck playbooks are task recipes — \`list_playbooks\` / \`get_playbook\` (match \`triggers\`). Don't mirror into \`.cursor/skills/\` — one source of truth on the deck.
|
|
24
30
|
|
|
@@ -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/mcp-config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAC/D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,MAAM,CAElE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAuB9E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBrG;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBtE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGnF"}
|
package/dist/mcp-config.js
CHANGED
|
@@ -12,6 +12,7 @@ exports.writeJsonFile = writeJsonFile;
|
|
|
12
12
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
13
13
|
const node_os_1 = __importDefault(require("node:os"));
|
|
14
14
|
const node_path_1 = __importDefault(require("node:path"));
|
|
15
|
+
const strip_ansi_1 = require("./strip-ansi");
|
|
15
16
|
function buildMcpUrl({ host, mcpPort }) {
|
|
16
17
|
return `http://${host}:${mcpPort}/mcp`;
|
|
17
18
|
}
|
|
@@ -58,7 +59,7 @@ function readJsonFile(filePath) {
|
|
|
58
59
|
if (!node_fs_1.default.existsSync(filePath)) {
|
|
59
60
|
return {};
|
|
60
61
|
}
|
|
61
|
-
const raw = node_fs_1.default.readFileSync(filePath, 'utf8').trim();
|
|
62
|
+
const raw = (0, strip_ansi_1.sanitizeJsonText)(node_fs_1.default.readFileSync(filePath, 'utf8').trim());
|
|
62
63
|
if (!raw) {
|
|
63
64
|
return {};
|
|
64
65
|
}
|
package/dist/mcp-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type RepoDeckInitResult = {
|
|
2
|
+
action: 'created' | 'updated' | 'valid' | 'skipped';
|
|
3
|
+
path?: string;
|
|
4
|
+
message: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function ensureRepoDeckManifest(workspaceRoot: string, options?: {
|
|
7
|
+
host?: string;
|
|
8
|
+
backendPort?: number;
|
|
9
|
+
preferredDeckName?: string;
|
|
10
|
+
}): Promise<RepoDeckInitResult>;
|
|
11
|
+
//# sourceMappingURL=repo-deck-init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-deck-init.d.ts","sourceRoot":"","sources":["../src/repo-deck-init.ts"],"names":[],"mappings":"AAwEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,OAAO,CAAC,kBAAkB,CAAC,CAuD7B"}
|
|
@@ -0,0 +1,119 @@
|
|
|
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.ensureRepoDeckManifest = ensureRepoDeckManifest;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const shared_1 = require("@agent-deck/shared");
|
|
10
|
+
const defaults_1 = require("./defaults");
|
|
11
|
+
function manifestPath(workspaceRoot) {
|
|
12
|
+
return node_path_1.default.join(node_path_1.default.resolve(workspaceRoot), shared_1.REPO_DECK_MANIFEST_PATH);
|
|
13
|
+
}
|
|
14
|
+
function readDeckIdFromManifest(filePath) {
|
|
15
|
+
try {
|
|
16
|
+
const content = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
17
|
+
const match = content.match(/^deck_id:\s*["']?([0-9a-f-]{36})["']?\s*$/im);
|
|
18
|
+
return match?.[1] ?? null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function writeManifest(workspaceRoot, deckId, deckName) {
|
|
25
|
+
const filePath = manifestPath(workspaceRoot);
|
|
26
|
+
node_fs_1.default.mkdirSync(node_path_1.default.dirname(filePath), { recursive: true });
|
|
27
|
+
const lines = [
|
|
28
|
+
'# Linked by agent-deck setup --scope project (edit deck_id from dashboard if needed)',
|
|
29
|
+
`deck_id: ${deckId}`,
|
|
30
|
+
];
|
|
31
|
+
if (deckName?.trim()) {
|
|
32
|
+
lines.push(`name: ${deckName.trim()}`);
|
|
33
|
+
}
|
|
34
|
+
node_fs_1.default.writeFileSync(filePath, `${lines.join('\n')}\n`, 'utf8');
|
|
35
|
+
return filePath;
|
|
36
|
+
}
|
|
37
|
+
async function fetchDecks(backendUrl) {
|
|
38
|
+
const response = await fetch(`${backendUrl}/api/decks`, {
|
|
39
|
+
signal: AbortSignal.timeout(2500),
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
throw new Error(`GET /api/decks returned ${response.status}`);
|
|
43
|
+
}
|
|
44
|
+
const body = (await response.json());
|
|
45
|
+
return body.success && Array.isArray(body.data) ? body.data : [];
|
|
46
|
+
}
|
|
47
|
+
async function resolveDeck(backendUrl, deckId) {
|
|
48
|
+
const response = await fetch(`${backendUrl}/api/decks/${deckId}`, {
|
|
49
|
+
signal: AbortSignal.timeout(2500),
|
|
50
|
+
});
|
|
51
|
+
if (response.status === 404) {
|
|
52
|
+
return { ok: false, error: 'Deck not found' };
|
|
53
|
+
}
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
return { ok: false, error: `GET /api/decks/${deckId} returned ${response.status}` };
|
|
56
|
+
}
|
|
57
|
+
const body = (await response.json());
|
|
58
|
+
return body.success ? { ok: true, deckName: body.data?.name } : { ok: false, error: 'Invalid deck response' };
|
|
59
|
+
}
|
|
60
|
+
function pickDeck(decks, preferredName = 'dev') {
|
|
61
|
+
if (decks.length === 0) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const byName = decks.find((deck) => deck.name === preferredName);
|
|
65
|
+
return byName ?? decks[0];
|
|
66
|
+
}
|
|
67
|
+
async function ensureRepoDeckManifest(workspaceRoot, options) {
|
|
68
|
+
const host = options?.host ?? process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
69
|
+
const backendPort = options?.backendPort ??
|
|
70
|
+
(process.env.AGENT_DECK_PORT?.trim()
|
|
71
|
+
? (0, defaults_1.parseCliBackendPort)(process.env.AGENT_DECK_PORT)
|
|
72
|
+
: defaults_1.CLI_DEFAULT_BACKEND_PORT);
|
|
73
|
+
const backendUrl = `http://${host}:${backendPort}`;
|
|
74
|
+
const filePath = manifestPath(workspaceRoot);
|
|
75
|
+
const existingDeckId = readDeckIdFromManifest(filePath);
|
|
76
|
+
let decks;
|
|
77
|
+
try {
|
|
78
|
+
decks = await fetchDecks(backendUrl);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
if (existingDeckId) {
|
|
82
|
+
return {
|
|
83
|
+
action: 'skipped',
|
|
84
|
+
path: filePath,
|
|
85
|
+
message: `${shared_1.REPO_DECK_MANIFEST_PATH} exists but Agent Deck API is offline — start backend to validate deck_id`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
action: 'skipped',
|
|
90
|
+
message: `No ${shared_1.REPO_DECK_MANIFEST_PATH} — start Agent Deck, then re-run setup --scope project or ask MCP setup_repo_deck`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (existingDeckId) {
|
|
94
|
+
const resolved = await resolveDeck(backendUrl, existingDeckId);
|
|
95
|
+
if (resolved.ok) {
|
|
96
|
+
return {
|
|
97
|
+
action: 'valid',
|
|
98
|
+
path: filePath,
|
|
99
|
+
message: `Repo deck manifest OK → ${filePath} (${resolved.deckName ?? existingDeckId})`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const deck = pickDeck(decks, options?.preferredDeckName ?? 'dev');
|
|
104
|
+
if (!deck) {
|
|
105
|
+
return {
|
|
106
|
+
action: 'skipped',
|
|
107
|
+
message: 'No decks in Agent Deck — create one in the dashboard, then re-run setup --scope project',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const action = existingDeckId ? 'updated' : 'created';
|
|
111
|
+
const written = writeManifest(workspaceRoot, deck.id, deck.name);
|
|
112
|
+
const reason = existingDeckId ? `replaced invalid deck_id ${existingDeckId}` : 'linked workspace to dashboard deck';
|
|
113
|
+
return {
|
|
114
|
+
action,
|
|
115
|
+
path: written,
|
|
116
|
+
message: `${action === 'created' ? 'Wrote' : 'Updated'} ${shared_1.REPO_DECK_MANIFEST_PATH} → ${written} (${reason}: ${deck.name})`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=repo-deck-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-deck-init.js","sourceRoot":"","sources":["../src/repo-deck-init.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
CHANGED
|
@@ -5,7 +5,10 @@ export interface SetupOptions {
|
|
|
5
5
|
host?: string;
|
|
6
6
|
mcpPort?: number;
|
|
7
7
|
start?: boolean;
|
|
8
|
+
statusline: boolean;
|
|
8
9
|
}
|
|
10
|
+
/** Status line is on by default for Claude Code and Cursor CLI; optional for Claude Desktop. */
|
|
11
|
+
export declare function resolveSetupStatusline(client: McpClient, explicit?: boolean): boolean;
|
|
9
12
|
export declare function printSetupUsage(): void;
|
|
10
13
|
export declare function runSetup(args: string[]): Promise<number>;
|
|
11
14
|
export declare function shouldStartAfterSetup(exitCode: number): boolean;
|
package/dist/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAKtB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AA6ED,gGAAgG;AAChG,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAQrF;AAmCD,wBAAgB,eAAe,IAAI,IAAI,CActC;AAyCD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwC9D;AA2BD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D"}
|
package/dist/setup.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveSetupStatusline = resolveSetupStatusline;
|
|
3
4
|
exports.printSetupUsage = printSetupUsage;
|
|
4
5
|
exports.runSetup = runSetup;
|
|
5
6
|
exports.shouldStartAfterSetup = shouldStartAfterSetup;
|
|
6
7
|
const node_child_process_1 = require("node:child_process");
|
|
7
8
|
const agent_harness_1 = require("./agent-harness");
|
|
8
9
|
const mcp_config_1 = require("./mcp-config");
|
|
10
|
+
const statusline_setup_1 = require("./statusline-setup");
|
|
11
|
+
const repo_deck_init_1 = require("./repo-deck-init");
|
|
9
12
|
const defaults_1 = require("./defaults");
|
|
10
13
|
function parseClient(value) {
|
|
11
14
|
if (!value) {
|
|
@@ -26,6 +29,7 @@ function parseSetupArgs(args) {
|
|
|
26
29
|
let host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
27
30
|
let mcpPort = (0, defaults_1.parseCliMcpPort)(process.env.AGENT_DECK_MCP_PORT);
|
|
28
31
|
let start = false;
|
|
32
|
+
let statusline;
|
|
29
33
|
for (let i = 0; i < args.length; i += 1) {
|
|
30
34
|
const arg = args[i];
|
|
31
35
|
if (arg === '--client') {
|
|
@@ -49,6 +53,12 @@ function parseSetupArgs(args) {
|
|
|
49
53
|
else if (arg === '--start') {
|
|
50
54
|
start = true;
|
|
51
55
|
}
|
|
56
|
+
else if (arg === '--statusline') {
|
|
57
|
+
statusline = true;
|
|
58
|
+
}
|
|
59
|
+
else if (arg === '--no-statusline') {
|
|
60
|
+
statusline = false;
|
|
61
|
+
}
|
|
52
62
|
else if (arg === '--help' || arg === '-h') {
|
|
53
63
|
return { error: 'help' };
|
|
54
64
|
}
|
|
@@ -65,7 +75,24 @@ function parseSetupArgs(args) {
|
|
|
65
75
|
if (!Number.isFinite(mcpPort)) {
|
|
66
76
|
return { error: '--mcp-port must be a number' };
|
|
67
77
|
}
|
|
68
|
-
return {
|
|
78
|
+
return {
|
|
79
|
+
client,
|
|
80
|
+
scope,
|
|
81
|
+
host,
|
|
82
|
+
mcpPort,
|
|
83
|
+
start,
|
|
84
|
+
statusline: resolveSetupStatusline(client, statusline),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/** Status line is on by default for Claude Code and Cursor CLI; optional for Claude Desktop. */
|
|
88
|
+
function resolveSetupStatusline(client, explicit) {
|
|
89
|
+
if (explicit === false) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
if (explicit === true) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
return client === 'cursor' || client === 'claude';
|
|
69
96
|
}
|
|
70
97
|
async function tryClaudeCliAdd(endpoint) {
|
|
71
98
|
return new Promise((resolve) => {
|
|
@@ -95,7 +122,7 @@ async function tryClaudeCliAdd(endpoint) {
|
|
|
95
122
|
}
|
|
96
123
|
function printSetupUsage() {
|
|
97
124
|
console.log(`Usage:
|
|
98
|
-
agent-deck setup --client cursor|claude|claude-desktop [--scope global|project] [--mcp-port PORT] [--start]
|
|
125
|
+
agent-deck setup --client cursor|claude|claude-desktop [--scope global|project] [--mcp-port PORT] [--start] [--no-statusline]
|
|
99
126
|
|
|
100
127
|
Options:
|
|
101
128
|
--client MCP client to configure (required)
|
|
@@ -103,16 +130,40 @@ Options:
|
|
|
103
130
|
--host MCP host (default 127.0.0.1 or AGENT_DECK_HOST)
|
|
104
131
|
--mcp-port MCP port (default ${defaults_1.CLI_DEFAULT_MCP_PORT} or AGENT_DECK_MCP_PORT)
|
|
105
132
|
--start Start Agent Deck after writing config
|
|
133
|
+
--no-statusline Skip prompt status line (default: on for cursor and claude)
|
|
134
|
+
--statusline Same as default for cursor/claude (kept for compatibility)
|
|
106
135
|
|
|
107
|
-
Setup installs MCP config
|
|
136
|
+
Setup installs MCP config, agent harness, and deck status line (Claude Code / Cursor CLI).`);
|
|
108
137
|
}
|
|
109
|
-
function finishSetup(client, scope, endpoint, shouldStart) {
|
|
138
|
+
async function finishSetup(client, scope, endpoint, shouldStart, withStatusline) {
|
|
110
139
|
const harness = (0, agent_harness_1.installAgentHarness)(client, scope);
|
|
111
140
|
console.log(harness.message);
|
|
112
141
|
if (!harness.installed && client === 'claude-desktop') {
|
|
113
142
|
console.log(' See docs/AGENT_HARNESS.md if you also use Claude Code or Cursor.');
|
|
114
143
|
}
|
|
115
|
-
|
|
144
|
+
if (scope === 'project' && (client === 'cursor' || client === 'claude')) {
|
|
145
|
+
const deck = await (0, repo_deck_init_1.ensureRepoDeckManifest)(process.cwd(), { host: endpoint.host });
|
|
146
|
+
console.log(deck.message);
|
|
147
|
+
if (deck.action === 'skipped' && !deck.path) {
|
|
148
|
+
console.log(' Or in Claude: ask the agent to call MCP setup_repo_deck for this workspace.');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (withStatusline) {
|
|
152
|
+
if (client === 'cursor' || client === 'claude') {
|
|
153
|
+
const statusline = (0, statusline_setup_1.installStatusline)(client);
|
|
154
|
+
console.log(statusline.message);
|
|
155
|
+
if (client === 'claude') {
|
|
156
|
+
console.log(' Restart Claude Code after setup. If the status line stays blank, accept workspace trust for this project.');
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
console.log(' Restart Cursor CLI after setup.');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
console.log(' --statusline applies to Cursor CLI and Claude Code only (not Claude Desktop).');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
printNextSteps(endpoint, shouldStart, client, withStatusline);
|
|
116
167
|
return shouldStart ? 2 : 0;
|
|
117
168
|
}
|
|
118
169
|
async function runSetup(args) {
|
|
@@ -136,7 +187,7 @@ async function runSetup(args) {
|
|
|
136
187
|
if (added.ok) {
|
|
137
188
|
console.log('Configured Claude Code via `claude mcp add` → ~/.claude.json');
|
|
138
189
|
console.log('Verify: claude mcp list');
|
|
139
|
-
return finishSetup(parsed.client, scope, endpoint, parsed.start === true);
|
|
190
|
+
return await finishSetup(parsed.client, scope, endpoint, parsed.start === true, parsed.statusline);
|
|
140
191
|
}
|
|
141
192
|
console.warn(`Claude CLI failed (${added.error ?? 'unknown error'}) — writing ~/.claude.json instead`);
|
|
142
193
|
}
|
|
@@ -149,9 +200,9 @@ async function runSetup(args) {
|
|
|
149
200
|
console.log('Claude Desktop uses a stdio bridge (supergateway) because JSON config is stdio-only.');
|
|
150
201
|
console.log('Start Agent Deck before opening Claude Desktop.');
|
|
151
202
|
}
|
|
152
|
-
return finishSetup(parsed.client, scope, endpoint, parsed.start === true);
|
|
203
|
+
return await finishSetup(parsed.client, scope, endpoint, parsed.start === true, parsed.statusline);
|
|
153
204
|
}
|
|
154
|
-
function printNextSteps(endpoint, shouldStart, client) {
|
|
205
|
+
function printNextSteps(endpoint, shouldStart, client, withStatusline = false) {
|
|
155
206
|
console.log('');
|
|
156
207
|
console.log('Next steps:');
|
|
157
208
|
if (shouldStart) {
|
|
@@ -165,6 +216,9 @@ function printNextSteps(endpoint, shouldStart, client) {
|
|
|
165
216
|
if (client === 'claude') {
|
|
166
217
|
console.log(' 4. Claude Code: `claude mcp list` — agent-deck should show Connected when step 1 is running');
|
|
167
218
|
}
|
|
219
|
+
if (withStatusline && (client === 'cursor' || client === 'claude')) {
|
|
220
|
+
console.log(' 5. Prompt footer should show "deck | N MCP | ..." after bind_workspace (debug: agent-deck statusline --workspace <path>)');
|
|
221
|
+
}
|
|
168
222
|
console.log('');
|
|
169
223
|
console.log('Optional: AGENT_DECK_AUTO_UPGRADE=1 agent-deck start (check npm for updates on start)');
|
|
170
224
|
}
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";;AAuGA,wDAQC;AAmCD,0CAcC;AAyCD,4BAwCC;AA2BD,sDAEC;AA9QD,2DAA2C;AAE3C,mDAAsD;AACtD,6CAUsB;AACtB,yDAA8E;AAC9E,qDAA0D;AAC1D,yCAAmE;AAWnE,SAAS,WAAW,CAAC,KAAyB;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QACjE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QAC1F,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,IAAc;IACpC,IAAI,MAAM,GAAqB,IAAI,CAAC;IACpC,IAAI,KAAK,GAAe,QAAQ,CAAC;IACjC,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,WAAW,CAAC;IACtD,IAAI,OAAO,GAAG,IAAA,0BAAe,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC/D,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,UAA+B,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9C,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YAChC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAClC,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;YACrC,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,KAAK,EAAE,yBAAyB,GAAG,EAAE,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,0DAA0D,EAAE,CAAC;IAC/E,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtE,OAAO,EAAE,KAAK,EAAE,yDAAyD,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAClD,CAAC;IAED,OAAO;QACL,MAAM;QACN,KAAK;QACL,IAAI;QACJ,OAAO;QACP,KAAK;QACL,UAAU,EAAE,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,SAAgB,sBAAsB,CAAC,MAAiB,EAAE,QAAkB;IAC1E,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAqB;IAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAA,0BAAK,EACjB,QAAQ,EACR;YACE,KAAK;YACL,KAAK;YACL,SAAS;YACT,MAAM;YACN,aAAa;YACb,MAAM;YACN,YAAY;YACZ,IAAA,wBAAW,EAAC,QAAQ,CAAC;SACtB,EACD,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CACxD,CAAC;QAEF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,mCAAmC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;wCAO0B,+BAAoB;;;;;2FAK+B,CAAC,CAAC;AAC7F,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,MAAiB,EACjB,KAAiB,EACjB,QAAqB,EACrB,WAAoB,EACpB,cAAuB;IAEvB,MAAM,OAAO,GAAG,IAAA,mCAAmB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,IAAA,uCAAsB,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,IAAA,oCAAiB,EAAC,MAA0B,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,6GAA6G,CAAC,CAAC;YAC7H,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9D,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC5B,eAAe,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,eAAe,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAgB;QAC5B,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,+BAAoB;KAChD,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;IAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,KAAK,IAAI,eAAe,oCAAoC,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,8BAAiB,EAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAA,gCAAmB,EAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAA,iCAAoB,EAAC,IAAA,yBAAY,EAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;IACrE,IAAA,0BAAa,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,cAAc,CACrB,QAAqB,EACrB,WAAoB,EACpB,MAAiB,EACjB,cAAc,GAAG,KAAK;IAEtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAA,wBAAW,EAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,cAAc,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,4HAA4H,CAAC,CAAC;IAC5I,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC;AACxG,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAAgB;IACpD,OAAO,QAAQ,KAAK,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const STATUSLINE_SCRIPT_NAME = "statusline.sh";
|
|
2
|
+
export declare const STATUSLINE_REFRESH_INTERVAL_SEC = 3;
|
|
3
|
+
export type StatuslineClient = 'cursor' | 'claude';
|
|
4
|
+
export type StatuslineInstallResult = {
|
|
5
|
+
installed: boolean;
|
|
6
|
+
configPath: string;
|
|
7
|
+
scriptPath: string;
|
|
8
|
+
action: 'created' | 'updated' | 'unchanged';
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function installStatuslineScript(): {
|
|
12
|
+
scriptPath: string;
|
|
13
|
+
action: 'created' | 'updated' | 'unchanged';
|
|
14
|
+
};
|
|
15
|
+
export declare function installStatusline(client: StatuslineClient): StatuslineInstallResult;
|
|
16
|
+
//# sourceMappingURL=statusline-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline-setup.d.ts","sourceRoot":"","sources":["../src/statusline-setup.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AACtD,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEnD,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA0DF,wBAAgB,uBAAuB,IAAI;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAA;CAAE,CAY7G;AAyDD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,uBAAuB,CA+BnF"}
|
|
@@ -0,0 +1,146 @@
|
|
|
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.STATUSLINE_REFRESH_INTERVAL_SEC = exports.STATUSLINE_SCRIPT_NAME = void 0;
|
|
7
|
+
exports.installStatuslineScript = installStatuslineScript;
|
|
8
|
+
exports.installStatusline = installStatusline;
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
const mcp_config_1 = require("./mcp-config");
|
|
13
|
+
exports.STATUSLINE_SCRIPT_NAME = 'statusline.sh';
|
|
14
|
+
exports.STATUSLINE_REFRESH_INTERVAL_SEC = 3;
|
|
15
|
+
function resolveStatuslineScriptPath() {
|
|
16
|
+
return node_path_1.default.join(node_os_1.default.homedir(), '.agent-deck', 'bin', exports.STATUSLINE_SCRIPT_NAME);
|
|
17
|
+
}
|
|
18
|
+
function resolveSetupCliBin() {
|
|
19
|
+
const candidate = node_path_1.default.join(__dirname, 'bin.js');
|
|
20
|
+
return node_fs_1.default.existsSync(candidate) ? candidate : '';
|
|
21
|
+
}
|
|
22
|
+
function buildStatuslineScript(setupCliBin) {
|
|
23
|
+
const bakedSetupCli = setupCliBin
|
|
24
|
+
? `
|
|
25
|
+
SETUP_CLI="${setupCliBin}"
|
|
26
|
+
if [ -f "$SETUP_CLI" ]; then
|
|
27
|
+
exec "$NODE_BIN" "$SETUP_CLI" statusline "$@"
|
|
28
|
+
fi
|
|
29
|
+
`
|
|
30
|
+
: '';
|
|
31
|
+
return `#!/usr/bin/env bash
|
|
32
|
+
# Agent Deck status line — installed by agent-deck setup
|
|
33
|
+
set -euo pipefail
|
|
34
|
+
|
|
35
|
+
export NO_COLOR=1
|
|
36
|
+
export FORCE_COLOR=0
|
|
37
|
+
export NPM_CONFIG_COLOR=false
|
|
38
|
+
|
|
39
|
+
if command -v agent-deck >/dev/null 2>&1; then
|
|
40
|
+
exec agent-deck statusline "$@"
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
NODE_BIN="\${NODE_BIN:-}"
|
|
44
|
+
if [ -z "$NODE_BIN" ] && command -v node >/dev/null 2>&1; then
|
|
45
|
+
NODE_BIN="$(command -v node)"
|
|
46
|
+
fi
|
|
47
|
+
if [ -z "$NODE_BIN" ] && [ -x /opt/homebrew/bin/node ]; then
|
|
48
|
+
NODE_BIN=/opt/homebrew/bin/node
|
|
49
|
+
fi
|
|
50
|
+
if [ -z "$NODE_BIN" ] && [ -x /usr/local/bin/node ]; then
|
|
51
|
+
NODE_BIN=/usr/local/bin/node
|
|
52
|
+
fi
|
|
53
|
+
if [ -z "$NODE_BIN" ]; then
|
|
54
|
+
NODE_BIN=node
|
|
55
|
+
fi
|
|
56
|
+
${bakedSetupCli}
|
|
57
|
+
GLOBAL_CLI="$(npm root -g 2>/dev/null)/@agent-deck/cli/dist/bin.js"
|
|
58
|
+
if [ -f "$GLOBAL_CLI" ]; then
|
|
59
|
+
exec "$NODE_BIN" "$GLOBAL_CLI" statusline "$@"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
export NPM_CONFIG_FETCH_TIMEOUT=10000
|
|
63
|
+
export NPM_CONFIG_FETCH_RETRIES=1
|
|
64
|
+
exec npx -y @agent-deck/cli@latest statusline "$@" 2>/dev/null
|
|
65
|
+
`;
|
|
66
|
+
}
|
|
67
|
+
function installStatuslineScript() {
|
|
68
|
+
const scriptPath = resolveStatuslineScriptPath();
|
|
69
|
+
const next = buildStatuslineScript(resolveSetupCliBin());
|
|
70
|
+
const existing = node_fs_1.default.existsSync(scriptPath) ? node_fs_1.default.readFileSync(scriptPath, 'utf8') : '';
|
|
71
|
+
node_fs_1.default.mkdirSync(node_path_1.default.dirname(scriptPath), { recursive: true });
|
|
72
|
+
node_fs_1.default.writeFileSync(scriptPath, next, { encoding: 'utf8', mode: 0o755 });
|
|
73
|
+
return {
|
|
74
|
+
scriptPath,
|
|
75
|
+
action: existing === next ? 'unchanged' : existing ? 'updated' : 'created',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function resolveStatuslineConfigPath(client) {
|
|
79
|
+
const home = node_os_1.default.homedir();
|
|
80
|
+
if (client === 'cursor') {
|
|
81
|
+
return node_path_1.default.join(home, '.cursor', 'cli-config.json');
|
|
82
|
+
}
|
|
83
|
+
return node_path_1.default.join(home, '.claude', 'settings.json');
|
|
84
|
+
}
|
|
85
|
+
function buildStatuslineConfig(scriptPath, client) {
|
|
86
|
+
const base = {
|
|
87
|
+
type: 'command',
|
|
88
|
+
command: scriptPath,
|
|
89
|
+
padding: 2,
|
|
90
|
+
};
|
|
91
|
+
if (client === 'cursor') {
|
|
92
|
+
return {
|
|
93
|
+
...base,
|
|
94
|
+
timeoutMs: 1500,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
...base,
|
|
99
|
+
refreshInterval: exports.STATUSLINE_REFRESH_INTERVAL_SEC,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function mergeStatuslineConfig(existing, scriptPath, client) {
|
|
103
|
+
const nextStatusLine = buildStatuslineConfig(scriptPath, client);
|
|
104
|
+
const current = existing.statusLine;
|
|
105
|
+
const unchanged = current &&
|
|
106
|
+
typeof current === 'object' &&
|
|
107
|
+
!Array.isArray(current) &&
|
|
108
|
+
current.command === nextStatusLine.command &&
|
|
109
|
+
current.type === nextStatusLine.type;
|
|
110
|
+
if (unchanged) {
|
|
111
|
+
return { config: existing, changed: false };
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
config: {
|
|
115
|
+
...existing,
|
|
116
|
+
statusLine: nextStatusLine,
|
|
117
|
+
},
|
|
118
|
+
changed: true,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function installStatusline(client) {
|
|
122
|
+
const { scriptPath, action: scriptAction } = installStatuslineScript();
|
|
123
|
+
const configPath = resolveStatuslineConfigPath(client);
|
|
124
|
+
const existing = (0, mcp_config_1.readJsonFile)(configPath);
|
|
125
|
+
const { config, changed } = mergeStatuslineConfig(existing, scriptPath, client);
|
|
126
|
+
if (changed) {
|
|
127
|
+
(0, mcp_config_1.writeJsonFile)(configPath, config);
|
|
128
|
+
}
|
|
129
|
+
const configAction = changed ? (Object.keys(existing).length ? 'updated' : 'created') : 'unchanged';
|
|
130
|
+
const finalAction = scriptAction === 'created' || configAction === 'created'
|
|
131
|
+
? 'created'
|
|
132
|
+
: scriptAction === 'unchanged' && configAction === 'unchanged'
|
|
133
|
+
? 'unchanged'
|
|
134
|
+
: 'updated';
|
|
135
|
+
const hostLabel = client === 'cursor' ? 'Cursor CLI' : 'Claude Code';
|
|
136
|
+
return {
|
|
137
|
+
installed: true,
|
|
138
|
+
configPath,
|
|
139
|
+
scriptPath,
|
|
140
|
+
action: finalAction,
|
|
141
|
+
message: finalAction === 'unchanged'
|
|
142
|
+
? `Status line already configured for ${hostLabel} → ${configPath}`
|
|
143
|
+
: `Installed deck status line for ${hostLabel} → ${configPath} (command: ${scriptPath})`,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=statusline-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline-setup.js","sourceRoot":"","sources":["../src/statusline-setup.ts"],"names":[],"mappings":";;;;;;AA4EA,0DAYC;AAyDD,8CA+BC;AAhLD,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAE7B,6CAA2D;AAG9C,QAAA,sBAAsB,GAAG,eAAe,CAAC;AACzC,QAAA,+BAA+B,GAAG,CAAC,CAAC;AAYjD,SAAS,2BAA2B;IAClC,OAAO,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,8BAAsB,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO,iBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB;IAChD,MAAM,aAAa,GAAG,WAAW;QAC/B,CAAC,CAAC;aACO,WAAW;;;;CAIvB;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;EAyBP,aAAa;;;;;;;;;CASd,CAAC;AACF,CAAC;AAED,SAAgB,uBAAuB;IACrC,MAAM,UAAU,GAAG,2BAA2B,EAAE,CAAC;IACjD,MAAM,IAAI,GAAG,qBAAqB,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,iBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,iBAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,iBAAE,CAAC,SAAS,CAAC,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,iBAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,OAAO;QACL,UAAU;QACV,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAwB;IAC3D,MAAM,IAAI,GAAG,iBAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB,EAAE,MAAwB;IACzE,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,CAAC;KACX,CAAC;IAEF,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO;YACL,GAAG,IAAI;YACP,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,eAAe,EAAE,uCAA+B;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAAiC,EACjC,UAAkB,EAClB,MAAwB;IAExB,MAAM,cAAc,GAAG,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC;IACpC,MAAM,SAAS,GACb,OAAO;QACP,OAAO,OAAO,KAAK,QAAQ;QAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACtB,OAAmC,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO;QACtE,OAAmC,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC;IAEpE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,MAAM,EAAE;YACN,GAAG,QAAQ;YACX,UAAU,EAAE,cAAc;SAC3B;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAwB;IACxD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,uBAAuB,EAAE,CAAC;IACvE,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAEhF,IAAI,OAAO,EAAE,CAAC;QACZ,IAAA,0BAAa,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAEpG,MAAM,WAAW,GACf,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS;QACtD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,YAAY,KAAK,WAAW,IAAI,YAAY,KAAK,WAAW;YAC5D,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,SAAS,CAAC;IAElB,MAAM,SAAS,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IAErE,OAAO;QACL,SAAS,EAAE,IAAI;QACf,UAAU;QACV,UAAU;QACV,MAAM,EAAE,WAAW;QACnB,OAAO,EACL,WAAW,KAAK,WAAW;YACzB,CAAC,CAAC,sCAAsC,SAAS,MAAM,UAAU,EAAE;YACnE,CAAC,CAAC,kCAAkC,SAAS,MAAM,UAAU,cAAc,UAAU,GAAG;KAC7F,CAAC;AACJ,CAAC"}
|
package/dist/statusline.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** Claude/Cursor may keep stdin open — never block on EOF. */
|
|
2
|
+
export declare function readStdin(timeoutMs?: number): Promise<string>;
|
|
1
3
|
export declare function resolveStatuslineWorkspace(args: string[], stdin: string): string;
|
|
2
4
|
export declare function runStatusline(args: string[]): Promise<number>;
|
|
3
5
|
//# sourceMappingURL=statusline.d.ts.map
|
package/dist/statusline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAgBA,8DAA8D;AAC9D,wBAAsB,SAAS,CAAC,SAAS,SAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClF;AAuED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBhF;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BnE"}
|
package/dist/statusline.js
CHANGED
|
@@ -3,23 +3,54 @@ 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.readStdin = readStdin;
|
|
6
7
|
exports.resolveStatuslineWorkspace = resolveStatuslineWorkspace;
|
|
7
8
|
exports.runStatusline = runStatusline;
|
|
8
9
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
-
const node_os_1 = __importDefault(require("node:os"));
|
|
10
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
11
10
|
const shared_1 = require("@agent-deck/shared");
|
|
12
11
|
const defaults_1 = require("./defaults");
|
|
12
|
+
const strip_ansi_1 = require("./strip-ansi");
|
|
13
13
|
const DEFAULT_TIMEOUT_MS = 1500;
|
|
14
|
-
|
|
14
|
+
const STDIN_READ_TIMEOUT_MS = 300;
|
|
15
|
+
/** Claude/Cursor may keep stdin open — never block on EOF. */
|
|
16
|
+
async function readStdin(timeoutMs = STDIN_READ_TIMEOUT_MS) {
|
|
15
17
|
if (process.stdin.isTTY) {
|
|
16
18
|
return '';
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
const chunks = [];
|
|
22
|
+
let settled = false;
|
|
23
|
+
const finish = () => {
|
|
24
|
+
if (settled) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
settled = true;
|
|
28
|
+
clearTimeout(hardTimer);
|
|
29
|
+
clearTimeout(idleTimer);
|
|
30
|
+
process.stdin.removeListener('data', onData);
|
|
31
|
+
process.stdin.removeListener('end', onEnd);
|
|
32
|
+
process.stdin.removeListener('error', onEnd);
|
|
33
|
+
if (!process.stdin.destroyed) {
|
|
34
|
+
process.stdin.pause();
|
|
35
|
+
}
|
|
36
|
+
resolve(Buffer.concat(chunks).toString('utf8'));
|
|
37
|
+
};
|
|
38
|
+
let idleTimer;
|
|
39
|
+
const onData = (chunk) => {
|
|
40
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
41
|
+
if (idleTimer) {
|
|
42
|
+
clearTimeout(idleTimer);
|
|
43
|
+
}
|
|
44
|
+
// Hosts often leave stdin open after one JSON line — don't wait for EOF.
|
|
45
|
+
idleTimer = setTimeout(finish, 25);
|
|
46
|
+
};
|
|
47
|
+
const onEnd = () => finish();
|
|
48
|
+
const hardTimer = setTimeout(finish, timeoutMs);
|
|
49
|
+
process.stdin.on('data', onData);
|
|
50
|
+
process.stdin.on('end', onEnd);
|
|
51
|
+
process.stdin.on('error', onEnd);
|
|
52
|
+
process.stdin.resume();
|
|
53
|
+
});
|
|
23
54
|
}
|
|
24
55
|
function parseArgs(args) {
|
|
25
56
|
let workspace;
|
|
@@ -50,22 +81,14 @@ async function fetchDisplay(backendUrl, workspaceRoot, timeoutMs) {
|
|
|
50
81
|
}
|
|
51
82
|
}
|
|
52
83
|
function readSidecarLine(workspaceRoot) {
|
|
53
|
-
const
|
|
54
|
-
if (process.env.AGENT_DECK_HOME?.trim()) {
|
|
55
|
-
candidates.add(node_path_1.default.join(node_path_1.default.resolve(process.env.AGENT_DECK_HOME.trim()), 'bindings.json'));
|
|
56
|
-
}
|
|
57
|
-
candidates.add((0, shared_1.resolveBindingsFilePath)());
|
|
58
|
-
const home = node_path_1.default.join(node_os_1.default.homedir(), '.agent-deck');
|
|
59
|
-
candidates.add(node_path_1.default.join(home, 'bindings.json'));
|
|
60
|
-
candidates.add(node_path_1.default.join(home, 'dev', 'bindings.json'));
|
|
61
|
-
for (const filePath of candidates) {
|
|
84
|
+
for (const filePath of (0, shared_1.listBindingsFileCandidates)()) {
|
|
62
85
|
try {
|
|
63
86
|
const raw = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
64
87
|
const parsed = shared_1.BindingsFileSchema.safeParse(JSON.parse(raw));
|
|
65
88
|
if (!parsed.success) {
|
|
66
89
|
continue;
|
|
67
90
|
}
|
|
68
|
-
const entry = parsed.data
|
|
91
|
+
const entry = (0, shared_1.lookupWorkspaceBinding)(parsed.data, workspaceRoot);
|
|
69
92
|
if (entry) {
|
|
70
93
|
return (0, shared_1.formatDisplayLine)(entry.deckName, entry.cardCounts);
|
|
71
94
|
}
|
|
@@ -76,12 +99,18 @@ function readSidecarLine(workspaceRoot) {
|
|
|
76
99
|
}
|
|
77
100
|
return null;
|
|
78
101
|
}
|
|
102
|
+
function shouldUseApiDisplay(display) {
|
|
103
|
+
return Boolean(display.deckName && display.source !== 'unbound');
|
|
104
|
+
}
|
|
79
105
|
function resolveBackendPorts() {
|
|
80
106
|
if (process.env.AGENT_DECK_PORT?.trim()) {
|
|
81
107
|
return [(0, defaults_1.parseCliBackendPort)(process.env.AGENT_DECK_PORT)];
|
|
82
108
|
}
|
|
83
|
-
|
|
84
|
-
|
|
109
|
+
if (process.env.AGENT_DECK_DEV === '1' || process.env.AGENT_DECK_DEV === 'true') {
|
|
110
|
+
return [8000, defaults_1.CLI_DEFAULT_BACKEND_PORT];
|
|
111
|
+
}
|
|
112
|
+
// Published `agent-deck start` first — avoids 1.5s dead port wait on every refresh.
|
|
113
|
+
return [defaults_1.CLI_DEFAULT_BACKEND_PORT, 8000];
|
|
85
114
|
}
|
|
86
115
|
function resolveStatuslineWorkspace(args, stdin) {
|
|
87
116
|
const { workspace: workspaceArg } = parseArgs(args);
|
|
@@ -115,17 +144,20 @@ async function runStatusline(args) {
|
|
|
115
144
|
for (const backendPort of backendPorts) {
|
|
116
145
|
const backendUrl = `http://${host}:${backendPort}`;
|
|
117
146
|
const display = await fetchDisplay(backendUrl, workspaceRoot, timeoutMs);
|
|
118
|
-
if (display
|
|
119
|
-
|
|
147
|
+
if (display && shouldUseApiDisplay(display)) {
|
|
148
|
+
printStatusLine(display.displayLine);
|
|
120
149
|
return 0;
|
|
121
150
|
}
|
|
122
151
|
}
|
|
123
152
|
const sidecarLine = readSidecarLine(workspaceRoot);
|
|
124
153
|
if (sidecarLine) {
|
|
125
|
-
|
|
154
|
+
printStatusLine(sidecarLine);
|
|
126
155
|
return 0;
|
|
127
156
|
}
|
|
128
|
-
|
|
157
|
+
printStatusLine((0, shared_1.formatDisplayLine)(null, { mcp: 0, credentials: 0, playbooks: 0 }, { offline: true }));
|
|
129
158
|
return 0;
|
|
130
159
|
}
|
|
160
|
+
function printStatusLine(line) {
|
|
161
|
+
process.stdout.write(`${(0, strip_ansi_1.stripAnsi)(line)}\n`);
|
|
162
|
+
}
|
|
131
163
|
//# sourceMappingURL=statusline.js.map
|
package/dist/statusline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Remove terminal ANSI SGR/OSC sequences that break JSON when pasted into config files. */
|
|
2
|
+
export declare function stripAnsi(text: string): string;
|
|
3
|
+
/** Strip ANSI and other C0 controls except tab/newline/carriage return. */
|
|
4
|
+
export declare function sanitizeJsonText(text: string): string;
|
|
5
|
+
//# sourceMappingURL=strip-ansi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-ansi.d.ts","sourceRoot":"","sources":["../src/strip-ansi.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUrD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stripAnsi = stripAnsi;
|
|
4
|
+
exports.sanitizeJsonText = sanitizeJsonText;
|
|
5
|
+
/** Remove terminal ANSI SGR/OSC sequences that break JSON when pasted into config files. */
|
|
6
|
+
function stripAnsi(text) {
|
|
7
|
+
return text
|
|
8
|
+
.replace(/\u001b\[[0-9;]*[ -/]*[@-~]/g, '')
|
|
9
|
+
.replace(/\u001b\][^\u0007]*(?:\u0007|\u001b\\)/g, '')
|
|
10
|
+
.replace(/\u001b[@-_]/g, '');
|
|
11
|
+
}
|
|
12
|
+
/** Strip ANSI and other C0 controls except tab/newline/carriage return. */
|
|
13
|
+
function sanitizeJsonText(text) {
|
|
14
|
+
const withoutAnsi = stripAnsi(text);
|
|
15
|
+
let cleaned = '';
|
|
16
|
+
for (const char of withoutAnsi) {
|
|
17
|
+
const code = char.charCodeAt(0);
|
|
18
|
+
if (code === 9 || code === 10 || code === 13 || code >= 32) {
|
|
19
|
+
cleaned += char;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return cleaned;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=strip-ansi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-ansi.js","sourceRoot":"","sources":["../src/strip-ansi.ts"],"names":[],"mappings":";;AACA,8BAKC;AAGD,4CAUC;AAnBD,4FAA4F;AAC5F,SAAgB,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;SAC1C,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC;SACrD,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,2EAA2E;AAC3E,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAC3D,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-deck/cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "Local MCP proxy with decks — one endpoint for Claude Code, Cursor, and other MCP clients",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"bin": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"prepublishOnly": "node ../../scripts/pre-publish-check.mjs && npm run build"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@agent-deck/backend": "^1.2.
|
|
43
|
-
"@agent-deck/shared": "^1.2.
|
|
42
|
+
"@agent-deck/backend": "^1.2.5",
|
|
43
|
+
"@agent-deck/shared": "^1.2.5"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/node": "^20.11.5",
|