orbitmap 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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/dist/api-client.d.ts +234 -0
  4. package/dist/api-client.js +401 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/commands/agents.d.ts +3 -0
  7. package/dist/commands/agents.js +44 -0
  8. package/dist/commands/agents.js.map +1 -0
  9. package/dist/commands/assign.d.ts +5 -0
  10. package/dist/commands/assign.js +44 -0
  11. package/dist/commands/assign.js.map +1 -0
  12. package/dist/commands/context.d.ts +4 -0
  13. package/dist/commands/context.js +37 -0
  14. package/dist/commands/context.js.map +1 -0
  15. package/dist/commands/create.d.ts +12 -0
  16. package/dist/commands/create.js +54 -0
  17. package/dist/commands/create.js.map +1 -0
  18. package/dist/commands/dep.d.ts +11 -0
  19. package/dist/commands/dep.js +56 -0
  20. package/dist/commands/dep.js.map +1 -0
  21. package/dist/commands/doc-import.d.ts +9 -0
  22. package/dist/commands/doc-import.js +97 -0
  23. package/dist/commands/doc-import.js.map +1 -0
  24. package/dist/commands/doc-patch.d.ts +16 -0
  25. package/dist/commands/doc-patch.js +142 -0
  26. package/dist/commands/doc-patch.js.map +1 -0
  27. package/dist/commands/doc-share.d.ts +14 -0
  28. package/dist/commands/doc-share.js +60 -0
  29. package/dist/commands/doc-share.js.map +1 -0
  30. package/dist/commands/doc-update.d.ts +6 -0
  31. package/dist/commands/doc-update.js +64 -0
  32. package/dist/commands/doc-update.js.map +1 -0
  33. package/dist/commands/doc.d.ts +6 -0
  34. package/dist/commands/doc.js +108 -0
  35. package/dist/commands/doc.js.map +1 -0
  36. package/dist/commands/docs-cache.d.ts +11 -0
  37. package/dist/commands/docs-cache.js +119 -0
  38. package/dist/commands/docs-cache.js.map +1 -0
  39. package/dist/commands/docs.d.ts +6 -0
  40. package/dist/commands/docs.js +35 -0
  41. package/dist/commands/docs.js.map +1 -0
  42. package/dist/commands/get.d.ts +8 -0
  43. package/dist/commands/get.js +102 -0
  44. package/dist/commands/get.js.map +1 -0
  45. package/dist/commands/ideas.d.ts +23 -0
  46. package/dist/commands/ideas.js +155 -0
  47. package/dist/commands/ideas.js.map +1 -0
  48. package/dist/commands/init.d.ts +7 -0
  49. package/dist/commands/init.js +175 -0
  50. package/dist/commands/init.js.map +1 -0
  51. package/dist/commands/issues.d.ts +32 -0
  52. package/dist/commands/issues.js +206 -0
  53. package/dist/commands/issues.js.map +1 -0
  54. package/dist/commands/log.d.ts +6 -0
  55. package/dist/commands/log.js +47 -0
  56. package/dist/commands/log.js.map +1 -0
  57. package/dist/commands/login.d.ts +3 -0
  58. package/dist/commands/login.js +48 -0
  59. package/dist/commands/login.js.map +1 -0
  60. package/dist/commands/logout.d.ts +1 -0
  61. package/dist/commands/logout.js +13 -0
  62. package/dist/commands/logout.js.map +1 -0
  63. package/dist/commands/orbit.d.ts +18 -0
  64. package/dist/commands/orbit.js +159 -0
  65. package/dist/commands/orbit.js.map +1 -0
  66. package/dist/commands/overview.d.ts +4 -0
  67. package/dist/commands/overview.js +56 -0
  68. package/dist/commands/overview.js.map +1 -0
  69. package/dist/commands/projects.d.ts +3 -0
  70. package/dist/commands/projects.js +28 -0
  71. package/dist/commands/projects.js.map +1 -0
  72. package/dist/commands/setup-agent.d.ts +3 -0
  73. package/dist/commands/setup-agent.js +178 -0
  74. package/dist/commands/setup-agent.js.map +1 -0
  75. package/dist/commands/start.d.ts +4 -0
  76. package/dist/commands/start.js +38 -0
  77. package/dist/commands/start.js.map +1 -0
  78. package/dist/commands/status.d.ts +5 -0
  79. package/dist/commands/status.js +54 -0
  80. package/dist/commands/status.js.map +1 -0
  81. package/dist/commands/subtask.d.ts +7 -0
  82. package/dist/commands/subtask.js +26 -0
  83. package/dist/commands/subtask.js.map +1 -0
  84. package/dist/commands/task-edit-content.d.ts +7 -0
  85. package/dist/commands/task-edit-content.js +45 -0
  86. package/dist/commands/task-edit-content.js.map +1 -0
  87. package/dist/commands/task.d.ts +66 -0
  88. package/dist/commands/task.js +92 -0
  89. package/dist/commands/task.js.map +1 -0
  90. package/dist/commands/tasks.d.ts +7 -0
  91. package/dist/commands/tasks.js +35 -0
  92. package/dist/commands/tasks.js.map +1 -0
  93. package/dist/commands/vibes.d.ts +27 -0
  94. package/dist/commands/vibes.js +142 -0
  95. package/dist/commands/vibes.js.map +1 -0
  96. package/dist/config.d.ts +14 -0
  97. package/dist/config.js +34 -0
  98. package/dist/config.js.map +1 -0
  99. package/dist/doc-cache.d.ts +24 -0
  100. package/dist/doc-cache.js +116 -0
  101. package/dist/doc-cache.js.map +1 -0
  102. package/dist/errors.d.ts +16 -0
  103. package/dist/errors.js +26 -0
  104. package/dist/errors.js.map +1 -0
  105. package/dist/index.d.ts +2 -0
  106. package/dist/index.js +705 -0
  107. package/dist/index.js.map +1 -0
  108. package/dist/oauth.d.ts +42 -0
  109. package/dist/oauth.js +207 -0
  110. package/dist/oauth.js.map +1 -0
  111. package/dist/output.d.ts +4 -0
  112. package/dist/output.js +66 -0
  113. package/dist/output.js.map +1 -0
  114. package/package.json +50 -0
@@ -0,0 +1,401 @@
1
+ import { createReadStream, statSync } from 'node:fs';
2
+ import { basename, extname } from 'node:path';
3
+ import { OrbitMapAPIError } from './errors.js';
4
+ import { resolveAuth } from './config.js';
5
+ export class OrbitMapClient {
6
+ apiKey;
7
+ baseUrl;
8
+ projectId;
9
+ constructor(apiKey, projectId, apiUrl) {
10
+ this.apiKey = apiKey;
11
+ this.projectId = projectId;
12
+ this.baseUrl = (apiUrl ?? 'https://orbitmap.app/api/agent').replace(/\/$/, '');
13
+ }
14
+ async request(method, path, options) {
15
+ const url = new URL(`${this.baseUrl}${path}`);
16
+ if (options?.params) {
17
+ for (const [key, value] of Object.entries(options.params)) {
18
+ if (value !== undefined) {
19
+ url.searchParams.set(key, value);
20
+ }
21
+ }
22
+ }
23
+ const headers = {
24
+ Authorization: `Bearer ${this.apiKey}`,
25
+ Accept: 'application/json',
26
+ };
27
+ if (this.projectId) {
28
+ headers['X-OrbitMap-Project'] = this.projectId;
29
+ }
30
+ if (options?.body !== undefined) {
31
+ headers['Content-Type'] = 'application/json';
32
+ }
33
+ const controller = new AbortController();
34
+ const timeout = setTimeout(() => controller.abort(), 30_000);
35
+ try {
36
+ const response = await fetch(url.toString(), {
37
+ method,
38
+ headers,
39
+ body: options?.body !== undefined ? JSON.stringify(options.body) : undefined,
40
+ signal: controller.signal,
41
+ });
42
+ // Handle 204 No Content — no body to parse
43
+ if (response.status === 204) {
44
+ return undefined;
45
+ }
46
+ const text = await response.text();
47
+ let json;
48
+ try {
49
+ json = JSON.parse(text);
50
+ }
51
+ catch {
52
+ if (!response.ok) {
53
+ throw new OrbitMapAPIError(`HTTP ${response.status}: ${text}`, 'HTTP_ERROR', response.status);
54
+ }
55
+ throw new OrbitMapAPIError('Invalid JSON response from API', 'PARSE_ERROR', response.status);
56
+ }
57
+ if (!response.ok) {
58
+ if (OrbitMapAPIError.isApiErrorBody(json)) {
59
+ throw OrbitMapAPIError.fromResponse(json);
60
+ }
61
+ throw new OrbitMapAPIError(`HTTP ${response.status}`, 'HTTP_ERROR', response.status);
62
+ }
63
+ return json;
64
+ }
65
+ catch (error) {
66
+ if (error instanceof OrbitMapAPIError)
67
+ throw error;
68
+ if (error instanceof DOMException && error.name === 'AbortError') {
69
+ throw new OrbitMapAPIError('Request timed out after 30s', 'TIMEOUT', 0);
70
+ }
71
+ throw error;
72
+ }
73
+ finally {
74
+ clearTimeout(timeout);
75
+ }
76
+ }
77
+ // ── Context ──
78
+ async getContext(projectId) {
79
+ return this.request('GET', '/context', {
80
+ params: { project_id: projectId },
81
+ });
82
+ }
83
+ // ── Tasks ──
84
+ async getTasks(options) {
85
+ return this.request('GET', '/tasks', {
86
+ params: {
87
+ status: options?.status,
88
+ priority: options?.priority,
89
+ project_id: options?.projectId,
90
+ orbit_id: options?.orbit,
91
+ },
92
+ });
93
+ }
94
+ async getTask(taskId) {
95
+ return this.request('GET', `/tasks/${taskId}`);
96
+ }
97
+ async getTaskByNumber(taskNumber) {
98
+ return this.request('GET', `/tasks/by-number/${taskNumber}`);
99
+ }
100
+ async startTask(taskId) {
101
+ if (taskId) {
102
+ return this.request('POST', `/tasks/${taskId}/start`);
103
+ }
104
+ return this.request('POST', '/tasks/start');
105
+ }
106
+ async updateTaskStatus(taskId, status, deliveryStatus) {
107
+ const body = {};
108
+ if (status !== undefined)
109
+ body.status = status;
110
+ if (deliveryStatus !== undefined)
111
+ body.delivery_status = deliveryStatus;
112
+ return this.request('PATCH', `/tasks/${taskId}/status`, { body });
113
+ }
114
+ async createSubtasks(parentId, subtasks) {
115
+ return this.request('POST', `/tasks/${parentId}/subtasks`, {
116
+ body: { subtasks },
117
+ });
118
+ }
119
+ async createTask(data) {
120
+ return this.request('POST', '/tasks', { body: data });
121
+ }
122
+ async assignTask(taskId, assignment) {
123
+ return this.request('PATCH', `/tasks/${taskId}/assign`, {
124
+ body: assignment,
125
+ });
126
+ }
127
+ async editTaskContent(taskId, data) {
128
+ return this.request('PATCH', `/tasks/${taskId}/content`, {
129
+ body: data,
130
+ });
131
+ }
132
+ // ── Task Dependencies ──
133
+ async addTaskDependency(taskId, data) {
134
+ return this.request('POST', `/tasks/${taskId}/dependencies`, { body: data });
135
+ }
136
+ async removeTaskDependency(taskId, targetTaskId, type) {
137
+ return this.request('DELETE', `/tasks/${taskId}/dependencies/${targetTaskId}`, {
138
+ params: { type },
139
+ });
140
+ }
141
+ // ── Logs ──
142
+ async logWork(taskId, type, content, metadata) {
143
+ return this.request('POST', `/tasks/${taskId}/logs`, {
144
+ body: { type, content, metadata },
145
+ });
146
+ }
147
+ // ── Documents ──
148
+ async getDocuments(options) {
149
+ return this.request('GET', '/documents', {
150
+ params: {
151
+ type: options?.type,
152
+ search: options?.search,
153
+ project_id: options?.projectId,
154
+ },
155
+ });
156
+ }
157
+ async getDocument(idOrSlug, mode, options) {
158
+ return this.request('GET', `/documents/${idOrSlug}`, {
159
+ params: {
160
+ mode,
161
+ full: options?.full ? 'true' : undefined,
162
+ section: options?.section,
163
+ },
164
+ });
165
+ }
166
+ async importDocument(data) {
167
+ return this.request('POST', '/documents', { body: data });
168
+ }
169
+ async updateDocument(idOrSlug, content, changelog) {
170
+ return this.request('PUT', `/documents/${idOrSlug}`, {
171
+ body: { content, changelog },
172
+ });
173
+ }
174
+ async patchDocument(idOrSlug, operations, baseVersion, changelog) {
175
+ return this.request('PATCH', `/documents/${idOrSlug}`, {
176
+ body: { base_version: baseVersion, operations, changelog },
177
+ });
178
+ }
179
+ // ── Presigned URL upload ──
180
+ async requestUploadUrl(data) {
181
+ return this.request('POST', '/documents/upload-url', { body: data });
182
+ }
183
+ async confirmUpload(uploadId) {
184
+ return this.request('POST', '/documents/confirm-upload', {
185
+ body: { upload_id: uploadId },
186
+ });
187
+ }
188
+ async requestUpdateUploadUrl(idOrSlug, changelog) {
189
+ return this.request('POST', `/documents/${idOrSlug}/upload-url`, {
190
+ body: changelog ? { changelog } : {},
191
+ });
192
+ }
193
+ async confirmUpdateUpload(idOrSlug, uploadId) {
194
+ return this.request('POST', `/documents/${idOrSlug}/confirm-upload`, {
195
+ body: { upload_id: uploadId },
196
+ });
197
+ }
198
+ async uploadToPresignedUrl(presignedUrl, filePath, onProgress) {
199
+ const stat = statSync(filePath);
200
+ const totalBytes = stat.size;
201
+ const ext = extname(filePath).toLowerCase();
202
+ const contentType = ext === '.md' ? 'text/markdown' : 'application/octet-stream';
203
+ const stream = createReadStream(filePath);
204
+ // Collect chunks for progress tracking and body assembly
205
+ const chunks = [];
206
+ let bytesRead = 0;
207
+ for await (const chunk of stream) {
208
+ const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
209
+ chunks.push(buf);
210
+ bytesRead += buf.length;
211
+ onProgress?.(bytesRead, totalBytes);
212
+ }
213
+ const body = Buffer.concat(chunks);
214
+ const response = await fetch(presignedUrl, {
215
+ method: 'PUT',
216
+ headers: {
217
+ 'Content-Type': contentType,
218
+ 'Content-Length': String(totalBytes),
219
+ },
220
+ body,
221
+ });
222
+ if (!response.ok) {
223
+ const text = await response.text();
224
+ throw new OrbitMapAPIError(`R2 upload failed: HTTP ${response.status} — ${text.slice(0, 200)}`, 'UPLOAD_FAILED', response.status);
225
+ }
226
+ }
227
+ /**
228
+ * Attempts presigned URL upload for a new document.
229
+ * Returns null if the endpoint is not available (404), signaling caller to fall back.
230
+ */
231
+ async presignedImport(filePath, data, onProgress) {
232
+ let uploadResponse;
233
+ try {
234
+ uploadResponse = await this.requestUploadUrl({
235
+ title: data.title,
236
+ type: data.type,
237
+ filename: basename(filePath),
238
+ source_path: data.source_path,
239
+ context: data.context,
240
+ workspace_id: data.workspace_id,
241
+ });
242
+ }
243
+ catch (err) {
244
+ if (err instanceof OrbitMapAPIError && err.status === 404) {
245
+ return null; // endpoint not available — fallback
246
+ }
247
+ throw err;
248
+ }
249
+ await this.uploadToPresignedUrl(uploadResponse.data.presigned_url, filePath, onProgress);
250
+ const confirmed = await this.confirmUpload(uploadResponse.data.upload_id);
251
+ return { data: confirmed.data, upload_method: 'presigned' };
252
+ }
253
+ /**
254
+ * Attempts presigned URL upload for updating a document.
255
+ * Returns null if the endpoint is not available (404), signaling caller to fall back.
256
+ */
257
+ async presignedUpdate(idOrSlug, filePath, changelog, onProgress) {
258
+ let uploadResponse;
259
+ try {
260
+ uploadResponse = await this.requestUpdateUploadUrl(idOrSlug, changelog);
261
+ }
262
+ catch (err) {
263
+ if (err instanceof OrbitMapAPIError && err.status === 404) {
264
+ return null; // endpoint not available — fallback
265
+ }
266
+ throw err;
267
+ }
268
+ await this.uploadToPresignedUrl(uploadResponse.data.presigned_url, filePath, onProgress);
269
+ const confirmed = await this.confirmUpdateUpload(idOrSlug, uploadResponse.data.upload_id);
270
+ return { data: confirmed.data, upload_method: 'presigned' };
271
+ }
272
+ // ── Document sharing ──
273
+ async shareDocument(documentId, projectId, agentIds) {
274
+ return this.request('POST', `/documents/${documentId}/share`, {
275
+ body: { project_id: projectId, agent_ids: agentIds },
276
+ });
277
+ }
278
+ async unshareDocument(documentId, projectId) {
279
+ return this.request('DELETE', `/documents/${documentId}/share/${projectId}`);
280
+ }
281
+ async setDocumentVisibility(documentId, projectId, agentIds) {
282
+ return this.request('PUT', `/documents/${documentId}/share/${projectId}/visibility`, { body: { agent_ids: agentIds } });
283
+ }
284
+ // ── Projects ──
285
+ async getProjects() {
286
+ return this.request('GET', '/projects');
287
+ }
288
+ async getProjectMembers(projectId) {
289
+ return this.request('GET', `/projects/${projectId}/members`);
290
+ }
291
+ async getProjectOverview(projectId) {
292
+ return this.request('GET', `/projects/${projectId}/overview`);
293
+ }
294
+ // ── Issues ──
295
+ async registerIssue(data) {
296
+ return this.request('POST', '/issues', { body: data });
297
+ }
298
+ async listIssues(options) {
299
+ return this.request('GET', '/issues', {
300
+ params: {
301
+ status: options?.status,
302
+ severity: options?.severity,
303
+ limit: options?.limit,
304
+ },
305
+ });
306
+ }
307
+ async getIssue(idOrNumber) {
308
+ return this.request('GET', `/issues/${idOrNumber}`);
309
+ }
310
+ async getIssueByNumber(issueNumber) {
311
+ return this.request('GET', `/issues/by-number/${issueNumber}`);
312
+ }
313
+ async resolveIssueByNumber(issueNumber, data) {
314
+ return this.request('PATCH', `/issues/by-number/${issueNumber}/resolve`, {
315
+ body: data,
316
+ });
317
+ }
318
+ async resolveIssue(idOrNumber, data) {
319
+ return this.request('PATCH', `/issues/${idOrNumber}/resolve`, {
320
+ body: data,
321
+ });
322
+ }
323
+ async updateIssueStatus(idOrNumber, data) {
324
+ return this.request('PATCH', `/issues/${idOrNumber}/status`, {
325
+ body: data,
326
+ });
327
+ }
328
+ async updateIssueStatusByNumber(issueNumber, data) {
329
+ return this.request('PATCH', `/issues/by-number/${issueNumber}/status`, {
330
+ body: data,
331
+ });
332
+ }
333
+ // ── Vibes ──
334
+ async logVibe(data) {
335
+ return this.request('POST', '/vibes', { body: data });
336
+ }
337
+ async listVibes(options) {
338
+ return this.request('GET', '/vibes', {
339
+ params: {
340
+ type: options?.type,
341
+ since: options?.since,
342
+ limit: options?.limit,
343
+ },
344
+ });
345
+ }
346
+ async getVibe(id) {
347
+ return this.request('GET', `/vibes/${id}`);
348
+ }
349
+ async updateVibe(id, data) {
350
+ return this.request('PATCH', `/vibes/${id}`, { body: data });
351
+ }
352
+ // ── Ideas ──
353
+ async listIdeas(options) {
354
+ return this.request('GET', '/ideas', {
355
+ params: { status: options?.status, priority: options?.priority, limit: options?.limit },
356
+ });
357
+ }
358
+ async getIdea(idOrNumber) {
359
+ return this.request('GET', `/ideas/${idOrNumber}`);
360
+ }
361
+ async getIdeaByNumber(ideaNumber) {
362
+ return this.request('GET', `/ideas/by-number/${ideaNumber}`);
363
+ }
364
+ async createIdea(data) {
365
+ return this.request('POST', '/ideas', { body: data });
366
+ }
367
+ async updateIdeaStatus(idOrNumber, data) {
368
+ return this.request('PATCH', `/ideas/${idOrNumber}/status`, { body: data });
369
+ }
370
+ async updateIdeaStatusByNumber(ideaNumber, data) {
371
+ return this.request('PATCH', `/ideas/by-number/${ideaNumber}/status`, { body: data });
372
+ }
373
+ // ── Orbits ──
374
+ async getOrbitItems(orbitIdOrSlug, options) {
375
+ return this.request('GET', `/orbits/${orbitIdOrSlug}/items`, {
376
+ params: { type: options?.type },
377
+ });
378
+ }
379
+ async orbitAttach(orbitIdOrSlug, data) {
380
+ return this.request('POST', `/orbits/${orbitIdOrSlug}/items`, {
381
+ body: { action: 'attach', ...data },
382
+ });
383
+ }
384
+ async orbitDetach(orbitIdOrSlug, data) {
385
+ return this.request('POST', `/orbits/${orbitIdOrSlug}/items`, {
386
+ body: { action: 'detach', ...data },
387
+ });
388
+ }
389
+ // ── Prompts ──
390
+ async getWorkPrompt() {
391
+ return this.request('GET', '/prompts/work-on-next-task');
392
+ }
393
+ async getImportDocsPrompt() {
394
+ return this.request('GET', '/prompts/import-docs');
395
+ }
396
+ }
397
+ export async function createClient(explicitProjectId) {
398
+ const auth = await resolveAuth();
399
+ return new OrbitMapClient(auth.apiKey, explicitProjectId ?? auth.projectId, auth.apiUrl);
400
+ }
401
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function membersCommand(projectId: string, options: {
2
+ json: boolean;
3
+ }): Promise<void>;
@@ -0,0 +1,44 @@
1
+ import { createClient } from '../api-client.js';
2
+ import { formatOutput, printError, formatTable } from '../output.js';
3
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
4
+ async function resolveProjectIdFromSlug(client, idOrSlug) {
5
+ if (UUID_RE.test(idOrSlug))
6
+ return idOrSlug;
7
+ const projects = (await client.getProjects());
8
+ const found = projects.data.find((p) => p.slug === idOrSlug);
9
+ if (!found) {
10
+ throw new Error(`Project with slug "${idOrSlug}" not found.`);
11
+ }
12
+ return found.id;
13
+ }
14
+ export async function membersCommand(projectId, options) {
15
+ try {
16
+ const client = await createClient();
17
+ const resolvedId = await resolveProjectIdFromSlug(client, projectId);
18
+ const response = (await client.getProjectMembers(resolvedId));
19
+ if (options.json) {
20
+ console.log(formatOutput(response, true));
21
+ return;
22
+ }
23
+ const { agents, users } = response.data;
24
+ if (agents.length === 0 && users.length === 0) {
25
+ console.log('No members found in this project.');
26
+ return;
27
+ }
28
+ if (agents.length > 0) {
29
+ console.log('Agents:');
30
+ console.log(formatTable(['Name', 'Slug', 'Role', 'ID'], agents.map((a) => [a.name, a.slug, a.role, a.id])));
31
+ }
32
+ if (users.length > 0) {
33
+ if (agents.length > 0)
34
+ console.log();
35
+ console.log('Users:');
36
+ console.log(formatTable(['Name', 'Email', 'Role', 'ID'], users.map((u) => [u.name, u.email, u.role, String(u.id)])));
37
+ }
38
+ }
39
+ catch (error) {
40
+ printError(error, options.json);
41
+ process.exitCode = 1;
42
+ }
43
+ }
44
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function assignCommand(taskId: string, agentId: string | undefined, options: {
2
+ json: boolean;
3
+ project?: string;
4
+ userId?: string;
5
+ }): Promise<void>;
@@ -0,0 +1,44 @@
1
+ import { createClient } from '../api-client.js';
2
+ import { formatOutput, printError, printSuccess } from '../output.js';
3
+ export async function assignCommand(taskId, agentId, options) {
4
+ try {
5
+ if (agentId && options.userId) {
6
+ printError('Cannot specify both <agent-id> and --user-id. Use one or the other.', options.json);
7
+ process.exitCode = 1;
8
+ return;
9
+ }
10
+ if (!agentId && !options.userId) {
11
+ printError('Must specify either <agent-id> or --user-id.', options.json);
12
+ process.exitCode = 1;
13
+ return;
14
+ }
15
+ const client = await createClient(options.project);
16
+ if (options.userId) {
17
+ const userId = Number(options.userId);
18
+ if (!Number.isInteger(userId) || userId <= 0) {
19
+ printError('--user-id must be a positive integer.', options.json);
20
+ process.exitCode = 1;
21
+ return;
22
+ }
23
+ const response = (await client.assignTask(taskId, { user_id: userId }));
24
+ if (options.json) {
25
+ console.log(formatOutput(response, true));
26
+ return;
27
+ }
28
+ printSuccess(`Task assigned to user ${response.data.user_name}.`, false);
29
+ }
30
+ else {
31
+ const response = (await client.assignTask(taskId, { agent_id: agentId }));
32
+ if (options.json) {
33
+ console.log(formatOutput(response, true));
34
+ return;
35
+ }
36
+ printSuccess(`Task assigned to ${response.data.agent_name}.`, false);
37
+ }
38
+ }
39
+ catch (error) {
40
+ printError(error, options.json);
41
+ process.exitCode = 1;
42
+ }
43
+ }
44
+ //# sourceMappingURL=assign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign.js","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAoBtE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,OAA2B,EAC3B,OAA6D;IAE7D,IAAI,CAAC;QACH,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9B,UAAU,CAAC,qEAAqE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAChG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAChC,UAAU,CAAC,8CAA8C,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACzE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC7C,UAAU,CAAC,uCAAuC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAuB,CAAC;YAE9F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,YAAY,CAAC,yBAAyB,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAQ,EAAE,CAAC,CAAwB,CAAC;YAElG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,YAAY,CAAC,oBAAoB,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function contextCommand(options: {
2
+ json: boolean;
3
+ project?: string;
4
+ }): Promise<void>;
@@ -0,0 +1,37 @@
1
+ import { createClient } from '../api-client.js';
2
+ import { formatOutput, printError, formatTable } from '../output.js';
3
+ export async function contextCommand(options) {
4
+ try {
5
+ const client = await createClient(options.project);
6
+ const response = (await client.getContext(options.project));
7
+ if (options.json) {
8
+ console.log(formatOutput(response, true));
9
+ return;
10
+ }
11
+ const { agent, project, tasks, documents } = response.data;
12
+ console.log(`Agent: ${agent.name} (${agent.slug})`);
13
+ console.log(`ID: ${agent.id}`);
14
+ if (project) {
15
+ console.log(`\nProject: ${project.name} (${project.slug})`);
16
+ console.log(`ID: ${project.id}`);
17
+ if (project.description)
18
+ console.log(`Desc: ${project.description}`);
19
+ if (project.git_url)
20
+ console.log(`Git: ${project.git_url}`);
21
+ console.log(`Branch: ${project.default_branch}`);
22
+ }
23
+ if (tasks.length > 0) {
24
+ console.log(`\nActive tasks (${tasks.length}):`);
25
+ console.log(formatTable(['#', 'Title', 'Status', 'Priority'], tasks.map((t) => [t.display_number ?? t.task_number, t.title, t.status, t.priority])));
26
+ }
27
+ if (documents.length > 0) {
28
+ console.log(`\nDocuments (${documents.length}):`);
29
+ console.log(formatTable(['Title', 'Type', 'Shared'], documents.map((d) => [d.title, d.type, d._shared ? 'yes' : ''])));
30
+ }
31
+ }
32
+ catch (error) {
33
+ printError(error, options.json);
34
+ process.exitCode = 1;
35
+ }
36
+ }
37
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA+BrE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAGpC;IACC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAoB,CAAC;QAE/E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAElC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,OAAO,CAAC,WAAW;gBAAE,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACxE,IAAI,OAAO,CAAC,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CACT,WAAW,CACT,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EACpC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CACrF,CACF,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CACT,WAAW,CACT,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAChE,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare function createCommand(title: string, options: {
2
+ json: boolean;
3
+ project?: string;
4
+ desc?: string;
5
+ priority?: string;
6
+ status?: string;
7
+ effort?: string;
8
+ agentId?: string;
9
+ branch?: string;
10
+ instructions?: string;
11
+ fromIssue?: string;
12
+ }): Promise<void>;
@@ -0,0 +1,54 @@
1
+ import { createClient } from '../api-client.js';
2
+ import { formatOutput, printError, printSuccess } from '../output.js';
3
+ function isObjectNumber(id) {
4
+ return /^([A-Z]{2}-)?[a-z0-9]{6}$/.test(id);
5
+ }
6
+ function stripPrefix(id) {
7
+ return id.replace(/^[A-Z]{2}-/, '');
8
+ }
9
+ export async function createCommand(title, options) {
10
+ try {
11
+ const client = await createClient(options.project);
12
+ let sourceIssueId;
13
+ if (options.fromIssue) {
14
+ if (isObjectNumber(options.fromIssue)) {
15
+ const issueResp = (await client.getIssueByNumber(stripPrefix(options.fromIssue)));
16
+ sourceIssueId = issueResp.data.id;
17
+ }
18
+ else {
19
+ sourceIssueId = options.fromIssue;
20
+ }
21
+ }
22
+ const response = (await client.createTask({
23
+ title,
24
+ description: options.desc,
25
+ priority: options.priority,
26
+ status: options.status,
27
+ estimated_effort: options.effort,
28
+ agent_id: options.agentId,
29
+ branch_name: options.branch,
30
+ agent_instructions: options.instructions,
31
+ source_issue_id: sourceIssueId,
32
+ }));
33
+ if (options.json) {
34
+ console.log(formatOutput(response, true));
35
+ return;
36
+ }
37
+ const d = response.data;
38
+ let msg = `Task created: ${d.title} [${d.display_number ?? d.task_number}] (${d.status}, ${d.priority})`;
39
+ if (sourceIssueId) {
40
+ msg += `\nLinked to issue ${options.fromIssue} (now investigating)`;
41
+ }
42
+ if (d._warnings?.length) {
43
+ for (const w of d._warnings) {
44
+ msg += `\nWarning: ${w}`;
45
+ }
46
+ }
47
+ printSuccess(msg, false);
48
+ }
49
+ catch (error) {
50
+ printError(error, options.json);
51
+ process.exitCode = 1;
52
+ }
53
+ }
54
+ //# sourceMappingURL=create.js.map