oh-my-claude-sisyphus 3.3.10 → 3.4.1

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 (382) hide show
  1. package/README.md +74 -8
  2. package/agents/explore-high.md +195 -0
  3. package/agents/qa-tester-high.md +141 -0
  4. package/agents/templates/README.md +110 -0
  5. package/agents/templates/base-agent.md +54 -0
  6. package/agents/templates/tier-instructions.md +94 -0
  7. package/commands/cancel-ecomode.md +71 -0
  8. package/commands/cancel.md +75 -0
  9. package/commands/ecomode.md +60 -0
  10. package/commands/help.md +1 -1
  11. package/commands/mcp-setup.md +7 -6
  12. package/commands/pipeline.md +231 -0
  13. package/commands/planner.md +174 -0
  14. package/commands/ralplan.md +8 -1
  15. package/commands/swarm.md +280 -0
  16. package/commands/ultrapilot.md +158 -0
  17. package/commands/ultrawork.md +1 -0
  18. package/dist/__tests__/delegation-enforcer-integration.test.d.ts +6 -0
  19. package/dist/__tests__/delegation-enforcer-integration.test.d.ts.map +1 -0
  20. package/dist/__tests__/delegation-enforcer-integration.test.js +136 -0
  21. package/dist/__tests__/delegation-enforcer-integration.test.js.map +1 -0
  22. package/dist/__tests__/delegation-enforcer.test.d.ts +5 -0
  23. package/dist/__tests__/delegation-enforcer.test.d.ts.map +1 -0
  24. package/dist/__tests__/delegation-enforcer.test.js +208 -0
  25. package/dist/__tests__/delegation-enforcer.test.js.map +1 -0
  26. package/dist/__tests__/hooks.test.js +2 -2
  27. package/dist/__tests__/hooks.test.js.map +1 -1
  28. package/dist/__tests__/installer.test.js +4 -6
  29. package/dist/__tests__/installer.test.js.map +1 -1
  30. package/dist/__tests__/ralph-prd.test.js +1 -1
  31. package/dist/__tests__/ralph-prd.test.js.map +1 -1
  32. package/dist/__tests__/ralph-progress.test.js +1 -1
  33. package/dist/__tests__/ralph-progress.test.js.map +1 -1
  34. package/dist/__tests__/skills.test.js +31 -24
  35. package/dist/__tests__/skills.test.js.map +1 -1
  36. package/dist/agents/analyst.d.ts.map +1 -1
  37. package/dist/agents/analyst.js +1 -0
  38. package/dist/agents/analyst.js.map +1 -1
  39. package/dist/agents/architect.d.ts.map +1 -1
  40. package/dist/agents/architect.js +1 -0
  41. package/dist/agents/architect.js.map +1 -1
  42. package/dist/agents/critic.d.ts.map +1 -1
  43. package/dist/agents/critic.js +1 -0
  44. package/dist/agents/critic.js.map +1 -1
  45. package/dist/agents/definitions.d.ts +5 -1
  46. package/dist/agents/definitions.d.ts.map +1 -1
  47. package/dist/agents/definitions.js +53 -155
  48. package/dist/agents/definitions.js.map +1 -1
  49. package/dist/agents/designer.d.ts.map +1 -1
  50. package/dist/agents/designer.js +1 -0
  51. package/dist/agents/designer.js.map +1 -1
  52. package/dist/agents/executor.d.ts.map +1 -1
  53. package/dist/agents/executor.js +1 -0
  54. package/dist/agents/executor.js.map +1 -1
  55. package/dist/agents/explore.d.ts.map +1 -1
  56. package/dist/agents/explore.js +1 -0
  57. package/dist/agents/explore.js.map +1 -1
  58. package/dist/agents/planner.d.ts.map +1 -1
  59. package/dist/agents/planner.js +1 -0
  60. package/dist/agents/planner.js.map +1 -1
  61. package/dist/agents/qa-tester.d.ts.map +1 -1
  62. package/dist/agents/qa-tester.js +1 -0
  63. package/dist/agents/qa-tester.js.map +1 -1
  64. package/dist/agents/researcher.d.ts.map +1 -1
  65. package/dist/agents/researcher.js +1 -0
  66. package/dist/agents/researcher.js.map +1 -1
  67. package/dist/agents/scientist.d.ts.map +1 -1
  68. package/dist/agents/scientist.js +1 -0
  69. package/dist/agents/scientist.js.map +1 -1
  70. package/dist/agents/types.d.ts +2 -0
  71. package/dist/agents/types.d.ts.map +1 -1
  72. package/dist/agents/types.js.map +1 -1
  73. package/dist/agents/vision.d.ts.map +1 -1
  74. package/dist/agents/vision.js +1 -0
  75. package/dist/agents/vision.js.map +1 -1
  76. package/dist/agents/writer.d.ts.map +1 -1
  77. package/dist/agents/writer.js +1 -0
  78. package/dist/agents/writer.js.map +1 -1
  79. package/dist/analytics/cost-estimator.d.ts +14 -0
  80. package/dist/analytics/cost-estimator.d.ts.map +1 -0
  81. package/dist/analytics/cost-estimator.js +70 -0
  82. package/dist/analytics/cost-estimator.js.map +1 -0
  83. package/dist/analytics/export.d.ts +7 -0
  84. package/dist/analytics/export.d.ts.map +1 -0
  85. package/dist/analytics/export.js +93 -0
  86. package/dist/analytics/export.js.map +1 -0
  87. package/dist/analytics/index.d.ts +14 -0
  88. package/dist/analytics/index.d.ts.map +1 -0
  89. package/dist/analytics/index.js +14 -0
  90. package/dist/analytics/index.js.map +1 -0
  91. package/dist/analytics/metrics-collector.d.ts +30 -0
  92. package/dist/analytics/metrics-collector.d.ts.map +1 -0
  93. package/dist/analytics/metrics-collector.js +96 -0
  94. package/dist/analytics/metrics-collector.js.map +1 -0
  95. package/dist/analytics/query-engine.d.ts +32 -0
  96. package/dist/analytics/query-engine.d.ts.map +1 -0
  97. package/dist/analytics/query-engine.js +151 -0
  98. package/dist/analytics/query-engine.js.map +1 -0
  99. package/dist/analytics/session-manager.d.ts +26 -0
  100. package/dist/analytics/session-manager.d.ts.map +1 -0
  101. package/dist/analytics/session-manager.js +201 -0
  102. package/dist/analytics/session-manager.js.map +1 -0
  103. package/dist/analytics/session-types.d.ts +37 -0
  104. package/dist/analytics/session-types.d.ts.map +1 -0
  105. package/dist/analytics/session-types.js +2 -0
  106. package/dist/analytics/session-types.js.map +1 -0
  107. package/dist/analytics/token-tracker.d.ts +24 -0
  108. package/dist/analytics/token-tracker.d.ts.map +1 -0
  109. package/dist/analytics/token-tracker.js +161 -0
  110. package/dist/analytics/token-tracker.js.map +1 -0
  111. package/dist/analytics/types.d.ts +37 -0
  112. package/dist/analytics/types.d.ts.map +1 -0
  113. package/dist/analytics/types.js +21 -0
  114. package/dist/analytics/types.js.map +1 -0
  115. package/dist/cli/analytics.d.ts +3 -0
  116. package/dist/cli/analytics.d.ts.map +1 -0
  117. package/dist/cli/analytics.js +74 -0
  118. package/dist/cli/analytics.js.map +1 -0
  119. package/dist/cli/commands/agents.d.ts +5 -0
  120. package/dist/cli/commands/agents.d.ts.map +1 -0
  121. package/dist/cli/commands/agents.js +29 -0
  122. package/dist/cli/commands/agents.js.map +1 -0
  123. package/dist/cli/commands/cleanup.d.ts +4 -0
  124. package/dist/cli/commands/cleanup.d.ts.map +1 -0
  125. package/dist/cli/commands/cleanup.js +17 -0
  126. package/dist/cli/commands/cleanup.js.map +1 -0
  127. package/dist/cli/commands/cost.d.ts +4 -0
  128. package/dist/cli/commands/cost.d.ts.map +1 -0
  129. package/dist/cli/commands/cost.js +53 -0
  130. package/dist/cli/commands/cost.js.map +1 -0
  131. package/dist/cli/commands/export.d.ts +5 -0
  132. package/dist/cli/commands/export.d.ts.map +1 -0
  133. package/dist/cli/commands/export.js +30 -0
  134. package/dist/cli/commands/export.js.map +1 -0
  135. package/dist/cli/commands/sessions.d.ts +5 -0
  136. package/dist/cli/commands/sessions.d.ts.map +1 -0
  137. package/dist/cli/commands/sessions.js +37 -0
  138. package/dist/cli/commands/sessions.js.map +1 -0
  139. package/dist/cli/commands/stats.d.ts +4 -0
  140. package/dist/cli/commands/stats.d.ts.map +1 -0
  141. package/dist/cli/commands/stats.js +43 -0
  142. package/dist/cli/commands/stats.js.map +1 -0
  143. package/dist/cli/index.js +0 -3
  144. package/dist/cli/index.js.map +1 -1
  145. package/dist/cli/utils/formatting.d.ts +22 -0
  146. package/dist/cli/utils/formatting.d.ts.map +1 -0
  147. package/dist/cli/utils/formatting.js +70 -0
  148. package/dist/cli/utils/formatting.js.map +1 -0
  149. package/dist/config/loader.d.ts.map +1 -1
  150. package/dist/config/loader.js +1 -6
  151. package/dist/config/loader.js.map +1 -1
  152. package/dist/features/delegation-enforcer.d.ts +71 -0
  153. package/dist/features/delegation-enforcer.d.ts.map +1 -0
  154. package/dist/features/delegation-enforcer.js +128 -0
  155. package/dist/features/delegation-enforcer.js.map +1 -0
  156. package/dist/features/index.d.ts +3 -0
  157. package/dist/features/index.d.ts.map +1 -1
  158. package/dist/features/index.js +18 -0
  159. package/dist/features/index.js.map +1 -1
  160. package/dist/features/state-manager/index.d.ts +100 -0
  161. package/dist/features/state-manager/index.d.ts.map +1 -0
  162. package/dist/features/state-manager/index.js +407 -0
  163. package/dist/features/state-manager/index.js.map +1 -0
  164. package/dist/features/state-manager/types.d.ts +147 -0
  165. package/dist/features/state-manager/types.d.ts.map +1 -0
  166. package/dist/features/state-manager/types.js +30 -0
  167. package/dist/features/state-manager/types.js.map +1 -0
  168. package/dist/features/task-decomposer/index.d.ts +33 -0
  169. package/dist/features/task-decomposer/index.d.ts.map +1 -0
  170. package/dist/features/task-decomposer/index.js +698 -0
  171. package/dist/features/task-decomposer/index.js.map +1 -0
  172. package/dist/features/task-decomposer/types.d.ts +133 -0
  173. package/dist/features/task-decomposer/types.d.ts.map +1 -0
  174. package/dist/features/task-decomposer/types.js +8 -0
  175. package/dist/features/task-decomposer/types.js.map +1 -0
  176. package/dist/features/verification/example.d.ts +49 -0
  177. package/dist/features/verification/example.d.ts.map +1 -0
  178. package/dist/features/verification/example.js +235 -0
  179. package/dist/features/verification/example.js.map +1 -0
  180. package/dist/features/verification/index.d.ts +97 -0
  181. package/dist/features/verification/index.d.ts.map +1 -0
  182. package/dist/features/verification/index.js +439 -0
  183. package/dist/features/verification/index.js.map +1 -0
  184. package/dist/features/verification/types.d.ts +142 -0
  185. package/dist/features/verification/types.d.ts.map +1 -0
  186. package/dist/features/verification/types.js +7 -0
  187. package/dist/features/verification/types.js.map +1 -0
  188. package/dist/hooks/agent-usage-reminder/constants.d.ts.map +1 -1
  189. package/dist/hooks/agent-usage-reminder/constants.js +0 -1
  190. package/dist/hooks/agent-usage-reminder/constants.js.map +1 -1
  191. package/dist/hooks/autopilot/__tests__/cancel.test.js +4 -4
  192. package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -1
  193. package/dist/hooks/autopilot/__tests__/summary.test.js +1 -1
  194. package/dist/hooks/autopilot/__tests__/summary.test.js.map +1 -1
  195. package/dist/hooks/autopilot/__tests__/transition.test.js +1 -2
  196. package/dist/hooks/autopilot/__tests__/transition.test.js.map +1 -1
  197. package/dist/hooks/autopilot/cancel.js +2 -2
  198. package/dist/hooks/autopilot/cancel.js.map +1 -1
  199. package/dist/hooks/autopilot/enforcement.d.ts +16 -2
  200. package/dist/hooks/autopilot/enforcement.d.ts.map +1 -1
  201. package/dist/hooks/autopilot/enforcement.js +78 -4
  202. package/dist/hooks/autopilot/enforcement.js.map +1 -1
  203. package/dist/hooks/autopilot/index.d.ts +3 -6
  204. package/dist/hooks/autopilot/index.d.ts.map +1 -1
  205. package/dist/hooks/autopilot/index.js +6 -12
  206. package/dist/hooks/autopilot/index.js.map +1 -1
  207. package/dist/hooks/autopilot/state.d.ts +36 -2
  208. package/dist/hooks/autopilot/state.d.ts.map +1 -1
  209. package/dist/hooks/autopilot/state.js +216 -2
  210. package/dist/hooks/autopilot/state.js.map +1 -1
  211. package/dist/hooks/autopilot/validation.d.ts +23 -2
  212. package/dist/hooks/autopilot/validation.d.ts.map +1 -1
  213. package/dist/hooks/autopilot/validation.js +158 -1
  214. package/dist/hooks/autopilot/validation.js.map +1 -1
  215. package/dist/hooks/bridge.js +3 -3
  216. package/dist/hooks/bridge.js.map +1 -1
  217. package/dist/hooks/index.d.ts +5 -9
  218. package/dist/hooks/index.d.ts.map +1 -1
  219. package/dist/hooks/index.js +31 -21
  220. package/dist/hooks/index.js.map +1 -1
  221. package/dist/hooks/learner/promotion.js +1 -1
  222. package/dist/hooks/learner/promotion.js.map +1 -1
  223. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  224. package/dist/hooks/persistent-mode/index.js +2 -3
  225. package/dist/hooks/persistent-mode/index.js.map +1 -1
  226. package/dist/hooks/ralph/index.d.ts +11 -0
  227. package/dist/hooks/ralph/index.d.ts.map +1 -0
  228. package/dist/hooks/ralph/index.js +53 -0
  229. package/dist/hooks/ralph/index.js.map +1 -0
  230. package/dist/hooks/ralph/loop.d.ts +116 -0
  231. package/dist/hooks/ralph/loop.d.ts.map +1 -0
  232. package/dist/hooks/ralph/loop.js +322 -0
  233. package/dist/hooks/ralph/loop.js.map +1 -0
  234. package/dist/hooks/ralph/prd.d.ts +130 -0
  235. package/dist/hooks/ralph/prd.d.ts.map +1 -0
  236. package/dist/hooks/ralph/prd.js +310 -0
  237. package/dist/hooks/ralph/prd.js.map +1 -0
  238. package/dist/hooks/ralph/progress.d.ts +102 -0
  239. package/dist/hooks/ralph/progress.d.ts.map +1 -0
  240. package/dist/hooks/ralph/progress.js +408 -0
  241. package/dist/hooks/ralph/progress.js.map +1 -0
  242. package/dist/hooks/ralph/verifier.d.ts +72 -0
  243. package/dist/hooks/ralph/verifier.d.ts.map +1 -0
  244. package/dist/hooks/ralph/verifier.js +223 -0
  245. package/dist/hooks/ralph/verifier.js.map +1 -0
  246. package/dist/hooks/recovery/constants.d.ts +114 -0
  247. package/dist/hooks/recovery/constants.d.ts.map +1 -0
  248. package/dist/hooks/recovery/constants.js +227 -0
  249. package/dist/hooks/recovery/constants.js.map +1 -0
  250. package/dist/hooks/recovery/context-window.d.ts +24 -0
  251. package/dist/hooks/recovery/context-window.d.ts.map +1 -0
  252. package/dist/hooks/recovery/context-window.js +321 -0
  253. package/dist/hooks/recovery/context-window.js.map +1 -0
  254. package/dist/hooks/recovery/edit-error.d.ts +24 -0
  255. package/dist/hooks/recovery/edit-error.d.ts.map +1 -0
  256. package/dist/hooks/recovery/edit-error.js +56 -0
  257. package/dist/hooks/recovery/edit-error.js.map +1 -0
  258. package/dist/hooks/recovery/index.d.ts +102 -0
  259. package/dist/hooks/recovery/index.d.ts.map +1 -0
  260. package/dist/hooks/recovery/index.js +166 -0
  261. package/dist/hooks/recovery/index.js.map +1 -0
  262. package/dist/hooks/recovery/session-recovery.d.ts +24 -0
  263. package/dist/hooks/recovery/session-recovery.d.ts.map +1 -0
  264. package/dist/hooks/recovery/session-recovery.js +281 -0
  265. package/dist/hooks/recovery/session-recovery.js.map +1 -0
  266. package/dist/hooks/recovery/storage.d.ts +75 -0
  267. package/dist/hooks/recovery/storage.d.ts.map +1 -0
  268. package/dist/hooks/recovery/storage.js +382 -0
  269. package/dist/hooks/recovery/storage.js.map +1 -0
  270. package/dist/hooks/recovery/types.d.ts +196 -0
  271. package/dist/hooks/recovery/types.d.ts.map +1 -0
  272. package/dist/hooks/recovery/types.js +32 -0
  273. package/dist/hooks/recovery/types.js.map +1 -0
  274. package/dist/hooks/ultrapilot/index.d.ts +90 -0
  275. package/dist/hooks/ultrapilot/index.d.ts.map +1 -0
  276. package/dist/hooks/ultrapilot/index.js +310 -0
  277. package/dist/hooks/ultrapilot/index.js.map +1 -0
  278. package/dist/hooks/ultrapilot/state.d.ts +72 -0
  279. package/dist/hooks/ultrapilot/state.d.ts.map +1 -0
  280. package/dist/hooks/ultrapilot/state.js +258 -0
  281. package/dist/hooks/ultrapilot/state.js.map +1 -0
  282. package/dist/hooks/ultrapilot/types.d.ts +113 -0
  283. package/dist/hooks/ultrapilot/types.d.ts.map +1 -0
  284. package/dist/hooks/ultrapilot/types.js +36 -0
  285. package/dist/hooks/ultrapilot/types.js.map +1 -0
  286. package/dist/hooks/ultraqa/index.d.ts +94 -0
  287. package/dist/hooks/ultraqa/index.d.ts.map +1 -0
  288. package/dist/hooks/ultraqa/index.js +216 -0
  289. package/dist/hooks/ultraqa/index.js.map +1 -0
  290. package/dist/hooks/ultrawork/index.d.ts +62 -0
  291. package/dist/hooks/ultrawork/index.d.ts.map +1 -0
  292. package/dist/hooks/ultrawork/index.js +208 -0
  293. package/dist/hooks/ultrawork/index.js.map +1 -0
  294. package/dist/hud/analytics-display.d.ts +28 -0
  295. package/dist/hud/analytics-display.d.ts.map +1 -0
  296. package/dist/hud/analytics-display.js +105 -0
  297. package/dist/hud/analytics-display.js.map +1 -0
  298. package/dist/hud/background-cleanup.d.ts +28 -0
  299. package/dist/hud/background-cleanup.d.ts.map +1 -0
  300. package/dist/hud/background-cleanup.js +92 -0
  301. package/dist/hud/background-cleanup.js.map +1 -0
  302. package/dist/hud/index.js +4 -2
  303. package/dist/hud/index.js.map +1 -1
  304. package/dist/hud/render.d.ts +1 -1
  305. package/dist/hud/render.d.ts.map +1 -1
  306. package/dist/hud/render.js +32 -1
  307. package/dist/hud/render.js.map +1 -1
  308. package/dist/hud/state.d.ts +5 -0
  309. package/dist/hud/state.d.ts.map +1 -1
  310. package/dist/hud/state.js +13 -0
  311. package/dist/hud/state.js.map +1 -1
  312. package/dist/hud/types.d.ts +11 -1
  313. package/dist/hud/types.d.ts.map +1 -1
  314. package/dist/hud/types.js +19 -0
  315. package/dist/hud/types.js.map +1 -1
  316. package/dist/index.d.ts.map +1 -1
  317. package/dist/index.js +1 -2
  318. package/dist/index.js.map +1 -1
  319. package/dist/installer/index.d.ts +1 -1
  320. package/dist/installer/index.d.ts.map +1 -1
  321. package/dist/installer/index.js +1 -1
  322. package/dist/installer/index.js.map +1 -1
  323. package/dist/mcp/index.d.ts +1 -1
  324. package/dist/mcp/index.d.ts.map +1 -1
  325. package/dist/mcp/index.js +1 -1
  326. package/dist/mcp/index.js.map +1 -1
  327. package/dist/mcp/servers.d.ts +2 -18
  328. package/dist/mcp/servers.d.ts.map +1 -1
  329. package/dist/mcp/servers.js +4 -36
  330. package/dist/mcp/servers.js.map +1 -1
  331. package/dist/shared/types.d.ts +1 -3
  332. package/dist/shared/types.d.ts.map +1 -1
  333. package/docs/CLAUDE.md +170 -44
  334. package/docs/DELEGATION-ENFORCER.md +282 -0
  335. package/docs/FULL-README.md +130 -16
  336. package/docs/LOCAL_PLUGIN_INSTALL.md +1 -1
  337. package/docs/MIGRATION.md +513 -98
  338. package/docs/SYNC-SYSTEM.md +528 -0
  339. package/package.json +9 -3
  340. package/scripts/sync-metadata.ts +363 -0
  341. package/scripts/test-mutual-exclusion.ts +1 -1
  342. package/skills/analyze/SKILL.md +0 -1
  343. package/skills/autopilot/SKILL.md +0 -1
  344. package/skills/build-fix/SKILL.md +123 -0
  345. package/skills/cancel/SKILL.md +580 -0
  346. package/skills/cancel-autopilot/SKILL.md +0 -1
  347. package/skills/cancel-ecomode/SKILL.md +41 -0
  348. package/skills/cancel-ralph/SKILL.md +0 -1
  349. package/skills/cancel-ultraqa/SKILL.md +0 -1
  350. package/skills/cancel-ultrawork/SKILL.md +0 -1
  351. package/skills/code-review/SKILL.md +179 -0
  352. package/skills/deepinit/SKILL.md +0 -1
  353. package/skills/deepsearch/SKILL.md +0 -1
  354. package/skills/doctor/SKILL.md +0 -1
  355. package/skills/ecomode/SKILL.md +128 -0
  356. package/skills/frontend-ui-ux/SKILL.md +0 -1
  357. package/skills/git-master/SKILL.md +0 -1
  358. package/skills/help/SKILL.md +1 -2
  359. package/skills/hud/SKILL.md +0 -1
  360. package/skills/learner/SKILL.md +0 -1
  361. package/skills/mcp-setup/SKILL.md +8 -7
  362. package/skills/note/SKILL.md +0 -1
  363. package/skills/omc-default/SKILL.md +0 -1
  364. package/skills/omc-default-global/SKILL.md +0 -1
  365. package/skills/omc-setup/SKILL.md +176 -10
  366. package/skills/orchestrate/SKILL.md +0 -1
  367. package/skills/pipeline/SKILL.md +417 -0
  368. package/skills/plan/SKILL.md +138 -21
  369. package/skills/planner/SKILL.md +0 -1
  370. package/skills/ralph/SKILL.md +65 -1
  371. package/skills/ralph-init/SKILL.md +0 -1
  372. package/skills/ralplan/SKILL.md +0 -1
  373. package/skills/release/SKILL.md +0 -1
  374. package/skills/research/SKILL.md +0 -1
  375. package/skills/review/SKILL.md +0 -1
  376. package/skills/security-review/SKILL.md +254 -0
  377. package/skills/swarm/SKILL.md +349 -0
  378. package/skills/tdd/SKILL.md +0 -1
  379. package/skills/ultrapilot/SKILL.md +563 -0
  380. package/skills/ultraqa/SKILL.md +0 -1
  381. package/skills/ultrawork/SKILL.md +0 -1
  382. package/docs/MIGRATION-v3.md +0 -186
@@ -0,0 +1,216 @@
1
+ /**
2
+ * UltraQA Loop Hook
3
+ *
4
+ * QA cycling workflow that runs test → architect verify → fix → repeat
5
+ * until the QA goal is met or max cycles reached.
6
+ */
7
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';
8
+ import { join } from 'path';
9
+ import { readRalphState } from '../ralph/index.js';
10
+ const DEFAULT_MAX_CYCLES = 5;
11
+ const SAME_FAILURE_THRESHOLD = 3;
12
+ /**
13
+ * Get the state file path for UltraQA
14
+ */
15
+ function getStateFilePath(directory) {
16
+ const omcDir = join(directory, '.omc');
17
+ return join(omcDir, 'ultraqa-state.json');
18
+ }
19
+ /**
20
+ * Ensure the .omc directory exists
21
+ */
22
+ function ensureStateDir(directory) {
23
+ const omcDir = join(directory, '.omc');
24
+ if (!existsSync(omcDir)) {
25
+ mkdirSync(omcDir, { recursive: true });
26
+ }
27
+ }
28
+ /**
29
+ * Read UltraQA state from disk
30
+ */
31
+ export function readUltraQAState(directory) {
32
+ const stateFile = getStateFilePath(directory);
33
+ if (!existsSync(stateFile)) {
34
+ return null;
35
+ }
36
+ try {
37
+ const content = readFileSync(stateFile, 'utf-8');
38
+ return JSON.parse(content);
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ /**
45
+ * Write UltraQA state to disk
46
+ */
47
+ export function writeUltraQAState(directory, state) {
48
+ try {
49
+ ensureStateDir(directory);
50
+ const stateFile = getStateFilePath(directory);
51
+ writeFileSync(stateFile, JSON.stringify(state, null, 2));
52
+ return true;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Clear UltraQA state
60
+ */
61
+ export function clearUltraQAState(directory) {
62
+ const stateFile = getStateFilePath(directory);
63
+ if (!existsSync(stateFile)) {
64
+ return true;
65
+ }
66
+ try {
67
+ unlinkSync(stateFile);
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ /**
75
+ * Check if Ralph Loop is active (mutual exclusion check)
76
+ */
77
+ export function isRalphLoopActive(directory) {
78
+ const ralphState = readRalphState(directory);
79
+ return ralphState !== null && ralphState.active === true;
80
+ }
81
+ /**
82
+ * Start a new UltraQA cycle
83
+ * Returns false if Ralph Loop is already active (mutual exclusion)
84
+ */
85
+ export function startUltraQA(directory, goalType, sessionId, options) {
86
+ // Mutual exclusion check: cannot start UltraQA if Ralph Loop is active
87
+ if (isRalphLoopActive(directory)) {
88
+ return {
89
+ success: false,
90
+ error: 'Cannot start UltraQA while Ralph Loop is active. Cancel Ralph Loop first with /oh-my-claudecode:cancel-ralph.'
91
+ };
92
+ }
93
+ const state = {
94
+ active: true,
95
+ goal_type: goalType,
96
+ goal_pattern: options?.customPattern ?? null,
97
+ cycle: 1,
98
+ max_cycles: options?.maxCycles ?? DEFAULT_MAX_CYCLES,
99
+ failures: [],
100
+ started_at: new Date().toISOString(),
101
+ session_id: sessionId
102
+ };
103
+ const written = writeUltraQAState(directory, state);
104
+ return { success: written };
105
+ }
106
+ /**
107
+ * Record a failure and increment cycle
108
+ */
109
+ export function recordFailure(directory, failureDescription) {
110
+ const state = readUltraQAState(directory);
111
+ if (!state || !state.active) {
112
+ return { state: null, shouldExit: true, reason: 'not_active' };
113
+ }
114
+ // Add failure to array
115
+ state.failures.push(failureDescription);
116
+ // Check for repeated same failure
117
+ const recentFailures = state.failures.slice(-SAME_FAILURE_THRESHOLD);
118
+ if (recentFailures.length >= SAME_FAILURE_THRESHOLD) {
119
+ const allSame = recentFailures.every(f => normalizeFailure(f) === normalizeFailure(recentFailures[0]));
120
+ if (allSame) {
121
+ return {
122
+ state,
123
+ shouldExit: true,
124
+ reason: `Same failure detected ${SAME_FAILURE_THRESHOLD} times: ${recentFailures[0]}`
125
+ };
126
+ }
127
+ }
128
+ // Increment cycle
129
+ state.cycle += 1;
130
+ // Check max cycles
131
+ if (state.cycle > state.max_cycles) {
132
+ return {
133
+ state,
134
+ shouldExit: true,
135
+ reason: `Max cycles (${state.max_cycles}) reached`
136
+ };
137
+ }
138
+ writeUltraQAState(directory, state);
139
+ return { state, shouldExit: false };
140
+ }
141
+ /**
142
+ * Mark UltraQA as successful
143
+ */
144
+ export function completeUltraQA(directory) {
145
+ const state = readUltraQAState(directory);
146
+ if (!state) {
147
+ return null;
148
+ }
149
+ const result = {
150
+ success: true,
151
+ cycles: state.cycle,
152
+ reason: 'goal_met'
153
+ };
154
+ clearUltraQAState(directory);
155
+ return result;
156
+ }
157
+ /**
158
+ * Stop UltraQA with failure
159
+ */
160
+ export function stopUltraQA(directory, reason, diagnosis) {
161
+ const state = readUltraQAState(directory);
162
+ if (!state) {
163
+ return null;
164
+ }
165
+ const result = {
166
+ success: false,
167
+ cycles: state.cycle,
168
+ reason,
169
+ diagnosis
170
+ };
171
+ clearUltraQAState(directory);
172
+ return result;
173
+ }
174
+ /**
175
+ * Cancel UltraQA
176
+ */
177
+ export function cancelUltraQA(directory) {
178
+ return clearUltraQAState(directory);
179
+ }
180
+ /**
181
+ * Normalize failure description for comparison
182
+ */
183
+ function normalizeFailure(failure) {
184
+ // Remove timestamps, line numbers, and other variable parts
185
+ return failure
186
+ .replace(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/g, '') // ISO timestamps
187
+ .replace(/:\d+:\d+/g, '') // line:col numbers
188
+ .replace(/\d+ms/g, '') // timing
189
+ .replace(/\s+/g, ' ')
190
+ .trim()
191
+ .toLowerCase();
192
+ }
193
+ /**
194
+ * Get goal command based on goal type
195
+ */
196
+ export function getGoalCommand(goalType) {
197
+ switch (goalType) {
198
+ case 'tests':
199
+ return 'npm test';
200
+ case 'build':
201
+ return 'npm run build';
202
+ case 'lint':
203
+ return 'npm run lint';
204
+ case 'typecheck':
205
+ return 'npm run typecheck || tsc --noEmit';
206
+ case 'custom':
207
+ return '# Custom command based on goal pattern';
208
+ }
209
+ }
210
+ /**
211
+ * Format progress message
212
+ */
213
+ export function formatProgressMessage(cycle, maxCycles, status) {
214
+ return `[ULTRAQA Cycle ${cycle}/${maxCycles}] ${status}`;
215
+ }
216
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/ultraqa/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Ultrawork State Management
3
+ *
4
+ * Manages persistent ultrawork mode state across sessions.
5
+ * When ultrawork is activated and todos remain incomplete,
6
+ * this module ensures the mode persists until all work is done.
7
+ */
8
+ export interface UltraworkState {
9
+ /** Whether ultrawork mode is currently active */
10
+ active: boolean;
11
+ /** When ultrawork was activated */
12
+ started_at: string;
13
+ /** The original prompt that triggered ultrawork */
14
+ original_prompt: string;
15
+ /** Session ID the mode is bound to */
16
+ session_id?: string;
17
+ /** Number of times the mode has been reinforced (for metrics) */
18
+ reinforcement_count: number;
19
+ /** Last time the mode was checked/reinforced */
20
+ last_checked_at: string;
21
+ /** Whether this ultrawork session is linked to a ralph-loop session */
22
+ linked_to_ralph?: boolean;
23
+ }
24
+ /**
25
+ * Read Ultrawork state from disk (checks both local and global)
26
+ */
27
+ export declare function readUltraworkState(directory?: string): UltraworkState | null;
28
+ /**
29
+ * Write Ultrawork state to disk (both local and global for redundancy)
30
+ */
31
+ export declare function writeUltraworkState(state: UltraworkState, directory?: string): boolean;
32
+ /**
33
+ * Activate ultrawork mode
34
+ */
35
+ export declare function activateUltrawork(prompt: string, sessionId?: string, directory?: string, linkedToRalph?: boolean): boolean;
36
+ /**
37
+ * Deactivate ultrawork mode
38
+ */
39
+ export declare function deactivateUltrawork(directory?: string): boolean;
40
+ /**
41
+ * Increment reinforcement count (called when mode is reinforced on stop)
42
+ */
43
+ export declare function incrementReinforcement(directory?: string): UltraworkState | null;
44
+ /**
45
+ * Check if ultrawork should be reinforced (active with pending todos)
46
+ */
47
+ export declare function shouldReinforceUltrawork(sessionId?: string, directory?: string): boolean;
48
+ /**
49
+ * Get ultrawork persistence message for injection
50
+ */
51
+ export declare function getUltraworkPersistenceMessage(state: UltraworkState): string;
52
+ /**
53
+ * Create an Ultrawork State hook instance
54
+ */
55
+ export declare function createUltraworkStateHook(directory: string): {
56
+ activate: (prompt: string, sessionId?: string) => boolean;
57
+ deactivate: () => boolean;
58
+ getState: () => UltraworkState | null;
59
+ shouldReinforce: (sessionId?: string) => boolean;
60
+ incrementReinforcement: () => UltraworkState | null;
61
+ };
62
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/ultrawork/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA+CD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAwB5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAgBtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,OAAO,GACtB,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAuB/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAehF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAaT;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAuB5E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM;uBAEnC,MAAM,cAAc,MAAM;;;kCAIf,MAAM;;EAIvC"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Ultrawork State Management
3
+ *
4
+ * Manages persistent ultrawork mode state across sessions.
5
+ * When ultrawork is activated and todos remain incomplete,
6
+ * this module ensures the mode persists until all work is done.
7
+ */
8
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { homedir } from 'os';
11
+ const _DEFAULT_STATE = {
12
+ active: false,
13
+ started_at: '',
14
+ original_prompt: '',
15
+ reinforcement_count: 0,
16
+ last_checked_at: ''
17
+ };
18
+ /**
19
+ * Get the state file path for Ultrawork
20
+ */
21
+ function getStateFilePath(directory) {
22
+ const baseDir = directory || process.cwd();
23
+ const omcDir = join(baseDir, '.omc');
24
+ return join(omcDir, 'ultrawork-state.json');
25
+ }
26
+ /**
27
+ * Get global state file path (for cross-session persistence)
28
+ */
29
+ function getGlobalStateFilePath() {
30
+ return join(homedir(), '.claude', 'ultrawork-state.json');
31
+ }
32
+ /**
33
+ * Ensure the .omc directory exists
34
+ */
35
+ function ensureStateDir(directory) {
36
+ const baseDir = directory || process.cwd();
37
+ const omcDir = join(baseDir, '.omc');
38
+ if (!existsSync(omcDir)) {
39
+ mkdirSync(omcDir, { recursive: true });
40
+ }
41
+ }
42
+ /**
43
+ * Ensure the ~/.claude directory exists
44
+ */
45
+ function ensureGlobalStateDir() {
46
+ const claudeDir = join(homedir(), '.claude');
47
+ if (!existsSync(claudeDir)) {
48
+ mkdirSync(claudeDir, { recursive: true });
49
+ }
50
+ }
51
+ /**
52
+ * Read Ultrawork state from disk (checks both local and global)
53
+ */
54
+ export function readUltraworkState(directory) {
55
+ // Check local state first
56
+ const localStateFile = getStateFilePath(directory);
57
+ if (existsSync(localStateFile)) {
58
+ try {
59
+ const content = readFileSync(localStateFile, 'utf-8');
60
+ return JSON.parse(content);
61
+ }
62
+ catch {
63
+ // Fall through to global check
64
+ }
65
+ }
66
+ // Check global state
67
+ const globalStateFile = getGlobalStateFilePath();
68
+ if (existsSync(globalStateFile)) {
69
+ try {
70
+ const content = readFileSync(globalStateFile, 'utf-8');
71
+ return JSON.parse(content);
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ return null;
78
+ }
79
+ /**
80
+ * Write Ultrawork state to disk (both local and global for redundancy)
81
+ */
82
+ export function writeUltraworkState(state, directory) {
83
+ try {
84
+ // Write to local .omc
85
+ ensureStateDir(directory);
86
+ const localStateFile = getStateFilePath(directory);
87
+ writeFileSync(localStateFile, JSON.stringify(state, null, 2));
88
+ // Write to global ~/.claude for cross-session persistence
89
+ ensureGlobalStateDir();
90
+ const globalStateFile = getGlobalStateFilePath();
91
+ writeFileSync(globalStateFile, JSON.stringify(state, null, 2));
92
+ return true;
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ }
98
+ /**
99
+ * Activate ultrawork mode
100
+ */
101
+ export function activateUltrawork(prompt, sessionId, directory, linkedToRalph) {
102
+ const state = {
103
+ active: true,
104
+ started_at: new Date().toISOString(),
105
+ original_prompt: prompt,
106
+ session_id: sessionId,
107
+ reinforcement_count: 0,
108
+ last_checked_at: new Date().toISOString(),
109
+ linked_to_ralph: linkedToRalph
110
+ };
111
+ return writeUltraworkState(state, directory);
112
+ }
113
+ /**
114
+ * Deactivate ultrawork mode
115
+ */
116
+ export function deactivateUltrawork(directory) {
117
+ // Remove local state
118
+ const localStateFile = getStateFilePath(directory);
119
+ if (existsSync(localStateFile)) {
120
+ try {
121
+ unlinkSync(localStateFile);
122
+ }
123
+ catch {
124
+ // Continue to global cleanup
125
+ }
126
+ }
127
+ // Remove global state
128
+ const globalStateFile = getGlobalStateFilePath();
129
+ if (existsSync(globalStateFile)) {
130
+ try {
131
+ unlinkSync(globalStateFile);
132
+ return true;
133
+ }
134
+ catch {
135
+ return false;
136
+ }
137
+ }
138
+ return true;
139
+ }
140
+ /**
141
+ * Increment reinforcement count (called when mode is reinforced on stop)
142
+ */
143
+ export function incrementReinforcement(directory) {
144
+ const state = readUltraworkState(directory);
145
+ if (!state || !state.active) {
146
+ return null;
147
+ }
148
+ state.reinforcement_count += 1;
149
+ state.last_checked_at = new Date().toISOString();
150
+ if (writeUltraworkState(state, directory)) {
151
+ return state;
152
+ }
153
+ return null;
154
+ }
155
+ /**
156
+ * Check if ultrawork should be reinforced (active with pending todos)
157
+ */
158
+ export function shouldReinforceUltrawork(sessionId, directory) {
159
+ const state = readUltraworkState(directory);
160
+ if (!state || !state.active) {
161
+ return false;
162
+ }
163
+ // If bound to a session, only reinforce for that session
164
+ if (state.session_id && sessionId && state.session_id !== sessionId) {
165
+ return false;
166
+ }
167
+ return true;
168
+ }
169
+ /**
170
+ * Get ultrawork persistence message for injection
171
+ */
172
+ export function getUltraworkPersistenceMessage(state) {
173
+ return `<ultrawork-persistence>
174
+
175
+ [ULTRAWORK MODE STILL ACTIVE - Reinforcement #${state.reinforcement_count + 1}]
176
+
177
+ Your ultrawork session is NOT complete. Incomplete todos remain.
178
+
179
+ REMEMBER THE ULTRAWORK RULES:
180
+ - **PARALLEL**: Fire independent calls simultaneously - NEVER wait sequentially
181
+ - **BACKGROUND FIRST**: Use Task(run_in_background=true) for exploration (10+ concurrent)
182
+ - **TODO**: Track EVERY step. Mark complete IMMEDIATELY after each
183
+ - **VERIFY**: Check ALL requirements met before done
184
+ - **NO Premature Stopping**: ALL TODOs must be complete
185
+
186
+ Continue working on the next pending task. DO NOT STOP until all tasks are marked complete.
187
+
188
+ Original task: ${state.original_prompt}
189
+
190
+ </ultrawork-persistence>
191
+
192
+ ---
193
+
194
+ `;
195
+ }
196
+ /**
197
+ * Create an Ultrawork State hook instance
198
+ */
199
+ export function createUltraworkStateHook(directory) {
200
+ return {
201
+ activate: (prompt, sessionId) => activateUltrawork(prompt, sessionId, directory),
202
+ deactivate: () => deactivateUltrawork(directory),
203
+ getState: () => readUltraworkState(directory),
204
+ shouldReinforce: (sessionId) => shouldReinforceUltrawork(sessionId, directory),
205
+ incrementReinforcement: () => incrementReinforcement(directory)
206
+ };
207
+ }
208
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/ultrawork/index.ts"],"names":[],"mappings":"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"}
@@ -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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"}