@liangjie559567/ultrapower 5.0.25 → 5.2.0

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 (116) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/__tests__/compatibility.test.js +6 -6
  3. package/dist/__tests__/live-data.test.js +9 -9
  4. package/dist/__tests__/rate-limit-wait/integration.test.js +68 -68
  5. package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +33 -33
  6. package/dist/__tests__/skills.test.js +3 -2
  7. package/dist/__tests__/skills.test.js.map +1 -1
  8. package/dist/agents/prompt-sections/index.js +36 -36
  9. package/dist/cli/index.js +226 -226
  10. package/dist/features/rate-limit-wait/daemon.js +5 -5
  11. package/dist/hooks/autopilot/enforcement.js +19 -19
  12. package/dist/hooks/autopilot/validation.js +58 -58
  13. package/dist/hooks/axiom-boot/index.d.ts.map +1 -1
  14. package/dist/hooks/axiom-boot/index.js +2 -1
  15. package/dist/hooks/axiom-boot/index.js.map +1 -1
  16. package/dist/hooks/axiom-boot/storage.d.ts +1 -0
  17. package/dist/hooks/axiom-boot/storage.d.ts.map +1 -1
  18. package/dist/hooks/axiom-boot/storage.js +37 -1
  19. package/dist/hooks/axiom-boot/storage.js.map +1 -1
  20. package/dist/hooks/bridge.d.ts.map +1 -1
  21. package/dist/hooks/bridge.js +110 -100
  22. package/dist/hooks/bridge.js.map +1 -1
  23. package/dist/hooks/keyword-detector/__tests__/index.test.js +7 -7
  24. package/dist/hooks/learner/learning-queue.d.ts.map +1 -1
  25. package/dist/hooks/learner/learning-queue.js +2 -1
  26. package/dist/hooks/learner/learning-queue.js.map +1 -1
  27. package/dist/hooks/learner/session-reflector.d.ts +22 -0
  28. package/dist/hooks/learner/session-reflector.d.ts.map +1 -0
  29. package/dist/hooks/learner/session-reflector.js +52 -0
  30. package/dist/hooks/learner/session-reflector.js.map +1 -0
  31. package/dist/hooks/learner/usage-tracker.d.ts +45 -0
  32. package/dist/hooks/learner/usage-tracker.d.ts.map +1 -0
  33. package/dist/hooks/learner/usage-tracker.js +143 -0
  34. package/dist/hooks/learner/usage-tracker.js.map +1 -0
  35. package/dist/hooks/nexus/__tests__/config.test.d.ts +2 -0
  36. package/dist/hooks/nexus/__tests__/config.test.d.ts.map +1 -0
  37. package/dist/hooks/nexus/__tests__/config.test.js +38 -0
  38. package/dist/hooks/nexus/__tests__/config.test.js.map +1 -0
  39. package/dist/hooks/nexus/__tests__/consciousness-sync.test.d.ts +2 -0
  40. package/dist/hooks/nexus/__tests__/consciousness-sync.test.d.ts.map +1 -0
  41. package/dist/hooks/nexus/__tests__/consciousness-sync.test.js +28 -0
  42. package/dist/hooks/nexus/__tests__/consciousness-sync.test.js.map +1 -0
  43. package/dist/hooks/nexus/__tests__/data-collector.test.d.ts +2 -0
  44. package/dist/hooks/nexus/__tests__/data-collector.test.d.ts.map +1 -0
  45. package/dist/hooks/nexus/__tests__/data-collector.test.js +61 -0
  46. package/dist/hooks/nexus/__tests__/data-collector.test.js.map +1 -0
  47. package/dist/hooks/nexus/__tests__/improvement-puller.test.d.ts +2 -0
  48. package/dist/hooks/nexus/__tests__/improvement-puller.test.d.ts.map +1 -0
  49. package/dist/hooks/nexus/__tests__/improvement-puller.test.js +49 -0
  50. package/dist/hooks/nexus/__tests__/improvement-puller.test.js.map +1 -0
  51. package/dist/hooks/nexus/__tests__/session-end-hook.test.d.ts +2 -0
  52. package/dist/hooks/nexus/__tests__/session-end-hook.test.d.ts.map +1 -0
  53. package/dist/hooks/nexus/__tests__/session-end-hook.test.js +39 -0
  54. package/dist/hooks/nexus/__tests__/session-end-hook.test.js.map +1 -0
  55. package/dist/hooks/nexus/config.d.ts +5 -0
  56. package/dist/hooks/nexus/config.d.ts.map +1 -0
  57. package/dist/hooks/nexus/config.js +35 -0
  58. package/dist/hooks/nexus/config.js.map +1 -0
  59. package/dist/hooks/nexus/consciousness-sync.d.ts +8 -0
  60. package/dist/hooks/nexus/consciousness-sync.d.ts.map +1 -0
  61. package/dist/hooks/nexus/consciousness-sync.js +57 -0
  62. package/dist/hooks/nexus/consciousness-sync.js.map +1 -0
  63. package/dist/hooks/nexus/data-collector.d.ts +4 -0
  64. package/dist/hooks/nexus/data-collector.d.ts.map +1 -0
  65. package/dist/hooks/nexus/data-collector.js +23 -0
  66. package/dist/hooks/nexus/data-collector.js.map +1 -0
  67. package/dist/hooks/nexus/improvement-puller.d.ts +9 -0
  68. package/dist/hooks/nexus/improvement-puller.d.ts.map +1 -0
  69. package/dist/hooks/nexus/improvement-puller.js +42 -0
  70. package/dist/hooks/nexus/improvement-puller.js.map +1 -0
  71. package/dist/hooks/nexus/session-end-hook.d.ts +16 -0
  72. package/dist/hooks/nexus/session-end-hook.d.ts.map +1 -0
  73. package/dist/hooks/nexus/session-end-hook.js +49 -0
  74. package/dist/hooks/nexus/session-end-hook.js.map +1 -0
  75. package/dist/hooks/nexus/types.d.ts +54 -0
  76. package/dist/hooks/nexus/types.d.ts.map +1 -0
  77. package/dist/hooks/nexus/types.js +2 -0
  78. package/dist/hooks/nexus/types.js.map +1 -0
  79. package/dist/hooks/omc-orchestrator/index.js +20 -20
  80. package/dist/hooks/session-end/__tests__/nexus-integration.test.d.ts +2 -0
  81. package/dist/hooks/session-end/__tests__/nexus-integration.test.d.ts.map +1 -0
  82. package/dist/hooks/session-end/__tests__/nexus-integration.test.js +30 -0
  83. package/dist/hooks/session-end/__tests__/nexus-integration.test.js.map +1 -0
  84. package/dist/hooks/session-end/callbacks.js +10 -10
  85. package/dist/hooks/session-end/index.d.ts.map +1 -1
  86. package/dist/hooks/session-end/index.js +32 -0
  87. package/dist/hooks/session-end/index.js.map +1 -1
  88. package/dist/hooks/think-mode/__tests__/index.test.js +6 -6
  89. package/dist/mcp/codex-core.js +26 -26
  90. package/dist/mcp/gemini-core.js +2 -2
  91. package/dist/team/mcp-team-bridge.js +26 -26
  92. package/docs/CLAUDE.md +1 -1
  93. package/docs/README.codex.md +6 -0
  94. package/docs/plans/2026-01-17-visual-brainstorming.md +571 -0
  95. package/docs/plans/2026-02-26-nexus-design.md +354 -0
  96. package/docs/plans/2026-02-26-nexus-implementation-plan.md +2538 -0
  97. package/docs/plans/2026-02-26-phase2-active-learning-design.md +377 -0
  98. package/docs/standards/contribution-guide.md +52 -1
  99. package/docs/superpowers/plans/2026-01-22-document-review-system.md +301 -0
  100. package/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +523 -0
  101. package/docs/superpowers/specs/2026-01-22-document-review-system-design.md +136 -0
  102. package/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +162 -0
  103. package/hooks/run-hook.cmd +32 -29
  104. package/package.json +4 -2
  105. package/scripts/persistent-mode.cjs +605 -605
  106. package/skills/brainstorming/spec-document-reviewer-prompt.md +50 -0
  107. package/skills/brainstorming/visual-companion.md +249 -0
  108. package/skills/nexus/SKILL.md +35 -0
  109. package/skills/nexus/nexus-evolve/SKILL.md +31 -0
  110. package/skills/nexus/nexus-review/SKILL.md +39 -0
  111. package/skills/nexus/nexus-status/SKILL.md +31 -0
  112. package/skills/release/SKILL.md +3 -0
  113. package/skills/requesting-code-review/SKILL.md +1 -1
  114. package/skills/using-superpowers/references/codex-tools.md +25 -0
  115. package/skills/writing-plans/plan-document-reviewer-prompt.md +52 -0
  116. /package/hooks/{session-start.sh → session-start} +0 -0
package/dist/cli/index.js CHANGED
@@ -144,13 +144,13 @@ program
144
144
  .command('launch [args...]')
145
145
  .description('Launch Claude Code with native tmux shell integration')
146
146
  .allowUnknownOption()
147
- .addHelpText('after', `
148
- Examples:
149
- $ omc launch Launch Claude Code
150
- $ omc launch --madmax Launch with permissions bypass
151
- $ omc launch --yolo Launch with permissions bypass (alias)
152
-
153
- Environment:
147
+ .addHelpText('after', `
148
+ Examples:
149
+ $ omc launch Launch Claude Code
150
+ $ omc launch --madmax Launch with permissions bypass
151
+ $ omc launch --yolo Launch with permissions bypass (alias)
152
+
153
+ Environment:
154
154
  Set OMC_DEFAULT_ACTION=dashboard to show analytics dashboard when running 'omc' with no args`)
155
155
  .action(async (args) => {
156
156
  await launchCommand(args);
@@ -161,8 +161,8 @@ Environment:
161
161
  program
162
162
  .command('dashboard')
163
163
  .description('Show analytics dashboard (aggregate stats, costs, agents)')
164
- .addHelpText('after', `
165
- Note: This was the default 'omc' behavior. Now 'omc' launches Claude Code by default.
164
+ .addHelpText('after', `
165
+ Note: This was the default 'omc' behavior. Now 'omc' launches Claude Code by default.
166
166
  Set OMC_DEFAULT_ACTION=dashboard to restore the old behavior.`)
167
167
  .action(async () => {
168
168
  await displayAnalyticsDashboard();
@@ -173,10 +173,10 @@ Set OMC_DEFAULT_ACTION=dashboard to restore the old behavior.`)
173
173
  program
174
174
  .command('interop')
175
175
  .description('Launch split-pane tmux session with Claude Code (OMC) and Codex (OMX)')
176
- .addHelpText('after', `
177
- Requirements:
178
- - Must be running inside a tmux session
179
- - Claude CLI must be installed
176
+ .addHelpText('after', `
177
+ Requirements:
178
+ - Must be running inside a tmux session
179
+ - Claude CLI must be installed
180
180
  - Codex CLI recommended (graceful fallback if missing)`)
181
181
  .action(() => {
182
182
  interopCommand();
@@ -190,10 +190,10 @@ program
190
190
  .description('Show aggregate statistics (or specific session with --session)')
191
191
  .option('--json', 'Output as JSON')
192
192
  .option('--session <id>', 'Show stats for specific session (defaults to aggregate)')
193
- .addHelpText('after', `
194
- Examples:
195
- $ omc stats Show aggregate statistics
196
- $ omc stats --session abc123 Show stats for a specific session
193
+ .addHelpText('after', `
194
+ Examples:
195
+ $ omc stats Show aggregate statistics
196
+ $ omc stats --session abc123 Show stats for a specific session
197
197
  $ omc stats --json Output as JSON for scripting`)
198
198
  .action(async (options) => {
199
199
  await ensureBackfillDone();
@@ -204,10 +204,10 @@ program
204
204
  .command('cost [period]')
205
205
  .description('Generate cost report (period: daily, weekly, monthly)')
206
206
  .option('--json', 'Output as JSON')
207
- .addHelpText('after', `
208
- Examples:
209
- $ omc cost Show monthly cost report
210
- $ omc cost daily Show daily cost breakdown
207
+ .addHelpText('after', `
208
+ Examples:
209
+ $ omc cost Show monthly cost report
210
+ $ omc cost daily Show daily cost breakdown
211
211
  $ omc cost weekly --json Export weekly costs as JSON`)
212
212
  .action(async (period = 'monthly', options) => {
213
213
  if (!['daily', 'weekly', 'monthly'].includes(period)) {
@@ -224,10 +224,10 @@ program
224
224
  .description('View session history')
225
225
  .option('--json', 'Output as JSON')
226
226
  .option('-n, --limit <number>', 'Limit number of sessions', '10')
227
- .addHelpText('after', `
228
- Examples:
229
- $ omc sessions Show last 10 sessions
230
- $ omc sessions --limit 50 Show last 50 sessions
227
+ .addHelpText('after', `
228
+ Examples:
229
+ $ omc sessions Show last 10 sessions
230
+ $ omc sessions --limit 50 Show last 50 sessions
231
231
  $ omc sessions --json Export session history as JSON`)
232
232
  .action(async (options) => {
233
233
  await ensureBackfillDone();
@@ -239,10 +239,10 @@ program
239
239
  .description('Show agent usage breakdown')
240
240
  .option('--json', 'Output as JSON')
241
241
  .option('-n, --limit <number>', 'Limit number of agents', '10')
242
- .addHelpText('after', `
243
- Examples:
244
- $ omc agents Show top 10 agents by usage
245
- $ omc agents --limit 20 Show top 20 agents
242
+ .addHelpText('after', `
243
+ Examples:
244
+ $ omc agents Show top 10 agents by usage
245
+ $ omc agents --limit 20 Show top 20 agents
246
246
  $ omc agents --json Export agent data as JSON`)
247
247
  .action(async (options) => {
248
248
  await ensureBackfillDone();
@@ -253,10 +253,10 @@ program
253
253
  .command('export <type> <format> <output>')
254
254
  .description('Export data (type: cost, sessions, patterns; format: json, csv)')
255
255
  .option('--period <period>', 'Period for cost report (daily, weekly, monthly)', 'monthly')
256
- .addHelpText('after', `
257
- Examples:
258
- $ omc export cost json costs.json Export monthly costs to JSON
259
- $ omc export sessions csv sessions.csv Export sessions to CSV
256
+ .addHelpText('after', `
257
+ Examples:
258
+ $ omc export cost json costs.json Export monthly costs to JSON
259
+ $ omc export sessions csv sessions.csv Export sessions to CSV
260
260
  $ omc export cost csv data.csv --period weekly Export weekly costs`)
261
261
  .action((type, format, output, options) => {
262
262
  if (!['cost', 'sessions', 'patterns'].includes(type)) {
@@ -277,9 +277,9 @@ program
277
277
  .command('cleanup')
278
278
  .description('Clean up old logs and orphaned background tasks')
279
279
  .option('-r, --retention <days>', 'Retention period in days', '30')
280
- .addHelpText('after', `
281
- Examples:
282
- $ omc cleanup Clean up logs older than 30 days
280
+ .addHelpText('after', `
281
+ Examples:
282
+ $ omc cleanup Clean up logs older than 30 days
283
283
  $ omc cleanup --retention 7 Clean up logs older than 7 days`)
284
284
  .action(options => {
285
285
  cleanupCommand({ ...options, retention: parseInt(options.retention) });
@@ -295,10 +295,10 @@ program
295
295
  .option('--reset', 'Clear deduplication index and re-process all transcripts')
296
296
  .option('-v, --verbose', 'Show detailed progress')
297
297
  .option('--json', 'Output as JSON')
298
- .addHelpText('after', `
299
- Examples:
300
- $ omc backfill --reset Force full re-sync
301
- $ omc backfill --project ~/myproject Backfill specific project
298
+ .addHelpText('after', `
299
+ Examples:
300
+ $ omc backfill --reset Force full re-sync
301
+ $ omc backfill --project ~/myproject Backfill specific project
302
302
  $ omc backfill --from 2024-01-01 --verbose Backfill from date with progress`)
303
303
  .action(async (options) => {
304
304
  if (!options.reset && !options.project && !options.from && !options.to) {
@@ -314,10 +314,10 @@ program
314
314
  .option('--models', 'Show models view')
315
315
  .option('--daily', 'Show daily/monthly view')
316
316
  .option('--no-claude', 'Show all providers (not just Claude)')
317
- .addHelpText('after', `
318
- Examples:
319
- $ omc tui Launch interactive dashboard
320
- $ omc tui --light Use light theme
317
+ .addHelpText('after', `
318
+ Examples:
319
+ $ omc tui Launch interactive dashboard
320
+ $ omc tui --light Use light theme
321
321
  $ omc tui --daily Start with daily view`)
322
322
  .action(async (options) => {
323
323
  const available = await isTokscaleCLIAvailable();
@@ -350,10 +350,10 @@ program
350
350
  .description('Initialize Sisyphus configuration in the current directory')
351
351
  .option('-g, --global', 'Initialize global user configuration')
352
352
  .option('-f, --force', 'Overwrite existing configuration')
353
- .addHelpText('after', `
354
- Examples:
355
- $ omc init Initialize in current directory
356
- $ omc init --global Initialize global configuration
353
+ .addHelpText('after', `
354
+ Examples:
355
+ $ omc init Initialize in current directory
356
+ $ omc init --global Initialize global configuration
357
357
  $ omc init --force Overwrite existing config`)
358
358
  .action(async (options) => {
359
359
  console.log(chalk.yellow('⚠️ DEPRECATED: The init command is deprecated.'));
@@ -374,79 +374,79 @@ Examples:
374
374
  console.log(chalk.green(`Created directory: ${targetDir}`));
375
375
  }
376
376
  // Generate config content
377
- const configContent = `// Oh-My-ClaudeCode Configuration
378
- // See: https://github.com/liangjie559567/ultrapower for documentation
379
- {
380
- "$schema": "./sisyphus-schema.json",
381
-
382
- // Agent model configurations
383
- "agents": {
384
- "sisyphus": {
385
- // Main orchestrator - uses the most capable model
386
- "model": "claude-opus-4-6-20260205"
387
- },
388
- "architect": {
389
- // Architecture and debugging expert
390
- "model": "claude-opus-4-6-20260205",
391
- "enabled": true
392
- },
393
- "researcher": {
394
- // Documentation and codebase analysis
395
- "model": "claude-sonnet-4-6-20260217"
396
- },
397
- "explore": {
398
- // Fast pattern matching - uses fastest model
399
- "model": "claude-3-5-haiku-20241022"
400
- },
401
- "frontendEngineer": {
402
- "model": "claude-sonnet-4-6-20260217",
403
- "enabled": true
404
- },
405
- "documentWriter": {
406
- "model": "claude-3-5-haiku-20241022",
407
- "enabled": true
408
- },
409
- "multimodalLooker": {
410
- "model": "claude-sonnet-4-6-20260217",
411
- "enabled": true
412
- }
413
- },
414
-
415
- // Feature toggles
416
- "features": {
417
- "parallelExecution": true,
418
- "lspTools": true,
419
- "astTools": true,
420
- "continuationEnforcement": true,
421
- "autoContextInjection": true
422
- },
423
-
424
- // MCP server integrations
425
- "mcpServers": {
426
- "exa": {
427
- "enabled": true
428
- // Set EXA_API_KEY environment variable for API key
429
- },
430
- "context7": {
431
- "enabled": true
432
- }
433
- },
434
-
435
- // Permission settings
436
- "permissions": {
437
- "allowBash": true,
438
- "allowEdit": true,
439
- "allowWrite": true,
440
- "maxBackgroundTasks": 5
441
- },
442
-
443
- // Magic keyword triggers (customize if desired)
444
- "magicKeywords": {
445
- "ultrawork": ["ultrawork", "ulw", "uw"],
446
- "search": ["search", "find", "locate"],
447
- "analyze": ["analyze", "investigate", "examine"]
448
- }
449
- }
377
+ const configContent = `// Oh-My-ClaudeCode Configuration
378
+ // See: https://github.com/liangjie559567/ultrapower for documentation
379
+ {
380
+ "$schema": "./sisyphus-schema.json",
381
+
382
+ // Agent model configurations
383
+ "agents": {
384
+ "sisyphus": {
385
+ // Main orchestrator - uses the most capable model
386
+ "model": "claude-opus-4-6-20260205"
387
+ },
388
+ "architect": {
389
+ // Architecture and debugging expert
390
+ "model": "claude-opus-4-6-20260205",
391
+ "enabled": true
392
+ },
393
+ "researcher": {
394
+ // Documentation and codebase analysis
395
+ "model": "claude-sonnet-4-6-20260217"
396
+ },
397
+ "explore": {
398
+ // Fast pattern matching - uses fastest model
399
+ "model": "claude-3-5-haiku-20241022"
400
+ },
401
+ "frontendEngineer": {
402
+ "model": "claude-sonnet-4-6-20260217",
403
+ "enabled": true
404
+ },
405
+ "documentWriter": {
406
+ "model": "claude-3-5-haiku-20241022",
407
+ "enabled": true
408
+ },
409
+ "multimodalLooker": {
410
+ "model": "claude-sonnet-4-6-20260217",
411
+ "enabled": true
412
+ }
413
+ },
414
+
415
+ // Feature toggles
416
+ "features": {
417
+ "parallelExecution": true,
418
+ "lspTools": true,
419
+ "astTools": true,
420
+ "continuationEnforcement": true,
421
+ "autoContextInjection": true
422
+ },
423
+
424
+ // MCP server integrations
425
+ "mcpServers": {
426
+ "exa": {
427
+ "enabled": true
428
+ // Set EXA_API_KEY environment variable for API key
429
+ },
430
+ "context7": {
431
+ "enabled": true
432
+ }
433
+ },
434
+
435
+ // Permission settings
436
+ "permissions": {
437
+ "allowBash": true,
438
+ "allowEdit": true,
439
+ "allowWrite": true,
440
+ "maxBackgroundTasks": 5
441
+ },
442
+
443
+ // Magic keyword triggers (customize if desired)
444
+ "magicKeywords": {
445
+ "ultrawork": ["ultrawork", "ulw", "uw"],
446
+ "search": ["search", "find", "locate"],
447
+ "analyze": ["analyze", "investigate", "examine"]
448
+ }
449
+ }
450
450
  `;
451
451
  writeFileSync(targetPath, configContent);
452
452
  console.log(chalk.green(`Created configuration: ${targetPath}`));
@@ -459,29 +459,29 @@ Examples:
459
459
  // Create AGENTS.md template if it doesn't exist
460
460
  const agentsMdPath = join(process.cwd(), 'AGENTS.md');
461
461
  if (!existsSync(agentsMdPath) && !options.global) {
462
- const agentsMdContent = `# Project Agents Configuration
463
-
464
- This file provides context and instructions to AI agents working on this project.
465
-
466
- ## Project Overview
467
-
468
- <!-- Describe your project here -->
469
-
470
- ## Architecture
471
-
472
- <!-- Describe the architecture and key components -->
473
-
474
- ## Conventions
475
-
476
- <!-- List coding conventions, naming patterns, etc. -->
477
-
478
- ## Important Files
479
-
480
- <!-- List key files agents should know about -->
481
-
482
- ## Common Tasks
483
-
484
- <!-- Describe common development tasks and how to perform them -->
462
+ const agentsMdContent = `# Project Agents Configuration
463
+
464
+ This file provides context and instructions to AI agents working on this project.
465
+
466
+ ## Project Overview
467
+
468
+ <!-- Describe your project here -->
469
+
470
+ ## Architecture
471
+
472
+ <!-- Describe the architecture and key components -->
473
+
474
+ ## Conventions
475
+
476
+ <!-- List coding conventions, naming patterns, etc. -->
477
+
478
+ ## Important Files
479
+
480
+ <!-- List key files agents should know about -->
481
+
482
+ ## Common Tasks
483
+
484
+ <!-- Describe common development tasks and how to perform them -->
485
485
  `;
486
486
  writeFileSync(agentsMdPath, agentsMdContent);
487
487
  console.log(chalk.green(`Created AGENTS.md template`));
@@ -495,12 +495,12 @@ program
495
495
  .description('Show current configuration')
496
496
  .option('-v, --validate', 'Validate configuration')
497
497
  .option('-p, --paths', 'Show configuration file paths')
498
- .addHelpText('after', `
499
- Examples:
500
- $ omc config Show current configuration
501
- $ omc config --validate Validate configuration files
502
- $ omc config --paths Show config file locations
503
-
498
+ .addHelpText('after', `
499
+ Examples:
500
+ $ omc config Show current configuration
501
+ $ omc config --validate Validate configuration files
502
+ $ omc config --paths Show config file locations
503
+
504
504
  }`)
505
505
  .action(async (options) => {
506
506
  if (options.paths) {
@@ -561,30 +561,30 @@ const _configStopCallback = program
561
561
  .option('--clear-tags', 'Clear all tags (telegram/discord only)')
562
562
  .option('--profile <name>', 'Named notification profile to configure')
563
563
  .option('--show', 'Show current configuration')
564
- .addHelpText('after', `
565
- Types:
566
- file File system callback (saves session summary to disk)
567
- telegram Telegram bot notification
568
- discord Discord webhook notification
569
-
570
- Profile types (use with --profile):
571
- discord-bot Discord Bot API (token + channel ID)
572
- slack Slack incoming webhook
573
- webhook Generic webhook (POST with JSON body)
574
-
575
- Examples:
576
- $ omc config-stop-callback file --enable --path ~/.claude/logs/{date}.md
577
- $ omc config-stop-callback telegram --enable --token <token> --chat <id>
578
- $ omc config-stop-callback discord --enable --webhook <url>
579
- $ omc config-stop-callback file --disable
580
- $ omc config-stop-callback file --show
581
-
582
- # Named profiles (stored in notificationProfiles):
583
- $ omc config-stop-callback discord --profile work --enable --webhook <url>
584
- $ omc config-stop-callback telegram --profile work --enable --token <tk> --chat <id>
585
- $ omc config-stop-callback discord-bot --profile ops --enable --token <tk> --channel-id <id>
586
-
587
- # Select profile at launch:
564
+ .addHelpText('after', `
565
+ Types:
566
+ file File system callback (saves session summary to disk)
567
+ telegram Telegram bot notification
568
+ discord Discord webhook notification
569
+
570
+ Profile types (use with --profile):
571
+ discord-bot Discord Bot API (token + channel ID)
572
+ slack Slack incoming webhook
573
+ webhook Generic webhook (POST with JSON body)
574
+
575
+ Examples:
576
+ $ omc config-stop-callback file --enable --path ~/.claude/logs/{date}.md
577
+ $ omc config-stop-callback telegram --enable --token <token> --chat <id>
578
+ $ omc config-stop-callback discord --enable --webhook <url>
579
+ $ omc config-stop-callback file --disable
580
+ $ omc config-stop-callback file --show
581
+
582
+ # Named profiles (stored in notificationProfiles):
583
+ $ omc config-stop-callback discord --profile work --enable --webhook <url>
584
+ $ omc config-stop-callback telegram --profile work --enable --token <tk> --chat <id>
585
+ $ omc config-stop-callback discord-bot --profile ops --enable --token <tk> --channel-id <id>
586
+
587
+ # Select profile at launch:
588
588
  $ OMC_NOTIFY_PROFILE=work claude`)
589
589
  .action(async (type, options) => {
590
590
  // When --profile is used, route to profile-based config
@@ -839,16 +839,16 @@ program
839
839
  .option('--list', 'List all profiles')
840
840
  .option('--show', 'Show profile configuration')
841
841
  .option('--delete', 'Delete a profile')
842
- .addHelpText('after', `
843
- Examples:
844
- $ omc config-notify-profile --list
845
- $ omc config-notify-profile work --show
846
- $ omc config-notify-profile work --delete
847
-
848
- # Create/update profiles via config-stop-callback --profile:
849
- $ omc config-stop-callback discord --profile work --enable --webhook <url>
850
-
851
- # Select profile at launch:
842
+ .addHelpText('after', `
843
+ Examples:
844
+ $ omc config-notify-profile --list
845
+ $ omc config-notify-profile work --show
846
+ $ omc config-notify-profile work --delete
847
+
848
+ # Create/update profiles via config-stop-callback --profile:
849
+ $ omc config-stop-callback discord --profile work --enable --webhook <url>
850
+
851
+ # Select profile at launch:
852
852
  $ OMC_NOTIFY_PROFILE=work claude`)
853
853
  .action(async (name, options) => {
854
854
  const config = getOMCConfig();
@@ -922,8 +922,8 @@ Examples:
922
922
  program
923
923
  .command('info')
924
924
  .description('Show system and agent information')
925
- .addHelpText('after', `
926
- Examples:
925
+ .addHelpText('after', `
926
+ Examples:
927
927
  $ omc info Show agents, features, and MCP servers`)
928
928
  .action(async () => {
929
929
  const session = createSisyphusSession();
@@ -962,9 +962,9 @@ Examples:
962
962
  program
963
963
  .command('test-prompt <prompt>')
964
964
  .description('Test how a prompt would be enhanced')
965
- .addHelpText('after', `
966
- Examples:
967
- $ omc test-prompt "ultrawork fix bugs" See how magic keywords are detected
965
+ .addHelpText('after', `
966
+ Examples:
967
+ $ omc test-prompt "ultrawork fix bugs" See how magic keywords are detected
968
968
  $ omc test-prompt "analyze this code" Test prompt enhancement`)
969
969
  .action(async (prompt) => {
970
970
  const session = createSisyphusSession();
@@ -988,11 +988,11 @@ program
988
988
  .option('-f, --force', 'Force reinstall even if up to date')
989
989
  .option('-q, --quiet', 'Suppress output except for errors')
990
990
  .option('--standalone', 'Force npm update even in plugin context')
991
- .addHelpText('after', `
992
- Examples:
993
- $ omc update Check and install updates
994
- $ omc update --check Only check, don't install
995
- $ omc update --force Force reinstall
991
+ .addHelpText('after', `
992
+ Examples:
993
+ $ omc update Check and install updates
994
+ $ omc update --check Only check, don't install
995
+ $ omc update --force Force reinstall
996
996
  $ omc update --standalone Force npm update in plugin context`)
997
997
  .action(async (options) => {
998
998
  if (!options.quiet) {
@@ -1087,8 +1087,8 @@ program
1087
1087
  program
1088
1088
  .command('version')
1089
1089
  .description('Show detailed version information')
1090
- .addHelpText('after', `
1091
- Examples:
1090
+ .addHelpText('after', `
1091
+ Examples:
1092
1092
  $ omc version Show version, install method, and commit hash`)
1093
1093
  .action(async () => {
1094
1094
  const installed = getInstalledVersion();
@@ -1122,10 +1122,10 @@ program
1122
1122
  .option('-f, --force', 'Overwrite existing files')
1123
1123
  .option('-q, --quiet', 'Suppress output except for errors')
1124
1124
  .option('--skip-claude-check', 'Skip checking if Claude Code is installed')
1125
- .addHelpText('after', `
1126
- Examples:
1127
- $ omc install Install to ~/.claude/
1128
- $ omc install --force Reinstall, overwriting existing files
1125
+ .addHelpText('after', `
1126
+ Examples:
1127
+ $ omc install Install to ~/.claude/
1128
+ $ omc install --force Reinstall, overwriting existing files
1129
1129
  $ omc install --quiet Silent install for scripts`)
1130
1130
  .action(async (options) => {
1131
1131
  if (!options.quiet) {
@@ -1234,12 +1234,12 @@ const waitCmd = program
1234
1234
  .option('--json', 'Output as JSON')
1235
1235
  .option('--start', 'Start the auto-resume daemon')
1236
1236
  .option('--stop', 'Stop the auto-resume daemon')
1237
- .addHelpText('after', `
1238
- Examples:
1239
- $ omc wait Show status and suggestions
1240
- $ omc wait --start Start auto-resume daemon
1241
- $ omc wait --stop Stop auto-resume daemon
1242
- $ omc wait status Show detailed rate limit status
1237
+ .addHelpText('after', `
1238
+ Examples:
1239
+ $ omc wait Show status and suggestions
1240
+ $ omc wait --start Start auto-resume daemon
1241
+ $ omc wait --stop Stop auto-resume daemon
1242
+ $ omc wait status Show detailed rate limit status
1243
1243
  $ omc wait detect Scan for blocked tmux sessions`)
1244
1244
  .action(async (options) => {
1245
1245
  await waitCommand(options);
@@ -1257,10 +1257,10 @@ waitCmd
1257
1257
  .option('-v, --verbose', 'Enable verbose logging')
1258
1258
  .option('-f, --foreground', 'Run in foreground (blocking)')
1259
1259
  .option('-i, --interval <seconds>', 'Poll interval in seconds', '60')
1260
- .addHelpText('after', `
1261
- Examples:
1262
- $ omc wait daemon start Start background daemon
1263
- $ omc wait daemon stop Stop the daemon
1260
+ .addHelpText('after', `
1261
+ Examples:
1262
+ $ omc wait daemon start Start background daemon
1263
+ $ omc wait daemon stop Stop the daemon
1264
1264
  $ omc wait daemon start -f Run in foreground`)
1265
1265
  .action(async (action, options) => {
1266
1266
  if (action !== 'start' && action !== 'stop') {
@@ -1301,11 +1301,11 @@ const teleportCmd = program
1301
1301
  .option('-p, --path <path>', 'Custom worktree path (default: ~/Workspace/omc-worktrees/)')
1302
1302
  .option('-b, --base <branch>', 'Base branch to create from (default: main)')
1303
1303
  .option('--json', 'Output as JSON')
1304
- .addHelpText('after', `
1305
- Examples:
1306
- $ omc teleport #42 Create worktree for issue/PR #42
1307
- $ omc teleport add-auth Create worktree for a feature branch
1308
- $ omc teleport list List existing worktrees
1304
+ .addHelpText('after', `
1305
+ Examples:
1306
+ $ omc teleport #42 Create worktree for issue/PR #42
1307
+ $ omc teleport add-auth Create worktree for a feature branch
1308
+ $ omc teleport list List existing worktrees
1309
1309
  $ omc teleport remove ./path Remove a worktree`)
1310
1310
  .action(async (ref, options) => {
1311
1311
  if (!ref) {
@@ -1357,16 +1357,16 @@ teleportCmd
1357
1357
  const doctorCmd = program
1358
1358
  .command('doctor')
1359
1359
  .description('Diagnostic tools for troubleshooting OMC installation')
1360
- .addHelpText('after', `
1361
- Examples:
1360
+ .addHelpText('after', `
1361
+ Examples:
1362
1362
  $ omc doctor conflicts Check for plugin conflicts`);
1363
1363
  doctorCmd
1364
1364
  .command('conflicts')
1365
1365
  .description('Check for plugin coexistence issues and configuration conflicts')
1366
1366
  .option('--json', 'Output as JSON')
1367
- .addHelpText('after', `
1368
- Examples:
1369
- $ omc doctor conflicts Check for configuration issues
1367
+ .addHelpText('after', `
1368
+ Examples:
1369
+ $ omc doctor conflicts Check for configuration issues
1370
1370
  $ omc doctor conflicts --json Output results as JSON`)
1371
1371
  .action(async (options) => {
1372
1372
  const exitCode = await doctorConflictsCommand(options);
@@ -1387,12 +1387,12 @@ program
1387
1387
  .option('-q, --quiet', 'Suppress output except for errors')
1388
1388
  .option('--skip-hooks', 'Skip hook installation')
1389
1389
  .option('--force-hooks', 'Force reinstall hooks even if unchanged')
1390
- .addHelpText('after', `
1391
- Examples:
1392
- $ omc setup Sync all OMC components
1393
- $ omc setup --force Force reinstall everything
1394
- $ omc setup --quiet Silent setup for scripts
1395
- $ omc setup --skip-hooks Install without hooks
1390
+ .addHelpText('after', `
1391
+ Examples:
1392
+ $ omc setup Sync all OMC components
1393
+ $ omc setup --force Force reinstall everything
1394
+ $ omc setup --quiet Silent setup for scripts
1395
+ $ omc setup --skip-hooks Install without hooks
1396
1396
  $ omc setup --force-hooks Force reinstall hooks`)
1397
1397
  .action(async (options) => {
1398
1398
  if (!options.quiet) {
@@ -366,11 +366,11 @@ export function startDaemon(config) {
366
366
  // Fork a new process for the daemon using dynamic import() for ESM compatibility.
367
367
  // The project uses "type": "module", so require() would fail with ERR_REQUIRE_ESM.
368
368
  const modulePath = __filename.replace(/\.ts$/, '.js');
369
- const daemonScript = `
370
- import('${modulePath}').then(({ pollLoop }) => {
371
- const config = ${JSON.stringify(cfg)};
372
- return pollLoop(config);
373
- }).catch((err) => { console.error(err); process.exit(1); });
369
+ const daemonScript = `
370
+ import('${modulePath}').then(({ pollLoop }) => {
371
+ const config = ${JSON.stringify(cfg)};
372
+ return pollLoop(config);
373
+ }).catch((err) => { console.error(err); process.exit(1); });
374
374
  `;
375
375
  try {
376
376
  // Use node to run the daemon in background