oh-my-claude-sisyphus 3.0.11 → 3.2.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 (231) hide show
  1. package/README.md +26 -2
  2. package/agents/build-fixer-low.md +83 -0
  3. package/agents/build-fixer.md +160 -0
  4. package/agents/code-reviewer-low.md +82 -0
  5. package/agents/code-reviewer.md +115 -0
  6. package/agents/planner.md +83 -0
  7. package/agents/security-reviewer-low.md +83 -0
  8. package/agents/security-reviewer.md +186 -0
  9. package/agents/tdd-guide-low.md +81 -0
  10. package/agents/tdd-guide.md +165 -0
  11. package/commands/autopilot.md +131 -0
  12. package/commands/build-fix.md +55 -0
  13. package/commands/cancel-autopilot.md +35 -0
  14. package/commands/code-review.md +47 -0
  15. package/commands/ralph.md +9 -0
  16. package/commands/security-review.md +47 -0
  17. package/commands/tdd.md +54 -0
  18. package/dist/__tests__/hud-agents.test.js +13 -10
  19. package/dist/__tests__/hud-agents.test.js.map +1 -1
  20. package/dist/__tests__/installer.test.js +1 -1
  21. package/dist/__tests__/skills.test.js +8 -4
  22. package/dist/__tests__/skills.test.js.map +1 -1
  23. package/dist/agents/definitions.d.ts +32 -0
  24. package/dist/agents/definitions.d.ts.map +1 -1
  25. package/dist/agents/definitions.js +93 -1
  26. package/dist/agents/definitions.js.map +1 -1
  27. package/dist/agents/delegation-validator.d.ts +31 -0
  28. package/dist/agents/delegation-validator.d.ts.map +1 -0
  29. package/dist/agents/delegation-validator.js +75 -0
  30. package/dist/agents/delegation-validator.js.map +1 -0
  31. package/dist/agents/prompt-generator.d.ts +95 -0
  32. package/dist/agents/prompt-generator.d.ts.map +1 -0
  33. package/dist/agents/prompt-generator.js +140 -0
  34. package/dist/agents/prompt-generator.js.map +1 -0
  35. package/dist/agents/prompt-sections/index.d.ts +44 -0
  36. package/dist/agents/prompt-sections/index.d.ts.map +1 -0
  37. package/dist/agents/prompt-sections/index.js +194 -0
  38. package/dist/agents/prompt-sections/index.js.map +1 -0
  39. package/dist/agents/types.d.ts +2 -0
  40. package/dist/agents/types.d.ts.map +1 -1
  41. package/dist/agents/types.js.map +1 -1
  42. package/dist/features/background-agent/manager.d.ts +10 -1
  43. package/dist/features/background-agent/manager.d.ts.map +1 -1
  44. package/dist/features/background-agent/manager.js +79 -11
  45. package/dist/features/background-agent/manager.js.map +1 -1
  46. package/dist/features/background-agent/types.d.ts +30 -1
  47. package/dist/features/background-agent/types.d.ts.map +1 -1
  48. package/dist/features/delegation-categories/index.d.ts +116 -0
  49. package/dist/features/delegation-categories/index.d.ts.map +1 -0
  50. package/dist/features/delegation-categories/index.js +287 -0
  51. package/dist/features/delegation-categories/index.js.map +1 -0
  52. package/dist/features/delegation-categories/test-categories.d.ts +7 -0
  53. package/dist/features/delegation-categories/test-categories.d.ts.map +1 -0
  54. package/dist/features/delegation-categories/test-categories.js +88 -0
  55. package/dist/features/delegation-categories/test-categories.js.map +1 -0
  56. package/dist/features/delegation-categories/types.d.ts +51 -0
  57. package/dist/features/delegation-categories/types.d.ts.map +1 -0
  58. package/dist/features/delegation-categories/types.js +8 -0
  59. package/dist/features/delegation-categories/types.js.map +1 -0
  60. package/dist/features/index.d.ts +2 -0
  61. package/dist/features/index.d.ts.map +1 -1
  62. package/dist/features/index.js +10 -0
  63. package/dist/features/index.js.map +1 -1
  64. package/dist/features/model-routing/prompts/index.d.ts +2 -0
  65. package/dist/features/model-routing/prompts/index.d.ts.map +1 -1
  66. package/dist/features/model-routing/prompts/index.js +6 -0
  67. package/dist/features/model-routing/prompts/index.js.map +1 -1
  68. package/dist/features/notepad-wisdom/extractor.d.ts +30 -0
  69. package/dist/features/notepad-wisdom/extractor.d.ts.map +1 -0
  70. package/dist/features/notepad-wisdom/extractor.js +68 -0
  71. package/dist/features/notepad-wisdom/extractor.js.map +1 -0
  72. package/dist/features/notepad-wisdom/index.d.ts +39 -0
  73. package/dist/features/notepad-wisdom/index.d.ts.map +1 -0
  74. package/dist/features/notepad-wisdom/index.js +169 -0
  75. package/dist/features/notepad-wisdom/index.js.map +1 -0
  76. package/dist/features/notepad-wisdom/types.d.ts +18 -0
  77. package/dist/features/notepad-wisdom/types.d.ts.map +1 -0
  78. package/dist/features/notepad-wisdom/types.js +7 -0
  79. package/dist/features/notepad-wisdom/types.js.map +1 -0
  80. package/dist/hooks/autopilot/__tests__/cancel.test.d.ts +2 -0
  81. package/dist/hooks/autopilot/__tests__/cancel.test.d.ts.map +1 -0
  82. package/dist/hooks/autopilot/__tests__/cancel.test.js +397 -0
  83. package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -0
  84. package/dist/hooks/autopilot/__tests__/prompts.test.d.ts +2 -0
  85. package/dist/hooks/autopilot/__tests__/prompts.test.d.ts.map +1 -0
  86. package/dist/hooks/autopilot/__tests__/prompts.test.js +74 -0
  87. package/dist/hooks/autopilot/__tests__/prompts.test.js.map +1 -0
  88. package/dist/hooks/autopilot/__tests__/state.test.d.ts +2 -0
  89. package/dist/hooks/autopilot/__tests__/state.test.d.ts.map +1 -0
  90. package/dist/hooks/autopilot/__tests__/state.test.js +75 -0
  91. package/dist/hooks/autopilot/__tests__/state.test.js.map +1 -0
  92. package/dist/hooks/autopilot/__tests__/summary.test.d.ts +2 -0
  93. package/dist/hooks/autopilot/__tests__/summary.test.d.ts.map +1 -0
  94. package/dist/hooks/autopilot/__tests__/summary.test.js +289 -0
  95. package/dist/hooks/autopilot/__tests__/summary.test.js.map +1 -0
  96. package/dist/hooks/autopilot/__tests__/transition.test.d.ts +2 -0
  97. package/dist/hooks/autopilot/__tests__/transition.test.d.ts.map +1 -0
  98. package/dist/hooks/autopilot/__tests__/transition.test.js +59 -0
  99. package/dist/hooks/autopilot/__tests__/transition.test.js.map +1 -0
  100. package/dist/hooks/autopilot/__tests__/validation.test.d.ts +2 -0
  101. package/dist/hooks/autopilot/__tests__/validation.test.d.ts.map +1 -0
  102. package/dist/hooks/autopilot/__tests__/validation.test.js +450 -0
  103. package/dist/hooks/autopilot/__tests__/validation.test.js.map +1 -0
  104. package/dist/hooks/autopilot/cancel.d.ts +42 -0
  105. package/dist/hooks/autopilot/cancel.d.ts.map +1 -0
  106. package/dist/hooks/autopilot/cancel.js +156 -0
  107. package/dist/hooks/autopilot/cancel.js.map +1 -0
  108. package/dist/hooks/autopilot/index.d.ts +15 -0
  109. package/dist/hooks/autopilot/index.d.ts.map +1 -0
  110. package/dist/hooks/autopilot/index.js +20 -0
  111. package/dist/hooks/autopilot/index.js.map +1 -0
  112. package/dist/hooks/autopilot/prompts.d.ts +37 -0
  113. package/dist/hooks/autopilot/prompts.d.ts.map +1 -0
  114. package/dist/hooks/autopilot/prompts.js +353 -0
  115. package/dist/hooks/autopilot/prompts.js.map +1 -0
  116. package/dist/hooks/autopilot/state.d.ts +67 -0
  117. package/dist/hooks/autopilot/state.d.ts.map +1 -0
  118. package/dist/hooks/autopilot/state.js +244 -0
  119. package/dist/hooks/autopilot/state.js.map +1 -0
  120. package/dist/hooks/autopilot/summary.d.ts +27 -0
  121. package/dist/hooks/autopilot/summary.d.ts.map +1 -0
  122. package/dist/hooks/autopilot/summary.js +160 -0
  123. package/dist/hooks/autopilot/summary.js.map +1 -0
  124. package/dist/hooks/autopilot/transition.d.ts +39 -0
  125. package/dist/hooks/autopilot/transition.d.ts.map +1 -0
  126. package/dist/hooks/autopilot/transition.js +216 -0
  127. package/dist/hooks/autopilot/transition.js.map +1 -0
  128. package/dist/hooks/autopilot/types.d.ts +211 -0
  129. package/dist/hooks/autopilot/types.d.ts.map +1 -0
  130. package/dist/hooks/autopilot/types.js +30 -0
  131. package/dist/hooks/autopilot/types.js.map +1 -0
  132. package/dist/hooks/autopilot/validation.d.ts +43 -0
  133. package/dist/hooks/autopilot/validation.d.ts.map +1 -0
  134. package/dist/hooks/autopilot/validation.js +191 -0
  135. package/dist/hooks/autopilot/validation.js.map +1 -0
  136. package/dist/hooks/bridge.d.ts +1 -1
  137. package/dist/hooks/bridge.d.ts.map +1 -1
  138. package/dist/hooks/bridge.js +79 -6
  139. package/dist/hooks/bridge.js.map +1 -1
  140. package/dist/hooks/index.d.ts +1 -0
  141. package/dist/hooks/index.d.ts.map +1 -1
  142. package/dist/hooks/index.js +2 -0
  143. package/dist/hooks/index.js.map +1 -1
  144. package/dist/hooks/keyword-detector/index.d.ts +1 -1
  145. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  146. package/dist/hooks/keyword-detector/index.js +39 -2
  147. package/dist/hooks/keyword-detector/index.js.map +1 -1
  148. package/dist/hooks/persistent-mode/index.d.ts +2 -1
  149. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  150. package/dist/hooks/persistent-mode/index.js +13 -3
  151. package/dist/hooks/persistent-mode/index.js.map +1 -1
  152. package/dist/hooks/ralph-loop/index.d.ts +0 -20
  153. package/dist/hooks/ralph-loop/index.d.ts.map +1 -1
  154. package/dist/hooks/ralph-loop/index.js +6 -40
  155. package/dist/hooks/ralph-loop/index.js.map +1 -1
  156. package/dist/hooks/todo-continuation/index.d.ts +31 -1
  157. package/dist/hooks/todo-continuation/index.d.ts.map +1 -1
  158. package/dist/hooks/todo-continuation/index.js +38 -1
  159. package/dist/hooks/todo-continuation/index.js.map +1 -1
  160. package/dist/hooks/ultrawork-state/index.d.ts +3 -1
  161. package/dist/hooks/ultrawork-state/index.d.ts.map +1 -1
  162. package/dist/hooks/ultrawork-state/index.js +3 -2
  163. package/dist/hooks/ultrawork-state/index.js.map +1 -1
  164. package/dist/hud/elements/autopilot.d.ts +29 -0
  165. package/dist/hud/elements/autopilot.d.ts.map +1 -0
  166. package/dist/hud/elements/autopilot.js +97 -0
  167. package/dist/hud/elements/autopilot.js.map +1 -0
  168. package/dist/hud/elements/index.d.ts +1 -0
  169. package/dist/hud/elements/index.d.ts.map +1 -1
  170. package/dist/hud/elements/index.js +1 -0
  171. package/dist/hud/elements/index.js.map +1 -1
  172. package/dist/hud/elements/limits.d.ts +1 -1
  173. package/dist/hud/elements/limits.d.ts.map +1 -1
  174. package/dist/hud/elements/limits.js +35 -2
  175. package/dist/hud/elements/limits.js.map +1 -1
  176. package/dist/hud/elements/todos.d.ts +1 -1
  177. package/dist/hud/elements/todos.js +3 -3
  178. package/dist/hud/elements/todos.js.map +1 -1
  179. package/dist/hud/render.js +6 -6
  180. package/dist/hud/render.js.map +1 -1
  181. package/dist/hud/types.d.ts +4 -0
  182. package/dist/hud/types.d.ts.map +1 -1
  183. package/dist/hud/types.js.map +1 -1
  184. package/dist/hud/usage-api.d.ts.map +1 -1
  185. package/dist/hud/usage-api.js +32 -6
  186. package/dist/hud/usage-api.js.map +1 -1
  187. package/dist/installer/hooks.d.ts +5 -0
  188. package/dist/installer/hooks.d.ts.map +1 -1
  189. package/dist/installer/hooks.js +20 -0
  190. package/dist/installer/hooks.js.map +1 -1
  191. package/dist/installer/index.d.ts +1 -1
  192. package/dist/installer/index.js +2 -2
  193. package/dist/installer/index.js.map +1 -1
  194. package/dist/tools/diagnostics/index.d.ts +29 -0
  195. package/dist/tools/diagnostics/index.d.ts.map +1 -0
  196. package/dist/tools/diagnostics/index.js +118 -0
  197. package/dist/tools/diagnostics/index.js.map +1 -0
  198. package/dist/tools/diagnostics/lsp-aggregator.d.ts +26 -0
  199. package/dist/tools/diagnostics/lsp-aggregator.d.ts.map +1 -0
  200. package/dist/tools/diagnostics/lsp-aggregator.js +99 -0
  201. package/dist/tools/diagnostics/lsp-aggregator.js.map +1 -0
  202. package/dist/tools/diagnostics/tsc-runner.d.ts +26 -0
  203. package/dist/tools/diagnostics/tsc-runner.d.ts.map +1 -0
  204. package/dist/tools/diagnostics/tsc-runner.js +70 -0
  205. package/dist/tools/diagnostics/tsc-runner.js.map +1 -0
  206. package/dist/tools/lsp-tools.d.ts +10 -0
  207. package/dist/tools/lsp-tools.d.ts.map +1 -1
  208. package/dist/tools/lsp-tools.js +43 -1
  209. package/dist/tools/lsp-tools.js.map +1 -1
  210. package/dist/tools/resume-session.d.ts +63 -0
  211. package/dist/tools/resume-session.d.ts.map +1 -0
  212. package/dist/tools/resume-session.js +106 -0
  213. package/dist/tools/resume-session.js.map +1 -0
  214. package/dist/utils/__tests__/paths.test.d.ts +2 -0
  215. package/dist/utils/__tests__/paths.test.d.ts.map +1 -0
  216. package/dist/utils/__tests__/paths.test.js +88 -0
  217. package/dist/utils/__tests__/paths.test.js.map +1 -0
  218. package/dist/utils/paths.d.ts +32 -0
  219. package/dist/utils/paths.d.ts.map +1 -0
  220. package/dist/utils/paths.js +55 -0
  221. package/dist/utils/paths.js.map +1 -0
  222. package/docs/ARCHITECTURE.md +80 -1
  223. package/docs/CLAUDE.md +97 -3
  224. package/docs/FEATURES.md +2167 -0
  225. package/docs/FULL-README.md +69 -1
  226. package/package.json +1 -1
  227. package/skills/autopilot/SKILL.md +168 -0
  228. package/skills/cancel-autopilot/SKILL.md +53 -0
  229. package/skills/omc-setup/SKILL.md +95 -0
  230. package/skills/ralph/SKILL.md +9 -0
  231. package/skills/ultrawork/SKILL.md +9 -5
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Wisdom Extractor
3
+ *
4
+ * Parses agent completion responses to extract wisdom entries.
5
+ */
6
+ /**
7
+ * Extract wisdom from agent completion response
8
+ *
9
+ * Looks for wisdom blocks in formats like:
10
+ * - <wisdom category="learnings">content</wisdom>
11
+ * - <learning>content</learning>
12
+ * - <decision>content</decision>
13
+ * - <issue>content</issue>
14
+ * - <problem>content</problem>
15
+ */
16
+ export function extractWisdomFromCompletion(response) {
17
+ const extracted = [];
18
+ // Pattern 1: <wisdom category="...">content</wisdom>
19
+ const wisdomTagRegex = /<wisdom\s+category=["'](\w+)["']>([\s\S]*?)<\/wisdom>/gi;
20
+ let match;
21
+ while ((match = wisdomTagRegex.exec(response)) !== null) {
22
+ const category = match[1].toLowerCase();
23
+ const content = match[2].trim();
24
+ if (isValidCategory(category) && content) {
25
+ extracted.push({ category, content });
26
+ }
27
+ }
28
+ // Pattern 2: <learning>, <decision>, <issue>, <problem> tags
29
+ const categories = ['learnings', 'decisions', 'issues', 'problems'];
30
+ const singularMap = {
31
+ learning: 'learnings',
32
+ decision: 'decisions',
33
+ issue: 'issues',
34
+ problem: 'problems',
35
+ };
36
+ for (const [singular, category] of Object.entries(singularMap)) {
37
+ const tagRegex = new RegExp(`<${singular}>([\s\S]*?)<\/${singular}>`, 'gi');
38
+ while ((match = tagRegex.exec(response)) !== null) {
39
+ const content = match[1].trim();
40
+ if (content) {
41
+ extracted.push({ category, content });
42
+ }
43
+ }
44
+ }
45
+ return extracted;
46
+ }
47
+ /**
48
+ * Validate wisdom category
49
+ */
50
+ function isValidCategory(category) {
51
+ return ['learnings', 'decisions', 'issues', 'problems'].includes(category);
52
+ }
53
+ /**
54
+ * Extract wisdom by category
55
+ */
56
+ export function extractWisdomByCategory(response, targetCategory) {
57
+ const allWisdom = extractWisdomFromCompletion(response);
58
+ return allWisdom
59
+ .filter(w => w.category === targetCategory)
60
+ .map(w => w.content);
61
+ }
62
+ /**
63
+ * Check if response contains wisdom
64
+ */
65
+ export function hasWisdom(response) {
66
+ return extractWisdomFromCompletion(response).length > 0;
67
+ }
68
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../../src/features/notepad-wisdom/extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAAgB;IAC1D,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,qDAAqD;IACrD,MAAM,cAAc,GAAG,yDAAyD,CAAC;IACjF,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAoB,CAAC;QAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,MAAM,UAAU,GAAqB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtF,MAAM,WAAW,GAAmC;QAClD,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,UAAU;KACpB,CAAC;IAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,iBAAiB,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC;QAE5E,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,cAA8B;IAE9B,MAAM,SAAS,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,2BAA2B,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Notepad Wisdom Module
3
+ *
4
+ * Plan-scoped notepad system for capturing learnings, decisions, issues, and problems.
5
+ * Creates wisdom files at: .omc/notepads/{plan-name}/
6
+ */
7
+ import type { PlanWisdom } from './types.js';
8
+ /**
9
+ * Initialize notepad directory for a plan
10
+ * Creates .omc/notepads/{plan-name}/ with 4 empty markdown files
11
+ */
12
+ export declare function initPlanNotepad(planName: string, directory?: string): boolean;
13
+ /**
14
+ * Read all wisdom from a plan's notepad
15
+ * Returns concatenated wisdom from all 4 categories
16
+ */
17
+ export declare function readPlanWisdom(planName: string, directory?: string): PlanWisdom;
18
+ /**
19
+ * Add a learning entry
20
+ */
21
+ export declare function addLearning(planName: string, content: string, directory?: string): boolean;
22
+ /**
23
+ * Add a decision entry
24
+ */
25
+ export declare function addDecision(planName: string, content: string, directory?: string): boolean;
26
+ /**
27
+ * Add an issue entry
28
+ */
29
+ export declare function addIssue(planName: string, content: string, directory?: string): boolean;
30
+ /**
31
+ * Add a problem entry
32
+ */
33
+ export declare function addProblem(planName: string, content: string, directory?: string): boolean;
34
+ /**
35
+ * Get a formatted string of all wisdom for a plan
36
+ */
37
+ export declare function getWisdomSummary(planName: string, directory?: string): string;
38
+ export type { WisdomEntry, WisdomCategory, PlanWisdom } from './types.js';
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/notepad-wisdom/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAA+B,UAAU,EAAE,MAAM,YAAY,CAAC;AAuC1E;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAsB,GAAG,OAAO,CA0B5F;AAsCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAsB,GAAG,UAAU,CAQ9F;AA8BD;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAsB,GAChC,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAsB,GAChC,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAsB,GAChC,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAsB,GAChC,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAsB,GAAG,MAAM,CAqB5F;AAGD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Notepad Wisdom Module
3
+ *
4
+ * Plan-scoped notepad system for capturing learnings, decisions, issues, and problems.
5
+ * Creates wisdom files at: .omc/notepads/{plan-name}/
6
+ */
7
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, appendFileSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ import { NOTEPAD_BASE_PATH } from '../boulder-state/constants.js';
10
+ // Constants
11
+ const WISDOM_FILES = {
12
+ learnings: 'learnings.md',
13
+ decisions: 'decisions.md',
14
+ issues: 'issues.md',
15
+ problems: 'problems.md',
16
+ };
17
+ /**
18
+ * Sanitize plan name to prevent path traversal
19
+ */
20
+ function sanitizePlanName(planName) {
21
+ // Remove any path separators and dangerous characters
22
+ return planName.replace(/[^a-zA-Z0-9_-]/g, '-');
23
+ }
24
+ /**
25
+ * Get the notepad directory for a specific plan
26
+ */
27
+ function getNotepadDir(planName, directory) {
28
+ const sanitized = sanitizePlanName(planName);
29
+ return join(directory, NOTEPAD_BASE_PATH, sanitized);
30
+ }
31
+ /**
32
+ * Get the full path to a wisdom file
33
+ */
34
+ function getWisdomFilePath(planName, category, directory) {
35
+ const notepadDir = getNotepadDir(planName, directory);
36
+ return join(notepadDir, WISDOM_FILES[category]);
37
+ }
38
+ /**
39
+ * Initialize notepad directory for a plan
40
+ * Creates .omc/notepads/{plan-name}/ with 4 empty markdown files
41
+ */
42
+ export function initPlanNotepad(planName, directory = process.cwd()) {
43
+ const notepadDir = getNotepadDir(planName, directory);
44
+ try {
45
+ // Create the notepad directory
46
+ if (!existsSync(notepadDir)) {
47
+ mkdirSync(notepadDir, { recursive: true });
48
+ }
49
+ // Create all wisdom files if they don't exist
50
+ const categories = ['learnings', 'decisions', 'issues', 'problems'];
51
+ for (const category of categories) {
52
+ const filePath = getWisdomFilePath(planName, category, directory);
53
+ if (!existsSync(filePath)) {
54
+ const header = `# ${category.charAt(0).toUpperCase() + category.slice(1)} - ${planName}\n\n`;
55
+ writeFileSync(filePath, header, 'utf-8');
56
+ }
57
+ }
58
+ return true;
59
+ }
60
+ catch (error) {
61
+ console.error('Failed to initialize plan notepad:', error);
62
+ return false;
63
+ }
64
+ }
65
+ /**
66
+ * Read all wisdom entries from a specific category
67
+ */
68
+ function readWisdomCategory(planName, category, directory) {
69
+ const filePath = getWisdomFilePath(planName, category, directory);
70
+ if (!existsSync(filePath)) {
71
+ return [];
72
+ }
73
+ try {
74
+ const content = readFileSync(filePath, 'utf-8');
75
+ const entries = [];
76
+ // Parse entries in format: ## YYYY-MM-DD HH:MM:SS\ncontent\n
77
+ const entryRegex = /^## (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\n([\s\S]*?)(?=\n## \d{4}-\d{2}-\d{2}|$)/gm;
78
+ let match;
79
+ while ((match = entryRegex.exec(content)) !== null) {
80
+ entries.push({
81
+ timestamp: match[1],
82
+ content: match[2].trim(),
83
+ });
84
+ }
85
+ return entries;
86
+ }
87
+ catch (error) {
88
+ console.error(`Failed to read ${category}:`, error);
89
+ return [];
90
+ }
91
+ }
92
+ /**
93
+ * Read all wisdom from a plan's notepad
94
+ * Returns concatenated wisdom from all 4 categories
95
+ */
96
+ export function readPlanWisdom(planName, directory = process.cwd()) {
97
+ return {
98
+ planName,
99
+ learnings: readWisdomCategory(planName, 'learnings', directory),
100
+ decisions: readWisdomCategory(planName, 'decisions', directory),
101
+ issues: readWisdomCategory(planName, 'issues', directory),
102
+ problems: readWisdomCategory(planName, 'problems', directory),
103
+ };
104
+ }
105
+ /**
106
+ * Add a timestamped entry to a wisdom category
107
+ */
108
+ function addWisdomEntry(planName, category, content, directory) {
109
+ const filePath = getWisdomFilePath(planName, category, directory);
110
+ // Ensure notepad is initialized
111
+ if (!existsSync(dirname(filePath))) {
112
+ initPlanNotepad(planName, directory);
113
+ }
114
+ try {
115
+ const timestamp = new Date().toISOString().replace('T', ' ').split('.')[0];
116
+ const entry = `\n## ${timestamp}\n\n${content}\n`;
117
+ appendFileSync(filePath, entry, 'utf-8');
118
+ return true;
119
+ }
120
+ catch (error) {
121
+ console.error(`Failed to add ${category} entry:`, error);
122
+ return false;
123
+ }
124
+ }
125
+ /**
126
+ * Add a learning entry
127
+ */
128
+ export function addLearning(planName, content, directory = process.cwd()) {
129
+ return addWisdomEntry(planName, 'learnings', content, directory);
130
+ }
131
+ /**
132
+ * Add a decision entry
133
+ */
134
+ export function addDecision(planName, content, directory = process.cwd()) {
135
+ return addWisdomEntry(planName, 'decisions', content, directory);
136
+ }
137
+ /**
138
+ * Add an issue entry
139
+ */
140
+ export function addIssue(planName, content, directory = process.cwd()) {
141
+ return addWisdomEntry(planName, 'issues', content, directory);
142
+ }
143
+ /**
144
+ * Add a problem entry
145
+ */
146
+ export function addProblem(planName, content, directory = process.cwd()) {
147
+ return addWisdomEntry(planName, 'problems', content, directory);
148
+ }
149
+ /**
150
+ * Get a formatted string of all wisdom for a plan
151
+ */
152
+ export function getWisdomSummary(planName, directory = process.cwd()) {
153
+ const wisdom = readPlanWisdom(planName, directory);
154
+ const sections = [];
155
+ if (wisdom.learnings.length > 0) {
156
+ sections.push('# Learnings\n\n' + wisdom.learnings.map(e => `- [${e.timestamp}] ${e.content}`).join('\n'));
157
+ }
158
+ if (wisdom.decisions.length > 0) {
159
+ sections.push('# Decisions\n\n' + wisdom.decisions.map(e => `- [${e.timestamp}] ${e.content}`).join('\n'));
160
+ }
161
+ if (wisdom.issues.length > 0) {
162
+ sections.push('# Issues\n\n' + wisdom.issues.map(e => `- [${e.timestamp}] ${e.content}`).join('\n'));
163
+ }
164
+ if (wisdom.problems.length > 0) {
165
+ sections.push('# Problems\n\n' + wisdom.problems.map(e => `- [${e.timestamp}] ${e.content}`).join('\n'));
166
+ }
167
+ return sections.join('\n\n');
168
+ }
169
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/notepad-wisdom/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Notepad Wisdom Types
3
+ *
4
+ * Types for plan-scoped notepad wisdom system.
5
+ */
6
+ export interface WisdomEntry {
7
+ timestamp: string;
8
+ content: string;
9
+ }
10
+ export type WisdomCategory = 'learnings' | 'decisions' | 'issues' | 'problems';
11
+ export interface PlanWisdom {
12
+ planName: string;
13
+ learnings: WisdomEntry[];
14
+ decisions: WisdomEntry[];
15
+ issues: WisdomEntry[];
16
+ problems: WisdomEntry[];
17
+ }
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/notepad-wisdom/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/E,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Notepad Wisdom Types
3
+ *
4
+ * Types for plan-scoped notepad wisdom system.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/features/notepad-wisdom/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cancel.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.test.d.ts","sourceRoot":"","sources":["../../../../src/hooks/autopilot/__tests__/cancel.test.ts"],"names":[],"mappings":""}