borgmcp 3.3.0 → 3.5.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.
Files changed (94) hide show
  1. package/README.md +30 -5
  2. package/dist/agent-integration-health.d.ts +9 -5
  3. package/dist/agent-integration-health.d.ts.map +1 -1
  4. package/dist/agent-integration-health.js +104 -5
  5. package/dist/agent-integration-health.js.map +1 -1
  6. package/dist/backends/{launch-all-windows.d.ts → launch-all-terminals.d.ts} +5 -3
  7. package/dist/backends/launch-all-terminals.d.ts.map +1 -0
  8. package/dist/backends/{launch-all-windows.js → launch-all-terminals.js} +26 -12
  9. package/dist/backends/launch-all-terminals.js.map +1 -0
  10. package/dist/bare-launch-menu.d.ts +53 -16
  11. package/dist/bare-launch-menu.d.ts.map +1 -1
  12. package/dist/bare-launch-menu.js +95 -4
  13. package/dist/bare-launch-menu.js.map +1 -1
  14. package/dist/claude.d.ts +6 -0
  15. package/dist/claude.d.ts.map +1 -1
  16. package/dist/claude.js +84 -8
  17. package/dist/claude.js.map +1 -1
  18. package/dist/cli-help.d.ts +2 -0
  19. package/dist/cli-help.d.ts.map +1 -1
  20. package/dist/cli-help.js +31 -2
  21. package/dist/cli-help.js.map +1 -1
  22. package/dist/config-utils.d.ts +12 -6
  23. package/dist/config-utils.d.ts.map +1 -1
  24. package/dist/config-utils.js +31 -8
  25. package/dist/config-utils.js.map +1 -1
  26. package/dist/cubes.d.ts +17 -0
  27. package/dist/cubes.d.ts.map +1 -1
  28. package/dist/cubes.js +87 -1
  29. package/dist/cubes.js.map +1 -1
  30. package/dist/ensure-mcp-config.d.ts.map +1 -1
  31. package/dist/ensure-mcp-config.js +5 -2
  32. package/dist/ensure-mcp-config.js.map +1 -1
  33. package/dist/launch-all-cmd.d.ts.map +1 -1
  34. package/dist/launch-all-cmd.js +20 -10
  35. package/dist/launch-all-cmd.js.map +1 -1
  36. package/dist/log-audit-core.d.ts +7 -0
  37. package/dist/log-audit-core.d.ts.map +1 -0
  38. package/dist/log-audit-core.js +80 -0
  39. package/dist/log-audit-core.js.map +1 -0
  40. package/dist/log-audit.d.ts +3 -3
  41. package/dist/log-audit.js +7 -110
  42. package/dist/log-audit.js.map +1 -1
  43. package/dist/opencode-drone.d.ts.map +1 -1
  44. package/dist/opencode-drone.js +6 -1
  45. package/dist/opencode-drone.js.map +1 -1
  46. package/dist/opencode-plugin.d.ts +47 -7
  47. package/dist/opencode-plugin.d.ts.map +1 -1
  48. package/dist/opencode-plugin.js +187 -23
  49. package/dist/opencode-plugin.js.map +1 -1
  50. package/dist/parse-launch-all-args.d.ts +1 -1
  51. package/dist/parse-launch-all-args.d.ts.map +1 -1
  52. package/dist/parse-launch-all-args.js +3 -3
  53. package/dist/parse-launch-all-args.js.map +1 -1
  54. package/dist/regen-format.js +1 -1
  55. package/dist/regen-format.js.map +1 -1
  56. package/dist/resolved-cli-config.d.ts +1 -0
  57. package/dist/resolved-cli-config.d.ts.map +1 -1
  58. package/dist/resolved-cli-config.js +1 -0
  59. package/dist/resolved-cli-config.js.map +1 -1
  60. package/dist/seat-commands.d.ts +58 -0
  61. package/dist/seat-commands.d.ts.map +1 -0
  62. package/dist/seat-commands.js +240 -0
  63. package/dist/seat-commands.js.map +1 -0
  64. package/dist/seats.d.ts +8 -0
  65. package/dist/seats.d.ts.map +1 -1
  66. package/dist/seats.js +14 -0
  67. package/dist/seats.js.map +1 -1
  68. package/dist/unknown-subcommand.d.ts +1 -1
  69. package/dist/unknown-subcommand.d.ts.map +1 -1
  70. package/dist/unknown-subcommand.js +2 -0
  71. package/dist/unknown-subcommand.js.map +1 -1
  72. package/docs/LOCAL_SERVER.md +17 -4
  73. package/package.json +1 -1
  74. package/src/agent-integration-health.ts +121 -6
  75. package/src/backends/{launch-all-windows.ts → launch-all-terminals.ts} +33 -15
  76. package/src/bare-launch-menu.ts +141 -18
  77. package/src/claude.ts +128 -7
  78. package/src/cli-help.ts +37 -2
  79. package/src/config-utils.ts +33 -8
  80. package/src/cubes.ts +118 -1
  81. package/src/ensure-mcp-config.ts +5 -2
  82. package/src/launch-all-cmd.ts +24 -11
  83. package/src/log-audit-core.ts +81 -0
  84. package/src/log-audit.ts +6 -117
  85. package/src/opencode-drone.ts +6 -1
  86. package/src/opencode-plugin.ts +216 -22
  87. package/src/parse-launch-all-args.ts +4 -4
  88. package/src/regen-format.ts +1 -1
  89. package/src/resolved-cli-config.ts +2 -0
  90. package/src/seat-commands.ts +322 -0
  91. package/src/seats.ts +15 -0
  92. package/src/unknown-subcommand.ts +2 -0
  93. package/dist/backends/launch-all-windows.d.ts.map +0 -1
  94. package/dist/backends/launch-all-windows.js.map +0 -1
package/README.md CHANGED
@@ -84,8 +84,26 @@ continue:
84
84
  The lookup is the same for Claude Code, Codex, and OpenCode; only their launch
85
85
  adapters differ. It is also the same for an in-place drone and a sibling drone
86
86
  worktree: run `borg` inside the worktree where the drone was assimilated.
87
- Running it in the repository's main worktree does not resume sibling drones. To
88
- resume all saved drone worktrees for a cube, run:
87
+ In a TTY, running `borg` in the repository's main worktree offers the repository's drones so you can pick one to resume.
88
+
89
+ You do not have to remember worktree paths. To list the drones registered on
90
+ this machine, run:
91
+
92
+ ```bash
93
+ borg seats
94
+ ```
95
+
96
+ To resume one drone from any directory, run:
97
+
98
+ ```bash
99
+ borg launch <label-or-id-prefix>
100
+ ```
101
+
102
+ `borg launch` finds the drone's worktree in the local seat registry and starts
103
+ it exactly as if you ran `borg` in that worktree. If a label exists in more
104
+ than one cube, add `--cube <name>` or use the drone id prefix.
105
+
106
+ To resume all saved drone worktrees for a cube, run:
89
107
 
90
108
  ```bash
91
109
  borg launch-all [cube]
@@ -193,9 +211,16 @@ noncanonical worktrees heal when Borg next launches or assimilates them.
193
211
 
194
212
  Run `borg doctor` for a read-only inventory of the five hook bins, their owning
195
213
  `borgmcp` version, managed hook files, and the OpenCode orientation plugin. It
196
- names a package reinstall for a missing bin, a PATH correction for a bin owned
197
- by the wrong package or version, `borg update --yes` for stale managed hooks,
198
- and the invalid file that must be repaired before update can rewrite it.
214
+ names a package reinstall for a missing bin and a PATH correction for a bin
215
+ owned by the wrong package or version. It names `borg update --yes` for stale
216
+ managed hooks and for a missing or outdated OpenCode orientation plugin. For an
217
+ invalid managed configuration, it names the file that must be repaired before
218
+ update can rewrite it.
219
+
220
+ For Borg-launched OpenCode, the plugin supplies the Borg orientation after
221
+ OpenCode creates a new session, preserves it across compaction, and applies the
222
+ same cube-log audit used by the other agent integrations. The launcher kickoff
223
+ remains the only orientation for the initial session, so it is not duplicated.
199
224
 
200
225
  ## Troubleshooting
201
226
 
@@ -12,12 +12,16 @@ export interface AgentHookBinHealth {
12
12
  export interface AgentIntegrationHealth {
13
13
  expectedVersion: string;
14
14
  bins: AgentHookBinHealth[];
15
- issues: Array<AgentHookBinHealth | ManagedAgentHookConfigHealth>;
15
+ issues: Array<AgentHookBinHealth | ManagedAgentHookConfigHealth | OpenCodePluginHealth>;
16
16
  hookConfigs: ManagedAgentHookConfigHealth[];
17
- openCodePlugin: {
18
- path: string;
19
- present: boolean;
20
- };
17
+ openCodePlugin: OpenCodePluginHealth;
18
+ }
19
+ export interface OpenCodePluginHealth {
20
+ path: string;
21
+ configured: boolean;
22
+ status: 'ok' | 'present' | 'absent' | 'missing' | 'outdated' | 'unreadable' | 'refused';
23
+ version?: string;
24
+ detail?: string;
21
25
  }
22
26
  export interface InspectAgentIntegrationHealthOptions {
23
27
  expectedVersion?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-integration-health.d.ts","sourceRoot":"","sources":["../src/agent-integration-health.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,4BAA4B,EAGlC,MAAM,mBAAmB,CAAC;AAI3B,eAAO,MAAM,eAAe,oHAMlB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,MAAM,EAAE,KAAK,CAAC,kBAAkB,GAAG,4BAA4B,CAAC,CAAC;IACjE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC5C,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACpD;AAED,MAAM,WAAW,oCAAoC;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC;CACxF;AA4BD,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,oCAAyC,GACjD,sBAAsB,CA6CxB;AAYD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAwCnF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAGlF;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,oCAAoC,GAAG;IACxE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B,GAAG,MAAM,CAId;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,GAAE,oCAAoC,GAAG;IAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACvF,OAAO,CAeT;AAED;gFACgF;AAChF,wBAAgB,wCAAwC,IAAI,IAAI,CAwB/D"}
1
+ {"version":3,"file":"agent-integration-health.d.ts","sourceRoot":"","sources":["../src/agent-integration-health.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,4BAA4B,EAGlC,MAAM,mBAAmB,CAAC;AAS3B,eAAO,MAAM,eAAe,oHAMlB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,MAAM,EAAE,KAAK,CAAC,kBAAkB,GAAG,4BAA4B,GAAG,oBAAoB,CAAC,CAAC;IACxF,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC5C,cAAc,EAAE,oBAAoB,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oCAAoC;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC;CACxF;AA8FD,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,oCAAyC,GACjD,sBAAsB,CAkDxB;AA4BD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAqDnF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAGlF;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,oCAAoC,GAAG;IACxE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B,GAAG,MAAM,CAId;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,GAAE,oCAAoC,GAAG;IAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACvF,OAAO,CAeT;AAED;gFACgF;AAChF,wBAAgB,wCAAwC,IAAI,IAAI,CAyB/D"}
@@ -1,9 +1,10 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import which from 'which';
4
- import { inspectManagedAgentHookConfigs, refreshManagedAgentHookConfigs, refreshManagedAgentMcpConfigs, } from './config-utils.js';
5
- import { borgHomeRoot } from './private-root.js';
4
+ import { inspectManagedAgentHookConfigs, isOpenCodeMcpServerConfigured, refreshManagedAgentHookConfigs, refreshManagedAgentMcpConfigs, } from './config-utils.js';
5
+ import { borgHomeRoot, isCanonicalPath } from './private-root.js';
6
6
  import { getPackageVersion } from './version.js';
7
+ import { buildBorgPluginSource, installBorgPlugin, openCodePluginPath, } from './opencode-plugin.js';
7
8
  export const AGENT_HOOK_BINS = [
8
9
  'borg-regen',
9
10
  'borg-clear-rewake',
@@ -38,6 +39,71 @@ function defaultResolveBin(name, searchPath) {
38
39
  return null;
39
40
  }
40
41
  }
42
+ function inspectOpenCodePlugin(homeDir, expectedVersion) {
43
+ const pluginPath = openCodePluginPath(homeDir);
44
+ const configured = isOpenCodeMcpServerConfigured(path.join(homeDir, '.config', 'opencode', 'opencode.json'));
45
+ try {
46
+ let metadata;
47
+ try {
48
+ metadata = fs.lstatSync(pluginPath);
49
+ }
50
+ catch (error) {
51
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
52
+ if (!isCanonicalPath(pluginPath)) {
53
+ return {
54
+ path: pluginPath,
55
+ configured,
56
+ status: 'refused',
57
+ detail: 'plugin path contains a symlink',
58
+ };
59
+ }
60
+ return { path: pluginPath, configured, status: configured ? 'missing' : 'absent' };
61
+ }
62
+ throw error;
63
+ }
64
+ if (metadata.isSymbolicLink()) {
65
+ return {
66
+ path: pluginPath,
67
+ configured,
68
+ status: 'refused',
69
+ detail: 'plugin path is a symlink',
70
+ };
71
+ }
72
+ if (!isCanonicalPath(pluginPath)) {
73
+ return {
74
+ path: pluginPath,
75
+ configured,
76
+ status: 'refused',
77
+ detail: 'plugin path contains a symlink',
78
+ };
79
+ }
80
+ if (!metadata.isFile()) {
81
+ return {
82
+ path: pluginPath,
83
+ configured,
84
+ status: 'refused',
85
+ detail: 'plugin path is not a regular file',
86
+ };
87
+ }
88
+ const source = fs.readFileSync(pluginPath, 'utf8');
89
+ const marker = source.match(/borgmcp-opencode-plugin:([^;\s]+);opencode=/)?.[1];
90
+ if (!configured) {
91
+ return { path: pluginPath, configured, status: 'present', version: marker ?? 'unknown' };
92
+ }
93
+ if (source === buildBorgPluginSource(expectedVersion)) {
94
+ return { path: pluginPath, configured, status: 'ok', version: expectedVersion };
95
+ }
96
+ return { path: pluginPath, configured, status: 'outdated', version: marker ?? 'unknown' };
97
+ }
98
+ catch (error) {
99
+ return {
100
+ path: pluginPath,
101
+ configured,
102
+ status: 'unreadable',
103
+ detail: error instanceof Error ? error.message : String(error),
104
+ };
105
+ }
106
+ }
41
107
  export function inspectAgentIntegrationHealth(options = {}) {
42
108
  const expectedVersion = options.expectedVersion ?? getPackageVersion();
43
109
  const homeDir = options.homeDir ?? borgHomeRoot();
@@ -73,17 +139,22 @@ export function inspectAgentIntegrationHealth(options = {}) {
73
139
  }
74
140
  return { name, status: 'ok', resolvedPath, owner: owner.name, version: owner.version };
75
141
  });
76
- const pluginPath = path.join(homeDir, '.config', 'opencode', 'plugins', 'borg-orient.js');
77
142
  const hookConfigs = inspectManagedAgentHookConfigs(homeDir);
143
+ const openCodePlugin = inspectOpenCodePlugin(homeDir, expectedVersion);
78
144
  return {
79
145
  expectedVersion,
80
146
  bins,
81
147
  issues: [
82
148
  ...bins.filter((bin) => bin.status !== 'ok'),
83
149
  ...hookConfigs.filter((config) => config.status === 'stale' || config.status === 'invalid'),
150
+ ...(openCodePlugin.status === 'unreadable' ||
151
+ (openCodePlugin.status === 'refused' && openCodePlugin.configured) ||
152
+ (openCodePlugin.configured && openCodePlugin.status !== 'ok')
153
+ ? [openCodePlugin]
154
+ : []),
84
155
  ],
85
156
  hookConfigs,
86
- openCodePlugin: { path: pluginPath, present: fs.existsSync(pluginPath) },
157
+ openCodePlugin,
87
158
  };
88
159
  }
89
160
  function renderBin(bin, expectedVersion) {
@@ -95,13 +166,25 @@ function renderBin(bin, expectedVersion) {
95
166
  case 'unreadable': return `${bin.name}: unreadable${bin.resolvedPath ? ` at ${bin.resolvedPath}` : ''}${bin.detail ? ` (${bin.detail})` : ''}`;
96
167
  }
97
168
  }
169
+ function renderOpenCodePlugin(plugin, expectedVersion) {
170
+ const prefix = 'OpenCode borg-orient.js plugin:';
171
+ switch (plugin.status) {
172
+ case 'ok': return `${prefix} ok (${plugin.version})`;
173
+ case 'present': return `${prefix} present`;
174
+ case 'absent': return `${prefix} absent`;
175
+ case 'missing': return `${prefix} missing at ${plugin.path}`;
176
+ case 'outdated': return `${prefix} version ${plugin.version}, expected ${expectedVersion} at ${plugin.path}`;
177
+ case 'unreadable': return `${prefix} unreadable at ${plugin.path}${plugin.detail ? ` (${plugin.detail})` : ''}`;
178
+ case 'refused': return `${prefix} refused at ${plugin.path}${plugin.detail ? ` (${plugin.detail})` : ''}`;
179
+ }
180
+ }
98
181
  export function renderAgentIntegrationHealth(report) {
99
182
  const lines = [
100
183
  `Borg agent integration (borgmcp ${report.expectedVersion})`,
101
184
  ...report.bins.map((bin) => ` ${renderBin(bin, report.expectedVersion)}`),
102
185
  'Hook configuration:',
103
186
  ...report.hookConfigs.map((item) => (` ${item.status}: ${item.path}${item.detail ? ` (${item.detail})` : ''}`)),
104
- `OpenCode borg-orient.js plugin: ${report.openCodePlugin.present ? 'present' : 'absent'} (${report.openCodePlugin.path})`,
187
+ renderOpenCodePlugin(report.openCodePlugin, report.expectedVersion),
105
188
  ];
106
189
  for (const bin of report.bins) {
107
190
  switch (bin.status) {
@@ -129,6 +212,20 @@ export function renderAgentIntegrationHealth(report) {
129
212
  : `Repair invalid managed hook config ${config.path}, then run: borg update --yes`);
130
213
  }
131
214
  }
215
+ if (report.openCodePlugin.status === 'missing') {
216
+ lines.push('Repair missing OpenCode plugin: borg update --yes');
217
+ }
218
+ else if (report.openCodePlugin.status === 'outdated' && report.openCodePlugin.configured) {
219
+ lines.push('Repair OpenCode plugin: borg update --yes');
220
+ }
221
+ else if (report.openCodePlugin.status === 'unreadable') {
222
+ lines.push(report.openCodePlugin.configured
223
+ ? `Fix or replace unreadable OpenCode plugin ${report.openCodePlugin.path}, then run: borg update --yes`
224
+ : `Fix or remove unreadable OpenCode plugin ${report.openCodePlugin.path}`);
225
+ }
226
+ else if (report.openCodePlugin.status === 'refused' && report.openCodePlugin.configured) {
227
+ lines.push(`Remove or replace the OpenCode plugin path ${report.openCodePlugin.path}, then run: borg update --yes`);
228
+ }
132
229
  return `${lines.join('\n')}\n`;
133
230
  }
134
231
  export function assertAgentIntegrationHealthy(report) {
@@ -173,6 +270,8 @@ export function refreshAndVerifyManagedAgentIntegrations() {
173
270
  failures.push(`${error instanceof Error ? error.message : String(error)}. ` +
174
271
  'Repair the named managed hook config, then rerun borg update --yes');
175
272
  }
273
+ if (isOpenCodeMcpServerConfigured())
274
+ installBorgPlugin();
176
275
  try {
177
276
  assertAgentIntegrationHealthy(inspectAgentIntegrationHealth());
178
277
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-integration-health.js","sourceRoot":"","sources":["../src/agent-integration-health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-integration-health.js","sourceRoot":"","sources":["../src/agent-integration-health.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,15 @@
1
1
  import type { DroneCandidate } from '../launch-all-discovery.js';
2
2
  import type { LaunchAllDeps } from '../launch-all-deps.js';
3
- export interface WindowsOpts {
3
+ export interface TerminalsOpts {
4
4
  borgPath: string;
5
5
  platform: NodeJS.Platform;
6
+ cubeName: string;
6
7
  launchedAtISO: string;
7
8
  /** Stagger between drone launches (ms) to avoid the rate limiter; 0 disables. */
8
9
  launchDelayMs: number;
9
10
  /** Injectable sleep (real setTimeout in prod; no-op spy in tests). */
10
11
  sleep: (ms: number) => Promise<void>;
11
12
  }
12
- export declare function runWindowsBackend(candidates: DroneCandidate[], opts: WindowsOpts, deps: LaunchAllDeps): Promise<void>;
13
- //# sourceMappingURL=launch-all-windows.d.ts.map
13
+ export declare function hasMacOSTerminalApp(deps: Pick<LaunchAllDeps, 'pathExists'>): boolean;
14
+ export declare function runTerminalsBackend(candidates: DroneCandidate[], opts: TerminalsOpts, deps: LaunchAllDeps): Promise<void>;
15
+ //# sourceMappingURL=launch-all-terminals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-all-terminals.d.ts","sourceRoot":"","sources":["../../src/backends/launch-all-terminals.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAa3D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AASD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,OAAO,CAEpF;AAoED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,cAAc,EAAE,EAC5B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -1,21 +1,32 @@
1
- // gh#556 Part 2 windows backend (explicit `--mode windows` only, spec §4.2).
1
+ // client#400terminals backend (`--mode terminals`; macOS auto default).
2
2
  // Opens each worktree as a new terminal window/tab. macOS: iTerm/Terminal via
3
3
  // osascript. Linux: $BORG_TERMINAL / $TERMINAL / probed emulator. No shared
4
4
  // session, so no post-launch attach. Hard-fails if no compatible terminal found.
5
5
  import { buildLaunchCommand } from '../launch-all-command.js';
6
6
  import { writeLockMarker } from '../launch-all-locks.js';
7
+ import { composeTerminalTitle } from '../terminal-title.js';
8
+ import { shellEscape } from '../shell-escape.js';
9
+ const ITERM_APP = '/Applications/iTerm.app';
10
+ const TERMINAL_APPS = [
11
+ '/System/Applications/Utilities/Terminal.app',
12
+ '/Applications/Utilities/Terminal.app',
13
+ '/Applications/Terminal.app',
14
+ ];
7
15
  /** AppleScript string-literal escaping (backslash + double-quote). */
8
16
  function appleScriptEscape(s) {
9
17
  return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
10
18
  }
11
19
  class NoTerminalError extends Error {
12
20
  }
21
+ export function hasMacOSTerminalApp(deps) {
22
+ return deps.pathExists(ITERM_APP) || TERMINAL_APPS.some((path) => deps.pathExists(path));
23
+ }
13
24
  /** macOS: open each candidate in iTerm or Terminal via osascript. */
14
25
  async function launchMacOS(candidates, opts, deps) {
15
- const hasITerm = deps.pathExists('/Applications/iTerm.app');
16
- const hasTerminal = deps.pathExists('/Applications/Terminal.app');
26
+ const hasITerm = deps.pathExists(ITERM_APP);
27
+ const hasTerminal = TERMINAL_APPS.some((path) => deps.pathExists(path));
17
28
  if (!hasITerm && !hasTerminal) {
18
- throw new NoTerminalError('borg launch-all: --mode windows requires a compatible terminal app.\n' +
29
+ throw new NoTerminalError('borg launch-all: --mode terminals requires a compatible terminal app.\n' +
19
30
  'Not found: iTerm.app, Terminal.app\n' +
20
31
  'Install iTerm2 (https://iterm2.com) or use --mode tmux (brew install tmux).\n');
21
32
  }
@@ -24,9 +35,10 @@ async function launchMacOS(candidates, opts, deps) {
24
35
  if (i > 0 && opts.launchDelayMs > 0)
25
36
  await opts.sleep(opts.launchDelayMs); // rate-limit stagger
26
37
  const cmd = buildLaunchCommand(c.worktreeDir, opts.borgPath);
38
+ const title = composeTerminalTitle({ label: c.droneLabel, cubeName: opts.cubeName }, '');
27
39
  const script = hasITerm
28
- ? `tell application "iTerm"\n tell current window to create tab with default profile command "${appleScriptEscape(cmd)}"\nend tell`
29
- : `tell application "Terminal"\n do script "${appleScriptEscape(cmd)}"\n activate\nend tell`;
40
+ ? `tell application "iTerm"\n if (count of windows) = 0 then\n set launchedWindow to (create window with default profile command "${appleScriptEscape(cmd)}")\n tell current session of launchedWindow to set name to "${appleScriptEscape(title)}"\n else\n tell current window\n set launchedTab to (create tab with default profile command "${appleScriptEscape(cmd)}")\n tell current session of launchedTab to set name to "${appleScriptEscape(title)}"\n end tell\n end if\nend tell`
41
+ : `tell application "Terminal"\n set launchedTab to do script "${appleScriptEscape(cmd)}"\n set custom title of launchedTab to "${appleScriptEscape(title)}"\n set title displays custom title of launchedTab to true\n activate\nend tell`;
30
42
  deps.runSync('osascript', ['-e', script]);
31
43
  writeLockMarker(deps, c.cubeId, c.droneLabel, c.worktreeDir, opts.launchedAtISO);
32
44
  }
@@ -45,14 +57,16 @@ async function launchLinux(candidates, opts, deps) {
45
57
  }
46
58
  }
47
59
  if (!term) {
48
- throw new NoTerminalError('borg launch-all: --mode windows requires a terminal emulator.\n' +
60
+ throw new NoTerminalError('borg launch-all: --mode terminals requires a terminal emulator.\n' +
49
61
  'Not found. Set $BORG_TERMINAL=<path> or use --mode tmux.\n');
50
62
  }
51
63
  for (let i = 0; i < candidates.length; i++) {
52
64
  const c = candidates[i];
53
65
  if (i > 0 && opts.launchDelayMs > 0)
54
66
  await opts.sleep(opts.launchDelayMs); // rate-limit stagger
55
- const cmd = buildLaunchCommand(c.worktreeDir, opts.borgPath, { keepOpenOnFail: true });
67
+ const title = composeTerminalTitle({ label: c.droneLabel, cubeName: opts.cubeName }, '');
68
+ const cmd = `printf '\\033]0;%s\\007' ${shellEscape(title)}; ` +
69
+ buildLaunchCommand(c.worktreeDir, opts.borgPath, { keepOpenOnFail: true });
56
70
  // `<term> -e sh -c '<cmd>'` opens a new window running the command.
57
71
  deps.runSync(term, ['-e', 'sh', '-c', cmd]);
58
72
  writeLockMarker(deps, c.cubeId, c.droneLabel, c.worktreeDir, opts.launchedAtISO);
@@ -64,14 +78,14 @@ async function launchLinux(candidates, opts, deps) {
64
78
  * string literal (parse error). Reject such paths up front (the user's own path;
65
79
  * pathological) — fail-loud + skip, never silently mangle. Applies to both
66
80
  * platforms defensively (the tmux primary handles control chars fine via
67
- * shellEscape + array-args, so this guard is windows-backend-specific).
81
+ * shellEscape + array-args, so this guard is terminals-backend-specific).
68
82
  */
69
83
  const CONTROL_CHAR_RE = /[\x00-\x1f\x7f]/;
70
- export async function runWindowsBackend(candidates, opts, deps) {
84
+ export async function runTerminalsBackend(candidates, opts, deps) {
71
85
  const safe = candidates.filter((c) => {
72
86
  if (CONTROL_CHAR_RE.test(c.worktreeDir)) {
73
87
  deps.stderr(`skipping ${c.droneLabel} (${JSON.stringify(c.worktreeDir)}): worktree path contains a control ` +
74
- `character — unsafe for --mode windows; use --mode tmux instead.\n`);
88
+ `character — unsafe for --mode terminals; use --mode tmux instead.\n`);
75
89
  return false;
76
90
  }
77
91
  return true;
@@ -83,4 +97,4 @@ export async function runWindowsBackend(candidates, opts, deps) {
83
97
  await launchLinux(safe, opts, deps);
84
98
  }
85
99
  }
86
- //# sourceMappingURL=launch-all-windows.js.map
100
+ //# sourceMappingURL=launch-all-terminals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-all-terminals.js","sourceRoot":"","sources":["../../src/backends/launch-all-terminals.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,4EAA4E;AAC5E,iFAAiF;AAIjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,SAAS,GAAG,yBAAyB,CAAC;AAC5C,MAAM,aAAa,GAAG;IACpB,6CAA6C;IAC7C,sCAAsC;IACtC,4BAA4B;CACpB,CAAC;AAaX,sEAAsE;AACtE,SAAS,iBAAiB,CAAC,CAAS;IAClC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,eAAgB,SAAQ,KAAK;CAAG;AAEtC,MAAM,UAAU,mBAAmB,CAAC,IAAuC;IACzE,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,qEAAqE;AACrE,KAAK,UAAU,WAAW,CAAC,UAA4B,EAAE,IAAmB,EAAE,IAAmB;IAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,IAAI,eAAe,CACvB,yEAAyE;YACvE,sCAAsC;YACtC,+EAA+E,CAClF,CAAC;IACJ,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,qBAAqB;QAChG,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,sIAAsI,iBAAiB,CAAC,GAAG,CAAC,kEAAkE,iBAAiB,CAAC,KAAK,CAAC,0GAA0G,iBAAiB,CAAC,GAAG,CAAC,iEAAiE,iBAAiB,CAAC,KAAK,CAAC,qCAAqC;YACtf,CAAC,CAAC,gEAAgE,iBAAiB,CAAC,GAAG,CAAC,4CAA4C,iBAAiB,CAAC,KAAK,CAAC,mFAAmF,CAAC;QAClP,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1C,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,WAAW,CAAC,UAA4B,EAAE,IAAmB,EAAE,IAAmB;IAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACzE,IAAI,IAAI,GAAuB,QAAQ,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,eAAe,CACvB,mEAAmE;YACjE,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,qBAAqB;QAChG,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACzF,MAAM,GAAG,GACP,4BAA4B,WAAW,CAAC,KAAK,CAAC,IAAI;YAClD,kBAAkB,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,oEAAoE;QACpE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5C,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAA4B,EAC5B,IAAmB,EACnB,IAAmB;IAEnB,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CACT,YAAY,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,sCAAsC;gBAC9F,qEAAqE,CACxE,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
@@ -1,29 +1,38 @@
1
1
  /**
2
2
  * gh#853 — bare `borg` (no-args) interactive launch menu.
3
3
  *
4
- * When `borg` is run with NO arguments in a TTY, offer a small launch selector
5
- * instead of launching immediately:
6
- * 1. Launch (default) — the configured agent (Enter selects).
7
- * 2. Launch with <other> instead — the OTHER configured agent, ONE-SHOT
8
- * (does NOT persist the preference).
9
- * 3. Launch all — runLaunchAll for the active cube.
4
+ * When `borg` is run with NO arguments in a TTY outside an active seat, offer
5
+ * a small launch selector. In a repository with live sibling drones, those
6
+ * drones come first; otherwise the existing agent choices remain unchanged.
10
7
  *
11
8
  * The option-set, the selection→action mapping, and the show/collapse decision
12
9
  * are pure functions so they're unit-testable without a real TTY. claude.ts
13
- * main() is thin glue: it computes the inputs (default cli, other-configured cli,
14
- * launch-all targets), gates on shouldShowLaunchMenu, runs the orchestrator with
15
- * the real readline prompt, then dispatches the returned action.
10
+ * main() is thin glue: it computes the available candidates and agent choices,
11
+ * gates on shouldShowLaunchMenu, runs the orchestrator with the real readline
12
+ * prompt, then dispatches the returned action.
16
13
  *
17
- * Load-bearing safety: TTY-only + bare-args-only (shouldShowLaunchMenu) so every
18
- * scripted/programmatic `borg` and every explicit subcommand/flag is untouched.
14
+ * Load-bearing safety: TTY-only + bare-args-only + no-active-seat
15
+ * (shouldShowLaunchMenu), so scripted/programmatic invocations and direct
16
+ * worktree resumes are untouched.
19
17
  */
20
- import type { BorgCli } from './cubes.js';
18
+ import type { ActiveCube, BorgCli } from './cubes.js';
19
+ import type { DroneCandidate } from './launch-all-discovery.js';
20
+ import type { SeatStatus } from './seat-probe.js';
21
21
  export type LaunchMenuAction = {
22
22
  kind: 'launch';
23
23
  cli: BorgCli;
24
+ } | {
25
+ kind: 'launch-seat';
26
+ target: string;
24
27
  } | {
25
28
  kind: 'launch-all';
29
+ cubeId?: string;
26
30
  };
31
+ export interface LaunchMenuDroneCandidate {
32
+ droneLabel: string;
33
+ target: string;
34
+ worktree: string;
35
+ }
27
36
  export interface LaunchMenuOption {
28
37
  /** The keystroke that selects this option (sequential: '1', '2', …). */
29
38
  key: string;
@@ -35,9 +44,35 @@ export interface LaunchMenuInputs {
35
44
  defaultCli: BorgCli;
36
45
  /** All configured agents that are NOT the default, in display order. */
37
46
  otherConfiguredClis: BorgCli[];
38
- /** True iff there's an active cube with >=1 discoverable drone (option 3). */
47
+ /** True iff the current menu context has launch-all targets. */
39
48
  hasLaunchAllTargets: boolean;
49
+ /** Live sibling drones offered before the unattached launch choices. */
50
+ droneCandidates?: LaunchMenuDroneCandidate[];
51
+ /** Cube selected by the sibling-drone context for its launch-all action. */
52
+ launchAllCubeId?: string;
53
+ }
54
+ interface LaunchMenuCandidateDeps {
55
+ readAllProjectIdentities: () => Promise<Array<{
56
+ projectPath: string;
57
+ cube: ActiveCube;
58
+ }>>;
59
+ discoverDroneCandidates: (cubeId: string) => Promise<DroneCandidate[]>;
60
+ getActiveSeatForWorktree: (worktree: string) => Promise<{
61
+ cubeId: string;
62
+ droneId?: string;
63
+ } | null>;
64
+ pathExists: (worktree: string) => boolean;
65
+ probeSeat: (candidate: DroneCandidate) => Promise<SeatStatus>;
40
66
  }
67
+ /**
68
+ * Find linked sibling worktrees that still own their preferred active seat.
69
+ * Authoritative terminal probe results are omitted; transient/unknown probe
70
+ * results stay visible, matching launch-all's constructive fail-open behavior.
71
+ */
72
+ export declare function discoverLiveLaunchMenuCandidates(deps: LaunchMenuCandidateDeps): Promise<{
73
+ candidates: LaunchMenuDroneCandidate[];
74
+ launchAllCubeId?: string;
75
+ }>;
41
76
  /**
42
77
  * Resolve and configure the CLI that will actually launch.
43
78
  *
@@ -47,14 +82,15 @@ export interface LaunchMenuInputs {
47
82
  */
48
83
  export declare function configureSelectedLaunchCli(defaultCli: BorgCli, action: LaunchMenuAction | undefined, configure: (cli: BorgCli) => void): BorgCli;
49
84
  /**
50
- * Gate: the menu fires ONLY for bare `borg` (no args) in a TTY. Any explicit
51
- * subcommand/flag, or a non-TTY (piped/scripted/CI) invocation, falls straight
52
- * through to the existing default launch — no menu, no behavior change.
85
+ * Gate: the menu fires ONLY for bare `borg` (no args) in a TTY without an
86
+ * active seat. Explicit invocations, non-TTY launches, and direct worktree
87
+ * resumes fall straight through to the existing launch path.
53
88
  */
54
89
  export declare function shouldShowLaunchMenu(args: {
55
90
  extraArgs: string[];
56
91
  stdinIsTTY: boolean;
57
92
  stdoutIsTTY: boolean;
93
+ hasActiveSeat?: boolean;
58
94
  }): boolean;
59
95
  export declare function explicitCliLaunchHint(args: {
60
96
  explicitCli: BorgCli | undefined;
@@ -94,4 +130,5 @@ export declare function runBareLaunchMenu(inputs: LaunchMenuInputs, prompt: (mes
94
130
  maxAttempts?: number;
95
131
  warn?: (message: string) => void;
96
132
  }): Promise<LaunchMenuAction>;
133
+ export {};
97
134
  //# sourceMappingURL=bare-launch-menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bare-launch-menu.d.ts","sourceRoot":"","sources":["../src/bare-launch-menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAE3B,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,mBAAmB,EAAE,OAAO,EAAE,CAAC;IAC/B,8EAA8E;IAC9E,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAChC,OAAO,CAIT;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAEV;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,GAAG,MAAM,GAAG,IAAI,CAIhB;AAED,wBAAgB,yCAAyC,CAAC,IAAI,EAAE;IAC9D,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAEV;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAuBnF;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAKxD;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAGpE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAC5C,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACpE,OAAO,CAAC,gBAAgB,CAAC,CAa3B"}
1
+ {"version":3,"file":"bare-launch-menu.d.ts","sourceRoot":"","sources":["../src/bare-launch-menu.ts"],"names":[],"mappings":"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"}