oh-my-claude-sisyphus 3.4.0 → 3.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 (104) hide show
  1. package/README.md +71 -5
  2. package/commands/cancel-ecomode.md +71 -0
  3. package/commands/cancel.md +75 -0
  4. package/commands/pipeline.md +231 -0
  5. package/commands/planner.md +174 -0
  6. package/commands/swarm.md +280 -0
  7. package/dist/analytics/cost-estimator.d.ts +14 -0
  8. package/dist/analytics/cost-estimator.d.ts.map +1 -0
  9. package/dist/analytics/cost-estimator.js +70 -0
  10. package/dist/analytics/cost-estimator.js.map +1 -0
  11. package/dist/analytics/export.d.ts +7 -0
  12. package/dist/analytics/export.d.ts.map +1 -0
  13. package/dist/analytics/export.js +93 -0
  14. package/dist/analytics/export.js.map +1 -0
  15. package/dist/analytics/index.d.ts +14 -0
  16. package/dist/analytics/index.d.ts.map +1 -0
  17. package/dist/analytics/index.js +14 -0
  18. package/dist/analytics/index.js.map +1 -0
  19. package/dist/analytics/metrics-collector.d.ts +30 -0
  20. package/dist/analytics/metrics-collector.d.ts.map +1 -0
  21. package/dist/analytics/metrics-collector.js +96 -0
  22. package/dist/analytics/metrics-collector.js.map +1 -0
  23. package/dist/analytics/query-engine.d.ts +32 -0
  24. package/dist/analytics/query-engine.d.ts.map +1 -0
  25. package/dist/analytics/query-engine.js +151 -0
  26. package/dist/analytics/query-engine.js.map +1 -0
  27. package/dist/analytics/session-manager.d.ts +26 -0
  28. package/dist/analytics/session-manager.d.ts.map +1 -0
  29. package/dist/analytics/session-manager.js +201 -0
  30. package/dist/analytics/session-manager.js.map +1 -0
  31. package/dist/analytics/session-types.d.ts +37 -0
  32. package/dist/analytics/session-types.d.ts.map +1 -0
  33. package/dist/analytics/session-types.js +2 -0
  34. package/dist/analytics/session-types.js.map +1 -0
  35. package/dist/analytics/token-tracker.d.ts +24 -0
  36. package/dist/analytics/token-tracker.d.ts.map +1 -0
  37. package/dist/analytics/token-tracker.js +161 -0
  38. package/dist/analytics/token-tracker.js.map +1 -0
  39. package/dist/analytics/types.d.ts +37 -0
  40. package/dist/analytics/types.d.ts.map +1 -0
  41. package/dist/analytics/types.js +21 -0
  42. package/dist/analytics/types.js.map +1 -0
  43. package/dist/cli/analytics.d.ts +3 -0
  44. package/dist/cli/analytics.d.ts.map +1 -0
  45. package/dist/cli/analytics.js +74 -0
  46. package/dist/cli/analytics.js.map +1 -0
  47. package/dist/cli/commands/agents.d.ts +5 -0
  48. package/dist/cli/commands/agents.d.ts.map +1 -0
  49. package/dist/cli/commands/agents.js +29 -0
  50. package/dist/cli/commands/agents.js.map +1 -0
  51. package/dist/cli/commands/cleanup.d.ts +4 -0
  52. package/dist/cli/commands/cleanup.d.ts.map +1 -0
  53. package/dist/cli/commands/cleanup.js +17 -0
  54. package/dist/cli/commands/cleanup.js.map +1 -0
  55. package/dist/cli/commands/cost.d.ts +4 -0
  56. package/dist/cli/commands/cost.d.ts.map +1 -0
  57. package/dist/cli/commands/cost.js +53 -0
  58. package/dist/cli/commands/cost.js.map +1 -0
  59. package/dist/cli/commands/export.d.ts +5 -0
  60. package/dist/cli/commands/export.d.ts.map +1 -0
  61. package/dist/cli/commands/export.js +30 -0
  62. package/dist/cli/commands/export.js.map +1 -0
  63. package/dist/cli/commands/sessions.d.ts +5 -0
  64. package/dist/cli/commands/sessions.d.ts.map +1 -0
  65. package/dist/cli/commands/sessions.js +37 -0
  66. package/dist/cli/commands/sessions.js.map +1 -0
  67. package/dist/cli/commands/stats.d.ts +4 -0
  68. package/dist/cli/commands/stats.d.ts.map +1 -0
  69. package/dist/cli/commands/stats.js +43 -0
  70. package/dist/cli/commands/stats.js.map +1 -0
  71. package/dist/cli/utils/formatting.d.ts +22 -0
  72. package/dist/cli/utils/formatting.d.ts.map +1 -0
  73. package/dist/cli/utils/formatting.js +70 -0
  74. package/dist/cli/utils/formatting.js.map +1 -0
  75. package/dist/hud/analytics-display.d.ts +28 -0
  76. package/dist/hud/analytics-display.d.ts.map +1 -0
  77. package/dist/hud/analytics-display.js +105 -0
  78. package/dist/hud/analytics-display.js.map +1 -0
  79. package/dist/hud/background-cleanup.d.ts +28 -0
  80. package/dist/hud/background-cleanup.d.ts.map +1 -0
  81. package/dist/hud/background-cleanup.js +92 -0
  82. package/dist/hud/background-cleanup.js.map +1 -0
  83. package/dist/hud/index.js +4 -2
  84. package/dist/hud/index.js.map +1 -1
  85. package/dist/hud/render.d.ts +1 -1
  86. package/dist/hud/render.d.ts.map +1 -1
  87. package/dist/hud/render.js +32 -1
  88. package/dist/hud/render.js.map +1 -1
  89. package/dist/hud/state.d.ts +5 -0
  90. package/dist/hud/state.d.ts.map +1 -1
  91. package/dist/hud/state.js +13 -0
  92. package/dist/hud/state.js.map +1 -1
  93. package/dist/hud/types.d.ts +11 -1
  94. package/dist/hud/types.d.ts.map +1 -1
  95. package/dist/hud/types.js +19 -0
  96. package/dist/hud/types.js.map +1 -1
  97. package/docs/FULL-README.md +130 -16
  98. package/docs/MIGRATION.md +222 -1
  99. package/docs/SYNC-SYSTEM.md +528 -0
  100. package/package.json +8 -2
  101. package/scripts/sync-metadata.ts +363 -0
  102. package/skills/build-fix/SKILL.md +123 -0
  103. package/skills/code-review/SKILL.md +179 -0
  104. package/skills/security-review/SKILL.md +254 -0
@@ -0,0 +1,43 @@
1
+ import { getTokenTracker } from '../../analytics/token-tracker.js';
2
+ import { getSessionManager } from '../../analytics/session-manager.js';
3
+ import { colors, formatCostWithColor, formatTokenCount, formatDuration } from '../utils/formatting.js';
4
+ export async function statsCommand(options) {
5
+ const tracker = getTokenTracker();
6
+ const manager = getSessionManager();
7
+ const stats = tracker.getSessionStats();
8
+ const session = await manager.getCurrentSession();
9
+ const topAgents = await tracker.getTopAgents(5);
10
+ if (options.json) {
11
+ console.log(JSON.stringify({ stats, session, topAgents }, null, 2));
12
+ return;
13
+ }
14
+ // Display session info
15
+ console.log(colors.bold('\n📊 Current Session Stats\n'));
16
+ if (session) {
17
+ const duration = Date.now() - new Date(session.startTime).getTime();
18
+ console.log(`Session ID: ${colors.cyan(session.id)}`);
19
+ console.log(`Duration: ${formatDuration(duration)}`);
20
+ console.log(`Tags: ${session.tags.join(', ')}`);
21
+ console.log(`Goals: ${session.goals.length}`);
22
+ }
23
+ else {
24
+ console.log(colors.gray('No active session'));
25
+ }
26
+ // Display token stats
27
+ console.log(colors.bold('\n💰 Token Usage & Cost\n'));
28
+ const totalTokens = stats.totalInputTokens + stats.totalOutputTokens;
29
+ const totalCost = topAgents.reduce((sum, a) => sum + a.cost, 0);
30
+ console.log(`Total Tokens: ${colors.blue(formatTokenCount(totalTokens))}`);
31
+ console.log(`Input: ${formatTokenCount(stats.totalInputTokens)} | Output: ${formatTokenCount(stats.totalOutputTokens)}`);
32
+ console.log(`Cache Read: ${formatTokenCount(stats.totalCacheRead)} | Cache Write: ${formatTokenCount(stats.totalCacheCreation)}`);
33
+ console.log(`Total Cost: ${formatCostWithColor(totalCost)}`);
34
+ // Display top agents
35
+ if (topAgents.length > 0) {
36
+ console.log(colors.bold('\n🤖 Top Agents by Cost\n'));
37
+ for (const agent of topAgents) {
38
+ console.log(` ${agent.agent.padEnd(25)} ${formatTokenCount(agent.tokens).padStart(8)} tokens ${formatCostWithColor(agent.cost)}`);
39
+ }
40
+ }
41
+ console.log('');
42
+ }
43
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/cli/commands/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEvG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA2B;IAC5D,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAEzD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,aAAa,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACrE,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEhE,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,UAAU,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,cAAc,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,CAAC,eAAe,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,mBAAmB,gBAAgB,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAClI,OAAO,CAAC,GAAG,CAAC,eAAe,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAE7D,qBAAqB;IACrB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtI,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface TableColumn {
2
+ header: string;
3
+ field: string;
4
+ width: number;
5
+ align?: 'left' | 'right' | 'center';
6
+ format?: (value: any) => string;
7
+ }
8
+ export declare function renderTable(data: any[], columns: TableColumn[]): string;
9
+ export declare const colors: {
10
+ red: (text: string) => string;
11
+ green: (text: string) => string;
12
+ yellow: (text: string) => string;
13
+ blue: (text: string) => string;
14
+ magenta: (text: string) => string;
15
+ cyan: (text: string) => string;
16
+ gray: (text: string) => string;
17
+ bold: (text: string) => string;
18
+ };
19
+ export declare function formatCostWithColor(cost: number): string;
20
+ export declare function formatTokenCount(tokens: number): string;
21
+ export declare function formatDuration(ms: number): string;
22
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/formatting.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC;CACjC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAuBvE;AAkBD,eAAO,MAAM,MAAM;gBACL,MAAM;kBACJ,MAAM;mBACL,MAAM;iBACR,MAAM;oBACH,MAAM;iBACT,MAAM;iBACN,MAAM;iBACN,MAAM;CACpB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD"}
@@ -0,0 +1,70 @@
1
+ export function renderTable(data, columns) {
2
+ const lines = [];
3
+ // Header
4
+ const headerRow = columns.map(col => {
5
+ return padString(col.header, col.width, col.align || 'left');
6
+ }).join(' | ');
7
+ lines.push(headerRow);
8
+ lines.push(columns.map(col => '-'.repeat(col.width)).join('-+-'));
9
+ // Data rows
10
+ for (const row of data) {
11
+ const dataRow = columns.map(col => {
12
+ const value = row[col.field];
13
+ const formatted = col.format ? col.format(value) : String(value ?? '');
14
+ return padString(formatted, col.width, col.align || 'left');
15
+ }).join(' | ');
16
+ lines.push(dataRow);
17
+ }
18
+ return lines.join('\n');
19
+ }
20
+ function padString(str, width, align) {
21
+ const stripAnsi = (s) => s.replace(/\x1b\[[0-9;]*m/g, '');
22
+ const visibleLength = stripAnsi(str).length;
23
+ const padding = Math.max(0, width - visibleLength);
24
+ if (align === 'right') {
25
+ return ' '.repeat(padding) + str;
26
+ }
27
+ else if (align === 'center') {
28
+ const leftPad = Math.floor(padding / 2);
29
+ const rightPad = padding - leftPad;
30
+ return ' '.repeat(leftPad) + str + ' '.repeat(rightPad);
31
+ }
32
+ else {
33
+ return str + ' '.repeat(padding);
34
+ }
35
+ }
36
+ export const colors = {
37
+ red: (text) => `\x1b[31m${text}\x1b[0m`,
38
+ green: (text) => `\x1b[32m${text}\x1b[0m`,
39
+ yellow: (text) => `\x1b[33m${text}\x1b[0m`,
40
+ blue: (text) => `\x1b[34m${text}\x1b[0m`,
41
+ magenta: (text) => `\x1b[35m${text}\x1b[0m`,
42
+ cyan: (text) => `\x1b[36m${text}\x1b[0m`,
43
+ gray: (text) => `\x1b[90m${text}\x1b[0m`,
44
+ bold: (text) => `\x1b[1m${text}\x1b[0m`
45
+ };
46
+ export function formatCostWithColor(cost) {
47
+ if (cost < 1.0)
48
+ return colors.green(`$${cost.toFixed(4)}`);
49
+ if (cost < 5.0)
50
+ return colors.yellow(`$${cost.toFixed(4)}`);
51
+ return colors.red(`$${cost.toFixed(4)}`);
52
+ }
53
+ export function formatTokenCount(tokens) {
54
+ if (tokens < 1000)
55
+ return `${tokens}`;
56
+ if (tokens < 1000000)
57
+ return `${(tokens / 1000).toFixed(1)}k`;
58
+ return `${(tokens / 1000000).toFixed(2)}M`;
59
+ }
60
+ export function formatDuration(ms) {
61
+ const seconds = Math.floor(ms / 1000);
62
+ const minutes = Math.floor(seconds / 60);
63
+ const hours = Math.floor(minutes / 60);
64
+ if (hours > 0)
65
+ return `${hours}h ${minutes % 60}m`;
66
+ if (minutes > 0)
67
+ return `${minutes}m ${seconds % 60}s`;
68
+ return `${seconds}s`;
69
+ }
70
+ //# sourceMappingURL=formatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../../src/cli/utils/formatting.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,WAAW,CAAC,IAAW,EAAE,OAAsB;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAClC,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAElE,YAAY;IACZ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAChC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACvE,OAAO,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,KAAa,EAAE,KAAkC;IAC/E,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,CAAC;IAEnD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;IACnC,CAAC;SAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;QACnC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;IAC/C,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;IACjD,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;IAClD,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;IAChD,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;IACnD,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;IAChD,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;IAChD,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,IAAI,SAAS;CAChD,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,IAAI,MAAM,GAAG,IAAI;QAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IACtC,IAAI,MAAM,GAAG,OAAO;QAAE,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9D,OAAO,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAEvC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACnD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACvD,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * OMC HUD - Analytics Display
3
+ *
4
+ * Display components for token tracking and cost analytics in the HUD.
5
+ */
6
+ export interface AnalyticsDisplay {
7
+ sessionCost: string;
8
+ sessionTokens: string;
9
+ topAgents: string;
10
+ cacheEfficiency: string;
11
+ costColor: 'green' | 'yellow' | 'red';
12
+ }
13
+ /**
14
+ * Get analytics display data for the current session.
15
+ * Safe to call even if analytics modules are not initialized.
16
+ *
17
+ * @returns Analytics display data with safe defaults
18
+ */
19
+ export declare function getAnalyticsDisplay(): Promise<AnalyticsDisplay>;
20
+ /**
21
+ * Render analytics as a single-line string for HUD display.
22
+ */
23
+ export declare function renderAnalyticsLine(analytics: AnalyticsDisplay): string;
24
+ /**
25
+ * Get current session info for HUD display.
26
+ */
27
+ export declare function getSessionInfo(): Promise<string>;
28
+ //# sourceMappingURL=analytics-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-display.d.ts","sourceRoot":"","sources":["../../src/hud/analytics-display.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA2DrE;AAWD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAKvE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBtD"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * OMC HUD - Analytics Display
3
+ *
4
+ * Display components for token tracking and cost analytics in the HUD.
5
+ */
6
+ /**
7
+ * Get analytics display data for the current session.
8
+ * Safe to call even if analytics modules are not initialized.
9
+ *
10
+ * @returns Analytics display data with safe defaults
11
+ */
12
+ export async function getAnalyticsDisplay() {
13
+ try {
14
+ // Dynamic imports to avoid circular dependencies and handle missing modules
15
+ const { getTokenTracker } = await import('../analytics/token-tracker.js');
16
+ const { calculateCost, formatCost, getCostColor } = await import('../analytics/cost-estimator.js');
17
+ const tracker = getTokenTracker();
18
+ const stats = tracker.getSessionStats();
19
+ // Calculate total cost
20
+ let totalCost = 0;
21
+ for (const [model, usages] of Object.entries(stats.byModel)) {
22
+ for (const usage of usages) {
23
+ const cost = calculateCost({
24
+ modelName: model,
25
+ inputTokens: usage.inputTokens,
26
+ outputTokens: usage.outputTokens,
27
+ cacheCreationTokens: usage.cacheCreationTokens,
28
+ cacheReadTokens: usage.cacheReadTokens
29
+ });
30
+ totalCost += cost.totalCost;
31
+ }
32
+ }
33
+ // Get top agents
34
+ const topAgents = await tracker.getTopAgents(3);
35
+ const topAgentsStr = topAgents.length > 0
36
+ ? topAgents.map(a => `${a.agent}:${formatCost(a.cost)}`).join(' ')
37
+ : 'none';
38
+ // Calculate cache efficiency
39
+ const totalCacheRead = stats.totalCacheRead;
40
+ const totalInput = stats.totalInputTokens;
41
+ const cacheHitRate = totalInput > 0 ? (totalCacheRead / totalInput) * 100 : 0;
42
+ const cacheEfficiency = `${cacheHitRate.toFixed(1)}%`;
43
+ // Format totals
44
+ const totalTokens = stats.totalInputTokens + stats.totalOutputTokens;
45
+ const sessionTokens = formatTokenCount(totalTokens);
46
+ const sessionCost = formatCost(totalCost);
47
+ const costColor = getCostColor(totalCost);
48
+ return {
49
+ sessionCost,
50
+ sessionTokens,
51
+ topAgents: topAgentsStr,
52
+ cacheEfficiency,
53
+ costColor
54
+ };
55
+ }
56
+ catch (error) {
57
+ // Return safe defaults if analytics not yet initialized
58
+ return {
59
+ sessionCost: '$0.00',
60
+ sessionTokens: '0',
61
+ topAgents: 'none',
62
+ cacheEfficiency: '0%',
63
+ costColor: 'green'
64
+ };
65
+ }
66
+ }
67
+ /**
68
+ * Format token count with K/M suffix for readability.
69
+ */
70
+ function formatTokenCount(tokens) {
71
+ if (tokens < 1000)
72
+ return `${tokens}`;
73
+ if (tokens < 1000000)
74
+ return `${(tokens / 1000).toFixed(1)}k`;
75
+ return `${(tokens / 1000000).toFixed(2)}M`;
76
+ }
77
+ /**
78
+ * Render analytics as a single-line string for HUD display.
79
+ */
80
+ export function renderAnalyticsLine(analytics) {
81
+ const costIndicator = analytics.costColor === 'green' ? '●' :
82
+ analytics.costColor === 'yellow' ? '●' : '●';
83
+ return `${costIndicator} Cost: ${analytics.sessionCost} | Tokens: ${analytics.sessionTokens} | Cache: ${analytics.cacheEfficiency} | Top: ${analytics.topAgents}`;
84
+ }
85
+ /**
86
+ * Get current session info for HUD display.
87
+ */
88
+ export async function getSessionInfo() {
89
+ try {
90
+ const { getSessionManager } = await import('../analytics/session-manager.js');
91
+ const manager = getSessionManager();
92
+ const session = await manager.getCurrentSession();
93
+ if (!session) {
94
+ return 'No active session';
95
+ }
96
+ const duration = Date.now() - new Date(session.startTime).getTime();
97
+ const durationMinutes = Math.floor(duration / 60000);
98
+ const tags = session.tags.join(',');
99
+ return `Session: ${session.id.slice(-8)} | ${durationMinutes}m | Tags: ${tags}`;
100
+ }
101
+ catch (error) {
102
+ return 'Session info unavailable';
103
+ }
104
+ }
105
+ //# sourceMappingURL=analytics-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-display.js","sourceRoot":"","sources":["../../src/hud/analytics-display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * OMC HUD - Background Task Cleanup
3
+ *
4
+ * Handles cleanup of stale and orphaned background tasks on HUD startup.
5
+ */
6
+ import type { BackgroundTask } from './types.js';
7
+ /**
8
+ * Clean up stale background tasks from HUD state.
9
+ * Removes tasks that are old and not recently completed.
10
+ *
11
+ * @param thresholdMs Age threshold in milliseconds (default: 30 minutes)
12
+ * @returns Number of tasks removed
13
+ */
14
+ export declare function cleanupStaleBackgroundTasks(thresholdMs?: number): Promise<number>;
15
+ /**
16
+ * Detect orphaned background tasks that are still marked as running
17
+ * but are likely from a previous session crash.
18
+ *
19
+ * @returns Array of orphaned tasks
20
+ */
21
+ export declare function detectOrphanedTasks(): Promise<BackgroundTask[]>;
22
+ /**
23
+ * Mark orphaned tasks as stale/completed to clean up the display.
24
+ *
25
+ * @returns Number of tasks marked
26
+ */
27
+ export declare function markOrphanedTasksAsStale(): Promise<number>;
28
+ //# sourceMappingURL=background-cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-cleanup.d.ts","sourceRoot":"","sources":["../../src/hud/background-cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,YAAY,CAAC;AAK9D;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,GAAE,MAAgC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAyBrE;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC,CAuBhE"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * OMC HUD - Background Task Cleanup
3
+ *
4
+ * Handles cleanup of stale and orphaned background tasks on HUD startup.
5
+ */
6
+ import { readHudState, writeHudState } from './state.js';
7
+ const STALE_TASK_THRESHOLD_MS = 30 * 60 * 1000; // 30 minutes default
8
+ /**
9
+ * Clean up stale background tasks from HUD state.
10
+ * Removes tasks that are old and not recently completed.
11
+ *
12
+ * @param thresholdMs Age threshold in milliseconds (default: 30 minutes)
13
+ * @returns Number of tasks removed
14
+ */
15
+ export async function cleanupStaleBackgroundTasks(thresholdMs = STALE_TASK_THRESHOLD_MS) {
16
+ const state = readHudState();
17
+ if (!state || !state.backgroundTasks) {
18
+ return 0;
19
+ }
20
+ const now = Date.now();
21
+ const originalCount = state.backgroundTasks.length;
22
+ // Filter out stale tasks
23
+ state.backgroundTasks = state.backgroundTasks.filter(task => {
24
+ // Use startedAt for age calculation
25
+ const taskAge = now - new Date(task.startedAt).getTime();
26
+ // Keep if:
27
+ // - Task is completed (for history)
28
+ // - Task is recent (within threshold)
29
+ return task.status === 'completed' || taskAge < thresholdMs;
30
+ });
31
+ // Limit history to 20 most recent
32
+ if (state.backgroundTasks.length > 20) {
33
+ state.backgroundTasks = state.backgroundTasks.slice(-20);
34
+ }
35
+ const removedCount = originalCount - state.backgroundTasks.length;
36
+ if (removedCount > 0) {
37
+ writeHudState(state);
38
+ }
39
+ return removedCount;
40
+ }
41
+ /**
42
+ * Detect orphaned background tasks that are still marked as running
43
+ * but are likely from a previous session crash.
44
+ *
45
+ * @returns Array of orphaned tasks
46
+ */
47
+ export async function detectOrphanedTasks() {
48
+ const state = readHudState();
49
+ if (!state || !state.backgroundTasks) {
50
+ return [];
51
+ }
52
+ // Detect tasks that are marked as running but should have completed
53
+ // (e.g., from previous session crashes)
54
+ const orphaned = [];
55
+ for (const task of state.backgroundTasks) {
56
+ if (task.status === 'running') {
57
+ // Check if task is from a previous HUD session
58
+ // (simple heuristic: running for more than 2 hours is likely orphaned)
59
+ const taskAge = Date.now() - new Date(task.startedAt).getTime();
60
+ const TWO_HOURS_MS = 2 * 60 * 60 * 1000;
61
+ if (taskAge > TWO_HOURS_MS) {
62
+ orphaned.push(task);
63
+ }
64
+ }
65
+ }
66
+ return orphaned;
67
+ }
68
+ /**
69
+ * Mark orphaned tasks as stale/completed to clean up the display.
70
+ *
71
+ * @returns Number of tasks marked
72
+ */
73
+ export async function markOrphanedTasksAsStale() {
74
+ const state = readHudState();
75
+ if (!state || !state.backgroundTasks) {
76
+ return 0;
77
+ }
78
+ const orphaned = await detectOrphanedTasks();
79
+ let marked = 0;
80
+ for (const orphanedTask of orphaned) {
81
+ const task = state.backgroundTasks.find(t => t.id === orphanedTask.id);
82
+ if (task && task.status === 'running') {
83
+ task.status = 'completed'; // Mark as completed to remove from active display
84
+ marked++;
85
+ }
86
+ }
87
+ if (marked > 0) {
88
+ writeHudState(state);
89
+ }
90
+ return marked;
91
+ }
92
+ //# sourceMappingURL=background-cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-cleanup.js","sourceRoot":"","sources":["../../src/hud/background-cleanup.ts"],"names":[],"mappings":"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"}
package/dist/hud/index.js CHANGED
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { readStdin, getContextPercent, getModelName } from './stdin.js';
9
9
  import { parseTranscript } from './transcript.js';
10
- import { readHudState, readHudConfig, getRunningTasks } from './state.js';
10
+ import { readHudState, readHudConfig, getRunningTasks, initializeHUDState } from './state.js';
11
11
  import { readRalphStateForHud, readUltraworkStateForHud, readPrdStateForHud, readAutopilotStateForHud, } from './omc-state.js';
12
12
  import { getUsage } from './usage-api.js';
13
13
  import { render } from './render.js';
@@ -33,6 +33,8 @@ function calculateSessionHealth(sessionStart, contextPercent) {
33
33
  */
34
34
  async function main() {
35
35
  try {
36
+ // Initialize HUD state (cleanup stale/orphaned tasks)
37
+ await initializeHUDState();
36
38
  // Read stdin from Claude Code
37
39
  const stdin = await readStdin();
38
40
  if (!stdin) {
@@ -76,7 +78,7 @@ async function main() {
76
78
  sessionHealth: calculateSessionHealth(transcriptData.sessionStart, getContextPercent(stdin))
77
79
  };
78
80
  // Render and output
79
- const output = render(context, config);
81
+ const output = await render(context, config);
80
82
  // Replace spaces with non-breaking spaces for terminal alignment
81
83
  const formattedOutput = output.replace(/ /g, '\u00A0');
82
84
  console.log(formattedOutput);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hud/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hud/index.ts"],"names":[],"mappings":"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"}
@@ -7,5 +7,5 @@ import type { HudRenderContext, HudConfig } from './types.js';
7
7
  /**
8
8
  * Render the complete statusline (single or multi-line)
9
9
  */
10
- export declare function render(context: HudRenderContext, config: HudConfig): string;
10
+ export declare function render(context: HudRenderContext, config: HudConfig): Promise<string>;
11
11
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAe9D;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAoH3E"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAgB9D;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAqJ1F"}
@@ -16,13 +16,34 @@ import { renderPermission } from './elements/permission.js';
16
16
  import { renderThinking } from './elements/thinking.js';
17
17
  import { renderSession } from './elements/session.js';
18
18
  import { renderAutopilot } from './elements/autopilot.js';
19
+ import { getAnalyticsDisplay, renderAnalyticsLine, getSessionInfo } from './analytics-display.js';
19
20
  /**
20
21
  * Render the complete statusline (single or multi-line)
21
22
  */
22
- export function render(context, config) {
23
+ export async function render(context, config) {
23
24
  const elements = [];
24
25
  const detailLines = [];
25
26
  const { elements: enabledElements } = config;
27
+ // Check if analytics preset is active
28
+ if (config.preset === 'analytics') {
29
+ const analytics = await getAnalyticsDisplay();
30
+ const sessionInfo = await getSessionInfo();
31
+ // Render analytics-focused layout
32
+ const lines = [sessionInfo, renderAnalyticsLine(analytics)];
33
+ // Add agents if available
34
+ if (context.activeAgents.length > 0) {
35
+ const agents = renderAgentsByFormat(context.activeAgents, enabledElements.agentsFormat || 'codes');
36
+ if (agents)
37
+ lines.push(agents);
38
+ }
39
+ // Add todos if available
40
+ if (enabledElements.todos) {
41
+ const todos = renderTodosWithCurrent(context.todos);
42
+ if (todos)
43
+ lines.push(todos);
44
+ }
45
+ return lines.join('\n');
46
+ }
26
47
  // [OMC] label
27
48
  if (enabledElements.omcLabel) {
28
49
  elements.push(bold('[OMC]'));
@@ -123,6 +144,16 @@ export function render(context, config) {
123
144
  if (todos)
124
145
  detailLines.push(todos);
125
146
  }
147
+ // Optionally add analytics line for full/dense presets
148
+ if (config.preset === 'full' || config.preset === 'dense') {
149
+ try {
150
+ const analytics = await getAnalyticsDisplay();
151
+ detailLines.push(renderAnalyticsLine(analytics));
152
+ }
153
+ catch {
154
+ // Analytics not available, skip
155
+ }
156
+ }
126
157
  // If we have detail lines, output multi-line
127
158
  if (detailLines.length > 0) {
128
159
  return [headerLine, ...detailLines].join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"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"}
@@ -40,4 +40,9 @@ export declare function writeHudConfig(config: HudConfig): boolean;
40
40
  * Apply a preset to the configuration
41
41
  */
42
42
  export declare function applyPreset(preset: HudConfig['preset']): HudConfig;
43
+ /**
44
+ * Initialize HUD state with cleanup of stale/orphaned tasks.
45
+ * Should be called on HUD startup.
46
+ */
47
+ export declare function initializeHUDState(): Promise<void>;
43
48
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/hud/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAiEzE;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAwBnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAgBT;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CAKjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,cAAc,EAAE,CAG3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAMA;AAMD;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAyBzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CASzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,CAelE"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/hud/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkEzE;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAwBnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAgBT;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CAKjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,cAAc,EAAE,CAG3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAMA;AAMD;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAyBzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CASzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,CAelE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQxD"}
package/dist/hud/state.js CHANGED
@@ -8,6 +8,7 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
8
8
  import { join } from 'path';
9
9
  import { homedir } from 'os';
10
10
  import { DEFAULT_HUD_CONFIG, PRESET_CONFIGS } from './types.js';
11
+ import { cleanupStaleBackgroundTasks, markOrphanedTasksAsStale } from './background-cleanup.js';
11
12
  // ============================================================================
12
13
  // Path Helpers
13
14
  // ============================================================================
@@ -198,4 +199,16 @@ export function applyPreset(preset) {
198
199
  writeHudConfig(newConfig);
199
200
  return newConfig;
200
201
  }
202
+ /**
203
+ * Initialize HUD state with cleanup of stale/orphaned tasks.
204
+ * Should be called on HUD startup.
205
+ */
206
+ export async function initializeHUDState() {
207
+ // Clean up stale background tasks from previous sessions
208
+ const removedStale = await cleanupStaleBackgroundTasks();
209
+ const markedOrphaned = await markOrphanedTasksAsStale();
210
+ if (removedStale > 0 || markedOrphaned > 0) {
211
+ console.error(`HUD cleanup: removed ${removedStale} stale tasks, marked ${markedOrphaned} orphaned tasks`);
212
+ }
213
+ }
201
214
  //# sourceMappingURL=state.js.map