@agent-deck/cli 1.1.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/bin/agent-deck ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ DIR="$(cd "$(dirname "$0")/.." && pwd)"
4
+ if [[ -f "$DIR/dist/bin.js" ]]; then
5
+ exec node "$DIR/dist/bin.js" "$@"
6
+ fi
7
+ exec npx tsx "$DIR/src/bin.ts" "$@"
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const index_1 = require("./index");
5
+ (0, index_1.runCli)(process.argv)
6
+ .then((code) => {
7
+ process.exit(code);
8
+ })
9
+ .catch((error) => {
10
+ console.error(error instanceof Error ? error.message : error);
11
+ process.exit(1);
12
+ });
13
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AAEA,mCAAiC;AAEjC,IAAA,cAAM,EAAC,OAAO,CAAC,IAAI,CAAC;KACjB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IACb,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function runCredentialAdd(args: string[]): Promise<number>;
2
+ export declare function runCredentialList(): Promise<number>;
3
+ export declare function runCredentialRotate(id: string): Promise<number>;
4
+ export declare function runExec(args: string[]): Promise<number>;
5
+ export declare function runCredentialCommand(args: string[]): Promise<number>;
6
+ export declare function runCli(argv: string[]): Promise<number>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmCA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoDtE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBzD;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBrE;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwE7D;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAc1E;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C5D"}
package/dist/index.js ADDED
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCredentialAdd = runCredentialAdd;
4
+ exports.runCredentialList = runCredentialList;
5
+ exports.runCredentialRotate = runCredentialRotate;
6
+ exports.runExec = runExec;
7
+ exports.runCredentialCommand = runCredentialCommand;
8
+ exports.runCli = runCli;
9
+ const runtime_1 = require("./lib/runtime");
10
+ const start_1 = require("./start");
11
+ const version_1 = require("./version");
12
+ function getVaultManager() {
13
+ return (0, runtime_1.createCredentialManager)();
14
+ }
15
+ function printUsage() {
16
+ console.log(`Usage:
17
+ agent-deck start [--open] [--no-ui] [--port PORT] [--mcp-port PORT]
18
+ agent-deck doctor
19
+ agent-deck --version
20
+ agent-deck credential add <id> --env-name ENV_NAME --scheme bearer|header|http_basic_user [--label LABEL] [--header-name NAME] [--tags tag1,tag2]
21
+ agent-deck credential list
22
+ agent-deck credential rotate <id>
23
+ agent-deck exec [--deck DECK_ID] [--connections cred_a,cred_b] [--dry-run] -- <command...>`);
24
+ }
25
+ async function runCredentialAdd(args) {
26
+ const id = args[0];
27
+ if (!id) {
28
+ console.error('Missing credential id (expected cred_<slug>)');
29
+ return 1;
30
+ }
31
+ let envName = '';
32
+ let scheme = 'bearer';
33
+ let label = id;
34
+ let headerName;
35
+ let tags = [];
36
+ for (let i = 1; i < args.length; i += 1) {
37
+ const arg = args[i];
38
+ if (arg === '--env-name') {
39
+ envName = args[++i] ?? '';
40
+ }
41
+ else if (arg === '--scheme') {
42
+ scheme = (args[++i] ?? 'bearer');
43
+ }
44
+ else if (arg === '--label') {
45
+ label = args[++i] ?? id;
46
+ }
47
+ else if (arg === '--header-name') {
48
+ headerName = args[++i];
49
+ }
50
+ else if (arg === '--tags') {
51
+ tags = (args[++i] ?? '').split(',').map((tag) => tag.trim()).filter(Boolean);
52
+ }
53
+ }
54
+ if (!envName) {
55
+ console.error('--env-name is required');
56
+ return 1;
57
+ }
58
+ const value = await (0, runtime_1.readSecretFromStdin)(`Enter secret value for ${id}: `);
59
+ if (!value) {
60
+ console.error('Secret value is required');
61
+ return 1;
62
+ }
63
+ const manager = getVaultManager();
64
+ await manager.create({
65
+ id,
66
+ label,
67
+ scheme,
68
+ headerName,
69
+ envName,
70
+ tags,
71
+ value,
72
+ });
73
+ console.log(`Credential ${id} saved to vault`);
74
+ return 0;
75
+ }
76
+ async function runCredentialList() {
77
+ const manager = getVaultManager();
78
+ const credentials = await manager.list();
79
+ if (credentials.length === 0) {
80
+ console.log('No credentials registered');
81
+ return 0;
82
+ }
83
+ for (const credential of credentials) {
84
+ console.log(`${credential.id}\t${credential.label}\t${credential.envName}\t${credential.scheme}\tsecret=${credential.hasSecret ? 'yes' : 'no'}`);
85
+ }
86
+ return 0;
87
+ }
88
+ async function runCredentialRotate(id) {
89
+ if (!id) {
90
+ console.error('Missing credential id');
91
+ return 1;
92
+ }
93
+ const value = await (0, runtime_1.readSecretFromStdin)(`Enter new secret value for ${id}: `);
94
+ if (!value) {
95
+ console.error('Secret value is required');
96
+ return 1;
97
+ }
98
+ const manager = getVaultManager();
99
+ const rotated = await manager.rotate(id, { value });
100
+ if (!rotated) {
101
+ console.error(`Credential not found: ${id}`);
102
+ return 1;
103
+ }
104
+ console.log(`Credential ${id} rotated`);
105
+ return 0;
106
+ }
107
+ async function runExec(args) {
108
+ let deckId;
109
+ let connectionsArg;
110
+ let dryRun = false;
111
+ const commandStart = args.indexOf('--');
112
+ let optionArgs = commandStart === -1 ? args : args.slice(0, commandStart);
113
+ const commandArgs = commandStart === -1 ? [] : args.slice(commandStart + 1);
114
+ for (let i = 0; i < optionArgs.length; i += 1) {
115
+ const arg = optionArgs[i];
116
+ if (arg === '--deck') {
117
+ deckId = optionArgs[++i];
118
+ }
119
+ else if (arg === '--connections') {
120
+ connectionsArg = optionArgs[++i];
121
+ }
122
+ else if (arg === '--dry-run') {
123
+ dryRun = true;
124
+ }
125
+ }
126
+ if (commandArgs.length === 0) {
127
+ console.error('Missing command after --');
128
+ return 1;
129
+ }
130
+ const credentialIds = (0, runtime_1.parseConnections)(connectionsArg);
131
+ if (credentialIds.length === 0) {
132
+ console.error('--connections is required (comma-separated credential ids)');
133
+ return 1;
134
+ }
135
+ const manager = getVaultManager();
136
+ const startedAt = new Date().toISOString();
137
+ const command = commandArgs.join(' ');
138
+ if (deckId) {
139
+ try {
140
+ await manager.assertCredentialsOnDeck(deckId, credentialIds);
141
+ }
142
+ catch (error) {
143
+ console.error(error instanceof Error ? error.message : error);
144
+ return 1;
145
+ }
146
+ }
147
+ if (dryRun) {
148
+ const credentials = await Promise.all(credentialIds.map((id) => manager.get(id)));
149
+ console.log('Dry run — would inject environment variables:');
150
+ for (const credential of credentials) {
151
+ if (!credential) {
152
+ console.error(`Credential not found`);
153
+ return 1;
154
+ }
155
+ console.log(` ${credential.envName}=<secret from ${credential.id}>`);
156
+ }
157
+ console.log(`Would run: ${command}`);
158
+ return 0;
159
+ }
160
+ const env = await manager.resolveEnvMap(credentialIds);
161
+ const [cmd, ...cmdArgs] = commandArgs;
162
+ const exitCode = await (0, runtime_1.runCommand)(cmd, cmdArgs, env);
163
+ await manager.recordExecRun({
164
+ deckId,
165
+ command,
166
+ credentialIds,
167
+ exitCode,
168
+ startedAt,
169
+ finishedAt: new Date().toISOString(),
170
+ });
171
+ return exitCode;
172
+ }
173
+ async function runCredentialCommand(args) {
174
+ const subcommand = args[0];
175
+ switch (subcommand) {
176
+ case 'add':
177
+ return runCredentialAdd(args.slice(1));
178
+ case 'list':
179
+ return runCredentialList();
180
+ case 'rotate':
181
+ return runCredentialRotate(args[1]);
182
+ default:
183
+ printUsage();
184
+ return 1;
185
+ }
186
+ }
187
+ async function runCli(argv) {
188
+ const [, , command, ...rest] = argv;
189
+ if (command === '--version' || command === '-V' || command === '-v') {
190
+ console.log((0, version_1.getAgentDeckVersion)());
191
+ return 0;
192
+ }
193
+ switch (command) {
194
+ case 'start': {
195
+ let openBrowser = false;
196
+ let skipUi = false;
197
+ let backendPort;
198
+ let mcpPort;
199
+ for (let i = 0; i < rest.length; i += 1) {
200
+ const arg = rest[i];
201
+ if (arg === '--open') {
202
+ openBrowser = true;
203
+ }
204
+ else if (arg === '--no-ui') {
205
+ skipUi = true;
206
+ }
207
+ else if (arg === '--port') {
208
+ backendPort = Number.parseInt(rest[++i] ?? '', 10);
209
+ }
210
+ else if (arg === '--mcp-port') {
211
+ mcpPort = Number.parseInt(rest[++i] ?? '', 10);
212
+ }
213
+ else if (arg === '--help' || arg === '-h') {
214
+ printUsage();
215
+ return 0;
216
+ }
217
+ }
218
+ return (0, start_1.runStart)({ openBrowser, skipUi, backendPort, mcpPort });
219
+ }
220
+ case 'doctor':
221
+ return (0, start_1.runDoctor)();
222
+ case 'credential':
223
+ return runCredentialCommand(rest);
224
+ case 'exec':
225
+ return runExec(rest);
226
+ default:
227
+ printUsage();
228
+ return command ? 1 : 0;
229
+ }
230
+ }
231
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function createCredentialManager(): unknown;
2
+ export declare function parseConnections(value: string | undefined): string[];
3
+ export declare function readSecretFromStdin(prompt: string): Promise<string>;
4
+ export declare function runCommand(command: string, args: string[], env: Record<string, string>): Promise<number>;
5
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/lib/runtime.ts"],"names":[],"mappings":"AAGA,wBAAgB,uBAAuB,IAAI,OAAO,CAMjD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAKpE;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBzE;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC,CAWjB"}
@@ -0,0 +1,53 @@
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.createCredentialManager = createCredentialManager;
7
+ exports.parseConnections = parseConnections;
8
+ exports.readSecretFromStdin = readSecretFromStdin;
9
+ exports.runCommand = runCommand;
10
+ const node_child_process_1 = require("node:child_process");
11
+ const node_readline_1 = __importDefault(require("node:readline"));
12
+ function createCredentialManager() {
13
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
14
+ const { createCliCredentialManager } = require('@agent-deck/backend/cli-runtime');
15
+ return createCliCredentialManager();
16
+ }
17
+ function parseConnections(value) {
18
+ if (!value?.trim()) {
19
+ return [];
20
+ }
21
+ return value.split(',').map((part) => part.trim()).filter(Boolean);
22
+ }
23
+ async function readSecretFromStdin(prompt) {
24
+ if (!process.stdin.isTTY) {
25
+ const chunks = [];
26
+ for await (const chunk of process.stdin) {
27
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
28
+ }
29
+ return Buffer.concat(chunks).toString('utf8').trim();
30
+ }
31
+ const rl = node_readline_1.default.createInterface({
32
+ input: process.stdin,
33
+ output: process.stdout,
34
+ });
35
+ return new Promise((resolve) => {
36
+ rl.question(prompt, (answer) => {
37
+ rl.close();
38
+ resolve(answer.trim());
39
+ });
40
+ });
41
+ }
42
+ function runCommand(command, args, env) {
43
+ return new Promise((resolve) => {
44
+ const child = (0, node_child_process_1.spawn)(command, args, {
45
+ env: { ...process.env, ...env },
46
+ stdio: 'inherit',
47
+ shell: process.platform === 'win32',
48
+ });
49
+ child.on('error', () => resolve(1));
50
+ child.on('close', (code) => resolve(code ?? 1));
51
+ });
52
+ }
53
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/lib/runtime.ts"],"names":[],"mappings":";;;;;AAGA,0DAMC;AAED,4CAKC;AAED,kDAoBC;AAED,gCAeC;AAvDD,2DAA2C;AAC3C,kEAAqC;AAErC,SAAgB,uBAAuB;IACrC,iEAAiE;IACjE,MAAM,EAAE,0BAA0B,EAAE,GAAG,OAAO,CAAC,iCAAiC,CAE/E,CAAC;IACF,OAAO,0BAA0B,EAAE,CAAC;AACtC,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAyB;IACxD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrE,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,MAAc;IACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,EAAE,GAAG,uBAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,UAAU,CACxB,OAAe,EACf,IAAc,EACd,GAA2B;IAE3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;YAC/B,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;SACpC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function resolveBackendRoot(): string;
2
+ export declare function resolveBackendEntry(name: 'index' | 'mcp-index'): string;
3
+ export declare function resolveUiDist(): string | undefined;
4
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CASvE;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAQlD"}
package/dist/paths.js ADDED
@@ -0,0 +1,31 @@
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.resolveBackendRoot = resolveBackendRoot;
7
+ exports.resolveBackendEntry = resolveBackendEntry;
8
+ exports.resolveUiDist = resolveUiDist;
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ function resolveBackendRoot() {
12
+ const mainEntry = require.resolve('@agent-deck/backend');
13
+ return node_path_1.default.join(node_path_1.default.dirname(mainEntry), '..');
14
+ }
15
+ function resolveBackendEntry(name) {
16
+ const root = resolveBackendRoot();
17
+ const distPath = node_path_1.default.join(root, 'dist', `${name}.js`);
18
+ if (!node_fs_1.default.existsSync(distPath)) {
19
+ throw new Error(`Backend build not found at ${distPath}. Run npm run build in the repo root.`);
20
+ }
21
+ return distPath;
22
+ }
23
+ function resolveUiDist() {
24
+ if (process.env.AGENT_DECK_UI_DIST) {
25
+ const custom = node_path_1.default.resolve(process.env.AGENT_DECK_UI_DIST);
26
+ return node_fs_1.default.existsSync(custom) ? custom : undefined;
27
+ }
28
+ const bundled = node_path_1.default.join(resolveBackendRoot(), 'static-ui');
29
+ return node_fs_1.default.existsSync(bundled) ? bundled : undefined;
30
+ }
31
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":";;;;;AAGA,gDAGC;AAED,kDASC;AAED,sCAQC;AA3BD,sDAAyB;AACzB,0DAA6B;AAE7B,SAAgB,kBAAkB;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACzD,OAAO,mBAAI,CAAC,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAA2B;IAC7D,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,uCAAuC,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,aAAa;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC5D,OAAO,iBAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,CAAC,CAAC;IAC7D,OAAO,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface StartOptions {
2
+ backendPort?: number;
3
+ mcpPort?: number;
4
+ openBrowser?: boolean;
5
+ skipUi?: boolean;
6
+ }
7
+ export declare function runStart(options?: StartOptions): Promise<number>;
8
+ export declare function runDoctor(): Promise<number>;
9
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmED,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4D1E;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CA8BjD"}
package/dist/start.js ADDED
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runStart = runStart;
4
+ exports.runDoctor = runDoctor;
5
+ const node_child_process_1 = require("node:child_process");
6
+ const paths_1 = require("./paths");
7
+ const version_1 = require("./version");
8
+ const children = [];
9
+ let shuttingDown = false;
10
+ function parsePort(value, fallback) {
11
+ if (!value) {
12
+ return fallback;
13
+ }
14
+ const parsed = Number.parseInt(value, 10);
15
+ return Number.isFinite(parsed) ? parsed : fallback;
16
+ }
17
+ async function waitForHealth(url, attempts = 60) {
18
+ for (let i = 0; i < attempts; i += 1) {
19
+ try {
20
+ const response = await fetch(url);
21
+ if (response.ok) {
22
+ return true;
23
+ }
24
+ }
25
+ catch {
26
+ // retry
27
+ }
28
+ await new Promise((resolve) => setTimeout(resolve, 500));
29
+ }
30
+ return false;
31
+ }
32
+ function spawnNodeService(label, entry, env) {
33
+ const child = (0, node_child_process_1.spawn)(process.execPath, [entry], {
34
+ env: { ...process.env, ...env },
35
+ stdio: 'inherit',
36
+ });
37
+ child.on('exit', (code, signal) => {
38
+ if (shuttingDown) {
39
+ return;
40
+ }
41
+ const detail = signal ? `signal ${signal}` : `code ${code ?? 1}`;
42
+ console.error(`[agent-deck] ${label} exited (${detail})`);
43
+ void shutdown(code ?? 1);
44
+ });
45
+ children.push(child);
46
+ return child;
47
+ }
48
+ async function shutdown(exitCode = 0) {
49
+ if (shuttingDown) {
50
+ return;
51
+ }
52
+ shuttingDown = true;
53
+ for (const child of children) {
54
+ if (!child.killed) {
55
+ child.kill('SIGTERM');
56
+ }
57
+ }
58
+ await new Promise((resolve) => setTimeout(resolve, 300));
59
+ process.exit(exitCode);
60
+ }
61
+ async function runStart(options = {}) {
62
+ const backendPort = options.backendPort ?? parsePort(process.env.AGENT_DECK_PORT, 8000);
63
+ const mcpPort = options.mcpPort ?? parsePort(process.env.AGENT_DECK_MCP_PORT, 3001);
64
+ const host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
65
+ const backendUrl = `http://${host}:${backendPort}`;
66
+ const uiDist = options.skipUi ? undefined : (0, paths_1.resolveUiDist)();
67
+ if (!options.skipUi && !uiDist) {
68
+ console.warn('[agent-deck] Dashboard UI bundle not found (static-ui). API and MCP will still start.');
69
+ console.warn('[agent-deck] Set AGENT_DECK_UI_DIST or run from a published npm package build.');
70
+ }
71
+ const backendEntry = (0, paths_1.resolveBackendEntry)('index');
72
+ const mcpEntry = (0, paths_1.resolveBackendEntry)('mcp-index');
73
+ console.log('[agent-deck] Starting backend ...');
74
+ spawnNodeService('backend', backendEntry, {
75
+ PORT: String(backendPort),
76
+ HOST: host,
77
+ ...(uiDist ? { AGENT_DECK_UI_DIST: uiDist } : {}),
78
+ });
79
+ const healthy = await waitForHealth(`${backendUrl}/health`);
80
+ if (!healthy) {
81
+ console.error('[agent-deck] Backend failed health check');
82
+ await shutdown(1);
83
+ return 1;
84
+ }
85
+ console.log('[agent-deck] Starting MCP server ...');
86
+ spawnNodeService('mcp', mcpEntry, {
87
+ AGENT_DECK_MCP_PORT: String(mcpPort),
88
+ AGENT_DECK_BACKEND_URL: backendUrl,
89
+ });
90
+ const dashboardLine = uiDist ? backendUrl : '(UI bundle missing — use npm run dev:all for dev UI)';
91
+ console.log('');
92
+ console.log('Agent Deck is running');
93
+ console.log(` Dashboard ${dashboardLine}`);
94
+ console.log(` MCP http://${host}:${mcpPort}/mcp`);
95
+ console.log(` API health ${backendUrl}/health`);
96
+ console.log('');
97
+ console.log('Claude Code:');
98
+ console.log(` claude mcp add --scope user --transport http agent-deck http://${host}:${mcpPort}/mcp`);
99
+ console.log('');
100
+ if (options.openBrowser && uiDist) {
101
+ const open = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
102
+ (0, node_child_process_1.spawn)(open, [backendUrl], { stdio: 'ignore', shell: process.platform === 'win32' });
103
+ }
104
+ process.on('SIGINT', () => void shutdown(0));
105
+ process.on('SIGTERM', () => void shutdown(0));
106
+ await new Promise(() => {
107
+ // keep alive until signal
108
+ });
109
+ return 0;
110
+ }
111
+ async function runDoctor() {
112
+ const nodeMajor = Number(process.versions.node.split('.')[0]);
113
+ let ok = true;
114
+ console.log(`Node.js ${process.version}`);
115
+ if (nodeMajor < 20) {
116
+ console.error('FAIL: Node.js 20+ required');
117
+ ok = false;
118
+ }
119
+ else {
120
+ console.log('OK: Node.js version');
121
+ }
122
+ try {
123
+ (0, paths_1.resolveBackendEntry)('index');
124
+ console.log('OK: backend build present');
125
+ }
126
+ catch (error) {
127
+ console.error(`FAIL: ${error instanceof Error ? error.message : error}`);
128
+ ok = false;
129
+ }
130
+ const uiDist = (0, paths_1.resolveUiDist)();
131
+ if (uiDist) {
132
+ console.log(`OK: dashboard UI at ${uiDist}`);
133
+ }
134
+ else {
135
+ console.warn('WARN: dashboard UI bundle missing (optional for API/MCP)');
136
+ }
137
+ console.log(`Package version ${(0, version_1.getAgentDeckVersion)()}`);
138
+ return ok ? 0 : 1;
139
+ }
140
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";;AA6EA,4BA4DC;AAED,8BA8BC;AAzKD,2DAA8D;AAE9D,mCAA6D;AAC7D,uCAAgD;AAShD,MAAM,QAAQ,GAAmB,EAAE,CAAC;AACpC,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,SAAS,SAAS,CAAC,KAAyB,EAAE,QAAgB;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,QAAQ,GAAG,EAAE;IACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ;QACV,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAa,EACb,KAAa,EACb,GAA2B;IAE3B,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;QAC7C,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;QAC/B,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAChC,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,gBAAgB,KAAK,YAAY,MAAM,GAAG,CAAC,CAAC;QAC1D,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAQ,GAAG,CAAC;IAClC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IACD,YAAY,GAAG,IAAI,CAAC;IAEpB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,UAAwB,EAAE;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,WAAW,CAAC;IACxD,MAAM,UAAU,GAAG,UAAU,IAAI,IAAI,WAAW,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,qBAAa,GAAE,CAAC;IAE5D,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CACV,uFAAuF,CACxF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,YAAY,GAAG,IAAA,2BAAmB,EAAC,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAA,2BAAmB,EAAC,WAAW,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE;QACxC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC;QACzB,IAAI,EAAE,IAAI;QACV,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,UAAU,SAAS,CAAC,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE;QAChC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC;QACpC,sBAAsB,EAAE,UAAU;KACnC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,sDAAsD,CAAC;IACnG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,gBAAgB,aAAa,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,OAAO,MAAM,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,SAAS,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,oEAAoE,IAAI,IAAI,OAAO,MAAM,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QAC1G,IAAA,0BAAK,EAAC,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,MAAM,IAAI,OAAO,CAAO,GAAG,EAAE;QAC3B,0BAA0B;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC;AAEM,KAAK,UAAU,SAAS;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,EAAE,GAAG,IAAI,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,EAAE,GAAG,KAAK,CAAC;IACb,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC;QACH,IAAA,2BAAmB,EAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACzE,EAAE,GAAG,KAAK,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,qBAAa,GAAE,CAAC;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAA,6BAAmB,GAAE,EAAE,CAAC,CAAC;IAExD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getAgentDeckVersion(): string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAGA,wBAAgB,mBAAmB,IAAI,MAAM,CAQ5C"}
@@ -0,0 +1,19 @@
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.getAgentDeckVersion = getAgentDeckVersion;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ function getAgentDeckVersion() {
10
+ try {
11
+ const pkgPath = node_path_1.default.join(__dirname, '../package.json');
12
+ const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath, 'utf8'));
13
+ return pkg.version ?? '0.0.0';
14
+ }
15
+ catch {
16
+ return '0.0.0';
17
+ }
18
+ }
19
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;;;AAGA,kDAQC;AAXD,sDAAyB;AACzB,0DAA6B;AAE7B,SAAgB,mBAAmB;IACjC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyB,CAAC;QACjF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@agent-deck/cli",
3
+ "version": "1.1.0",
4
+ "description": "Local MCP proxy with decks — one endpoint for Claude Code, Cursor, and other MCP clients",
5
+ "license": "ISC",
6
+ "bin": {
7
+ "agent-deck": "bin/agent-deck"
8
+ },
9
+ "main": "dist/index.js",
10
+ "files": [
11
+ "dist",
12
+ "bin"
13
+ ],
14
+ "engines": {
15
+ "node": ">=20"
16
+ },
17
+ "mcpName": "io.github.not-so-fat/agent-deck",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/not-so-fat/agent_deck.git",
21
+ "directory": "packages/cli"
22
+ },
23
+ "keywords": [
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "agent",
27
+ "claude",
28
+ "cursor",
29
+ "deck"
30
+ ],
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "dev": "tsx src/bin.ts",
37
+ "clean": "rm -rf dist",
38
+ "type-check": "tsc --noEmit",
39
+ "test": "vitest",
40
+ "prepublishOnly": "npm run build"
41
+ },
42
+ "dependencies": {
43
+ "@agent-deck/backend": "^1.1.0",
44
+ "@agent-deck/shared": "^1.1.0"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^20.11.5",
48
+ "tsx": "^4.7.0",
49
+ "typescript": "^5.3.3",
50
+ "vitest": "^1.2.1"
51
+ }
52
+ }