@agent-deck/cli 1.2.9 → 1.2.10
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.js +2 -2
- package/dist/agent-harness.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/menubar-setup.d.ts +37 -0
- package/dist/menubar-setup.d.ts.map +1 -0
- package/dist/menubar-setup.js +269 -0
- package/dist/menubar-setup.js.map +1 -0
- package/dist/menubar.d.ts +7 -0
- package/dist/menubar.d.ts.map +1 -0
- package/dist/menubar.js +100 -0
- package/dist/menubar.js.map +1 -0
- package/dist/setup.d.ts +4 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +79 -26
- package/dist/setup.js.map +1 -1
- package/dist/statusline.d.ts +1 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +1 -0
- package/dist/statusline.js.map +1 -1
- package/package.json +3 -3
package/dist/agent-harness.js
CHANGED
|
@@ -20,7 +20,7 @@ exports.CURSOR_RULE_FILENAME = 'agent-deck.mdc';
|
|
|
20
20
|
exports.HARNESS_RULE_DESCRIPTION = 'Agent Deck MCP — check decks for tools; playbooks for recipes; self-improve playbooks from feedback';
|
|
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 \`bind_workspace\` with the project root
|
|
23
|
+
**Session opener (first turn only):** When Agent Deck MCP is connected and this is a new conversation in a workspace, call \`get_decks\`, then \`bind_workspace\` with the project root and a \`deckId\`, 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
24
|
|
|
25
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
26
|
|
|
@@ -41,7 +41,7 @@ Deck playbooks are task recipes — \`list_playbooks\` / \`get_playbook\` (match
|
|
|
41
41
|
- **Place the lesson** — checklist item for verification, technique for positive patterns, anti-pattern for mistakes to avoid
|
|
42
42
|
- **Restructure** if the playbook can't absorb the lesson cleanly — don't bolt it on
|
|
43
43
|
- **Surface the change** in your response so the user can audit drift`;
|
|
44
|
-
const PROJECT_BODY_EXTRA = 'In this repo: \`bind_workspace\` with the workspace root
|
|
44
|
+
const PROJECT_BODY_EXTRA = 'In this repo: \`get_decks\`, then \`bind_workspace\` with the workspace root and \`deckId\`. When a task matches deck playbooks (check \`triggers\` via \`list_playbooks\`), \`get_playbook\` before improvising.';
|
|
45
45
|
function buildClaudeHarnessBlock(scope) {
|
|
46
46
|
const lines = ['## Agent Deck', '', GLOBAL_BODY];
|
|
47
47
|
if (scope === 'project') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-harness.js","sourceRoot":"","sources":["../src/agent-harness.ts"],"names":[],"mappings":";;;;;;AAyCA,0DAMC;AAWD,wDA2BC;AAED,wDAEC;AAED,gDAkBC;AAED,gDAeC;AAqBD,kDA6CC;AAhMD,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAIhB,QAAA,oBAAoB,GAAG,mCAAmC,CAAC;AAC3D,QAAA,kBAAkB,GAAG,iCAAiC,CAAC;AACvD,QAAA,oBAAoB,GAAG,gBAAgB,CAAC;AAErD,oFAAoF;AACvE,QAAA,wBAAwB,GACnC,qGAAqG,CAAC;AAExG,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;sEAsBkD,CAAC;AAEvE,MAAM,kBAAkB,GACtB,
|
|
1
|
+
{"version":3,"file":"agent-harness.js","sourceRoot":"","sources":["../src/agent-harness.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiDA,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,CAiE5D"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ const start_1 = require("./start");
|
|
|
12
12
|
const setup_1 = require("./setup");
|
|
13
13
|
const status_1 = require("./status");
|
|
14
14
|
const statusline_1 = require("./statusline");
|
|
15
|
+
const menubar_1 = require("./menubar");
|
|
15
16
|
const stop_1 = require("./stop");
|
|
16
17
|
const upgrade_1 = require("./upgrade");
|
|
17
18
|
const version_1 = require("./version");
|
|
@@ -24,6 +25,7 @@ function printUsage() {
|
|
|
24
25
|
agent-deck stop
|
|
25
26
|
agent-deck status
|
|
26
27
|
agent-deck statusline [--workspace <path>]
|
|
28
|
+
agent-deck menubar
|
|
27
29
|
agent-deck setup --client cursor|claude|claude-desktop [--scope global|project] [--start]
|
|
28
30
|
agent-deck upgrade [--check]
|
|
29
31
|
agent-deck doctor
|
|
@@ -239,6 +241,8 @@ async function runCli(argv) {
|
|
|
239
241
|
return (0, status_1.runStatus)();
|
|
240
242
|
case 'statusline':
|
|
241
243
|
return (0, statusline_1.runStatusline)(rest);
|
|
244
|
+
case 'menubar':
|
|
245
|
+
return await (0, menubar_1.runMenubar)();
|
|
242
246
|
case 'setup': {
|
|
243
247
|
const code = await (0, setup_1.runSetup)(rest);
|
|
244
248
|
if ((0, setup_1.shouldStartAfterSetup)(code)) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAiDA,4CAoDC;AAED,8CAgBC;AAED,kDAqBC;AAED,0BAwEC;AAED,oDAcC;AAED,wBAiEC;AA3SD,2CAKuB;AAEvB,2CAA0C;AAC1C,mCAA8C;AAC9C,mCAA0D;AAC1D,qCAAqC;AACrC,6CAA6C;AAC7C,uCAAuC;AACvC,iCAAiC;AACjC,uCAAuC;AACvC,uCAAgD;AAYhD,SAAS,eAAe;IACtB,OAAO,IAAA,iCAAuB,GAAkB,CAAC;AACnD,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;6FAc+E,CAAC,CAAC;AAC/F,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,IAAc;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAA4C,QAAQ,CAAC;IAC/D,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,UAA8B,CAAC;IACnC,IAAI,IAAI,GAAa,EAAE,CAAC;IAExB,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,YAAY,EAAE,CAAC;YACzB,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAkB,CAAC;QACpD,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YACnC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,6BAAmB,EAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,OAAO,CAAC,MAAM,CAAC;QACnB,EAAE;QACF,KAAK;QACL,MAAM;QACN,UAAU;QACV,OAAO;QACP,IAAI;QACJ,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC;AACX,CAAC;AAEM,KAAK,UAAU,iBAAiB;IACrC,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAEzC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CACT,GAAG,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,OAAO,KAAK,UAAU,CAAC,MAAM,YAAY,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACpI,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,EAAU;IAClD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,6BAAmB,EAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC;AACX,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,IAAI,MAA0B,CAAC;IAC/B,IAAI,cAAkC,CAAC;IACvC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAE5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YACnC,cAAc,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,0BAAgB,EAAC,cAAc,CAAC,CAAC;IACvD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACtC,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,OAAO,iBAAiB,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,WAAW,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAU,EAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAErD,MAAM,OAAO,CAAC,aAAa,CAAC;QAC1B,MAAM;QACN,OAAO;QACP,aAAa;QACb,QAAQ;QACR,SAAS;QACT,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,IAAc;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,KAAK,MAAM;YACT,OAAO,iBAAiB,EAAE,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC;YACE,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEpC,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,IAAA,6BAAmB,GAAE,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,WAA+B,CAAC;YACpC,IAAI,OAA2B,CAAC;YAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACrB,WAAW,GAAG,IAAI,CAAC;gBACrB,CAAC;qBAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBAC7B,MAAM,GAAG,IAAI,CAAC;gBAChB,CAAC;qBAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBAC7B,KAAK,GAAG,IAAI,CAAC;gBACf,CAAC;qBAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;oBAChC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjD,CAAC;qBAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBAC5C,UAAU,EAAE,CAAC;oBACb,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YAED,OAAO,IAAA,gBAAQ,EAAC,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,MAAM;YACT,OAAO,IAAA,cAAO,GAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,IAAA,kBAAS,GAAE,CAAC;QACrB,KAAK,YAAY;YACf,OAAO,IAAA,0BAAa,EAAC,IAAI,CAAC,CAAC;QAC7B,KAAK,SAAS;YACZ,OAAO,MAAM,IAAA,oBAAU,GAAE,CAAC;QAC5B,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,MAAM,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;YAClC,IAAI,IAAA,6BAAqB,EAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,QAAQ;YACX,OAAO,IAAA,iBAAS,GAAE,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,IAAA,uBAAW,GAAE,CAAC;QACvB,KAAK,YAAY;YACf,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACpC,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB;YACE,UAAU,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const MENUBAR_PLUGIN_NAME = "agent-deck.3s.sh";
|
|
2
|
+
export declare const SWIFTBAR_FALLBACK_PLUGIN_DIR: string;
|
|
3
|
+
export type MenubarInstallResult = {
|
|
4
|
+
installed: true;
|
|
5
|
+
pluginPath: string;
|
|
6
|
+
action: 'created' | 'updated' | 'unchanged';
|
|
7
|
+
message: string;
|
|
8
|
+
hints: string[];
|
|
9
|
+
swiftbar?: {
|
|
10
|
+
installed: boolean;
|
|
11
|
+
pluginDirSource: 'env' | 'swiftbar-config' | 'fallback';
|
|
12
|
+
pluginDirConfigured?: boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare function isDarwinPlatform(): boolean;
|
|
16
|
+
export declare function isSwiftBarInstalled(): boolean;
|
|
17
|
+
export declare function isBrewAvailable(): boolean;
|
|
18
|
+
/** Write SwiftBar's PluginDirectory so the app loads our plugin folder without manual prefs. */
|
|
19
|
+
export declare function configureSwiftBarPluginDir(dir: string): boolean;
|
|
20
|
+
export declare function resolveSwiftBarPluginDir(): {
|
|
21
|
+
dir: string;
|
|
22
|
+
source: 'env' | 'swiftbar-config' | 'fallback';
|
|
23
|
+
};
|
|
24
|
+
/** Install SwiftBar via Homebrew when missing (interactive dev/setup only). */
|
|
25
|
+
export declare function ensureSwiftBarViaBrew(): {
|
|
26
|
+
ok: boolean;
|
|
27
|
+
message: string;
|
|
28
|
+
};
|
|
29
|
+
export declare function shouldTryInstallSwiftBar(options?: {
|
|
30
|
+
tryInstallSwiftBar?: boolean;
|
|
31
|
+
}): boolean;
|
|
32
|
+
export declare function installMenubarPlugin(): MenubarInstallResult;
|
|
33
|
+
/** SwiftBar app (optional brew) + plugin dir + plugin script — one setup call. */
|
|
34
|
+
export declare function setupMenubar(options?: {
|
|
35
|
+
tryInstallSwiftBar?: boolean;
|
|
36
|
+
}): MenubarInstallResult;
|
|
37
|
+
//# sourceMappingURL=menubar-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar-setup.d.ts","sourceRoot":"","sources":["../src/menubar-setup.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AAEtD,eAAO,MAAM,4BAA4B,QAIxC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,KAAK,GAAG,iBAAiB,GAAG,UAAU,CAAC;QACxD,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;CACH,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAK7C;AAED,wBAAgB,eAAe,IAAI,OAAO,CAOzC;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAY/D;AAED,wBAAgB,wBAAwB,IAAI;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,GAAG,iBAAiB,GAAG,UAAU,CAAC;CAChD,CAoBA;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,IAAI;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA+BxE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAc5F;AAuFD,wBAAgB,oBAAoB,IAAI,oBAAoB,CAiC3D;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,oBAAoB,CA8C7F"}
|
|
@@ -0,0 +1,269 @@
|
|
|
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.SWIFTBAR_FALLBACK_PLUGIN_DIR = exports.MENUBAR_PLUGIN_NAME = void 0;
|
|
7
|
+
exports.isDarwinPlatform = isDarwinPlatform;
|
|
8
|
+
exports.isSwiftBarInstalled = isSwiftBarInstalled;
|
|
9
|
+
exports.isBrewAvailable = isBrewAvailable;
|
|
10
|
+
exports.configureSwiftBarPluginDir = configureSwiftBarPluginDir;
|
|
11
|
+
exports.resolveSwiftBarPluginDir = resolveSwiftBarPluginDir;
|
|
12
|
+
exports.ensureSwiftBarViaBrew = ensureSwiftBarViaBrew;
|
|
13
|
+
exports.shouldTryInstallSwiftBar = shouldTryInstallSwiftBar;
|
|
14
|
+
exports.installMenubarPlugin = installMenubarPlugin;
|
|
15
|
+
exports.setupMenubar = setupMenubar;
|
|
16
|
+
const node_child_process_1 = require("node:child_process");
|
|
17
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
18
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
19
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
20
|
+
exports.MENUBAR_PLUGIN_NAME = 'agent-deck.3s.sh';
|
|
21
|
+
exports.SWIFTBAR_FALLBACK_PLUGIN_DIR = node_path_1.default.join(node_os_1.default.homedir(), '.agent-deck', 'swiftbar-plugins');
|
|
22
|
+
function isDarwinPlatform() {
|
|
23
|
+
return process.platform === 'darwin';
|
|
24
|
+
}
|
|
25
|
+
function isSwiftBarInstalled() {
|
|
26
|
+
return (node_fs_1.default.existsSync('/Applications/SwiftBar.app') ||
|
|
27
|
+
node_fs_1.default.existsSync(node_path_1.default.join(node_os_1.default.homedir(), 'Applications', 'SwiftBar.app')));
|
|
28
|
+
}
|
|
29
|
+
function isBrewAvailable() {
|
|
30
|
+
try {
|
|
31
|
+
(0, node_child_process_1.execFileSync)('brew', ['--version'], { stdio: ['ignore', 'ignore', 'ignore'] });
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Write SwiftBar's PluginDirectory so the app loads our plugin folder without manual prefs. */
|
|
39
|
+
function configureSwiftBarPluginDir(dir) {
|
|
40
|
+
if (!isDarwinPlatform()) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
(0, node_child_process_1.execFileSync)('defaults', ['write', 'com.ameba.SwiftBar', 'PluginDirectory', dir], {
|
|
45
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
46
|
+
});
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function resolveSwiftBarPluginDir() {
|
|
54
|
+
const envDir = process.env.AGENT_DECK_SWIFTBAR_DIR?.trim();
|
|
55
|
+
if (envDir) {
|
|
56
|
+
return { dir: envDir, source: 'env' };
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const configured = (0, node_child_process_1.execFileSync)('defaults', ['read', 'com.ameba.SwiftBar', 'PluginDirectory'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
|
|
60
|
+
if (configured) {
|
|
61
|
+
return { dir: configured, source: 'swiftbar-config' };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// SwiftBar not installed or not configured yet.
|
|
66
|
+
}
|
|
67
|
+
return { dir: exports.SWIFTBAR_FALLBACK_PLUGIN_DIR, source: 'fallback' };
|
|
68
|
+
}
|
|
69
|
+
/** Install SwiftBar via Homebrew when missing (interactive dev/setup only). */
|
|
70
|
+
function ensureSwiftBarViaBrew() {
|
|
71
|
+
if (!isDarwinPlatform()) {
|
|
72
|
+
return { ok: false, message: 'SwiftBar is macOS-only' };
|
|
73
|
+
}
|
|
74
|
+
if (isSwiftBarInstalled()) {
|
|
75
|
+
return { ok: true, message: 'SwiftBar already installed' };
|
|
76
|
+
}
|
|
77
|
+
if (!isBrewAvailable()) {
|
|
78
|
+
return {
|
|
79
|
+
ok: false,
|
|
80
|
+
message: 'Homebrew not found — install SwiftBar: brew install --cask swiftbar',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const result = (0, node_child_process_1.spawnSync)('brew', ['install', '--cask', 'swiftbar'], {
|
|
84
|
+
stdio: 'inherit',
|
|
85
|
+
env: process.env,
|
|
86
|
+
});
|
|
87
|
+
if (result.status !== 0) {
|
|
88
|
+
return {
|
|
89
|
+
ok: false,
|
|
90
|
+
message: 'brew install --cask swiftbar failed — install SwiftBar from https://swiftbar.app',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (!isSwiftBarInstalled()) {
|
|
94
|
+
return {
|
|
95
|
+
ok: true,
|
|
96
|
+
message: 'SwiftBar installed — open SwiftBar.app from Applications if the menu bar icon does not appear',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { ok: true, message: 'Installed SwiftBar via Homebrew' };
|
|
100
|
+
}
|
|
101
|
+
function shouldTryInstallSwiftBar(options) {
|
|
102
|
+
if (options?.tryInstallSwiftBar === false) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
if (options?.tryInstallSwiftBar === true) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
if (!isDarwinPlatform() || process.env.CI === 'true' || process.env.CI === '1') {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
if (process.env.AGENT_DECK_SETUP_NO_BREW === '1') {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return Boolean(process.stdin.isTTY);
|
|
115
|
+
}
|
|
116
|
+
function resolveSetupCliBin() {
|
|
117
|
+
const candidates = [
|
|
118
|
+
node_path_1.default.join(__dirname, 'bin.js'),
|
|
119
|
+
node_path_1.default.join(__dirname, '..', 'dist', 'bin.js'),
|
|
120
|
+
node_path_1.default.join(__dirname, 'bin.ts'),
|
|
121
|
+
];
|
|
122
|
+
for (const candidate of candidates) {
|
|
123
|
+
if (node_fs_1.default.existsSync(candidate)) {
|
|
124
|
+
return candidate;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return '';
|
|
128
|
+
}
|
|
129
|
+
function buildMenubarScript(setupCliBin) {
|
|
130
|
+
const bakedSetupCli = setupCliBin
|
|
131
|
+
? `
|
|
132
|
+
SETUP_CLI="${setupCliBin.replace(/"/g, '\\"')}"
|
|
133
|
+
run_setup_cli() {
|
|
134
|
+
if [ ! -f "$SETUP_CLI" ]; then
|
|
135
|
+
return 1
|
|
136
|
+
fi
|
|
137
|
+
if [[ "$SETUP_CLI" == *.ts ]]; then
|
|
138
|
+
if command -v tsx >/dev/null 2>&1; then
|
|
139
|
+
exec tsx "$SETUP_CLI" menubar
|
|
140
|
+
fi
|
|
141
|
+
if [ -x /opt/homebrew/bin/npx ]; then
|
|
142
|
+
exec /opt/homebrew/bin/npx tsx "$SETUP_CLI" menubar
|
|
143
|
+
fi
|
|
144
|
+
exec npx tsx "$SETUP_CLI" menubar
|
|
145
|
+
fi
|
|
146
|
+
exec "$NODE_BIN" "$SETUP_CLI" menubar
|
|
147
|
+
}
|
|
148
|
+
`
|
|
149
|
+
: '';
|
|
150
|
+
return `#!/usr/bin/env bash
|
|
151
|
+
# <xbar.title>Agent Deck</xbar.title>
|
|
152
|
+
# <xbar.desc>Live deck binds per MCP session (badge = join key to the chat opener)</xbar.desc>
|
|
153
|
+
# Agent Deck menu bar plugin — installed by agent-deck setup --menubar
|
|
154
|
+
set -euo pipefail
|
|
155
|
+
|
|
156
|
+
export NO_COLOR=1
|
|
157
|
+
export FORCE_COLOR=0
|
|
158
|
+
export NPM_CONFIG_COLOR=false
|
|
159
|
+
|
|
160
|
+
# Prefer dev backend when npm run dev:all is up (:8000 before :11111)
|
|
161
|
+
if curl -sf --max-time 0.4 http://127.0.0.1:8000/health >/dev/null 2>&1; then
|
|
162
|
+
export AGENT_DECK_DEV=1
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
NODE_BIN="\${NODE_BIN:-}"
|
|
166
|
+
if [ -z "$NODE_BIN" ] && command -v node >/dev/null 2>&1; then
|
|
167
|
+
NODE_BIN="$(command -v node)"
|
|
168
|
+
fi
|
|
169
|
+
if [ -z "$NODE_BIN" ] && [ -x /opt/homebrew/bin/node ]; then
|
|
170
|
+
NODE_BIN=/opt/homebrew/bin/node
|
|
171
|
+
fi
|
|
172
|
+
if [ -z "$NODE_BIN" ] && [ -x /usr/local/bin/node ]; then
|
|
173
|
+
NODE_BIN=/usr/local/bin/node
|
|
174
|
+
fi
|
|
175
|
+
if [ -z "$NODE_BIN" ]; then
|
|
176
|
+
NODE_BIN=node
|
|
177
|
+
fi
|
|
178
|
+
${bakedSetupCli}
|
|
179
|
+
if [ -n "\${SETUP_CLI:-}" ]; then
|
|
180
|
+
run_setup_cli || true
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
GLOBAL_CLI="$(npm root -g 2>/dev/null)/@agent-deck/cli/dist/bin.js"
|
|
184
|
+
if [ -f "$GLOBAL_CLI" ]; then
|
|
185
|
+
exec "$NODE_BIN" "$GLOBAL_CLI" menubar
|
|
186
|
+
fi
|
|
187
|
+
|
|
188
|
+
if command -v agent-deck >/dev/null 2>&1; then
|
|
189
|
+
exec agent-deck menubar
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
echo "◆ off | color=gray"
|
|
193
|
+
echo "---"
|
|
194
|
+
echo "Update CLI (menubar needs @agent-deck/cli with menubar support) | color=gray"
|
|
195
|
+
echo "Dev: npm link -w @agent-deck/cli then re-run setup --menubar"
|
|
196
|
+
`;
|
|
197
|
+
}
|
|
198
|
+
function installMenubarPlugin() {
|
|
199
|
+
const { dir, source } = resolveSwiftBarPluginDir();
|
|
200
|
+
const pluginPath = node_path_1.default.join(dir, exports.MENUBAR_PLUGIN_NAME);
|
|
201
|
+
const next = buildMenubarScript(resolveSetupCliBin());
|
|
202
|
+
const existing = node_fs_1.default.existsSync(pluginPath) ? node_fs_1.default.readFileSync(pluginPath, 'utf8') : '';
|
|
203
|
+
node_fs_1.default.mkdirSync(dir, { recursive: true });
|
|
204
|
+
node_fs_1.default.writeFileSync(pluginPath, next, { encoding: 'utf8', mode: 0o755 });
|
|
205
|
+
const action = existing === next ? 'unchanged' : existing ? 'updated' : 'created';
|
|
206
|
+
const hints = [];
|
|
207
|
+
if (!isSwiftBarInstalled()) {
|
|
208
|
+
hints.push('Install SwiftBar: brew install --cask swiftbar (or re-run setup in a terminal)');
|
|
209
|
+
}
|
|
210
|
+
else if (source === 'fallback') {
|
|
211
|
+
hints.push('Restart SwiftBar if the menu bar item does not appear after setup.');
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
installed: true,
|
|
215
|
+
pluginPath,
|
|
216
|
+
action,
|
|
217
|
+
message: action === 'unchanged'
|
|
218
|
+
? `Menu bar plugin already installed → ${pluginPath}`
|
|
219
|
+
: `Installed SwiftBar menu bar plugin → ${pluginPath} (refreshes every 3s)`,
|
|
220
|
+
hints,
|
|
221
|
+
swiftbar: {
|
|
222
|
+
installed: isSwiftBarInstalled(),
|
|
223
|
+
pluginDirSource: source,
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/** SwiftBar app (optional brew) + plugin dir + plugin script — one setup call. */
|
|
228
|
+
function setupMenubar(options) {
|
|
229
|
+
if (!isDarwinPlatform()) {
|
|
230
|
+
return {
|
|
231
|
+
installed: true,
|
|
232
|
+
pluginPath: '',
|
|
233
|
+
action: 'unchanged',
|
|
234
|
+
message: 'Menu bar deck status is macOS-only — skipped',
|
|
235
|
+
hints: [],
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
if (shouldTryInstallSwiftBar(options)) {
|
|
239
|
+
const brew = ensureSwiftBarViaBrew();
|
|
240
|
+
console.log(` ${brew.message}`);
|
|
241
|
+
}
|
|
242
|
+
let { dir, source } = resolveSwiftBarPluginDir();
|
|
243
|
+
let pluginDirConfigured = false;
|
|
244
|
+
if (source === 'fallback') {
|
|
245
|
+
pluginDirConfigured = configureSwiftBarPluginDir(dir);
|
|
246
|
+
if (pluginDirConfigured) {
|
|
247
|
+
const resolved = resolveSwiftBarPluginDir();
|
|
248
|
+
dir = resolved.dir;
|
|
249
|
+
source = resolved.source;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
const result = installMenubarPlugin();
|
|
253
|
+
result.swiftbar = {
|
|
254
|
+
installed: isSwiftBarInstalled(),
|
|
255
|
+
pluginDirSource: source,
|
|
256
|
+
pluginDirConfigured,
|
|
257
|
+
};
|
|
258
|
+
if (pluginDirConfigured) {
|
|
259
|
+
result.hints = result.hints.filter((hint) => !hint.includes('Preferences → Plugin Folder'));
|
|
260
|
+
if (isSwiftBarInstalled()) {
|
|
261
|
+
result.hints.unshift('SwiftBar plugin folder configured — restart SwiftBar if needed');
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (!isSwiftBarInstalled() && !result.hints.some((h) => h.includes('brew install'))) {
|
|
265
|
+
result.hints.push('Install SwiftBar: brew install --cask swiftbar');
|
|
266
|
+
}
|
|
267
|
+
return result;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=menubar-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar-setup.js","sourceRoot":"","sources":["../src/menubar-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LiveBinding } from '@agent-deck/shared';
|
|
2
|
+
export declare function truncateName(name: string, max?: number): string;
|
|
3
|
+
export declare function formatAge(lastActivityAt: string, now: Date): string;
|
|
4
|
+
/** SwiftBar/xbar output. `null` bindings = backend offline (accuracy first: dim, never guess). */
|
|
5
|
+
export declare function renderMenubar(bindings: LiveBinding[] | null, now: Date): string;
|
|
6
|
+
export declare function runMenubar(): Promise<number>;
|
|
7
|
+
//# sourceMappingURL=menubar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.d.ts","sourceRoot":"","sources":["../src/menubar.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAW,GAAG,MAAM,CAEjE;AAED,wBAAgB,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAkBnE;AAED,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAsC/E;AAqBD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAelD"}
|
package/dist/menubar.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
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.truncateName = truncateName;
|
|
7
|
+
exports.formatAge = formatAge;
|
|
8
|
+
exports.renderMenubar = renderMenubar;
|
|
9
|
+
exports.runMenubar = runMenubar;
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const statusline_1 = require("./statusline");
|
|
12
|
+
const DEFAULT_TIMEOUT_MS = 1500;
|
|
13
|
+
const NAME_MAX = 24;
|
|
14
|
+
function truncateName(name, max = NAME_MAX) {
|
|
15
|
+
return name.length > max ? `${name.slice(0, max - 1)}…` : name;
|
|
16
|
+
}
|
|
17
|
+
function formatAge(lastActivityAt, now) {
|
|
18
|
+
const then = new Date(lastActivityAt).getTime();
|
|
19
|
+
if (Number.isNaN(then)) {
|
|
20
|
+
return '';
|
|
21
|
+
}
|
|
22
|
+
const seconds = Math.max(0, Math.floor((now.getTime() - then) / 1000));
|
|
23
|
+
if (seconds < 60) {
|
|
24
|
+
return `${seconds}s`;
|
|
25
|
+
}
|
|
26
|
+
const minutes = Math.floor(seconds / 60);
|
|
27
|
+
if (minutes < 60) {
|
|
28
|
+
return `${minutes}m`;
|
|
29
|
+
}
|
|
30
|
+
const hours = Math.floor(minutes / 60);
|
|
31
|
+
if (hours < 24) {
|
|
32
|
+
return `${hours}h`;
|
|
33
|
+
}
|
|
34
|
+
return `${Math.floor(hours / 24)}d`;
|
|
35
|
+
}
|
|
36
|
+
/** SwiftBar/xbar output. `null` bindings = backend offline (accuracy first: dim, never guess). */
|
|
37
|
+
function renderMenubar(bindings, now) {
|
|
38
|
+
if (bindings === null) {
|
|
39
|
+
return ['◆ off | color=gray', '---', 'Agent Deck offline | color=gray', ''].join('\n');
|
|
40
|
+
}
|
|
41
|
+
if (bindings.length === 0) {
|
|
42
|
+
return ['◆ —', '---', 'No live sessions — bind_workspace in an agent chat', ''].join('\n');
|
|
43
|
+
}
|
|
44
|
+
const title = bindings.length === 1
|
|
45
|
+
? `◆ ${truncateName(bindings[0].deckName)} ⌘${bindings[0].badge}`
|
|
46
|
+
: `◆ ${bindings.length}`;
|
|
47
|
+
const lines = [title, '---'];
|
|
48
|
+
const byWorkspace = new Map();
|
|
49
|
+
for (const row of bindings) {
|
|
50
|
+
const group = byWorkspace.get(row.workspaceRoot) ?? [];
|
|
51
|
+
group.push(row);
|
|
52
|
+
byWorkspace.set(row.workspaceRoot, group);
|
|
53
|
+
}
|
|
54
|
+
for (const workspaceRoot of [...byWorkspace.keys()].sort()) {
|
|
55
|
+
lines.push(`${node_path_1.default.basename(workspaceRoot)}/ | size=11 color=gray`);
|
|
56
|
+
const rows = [...byWorkspace.get(workspaceRoot)].sort((a, b) => a.lastActivityAt < b.lastActivityAt ? 1 : -1);
|
|
57
|
+
for (const row of rows) {
|
|
58
|
+
const client = row.clientName ?? 'agent';
|
|
59
|
+
const age = formatAge(row.lastActivityAt, now);
|
|
60
|
+
const meta = age ? `${client} · ${age}` : client;
|
|
61
|
+
lines.push(`● ${truncateName(row.deckName)} ⌘${row.badge} — ${meta} | font=Menlo`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
lines.push('');
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
async function fetchBindings(backendUrl, timeoutMs) {
|
|
68
|
+
const controller = new AbortController();
|
|
69
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
70
|
+
try {
|
|
71
|
+
const response = await fetch(`${backendUrl}/api/scope/bindings`, {
|
|
72
|
+
signal: controller.signal,
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const body = (await response.json());
|
|
78
|
+
return body.success && Array.isArray(body.data) ? body.data : null;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
clearTimeout(timer);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function runMenubar() {
|
|
88
|
+
const host = process.env.AGENT_DECK_HOST ?? '127.0.0.1';
|
|
89
|
+
const timeoutMs = Number.parseInt(process.env.AGENT_DECK_STATUSLINE_TIMEOUT_MS ?? '', 10) || DEFAULT_TIMEOUT_MS;
|
|
90
|
+
for (const port of (0, statusline_1.resolveBackendPorts)()) {
|
|
91
|
+
const bindings = await fetchBindings(`http://${host}:${port}`, timeoutMs);
|
|
92
|
+
if (bindings !== null) {
|
|
93
|
+
process.stdout.write(renderMenubar(bindings, new Date()));
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
process.stdout.write(renderMenubar(null, new Date()));
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=menubar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.js","sourceRoot":"","sources":["../src/menubar.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { type McpClient, type SetupScope } from './mcp-config';
|
|
2
2
|
export interface SetupOptions {
|
|
3
|
-
client: McpClient;
|
|
3
|
+
client: McpClient | null;
|
|
4
4
|
scope?: SetupScope;
|
|
5
5
|
host?: string;
|
|
6
6
|
mcpPort?: number;
|
|
7
7
|
start?: boolean;
|
|
8
8
|
statusline: boolean;
|
|
9
|
+
menubar: boolean;
|
|
9
10
|
}
|
|
11
|
+
/** Menu bar plugin on by default on macOS (SwiftBar); opt out with --no-menubar. */
|
|
12
|
+
export declare function resolveSetupMenubar(client: McpClient, explicit?: boolean): boolean;
|
|
10
13
|
/** Status line is on by default for Claude Code and Cursor CLI; optional for Claude Desktop. */
|
|
11
14
|
export declare function resolveSetupStatusline(client: McpClient, explicit?: boolean): boolean;
|
|
12
15
|
export declare function printSetupUsage(): void;
|
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;AAKtB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,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,GAAG,IAAI,CAAC;IACzB,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;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAsFD,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAQlF;AAED,gGAAgG;AAChG,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAQrF;AAmCD,wBAAgB,eAAe,IAAI,IAAI,CAsBtC;AA2CD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD9D;AA4CD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D"}
|
package/dist/setup.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveSetupMenubar = resolveSetupMenubar;
|
|
3
4
|
exports.resolveSetupStatusline = resolveSetupStatusline;
|
|
4
5
|
exports.printSetupUsage = printSetupUsage;
|
|
5
6
|
exports.runSetup = runSetup;
|
|
@@ -8,7 +9,7 @@ const node_child_process_1 = require("node:child_process");
|
|
|
8
9
|
const agent_harness_1 = require("./agent-harness");
|
|
9
10
|
const mcp_config_1 = require("./mcp-config");
|
|
10
11
|
const statusline_setup_1 = require("./statusline-setup");
|
|
11
|
-
const
|
|
12
|
+
const menubar_setup_1 = require("./menubar-setup");
|
|
12
13
|
const defaults_1 = require("./defaults");
|
|
13
14
|
function parseClient(value) {
|
|
14
15
|
if (!value) {
|
|
@@ -30,6 +31,7 @@ function parseSetupArgs(args) {
|
|
|
30
31
|
let mcpPort = (0, defaults_1.parseCliMcpPort)(process.env.AGENT_DECK_MCP_PORT);
|
|
31
32
|
let start = false;
|
|
32
33
|
let statusline;
|
|
34
|
+
let menubar;
|
|
33
35
|
for (let i = 0; i < args.length; i += 1) {
|
|
34
36
|
const arg = args[i];
|
|
35
37
|
if (arg === '--client') {
|
|
@@ -59,6 +61,12 @@ function parseSetupArgs(args) {
|
|
|
59
61
|
else if (arg === '--no-statusline') {
|
|
60
62
|
statusline = false;
|
|
61
63
|
}
|
|
64
|
+
else if (arg === '--menubar') {
|
|
65
|
+
menubar = true;
|
|
66
|
+
}
|
|
67
|
+
else if (arg === '--no-menubar') {
|
|
68
|
+
menubar = false;
|
|
69
|
+
}
|
|
62
70
|
else if (arg === '--help' || arg === '-h') {
|
|
63
71
|
return { error: 'help' };
|
|
64
72
|
}
|
|
@@ -67,6 +75,9 @@ function parseSetupArgs(args) {
|
|
|
67
75
|
}
|
|
68
76
|
}
|
|
69
77
|
if (!client) {
|
|
78
|
+
if (menubar === true) {
|
|
79
|
+
return { client: null, scope, host, mcpPort, start, statusline: false, menubar: true };
|
|
80
|
+
}
|
|
70
81
|
return { error: '--client is required (cursor, claude, or claude-desktop)' };
|
|
71
82
|
}
|
|
72
83
|
if (client !== 'cursor' && client !== 'claude' && scope === 'project') {
|
|
@@ -82,8 +93,19 @@ function parseSetupArgs(args) {
|
|
|
82
93
|
mcpPort,
|
|
83
94
|
start,
|
|
84
95
|
statusline: resolveSetupStatusline(client, statusline),
|
|
96
|
+
menubar: resolveSetupMenubar(client, menubar),
|
|
85
97
|
};
|
|
86
98
|
}
|
|
99
|
+
/** Menu bar plugin on by default on macOS (SwiftBar); opt out with --no-menubar. */
|
|
100
|
+
function resolveSetupMenubar(client, explicit) {
|
|
101
|
+
if (explicit === false) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
if (explicit === true) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return (0, menubar_setup_1.isDarwinPlatform)();
|
|
108
|
+
}
|
|
87
109
|
/** Status line is on by default for Claude Code and Cursor CLI; optional for Claude Desktop. */
|
|
88
110
|
function resolveSetupStatusline(client, explicit) {
|
|
89
111
|
if (explicit === false) {
|
|
@@ -122,32 +144,33 @@ async function tryClaudeCliAdd(endpoint) {
|
|
|
122
144
|
}
|
|
123
145
|
function printSetupUsage() {
|
|
124
146
|
console.log(`Usage:
|
|
125
|
-
agent-deck setup --client cursor|claude|claude-desktop [--scope global|project] [--mcp-port PORT] [--start]
|
|
147
|
+
agent-deck setup --client cursor|claude|claude-desktop [--scope global|project] [--mcp-port PORT] [--start]
|
|
148
|
+
agent-deck setup --menubar
|
|
149
|
+
|
|
150
|
+
Recommended (macOS, both terminal agents + menu bar):
|
|
151
|
+
agent-deck setup --client cursor --start
|
|
152
|
+
agent-deck setup --client claude
|
|
126
153
|
|
|
127
154
|
Options:
|
|
128
|
-
--client MCP client to configure (required)
|
|
155
|
+
--client MCP client to configure (required unless --menubar alone)
|
|
129
156
|
--scope global (default) or project — project only for cursor/claude
|
|
130
157
|
--host MCP host (default 127.0.0.1 or AGENT_DECK_HOST)
|
|
131
158
|
--mcp-port MCP port (default ${defaults_1.CLI_DEFAULT_MCP_PORT} or AGENT_DECK_MCP_PORT)
|
|
132
159
|
--start Start Agent Deck after writing config
|
|
133
160
|
--no-statusline Skip prompt status line (default: on for cursor and claude)
|
|
134
161
|
--statusline Same as default for cursor/claude (kept for compatibility)
|
|
162
|
+
--no-menubar Skip SwiftBar menu bar plugin (default: on for macOS)
|
|
163
|
+
--menubar Force menu bar plugin (also works alone, without --client)
|
|
135
164
|
|
|
136
|
-
Setup installs MCP config, agent harness,
|
|
165
|
+
Setup installs MCP config, agent harness, terminal status line, and on macOS: SwiftBar plugin
|
|
166
|
+
(+ Homebrew SwiftBar install when run interactively in a terminal).`);
|
|
137
167
|
}
|
|
138
|
-
async function finishSetup(client, scope, endpoint, shouldStart, withStatusline) {
|
|
168
|
+
async function finishSetup(client, scope, endpoint, shouldStart, withStatusline, withMenubar) {
|
|
139
169
|
const harness = (0, agent_harness_1.installAgentHarness)(client, scope);
|
|
140
170
|
console.log(harness.message);
|
|
141
171
|
if (!harness.installed && client === 'claude-desktop') {
|
|
142
172
|
console.log(' See docs/AGENT_HARNESS.md if you also use Claude Code or Cursor.');
|
|
143
173
|
}
|
|
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
174
|
if (withStatusline) {
|
|
152
175
|
if (client === 'cursor' || client === 'claude') {
|
|
153
176
|
const statusline = (0, statusline_setup_1.installStatusline)(client);
|
|
@@ -163,7 +186,14 @@ async function finishSetup(client, scope, endpoint, shouldStart, withStatusline)
|
|
|
163
186
|
console.log(' --statusline applies to Cursor CLI and Claude Code only (not Claude Desktop).');
|
|
164
187
|
}
|
|
165
188
|
}
|
|
166
|
-
|
|
189
|
+
if (withMenubar) {
|
|
190
|
+
const plugin = (0, menubar_setup_1.setupMenubar)();
|
|
191
|
+
console.log(plugin.message);
|
|
192
|
+
for (const hint of plugin.hints) {
|
|
193
|
+
console.log(` ${hint}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
printNextSteps(endpoint, shouldStart, client, withStatusline, withMenubar);
|
|
167
197
|
return shouldStart ? 2 : 0;
|
|
168
198
|
}
|
|
169
199
|
async function runSetup(args) {
|
|
@@ -177,47 +207,70 @@ async function runSetup(args) {
|
|
|
177
207
|
printSetupUsage();
|
|
178
208
|
return 1;
|
|
179
209
|
}
|
|
210
|
+
if (parsed.menubar && !parsed.client) {
|
|
211
|
+
const plugin = (0, menubar_setup_1.setupMenubar)();
|
|
212
|
+
console.log(plugin.message);
|
|
213
|
+
for (const hint of plugin.hints) {
|
|
214
|
+
console.log(` ${hint}`);
|
|
215
|
+
}
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
218
|
+
const client = parsed.client;
|
|
180
219
|
const endpoint = {
|
|
181
220
|
host: parsed.host ?? '127.0.0.1',
|
|
182
221
|
mcpPort: parsed.mcpPort ?? defaults_1.CLI_DEFAULT_MCP_PORT,
|
|
183
222
|
};
|
|
184
223
|
const scope = parsed.scope ?? 'global';
|
|
185
|
-
if (
|
|
224
|
+
if (client === 'claude') {
|
|
186
225
|
const added = await tryClaudeCliAdd(endpoint);
|
|
187
226
|
if (added.ok) {
|
|
188
227
|
console.log('Configured Claude Code via `claude mcp add` → ~/.claude.json');
|
|
189
228
|
console.log('Verify: claude mcp list');
|
|
190
|
-
return await finishSetup(
|
|
229
|
+
return await finishSetup(client, scope, endpoint, parsed.start === true, parsed.statusline, parsed.menubar);
|
|
191
230
|
}
|
|
192
231
|
console.warn(`Claude CLI failed (${added.error ?? 'unknown error'}) — writing ~/.claude.json instead`);
|
|
193
232
|
}
|
|
194
|
-
const configPath = (0, mcp_config_1.resolveConfigPath)(
|
|
195
|
-
const entry = (0, mcp_config_1.buildAgentDeckEntry)(
|
|
233
|
+
const configPath = (0, mcp_config_1.resolveConfigPath)(client, scope);
|
|
234
|
+
const entry = (0, mcp_config_1.buildAgentDeckEntry)(client, endpoint);
|
|
196
235
|
const merged = (0, mcp_config_1.mergeMcpServerConfig)((0, mcp_config_1.readJsonFile)(configPath), entry);
|
|
197
236
|
(0, mcp_config_1.writeJsonFile)(configPath, merged);
|
|
198
237
|
console.log(`Wrote agent-deck MCP config → ${configPath}`);
|
|
199
|
-
if (
|
|
238
|
+
if (client === 'claude-desktop') {
|
|
200
239
|
console.log('Claude Desktop uses a stdio bridge (supergateway) because JSON config is stdio-only.');
|
|
201
240
|
console.log('Start Agent Deck before opening Claude Desktop.');
|
|
202
241
|
}
|
|
203
|
-
return await finishSetup(
|
|
242
|
+
return await finishSetup(client, scope, endpoint, parsed.start === true, parsed.statusline, parsed.menubar);
|
|
204
243
|
}
|
|
205
|
-
function printNextSteps(endpoint, shouldStart, client, withStatusline = false) {
|
|
244
|
+
function printNextSteps(endpoint, shouldStart, client, withStatusline = false, withMenubar = false) {
|
|
206
245
|
console.log('');
|
|
207
246
|
console.log('Next steps:');
|
|
247
|
+
let step = 1;
|
|
208
248
|
if (shouldStart) {
|
|
209
|
-
console.log(
|
|
249
|
+
console.log(` ${step}. Agent Deck will start now (same as \`agent-deck start\`)`);
|
|
210
250
|
}
|
|
211
251
|
else {
|
|
212
|
-
console.log(
|
|
252
|
+
console.log(` ${step}. agent-deck start (or \`agent-deck stop\` first if ports are busy)`);
|
|
213
253
|
}
|
|
214
|
-
|
|
215
|
-
console.log(
|
|
254
|
+
step += 1;
|
|
255
|
+
console.log(` ${step}. MCP endpoint → ${(0, mcp_config_1.buildMcpUrl)(endpoint)}`);
|
|
256
|
+
step += 1;
|
|
257
|
+
console.log(` ${step}. Restart Claude Code / Cursor so MCP + harness rules load`);
|
|
258
|
+
step += 1;
|
|
216
259
|
if (client === 'claude') {
|
|
217
|
-
console.log(
|
|
260
|
+
console.log(` ${step}. Claude Code: \`claude mcp list\` — agent-deck should show Connected when the backend is running`);
|
|
261
|
+
step += 1;
|
|
262
|
+
}
|
|
263
|
+
if (client === 'cursor' || client === 'claude') {
|
|
264
|
+
console.log(` ${step}. Set up the other terminal agent: agent-deck setup --client ${client === 'cursor' ? 'claude' : 'cursor'}`);
|
|
265
|
+
step += 1;
|
|
218
266
|
}
|
|
219
267
|
if (withStatusline && (client === 'cursor' || client === 'claude')) {
|
|
220
|
-
console.log(
|
|
268
|
+
console.log(` ${step}. Terminal footer shows deck after bind_workspace (debug: agent-deck statusline --workspace <path>)`);
|
|
269
|
+
step += 1;
|
|
270
|
+
}
|
|
271
|
+
if (withMenubar && (0, menubar_setup_1.isDarwinPlatform)()) {
|
|
272
|
+
console.log(` ${step}. Menu bar shows ⌘badges after bind_workspace (matches chat opener + dashboard)`);
|
|
273
|
+
step += 1;
|
|
221
274
|
}
|
|
222
275
|
console.log('');
|
|
223
276
|
console.log('Optional: AGENT_DECK_AUTO_UPGRADE=1 agent-deck start (check npm for updates on start)');
|
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":"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"}
|
package/dist/statusline.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Claude/Cursor may keep stdin open — never block on EOF. */
|
|
2
2
|
export declare function readStdin(timeoutMs?: number): Promise<string>;
|
|
3
|
+
export declare function resolveBackendPorts(): number[];
|
|
3
4
|
export declare function resolveStatuslineWorkspace(args: string[], stdin: string): string;
|
|
4
5
|
export declare function runStatusline(args: string[]): Promise<number>;
|
|
5
6
|
//# 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":"AAYA,8DAA8D;AAC9D,wBAAsB,SAAS,CAAC,SAAS,SAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClF;
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAYA,8DAA8D;AAC9D,wBAAsB,SAAS,CAAC,SAAS,SAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClF;AAmCD,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAW9C;AAED,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,CAuBnE"}
|
package/dist/statusline.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.readStdin = readStdin;
|
|
4
|
+
exports.resolveBackendPorts = resolveBackendPorts;
|
|
4
5
|
exports.resolveStatuslineWorkspace = resolveStatuslineWorkspace;
|
|
5
6
|
exports.runStatusline = runStatusline;
|
|
6
7
|
const shared_1 = require("@agent-deck/shared");
|
package/dist/statusline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":";;AAaA,8BA6CC;
|
|
1
|
+
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-deck/cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.10",
|
|
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.10",
|
|
43
|
+
"@agent-deck/shared": "^1.2.10"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/node": "^20.11.5",
|