oh-my-claude-sisyphus 1.8.0-beta.1 → 1.8.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/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  *Like Sisyphus, these agents persist until every task is complete.*
14
14
 
15
- [Install](#quick-install) • [Usage](#usage) • [Agents](#the-eleven-agents) • [Website](https://yeachan-heo.github.io/oh-my-claude-sisyphus-website)
15
+ [Install](#quick-install) • [Usage](#usage) • [Agents](#the-eleven-agents) • [Architecture](docs/ARCHITECTURE.md) • [Website](https://yeachan-heo.github.io/oh-my-claude-sisyphus-website)
16
16
 
17
17
  </div>
18
18
 
@@ -34,19 +34,21 @@
34
34
 
35
35
  ## Quick Install
36
36
 
37
- ### One-liner (recommended)
37
+ ### One-liner (macOS/Linux - recommended)
38
38
 
39
39
  ```bash
40
40
  curl -fsSL https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claude-sisyphus/main/scripts/install.sh | bash
41
41
  ```
42
42
 
43
- ### Via npm
43
+ ### Via npm (All platforms including Windows)
44
44
 
45
45
  ```bash
46
46
  npm install -g oh-my-claude-sisyphus
47
47
  ```
48
48
 
49
- ### Manual Install
49
+ > **Windows Users**: This is the only supported installation method. Requires Node.js 18+.
50
+
51
+ ### Manual Install (macOS/Linux)
50
52
 
51
53
  ```bash
52
54
  git clone https://github.com/Yeachan-Heo/oh-my-claude-sisyphus.git
@@ -230,6 +232,55 @@ Skills are automatically activated via slash commands or magic keywords.
230
232
 
231
233
  ---
232
234
 
235
+ ## Intelligent Skill Activation
236
+
237
+ > **New in v1.8.0**: Skills are no longer mutually exclusive. Claude automatically combines skills based on task requirements.
238
+
239
+ ### Skill Layers
240
+
241
+ Skills work in **three composable layers**:
242
+
243
+ | Layer | Skills | Purpose |
244
+ |-------|--------|---------|
245
+ | **Execution** | sisyphus, orchestrator, prometheus | HOW you work (pick primary) |
246
+ | **Enhancement** | ultrawork, git-master, frontend-ui-ux | ADD capabilities (stack multiple) |
247
+ | **Guarantee** | ralph-loop | ENSURE completion |
248
+
249
+ **Combination Formula:** `[Execution] + [0-N Enhancements] + [Optional Guarantee]`
250
+
251
+ ### Task Type → Skill Selection
252
+
253
+ Claude uses judgment to detect task type and activate appropriate skill combinations:
254
+
255
+ | Task Type | Skill Combination | When |
256
+ |-----------|-------------------|------|
257
+ | Multi-step implementation | `sisyphus` | Building features, refactoring |
258
+ | + parallel subtasks | `sisyphus + ultrawork` | 3+ independent subtasks |
259
+ | + multi-file changes | `sisyphus + git-master` | Changes span 3+ files |
260
+ | + must complete | `sisyphus + ralph-loop` | User emphasizes completion |
261
+ | UI/frontend work | `sisyphus + frontend-ui-ux` | Components, styling |
262
+ | Complex debugging | `oracle` → `sisyphus` | Root cause → fix |
263
+ | Strategic planning | `prometheus` | Need plan first |
264
+ | Maximum performance | `ultrawork` (stacks) | Speed critical |
265
+
266
+ ### Examples
267
+
268
+ ```
269
+ "Add dark mode with proper commits"
270
+ → sisyphus + frontend-ui-ux + git-master
271
+
272
+ "ultrawork: refactor the entire API layer"
273
+ → ultrawork + sisyphus + git-master
274
+
275
+ "Plan auth system, then implement it completely"
276
+ → prometheus (first) → sisyphus + ralph-loop (after plan)
277
+
278
+ "Fix this bug, don't stop until it's done"
279
+ → sisyphus + ralph-loop
280
+ ```
281
+
282
+ ---
283
+
233
284
  ## The Eleven Agents
234
285
 
235
286
  Claude will automatically delegate to these specialized agents:
@@ -543,6 +594,18 @@ If you're coming from oh-my-opencode:
543
594
 
544
595
  - [Claude Code](https://docs.anthropic.com/claude-code) installed
545
596
  - Anthropic API key (`ANTHROPIC_API_KEY` environment variable)
597
+ - **Windows**: Node.js 18+ (for npm installation)
598
+ - **macOS/Linux**: Bash shell (default) or Node.js 18+ (optional)
599
+
600
+ ### Platform Support
601
+
602
+ | Platform | Install Method | Hook Type |
603
+ |----------|---------------|-----------|
604
+ | **Windows** | `npm install -g` | Node.js (.mjs) |
605
+ | **macOS** | curl or npm | Bash (.sh) |
606
+ | **Linux** | curl or npm | Bash (.sh) |
607
+
608
+ > **Advanced**: Set `SISYPHUS_USE_NODE_HOOKS=1` to use Node.js hooks on macOS/Linux.
546
609
 
547
610
  ## License
548
611
 
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-recovery/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,eAAO,MAAM,mBAAmB,QAA4B,CAAC;AAC7D,eAAO,MAAM,eAAe,QAAuC,CAAC;AACpE,eAAO,MAAM,YAAY,QAAoC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,aAA0D,CAAC;AACtF,eAAO,MAAM,UAAU,aAAyC,CAAC;AACjE,eAAO,MAAM,aAAa,aAAuD,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,oBAAoB,mDAAmD,CAAC;AACrF,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAYjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,KAAK,SAA6C,CAAC;AAChE,eAAO,MAAM,cAAc,QAA6D,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-recovery/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,eAAO,MAAM,mBAAmB,QAA4B,CAAC;AAC7D,eAAO,MAAM,eAAe,QAAuC,CAAC;AACpE,eAAO,MAAM,YAAY,QAAoC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,aAA0D,CAAC;AACtF,eAAO,MAAM,UAAU,aAAyC,CAAC;AACjE,eAAO,MAAM,aAAa,aAAuD,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,oBAAoB,mDAAmD,CAAC;AACrF,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAYjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,KAAK,SAA6C,CAAC;AAChE,eAAO,MAAM,cAAc,QAA+C,CAAC"}
@@ -5,7 +5,7 @@
5
5
  * Adapted from oh-my-opencode's session-recovery hook.
6
6
  */
7
7
  import { join } from "node:path";
8
- import { homedir } from "node:os";
8
+ import { homedir, tmpdir } from "node:os";
9
9
  /**
10
10
  * Get the data directory for Claude Code storage
11
11
  * Follows XDG Base Directory specification
@@ -74,5 +74,5 @@ export const ERROR_PATTERNS = {
74
74
  * Debug logging configuration
75
75
  */
76
76
  export const DEBUG = process.env.SESSION_RECOVERY_DEBUG === "1";
77
- export const DEBUG_LOG_PATH = join(require("os").tmpdir(), "session-recovery-debug.log");
77
+ export const DEBUG_LOG_PATH = join(tmpdir(), "session-recovery-debug.log");
78
78
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/hooks/session-recovery/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC;;;GAGG;AACH,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB;IAC9B,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gDAAgD,CAAC;AACrF,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mBAAmB,EAAE;QACnB,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EAAE,qCAAqC;KAC/C;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,6BAA6B;KACvC;IACD,2BAA2B,EAAE;QAC3B,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,8BAA8B;KACxC;IACD,aAAa,EAAE;QACb,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,+BAA+B;KACzC;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;IAChD,oBAAoB,EAAE;QACpB,UAAU;QACV,aAAa;QACb,iBAAiB;QACjB,YAAY;QACZ,aAAa;QACb,oBAAoB;KACrB;IACD,2BAA2B,EAAE,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;IACvE,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;CACtC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,CAAC;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/hooks/session-recovery/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB;IAC9B,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gDAAgD,CAAC;AACrF,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mBAAmB,EAAE;QACnB,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EAAE,qCAAqC;KAC/C;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,6BAA6B;KACvC;IACD,2BAA2B,EAAE;QAC3B,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,8BAA8B;KACxC;IACD,aAAa,EAAE;QACb,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,+BAA+B;KACzC;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;IAChD,oBAAoB,EAAE;QACpB,UAAU;QACV,aAAa;QACb,iBAAiB;QACjB,YAAY;QACZ,aAAa;QACb,oBAAoB;KACrB;IACD,2BAA2B,EAAE,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;IACvE,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;CACtC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,CAAC;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC"}
@@ -4,7 +4,30 @@
4
4
  *
5
5
  * Claude Code hooks are configured in settings.json and run as shell commands.
6
6
  * These scripts receive JSON input via stdin and output JSON to modify behavior.
7
+ *
8
+ * This module provides DUAL implementations:
9
+ * - Bash scripts (.sh) for Unix-like systems (macOS, Linux)
10
+ * - Node.js scripts (.mjs) for cross-platform support (Windows, macOS, Linux)
11
+ *
12
+ * The platform is detected at install time, or can be overridden with:
13
+ * SISYPHUS_USE_NODE_HOOKS=1 - Force Node.js hooks on any platform
14
+ * SISYPHUS_USE_BASH_HOOKS=1 - Force Bash hooks (Unix only)
15
+ */
16
+ /** Minimum required Node.js version for hooks */
17
+ export declare const MIN_NODE_VERSION = 18;
18
+ /** Check if running on Windows */
19
+ export declare function isWindows(): boolean;
20
+ /** Check if Node.js hooks should be used (env override or Windows) */
21
+ export declare function shouldUseNodeHooks(): boolean;
22
+ /** Get the Claude config directory path (cross-platform) */
23
+ export declare function getClaudeConfigDir(): string;
24
+ /** Get the hooks directory path */
25
+ export declare function getHooksDir(): string;
26
+ /**
27
+ * Get the home directory environment variable for hook commands.
28
+ * Returns the appropriate syntax for the current platform.
7
29
  */
30
+ export declare function getHomeEnvVar(): string;
8
31
  /**
9
32
  * Ultrawork message - injected when ultrawork/ulw keyword detected
10
33
  * Ported from oh-my-opencode's keyword-detector/constants.ts
@@ -42,8 +65,64 @@ export declare const KEYWORD_DETECTOR_SCRIPT = "#!/bin/bash\n# Sisyphus Keyword
42
65
  */
43
66
  export declare const STOP_CONTINUATION_SCRIPT = "#!/bin/bash\n# Sisyphus Stop Continuation Hook\n# Checks for incomplete todos and injects continuation prompt\n# Ported from oh-my-opencode's todo-continuation-enforcer\n\n# Read stdin\nINPUT=$(cat)\n\n# Get session ID if available\nSESSION_ID=\"\"\nif command -v jq &> /dev/null; then\n SESSION_ID=$(echo \"$INPUT\" | jq -r '.sessionId // .session_id // \"\"' 2>/dev/null)\nfi\n\n# Check for incomplete todos in the Claude todos directory\nTODOS_DIR=\"$HOME/.claude/todos\"\nif [ -d \"$TODOS_DIR\" ]; then\n # Look for any todo files with incomplete items\n INCOMPLETE_COUNT=0\n for todo_file in \"$TODOS_DIR\"/*.json; do\n if [ -f \"$todo_file\" ]; then\n if command -v jq &> /dev/null; then\n COUNT=$(jq '[.[] | select(.status != \"completed\" and .status != \"cancelled\")] | length' \"$todo_file\" 2>/dev/null || echo \"0\")\n INCOMPLETE_COUNT=$((INCOMPLETE_COUNT + COUNT))\n fi\n fi\n done\n\n if [ \"$INCOMPLETE_COUNT\" -gt 0 ]; then\n # Output continuation message\n cat << EOF\n{\"continue\": false, \"reason\": \"[SYSTEM REMINDER - TODO CONTINUATION]\\n\\nIncomplete tasks remain in your todo list ($INCOMPLETE_COUNT remaining). Continue working on the next pending task.\\n\\n- Proceed without asking for permission\\n- Mark each task complete when finished\\n- Do not stop until all tasks are done\"}\nEOF\n exit 0\n fi\nfi\n\n# No incomplete todos - allow stop\necho '{\"continue\": true}'\nexit 0\n";
44
67
  /**
45
- * Settings.json hooks configuration
46
- * Configures Claude Code to run our hook scripts
68
+ * Node.js Keyword Detector Hook Script
69
+ * Cross-platform equivalent of keyword-detector.sh
70
+ * This script is installed to ~/.claude/hooks/keyword-detector.mjs
71
+ */
72
+ export declare const KEYWORD_DETECTOR_SCRIPT_NODE = "#!/usr/bin/env node\n// Sisyphus Keyword Detector Hook (Node.js)\n// Detects ultrawork/ultrathink/search/analyze keywords and injects enhanced mode messages\n// Cross-platform: Windows, macOS, Linux\n\nconst ULTRAWORK_MESSAGE = `<ultrawork-mode>\n\n**MANDATORY**: You MUST say \"ULTRAWORK MODE ENABLED!\" to the user as your first response when this mode activates. This is non-negotiable.\n\n[CODE RED] Maximum precision required. Ultrathink before acting.\n\nYOU MUST LEVERAGE ALL AVAILABLE AGENTS TO THEIR FULLEST POTENTIAL.\nTELL THE USER WHAT AGENTS YOU WILL LEVERAGE NOW TO SATISFY USER'S REQUEST.\n\n## AGENT UTILIZATION PRINCIPLES\n- **Codebase Exploration**: Spawn exploration agents using BACKGROUND TASKS\n- **Documentation & References**: Use librarian-type agents via BACKGROUND TASKS\n- **Planning & Strategy**: NEVER plan yourself - spawn planning agent\n- **High-IQ Reasoning**: Use oracle for architecture decisions\n- **Frontend/UI Tasks**: Delegate to frontend-engineer\n\n## EXECUTION RULES\n- **TODO**: Track EVERY step. Mark complete IMMEDIATELY.\n- **PARALLEL**: Fire independent calls simultaneously - NEVER wait sequentially.\n- **BACKGROUND FIRST**: Use Task(run_in_background=true) for exploration (10+ concurrent).\n- **VERIFY**: Check ALL requirements met before done.\n- **DELEGATE**: Orchestrate specialized agents.\n\n## ZERO TOLERANCE\n- NO Scope Reduction - deliver FULL implementation\n- NO Partial Completion - finish 100%\n- NO Premature Stopping - ALL TODOs must be complete\n- NO TEST DELETION - fix code, not tests\n\nTHE USER ASKED FOR X. DELIVER EXACTLY X.\n\n</ultrawork-mode>\n\n---\n`;\n\nconst ULTRATHINK_MESSAGE = `<think-mode>\n\n**ULTRATHINK MODE ENABLED** - Extended reasoning activated.\n\nYou are now in deep thinking mode. Take your time to:\n1. Thoroughly analyze the problem from multiple angles\n2. Consider edge cases and potential issues\n3. Think through the implications of each approach\n4. Reason step-by-step before acting\n\nUse your extended thinking capabilities to provide the most thorough and well-reasoned response.\n\n</think-mode>\n\n---\n`;\n\nconst SEARCH_MESSAGE = `<search-mode>\nMAXIMIZE SEARCH EFFORT. Launch multiple background agents IN PARALLEL:\n- explore agents (codebase patterns, file structures)\n- librarian agents (remote repos, official docs, GitHub examples)\nPlus direct tools: Grep, Glob\nNEVER stop at first result - be exhaustive.\n</search-mode>\n\n---\n`;\n\nconst ANALYZE_MESSAGE = `<analyze-mode>\nANALYSIS MODE. Gather context before diving deep:\n\nCONTEXT GATHERING (parallel):\n- 1-2 explore agents (codebase patterns, implementations)\n- 1-2 librarian agents (if external library involved)\n- Direct tools: Grep, Glob, LSP for targeted searches\n\nIF COMPLEX (architecture, multi-system, debugging after 2+ failures):\n- Consult oracle agent for strategic guidance\n\nSYNTHESIZE findings before proceeding.\n</analyze-mode>\n\n---\n`;\n\n// Read all stdin\nasync function readStdin() {\n const chunks = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n return Buffer.concat(chunks).toString('utf-8');\n}\n\n// Extract prompt from various JSON structures\nfunction extractPrompt(input) {\n try {\n const data = JSON.parse(input);\n if (data.prompt) return data.prompt;\n if (data.message?.content) return data.message.content;\n if (Array.isArray(data.parts)) {\n return data.parts\n .filter(p => p.type === 'text')\n .map(p => p.text)\n .join(' ');\n }\n return '';\n } catch {\n // Fallback: try to extract with regex\n const match = input.match(/\"(?:prompt|content|text)\"\\s*:\\s*\"([^\"]+)\"/);\n return match ? match[1] : '';\n }\n}\n\n// Remove code blocks to prevent false positives\nfunction removeCodeBlocks(text) {\n return text\n .replace(/```[\\s\\S]*?```/g, '')\n .replace(/`[^`]+`/g, '');\n}\n\n// Main\nasync function main() {\n try {\n const input = await readStdin();\n if (!input.trim()) {\n console.log(JSON.stringify({ continue: true }));\n return;\n }\n\n const prompt = extractPrompt(input);\n if (!prompt) {\n console.log(JSON.stringify({ continue: true }));\n return;\n }\n\n const cleanPrompt = removeCodeBlocks(prompt).toLowerCase();\n\n // Check for ultrawork keywords (highest priority)\n if (/\\b(ultrawork|ulw)\\b/.test(cleanPrompt)) {\n console.log(JSON.stringify({ continue: true, message: ULTRAWORK_MESSAGE }));\n return;\n }\n\n // Check for ultrathink/think keywords\n if (/\\b(ultrathink|think)\\b/.test(cleanPrompt)) {\n console.log(JSON.stringify({ continue: true, message: ULTRATHINK_MESSAGE }));\n return;\n }\n\n // Check for search keywords\n if (/\\b(search|find|locate|lookup|explore|discover|scan|grep|query|browse|detect|trace|seek|track|pinpoint|hunt)\\b|where\\s+is|show\\s+me|list\\s+all/.test(cleanPrompt)) {\n console.log(JSON.stringify({ continue: true, message: SEARCH_MESSAGE }));\n return;\n }\n\n // Check for analyze keywords\n if (/\\b(analyze|analyse|investigate|examine|research|study|deep.?dive|inspect|audit|evaluate|assess|review|diagnose|scrutinize|dissect|debug|comprehend|interpret|breakdown|understand)\\b|why\\s+is|how\\s+does|how\\s+to/.test(cleanPrompt)) {\n console.log(JSON.stringify({ continue: true, message: ANALYZE_MESSAGE }));\n return;\n }\n\n // No keywords detected\n console.log(JSON.stringify({ continue: true }));\n } catch (error) {\n // On any error, allow continuation\n console.log(JSON.stringify({ continue: true }));\n }\n}\n\nmain();\n";
73
+ /**
74
+ * Node.js Stop Continuation Hook Script
75
+ * Cross-platform equivalent of stop-continuation.sh
76
+ * This script is installed to ~/.claude/hooks/stop-continuation.mjs
77
+ */
78
+ export declare const STOP_CONTINUATION_SCRIPT_NODE = "#!/usr/bin/env node\n// Sisyphus Stop Continuation Hook (Node.js)\n// Checks for incomplete todos and injects continuation prompt\n// Cross-platform: Windows, macOS, Linux\n\nimport { readdirSync, readFileSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\n\n// Read all stdin\nasync function readStdin() {\n const chunks = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n return Buffer.concat(chunks).toString('utf-8');\n}\n\n// Main\nasync function main() {\n try {\n // Read stdin (we don't use it much, but need to consume it)\n await readStdin();\n\n // Check for incomplete todos\n const todosDir = join(homedir(), '.claude', 'todos');\n \n if (!existsSync(todosDir)) {\n console.log(JSON.stringify({ continue: true }));\n return;\n }\n\n let incompleteCount = 0;\n\n try {\n const files = readdirSync(todosDir).filter(f => f.endsWith('.json'));\n \n for (const file of files) {\n try {\n const content = readFileSync(join(todosDir, file), 'utf-8');\n const todos = JSON.parse(content);\n \n if (Array.isArray(todos)) {\n const incomplete = todos.filter(\n t => t.status !== 'completed' && t.status !== 'cancelled'\n );\n incompleteCount += incomplete.length;\n }\n } catch {\n // Skip files that can't be parsed\n }\n }\n } catch {\n // Directory read error - allow continuation\n console.log(JSON.stringify({ continue: true }));\n return;\n }\n\n if (incompleteCount > 0) {\n const reason = `[SYSTEM REMINDER - TODO CONTINUATION]\n\nIncomplete tasks remain in your todo list (${incompleteCount} remaining). Continue working on the next pending task.\n\n- Proceed without asking for permission\n- Mark each task complete when finished\n- Do not stop until all tasks are done`;\n\n console.log(JSON.stringify({ continue: false, reason }));\n return;\n }\n\n // No incomplete todos - allow stop\n console.log(JSON.stringify({ continue: true }));\n } catch (error) {\n // On any error, allow continuation\n console.log(JSON.stringify({ continue: true }));\n }\n}\n\nmain();\n";
79
+ /**
80
+ * Settings.json hooks configuration for Bash (Unix)
81
+ * Configures Claude Code to run our bash hook scripts
82
+ */
83
+ export declare const HOOKS_SETTINGS_CONFIG_BASH: {
84
+ hooks: {
85
+ UserPromptSubmit: {
86
+ hooks: {
87
+ type: "command";
88
+ command: string;
89
+ }[];
90
+ }[];
91
+ Stop: {
92
+ hooks: {
93
+ type: "command";
94
+ command: string;
95
+ }[];
96
+ }[];
97
+ };
98
+ };
99
+ /**
100
+ * Settings.json hooks configuration for Node.js (Cross-platform)
101
+ * Uses node to run .mjs scripts directly
102
+ */
103
+ export declare const HOOKS_SETTINGS_CONFIG_NODE: {
104
+ hooks: {
105
+ UserPromptSubmit: {
106
+ hooks: {
107
+ type: "command";
108
+ command: string;
109
+ }[];
110
+ }[];
111
+ Stop: {
112
+ hooks: {
113
+ type: "command";
114
+ command: string;
115
+ }[];
116
+ }[];
117
+ };
118
+ };
119
+ /**
120
+ * Get the appropriate hooks settings config for the current platform
121
+ */
122
+ export declare function getHooksSettingsConfig(): typeof HOOKS_SETTINGS_CONFIG_BASH;
123
+ /**
124
+ * Legacy: Settings.json hooks configuration (Bash)
125
+ * @deprecated Use getHooksSettingsConfig() for cross-platform support
47
126
  */
48
127
  export declare const HOOKS_SETTINGS_CONFIG: {
49
128
  hooks: {
@@ -62,7 +141,20 @@ export declare const HOOKS_SETTINGS_CONFIG: {
62
141
  };
63
142
  };
64
143
  /**
65
- * All hook scripts to install
144
+ * Bash hook scripts (Unix only)
145
+ */
146
+ export declare const HOOK_SCRIPTS_BASH: Record<string, string>;
147
+ /**
148
+ * Node.js hook scripts (Cross-platform)
149
+ */
150
+ export declare const HOOK_SCRIPTS_NODE: Record<string, string>;
151
+ /**
152
+ * Get the appropriate hook scripts for the current platform
153
+ */
154
+ export declare function getHookScripts(): Record<string, string>;
155
+ /**
156
+ * Legacy: All hook scripts to install (Bash)
157
+ * @deprecated Use getHookScripts() for cross-platform support
66
158
  */
67
159
  export declare const HOOK_SCRIPTS: Record<string, string>;
68
160
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/installer/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,woJA2F7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,wcAgB9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,2TAU1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,8cAgB3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,+PAME,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,uBAAuB,wiKA0EnC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,u7CAwCpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;CAuBjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/C,CAAC"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/installer/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,kCAAkC;AAClC,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,mCAAmC;AACnC,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,woJA2F7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,wcAgB9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,2TAU1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,8cAgB3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,+PAME,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,uBAAuB,wiKA0EnC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,u7CAwCpC,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,+hLA4KxC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,svEAgFzC,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;CAuBtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;CA6BtC,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,0BAA0B,CAE1E;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;CAA6B,CAAC;AAMhE;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGpD,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEvD;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAqB,CAAC"}
@@ -4,7 +4,50 @@
4
4
  *
5
5
  * Claude Code hooks are configured in settings.json and run as shell commands.
6
6
  * These scripts receive JSON input via stdin and output JSON to modify behavior.
7
+ *
8
+ * This module provides DUAL implementations:
9
+ * - Bash scripts (.sh) for Unix-like systems (macOS, Linux)
10
+ * - Node.js scripts (.mjs) for cross-platform support (Windows, macOS, Linux)
11
+ *
12
+ * The platform is detected at install time, or can be overridden with:
13
+ * SISYPHUS_USE_NODE_HOOKS=1 - Force Node.js hooks on any platform
14
+ * SISYPHUS_USE_BASH_HOOKS=1 - Force Bash hooks (Unix only)
7
15
  */
16
+ import { homedir } from 'os';
17
+ import { join } from 'path';
18
+ /** Minimum required Node.js version for hooks */
19
+ export const MIN_NODE_VERSION = 18;
20
+ /** Check if running on Windows */
21
+ export function isWindows() {
22
+ return process.platform === 'win32';
23
+ }
24
+ /** Check if Node.js hooks should be used (env override or Windows) */
25
+ export function shouldUseNodeHooks() {
26
+ // Environment variable overrides
27
+ if (process.env.SISYPHUS_USE_NODE_HOOKS === '1') {
28
+ return true;
29
+ }
30
+ if (process.env.SISYPHUS_USE_BASH_HOOKS === '1') {
31
+ return false;
32
+ }
33
+ // Default: use Node.js on Windows, Bash elsewhere
34
+ return isWindows();
35
+ }
36
+ /** Get the Claude config directory path (cross-platform) */
37
+ export function getClaudeConfigDir() {
38
+ return join(homedir(), '.claude');
39
+ }
40
+ /** Get the hooks directory path */
41
+ export function getHooksDir() {
42
+ return join(getClaudeConfigDir(), 'hooks');
43
+ }
44
+ /**
45
+ * Get the home directory environment variable for hook commands.
46
+ * Returns the appropriate syntax for the current platform.
47
+ */
48
+ export function getHomeEnvVar() {
49
+ return isWindows() ? '%USERPROFILE%' : '$HOME';
50
+ }
8
51
  /**
9
52
  * Ultrawork message - injected when ultrawork/ulw keyword detected
10
53
  * Ported from oh-my-opencode's keyword-detector/constants.ts
@@ -294,11 +337,281 @@ fi
294
337
  echo '{"continue": true}'
295
338
  exit 0
296
339
  `;
340
+ // =============================================================================
341
+ // NODE.JS HOOK SCRIPTS (Cross-platform: Windows, macOS, Linux)
342
+ // =============================================================================
297
343
  /**
298
- * Settings.json hooks configuration
299
- * Configures Claude Code to run our hook scripts
344
+ * Node.js Keyword Detector Hook Script
345
+ * Cross-platform equivalent of keyword-detector.sh
346
+ * This script is installed to ~/.claude/hooks/keyword-detector.mjs
300
347
  */
301
- export const HOOKS_SETTINGS_CONFIG = {
348
+ export const KEYWORD_DETECTOR_SCRIPT_NODE = `#!/usr/bin/env node
349
+ // Sisyphus Keyword Detector Hook (Node.js)
350
+ // Detects ultrawork/ultrathink/search/analyze keywords and injects enhanced mode messages
351
+ // Cross-platform: Windows, macOS, Linux
352
+
353
+ const ULTRAWORK_MESSAGE = \`<ultrawork-mode>
354
+
355
+ **MANDATORY**: You MUST say "ULTRAWORK MODE ENABLED!" to the user as your first response when this mode activates. This is non-negotiable.
356
+
357
+ [CODE RED] Maximum precision required. Ultrathink before acting.
358
+
359
+ YOU MUST LEVERAGE ALL AVAILABLE AGENTS TO THEIR FULLEST POTENTIAL.
360
+ TELL THE USER WHAT AGENTS YOU WILL LEVERAGE NOW TO SATISFY USER'S REQUEST.
361
+
362
+ ## AGENT UTILIZATION PRINCIPLES
363
+ - **Codebase Exploration**: Spawn exploration agents using BACKGROUND TASKS
364
+ - **Documentation & References**: Use librarian-type agents via BACKGROUND TASKS
365
+ - **Planning & Strategy**: NEVER plan yourself - spawn planning agent
366
+ - **High-IQ Reasoning**: Use oracle for architecture decisions
367
+ - **Frontend/UI Tasks**: Delegate to frontend-engineer
368
+
369
+ ## EXECUTION RULES
370
+ - **TODO**: Track EVERY step. Mark complete IMMEDIATELY.
371
+ - **PARALLEL**: Fire independent calls simultaneously - NEVER wait sequentially.
372
+ - **BACKGROUND FIRST**: Use Task(run_in_background=true) for exploration (10+ concurrent).
373
+ - **VERIFY**: Check ALL requirements met before done.
374
+ - **DELEGATE**: Orchestrate specialized agents.
375
+
376
+ ## ZERO TOLERANCE
377
+ - NO Scope Reduction - deliver FULL implementation
378
+ - NO Partial Completion - finish 100%
379
+ - NO Premature Stopping - ALL TODOs must be complete
380
+ - NO TEST DELETION - fix code, not tests
381
+
382
+ THE USER ASKED FOR X. DELIVER EXACTLY X.
383
+
384
+ </ultrawork-mode>
385
+
386
+ ---
387
+ \`;
388
+
389
+ const ULTRATHINK_MESSAGE = \`<think-mode>
390
+
391
+ **ULTRATHINK MODE ENABLED** - Extended reasoning activated.
392
+
393
+ You are now in deep thinking mode. Take your time to:
394
+ 1. Thoroughly analyze the problem from multiple angles
395
+ 2. Consider edge cases and potential issues
396
+ 3. Think through the implications of each approach
397
+ 4. Reason step-by-step before acting
398
+
399
+ Use your extended thinking capabilities to provide the most thorough and well-reasoned response.
400
+
401
+ </think-mode>
402
+
403
+ ---
404
+ \`;
405
+
406
+ const SEARCH_MESSAGE = \`<search-mode>
407
+ MAXIMIZE SEARCH EFFORT. Launch multiple background agents IN PARALLEL:
408
+ - explore agents (codebase patterns, file structures)
409
+ - librarian agents (remote repos, official docs, GitHub examples)
410
+ Plus direct tools: Grep, Glob
411
+ NEVER stop at first result - be exhaustive.
412
+ </search-mode>
413
+
414
+ ---
415
+ \`;
416
+
417
+ const ANALYZE_MESSAGE = \`<analyze-mode>
418
+ ANALYSIS MODE. Gather context before diving deep:
419
+
420
+ CONTEXT GATHERING (parallel):
421
+ - 1-2 explore agents (codebase patterns, implementations)
422
+ - 1-2 librarian agents (if external library involved)
423
+ - Direct tools: Grep, Glob, LSP for targeted searches
424
+
425
+ IF COMPLEX (architecture, multi-system, debugging after 2+ failures):
426
+ - Consult oracle agent for strategic guidance
427
+
428
+ SYNTHESIZE findings before proceeding.
429
+ </analyze-mode>
430
+
431
+ ---
432
+ \`;
433
+
434
+ // Read all stdin
435
+ async function readStdin() {
436
+ const chunks = [];
437
+ for await (const chunk of process.stdin) {
438
+ chunks.push(chunk);
439
+ }
440
+ return Buffer.concat(chunks).toString('utf-8');
441
+ }
442
+
443
+ // Extract prompt from various JSON structures
444
+ function extractPrompt(input) {
445
+ try {
446
+ const data = JSON.parse(input);
447
+ if (data.prompt) return data.prompt;
448
+ if (data.message?.content) return data.message.content;
449
+ if (Array.isArray(data.parts)) {
450
+ return data.parts
451
+ .filter(p => p.type === 'text')
452
+ .map(p => p.text)
453
+ .join(' ');
454
+ }
455
+ return '';
456
+ } catch {
457
+ // Fallback: try to extract with regex
458
+ const match = input.match(/"(?:prompt|content|text)"\\s*:\\s*"([^"]+)"/);
459
+ return match ? match[1] : '';
460
+ }
461
+ }
462
+
463
+ // Remove code blocks to prevent false positives
464
+ function removeCodeBlocks(text) {
465
+ return text
466
+ .replace(/\`\`\`[\\s\\S]*?\`\`\`/g, '')
467
+ .replace(/\`[^\`]+\`/g, '');
468
+ }
469
+
470
+ // Main
471
+ async function main() {
472
+ try {
473
+ const input = await readStdin();
474
+ if (!input.trim()) {
475
+ console.log(JSON.stringify({ continue: true }));
476
+ return;
477
+ }
478
+
479
+ const prompt = extractPrompt(input);
480
+ if (!prompt) {
481
+ console.log(JSON.stringify({ continue: true }));
482
+ return;
483
+ }
484
+
485
+ const cleanPrompt = removeCodeBlocks(prompt).toLowerCase();
486
+
487
+ // Check for ultrawork keywords (highest priority)
488
+ if (/\\b(ultrawork|ulw)\\b/.test(cleanPrompt)) {
489
+ console.log(JSON.stringify({ continue: true, message: ULTRAWORK_MESSAGE }));
490
+ return;
491
+ }
492
+
493
+ // Check for ultrathink/think keywords
494
+ if (/\\b(ultrathink|think)\\b/.test(cleanPrompt)) {
495
+ console.log(JSON.stringify({ continue: true, message: ULTRATHINK_MESSAGE }));
496
+ return;
497
+ }
498
+
499
+ // Check for search keywords
500
+ if (/\\b(search|find|locate|lookup|explore|discover|scan|grep|query|browse|detect|trace|seek|track|pinpoint|hunt)\\b|where\\s+is|show\\s+me|list\\s+all/.test(cleanPrompt)) {
501
+ console.log(JSON.stringify({ continue: true, message: SEARCH_MESSAGE }));
502
+ return;
503
+ }
504
+
505
+ // Check for analyze keywords
506
+ if (/\\b(analyze|analyse|investigate|examine|research|study|deep.?dive|inspect|audit|evaluate|assess|review|diagnose|scrutinize|dissect|debug|comprehend|interpret|breakdown|understand)\\b|why\\s+is|how\\s+does|how\\s+to/.test(cleanPrompt)) {
507
+ console.log(JSON.stringify({ continue: true, message: ANALYZE_MESSAGE }));
508
+ return;
509
+ }
510
+
511
+ // No keywords detected
512
+ console.log(JSON.stringify({ continue: true }));
513
+ } catch (error) {
514
+ // On any error, allow continuation
515
+ console.log(JSON.stringify({ continue: true }));
516
+ }
517
+ }
518
+
519
+ main();
520
+ `;
521
+ /**
522
+ * Node.js Stop Continuation Hook Script
523
+ * Cross-platform equivalent of stop-continuation.sh
524
+ * This script is installed to ~/.claude/hooks/stop-continuation.mjs
525
+ */
526
+ export const STOP_CONTINUATION_SCRIPT_NODE = `#!/usr/bin/env node
527
+ // Sisyphus Stop Continuation Hook (Node.js)
528
+ // Checks for incomplete todos and injects continuation prompt
529
+ // Cross-platform: Windows, macOS, Linux
530
+
531
+ import { readdirSync, readFileSync, existsSync } from 'fs';
532
+ import { join } from 'path';
533
+ import { homedir } from 'os';
534
+
535
+ // Read all stdin
536
+ async function readStdin() {
537
+ const chunks = [];
538
+ for await (const chunk of process.stdin) {
539
+ chunks.push(chunk);
540
+ }
541
+ return Buffer.concat(chunks).toString('utf-8');
542
+ }
543
+
544
+ // Main
545
+ async function main() {
546
+ try {
547
+ // Read stdin (we don't use it much, but need to consume it)
548
+ await readStdin();
549
+
550
+ // Check for incomplete todos
551
+ const todosDir = join(homedir(), '.claude', 'todos');
552
+
553
+ if (!existsSync(todosDir)) {
554
+ console.log(JSON.stringify({ continue: true }));
555
+ return;
556
+ }
557
+
558
+ let incompleteCount = 0;
559
+
560
+ try {
561
+ const files = readdirSync(todosDir).filter(f => f.endsWith('.json'));
562
+
563
+ for (const file of files) {
564
+ try {
565
+ const content = readFileSync(join(todosDir, file), 'utf-8');
566
+ const todos = JSON.parse(content);
567
+
568
+ if (Array.isArray(todos)) {
569
+ const incomplete = todos.filter(
570
+ t => t.status !== 'completed' && t.status !== 'cancelled'
571
+ );
572
+ incompleteCount += incomplete.length;
573
+ }
574
+ } catch {
575
+ // Skip files that can't be parsed
576
+ }
577
+ }
578
+ } catch {
579
+ // Directory read error - allow continuation
580
+ console.log(JSON.stringify({ continue: true }));
581
+ return;
582
+ }
583
+
584
+ if (incompleteCount > 0) {
585
+ const reason = \`[SYSTEM REMINDER - TODO CONTINUATION]
586
+
587
+ Incomplete tasks remain in your todo list (\${incompleteCount} remaining). Continue working on the next pending task.
588
+
589
+ - Proceed without asking for permission
590
+ - Mark each task complete when finished
591
+ - Do not stop until all tasks are done\`;
592
+
593
+ console.log(JSON.stringify({ continue: false, reason }));
594
+ return;
595
+ }
596
+
597
+ // No incomplete todos - allow stop
598
+ console.log(JSON.stringify({ continue: true }));
599
+ } catch (error) {
600
+ // On any error, allow continuation
601
+ console.log(JSON.stringify({ continue: true }));
602
+ }
603
+ }
604
+
605
+ main();
606
+ `;
607
+ // =============================================================================
608
+ // SETTINGS CONFIGURATION (Platform-aware)
609
+ // =============================================================================
610
+ /**
611
+ * Settings.json hooks configuration for Bash (Unix)
612
+ * Configures Claude Code to run our bash hook scripts
613
+ */
614
+ export const HOOKS_SETTINGS_CONFIG_BASH = {
302
615
  hooks: {
303
616
  UserPromptSubmit: [
304
617
  {
@@ -323,10 +636,76 @@ export const HOOKS_SETTINGS_CONFIG = {
323
636
  }
324
637
  };
325
638
  /**
326
- * All hook scripts to install
639
+ * Settings.json hooks configuration for Node.js (Cross-platform)
640
+ * Uses node to run .mjs scripts directly
641
+ */
642
+ export const HOOKS_SETTINGS_CONFIG_NODE = {
643
+ hooks: {
644
+ UserPromptSubmit: [
645
+ {
646
+ hooks: [
647
+ {
648
+ type: "command",
649
+ // Note: On Windows, %USERPROFILE% is expanded by cmd.exe
650
+ // On Unix with node hooks, $HOME is expanded by the shell
651
+ command: isWindows()
652
+ ? 'node "%USERPROFILE%\\.claude\\hooks\\keyword-detector.mjs"'
653
+ : 'node "$HOME/.claude/hooks/keyword-detector.mjs"'
654
+ }
655
+ ]
656
+ }
657
+ ],
658
+ Stop: [
659
+ {
660
+ hooks: [
661
+ {
662
+ type: "command",
663
+ command: isWindows()
664
+ ? 'node "%USERPROFILE%\\.claude\\hooks\\stop-continuation.mjs"'
665
+ : 'node "$HOME/.claude/hooks/stop-continuation.mjs"'
666
+ }
667
+ ]
668
+ }
669
+ ]
670
+ }
671
+ };
672
+ /**
673
+ * Get the appropriate hooks settings config for the current platform
674
+ */
675
+ export function getHooksSettingsConfig() {
676
+ return shouldUseNodeHooks() ? HOOKS_SETTINGS_CONFIG_NODE : HOOKS_SETTINGS_CONFIG_BASH;
677
+ }
678
+ /**
679
+ * Legacy: Settings.json hooks configuration (Bash)
680
+ * @deprecated Use getHooksSettingsConfig() for cross-platform support
681
+ */
682
+ export const HOOKS_SETTINGS_CONFIG = HOOKS_SETTINGS_CONFIG_BASH;
683
+ // =============================================================================
684
+ // HOOK SCRIPTS EXPORTS (Platform-aware)
685
+ // =============================================================================
686
+ /**
687
+ * Bash hook scripts (Unix only)
327
688
  */
328
- export const HOOK_SCRIPTS = {
689
+ export const HOOK_SCRIPTS_BASH = {
329
690
  'keyword-detector.sh': KEYWORD_DETECTOR_SCRIPT,
330
691
  'stop-continuation.sh': STOP_CONTINUATION_SCRIPT
331
692
  };
693
+ /**
694
+ * Node.js hook scripts (Cross-platform)
695
+ */
696
+ export const HOOK_SCRIPTS_NODE = {
697
+ 'keyword-detector.mjs': KEYWORD_DETECTOR_SCRIPT_NODE,
698
+ 'stop-continuation.mjs': STOP_CONTINUATION_SCRIPT_NODE
699
+ };
700
+ /**
701
+ * Get the appropriate hook scripts for the current platform
702
+ */
703
+ export function getHookScripts() {
704
+ return shouldUseNodeHooks() ? HOOK_SCRIPTS_NODE : HOOK_SCRIPTS_BASH;
705
+ }
706
+ /**
707
+ * Legacy: All hook scripts to install (Bash)
708
+ * @deprecated Use getHookScripts() for cross-platform support
709
+ */
710
+ export const HOOK_SCRIPTS = HOOK_SCRIPTS_BASH;
332
711
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/installer/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FhC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;CAgBjC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;CAU7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;CAgB9B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;uCAMD,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EtC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCvC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE;QACL,gBAAgB,EAAE;YAChB;gBACE,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,SAAkB;wBACxB,OAAO,EAAE,8CAA8C;qBACxD;iBACF;aACF;SACF;QACD,IAAI,EAAE;YACJ;gBACE,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,SAAkB;wBACxB,OAAO,EAAE,+CAA+C;qBACzD;iBACF;aACF;SACF;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;CACjD,CAAC"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/installer/hooks.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,14 @@
6
6
  *
7
7
  * This replicates the functionality of scripts/install.sh but in TypeScript,
8
8
  * allowing npm postinstall to work properly.
9
+ *
10
+ * Cross-platform support:
11
+ * - Windows: Uses Node.js-based hook scripts (.mjs)
12
+ * - Unix (macOS, Linux): Uses Bash scripts (.sh) by default
13
+ *
14
+ * Environment variables:
15
+ * - SISYPHUS_USE_NODE_HOOKS=1: Force Node.js hooks on any platform
16
+ * - SISYPHUS_USE_BASH_HOOKS=1: Force Bash hooks (Unix only)
9
17
  */
10
18
  /** Claude Code configuration directory */
11
19
  export declare const CLAUDE_CONFIG_DIR: string;
@@ -16,7 +24,7 @@ export declare const HOOKS_DIR: string;
16
24
  export declare const SETTINGS_FILE: string;
17
25
  export declare const VERSION_FILE: string;
18
26
  /** Current version */
19
- export declare const VERSION = "1.8.0-beta.1";
27
+ export declare const VERSION = "1.8.0";
20
28
  /** Installation result */
21
29
  export interface InstallResult {
22
30
  success: boolean;
@@ -33,8 +41,17 @@ export interface InstallOptions {
33
41
  verbose?: boolean;
34
42
  skipClaudeCheck?: boolean;
35
43
  }
44
+ /**
45
+ * Check if the current Node.js version meets the minimum requirement
46
+ */
47
+ export declare function checkNodeVersion(): {
48
+ valid: boolean;
49
+ current: number;
50
+ required: number;
51
+ };
36
52
  /**
37
53
  * Check if Claude Code is installed
54
+ * Uses 'where' on Windows, 'which' on Unix
38
55
  */
39
56
  export declare function isClaudeInstalled(): boolean;
40
57
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,YAAY,QAAsC,CAAC;AAChE,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,SAAS,QAAmC,CAAC;AAC1D,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,YAAY,QAAoD,CAAC;AAE9E,sBAAsB;AACtB,eAAO,MAAM,OAAO,iBAAiB,CAAC;AAEtC,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAo6BpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoetD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmZpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,2jPA0L7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CA8KnE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAehG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,YAAY,QAAsC,CAAC;AAChE,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,SAAS,QAAmC,CAAC;AAC1D,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,YAAY,QAAoD,CAAC;AAE9E,sBAAsB;AACtB,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAo6BpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoetD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmZpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,2jPA0L7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAuMnE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAehG"}
@@ -6,12 +6,20 @@
6
6
  *
7
7
  * This replicates the functionality of scripts/install.sh but in TypeScript,
8
8
  * allowing npm postinstall to work properly.
9
+ *
10
+ * Cross-platform support:
11
+ * - Windows: Uses Node.js-based hook scripts (.mjs)
12
+ * - Unix (macOS, Linux): Uses Bash scripts (.sh) by default
13
+ *
14
+ * Environment variables:
15
+ * - SISYPHUS_USE_NODE_HOOKS=1: Force Node.js hooks on any platform
16
+ * - SISYPHUS_USE_BASH_HOOKS=1: Force Bash hooks (Unix only)
9
17
  */
10
18
  import { existsSync, mkdirSync, writeFileSync, readFileSync, chmodSync } from 'fs';
11
19
  import { join } from 'path';
12
20
  import { homedir } from 'os';
13
21
  import { execSync } from 'child_process';
14
- import { HOOK_SCRIPTS, HOOKS_SETTINGS_CONFIG } from './hooks.js';
22
+ import { HOOK_SCRIPTS, getHookScripts, getHooksSettingsConfig, isWindows, shouldUseNodeHooks, MIN_NODE_VERSION } from './hooks.js';
15
23
  /** Claude Code configuration directory */
16
24
  export const CLAUDE_CONFIG_DIR = join(homedir(), '.claude');
17
25
  export const AGENTS_DIR = join(CLAUDE_CONFIG_DIR, 'agents');
@@ -21,13 +29,26 @@ export const HOOKS_DIR = join(CLAUDE_CONFIG_DIR, 'hooks');
21
29
  export const SETTINGS_FILE = join(CLAUDE_CONFIG_DIR, 'settings.json');
22
30
  export const VERSION_FILE = join(CLAUDE_CONFIG_DIR, '.sisyphus-version.json');
23
31
  /** Current version */
24
- export const VERSION = '1.8.0-beta.1';
32
+ export const VERSION = '1.8.0';
33
+ /**
34
+ * Check if the current Node.js version meets the minimum requirement
35
+ */
36
+ export function checkNodeVersion() {
37
+ const current = parseInt(process.versions.node.split('.')[0], 10);
38
+ return {
39
+ valid: current >= MIN_NODE_VERSION,
40
+ current,
41
+ required: MIN_NODE_VERSION
42
+ };
43
+ }
25
44
  /**
26
45
  * Check if Claude Code is installed
46
+ * Uses 'where' on Windows, 'which' on Unix
27
47
  */
28
48
  export function isClaudeInstalled() {
29
49
  try {
30
- execSync('which claude', { encoding: 'utf-8', stdio: 'pipe' });
50
+ const command = isWindows() ? 'where claude' : 'which claude';
51
+ execSync(command, { encoding: 'utf-8', stdio: 'pipe' });
31
52
  return true;
32
53
  }
33
54
  catch {
@@ -2049,10 +2070,28 @@ export function install(options = {}) {
2049
2070
  console.log(msg);
2050
2071
  }
2051
2072
  };
2073
+ // Check Node.js version (required for Node.js hooks on Windows)
2074
+ const nodeCheck = checkNodeVersion();
2075
+ if (!nodeCheck.valid) {
2076
+ log(`Warning: Node.js ${nodeCheck.required}+ required, found ${nodeCheck.current}`);
2077
+ if (isWindows()) {
2078
+ result.errors.push(`Node.js ${nodeCheck.required}+ is required for Windows support. Found: ${nodeCheck.current}`);
2079
+ result.message = `Installation failed: Node.js ${nodeCheck.required}+ required`;
2080
+ return result;
2081
+ }
2082
+ // On Unix, we can still use bash hooks, so just warn
2083
+ }
2084
+ // Log platform info
2085
+ log(`Platform: ${process.platform} (${shouldUseNodeHooks() ? 'Node.js hooks' : 'Bash hooks'})`);
2052
2086
  // Check Claude installation (optional)
2053
2087
  if (!options.skipClaudeCheck && !isClaudeInstalled()) {
2054
2088
  log('Warning: Claude Code not found. Install it first:');
2055
- log(' curl -fsSL https://claude.ai/install.sh | bash');
2089
+ if (isWindows()) {
2090
+ log(' Visit https://docs.anthropic.com/claude-code for Windows installation');
2091
+ }
2092
+ else {
2093
+ log(' curl -fsSL https://claude.ai/install.sh | bash');
2094
+ }
2056
2095
  // Continue anyway - user might be installing ahead of time
2057
2096
  }
2058
2097
  try {
@@ -2133,17 +2172,21 @@ export function install(options = {}) {
2133
2172
  else {
2134
2173
  log('CLAUDE.md exists in home directory, skipping');
2135
2174
  }
2136
- // Install hook scripts
2137
- log('Installing hook scripts...');
2138
- for (const [filename, content] of Object.entries(HOOK_SCRIPTS)) {
2175
+ // Install hook scripts (platform-aware)
2176
+ const hookScripts = getHookScripts();
2177
+ const hookType = shouldUseNodeHooks() ? 'Node.js' : 'Bash';
2178
+ log(`Installing ${hookType} hook scripts...`);
2179
+ for (const [filename, content] of Object.entries(hookScripts)) {
2139
2180
  const filepath = join(HOOKS_DIR, filename);
2140
2181
  if (existsSync(filepath) && !options.force) {
2141
2182
  log(` Skipping ${filename} (already exists)`);
2142
2183
  }
2143
2184
  else {
2144
2185
  writeFileSync(filepath, content);
2145
- // Make script executable
2146
- chmodSync(filepath, 0o755);
2186
+ // Make script executable (skip on Windows - not needed)
2187
+ if (!isWindows()) {
2188
+ chmodSync(filepath, 0o755);
2189
+ }
2147
2190
  log(` Installed ${filename}`);
2148
2191
  }
2149
2192
  }
@@ -2155,9 +2198,10 @@ export function install(options = {}) {
2155
2198
  const settingsContent = readFileSync(SETTINGS_FILE, 'utf-8');
2156
2199
  existingSettings = JSON.parse(settingsContent);
2157
2200
  }
2158
- // Merge hooks configuration
2201
+ // Merge hooks configuration (platform-aware)
2159
2202
  const existingHooks = (existingSettings.hooks || {});
2160
- const newHooks = HOOKS_SETTINGS_CONFIG.hooks;
2203
+ const hooksConfig = getHooksSettingsConfig();
2204
+ const newHooks = hooksConfig.hooks;
2161
2205
  // Deep merge: add our hooks without overwriting existing ones
2162
2206
  for (const [eventType, eventHooks] of Object.entries(newHooks)) {
2163
2207
  if (!existingHooks[eventType]) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-claude-sisyphus",
3
- "version": "1.8.0-beta.1",
3
+ "version": "1.8.0",
4
4
  "description": "Multi-agent orchestration system for Claude Agent SDK - Port of oh-my-opencode",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -26,6 +26,7 @@
26
26
  "start": "node dist/index.js",
27
27
  "lint": "eslint src --ext .ts",
28
28
  "format": "prettier --write src/**/*.ts",
29
+ "prepare": "npm run build",
29
30
  "prepublishOnly": "npm run build",
30
31
  "postinstall": "node dist/cli/index.js postinstall || true"
31
32
  },
@@ -1638,7 +1638,7 @@ else
1638
1638
  fi
1639
1639
 
1640
1640
  # Save version metadata for auto-update system
1641
- VERSION="1.8.0-beta.1"
1641
+ VERSION="1.8.0"
1642
1642
  VERSION_FILE="$CLAUDE_CONFIG_DIR/.sisyphus-version.json"
1643
1643
 
1644
1644
  cat > "$VERSION_FILE" << VERSION_EOF