oh-my-claude-sisyphus 3.4.1 → 3.4.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/commands/cancel-ultraqa.md +1 -1
- package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
- package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
- package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
- package/dist/__tests__/analytics/backfill-dedup.test.d.ts +2 -0
- package/dist/__tests__/analytics/backfill-dedup.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/backfill-dedup.test.js +179 -0
- package/dist/__tests__/analytics/backfill-dedup.test.js.map +1 -0
- package/dist/__tests__/analytics/backfill-engine.test.d.ts +2 -0
- package/dist/__tests__/analytics/backfill-engine.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/backfill-engine.test.js +362 -0
- package/dist/__tests__/analytics/backfill-engine.test.js.map +1 -0
- package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
- package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
- package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
- package/dist/__tests__/analytics/output-estimator.test.d.ts +2 -0
- package/dist/__tests__/analytics/output-estimator.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/output-estimator.test.js +106 -0
- package/dist/__tests__/analytics/output-estimator.test.js.map +1 -0
- package/dist/__tests__/analytics/token-extractor.test.d.ts +2 -0
- package/dist/__tests__/analytics/token-extractor.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/token-extractor.test.js +121 -0
- package/dist/__tests__/analytics/token-extractor.test.js.map +1 -0
- package/dist/__tests__/analytics/transcript-parser.test.d.ts +2 -0
- package/dist/__tests__/analytics/transcript-parser.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/transcript-parser.test.js +285 -0
- package/dist/__tests__/analytics/transcript-parser.test.js.map +1 -0
- package/dist/__tests__/analytics/transcript-scanner.test.d.ts +2 -0
- package/dist/__tests__/analytics/transcript-scanner.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/transcript-scanner.test.js +401 -0
- package/dist/__tests__/analytics/transcript-scanner.test.js.map +1 -0
- package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts +2 -0
- package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/transcript-token-extractor.test.js +175 -0
- package/dist/__tests__/analytics/transcript-token-extractor.test.js.map +1 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
- package/dist/analytics/analytics-summary.d.ts +47 -0
- package/dist/analytics/analytics-summary.d.ts.map +1 -0
- package/dist/analytics/analytics-summary.js +170 -0
- package/dist/analytics/analytics-summary.js.map +1 -0
- package/dist/analytics/backfill-dedup.d.ts +49 -0
- package/dist/analytics/backfill-dedup.d.ts.map +1 -0
- package/dist/analytics/backfill-dedup.js +118 -0
- package/dist/analytics/backfill-dedup.js.map +1 -0
- package/dist/analytics/backfill-engine.d.ts +59 -0
- package/dist/analytics/backfill-engine.d.ts.map +1 -0
- package/dist/analytics/backfill-engine.js +163 -0
- package/dist/analytics/backfill-engine.js.map +1 -0
- package/dist/analytics/index.d.ts +8 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +10 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/output-estimator.d.ts +26 -0
- package/dist/analytics/output-estimator.d.ts.map +1 -0
- package/dist/analytics/output-estimator.js +61 -0
- package/dist/analytics/output-estimator.js.map +1 -0
- package/dist/analytics/token-extractor.d.ts +31 -0
- package/dist/analytics/token-extractor.d.ts.map +1 -0
- package/dist/analytics/token-extractor.js +57 -0
- package/dist/analytics/token-extractor.js.map +1 -0
- package/dist/analytics/token-tracker.d.ts +7 -1
- package/dist/analytics/token-tracker.d.ts.map +1 -1
- package/dist/analytics/token-tracker.js +81 -0
- package/dist/analytics/token-tracker.js.map +1 -1
- package/dist/analytics/transcript-parser.d.ts +42 -0
- package/dist/analytics/transcript-parser.d.ts.map +1 -0
- package/dist/analytics/transcript-parser.js +90 -0
- package/dist/analytics/transcript-parser.js.map +1 -0
- package/dist/analytics/transcript-scanner.d.ts +50 -0
- package/dist/analytics/transcript-scanner.d.ts.map +1 -0
- package/dist/analytics/transcript-scanner.js +149 -0
- package/dist/analytics/transcript-scanner.js.map +1 -0
- package/dist/analytics/transcript-token-extractor.d.ts +19 -0
- package/dist/analytics/transcript-token-extractor.d.ts.map +1 -0
- package/dist/analytics/transcript-token-extractor.js +89 -0
- package/dist/analytics/transcript-token-extractor.js.map +1 -0
- package/dist/analytics/types.d.ts +52 -0
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/analytics/types.js.map +1 -1
- package/dist/cli/analytics.js +26 -1
- package/dist/cli/analytics.js.map +1 -1
- package/dist/cli/commands/backfill.d.ts +15 -0
- package/dist/cli/commands/backfill.d.ts.map +1 -0
- package/dist/cli/commands/backfill.js +146 -0
- package/dist/cli/commands/backfill.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +67 -31
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/components/CostDashboard.d.ts +15 -0
- package/dist/cli/components/CostDashboard.d.ts.map +1 -0
- package/dist/cli/components/CostDashboard.js +15 -0
- package/dist/cli/components/CostDashboard.js.map +1 -0
- package/dist/cli/components/LiveStats.d.ts +16 -0
- package/dist/cli/components/LiveStats.d.ts.map +1 -0
- package/dist/cli/components/LiveStats.js +16 -0
- package/dist/cli/components/LiveStats.js.map +1 -0
- package/dist/cli/components/SessionBrowser.d.ts +14 -0
- package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
- package/dist/cli/components/SessionBrowser.js +14 -0
- package/dist/cli/components/SessionBrowser.js.map +1 -0
- package/dist/cli/index.js +159 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tui.d.ts +21 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +21 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/hud/analytics-display.d.ts +16 -0
- package/dist/hud/analytics-display.d.ts.map +1 -1
- package/dist/hud/analytics-display.js +42 -0
- package/dist/hud/analytics-display.js.map +1 -1
- package/dist/hud/index.js +90 -3
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +27 -1
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/types.d.ts +2 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js.map +1 -1
- package/docs/ANALYTICS-SYSTEM.md +150 -0
- package/docs/FULL-README.md +2 -2
- package/hooks/keyword-detector.sh +1 -1
- package/package.json +1 -1
- package/scripts/keyword-detector.mjs +1 -1
- package/scripts/persistent-mode.mjs +1 -1
- package/scripts/test-mutual-exclusion.ts +4 -4
- package/scripts/test-remember-tags.ts +6 -6
- package/scripts/test-session-injection.ts +4 -4
- package/skills/cancel-ultraqa/SKILL.md +1 -1
- package/skills/omc-setup/SKILL.md +30 -5
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
* OMC HUD - Analytics Display
|
|
3
3
|
*
|
|
4
4
|
* Display components for token tracking and cost analytics in the HUD.
|
|
5
|
+
* Now uses SessionHealth as the source of truth instead of TokenTracker.
|
|
5
6
|
*/
|
|
6
7
|
/**
|
|
7
8
|
* Get analytics display data for the current session.
|
|
8
9
|
* Safe to call even if analytics modules are not initialized.
|
|
9
10
|
*
|
|
10
11
|
* @returns Analytics display data with safe defaults
|
|
12
|
+
* @deprecated Use SessionHealth directly for HUD rendering
|
|
11
13
|
*/
|
|
12
14
|
export async function getAnalyticsDisplay() {
|
|
13
15
|
try {
|
|
@@ -76,6 +78,7 @@ function formatTokenCount(tokens) {
|
|
|
76
78
|
}
|
|
77
79
|
/**
|
|
78
80
|
* Render analytics as a single-line string for HUD display.
|
|
81
|
+
* @deprecated Use renderSessionHealthAnalytics instead
|
|
79
82
|
*/
|
|
80
83
|
export function renderAnalyticsLine(analytics) {
|
|
81
84
|
const costIndicator = analytics.costColor === 'green' ? '●' :
|
|
@@ -102,4 +105,43 @@ export async function getSessionInfo() {
|
|
|
102
105
|
return 'Session info unavailable';
|
|
103
106
|
}
|
|
104
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Render analytics from SessionHealth (no longer calls TokenTracker directly)
|
|
110
|
+
*/
|
|
111
|
+
export function renderSessionHealthAnalytics(sessionHealth) {
|
|
112
|
+
if (!sessionHealth.sessionCost) {
|
|
113
|
+
return ''; // No analytics available
|
|
114
|
+
}
|
|
115
|
+
const costIndicator = sessionHealth.health === 'critical' ? '🔴' :
|
|
116
|
+
sessionHealth.health === 'warning' ? '🟡' : '🟢';
|
|
117
|
+
const costPrefix = sessionHealth.isEstimated ? '~' : '';
|
|
118
|
+
const cost = `${costPrefix}$${sessionHealth.sessionCost.toFixed(4)}`;
|
|
119
|
+
const tokens = formatTokenCount(sessionHealth.totalTokens ?? 0);
|
|
120
|
+
const cacheRate = sessionHealth.cacheHitRate?.toFixed(1) ?? '0.0';
|
|
121
|
+
const costHour = sessionHealth.costPerHour ? `$${sessionHealth.costPerHour.toFixed(2)}/h` : '';
|
|
122
|
+
return `${costIndicator} ${cost} | ${tokens} | Cache: ${cacheRate}% | ${costHour}`;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Render budget warning if cost exceeds thresholds
|
|
126
|
+
*/
|
|
127
|
+
export function renderBudgetWarning(sessionHealth) {
|
|
128
|
+
const cost = sessionHealth.sessionCost ?? 0;
|
|
129
|
+
if (cost > 5.0) {
|
|
130
|
+
return `⚠️ BUDGET ALERT: Session cost ${cost.toFixed(2)} exceeds $5.00`;
|
|
131
|
+
}
|
|
132
|
+
else if (cost > 2.0) {
|
|
133
|
+
return `⚡ Budget notice: Session cost ${cost.toFixed(2)} approaching limit`;
|
|
134
|
+
}
|
|
135
|
+
return '';
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Render cache efficiency meter
|
|
139
|
+
*/
|
|
140
|
+
export function renderCacheEfficiency(sessionHealth) {
|
|
141
|
+
const rate = sessionHealth.cacheHitRate ?? 0;
|
|
142
|
+
const barLength = 20;
|
|
143
|
+
const filled = Math.round((rate / 100) * barLength);
|
|
144
|
+
const bar = '█'.repeat(filled) + '░'.repeat(barLength - filled);
|
|
145
|
+
return `Cache: ${bar} ${rate.toFixed(1)}%`;
|
|
146
|
+
}
|
|
105
147
|
//# sourceMappingURL=analytics-display.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics-display.js","sourceRoot":"","sources":["../../src/hud/analytics-display.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"analytics-display.js","sourceRoot":"","sources":["../../src/hud/analytics-display.ts"],"names":[],"mappings":"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"}
|
package/dist/hud/index.js
CHANGED
|
@@ -11,10 +11,51 @@ import { readHudState, readHudConfig, getRunningTasks, initializeHUDState } from
|
|
|
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';
|
|
14
|
+
import { extractTokens, createSnapshot } from '../analytics/token-extractor.js';
|
|
15
|
+
import { extractSessionId } from '../analytics/output-estimator.js';
|
|
16
|
+
import { getTokenTracker } from '../analytics/token-tracker.js';
|
|
17
|
+
// Persistent token snapshot for delta calculations
|
|
18
|
+
let previousSnapshot = null;
|
|
19
|
+
/**
|
|
20
|
+
* Record token usage to analytics tracker.
|
|
21
|
+
* Silent failure - doesn't break HUD rendering.
|
|
22
|
+
*/
|
|
23
|
+
async function recordTokenUsage(stdin, transcriptData) {
|
|
24
|
+
try {
|
|
25
|
+
// Get model name from stdin
|
|
26
|
+
const modelName = getModelName(stdin);
|
|
27
|
+
// Get running agents from transcript
|
|
28
|
+
const runningAgents = transcriptData.agents?.filter((a) => a.status === 'running') ?? [];
|
|
29
|
+
const agentName = runningAgents.length > 0 ? runningAgents[0].name : undefined;
|
|
30
|
+
// Extract tokens (delta from previous)
|
|
31
|
+
const extracted = extractTokens(stdin, previousSnapshot, modelName, agentName);
|
|
32
|
+
// Only record if there's actual token usage
|
|
33
|
+
if (extracted.inputTokens > 0 || extracted.cacheCreationTokens > 0) {
|
|
34
|
+
// Get session ID
|
|
35
|
+
const sessionId = extractSessionId(stdin.transcript_path);
|
|
36
|
+
// Get tracker and record
|
|
37
|
+
const tracker = getTokenTracker(sessionId);
|
|
38
|
+
await tracker.recordTokenUsage({
|
|
39
|
+
agentName: extracted.agentName,
|
|
40
|
+
modelName: extracted.modelName,
|
|
41
|
+
inputTokens: extracted.inputTokens,
|
|
42
|
+
outputTokens: extracted.outputTokens,
|
|
43
|
+
cacheCreationTokens: extracted.cacheCreationTokens,
|
|
44
|
+
cacheReadTokens: extracted.cacheReadTokens
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// Update snapshot for next render
|
|
48
|
+
previousSnapshot = createSnapshot(stdin);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
// Silent failure - don't break HUD rendering
|
|
52
|
+
// console.error('[Analytics] Token recording failed:', error);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
14
55
|
/**
|
|
15
56
|
* Calculate session health from session start time and context usage.
|
|
16
57
|
*/
|
|
17
|
-
function calculateSessionHealth(sessionStart, contextPercent) {
|
|
58
|
+
async function calculateSessionHealth(sessionStart, contextPercent, transcriptPath) {
|
|
18
59
|
if (!sessionStart)
|
|
19
60
|
return null;
|
|
20
61
|
const durationMs = Date.now() - sessionStart.getTime();
|
|
@@ -26,7 +67,51 @@ function calculateSessionHealth(sessionStart, contextPercent) {
|
|
|
26
67
|
else if (durationMinutes > 60 || contextPercent > 70) {
|
|
27
68
|
health = 'warning';
|
|
28
69
|
}
|
|
29
|
-
|
|
70
|
+
// Populate analytics if transcript path available
|
|
71
|
+
let sessionCost;
|
|
72
|
+
let totalTokens;
|
|
73
|
+
let cacheHitRate;
|
|
74
|
+
let topAgents;
|
|
75
|
+
let costPerHour;
|
|
76
|
+
let isEstimated = true;
|
|
77
|
+
if (transcriptPath) {
|
|
78
|
+
try {
|
|
79
|
+
const { loadAnalyticsFast } = await import('../analytics/analytics-summary.js');
|
|
80
|
+
const { extractSessionId } = await import('../analytics/output-estimator.js');
|
|
81
|
+
const sessionId = extractSessionId(transcriptPath);
|
|
82
|
+
const analytics = await loadAnalyticsFast(sessionId);
|
|
83
|
+
if (analytics) {
|
|
84
|
+
sessionCost = analytics.totals.estimatedCost;
|
|
85
|
+
totalTokens = analytics.totals.inputTokens + analytics.totals.outputTokens;
|
|
86
|
+
cacheHitRate = analytics.cacheHitRate;
|
|
87
|
+
topAgents = analytics.topAgents;
|
|
88
|
+
// Calculate cost per hour
|
|
89
|
+
const hours = durationMs / (1000 * 60 * 60);
|
|
90
|
+
costPerHour = hours > 0 ? sessionCost / hours : 0;
|
|
91
|
+
// Adjust health based on cost (Budget warnings)
|
|
92
|
+
if (sessionCost > 5.0) {
|
|
93
|
+
health = 'critical';
|
|
94
|
+
}
|
|
95
|
+
else if (sessionCost > 2.0 && health !== 'critical') {
|
|
96
|
+
health = 'warning';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
// Analytics not available - ignore
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
durationMinutes,
|
|
106
|
+
messageCount: 0,
|
|
107
|
+
health,
|
|
108
|
+
sessionCost,
|
|
109
|
+
totalTokens,
|
|
110
|
+
cacheHitRate,
|
|
111
|
+
topAgents,
|
|
112
|
+
costPerHour,
|
|
113
|
+
isEstimated
|
|
114
|
+
};
|
|
30
115
|
}
|
|
31
116
|
/**
|
|
32
117
|
* Main HUD entry point
|
|
@@ -45,6 +130,8 @@ async function main() {
|
|
|
45
130
|
const cwd = stdin.cwd || process.cwd();
|
|
46
131
|
// Parse transcript for agents and todos
|
|
47
132
|
const transcriptData = await parseTranscript(stdin.transcript_path);
|
|
133
|
+
// Record token usage (auto-tracking)
|
|
134
|
+
await recordTokenUsage(stdin, transcriptData);
|
|
48
135
|
// Read OMC state files
|
|
49
136
|
const ralph = readRalphStateForHud(cwd);
|
|
50
137
|
const ultrawork = readUltraworkStateForHud(cwd);
|
|
@@ -75,7 +162,7 @@ async function main() {
|
|
|
75
162
|
rateLimits,
|
|
76
163
|
pendingPermission: transcriptData.pendingPermission || null,
|
|
77
164
|
thinkingState: transcriptData.thinkingState || null,
|
|
78
|
-
sessionHealth: calculateSessionHealth(transcriptData.sessionStart, getContextPercent(stdin))
|
|
165
|
+
sessionHealth: await calculateSessionHealth(transcriptData.sessionStart, getContextPercent(stdin), stdin.transcript_path)
|
|
79
166
|
};
|
|
80
167
|
// Render and output
|
|
81
168
|
const output = await render(context, config);
|
package/dist/hud/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hud/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hud/index.ts"],"names":[],"mappings":"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"}
|
package/dist/hud/render.d.ts.map
CHANGED
|
@@ -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;
|
|
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;AAuB9D;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA+K1F"}
|
package/dist/hud/render.js
CHANGED
|
@@ -16,7 +16,7 @@ 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
|
+
import { getAnalyticsDisplay, renderAnalyticsLine, getSessionInfo, renderSessionHealthAnalytics, renderBudgetWarning, renderCacheEfficiency } from './analytics-display.js';
|
|
20
20
|
/**
|
|
21
21
|
* Render the complete statusline (single or multi-line)
|
|
22
22
|
*/
|
|
@@ -30,6 +30,18 @@ export async function render(context, config) {
|
|
|
30
30
|
const sessionInfo = await getSessionInfo();
|
|
31
31
|
// Render analytics-focused layout
|
|
32
32
|
const lines = [sessionInfo, renderAnalyticsLine(analytics)];
|
|
33
|
+
// Add SessionHealth analytics if available
|
|
34
|
+
if (context.sessionHealth?.sessionCost) {
|
|
35
|
+
const healthAnalytics = renderSessionHealthAnalytics(context.sessionHealth);
|
|
36
|
+
if (healthAnalytics)
|
|
37
|
+
lines.push(healthAnalytics);
|
|
38
|
+
const cacheEfficiency = renderCacheEfficiency(context.sessionHealth);
|
|
39
|
+
if (cacheEfficiency)
|
|
40
|
+
lines.push(cacheEfficiency);
|
|
41
|
+
const budgetWarning = renderBudgetWarning(context.sessionHealth);
|
|
42
|
+
if (budgetWarning)
|
|
43
|
+
lines.push(budgetWarning);
|
|
44
|
+
}
|
|
33
45
|
// Add agents if available
|
|
34
46
|
if (context.activeAgents.length > 0) {
|
|
35
47
|
const agents = renderAgentsByFormat(context.activeAgents, enabledElements.agentsFormat || 'codes');
|
|
@@ -73,6 +85,14 @@ export async function render(context, config) {
|
|
|
73
85
|
const session = renderSession(context.sessionHealth);
|
|
74
86
|
if (session)
|
|
75
87
|
elements.push(session);
|
|
88
|
+
// Add analytics inline if available
|
|
89
|
+
const analytics = renderSessionHealthAnalytics(context.sessionHealth);
|
|
90
|
+
if (analytics)
|
|
91
|
+
elements.push(analytics);
|
|
92
|
+
// Add budget warning to detail lines if needed
|
|
93
|
+
const warning = renderBudgetWarning(context.sessionHealth);
|
|
94
|
+
if (warning)
|
|
95
|
+
detailLines.push(warning);
|
|
76
96
|
}
|
|
77
97
|
// Ralph loop state
|
|
78
98
|
if (enabledElements.ralph && context.ralph) {
|
|
@@ -149,6 +169,12 @@ export async function render(context, config) {
|
|
|
149
169
|
try {
|
|
150
170
|
const analytics = await getAnalyticsDisplay();
|
|
151
171
|
detailLines.push(renderAnalyticsLine(analytics));
|
|
172
|
+
// Also add cache efficiency if SessionHealth available
|
|
173
|
+
if (context.sessionHealth?.cacheHitRate !== undefined) {
|
|
174
|
+
const cacheEfficiency = renderCacheEfficiency(context.sessionHealth);
|
|
175
|
+
if (cacheEfficiency)
|
|
176
|
+
detailLines.push(cacheEfficiency);
|
|
177
|
+
}
|
|
152
178
|
}
|
|
153
179
|
catch {
|
|
154
180
|
// Analytics not available, skip
|
package/dist/hud/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"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"}
|
package/dist/hud/types.d.ts
CHANGED
package/dist/hud/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hud/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAMrC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAMD,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IAExB,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IAEZ,wBAAwB;IACxB,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF,6BAA6B;IAC7B,cAAc,EAAE;QACd,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE;YACd,YAAY,EAAE,MAAM,CAAC;YACrB,2BAA2B,EAAE,MAAM,CAAC;YACpC,uBAAuB,EAAE,MAAM,CAAC;SACjC,CAAC;KACH,CAAC;CACH;AAMD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAG3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hud/types.ts"],"names":[],"mappings":"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"}
|
package/dist/hud/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hud/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hud/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoQH,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE;QACR,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI,EAAG,8BAA8B;QACjD,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,WAAW,EAAE,0CAA0C;QACrE,cAAc,EAAE,CAAC,EAAE,kCAAkC;QACrD,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,KAAK,EAAG,oDAAoD;QAC9E,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,KAAK,EAAG,kDAAkD;KACpE;IACD,UAAU,EAAE;QACV,cAAc,EAAE,EAAE;QAClB,wBAAwB,EAAE,EAAE;QAC5B,eAAe,EAAE,EAAE;QACnB,YAAY,EAAE,CAAC;KAChB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAiD;IAC1E,OAAO,EAAE;QACP,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,OAAO,EAAE,8BAA8B;QACrD,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,KAAK;QACtB,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,KAAK;QACvB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,KAAK;QACpB,OAAO,EAAE,KAAK;KACf;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,OAAO;QACrB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,KAAK;QACtB,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,KAAK;QACvB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,KAAK;QACpB,OAAO,EAAE,KAAK;KACf;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,WAAW,EAAE,oCAAoC;QAC/D,cAAc,EAAE,CAAC,EAAE,sBAAsB;QACzC,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,KAAK,EAAG,iCAAiC;QAC3D,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,IAAI;KACd;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,WAAW,EAAE,+BAA+B;QAC1D,cAAc,EAAE,EAAE,EAAE,gCAAgC;QACpD,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,KAAK,EAAG,iCAAiC;QAC3D,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,IAAI;KACd;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,OAAO;QACrB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,KAAK;QACtB,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,KAAK,EAAG,iCAAiC;QAC3D,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,KAAK;KACf;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,WAAW;QACzB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,KAAK,EAAG,iCAAiC;QAC3D,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,IAAI;KACd;CACF,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# OMC Analytics System
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Automatic token tracking and cost estimation for Claude API usage in oh-my-claudecode.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Automatic Token Tracking**: Zero manual recording - tracks every HUD render
|
|
10
|
+
- **Cost Estimation**: Model-specific pricing with cache economics
|
|
11
|
+
- **Session Management**: Track costs across multiple sessions
|
|
12
|
+
- **Beautiful CLI**: Enhanced analytics visualization
|
|
13
|
+
- **HUD Integration**: Real-time cost display in statusline
|
|
14
|
+
|
|
15
|
+
## Architecture
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
StatuslineStdin → TokenExtractor → TokenTracker → Analytics Summary
|
|
19
|
+
↓
|
|
20
|
+
HUD Display
|
|
21
|
+
↓
|
|
22
|
+
CLI Reports
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Auto-Tracking
|
|
26
|
+
|
|
27
|
+
Token usage is automatically captured on every HUD render:
|
|
28
|
+
|
|
29
|
+
1. **TokenExtractor** parses StatuslineStdin for token data
|
|
30
|
+
2. **Delta Calculation** computes change from previous render
|
|
31
|
+
3. **Agent Correlation** associates tokens with running agents
|
|
32
|
+
4. **TokenTracker** records usage to JSONL log
|
|
33
|
+
5. **Summary Files** provide fast <10ms session loading
|
|
34
|
+
|
|
35
|
+
## Output Token Estimation
|
|
36
|
+
|
|
37
|
+
Since StatuslineStdin only provides input tokens, output tokens are estimated:
|
|
38
|
+
|
|
39
|
+
- **Haiku**: 30% of input tokens
|
|
40
|
+
- **Sonnet**: 40% of input tokens
|
|
41
|
+
- **Opus**: 50% of input tokens
|
|
42
|
+
|
|
43
|
+
All costs displayed with "~" prefix to indicate estimation.
|
|
44
|
+
|
|
45
|
+
## HUD Integration
|
|
46
|
+
|
|
47
|
+
Real-time analytics in statusline:
|
|
48
|
+
|
|
49
|
+
- Session cost and tokens
|
|
50
|
+
- Cost per hour
|
|
51
|
+
- Cache efficiency
|
|
52
|
+
- Budget warnings (>$2 warning, >$5 critical)
|
|
53
|
+
|
|
54
|
+
Use `analytics` preset for detailed display.
|
|
55
|
+
|
|
56
|
+
## CLI Usage
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# View everything (default dashboard)
|
|
60
|
+
omc
|
|
61
|
+
|
|
62
|
+
# View current session stats
|
|
63
|
+
omc stats
|
|
64
|
+
|
|
65
|
+
# Cost reports
|
|
66
|
+
omc cost daily
|
|
67
|
+
omc cost weekly
|
|
68
|
+
omc cost monthly
|
|
69
|
+
|
|
70
|
+
# Session history
|
|
71
|
+
omc sessions
|
|
72
|
+
|
|
73
|
+
# Agent breakdown
|
|
74
|
+
omc agents
|
|
75
|
+
|
|
76
|
+
# Export data
|
|
77
|
+
omc export cost csv ./costs.csv
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Performance
|
|
81
|
+
|
|
82
|
+
- **HUD Render**: <100ms total (including analytics)
|
|
83
|
+
- **Token Extraction**: <5ms per render
|
|
84
|
+
- **Summary Loading**: <10ms (mtime-cached)
|
|
85
|
+
- **CLI Startup**: <500ms
|
|
86
|
+
|
|
87
|
+
## Files
|
|
88
|
+
|
|
89
|
+
- `src/analytics/token-extractor.ts` - Token extraction
|
|
90
|
+
- `src/analytics/output-estimator.ts` - Output estimation & session ID
|
|
91
|
+
- `src/analytics/analytics-summary.ts` - Fast summary loading
|
|
92
|
+
- `src/hud/index.ts` - Auto-recording integration
|
|
93
|
+
- `.omc/state/token-tracking.jsonl` - Append-only token log
|
|
94
|
+
- `.omc/state/analytics-summary-{sessionId}.json` - Cached summaries
|
|
95
|
+
|
|
96
|
+
## Offline Transcript Analysis
|
|
97
|
+
|
|
98
|
+
### Overview
|
|
99
|
+
|
|
100
|
+
The analytics system can analyze historical Claude Code session transcripts from `~/.claude/projects/` to backfill token usage data.
|
|
101
|
+
|
|
102
|
+
### The `omc backfill` Command
|
|
103
|
+
|
|
104
|
+
Extracts actual token usage from Claude Code transcripts and adds them to the analytics database.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
omc backfill [options]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
#### Options
|
|
111
|
+
|
|
112
|
+
| Option | Description |
|
|
113
|
+
|--------|-------------|
|
|
114
|
+
| `--project <glob>` | Filter to specific project paths |
|
|
115
|
+
| `--from <date>` | Only process transcripts modified after date (ISO format) |
|
|
116
|
+
| `--to <date>` | Only process transcripts modified before date |
|
|
117
|
+
| `--dry-run` | Preview without writing to database |
|
|
118
|
+
| `--reset` | Clear deduplication index and re-process all |
|
|
119
|
+
| `--verbose` | Show detailed per-file progress |
|
|
120
|
+
| `--json` | Output as JSON |
|
|
121
|
+
|
|
122
|
+
#### Examples
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Preview all available transcripts
|
|
126
|
+
omc backfill --dry-run
|
|
127
|
+
|
|
128
|
+
# Backfill specific project
|
|
129
|
+
omc backfill --project "*VibeQuant*"
|
|
130
|
+
|
|
131
|
+
# Backfill recent transcripts only
|
|
132
|
+
omc backfill --from "2026-01-01"
|
|
133
|
+
|
|
134
|
+
# Re-process everything
|
|
135
|
+
omc backfill --reset
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Auto-Backfill
|
|
139
|
+
|
|
140
|
+
The `omc` CLI automatically runs a silent backfill on startup if more than 24 hours have passed since the last backfill. This ensures your analytics stay up-to-date without manual intervention.
|
|
141
|
+
|
|
142
|
+
### Data Sources
|
|
143
|
+
|
|
144
|
+
- **Transcript Location**: `~/.claude/projects/<encoded-path>/<uuid>.jsonl`
|
|
145
|
+
- **Token Data**: Actual `output_tokens` from API responses (not estimates)
|
|
146
|
+
- **Agent Detection**: Extracted from `tool_use` blocks with Task tool
|
|
147
|
+
|
|
148
|
+
### Deduplication
|
|
149
|
+
|
|
150
|
+
Entries are deduplicated using a hash of `sessionId + timestamp + model`. Safe to run multiple times.
|
package/docs/FULL-README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
# oh-my-claudecode
|
|
12
12
|
|
|
13
|
-
[](https://github.com/Yeachan-Heo/oh-my-claudecode)
|
|
14
14
|
[](https://www.npmjs.com/package/oh-my-claudecode)
|
|
15
15
|
[](https://opensource.org/licenses/MIT)
|
|
16
16
|
[](https://nodejs.org/)
|
|
@@ -143,7 +143,7 @@ Background agent resumption with context preservation via `resumeSession()`.
|
|
|
143
143
|
|
|
144
144
|
---
|
|
145
145
|
|
|
146
|
-
## NEW in 3.4.
|
|
146
|
+
## NEW in 3.4.2: Parallel Execution & Advanced Workflows
|
|
147
147
|
|
|
148
148
|
**Game-changing features:** Ultrapilot, swarm orchestration, and pipeline workflows for 3-5x faster execution.
|
|
149
149
|
|
|
@@ -48,7 +48,7 @@ PROMPT_LOWER=$(echo "$PROMPT_NO_CODE" | tr '[:upper:]' '[:lower:]')
|
|
|
48
48
|
# Check for ultrawork keywords (highest priority)
|
|
49
49
|
if echo "$PROMPT_LOWER" | grep -qE '\b(ultrawork|ulw|uw)\b'; then
|
|
50
50
|
# Create persistent ultrawork state
|
|
51
|
-
mkdir -p "$DIRECTORY/.
|
|
51
|
+
mkdir -p "$DIRECTORY/.omc" 2>/dev/null
|
|
52
52
|
mkdir -p "$HOME/.claude" 2>/dev/null
|
|
53
53
|
|
|
54
54
|
# Escape prompt for JSON
|
package/package.json
CHANGED
|
@@ -137,7 +137,7 @@ function activateUltraworkState(directory, prompt) {
|
|
|
137
137
|
last_checked_at: new Date().toISOString()
|
|
138
138
|
};
|
|
139
139
|
|
|
140
|
-
// Write to local .
|
|
140
|
+
// Write to local .omc directory
|
|
141
141
|
const localDir = join(directory, '.omc');
|
|
142
142
|
if (!existsSync(localDir)) {
|
|
143
143
|
try { mkdirSync(localDir, { recursive: true }); } catch {}
|
|
@@ -55,7 +55,7 @@ function writeJsonFile(path, data) {
|
|
|
55
55
|
|
|
56
56
|
// Read PRD and get status
|
|
57
57
|
function getPrdStatus(projectDir) {
|
|
58
|
-
// Check both root and .
|
|
58
|
+
// Check both root and .omc for prd.json
|
|
59
59
|
const paths = [
|
|
60
60
|
join(projectDir, 'prd.json'),
|
|
61
61
|
join(projectDir, '.omc', 'prd.json')
|
|
@@ -18,10 +18,10 @@ function printTest(testName: string, passed: boolean) {
|
|
|
18
18
|
async function runTests() {
|
|
19
19
|
console.log('\n=== Testing Mutual Exclusion Between UltraQA and Ralph Loop ===\n');
|
|
20
20
|
|
|
21
|
-
// Create temp directory with .
|
|
22
|
-
const tempDir = mkdtempSync(join(tmpdir(), '
|
|
23
|
-
const
|
|
24
|
-
mkdirSync(
|
|
21
|
+
// Create temp directory with .omc subfolder
|
|
22
|
+
const tempDir = mkdtempSync(join(tmpdir(), 'omc-test-'));
|
|
23
|
+
const omcDir = join(tempDir, '.omc');
|
|
24
|
+
mkdirSync(omcDir, { recursive: true });
|
|
25
25
|
|
|
26
26
|
console.log(`Using temp directory: ${tempDir}\n`);
|
|
27
27
|
|
|
@@ -5,8 +5,8 @@ import { spawn } from 'child_process';
|
|
|
5
5
|
|
|
6
6
|
// Create test directory
|
|
7
7
|
const testDir = join(tmpdir(), `remember-tag-test-${Date.now()}`);
|
|
8
|
-
const
|
|
9
|
-
mkdirSync(
|
|
8
|
+
const omcDir = join(testDir, '.omc');
|
|
9
|
+
mkdirSync(omcDir, { recursive: true });
|
|
10
10
|
|
|
11
11
|
console.log('Testing remember tag processing in post-tool-verifier.mjs\n');
|
|
12
12
|
|
|
@@ -50,7 +50,7 @@ try {
|
|
|
50
50
|
|
|
51
51
|
await runHook(input1);
|
|
52
52
|
|
|
53
|
-
const notepadPath = join(
|
|
53
|
+
const notepadPath = join(omcDir, 'notepad.md');
|
|
54
54
|
if (existsSync(notepadPath)) {
|
|
55
55
|
const content = readFileSync(notepadPath, 'utf-8');
|
|
56
56
|
if (content.includes('pnpm') && content.includes('Working Memory')) {
|
|
@@ -78,7 +78,7 @@ try {
|
|
|
78
78
|
|
|
79
79
|
await runHook(input2);
|
|
80
80
|
|
|
81
|
-
const notepadPath = join(
|
|
81
|
+
const notepadPath = join(omcDir, 'notepad.md');
|
|
82
82
|
const content = readFileSync(notepadPath, 'utf-8');
|
|
83
83
|
if (content.includes('API endpoint') && content.includes('Priority Context')) {
|
|
84
84
|
console.log('✓ PASS: Priority remember tag saved to Priority Context\n');
|
|
@@ -95,7 +95,7 @@ console.log('Test 3: Non-Task tool should not process tags');
|
|
|
95
95
|
try {
|
|
96
96
|
// Clean up first
|
|
97
97
|
rmSync(testDir, { recursive: true });
|
|
98
|
-
mkdirSync(
|
|
98
|
+
mkdirSync(omcDir, { recursive: true });
|
|
99
99
|
|
|
100
100
|
const input3 = {
|
|
101
101
|
toolName: 'Bash',
|
|
@@ -106,7 +106,7 @@ try {
|
|
|
106
106
|
|
|
107
107
|
await runHook(input3);
|
|
108
108
|
|
|
109
|
-
const notepadPath = join(
|
|
109
|
+
const notepadPath = join(omcDir, 'notepad.md');
|
|
110
110
|
if (!existsSync(notepadPath)) {
|
|
111
111
|
console.log('✓ PASS: Bash tool did not trigger remember tag processing\n');
|
|
112
112
|
} else {
|