@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.
- package/.claude-plugin/plugin.json +1 -1
- package/dist/__tests__/compatibility.test.js +6 -6
- package/dist/__tests__/live-data.test.js +9 -9
- package/dist/__tests__/rate-limit-wait/integration.test.js +68 -68
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +33 -33
- package/dist/__tests__/skills.test.js +3 -2
- package/dist/__tests__/skills.test.js.map +1 -1
- package/dist/agents/prompt-sections/index.js +36 -36
- package/dist/cli/index.js +226 -226
- package/dist/features/rate-limit-wait/daemon.js +5 -5
- package/dist/hooks/autopilot/enforcement.js +19 -19
- package/dist/hooks/autopilot/validation.js +58 -58
- package/dist/hooks/axiom-boot/index.d.ts.map +1 -1
- package/dist/hooks/axiom-boot/index.js +2 -1
- package/dist/hooks/axiom-boot/index.js.map +1 -1
- package/dist/hooks/axiom-boot/storage.d.ts +1 -0
- package/dist/hooks/axiom-boot/storage.d.ts.map +1 -1
- package/dist/hooks/axiom-boot/storage.js +37 -1
- package/dist/hooks/axiom-boot/storage.js.map +1 -1
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +110 -100
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/keyword-detector/__tests__/index.test.js +7 -7
- package/dist/hooks/learner/learning-queue.d.ts.map +1 -1
- package/dist/hooks/learner/learning-queue.js +2 -1
- package/dist/hooks/learner/learning-queue.js.map +1 -1
- package/dist/hooks/learner/session-reflector.d.ts +22 -0
- package/dist/hooks/learner/session-reflector.d.ts.map +1 -0
- package/dist/hooks/learner/session-reflector.js +52 -0
- package/dist/hooks/learner/session-reflector.js.map +1 -0
- package/dist/hooks/learner/usage-tracker.d.ts +45 -0
- package/dist/hooks/learner/usage-tracker.d.ts.map +1 -0
- package/dist/hooks/learner/usage-tracker.js +143 -0
- package/dist/hooks/learner/usage-tracker.js.map +1 -0
- package/dist/hooks/nexus/__tests__/config.test.d.ts +2 -0
- package/dist/hooks/nexus/__tests__/config.test.d.ts.map +1 -0
- package/dist/hooks/nexus/__tests__/config.test.js +38 -0
- package/dist/hooks/nexus/__tests__/config.test.js.map +1 -0
- package/dist/hooks/nexus/__tests__/consciousness-sync.test.d.ts +2 -0
- package/dist/hooks/nexus/__tests__/consciousness-sync.test.d.ts.map +1 -0
- package/dist/hooks/nexus/__tests__/consciousness-sync.test.js +28 -0
- package/dist/hooks/nexus/__tests__/consciousness-sync.test.js.map +1 -0
- package/dist/hooks/nexus/__tests__/data-collector.test.d.ts +2 -0
- package/dist/hooks/nexus/__tests__/data-collector.test.d.ts.map +1 -0
- package/dist/hooks/nexus/__tests__/data-collector.test.js +61 -0
- package/dist/hooks/nexus/__tests__/data-collector.test.js.map +1 -0
- package/dist/hooks/nexus/__tests__/improvement-puller.test.d.ts +2 -0
- package/dist/hooks/nexus/__tests__/improvement-puller.test.d.ts.map +1 -0
- package/dist/hooks/nexus/__tests__/improvement-puller.test.js +49 -0
- package/dist/hooks/nexus/__tests__/improvement-puller.test.js.map +1 -0
- package/dist/hooks/nexus/__tests__/session-end-hook.test.d.ts +2 -0
- package/dist/hooks/nexus/__tests__/session-end-hook.test.d.ts.map +1 -0
- package/dist/hooks/nexus/__tests__/session-end-hook.test.js +39 -0
- package/dist/hooks/nexus/__tests__/session-end-hook.test.js.map +1 -0
- package/dist/hooks/nexus/config.d.ts +5 -0
- package/dist/hooks/nexus/config.d.ts.map +1 -0
- package/dist/hooks/nexus/config.js +35 -0
- package/dist/hooks/nexus/config.js.map +1 -0
- package/dist/hooks/nexus/consciousness-sync.d.ts +8 -0
- package/dist/hooks/nexus/consciousness-sync.d.ts.map +1 -0
- package/dist/hooks/nexus/consciousness-sync.js +57 -0
- package/dist/hooks/nexus/consciousness-sync.js.map +1 -0
- package/dist/hooks/nexus/data-collector.d.ts +4 -0
- package/dist/hooks/nexus/data-collector.d.ts.map +1 -0
- package/dist/hooks/nexus/data-collector.js +23 -0
- package/dist/hooks/nexus/data-collector.js.map +1 -0
- package/dist/hooks/nexus/improvement-puller.d.ts +9 -0
- package/dist/hooks/nexus/improvement-puller.d.ts.map +1 -0
- package/dist/hooks/nexus/improvement-puller.js +42 -0
- package/dist/hooks/nexus/improvement-puller.js.map +1 -0
- package/dist/hooks/nexus/session-end-hook.d.ts +16 -0
- package/dist/hooks/nexus/session-end-hook.d.ts.map +1 -0
- package/dist/hooks/nexus/session-end-hook.js +49 -0
- package/dist/hooks/nexus/session-end-hook.js.map +1 -0
- package/dist/hooks/nexus/types.d.ts +54 -0
- package/dist/hooks/nexus/types.d.ts.map +1 -0
- package/dist/hooks/nexus/types.js +2 -0
- package/dist/hooks/nexus/types.js.map +1 -0
- package/dist/hooks/omc-orchestrator/index.js +20 -20
- package/dist/hooks/session-end/__tests__/nexus-integration.test.d.ts +2 -0
- package/dist/hooks/session-end/__tests__/nexus-integration.test.d.ts.map +1 -0
- package/dist/hooks/session-end/__tests__/nexus-integration.test.js +30 -0
- package/dist/hooks/session-end/__tests__/nexus-integration.test.js.map +1 -0
- package/dist/hooks/session-end/callbacks.js +10 -10
- package/dist/hooks/session-end/index.d.ts.map +1 -1
- package/dist/hooks/session-end/index.js +32 -0
- package/dist/hooks/session-end/index.js.map +1 -1
- package/dist/hooks/think-mode/__tests__/index.test.js +6 -6
- package/dist/mcp/codex-core.js +26 -26
- package/dist/mcp/gemini-core.js +2 -2
- package/dist/team/mcp-team-bridge.js +26 -26
- package/docs/CLAUDE.md +1 -1
- package/docs/README.codex.md +6 -0
- package/docs/plans/2026-01-17-visual-brainstorming.md +571 -0
- package/docs/plans/2026-02-26-nexus-design.md +354 -0
- package/docs/plans/2026-02-26-nexus-implementation-plan.md +2538 -0
- package/docs/plans/2026-02-26-phase2-active-learning-design.md +377 -0
- package/docs/standards/contribution-guide.md +52 -1
- package/docs/superpowers/plans/2026-01-22-document-review-system.md +301 -0
- package/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +523 -0
- package/docs/superpowers/specs/2026-01-22-document-review-system-design.md +136 -0
- package/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +162 -0
- package/hooks/run-hook.cmd +32 -29
- package/package.json +4 -2
- package/scripts/persistent-mode.cjs +605 -605
- package/skills/brainstorming/spec-document-reviewer-prompt.md +50 -0
- package/skills/brainstorming/visual-companion.md +249 -0
- package/skills/nexus/SKILL.md +35 -0
- package/skills/nexus/nexus-evolve/SKILL.md +31 -0
- package/skills/nexus/nexus-review/SKILL.md +39 -0
- package/skills/nexus/nexus-status/SKILL.md +31 -0
- package/skills/release/SKILL.md +3 -0
- package/skills/requesting-code-review/SKILL.md +1 -1
- package/skills/using-superpowers/references/codex-tools.md +25 -0
- package/skills/writing-plans/plan-document-reviewer-prompt.md +52 -0
- /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
|