@iamcoder18/huly-cli 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 (75) hide show
  1. package/README.md +2576 -0
  2. package/bin/huly +9 -0
  3. package/dist/auth/cache.js +129 -0
  4. package/dist/auth/cache.js.map +1 -0
  5. package/dist/auth/client.js +192 -0
  6. package/dist/auth/client.js.map +1 -0
  7. package/dist/auth/env.js +101 -0
  8. package/dist/auth/env.js.map +1 -0
  9. package/dist/auth/prompts.js +68 -0
  10. package/dist/auth/prompts.js.map +1 -0
  11. package/dist/cli.js +1959 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/commands/dry-run.js +39 -0
  14. package/dist/commands/dry-run.js.map +1 -0
  15. package/dist/commands/login.js +92 -0
  16. package/dist/commands/login.js.map +1 -0
  17. package/dist/commands/whoami.js +64 -0
  18. package/dist/commands/whoami.js.map +1 -0
  19. package/dist/index.js +59 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/output/errors.js +99 -0
  22. package/dist/output/errors.js.map +1 -0
  23. package/dist/output/format.js +607 -0
  24. package/dist/output/format.js.map +1 -0
  25. package/dist/output/progress.js +30 -0
  26. package/dist/output/progress.js.map +1 -0
  27. package/dist/raw/api.js +67 -0
  28. package/dist/raw/api.js.map +1 -0
  29. package/dist/raw/ws.js +157 -0
  30. package/dist/raw/ws.js.map +1 -0
  31. package/dist/resources/_helpers.js +258 -0
  32. package/dist/resources/_helpers.js.map +1 -0
  33. package/dist/resources/_project-resolve.js +24 -0
  34. package/dist/resources/_project-resolve.js.map +1 -0
  35. package/dist/resources/calendar.js +659 -0
  36. package/dist/resources/calendar.js.map +1 -0
  37. package/dist/resources/card.js +358 -0
  38. package/dist/resources/card.js.map +1 -0
  39. package/dist/resources/channel.js +709 -0
  40. package/dist/resources/channel.js.map +1 -0
  41. package/dist/resources/comment.js +142 -0
  42. package/dist/resources/comment.js.map +1 -0
  43. package/dist/resources/component.js +154 -0
  44. package/dist/resources/component.js.map +1 -0
  45. package/dist/resources/document.js +584 -0
  46. package/dist/resources/document.js.map +1 -0
  47. package/dist/resources/issue-template.js +228 -0
  48. package/dist/resources/issue-template.js.map +1 -0
  49. package/dist/resources/issue.js +909 -0
  50. package/dist/resources/issue.js.map +1 -0
  51. package/dist/resources/milestone.js +177 -0
  52. package/dist/resources/milestone.js.map +1 -0
  53. package/dist/resources/misc.js +2 -0
  54. package/dist/resources/misc.js.map +1 -0
  55. package/dist/resources/project.js +341 -0
  56. package/dist/resources/project.js.map +1 -0
  57. package/dist/resources/project.parse.js +25 -0
  58. package/dist/resources/project.parse.js.map +1 -0
  59. package/dist/resources/time.js +148 -0
  60. package/dist/resources/time.js.map +1 -0
  61. package/dist/resources/todo.js +463 -0
  62. package/dist/resources/todo.js.map +1 -0
  63. package/dist/resources/user.js +131 -0
  64. package/dist/resources/user.js.map +1 -0
  65. package/dist/resources/workspace.js +252 -0
  66. package/dist/resources/workspace.js.map +1 -0
  67. package/dist/transport/identifiers.js +67 -0
  68. package/dist/transport/identifiers.js.map +1 -0
  69. package/dist/transport/ref-resolver.js +108 -0
  70. package/dist/transport/ref-resolver.js.map +1 -0
  71. package/dist/transport/sdk.js +69 -0
  72. package/dist/transport/sdk.js.map +1 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/package.json +40 -0
@@ -0,0 +1,463 @@
1
+ import pkg from '@hcengineering/api-client';
2
+ const { MarkupContent } = pkg;
3
+ import { CLASS } from '../transport/identifiers.js';
4
+ import { connectCli } from '../transport/sdk.js';
5
+ import { resolveRef, resolveRefs, invalidateIndex } from '../transport/ref-resolver.js';
6
+ import { shouldJson, json, table, kv, header, C, withTimeout, success, updated, relTime, isoDate, bulkRemoved } from "../output/format.js";
7
+ import { withSpinner } from '../output/progress.js';
8
+ import { CliError, ExitCode } from '../output/errors.js';
9
+ import { readEnv } from '../auth/env.js';
10
+ const TODO_CLASS = 'time:class:ToDo';
11
+ const TODO_SPACE = 'time:space:ToDos';
12
+ const WORKSLOT_CLASS = 'time:class:WorkSlot';
13
+ const CALENDAR_SPACE = 'calendar:space:Calendar';
14
+ const TODO_PRIORITIES = new Set(['High', 'Medium', 'Low', 'NoPriority', 'Urgent']);
15
+ const TODO_VISIBILITIES = new Set(['public', 'busy', 'private']);
16
+ function parseDate(value, field) {
17
+ const t = new Date(value).getTime();
18
+ if (Number.isNaN(t))
19
+ throw new CliError(ExitCode.Validation, `invalid ${field}: ${value} (expected ISO date)`);
20
+ return t;
21
+ }
22
+ async function readBodyText(opts) {
23
+ if (opts.body && opts.bodyFile) {
24
+ throw new CliError(ExitCode.Validation, 'ambiguous body input', 'pass only one of --body or --body-file');
25
+ }
26
+ if (opts.bodyFile) {
27
+ const fs = await import('node:fs/promises');
28
+ return (await fs.readFile(opts.bodyFile, 'utf8')).trim();
29
+ }
30
+ return opts.body;
31
+ }
32
+ async function resolveEmployeeId(client, email) {
33
+ if (email) {
34
+ // findPersonBySocialKey returns Forbidden on this selfhost; fall back to
35
+ // a workspace-local Person scan (by email or by name).
36
+ const persons = (await client.findAll('contact:class:Person', {}, { limit: 200 }));
37
+ const lower = email.toLowerCase();
38
+ const hit = persons.find((p) => p.name?.toLowerCase() === lower || (p.name ?? '').toLowerCase().includes(lower));
39
+ if (!hit)
40
+ throw new CliError(ExitCode.NotFound, `no person matching ${email} in this workspace`);
41
+ return hit._id;
42
+ }
43
+ // Default: current user
44
+ const account = await client.getAccount();
45
+ return account.uuid;
46
+ }
47
+ export async function listActions(opts = {}) {
48
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
49
+ try {
50
+ const query = {};
51
+ if (opts.owner)
52
+ query.user = await resolveEmployeeId(client, opts.owner);
53
+ if (opts.priority) {
54
+ if (!TODO_PRIORITIES.has(opts.priority)) {
55
+ throw new CliError(ExitCode.Validation, `invalid --priority: ${opts.priority}`, `expected one of ${[...TODO_PRIORITIES].join(' | ')}`);
56
+ }
57
+ query.priority = opts.priority;
58
+ }
59
+ if (opts.visibility) {
60
+ if (!TODO_VISIBILITIES.has(opts.visibility)) {
61
+ throw new CliError(ExitCode.Validation, `invalid --visibility: ${opts.visibility}`, `expected one of ${[...TODO_VISIBILITIES].join(' | ')}`);
62
+ }
63
+ query.visibility = opts.visibility;
64
+ }
65
+ if (opts.title)
66
+ query.title = { $regex: opts.title, $options: 'i' };
67
+ if (opts.dueFrom || opts.dueTo) {
68
+ const range = {};
69
+ if (opts.dueFrom)
70
+ range.$gte = parseDate(opts.dueFrom, '--due-from');
71
+ if (opts.dueTo)
72
+ range.$lte = parseDate(opts.dueTo, '--due-to');
73
+ query.dueDate = range;
74
+ }
75
+ if (opts.issue) {
76
+ const account = await client.getAccount();
77
+ const issueId = await resolveRef(opts.issue, {
78
+ client,
79
+ classId: CLASS.Issue,
80
+ workspaceId: account.uuid,
81
+ defaultProjectIdentifier: readEnv().project
82
+ });
83
+ query.attachedTo = issueId;
84
+ query.attachedToClass = CLASS.Issue;
85
+ }
86
+ if (opts.completed === true)
87
+ query.doneOn = { $ne: null };
88
+ else if (opts.completed === false)
89
+ query.doneOn = null;
90
+ const docs = (await withSpinner('Loading actions…', () => client.findAll(TODO_CLASS, query), opts));
91
+ let r = docs;
92
+ if (opts.offset && opts.offset > 0)
93
+ r = r.slice(opts.offset);
94
+ if (opts.limit && opts.limit > 0)
95
+ r = r.slice(0, opts.limit);
96
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
97
+ json(r);
98
+ return;
99
+ }
100
+ table(r, [
101
+ { key: 'title', header: 'TITLE', format: (r) => String(r.title ?? '').slice(0, 50) },
102
+ { key: 'priority', header: 'PRIORITY' },
103
+ { key: 'visibility', header: 'VIS' },
104
+ { key: 'dueDate', header: 'DUE', format: (r) => r.dueDate ? new Date(Number(r.dueDate)).toISOString().slice(0, 10) : '—' },
105
+ { key: 'doneOn', header: 'DONE', format: (r) => r.doneOn ? new Date(Number(r.doneOn)).toISOString().slice(0, 10) : '—' },
106
+ { key: '_id', header: '_ID', format: (r) => String(r._id).slice(-12) }
107
+ ], { count: true, title: 'todos' });
108
+ }
109
+ finally {
110
+ await client.close();
111
+ }
112
+ }
113
+ export async function getAction(ref, opts = {}) {
114
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
115
+ try {
116
+ const account = await client.getAccount();
117
+ const id = await resolveRef(ref, {
118
+ client,
119
+ classId: TODO_CLASS,
120
+ workspaceId: account.uuid
121
+ });
122
+ const doc = await client.findOne(TODO_CLASS, { _id: id });
123
+ if (!doc)
124
+ throw new CliError(ExitCode.NotFound, `action ${ref} not found`);
125
+ if (opts.markdown && doc.description) {
126
+ try {
127
+ const body = await withTimeout(client.fetchMarkup(TODO_CLASS, doc._id, 'description', doc.description, 'markdown'), 5000, '(body fetch timed out)');
128
+ console.log(body);
129
+ return;
130
+ }
131
+ catch {
132
+ console.log(String(doc.description));
133
+ return;
134
+ }
135
+ }
136
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
137
+ json(doc);
138
+ return;
139
+ }
140
+ header(`Action — ${doc.title ?? '(untitled)'}`, { subtitle: `created ${relTime(doc.createdOn)}` });
141
+ const rows = [
142
+ ['ID', C.emphasis(String(doc._id))],
143
+ ['Title', String(doc.title ?? '—')],
144
+ ['State', doc.doneOn != null ? C.ok('done') : C.muted('open')],
145
+ ['Priority', String(doc.priority ?? '—')],
146
+ ['Due', doc.dueDate != null ? isoDate(doc.dueDate) : C.muted('none')],
147
+ ['Owner', String(doc.assignedTo ?? doc.user ?? '—')],
148
+ ['Created by', String(doc.createdBy ?? '—')],
149
+ ['Created', doc.createdOn != null ? `${isoDate(doc.createdOn)} (${relTime(doc.createdOn)})` : C.muted('—')],
150
+ ['Modified', doc.modifiedOn != null ? `${isoDate(doc.modifiedOn)} (${relTime(doc.modifiedOn)})` : C.muted('—')],
151
+ ['_class', C.id(String(doc._class))]
152
+ ];
153
+ if (doc.doneOn != null)
154
+ rows.push(['Done', `${isoDate(doc.doneOn)} (${relTime(doc.doneOn)})`]);
155
+ kv(rows);
156
+ if (doc.description && doc.description !== '' && !opts.markdown) {
157
+ console.log();
158
+ console.log(C.emphasis('Description'));
159
+ console.log(C.muted('─'.repeat(20)));
160
+ const desc = String(doc.description);
161
+ console.log(desc.length > 500 ? desc.slice(0, 500) + '…' : desc);
162
+ }
163
+ }
164
+ finally {
165
+ await client.close();
166
+ }
167
+ }
168
+ export async function createAction(opts) {
169
+ if (!opts.title)
170
+ throw new CliError(ExitCode.Validation, 'missing --title');
171
+ const body = await readBodyText(opts);
172
+ const description = body
173
+ ? body
174
+ : (opts.description ? opts.description : '');
175
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
176
+ try {
177
+ const account = await client.getAccount();
178
+ const user = await resolveEmployeeId(client, opts.owner);
179
+ if (opts.priority && !TODO_PRIORITIES.has(opts.priority)) {
180
+ throw new CliError(ExitCode.Validation, `invalid --priority: ${opts.priority}`, `expected one of ${[...TODO_PRIORITIES].join(' | ')}`);
181
+ }
182
+ if (opts.visibility && !TODO_VISIBILITIES.has(opts.visibility)) {
183
+ throw new CliError(ExitCode.Validation, `invalid --visibility: ${opts.visibility}`, `expected one of ${[...TODO_VISIBILITIES].join(' | ')}`);
184
+ }
185
+ const priority = opts.priority ?? 'NoPriority';
186
+ const visibility = opts.visibility ?? 'public';
187
+ let attachedTo;
188
+ let attachedToClass;
189
+ if (opts.attachedTo && opts.attachedToClass) {
190
+ attachedTo = await resolveRef(opts.attachedTo, {
191
+ client,
192
+ classId: opts.attachedToClass,
193
+ workspaceId: account.uuid
194
+ });
195
+ attachedToClass = opts.attachedToClass;
196
+ }
197
+ else {
198
+ attachedTo = user;
199
+ attachedToClass = 'contact:class:Person';
200
+ }
201
+ const data = {
202
+ title: opts.title,
203
+ description,
204
+ user,
205
+ attachedTo,
206
+ attachedToClass,
207
+ priority,
208
+ visibility,
209
+ doneOn: null,
210
+ rank: '0|aaaaa:'
211
+ };
212
+ if (opts.due)
213
+ data.dueDate = parseDate(opts.due, '--due');
214
+ else
215
+ data.dueDate = null;
216
+ if (opts.dryRun) {
217
+ console.log('would create action:');
218
+ console.log(JSON.stringify({ _class: TODO_CLASS, space: TODO_SPACE, data }, null, 2));
219
+ return;
220
+ }
221
+ const id = await withSpinner('Creating action…', () => client.addCollection(TODO_CLASS, TODO_SPACE, attachedTo, attachedToClass, 'todos', data));
222
+ invalidateIndex(account.uuid, TODO_CLASS);
223
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
224
+ json({ _id: id, ...data });
225
+ return;
226
+ }
227
+ success(`created action`, opts.title, id);
228
+ }
229
+ finally {
230
+ await client.close();
231
+ }
232
+ }
233
+ export async function updateAction(ref, opts) {
234
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
235
+ try {
236
+ const account = await client.getAccount();
237
+ const id = await resolveRef(ref, {
238
+ client,
239
+ classId: TODO_CLASS,
240
+ workspaceId: account.uuid
241
+ });
242
+ const todo = await client.findOne(TODO_CLASS, { _id: id });
243
+ if (!todo)
244
+ throw new CliError(ExitCode.NotFound, `action ${ref} not found`);
245
+ const ops = {};
246
+ if (opts.title)
247
+ ops.title = opts.title;
248
+ const body = await readBodyText({ body: opts.body, bodyFile: opts.bodyFile });
249
+ if (body !== undefined)
250
+ ops.description = body;
251
+ else if (opts.description !== undefined)
252
+ ops.description = opts.description ? opts.description : '';
253
+ if (opts.due)
254
+ ops.dueDate = parseDate(opts.due, '--due');
255
+ if (opts.priority) {
256
+ if (!TODO_PRIORITIES.has(opts.priority)) {
257
+ throw new CliError(ExitCode.Validation, `invalid --priority: ${opts.priority}`);
258
+ }
259
+ ops.priority = opts.priority;
260
+ }
261
+ if (opts.visibility) {
262
+ if (!TODO_VISIBILITIES.has(opts.visibility)) {
263
+ throw new CliError(ExitCode.Validation, `invalid --visibility: ${opts.visibility}`);
264
+ }
265
+ ops.visibility = opts.visibility;
266
+ }
267
+ if (opts.owner)
268
+ ops.user = await resolveEmployeeId(client, opts.owner);
269
+ if (Object.keys(ops).length === 0) {
270
+ throw new CliError(ExitCode.Validation, 'nothing to update', 'pass --title, --description, --due, --priority, --visibility, or --owner');
271
+ }
272
+ if (opts.dryRun) {
273
+ console.log(`would update action ${id}:`);
274
+ console.log(JSON.stringify({ _class: TODO_CLASS, objectId: id, ops }, null, 2));
275
+ return;
276
+ }
277
+ // ToDo is an AttachedDoc — update via updateCollection on the parent's
278
+ // 'todos' collection.
279
+ await withSpinner('Updating…', () => client.updateCollection(TODO_CLASS, todo.space, id, todo.attachedTo, (todo.attachedToClass ?? 'contact:class:Person'), todo.collection ?? 'todos', ops), opts);
280
+ updated(`updated action`, id);
281
+ }
282
+ finally {
283
+ await client.close();
284
+ }
285
+ }
286
+ // ---- complete / reopen ----
287
+ export async function completeAction(ref, opts = {}) {
288
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
289
+ try {
290
+ const account = await client.getAccount();
291
+ const id = await resolveRef(ref, {
292
+ client,
293
+ classId: TODO_CLASS,
294
+ workspaceId: account.uuid
295
+ });
296
+ const todo = await client.findOne(TODO_CLASS, { _id: id });
297
+ if (!todo)
298
+ throw new CliError(ExitCode.NotFound, `action ${ref} not found`);
299
+ if (opts.dryRun) {
300
+ console.log(`would complete action ${id} (set doneOn=now)`);
301
+ return;
302
+ }
303
+ await withSpinner('Completing…', () => client.updateCollection(TODO_CLASS, todo.space, id, todo.attachedTo, (todo.attachedToClass ?? 'contact:class:Person'), todo.collection ?? 'todos', { doneOn: Date.now() }), opts);
304
+ console.log(`completed action: ${id}`);
305
+ }
306
+ finally {
307
+ await client.close();
308
+ }
309
+ }
310
+ export async function reopenAction(ref, opts = {}) {
311
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
312
+ try {
313
+ const account = await client.getAccount();
314
+ const id = await resolveRef(ref, {
315
+ client,
316
+ classId: TODO_CLASS,
317
+ workspaceId: account.uuid
318
+ });
319
+ const todo = await client.findOne(TODO_CLASS, { _id: id });
320
+ if (!todo)
321
+ throw new CliError(ExitCode.NotFound, `action ${ref} not found`);
322
+ if (opts.dryRun) {
323
+ console.log(`would reopen action ${id} (clear doneOn)`);
324
+ return;
325
+ }
326
+ await withSpinner('Reopening…', () => client.updateCollection(TODO_CLASS, todo.space, id, todo.attachedTo, (todo.attachedToClass ?? 'contact:class:Person'), todo.collection ?? 'todos', { doneOn: null }), opts);
327
+ console.log(`reopened action: ${id}`);
328
+ }
329
+ finally {
330
+ await client.close();
331
+ }
332
+ }
333
+ // ---- delete ----
334
+ export async function deleteActions(refs, opts = {}) {
335
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
336
+ try {
337
+ const account = await client.getAccount();
338
+ const ids = await resolveRefs(refs, {
339
+ client,
340
+ classId: TODO_CLASS,
341
+ workspaceId: account.uuid
342
+ });
343
+ if (!opts.yes && ids.length > 1)
344
+ throw new CliError(ExitCode.Validation, `destructive: deleting ${refs.length} actions requires --yes`, 're-run with --yes to confirm');
345
+ let deleted = 0, skipped = 0;
346
+ for (const id of ids) {
347
+ const todo = await client.findOne(TODO_CLASS, { _id: id });
348
+ if (!todo) {
349
+ skipped++;
350
+ continue;
351
+ }
352
+ try {
353
+ await client.removeCollection(TODO_CLASS, todo.space, id, todo.attachedTo, (todo.attachedToClass ?? 'contact:class:Person'), todo.collection ?? 'todos');
354
+ deleted++;
355
+ }
356
+ catch (e) {
357
+ console.error(`failed to delete ${id}: ${e.message}`);
358
+ skipped++;
359
+ }
360
+ }
361
+ bulkRemoved(deleted, skipped);
362
+ }
363
+ finally {
364
+ await client.close();
365
+ }
366
+ }
367
+ export async function scheduleAction(ref, opts) {
368
+ if (!opts.start)
369
+ throw new CliError(ExitCode.Validation, 'missing --start (ISO)');
370
+ if (!opts.duration)
371
+ throw new CliError(ExitCode.Validation, 'missing --duration <minutes>');
372
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
373
+ try {
374
+ const account = await client.getAccount();
375
+ const todoId = await resolveRef(ref, {
376
+ client,
377
+ classId: TODO_CLASS,
378
+ workspaceId: account.uuid
379
+ });
380
+ const todo = await client.findOne(TODO_CLASS, { _id: todoId });
381
+ if (!todo)
382
+ throw new CliError(ExitCode.NotFound, `action ${ref} not found`);
383
+ const startMs = parseDate(opts.start, '--start');
384
+ const dueMs = startMs + opts.duration * 60 * 1000;
385
+ const data = {
386
+ title: todo.title,
387
+ date: startMs,
388
+ dueDate: dueMs,
389
+ allDay: !!opts.allDay,
390
+ calendar: todo.user,
391
+ eventId: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,
392
+ access: 'owner',
393
+ visibility: todo.visibility ?? 'public',
394
+ blockTime: !opts.allDay,
395
+ user: account.primarySocialId
396
+ };
397
+ if (opts.dryRun) {
398
+ console.log('would create work-slot:');
399
+ console.log(JSON.stringify({ _class: WORKSLOT_CLASS, space: CALENDAR_SPACE, attachedTo: todoId, attachedToClass: TODO_CLASS, collection: 'workslots', data }, null, 2));
400
+ return;
401
+ }
402
+ const id = await withSpinner('Scheduling…', () => client.addCollection(WORKSLOT_CLASS, CALENDAR_SPACE, todoId, TODO_CLASS, 'workslots', data), opts);
403
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
404
+ json({ _id: id, attachedTo: todoId, ...data });
405
+ return;
406
+ }
407
+ console.log(`scheduled: ${id}`);
408
+ }
409
+ finally {
410
+ await client.close();
411
+ }
412
+ }
413
+ export async function unscheduleAction(ref, opts = {}) {
414
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
415
+ try {
416
+ const account = await client.getAccount();
417
+ const todoId = await resolveRef(ref, {
418
+ client,
419
+ classId: TODO_CLASS,
420
+ workspaceId: account.uuid
421
+ });
422
+ const todo = await client.findOne(TODO_CLASS, { _id: todoId });
423
+ if (!todo)
424
+ throw new CliError(ExitCode.NotFound, `action ${ref} not found`);
425
+ let slots;
426
+ if (opts.slotId) {
427
+ const s = await client.findOne(WORKSLOT_CLASS, { _id: opts.slotId });
428
+ slots = s ? [s] : [];
429
+ }
430
+ else {
431
+ slots = (await client.findAll(WORKSLOT_CLASS, { attachedTo: todoId }));
432
+ }
433
+ if (slots.length === 0) {
434
+ console.log('(no work-slots attached)');
435
+ return;
436
+ }
437
+ if (!opts.yes && slots.length > 1) {
438
+ // CLI-17: warning-and-proceed silently removed all slots. Throw so the
439
+ // user must explicitly confirm with --yes.
440
+ throw new CliError(ExitCode.Validation, `destructive: unscheduling ${slots.length} work-slots requires --yes`, 're-run with --yes to confirm');
441
+ }
442
+ let removed = 0, skipped = 0;
443
+ for (const s of slots) {
444
+ if (opts.dryRun) {
445
+ console.log(`would unschedule ${s._id}`);
446
+ continue;
447
+ }
448
+ try {
449
+ await client.removeCollection(WORKSLOT_CLASS, s.space, s._id, todoId, TODO_CLASS, s.collection ?? 'workslots');
450
+ removed++;
451
+ }
452
+ catch (e) {
453
+ console.error(`failed to remove ${s._id}: ${e.message}`);
454
+ skipped++;
455
+ }
456
+ }
457
+ console.log(`unscheduled: ${removed}, skipped: ${skipped}`);
458
+ }
459
+ finally {
460
+ await client.close();
461
+ }
462
+ }
463
+ //# sourceMappingURL=todo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo.js","sourceRoot":"","sources":["../../src/resources/todo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ import { CLASS } from '../transport/identifiers.js';
2
+ import { connectCli, connectAccountCli } from '../transport/sdk.js';
3
+ import { resolveRef } from '../transport/ref-resolver.js';
4
+ import { shouldJson, json, kv } from '../output/format.js';
5
+ import { withSpinner } from '../output/progress.js';
6
+ import { CliError, ExitCode } from '../output/errors.js';
7
+ import { accountClient, resolveToken } from '../auth/client.js';
8
+ import { readEnv } from '../auth/env.js';
9
+ export async function getUser(opts = {}) {
10
+ if (opts.ref) {
11
+ return getUserByRef(opts.ref, opts);
12
+ }
13
+ // Default: current logged-in user. AccountClient's getPerson() works with the
14
+ // workspace-scoped token; getPersonInfo requires higher permissions.
15
+ const ac = await connectAccountCli({ url: opts.url });
16
+ const socialIds = await withSpinner('Loading account…', () => ac.getSocialIds(false), opts);
17
+ const primary = socialIds.find((s) => s.isPrimary) ?? socialIds[0];
18
+ const person = await withSpinner('Fetching person…', () => ac.getPerson(), opts);
19
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
20
+ json(person);
21
+ return;
22
+ }
23
+ const p = person;
24
+ kv([
25
+ ['Name', [p.firstName, p.lastName].filter(Boolean).join(' ') || p.name || '—'],
26
+ ['Email', primary?.value ?? '—'],
27
+ ['UUID', p.uuid ?? '—']
28
+ ]);
29
+ }
30
+ async function getUserByRef(ref, opts) {
31
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
32
+ try {
33
+ const account = await client.getAccount();
34
+ const id = await resolveRef(ref, {
35
+ client,
36
+ classId: CLASS.Person,
37
+ workspaceId: account.uuid
38
+ });
39
+ const person = await client.findOne(CLASS.Person, { _id: id });
40
+ if (!person)
41
+ throw new CliError(ExitCode.NotFound, `person ${ref} not found`);
42
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
43
+ json(person);
44
+ return;
45
+ }
46
+ kv([
47
+ ['Name', person.name],
48
+ ['UUID', person._id],
49
+ ['City', person.city ?? '—'],
50
+ ['Country', person.country ?? '—']
51
+ ]);
52
+ }
53
+ finally {
54
+ await client.close();
55
+ }
56
+ }
57
+ export async function updateUser(opts) {
58
+ if (!opts.name && !opts.bio && !opts.city && !opts.country) {
59
+ throw new CliError(ExitCode.Validation, 'nothing to update', 'pass --name, --bio, --city, or --country');
60
+ }
61
+ const ac = await connectAccountCli({ url: opts.url });
62
+ const person = (await withSpinner('Fetching person…', () => ac.getPerson(), opts));
63
+ const personUuid = person?.uuid ?? person?._id;
64
+ if (!personUuid)
65
+ throw new CliError(ExitCode.NotFound, 'current person not found');
66
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
67
+ try {
68
+ const existing = await client.findOne(CLASS.Person, { _id: personUuid });
69
+ if (!existing) {
70
+ throw new CliError(ExitCode.NotFound, `person doc ${personUuid} not present in workspace`, 'hint: this command updates the contact:class:Person record; some workspaces use a separate profile');
71
+ }
72
+ const ops = {};
73
+ if (opts.name)
74
+ ops.name = opts.name;
75
+ if (opts.bio !== undefined)
76
+ ops.bio = opts.bio;
77
+ if (opts.city !== undefined)
78
+ ops.city = opts.city;
79
+ if (opts.country !== undefined)
80
+ ops.country = opts.country;
81
+ if (opts.dryRun) {
82
+ console.log('would update person:');
83
+ console.log(JSON.stringify({ _class: CLASS.Person, objectId: existing._id, ops }, null, 2));
84
+ return;
85
+ }
86
+ await withSpinner('Updating profile…', () => client.updateDoc(CLASS.Person, existing.space, existing._id, ops), opts);
87
+ console.log('updated profile');
88
+ }
89
+ finally {
90
+ await client.close();
91
+ }
92
+ }
93
+ export async function findUser(email, opts = {}) {
94
+ // Try account-level findPersonBySocialKey first (works after Fix #1).
95
+ // Fall back to workspace-local Person scan on Forbidden / error.
96
+ const env = readEnv();
97
+ const url = opts.url ?? env.url;
98
+ try {
99
+ const token = await resolveToken({ email: env.email, url: opts.url });
100
+ const acc = await accountClient(url, token);
101
+ const result = await withSpinner(`Looking up ${email} (account)…`, () => acc.findPersonBySocialKey(email, false), opts);
102
+ if (result?.personUuid !== undefined) {
103
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
104
+ json({ email, personUuid: result.personUuid, source: 'account' });
105
+ return;
106
+ }
107
+ console.log(`${email}\t${result.personUuid}`);
108
+ return;
109
+ }
110
+ }
111
+ catch {
112
+ // fall through to workspace scan
113
+ }
114
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
115
+ try {
116
+ const persons = (await withSpinner(`Looking up ${email} (workspace)…`, () => client.findAll('contact:class:Person', {}, { limit: 200 }), opts));
117
+ const lower = email.toLowerCase();
118
+ const hit = persons.find((p) => p.name?.toLowerCase() === lower || (p.name ?? '').toLowerCase().includes(lower));
119
+ if (!hit)
120
+ throw new CliError(ExitCode.NotFound, `no person matching ${email} in this workspace`);
121
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
122
+ json({ email, personId: hit._id, name: hit.name, source: 'workspace' });
123
+ return;
124
+ }
125
+ console.log(`${email}\t${hit._id}`);
126
+ }
127
+ finally {
128
+ await client.close();
129
+ }
130
+ }
131
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/resources/user.ts"],"names":[],"mappings":"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"}