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.
Files changed (112) hide show
  1. package/agents/executor-high.md +2 -0
  2. package/agents/executor-low.md +2 -0
  3. package/agents/executor.md +2 -0
  4. package/agents/templates/base-agent.md +9 -0
  5. package/commands/cancel.md +8 -8
  6. package/commands/swarm.md +350 -148
  7. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
  8. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
  9. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
  10. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
  11. package/dist/__tests__/hooks/learner/bridge.test.d.ts +11 -0
  12. package/dist/__tests__/hooks/learner/bridge.test.d.ts.map +1 -0
  13. package/dist/__tests__/hooks/learner/bridge.test.js +199 -0
  14. package/dist/__tests__/hooks/learner/bridge.test.js.map +1 -0
  15. package/dist/__tests__/hooks.test.js +10 -9
  16. package/dist/__tests__/hooks.test.js.map +1 -1
  17. package/dist/__tests__/installer.test.js +1 -1
  18. package/dist/agents/codex-agents.d.ts +20 -0
  19. package/dist/agents/codex-agents.d.ts.map +1 -0
  20. package/dist/agents/codex-agents.js +36 -0
  21. package/dist/agents/codex-agents.js.map +1 -0
  22. package/dist/agents/preamble.d.ts +14 -0
  23. package/dist/agents/preamble.d.ts.map +1 -0
  24. package/dist/agents/preamble.js +26 -0
  25. package/dist/agents/preamble.js.map +1 -0
  26. package/dist/hooks/autopilot/__tests__/cancel.test.js +14 -4
  27. package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -1
  28. package/dist/hooks/autopilot/__tests__/state.test.js +1 -0
  29. package/dist/hooks/autopilot/__tests__/state.test.js.map +1 -1
  30. package/dist/hooks/autopilot/__tests__/summary.test.js +38 -3
  31. package/dist/hooks/autopilot/__tests__/summary.test.js.map +1 -1
  32. package/dist/hooks/autopilot/state.d.ts +1 -1
  33. package/dist/hooks/autopilot/state.d.ts.map +1 -1
  34. package/dist/hooks/autopilot/state.js +15 -8
  35. package/dist/hooks/autopilot/state.js.map +1 -1
  36. package/dist/hooks/index.d.ts +2 -0
  37. package/dist/hooks/index.d.ts.map +1 -1
  38. package/dist/hooks/index.js +7 -0
  39. package/dist/hooks/index.js.map +1 -1
  40. package/dist/hooks/learner/bridge.d.ts +71 -0
  41. package/dist/hooks/learner/bridge.d.ts.map +1 -0
  42. package/dist/hooks/learner/bridge.js +426 -0
  43. package/dist/hooks/learner/bridge.js.map +1 -0
  44. package/dist/hooks/mode-registry/index.d.ts +135 -0
  45. package/dist/hooks/mode-registry/index.d.ts.map +1 -0
  46. package/dist/hooks/mode-registry/index.js +445 -0
  47. package/dist/hooks/mode-registry/index.js.map +1 -0
  48. package/dist/hooks/mode-registry/types.d.ts +31 -0
  49. package/dist/hooks/mode-registry/types.d.ts.map +1 -0
  50. package/dist/hooks/mode-registry/types.js +7 -0
  51. package/dist/hooks/mode-registry/types.js.map +1 -0
  52. package/dist/hooks/ralph/loop.js +6 -6
  53. package/dist/hooks/ralph/loop.js.map +1 -1
  54. package/dist/hooks/skill-bridge.cjs +349 -0
  55. package/dist/hooks/swarm/__tests__/claiming.test.d.ts +2 -0
  56. package/dist/hooks/swarm/__tests__/claiming.test.d.ts.map +1 -0
  57. package/dist/hooks/swarm/__tests__/claiming.test.js +170 -0
  58. package/dist/hooks/swarm/__tests__/claiming.test.js.map +1 -0
  59. package/dist/hooks/swarm/__tests__/index.test.d.ts +2 -0
  60. package/dist/hooks/swarm/__tests__/index.test.d.ts.map +1 -0
  61. package/dist/hooks/swarm/__tests__/index.test.js +157 -0
  62. package/dist/hooks/swarm/__tests__/index.test.js.map +1 -0
  63. package/dist/hooks/swarm/__tests__/mode-registry.test.d.ts +2 -0
  64. package/dist/hooks/swarm/__tests__/mode-registry.test.d.ts.map +1 -0
  65. package/dist/hooks/swarm/__tests__/mode-registry.test.js +177 -0
  66. package/dist/hooks/swarm/__tests__/mode-registry.test.js.map +1 -0
  67. package/dist/hooks/swarm/claiming.d.ts +101 -0
  68. package/dist/hooks/swarm/claiming.d.ts.map +1 -0
  69. package/dist/hooks/swarm/claiming.js +460 -0
  70. package/dist/hooks/swarm/claiming.js.map +1 -0
  71. package/dist/hooks/swarm/index.d.ts +221 -0
  72. package/dist/hooks/swarm/index.d.ts.map +1 -0
  73. package/dist/hooks/swarm/index.js +413 -0
  74. package/dist/hooks/swarm/index.js.map +1 -0
  75. package/dist/hooks/swarm/state.d.ts +94 -0
  76. package/dist/hooks/swarm/state.d.ts.map +1 -0
  77. package/dist/hooks/swarm/state.js +530 -0
  78. package/dist/hooks/swarm/state.js.map +1 -0
  79. package/dist/hooks/swarm/types.d.ts +116 -0
  80. package/dist/hooks/swarm/types.d.ts.map +1 -0
  81. package/dist/hooks/swarm/types.js +22 -0
  82. package/dist/hooks/swarm/types.js.map +1 -0
  83. package/dist/hooks/ultrapilot/decomposer.d.ts +141 -0
  84. package/dist/hooks/ultrapilot/decomposer.d.ts.map +1 -0
  85. package/dist/hooks/ultrapilot/decomposer.js +377 -0
  86. package/dist/hooks/ultrapilot/decomposer.js.map +1 -0
  87. package/dist/hooks/ultrapilot/index.d.ts +31 -0
  88. package/dist/hooks/ultrapilot/index.d.ts.map +1 -1
  89. package/dist/hooks/ultrapilot/index.js +43 -2
  90. package/dist/hooks/ultrapilot/index.js.map +1 -1
  91. package/dist/hooks/ultrapilot/state.d.ts +1 -1
  92. package/dist/hooks/ultrapilot/state.d.ts.map +1 -1
  93. package/dist/hooks/ultrapilot/state.js +7 -0
  94. package/dist/hooks/ultrapilot/state.js.map +1 -1
  95. package/dist/hooks/ultraqa/index.js +5 -5
  96. package/dist/hooks/ultraqa/index.js.map +1 -1
  97. package/dist/hooks/ultrawork/index.js +3 -3
  98. package/dist/hooks/ultrawork/index.js.map +1 -1
  99. package/dist/installer/index.d.ts +1 -1
  100. package/dist/installer/index.js +1 -1
  101. package/package.json +6 -2
  102. package/scripts/build-skill-bridge.mjs +32 -0
  103. package/scripts/skill-injector.mjs +77 -26
  104. package/skills/autopilot/SKILL.md +18 -0
  105. package/skills/cancel/SKILL.md +166 -141
  106. package/skills/ecomode/SKILL.md +14 -0
  107. package/skills/pipeline/SKILL.md +13 -0
  108. package/skills/ralph/SKILL.md +22 -1
  109. package/skills/swarm/SKILL.md +521 -197
  110. package/skills/ultrapilot/SKILL.md +82 -13
  111. package/skills/ultraqa/SKILL.md +13 -0
  112. package/skills/ultrawork/SKILL.md +14 -0
@@ -0,0 +1,426 @@
1
+ /**
2
+ * Skill Bridge Module
3
+ *
4
+ * Exports a focused API for skill-injector.mjs to use via esbuild bundle.
5
+ * This module bridges the TypeScript learner infrastructure with the standalone hook script.
6
+ *
7
+ * Bundled to: dist/hooks/skill-bridge.cjs
8
+ * Usage: const bridge = require('../dist/hooks/skill-bridge.cjs');
9
+ */
10
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, realpathSync } from 'fs';
11
+ import { join, dirname, basename } from 'path';
12
+ import { homedir } from 'os';
13
+ // Re-export constants
14
+ export const USER_SKILLS_DIR = join(homedir(), '.claude', 'skills', 'omc-learned');
15
+ export const PROJECT_SKILLS_SUBDIR = '.omc/skills';
16
+ export const SKILL_EXTENSION = '.md';
17
+ /** Session TTL: 1 hour */
18
+ const SESSION_TTL_MS = 60 * 60 * 1000;
19
+ /** State file path */
20
+ const STATE_FILE = '.omc/state/skill-sessions.json';
21
+ // =============================================================================
22
+ // Session Cache (File-Based)
23
+ // =============================================================================
24
+ /**
25
+ * Get state file path for a project.
26
+ */
27
+ function getStateFilePath(projectRoot) {
28
+ return join(projectRoot, STATE_FILE);
29
+ }
30
+ /**
31
+ * Read session state from file.
32
+ */
33
+ function readSessionState(projectRoot) {
34
+ const stateFile = getStateFilePath(projectRoot);
35
+ try {
36
+ if (existsSync(stateFile)) {
37
+ const content = readFileSync(stateFile, 'utf-8');
38
+ return JSON.parse(content);
39
+ }
40
+ }
41
+ catch {
42
+ // Ignore read/parse errors
43
+ }
44
+ return { sessions: {} };
45
+ }
46
+ /**
47
+ * Write session state to file.
48
+ */
49
+ function writeSessionState(projectRoot, state) {
50
+ const stateFile = getStateFilePath(projectRoot);
51
+ try {
52
+ mkdirSync(dirname(stateFile), { recursive: true });
53
+ writeFileSync(stateFile, JSON.stringify(state, null, 2), 'utf-8');
54
+ }
55
+ catch {
56
+ // Ignore write errors (non-critical)
57
+ }
58
+ }
59
+ /**
60
+ * Get paths of skills already injected in this session.
61
+ */
62
+ export function getInjectedSkillPaths(sessionId, projectRoot) {
63
+ const state = readSessionState(projectRoot);
64
+ const session = state.sessions[sessionId];
65
+ if (!session)
66
+ return [];
67
+ // Check TTL
68
+ if (Date.now() - session.timestamp > SESSION_TTL_MS) {
69
+ return [];
70
+ }
71
+ return session.injectedPaths;
72
+ }
73
+ /**
74
+ * Mark skills as injected for this session.
75
+ */
76
+ export function markSkillsInjected(sessionId, paths, projectRoot) {
77
+ const state = readSessionState(projectRoot);
78
+ const now = Date.now();
79
+ // Prune expired sessions
80
+ for (const [id, session] of Object.entries(state.sessions)) {
81
+ if (now - session.timestamp > SESSION_TTL_MS) {
82
+ delete state.sessions[id];
83
+ }
84
+ }
85
+ // Get existing paths for this session
86
+ const existing = state.sessions[sessionId]?.injectedPaths ?? [];
87
+ // Merge with new paths (dedupe)
88
+ state.sessions[sessionId] = {
89
+ injectedPaths: [...new Set([...existing, ...paths])],
90
+ timestamp: now,
91
+ };
92
+ writeSessionState(projectRoot, state);
93
+ }
94
+ // =============================================================================
95
+ // File Discovery (Recursive)
96
+ // =============================================================================
97
+ /**
98
+ * Recursively find all skill files in a directory.
99
+ */
100
+ function findSkillFilesRecursive(dir, results) {
101
+ if (!existsSync(dir))
102
+ return;
103
+ try {
104
+ const entries = readdirSync(dir, { withFileTypes: true });
105
+ for (const entry of entries) {
106
+ const fullPath = join(dir, entry.name);
107
+ if (entry.isDirectory()) {
108
+ findSkillFilesRecursive(fullPath, results);
109
+ }
110
+ else if (entry.isFile() && entry.name.endsWith(SKILL_EXTENSION)) {
111
+ results.push(fullPath);
112
+ }
113
+ }
114
+ }
115
+ catch {
116
+ // Permission denied or other errors - silently skip
117
+ }
118
+ }
119
+ /**
120
+ * Resolve symlinks safely with fallback.
121
+ */
122
+ function safeRealpathSync(filePath) {
123
+ try {
124
+ return realpathSync(filePath);
125
+ }
126
+ catch {
127
+ return filePath;
128
+ }
129
+ }
130
+ /**
131
+ * Find all skill files for a given project.
132
+ * Returns project skills first (higher priority), then user skills.
133
+ * Now supports RECURSIVE discovery (subdirectories included).
134
+ */
135
+ export function findSkillFiles(projectRoot) {
136
+ const candidates = [];
137
+ const seenRealPaths = new Set();
138
+ // 1. Search project-level skills (higher priority)
139
+ const projectSkillsDir = join(projectRoot, PROJECT_SKILLS_SUBDIR);
140
+ const projectFiles = [];
141
+ findSkillFilesRecursive(projectSkillsDir, projectFiles);
142
+ for (const filePath of projectFiles) {
143
+ const realPath = safeRealpathSync(filePath);
144
+ if (seenRealPaths.has(realPath))
145
+ continue;
146
+ seenRealPaths.add(realPath);
147
+ candidates.push({
148
+ path: filePath,
149
+ realPath,
150
+ scope: 'project',
151
+ });
152
+ }
153
+ // 2. Search user-level skills (lower priority)
154
+ const userFiles = [];
155
+ findSkillFilesRecursive(USER_SKILLS_DIR, userFiles);
156
+ for (const filePath of userFiles) {
157
+ const realPath = safeRealpathSync(filePath);
158
+ if (seenRealPaths.has(realPath))
159
+ continue;
160
+ seenRealPaths.add(realPath);
161
+ candidates.push({
162
+ path: filePath,
163
+ realPath,
164
+ scope: 'user',
165
+ });
166
+ }
167
+ return candidates;
168
+ }
169
+ // =============================================================================
170
+ // Parsing
171
+ // =============================================================================
172
+ /**
173
+ * Parse YAML frontmatter and content from a skill file.
174
+ */
175
+ export function parseSkillFile(content) {
176
+ const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
177
+ const match = content.match(frontmatterRegex);
178
+ if (!match) {
179
+ // No frontmatter - still valid, use filename as name
180
+ return {
181
+ metadata: {},
182
+ content: content.trim(),
183
+ valid: true,
184
+ errors: [],
185
+ };
186
+ }
187
+ const yamlContent = match[1];
188
+ const body = match[2].trim();
189
+ const errors = [];
190
+ try {
191
+ const metadata = parseYamlMetadata(yamlContent);
192
+ return {
193
+ metadata,
194
+ content: body,
195
+ valid: true,
196
+ errors,
197
+ };
198
+ }
199
+ catch (e) {
200
+ return {
201
+ metadata: {},
202
+ content: body,
203
+ valid: false,
204
+ errors: [`YAML parse error: ${e}`],
205
+ };
206
+ }
207
+ }
208
+ /**
209
+ * Simple YAML parser for skill frontmatter.
210
+ * Handles: id, name, description, triggers, tags, matching, model, agent
211
+ */
212
+ function parseYamlMetadata(yamlContent) {
213
+ const lines = yamlContent.split('\n');
214
+ const metadata = {};
215
+ let i = 0;
216
+ while (i < lines.length) {
217
+ const line = lines[i];
218
+ const colonIndex = line.indexOf(':');
219
+ if (colonIndex === -1) {
220
+ i++;
221
+ continue;
222
+ }
223
+ const key = line.slice(0, colonIndex).trim();
224
+ const rawValue = line.slice(colonIndex + 1).trim();
225
+ switch (key) {
226
+ case 'id':
227
+ metadata.id = parseStringValue(rawValue);
228
+ break;
229
+ case 'name':
230
+ metadata.name = parseStringValue(rawValue);
231
+ break;
232
+ case 'description':
233
+ metadata.description = parseStringValue(rawValue);
234
+ break;
235
+ case 'model':
236
+ metadata.model = parseStringValue(rawValue);
237
+ break;
238
+ case 'agent':
239
+ metadata.agent = parseStringValue(rawValue);
240
+ break;
241
+ case 'matching':
242
+ metadata.matching = parseStringValue(rawValue);
243
+ break;
244
+ case 'triggers':
245
+ case 'tags': {
246
+ const { value, consumed } = parseArrayValue(rawValue, lines, i);
247
+ if (key === 'triggers') {
248
+ metadata.triggers = Array.isArray(value) ? value : (value ? [value] : []);
249
+ }
250
+ else {
251
+ metadata.tags = Array.isArray(value) ? value : (value ? [value] : []);
252
+ }
253
+ i += consumed - 1;
254
+ break;
255
+ }
256
+ }
257
+ i++;
258
+ }
259
+ return metadata;
260
+ }
261
+ function parseStringValue(value) {
262
+ if (!value)
263
+ return '';
264
+ if ((value.startsWith('"') && value.endsWith('"')) ||
265
+ (value.startsWith("'") && value.endsWith("'"))) {
266
+ return value.slice(1, -1);
267
+ }
268
+ return value;
269
+ }
270
+ function parseArrayValue(rawValue, lines, currentIndex) {
271
+ // Inline array: ["a", "b"]
272
+ if (rawValue.startsWith('[')) {
273
+ const content = rawValue.slice(1, rawValue.lastIndexOf(']')).trim();
274
+ if (!content)
275
+ return { value: [], consumed: 1 };
276
+ const items = content.split(',').map(s => parseStringValue(s.trim())).filter(Boolean);
277
+ return { value: items, consumed: 1 };
278
+ }
279
+ // Multi-line array
280
+ if (!rawValue || rawValue === '') {
281
+ const items = [];
282
+ let consumed = 1;
283
+ for (let j = currentIndex + 1; j < lines.length; j++) {
284
+ const nextLine = lines[j];
285
+ const arrayMatch = nextLine.match(/^\s+-\s*(.*)$/);
286
+ if (arrayMatch) {
287
+ const itemValue = parseStringValue(arrayMatch[1].trim());
288
+ if (itemValue)
289
+ items.push(itemValue);
290
+ consumed++;
291
+ }
292
+ else if (nextLine.trim() === '') {
293
+ consumed++;
294
+ }
295
+ else {
296
+ break;
297
+ }
298
+ }
299
+ if (items.length > 0) {
300
+ return { value: items, consumed };
301
+ }
302
+ }
303
+ // Single value
304
+ return { value: parseStringValue(rawValue), consumed: 1 };
305
+ }
306
+ // =============================================================================
307
+ // Matching
308
+ // =============================================================================
309
+ /**
310
+ * Calculate Levenshtein distance between two strings.
311
+ */
312
+ function levenshteinDistance(str1, str2) {
313
+ const m = str1.length;
314
+ const n = str2.length;
315
+ const dp = Array(m + 1)
316
+ .fill(null)
317
+ .map(() => Array(n + 1).fill(0));
318
+ for (let i = 0; i <= m; i++)
319
+ dp[i][0] = i;
320
+ for (let j = 0; j <= n; j++)
321
+ dp[0][j] = j;
322
+ for (let i = 1; i <= m; i++) {
323
+ for (let j = 1; j <= n; j++) {
324
+ if (str1[i - 1] === str2[j - 1]) {
325
+ dp[i][j] = dp[i - 1][j - 1];
326
+ }
327
+ else {
328
+ dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
329
+ }
330
+ }
331
+ }
332
+ return dp[m][n];
333
+ }
334
+ /**
335
+ * Fuzzy match a trigger against prompt text.
336
+ * Returns confidence score 0-100.
337
+ */
338
+ function fuzzyMatchTrigger(prompt, trigger) {
339
+ const words = prompt.split(/\s+/).filter(w => w.length > 0);
340
+ // Exact word match
341
+ for (const word of words) {
342
+ if (word === trigger)
343
+ return 100;
344
+ if (word.includes(trigger) || trigger.includes(word)) {
345
+ return 80;
346
+ }
347
+ }
348
+ // Levenshtein distance for each word
349
+ let bestScore = 0;
350
+ for (const word of words) {
351
+ const distance = levenshteinDistance(word, trigger);
352
+ const maxLen = Math.max(word.length, trigger.length);
353
+ const similarity = maxLen > 0 ? ((maxLen - distance) / maxLen) * 100 : 0;
354
+ bestScore = Math.max(bestScore, similarity);
355
+ }
356
+ return Math.round(bestScore);
357
+ }
358
+ /**
359
+ * Find matching skills for injection based on prompt triggers.
360
+ *
361
+ * Options:
362
+ * - fuzzyThreshold: minimum score for fuzzy match (default: 60)
363
+ * - maxResults: maximum skills to return (default: 5)
364
+ */
365
+ export function matchSkillsForInjection(prompt, projectRoot, sessionId, options = {}) {
366
+ const { fuzzyThreshold = 60, maxResults = 5 } = options;
367
+ const promptLower = prompt.toLowerCase();
368
+ // Get already injected skills
369
+ const alreadyInjected = new Set(getInjectedSkillPaths(sessionId, projectRoot));
370
+ // Find all skill files
371
+ const candidates = findSkillFiles(projectRoot);
372
+ const matches = [];
373
+ for (const candidate of candidates) {
374
+ // Skip if already injected
375
+ if (alreadyInjected.has(candidate.path))
376
+ continue;
377
+ try {
378
+ const content = readFileSync(candidate.path, 'utf-8');
379
+ const parsed = parseSkillFile(content);
380
+ if (!parsed)
381
+ continue;
382
+ const triggers = parsed.metadata.triggers ?? [];
383
+ if (triggers.length === 0)
384
+ continue;
385
+ const useFuzzy = parsed.metadata.matching === 'fuzzy';
386
+ let totalScore = 0;
387
+ // Check triggers
388
+ for (const trigger of triggers) {
389
+ const triggerLower = trigger.toLowerCase();
390
+ // Exact substring match (default)
391
+ if (promptLower.includes(triggerLower)) {
392
+ totalScore += 10;
393
+ continue;
394
+ }
395
+ // Fuzzy match (opt-in only)
396
+ if (useFuzzy) {
397
+ const fuzzyScore = fuzzyMatchTrigger(promptLower, triggerLower);
398
+ if (fuzzyScore >= fuzzyThreshold) {
399
+ totalScore += Math.round(fuzzyScore / 10); // Scale down for consistency
400
+ }
401
+ }
402
+ }
403
+ if (totalScore > 0) {
404
+ // Get name from metadata or filename
405
+ const name = parsed.metadata.name ||
406
+ basename(candidate.path, SKILL_EXTENSION);
407
+ matches.push({
408
+ path: candidate.path,
409
+ name,
410
+ content: parsed.content,
411
+ score: totalScore,
412
+ scope: candidate.scope,
413
+ triggers,
414
+ matching: parsed.metadata.matching,
415
+ });
416
+ }
417
+ }
418
+ catch {
419
+ // Ignore file read errors
420
+ }
421
+ }
422
+ // Sort by score (descending) and limit
423
+ matches.sort((a, b) => b.score - a.score);
424
+ return matches.slice(0, maxResults);
425
+ }
426
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/hooks/learner/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
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 type { ExecutionMode, ModeConfig, ModeStatus, CanStartResult } from './types.js';
12
+ export type { ExecutionMode, ModeConfig, ModeStatus, CanStartResult } from './types.js';
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 declare const STALE_MARKER_THRESHOLD: number;
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
+ declare const MODE_CONFIGS: Record<ExecutionMode, ModeConfig>;
27
+ export { MODE_CONFIGS };
28
+ /**
29
+ * Get the state directory path
30
+ */
31
+ export declare function getStateDir(cwd: string): string;
32
+ /**
33
+ * Ensure the state directory exists
34
+ */
35
+ export declare function ensureStateDir(cwd: string): void;
36
+ /**
37
+ * Get the full path to a mode's state file
38
+ */
39
+ export declare function getStateFilePath(cwd: string, mode: ExecutionMode): string;
40
+ /**
41
+ * Get the full path to a mode's marker file
42
+ */
43
+ export declare function getMarkerFilePath(cwd: string, mode: ExecutionMode): string | null;
44
+ /**
45
+ * Get the global state file path (in ~/.claude/) for modes that support it
46
+ */
47
+ export declare function getGlobalStateFilePath(mode: ExecutionMode): string | null;
48
+ /**
49
+ * Check if a specific mode is currently active
50
+ *
51
+ * @param mode - The mode to check
52
+ * @param cwd - Working directory
53
+ * @returns true if the mode is active
54
+ */
55
+ export declare function isModeActive(mode: ExecutionMode, cwd: string): boolean;
56
+ /**
57
+ * Check if a mode has active state (file exists)
58
+ */
59
+ export declare function hasModeState(cwd: string, mode: ExecutionMode): boolean;
60
+ /**
61
+ * Get all modes that currently have state files
62
+ */
63
+ export declare function getActiveModes(cwd: string): ExecutionMode[];
64
+ /**
65
+ * Get the currently active exclusive mode (if any)
66
+ *
67
+ * @param cwd - Working directory
68
+ * @returns The active mode or null
69
+ */
70
+ export declare function getActiveExclusiveMode(cwd: string): ExecutionMode | null;
71
+ /**
72
+ * Check if a new mode can be started
73
+ *
74
+ * @param mode - The mode to start
75
+ * @param cwd - Working directory
76
+ * @returns CanStartResult with allowed status and blocker info
77
+ */
78
+ export declare function canStartMode(mode: ExecutionMode, cwd: string): CanStartResult;
79
+ /**
80
+ * Get status of all modes
81
+ *
82
+ * @param cwd - Working directory
83
+ * @returns Array of mode statuses
84
+ */
85
+ export declare function getAllModeStatuses(cwd: string): ModeStatus[];
86
+ /**
87
+ * Clear all state files for a mode
88
+ *
89
+ * Deletes:
90
+ * - Local state file (.omc/state/{mode}-state.json)
91
+ * - Local marker file if applicable
92
+ * - Global state file if applicable (~/.claude/{mode}-state.json)
93
+ *
94
+ * @returns true if all files were deleted successfully (or didn't exist)
95
+ */
96
+ export declare function clearModeState(mode: ExecutionMode, cwd: string): boolean;
97
+ /**
98
+ * Clear all mode states (force clear)
99
+ */
100
+ export declare function clearAllModeStates(cwd: string): boolean;
101
+ /**
102
+ * Create a marker file to indicate a mode is active
103
+ *
104
+ * Called when starting a SQLite-based mode (like swarm).
105
+ *
106
+ * @param mode - The mode being started
107
+ * @param cwd - Working directory
108
+ * @param metadata - Optional metadata to store in marker
109
+ */
110
+ export declare function createModeMarker(mode: ExecutionMode, cwd: string, metadata?: Record<string, unknown>): boolean;
111
+ /**
112
+ * Remove a marker file to indicate a mode has stopped
113
+ *
114
+ * Called when stopping a SQLite-based mode (like swarm).
115
+ *
116
+ * @param mode - The mode being stopped
117
+ * @param cwd - Working directory
118
+ */
119
+ export declare function removeModeMarker(mode: ExecutionMode, cwd: string): boolean;
120
+ /**
121
+ * Read metadata from a marker file
122
+ *
123
+ * @param mode - The mode to read
124
+ * @param cwd - Working directory
125
+ */
126
+ export declare function readModeMarker(mode: ExecutionMode, cwd: string): Record<string, unknown> | null;
127
+ /**
128
+ * Force remove a marker file regardless of staleness
129
+ * Used for manual cleanup by users
130
+ *
131
+ * @param mode - The mode to clean up
132
+ * @param cwd - Working directory
133
+ */
134
+ export declare function forceRemoveMarker(mode: ExecutionMode, cwd: string): boolean;
135
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/mode-registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExF,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AAErD;;;;;GAKG;AACH,QAAA,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,UAAU,CA+CnD,CAAC;AAGF,OAAO,EAAE,YAAY,EAAE,CAAC;AAOxB;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAKhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAGzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAIjF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAOzE;AAsED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAQtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAGtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAU3D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAOxE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAgB7E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CAM5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CA+CxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUvD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,aAAa,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CA0BT;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAe1E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,aAAa,EACnB,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYhC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAe3E"}