oh-my-claude-sisyphus 3.5.7 → 3.6.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/agents/executor-high.md +2 -0
- package/agents/executor-low.md +2 -0
- package/agents/executor.md +2 -0
- package/agents/templates/base-agent.md +9 -0
- package/commands/cancel.md +8 -8
- package/commands/swarm.md +350 -148
- 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__/hooks/learner/bridge.test.d.ts +11 -0
- package/dist/__tests__/hooks/learner/bridge.test.d.ts.map +1 -0
- package/dist/__tests__/hooks/learner/bridge.test.js +199 -0
- package/dist/__tests__/hooks/learner/bridge.test.js.map +1 -0
- package/dist/__tests__/hooks.test.js +10 -9
- package/dist/__tests__/hooks.test.js.map +1 -1
- package/dist/__tests__/installer.test.js +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/preamble.d.ts +14 -0
- package/dist/agents/preamble.d.ts.map +1 -0
- package/dist/agents/preamble.js +26 -0
- package/dist/agents/preamble.js.map +1 -0
- package/dist/hooks/autopilot/__tests__/cancel.test.js +14 -4
- package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/state.test.js +1 -0
- package/dist/hooks/autopilot/__tests__/state.test.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/summary.test.js +38 -3
- package/dist/hooks/autopilot/__tests__/summary.test.js.map +1 -1
- package/dist/hooks/autopilot/state.d.ts +1 -1
- package/dist/hooks/autopilot/state.d.ts.map +1 -1
- package/dist/hooks/autopilot/state.js +15 -8
- package/dist/hooks/autopilot/state.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/learner/bridge.d.ts +71 -0
- package/dist/hooks/learner/bridge.d.ts.map +1 -0
- package/dist/hooks/learner/bridge.js +426 -0
- package/dist/hooks/learner/bridge.js.map +1 -0
- package/dist/hooks/mode-registry/index.d.ts +135 -0
- package/dist/hooks/mode-registry/index.d.ts.map +1 -0
- package/dist/hooks/mode-registry/index.js +445 -0
- package/dist/hooks/mode-registry/index.js.map +1 -0
- package/dist/hooks/mode-registry/types.d.ts +31 -0
- package/dist/hooks/mode-registry/types.d.ts.map +1 -0
- package/dist/hooks/mode-registry/types.js +7 -0
- package/dist/hooks/mode-registry/types.js.map +1 -0
- package/dist/hooks/ralph/loop.js +6 -6
- package/dist/hooks/ralph/loop.js.map +1 -1
- package/dist/hooks/skill-bridge.cjs +349 -0
- package/dist/hooks/swarm/__tests__/claiming.test.d.ts +2 -0
- package/dist/hooks/swarm/__tests__/claiming.test.d.ts.map +1 -0
- package/dist/hooks/swarm/__tests__/claiming.test.js +170 -0
- package/dist/hooks/swarm/__tests__/claiming.test.js.map +1 -0
- package/dist/hooks/swarm/__tests__/index.test.d.ts +2 -0
- package/dist/hooks/swarm/__tests__/index.test.d.ts.map +1 -0
- package/dist/hooks/swarm/__tests__/index.test.js +157 -0
- package/dist/hooks/swarm/__tests__/index.test.js.map +1 -0
- package/dist/hooks/swarm/__tests__/mode-registry.test.d.ts +2 -0
- package/dist/hooks/swarm/__tests__/mode-registry.test.d.ts.map +1 -0
- package/dist/hooks/swarm/__tests__/mode-registry.test.js +177 -0
- package/dist/hooks/swarm/__tests__/mode-registry.test.js.map +1 -0
- package/dist/hooks/swarm/claiming.d.ts +101 -0
- package/dist/hooks/swarm/claiming.d.ts.map +1 -0
- package/dist/hooks/swarm/claiming.js +460 -0
- package/dist/hooks/swarm/claiming.js.map +1 -0
- package/dist/hooks/swarm/index.d.ts +221 -0
- package/dist/hooks/swarm/index.d.ts.map +1 -0
- package/dist/hooks/swarm/index.js +413 -0
- package/dist/hooks/swarm/index.js.map +1 -0
- package/dist/hooks/swarm/state.d.ts +94 -0
- package/dist/hooks/swarm/state.d.ts.map +1 -0
- package/dist/hooks/swarm/state.js +530 -0
- package/dist/hooks/swarm/state.js.map +1 -0
- package/dist/hooks/swarm/types.d.ts +116 -0
- package/dist/hooks/swarm/types.d.ts.map +1 -0
- package/dist/hooks/swarm/types.js +22 -0
- package/dist/hooks/swarm/types.js.map +1 -0
- package/dist/hooks/ultrapilot/decomposer.d.ts +141 -0
- package/dist/hooks/ultrapilot/decomposer.d.ts.map +1 -0
- package/dist/hooks/ultrapilot/decomposer.js +377 -0
- package/dist/hooks/ultrapilot/decomposer.js.map +1 -0
- package/dist/hooks/ultrapilot/index.d.ts +31 -0
- package/dist/hooks/ultrapilot/index.d.ts.map +1 -1
- package/dist/hooks/ultrapilot/index.js +43 -2
- package/dist/hooks/ultrapilot/index.js.map +1 -1
- package/dist/hooks/ultrapilot/state.d.ts +1 -1
- package/dist/hooks/ultrapilot/state.d.ts.map +1 -1
- package/dist/hooks/ultrapilot/state.js +7 -0
- package/dist/hooks/ultrapilot/state.js.map +1 -1
- package/dist/hooks/ultraqa/index.js +5 -5
- package/dist/hooks/ultraqa/index.js.map +1 -1
- package/dist/hooks/ultrawork/index.js +3 -3
- package/dist/hooks/ultrawork/index.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.js +1 -1
- package/package.json +6 -2
- package/scripts/build-skill-bridge.mjs +32 -0
- package/scripts/skill-injector.mjs +77 -26
- package/skills/autopilot/SKILL.md +18 -0
- package/skills/cancel/SKILL.md +166 -141
- package/skills/ecomode/SKILL.md +14 -0
- package/skills/pipeline/SKILL.md +13 -0
- package/skills/ralph/SKILL.md +22 -1
- package/skills/swarm/SKILL.md +521 -197
- package/skills/ultrapilot/SKILL.md +82 -13
- package/skills/ultraqa/SKILL.md +13 -0
- package/skills/ultrawork/SKILL.md +14 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mode Registry - Centralized Mode State Detection
|
|
3
|
+
*
|
|
4
|
+
* CRITICAL: This module uses ONLY file-based detection.
|
|
5
|
+
* It NEVER imports from mode modules to avoid circular dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Mode modules import FROM this registry (unidirectional).
|
|
8
|
+
*
|
|
9
|
+
* All modes store state in `.omc/state/` subdirectory for consistency.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync, mkdirSync } from 'fs';
|
|
12
|
+
import { join, dirname } from 'path';
|
|
13
|
+
/**
|
|
14
|
+
* Stale marker threshold (1 hour)
|
|
15
|
+
* Markers older than this are auto-removed to prevent crashed sessions from blocking indefinitely.
|
|
16
|
+
* NOTE: We cannot check database activity here due to circular dependency constraints.
|
|
17
|
+
* Legitimate long-running swarms (>1 hour) may have markers removed - acceptable trade-off.
|
|
18
|
+
*/
|
|
19
|
+
export const STALE_MARKER_THRESHOLD = 60 * 60 * 1000; // 1 hour in milliseconds
|
|
20
|
+
/**
|
|
21
|
+
* Mode configuration registry
|
|
22
|
+
*
|
|
23
|
+
* Maps each mode to its state file location and detection method.
|
|
24
|
+
* All paths are relative to .omc/state/ directory.
|
|
25
|
+
*/
|
|
26
|
+
const MODE_CONFIGS = {
|
|
27
|
+
autopilot: {
|
|
28
|
+
name: 'Autopilot',
|
|
29
|
+
stateFile: 'autopilot-state.json',
|
|
30
|
+
activeProperty: 'active'
|
|
31
|
+
},
|
|
32
|
+
ultrapilot: {
|
|
33
|
+
name: 'Ultrapilot',
|
|
34
|
+
stateFile: 'ultrapilot-state.json',
|
|
35
|
+
markerFile: 'ultrapilot-ownership.json',
|
|
36
|
+
activeProperty: 'active'
|
|
37
|
+
},
|
|
38
|
+
swarm: {
|
|
39
|
+
name: 'Swarm',
|
|
40
|
+
stateFile: 'swarm.db',
|
|
41
|
+
markerFile: 'swarm-active.marker',
|
|
42
|
+
isSqlite: true
|
|
43
|
+
},
|
|
44
|
+
pipeline: {
|
|
45
|
+
name: 'Pipeline',
|
|
46
|
+
stateFile: 'pipeline-state.json',
|
|
47
|
+
activeProperty: 'active'
|
|
48
|
+
},
|
|
49
|
+
ralph: {
|
|
50
|
+
name: 'Ralph',
|
|
51
|
+
stateFile: 'ralph-state.json',
|
|
52
|
+
markerFile: 'ralph-verification.json',
|
|
53
|
+
activeProperty: 'active',
|
|
54
|
+
hasGlobalState: true
|
|
55
|
+
},
|
|
56
|
+
ultrawork: {
|
|
57
|
+
name: 'Ultrawork',
|
|
58
|
+
stateFile: 'ultrawork-state.json',
|
|
59
|
+
activeProperty: 'active',
|
|
60
|
+
hasGlobalState: true
|
|
61
|
+
},
|
|
62
|
+
ultraqa: {
|
|
63
|
+
name: 'UltraQA',
|
|
64
|
+
stateFile: 'ultraqa-state.json',
|
|
65
|
+
activeProperty: 'active'
|
|
66
|
+
},
|
|
67
|
+
ecomode: {
|
|
68
|
+
name: 'Ecomode',
|
|
69
|
+
stateFile: 'ecomode-state.json',
|
|
70
|
+
activeProperty: 'active',
|
|
71
|
+
hasGlobalState: true
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
// Export for use in other modules
|
|
75
|
+
export { MODE_CONFIGS };
|
|
76
|
+
/**
|
|
77
|
+
* Modes that are mutually exclusive (cannot run concurrently)
|
|
78
|
+
*/
|
|
79
|
+
const EXCLUSIVE_MODES = ['autopilot', 'ultrapilot', 'swarm', 'pipeline'];
|
|
80
|
+
/**
|
|
81
|
+
* Get the state directory path
|
|
82
|
+
*/
|
|
83
|
+
export function getStateDir(cwd) {
|
|
84
|
+
return join(cwd, '.omc', 'state');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Ensure the state directory exists
|
|
88
|
+
*/
|
|
89
|
+
export function ensureStateDir(cwd) {
|
|
90
|
+
const stateDir = getStateDir(cwd);
|
|
91
|
+
if (!existsSync(stateDir)) {
|
|
92
|
+
mkdirSync(stateDir, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the full path to a mode's state file
|
|
97
|
+
*/
|
|
98
|
+
export function getStateFilePath(cwd, mode) {
|
|
99
|
+
const config = MODE_CONFIGS[mode];
|
|
100
|
+
return join(getStateDir(cwd), config.stateFile);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get the full path to a mode's marker file
|
|
104
|
+
*/
|
|
105
|
+
export function getMarkerFilePath(cwd, mode) {
|
|
106
|
+
const config = MODE_CONFIGS[mode];
|
|
107
|
+
if (!config.markerFile)
|
|
108
|
+
return null;
|
|
109
|
+
return join(getStateDir(cwd), config.markerFile);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get the global state file path (in ~/.claude/) for modes that support it
|
|
113
|
+
*/
|
|
114
|
+
export function getGlobalStateFilePath(mode) {
|
|
115
|
+
const config = MODE_CONFIGS[mode];
|
|
116
|
+
if (!config.hasGlobalState) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
120
|
+
return join(homeDir, '.claude', config.stateFile);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check if a JSON-based mode is active by reading its state file
|
|
124
|
+
*/
|
|
125
|
+
function isJsonModeActive(cwd, mode) {
|
|
126
|
+
const config = MODE_CONFIGS[mode];
|
|
127
|
+
const stateFile = getStateFilePath(cwd, mode);
|
|
128
|
+
if (!existsSync(stateFile)) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const content = readFileSync(stateFile, 'utf-8');
|
|
133
|
+
const state = JSON.parse(content);
|
|
134
|
+
if (config.activeProperty) {
|
|
135
|
+
return state[config.activeProperty] === true;
|
|
136
|
+
}
|
|
137
|
+
// Default: file existence means active
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Check if a SQLite-based mode is active by checking its marker file
|
|
146
|
+
*
|
|
147
|
+
* We use a marker file instead of querying SQLite directly to avoid:
|
|
148
|
+
* 1. Requiring sqlite3 CLI or better-sqlite3 dependency
|
|
149
|
+
* 2. Opening database connections from the registry
|
|
150
|
+
*/
|
|
151
|
+
function isSqliteModeActive(cwd, mode) {
|
|
152
|
+
const markerPath = getMarkerFilePath(cwd, mode);
|
|
153
|
+
// Check marker file first (authoritative)
|
|
154
|
+
if (markerPath && existsSync(markerPath)) {
|
|
155
|
+
try {
|
|
156
|
+
const content = readFileSync(markerPath, 'utf-8');
|
|
157
|
+
const marker = JSON.parse(content);
|
|
158
|
+
// Check if marker is stale (older than 1 hour)
|
|
159
|
+
// NOTE: We cannot check database activity here due to circular dependency constraints.
|
|
160
|
+
// This means legitimate long-running swarms (>1 hour) may have their markers removed.
|
|
161
|
+
// This is a deliberate trade-off to prevent crashed swarms from blocking indefinitely.
|
|
162
|
+
if (marker.startedAt) {
|
|
163
|
+
const startTime = new Date(marker.startedAt).getTime();
|
|
164
|
+
const age = Date.now() - startTime;
|
|
165
|
+
if (age > STALE_MARKER_THRESHOLD) {
|
|
166
|
+
console.warn(`Stale ${mode} marker detected (${Math.round(age / 60000)} min old). Auto-removing.`);
|
|
167
|
+
unlinkSync(markerPath);
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Fallback: check if database file exists (may have stale data)
|
|
178
|
+
const dbPath = getStateFilePath(cwd, mode);
|
|
179
|
+
return existsSync(dbPath);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if a specific mode is currently active
|
|
183
|
+
*
|
|
184
|
+
* @param mode - The mode to check
|
|
185
|
+
* @param cwd - Working directory
|
|
186
|
+
* @returns true if the mode is active
|
|
187
|
+
*/
|
|
188
|
+
export function isModeActive(mode, cwd) {
|
|
189
|
+
const config = MODE_CONFIGS[mode];
|
|
190
|
+
if (config.isSqlite) {
|
|
191
|
+
return isSqliteModeActive(cwd, mode);
|
|
192
|
+
}
|
|
193
|
+
return isJsonModeActive(cwd, mode);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if a mode has active state (file exists)
|
|
197
|
+
*/
|
|
198
|
+
export function hasModeState(cwd, mode) {
|
|
199
|
+
const stateFile = getStateFilePath(cwd, mode);
|
|
200
|
+
return existsSync(stateFile);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get all modes that currently have state files
|
|
204
|
+
*/
|
|
205
|
+
export function getActiveModes(cwd) {
|
|
206
|
+
const modes = [];
|
|
207
|
+
for (const mode of Object.keys(MODE_CONFIGS)) {
|
|
208
|
+
if (isModeActive(mode, cwd)) {
|
|
209
|
+
modes.push(mode);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return modes;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get the currently active exclusive mode (if any)
|
|
216
|
+
*
|
|
217
|
+
* @param cwd - Working directory
|
|
218
|
+
* @returns The active mode or null
|
|
219
|
+
*/
|
|
220
|
+
export function getActiveExclusiveMode(cwd) {
|
|
221
|
+
for (const mode of EXCLUSIVE_MODES) {
|
|
222
|
+
if (isModeActive(mode, cwd)) {
|
|
223
|
+
return mode;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Check if a new mode can be started
|
|
230
|
+
*
|
|
231
|
+
* @param mode - The mode to start
|
|
232
|
+
* @param cwd - Working directory
|
|
233
|
+
* @returns CanStartResult with allowed status and blocker info
|
|
234
|
+
*/
|
|
235
|
+
export function canStartMode(mode, cwd) {
|
|
236
|
+
// Check for mutually exclusive modes
|
|
237
|
+
if (EXCLUSIVE_MODES.includes(mode)) {
|
|
238
|
+
for (const exclusiveMode of EXCLUSIVE_MODES) {
|
|
239
|
+
if (exclusiveMode !== mode && isModeActive(exclusiveMode, cwd)) {
|
|
240
|
+
const config = MODE_CONFIGS[exclusiveMode];
|
|
241
|
+
return {
|
|
242
|
+
allowed: false,
|
|
243
|
+
blockedBy: exclusiveMode,
|
|
244
|
+
message: `Cannot start ${MODE_CONFIGS[mode].name} while ${config.name} is active. Cancel ${config.name} first with /oh-my-claudecode:cancel.`
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return { allowed: true };
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get status of all modes
|
|
253
|
+
*
|
|
254
|
+
* @param cwd - Working directory
|
|
255
|
+
* @returns Array of mode statuses
|
|
256
|
+
*/
|
|
257
|
+
export function getAllModeStatuses(cwd) {
|
|
258
|
+
return Object.keys(MODE_CONFIGS).map(mode => ({
|
|
259
|
+
mode,
|
|
260
|
+
active: isModeActive(mode, cwd),
|
|
261
|
+
stateFilePath: getStateFilePath(cwd, mode)
|
|
262
|
+
}));
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Clear all state files for a mode
|
|
266
|
+
*
|
|
267
|
+
* Deletes:
|
|
268
|
+
* - Local state file (.omc/state/{mode}-state.json)
|
|
269
|
+
* - Local marker file if applicable
|
|
270
|
+
* - Global state file if applicable (~/.claude/{mode}-state.json)
|
|
271
|
+
*
|
|
272
|
+
* @returns true if all files were deleted successfully (or didn't exist)
|
|
273
|
+
*/
|
|
274
|
+
export function clearModeState(mode, cwd) {
|
|
275
|
+
const config = MODE_CONFIGS[mode];
|
|
276
|
+
let success = true;
|
|
277
|
+
// Delete local state file
|
|
278
|
+
const stateFile = getStateFilePath(cwd, mode);
|
|
279
|
+
if (existsSync(stateFile)) {
|
|
280
|
+
try {
|
|
281
|
+
unlinkSync(stateFile);
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
success = false;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// For SQLite, also delete WAL and SHM files
|
|
288
|
+
if (config.isSqlite) {
|
|
289
|
+
const walFile = stateFile + '-wal';
|
|
290
|
+
const shmFile = stateFile + '-shm';
|
|
291
|
+
if (existsSync(walFile)) {
|
|
292
|
+
try {
|
|
293
|
+
unlinkSync(walFile);
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
success = false;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (existsSync(shmFile)) {
|
|
300
|
+
try {
|
|
301
|
+
unlinkSync(shmFile);
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
success = false;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Delete marker file if applicable
|
|
309
|
+
const markerFile = getMarkerFilePath(cwd, mode);
|
|
310
|
+
if (markerFile && existsSync(markerFile)) {
|
|
311
|
+
try {
|
|
312
|
+
unlinkSync(markerFile);
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
success = false;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Delete global state file if applicable
|
|
319
|
+
const globalFile = getGlobalStateFilePath(mode);
|
|
320
|
+
if (globalFile && existsSync(globalFile)) {
|
|
321
|
+
try {
|
|
322
|
+
unlinkSync(globalFile);
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
success = false;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return success;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Clear all mode states (force clear)
|
|
332
|
+
*/
|
|
333
|
+
export function clearAllModeStates(cwd) {
|
|
334
|
+
let success = true;
|
|
335
|
+
for (const mode of Object.keys(MODE_CONFIGS)) {
|
|
336
|
+
if (!clearModeState(mode, cwd)) {
|
|
337
|
+
success = false;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return success;
|
|
341
|
+
}
|
|
342
|
+
// ============================================================================
|
|
343
|
+
// MARKER FILE MANAGEMENT (for SQLite-based modes)
|
|
344
|
+
// ============================================================================
|
|
345
|
+
/**
|
|
346
|
+
* Create a marker file to indicate a mode is active
|
|
347
|
+
*
|
|
348
|
+
* Called when starting a SQLite-based mode (like swarm).
|
|
349
|
+
*
|
|
350
|
+
* @param mode - The mode being started
|
|
351
|
+
* @param cwd - Working directory
|
|
352
|
+
* @param metadata - Optional metadata to store in marker
|
|
353
|
+
*/
|
|
354
|
+
export function createModeMarker(mode, cwd, metadata) {
|
|
355
|
+
const markerPath = getMarkerFilePath(cwd, mode);
|
|
356
|
+
if (!markerPath) {
|
|
357
|
+
console.error(`Mode ${mode} does not use a marker file`);
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
try {
|
|
361
|
+
// Ensure directory exists
|
|
362
|
+
const dir = dirname(markerPath);
|
|
363
|
+
if (!existsSync(dir)) {
|
|
364
|
+
mkdirSync(dir, { recursive: true });
|
|
365
|
+
}
|
|
366
|
+
const content = JSON.stringify({
|
|
367
|
+
mode,
|
|
368
|
+
startedAt: new Date().toISOString(),
|
|
369
|
+
...metadata
|
|
370
|
+
}, null, 2);
|
|
371
|
+
writeFileSync(markerPath, content);
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
console.error(`Failed to create marker file for ${mode}:`, error);
|
|
376
|
+
return false;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Remove a marker file to indicate a mode has stopped
|
|
381
|
+
*
|
|
382
|
+
* Called when stopping a SQLite-based mode (like swarm).
|
|
383
|
+
*
|
|
384
|
+
* @param mode - The mode being stopped
|
|
385
|
+
* @param cwd - Working directory
|
|
386
|
+
*/
|
|
387
|
+
export function removeModeMarker(mode, cwd) {
|
|
388
|
+
const markerPath = getMarkerFilePath(cwd, mode);
|
|
389
|
+
if (!markerPath) {
|
|
390
|
+
return true; // No marker to remove
|
|
391
|
+
}
|
|
392
|
+
try {
|
|
393
|
+
if (existsSync(markerPath)) {
|
|
394
|
+
unlinkSync(markerPath);
|
|
395
|
+
}
|
|
396
|
+
return true;
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
console.error(`Failed to remove marker file for ${mode}:`, error);
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Read metadata from a marker file
|
|
405
|
+
*
|
|
406
|
+
* @param mode - The mode to read
|
|
407
|
+
* @param cwd - Working directory
|
|
408
|
+
*/
|
|
409
|
+
export function readModeMarker(mode, cwd) {
|
|
410
|
+
const markerPath = getMarkerFilePath(cwd, mode);
|
|
411
|
+
if (!markerPath || !existsSync(markerPath)) {
|
|
412
|
+
return null;
|
|
413
|
+
}
|
|
414
|
+
try {
|
|
415
|
+
const content = readFileSync(markerPath, 'utf-8');
|
|
416
|
+
return JSON.parse(content);
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Force remove a marker file regardless of staleness
|
|
424
|
+
* Used for manual cleanup by users
|
|
425
|
+
*
|
|
426
|
+
* @param mode - The mode to clean up
|
|
427
|
+
* @param cwd - Working directory
|
|
428
|
+
*/
|
|
429
|
+
export function forceRemoveMarker(mode, cwd) {
|
|
430
|
+
const markerPath = getMarkerFilePath(cwd, mode);
|
|
431
|
+
if (!markerPath) {
|
|
432
|
+
return true; // No marker to remove
|
|
433
|
+
}
|
|
434
|
+
try {
|
|
435
|
+
if (existsSync(markerPath)) {
|
|
436
|
+
unlinkSync(markerPath);
|
|
437
|
+
}
|
|
438
|
+
return true;
|
|
439
|
+
}
|
|
440
|
+
catch (error) {
|
|
441
|
+
console.error(`Failed to force remove marker file for ${mode}:`, error);
|
|
442
|
+
return false;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/mode-registry/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mode Registry Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the supported execution modes and their state file locations.
|
|
5
|
+
*/
|
|
6
|
+
export type ExecutionMode = 'autopilot' | 'ultrapilot' | 'swarm' | 'pipeline' | 'ralph' | 'ultrawork' | 'ultraqa' | 'ecomode';
|
|
7
|
+
export interface ModeConfig {
|
|
8
|
+
/** Display name for the mode */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Primary state file path (relative to .omc/state/) */
|
|
11
|
+
stateFile: string;
|
|
12
|
+
/** Alternative/marker file path (relative to .omc/state/) */
|
|
13
|
+
markerFile?: string;
|
|
14
|
+
/** Property to check in JSON state (if JSON-based) */
|
|
15
|
+
activeProperty?: string;
|
|
16
|
+
/** Whether state is SQLite-based (requires marker file) */
|
|
17
|
+
isSqlite?: boolean;
|
|
18
|
+
/** Whether mode has global state in ~/.claude/ */
|
|
19
|
+
hasGlobalState?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface ModeStatus {
|
|
22
|
+
mode: ExecutionMode;
|
|
23
|
+
active: boolean;
|
|
24
|
+
stateFilePath: string;
|
|
25
|
+
}
|
|
26
|
+
export interface CanStartResult {
|
|
27
|
+
allowed: boolean;
|
|
28
|
+
blockedBy?: ExecutionMode;
|
|
29
|
+
message?: string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/mode-registry/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,YAAY,GACZ,OAAO,GACP,UAAU,GACV,OAAO,GACP,WAAW,GACX,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/mode-registry/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/dist/hooks/ralph/loop.js
CHANGED
|
@@ -18,7 +18,7 @@ import { readUltraworkState as readUltraworkStateFromModule, writeUltraworkState
|
|
|
18
18
|
// Forward declaration to avoid circular import - check ultraqa state file directly
|
|
19
19
|
export function isUltraQAActive(directory) {
|
|
20
20
|
const omcDir = join(directory, '.omc');
|
|
21
|
-
const stateFile = join(omcDir, 'ultraqa-state.json');
|
|
21
|
+
const stateFile = join(omcDir, 'state', 'ultraqa-state.json');
|
|
22
22
|
if (!existsSync(stateFile)) {
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
@@ -38,15 +38,15 @@ const DEFAULT_COMPLETION_PROMISE = 'TASK_COMPLETE';
|
|
|
38
38
|
*/
|
|
39
39
|
function getStateFilePath(directory) {
|
|
40
40
|
const omcDir = join(directory, '.omc');
|
|
41
|
-
return join(omcDir, 'ralph-state.json');
|
|
41
|
+
return join(omcDir, 'state', 'ralph-state.json');
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Ensure the .omc directory exists
|
|
45
45
|
*/
|
|
46
46
|
function ensureStateDir(directory) {
|
|
47
|
-
const
|
|
48
|
-
if (!existsSync(
|
|
49
|
-
mkdirSync(
|
|
47
|
+
const stateDir = join(directory, '.omc', 'state');
|
|
48
|
+
if (!existsSync(stateDir)) {
|
|
49
|
+
mkdirSync(stateDir, { recursive: true });
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
@@ -105,7 +105,7 @@ export function clearLinkedUltraworkState(directory) {
|
|
|
105
105
|
return true;
|
|
106
106
|
}
|
|
107
107
|
const omcDir = join(directory, '.omc');
|
|
108
|
-
const stateFile = join(omcDir, 'ultrawork-state.json');
|
|
108
|
+
const stateFile = join(omcDir, 'state', 'ultrawork-state.json');
|
|
109
109
|
try {
|
|
110
110
|
unlinkSync(stateFile);
|
|
111
111
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/hooks/ralph/loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EACL,OAAO,EACP,YAAY,EACZ,qBAAqB,EACrB,eAAe,EAGhB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,UAAU,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,kBAAkB,IAAI,4BAA4B,EAClD,mBAAmB,IAAI,6BAA6B,EACrD,MAAM,uBAAuB,CAAC;AAE/B,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/hooks/ralph/loop.ts"],"names":[],"mappings":"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"}
|