teamshare-bridge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +343 -0
  2. package/dist/bridge/daemon.d.ts +1 -0
  3. package/dist/bridge/daemon.js +230 -0
  4. package/dist/bridge/daemon.js.map +1 -0
  5. package/dist/bridge/index.d.ts +2 -0
  6. package/dist/bridge/index.js +273 -0
  7. package/dist/bridge/index.js.map +1 -0
  8. package/dist/bridge/local-server.d.ts +29 -0
  9. package/dist/bridge/local-server.js +87 -0
  10. package/dist/bridge/local-server.js.map +1 -0
  11. package/dist/bridge/protocol.d.ts +4 -0
  12. package/dist/bridge/protocol.js +151 -0
  13. package/dist/bridge/protocol.js.map +1 -0
  14. package/dist/bridge/service.d.ts +32 -0
  15. package/dist/bridge/service.js +248 -0
  16. package/dist/bridge/service.js.map +1 -0
  17. package/dist/bridge/spawn.d.ts +15 -0
  18. package/dist/bridge/spawn.js +271 -0
  19. package/dist/bridge/spawn.js.map +1 -0
  20. package/dist/cli/index.d.ts +2 -0
  21. package/dist/cli/index.js +543 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/lib/api.d.ts +191 -0
  24. package/dist/lib/api.js +209 -0
  25. package/dist/lib/api.js.map +1 -0
  26. package/dist/lib/brief.d.ts +16 -0
  27. package/dist/lib/brief.js +115 -0
  28. package/dist/lib/brief.js.map +1 -0
  29. package/dist/lib/chat-reply.d.ts +29 -0
  30. package/dist/lib/chat-reply.js +126 -0
  31. package/dist/lib/chat-reply.js.map +1 -0
  32. package/dist/lib/config.d.ts +25 -0
  33. package/dist/lib/config.js +81 -0
  34. package/dist/lib/config.js.map +1 -0
  35. package/dist/lib/doc-reply.d.ts +22 -0
  36. package/dist/lib/doc-reply.js +108 -0
  37. package/dist/lib/doc-reply.js.map +1 -0
  38. package/dist/lib/llm.d.ts +50 -0
  39. package/dist/lib/llm.js +444 -0
  40. package/dist/lib/llm.js.map +1 -0
  41. package/dist/lib/lock.d.ts +41 -0
  42. package/dist/lib/lock.js +148 -0
  43. package/dist/lib/lock.js.map +1 -0
  44. package/dist/lib/models.d.ts +30 -0
  45. package/dist/lib/models.js +51 -0
  46. package/dist/lib/models.js.map +1 -0
  47. package/dist/lib/partial-stream.d.ts +25 -0
  48. package/dist/lib/partial-stream.js +99 -0
  49. package/dist/lib/partial-stream.js.map +1 -0
  50. package/dist/lib/session-stream.d.ts +38 -0
  51. package/dist/lib/session-stream.js +191 -0
  52. package/dist/lib/session-stream.js.map +1 -0
  53. package/package.json +44 -0
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDaemon = exports.AUTOSTART_TASK_NAME = exports.LOG_PATH = void 0;
4
+ exports.runningPid = runningPid;
5
+ exports.startDaemon = startDaemon;
6
+ exports.stopDaemon = stopDaemon;
7
+ exports.restartDaemon = restartDaemon;
8
+ exports.setAutostart = setAutostart;
9
+ exports.autostartStatus = autostartStatus;
10
+ /**
11
+ * Daemon lifecycle service: detached start/stop/restart (pid file at
12
+ * ~/.teamshare/daemon.pid) + autostart registration per platform.
13
+ *
14
+ * Autostart runs the daemon at USER LOGIN (Windows Task Scheduler onlogon,
15
+ * macOS LaunchAgent RunAtLoad, Linux systemd user unit) - the daemon needs
16
+ * the user session so it can read ~/.teamshare/config.json and keep the
17
+ * user's agent keys local.
18
+ */
19
+ const node_child_process_1 = require("node:child_process");
20
+ const node_fs_1 = require("node:fs");
21
+ const node_os_1 = require("node:os");
22
+ const node_path_1 = require("node:path");
23
+ const daemon_1 = require("./daemon");
24
+ Object.defineProperty(exports, "runDaemon", { enumerable: true, get: function () { return daemon_1.runDaemon; } });
25
+ const STATE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare');
26
+ const PID_PATH = (0, node_path_1.join)(STATE_DIR, 'daemon.pid');
27
+ exports.LOG_PATH = (0, node_path_1.join)(STATE_DIR, 'daemon.log');
28
+ exports.AUTOSTART_TASK_NAME = 'TeamShareBridge';
29
+ function pidAlive(pid) {
30
+ if (!Number.isInteger(pid) || pid <= 0)
31
+ return false;
32
+ try {
33
+ process.kill(pid, 0);
34
+ return true;
35
+ }
36
+ catch (err) {
37
+ return err.code === 'EPERM';
38
+ }
39
+ }
40
+ /** Reads the pid file and returns the live daemon pid, or null. */
41
+ function runningPid() {
42
+ try {
43
+ const raw = (0, node_fs_1.readFileSync)(PID_PATH, 'utf8').trim();
44
+ const pid = Number(raw);
45
+ return pidAlive(pid) ? pid : null;
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ /**
52
+ * `start`: spawns the daemon detached (stdio -> ~/.teamshare/daemon.log) and
53
+ * records the pid. `daemon` stays the foreground alias for debugging.
54
+ */
55
+ function startDaemon(port) {
56
+ const existing = runningPid();
57
+ if (existing !== null) {
58
+ return { started: false, pid: existing, message: `daemon already running (pid ${existing})` };
59
+ }
60
+ const args = [(0, node_path_1.join)(__dirname, 'index.js'), 'daemon'];
61
+ if (port)
62
+ args.push('--port', String(port));
63
+ (0, node_fs_1.mkdirSync)(STATE_DIR, { recursive: true });
64
+ const out = (0, node_fs_1.openSync)(exports.LOG_PATH, 'a');
65
+ try {
66
+ const child = (0, node_child_process_1.spawn)(process.execPath, args, {
67
+ detached: true,
68
+ stdio: ['ignore', out, out],
69
+ windowsHide: true,
70
+ });
71
+ child.on('error', (err) => {
72
+ try {
73
+ (0, node_fs_1.rmSync)(PID_PATH);
74
+ }
75
+ catch {
76
+ /* best-effort */
77
+ }
78
+ // eslint-disable-next-line no-console
79
+ console.error(`[daemon] failed to start: ${err.message}`);
80
+ });
81
+ child.unref();
82
+ (0, node_fs_1.writeFileSync)(PID_PATH, String(child.pid), 'utf8');
83
+ return { started: true, pid: child.pid, message: `daemon started (pid ${child.pid}) - logs: ${exports.LOG_PATH}` };
84
+ }
85
+ catch (err) {
86
+ return {
87
+ started: false,
88
+ message: `failed to start daemon: ${err instanceof Error ? err.message : String(err)}`,
89
+ };
90
+ }
91
+ }
92
+ /** `stop`: terminates the live daemon and clears the pid file. */
93
+ function stopDaemon() {
94
+ const pid = runningPid();
95
+ if (pid === null) {
96
+ try {
97
+ (0, node_fs_1.rmSync)(PID_PATH);
98
+ }
99
+ catch {
100
+ /* already gone */
101
+ }
102
+ return { stopped: false, message: 'daemon is not running' };
103
+ }
104
+ try {
105
+ process.kill(pid);
106
+ }
107
+ catch {
108
+ /* best-effort */
109
+ }
110
+ const deadline = Date.now() + 5000;
111
+ while (pidAlive(pid) && Date.now() < deadline) {
112
+ /* wait briefly for the daemon to exit */
113
+ }
114
+ if (pidAlive(pid)) {
115
+ // Windows fallback: force kill via taskkill.
116
+ (0, node_child_process_1.spawnSync)('taskkill', ['/pid', String(pid), '/f'], { stdio: 'ignore' });
117
+ }
118
+ try {
119
+ (0, node_fs_1.rmSync)(PID_PATH);
120
+ }
121
+ catch {
122
+ /* already gone */
123
+ }
124
+ return { stopped: true, message: `daemon stopped (pid ${pid})` };
125
+ }
126
+ /** `restart`: stop + start. */
127
+ function restartDaemon(port) {
128
+ stopDaemon();
129
+ const result = startDaemon(port);
130
+ return { message: result.message };
131
+ }
132
+ // ------------------------------------------------------------- autostart
133
+ /** Registers (on) or removes (off) the login autostart for this platform. */
134
+ function setAutostart(enabled) {
135
+ if (process.platform === 'win32') {
136
+ // Preferred: a logon scheduled task (needs elevation). Fallback: the
137
+ // per-user Startup folder with a hidden .vbs launcher (no admin).
138
+ const vbsPath = (0, node_path_1.join)((0, node_os_1.homedir)(), 'AppData', 'Roaming', 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup', 'teamshare-bridge.vbs');
139
+ if (enabled) {
140
+ const taskCommand = `"${process.execPath}" "${(0, node_path_1.join)(__dirname, 'index.js')}" daemon`;
141
+ const res = (0, node_child_process_1.spawnSync)('schtasks.exe', ['/create', '/tn', exports.AUTOSTART_TASK_NAME, '/tr', taskCommand, '/sc', 'onlogon', '/f'], { stdio: 'pipe', encoding: 'utf8' });
142
+ if (res.status === 0) {
143
+ return {
144
+ ok: true,
145
+ message: `autostart enabled (task ${exports.AUTOSTART_TASK_NAME}, runs at logon)`,
146
+ };
147
+ }
148
+ // No admin rights - use the Startup folder (.vbs runs the daemon hidden).
149
+ const vbs = [
150
+ "Set sh = CreateObject(\"WScript.Shell\")",
151
+ `sh.Run "${taskCommand.replace(/"/g, '""')}", 0, False`,
152
+ ].join('\r\n');
153
+ (0, node_fs_1.writeFileSync)(vbsPath, vbs, 'utf8');
154
+ return {
155
+ ok: true,
156
+ message: 'autostart enabled (Startup folder launcher - schtasks needs admin, using the no-admin fallback)',
157
+ };
158
+ }
159
+ try {
160
+ (0, node_fs_1.rmSync)(vbsPath);
161
+ }
162
+ catch {
163
+ /* not present */
164
+ }
165
+ const res = (0, node_child_process_1.spawnSync)('schtasks.exe', ['/delete', '/tn', exports.AUTOSTART_TASK_NAME, '/f'], { stdio: 'pipe', encoding: 'utf8' });
166
+ return {
167
+ ok: true,
168
+ message: res.status === 0 ? `autostart disabled (task ${exports.AUTOSTART_TASK_NAME} removed)` : 'autostart disabled (Startup launcher removed)',
169
+ };
170
+ }
171
+ if (process.platform === 'darwin') {
172
+ const plistPath = (0, node_path_1.join)((0, node_os_1.homedir)(), 'Library', 'LaunchAgents', 'com.teamshare.bridge.plist');
173
+ if (enabled) {
174
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)((0, node_os_1.homedir)(), 'Library', 'LaunchAgents'), { recursive: true });
175
+ (0, node_fs_1.writeFileSync)(plistPath, `<?xml version="1.0" encoding="UTF-8"?>
176
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
177
+ <plist version="1.0">
178
+ <dict>
179
+ <key>Label</key><string>com.teamshare.bridge</string>
180
+ <key>ProgramArguments</key>
181
+ <array>
182
+ <string>${process.execPath}</string>
183
+ <string>${(0, node_path_1.join)(__dirname, 'index.js')}</string>
184
+ <string>daemon</string>
185
+ </array>
186
+ <key>RunAtLoad</key><true/>
187
+ <key>KeepAlive</key><true/>
188
+ <key>StandardOutPath</key><string>${exports.LOG_PATH}</string>
189
+ <key>StandardErrorPath</key><string>${exports.LOG_PATH}</string>
190
+ </dict>
191
+ </plist>
192
+ `, 'utf8');
193
+ (0, node_child_process_1.execFileSync)('launchctl', ['load', '-w', plistPath], { stdio: 'ignore' });
194
+ return { ok: true, message: 'autostart enabled (LaunchAgent com.teamshare.bridge)' };
195
+ }
196
+ if ((0, node_fs_1.existsSync)(plistPath)) {
197
+ try {
198
+ (0, node_child_process_1.execFileSync)('launchctl', ['unload', plistPath], { stdio: 'ignore' });
199
+ }
200
+ catch {
201
+ /* not loaded */
202
+ }
203
+ (0, node_fs_1.rmSync)(plistPath);
204
+ }
205
+ return { ok: true, message: 'autostart disabled (LaunchAgent removed)' };
206
+ }
207
+ // Linux: systemd user unit.
208
+ const unitPath = (0, node_path_1.join)((0, node_os_1.homedir)(), '.config', 'systemd', 'user', 'teamshare-bridge.service');
209
+ if (enabled) {
210
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)((0, node_os_1.homedir)(), '.config', 'systemd', 'user'), { recursive: true });
211
+ (0, node_fs_1.writeFileSync)(unitPath, `[Unit]
212
+ Description=TeamShare Bridge daemon
213
+
214
+ [Service]
215
+ ExecStart=${process.execPath} ${(0, node_path_1.join)(__dirname, 'index.js')} daemon
216
+ Restart=on-failure
217
+ StandardOutput=append:${exports.LOG_PATH}
218
+ StandardError=append:${exports.LOG_PATH}
219
+
220
+ [Install]
221
+ WantedBy=default.target
222
+ `, 'utf8');
223
+ (0, node_child_process_1.execFileSync)('systemctl', ['--user', 'daemon-reload'], { stdio: 'ignore' });
224
+ (0, node_child_process_1.execFileSync)('systemctl', ['--user', 'enable', 'teamshare-bridge.service'], { stdio: 'ignore' });
225
+ return { ok: true, message: 'autostart enabled (systemd user unit)' };
226
+ }
227
+ if ((0, node_fs_1.existsSync)(unitPath)) {
228
+ (0, node_child_process_1.execFileSync)('systemctl', ['--user', 'disable', 'teamshare-bridge.service'], { stdio: 'ignore' });
229
+ (0, node_fs_1.rmSync)(unitPath);
230
+ }
231
+ return { ok: true, message: 'autostart disabled (systemd user unit removed)' };
232
+ }
233
+ /** Whether autostart is registered for this platform. */
234
+ function autostartStatus() {
235
+ if (process.platform === 'win32') {
236
+ const res = (0, node_child_process_1.spawnSync)('schtasks.exe', ['/query', '/tn', exports.AUTOSTART_TASK_NAME], {
237
+ stdio: 'ignore',
238
+ });
239
+ if (res.status === 0)
240
+ return true;
241
+ return (0, node_fs_1.existsSync)((0, node_path_1.join)((0, node_os_1.homedir)(), 'AppData', 'Roaming', 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup', 'teamshare-bridge.vbs'));
242
+ }
243
+ if (process.platform === 'darwin') {
244
+ return (0, node_fs_1.existsSync)((0, node_path_1.join)((0, node_os_1.homedir)(), 'Library', 'LaunchAgents', 'com.teamshare.bridge.plist'));
245
+ }
246
+ return (0, node_fs_1.existsSync)((0, node_path_1.join)((0, node_os_1.homedir)(), '.config', 'systemd', 'user', 'teamshare-bridge.service'));
247
+ }
248
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/bridge/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Session output capture + diagnostics live here. */
2
+ export declare const SESSIONS_DIR: string;
3
+ /** Phase D session settings (from the redeem response / join ack). */
4
+ export interface SessionSettings {
5
+ model?: string | null;
6
+ temperature?: number | null;
7
+ maxTokens?: number | null;
8
+ systemPrompt?: string | null;
9
+ }
10
+ /** Task session: `teamshare-agent run --task <id> ...`. */
11
+ export declare function spawnAgentSession(agentId: string, apiKey: string, taskId: string, settings?: SessionSettings | null, sessionId?: string): void;
12
+ /** Chat-reply session: `teamshare-agent chat --project <id> --mention <token> ...`. */
13
+ export declare function spawnChatSession(agentId: string, apiKey: string, projectId: string, mentionToken: string, settings?: SessionSettings | null, sessionId?: string): void;
14
+ /** Document-assistant session (Phase F): `teamshare-agent doc --document <id> ...`. */
15
+ export declare function spawnDocumentSession(agentId: string, apiKey: string, documentId: string, mentionToken: string, settings?: SessionSettings | null, sessionId?: string): void;
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SESSIONS_DIR = void 0;
4
+ exports.spawnAgentSession = spawnAgentSession;
5
+ exports.spawnChatSession = spawnChatSession;
6
+ exports.spawnDocumentSession = spawnDocumentSession;
7
+ /**
8
+ * Spawns `teamshare-agent` sessions in a fresh terminal window, detached
9
+ * from the daemon. Shared by the daemon (auto-wake) and the protocol handler
10
+ * (teamshare:// deep link). Each spawn carries a fresh session id so the
11
+ * CLI can stream its output to the live console (Phase A, IMP-510), and the
12
+ * agent's model settings (Phase D, IMP-520) are translated into CLI flags
13
+ * (flag > settings > env precedence is applied inside the CLI).
14
+ */
15
+ const node_child_process_1 = require("node:child_process");
16
+ const node_fs_1 = require("node:fs");
17
+ const node_os_1 = require("node:os");
18
+ const node_path_1 = require("node:path");
19
+ const node_os_2 = require("node:os");
20
+ const session_stream_1 = require("../lib/session-stream");
21
+ /** Session output capture + diagnostics live here. */
22
+ exports.SESSIONS_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare', 'sessions');
23
+ /** True when `bin` is on PATH (used to pick a real terminal emulator). */
24
+ function hasBin(bin) {
25
+ try {
26
+ return (0, node_child_process_1.spawnSync)('which', [bin], { stdio: 'ignore' }).status === 0;
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ function cliPath() {
33
+ return (0, node_path_1.join)(__dirname, '..', 'cli', 'index.js');
34
+ }
35
+ function apiKeyFlag(apiKey) {
36
+ return apiKey.includes(' ') ? `--key "${apiKey}"` : `--key ${apiKey}`;
37
+ }
38
+ /** argv-safe equivalent of apiKeyFlag (headless fallback). */
39
+ function apiKeyArgs(apiKey) {
40
+ return ['--key', apiKey];
41
+ }
42
+ /** argv-safe equivalent of settingsFlags (headless fallback). */
43
+ function settingsArgs(settings) {
44
+ if (!settings)
45
+ return [];
46
+ const parts = [];
47
+ if (settings.model)
48
+ parts.push('--model', settings.model);
49
+ if (settings.temperature !== undefined && settings.temperature !== null) {
50
+ parts.push('--temperature', String(settings.temperature));
51
+ }
52
+ if (settings.maxTokens !== undefined && settings.maxTokens !== null) {
53
+ parts.push('--max-tokens', String(settings.maxTokens));
54
+ }
55
+ if (settings.systemPrompt) {
56
+ try {
57
+ const path = (0, node_path_1.join)((0, node_os_2.tmpdir)(), `teamshare-agent-prompt-${(0, session_stream_1.newSessionId)()}.txt`);
58
+ (0, node_fs_1.writeFileSync)(path, settings.systemPrompt, 'utf8');
59
+ parts.push('--system-prompt-file', path);
60
+ }
61
+ catch {
62
+ /* best-effort */
63
+ }
64
+ }
65
+ return parts;
66
+ }
67
+ /** Translates agent settings into CLI flags; systemPrompt goes to a temp file. */
68
+ function settingsFlags(settings) {
69
+ if (!settings)
70
+ return '';
71
+ const parts = [];
72
+ if (settings.model)
73
+ parts.push(`--model ${settings.model}`);
74
+ if (settings.temperature !== undefined && settings.temperature !== null) {
75
+ parts.push(`--temperature ${settings.temperature}`);
76
+ }
77
+ if (settings.maxTokens !== undefined && settings.maxTokens !== null) {
78
+ parts.push(`--max-tokens ${settings.maxTokens}`);
79
+ }
80
+ if (settings.systemPrompt) {
81
+ try {
82
+ const path = (0, node_path_1.join)((0, node_os_2.tmpdir)(), `teamshare-agent-prompt-${(0, session_stream_1.newSessionId)()}.txt`);
83
+ (0, node_fs_1.writeFileSync)(path, settings.systemPrompt, 'utf8');
84
+ parts.push(`--system-prompt-file "${path}"`);
85
+ }
86
+ catch {
87
+ /* best-effort */
88
+ }
89
+ }
90
+ return parts.length ? ` ${parts.join(' ')}` : '';
91
+ }
92
+ /**
93
+ * Opens a detached terminal running `command` (per-platform). `argv` is the
94
+ * parsed CLI invocation used by the headless fallback (SSH / no display /
95
+ * no terminal emulator) - it keeps the session running even without a window.
96
+ */
97
+ function openTerminal(command, argv, capturePath) {
98
+ // Ops visibility: surface the exact spawned command in the daemon log.
99
+ try {
100
+ (0, node_fs_1.appendFileSync)((0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare', 'daemon.log'), `[${new Date().toISOString()}] [spawn] ${command}\n`);
101
+ }
102
+ catch {
103
+ /* best-effort */
104
+ }
105
+ if (process.platform === 'win32') {
106
+ // `start "" cmd /k` opens a detached terminal that stays open after the
107
+ // session ends. `windowsVerbatimArguments` is deliberate: without it
108
+ // Node re-quotes the command and `start`'s title/redirect parsing breaks.
109
+ // When a capture path is given the window's output is teed into it too.
110
+ try {
111
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare', 'sessions'), { recursive: true });
112
+ }
113
+ catch {
114
+ /* redirect target best-effort - the window still opens */
115
+ }
116
+ const redirect = capturePath ? ` > "${capturePath}" 2>&1` : '';
117
+ const child = (0, node_child_process_1.spawn)('cmd.exe', ['/c', 'start', '', 'cmd', '/k', `${command}${redirect}`], {
118
+ detached: true,
119
+ stdio: 'ignore',
120
+ windowsHide: false,
121
+ windowsVerbatimArguments: true,
122
+ });
123
+ child.unref();
124
+ return;
125
+ }
126
+ // macOS: Terminal.app is always present - drive it via osascript so the
127
+ // session gets a real, visible terminal window.
128
+ if (process.platform === 'darwin') {
129
+ const escaped = command.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
130
+ const script = `tell application "Terminal"\n` +
131
+ ` activate\n` +
132
+ ` do script "${escaped}; echo; echo 'Session finished - close this window when done'"\n` +
133
+ `end tell`;
134
+ const child = (0, node_child_process_1.spawn)('osascript', ['-e', script], { detached: true, stdio: 'ignore' });
135
+ child.on('error', () => openHeadless(argv, capturePath));
136
+ child.unref();
137
+ return;
138
+ }
139
+ // Linux: try the desktop-agnostic launcher first, then the common
140
+ // emulators. Each is checked synchronously so a missing binary never
141
+ // silently swallows the spawn (which the old chain did).
142
+ const terminals = [
143
+ { bin: 'xdg-terminal-exec', wrap: (c) => ['bash', '-c', c] },
144
+ { bin: 'gnome-terminal', wrap: (c) => ['--', 'bash', '-c', `${c}; exec bash`] },
145
+ { bin: 'konsole', wrap: (c) => ['-e', 'bash', '-c', `${c}; exec bash`] },
146
+ { bin: 'xterm', wrap: (c) => ['-e', `bash -c "${c.replace(/"/g, '\\"')}; echo Press-Enter; read"`] },
147
+ ];
148
+ for (const t of terminals) {
149
+ if (!hasBin(t.bin))
150
+ continue;
151
+ const child = (0, node_child_process_1.spawn)(t.bin, t.wrap(command), { detached: true, stdio: 'ignore' });
152
+ child.on('error', () => openHeadless(argv, capturePath));
153
+ child.unref();
154
+ return;
155
+ }
156
+ // No terminal emulator (SSH session, minimal server, etc.) - run headless.
157
+ openHeadless(argv, capturePath);
158
+ }
159
+ /** Detached background process - no visible window, output to the log. */
160
+ function openHeadless(argv, capturePath) {
161
+ let child;
162
+ if (capturePath) {
163
+ try {
164
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare', 'sessions'), { recursive: true });
165
+ const fd = (0, node_fs_1.openSync)(capturePath, 'a');
166
+ child = (0, node_child_process_1.spawn)(process.execPath, argv, {
167
+ detached: true,
168
+ stdio: ['ignore', fd, fd],
169
+ });
170
+ }
171
+ catch {
172
+ child = (0, node_child_process_1.spawn)(process.execPath, argv, { detached: true, stdio: 'ignore' });
173
+ }
174
+ }
175
+ else {
176
+ child = (0, node_child_process_1.spawn)(process.execPath, argv, { detached: true, stdio: 'ignore' });
177
+ }
178
+ child.on('error', () => {
179
+ /* best-effort */
180
+ });
181
+ child.unref();
182
+ }
183
+ /**
184
+ * Opens a terminal with a readable message when the CLI binary is missing
185
+ * (stale checkout without `npm run build`) - instead of a flash-close that
186
+ * shows nothing.
187
+ */
188
+ function openErrorTerminal(message) {
189
+ const quoted = message.replace(/"/g, '\\"');
190
+ const argv = ['-c', `echo ${quoted} & echo. & pause`];
191
+ openTerminal(`echo ${quoted} & echo. & pause`, argv);
192
+ }
193
+ /** Guard: the CLI must exist before we spawn a session pointing at it. */
194
+ function assertCliBuilt(cli) {
195
+ if ((0, node_fs_1.existsSync)(cli))
196
+ return true;
197
+ openErrorTerminal(`TeamShare bridge is not built: missing ${cli}. ` +
198
+ `Run "npm run build" inside the teamshare-bridge folder, then "npm i -g .".`);
199
+ return false;
200
+ }
201
+ /** Task session: `teamshare-agent run --task <id> ...`. */
202
+ function spawnAgentSession(agentId, apiKey, taskId, settings, sessionId) {
203
+ const cli = cliPath();
204
+ if (!assertCliBuilt(cli))
205
+ return;
206
+ const sid = sessionId ?? (0, session_stream_1.newSessionId)();
207
+ const capture = (0, node_path_1.join)(exports.SESSIONS_DIR, `spawn-${sid}.log`);
208
+ const command = `node "${cli}" run --task ${taskId} --agent ${agentId} ${apiKeyFlag(apiKey)} --session ${sid}${settingsFlags(settings)}`;
209
+ const argv = [
210
+ cli,
211
+ 'run',
212
+ '--task',
213
+ taskId,
214
+ '--agent',
215
+ agentId,
216
+ ...apiKeyArgs(apiKey),
217
+ '--session',
218
+ sid,
219
+ ...settingsArgs(settings),
220
+ ];
221
+ openTerminal(command, argv, capture);
222
+ }
223
+ /** Chat-reply session: `teamshare-agent chat --project <id> --mention <token> ...`. */
224
+ function spawnChatSession(agentId, apiKey, projectId, mentionToken, settings, sessionId) {
225
+ const cli = cliPath();
226
+ if (!assertCliBuilt(cli))
227
+ return;
228
+ const sid = sessionId ?? (0, session_stream_1.newSessionId)();
229
+ const capture = (0, node_path_1.join)(exports.SESSIONS_DIR, `spawn-${sid}.log`);
230
+ const mention = mentionToken ? `--mention ${mentionToken}` : '';
231
+ const command = `node "${cli}" chat --project ${projectId} ${mention} --agent ${agentId} ${apiKeyFlag(apiKey)} --session ${sid}${settingsFlags(settings)}`;
232
+ const argv = [
233
+ cli,
234
+ 'chat',
235
+ '--project',
236
+ projectId,
237
+ ...(mentionToken ? ['--mention', mentionToken] : []),
238
+ '--agent',
239
+ agentId,
240
+ ...apiKeyArgs(apiKey),
241
+ '--session',
242
+ sid,
243
+ ...settingsArgs(settings),
244
+ ];
245
+ openTerminal(command, argv, capture);
246
+ }
247
+ /** Document-assistant session (Phase F): `teamshare-agent doc --document <id> ...`. */
248
+ function spawnDocumentSession(agentId, apiKey, documentId, mentionToken, settings, sessionId) {
249
+ const cli = cliPath();
250
+ if (!assertCliBuilt(cli))
251
+ return;
252
+ const sid = sessionId ?? (0, session_stream_1.newSessionId)();
253
+ const capture = (0, node_path_1.join)(exports.SESSIONS_DIR, `spawn-${sid}.log`);
254
+ const mention = mentionToken ? `--mention ${mentionToken}` : '';
255
+ const command = `node "${cli}" doc --document ${documentId} ${mention} --agent ${agentId} ${apiKeyFlag(apiKey)} --session ${sid}${settingsFlags(settings)}`;
256
+ const argv = [
257
+ cli,
258
+ 'doc',
259
+ '--document',
260
+ documentId,
261
+ ...(mentionToken ? ['--mention', mentionToken] : []),
262
+ '--agent',
263
+ agentId,
264
+ ...apiKeyArgs(apiKey),
265
+ '--session',
266
+ sid,
267
+ ...settingsArgs(settings),
268
+ ];
269
+ openTerminal(command, argv, capture);
270
+ }
271
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/bridge/spawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};