oh-my-claude-sisyphus 3.8.15 → 3.8.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +9 -11
- package/bridge/mcp-server.cjs +180 -180
- package/commands/autopilot.md +2 -6
- package/commands/hud.md +7 -2
- package/commands/ralph.md +3 -3
- package/commands/ultrapilot.md +2 -6
- package/dist/__tests__/delegation-enforcement-levels.test.js +0 -1
- package/dist/__tests__/delegation-enforcement-levels.test.js.map +1 -1
- package/dist/__tests__/hooks/learner/parser.test.d.ts +5 -0
- package/dist/__tests__/hooks/learner/parser.test.d.ts.map +1 -0
- package/dist/__tests__/hooks/learner/parser.test.js +201 -0
- package/dist/__tests__/hooks/learner/parser.test.js.map +1 -0
- package/dist/__tests__/hud/cwd.test.d.ts +2 -0
- package/dist/__tests__/hud/cwd.test.d.ts.map +1 -0
- package/dist/__tests__/hud/cwd.test.js +62 -0
- package/dist/__tests__/hud/cwd.test.js.map +1 -0
- package/dist/__tests__/hud/defaults.test.d.ts +2 -0
- package/dist/__tests__/hud/defaults.test.d.ts.map +1 -0
- package/dist/__tests__/hud/defaults.test.js +21 -0
- package/dist/__tests__/hud/defaults.test.js.map +1 -0
- package/dist/__tests__/hud/render.test.d.ts +2 -0
- package/dist/__tests__/hud/render.test.d.ts.map +1 -0
- package/dist/__tests__/hud/render.test.js +141 -0
- package/dist/__tests__/hud/render.test.js.map +1 -0
- package/dist/__tests__/hud/thinking.test.d.ts +2 -0
- package/dist/__tests__/hud/thinking.test.d.ts.map +1 -0
- package/dist/__tests__/hud/thinking.test.js +32 -0
- package/dist/__tests__/hud/thinking.test.js.map +1 -0
- package/dist/__tests__/mnemosyne/parser.test.js +1 -1
- package/dist/__tests__/mnemosyne/parser.test.js.map +1 -1
- package/dist/features/continuation-enforcement.js +1 -1
- package/dist/features/state-manager/index.d.ts.map +1 -1
- package/dist/features/state-manager/index.js +7 -4
- package/dist/features/state-manager/index.js.map +1 -1
- package/dist/features/verification/example.d.ts.map +1 -1
- package/dist/features/verification/example.js +4 -2
- package/dist/features/verification/example.js.map +1 -1
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +4 -24
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/learner/parser.d.ts.map +1 -1
- package/dist/hooks/learner/parser.js +12 -5
- package/dist/hooks/learner/parser.js.map +1 -1
- package/dist/hooks/mode-registry/index.d.ts +2 -0
- package/dist/hooks/mode-registry/index.d.ts.map +1 -1
- package/dist/hooks/mode-registry/index.js +8 -19
- package/dist/hooks/mode-registry/index.js.map +1 -1
- package/dist/hooks/persistent-mode/index.d.ts +1 -1
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
- package/dist/hooks/persistent-mode/index.js +5 -33
- package/dist/hooks/persistent-mode/index.js.map +1 -1
- package/dist/hooks/ralph/index.d.ts +1 -1
- package/dist/hooks/ralph/index.d.ts.map +1 -1
- package/dist/hooks/ralph/index.js +1 -1
- package/dist/hooks/ralph/index.js.map +1 -1
- package/dist/hooks/ralph/loop.d.ts +1 -9
- package/dist/hooks/ralph/loop.d.ts.map +1 -1
- package/dist/hooks/ralph/loop.js +1 -37
- package/dist/hooks/ralph/loop.js.map +1 -1
- package/dist/hooks/ralph/prd.js +1 -1
- package/dist/hooks/ralph/verifier.d.ts +4 -5
- package/dist/hooks/ralph/verifier.d.ts.map +1 -1
- package/dist/hooks/ralph/verifier.js +7 -10
- package/dist/hooks/ralph/verifier.js.map +1 -1
- package/dist/hooks/session-end/index.d.ts +13 -0
- package/dist/hooks/session-end/index.d.ts.map +1 -1
- package/dist/hooks/session-end/index.js +69 -0
- package/dist/hooks/session-end/index.js.map +1 -1
- package/dist/hooks/ultrawork/index.d.ts +2 -2
- package/dist/hooks/ultrawork/index.d.ts.map +1 -1
- package/dist/hooks/ultrawork/index.js +2 -46
- package/dist/hooks/ultrawork/index.js.map +1 -1
- package/dist/hud/elements/cwd.d.ts +15 -0
- package/dist/hud/elements/cwd.d.ts.map +1 -0
- package/dist/hud/elements/cwd.js +39 -0
- package/dist/hud/elements/cwd.js.map +1 -0
- package/dist/hud/elements/index.d.ts +1 -0
- package/dist/hud/elements/index.d.ts.map +1 -1
- package/dist/hud/elements/index.js +1 -0
- package/dist/hud/elements/index.js.map +1 -1
- package/dist/hud/elements/thinking.d.ts +7 -5
- package/dist/hud/elements/thinking.d.ts.map +1 -1
- package/dist/hud/elements/thinking.js +18 -6
- package/dist/hud/elements/thinking.js.map +1 -1
- package/dist/hud/index.js +5 -3
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/omc-state.d.ts +1 -1
- package/dist/hud/omc-state.d.ts.map +1 -1
- package/dist/hud/omc-state.js +14 -31
- package/dist/hud/omc-state.js.map +1 -1
- package/dist/hud/render.d.ts +9 -0
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +27 -7
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.d.ts +2 -2
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +4 -33
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/transcript.d.ts +4 -1
- package/dist/hud/transcript.d.ts.map +1 -1
- package/dist/hud/transcript.js +4 -9
- package/dist/hud/transcript.js.map +1 -1
- package/dist/hud/types.d.ts +20 -1
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js +38 -9
- package/dist/hud/types.js.map +1 -1
- package/dist/installer/hooks.d.ts +1 -1
- package/dist/installer/hooks.d.ts.map +1 -1
- package/dist/installer/hooks.js +1 -1
- package/docs/AGENTS.md +100 -0
- package/docs/ARCHITECTURE.md +11 -7
- package/docs/CLAUDE.md +1 -3
- package/docs/DELEGATION-ENFORCER.md +1 -2
- package/docs/MIGRATION.md +1 -1
- package/docs/REFERENCE.md +29 -9
- package/docs/SYNC-SYSTEM.md +0 -2
- package/package.json +1 -1
- package/scripts/persistent-mode.mjs +78 -47
- package/scripts/test-mutual-exclusion.ts +3 -3
- package/skills/AGENTS.md +59 -44
- package/skills/autopilot/SKILL.md +0 -2
- package/skills/cancel/SKILL.md +13 -32
- package/skills/ecomode/SKILL.md +0 -1
- package/skills/hud/SKILL.md +3 -2
- package/skills/ralph/SKILL.md +9 -19
- package/skills/ultrawork/SKILL.md +0 -1
- package/templates/hooks/persistent-mode.mjs +68 -26
- package/agents/AGENTS.md +0 -144
- package/dist/hooks/clear-suggestions/constants.d.ts +0 -54
- package/dist/hooks/clear-suggestions/constants.d.ts.map +0 -1
- package/dist/hooks/clear-suggestions/constants.js +0 -102
- package/dist/hooks/clear-suggestions/constants.js.map +0 -1
- package/dist/hooks/clear-suggestions/index.d.ts +0 -61
- package/dist/hooks/clear-suggestions/index.d.ts.map +0 -1
- package/dist/hooks/clear-suggestions/index.js +0 -282
- package/dist/hooks/clear-suggestions/index.js.map +0 -1
- package/dist/hooks/clear-suggestions/triggers.d.ts +0 -65
- package/dist/hooks/clear-suggestions/triggers.d.ts.map +0 -1
- package/dist/hooks/clear-suggestions/triggers.js +0 -222
- package/dist/hooks/clear-suggestions/triggers.js.map +0 -1
- package/dist/hooks/clear-suggestions/types.d.ts +0 -92
- package/dist/hooks/clear-suggestions/types.d.ts.map +0 -1
- package/dist/hooks/clear-suggestions/types.js +0 -9
- package/dist/hooks/clear-suggestions/types.js.map +0 -1
|
@@ -1,61 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,282 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/clear-suggestions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,65 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,222 +0,0 @@
|
|
|
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 { existsSync, readFileSync } from 'fs';
|
|
12
|
-
import { join } from 'path';
|
|
13
|
-
import { CONTEXT_THRESHOLD, FAILURE_THRESHOLD, FAILURE_WINDOW_MS } from './constants.js';
|
|
14
|
-
/**
|
|
15
|
-
* Detect if a workflow (ralph/autopilot/ultrawork) just completed.
|
|
16
|
-
*
|
|
17
|
-
* Checks state files for modes that transitioned from active to inactive
|
|
18
|
-
* within the current hook call.
|
|
19
|
-
*/
|
|
20
|
-
export function detectWorkflowComplete(state) {
|
|
21
|
-
if (state.workflowJustCompleted) {
|
|
22
|
-
return 'workflow_complete';
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Detect if architect verification just passed.
|
|
28
|
-
*
|
|
29
|
-
* Reads ralph verification state to see if architect approved.
|
|
30
|
-
*/
|
|
31
|
-
export function detectArchitectVerified(state) {
|
|
32
|
-
if (state.architectJustVerified) {
|
|
33
|
-
return 'architect_verified';
|
|
34
|
-
}
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Detect if planning just completed.
|
|
39
|
-
*
|
|
40
|
-
* Checks if a plan skill or ralplan skill just finished.
|
|
41
|
-
*/
|
|
42
|
-
export function detectPlanningComplete(state) {
|
|
43
|
-
if (state.planningJustCompleted) {
|
|
44
|
-
return 'planning_complete';
|
|
45
|
-
}
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Detect if context is above threshold and artifacts exist to reload.
|
|
50
|
-
*
|
|
51
|
-
* This trigger fires when context is high but the user has saved artifacts
|
|
52
|
-
* (plans, PRDs, notes) that would automatically reload after /clear.
|
|
53
|
-
*/
|
|
54
|
-
export function detectContextWithArtifacts(contextUsageRatio, artifacts, config) {
|
|
55
|
-
const threshold = config?.contextThreshold ?? CONTEXT_THRESHOLD;
|
|
56
|
-
if (contextUsageRatio === undefined || contextUsageRatio < threshold) {
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
// Only suggest if there are artifacts to reload
|
|
60
|
-
if (artifacts.length === 0) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
return 'context_artifacts';
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Detect degradation signals from consecutive failures.
|
|
67
|
-
*
|
|
68
|
-
* Tracks recent tool failures and triggers when the threshold is exceeded.
|
|
69
|
-
*/
|
|
70
|
-
export function detectDegradationSignals(state, config) {
|
|
71
|
-
const threshold = config?.failureThreshold ?? FAILURE_THRESHOLD;
|
|
72
|
-
const now = Date.now();
|
|
73
|
-
// Filter to recent failures only
|
|
74
|
-
const recentFailures = state.failureTimestamps.filter(ts => now - ts < FAILURE_WINDOW_MS);
|
|
75
|
-
if (recentFailures.length >= threshold) {
|
|
76
|
-
return 'degradation_signals';
|
|
77
|
-
}
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Check if a tool output indicates a failure
|
|
82
|
-
*/
|
|
83
|
-
export function isToolFailure(toolName, toolOutput) {
|
|
84
|
-
if (!toolOutput)
|
|
85
|
-
return false;
|
|
86
|
-
const output = toolOutput.toLowerCase();
|
|
87
|
-
// Bash failures
|
|
88
|
-
if (toolName === 'Bash' || toolName === 'bash') {
|
|
89
|
-
const failurePatterns = [
|
|
90
|
-
/error:/i,
|
|
91
|
-
/failed/i,
|
|
92
|
-
/exit code: [1-9]/i,
|
|
93
|
-
/exit status [1-9]/i,
|
|
94
|
-
/fatal:/i,
|
|
95
|
-
/command not found/i,
|
|
96
|
-
];
|
|
97
|
-
return failurePatterns.some(p => p.test(toolOutput));
|
|
98
|
-
}
|
|
99
|
-
// Edit failures
|
|
100
|
-
if (toolName === 'Edit' || toolName === 'edit') {
|
|
101
|
-
const editFailures = [
|
|
102
|
-
'old_string not found',
|
|
103
|
-
'not unique',
|
|
104
|
-
'no match',
|
|
105
|
-
'failed to edit',
|
|
106
|
-
];
|
|
107
|
-
return editFailures.some(f => output.includes(f));
|
|
108
|
-
}
|
|
109
|
-
// Task failures
|
|
110
|
-
if (toolName === 'Task' || toolName === 'task') {
|
|
111
|
-
const taskFailures = [
|
|
112
|
-
'error',
|
|
113
|
-
'failed',
|
|
114
|
-
'timeout',
|
|
115
|
-
'agent error',
|
|
116
|
-
];
|
|
117
|
-
return taskFailures.some(f => output.includes(f));
|
|
118
|
-
}
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Discover preserved artifacts in the project directory.
|
|
123
|
-
*
|
|
124
|
-
* Scans for plans, PRDs, specs, progress files, notepads, and wisdom files
|
|
125
|
-
* that would survive a /clear and be available in the new session.
|
|
126
|
-
*/
|
|
127
|
-
export function discoverPreservedArtifacts(directory) {
|
|
128
|
-
const artifacts = [];
|
|
129
|
-
const candidates = [
|
|
130
|
-
// Plans
|
|
131
|
-
{ type: 'plan', relativePath: '.omc/plans', description: 'Implementation plans (.omc/plans/)' },
|
|
132
|
-
// PRD
|
|
133
|
-
{ type: 'prd', relativePath: '.omc/prd.json', description: 'Product Requirements Document (.omc/prd.json)' },
|
|
134
|
-
{ type: 'prd', relativePath: 'prd.json', description: 'Product Requirements Document (prd.json)' },
|
|
135
|
-
// Spec
|
|
136
|
-
{ type: 'spec', relativePath: '.omc/autopilot/spec.md', description: 'Autopilot specification (.omc/autopilot/spec.md)' },
|
|
137
|
-
// Progress
|
|
138
|
-
{ type: 'progress', relativePath: '.omc/progress.txt', description: 'Progress log (.omc/progress.txt)' },
|
|
139
|
-
{ type: 'progress', relativePath: 'progress.txt', description: 'Progress log (progress.txt)' },
|
|
140
|
-
// Notepad
|
|
141
|
-
{ type: 'notepad', relativePath: '.omc/notepad.md', description: 'Notepad memory (.omc/notepad.md)' },
|
|
142
|
-
// Wisdom files
|
|
143
|
-
{ type: 'learning', relativePath: '.omc/notepads', description: 'Wisdom entries (.omc/notepads/)' },
|
|
144
|
-
// AGENTS.md
|
|
145
|
-
{ type: 'decision', relativePath: 'AGENTS.md', description: 'Agent documentation (AGENTS.md)' },
|
|
146
|
-
// CLAUDE.md
|
|
147
|
-
{ type: 'decision', relativePath: '.claude/CLAUDE.md', description: 'Project instructions (.claude/CLAUDE.md)' },
|
|
148
|
-
];
|
|
149
|
-
for (const candidate of candidates) {
|
|
150
|
-
const fullPath = join(directory, candidate.relativePath);
|
|
151
|
-
if (existsSync(fullPath)) {
|
|
152
|
-
artifacts.push({
|
|
153
|
-
type: candidate.type,
|
|
154
|
-
path: fullPath,
|
|
155
|
-
description: candidate.description,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
return artifacts;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Check if a mode just completed by comparing current state with previous state.
|
|
163
|
-
*
|
|
164
|
-
* Reads mode state files to detect transitions from active to inactive.
|
|
165
|
-
*/
|
|
166
|
-
export function checkModeJustCompleted(directory, modeName) {
|
|
167
|
-
const stateDir = join(directory, '.omc', 'state');
|
|
168
|
-
// Map mode names to their state files
|
|
169
|
-
const stateFiles = {
|
|
170
|
-
ralph: 'ralph-state.json',
|
|
171
|
-
autopilot: 'autopilot-state.json',
|
|
172
|
-
ultrawork: 'ultrawork-state.json',
|
|
173
|
-
ultraqa: 'ultraqa-state.json',
|
|
174
|
-
};
|
|
175
|
-
const stateFile = stateFiles[modeName];
|
|
176
|
-
if (!stateFile)
|
|
177
|
-
return false;
|
|
178
|
-
const filePath = join(stateDir, stateFile);
|
|
179
|
-
if (!existsSync(filePath))
|
|
180
|
-
return false;
|
|
181
|
-
try {
|
|
182
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
183
|
-
const state = JSON.parse(content);
|
|
184
|
-
// Check for completed state: active=false with a completed_at timestamp
|
|
185
|
-
if (state.active === false && state.completed_at) {
|
|
186
|
-
// Only trigger if completed recently (within last 30 seconds)
|
|
187
|
-
const completedAt = new Date(state.completed_at).getTime();
|
|
188
|
-
const age = Date.now() - completedAt;
|
|
189
|
-
return age < 30_000;
|
|
190
|
-
}
|
|
191
|
-
// For autopilot, check phase === 'complete'
|
|
192
|
-
if (state.phase === 'complete' && state.active === false) {
|
|
193
|
-
return true;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
// State file unreadable
|
|
198
|
-
}
|
|
199
|
-
return false;
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Check if architect verification just passed
|
|
203
|
-
*/
|
|
204
|
-
export function checkArchitectJustVerified(directory) {
|
|
205
|
-
const verificationFile = join(directory, '.omc', 'state', 'ralph-verification.json');
|
|
206
|
-
if (!existsSync(verificationFile))
|
|
207
|
-
return false;
|
|
208
|
-
try {
|
|
209
|
-
const content = readFileSync(verificationFile, 'utf-8');
|
|
210
|
-
const state = JSON.parse(content);
|
|
211
|
-
if (state.status === 'approved' && state.completed_at) {
|
|
212
|
-
const completedAt = new Date(state.completed_at).getTime();
|
|
213
|
-
const age = Date.now() - completedAt;
|
|
214
|
-
return age < 30_000;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
catch {
|
|
218
|
-
// Verification file unreadable
|
|
219
|
-
}
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
//# sourceMappingURL=triggers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../../src/hooks/clear-suggestions/triggers.ts"],"names":[],"mappings":"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"}
|