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,385 @@
|
|
|
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.cmdBuild = cmdBuild;
|
|
37
|
+
/**
|
|
38
|
+
* `build` command: BUILD MODE — work the project's ready-for-dev queue.
|
|
39
|
+
*/
|
|
40
|
+
const node_path_1 = require("node:path");
|
|
41
|
+
const node_fs_1 = require("node:fs");
|
|
42
|
+
const node_os_1 = require("node:os");
|
|
43
|
+
const api_1 = require("../../lib/api");
|
|
44
|
+
const brief_1 = require("../../lib/brief");
|
|
45
|
+
const llm_1 = require("../../lib/llm");
|
|
46
|
+
const lock_1 = require("../../lib/lock");
|
|
47
|
+
const session_stream_1 = require("../../lib/session-stream");
|
|
48
|
+
const utils_1 = require("../utils");
|
|
49
|
+
const harness_1 = require("./harness");
|
|
50
|
+
const shared_1 = require("./shared");
|
|
51
|
+
const config_1 = require("../../lib/config");
|
|
52
|
+
const WS_DEFAULT = process.env.TEAMSHARE_WS_URL ?? 'wss://teamshare-backend.onrender.com';
|
|
53
|
+
const AGENT_QUESTIONS_CHANNEL = 'agent-questions';
|
|
54
|
+
const BUILD_STATE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare', 'builds');
|
|
55
|
+
const STOP_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare', 'stops');
|
|
56
|
+
const SIGNAL_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare', 'signals');
|
|
57
|
+
const DONE_STATUSES = new Set(['in_review', 'resolved', 'closed']);
|
|
58
|
+
function loadBuildState(agentId, projectId) {
|
|
59
|
+
try {
|
|
60
|
+
const parsed = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(BUILD_STATE_DIR, `${agentId}.${projectId}.json`), 'utf8'));
|
|
61
|
+
return { projectId, skipped: Array.isArray(parsed.skipped) ? parsed.skipped : [], done: Number.isFinite(parsed.done) ? parsed.done : 0, updatedAt: parsed.updatedAt ?? new Date().toISOString() };
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return { projectId, skipped: [], done: 0, updatedAt: new Date().toISOString() };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function saveBuildState(agentId, projectId, state) {
|
|
68
|
+
try {
|
|
69
|
+
(0, node_fs_1.mkdirSync)(BUILD_STATE_DIR, { recursive: true });
|
|
70
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(BUILD_STATE_DIR, `${agentId}.${projectId}.json`), JSON.stringify({ ...state, updatedAt: new Date().toISOString() }, null, 2));
|
|
71
|
+
}
|
|
72
|
+
catch { }
|
|
73
|
+
}
|
|
74
|
+
function clearBuildState(agentId, projectId) {
|
|
75
|
+
try {
|
|
76
|
+
(0, node_fs_1.rmSync)((0, node_path_1.join)(BUILD_STATE_DIR, `${agentId}.${projectId}.json`));
|
|
77
|
+
}
|
|
78
|
+
catch { }
|
|
79
|
+
}
|
|
80
|
+
/** Check and consume a question-answered signal file (written by the daemon). */
|
|
81
|
+
function consumeQuestionSignal(agentId, projectId) {
|
|
82
|
+
try {
|
|
83
|
+
const sigPath = (0, node_path_1.join)(SIGNAL_DIR, `${agentId}.${projectId}.question`);
|
|
84
|
+
if ((0, node_fs_1.existsSync)(sigPath)) {
|
|
85
|
+
(0, node_fs_1.rmSync)(sigPath);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch { }
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
function hasStopFile(agentId) { return (0, node_fs_1.existsSync)((0, node_path_1.join)(STOP_DIR, `${agentId}.stop`)); }
|
|
93
|
+
function clearStopFile(agentId) { try {
|
|
94
|
+
(0, node_fs_1.rmSync)((0, node_path_1.join)(STOP_DIR, `${agentId}.stop`), { force: true });
|
|
95
|
+
}
|
|
96
|
+
catch { } }
|
|
97
|
+
async function cmdBuild(flags) {
|
|
98
|
+
const agentId = (0, utils_1.need)(flags, 'agent');
|
|
99
|
+
const apiKey = (0, utils_1.need)(flags, 'key');
|
|
100
|
+
const projectId = (0, utils_1.need)(flags, 'project');
|
|
101
|
+
const api = new api_1.TeamshareApi(process.env.TEAMSHARE_API_URL, apiKey);
|
|
102
|
+
const log = (0, utils_1.makeLog)(null);
|
|
103
|
+
const settings = await (0, utils_1.fetchAgentSettings)(api, agentId, log);
|
|
104
|
+
const harness = (0, utils_1.harnessOf)(flags, settings);
|
|
105
|
+
let selfMode = flags.get('self') === 'true';
|
|
106
|
+
const modelSpec = (0, utils_1.modelOf)(flags, settings);
|
|
107
|
+
const modelResolved = (await Promise.resolve().then(() => __importStar(require('../../lib/models')))).resolveModel(modelSpec, process.env.LLM_BASE_URL);
|
|
108
|
+
if (modelResolved.harnessOnly && selfMode) {
|
|
109
|
+
log(`[model] "${modelSpec}" is harness-native - switching from --self to harness mode`);
|
|
110
|
+
selfMode = false;
|
|
111
|
+
}
|
|
112
|
+
if (flags.get('dry-run') === 'true') {
|
|
113
|
+
await cmdBuildDryRun(api, projectId, log);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const draftGoal = flags.get('draft');
|
|
117
|
+
if (draftGoal && draftGoal !== 'true') {
|
|
118
|
+
log(`[draft] planning the build queue for: ${draftGoal}`);
|
|
119
|
+
const reply = await draftBuildPlan({ api, agentId, projectId, settings, flags, log });
|
|
120
|
+
if (!reply) {
|
|
121
|
+
console.error('[draft] planning failed');
|
|
122
|
+
process.exitCode = 1;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (flags.get('go') !== 'true') {
|
|
126
|
+
console.log('\nPlan created - run with --go to execute.');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const stream = new session_stream_1.SessionStream({ sessionId: flags.get('session') ?? (0, session_stream_1.newSessionId)(), agentId, mode: 'build', projectId });
|
|
131
|
+
const cwd = (0, shared_1.resolveWorkingDir)(flags, projectId, log);
|
|
132
|
+
if (!cwd) {
|
|
133
|
+
process.exitCode = 1;
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const lock = await (0, lock_1.acquireLock)(agentId, 'build', { projectId }, {
|
|
137
|
+
onWaiting: (busy) => log(`[lock] agent ${agentId} is busy - waiting...`),
|
|
138
|
+
});
|
|
139
|
+
if (!lock) {
|
|
140
|
+
console.error(`[lock] gave up waiting for agent ${agentId}`);
|
|
141
|
+
process.exitCode = 1;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
let exitCode = 0;
|
|
145
|
+
const sessionId = stream.sessionId;
|
|
146
|
+
stream.connect(WS_DEFAULT.replace(/\/$/, '') + '/agents', apiKey);
|
|
147
|
+
const ctx = { api, agentId, projectId, cwd, selfMode, harness, settings, flags, stream, sessionId, log };
|
|
148
|
+
try {
|
|
149
|
+
(0, utils_1.applyOpenCodeKey)(agentId, log, settings);
|
|
150
|
+
exitCode = await runBuildLoop(ctx);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
log(`[build] fatal: ${(0, config_1.msg)(err)}`, 'stderr');
|
|
154
|
+
exitCode = 1;
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
clearStopFile(agentId);
|
|
158
|
+
(0, lock_1.releaseLock)(agentId);
|
|
159
|
+
await stream.end(exitCode);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async function cmdBuildDryRun(api, projectId, log) {
|
|
163
|
+
const queue = await api.getBuildQueue(projectId);
|
|
164
|
+
console.log(`Build queue for ${queue.project.name}`);
|
|
165
|
+
console.log(`build agent: ${queue.buildAgent ? queue.buildAgent.name : '(none)'}`);
|
|
166
|
+
if (queue.pending.length === 0)
|
|
167
|
+
console.log('pending: none');
|
|
168
|
+
else {
|
|
169
|
+
console.log(`pending (${queue.pending.length}):`);
|
|
170
|
+
for (const item of queue.pending)
|
|
171
|
+
console.log(` #${item.position} ${item.task.title}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async function draftBuildPlan(ctx) {
|
|
175
|
+
const { api, agentId, projectId, settings, flags, log } = ctx;
|
|
176
|
+
const llmApiKey = (0, utils_1.sessionLlmApiKey)(settings);
|
|
177
|
+
if (!llmApiKey) {
|
|
178
|
+
log('--draft requires a provider API key', 'stderr');
|
|
179
|
+
return '';
|
|
180
|
+
}
|
|
181
|
+
const endpoint = (0, utils_1.llmEndpoint)(flags, settings);
|
|
182
|
+
log(`[draft] model ${endpoint.model}`);
|
|
183
|
+
const project = await api.getProject(projectId).catch(() => null);
|
|
184
|
+
const prompt = `Plan the work for this goal and create the build queue:\n\n"${flags.get('draft') ?? ''}"\n\nBreak into concrete tasks. For each: create_task with readyForDev: true, increasing sortOrder, assigneeId "me".`;
|
|
185
|
+
return (0, llm_1.runProjectSession)(api, projectId, prompt, {
|
|
186
|
+
baseUrl: endpoint.baseUrl, apiKey: llmApiKey, model: endpoint.model,
|
|
187
|
+
agentName: agentId, systemPrompt: `You are the build planner for ${project ? `"${project.name}"` : projectId}.`, temperature: 0.2, agentUserId: settings.userId ?? undefined,
|
|
188
|
+
}, project?.name);
|
|
189
|
+
}
|
|
190
|
+
async function runBuildLoop(ctx) {
|
|
191
|
+
const { api, agentId, projectId, cwd, selfMode, harness, settings, flags, stream, sessionId, log } = ctx;
|
|
192
|
+
const once = flags.get('once') === 'true';
|
|
193
|
+
const onFail = flags.get('on-fail') ?? 'ask';
|
|
194
|
+
let state = loadBuildState(agentId, projectId);
|
|
195
|
+
const queue = await api.getBuildQueue(projectId);
|
|
196
|
+
if (state.skipped.length === 0 && queue.blocked.length > 0) {
|
|
197
|
+
state.skipped = queue.blocked.map((b) => ({ taskId: b.task.id, title: b.task.title, askedAt: b.question.askedAt }));
|
|
198
|
+
saveBuildState(agentId, projectId, state);
|
|
199
|
+
}
|
|
200
|
+
log(`[build] queue: ${queue.pending.length} pending, ${queue.blocked.length} blocked, ${state.done} done`);
|
|
201
|
+
let currentTaskId;
|
|
202
|
+
const heartbeatTimer = setInterval(() => { void (0, brief_1.reportStatus)(api, agentId, 'working', currentTaskId, sessionId); }, 60_000);
|
|
203
|
+
try {
|
|
204
|
+
for (;;) {
|
|
205
|
+
if (hasStopFile(agentId)) {
|
|
206
|
+
clearStopFile(agentId);
|
|
207
|
+
log('[build] stop requested');
|
|
208
|
+
return 0;
|
|
209
|
+
}
|
|
210
|
+
const q = await api.getBuildQueue(projectId);
|
|
211
|
+
const next = q.pending[0];
|
|
212
|
+
if (next) {
|
|
213
|
+
currentTaskId = next.task.id;
|
|
214
|
+
log(`[build] task ${next.task.title}`);
|
|
215
|
+
const outcome = await workBuildTask(ctx, next.task, q.flows?.[next.task.id]?.model, q.flows?.[next.task.id]?.worktreePath);
|
|
216
|
+
if (outcome === 'done') {
|
|
217
|
+
state.done += 1;
|
|
218
|
+
saveBuildState(agentId, projectId, state);
|
|
219
|
+
if (once)
|
|
220
|
+
return 0;
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (onFail === 'stop')
|
|
224
|
+
return 0;
|
|
225
|
+
if (!state.skipped.some((s) => s.taskId === next.task.id)) {
|
|
226
|
+
state.skipped.push({ taskId: next.task.id, title: next.task.title, askedAt: new Date().toISOString() });
|
|
227
|
+
}
|
|
228
|
+
saveBuildState(agentId, projectId, state);
|
|
229
|
+
await askBuildQuestion(api, projectId, next.task, log);
|
|
230
|
+
if (once)
|
|
231
|
+
return 0;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
let resumed = null;
|
|
235
|
+
for (const s of state.skipped) {
|
|
236
|
+
const qState = await api.getTaskQuestions(s.taskId).catch(() => ({ open: null }));
|
|
237
|
+
if (!qState.open) {
|
|
238
|
+
resumed = { taskId: s.taskId, title: s.title };
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (resumed) {
|
|
243
|
+
currentTaskId = resumed.taskId;
|
|
244
|
+
const task = await api.getTask(resumed.taskId).catch(() => null);
|
|
245
|
+
if (task) {
|
|
246
|
+
const outcome = await workBuildTask(ctx, task, q.flows?.[resumed.taskId]?.model, q.flows?.[resumed.taskId]?.worktreePath);
|
|
247
|
+
if (outcome === 'done') {
|
|
248
|
+
state.skipped = state.skipped.filter((s) => s.taskId !== resumed.taskId);
|
|
249
|
+
state.done += 1;
|
|
250
|
+
saveBuildState(agentId, projectId, state);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (once)
|
|
254
|
+
return 0;
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (state.skipped.length > 0) {
|
|
258
|
+
const deadline = Date.now() + 30 * 60_000;
|
|
259
|
+
log(`[build] ${state.skipped.length} task(s) blocked - waiting up to 30 min`);
|
|
260
|
+
let apiPollAt = 0;
|
|
261
|
+
while (Date.now() < deadline) {
|
|
262
|
+
if (hasStopFile(agentId)) {
|
|
263
|
+
clearStopFile(agentId);
|
|
264
|
+
return 0;
|
|
265
|
+
}
|
|
266
|
+
// Fast path: check for a signal file written by the daemon (2s interval)
|
|
267
|
+
if (consumeQuestionSignal(agentId, projectId)) {
|
|
268
|
+
log(`[build] question-answered signal received`);
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
// Slow fallback: poll the API every 15s for answered questions
|
|
272
|
+
if (Date.now() - apiPollAt > 15_000) {
|
|
273
|
+
apiPollAt = Date.now();
|
|
274
|
+
const q2 = await api.getBuildQueue(projectId);
|
|
275
|
+
if (q2.pending.length > 0)
|
|
276
|
+
break;
|
|
277
|
+
let answered = false;
|
|
278
|
+
for (const s of state.skipped) {
|
|
279
|
+
const qs = await api.getTaskQuestions(s.taskId).catch(() => ({ open: null }));
|
|
280
|
+
if (!qs.open) {
|
|
281
|
+
answered = true;
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
if (answered)
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
await new Promise((r) => setTimeout(r, 2_000));
|
|
289
|
+
}
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
log(`[build] queue finished - ${state.done} task(s) completed`);
|
|
293
|
+
clearBuildState(agentId, projectId);
|
|
294
|
+
return 0;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
finally {
|
|
298
|
+
clearInterval(heartbeatTimer);
|
|
299
|
+
await (0, brief_1.reportStatus)(api, agentId, 'online', undefined, sessionId);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
async function workBuildTask(ctx, task, flowModel, worktreePath) {
|
|
303
|
+
const { api, agentId, cwd: linkedFolder, selfMode, harness, settings, flags, sessionId, log } = ctx;
|
|
304
|
+
const taskId = task.id;
|
|
305
|
+
const cwd = worktreePath || linkedFolder;
|
|
306
|
+
let claimed = false;
|
|
307
|
+
try {
|
|
308
|
+
const claim = await api.claimTask(taskId);
|
|
309
|
+
claimed = true;
|
|
310
|
+
log(`[claim] task ${taskId} claimed`);
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
const e = err;
|
|
314
|
+
log(`[claim] cannot work task ${taskId}: ${e.message ?? e.code}`, 'stderr');
|
|
315
|
+
return 'failed';
|
|
316
|
+
}
|
|
317
|
+
await (0, brief_1.reportStatus)(api, agentId, 'working', taskId, sessionId);
|
|
318
|
+
try {
|
|
319
|
+
const brief = await (0, brief_1.fetchTaskBrief)(api, taskId);
|
|
320
|
+
const briefPath = require('node:os').tmpdir() + `/teamshare-build-${taskId}.md`;
|
|
321
|
+
(0, node_fs_1.writeFileSync)(briefPath, brief, 'utf8');
|
|
322
|
+
log(`[brief] written (${brief.length} chars)`);
|
|
323
|
+
let summary = '';
|
|
324
|
+
if (selfMode) {
|
|
325
|
+
const llmApiKey = (0, utils_1.sessionLlmApiKey)(settings);
|
|
326
|
+
if (!llmApiKey) {
|
|
327
|
+
log('--self requires a provider API key', 'stderr');
|
|
328
|
+
return 'failed';
|
|
329
|
+
}
|
|
330
|
+
const endpoint = (0, utils_1.llmEndpoint)(flags, settings, flowModel);
|
|
331
|
+
const result = await (0, llm_1.runLlmSession)(api, taskId, brief, { baseUrl: endpoint.baseUrl, apiKey: llmApiKey, model: endpoint.model, agentName: agentId, systemPrompt: (0, utils_1.systemPromptOf)(flags, settings), temperature: (0, utils_1.temperatureOf)(flags, settings), maxTokens: (0, utils_1.maxTokensOf)(flags, settings), continue: flags.get('continue') === 'true', agentUserId: settings.userId ?? undefined }, task.projectId);
|
|
332
|
+
summary = result.summary || `Agent run finished after ${result.iterations} iterations.`;
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
const prompt = `Work on the TeamShare task described in ${briefPath} using teamshare MCP tools. Break into subtasks, check them off. When done, post summary and resolve the task.`;
|
|
336
|
+
const exitCode = await (0, harness_1.spawnHarness)(harness, prompt, log, { model: (0, utils_1.modelOf)(flags, settings, flowModel), temperature: (0, utils_1.temperatureOf)(flags, settings), cwd, timeoutMin: (0, utils_1.sessionTimeoutMin)(flags), title: `Build task ${taskId}`, agentKey: api.apiKey, apiBaseUrl: api.baseUrl });
|
|
337
|
+
summary = exitCode === 0 ? `Harness finished.` : `Harness exited with code ${exitCode}.`;
|
|
338
|
+
}
|
|
339
|
+
if (flags.get('no-report') !== 'true')
|
|
340
|
+
await (0, brief_1.postClosingComment)(api, taskId, summary);
|
|
341
|
+
const final = await (0, brief_1.waitForTaskCompletion)(api, taskId, 15_000, 15 * 60_000, (s) => log(`[status] ${s}`));
|
|
342
|
+
log(`[done] task ${taskId} final: ${final.status}`);
|
|
343
|
+
return DONE_STATUSES.has(final.status) ? 'done' : 'failed';
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
log(`[build] task ${taskId} errored: ${(0, config_1.msg)(err)}`, 'stderr');
|
|
347
|
+
return 'failed';
|
|
348
|
+
}
|
|
349
|
+
finally {
|
|
350
|
+
if (claimed) {
|
|
351
|
+
await api.releaseTask(taskId).catch(() => undefined);
|
|
352
|
+
log(`[claim] task ${taskId} released`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
async function askBuildQuestion(api, projectId, task, log) {
|
|
357
|
+
try {
|
|
358
|
+
const current = await api.getTaskQuestions(task.id);
|
|
359
|
+
if (current.open) {
|
|
360
|
+
log(`[build] question already open for "${task.title}"`);
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
catch { }
|
|
365
|
+
const body = `[question] Build could not complete "${task.title}". Check task comments and reply to resume.`;
|
|
366
|
+
try {
|
|
367
|
+
await api.addComment({ taskId: task.id, body });
|
|
368
|
+
log(`[build] asked about "${task.title}"`);
|
|
369
|
+
}
|
|
370
|
+
catch (err) {
|
|
371
|
+
log(`[build] question failed: ${(0, config_1.msg)(err)}`, 'stderr');
|
|
372
|
+
}
|
|
373
|
+
try {
|
|
374
|
+
const channels = await api.listChatChannels(projectId);
|
|
375
|
+
let ch = channels.find((c) => c.name === AGENT_QUESTIONS_CHANNEL)?.id;
|
|
376
|
+
if (!ch) {
|
|
377
|
+
const c = await api.createChatChannel(projectId, AGENT_QUESTIONS_CHANNEL, 'Agent build questions').catch(() => null);
|
|
378
|
+
ch = c?.id;
|
|
379
|
+
}
|
|
380
|
+
if (ch)
|
|
381
|
+
await api.postChatMessage(projectId, `Agent needs input on "${task.title}" - check task comments.`, ch);
|
|
382
|
+
}
|
|
383
|
+
catch { }
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cmdChat(flags: Map<string, string>): Promise<void>;
|
|
@@ -0,0 +1,113 @@
|
|
|
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.cmdChat = cmdChat;
|
|
37
|
+
/**
|
|
38
|
+
* `chat` command: reply to chat messages that @mention the agent.
|
|
39
|
+
*/
|
|
40
|
+
const api_1 = require("../../lib/api");
|
|
41
|
+
const chat_reply_1 = require("../../lib/chat-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 ?? api_1.DEFAULT_WS_URL;
|
|
48
|
+
async function cmdChat(flags) {
|
|
49
|
+
const projectId = (0, utils_1.need)(flags, 'project');
|
|
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 targetId = flags.get('target');
|
|
54
|
+
const selfMode = flags.get('self') === 'true';
|
|
55
|
+
let exitCode = 0;
|
|
56
|
+
const sessionId = flags.get('session') ?? (0, session_stream_1.newSessionId)();
|
|
57
|
+
const stream = new session_stream_1.SessionStream({ sessionId, agentId, projectId, mode: 'chat' });
|
|
58
|
+
stream.connect(WS_DEFAULT.replace(/\/$/, '') + '/agents', apiKey);
|
|
59
|
+
const log = (0, utils_1.makeLog)(stream);
|
|
60
|
+
const api = new api_1.TeamshareApi(process.env.TEAMSHARE_API_URL, apiKey);
|
|
61
|
+
const cwd = (0, shared_1.resolveWorkingDir)(flags, projectId, 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, 'chat', { projectId }, {
|
|
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] chat reply loop (project ${projectId}${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, chat_reply_1.runChatReply)(api, agentId, projectId, mention, {
|
|
82
|
+
harness, selfMode, api, echo: process.env.TS_CHAT_ECHO === '1',
|
|
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
|
+
stream: {
|
|
91
|
+
wsBase: WS_DEFAULT.replace(/\/$/, ''),
|
|
92
|
+
apiKey, projectId,
|
|
93
|
+
},
|
|
94
|
+
}, targetId);
|
|
95
|
+
log(`[done] replied to ${result.replied} mention${result.replied === 1 ? '' : 's'}` +
|
|
96
|
+
(result.skipped ? ` (${result.skipped} skipped)` : ''));
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
clearInterval(heartbeatTimer);
|
|
100
|
+
await (0, brief_1.reportStatus)(api, agentId, 'online', undefined, sessionId);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
const { msg } = await Promise.resolve().then(() => __importStar(require('../../lib/config')));
|
|
105
|
+
log(`[error] ${msg(err)}`, 'stderr');
|
|
106
|
+
exitCode = 1;
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
(0, lock_1.releaseLock)(agentId);
|
|
110
|
+
await stream.end(exitCode);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cmdConnect(flags: Map<string, string>): Promise<void>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdConnect = cmdConnect;
|
|
4
|
+
/**
|
|
5
|
+
* `connect` command: test connection and save agent key.
|
|
6
|
+
*/
|
|
7
|
+
const api_1 = require("../../lib/api");
|
|
8
|
+
const config_1 = require("../../lib/config");
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
async function cmdConnect(flags) {
|
|
11
|
+
const agentId = (0, utils_1.need)(flags, 'agent');
|
|
12
|
+
const apiKey = (0, utils_1.need)(flags, 'key');
|
|
13
|
+
const api = new api_1.TeamshareApi(process.env.TEAMSHARE_API_URL, apiKey);
|
|
14
|
+
await api.heartbeat(agentId, 'online');
|
|
15
|
+
(0, config_1.upsertAgent)(agentId, apiKey);
|
|
16
|
+
console.log(`Connected: agent ${agentId} (key saved to ~/.teamshare/config.json)`);
|
|
17
|
+
const wired = (0, config_1.wireOpencodeMcp)(apiKey);
|
|
18
|
+
console.log(wired
|
|
19
|
+
? '[mcp] wired TeamShare MCP into opencode.jsonc — agent now has 21 tools (create_task, list_tasks, search, etc.)'
|
|
20
|
+
: '[mcp] TeamShare MCP already wired in opencode.jsonc — skipping');
|
|
21
|
+
console.log('Ready: teamshare-agent run --task <taskId> --agent ' + agentId + '');
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":";;AAOA,gCAeC;AAtBD;;GAEG;AACH,uCAA6C;AAC7C,6CAAgE;AAChE,oCAA4C;AAErC,KAAK,UAAU,UAAU,CAAC,KAA0B;IACzD,MAAM,OAAO,GAAG,IAAA,YAAI,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAA,YAAI,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,kBAAY,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,IAAA,oBAAW,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,0CAA0C,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG,IAAA,wBAAe,EAAC,MAAM,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CACT,KAAK;QACH,CAAC,CAAC,gHAAgH;QAClH,CAAC,CAAC,gEAAgE,CACrE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,qDAAqD,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cmdDoc(flags: Map<string, string>): Promise<void>;
|