oh-my-claude-sisyphus 3.6.1 → 3.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/doctor.md +1 -1
- package/commands/psm.md +180 -0
- package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
- package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
- package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
- package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
- package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
- package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
- package/dist/__tests__/installer.test.js +1 -1
- package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/config.test.js +37 -0
- package/dist/__tests__/learned-skills/config.test.js.map +1 -0
- package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/detector.test.js +99 -0
- package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
- package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/finder.test.js +59 -0
- package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
- package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/loader.test.js +69 -0
- package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
- package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/parser.test.js +81 -0
- package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
- package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/validator.test.js +85 -0
- package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
- package/dist/__tests__/skills.test.js +6 -5
- package/dist/__tests__/skills.test.js.map +1 -1
- package/dist/agents/codex-agents.d.ts +20 -0
- package/dist/agents/codex-agents.d.ts.map +1 -0
- package/dist/agents/codex-agents.js +36 -0
- package/dist/agents/codex-agents.js.map +1 -0
- package/dist/agents/document-writer.d.ts +11 -0
- package/dist/agents/document-writer.d.ts.map +1 -0
- package/dist/agents/document-writer.js +209 -0
- package/dist/agents/document-writer.js.map +1 -0
- package/dist/agents/frontend-engineer.d.ts +11 -0
- package/dist/agents/frontend-engineer.d.ts.map +1 -0
- package/dist/agents/frontend-engineer.js +115 -0
- package/dist/agents/frontend-engineer.js.map +1 -0
- package/dist/agents/librarian.d.ts +12 -0
- package/dist/agents/librarian.d.ts.map +1 -0
- package/dist/agents/librarian.js +103 -0
- package/dist/agents/librarian.js.map +1 -0
- package/dist/agents/metis.d.ts +12 -0
- package/dist/agents/metis.d.ts.map +1 -0
- package/dist/agents/metis.js +117 -0
- package/dist/agents/metis.js.map +1 -0
- package/dist/agents/momus.d.ts +12 -0
- package/dist/agents/momus.d.ts.map +1 -0
- package/dist/agents/momus.js +128 -0
- package/dist/agents/momus.js.map +1 -0
- package/dist/agents/multimodal-looker.d.ts +11 -0
- package/dist/agents/multimodal-looker.d.ts.map +1 -0
- package/dist/agents/multimodal-looker.js +70 -0
- package/dist/agents/multimodal-looker.js.map +1 -0
- package/dist/agents/oracle.d.ts +13 -0
- package/dist/agents/oracle.d.ts.map +1 -0
- package/dist/agents/oracle.js +191 -0
- package/dist/agents/oracle.js.map +1 -0
- package/dist/agents/orchestrator-sisyphus.d.ts +11 -0
- package/dist/agents/orchestrator-sisyphus.d.ts.map +1 -0
- package/dist/agents/orchestrator-sisyphus.js +115 -0
- package/dist/agents/orchestrator-sisyphus.js.map +1 -0
- package/dist/agents/prometheus.d.ts +12 -0
- package/dist/agents/prometheus.d.ts.map +1 -0
- package/dist/agents/prometheus.js +195 -0
- package/dist/agents/prometheus.js.map +1 -0
- package/dist/agents/sisyphus-junior.d.ts +12 -0
- package/dist/agents/sisyphus-junior.d.ts.map +1 -0
- package/dist/agents/sisyphus-junior.js +93 -0
- package/dist/agents/sisyphus-junior.js.map +1 -0
- package/dist/cli/analytics.js +0 -0
- package/dist/cli/components/CostDashboard.d.ts +15 -0
- package/dist/cli/components/CostDashboard.d.ts.map +1 -0
- package/dist/cli/components/CostDashboard.js +15 -0
- package/dist/cli/components/CostDashboard.js.map +1 -0
- package/dist/cli/components/LiveStats.d.ts +16 -0
- package/dist/cli/components/LiveStats.d.ts.map +1 -0
- package/dist/cli/components/LiveStats.js +16 -0
- package/dist/cli/components/LiveStats.js.map +1 -0
- package/dist/cli/components/SessionBrowser.d.ts +14 -0
- package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
- package/dist/cli/components/SessionBrowser.js +14 -0
- package/dist/cli/components/SessionBrowser.js.map +1 -0
- package/dist/cli/index.js +0 -0
- package/dist/cli/tui.d.ts +21 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +21 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/hooks/autopilot/signals.d.ts +20 -0
- package/dist/hooks/autopilot/signals.d.ts.map +1 -0
- package/dist/hooks/autopilot/signals.js +75 -0
- package/dist/hooks/autopilot/signals.js.map +1 -0
- package/dist/hooks/autopilot/summary.d.ts +27 -0
- package/dist/hooks/autopilot/summary.d.ts.map +1 -0
- package/dist/hooks/autopilot/summary.js +160 -0
- package/dist/hooks/autopilot/summary.js.map +1 -0
- package/dist/hooks/autopilot/transition.d.ts +39 -0
- package/dist/hooks/autopilot/transition.d.ts.map +1 -0
- package/dist/hooks/autopilot/transition.js +216 -0
- package/dist/hooks/autopilot/transition.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/constants.d.ts +28 -0
- package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/constants.js +85 -0
- package/dist/hooks/context-window-limit-recovery/constants.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/index.d.ts +62 -0
- package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/index.js +201 -0
- package/dist/hooks/context-window-limit-recovery/index.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/parser.d.ts +31 -0
- package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/parser.js +241 -0
- package/dist/hooks/context-window-limit-recovery/parser.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/types.d.ts +84 -0
- package/dist/hooks/context-window-limit-recovery/types.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/types.js +34 -0
- package/dist/hooks/context-window-limit-recovery/types.js.map +1 -0
- package/dist/hooks/edit-error-recovery/index.d.ts +62 -0
- package/dist/hooks/edit-error-recovery/index.d.ts.map +1 -0
- package/dist/hooks/edit-error-recovery/index.js +89 -0
- package/dist/hooks/edit-error-recovery/index.js.map +1 -0
- package/dist/hooks/learned-skills/config.d.ts +53 -0
- package/dist/hooks/learned-skills/config.d.ts.map +1 -0
- package/dist/hooks/learned-skills/config.js +103 -0
- package/dist/hooks/learned-skills/config.js.map +1 -0
- package/dist/hooks/learned-skills/constants.d.ts +24 -0
- package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
- package/dist/hooks/learned-skills/constants.js +26 -0
- package/dist/hooks/learned-skills/constants.js.map +1 -0
- package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
- package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
- package/dist/hooks/learned-skills/detection-hook.js +83 -0
- package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
- package/dist/hooks/learned-skills/detector.d.ts +30 -0
- package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
- package/dist/hooks/learned-skills/detector.js +150 -0
- package/dist/hooks/learned-skills/detector.js.map +1 -0
- package/dist/hooks/learned-skills/finder.d.ts +21 -0
- package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
- package/dist/hooks/learned-skills/finder.js +117 -0
- package/dist/hooks/learned-skills/finder.js.map +1 -0
- package/dist/hooks/learned-skills/index.d.ts +62 -0
- package/dist/hooks/learned-skills/index.d.ts.map +1 -0
- package/dist/hooks/learned-skills/index.js +137 -0
- package/dist/hooks/learned-skills/index.js.map +1 -0
- package/dist/hooks/learned-skills/loader.d.ts +20 -0
- package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
- package/dist/hooks/learned-skills/loader.js +107 -0
- package/dist/hooks/learned-skills/loader.js.map +1 -0
- package/dist/hooks/learned-skills/parser.d.ts +21 -0
- package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
- package/dist/hooks/learned-skills/parser.js +190 -0
- package/dist/hooks/learned-skills/parser.js.map +1 -0
- package/dist/hooks/learned-skills/promotion.d.ts +29 -0
- package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
- package/dist/hooks/learned-skills/promotion.js +87 -0
- package/dist/hooks/learned-skills/promotion.js.map +1 -0
- package/dist/hooks/learned-skills/types.d.ts +109 -0
- package/dist/hooks/learned-skills/types.d.ts.map +1 -0
- package/dist/hooks/learned-skills/types.js +8 -0
- package/dist/hooks/learned-skills/types.js.map +1 -0
- package/dist/hooks/learned-skills/validator.d.ts +15 -0
- package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
- package/dist/hooks/learned-skills/validator.js +87 -0
- package/dist/hooks/learned-skills/validator.js.map +1 -0
- package/dist/hooks/learned-skills/writer.d.ts +27 -0
- package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
- package/dist/hooks/learned-skills/writer.js +126 -0
- package/dist/hooks/learned-skills/writer.js.map +1 -0
- package/dist/hooks/mnemosyne/config.d.ts +53 -0
- package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/config.js +103 -0
- package/dist/hooks/mnemosyne/config.js.map +1 -0
- package/dist/hooks/mnemosyne/constants.d.ts +24 -0
- package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/constants.js +26 -0
- package/dist/hooks/mnemosyne/constants.js.map +1 -0
- package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
- package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/detection-hook.js +83 -0
- package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
- package/dist/hooks/mnemosyne/detector.d.ts +30 -0
- package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/detector.js +150 -0
- package/dist/hooks/mnemosyne/detector.js.map +1 -0
- package/dist/hooks/mnemosyne/finder.d.ts +21 -0
- package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/finder.js +117 -0
- package/dist/hooks/mnemosyne/finder.js.map +1 -0
- package/dist/hooks/mnemosyne/index.d.ts +62 -0
- package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/index.js +137 -0
- package/dist/hooks/mnemosyne/index.js.map +1 -0
- package/dist/hooks/mnemosyne/loader.d.ts +20 -0
- package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/loader.js +113 -0
- package/dist/hooks/mnemosyne/loader.js.map +1 -0
- package/dist/hooks/mnemosyne/parser.d.ts +21 -0
- package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/parser.js +190 -0
- package/dist/hooks/mnemosyne/parser.js.map +1 -0
- package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
- package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/promotion.js +87 -0
- package/dist/hooks/mnemosyne/promotion.js.map +1 -0
- package/dist/hooks/mnemosyne/types.d.ts +109 -0
- package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/types.js +8 -0
- package/dist/hooks/mnemosyne/types.js.map +1 -0
- package/dist/hooks/mnemosyne/validator.d.ts +15 -0
- package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/validator.js +87 -0
- package/dist/hooks/mnemosyne/validator.js.map +1 -0
- package/dist/hooks/mnemosyne/writer.d.ts +27 -0
- package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/writer.js +126 -0
- package/dist/hooks/mnemosyne/writer.js.map +1 -0
- package/dist/hooks/ralph-loop/index.d.ts +116 -0
- package/dist/hooks/ralph-loop/index.d.ts.map +1 -0
- package/dist/hooks/ralph-loop/index.js +322 -0
- package/dist/hooks/ralph-loop/index.js.map +1 -0
- package/dist/hooks/ralph-prd/index.d.ts +130 -0
- package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
- package/dist/hooks/ralph-prd/index.js +310 -0
- package/dist/hooks/ralph-prd/index.js.map +1 -0
- package/dist/hooks/ralph-progress/index.d.ts +102 -0
- package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
- package/dist/hooks/ralph-progress/index.js +408 -0
- package/dist/hooks/ralph-progress/index.js.map +1 -0
- package/dist/hooks/ralph-verifier/index.d.ts +72 -0
- package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
- package/dist/hooks/ralph-verifier/index.js +223 -0
- package/dist/hooks/ralph-verifier/index.js.map +1 -0
- package/dist/hooks/session-recovery/constants.d.ts +56 -0
- package/dist/hooks/session-recovery/constants.d.ts.map +1 -0
- package/dist/hooks/session-recovery/constants.js +78 -0
- package/dist/hooks/session-recovery/constants.js.map +1 -0
- package/dist/hooks/session-recovery/index.d.ts +53 -0
- package/dist/hooks/session-recovery/index.d.ts.map +1 -0
- package/dist/hooks/session-recovery/index.js +321 -0
- package/dist/hooks/session-recovery/index.js.map +1 -0
- package/dist/hooks/session-recovery/storage.d.ts +76 -0
- package/dist/hooks/session-recovery/storage.d.ts.map +1 -0
- package/dist/hooks/session-recovery/storage.js +383 -0
- package/dist/hooks/session-recovery/storage.js.map +1 -0
- package/dist/hooks/session-recovery/types.d.ts +145 -0
- package/dist/hooks/session-recovery/types.d.ts.map +1 -0
- package/dist/hooks/session-recovery/types.js +8 -0
- package/dist/hooks/session-recovery/types.js.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/constants.d.ts +23 -0
- package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/constants.js +142 -0
- package/dist/hooks/sisyphus-orchestrator/constants.js.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/index.d.ts +113 -0
- package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/index.js +309 -0
- package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -0
- package/dist/hooks/subagent-tracker/index.d.ts +83 -0
- package/dist/hooks/subagent-tracker/index.d.ts.map +1 -0
- package/dist/hooks/subagent-tracker/index.js +207 -0
- package/dist/hooks/subagent-tracker/index.js.map +1 -0
- package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
- package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
- package/dist/hooks/ultraqa-loop/index.js +216 -0
- package/dist/hooks/ultraqa-loop/index.js.map +1 -0
- package/dist/hooks/ultrawork-state/index.d.ts +62 -0
- package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
- package/dist/hooks/ultrawork-state/index.js +208 -0
- package/dist/hooks/ultrawork-state/index.js.map +1 -0
- package/dist/hud/sisyphus-state.d.ts +31 -0
- package/dist/hud/sisyphus-state.d.ts.map +1 -0
- package/dist/hud/sisyphus-state.js +163 -0
- package/dist/hud/sisyphus-state.js.map +1 -0
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.js +1 -1
- package/docs/MIGRATION.md +2 -2
- package/docs/design/project-session-manager.md +1033 -0
- package/package.json +1 -1
- package/skills/doctor/SKILL.md +1 -1
- package/skills/project-session-manager/SKILL.md +410 -0
- package/skills/project-session-manager/lib/config.sh +86 -0
- package/skills/project-session-manager/lib/parse.sh +121 -0
- package/skills/project-session-manager/lib/session.sh +132 -0
- package/skills/project-session-manager/lib/tmux.sh +103 -0
- package/skills/project-session-manager/lib/worktree.sh +171 -0
- package/skills/project-session-manager/psm.sh +629 -0
- package/skills/project-session-manager/templates/feature.md +56 -0
- package/skills/project-session-manager/templates/issue-fix.md +57 -0
- package/skills/project-session-manager/templates/pr-review.md +65 -0
- package/skills/project-session-manager/templates/projects.json +19 -0
|
@@ -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-state/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sisyphus HUD - State Readers
|
|
3
|
+
*
|
|
4
|
+
* Read ralph, ultrawork, and PRD state from existing Sisyphus files.
|
|
5
|
+
* These are read-only functions that don't modify the state files.
|
|
6
|
+
*/
|
|
7
|
+
import type { RalphStateForHud, UltraworkStateForHud, PrdStateForHud } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Read Ralph Loop state for HUD display.
|
|
10
|
+
* Returns null if no state file exists or on error.
|
|
11
|
+
*/
|
|
12
|
+
export declare function readRalphStateForHud(directory: string): RalphStateForHud | null;
|
|
13
|
+
/**
|
|
14
|
+
* Read Ultrawork state for HUD display.
|
|
15
|
+
* Checks both local .sisyphus and global ~/.claude locations.
|
|
16
|
+
*/
|
|
17
|
+
export declare function readUltraworkStateForHud(directory: string): UltraworkStateForHud | null;
|
|
18
|
+
/**
|
|
19
|
+
* Read PRD state for HUD display.
|
|
20
|
+
* Checks both root prd.json and .sisyphus/prd.json.
|
|
21
|
+
*/
|
|
22
|
+
export declare function readPrdStateForHud(directory: string): PrdStateForHud | null;
|
|
23
|
+
/**
|
|
24
|
+
* Check if any Sisyphus mode is currently active
|
|
25
|
+
*/
|
|
26
|
+
export declare function isAnyModeActive(directory: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Get active skill names for display
|
|
29
|
+
*/
|
|
30
|
+
export declare function getActiveSkills(directory: string): string[];
|
|
31
|
+
//# sourceMappingURL=sisyphus-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sisyphus-state.d.ts","sourceRoot":"","sources":["../../src/hud/sisyphus-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACf,MAAM,YAAY,CAAC;AAiCpB;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA8B/E;AAWD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,GAChB,oBAAoB,GAAG,IAAI,CAwC7B;AAgBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAsC3E;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAc3D"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sisyphus HUD - State Readers
|
|
3
|
+
*
|
|
4
|
+
* Read ralph, ultrawork, and PRD state from existing Sisyphus files.
|
|
5
|
+
* These are read-only functions that don't modify the state files.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync, statSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
/**
|
|
10
|
+
* Maximum age for state files to be considered "active".
|
|
11
|
+
* Files older than this are treated as stale/abandoned.
|
|
12
|
+
*/
|
|
13
|
+
const MAX_STATE_AGE_MS = 2 * 60 * 60 * 1000; // 2 hours
|
|
14
|
+
/**
|
|
15
|
+
* Check if a state file is stale based on file modification time.
|
|
16
|
+
*/
|
|
17
|
+
function isStateFileStale(filePath) {
|
|
18
|
+
try {
|
|
19
|
+
const stat = statSync(filePath);
|
|
20
|
+
const age = Date.now() - stat.mtimeMs;
|
|
21
|
+
return age > MAX_STATE_AGE_MS;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return true; // Treat errors as stale
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Read Ralph Loop state for HUD display.
|
|
29
|
+
* Returns null if no state file exists or on error.
|
|
30
|
+
*/
|
|
31
|
+
export function readRalphStateForHud(directory) {
|
|
32
|
+
const stateFile = join(directory, '.sisyphus', 'ralph-state.json');
|
|
33
|
+
if (!existsSync(stateFile)) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
// Check for stale state file (abandoned session)
|
|
37
|
+
if (isStateFileStale(stateFile)) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const content = readFileSync(stateFile, 'utf-8');
|
|
42
|
+
const state = JSON.parse(content);
|
|
43
|
+
if (!state.active) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
active: state.active,
|
|
48
|
+
iteration: state.iteration,
|
|
49
|
+
maxIterations: state.max_iterations,
|
|
50
|
+
prdMode: state.prd_mode,
|
|
51
|
+
currentStoryId: state.current_story_id,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read Ultrawork state for HUD display.
|
|
60
|
+
* Checks both local .sisyphus and global ~/.claude locations.
|
|
61
|
+
*/
|
|
62
|
+
export function readUltraworkStateForHud(directory) {
|
|
63
|
+
// Check local state first
|
|
64
|
+
const localFile = join(directory, '.sisyphus', 'ultrawork-state.json');
|
|
65
|
+
let state = null;
|
|
66
|
+
let stateFile = null;
|
|
67
|
+
if (existsSync(localFile) && !isStateFileStale(localFile)) {
|
|
68
|
+
try {
|
|
69
|
+
const content = readFileSync(localFile, 'utf-8');
|
|
70
|
+
state = JSON.parse(content);
|
|
71
|
+
stateFile = localFile;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Try global
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Check global state if local not found or stale
|
|
78
|
+
if (!state) {
|
|
79
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
80
|
+
const globalFile = join(homeDir, '.claude', 'ultrawork-state.json');
|
|
81
|
+
if (existsSync(globalFile) && !isStateFileStale(globalFile)) {
|
|
82
|
+
try {
|
|
83
|
+
const content = readFileSync(globalFile, 'utf-8');
|
|
84
|
+
state = JSON.parse(content);
|
|
85
|
+
stateFile = globalFile;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (!state || !state.active) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
active: state.active,
|
|
97
|
+
reinforcementCount: state.reinforcement_count,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Read PRD state for HUD display.
|
|
102
|
+
* Checks both root prd.json and .sisyphus/prd.json.
|
|
103
|
+
*/
|
|
104
|
+
export function readPrdStateForHud(directory) {
|
|
105
|
+
// Check root first
|
|
106
|
+
let prdPath = join(directory, 'prd.json');
|
|
107
|
+
if (!existsSync(prdPath)) {
|
|
108
|
+
// Check .sisyphus
|
|
109
|
+
prdPath = join(directory, '.sisyphus', 'prd.json');
|
|
110
|
+
if (!existsSync(prdPath)) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const content = readFileSync(prdPath, 'utf-8');
|
|
116
|
+
const prd = JSON.parse(content);
|
|
117
|
+
if (!prd.userStories || !Array.isArray(prd.userStories)) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
const stories = prd.userStories;
|
|
121
|
+
const completed = stories.filter((s) => s.passes).length;
|
|
122
|
+
const total = stories.length;
|
|
123
|
+
// Find current story (first incomplete, sorted by priority)
|
|
124
|
+
const incomplete = stories
|
|
125
|
+
.filter((s) => !s.passes)
|
|
126
|
+
.sort((a, b) => a.priority - b.priority);
|
|
127
|
+
return {
|
|
128
|
+
currentStoryId: incomplete[0]?.id || null,
|
|
129
|
+
completed,
|
|
130
|
+
total,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// ============================================================================
|
|
138
|
+
// Combined State Check
|
|
139
|
+
// ============================================================================
|
|
140
|
+
/**
|
|
141
|
+
* Check if any Sisyphus mode is currently active
|
|
142
|
+
*/
|
|
143
|
+
export function isAnyModeActive(directory) {
|
|
144
|
+
const ralph = readRalphStateForHud(directory);
|
|
145
|
+
const ultrawork = readUltraworkStateForHud(directory);
|
|
146
|
+
return (ralph?.active ?? false) || (ultrawork?.active ?? false);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get active skill names for display
|
|
150
|
+
*/
|
|
151
|
+
export function getActiveSkills(directory) {
|
|
152
|
+
const skills = [];
|
|
153
|
+
const ralph = readRalphStateForHud(directory);
|
|
154
|
+
if (ralph?.active) {
|
|
155
|
+
skills.push('ralph');
|
|
156
|
+
}
|
|
157
|
+
const ultrawork = readUltraworkStateForHud(directory);
|
|
158
|
+
if (ultrawork?.active) {
|
|
159
|
+
skills.push('ultrawork');
|
|
160
|
+
}
|
|
161
|
+
return skills;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=sisyphus-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sisyphus-state.js","sourceRoot":"","sources":["../../src/hud/sisyphus-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ export declare const VERSION_FILE: string;
|
|
|
31
31
|
*/
|
|
32
32
|
export declare const CORE_COMMANDS: string[];
|
|
33
33
|
/** Current version */
|
|
34
|
-
export declare const VERSION = "3.
|
|
34
|
+
export declare const VERSION = "3.6.3";
|
|
35
35
|
/** Installation result */
|
|
36
36
|
export interface InstallResult {
|
|
37
37
|
success: boolean;
|
package/dist/installer/index.js
CHANGED
|
@@ -37,7 +37,7 @@ export const VERSION_FILE = join(CLAUDE_CONFIG_DIR, '.omc-version.json');
|
|
|
37
37
|
*/
|
|
38
38
|
export const CORE_COMMANDS = [];
|
|
39
39
|
/** Current version */
|
|
40
|
-
export const VERSION = '3.
|
|
40
|
+
export const VERSION = '3.6.3';
|
|
41
41
|
/**
|
|
42
42
|
* Check if the current Node.js version meets the minimum requirement
|
|
43
43
|
*/
|
package/docs/MIGRATION.md
CHANGED
|
@@ -547,7 +547,7 @@ Background agents can be resumed with full context via `resume-session` tool.
|
|
|
547
547
|
Version 3.1 is a drop-in upgrade. No migration required!
|
|
548
548
|
|
|
549
549
|
```bash
|
|
550
|
-
npm update -g oh-my-
|
|
550
|
+
npm update -g oh-my-claude-sisyphus
|
|
551
551
|
```
|
|
552
552
|
|
|
553
553
|
All existing configurations, plans, and workflows continue working unchanged.
|
|
@@ -694,7 +694,7 @@ Users set their default mode preference via `/oh-my-claudecode:omc-setup`.
|
|
|
694
694
|
Version 3.4.0 is a drop-in upgrade. No migration required!
|
|
695
695
|
|
|
696
696
|
```bash
|
|
697
|
-
npm update -g oh-my-
|
|
697
|
+
npm update -g oh-my-claude-sisyphus
|
|
698
698
|
```
|
|
699
699
|
|
|
700
700
|
All existing configurations, plans, and workflows continue working unchanged.
|