@codemieai/code 0.4.0 → 0.4.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.
Files changed (72) hide show
  1. package/dist/agents/core/metrics/types.d.ts +3 -0
  2. package/dist/agents/core/metrics/types.d.ts.map +1 -1
  3. package/dist/agents/core/session/BaseSessionAdapter.d.ts +3 -0
  4. package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
  5. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  6. package/dist/agents/plugins/claude/claude.session.js +8 -1
  7. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  8. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  9. package/dist/agents/plugins/claude/plugin/skills/msgraph/SKILL.md +95 -8
  10. package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +333 -2
  11. package/dist/agents/plugins/claude/session/claude-named-invocations.d.ts +28 -0
  12. package/dist/agents/plugins/claude/session/claude-named-invocations.d.ts.map +1 -0
  13. package/dist/agents/plugins/claude/session/claude-named-invocations.js +78 -0
  14. package/dist/agents/plugins/claude/session/claude-named-invocations.js.map +1 -0
  15. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
  16. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +10 -1
  17. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
  18. package/dist/cli/commands/analytics/aggregator.d.ts +14 -0
  19. package/dist/cli/commands/analytics/aggregator.d.ts.map +1 -1
  20. package/dist/cli/commands/analytics/aggregator.js +81 -1
  21. package/dist/cli/commands/analytics/aggregator.js.map +1 -1
  22. package/dist/cli/commands/analytics/cost/cost-calculator.d.ts +10 -0
  23. package/dist/cli/commands/analytics/cost/cost-calculator.d.ts.map +1 -1
  24. package/dist/cli/commands/analytics/cost/cost-calculator.js +9 -5
  25. package/dist/cli/commands/analytics/cost/cost-calculator.js.map +1 -1
  26. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts +9 -1
  27. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  28. package/dist/cli/commands/analytics/cost/cost-enricher.js +75 -7
  29. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  30. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts +17 -0
  31. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts.map +1 -0
  32. package/dist/cli/commands/analytics/cost/dispatch-extractor.js +76 -0
  33. package/dist/cli/commands/analytics/cost/dispatch-extractor.js.map +1 -0
  34. package/dist/cli/commands/analytics/cost/types.d.ts +20 -0
  35. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  36. package/dist/cli/commands/analytics/cost/types.js +4 -1
  37. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  38. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +12 -0
  39. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  40. package/dist/cli/commands/analytics/cost/usage-readers.js +38 -0
  41. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  42. package/dist/cli/commands/analytics/exporter.d.ts.map +1 -1
  43. package/dist/cli/commands/analytics/exporter.js +2 -2
  44. package/dist/cli/commands/analytics/exporter.js.map +1 -1
  45. package/dist/cli/commands/analytics/index.d.ts.map +1 -1
  46. package/dist/cli/commands/analytics/index.js +18 -3
  47. package/dist/cli/commands/analytics/index.js.map +1 -1
  48. package/dist/cli/commands/analytics/native-loader.d.ts.map +1 -1
  49. package/dist/cli/commands/analytics/native-loader.js +35 -0
  50. package/dist/cli/commands/analytics/native-loader.js.map +1 -1
  51. package/dist/cli/commands/analytics/report/client/app.js +531 -12
  52. package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
  53. package/dist/cli/commands/analytics/report/payload-builder.js +13 -0
  54. package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
  55. package/dist/cli/commands/analytics/report/report-generator.d.ts +21 -0
  56. package/dist/cli/commands/analytics/report/report-generator.d.ts.map +1 -1
  57. package/dist/cli/commands/analytics/report/report-generator.js +48 -4
  58. package/dist/cli/commands/analytics/report/report-generator.js.map +1 -1
  59. package/dist/cli/commands/analytics/report/template.html +84 -8
  60. package/dist/cli/commands/analytics/report/types.d.ts +13 -2
  61. package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
  62. package/dist/cli/commands/analytics/types.d.ts +18 -0
  63. package/dist/cli/commands/analytics/types.d.ts.map +1 -1
  64. package/dist/migrations/004-skills-assistants-top-level.migration.d.ts.map +1 -1
  65. package/dist/migrations/004-skills-assistants-top-level.migration.js +8 -5
  66. package/dist/migrations/004-skills-assistants-top-level.migration.js.map +1 -1
  67. package/dist/migrations/005-skill-slug-format.migration.d.ts.map +1 -1
  68. package/dist/migrations/005-skill-slug-format.migration.js +14 -11
  69. package/dist/migrations/005-skill-slug-format.migration.js.map +1 -1
  70. package/dist/providers/plugins/sso/session/processors/conversations/constants.d.ts +1 -1
  71. package/dist/providers/plugins/sso/session/processors/conversations/constants.js +1 -1
  72. package/package.json +2 -1
@@ -44,10 +44,12 @@ const SCOPES = [
44
44
  'ChannelMessage.Read.All', 'ChannelMessage.Send',
45
45
  'OnlineMeetingTranscript.Read.All', 'OnlineMeetings.Read',
46
46
  'People.Read', 'Contacts.Read', 'offline_access',
47
- 'Notes.Read', 'Notes.ReadWrite',
47
+ 'Notes.Read', 'Notes.ReadWrite', 'OnlineMeetingAiInsight.Read.All', 'Tasks.ReadWrite',
48
+ 'Group.Read.All',
48
49
  ].join(' ');
49
50
  const CACHE_FILE = path.join(os.homedir(), '.ms_graph_token_cache.json');
50
51
  const GRAPH_BASE = 'https://graph.microsoft.com/v1.0';
52
+ const GRAPH_BETA = 'https://graph.microsoft.com/beta';
51
53
  const TIMEOUT_MS = 5 * 60 * 1000;
52
54
 
53
55
  // ── HTTP Helpers ──────────────────────────────────────────────────────────────
@@ -112,6 +114,21 @@ async function graphPost(endpoint, token, body) {
112
114
  return res.body ? JSON.parse(res.body) : {};
113
115
  }
114
116
 
117
+ async function graphPatch(endpoint, token, body, extraHeaders = {}) {
118
+ const bodyStr = JSON.stringify(body);
119
+ const res = await httpsRequest(`${GRAPH_BASE}${endpoint}`, {
120
+ method: 'PATCH',
121
+ headers: {
122
+ Authorization: `Bearer ${token}`,
123
+ 'Content-Type': 'application/json',
124
+ 'Content-Length': Buffer.byteLength(bodyStr),
125
+ ...extraHeaders,
126
+ },
127
+ }, bodyStr);
128
+ // Planner PATCH returns 204 with an empty body unless Prefer: return=representation is sent.
129
+ return res.body ? JSON.parse(res.body) : {};
130
+ }
131
+
115
132
  function graphDownload(endpoint, token) {
116
133
  function fetch(url, auth) {
117
134
  return new Promise((resolve, reject) => {
@@ -342,6 +359,15 @@ function fmtDt(iso) {
342
359
  catch { return (iso || '').slice(0, 16).replace('T', ' '); }
343
360
  }
344
361
 
362
+ // Formats a Graph dateTimeTimeZone object ({ dateTime, timeZone }). To Do returns a
363
+ // zone-less dateTime, so a UTC value would otherwise be parsed as local time by fmtDt.
364
+ function fmtDtTz(dtz) {
365
+ if (!dtz?.dateTime) return 'N/A';
366
+ let s = dtz.dateTime;
367
+ if (!/[zZ]|[+-]\d{2}:\d{2}$/.test(s) && (dtz.timeZone || '').toUpperCase() === 'UTC') s += 'Z';
368
+ return fmtDt(s);
369
+ }
370
+
345
371
  function fmtSize(n) {
346
372
  if (!n) return '';
347
373
  const units = ['B', 'KB', 'MB', 'GB', 'TB'];
@@ -750,9 +776,135 @@ async function cmdChannels(args) {
750
776
  console.log(' --team-id ID --channel-id ID --send MSG');
751
777
  }
752
778
 
779
+ // ── Meeting AI Insights (Copilot recap) ────────────────────────────────────────
780
+ // Lives in the Microsoft 365 Copilot API namespace and is keyed by user object ID
781
+ // (not /me). The aiInsights navigation is documented under beta, so try v1.0 first
782
+ // and fall back to beta on 404. Requires a Microsoft 365 Copilot license.
783
+ async function getAiInsights(token, oid, meetingId, insightId) {
784
+ const suffix = insightId ? `/${insightId}` : '';
785
+ const ep = `/copilot/users/${oid}/onlineMeetings/${meetingId}/aiInsights${suffix}`;
786
+ const headers = { Authorization: `Bearer ${token}` };
787
+ try {
788
+ const res = await httpsRequest(`${GRAPH_BASE}${ep}`, { headers });
789
+ return JSON.parse(res.body);
790
+ } catch (err) {
791
+ if (err.statusCode === 404) {
792
+ const res = await httpsRequest(`${GRAPH_BETA}${ep}`, { headers });
793
+ return JSON.parse(res.body);
794
+ }
795
+ throw err;
796
+ }
797
+ }
798
+
799
+ async function printMeetingInsights(token, oid, meetingId, args) {
800
+ let list;
801
+ try {
802
+ list = await getAiInsights(token, oid, meetingId);
803
+ } catch (err) {
804
+ if (err.statusCode === 403) {
805
+ console.error('AI insights require a Microsoft 365 Copilot license (and transcription/recording enabled for the meeting).');
806
+ return;
807
+ }
808
+ if (err.statusCode === 404) {
809
+ console.log('No AI insights available for this meeting (none generated yet, or unsupported meeting type).');
810
+ return;
811
+ }
812
+ throw err;
813
+ }
814
+
815
+ const insights = list.value || [];
816
+ if (!insights.length) {
817
+ console.log('No AI insights yet. Insights generate after the meeting ends and can take up to 4 hours.');
818
+ return;
819
+ }
820
+
821
+ const full = [];
822
+ for (const ins of insights) {
823
+ try { full.push(await getAiInsights(token, oid, meetingId, ins.id)); }
824
+ catch { full.push(ins); }
825
+ }
826
+
827
+ if (args.json) { console.log(JSON.stringify(full, null, 2)); return; }
828
+
829
+ for (const ai of full) {
830
+ console.log(`\n${'═'.repeat(60)}`);
831
+ console.log(`AI Insight ${ai.id || ''} (${fmtDt(ai.createdDateTime)})`);
832
+
833
+ const notes = ai.meetingNotes || [];
834
+ if (notes.length) {
835
+ console.log('\nMeeting Notes:');
836
+ for (const n of notes) {
837
+ console.log(` • ${n.title || ''}`);
838
+ if (n.text) console.log(` ${n.text}`);
839
+ for (const sp of n.subpoints || []) {
840
+ console.log(` – ${sp.title || ''}`);
841
+ if (sp.text) console.log(` ${sp.text}`);
842
+ }
843
+ }
844
+ }
845
+
846
+ const items = ai.actionItems || [];
847
+ if (items.length) {
848
+ console.log('\nAction Items:');
849
+ for (const it of items)
850
+ console.log(` ☐ ${it.title || ''}${it.ownerDisplayName ? ` (owner: ${it.ownerDisplayName})` : ''}`);
851
+ }
852
+
853
+ const mentions = ai.viewpoint?.mentionEvents || [];
854
+ if (mentions.length) {
855
+ console.log('\nMentions:');
856
+ for (const m of mentions)
857
+ console.log(` @ ${fmtDt(m.eventDateTime)} ${m.speaker?.user?.displayName || ''}: ${(m.transcriptUtterance || '').slice(0, 200)}`);
858
+ }
859
+ }
860
+ }
861
+
862
+ async function cmdTranscriptsInsights(args, token) {
863
+ const me = await graphGet('/me', token, { $select: 'id' });
864
+ const oid = me.id;
865
+
866
+ // Direct meeting ID short-circuits resolution.
867
+ if (args.meeting) {
868
+ await printMeetingInsights(token, oid, args.meeting, args);
869
+ return;
870
+ }
871
+
872
+ // Otherwise resolve online meetings via the calendar (same approach as --subject).
873
+ const startDate = args.start || new Date(Date.now() - 7 * 86400 * 1000).toISOString().slice(0, 10);
874
+ const endDate = args.end || startDate;
875
+ const data = await graphGet('/me/calendarView', token, {
876
+ startDateTime: startDate + 'T00:00:00Z',
877
+ endDateTime: endDate + 'T23:59:59Z',
878
+ $select: 'subject,start,isOnlineMeeting,onlineMeeting',
879
+ $top: 50,
880
+ $orderby: 'start/dateTime',
881
+ });
882
+ let events = (data.value || []).filter(e => e.isOnlineMeeting && e.onlineMeeting?.joinUrl);
883
+ if (args.subject) {
884
+ const kw = args.subject.toLowerCase();
885
+ events = events.filter(e => (e.subject || '').toLowerCase().includes(kw));
886
+ }
887
+ if (!events.length) { console.log('No matching online meetings found in range.'); return; }
888
+
889
+ for (const e of events) {
890
+ let meetingId = null;
891
+ try {
892
+ const om = await graphGet('/me/onlineMeetings', token, { $filter: `joinWebUrl eq '${e.onlineMeeting.joinUrl}'` });
893
+ meetingId = (om.value || [])[0]?.id || null;
894
+ } catch (err) {
895
+ console.log(`Could not resolve meeting ID for "${e.subject}": ${err.message}`);
896
+ }
897
+ if (!meetingId) continue;
898
+ console.log(`\nMeeting: ${e.subject} (${fmtDt(e.start?.dateTime)}) — ${meetingId}`);
899
+ await printMeetingInsights(token, oid, meetingId, args);
900
+ }
901
+ }
902
+
753
903
  async function cmdTranscripts(args) {
754
904
  const token = await getValidToken();
755
905
 
906
+ if (args.insights) return cmdTranscriptsInsights(args, token);
907
+
756
908
  if (args.list || (!args.meeting && !args.download)) {
757
909
  const startDate = args.start || new Date(Date.now() - 7 * 86400 * 1000).toISOString().slice(0, 10);
758
910
  const endDate = args.end || startDate;
@@ -1161,10 +1313,179 @@ async function cmdOnenote(args) {
1161
1313
  console.log(' --create TITLE --section SECTION_ID [--body CONTENT]');
1162
1314
  }
1163
1315
 
1316
+ async function cmdPlanner(args) {
1317
+ const token = await getValidToken();
1318
+ const limit = parseInt(args.limit) || 20;
1319
+
1320
+ // Plans shared with me (single call; plans live in M365 groups → needs Group.Read.All).
1321
+ // Planner rejects OData params ($top/$select/$filter return HTTP 400) — fetch all, slice client-side.
1322
+ if (args.plans) {
1323
+ const data = await graphGet('/me/planner/plans', token);
1324
+ const plans = (data.value || []).slice(0, limit);
1325
+ if (args.json) { console.log(JSON.stringify(plans, null, 2)); return; }
1326
+ if (!plans.length) { console.log('No plans found.'); return; }
1327
+ console.log(`\n${'Plan ID'.padEnd(30)} Title`);
1328
+ console.log('─'.repeat(70));
1329
+ for (const p of plans)
1330
+ console.log(`${(p.id || '').padEnd(30)} ${p.title || '(untitled)'}`);
1331
+ return;
1332
+ }
1333
+
1334
+ // Tasks assigned to me (returns planId/bucketId only — no names). No OData params on Planner.
1335
+ if (args.myTasks) {
1336
+ const data = await graphGet('/me/planner/tasks', token);
1337
+ const tasks = (data.value || []).slice(0, limit);
1338
+ if (args.json) { console.log(JSON.stringify(tasks, null, 2)); return; }
1339
+ if (!tasks.length) { console.log('No tasks assigned to you.'); return; }
1340
+ console.log(`\n${'Task ID'.padEnd(30)} ${'%'.padEnd(4)} ${'Due'.padEnd(16)} Title`);
1341
+ console.log('─'.repeat(80));
1342
+ for (const t of tasks) {
1343
+ const due = t.dueDateTime ? fmtDt(t.dueDateTime) : '';
1344
+ console.log(`${(t.id || '').padEnd(30)} ${String(t.percentComplete ?? 0).padEnd(4)} ${pad(due, 16)} ${t.title || '(untitled)'}`);
1345
+ }
1346
+ return;
1347
+ }
1348
+
1349
+ // Buckets (columns) in a plan.
1350
+ if (args.planId && args.buckets) {
1351
+ const data = await graphGet(`/planner/plans/${args.planId}/buckets`, token);
1352
+ const buckets = data.value || [];
1353
+ if (args.json) { console.log(JSON.stringify(buckets, null, 2)); return; }
1354
+ if (!buckets.length) { console.log('No buckets found.'); return; }
1355
+ console.log(`\n${'Bucket ID'.padEnd(30)} Name`);
1356
+ console.log('─'.repeat(70));
1357
+ for (const b of buckets)
1358
+ console.log(`${(b.id || '').padEnd(30)} ${b.name || '(unnamed)'}`);
1359
+ return;
1360
+ }
1361
+
1362
+ // Create a task in a plan.
1363
+ if (args.planId && typeof args.create === 'string') {
1364
+ const payload = { planId: args.planId, title: args.create };
1365
+ if (args.bucketId) payload.bucketId = args.bucketId;
1366
+ if (args.due) payload.dueDateTime = `${args.due}T00:00:00Z`;
1367
+ if (args.assign) {
1368
+ payload.assignments = {
1369
+ [args.assign]: { '@odata.type': '#microsoft.graph.plannerAssignment', orderHint: ' !' },
1370
+ };
1371
+ }
1372
+ const task = await graphPost('/planner/tasks', token, payload);
1373
+ console.log(`Task created: ${task.title || args.create}`);
1374
+ console.log(`ID: ${task.id}`);
1375
+ return;
1376
+ }
1377
+
1378
+ // Tasks in a plan. No OData params on Planner.
1379
+ if (args.planId && args.tasks) {
1380
+ const data = await graphGet(`/planner/plans/${args.planId}/tasks`, token);
1381
+ const tasks = (data.value || []).slice(0, limit);
1382
+ if (args.json) { console.log(JSON.stringify(tasks, null, 2)); return; }
1383
+ if (!tasks.length) { console.log('No tasks in this plan.'); return; }
1384
+ console.log(`\n${'Task ID'.padEnd(30)} ${'%'.padEnd(4)} ${'Due'.padEnd(16)} Title`);
1385
+ console.log('─'.repeat(80));
1386
+ for (const t of tasks) {
1387
+ const due = t.dueDateTime ? fmtDt(t.dueDateTime) : '';
1388
+ console.log(`${(t.id || '').padEnd(30)} ${String(t.percentComplete ?? 0).padEnd(4)} ${pad(due, 16)} ${t.title || '(untitled)'}`);
1389
+ }
1390
+ return;
1391
+ }
1392
+
1393
+ // Mark a task complete: read its etag, then PATCH percentComplete to 100.
1394
+ if (typeof args.complete === 'string') {
1395
+ const task = await graphGet(`/planner/tasks/${args.complete}`, token);
1396
+ const etag = task['@odata.etag'];
1397
+ if (!etag) { console.error('Could not read the task etag; cannot update.'); process.exit(1); }
1398
+ await graphPatch(`/planner/tasks/${args.complete}`, token, { percentComplete: 100 }, { 'If-Match': etag });
1399
+ console.log(`Task marked complete: ${task.title || args.complete}`);
1400
+ return;
1401
+ }
1402
+
1403
+ // Single task detail (+ description/checklist from /details).
1404
+ if (args.taskId) {
1405
+ const task = await graphGet(`/planner/tasks/${args.taskId}`, token);
1406
+ let details = {};
1407
+ try { details = await graphGet(`/planner/tasks/${args.taskId}/details`, token); } catch {}
1408
+ if (args.json) { console.log(JSON.stringify({ ...task, details }, null, 2)); return; }
1409
+ console.log(`Title : ${task.title || '(untitled)'}`);
1410
+ console.log(`% Complete : ${task.percentComplete ?? 0}`);
1411
+ console.log(`Due : ${task.dueDateTime ? fmtDt(task.dueDateTime) : 'N/A'}`);
1412
+ console.log(`Bucket ID : ${task.bucketId || 'N/A'}`);
1413
+ console.log(`Plan ID : ${task.planId || 'N/A'}`);
1414
+ if (details.description) console.log(`\nDescription:\n${details.description}`);
1415
+ return;
1416
+ }
1417
+
1418
+ console.log('Planner: --plans | --my-tasks');
1419
+ console.log(' --plan-id ID --tasks | --plan-id ID --buckets');
1420
+ console.log(' --plan-id ID --create "TITLE" [--bucket-id ID] [--due YYYY-MM-DD] [--assign USER_ID]');
1421
+ console.log(' --task-id ID | --complete TASK_ID');
1422
+ }
1423
+
1424
+ async function cmdTodo(args) {
1425
+ const token = await getValidToken();
1426
+ const limit = parseInt(args.limit) || 20;
1427
+
1428
+ if (args.lists) {
1429
+ const data = await graphGet('/me/todo/lists', token, { $top: limit });
1430
+ const lists = data.value || [];
1431
+ if (args.json) { console.log(JSON.stringify(lists, null, 2)); return; }
1432
+ if (!lists.length) { console.log('No task lists found.'); return; }
1433
+ console.log(`\n${'List ID'.padEnd(50)} Name`);
1434
+ console.log('─'.repeat(80));
1435
+ for (const l of lists)
1436
+ console.log(`${(l.id || '').padEnd(50)} ${l.displayName || '(unnamed)'}`);
1437
+ return;
1438
+ }
1439
+
1440
+ if (!args.listId) {
1441
+ console.log('To Do: --lists');
1442
+ console.log(' --list-id ID --tasks');
1443
+ console.log(' --list-id ID --create "TITLE" [--body TEXT] [--due YYYY-MM-DD]');
1444
+ console.log(' --list-id ID --complete TASK_ID');
1445
+ return;
1446
+ }
1447
+
1448
+ // Create a task in a list.
1449
+ if (typeof args.create === 'string') {
1450
+ const payload = { title: args.create };
1451
+ if (args.body) payload.body = { content: args.body, contentType: 'text' };
1452
+ if (args.due) payload.dueDateTime = { dateTime: `${args.due}T00:00:00.000000`, timeZone: 'UTC' };
1453
+ const task = await graphPost(`/me/todo/lists/${args.listId}/tasks`, token, payload);
1454
+ console.log(`Task created: ${task.title || args.create}`);
1455
+ console.log(`ID: ${task.id}`);
1456
+ return;
1457
+ }
1458
+
1459
+ // Mark a task complete (To Do needs no etag).
1460
+ if (typeof args.complete === 'string') {
1461
+ await graphPatch(`/me/todo/lists/${args.listId}/tasks/${args.complete}`, token, { status: 'completed' });
1462
+ console.log(`Task marked complete: ${args.complete}`);
1463
+ return;
1464
+ }
1465
+
1466
+ // Tasks in a list.
1467
+ if (args.tasks) {
1468
+ const data = await graphGet(`/me/todo/lists/${args.listId}/tasks`, token, { $top: limit });
1469
+ const tasks = data.value || [];
1470
+ if (args.json) { console.log(JSON.stringify(tasks, null, 2)); return; }
1471
+ if (!tasks.length) { console.log('No tasks in this list.'); return; }
1472
+ console.log(`\n${'Task ID'.padEnd(50)} ${'Status'.padEnd(12)} Title`);
1473
+ console.log('─'.repeat(80));
1474
+ for (const t of tasks) {
1475
+ const due = t.dueDateTime?.dateTime ? ` (due ${fmtDtTz(t.dueDateTime)})` : '';
1476
+ console.log(`${(t.id || '').padEnd(50)} ${(t.status || '').padEnd(12)} ${t.title || '(untitled)'}${due}`);
1477
+ }
1478
+ return;
1479
+ }
1480
+
1481
+ console.log('To Do: --list-id ID --tasks | --create "TITLE" | --complete TASK_ID');
1482
+ }
1483
+
1164
1484
  // ── CLI Parser ────────────────────────────────────────────────────────────────
1165
1485
  function parseArgs(argv) {
1166
1486
  const BOOL = new Set(['json','unread','sites','chats','teamsList','contacts',
1167
- 'manager','reports','availability','notebooks','list','messages','vtt','help','force']);
1487
+ 'manager','reports','availability','notebooks','list','messages','vtt','help','force',
1488
+ 'plans','buckets','tasks','myTasks','lists','insights']);
1168
1489
  const args = { _: [] };
1169
1490
  let i = 0;
1170
1491
  while (i < argv.length) {
@@ -1216,8 +1537,16 @@ Data:
1216
1537
  onenote [--notebooks] [--sections NOTEBOOK_ID] [--pages SECTION_ID]
1217
1538
  [--read PAGE_ID] [--search QUERY] [--limit N] [--json]
1218
1539
  [--create TITLE --section SECTION_ID [--body CONTENT]]
1540
+ planner [--plans] [--my-tasks]
1541
+ [--plan-id ID --tasks] [--plan-id ID --buckets]
1542
+ [--plan-id ID --create "TITLE" [--bucket-id ID] [--due YYYY-MM-DD] [--assign USER_ID]]
1543
+ [--task-id ID] [--complete TASK_ID] [--json]
1544
+ todo [--lists] [--list-id ID --tasks]
1545
+ [--list-id ID --create "TITLE" [--body TEXT] [--due YYYY-MM-DD]]
1546
+ [--list-id ID --complete TASK_ID] [--json]
1219
1547
  transcripts [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--subject KEYWORD]
1220
1548
  [--meeting ID] [--transcript ID] [--output FILE] [--vtt]
1549
+ [--insights] (AI meeting recap — requires Microsoft 365 Copilot)
1221
1550
 
1222
1551
  Add --json to any command for machine-readable output.
1223
1552
  `);
@@ -1245,6 +1574,8 @@ async function main() {
1245
1574
  people: () => cmdPeople(args),
1246
1575
  org: () => cmdOrg(args),
1247
1576
  onenote: () => cmdOnenote(args),
1577
+ planner: () => cmdPlanner(args),
1578
+ todo: () => cmdTodo(args),
1248
1579
  transcripts: () => cmdTranscripts(args),
1249
1580
  claims: () => cmdClaims(args),
1250
1581
  help: () => { printHelp(); process.exit(0); },
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared Claude named-invocation extraction.
3
+ *
4
+ * Single source of truth for pulling the *names* of invoked skills, agent subtypes, and slash
5
+ * commands out of a flat list of Claude messages. Used by both the live {@link MetricsProcessor}
6
+ * and the session adapter's parse path (`extractMetrics`), so re-parsed (native, untracked)
7
+ * sessions report the same named invocations as live-tracked ones.
8
+ *
9
+ * - Skills: `tool_use` block with `name === 'Skill'` → `input.skill` (e.g. "codemie:msgraph")
10
+ * - Agents: `tool_use` block with `name === 'Agent'` (this CLI) or `'Task'` (standard Claude
11
+ * Code) → `input.subagent_type` (e.g. "Explore", "sdlc-factory:tech-analyst")
12
+ * - Commands: user message whose text carries the Claude CLI slash-command wrapper. A genuine
13
+ * invocation always includes a `<command-message>` sibling alongside `<command-name>`; we
14
+ * require it so documentation/prose that merely mentions `<command-name>` is not miscounted.
15
+ * Command text can be a plain string or a text content block.
16
+ */
17
+ /** Count maps for each named-invocation dimension. Keys are names, values are counts. */
18
+ export interface NamedInvocationCounts {
19
+ skillInvocations: Record<string, number>;
20
+ agentInvocations: Record<string, number>;
21
+ commandInvocations: Record<string, number>;
22
+ }
23
+ /**
24
+ * Extract skill / agent / command name counts from a flat list of Claude messages.
25
+ * Safe against missing or malformed fields — anything that isn't a recognized shape is skipped.
26
+ */
27
+ export declare function extractNamedInvocations(messages: readonly unknown[]): NamedInvocationCounts;
28
+ //# sourceMappingURL=claude-named-invocations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-named-invocations.d.ts","sourceRoot":"","sources":["../../../../../src/agents/plugins/claude/session/claude-named-invocations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,yFAAyF;AACzF,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAmBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,qBAAqB,CAqD3F"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Shared Claude named-invocation extraction.
3
+ *
4
+ * Single source of truth for pulling the *names* of invoked skills, agent subtypes, and slash
5
+ * commands out of a flat list of Claude messages. Used by both the live {@link MetricsProcessor}
6
+ * and the session adapter's parse path (`extractMetrics`), so re-parsed (native, untracked)
7
+ * sessions report the same named invocations as live-tracked ones.
8
+ *
9
+ * - Skills: `tool_use` block with `name === 'Skill'` → `input.skill` (e.g. "codemie:msgraph")
10
+ * - Agents: `tool_use` block with `name === 'Agent'` (this CLI) or `'Task'` (standard Claude
11
+ * Code) → `input.subagent_type` (e.g. "Explore", "sdlc-factory:tech-analyst")
12
+ * - Commands: user message whose text carries the Claude CLI slash-command wrapper. A genuine
13
+ * invocation always includes a `<command-message>` sibling alongside `<command-name>`; we
14
+ * require it so documentation/prose that merely mentions `<command-name>` is not miscounted.
15
+ * Command text can be a plain string or a text content block.
16
+ */
17
+ const COMMAND_TAG = /<command-name>([^<]+)<\/command-name>/g;
18
+ function bump(map, key) {
19
+ map[key] = (map[key] || 0) + 1;
20
+ }
21
+ /**
22
+ * Extract skill / agent / command name counts from a flat list of Claude messages.
23
+ * Safe against missing or malformed fields — anything that isn't a recognized shape is skipped.
24
+ */
25
+ export function extractNamedInvocations(messages) {
26
+ const skillInvocations = {};
27
+ const agentInvocations = {};
28
+ const commandInvocations = {};
29
+ // Count slash commands from a text payload, but only when it carries the CLI's
30
+ // `<command-message>` sibling — that distinguishes a real invocation from prose that
31
+ // merely quotes `<command-name>` (e.g. docs, specs, this very file).
32
+ const scanCommands = (text) => {
33
+ if (!text.includes('<command-message>')) {
34
+ return;
35
+ }
36
+ COMMAND_TAG.lastIndex = 0;
37
+ let match;
38
+ while ((match = COMMAND_TAG.exec(text)) !== null) {
39
+ const cmd = match[1].replace(/^\//, '').trim();
40
+ if (cmd)
41
+ bump(commandInvocations, cmd);
42
+ }
43
+ };
44
+ for (const raw of messages) {
45
+ const msg = raw;
46
+ const content = msg?.message?.content;
47
+ const isUser = msg?.message?.role === 'user';
48
+ // Real slash commands arrive as plain string content (the CLI shape).
49
+ if (typeof content === 'string') {
50
+ if (isUser)
51
+ scanCommands(content);
52
+ continue;
53
+ }
54
+ if (!Array.isArray(content)) {
55
+ continue;
56
+ }
57
+ for (const item of content) {
58
+ if (item?.type === 'tool_use') {
59
+ if (item.name === 'Skill' && typeof item.input?.skill === 'string') {
60
+ const skill = item.input.skill.trim();
61
+ if (skill)
62
+ bump(skillInvocations, skill);
63
+ }
64
+ else if ((item.name === 'Agent' || item.name === 'Task') &&
65
+ typeof item.input?.subagent_type === 'string') {
66
+ const subtype = item.input.subagent_type.trim();
67
+ if (subtype)
68
+ bump(agentInvocations, subtype);
69
+ }
70
+ }
71
+ else if (isUser && item?.type === 'text' && typeof item.text === 'string') {
72
+ scanCommands(item.text);
73
+ }
74
+ }
75
+ }
76
+ return { skillInvocations, agentInvocations, commandInvocations };
77
+ }
78
+ //# sourceMappingURL=claude-named-invocations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-named-invocations.js","sourceRoot":"","sources":["../../../../../src/agents/plugins/claude/session/claude-named-invocations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude.metrics-processor.d.ts","sourceRoot":"","sources":["../../../../../../src/agents/plugins/claude/session/processors/claude.metrics-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAKpF,qBAAa,gBAAiB,YAAW,gBAAgB;IACvD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,QAAQ,KAAK;IAEtB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAIxC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAY5F;;OAEG;YACW,eAAe;IAqE7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiCjC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAuMjC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,qBAAqB;CAS9B"}
1
+ {"version":3,"file":"claude.metrics-processor.d.ts","sourceRoot":"","sources":["../../../../../../src/agents/plugins/claude/session/processors/claude.metrics-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAMpF,qBAAa,gBAAiB,YAAW,gBAAgB;IACvD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,QAAQ,KAAK;IAEtB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAIxC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAY5F;;OAEG;YACW,eAAe;IAqE7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiCjC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgNjC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,qBAAqB;CAS9B"}
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import { logger } from '../../../../../utils/logger.js';
14
14
  import { extractClaudeFileOperation } from '../claude-file-operation.js';
15
+ import { extractNamedInvocations } from '../claude-named-invocations.js';
15
16
  export class MetricsProcessor {
16
17
  name = 'metrics';
17
18
  priority = 1; // Run first
@@ -165,6 +166,10 @@ export class MetricsProcessor {
165
166
  }
166
167
  }
167
168
  }
169
+ // Named invocations (skill/agent/command names) are session-wide: skills/agents come from
170
+ // tool_use input and commands from user-message XML. We extract once via the shared helper
171
+ // and attach to the first delta (the aggregator sums across deltas, so totals are unchanged).
172
+ const sessionNamed = extractNamedInvocations(messages);
168
173
  // Group messages by message.id to handle streaming chunks
169
174
  // Claude streaming creates multiple JSONL entries (thinking, text, tool_use)
170
175
  // for the same API response, each with the same message.id and usage
@@ -249,7 +254,11 @@ export class MetricsProcessor {
249
254
  ...(Object.keys(tools).length > 0 && { tools }),
250
255
  ...(Object.keys(toolStatus).length > 0 && { toolStatus }),
251
256
  ...(completedMsg.message?.model && { models: [completedMsg.message.model] }),
252
- ...(apiErrorMessage && { apiErrorMessage })
257
+ ...(apiErrorMessage && { apiErrorMessage }),
258
+ // Named invocations are session-wide — attach all three to the first delta only.
259
+ ...(deltas.length === 0 && Object.keys(sessionNamed.skillInvocations).length > 0 && { skillInvocations: sessionNamed.skillInvocations }),
260
+ ...(deltas.length === 0 && Object.keys(sessionNamed.agentInvocations).length > 0 && { agentInvocations: sessionNamed.agentInvocations }),
261
+ ...(deltas.length === 0 && Object.keys(sessionNamed.commandInvocations).length > 0 && { commandInvocations: sessionNamed.commandInvocations })
253
262
  };
254
263
  if (fileOperations.length > 0) {
255
264
  delta.fileOperations = fileOperations;
@@ -1 +1 @@
1
- {"version":3,"file":"claude.metrics-processor.js","sourceRoot":"","sources":["../../../../../../src/agents/plugins/claude/session/processors/claude.metrics-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,SAAS,CAAC;IACjB,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY;IAEnC,aAAa,CAAC,OAAsB;QAClC,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAsB,EAAE,OAA0B;QAC9D,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,OAAsB,EACtB,QAA2B;QAE3B,IAAI,CAAC;YACH,4DAA4D;YAC5D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,0CAA0C,CAAC,CAAC;YAClF,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;YACxC,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE1E,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,iCAAiC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC/E,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,wEAAwE;iBAClF,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAClC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,IAAI,EAAE,CACxD,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,YAAY,oBAAoB,CAAC,IAAI,kCAAkC,CAAC,CAAC;YAEnG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,kBAAkB,OAAO,CAAC,QAAQ,CAAC,MAAM,qBAAqB,CAAC,CAAC;YAEzF,4DAA4D;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;YAE7E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;gBACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9F,CAAC;YAED,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kFAAkF,CAAC,CAAC;YAC3H,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEpD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,yBAAyB,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;YAE1E,iDAAiD;YACjD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,aAAa,MAAM,CAAC,MAAM,SAAS;gBAC5C,QAAQ,EAAE;oBACR,gBAAgB,EAAE,MAAM,CAAC,MAAM;oBAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC/B,OAAO,EAAE;4BACP,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;4BACpD,sBAAsB,EAAE,IAAI,CAAC,GAAG,EAAE;4BAClC,WAAW,EAAE,MAAM,CAAC,MAAM;yBAC3B;qBACF,CAAC,CAAC,CAAC,SAAS;iBACd;aACF,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,+BAA+B,EAAE,KAAK,CAAC,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,yBAAyB,CAC/B,OAAsB,EACtB,oBAAiC;QAEjC,MAAM,MAAM,GAA4D,EAAE,CAAC;QAC3E,MAAM,YAAY,GAAG,oBAAoB,CAAC;QAC1C,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAC/C,OAAO,CAAC,QAAiB,EACzB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,EACjB,YAAY,EACZ,mBAAmB,CACpB,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAE3B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAC9C,QAAQ,CAAC,QAAiB,EAC1B,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,EACjB,YAAY,EACZ,mBAAmB,CACpB,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,yBAAyB,CAC/B,QAAe,EACf,SAAiB,EACjB,SAAiB,EACjB,YAAyB,EACzB,mBAAgC;QAEhC,MAAM,MAAM,GAA4D,EAAE,CAAC;QAC3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAe,CAAC;QAE9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,MAAM,cAAc,GAAG,IAAI,GAAG,EAA8C,CAAC;QAC7E,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/D,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACpD,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;4BACnC,OAAO,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI;4BAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;yBAC9B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAe,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;gBAC7C,uDAAuD;gBACvD,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/D,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;wBACvC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;4BACpD,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;wBAC5D,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IACE,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,MAAM;gBAC5B,GAAG,CAAC,IAAI;gBACR,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,cAAc,CAAC,EAChD,CAAC;gBACD,IAAI,WAAW,GAAG,EAAE,CAAC;gBAErB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACvC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;wBACxC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;4BACxC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;4BACzB,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACnD,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;gBACpC,CAAC;gBAED,IAAI,WAAW,EAAE,CAAC;oBAChB,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,6EAA6E;QAC7E,qEAAqE;QACrE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiB,CAAC;QAE/C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;gBACzD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAClC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,aAAa,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,MAAM,YAAY,GAAG,CAAC,QAAe,EAAE,UAAkB,EAAE,EAAE;YAC3D,4BAA4B;YAC5B,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,OAAO;YACT,CAAC;YAED,yFAAyF;YACzF,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,iDAAiD;YACjD,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;oBACxC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;wBACxC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;4BAC/D,kBAAkB,GAAG,IAAI,CAAC;4BAC1B,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,kBAAkB;oBAAE,MAAM;YAChC,CAAC;YAED,IAAI,kBAAkB,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YAED,sCAAsC;YACtC,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,MAAM,UAAU,GAAyD,EAAE,CAAC;YAC5E,MAAM,cAAc,GAAuF,EAAE,CAAC;YAE9G,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;oBACxC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;wBACxC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;4BAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;4BAC5B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BAE7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gCAC1B,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;4BACpD,CAAC;4BAED,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC;4BACjD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gCACvB,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;4BACjC,CAAC;iCAAM,CAAC;gCACN,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;gCAE/B,0BAA0B;gCAC1B,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCACrD,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gCAChF,IAAI,MAAM,EAAE,CAAC;oCACX,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCAC9B,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAElC,MAAM,eAAe,GAAG,YAAY,CAAC,iBAAiB,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;gBAChG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;gBACtC,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,KAAK,GAAqD;gBAC9D,QAAQ;gBACR,SAAS;gBACT,cAAc,EAAE,YAAY,CAAC,SAAS,IAAI,EAAE;gBAC5C,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC7D,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;gBAC/C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;gBACzD,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5E,GAAG,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,CAAC;aAC5C,CAAC;YAEF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAa,CAAC,cAAc,GAAG,cAAc,CAAC;YACjD,CAAC;YAED,qCAAqC;YACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,mBAAmB,CAAC,IAAI,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACrF,MAAM,OAAO,GAA2C,EAAE,CAAC;gBAC3D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,KAAa,CAAC,WAAW,GAAG,OAAO,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,mEAAmE;QACnE,KAAK,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACnE,YAAY,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,GAAQ;QAClC,IAAI,GAAG,EAAE,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAEvC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAE1C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAClE,CAAC;IAEO,qBAAqB,CAAC,GAAQ,EAAE,cAAgC;QACtE,IAAI,GAAG,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;CAEF"}
1
+ {"version":3,"file":"claude.metrics-processor.js","sourceRoot":"","sources":["../../../../../../src/agents/plugins/claude/session/processors/claude.metrics-processor.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,20 @@ export declare class AnalyticsAggregator {
42
42
  * Aggregate tool statistics
43
43
  */
44
44
  private static aggregateTools;
45
+ /**
46
+ * Derive a human-readable session title from the first user prompt found in the deltas.
47
+ * Strips command/system XML wrappers (keeping the command name + args text) so a slash-command
48
+ * session reads like "/pm I have the presentation of PRD" rather than raw markup. Returns ''
49
+ * when no prompt text is present (e.g. native sessions without a captured first message).
50
+ */
51
+ /** Injected boilerplate that is not a real user prompt — skipped when choosing a title. */
52
+ private static readonly TITLE_NOISE;
53
+ private static deriveTitle;
54
+ /**
55
+ * Aggregate named invocations (skill names, agent subtypes, or command names) from deltas.
56
+ * Returns entries sorted by totalCalls descending.
57
+ */
58
+ private static aggregateNamedInvocations;
45
59
  /**
46
60
  * Aggregate language/format statistics
47
61
  */
@@ -1 +1 @@
1
- {"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/analytics/aggregator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAIV,aAAa,EAKd,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAQ;IAE5C;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,WAAW,EAAE,cAAc,EAAE,EAC7B,eAAe,UAAO,EACtB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,aAAa;IAkKhB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IA6NpC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAgLxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA2B9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAqC/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IA2B5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA2B7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;CA2BlC"}
1
+ {"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/analytics/aggregator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAIV,aAAa,EAMd,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAQ;IAE5C;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,WAAW,EAAE,cAAc,EAAE,EAC7B,eAAe,UAAO,EACtB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,aAAa;IAkKhB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAgPpC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAgLxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA2B9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAqC/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IA2B5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA2B7B;;;;;OAKG;IACH,2FAA2F;IAC3F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAIjC;IAEF,OAAO,CAAC,MAAM,CAAC,WAAW;IA2B1B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAuBxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;CA2BlC"}