teamshare-bridge 0.2.0 → 0.2.2
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/README.md +42 -13
- package/dist/bridge/daemon.js +56 -17
- package/dist/bridge/daemon.js.map +1 -1
- package/dist/bridge/spawn.d.ts +12 -0
- package/dist/bridge/spawn.js +11 -5
- package/dist/bridge/spawn.js.map +1 -1
- package/dist/cli/args.d.ts +8 -0
- package/dist/cli/args.js +38 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/commands/build.d.ts +1 -0
- package/dist/cli/commands/build.js +385 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +1 -0
- package/dist/cli/commands/chat.js +113 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/connect.d.ts +1 -0
- package/dist/cli/commands/connect.js +23 -0
- package/dist/cli/commands/connect.js.map +1 -0
- package/dist/cli/commands/doc.d.ts +1 -0
- package/dist/cli/commands/doc.js +109 -0
- package/dist/cli/commands/doc.js.map +1 -0
- package/dist/cli/commands/harness.d.ts +10 -0
- package/dist/cli/commands/harness.js +93 -0
- package/dist/cli/commands/harness.js.map +1 -0
- package/dist/cli/commands/key.d.ts +2 -0
- package/dist/cli/commands/key.js +126 -0
- package/dist/cli/commands/key.js.map +1 -0
- package/dist/cli/commands/link.d.ts +2 -0
- package/dist/cli/commands/link.js +93 -0
- package/dist/cli/commands/link.js.map +1 -0
- package/dist/cli/commands/run.d.ts +1 -0
- package/dist/cli/commands/run.js +219 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/shared.d.ts +6 -0
- package/dist/cli/commands/shared.js +51 -0
- package/dist/cli/commands/shared.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +1 -0
- package/dist/cli/commands/skills.js +29 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/usage.d.ts +1 -0
- package/dist/cli/commands/usage.js +78 -0
- package/dist/cli/commands/usage.js.map +1 -0
- package/dist/cli/index.js +49 -1500
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils.d.ts +38 -0
- package/dist/cli/utils.js +139 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/lib/api.d.ts +15 -2
- package/dist/lib/api.js +8 -4
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/brief.js +19 -3
- package/dist/lib/brief.js.map +1 -1
- package/dist/lib/config.d.ts +3 -1
- package/dist/lib/config.js +4 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/harness.d.ts +1 -1
- package/dist/lib/harness.js +3 -2
- package/dist/lib/harness.js.map +1 -1
- package/dist/lib/llm.js +8 -7
- package/dist/lib/llm.js.map +1 -1
- package/dist/lib/models.d.ts +6 -0
- package/dist/lib/models.js +25 -0
- package/dist/lib/models.js.map +1 -1
- package/dist/lib/orchestrator/client.d.ts +38 -4
- package/dist/lib/orchestrator/client.js +390 -22
- package/dist/lib/orchestrator/client.js.map +1 -1
- package/dist/lib/orchestrator/index.d.ts +1 -1
- package/dist/lib/orchestrator/index.js +5 -1
- package/dist/lib/orchestrator/index.js.map +1 -1
- package/dist/lib/orchestrator/worktree.d.ts +52 -0
- package/dist/lib/orchestrator/worktree.js +250 -6
- package/dist/lib/orchestrator/worktree.js.map +1 -1
- package/dist/lib/skills.d.ts +2 -2
- package/dist/lib/skills.js +2 -1
- package/dist/lib/skills.js.map +1 -1
- package/package.json +1 -1
- package/skills/teamshare-auth-rbac/SKILL.md +1 -1
- package/skills/teamshare-orchestrator-ask/SKILL.md +63 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cmdDoc = cmdDoc;
|
|
37
|
+
/**
|
|
38
|
+
* `doc` command: document assistant — reply to comments mentioning the agent.
|
|
39
|
+
*/
|
|
40
|
+
const api_1 = require("../../lib/api");
|
|
41
|
+
const doc_reply_1 = require("../../lib/doc-reply");
|
|
42
|
+
const lock_1 = require("../../lib/lock");
|
|
43
|
+
const session_stream_1 = require("../../lib/session-stream");
|
|
44
|
+
const brief_1 = require("../../lib/brief");
|
|
45
|
+
const utils_1 = require("../utils");
|
|
46
|
+
const shared_1 = require("./shared");
|
|
47
|
+
const WS_DEFAULT = process.env.TEAMSHARE_WS_URL ?? 'wss://teamshare-backend.onrender.com';
|
|
48
|
+
async function cmdDoc(flags) {
|
|
49
|
+
const documentId = (0, utils_1.need)(flags, 'document');
|
|
50
|
+
const agentId = (0, utils_1.need)(flags, 'agent');
|
|
51
|
+
const apiKey = (0, utils_1.need)(flags, 'key');
|
|
52
|
+
const mention = flags.get('mention') ?? '';
|
|
53
|
+
const selfMode = flags.get('self') === 'true';
|
|
54
|
+
let exitCode = 0;
|
|
55
|
+
const sessionId = flags.get('session') ?? (0, session_stream_1.newSessionId)();
|
|
56
|
+
const stream = new session_stream_1.SessionStream({ sessionId, agentId, mode: 'chat' });
|
|
57
|
+
stream.connect(WS_DEFAULT.replace(/\/$/, '') + '/agents', apiKey);
|
|
58
|
+
const log = (0, utils_1.makeLog)(stream);
|
|
59
|
+
const api = new api_1.TeamshareApi(process.env.TEAMSHARE_API_URL, apiKey);
|
|
60
|
+
const doc = await api.getDocument(documentId).catch(() => null);
|
|
61
|
+
const cwd = (0, shared_1.resolveWorkingDir)(flags, doc?.projectId ?? null, log);
|
|
62
|
+
if (!cwd)
|
|
63
|
+
return;
|
|
64
|
+
const settings = await (0, utils_1.fetchAgentSettings)(api, agentId, log);
|
|
65
|
+
const harness = (0, utils_1.harnessOf)(flags, settings);
|
|
66
|
+
(0, utils_1.applyOpenCodeKey)(agentId, log, settings);
|
|
67
|
+
const lock = await (0, lock_1.acquireLock)(agentId, 'doc', { documentId }, {
|
|
68
|
+
onWaiting: (busy) => log(`[lock] agent ${agentId} is busy (pid ${busy.pid}, since ${busy.startedAt}, ${busy.kind}) - waiting for it to finish...`),
|
|
69
|
+
});
|
|
70
|
+
if (!lock) {
|
|
71
|
+
console.error(`[lock] gave up waiting for agent ${agentId} - try again later`);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
await (0, brief_1.reportStatus)(api, agentId, 'working', undefined, sessionId);
|
|
76
|
+
log(`[teamshare-agent] document assistant (document ${documentId}${mention ? `, mention @${mention}` : 'all mentions'}) in ${cwd}`);
|
|
77
|
+
const heartbeatTimer = setInterval(() => {
|
|
78
|
+
void (0, brief_1.reportStatus)(api, agentId, 'working', undefined, sessionId);
|
|
79
|
+
}, 60_000);
|
|
80
|
+
try {
|
|
81
|
+
const result = await (0, doc_reply_1.runDocReply)(api, agentId, documentId, mention, {
|
|
82
|
+
harness, selfMode, echo: process.env.TS_CHAT_ECHO === '1', api,
|
|
83
|
+
llm: {
|
|
84
|
+
baseUrl: (0, utils_1.llmEndpoint)(flags, settings).baseUrl,
|
|
85
|
+
apiKey: (0, utils_1.sessionLlmApiKey)(settings),
|
|
86
|
+
model: (0, utils_1.llmEndpoint)(flags, settings).model,
|
|
87
|
+
temperature: (0, utils_1.temperatureOf)(flags, settings),
|
|
88
|
+
maxTokens: (0, utils_1.maxTokensOf)(flags, settings),
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
log(`[done] replied to ${result.replied} mention${result.replied === 1 ? '' : 's'}` +
|
|
92
|
+
(result.skipped ? ` (${result.skipped} skipped)` : ''));
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
clearInterval(heartbeatTimer);
|
|
96
|
+
await (0, brief_1.reportStatus)(api, agentId, 'online', undefined, sessionId);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const { msg } = await Promise.resolve().then(() => __importStar(require('../../lib/config')));
|
|
101
|
+
log(`[error] ${msg(err)}`, 'stderr');
|
|
102
|
+
exitCode = 1;
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
(0, lock_1.releaseLock)(agentId);
|
|
106
|
+
await stream.end(exitCode);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=doc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc.js","sourceRoot":"","sources":["../../../src/cli/commands/doc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LogFn } from '../utils';
|
|
2
|
+
export declare function spawnHarness(harness: 'auto' | 'opencode' | 'claude' | 'none', prompt: string, log: LogFn, settings?: {
|
|
3
|
+
model?: string;
|
|
4
|
+
temperature?: number;
|
|
5
|
+
cwd?: string;
|
|
6
|
+
timeoutMin?: number;
|
|
7
|
+
title?: string;
|
|
8
|
+
agentKey?: string;
|
|
9
|
+
apiBaseUrl?: string;
|
|
10
|
+
}): Promise<number>;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.spawnHarness = spawnHarness;
|
|
4
|
+
/**
|
|
5
|
+
* Spawn harness (opencode/claude) with piped stdio for live console.
|
|
6
|
+
*/
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const config_1 = require("../../lib/config");
|
|
9
|
+
const harness_1 = require("../../lib/harness");
|
|
10
|
+
function hasBin(bin) {
|
|
11
|
+
const { spawnSync } = require('node:child_process');
|
|
12
|
+
const res = spawnSync(bin, ['--version'], { stdio: 'ignore', shell: process.platform === 'win32' });
|
|
13
|
+
return res.status === 0;
|
|
14
|
+
}
|
|
15
|
+
function spawnHarness(harness, prompt, log, settings = {}) {
|
|
16
|
+
if (harness === 'none') {
|
|
17
|
+
log('[harness] none - brief printed above; work it manually.');
|
|
18
|
+
return Promise.resolve(0);
|
|
19
|
+
}
|
|
20
|
+
let chosen = harness;
|
|
21
|
+
if (chosen === 'auto') {
|
|
22
|
+
if (hasBin('opencode'))
|
|
23
|
+
chosen = 'opencode';
|
|
24
|
+
else if (hasBin('claude'))
|
|
25
|
+
chosen = 'claude';
|
|
26
|
+
else {
|
|
27
|
+
log('[harness] neither opencode nor claude found - brief printed above.');
|
|
28
|
+
return Promise.resolve(0);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
log(`[harness] launching ${chosen}...`);
|
|
32
|
+
const cmd = chosen === 'opencode' ? 'opencode' : 'claude';
|
|
33
|
+
const args = [];
|
|
34
|
+
if (chosen === 'opencode') {
|
|
35
|
+
args.push('run', '--auto');
|
|
36
|
+
if (settings.model && settings.model.includes('/')) {
|
|
37
|
+
args.push('--model', settings.model);
|
|
38
|
+
}
|
|
39
|
+
if (settings.title)
|
|
40
|
+
args.push('--title', settings.title);
|
|
41
|
+
args.push(prompt);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
args.push('-p', prompt);
|
|
45
|
+
}
|
|
46
|
+
const env = chosen === 'claude' && settings.model
|
|
47
|
+
? { ...process.env, ANTHROPIC_MODEL: settings.model }
|
|
48
|
+
: undefined;
|
|
49
|
+
let mcpOverride = null;
|
|
50
|
+
if (chosen === 'opencode' && settings.agentKey) {
|
|
51
|
+
mcpOverride = (0, harness_1.writeOpencodeMcpConfig)(settings.agentKey, settings.apiBaseUrl ?? process.env.TEAMSHARE_API_URL ?? 'https://teamshare-backend.onrender.com');
|
|
52
|
+
}
|
|
53
|
+
const quote = (a) => /[\s"]/.test(a) ? `"${a.replace(/"/g, '\\"')}"` : a;
|
|
54
|
+
const command = [cmd, ...args.map(quote)].join(' ');
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
const child = (0, node_child_process_1.spawn)(command, {
|
|
57
|
+
shell: true,
|
|
58
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
59
|
+
env: mcpOverride
|
|
60
|
+
? { ...(env ?? process.env), OPENCODE_CONFIG: mcpOverride.file }
|
|
61
|
+
: env,
|
|
62
|
+
cwd: settings.cwd,
|
|
63
|
+
});
|
|
64
|
+
const timeoutMs = Math.max(1, settings.timeoutMin ?? 60) * 60_000;
|
|
65
|
+
const killTimer = setTimeout(() => {
|
|
66
|
+
log(`[harness] ${cmd} killed after ${settings.timeoutMin ?? 60} min (session timeout cap)`, 'stderr');
|
|
67
|
+
child.kill();
|
|
68
|
+
resolve(124);
|
|
69
|
+
}, timeoutMs);
|
|
70
|
+
const tee = (chunk, level) => {
|
|
71
|
+
for (const line of chunk.toString('utf8').split(/\r?\n/)) {
|
|
72
|
+
if (line.trim())
|
|
73
|
+
log(line, level);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
child.stdout?.on('data', (c) => tee(c, 'stdout'));
|
|
77
|
+
child.stderr?.on('data', (c) => tee(c, 'stderr'));
|
|
78
|
+
child.on('error', (err) => {
|
|
79
|
+
clearTimeout(killTimer);
|
|
80
|
+
mcpOverride?.cleanup();
|
|
81
|
+
log(`[harness] ${cmd} failed to start: ${(0, config_1.msg)(err)}`, 'stderr');
|
|
82
|
+
resolve(1);
|
|
83
|
+
});
|
|
84
|
+
child.on('close', (code) => {
|
|
85
|
+
clearTimeout(killTimer);
|
|
86
|
+
mcpOverride?.cleanup();
|
|
87
|
+
if (code !== 0)
|
|
88
|
+
log(`[harness] ${cmd} exited with code ${code ?? 'error'}`, 'stderr');
|
|
89
|
+
resolve(code ?? 1);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../src/cli/commands/harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cmdKey = cmdKey;
|
|
37
|
+
exports.cmdMcp = cmdMcp;
|
|
38
|
+
/**
|
|
39
|
+
* `key` and `mcp` commands: manage LLM provider keys and MCP wiring.
|
|
40
|
+
*/
|
|
41
|
+
const config_1 = require("../../lib/config");
|
|
42
|
+
async function cmdKey(flags, action) {
|
|
43
|
+
const agentId = flags.get('agent');
|
|
44
|
+
const chatFlag = flags.get('chat') === 'true';
|
|
45
|
+
const action2 = action ?? 'show';
|
|
46
|
+
if (action2 === 'set') {
|
|
47
|
+
const key = flags.get('key') ?? flags.get('set');
|
|
48
|
+
if (!key) {
|
|
49
|
+
console.error('key set requires --key <providerApiKey> [--agent <agentId>] [--chat]');
|
|
50
|
+
process.exitCode = 2;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
if (chatFlag) {
|
|
55
|
+
(0, config_1.setChatKey)(key);
|
|
56
|
+
console.log(`[key] stored chat model key (${key.slice(0, 8)}...)`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
(0, config_1.setOpenCodeKey)(key, agentId ?? undefined);
|
|
60
|
+
console.log(agentId
|
|
61
|
+
? `[key] stored agent-specific LLM key for agent ${agentId} (${key.slice(0, 8)}...)`
|
|
62
|
+
: `[key] stored global agent LLM key (${key.slice(0, 8)}...)`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const { msg } = await Promise.resolve().then(() => __importStar(require('../../lib/config')));
|
|
67
|
+
console.error(`[key] ${msg(err)}`);
|
|
68
|
+
process.exitCode = 1;
|
|
69
|
+
}
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (action2 === 'clear') {
|
|
73
|
+
if (chatFlag) {
|
|
74
|
+
(0, config_1.setChatKey)(null);
|
|
75
|
+
console.log('[key] cleared the chat model key');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
(0, config_1.setOpenCodeKey)(null, agentId ?? undefined);
|
|
79
|
+
console.log(agentId
|
|
80
|
+
? `[key] cleared agent-specific LLM key for ${agentId}`
|
|
81
|
+
: '[key] cleared the global agent LLM key');
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const config = (0, config_1.loadConfig)();
|
|
86
|
+
const global = config.opencodeKey;
|
|
87
|
+
console.log('LLM provider keys for agent harness runs:');
|
|
88
|
+
console.log(global ? ` global : set (${global.slice(0, 8)}...)` : ' global : not set');
|
|
89
|
+
console.log(process.env.OPENCODE_API_KEY ? ' env : OPENCODE_API_KEY set' : ' env : not set');
|
|
90
|
+
for (const agent of config.agents) {
|
|
91
|
+
console.log(agent.opencodeKey
|
|
92
|
+
? ` ${agent.agentId} : agent-specific (${agent.opencodeKey.slice(0, 8)}...)`
|
|
93
|
+
: ` ${agent.agentId} : using global/default`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function cmdMcp(flags, action) {
|
|
97
|
+
const action2 = action ?? 'status';
|
|
98
|
+
const config = (0, config_1.loadConfig)();
|
|
99
|
+
const apiKey = flags.get('key') ?? config.agents[0]?.apiKey ?? '';
|
|
100
|
+
if (action2 === 'wire') {
|
|
101
|
+
if (!apiKey) {
|
|
102
|
+
console.error('mcp wire requires --key <agentApiKey> or a configured agent');
|
|
103
|
+
process.exitCode = 2;
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const wired = (0, config_1.wireOpencodeMcp)(apiKey);
|
|
107
|
+
console.log(wired
|
|
108
|
+
? '[mcp] wired TeamShare MCP into opencode.jsonc — agent now has 21 tools'
|
|
109
|
+
: '[mcp] TeamShare MCP already wired — skipping');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (action2 === 'unwire') {
|
|
113
|
+
const removed = (0, config_1.unwireOpencodeMcp)();
|
|
114
|
+
console.log(removed
|
|
115
|
+
? '[mcp] removed TeamShare MCP from opencode.jsonc'
|
|
116
|
+
: '[mcp] TeamShare MCP not found in opencode.jsonc — nothing to remove');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const status = (0, config_1.mcpStatus)();
|
|
120
|
+
console.log('TeamShare MCP in opencode:');
|
|
121
|
+
console.log(status.configPath ? ` config : ${status.configPath}` : ' config : opencode.jsonc not found');
|
|
122
|
+
console.log(status.wired
|
|
123
|
+
? ' status: WIRED — agent has 21 TeamShare tools'
|
|
124
|
+
: ' status: NOT WIRED — agent has no TeamShare tools in opencode sessions');
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../../src/cli/commands/key.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdLink = cmdLink;
|
|
4
|
+
exports.cmdUnlink = cmdUnlink;
|
|
5
|
+
/**
|
|
6
|
+
* `link` / `unlink` commands: project guard — bind a project to a local folder.
|
|
7
|
+
*/
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const config_1 = require("../../lib/config");
|
|
10
|
+
const worktree_1 = require("../../lib/orchestrator/worktree");
|
|
11
|
+
const utils_1 = require("../utils");
|
|
12
|
+
async function cmdLink(flags) {
|
|
13
|
+
if (flags.get('list') === 'true') {
|
|
14
|
+
const entries = Object.entries((0, config_1.loadConfig)().projects);
|
|
15
|
+
if (entries.length === 0) {
|
|
16
|
+
console.log('No projects linked yet - run: teamshare-agent link --project <id> --path <folder>');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
for (const [projectId, link] of entries) {
|
|
20
|
+
console.log(`${projectId} -> ${link.path}${link.guard === false ? ' (guard off)' : ''}`);
|
|
21
|
+
}
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const projectId = (0, utils_1.need)(flags, 'project');
|
|
25
|
+
const path = (0, utils_1.need)(flags, 'path');
|
|
26
|
+
const result = (0, config_1.linkProject)(projectId, path, flags.get('guard') !== 'false');
|
|
27
|
+
if (!result.ok) {
|
|
28
|
+
console.error(`Could not link project ${projectId}:`);
|
|
29
|
+
console.error(' ' + result.reason);
|
|
30
|
+
process.exitCode = 1;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
console.log(`Linked project ${projectId} -> ${result.canonical}`);
|
|
34
|
+
console.log('The agent now works inside this folder for that project (guard on).');
|
|
35
|
+
const canonical = result.canonical;
|
|
36
|
+
const isRepo = (0, worktree_1.isGitRepo)(canonical);
|
|
37
|
+
if (isRepo) {
|
|
38
|
+
const originUrl = (0, worktree_1.gitRemoteUrl)(canonical, 'origin');
|
|
39
|
+
if (originUrl) {
|
|
40
|
+
console.log(`Git repo detected - remote origin: ${originUrl}`);
|
|
41
|
+
console.log('Orchestrator branches will be pushed to this remote when tasks complete.');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log('Git repo detected, but no "origin" remote is configured.');
|
|
45
|
+
console.log(' Add one with: git remote add origin <url>');
|
|
46
|
+
console.log(' Or re-run: teamshare-agent link --project <id> --path <folder> --origin <url>');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const origin = flags.get('origin');
|
|
51
|
+
console.log('No git repository found in this folder.');
|
|
52
|
+
if (origin) {
|
|
53
|
+
console.log('Initializing git repository and adding the origin remote...');
|
|
54
|
+
const init = (0, worktree_1.gitInit)(canonical, 'origin', origin);
|
|
55
|
+
if (!init.success) {
|
|
56
|
+
console.error(' ' + (init.error ?? 'git init failed'));
|
|
57
|
+
process.exitCode = 1;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
(0, node_child_process_1.execSync)('git add -A', { cwd: canonical, encoding: 'utf-8', timeout: 30_000 });
|
|
62
|
+
(0, node_child_process_1.execSync)('git commit -m "Initial commit (TeamShare)"', {
|
|
63
|
+
cwd: canonical,
|
|
64
|
+
encoding: 'utf-8',
|
|
65
|
+
timeout: 30_000,
|
|
66
|
+
});
|
|
67
|
+
console.log('Initial commit created on branch main.');
|
|
68
|
+
console.log(`Origin set to: ${origin}`);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
72
|
+
console.error(` Could not create the initial commit: ${message}`);
|
|
73
|
+
console.log(' Run `git add -A && git commit -m "Initial commit"` manually, then re-run link.');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(' Pass --origin <url> to initialize git and set the remote automatically:');
|
|
78
|
+
console.log(` teamshare-agent link --project ${projectId} --path <folder> --origin https://github.com/you/repo.git`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function cmdUnlink(flags) {
|
|
83
|
+
const projectId = (0, utils_1.need)(flags, 'project');
|
|
84
|
+
const config = (0, config_1.unlinkProject)(projectId);
|
|
85
|
+
const gone = !config.projects[projectId];
|
|
86
|
+
if (gone)
|
|
87
|
+
console.log(`Unlinked project ${projectId} - its sessions are now blocked by the guard.`);
|
|
88
|
+
else {
|
|
89
|
+
console.error(`Project ${projectId} was not linked.`);
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/cli/commands/link.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cmdRun(flags: Map<string, string>): Promise<void>;
|