@agent-deck/cli 1.6.4 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin-secret.d.ts +6 -0
- package/dist/admin-secret.d.ts.map +1 -0
- package/dist/admin-secret.js +62 -0
- package/dist/admin-secret.js.map +1 -0
- package/dist/agent-harness.d.ts.map +1 -1
- package/dist/agent-harness.js +9 -8
- package/dist/agent-harness.js.map +1 -1
- package/dist/dashboard-open.d.ts +25 -0
- package/dist/dashboard-open.d.ts.map +1 -0
- package/dist/dashboard-open.js +87 -0
- package/dist/dashboard-open.js.map +1 -0
- package/dist/debug-mcp.js +1 -1
- package/dist/debug-mcp.js.map +1 -1
- package/dist/defaults.d.ts +3 -0
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +9 -0
- package/dist/defaults.js.map +1 -1
- package/dist/grant-issue.d.ts +39 -0
- package/dist/grant-issue.d.ts.map +1 -0
- package/dist/grant-issue.js +133 -0
- package/dist/grant-issue.js.map +1 -0
- package/dist/grant-store.d.ts +35 -0
- package/dist/grant-store.d.ts.map +1 -0
- package/dist/grant-store.js +302 -0
- package/dist/grant-store.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -3
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +2 -1
- package/dist/install.js.map +1 -1
- package/dist/mcp-config.d.ts +3 -6
- package/dist/mcp-config.d.ts.map +1 -1
- package/dist/mcp-config.js +20 -15
- package/dist/mcp-config.js.map +1 -1
- package/dist/mcp-launcher.d.ts +3 -0
- package/dist/mcp-launcher.d.ts.map +1 -0
- package/dist/mcp-launcher.js +59 -0
- package/dist/mcp-launcher.js.map +1 -0
- package/dist/menubar.d.ts +6 -2
- package/dist/menubar.d.ts.map +1 -1
- package/dist/menubar.js +69 -12
- package/dist/menubar.js.map +1 -1
- package/dist/node-runtime.js +1 -1
- package/dist/node-runtime.js.map +1 -1
- package/dist/open.d.ts +7 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +70 -0
- package/dist/open.js.map +1 -0
- package/dist/setup.js +3 -3
- package/dist/setup.js.map +1 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +77 -14
- package/dist/start.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +4 -2
- package/dist/status.js.map +1 -1
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +3 -2
- package/dist/statusline.js.map +1 -1
- package/dist/stop.js +1 -1
- package/dist/stop.js.map +1 -1
- package/dist/use.d.ts.map +1 -1
- package/dist/use.js +67 -20
- package/dist/use.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function getAdminSecretPath(): Promise<string>;
|
|
2
|
+
export declare function ensureAdminSecret(): Promise<string>;
|
|
3
|
+
export declare function readAdminSecret(): Promise<string | null>;
|
|
4
|
+
export declare function hashAdminSecret(secret: string): string;
|
|
5
|
+
export declare function verifyAdminSecret(provided: string, expected: string): boolean;
|
|
6
|
+
//# sourceMappingURL=admin-secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-secret.d.ts","sourceRoot":"","sources":["../src/admin-secret.ts"],"names":[],"mappings":"AAQA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE1D;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBzD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAc9D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO7E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
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.getAdminSecretPath = getAdminSecretPath;
|
|
7
|
+
exports.ensureAdminSecret = ensureAdminSecret;
|
|
8
|
+
exports.readAdminSecret = readAdminSecret;
|
|
9
|
+
exports.hashAdminSecret = hashAdminSecret;
|
|
10
|
+
exports.verifyAdminSecret = verifyAdminSecret;
|
|
11
|
+
const node_crypto_1 = require("node:crypto");
|
|
12
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
13
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
14
|
+
const shared_1 = require("@agent-deck/shared");
|
|
15
|
+
const ADMIN_SECRET_FILENAME = 'admin-secret';
|
|
16
|
+
async function getAdminSecretPath() {
|
|
17
|
+
return node_path_1.default.join((0, shared_1.resolveAgentDeckHome)(), ADMIN_SECRET_FILENAME);
|
|
18
|
+
}
|
|
19
|
+
async function ensureAdminSecret() {
|
|
20
|
+
const secretPath = await getAdminSecretPath();
|
|
21
|
+
try {
|
|
22
|
+
const existing = await promises_1.default.readFile(secretPath, 'utf8');
|
|
23
|
+
const trimmed = existing.trim();
|
|
24
|
+
if (trimmed.length >= 32) {
|
|
25
|
+
return trimmed;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// create below
|
|
30
|
+
}
|
|
31
|
+
const secret = (0, node_crypto_1.randomBytes)(32).toString('base64url');
|
|
32
|
+
await promises_1.default.mkdir(node_path_1.default.dirname(secretPath), { recursive: true, mode: 0o700 });
|
|
33
|
+
await promises_1.default.writeFile(secretPath, `${secret}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
34
|
+
return secret;
|
|
35
|
+
}
|
|
36
|
+
async function readAdminSecret() {
|
|
37
|
+
const fromEnv = process.env.AGENT_DECK_ADMIN_SECRET?.trim();
|
|
38
|
+
if (fromEnv && fromEnv.length >= 32) {
|
|
39
|
+
return fromEnv;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const secretPath = await getAdminSecretPath();
|
|
43
|
+
const value = await promises_1.default.readFile(secretPath, 'utf8');
|
|
44
|
+
const trimmed = value.trim();
|
|
45
|
+
return trimmed.length >= 32 ? trimmed : null;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function hashAdminSecret(secret) {
|
|
52
|
+
return (0, node_crypto_1.createHash)('sha256').update(secret, 'utf8').digest('hex');
|
|
53
|
+
}
|
|
54
|
+
function verifyAdminSecret(provided, expected) {
|
|
55
|
+
const digest = Buffer.from(hashAdminSecret(provided), 'hex');
|
|
56
|
+
const expectedDigest = Buffer.from(hashAdminSecret(expected), 'hex');
|
|
57
|
+
if (digest.length !== expectedDigest.length) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return (0, node_crypto_1.timingSafeEqual)(digest, expectedDigest);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=admin-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-secret.js","sourceRoot":"","sources":["../src/admin-secret.ts"],"names":[],"mappings":";;;;;AAQA,gDAEC;AAED,8CAgBC;AAED,0CAcC;AAED,0CAEC;AAED,8CAOC;AAzDD,6CAAuE;AACvE,gEAAkC;AAClC,0DAA6B;AAE7B,+CAA0D;AAE1D,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAEtC,KAAK,UAAU,kBAAkB;IACtC,OAAO,mBAAI,CAAC,IAAI,CAAC,IAAA,6BAAoB,GAAE,EAAE,qBAAqB,CAAC,CAAC;AAClE,CAAC;AAEM,KAAK,UAAU,iBAAiB;IACrC,MAAM,UAAU,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjF,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,eAAe;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAA,6BAAe,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -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,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AACpE,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,mHACwE,CAAC;AAoD9G,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMjE;AAUD,qFAAqF;AACrF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAiC,GAC7C;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAuBvC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEhE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAevC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAetF;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAcF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,oBAAoB,CA6C9F"}
|
package/dist/agent-harness.js
CHANGED
|
@@ -20,19 +20,20 @@ exports.CURSOR_RULE_FILENAME = 'agent-deck.mdc';
|
|
|
20
20
|
exports.HARNESS_RULE_DESCRIPTION = 'Use when user mentions decks, playbooks, deck MCP tools, or corrects playbook output — Agent Deck harness';
|
|
21
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
22
|
|
|
23
|
-
**Session opener (first turn only):** When Agent Deck MCP is connected and this is a new conversation in a workspace, call \`
|
|
23
|
+
**Session opener (first turn only):** When Agent Deck MCP is connected and this is a new conversation in a workspace, call \`get_session_binding\` then \`get_bound_deck\`, and tell the user **exactly one line** using \`display_summary\` (e.g. \`◆ dev · 2 MCP · 0 keys · 1 playbooks\`). Grant auth is automatic from \`agent-deck use\` — do **not** call \`get_decks\` or pick a deck. On \`GRANT_REQUIRED\`, tell the user to run \`agent-deck use <deck>\` and stop. Do **not** repeat the status line every turn unless the user asks or the bind changes.
|
|
24
24
|
|
|
25
|
-
**Later turns:**
|
|
25
|
+
**Later turns:** Deck scope comes from the workspace grant. Do not re-bind unless the user asks for deck administration.
|
|
26
26
|
|
|
27
|
-
Before declining for missing tools (Slack, Linear, GitHub, etc.), use agent-deck MCP: \`
|
|
27
|
+
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
|
+
|
|
29
|
+
**Deck admin (create/switch/edit deck):** Normal agents get \`ADMIN_REQUIRED\`. Call \`request_admin_elevation\`; user approves in the dashboard/menubar. After approval, \`mode\` is \`agent-admin\` until lease expiry or \`exit_admin_mode\`. Surface shared-deck workspace counts before mutating a deck used elsewhere.
|
|
28
30
|
|
|
29
31
|
Deck playbooks are task recipes — thin trigger stubs from \`agent-deck use\` plus \`get_bound_deck\` / \`get_playbook\`. **Never** mirror playbook bodies into \`.cursor/skills/\`, rules, or Claude skills — one source of truth on the deck; stubs are pointers only.
|
|
30
32
|
|
|
31
33
|
### When user asks for a playbook task
|
|
32
34
|
|
|
33
|
-
1. \`
|
|
34
|
-
2.
|
|
35
|
-
3. Follow the playbook body; use \`call_service_tool\` for deck MCPs.
|
|
35
|
+
1. \`get_playbook(pb_x)\` before improvising (\`get_bound_deck\` triggers point you here).
|
|
36
|
+
2. Follow the playbook body; use \`call_service_tool\` for deck MCPs.
|
|
36
37
|
|
|
37
38
|
### Playbooks — refine from outcomes (self-improvement)
|
|
38
39
|
|
|
@@ -46,7 +47,7 @@ Deck playbooks are task recipes — thin trigger stubs from \`agent-deck use\` p
|
|
|
46
47
|
|
|
47
48
|
**Curate from a pasted dashboard prompt:** when the user pastes a curation prompt from the Feedback table (\`/feedback-signals\` → Copy for agent; Markdown + YAML list, each row leads with \`id\`), group the signals, then \`propose_playbook_patch\` with consolidated ops and \`signal_ids\` of every consumed id. That links rows (still open) until the patch is accepted. Do not invent a list-feedback MCP tool — browse/discard is dashboard-only.
|
|
48
49
|
|
|
49
|
-
**Explicit user-directed playbook edits** ("fix the playbook to say X"): \`update_playbook\` — they
|
|
50
|
+
**Explicit user-directed playbook edits** ("fix the playbook to say X"): direct \`update_playbook\` is dashboard-only — use \`propose_playbook_patch\` with \`rewrite_body\` unless they will apply the edit in the dashboard themselves.
|
|
50
51
|
|
|
51
52
|
Tell the user in one line that a proposal was filed (or a signal was logged for later dashboard curation); review happens in the dashboard.
|
|
52
53
|
|
|
@@ -60,7 +61,7 @@ Tell the user in one line that a proposal was filed (or a signal was logged for
|
|
|
60
61
|
| Replace one list line | \`amend_item\` | \`anchor\`: exact line including \`-\` prefix — **not prose** |
|
|
61
62
|
| Delete one list line | \`remove_item\` | Same anchor rules as amend |
|
|
62
63
|
| Edit prose or a whole section | \`rewrite_body\` | Not amend_item on paragraphs |
|
|
63
|
-
| Change trigger phrases | \`set_triggers\` | Then user runs \`agent-deck use
|
|
64
|
+
| Change trigger phrases | \`set_triggers\` | Then user runs \`agent-deck use <deck>\` to refresh stubs |
|
|
64
65
|
|
|
65
66
|
Wrong: \`amend_item\` with a prose sentence as anchor → **409** at propose. Right: \`rewrite_body\` for prose edits.`;
|
|
66
67
|
const PROJECT_BODY_EXTRA = 'In this repo: run \`agent-deck use <deck>\` once (writes MCP + trigger stubs + \`.agent-deck/use.json\`). \`bind_workspace\` with the workspace root and that \`deckId\`. When a task matches a stub or deck \`triggers\`, \`get_playbook\` before improvising. After accepting playbook patches that change triggers, run \`agent-deck use --refresh\`.';
|
|
@@ -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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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type MintDashboardUrlResult = {
|
|
2
|
+
ok: true;
|
|
3
|
+
url: string;
|
|
4
|
+
bootstrapped: true;
|
|
5
|
+
} | {
|
|
6
|
+
ok: true;
|
|
7
|
+
url: string;
|
|
8
|
+
bootstrapped: false;
|
|
9
|
+
reason: string;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
error: string;
|
|
13
|
+
};
|
|
14
|
+
/** Build dashboard URL with a one-shot bootstrap nonce when admin secret is available. */
|
|
15
|
+
export declare function mintDashboardBootstrapUrl(backendUrl: string, pathAndQuery?: string): Promise<MintDashboardUrlResult>;
|
|
16
|
+
export declare function shouldOpenDashboardByDefault(env?: NodeJS.ProcessEnv): boolean;
|
|
17
|
+
export declare function openUrlInSystemBrowser(url: string): void;
|
|
18
|
+
/** Mint bootstrap URL and open the system browser. Returns 0 on success. */
|
|
19
|
+
export declare function openDashboardInBrowser(backendUrl: string, pathAndQuery?: string): Promise<{
|
|
20
|
+
code: number;
|
|
21
|
+
url?: string;
|
|
22
|
+
message?: string;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function formatDashboardStatusLine(minted: MintDashboardUrlResult): string;
|
|
25
|
+
//# sourceMappingURL=dashboard-open.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-open.d.ts","sourceRoot":"","sources":["../src/dashboard-open.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,IAAI,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,0FAA0F;AAC1F,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,YAAY,SAAM,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAgDjC;AAED,wBAAgB,4BAA4B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAG1F;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED,4EAA4E;AAC5E,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,YAAY,SAAM,GACjB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAW3D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAQhF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mintDashboardBootstrapUrl = mintDashboardBootstrapUrl;
|
|
4
|
+
exports.shouldOpenDashboardByDefault = shouldOpenDashboardByDefault;
|
|
5
|
+
exports.openUrlInSystemBrowser = openUrlInSystemBrowser;
|
|
6
|
+
exports.openDashboardInBrowser = openDashboardInBrowser;
|
|
7
|
+
exports.formatDashboardStatusLine = formatDashboardStatusLine;
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const admin_secret_1 = require("./admin-secret");
|
|
10
|
+
/** Build dashboard URL with a one-shot bootstrap nonce when admin secret is available. */
|
|
11
|
+
async function mintDashboardBootstrapUrl(backendUrl, pathAndQuery = '/') {
|
|
12
|
+
const base = backendUrl.replace(/\/$/, '');
|
|
13
|
+
const pathPart = pathAndQuery.startsWith('/') ? pathAndQuery : `/${pathAndQuery}`;
|
|
14
|
+
const target = new URL(pathPart, `${base}/`);
|
|
15
|
+
try {
|
|
16
|
+
const secret = await (0, admin_secret_1.readAdminSecret)();
|
|
17
|
+
if (!secret) {
|
|
18
|
+
return {
|
|
19
|
+
ok: true,
|
|
20
|
+
url: target.toString(),
|
|
21
|
+
bootstrapped: false,
|
|
22
|
+
reason: 'admin secret missing — run agent-deck open after start',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const nonceRes = await fetch(`${base}/api/dashboard-auth/bootstrap/nonce`, {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
headers: { Authorization: `Bearer ${secret}` },
|
|
28
|
+
});
|
|
29
|
+
if (!nonceRes.ok) {
|
|
30
|
+
return {
|
|
31
|
+
ok: true,
|
|
32
|
+
url: target.toString(),
|
|
33
|
+
bootstrapped: false,
|
|
34
|
+
reason: `bootstrap nonce HTTP ${nonceRes.status}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const body = (await nonceRes.json());
|
|
38
|
+
const nonce = body.data?.nonce?.trim();
|
|
39
|
+
if (!nonce) {
|
|
40
|
+
return {
|
|
41
|
+
ok: true,
|
|
42
|
+
url: target.toString(),
|
|
43
|
+
bootstrapped: false,
|
|
44
|
+
reason: 'bootstrap nonce empty',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
target.searchParams.set('bootstrap', nonce);
|
|
48
|
+
return { ok: true, url: target.toString(), bootstrapped: true };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
error: error instanceof Error ? error.message : String(error),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function shouldOpenDashboardByDefault(env = process.env) {
|
|
58
|
+
const raw = env.AGENT_DECK_NO_OPEN?.trim().toLowerCase();
|
|
59
|
+
return !(raw === '1' || raw === 'true' || raw === 'yes');
|
|
60
|
+
}
|
|
61
|
+
function openUrlInSystemBrowser(url) {
|
|
62
|
+
const open = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
63
|
+
(0, node_child_process_1.spawn)(open, [url], { stdio: 'ignore', shell: process.platform === 'win32' }).unref();
|
|
64
|
+
}
|
|
65
|
+
/** Mint bootstrap URL and open the system browser. Returns 0 on success. */
|
|
66
|
+
async function openDashboardInBrowser(backendUrl, pathAndQuery = '/') {
|
|
67
|
+
const minted = await mintDashboardBootstrapUrl(backendUrl, pathAndQuery);
|
|
68
|
+
if (!minted.ok) {
|
|
69
|
+
return { code: 1, message: minted.error };
|
|
70
|
+
}
|
|
71
|
+
if (!minted.bootstrapped) {
|
|
72
|
+
console.warn(`[agent-deck] Opening without bootstrap cookie (${minted.reason})`);
|
|
73
|
+
console.warn('[agent-deck] Bare dashboard URLs show "No valid workspace grant" until bootstrapped.');
|
|
74
|
+
}
|
|
75
|
+
openUrlInSystemBrowser(minted.url);
|
|
76
|
+
return { code: 0, url: minted.url };
|
|
77
|
+
}
|
|
78
|
+
function formatDashboardStatusLine(minted) {
|
|
79
|
+
if (!minted.ok) {
|
|
80
|
+
return `Dashboard (mint failed: ${minted.error} — try: agent-deck open)`;
|
|
81
|
+
}
|
|
82
|
+
if (minted.bootstrapped) {
|
|
83
|
+
return `Dashboard ${minted.url}`;
|
|
84
|
+
}
|
|
85
|
+
return `Dashboard ${minted.url} (no bootstrap — run: agent-deck open)`;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=dashboard-open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-open.js","sourceRoot":"","sources":["../src/dashboard-open.ts"],"names":[],"mappings":"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"}
|
package/dist/debug-mcp.js
CHANGED
|
@@ -70,7 +70,7 @@ function readClaudeMcpEntry() {
|
|
|
70
70
|
}
|
|
71
71
|
async function runDebugMcp() {
|
|
72
72
|
const host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
73
|
-
const backendPort = (0, defaults_1.
|
|
73
|
+
const backendPort = (0, defaults_1.readCliBackendPort)();
|
|
74
74
|
const mcpPort = (0, defaults_1.parseCliMcpPort)(process.env.AGENT_DECK_MCP_PORT);
|
|
75
75
|
const mcpUrl = `http://${host}:${mcpPort}`;
|
|
76
76
|
console.log('Agent Deck MCP debug');
|
package/dist/debug-mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-mcp.js","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":";;;;;AA0EA,kCAiGC;AA3KD,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAE7B,mCAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"debug-mcp.js","sourceRoot":"","sources":["../src/debug-mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/defaults.d.ts
CHANGED
|
@@ -7,5 +7,8 @@
|
|
|
7
7
|
export declare const CLI_DEFAULT_BACKEND_PORT = 1111;
|
|
8
8
|
export declare const CLI_DEFAULT_MCP_PORT = 1110;
|
|
9
9
|
export declare function parseCliBackendPort(value: string | undefined): number;
|
|
10
|
+
/** Env override for API/dashboard port (`AGENT_DECK_BACKEND_PORT` wins over `AGENT_DECK_PORT`). */
|
|
11
|
+
export declare function resolveCliBackendPortEnv(): string | undefined;
|
|
12
|
+
export declare function readCliBackendPort(): number;
|
|
10
13
|
export declare function parseCliMcpPort(value: string | undefined): number;
|
|
11
14
|
//# sourceMappingURL=defaults.d.ts.map
|
package/dist/defaults.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMrE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMjE"}
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMrE;AAED,mGAAmG;AACnG,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,SAAS,CAE7D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMjE"}
|
package/dist/defaults.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CLI_DEFAULT_MCP_PORT = exports.CLI_DEFAULT_BACKEND_PORT = void 0;
|
|
4
4
|
exports.parseCliBackendPort = parseCliBackendPort;
|
|
5
|
+
exports.resolveCliBackendPortEnv = resolveCliBackendPortEnv;
|
|
6
|
+
exports.readCliBackendPort = readCliBackendPort;
|
|
5
7
|
exports.parseCliMcpPort = parseCliMcpPort;
|
|
6
8
|
/**
|
|
7
9
|
* Default ports for `agent-deck start` / npx install.
|
|
@@ -18,6 +20,13 @@ function parseCliBackendPort(value) {
|
|
|
18
20
|
const parsed = Number.parseInt(value, 10);
|
|
19
21
|
return Number.isFinite(parsed) ? parsed : exports.CLI_DEFAULT_BACKEND_PORT;
|
|
20
22
|
}
|
|
23
|
+
/** Env override for API/dashboard port (`AGENT_DECK_BACKEND_PORT` wins over `AGENT_DECK_PORT`). */
|
|
24
|
+
function resolveCliBackendPortEnv() {
|
|
25
|
+
return process.env.AGENT_DECK_BACKEND_PORT ?? process.env.AGENT_DECK_PORT;
|
|
26
|
+
}
|
|
27
|
+
function readCliBackendPort() {
|
|
28
|
+
return parseCliBackendPort(resolveCliBackendPortEnv());
|
|
29
|
+
}
|
|
21
30
|
function parseCliMcpPort(value) {
|
|
22
31
|
if (!value) {
|
|
23
32
|
return exports.CLI_DEFAULT_MCP_PORT;
|
package/dist/defaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":";;;AASA,kDAMC;AAED,0CAMC;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":";;;AASA,kDAMC;AAGD,4DAEC;AAED,gDAEC;AAED,0CAMC;AAhCD;;;;;GAKG;AACU,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAChC,QAAA,oBAAoB,GAAG,IAAI,CAAC;AAEzC,SAAgB,mBAAmB,CAAC,KAAyB;IAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,gCAAwB,CAAC;IAClC,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,gCAAwB,CAAC;AACrE,CAAC;AAED,mGAAmG;AACnG,SAAgB,wBAAwB;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAC5E,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO,mBAAmB,CAAC,wBAAwB,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,eAAe,CAAC,KAAyB;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,4BAAoB,CAAC;IAC9B,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,4BAAoB,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { WorkspaceGrantManifest } from '@agent-deck/shared';
|
|
2
|
+
export type IssuedGrant = {
|
|
3
|
+
workspaceKey: string;
|
|
4
|
+
grantId: string;
|
|
5
|
+
deckId: string;
|
|
6
|
+
deckName: string;
|
|
7
|
+
secret: string;
|
|
8
|
+
status: 'pending' | 'active';
|
|
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
|
+
export declare function issueWorkspaceGrant(input: {
|
|
16
|
+
workspaceRoot: string;
|
|
17
|
+
deckId: string;
|
|
18
|
+
host?: string;
|
|
19
|
+
}): Promise<IssuedGrant | {
|
|
20
|
+
error: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function activateWorkspaceGrant(input: {
|
|
23
|
+
grantId: string;
|
|
24
|
+
host?: string;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
grantId: string;
|
|
27
|
+
deckId: string;
|
|
28
|
+
deckName?: string;
|
|
29
|
+
} | {
|
|
30
|
+
error: string;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function revokePendingWorkspaceGrant(input: {
|
|
33
|
+
grantId: string;
|
|
34
|
+
host?: string;
|
|
35
|
+
}): Promise<void | {
|
|
36
|
+
error: string;
|
|
37
|
+
}>;
|
|
38
|
+
export declare function toGrantManifest(issued: IssuedGrant, mcpUrl: string, store?: 'file' | 'keychain'): WorkspaceGrantManifest;
|
|
39
|
+
//# sourceMappingURL=grant-issue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grant-issue.d.ts","sourceRoot":"","sources":["../src/grant-issue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAKjE,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B,CAAC;AAyBF,2FAA2F;AAC3F,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACpD,QAAQ,EAAE,MAAM,GACf,MAAM,CAYR;AAoBD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiC3C;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAqCtF;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BpC;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAM,GAAG,UAAmB,GAClC,sBAAsB,CAYxB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatTrustedWriterError = formatTrustedWriterError;
|
|
4
|
+
exports.issueWorkspaceGrant = issueWorkspaceGrant;
|
|
5
|
+
exports.activateWorkspaceGrant = activateWorkspaceGrant;
|
|
6
|
+
exports.revokePendingWorkspaceGrant = revokePendingWorkspaceGrant;
|
|
7
|
+
exports.toGrantManifest = toGrantManifest;
|
|
8
|
+
const defaults_1 = require("./defaults");
|
|
9
|
+
const admin_secret_1 = require("./admin-secret");
|
|
10
|
+
function resolveBackendUrl(host) {
|
|
11
|
+
return `http://${host}:${(0, defaults_1.readCliBackendPort)()}`;
|
|
12
|
+
}
|
|
13
|
+
async function trustedWriterAuth() {
|
|
14
|
+
const adminSecret = await (0, admin_secret_1.readAdminSecret)();
|
|
15
|
+
if (!adminSecret) {
|
|
16
|
+
return {
|
|
17
|
+
ok: false,
|
|
18
|
+
error: 'No admin secret — run `agent-deck setup` or `agent-deck start` once to initialize ~/.agent-deck/admin-secret',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
ok: true,
|
|
23
|
+
authorization: `Bearer ${adminSecret}`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
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
|
+
async function issueWorkspaceGrant(input) {
|
|
49
|
+
const auth = await trustedWriterAuth();
|
|
50
|
+
if (!auth.ok) {
|
|
51
|
+
return { error: auth.error };
|
|
52
|
+
}
|
|
53
|
+
const backendUrl = resolveBackendUrl(input.host ?? process.env.AGENT_DECK_HOST ?? '127.0.0.1');
|
|
54
|
+
const response = await fetch(`${backendUrl}/api/trusted-session/workspace-grants/issue`, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: {
|
|
57
|
+
Authorization: auth.authorization,
|
|
58
|
+
'Content-Type': 'application/json',
|
|
59
|
+
},
|
|
60
|
+
body: JSON.stringify({
|
|
61
|
+
workspaceRoot: input.workspaceRoot,
|
|
62
|
+
deckId: input.deckId,
|
|
63
|
+
}),
|
|
64
|
+
});
|
|
65
|
+
const payload = await readJsonPayload(response);
|
|
66
|
+
const data = payload?.data;
|
|
67
|
+
if (!response.ok || !payload?.success || !data) {
|
|
68
|
+
return {
|
|
69
|
+
error: formatTrustedWriterError(response.status, payload, 'Grant issuance failed'),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return data;
|
|
73
|
+
}
|
|
74
|
+
async function activateWorkspaceGrant(input) {
|
|
75
|
+
const auth = await trustedWriterAuth();
|
|
76
|
+
if (!auth.ok) {
|
|
77
|
+
return { error: auth.error };
|
|
78
|
+
}
|
|
79
|
+
const backendUrl = resolveBackendUrl(input.host ?? process.env.AGENT_DECK_HOST ?? '127.0.0.1');
|
|
80
|
+
// Fastify rejects Content-Type: application/json with an empty body
|
|
81
|
+
// (FST_ERR_CTP_EMPTY_JSON_BODY). Send {}.
|
|
82
|
+
const response = await fetch(`${backendUrl}/api/trusted-session/workspace-grants/${encodeURIComponent(input.grantId)}/activate`, {
|
|
83
|
+
method: 'POST',
|
|
84
|
+
headers: {
|
|
85
|
+
Authorization: auth.authorization,
|
|
86
|
+
'Content-Type': 'application/json',
|
|
87
|
+
},
|
|
88
|
+
body: '{}',
|
|
89
|
+
});
|
|
90
|
+
const payload = await readJsonPayload(response);
|
|
91
|
+
const data = payload?.data;
|
|
92
|
+
if (!response.ok || !payload?.success || !data) {
|
|
93
|
+
return {
|
|
94
|
+
error: formatTrustedWriterError(response.status, payload, 'Grant activation failed'),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return data;
|
|
98
|
+
}
|
|
99
|
+
async function revokePendingWorkspaceGrant(input) {
|
|
100
|
+
const auth = await trustedWriterAuth();
|
|
101
|
+
if (!auth.ok) {
|
|
102
|
+
return { error: auth.error };
|
|
103
|
+
}
|
|
104
|
+
const backendUrl = resolveBackendUrl(input.host ?? process.env.AGENT_DECK_HOST ?? '127.0.0.1');
|
|
105
|
+
const response = await fetch(`${backendUrl}/api/trusted-session/workspace-grants/${encodeURIComponent(input.grantId)}/revoke-pending`, {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
headers: {
|
|
108
|
+
Authorization: auth.authorization,
|
|
109
|
+
'Content-Type': 'application/json',
|
|
110
|
+
},
|
|
111
|
+
body: '{}',
|
|
112
|
+
});
|
|
113
|
+
if (!response.ok) {
|
|
114
|
+
const payload = await readJsonPayload(response);
|
|
115
|
+
return {
|
|
116
|
+
error: formatTrustedWriterError(response.status, payload, 'Grant revoke-pending failed'),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function toGrantManifest(issued, mcpUrl, store = 'file') {
|
|
121
|
+
return {
|
|
122
|
+
version: 2,
|
|
123
|
+
workspaceKey: issued.workspaceKey,
|
|
124
|
+
grantId: issued.grantId,
|
|
125
|
+
secret: issued.secret,
|
|
126
|
+
deckId: issued.deckId,
|
|
127
|
+
deckName: issued.deckName,
|
|
128
|
+
mcpUrl,
|
|
129
|
+
store,
|
|
130
|
+
updatedAt: new Date().toISOString(),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=grant-issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grant-issue.js","sourceRoot":"","sources":["../src/grant-issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { WorkspaceGrantManifest } from '@agent-deck/shared';
|
|
2
|
+
export type GrantStoreKind = 'file' | 'keychain';
|
|
3
|
+
export interface GrantStore {
|
|
4
|
+
kind: GrantStoreKind;
|
|
5
|
+
read(): Promise<WorkspaceGrantManifest | null>;
|
|
6
|
+
stage(manifest: WorkspaceGrantManifest): Promise<void>;
|
|
7
|
+
activate(): Promise<void>;
|
|
8
|
+
rollback(): Promise<void>;
|
|
9
|
+
clear(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare class FileGrantStore implements GrantStore {
|
|
12
|
+
private readonly workspaceRoot;
|
|
13
|
+
readonly kind: GrantStoreKind;
|
|
14
|
+
constructor(workspaceRoot: string);
|
|
15
|
+
read(): Promise<WorkspaceGrantManifest | null>;
|
|
16
|
+
stage(manifest: WorkspaceGrantManifest): Promise<void>;
|
|
17
|
+
activate(): Promise<void>;
|
|
18
|
+
rollback(): Promise<void>;
|
|
19
|
+
clear(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export declare class KeychainGrantStore implements GrantStore {
|
|
22
|
+
private readonly workspaceRoot;
|
|
23
|
+
readonly kind: GrantStoreKind;
|
|
24
|
+
constructor(workspaceRoot: string);
|
|
25
|
+
private account;
|
|
26
|
+
private runSecurity;
|
|
27
|
+
read(): Promise<WorkspaceGrantManifest | null>;
|
|
28
|
+
stage(manifest: WorkspaceGrantManifest): Promise<void>;
|
|
29
|
+
activate(): Promise<void>;
|
|
30
|
+
rollback(): Promise<void>;
|
|
31
|
+
clear(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare function resolveGrantStore(workspaceRoot: string, prefer?: GrantStoreKind): GrantStore;
|
|
34
|
+
export declare function readWorkspaceGrant(workspaceRoot: string, prefer?: GrantStoreKind): Promise<WorkspaceGrantManifest | null>;
|
|
35
|
+
//# sourceMappingURL=grant-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grant-store.d.ts","sourceRoot":"","sources":["../src/grant-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAOjE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,IAAI,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC/C,KAAK,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAoBD,qBAAa,cAAe,YAAW,UAAU;IAGnC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAU;gBAEV,aAAa,EAAE,MAAM;IAE5C,IAAI,IAAI,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAe9C,KAAK,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B;AAED,qBAAa,kBAAmB,YAAW,UAAU;IAGvC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAc;gBAEd,aAAa,EAAE,MAAM;IAElD,OAAO,CAAC,OAAO;YAID,WAAW;IAQnB,IAAI,IAAI,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAuB9C,KAAK,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BtD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,cAAuB,GAAG,UAAU,CAKpG;AAED,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,cAAuB,GAC9B,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAaxC"}
|