@rulemetric/cli 0.5.2 → 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.
- package/dist/{chunk-5ZOLDIZQ.js → chunk-BCIUSUEV.js} +5 -5
- package/dist/{chunk-LJ5OT5XN.js → chunk-CROYS75W.js} +4 -4
- package/dist/{chunk-AOIY5RT6.js → chunk-CXWY5XKD.js} +15 -15
- package/dist/{chunk-K3BFZ7KG.js → chunk-E3BIT53W.js} +1 -1
- package/dist/chunk-E3BIT53W.js.map +7 -0
- package/dist/{chunk-46LMTDRE.js → chunk-ER5DPPHB.js} +2 -2
- package/dist/{chunk-4QGATD5Y.js → chunk-F5N6CLJJ.js} +1 -1
- package/dist/{chunk-4QGATD5Y.js.map → chunk-F5N6CLJJ.js.map} +2 -2
- package/dist/{chunk-7XDWLJJP.js → chunk-H3C6EGR2.js} +5 -5
- package/dist/{chunk-IVOCDHWA.js → chunk-IPOO4IGF.js} +3 -3
- package/dist/{chunk-YQFCUKNI.js → chunk-QNSVCSHG.js} +373 -414
- package/dist/chunk-QNSVCSHG.js.map +7 -0
- package/dist/{chunk-PHIAFGQ2.js → chunk-T76YQCKX.js} +6 -6
- package/dist/{chunk-IKEI4KNV.js → chunk-VCG4Q53B.js} +3 -3
- package/dist/{chunk-DUR54APY.js → chunk-WLFX4PYR.js} +6 -6
- package/dist/{chunk-FUS5C4SB.js → chunk-Y4BJXXYV.js} +2 -2
- package/dist/commands/auth/create-key.js +3 -1
- package/dist/commands/auth/create-key.js.map +2 -2
- package/dist/commands/evals/agent.js +18 -21
- package/dist/commands/evals/agent.js.map +4 -4
- package/dist/commands/research/backfill.js +3 -3
- package/dist/commands/research/tail-transcript.js +3 -3
- package/dist/commands/service/install.js +5 -0
- package/dist/commands/service/install.js.map +2 -2
- package/dist/dashboard/Dashboard.js +13 -13
- package/dist/dashboard/data.js +2 -2
- package/dist/dashboard/launcher/LauncherOverlay.js +3 -3
- package/dist/{dist-NEECHU47.js → dist-UNYP5PJR.js} +2 -2
- package/dist/lib/agent-loop.js +14 -14
- package/dist/lib/handlers/cron-suggest-instructions.js +3 -3
- package/dist/lib/handlers/process-announcement.js +3 -3
- package/dist/lib/handlers/process-changelog.js +3 -3
- package/dist/lib/handlers/process-launch.js +3 -3
- package/dist/lib/handlers/process-run-cleanup.js +4 -4
- package/dist/lib/handlers/process-session-goal.js +2 -2
- package/dist/lib/manual-tasks.js +6 -6
- package/dist/lib/worktree.js +2 -2
- package/oclif.manifest.json +1 -40
- package/package.json +7 -7
- package/dist/chunk-K3BFZ7KG.js.map +0 -7
- package/dist/chunk-YQFCUKNI.js.map +0 -7
- package/dist/commands/signals/report.js +0 -43
- package/dist/commands/signals/report.js.map +0 -7
- package/dist/lib/handlers/cron-close-stale-sessions.js +0 -19
- package/dist/lib/handlers/cron-close-stale-sessions.js.map +0 -7
- package/dist/lib/handlers/cron-data-integrity-audit.js +0 -22
- package/dist/lib/handlers/cron-data-integrity-audit.js.map +0 -7
- package/dist/lib/provider-aggregator.js +0 -59
- package/dist/lib/provider-aggregator.js.map +0 -7
- /package/dist/{chunk-5ZOLDIZQ.js.map → chunk-BCIUSUEV.js.map} +0 -0
- /package/dist/{chunk-LJ5OT5XN.js.map → chunk-CROYS75W.js.map} +0 -0
- /package/dist/{chunk-AOIY5RT6.js.map → chunk-CXWY5XKD.js.map} +0 -0
- /package/dist/{chunk-46LMTDRE.js.map → chunk-ER5DPPHB.js.map} +0 -0
- /package/dist/{chunk-7XDWLJJP.js.map → chunk-H3C6EGR2.js.map} +0 -0
- /package/dist/{chunk-IVOCDHWA.js.map → chunk-IPOO4IGF.js.map} +0 -0
- /package/dist/{chunk-PHIAFGQ2.js.map → chunk-T76YQCKX.js.map} +0 -0
- /package/dist/{chunk-IKEI4KNV.js.map → chunk-VCG4Q53B.js.map} +0 -0
- /package/dist/{chunk-DUR54APY.js.map → chunk-WLFX4PYR.js.map} +0 -0
- /package/dist/{chunk-FUS5C4SB.js.map → chunk-Y4BJXXYV.js.map} +0 -0
- /package/dist/{dist-NEECHU47.js.map → dist-UNYP5PJR.js.map} +0 -0
|
@@ -1,19 +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-close-stale-sessions.ts
|
|
8
|
-
var cronCloseStaleSessions = async (_payload, helpers) => {
|
|
9
|
-
const result = await apiPost("/api/sessions/close-stale", {
|
|
10
|
-
maxAgeHours: 4
|
|
11
|
-
});
|
|
12
|
-
helpers.logger.info(
|
|
13
|
-
`Closed ${result.closed} stale session${result.closed === 1 ? "" : "s"} (>${result.maxAgeHours}h idle)`
|
|
14
|
-
);
|
|
15
|
-
};
|
|
16
|
-
export {
|
|
17
|
-
cronCloseStaleSessions
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=cron-close-stale-sessions.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/lib/handlers/cron-close-stale-sessions.ts"],
|
|
4
|
-
"sourcesContent": ["import type { JobHelpers } from '../job-helpers.js';\nimport { apiPost } from '../api-client.js';\n\ninterface CloseStaleResponse {\n closed: number;\n maxAgeHours: number;\n}\n\nexport const cronCloseStaleSessions = async (_payload: unknown, helpers: JobHelpers): Promise<void> => {\n const result = await apiPost<CloseStaleResponse>('/api/sessions/close-stale', {\n maxAgeHours: 4,\n });\n helpers.logger.info(\n `Closed ${result.closed} stale session${result.closed === 1 ? '' : 's'} (>${result.maxAgeHours}h idle)`,\n );\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAQO,IAAM,yBAAyB,OAAO,UAAmB,YAAuC;AACrG,QAAM,SAAS,MAAM,QAA4B,6BAA6B;AAAA,IAC5E,aAAa;AAAA,EACf,CAAC;AACD,UAAQ,OAAO;AAAA,IACb,UAAU,OAAO,MAAM,iBAAiB,OAAO,WAAW,IAAI,KAAK,GAAG,MAAM,OAAO,WAAW;AAAA,EAChG;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -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
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|