olympus-ai 2.4.1 → 2.5.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 (147) hide show
  1. package/dist/__tests__/hooks/bundle.test.d.ts +2 -0
  2. package/dist/__tests__/hooks/bundle.test.d.ts.map +1 -0
  3. package/dist/__tests__/hooks/bundle.test.js +120 -0
  4. package/dist/__tests__/hooks/bundle.test.js.map +1 -0
  5. package/dist/__tests__/hooks/integration.test.d.ts +2 -0
  6. package/dist/__tests__/hooks/integration.test.d.ts.map +1 -0
  7. package/dist/__tests__/hooks/integration.test.js +132 -0
  8. package/dist/__tests__/hooks/integration.test.js.map +1 -0
  9. package/dist/__tests__/hooks/performance.test.d.ts +2 -0
  10. package/dist/__tests__/hooks/performance.test.d.ts.map +1 -0
  11. package/dist/__tests__/hooks/performance.test.js +266 -0
  12. package/dist/__tests__/hooks/performance.test.js.map +1 -0
  13. package/dist/__tests__/hooks/router.test.d.ts +2 -0
  14. package/dist/__tests__/hooks/router.test.d.ts.map +1 -0
  15. package/dist/__tests__/hooks/router.test.js +793 -0
  16. package/dist/__tests__/hooks/router.test.js.map +1 -0
  17. package/dist/hooks/config.d.ts +47 -0
  18. package/dist/hooks/config.d.ts.map +1 -0
  19. package/dist/hooks/config.js +120 -0
  20. package/dist/hooks/config.js.map +1 -0
  21. package/dist/hooks/entry.d.ts +17 -0
  22. package/dist/hooks/entry.d.ts.map +1 -0
  23. package/dist/hooks/entry.js +66 -0
  24. package/dist/hooks/entry.js.map +1 -0
  25. package/dist/hooks/index.d.ts +3 -0
  26. package/dist/hooks/index.d.ts.map +1 -1
  27. package/dist/hooks/index.js +6 -0
  28. package/dist/hooks/index.js.map +1 -1
  29. package/dist/hooks/olympus-hooks.cjs +653 -0
  30. package/dist/hooks/registrations/index.d.ts +25 -0
  31. package/dist/hooks/registrations/index.d.ts.map +1 -0
  32. package/dist/hooks/registrations/index.js +43 -0
  33. package/dist/hooks/registrations/index.js.map +1 -0
  34. package/dist/hooks/registrations/messages-transform.d.ts +8 -0
  35. package/dist/hooks/registrations/messages-transform.d.ts.map +1 -0
  36. package/dist/hooks/registrations/messages-transform.js +63 -0
  37. package/dist/hooks/registrations/messages-transform.js.map +1 -0
  38. package/dist/hooks/registrations/notification.d.ts +7 -0
  39. package/dist/hooks/registrations/notification.d.ts.map +1 -0
  40. package/dist/hooks/registrations/notification.js +34 -0
  41. package/dist/hooks/registrations/notification.js.map +1 -0
  42. package/dist/hooks/registrations/post-tool-use.d.ts +18 -0
  43. package/dist/hooks/registrations/post-tool-use.d.ts.map +1 -0
  44. package/dist/hooks/registrations/post-tool-use.js +198 -0
  45. package/dist/hooks/registrations/post-tool-use.js.map +1 -0
  46. package/dist/hooks/registrations/pre-tool-use.d.ts +11 -0
  47. package/dist/hooks/registrations/pre-tool-use.d.ts.map +1 -0
  48. package/dist/hooks/registrations/pre-tool-use.js +102 -0
  49. package/dist/hooks/registrations/pre-tool-use.js.map +1 -0
  50. package/dist/hooks/registrations/session-start.d.ts +7 -0
  51. package/dist/hooks/registrations/session-start.d.ts.map +1 -0
  52. package/dist/hooks/registrations/session-start.js +60 -0
  53. package/dist/hooks/registrations/session-start.js.map +1 -0
  54. package/dist/hooks/registrations/stop.d.ts +8 -0
  55. package/dist/hooks/registrations/stop.d.ts.map +1 -0
  56. package/dist/hooks/registrations/stop.js +28 -0
  57. package/dist/hooks/registrations/stop.js.map +1 -0
  58. package/dist/hooks/registrations/user-prompt-submit.d.ts +7 -0
  59. package/dist/hooks/registrations/user-prompt-submit.d.ts.map +1 -0
  60. package/dist/hooks/registrations/user-prompt-submit.js +114 -0
  61. package/dist/hooks/registrations/user-prompt-submit.js.map +1 -0
  62. package/dist/hooks/registry.d.ts +39 -0
  63. package/dist/hooks/registry.d.ts.map +1 -0
  64. package/dist/hooks/registry.js +58 -0
  65. package/dist/hooks/registry.js.map +1 -0
  66. package/dist/hooks/router.d.ts +31 -0
  67. package/dist/hooks/router.d.ts.map +1 -0
  68. package/dist/hooks/router.js +155 -0
  69. package/dist/hooks/router.js.map +1 -0
  70. package/dist/hooks/types.d.ts +102 -0
  71. package/dist/hooks/types.d.ts.map +1 -0
  72. package/dist/hooks/types.js +8 -0
  73. package/dist/hooks/types.js.map +1 -0
  74. package/dist/installer/default-config.d.ts +112 -0
  75. package/dist/installer/default-config.d.ts.map +1 -0
  76. package/dist/installer/default-config.js +153 -0
  77. package/dist/installer/default-config.js.map +1 -0
  78. package/dist/installer/hooks.d.ts +104 -0
  79. package/dist/installer/hooks.d.ts.map +1 -1
  80. package/dist/installer/hooks.js +80 -0
  81. package/dist/installer/hooks.js.map +1 -1
  82. package/dist/installer/index.d.ts +5 -1
  83. package/dist/installer/index.d.ts.map +1 -1
  84. package/dist/installer/index.js +2108 -2064
  85. package/dist/installer/index.js.map +1 -1
  86. package/dist/installer/migrate.d.ts +28 -0
  87. package/dist/installer/migrate.d.ts.map +1 -0
  88. package/dist/installer/migrate.js +99 -0
  89. package/dist/installer/migrate.js.map +1 -0
  90. package/dist/shared/types.d.ts +60 -0
  91. package/dist/shared/types.d.ts.map +1 -1
  92. package/package.json +3 -1
  93. package/.claude/agents/document-writer.md +0 -152
  94. package/.claude/agents/explore-medium.md +0 -25
  95. package/.claude/agents/explore.md +0 -86
  96. package/.claude/agents/frontend-engineer-high.md +0 -24
  97. package/.claude/agents/frontend-engineer-low.md +0 -23
  98. package/.claude/agents/frontend-engineer.md +0 -89
  99. package/.claude/agents/librarian-low.md +0 -22
  100. package/.claude/agents/librarian.md +0 -70
  101. package/.claude/agents/metis.md +0 -85
  102. package/.claude/agents/momus.md +0 -97
  103. package/.claude/agents/multimodal-looker.md +0 -39
  104. package/.claude/agents/olympian-high.md +0 -39
  105. package/.claude/agents/olympian-low.md +0 -29
  106. package/.claude/agents/olympian.md +0 -71
  107. package/.claude/agents/oracle-low.md +0 -23
  108. package/.claude/agents/oracle-medium.md +0 -28
  109. package/.claude/agents/oracle.md +0 -77
  110. package/.claude/agents/prometheus.md +0 -126
  111. package/.claude/agents/qa-tester.md +0 -220
  112. package/.claude/commands/analyze/skill.md +0 -14
  113. package/.claude/commands/analyze.md +0 -14
  114. package/.claude/commands/ascent/skill.md +0 -152
  115. package/.claude/commands/ascent.md +0 -152
  116. package/.claude/commands/cancel-ascent.md +0 -9
  117. package/.claude/commands/complete-plan.md +0 -101
  118. package/.claude/commands/deepinit.md +0 -114
  119. package/.claude/commands/deepsearch/skill.md +0 -15
  120. package/.claude/commands/deepsearch.md +0 -15
  121. package/.claude/commands/doctor.md +0 -190
  122. package/.claude/commands/olympus/skill.md +0 -82
  123. package/.claude/commands/olympus-default.md +0 -26
  124. package/.claude/commands/plan.md +0 -37
  125. package/.claude/commands/prometheus/skill.md +0 -41
  126. package/.claude/commands/prometheus.md +0 -41
  127. package/.claude/commands/review/skill.md +0 -40
  128. package/.claude/commands/review.md +0 -40
  129. package/.claude/commands/ultrawork/skill.md +0 -90
  130. package/.claude/commands/ultrawork.md +0 -90
  131. package/.claude/commands/update.md +0 -38
  132. package/dist/features/boulder-state/constants.d.ts +0 -20
  133. package/dist/features/boulder-state/constants.d.ts.map +0 -1
  134. package/dist/features/boulder-state/constants.js +0 -20
  135. package/dist/features/boulder-state/constants.js.map +0 -1
  136. package/dist/features/boulder-state/index.d.ts +0 -12
  137. package/dist/features/boulder-state/index.d.ts.map +0 -1
  138. package/dist/features/boulder-state/index.js +0 -13
  139. package/dist/features/boulder-state/index.js.map +0 -1
  140. package/dist/features/boulder-state/storage.d.ts +0 -58
  141. package/dist/features/boulder-state/storage.d.ts.map +0 -1
  142. package/dist/features/boulder-state/storage.js +0 -174
  143. package/dist/features/boulder-state/storage.js.map +0 -1
  144. package/dist/features/boulder-state/types.d.ts +0 -48
  145. package/dist/features/boulder-state/types.d.ts.map +0 -1
  146. package/dist/features/boulder-state/types.js +0 -10
  147. package/dist/features/boulder-state/types.js.map +0 -1
@@ -1,40 +0,0 @@
1
- ---
2
- description: Review a plan with Momus
3
- ---
4
-
5
- [PLAN REVIEW MODE]
6
-
7
- $ARGUMENTS
8
-
9
- ## Plan Review with Momus
10
-
11
- I will critically evaluate the specified plan using Momus, the ruthless plan reviewer.
12
-
13
- ### Evaluation Criteria
14
- - **Clarity**: 80%+ of claims must cite specific file/line references
15
- - **Testability**: 90%+ of acceptance criteria must be concrete and testable
16
- - **Verification**: All file references must be verified to exist
17
- - **Specificity**: No vague terms like "improve", "optimize" without metrics
18
-
19
- ### Output Format
20
- - **APPROVED** - Plan meets all criteria, ready for execution
21
- - **REVISE** - Plan has issues that need to be addressed (with specific feedback)
22
- - **REJECT** - Plan has fundamental problems requiring replanning
23
-
24
- ### Usage
25
- ```
26
- /review .olympus/plans/my-feature.md
27
- /review # Review the most recent plan
28
- ```
29
-
30
- ### What Gets Checked
31
- 1. Are requirements clear and unambiguous?
32
- 2. Are acceptance criteria concrete and testable?
33
- 3. Do file references actually exist?
34
- 4. Are implementation steps specific and actionable?
35
- 5. Are risks identified with mitigations?
36
- 6. Are verification steps defined?
37
-
38
- ---
39
-
40
- Provide a plan file path to review, or I'll review the most recent plan in `.olympus/plans/`.
@@ -1,40 +0,0 @@
1
- ---
2
- description: Review a plan with Momus
3
- ---
4
-
5
- [PLAN REVIEW MODE]
6
-
7
- $ARGUMENTS
8
-
9
- ## Plan Review with Momus
10
-
11
- I will critically evaluate the specified plan using Momus, the ruthless plan reviewer.
12
-
13
- ### Evaluation Criteria
14
- - **Clarity**: 80%+ of claims must cite specific file/line references
15
- - **Testability**: 90%+ of acceptance criteria must be concrete and testable
16
- - **Verification**: All file references must be verified to exist
17
- - **Specificity**: No vague terms like "improve", "optimize" without metrics
18
-
19
- ### Output Format
20
- - **APPROVED** - Plan meets all criteria, ready for execution
21
- - **REVISE** - Plan has issues that need to be addressed (with specific feedback)
22
- - **REJECT** - Plan has fundamental problems requiring replanning
23
-
24
- ### Usage
25
- ```
26
- /review .olympus/plans/my-feature.md
27
- /review # Review the most recent plan
28
- ```
29
-
30
- ### What Gets Checked
31
- 1. Are requirements clear and unambiguous?
32
- 2. Are acceptance criteria concrete and testable?
33
- 3. Do file references actually exist?
34
- 4. Are implementation steps specific and actionable?
35
- 5. Are risks identified with mitigations?
36
- 6. Are verification steps defined?
37
-
38
- ---
39
-
40
- Provide a plan file path to review, or I'll review the most recent plan in `.olympus/plans/`.
@@ -1,90 +0,0 @@
1
- ---
2
- description: Maximum intensity mode - parallel everything, delegate aggressively, never wait
3
- ---
4
-
5
- [ULTRAWORK MODE ACTIVATED - MAXIMUM INTENSITY]
6
-
7
- $ARGUMENTS
8
-
9
- ## THE ULTRAWORK OATH
10
-
11
- You are now operating at **MAXIMUM INTENSITY**. Half-measures are unacceptable. Incomplete work is FAILURE. You will persist until EVERY task is VERIFIED complete.
12
-
13
- This mode OVERRIDES default heuristics. Where default mode says "parallelize when profitable," ultrawork says "PARALLEL EVERYTHING."
14
-
15
- ## ULTRAWORK OVERRIDES
16
-
17
- | Default Behavior | Ultrawork Override |
18
- |------------------|-------------------|
19
- | Parallelize when profitable | **PARALLEL EVERYTHING** |
20
- | Do simple tasks directly | **DELEGATE EVEN SMALL TASKS** |
21
- | Wait for verification | **DON'T WAIT - continue immediately** |
22
- | Background for long ops | **BACKGROUND EVERYTHING POSSIBLE** |
23
-
24
- ## EXECUTION PROTOCOL
25
-
26
- ### 1. PARALLEL EVERYTHING
27
- - Fire off MULTIPLE agents simultaneously - don't analyze, just launch
28
- - Don't wait when you can parallelize
29
- - Use background execution for ALL operations that support it
30
- - Maximum throughput is the only goal
31
- - Launch 3-5 agents in parallel when possible
32
-
33
- ### 2. DELEGATE AGGRESSIVELY
34
- Route tasks to specialists IMMEDIATELY - don't do it yourself:
35
- - `oracle` → ANY debugging or analysis
36
- - `librarian` → ANY research or doc lookup
37
- - `explore` → ANY search operation
38
- - `frontend-engineer` → ANY UI work
39
- - `document-writer` → ANY documentation
40
- - `olympian` → ANY code changes
41
- - `qa-tester` → ANY verification
42
-
43
- ### 3. NEVER WAIT
44
- - Start the next task BEFORE the previous one completes
45
- - Check background task results LATER
46
- - Don't block on verification - launch it and continue
47
- - Maximum concurrency at all times
48
-
49
- ### 4. PERSISTENCE ENFORCEMENT
50
- - Create TODO list IMMEDIATELY
51
- - Mark tasks in_progress BEFORE starting
52
- - Mark completed ONLY after VERIFICATION
53
- - LOOP until 100% complete
54
- - Re-check todo list before ANY conclusion attempt
55
-
56
- ## THE ULTRAWORK PROMISE
57
-
58
- Before stopping, VERIFY:
59
- - [ ] Todo list: ZERO pending/in_progress tasks
60
- - [ ] All functionality: TESTED and WORKING
61
- - [ ] All errors: RESOLVED
62
- - [ ] User's request: FULLY SATISFIED
63
-
64
- **If ANY checkbox is unchecked, CONTINUE WORKING. No exceptions.**
65
-
66
- ## VERIFICATION PROTOCOL
67
-
68
- ### Step 1: Self-Check
69
- Run through the checklist above.
70
-
71
- ### Step 2: Oracle Review (Launch in Background)
72
- ```
73
- Task(subagent_type="oracle", run_in_background=true, prompt="VERIFY COMPLETION:
74
- Original task: [task]
75
- Changes made: [list]
76
- Please verify this is complete and production-ready.")
77
- ```
78
-
79
- ### Step 3: Run Tests (In Parallel)
80
- ```bash
81
- npm test # or pytest, go test, cargo test
82
- ```
83
-
84
- ### Step 4: Decision
85
- - **Oracle APPROVED + Tests PASS** → Declare complete
86
- - **Any REJECTED/FAILED** → Fix and re-verify
87
-
88
- ## THE ASCENT NEVER ENDS
89
-
90
- The ascent continues until Olympus is reached. In ultrawork mode, the climb intensifies.
@@ -1,90 +0,0 @@
1
- ---
2
- description: Maximum intensity mode - parallel everything, delegate aggressively, never wait
3
- ---
4
-
5
- [ULTRAWORK MODE ACTIVATED - MAXIMUM INTENSITY]
6
-
7
- $ARGUMENTS
8
-
9
- ## THE ULTRAWORK OATH
10
-
11
- You are now operating at **MAXIMUM INTENSITY**. Half-measures are unacceptable. Incomplete work is FAILURE. You will persist until EVERY task is VERIFIED complete.
12
-
13
- This mode OVERRIDES default heuristics. Where default mode says "parallelize when profitable," ultrawork says "PARALLEL EVERYTHING."
14
-
15
- ## ULTRAWORK OVERRIDES
16
-
17
- | Default Behavior | Ultrawork Override |
18
- |------------------|-------------------|
19
- | Parallelize when profitable | **PARALLEL EVERYTHING** |
20
- | Do simple tasks directly | **DELEGATE EVEN SMALL TASKS** |
21
- | Wait for verification | **DON'T WAIT - continue immediately** |
22
- | Background for long ops | **BACKGROUND EVERYTHING POSSIBLE** |
23
-
24
- ## EXECUTION PROTOCOL
25
-
26
- ### 1. PARALLEL EVERYTHING
27
- - Fire off MULTIPLE agents simultaneously - don't analyze, just launch
28
- - Don't wait when you can parallelize
29
- - Use background execution for ALL operations that support it
30
- - Maximum throughput is the only goal
31
- - Launch 3-5 agents in parallel when possible
32
-
33
- ### 2. DELEGATE AGGRESSIVELY
34
- Route tasks to specialists IMMEDIATELY - don't do it yourself:
35
- - `oracle` → ANY debugging or analysis
36
- - `librarian` → ANY research or doc lookup
37
- - `explore` → ANY search operation
38
- - `frontend-engineer` → ANY UI work
39
- - `document-writer` → ANY documentation
40
- - `olympian` → ANY code changes
41
- - `qa-tester` → ANY verification
42
-
43
- ### 3. NEVER WAIT
44
- - Start the next task BEFORE the previous one completes
45
- - Check background task results LATER
46
- - Don't block on verification - launch it and continue
47
- - Maximum concurrency at all times
48
-
49
- ### 4. PERSISTENCE ENFORCEMENT
50
- - Create TODO list IMMEDIATELY
51
- - Mark tasks in_progress BEFORE starting
52
- - Mark completed ONLY after VERIFICATION
53
- - LOOP until 100% complete
54
- - Re-check todo list before ANY conclusion attempt
55
-
56
- ## THE ULTRAWORK PROMISE
57
-
58
- Before stopping, VERIFY:
59
- - [ ] Todo list: ZERO pending/in_progress tasks
60
- - [ ] All functionality: TESTED and WORKING
61
- - [ ] All errors: RESOLVED
62
- - [ ] User's request: FULLY SATISFIED
63
-
64
- **If ANY checkbox is unchecked, CONTINUE WORKING. No exceptions.**
65
-
66
- ## VERIFICATION PROTOCOL
67
-
68
- ### Step 1: Self-Check
69
- Run through the checklist above.
70
-
71
- ### Step 2: Oracle Review (Launch in Background)
72
- ```
73
- Task(subagent_type="oracle", run_in_background=true, prompt="VERIFY COMPLETION:
74
- Original task: [task]
75
- Changes made: [list]
76
- Please verify this is complete and production-ready.")
77
- ```
78
-
79
- ### Step 3: Run Tests (In Parallel)
80
- ```bash
81
- npm test # or pytest, go test, cargo test
82
- ```
83
-
84
- ### Step 4: Decision
85
- - **Oracle APPROVED + Tests PASS** → Declare complete
86
- - **Any REJECTED/FAILED** → Fix and re-verify
87
-
88
- ## THE ASCENT NEVER ENDS
89
-
90
- The ascent continues until Olympus is reached. In ultrawork mode, the climb intensifies.
@@ -1,38 +0,0 @@
1
- ---
2
- description: Check for and install Olympus updates
3
- ---
4
-
5
- [UPDATE CHECK]
6
-
7
- $ARGUMENTS
8
-
9
- ## Checking for Updates
10
-
11
- I will check for available updates to Olympus.
12
-
13
- ### What This Does
14
-
15
- 1. **Check Version**: Compare your installed version against the latest release on GitHub
16
- 2. **Show Release Notes**: Display what's new in the latest version
17
- 3. **Perform Update**: If an update is available and you confirm, download and install it
18
-
19
- ### Update Methods
20
-
21
- **Automatic (Recommended):**
22
- Run the install script to update:
23
- ```bash
24
- curl -fsSL https://raw.githubusercontent.com/mikev10/olympus/main/scripts/install.sh | bash
25
- ```
26
-
27
- **Manual:**
28
- 1. Check your current version in `~/.claude/.olympus-version.json`
29
- 2. Visit https://github.com/mikev10/olympus/releases
30
- 3. Download and run the install script from the latest release
31
-
32
- ### Version Info Location
33
-
34
- Your version information is stored at: `~/.claude/.olympus-version.json`
35
-
36
- ---
37
-
38
- Let me check for updates now. I'll read your version file and compare against the latest GitHub release.
@@ -1,20 +0,0 @@
1
- /**
2
- * Boulder State Constants
3
- *
4
- * Ported from oh-my-opencode's boulder-state.
5
- */
6
- /** Olympus state directory */
7
- export declare const BOULDER_DIR = ".olympus";
8
- /** Boulder state file name */
9
- export declare const BOULDER_FILE = "boulder.json";
10
- /** Full path pattern for boulder state */
11
- export declare const BOULDER_STATE_PATH = ".olympus/boulder.json";
12
- /** Notepad directory for learnings */
13
- export declare const NOTEPAD_DIR = "notepads";
14
- /** Full path for notepads */
15
- export declare const NOTEPAD_BASE_PATH = ".olympus/notepads";
16
- /** Prometheus plan directory */
17
- export declare const PROMETHEUS_PLANS_DIR = ".olympus/plans";
18
- /** Plan file extension */
19
- export declare const PLAN_EXTENSION = ".md";
20
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/features/boulder-state/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,8BAA8B;AAC9B,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,0CAA0C;AAC1C,eAAO,MAAM,kBAAkB,0BAAmC,CAAC;AAEnE,sCAAsC;AACtC,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,6BAA6B;AAC7B,eAAO,MAAM,iBAAiB,sBAAkC,CAAC;AAEjE,gCAAgC;AAChC,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,0BAA0B;AAC1B,eAAO,MAAM,cAAc,QAAQ,CAAC"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Boulder State Constants
3
- *
4
- * Ported from oh-my-opencode's boulder-state.
5
- */
6
- /** Olympus state directory */
7
- export const BOULDER_DIR = '.olympus';
8
- /** Boulder state file name */
9
- export const BOULDER_FILE = 'boulder.json';
10
- /** Full path pattern for boulder state */
11
- export const BOULDER_STATE_PATH = `${BOULDER_DIR}/${BOULDER_FILE}`;
12
- /** Notepad directory for learnings */
13
- export const NOTEPAD_DIR = 'notepads';
14
- /** Full path for notepads */
15
- export const NOTEPAD_BASE_PATH = `${BOULDER_DIR}/${NOTEPAD_DIR}`;
16
- /** Prometheus plan directory */
17
- export const PROMETHEUS_PLANS_DIR = '.olympus/plans';
18
- /** Plan file extension */
19
- export const PLAN_EXTENSION = '.md';
20
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/features/boulder-state/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,8BAA8B;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAE3C,0CAA0C;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,WAAW,IAAI,YAAY,EAAE,CAAC;AAEnE,sCAAsC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,WAAW,IAAI,WAAW,EAAE,CAAC;AAEjE,gCAAgC;AAChC,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAErD,0BAA0B;AAC1B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Boulder State Module
3
- *
4
- * Manages the active work plan state for Olympus orchestrator.
5
- * Named after Olympus's boulder - the eternal task that must be rolled.
6
- *
7
- * Ported from oh-my-opencode's boulder-state.
8
- */
9
- export type { BoulderState, PlanProgress, PlanSummary } from './types.js';
10
- export { BOULDER_DIR, BOULDER_FILE, BOULDER_STATE_PATH, NOTEPAD_DIR, NOTEPAD_BASE_PATH, PROMETHEUS_PLANS_DIR, PLAN_EXTENSION } from './constants.js';
11
- export { getBoulderFilePath, readBoulderState, writeBoulderState, appendSessionId, clearBoulderState, findPrometheusPlans, getPlanProgress, getPlanName, createBoulderState, getPlanSummaries, hasBoulder, getActivePlanPath } from './storage.js';
12
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/boulder-state/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACf,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAClB,MAAM,cAAc,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Boulder State Module
3
- *
4
- * Manages the active work plan state for Olympus orchestrator.
5
- * Named after Olympus's boulder - the eternal task that must be rolled.
6
- *
7
- * Ported from oh-my-opencode's boulder-state.
8
- */
9
- // Constants
10
- export { BOULDER_DIR, BOULDER_FILE, BOULDER_STATE_PATH, NOTEPAD_DIR, NOTEPAD_BASE_PATH, PROMETHEUS_PLANS_DIR, PLAN_EXTENSION } from './constants.js';
11
- // Storage operations
12
- export { getBoulderFilePath, readBoulderState, writeBoulderState, appendSessionId, clearBoulderState, findPrometheusPlans, getPlanProgress, getPlanName, createBoulderState, getPlanSummaries, hasBoulder, getActivePlanPath } from './storage.js';
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/boulder-state/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,YAAY;AACZ,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACf,MAAM,gBAAgB,CAAC;AAExB,qBAAqB;AACrB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAClB,MAAM,cAAc,CAAC"}
@@ -1,58 +0,0 @@
1
- /**
2
- * Boulder State Storage
3
- *
4
- * Handles reading/writing boulder.json for active plan tracking.
5
- *
6
- * Ported from oh-my-opencode's boulder-state.
7
- */
8
- import type { BoulderState, PlanProgress, PlanSummary } from './types.js';
9
- /**
10
- * Get the full path to the boulder state file
11
- */
12
- export declare function getBoulderFilePath(directory: string): string;
13
- /**
14
- * Read boulder state from disk
15
- */
16
- export declare function readBoulderState(directory: string): BoulderState | null;
17
- /**
18
- * Write boulder state to disk
19
- */
20
- export declare function writeBoulderState(directory: string, state: BoulderState): boolean;
21
- /**
22
- * Append a session ID to the boulder state
23
- */
24
- export declare function appendSessionId(directory: string, sessionId: string): BoulderState | null;
25
- /**
26
- * Clear boulder state (delete the file)
27
- */
28
- export declare function clearBoulderState(directory: string): boolean;
29
- /**
30
- * Find Prometheus plan files for this project.
31
- * Prometheus stores plans at: {project}/.olympus/plans/{name}.md
32
- */
33
- export declare function findPrometheusPlans(directory: string): string[];
34
- /**
35
- * Parse a plan file and count checkbox progress.
36
- */
37
- export declare function getPlanProgress(planPath: string): PlanProgress;
38
- /**
39
- * Extract plan name from file path.
40
- */
41
- export declare function getPlanName(planPath: string): string;
42
- /**
43
- * Create a new boulder state for a plan.
44
- */
45
- export declare function createBoulderState(planPath: string, sessionId: string): BoulderState;
46
- /**
47
- * Get summaries of all available plans
48
- */
49
- export declare function getPlanSummaries(directory: string): PlanSummary[];
50
- /**
51
- * Check if a boulder is currently active
52
- */
53
- export declare function hasBoulder(directory: string): boolean;
54
- /**
55
- * Get the active plan path from boulder state
56
- */
57
- export declare function getActivePlanPath(directory: string): string | null;
58
- //# sourceMappingURL=storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/features/boulder-state/storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG1E;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAavE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAcjF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAYzF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAW5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAuB9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,YAAY,CAOd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAYjE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlE"}
@@ -1,174 +0,0 @@
1
- /**
2
- * Boulder State Storage
3
- *
4
- * Handles reading/writing boulder.json for active plan tracking.
5
- *
6
- * Ported from oh-my-opencode's boulder-state.
7
- */
8
- import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, statSync, unlinkSync } from 'fs';
9
- import { dirname, join, basename } from 'path';
10
- import { BOULDER_DIR, BOULDER_FILE, PROMETHEUS_PLANS_DIR, PLAN_EXTENSION } from './constants.js';
11
- /**
12
- * Get the full path to the boulder state file
13
- */
14
- export function getBoulderFilePath(directory) {
15
- return join(directory, BOULDER_DIR, BOULDER_FILE);
16
- }
17
- /**
18
- * Read boulder state from disk
19
- */
20
- export function readBoulderState(directory) {
21
- const filePath = getBoulderFilePath(directory);
22
- if (!existsSync(filePath)) {
23
- return null;
24
- }
25
- try {
26
- const content = readFileSync(filePath, 'utf-8');
27
- return JSON.parse(content);
28
- }
29
- catch {
30
- return null;
31
- }
32
- }
33
- /**
34
- * Write boulder state to disk
35
- */
36
- export function writeBoulderState(directory, state) {
37
- const filePath = getBoulderFilePath(directory);
38
- try {
39
- const dir = dirname(filePath);
40
- if (!existsSync(dir)) {
41
- mkdirSync(dir, { recursive: true });
42
- }
43
- writeFileSync(filePath, JSON.stringify(state, null, 2), 'utf-8');
44
- return true;
45
- }
46
- catch {
47
- return false;
48
- }
49
- }
50
- /**
51
- * Append a session ID to the boulder state
52
- */
53
- export function appendSessionId(directory, sessionId) {
54
- const state = readBoulderState(directory);
55
- if (!state)
56
- return null;
57
- if (!state.session_ids.includes(sessionId)) {
58
- state.session_ids.push(sessionId);
59
- if (writeBoulderState(directory, state)) {
60
- return state;
61
- }
62
- }
63
- return state;
64
- }
65
- /**
66
- * Clear boulder state (delete the file)
67
- */
68
- export function clearBoulderState(directory) {
69
- const filePath = getBoulderFilePath(directory);
70
- try {
71
- if (existsSync(filePath)) {
72
- unlinkSync(filePath);
73
- }
74
- return true;
75
- }
76
- catch {
77
- return false;
78
- }
79
- }
80
- /**
81
- * Find Prometheus plan files for this project.
82
- * Prometheus stores plans at: {project}/.olympus/plans/{name}.md
83
- */
84
- export function findPrometheusPlans(directory) {
85
- const plansDir = join(directory, PROMETHEUS_PLANS_DIR);
86
- if (!existsSync(plansDir)) {
87
- return [];
88
- }
89
- try {
90
- const files = readdirSync(plansDir);
91
- return files
92
- .filter((f) => f.endsWith(PLAN_EXTENSION))
93
- .map((f) => join(plansDir, f))
94
- .sort((a, b) => {
95
- // Sort by modification time, newest first
96
- const aStat = statSync(a);
97
- const bStat = statSync(b);
98
- return bStat.mtimeMs - aStat.mtimeMs;
99
- });
100
- }
101
- catch {
102
- return [];
103
- }
104
- }
105
- /**
106
- * Parse a plan file and count checkbox progress.
107
- */
108
- export function getPlanProgress(planPath) {
109
- if (!existsSync(planPath)) {
110
- return { total: 0, completed: 0, isComplete: true };
111
- }
112
- try {
113
- const content = readFileSync(planPath, 'utf-8');
114
- // Match markdown checkboxes: - [ ] or - [x] or - [X]
115
- const uncheckedMatches = content.match(/^[-*]\s*\[\s*\]/gm) || [];
116
- const checkedMatches = content.match(/^[-*]\s*\[[xX]\]/gm) || [];
117
- const total = uncheckedMatches.length + checkedMatches.length;
118
- const completed = checkedMatches.length;
119
- return {
120
- total,
121
- completed,
122
- isComplete: total === 0 || completed === total,
123
- };
124
- }
125
- catch {
126
- return { total: 0, completed: 0, isComplete: true };
127
- }
128
- }
129
- /**
130
- * Extract plan name from file path.
131
- */
132
- export function getPlanName(planPath) {
133
- return basename(planPath, PLAN_EXTENSION);
134
- }
135
- /**
136
- * Create a new boulder state for a plan.
137
- */
138
- export function createBoulderState(planPath, sessionId) {
139
- return {
140
- active_plan: planPath,
141
- started_at: new Date().toISOString(),
142
- session_ids: [sessionId],
143
- plan_name: getPlanName(planPath),
144
- };
145
- }
146
- /**
147
- * Get summaries of all available plans
148
- */
149
- export function getPlanSummaries(directory) {
150
- const plans = findPrometheusPlans(directory);
151
- return plans.map((planPath) => {
152
- const stat = statSync(planPath);
153
- return {
154
- path: planPath,
155
- name: getPlanName(planPath),
156
- progress: getPlanProgress(planPath),
157
- lastModified: new Date(stat.mtimeMs),
158
- };
159
- });
160
- }
161
- /**
162
- * Check if a boulder is currently active
163
- */
164
- export function hasBoulder(directory) {
165
- return readBoulderState(directory) !== null;
166
- }
167
- /**
168
- * Get the active plan path from boulder state
169
- */
170
- export function getActivePlanPath(directory) {
171
- const state = readBoulderState(directory);
172
- return state?.active_plan ?? null;
173
- }
174
- //# sourceMappingURL=storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/features/boulder-state/storage.ts"],"names":[],"mappings":"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"}