@rulemetric/cli 0.5.1 → 0.5.3

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 (60) hide show
  1. package/dist/{chunk-RYMK7FQL.js → chunk-BCIUSUEV.js} +5 -5
  2. package/dist/{chunk-LJ5OT5XN.js → chunk-CROYS75W.js} +4 -4
  3. package/dist/{chunk-54IODRPZ.js → chunk-CXWY5XKD.js} +15 -15
  4. package/dist/{chunk-K3BFZ7KG.js → chunk-E3BIT53W.js} +1 -1
  5. package/dist/chunk-E3BIT53W.js.map +7 -0
  6. package/dist/{chunk-46LMTDRE.js → chunk-ER5DPPHB.js} +2 -2
  7. package/dist/{chunk-4QGATD5Y.js → chunk-F5N6CLJJ.js} +1 -1
  8. package/dist/{chunk-4QGATD5Y.js.map → chunk-F5N6CLJJ.js.map} +2 -2
  9. package/dist/{chunk-I4GHR6CY.js → chunk-H3C6EGR2.js} +5 -5
  10. package/dist/{chunk-OWUS3HMA.js → chunk-IPOO4IGF.js} +3 -3
  11. package/dist/{chunk-F5DPTXRC.js → chunk-QNSVCSHG.js} +403 -418
  12. package/dist/chunk-QNSVCSHG.js.map +7 -0
  13. package/dist/{chunk-PHIAFGQ2.js → chunk-T76YQCKX.js} +6 -6
  14. package/dist/{chunk-IKEI4KNV.js → chunk-VCG4Q53B.js} +3 -3
  15. package/dist/{chunk-VBOTWXJW.js → chunk-WLFX4PYR.js} +6 -6
  16. package/dist/{chunk-FUS5C4SB.js → chunk-Y4BJXXYV.js} +2 -2
  17. package/dist/commands/auth/create-key.js +3 -1
  18. package/dist/commands/auth/create-key.js.map +2 -2
  19. package/dist/commands/evals/agent.js +18 -21
  20. package/dist/commands/evals/agent.js.map +4 -4
  21. package/dist/commands/research/backfill.js +3 -3
  22. package/dist/commands/research/tail-transcript.js +3 -3
  23. package/dist/commands/service/install.js +5 -0
  24. package/dist/commands/service/install.js.map +2 -2
  25. package/dist/dashboard/Dashboard.js +13 -13
  26. package/dist/dashboard/data.js +2 -2
  27. package/dist/dashboard/launcher/LauncherOverlay.js +3 -3
  28. package/dist/{dist-NEECHU47.js → dist-UNYP5PJR.js} +2 -2
  29. package/dist/lib/agent-loop.js +14 -14
  30. package/dist/lib/handlers/cron-suggest-instructions.js +3 -3
  31. package/dist/lib/handlers/process-announcement.js +3 -3
  32. package/dist/lib/handlers/process-changelog.js +3 -3
  33. package/dist/lib/handlers/process-launch.js +3 -3
  34. package/dist/lib/handlers/process-run-cleanup.js +4 -4
  35. package/dist/lib/handlers/process-session-goal.js +2 -2
  36. package/dist/lib/manual-tasks.js +6 -6
  37. package/dist/lib/worktree.js +2 -2
  38. package/oclif.manifest.json +1 -40
  39. package/package.json +4 -4
  40. package/dist/chunk-F5DPTXRC.js.map +0 -7
  41. package/dist/chunk-K3BFZ7KG.js.map +0 -7
  42. package/dist/commands/signals/report.js +0 -43
  43. package/dist/commands/signals/report.js.map +0 -7
  44. package/dist/lib/handlers/cron-close-stale-sessions.js +0 -19
  45. package/dist/lib/handlers/cron-close-stale-sessions.js.map +0 -7
  46. package/dist/lib/handlers/cron-data-integrity-audit.js +0 -22
  47. package/dist/lib/handlers/cron-data-integrity-audit.js.map +0 -7
  48. package/dist/lib/provider-aggregator.js +0 -59
  49. package/dist/lib/provider-aggregator.js.map +0 -7
  50. /package/dist/{chunk-RYMK7FQL.js.map → chunk-BCIUSUEV.js.map} +0 -0
  51. /package/dist/{chunk-LJ5OT5XN.js.map → chunk-CROYS75W.js.map} +0 -0
  52. /package/dist/{chunk-54IODRPZ.js.map → chunk-CXWY5XKD.js.map} +0 -0
  53. /package/dist/{chunk-46LMTDRE.js.map → chunk-ER5DPPHB.js.map} +0 -0
  54. /package/dist/{chunk-I4GHR6CY.js.map → chunk-H3C6EGR2.js.map} +0 -0
  55. /package/dist/{chunk-OWUS3HMA.js.map → chunk-IPOO4IGF.js.map} +0 -0
  56. /package/dist/{chunk-PHIAFGQ2.js.map → chunk-T76YQCKX.js.map} +0 -0
  57. /package/dist/{chunk-IKEI4KNV.js.map → chunk-VCG4Q53B.js.map} +0 -0
  58. /package/dist/{chunk-VBOTWXJW.js.map → chunk-WLFX4PYR.js.map} +0 -0
  59. /package/dist/{chunk-FUS5C4SB.js.map → chunk-Y4BJXXYV.js.map} +0 -0
  60. /package/dist/{dist-NEECHU47.js.map → dist-UNYP5PJR.js.map} +0 -0
@@ -1,22 +0,0 @@
1
- import {
2
- apiPost
3
- } from "../../chunk-CWFVBGX2.js";
4
- import "../../chunk-W2YERO7E.js";
5
- import "../../chunk-NSBPE2FW.js";
6
-
7
- // src/lib/handlers/cron-data-integrity-audit.ts
8
- var RECIPIENT_USER_ID = process.env.RULEMETRIC_AUDIT_NOTIFY_USER_ID ?? process.env.RULEMETRIC_USER_ID ?? null;
9
- var cronDataIntegrityAudit = async (_payload, helpers) => {
10
- const audit = await apiPost(
11
- "/api/superadmin/data-integrity-audit",
12
- RECIPIENT_USER_ID ? { notifyUserId: RECIPIENT_USER_ID } : {}
13
- );
14
- const summary = audit.findings.length ? audit.findings.map((f) => `${f.label}: ${f.count}`).join("; ") : "all checks passed";
15
- helpers.logger.info(
16
- `Data integrity audit (${audit.generatedAt}): ${summary}` + (audit.notificationWritten ? " [notification written]" : "")
17
- );
18
- };
19
- export {
20
- cronDataIntegrityAudit
21
- };
22
- //# sourceMappingURL=cron-data-integrity-audit.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/lib/handlers/cron-data-integrity-audit.ts"],
4
- "sourcesContent": ["import type { JobHelpers } from '../job-helpers.js';\nimport { apiPost } from '../api-client.js';\n\ninterface AuditFinding {\n key: string;\n label: string;\n severity: 'high' | 'medium' | 'info';\n count: number;\n}\n\ninterface AuditResponse {\n generatedAt: string;\n totals: Record<string, number>;\n findings: AuditFinding[];\n hasIssues: boolean;\n notificationWritten: boolean;\n}\n\n// The notification recipient. The cron worker has no caller context, so we\n// notify the worker's own user (the API key owner \u2014 also the platform's\n// superadmin). Override via env if you ever want a dedicated audit account.\nconst RECIPIENT_USER_ID =\n process.env.RULEMETRIC_AUDIT_NOTIFY_USER_ID ??\n process.env.RULEMETRIC_USER_ID ??\n null;\n\nexport const cronDataIntegrityAudit = async (_payload: unknown, helpers: JobHelpers): Promise<void> => {\n const audit = await apiPost<AuditResponse>(\n '/api/superadmin/data-integrity-audit',\n RECIPIENT_USER_ID ? { notifyUserId: RECIPIENT_USER_ID } : {},\n );\n\n const summary = audit.findings.length\n ? audit.findings.map((f) => `${f.label}: ${f.count}`).join('; ')\n : 'all checks passed';\n helpers.logger.info(\n `Data integrity audit (${audit.generatedAt}): ${summary}` +\n (audit.notificationWritten ? ' [notification written]' : ''),\n );\n};\n"],
5
- "mappings": ";;;;;;;AAqBA,IAAM,oBACJ,QAAQ,IAAI,mCACZ,QAAQ,IAAI,sBACZ;AAEK,IAAM,yBAAyB,OAAO,UAAmB,YAAuC;AACrG,QAAM,QAAQ,MAAM;AAAA,IAClB;AAAA,IACA,oBAAoB,EAAE,cAAc,kBAAkB,IAAI,CAAC;AAAA,EAC7D;AAEA,QAAM,UAAU,MAAM,SAAS,SAC3B,MAAM,SAAS,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,IAAI,IAC7D;AACJ,UAAQ,OAAO;AAAA,IACb,yBAAyB,MAAM,WAAW,MAAM,OAAO,MACpD,MAAM,sBAAsB,4BAA4B;AAAA,EAC7D;AACF;",
6
- "names": []
7
- }
@@ -1,59 +0,0 @@
1
- import "../chunk-NSBPE2FW.js";
2
-
3
- // src/lib/provider-aggregator.ts
4
- function aggregateProviderCalls(calls) {
5
- const toolCounts = {};
6
- const modelsUsed = {};
7
- let userMessageCount = 0;
8
- let inputTokens = 0;
9
- let outputTokens = 0;
10
- let cacheRead = 0;
11
- let cacheWrite = 0;
12
- let reasoning = 0;
13
- let firstPrompt = "";
14
- for (const call of calls) {
15
- inputTokens += call.inputTokens;
16
- outputTokens += call.outputTokens;
17
- cacheRead += call.cacheReadInputTokens;
18
- cacheWrite += call.cacheCreationInputTokens;
19
- reasoning += call.reasoningTokens;
20
- for (const tool of call.tools) {
21
- toolCounts[tool] = (toolCounts[tool] || 0) + 1;
22
- }
23
- modelsUsed[call.model] = (modelsUsed[call.model] || 0) + 1;
24
- if (call.userMessage) {
25
- userMessageCount++;
26
- if (!firstPrompt) firstPrompt = call.userMessage;
27
- }
28
- }
29
- const timestamps = calls.map((c) => new Date(c.timestamp).getTime()).filter((t) => !isNaN(t)).sort((a, b) => a - b);
30
- const durationMinutes = timestamps.length >= 2 ? Math.round((timestamps[timestamps.length - 1] - timestamps[0]) / 6e4) : 0;
31
- return {
32
- duration_minutes: durationMinutes,
33
- user_message_count: userMessageCount,
34
- assistant_message_count: 0,
35
- // Can't reliably distinguish from provider calls
36
- tool_counts: toolCounts,
37
- languages: {},
38
- // Not available from provider data
39
- git_commits: 0,
40
- // Not available from provider data
41
- git_pushes: 0,
42
- user_interruptions: 0,
43
- tool_errors: 0,
44
- lines_added: 0,
45
- lines_removed: 0,
46
- files_modified: 0,
47
- input_tokens: inputTokens,
48
- output_tokens: outputTokens,
49
- cache_read_tokens: cacheRead,
50
- cache_write_tokens: cacheWrite,
51
- reasoning_tokens: reasoning,
52
- models_used: modelsUsed,
53
- first_prompt: firstPrompt
54
- };
55
- }
56
- export {
57
- aggregateProviderCalls
58
- };
59
- //# sourceMappingURL=provider-aggregator.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/lib/provider-aggregator.ts"],
4
- "sourcesContent": ["import type { ParsedProviderCall } from '@rulemetric/session/providers';\n\nexport interface AggregatedSessionMeta {\n duration_minutes: number;\n user_message_count: number;\n assistant_message_count: number;\n tool_counts: Record<string, number>;\n languages: Record<string, number>;\n git_commits: number;\n git_pushes: number;\n user_interruptions: number;\n tool_errors: number;\n lines_added: number;\n lines_removed: number;\n files_modified: number;\n input_tokens: number;\n output_tokens: number;\n cache_read_tokens: number;\n cache_write_tokens: number;\n reasoning_tokens: number;\n models_used: Record<string, number>;\n first_prompt: string;\n}\n\nexport function aggregateProviderCalls(calls: ParsedProviderCall[]): AggregatedSessionMeta {\n const toolCounts: Record<string, number> = {};\n const modelsUsed: Record<string, number> = {};\n let userMessageCount = 0;\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheRead = 0;\n let cacheWrite = 0;\n let reasoning = 0;\n let firstPrompt = '';\n\n for (const call of calls) {\n inputTokens += call.inputTokens;\n outputTokens += call.outputTokens;\n cacheRead += call.cacheReadInputTokens;\n cacheWrite += call.cacheCreationInputTokens;\n reasoning += call.reasoningTokens;\n\n for (const tool of call.tools) {\n toolCounts[tool] = (toolCounts[tool] || 0) + 1;\n }\n\n modelsUsed[call.model] = (modelsUsed[call.model] || 0) + 1;\n\n if (call.userMessage) {\n userMessageCount++;\n if (!firstPrompt) firstPrompt = call.userMessage;\n }\n }\n\n // Duration from first to last timestamp\n const timestamps = calls\n .map(c => new Date(c.timestamp).getTime())\n .filter(t => !isNaN(t))\n .sort((a, b) => a - b);\n\n const durationMinutes = timestamps.length >= 2\n ? Math.round((timestamps[timestamps.length - 1] - timestamps[0]) / 60000)\n : 0;\n\n return {\n duration_minutes: durationMinutes,\n user_message_count: userMessageCount,\n assistant_message_count: 0, // Can't reliably distinguish from provider calls\n tool_counts: toolCounts,\n languages: {}, // Not available from provider data\n git_commits: 0, // Not available from provider data\n git_pushes: 0,\n user_interruptions: 0,\n tool_errors: 0,\n lines_added: 0,\n lines_removed: 0,\n files_modified: 0,\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n cache_read_tokens: cacheRead,\n cache_write_tokens: cacheWrite,\n reasoning_tokens: reasoning,\n models_used: modelsUsed,\n first_prompt: firstPrompt,\n };\n}\n"],
5
- "mappings": ";;;AAwBO,SAAS,uBAAuB,OAAoD;AACzF,QAAM,aAAqC,CAAC;AAC5C,QAAM,aAAqC,CAAC;AAC5C,MAAI,mBAAmB;AACvB,MAAI,cAAc;AAClB,MAAI,eAAe;AACnB,MAAI,YAAY;AAChB,MAAI,aAAa;AACjB,MAAI,YAAY;AAChB,MAAI,cAAc;AAElB,aAAW,QAAQ,OAAO;AACxB,mBAAe,KAAK;AACpB,oBAAgB,KAAK;AACrB,iBAAa,KAAK;AAClB,kBAAc,KAAK;AACnB,iBAAa,KAAK;AAElB,eAAW,QAAQ,KAAK,OAAO;AAC7B,iBAAW,IAAI,KAAK,WAAW,IAAI,KAAK,KAAK;AAAA,IAC/C;AAEA,eAAW,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,KAAK;AAEzD,QAAI,KAAK,aAAa;AACpB;AACA,UAAI,CAAC,YAAa,eAAc,KAAK;AAAA,IACvC;AAAA,EACF;AAGA,QAAM,aAAa,MAChB,IAAI,OAAK,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EACxC,OAAO,OAAK,CAAC,MAAM,CAAC,CAAC,EACrB,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAEvB,QAAM,kBAAkB,WAAW,UAAU,IACzC,KAAK,OAAO,WAAW,WAAW,SAAS,CAAC,IAAI,WAAW,CAAC,KAAK,GAAK,IACtE;AAEJ,SAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,yBAAyB;AAAA;AAAA,IACzB,aAAa;AAAA,IACb,WAAW,CAAC;AAAA;AAAA,IACZ,aAAa;AAAA;AAAA,IACb,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;",
6
- "names": []
7
- }