agentvigil 1.0.8 → 1.0.9

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/commands/daemon.d.ts.map +1 -1
  2. package/dist/commands/daemon.js +3 -0
  3. package/dist/commands/daemon.js.map +1 -1
  4. package/dist/commands/setup.d.ts.map +1 -1
  5. package/dist/commands/setup.js +2 -1
  6. package/dist/commands/setup.js.map +1 -1
  7. package/dist/hooks/hook-handler.d.ts.map +1 -1
  8. package/dist/hooks/hook-handler.js +7 -0
  9. package/dist/hooks/hook-handler.js.map +1 -1
  10. package/dist/index.js +9 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/notifications/mac-notifier.d.ts +11 -0
  13. package/dist/notifications/mac-notifier.d.ts.map +1 -0
  14. package/dist/notifications/mac-notifier.js +28 -0
  15. package/dist/notifications/mac-notifier.js.map +1 -0
  16. package/dist/notifications/ntfy-client.d.ts +2 -0
  17. package/dist/notifications/ntfy-client.d.ts.map +1 -1
  18. package/dist/notifications/ntfy-client.js +10 -0
  19. package/dist/notifications/ntfy-client.js.map +1 -1
  20. package/dist/relay/relay-handler.d.ts.map +1 -1
  21. package/dist/relay/relay-handler.js +3 -0
  22. package/dist/relay/relay-handler.js.map +1 -1
  23. package/dist/sessions/process-detector.d.ts +9 -0
  24. package/dist/sessions/process-detector.d.ts.map +1 -1
  25. package/dist/sessions/process-detector.js +63 -1
  26. package/dist/sessions/process-detector.js.map +1 -1
  27. package/dist/sessions/session-manager.d.ts.map +1 -1
  28. package/dist/sessions/session-manager.js +17 -1
  29. package/dist/sessions/session-manager.js.map +1 -1
  30. package/dist/sessions/token-calculator.d.ts +15 -0
  31. package/dist/sessions/token-calculator.d.ts.map +1 -0
  32. package/dist/sessions/token-calculator.js +94 -0
  33. package/dist/sessions/token-calculator.js.map +1 -0
  34. package/dist/stats/daily-tracker.d.ts +114 -0
  35. package/dist/stats/daily-tracker.d.ts.map +1 -0
  36. package/dist/stats/daily-tracker.js +484 -0
  37. package/dist/stats/daily-tracker.js.map +1 -0
  38. package/dist/stats/session-utils.d.ts +2 -0
  39. package/dist/stats/session-utils.d.ts.map +1 -0
  40. package/dist/stats/session-utils.js +11 -0
  41. package/dist/stats/session-utils.js.map +1 -0
  42. package/dist/stats/summary-formatter.d.ts +67 -0
  43. package/dist/stats/summary-formatter.d.ts.map +1 -0
  44. package/dist/stats/summary-formatter.js +116 -0
  45. package/dist/stats/summary-formatter.js.map +1 -0
  46. package/dist/stats/transcript-sync.d.ts +18 -0
  47. package/dist/stats/transcript-sync.d.ts.map +1 -0
  48. package/dist/stats/transcript-sync.js +143 -0
  49. package/dist/stats/transcript-sync.js.map +1 -0
  50. package/dist/types.d.ts +4 -1
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/utils/config.d.ts +4 -0
  53. package/dist/utils/config.d.ts.map +1 -1
  54. package/dist/utils/config.js +2 -0
  55. package/dist/utils/config.js.map +1 -1
  56. package/dist/utils/prompt.d.ts +3 -0
  57. package/dist/utils/prompt.d.ts.map +1 -0
  58. package/dist/utils/prompt.js +14 -0
  59. package/dist/utils/prompt.js.map +1 -0
  60. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/sessions/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/sessions/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface TokenUsage {
2
+ inputTokens: number;
3
+ outputTokens: number;
4
+ cacheReadTokens: number;
5
+ totalTokens: number;
6
+ estimatedCostUsd: number;
7
+ filesModified: number;
8
+ }
9
+ /**
10
+ * Sums token usage and cost across every assistant turn in a Claude Code
11
+ * transcript, and counts the distinct files touched via Write/Edit/MultiEdit.
12
+ * Returns all-zero usage if the transcript can't be read.
13
+ */
14
+ export declare function calculateTokenUsage(transcriptPath: string): Promise<TokenUsage>;
15
+ //# sourceMappingURL=token-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-calculator.d.ts","sourceRoot":"","sources":["../../src/sessions/token-calculator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AA4BD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAyDrF"}
@@ -0,0 +1,94 @@
1
+ import fs from 'node:fs/promises';
2
+ const ZERO_USAGE = {
3
+ inputTokens: 0,
4
+ outputTokens: 0,
5
+ cacheReadTokens: 0,
6
+ totalTokens: 0,
7
+ estimatedCostUsd: 0,
8
+ filesModified: 0,
9
+ };
10
+ // Per-million-token USD rates. Matched by substring against the transcript's
11
+ // `message.model` (e.g. "claude-sonnet-4-6"). These are estimates for the
12
+ // daily summary and may drift from Anthropic's published pricing over time.
13
+ const PRICING = {
14
+ opus: { input: 15, output: 75, cacheWrite: 18.75, cacheRead: 1.5 },
15
+ sonnet: { input: 3, output: 15, cacheWrite: 3.75, cacheRead: 0.3 },
16
+ haiku: { input: 1, output: 5, cacheWrite: 1.25, cacheRead: 0.1 },
17
+ };
18
+ const DEFAULT_PRICING = PRICING.sonnet;
19
+ const FILE_TOOLS = new Set(['Write', 'Edit', 'MultiEdit']);
20
+ function pricingForModel(model) {
21
+ const key = Object.keys(PRICING).find((k) => model.toLowerCase().includes(k));
22
+ return key ? PRICING[key] : DEFAULT_PRICING;
23
+ }
24
+ /**
25
+ * Sums token usage and cost across every assistant turn in a Claude Code
26
+ * transcript, and counts the distinct files touched via Write/Edit/MultiEdit.
27
+ * Returns all-zero usage if the transcript can't be read.
28
+ */
29
+ export async function calculateTokenUsage(transcriptPath) {
30
+ if (!transcriptPath)
31
+ return { ...ZERO_USAGE };
32
+ try {
33
+ const content = await fs.readFile(transcriptPath, 'utf-8');
34
+ const lines = content.trim().split('\n').filter((l) => l.trim());
35
+ let inputTokens = 0;
36
+ let outputTokens = 0;
37
+ let cacheReadTokens = 0;
38
+ let estimatedCostUsd = 0;
39
+ const filesTouched = new Set();
40
+ for (const line of lines) {
41
+ let entry;
42
+ try {
43
+ entry = JSON.parse(line);
44
+ }
45
+ catch {
46
+ continue;
47
+ }
48
+ const usage = entry?.message?.usage;
49
+ if (usage) {
50
+ const model = entry.message.model ?? '';
51
+ const pricing = pricingForModel(model);
52
+ const input = usage.input_tokens ?? 0;
53
+ const output = usage.output_tokens ?? 0;
54
+ const cacheRead = usage.cache_read_input_tokens ?? 0;
55
+ const cacheWrite = usage.cache_creation_input_tokens ?? 0;
56
+ inputTokens += input;
57
+ outputTokens += output;
58
+ cacheReadTokens += cacheRead;
59
+ estimatedCostUsd +=
60
+ (input * pricing.input +
61
+ output * pricing.output +
62
+ cacheRead * pricing.cacheRead +
63
+ cacheWrite * pricing.cacheWrite) /
64
+ 1_000_000;
65
+ }
66
+ collectModifiedFiles(entry, filesTouched);
67
+ }
68
+ return {
69
+ inputTokens,
70
+ outputTokens,
71
+ cacheReadTokens,
72
+ totalTokens: inputTokens + outputTokens + cacheReadTokens,
73
+ estimatedCostUsd,
74
+ filesModified: filesTouched.size,
75
+ };
76
+ }
77
+ catch {
78
+ return { ...ZERO_USAGE };
79
+ }
80
+ }
81
+ /** Adds the file path of any Write/Edit/MultiEdit tool_use block in `entry` to `filesTouched`. */
82
+ function collectModifiedFiles(entry, filesTouched) {
83
+ const blocks = entry?.message?.content;
84
+ if (!Array.isArray(blocks))
85
+ return;
86
+ for (const block of blocks) {
87
+ if (block?.type !== 'tool_use' || !FILE_TOOLS.has(block.name))
88
+ continue;
89
+ const filePath = (block.input?.file_path ?? block.input?.path);
90
+ if (filePath)
91
+ filesTouched.add(filePath);
92
+ }
93
+ }
94
+ //# sourceMappingURL=token-calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-calculator.js","sourceRoot":"","sources":["../../src/sessions/token-calculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { type TokenUsage } from '../sessions/token-calculator.js';
2
+ import type { AgentEvent } from '../types.js';
3
+ /**
4
+ * Minimal interface for pushing a live daily-stats snapshot to the phone.
5
+ * `AgentVigilWsServer` structurally satisfies this — no import needed,
6
+ * avoiding a circular dependency (mirrors `RelayWsServer` in relay-handler.ts).
7
+ */
8
+ export interface StatsBroadcaster {
9
+ readonly isPhoneConnected: boolean;
10
+ sendEvent(event: AgentEvent): void;
11
+ }
12
+ export interface SessionStat {
13
+ sessionId: string;
14
+ projectName: string;
15
+ agentType: string;
16
+ startTime: Date;
17
+ endTime?: Date;
18
+ lastActivityAt: Date;
19
+ durationMs: number;
20
+ inputTokens: number;
21
+ outputTokens: number;
22
+ cacheReadTokens: number;
23
+ totalTokens: number;
24
+ costUsd: number;
25
+ tasksCompleted: number;
26
+ filesModified: number;
27
+ permissionPrompts: number;
28
+ permissionsApproved: number;
29
+ permissionsDenied: number;
30
+ }
31
+ export interface DailySummary {
32
+ date: string;
33
+ totalSessions: number;
34
+ totalActiveTimeMs: number;
35
+ totalInputTokens: number;
36
+ totalOutputTokens: number;
37
+ totalCacheReadTokens: number;
38
+ totalTokens: number;
39
+ totalCostUsd: number;
40
+ totalTasksCompleted: number;
41
+ totalFilesModified: number;
42
+ totalPermissionPrompts: number;
43
+ permissionsApproved: number;
44
+ permissionsDenied: number;
45
+ topProject: string;
46
+ topProjectCost: number;
47
+ topProjectTimeMs: number;
48
+ sessions: SessionStat[];
49
+ generatedAt: Date;
50
+ }
51
+ export { isTrackableClaudeSession } from './session-utils.js';
52
+ /** Rolls up multiple Claude sessions in the same project into one stats row for the phone. */
53
+ export declare function mergeSessionsByProject(sessions: SessionStat[]): SessionStat[];
54
+ /**
55
+ * Tracks coding-session activity throughout the day and sends an end-of-day
56
+ * summary to the phone (ntfy) and Mac (native notification).
57
+ *
58
+ * `agentvigil hook <type>` runs as a short-lived CLI process separate from
59
+ * the long-running daemon, so every public method reloads `stats.json`
60
+ * before mutating and saves immediately after — this is how state survives
61
+ * across those separate processes.
62
+ */
63
+ declare class DailyTracker {
64
+ private readonly statsFilePath;
65
+ private todayStats;
66
+ private broadcaster?;
67
+ constructor(statsFilePath?: string);
68
+ initialize(broadcaster?: StatsBroadcaster): Promise<void>;
69
+ trackSessionStart(sessionId: string, projectName: string, agentType: string): Promise<void>;
70
+ /** True if `sessionId` already has a tracked stat for today (in-memory). */
71
+ hasSession(sessionId: string): boolean;
72
+ /** Called when a session's token usage/cost/files-modified is known (e.g. from the Stop hook). */
73
+ updateTokenUsage(sessionId: string, usage: TokenUsage, lastActivity: Date, transcriptPath?: string): Promise<void>;
74
+ /** Called when a permission prompt fires. */
75
+ trackPermission(sessionId: string): Promise<void>;
76
+ /** Called when a permission prompt is approved from the phone. */
77
+ trackApproval(sessionId: string): Promise<void>;
78
+ /** Called when a permission prompt is denied from the phone. */
79
+ trackDenial(sessionId: string): Promise<void>;
80
+ /** Called when the Stop hook fires for a session. */
81
+ trackSessionEnd(sessionId: string, usage?: TokenUsage, transcriptPath?: string): Promise<void>;
82
+ /** Pushes the current daily summary to the phone over the live WS tunnel, if connected. */
83
+ private broadcastStatsUpdate;
84
+ buildDailySummary(): DailySummary;
85
+ sendDailySummary(): Promise<void>;
86
+ private scheduleEndOfDaySummary;
87
+ /**
88
+ * Polls every active session's transcript so the stats screen reflects
89
+ * running sessions, not just ones that have fired a hook. Runs once
90
+ * shortly after startup, then every ACTIVE_SESSION_SYNC_INTERVAL_MS.
91
+ */
92
+ private scheduleActiveSessionSync;
93
+ private scheduleMidnightReset;
94
+ private resetForNewDay;
95
+ private applyTranscriptTimeline;
96
+ /** Scans today's transcripts so every project with Claude activity appears in stats. */
97
+ reconcileFromTranscriptsPublic(): Promise<void>;
98
+ /** Scans today's transcripts so every project with Claude activity appears in stats. */
99
+ private reconcileFromTranscripts;
100
+ private ensureProjectName;
101
+ private backfillMissingProjectNames;
102
+ private purgeInvalidSessions;
103
+ private loadFromDisk;
104
+ private saveToDisk;
105
+ }
106
+ export { DailyTracker };
107
+ export declare const dailyTracker: DailyTracker;
108
+ /**
109
+ * Brings today's stats up to date for every currently-active session,
110
+ * regardless of whether a hook has fired for it yet — a long `working`
111
+ * session can otherwise go hours without appearing on the stats screen.
112
+ */
113
+ export declare function syncActiveSessionStats(): Promise<void>;
114
+ //# sourceMappingURL=daily-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-tracker.d.ts","sourceRoot":"","sources":["../../src/stats/daily-tracker.ts"],"names":[],"mappings":"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"}