oh-my-claude-sisyphus 3.8.16 → 3.9.1

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 (178) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.mcp.json +1 -1
  4. package/agents/analyst.md +41 -0
  5. package/agents/architect.md +47 -2
  6. package/agents/critic.md +42 -0
  7. package/agents/deep-executor.md +193 -0
  8. package/agents/planner.md +82 -0
  9. package/bridge/mcp-server.cjs +181 -181
  10. package/commands/build-fix.md +3 -3
  11. package/commands/ralph.md +3 -3
  12. package/commands/ultraqa.md +4 -4
  13. package/commands/ultrawork.md +3 -3
  14. package/dist/__tests__/agent-registry.test.js +1 -1
  15. package/dist/__tests__/installer.test.js +8 -8
  16. package/dist/__tests__/installer.test.js.map +1 -1
  17. package/dist/__tests__/omc-tools-server.test.js +2 -2
  18. package/dist/__tests__/omc-tools-server.test.js.map +1 -1
  19. package/dist/__tests__/skills.test.js +5 -4
  20. package/dist/__tests__/skills.test.js.map +1 -1
  21. package/dist/agents/deep-executor.d.ts +15 -0
  22. package/dist/agents/deep-executor.d.ts.map +1 -0
  23. package/dist/agents/deep-executor.js +47 -0
  24. package/dist/agents/deep-executor.js.map +1 -0
  25. package/dist/agents/definitions.d.ts +16 -1
  26. package/dist/agents/definitions.d.ts.map +1 -1
  27. package/dist/agents/definitions.js +26 -1
  28. package/dist/agents/definitions.js.map +1 -1
  29. package/dist/agents/index.d.ts +1 -0
  30. package/dist/agents/index.d.ts.map +1 -1
  31. package/dist/agents/index.js +1 -0
  32. package/dist/agents/index.js.map +1 -1
  33. package/dist/cli/commands/doctor-conflicts.d.ts +55 -0
  34. package/dist/cli/commands/doctor-conflicts.d.ts.map +1 -0
  35. package/dist/cli/commands/doctor-conflicts.js +261 -0
  36. package/dist/cli/commands/doctor-conflicts.js.map +1 -0
  37. package/dist/cli/index.js +16 -1
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/features/auto-update.d.ts +12 -0
  40. package/dist/features/auto-update.d.ts.map +1 -1
  41. package/dist/features/auto-update.js +4 -1
  42. package/dist/features/auto-update.js.map +1 -1
  43. package/dist/features/background-tasks.js +4 -4
  44. package/dist/features/context-injector/types.d.ts +1 -1
  45. package/dist/features/context-injector/types.d.ts.map +1 -1
  46. package/dist/features/task-decomposer/index.js +3 -3
  47. package/dist/features/task-decomposer/index.js.map +1 -1
  48. package/dist/features/verification/index.d.ts +3 -3
  49. package/dist/features/verification/index.js +3 -3
  50. package/dist/features/verification/index.js.map +1 -1
  51. package/dist/hooks/__tests__/bridge.test.d.ts +2 -0
  52. package/dist/hooks/__tests__/bridge.test.d.ts.map +1 -0
  53. package/dist/hooks/__tests__/bridge.test.js +199 -0
  54. package/dist/hooks/__tests__/bridge.test.js.map +1 -0
  55. package/dist/hooks/autopilot/state.js +3 -3
  56. package/dist/hooks/beads-context/__tests__/index.test.d.ts +2 -0
  57. package/dist/hooks/beads-context/__tests__/index.test.d.ts.map +1 -0
  58. package/dist/hooks/beads-context/__tests__/index.test.js +150 -0
  59. package/dist/hooks/beads-context/__tests__/index.test.js.map +1 -0
  60. package/dist/hooks/beads-context/constants.d.ts +3 -0
  61. package/dist/hooks/beads-context/constants.d.ts.map +1 -0
  62. package/dist/hooks/beads-context/constants.js +35 -0
  63. package/dist/hooks/beads-context/constants.js.map +1 -0
  64. package/dist/hooks/beads-context/index.d.ts +21 -0
  65. package/dist/hooks/beads-context/index.d.ts.map +1 -0
  66. package/dist/hooks/beads-context/index.js +62 -0
  67. package/dist/hooks/beads-context/index.js.map +1 -0
  68. package/dist/hooks/beads-context/types.d.ts +7 -0
  69. package/dist/hooks/beads-context/types.d.ts.map +1 -0
  70. package/dist/hooks/beads-context/types.js +2 -0
  71. package/dist/hooks/beads-context/types.js.map +1 -0
  72. package/dist/hooks/bridge.d.ts +4 -0
  73. package/dist/hooks/bridge.d.ts.map +1 -1
  74. package/dist/hooks/bridge.js +76 -23
  75. package/dist/hooks/bridge.js.map +1 -1
  76. package/dist/hooks/clear-suggestions/constants.d.ts +54 -0
  77. package/dist/hooks/clear-suggestions/constants.d.ts.map +1 -0
  78. package/dist/hooks/clear-suggestions/constants.js +102 -0
  79. package/dist/hooks/clear-suggestions/constants.js.map +1 -0
  80. package/dist/hooks/clear-suggestions/index.d.ts +61 -0
  81. package/dist/hooks/clear-suggestions/index.d.ts.map +1 -0
  82. package/dist/hooks/clear-suggestions/index.js +282 -0
  83. package/dist/hooks/clear-suggestions/index.js.map +1 -0
  84. package/dist/hooks/clear-suggestions/triggers.d.ts +65 -0
  85. package/dist/hooks/clear-suggestions/triggers.d.ts.map +1 -0
  86. package/dist/hooks/clear-suggestions/triggers.js +222 -0
  87. package/dist/hooks/clear-suggestions/triggers.js.map +1 -0
  88. package/dist/hooks/clear-suggestions/types.d.ts +92 -0
  89. package/dist/hooks/clear-suggestions/types.d.ts.map +1 -0
  90. package/dist/hooks/clear-suggestions/types.js +9 -0
  91. package/dist/hooks/clear-suggestions/types.js.map +1 -0
  92. package/dist/hooks/index.d.ts +1 -0
  93. package/dist/hooks/index.d.ts.map +1 -1
  94. package/dist/hooks/index.js +3 -0
  95. package/dist/hooks/index.js.map +1 -1
  96. package/dist/hooks/permission-handler/index.d.ts.map +1 -1
  97. package/dist/hooks/permission-handler/index.js +3 -1
  98. package/dist/hooks/permission-handler/index.js.map +1 -1
  99. package/dist/hooks/setup/index.d.ts.map +1 -1
  100. package/dist/hooks/setup/index.js +12 -5
  101. package/dist/hooks/setup/index.js.map +1 -1
  102. package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
  103. package/dist/hooks/subagent-tracker/index.js +25 -9
  104. package/dist/hooks/subagent-tracker/index.js.map +1 -1
  105. package/dist/hooks/ultraqa/index.js +4 -4
  106. package/dist/hooks/ultraqa/index.js.map +1 -1
  107. package/dist/index.js +1 -1
  108. package/dist/index.js.map +1 -1
  109. package/dist/installer/__tests__/claude-md-merge.test.d.ts +6 -0
  110. package/dist/installer/__tests__/claude-md-merge.test.d.ts.map +1 -0
  111. package/dist/installer/__tests__/claude-md-merge.test.js +220 -0
  112. package/dist/installer/__tests__/claude-md-merge.test.js.map +1 -0
  113. package/dist/installer/__tests__/safe-installer.test.d.ts +6 -0
  114. package/dist/installer/__tests__/safe-installer.test.d.ts.map +1 -0
  115. package/dist/installer/__tests__/safe-installer.test.js +172 -0
  116. package/dist/installer/__tests__/safe-installer.test.js.map +1 -0
  117. package/dist/installer/hooks.d.ts.map +1 -1
  118. package/dist/installer/hooks.js +3 -1
  119. package/dist/installer/hooks.js.map +1 -1
  120. package/dist/installer/index.d.ts +27 -1
  121. package/dist/installer/index.d.ts.map +1 -1
  122. package/dist/installer/index.js +209 -85
  123. package/dist/installer/index.js.map +1 -1
  124. package/dist/mcp/omc-tools-server.d.ts +1 -1
  125. package/dist/mcp/omc-tools-server.d.ts.map +1 -1
  126. package/dist/mcp/omc-tools-server.js +3 -3
  127. package/dist/mcp/omc-tools-server.js.map +1 -1
  128. package/dist/mcp/standalone-server.js +1 -1
  129. package/dist/mcp/standalone-server.js.map +1 -1
  130. package/dist/verification/tier-selector.d.ts +40 -0
  131. package/dist/verification/tier-selector.d.ts.map +1 -0
  132. package/dist/verification/tier-selector.js +95 -0
  133. package/dist/verification/tier-selector.js.map +1 -0
  134. package/dist/verification/tier-selector.test.d.ts +2 -0
  135. package/dist/verification/tier-selector.test.d.ts.map +1 -0
  136. package/dist/verification/tier-selector.test.js +282 -0
  137. package/dist/verification/tier-selector.test.js.map +1 -0
  138. package/docs/AGENTS.md +1 -1
  139. package/docs/CLAUDE.md +90 -378
  140. package/docs/partials/agent-tiers.md +165 -0
  141. package/docs/partials/features.md +131 -0
  142. package/docs/partials/mode-hierarchy.md +120 -0
  143. package/docs/partials/mode-selection-guide.md +82 -0
  144. package/docs/partials/verification-tiers.md +107 -0
  145. package/docs/shared/agent-tiers.md +165 -0
  146. package/docs/shared/features.md +131 -0
  147. package/docs/shared/mode-hierarchy.md +120 -0
  148. package/docs/shared/mode-selection-guide.md +82 -0
  149. package/docs/shared/verification-tiers.md +107 -0
  150. package/package.json +4 -3
  151. package/scripts/compose-docs.mjs +44 -0
  152. package/scripts/keyword-detector.mjs +13 -3
  153. package/skills/build-fix/SKILL.md +8 -8
  154. package/skills/deep-executor/SKILL.md +50 -0
  155. package/skills/deepinit/SKILL.md +2 -2
  156. package/skills/ecomode/SKILL.md +58 -103
  157. package/skills/omc-setup/SKILL.md +197 -20
  158. package/skills/plan/SKILL.md +62 -0
  159. package/skills/project-session-manager/SKILL.md +87 -4
  160. package/skills/project-session-manager/lib/config.sh +54 -5
  161. package/skills/project-session-manager/lib/parse.sh +65 -11
  162. package/skills/project-session-manager/lib/providers/github.sh +52 -0
  163. package/skills/project-session-manager/lib/providers/interface.sh +76 -0
  164. package/skills/project-session-manager/lib/providers/jira.sh +79 -0
  165. package/skills/project-session-manager/lib/session.sh +49 -12
  166. package/skills/project-session-manager/lib/worktree.sh +37 -4
  167. package/skills/project-session-manager/psm.sh +116 -51
  168. package/skills/ralph/SKILL.md +44 -30
  169. package/skills/tdd/SKILL.md +2 -2
  170. package/skills/ultrapilot/SKILL.md +3 -3
  171. package/skills/ultraqa/SKILL.md +4 -4
  172. package/skills/ultrawork/SKILL.md +59 -69
  173. package/templates/hooks/keyword-detector.mjs +21 -13
  174. package/templates/hooks/lib/stdin.mjs +62 -0
  175. package/templates/hooks/persistent-mode.mjs +7 -8
  176. package/templates/hooks/post-tool-use.mjs +8 -10
  177. package/templates/hooks/pre-tool-use.mjs +9 -6
  178. package/templates/hooks/session-start.mjs +7 -8
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Clear Suggestions Constants
3
+ *
4
+ * Messages, thresholds, and configuration defaults for the
5
+ * adaptive /clear suggestions system.
6
+ */
7
+ /**
8
+ * Cooldown period between clear suggestions (5 minutes)
9
+ */
10
+ export const CLEAR_SUGGESTION_COOLDOWN_MS = 5 * 60 * 1000;
11
+ /**
12
+ * Maximum suggestions per session
13
+ */
14
+ export const MAX_CLEAR_SUGGESTIONS = 2;
15
+ /**
16
+ * Context usage threshold to trigger context+artifacts suggestion (50%)
17
+ */
18
+ export const CONTEXT_THRESHOLD = 0.50;
19
+ /**
20
+ * Consecutive failure count for degradation signal
21
+ */
22
+ export const FAILURE_THRESHOLD = 3;
23
+ /**
24
+ * Failure window - only count failures within this window (10 minutes)
25
+ */
26
+ export const FAILURE_WINDOW_MS = 10 * 60 * 1000;
27
+ /**
28
+ * Message for workflow completion trigger
29
+ */
30
+ export const WORKFLOW_COMPLETE_MESSAGE = (modeName, artifacts) => `SESSION RESET SUGGESTION
31
+
32
+ The **${modeName}** workflow has completed successfully. Starting fresh with /clear would give you:
33
+ - A clean context window for your next task
34
+ - Faster, more reliable responses
35
+ - No stale context from the completed workflow
36
+
37
+ ${artifacts}
38
+ Type **/clear** to start fresh, or continue working in this session.
39
+ `;
40
+ /**
41
+ * Message for architect verification trigger
42
+ */
43
+ export const ARCHITECT_VERIFIED_MESSAGE = (artifacts) => `SESSION RESET SUGGESTION
44
+
45
+ Architect verification has **passed** - your work is approved. This is an ideal moment to reset:
46
+ - The verification cycle consumed significant context
47
+ - Your completed work is saved in project files
48
+ - A fresh session will be more responsive for the next task
49
+
50
+ ${artifacts}
51
+ Type **/clear** to start fresh, or continue working in this session.
52
+ `;
53
+ /**
54
+ * Message for planning complete trigger
55
+ */
56
+ export const PLANNING_COMPLETE_MESSAGE = (artifacts) => `SESSION RESET SUGGESTION
57
+
58
+ Planning is **complete** and your plan has been saved to disk. Consider resetting:
59
+ - The planning interview used substantial context
60
+ - Your plan files are preserved and will be auto-loaded
61
+ - Execution will be more reliable in a fresh session
62
+
63
+ ${artifacts}
64
+ Type **/clear** to start fresh, or continue working in this session.
65
+ `;
66
+ /**
67
+ * Message for context+artifacts trigger
68
+ */
69
+ export const CONTEXT_ARTIFACTS_MESSAGE = (usagePct, artifacts) => `SESSION RESET SUGGESTION
70
+
71
+ Context usage is at **${usagePct}%** but your progress is safely preserved in project files. Consider resetting:
72
+ - High context usage can cause degraded performance
73
+ - /clear reloads your CLAUDE.md and project context automatically
74
+ - Your artifacts will be available in the new session
75
+
76
+ ${artifacts}
77
+ Type **/clear** to start fresh, or use **/compact** if you want to continue this session.
78
+ `;
79
+ /**
80
+ * Message for degradation signals trigger
81
+ */
82
+ export const DEGRADATION_SIGNALS_MESSAGE = (failureCount, artifacts) => `SESSION RESET SUGGESTION
83
+
84
+ Detected **${failureCount} consecutive failures** which may indicate context degradation. A fresh start could help:
85
+ - Accumulated context can cause tool call failures
86
+ - /clear gives you a clean slate while preserving all files
87
+ - Your work is saved on disk and will not be lost
88
+
89
+ ${artifacts}
90
+ Type **/clear** to start fresh, or continue troubleshooting in this session.
91
+ `;
92
+ /**
93
+ * Format preserved artifacts into a readable list
94
+ */
95
+ export function formatPreservedArtifacts(artifacts) {
96
+ if (artifacts.length === 0) {
97
+ return '';
98
+ }
99
+ const lines = artifacts.map(a => ` - ${a.description}`);
100
+ return `**Preserved artifacts** (available after /clear):\n${lines.join('\n')}\n`;
101
+ }
102
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/hooks/clear-suggestions/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAU,EAAE,CACvF;;QAEM,QAAQ;;;;;EAKd,SAAS;;CAEV,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAiB,EAAU,EAAE,CACtE;;;;;;;EAOA,SAAS;;CAEV,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,SAAiB,EAAU,EAAE,CACrE;;;;;;;EAOA,SAAS;;CAEV,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAU,EAAE,CACvF;;wBAEsB,QAAQ;;;;;EAK9B,SAAS;;CAEV,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,YAAoB,EAAE,SAAiB,EAAU,EAAE,CAC7F;;aAEW,YAAY;;;;;EAKvB,SAAS;;CAEV,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAuD;IAEvD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,OAAO,sDAAsD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpF,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Clear Suggestions Hook
3
+ *
4
+ * Adaptive /clear suggestions system that intelligently recommends session
5
+ * resets when it would improve reliability and performance.
6
+ *
7
+ * Features:
8
+ * - 5 semantic triggers for context-aware suggestions
9
+ * - 5-minute cooldown between suggestions
10
+ * - Maximum 2 suggestions per session
11
+ * - Non-intrusive messaging explaining WHY clearing helps
12
+ * - Lists preserved artifacts (plans, notes, decisions)
13
+ *
14
+ * Complements (doesn't replace) existing /compact suggestions.
15
+ */
16
+ import type { ClearSuggestionState, ClearSuggestionConfig, ClearSuggestionResult, ClearSuggestionInput } from './types.js';
17
+ /**
18
+ * Main check function - evaluates all triggers and returns suggestion if appropriate
19
+ */
20
+ export declare function checkClearSuggestion(input: ClearSuggestionInput, config?: ClearSuggestionConfig): ClearSuggestionResult;
21
+ /**
22
+ * Mark planning as just completed (called by plan/ralplan skills)
23
+ */
24
+ export declare function markPlanningComplete(sessionId: string): void;
25
+ /**
26
+ * Reset session state (called on /clear)
27
+ */
28
+ export declare function resetClearSuggestionState(sessionId: string): void;
29
+ /**
30
+ * Get current session stats (for debugging)
31
+ */
32
+ export declare function getClearSuggestionStats(sessionId: string): ClearSuggestionState | null;
33
+ /**
34
+ * Clean up stale sessions (older than 30 minutes)
35
+ */
36
+ export declare function cleanupStaleSessions(): void;
37
+ /**
38
+ * Create a clear suggestion hook instance
39
+ */
40
+ export declare function createClearSuggestionHook(config?: ClearSuggestionConfig): {
41
+ /**
42
+ * PostToolUse - Check if we should suggest /clear
43
+ */
44
+ postToolUse: (input: {
45
+ tool_name: string;
46
+ session_id: string;
47
+ directory: string;
48
+ tool_response?: string;
49
+ context_usage_ratio?: number;
50
+ }) => string | null;
51
+ /**
52
+ * Stop event - Reset failure tracking
53
+ */
54
+ stop: (input: {
55
+ session_id: string;
56
+ }) => void;
57
+ };
58
+ export type { ClearSuggestionTrigger, ClearSuggestionState, ClearSuggestionConfig, ClearSuggestionResult, ClearSuggestionInput, PreservedArtifact, } from './types.js';
59
+ export { CLEAR_SUGGESTION_COOLDOWN_MS, MAX_CLEAR_SUGGESTIONS, CONTEXT_THRESHOLD, FAILURE_THRESHOLD, } from './constants.js';
60
+ export { detectWorkflowComplete, detectArchitectVerified, detectPlanningComplete, detectContextWithArtifacts, detectDegradationSignals, isToolFailure, discoverPreservedArtifacts, checkModeJustCompleted, checkArchitectJustVerified, } from './triggers.js';
61
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/clear-suggestions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAEV,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,YAAY,CAAC;AA8JpB;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,CAAC,EAAE,qBAAqB,GAC7B,qBAAqB,CAmGvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAEtF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAS3C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,qBAAqB;IAEpE;;OAEG;yBACkB;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,KAAG,MAAM,GAAG,IAAI;IAmBjB;;OAEG;kBACW;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,KAAG,IAAI;EAI9C;AAGD,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,aAAa,EACb,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,eAAe,CAAC"}
@@ -0,0 +1,282 @@
1
+ /**
2
+ * Clear Suggestions Hook
3
+ *
4
+ * Adaptive /clear suggestions system that intelligently recommends session
5
+ * resets when it would improve reliability and performance.
6
+ *
7
+ * Features:
8
+ * - 5 semantic triggers for context-aware suggestions
9
+ * - 5-minute cooldown between suggestions
10
+ * - Maximum 2 suggestions per session
11
+ * - Non-intrusive messaging explaining WHY clearing helps
12
+ * - Lists preserved artifacts (plans, notes, decisions)
13
+ *
14
+ * Complements (doesn't replace) existing /compact suggestions.
15
+ */
16
+ import { CLEAR_SUGGESTION_COOLDOWN_MS, MAX_CLEAR_SUGGESTIONS, WORKFLOW_COMPLETE_MESSAGE, ARCHITECT_VERIFIED_MESSAGE, PLANNING_COMPLETE_MESSAGE, CONTEXT_ARTIFACTS_MESSAGE, DEGRADATION_SIGNALS_MESSAGE, formatPreservedArtifacts, } from './constants.js';
17
+ import { detectWorkflowComplete, detectArchitectVerified, detectPlanningComplete, detectContextWithArtifacts, detectDegradationSignals, isToolFailure, discoverPreservedArtifacts, checkModeJustCompleted, checkArchitectJustVerified, } from './triggers.js';
18
+ import { isAnyModeActive } from '../mode-registry/index.js';
19
+ /**
20
+ * In-memory session state tracking
21
+ */
22
+ const sessionStates = new Map();
23
+ /**
24
+ * Get or create session state
25
+ */
26
+ function getSessionState(sessionId) {
27
+ let state = sessionStates.get(sessionId);
28
+ if (!state) {
29
+ state = {
30
+ sessionId,
31
+ lastSuggestionTime: 0,
32
+ suggestionCount: 0,
33
+ consecutiveFailures: 0,
34
+ failureTimestamps: [],
35
+ };
36
+ sessionStates.set(sessionId, state);
37
+ }
38
+ return state;
39
+ }
40
+ /**
41
+ * Update session state
42
+ */
43
+ function updateSessionState(sessionId, updates) {
44
+ const state = getSessionState(sessionId);
45
+ Object.assign(state, updates);
46
+ }
47
+ /**
48
+ * Record a suggestion was shown
49
+ */
50
+ function recordSuggestion(sessionId) {
51
+ const state = getSessionState(sessionId);
52
+ state.lastSuggestionTime = Date.now();
53
+ state.suggestionCount++;
54
+ // Clear one-time flags
55
+ state.workflowJustCompleted = undefined;
56
+ state.architectJustVerified = undefined;
57
+ state.planningJustCompleted = undefined;
58
+ }
59
+ /**
60
+ * Record a tool failure
61
+ */
62
+ function recordFailure(sessionId) {
63
+ const state = getSessionState(sessionId);
64
+ state.consecutiveFailures++;
65
+ state.failureTimestamps.push(Date.now());
66
+ // Keep only recent timestamps (last 10)
67
+ if (state.failureTimestamps.length > 10) {
68
+ state.failureTimestamps = state.failureTimestamps.slice(-10);
69
+ }
70
+ }
71
+ /**
72
+ * Reset failure count (called on successful tool execution)
73
+ */
74
+ function resetFailures(sessionId) {
75
+ const state = getSessionState(sessionId);
76
+ state.consecutiveFailures = 0;
77
+ }
78
+ /**
79
+ * Check if cooldown has elapsed
80
+ */
81
+ function isCooldownElapsed(sessionId, config) {
82
+ const state = getSessionState(sessionId);
83
+ const cooldownMs = config?.cooldownMs ?? CLEAR_SUGGESTION_COOLDOWN_MS;
84
+ const elapsed = Date.now() - state.lastSuggestionTime;
85
+ return elapsed >= cooldownMs;
86
+ }
87
+ /**
88
+ * Check if max suggestions reached
89
+ */
90
+ function isMaxSuggestionsReached(sessionId, config) {
91
+ const state = getSessionState(sessionId);
92
+ const maxSuggestions = config?.maxSuggestions ?? MAX_CLEAR_SUGGESTIONS;
93
+ return state.suggestionCount >= maxSuggestions;
94
+ }
95
+ /**
96
+ * Generate message for a trigger
97
+ */
98
+ function generateMessage(trigger, artifacts, state, contextUsageRatio) {
99
+ const artifactsText = formatPreservedArtifacts(artifacts.map(a => ({ type: a.type, description: a.description })));
100
+ switch (trigger) {
101
+ case 'workflow_complete': {
102
+ const modeName = state.workflowJustCompleted || 'workflow';
103
+ const modeDisplayNames = {
104
+ ralph: 'Ralph',
105
+ autopilot: 'Autopilot',
106
+ ultrawork: 'Ultrawork',
107
+ ultraqa: 'UltraQA',
108
+ ultrapilot: 'Ultrapilot',
109
+ swarm: 'Swarm',
110
+ pipeline: 'Pipeline',
111
+ ecomode: 'Ecomode',
112
+ };
113
+ const displayName = modeDisplayNames[modeName] || modeName;
114
+ return WORKFLOW_COMPLETE_MESSAGE(displayName, artifactsText);
115
+ }
116
+ case 'architect_verified':
117
+ return ARCHITECT_VERIFIED_MESSAGE(artifactsText);
118
+ case 'planning_complete':
119
+ return PLANNING_COMPLETE_MESSAGE(artifactsText);
120
+ case 'context_artifacts': {
121
+ const usagePct = Math.round((contextUsageRatio ?? 0.5) * 100);
122
+ return CONTEXT_ARTIFACTS_MESSAGE(usagePct, artifactsText);
123
+ }
124
+ case 'degradation_signals': {
125
+ const failureCount = state.consecutiveFailures;
126
+ return DEGRADATION_SIGNALS_MESSAGE(failureCount, artifactsText);
127
+ }
128
+ default:
129
+ return '';
130
+ }
131
+ }
132
+ /**
133
+ * Main check function - evaluates all triggers and returns suggestion if appropriate
134
+ */
135
+ export function checkClearSuggestion(input, config) {
136
+ const { sessionId, directory, toolName, toolOutput, contextUsageRatio } = input;
137
+ // Check if disabled
138
+ if (config?.enabled === false) {
139
+ return { shouldSuggest: false, skipReason: 'disabled' };
140
+ }
141
+ // Don't suggest /clear while an OMC mode is actively running
142
+ // Only suggest after the mode completes
143
+ if (isAnyModeActive(directory)) {
144
+ return { shouldSuggest: false, skipReason: 'mode_active' };
145
+ }
146
+ // Check max suggestions
147
+ if (isMaxSuggestionsReached(sessionId, config)) {
148
+ return { shouldSuggest: false, skipReason: 'max_suggestions_reached' };
149
+ }
150
+ // Check cooldown
151
+ if (!isCooldownElapsed(sessionId, config)) {
152
+ return { shouldSuggest: false, skipReason: 'cooldown_active' };
153
+ }
154
+ // Get session state
155
+ const state = getSessionState(sessionId);
156
+ // Track tool failures/successes
157
+ if (toolName && toolOutput) {
158
+ if (isToolFailure(toolName, toolOutput)) {
159
+ recordFailure(sessionId);
160
+ }
161
+ else {
162
+ resetFailures(sessionId);
163
+ }
164
+ }
165
+ // Check for mode completions
166
+ const completedModes = ['ralph', 'autopilot', 'ultrawork', 'ultraqa'];
167
+ for (const mode of completedModes) {
168
+ if (checkModeJustCompleted(directory, mode)) {
169
+ updateSessionState(sessionId, { workflowJustCompleted: mode });
170
+ break;
171
+ }
172
+ }
173
+ // Check for architect verification
174
+ if (checkArchitectJustVerified(directory)) {
175
+ updateSessionState(sessionId, { architectJustVerified: true });
176
+ }
177
+ // Discover preserved artifacts
178
+ const artifacts = discoverPreservedArtifacts(directory);
179
+ // Evaluate triggers in priority order
180
+ // Priority: workflow_complete > architect_verified > planning_complete > context_artifacts > degradation_signals
181
+ let trigger = null;
182
+ // 1. Workflow complete (highest priority - clear win)
183
+ trigger = detectWorkflowComplete(state);
184
+ if (trigger) {
185
+ const message = generateMessage(trigger, artifacts, state, contextUsageRatio);
186
+ recordSuggestion(sessionId);
187
+ return { shouldSuggest: true, trigger, message, preservedArtifacts: artifacts };
188
+ }
189
+ // 2. Architect verified
190
+ trigger = detectArchitectVerified(state);
191
+ if (trigger) {
192
+ const message = generateMessage(trigger, artifacts, state, contextUsageRatio);
193
+ recordSuggestion(sessionId);
194
+ return { shouldSuggest: true, trigger, message, preservedArtifacts: artifacts };
195
+ }
196
+ // 3. Planning complete
197
+ trigger = detectPlanningComplete(state);
198
+ if (trigger) {
199
+ const message = generateMessage(trigger, artifacts, state, contextUsageRatio);
200
+ recordSuggestion(sessionId);
201
+ return { shouldSuggest: true, trigger, message, preservedArtifacts: artifacts };
202
+ }
203
+ // 4. Context >50% with artifacts
204
+ trigger = detectContextWithArtifacts(contextUsageRatio, artifacts, config);
205
+ if (trigger) {
206
+ const message = generateMessage(trigger, artifacts, state, contextUsageRatio);
207
+ recordSuggestion(sessionId);
208
+ return { shouldSuggest: true, trigger, message, preservedArtifacts: artifacts };
209
+ }
210
+ // 5. Degradation signals (lowest priority - only if nothing else triggered)
211
+ trigger = detectDegradationSignals(state, config);
212
+ if (trigger) {
213
+ const message = generateMessage(trigger, artifacts, state, contextUsageRatio);
214
+ recordSuggestion(sessionId);
215
+ return { shouldSuggest: true, trigger, message, preservedArtifacts: artifacts };
216
+ }
217
+ return { shouldSuggest: false, skipReason: 'no_triggers_fired' };
218
+ }
219
+ /**
220
+ * Mark planning as just completed (called by plan/ralplan skills)
221
+ */
222
+ export function markPlanningComplete(sessionId) {
223
+ updateSessionState(sessionId, { planningJustCompleted: true });
224
+ }
225
+ /**
226
+ * Reset session state (called on /clear)
227
+ */
228
+ export function resetClearSuggestionState(sessionId) {
229
+ sessionStates.delete(sessionId);
230
+ }
231
+ /**
232
+ * Get current session stats (for debugging)
233
+ */
234
+ export function getClearSuggestionStats(sessionId) {
235
+ return sessionStates.get(sessionId) ?? null;
236
+ }
237
+ /**
238
+ * Clean up stale sessions (older than 30 minutes)
239
+ */
240
+ export function cleanupStaleSessions() {
241
+ const now = Date.now();
242
+ const maxAge = 30 * 60 * 1000; // 30 minutes
243
+ for (const [sessionId, state] of sessionStates) {
244
+ if (state.lastSuggestionTime > 0 && now - state.lastSuggestionTime > maxAge) {
245
+ sessionStates.delete(sessionId);
246
+ }
247
+ }
248
+ }
249
+ /**
250
+ * Create a clear suggestion hook instance
251
+ */
252
+ export function createClearSuggestionHook(config) {
253
+ return {
254
+ /**
255
+ * PostToolUse - Check if we should suggest /clear
256
+ */
257
+ postToolUse: (input) => {
258
+ const result = checkClearSuggestion({
259
+ sessionId: input.session_id,
260
+ directory: input.directory,
261
+ toolName: input.tool_name,
262
+ toolOutput: input.tool_response,
263
+ contextUsageRatio: input.context_usage_ratio,
264
+ }, config);
265
+ if (result.shouldSuggest && result.message) {
266
+ return result.message;
267
+ }
268
+ return null;
269
+ },
270
+ /**
271
+ * Stop event - Reset failure tracking
272
+ */
273
+ stop: (input) => {
274
+ resetFailures(input.session_id);
275
+ },
276
+ };
277
+ }
278
+ // Re-export constants
279
+ export { CLEAR_SUGGESTION_COOLDOWN_MS, MAX_CLEAR_SUGGESTIONS, CONTEXT_THRESHOLD, FAILURE_THRESHOLD, } from './constants.js';
280
+ // Re-export trigger functions for testing
281
+ export { detectWorkflowComplete, detectArchitectVerified, detectPlanningComplete, detectContextWithArtifacts, detectDegradationSignals, isToolFailure, discoverPreservedArtifacts, checkModeJustCompleted, checkArchitectJustVerified, } from './triggers.js';
282
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/clear-suggestions/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Clear Suggestions Trigger Detection
3
+ *
4
+ * Implements the 5 semantic triggers that determine when to suggest /clear:
5
+ * 1. Workflow complete - ralph/autopilot/ultrawork finished
6
+ * 2. Architect verified - architect approval passed
7
+ * 3. Planning complete - ralplan/plan skill completed
8
+ * 4. Context >50% + artifacts - high context but plan files exist
9
+ * 5. Degradation signals - 3+ consecutive failures
10
+ */
11
+ import type { ClearSuggestionTrigger, ClearSuggestionState, ClearSuggestionConfig, PreservedArtifact } from './types.js';
12
+ /**
13
+ * Detect if a workflow (ralph/autopilot/ultrawork) just completed.
14
+ *
15
+ * Checks state files for modes that transitioned from active to inactive
16
+ * within the current hook call.
17
+ */
18
+ export declare function detectWorkflowComplete(state: ClearSuggestionState): ClearSuggestionTrigger | null;
19
+ /**
20
+ * Detect if architect verification just passed.
21
+ *
22
+ * Reads ralph verification state to see if architect approved.
23
+ */
24
+ export declare function detectArchitectVerified(state: ClearSuggestionState): ClearSuggestionTrigger | null;
25
+ /**
26
+ * Detect if planning just completed.
27
+ *
28
+ * Checks if a plan skill or ralplan skill just finished.
29
+ */
30
+ export declare function detectPlanningComplete(state: ClearSuggestionState): ClearSuggestionTrigger | null;
31
+ /**
32
+ * Detect if context is above threshold and artifacts exist to reload.
33
+ *
34
+ * This trigger fires when context is high but the user has saved artifacts
35
+ * (plans, PRDs, notes) that would automatically reload after /clear.
36
+ */
37
+ export declare function detectContextWithArtifacts(contextUsageRatio: number | undefined, artifacts: PreservedArtifact[], config?: ClearSuggestionConfig): ClearSuggestionTrigger | null;
38
+ /**
39
+ * Detect degradation signals from consecutive failures.
40
+ *
41
+ * Tracks recent tool failures and triggers when the threshold is exceeded.
42
+ */
43
+ export declare function detectDegradationSignals(state: ClearSuggestionState, config?: ClearSuggestionConfig): ClearSuggestionTrigger | null;
44
+ /**
45
+ * Check if a tool output indicates a failure
46
+ */
47
+ export declare function isToolFailure(toolName: string, toolOutput: string): boolean;
48
+ /**
49
+ * Discover preserved artifacts in the project directory.
50
+ *
51
+ * Scans for plans, PRDs, specs, progress files, notepads, and wisdom files
52
+ * that would survive a /clear and be available in the new session.
53
+ */
54
+ export declare function discoverPreservedArtifacts(directory: string): PreservedArtifact[];
55
+ /**
56
+ * Check if a mode just completed by comparing current state with previous state.
57
+ *
58
+ * Reads mode state files to detect transitions from active to inactive.
59
+ */
60
+ export declare function checkModeJustCompleted(directory: string, modeName: string): boolean;
61
+ /**
62
+ * Check if architect verification just passed
63
+ */
64
+ export declare function checkArchitectJustVerified(directory: string): boolean;
65
+ //# sourceMappingURL=triggers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../../src/hooks/clear-suggestions/triggers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGzH;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,oBAAoB,GAC1B,sBAAsB,GAAG,IAAI,CAK/B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,oBAAoB,GAC1B,sBAAsB,GAAG,IAAI,CAK/B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,oBAAoB,GAC1B,sBAAsB,GAAG,IAAI,CAK/B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,SAAS,EAAE,iBAAiB,EAAE,EAC9B,MAAM,CAAC,EAAE,qBAAqB,GAC7B,sBAAsB,GAAG,IAAI,CAa/B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,CAAC,EAAE,qBAAqB,GAC7B,sBAAsB,GAAG,IAAI,CAc/B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAyC3E;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAwCjF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAsCT;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAmBrE"}