oh-my-claude-sisyphus 3.3.10 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/agents/explore-high.md +195 -0
- package/agents/qa-tester-high.md +141 -0
- package/agents/templates/README.md +110 -0
- package/agents/templates/base-agent.md +54 -0
- package/agents/templates/tier-instructions.md +94 -0
- package/commands/ecomode.md +60 -0
- package/commands/help.md +1 -1
- package/commands/mcp-setup.md +7 -6
- package/commands/ralplan.md +8 -1
- package/commands/ultrapilot.md +158 -0
- package/commands/ultrawork.md +1 -0
- package/dist/__tests__/delegation-enforcer-integration.test.d.ts +6 -0
- package/dist/__tests__/delegation-enforcer-integration.test.d.ts.map +1 -0
- package/dist/__tests__/delegation-enforcer-integration.test.js +136 -0
- package/dist/__tests__/delegation-enforcer-integration.test.js.map +1 -0
- package/dist/__tests__/delegation-enforcer.test.d.ts +5 -0
- package/dist/__tests__/delegation-enforcer.test.d.ts.map +1 -0
- package/dist/__tests__/delegation-enforcer.test.js +208 -0
- package/dist/__tests__/delegation-enforcer.test.js.map +1 -0
- package/dist/__tests__/hooks.test.js +2 -2
- package/dist/__tests__/hooks.test.js.map +1 -1
- package/dist/__tests__/installer.test.js +4 -6
- package/dist/__tests__/installer.test.js.map +1 -1
- package/dist/__tests__/ralph-prd.test.js +1 -1
- package/dist/__tests__/ralph-prd.test.js.map +1 -1
- package/dist/__tests__/ralph-progress.test.js +1 -1
- package/dist/__tests__/ralph-progress.test.js.map +1 -1
- package/dist/__tests__/skills.test.js +31 -24
- package/dist/__tests__/skills.test.js.map +1 -1
- package/dist/agents/analyst.d.ts.map +1 -1
- package/dist/agents/analyst.js +1 -0
- package/dist/agents/analyst.js.map +1 -1
- package/dist/agents/architect.d.ts.map +1 -1
- package/dist/agents/architect.js +1 -0
- package/dist/agents/architect.js.map +1 -1
- package/dist/agents/critic.d.ts.map +1 -1
- package/dist/agents/critic.js +1 -0
- package/dist/agents/critic.js.map +1 -1
- package/dist/agents/definitions.d.ts +5 -1
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +53 -155
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/designer.d.ts.map +1 -1
- package/dist/agents/designer.js +1 -0
- package/dist/agents/designer.js.map +1 -1
- package/dist/agents/executor.d.ts.map +1 -1
- package/dist/agents/executor.js +1 -0
- package/dist/agents/executor.js.map +1 -1
- package/dist/agents/explore.d.ts.map +1 -1
- package/dist/agents/explore.js +1 -0
- package/dist/agents/explore.js.map +1 -1
- package/dist/agents/planner.d.ts.map +1 -1
- package/dist/agents/planner.js +1 -0
- package/dist/agents/planner.js.map +1 -1
- package/dist/agents/qa-tester.d.ts.map +1 -1
- package/dist/agents/qa-tester.js +1 -0
- package/dist/agents/qa-tester.js.map +1 -1
- package/dist/agents/researcher.d.ts.map +1 -1
- package/dist/agents/researcher.js +1 -0
- package/dist/agents/researcher.js.map +1 -1
- package/dist/agents/scientist.d.ts.map +1 -1
- package/dist/agents/scientist.js +1 -0
- package/dist/agents/scientist.js.map +1 -1
- package/dist/agents/types.d.ts +2 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/types.js.map +1 -1
- package/dist/agents/vision.d.ts.map +1 -1
- package/dist/agents/vision.js +1 -0
- package/dist/agents/vision.js.map +1 -1
- package/dist/agents/writer.d.ts.map +1 -1
- package/dist/agents/writer.js +1 -0
- package/dist/agents/writer.js.map +1 -1
- package/dist/cli/index.js +0 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +1 -6
- package/dist/config/loader.js.map +1 -1
- package/dist/features/delegation-enforcer.d.ts +71 -0
- package/dist/features/delegation-enforcer.d.ts.map +1 -0
- package/dist/features/delegation-enforcer.js +128 -0
- package/dist/features/delegation-enforcer.js.map +1 -0
- package/dist/features/index.d.ts +3 -0
- package/dist/features/index.d.ts.map +1 -1
- package/dist/features/index.js +18 -0
- package/dist/features/index.js.map +1 -1
- package/dist/features/state-manager/index.d.ts +100 -0
- package/dist/features/state-manager/index.d.ts.map +1 -0
- package/dist/features/state-manager/index.js +407 -0
- package/dist/features/state-manager/index.js.map +1 -0
- package/dist/features/state-manager/types.d.ts +147 -0
- package/dist/features/state-manager/types.d.ts.map +1 -0
- package/dist/features/state-manager/types.js +30 -0
- package/dist/features/state-manager/types.js.map +1 -0
- package/dist/features/task-decomposer/index.d.ts +33 -0
- package/dist/features/task-decomposer/index.d.ts.map +1 -0
- package/dist/features/task-decomposer/index.js +698 -0
- package/dist/features/task-decomposer/index.js.map +1 -0
- package/dist/features/task-decomposer/types.d.ts +133 -0
- package/dist/features/task-decomposer/types.d.ts.map +1 -0
- package/dist/features/task-decomposer/types.js +8 -0
- package/dist/features/task-decomposer/types.js.map +1 -0
- package/dist/features/verification/example.d.ts +49 -0
- package/dist/features/verification/example.d.ts.map +1 -0
- package/dist/features/verification/example.js +235 -0
- package/dist/features/verification/example.js.map +1 -0
- package/dist/features/verification/index.d.ts +97 -0
- package/dist/features/verification/index.d.ts.map +1 -0
- package/dist/features/verification/index.js +439 -0
- package/dist/features/verification/index.js.map +1 -0
- package/dist/features/verification/types.d.ts +142 -0
- package/dist/features/verification/types.d.ts.map +1 -0
- package/dist/features/verification/types.js +7 -0
- package/dist/features/verification/types.js.map +1 -0
- package/dist/hooks/agent-usage-reminder/constants.d.ts.map +1 -1
- package/dist/hooks/agent-usage-reminder/constants.js +0 -1
- package/dist/hooks/agent-usage-reminder/constants.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/cancel.test.js +4 -4
- package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/summary.test.js +1 -1
- package/dist/hooks/autopilot/__tests__/summary.test.js.map +1 -1
- package/dist/hooks/autopilot/__tests__/transition.test.js +1 -2
- package/dist/hooks/autopilot/__tests__/transition.test.js.map +1 -1
- package/dist/hooks/autopilot/cancel.js +2 -2
- package/dist/hooks/autopilot/cancel.js.map +1 -1
- package/dist/hooks/autopilot/enforcement.d.ts +16 -2
- package/dist/hooks/autopilot/enforcement.d.ts.map +1 -1
- package/dist/hooks/autopilot/enforcement.js +78 -4
- package/dist/hooks/autopilot/enforcement.js.map +1 -1
- package/dist/hooks/autopilot/index.d.ts +3 -6
- package/dist/hooks/autopilot/index.d.ts.map +1 -1
- package/dist/hooks/autopilot/index.js +6 -12
- package/dist/hooks/autopilot/index.js.map +1 -1
- package/dist/hooks/autopilot/state.d.ts +36 -2
- package/dist/hooks/autopilot/state.d.ts.map +1 -1
- package/dist/hooks/autopilot/state.js +216 -2
- package/dist/hooks/autopilot/state.js.map +1 -1
- package/dist/hooks/autopilot/validation.d.ts +23 -2
- package/dist/hooks/autopilot/validation.d.ts.map +1 -1
- package/dist/hooks/autopilot/validation.js +158 -1
- package/dist/hooks/autopilot/validation.js.map +1 -1
- package/dist/hooks/bridge.js +3 -3
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/index.d.ts +5 -9
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +31 -21
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/learner/promotion.js +1 -1
- package/dist/hooks/learner/promotion.js.map +1 -1
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
- package/dist/hooks/persistent-mode/index.js +2 -3
- package/dist/hooks/persistent-mode/index.js.map +1 -1
- package/dist/hooks/ralph/index.d.ts +11 -0
- package/dist/hooks/ralph/index.d.ts.map +1 -0
- package/dist/hooks/ralph/index.js +53 -0
- package/dist/hooks/ralph/index.js.map +1 -0
- package/dist/hooks/ralph/loop.d.ts +116 -0
- package/dist/hooks/ralph/loop.d.ts.map +1 -0
- package/dist/hooks/ralph/loop.js +322 -0
- package/dist/hooks/ralph/loop.js.map +1 -0
- package/dist/hooks/ralph/prd.d.ts +130 -0
- package/dist/hooks/ralph/prd.d.ts.map +1 -0
- package/dist/hooks/ralph/prd.js +310 -0
- package/dist/hooks/ralph/prd.js.map +1 -0
- package/dist/hooks/ralph/progress.d.ts +102 -0
- package/dist/hooks/ralph/progress.d.ts.map +1 -0
- package/dist/hooks/ralph/progress.js +408 -0
- package/dist/hooks/ralph/progress.js.map +1 -0
- package/dist/hooks/ralph/verifier.d.ts +72 -0
- package/dist/hooks/ralph/verifier.d.ts.map +1 -0
- package/dist/hooks/ralph/verifier.js +223 -0
- package/dist/hooks/ralph/verifier.js.map +1 -0
- package/dist/hooks/recovery/constants.d.ts +114 -0
- package/dist/hooks/recovery/constants.d.ts.map +1 -0
- package/dist/hooks/recovery/constants.js +227 -0
- package/dist/hooks/recovery/constants.js.map +1 -0
- package/dist/hooks/recovery/context-window.d.ts +24 -0
- package/dist/hooks/recovery/context-window.d.ts.map +1 -0
- package/dist/hooks/recovery/context-window.js +321 -0
- package/dist/hooks/recovery/context-window.js.map +1 -0
- package/dist/hooks/recovery/edit-error.d.ts +24 -0
- package/dist/hooks/recovery/edit-error.d.ts.map +1 -0
- package/dist/hooks/recovery/edit-error.js +56 -0
- package/dist/hooks/recovery/edit-error.js.map +1 -0
- package/dist/hooks/recovery/index.d.ts +102 -0
- package/dist/hooks/recovery/index.d.ts.map +1 -0
- package/dist/hooks/recovery/index.js +166 -0
- package/dist/hooks/recovery/index.js.map +1 -0
- package/dist/hooks/recovery/session-recovery.d.ts +24 -0
- package/dist/hooks/recovery/session-recovery.d.ts.map +1 -0
- package/dist/hooks/recovery/session-recovery.js +281 -0
- package/dist/hooks/recovery/session-recovery.js.map +1 -0
- package/dist/hooks/recovery/storage.d.ts +75 -0
- package/dist/hooks/recovery/storage.d.ts.map +1 -0
- package/dist/hooks/recovery/storage.js +382 -0
- package/dist/hooks/recovery/storage.js.map +1 -0
- package/dist/hooks/recovery/types.d.ts +196 -0
- package/dist/hooks/recovery/types.d.ts.map +1 -0
- package/dist/hooks/recovery/types.js +32 -0
- package/dist/hooks/recovery/types.js.map +1 -0
- package/dist/hooks/ultrapilot/index.d.ts +90 -0
- package/dist/hooks/ultrapilot/index.d.ts.map +1 -0
- package/dist/hooks/ultrapilot/index.js +310 -0
- package/dist/hooks/ultrapilot/index.js.map +1 -0
- package/dist/hooks/ultrapilot/state.d.ts +72 -0
- package/dist/hooks/ultrapilot/state.d.ts.map +1 -0
- package/dist/hooks/ultrapilot/state.js +258 -0
- package/dist/hooks/ultrapilot/state.js.map +1 -0
- package/dist/hooks/ultrapilot/types.d.ts +113 -0
- package/dist/hooks/ultrapilot/types.d.ts.map +1 -0
- package/dist/hooks/ultrapilot/types.js +36 -0
- package/dist/hooks/ultrapilot/types.js.map +1 -0
- package/dist/hooks/ultraqa/index.d.ts +94 -0
- package/dist/hooks/ultraqa/index.d.ts.map +1 -0
- package/dist/hooks/ultraqa/index.js +216 -0
- package/dist/hooks/ultraqa/index.js.map +1 -0
- package/dist/hooks/ultrawork/index.d.ts +62 -0
- package/dist/hooks/ultrawork/index.d.ts.map +1 -0
- package/dist/hooks/ultrawork/index.js +208 -0
- package/dist/hooks/ultrawork/index.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +1 -1
- package/dist/installer/index.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/servers.d.ts +2 -18
- package/dist/mcp/servers.d.ts.map +1 -1
- package/dist/mcp/servers.js +4 -36
- package/dist/mcp/servers.js.map +1 -1
- package/dist/shared/types.d.ts +1 -3
- package/dist/shared/types.d.ts.map +1 -1
- package/docs/CLAUDE.md +170 -44
- package/docs/DELEGATION-ENFORCER.md +282 -0
- package/docs/FULL-README.md +1 -1
- package/docs/LOCAL_PLUGIN_INSTALL.md +1 -1
- package/docs/MIGRATION.md +298 -104
- package/package.json +2 -2
- package/scripts/test-mutual-exclusion.ts +1 -1
- package/skills/analyze/SKILL.md +0 -1
- package/skills/autopilot/SKILL.md +0 -1
- package/skills/cancel/SKILL.md +580 -0
- package/skills/cancel-autopilot/SKILL.md +0 -1
- package/skills/cancel-ecomode/SKILL.md +41 -0
- package/skills/cancel-ralph/SKILL.md +0 -1
- package/skills/cancel-ultraqa/SKILL.md +0 -1
- package/skills/cancel-ultrawork/SKILL.md +0 -1
- package/skills/deepinit/SKILL.md +0 -1
- package/skills/deepsearch/SKILL.md +0 -1
- package/skills/doctor/SKILL.md +0 -1
- package/skills/ecomode/SKILL.md +128 -0
- package/skills/frontend-ui-ux/SKILL.md +0 -1
- package/skills/git-master/SKILL.md +0 -1
- package/skills/help/SKILL.md +1 -2
- package/skills/hud/SKILL.md +0 -1
- package/skills/learner/SKILL.md +0 -1
- package/skills/mcp-setup/SKILL.md +8 -7
- package/skills/note/SKILL.md +0 -1
- package/skills/omc-default/SKILL.md +0 -1
- package/skills/omc-default-global/SKILL.md +0 -1
- package/skills/omc-setup/SKILL.md +176 -10
- package/skills/orchestrate/SKILL.md +0 -1
- package/skills/pipeline/SKILL.md +417 -0
- package/skills/plan/SKILL.md +138 -21
- package/skills/planner/SKILL.md +0 -1
- package/skills/ralph/SKILL.md +65 -1
- package/skills/ralph-init/SKILL.md +0 -1
- package/skills/ralplan/SKILL.md +0 -1
- package/skills/release/SKILL.md +0 -1
- package/skills/research/SKILL.md +0 -1
- package/skills/review/SKILL.md +0 -1
- package/skills/swarm/SKILL.md +349 -0
- package/skills/tdd/SKILL.md +0 -1
- package/skills/ultrapilot/SKILL.md +563 -0
- package/skills/ultraqa/SKILL.md +0 -1
- package/skills/ultrawork/SKILL.md +0 -1
- package/docs/MIGRATION-v3.md +0 -186
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Recovery Storage Operations
|
|
3
|
+
*
|
|
4
|
+
* Functions for reading and manipulating stored session data.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { MESSAGE_STORAGE, PART_STORAGE, THINKING_TYPES, META_TYPES, PLACEHOLDER_TEXT, } from './constants.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate a unique part ID
|
|
11
|
+
*/
|
|
12
|
+
export function generatePartId() {
|
|
13
|
+
const timestamp = Date.now().toString(16);
|
|
14
|
+
const random = Math.random().toString(36).substring(2, 10);
|
|
15
|
+
return `prt_${timestamp}${random}`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get the directory containing messages for a session
|
|
19
|
+
*/
|
|
20
|
+
export function getMessageDir(sessionID) {
|
|
21
|
+
if (!existsSync(MESSAGE_STORAGE))
|
|
22
|
+
return '';
|
|
23
|
+
const directPath = join(MESSAGE_STORAGE, sessionID);
|
|
24
|
+
if (existsSync(directPath)) {
|
|
25
|
+
return directPath;
|
|
26
|
+
}
|
|
27
|
+
for (const dir of readdirSync(MESSAGE_STORAGE)) {
|
|
28
|
+
const sessionPath = join(MESSAGE_STORAGE, dir, sessionID);
|
|
29
|
+
if (existsSync(sessionPath)) {
|
|
30
|
+
return sessionPath;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read all messages for a session
|
|
37
|
+
*/
|
|
38
|
+
export function readMessages(sessionID) {
|
|
39
|
+
const messageDir = getMessageDir(sessionID);
|
|
40
|
+
if (!messageDir || !existsSync(messageDir))
|
|
41
|
+
return [];
|
|
42
|
+
const messages = [];
|
|
43
|
+
for (const file of readdirSync(messageDir)) {
|
|
44
|
+
if (!file.endsWith('.json'))
|
|
45
|
+
continue;
|
|
46
|
+
try {
|
|
47
|
+
const content = readFileSync(join(messageDir, file), 'utf-8');
|
|
48
|
+
messages.push(JSON.parse(content));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return messages.sort((a, b) => {
|
|
55
|
+
const aTime = a.time?.created ?? 0;
|
|
56
|
+
const bTime = b.time?.created ?? 0;
|
|
57
|
+
if (aTime !== bTime)
|
|
58
|
+
return aTime - bTime;
|
|
59
|
+
return a.id.localeCompare(b.id);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Read all parts for a message
|
|
64
|
+
*/
|
|
65
|
+
export function readParts(messageID) {
|
|
66
|
+
const partDir = join(PART_STORAGE, messageID);
|
|
67
|
+
if (!existsSync(partDir))
|
|
68
|
+
return [];
|
|
69
|
+
const parts = [];
|
|
70
|
+
for (const file of readdirSync(partDir)) {
|
|
71
|
+
if (!file.endsWith('.json'))
|
|
72
|
+
continue;
|
|
73
|
+
try {
|
|
74
|
+
const content = readFileSync(join(partDir, file), 'utf-8');
|
|
75
|
+
parts.push(JSON.parse(content));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return parts;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if a part has content (not thinking/meta)
|
|
85
|
+
*/
|
|
86
|
+
export function hasContent(part) {
|
|
87
|
+
if (THINKING_TYPES.has(part.type))
|
|
88
|
+
return false;
|
|
89
|
+
if (META_TYPES.has(part.type))
|
|
90
|
+
return false;
|
|
91
|
+
if (part.type === 'text') {
|
|
92
|
+
const textPart = part;
|
|
93
|
+
return !!(textPart.text?.trim());
|
|
94
|
+
}
|
|
95
|
+
if (part.type === 'tool' || part.type === 'tool_use') {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
if (part.type === 'tool_result') {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if a message has content
|
|
105
|
+
*/
|
|
106
|
+
export function messageHasContent(messageID) {
|
|
107
|
+
const parts = readParts(messageID);
|
|
108
|
+
return parts.some(hasContent);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Inject a text part into a message
|
|
112
|
+
*/
|
|
113
|
+
export function injectTextPart(sessionID, messageID, text) {
|
|
114
|
+
const partDir = join(PART_STORAGE, messageID);
|
|
115
|
+
if (!existsSync(partDir)) {
|
|
116
|
+
mkdirSync(partDir, { recursive: true });
|
|
117
|
+
}
|
|
118
|
+
const partId = generatePartId();
|
|
119
|
+
const part = {
|
|
120
|
+
id: partId,
|
|
121
|
+
sessionID,
|
|
122
|
+
messageID,
|
|
123
|
+
type: 'text',
|
|
124
|
+
text,
|
|
125
|
+
synthetic: true,
|
|
126
|
+
};
|
|
127
|
+
try {
|
|
128
|
+
writeFileSync(join(partDir, `${partId}.json`), JSON.stringify(part, null, 2));
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Find all messages with empty content
|
|
137
|
+
*/
|
|
138
|
+
export function findEmptyMessages(sessionID) {
|
|
139
|
+
const messages = readMessages(sessionID);
|
|
140
|
+
const emptyIds = [];
|
|
141
|
+
for (const msg of messages) {
|
|
142
|
+
if (!messageHasContent(msg.id)) {
|
|
143
|
+
emptyIds.push(msg.id);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return emptyIds;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Find empty message by index (with fuzzy matching)
|
|
150
|
+
*/
|
|
151
|
+
export function findEmptyMessageByIndex(sessionID, targetIndex) {
|
|
152
|
+
const messages = readMessages(sessionID);
|
|
153
|
+
// Try nearby indices in case of system messages causing offset
|
|
154
|
+
const indicesToTry = [
|
|
155
|
+
targetIndex,
|
|
156
|
+
targetIndex - 1,
|
|
157
|
+
targetIndex + 1,
|
|
158
|
+
targetIndex - 2,
|
|
159
|
+
targetIndex + 2,
|
|
160
|
+
targetIndex - 3,
|
|
161
|
+
targetIndex - 4,
|
|
162
|
+
targetIndex - 5,
|
|
163
|
+
];
|
|
164
|
+
for (const idx of indicesToTry) {
|
|
165
|
+
if (idx < 0 || idx >= messages.length)
|
|
166
|
+
continue;
|
|
167
|
+
const targetMsg = messages[idx];
|
|
168
|
+
if (!messageHasContent(targetMsg.id)) {
|
|
169
|
+
return targetMsg.id;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Find messages that have thinking blocks
|
|
176
|
+
*/
|
|
177
|
+
export function findMessagesWithThinkingBlocks(sessionID) {
|
|
178
|
+
const messages = readMessages(sessionID);
|
|
179
|
+
const result = [];
|
|
180
|
+
for (const msg of messages) {
|
|
181
|
+
if (msg.role !== 'assistant')
|
|
182
|
+
continue;
|
|
183
|
+
const parts = readParts(msg.id);
|
|
184
|
+
const hasThinking = parts.some((p) => THINKING_TYPES.has(p.type));
|
|
185
|
+
if (hasThinking) {
|
|
186
|
+
result.push(msg.id);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Find messages that have thinking but no content
|
|
193
|
+
*/
|
|
194
|
+
export function findMessagesWithThinkingOnly(sessionID) {
|
|
195
|
+
const messages = readMessages(sessionID);
|
|
196
|
+
const result = [];
|
|
197
|
+
for (const msg of messages) {
|
|
198
|
+
if (msg.role !== 'assistant')
|
|
199
|
+
continue;
|
|
200
|
+
const parts = readParts(msg.id);
|
|
201
|
+
if (parts.length === 0)
|
|
202
|
+
continue;
|
|
203
|
+
const hasThinking = parts.some((p) => THINKING_TYPES.has(p.type));
|
|
204
|
+
const hasTextContent = parts.some(hasContent);
|
|
205
|
+
if (hasThinking && !hasTextContent) {
|
|
206
|
+
result.push(msg.id);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Find messages with orphan thinking (thinking not first)
|
|
213
|
+
*/
|
|
214
|
+
export function findMessagesWithOrphanThinking(sessionID) {
|
|
215
|
+
const messages = readMessages(sessionID);
|
|
216
|
+
const result = [];
|
|
217
|
+
for (const msg of messages) {
|
|
218
|
+
if (msg.role !== 'assistant')
|
|
219
|
+
continue;
|
|
220
|
+
const parts = readParts(msg.id);
|
|
221
|
+
if (parts.length === 0)
|
|
222
|
+
continue;
|
|
223
|
+
const sortedParts = [...parts].sort((a, b) => a.id.localeCompare(b.id));
|
|
224
|
+
const firstPart = sortedParts[0];
|
|
225
|
+
const firstIsThinking = THINKING_TYPES.has(firstPart.type);
|
|
226
|
+
if (!firstIsThinking) {
|
|
227
|
+
result.push(msg.id);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return result;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Find the most recent thinking content from previous assistant messages
|
|
234
|
+
*/
|
|
235
|
+
function findLastThinkingContent(sessionID, beforeMessageID) {
|
|
236
|
+
const messages = readMessages(sessionID);
|
|
237
|
+
const currentIndex = messages.findIndex((m) => m.id === beforeMessageID);
|
|
238
|
+
if (currentIndex === -1)
|
|
239
|
+
return '';
|
|
240
|
+
for (let i = currentIndex - 1; i >= 0; i--) {
|
|
241
|
+
const msg = messages[i];
|
|
242
|
+
if (msg.role !== 'assistant')
|
|
243
|
+
continue;
|
|
244
|
+
const parts = readParts(msg.id);
|
|
245
|
+
for (const part of parts) {
|
|
246
|
+
if (THINKING_TYPES.has(part.type)) {
|
|
247
|
+
const thinking = part.thinking;
|
|
248
|
+
const reasoning = part.text;
|
|
249
|
+
const content = thinking || reasoning;
|
|
250
|
+
if (content && content.trim().length > 0) {
|
|
251
|
+
return content;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return '';
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Prepend a thinking part to a message
|
|
260
|
+
*/
|
|
261
|
+
export function prependThinkingPart(sessionID, messageID) {
|
|
262
|
+
const partDir = join(PART_STORAGE, messageID);
|
|
263
|
+
if (!existsSync(partDir)) {
|
|
264
|
+
mkdirSync(partDir, { recursive: true });
|
|
265
|
+
}
|
|
266
|
+
const previousThinking = findLastThinkingContent(sessionID, messageID);
|
|
267
|
+
const partId = `prt_0000000000_thinking`;
|
|
268
|
+
const part = {
|
|
269
|
+
id: partId,
|
|
270
|
+
sessionID,
|
|
271
|
+
messageID,
|
|
272
|
+
type: 'thinking',
|
|
273
|
+
thinking: previousThinking || '[Continuing from previous reasoning]',
|
|
274
|
+
synthetic: true,
|
|
275
|
+
};
|
|
276
|
+
try {
|
|
277
|
+
writeFileSync(join(partDir, `${partId}.json`), JSON.stringify(part, null, 2));
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Strip all thinking parts from a message
|
|
286
|
+
*/
|
|
287
|
+
export function stripThinkingParts(messageID) {
|
|
288
|
+
const partDir = join(PART_STORAGE, messageID);
|
|
289
|
+
if (!existsSync(partDir))
|
|
290
|
+
return false;
|
|
291
|
+
let anyRemoved = false;
|
|
292
|
+
for (const file of readdirSync(partDir)) {
|
|
293
|
+
if (!file.endsWith('.json'))
|
|
294
|
+
continue;
|
|
295
|
+
try {
|
|
296
|
+
const filePath = join(partDir, file);
|
|
297
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
298
|
+
const part = JSON.parse(content);
|
|
299
|
+
if (THINKING_TYPES.has(part.type)) {
|
|
300
|
+
unlinkSync(filePath);
|
|
301
|
+
anyRemoved = true;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return anyRemoved;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Replace empty text parts with placeholder text
|
|
312
|
+
*/
|
|
313
|
+
export function replaceEmptyTextParts(messageID, replacementText = PLACEHOLDER_TEXT) {
|
|
314
|
+
const partDir = join(PART_STORAGE, messageID);
|
|
315
|
+
if (!existsSync(partDir))
|
|
316
|
+
return false;
|
|
317
|
+
let anyReplaced = false;
|
|
318
|
+
for (const file of readdirSync(partDir)) {
|
|
319
|
+
if (!file.endsWith('.json'))
|
|
320
|
+
continue;
|
|
321
|
+
try {
|
|
322
|
+
const filePath = join(partDir, file);
|
|
323
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
324
|
+
const part = JSON.parse(content);
|
|
325
|
+
if (part.type === 'text') {
|
|
326
|
+
const textPart = part;
|
|
327
|
+
if (!textPart.text?.trim()) {
|
|
328
|
+
textPart.text = replacementText;
|
|
329
|
+
textPart.synthetic = true;
|
|
330
|
+
writeFileSync(filePath, JSON.stringify(textPart, null, 2));
|
|
331
|
+
anyReplaced = true;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return anyReplaced;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Find messages with empty text parts
|
|
343
|
+
*/
|
|
344
|
+
export function findMessagesWithEmptyTextParts(sessionID) {
|
|
345
|
+
const messages = readMessages(sessionID);
|
|
346
|
+
const result = [];
|
|
347
|
+
for (const msg of messages) {
|
|
348
|
+
const parts = readParts(msg.id);
|
|
349
|
+
const hasEmptyTextPart = parts.some((p) => {
|
|
350
|
+
if (p.type !== 'text')
|
|
351
|
+
return false;
|
|
352
|
+
const textPart = p;
|
|
353
|
+
return !textPart.text?.trim();
|
|
354
|
+
});
|
|
355
|
+
if (hasEmptyTextPart) {
|
|
356
|
+
result.push(msg.id);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return result;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Find message by index that needs thinking block
|
|
363
|
+
*/
|
|
364
|
+
export function findMessageByIndexNeedingThinking(sessionID, targetIndex) {
|
|
365
|
+
const messages = readMessages(sessionID);
|
|
366
|
+
if (targetIndex < 0 || targetIndex >= messages.length)
|
|
367
|
+
return null;
|
|
368
|
+
const targetMsg = messages[targetIndex];
|
|
369
|
+
if (targetMsg.role !== 'assistant')
|
|
370
|
+
return null;
|
|
371
|
+
const parts = readParts(targetMsg.id);
|
|
372
|
+
if (parts.length === 0)
|
|
373
|
+
return null;
|
|
374
|
+
const sortedParts = [...parts].sort((a, b) => a.id.localeCompare(b.id));
|
|
375
|
+
const firstPart = sortedParts[0];
|
|
376
|
+
const firstIsThinking = THINKING_TYPES.has(firstPart.type);
|
|
377
|
+
if (!firstIsThinking) {
|
|
378
|
+
return targetMsg.id;
|
|
379
|
+
}
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/hooks/recovery/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Recovery Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for all recovery mechanisms in Claude Code.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Recovery error types
|
|
8
|
+
*/
|
|
9
|
+
export type RecoveryErrorType = 'context_window_limit' | 'edit_error' | 'tool_result_missing' | 'thinking_block_order' | 'thinking_disabled_violation' | 'empty_content' | null;
|
|
10
|
+
/**
|
|
11
|
+
* Recovery result
|
|
12
|
+
*/
|
|
13
|
+
export interface RecoveryResult {
|
|
14
|
+
/** Whether recovery was attempted */
|
|
15
|
+
attempted: boolean;
|
|
16
|
+
/** Whether recovery was successful */
|
|
17
|
+
success: boolean;
|
|
18
|
+
/** Recovery message to inject */
|
|
19
|
+
message?: string;
|
|
20
|
+
/** Error type detected */
|
|
21
|
+
errorType?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parsed token limit error information
|
|
25
|
+
*/
|
|
26
|
+
export interface ParsedTokenLimitError {
|
|
27
|
+
/** Current number of tokens in the conversation */
|
|
28
|
+
currentTokens: number;
|
|
29
|
+
/** Maximum allowed tokens */
|
|
30
|
+
maxTokens: number;
|
|
31
|
+
/** Request ID from the API response */
|
|
32
|
+
requestId?: string;
|
|
33
|
+
/** Type of error detected */
|
|
34
|
+
errorType: string;
|
|
35
|
+
/** Provider ID (e.g., 'anthropic') */
|
|
36
|
+
providerID?: string;
|
|
37
|
+
/** Model ID (e.g., 'claude-3-opus-20240229') */
|
|
38
|
+
modelID?: string;
|
|
39
|
+
/** Index of the problematic message */
|
|
40
|
+
messageIndex?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Retry state for recovery attempts
|
|
44
|
+
*/
|
|
45
|
+
export interface RetryState {
|
|
46
|
+
/** Number of retry attempts made */
|
|
47
|
+
attempt: number;
|
|
48
|
+
/** Timestamp of last retry attempt */
|
|
49
|
+
lastAttemptTime: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Truncation state for progressive truncation
|
|
53
|
+
*/
|
|
54
|
+
export interface TruncateState {
|
|
55
|
+
/** Number of truncation attempts made */
|
|
56
|
+
truncateAttempt: number;
|
|
57
|
+
/** ID of the last truncated part */
|
|
58
|
+
lastTruncatedPartId?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Message data structure
|
|
62
|
+
*/
|
|
63
|
+
export interface MessageData {
|
|
64
|
+
info?: {
|
|
65
|
+
id?: string;
|
|
66
|
+
role?: string;
|
|
67
|
+
sessionID?: string;
|
|
68
|
+
parentID?: string;
|
|
69
|
+
error?: unknown;
|
|
70
|
+
agent?: string;
|
|
71
|
+
model?: {
|
|
72
|
+
providerID: string;
|
|
73
|
+
modelID: string;
|
|
74
|
+
};
|
|
75
|
+
system?: string;
|
|
76
|
+
tools?: Record<string, boolean>;
|
|
77
|
+
};
|
|
78
|
+
parts?: Array<{
|
|
79
|
+
type: string;
|
|
80
|
+
id?: string;
|
|
81
|
+
text?: string;
|
|
82
|
+
thinking?: string;
|
|
83
|
+
name?: string;
|
|
84
|
+
input?: Record<string, unknown>;
|
|
85
|
+
callID?: string;
|
|
86
|
+
}>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Stored message metadata
|
|
90
|
+
*/
|
|
91
|
+
export interface StoredMessageMeta {
|
|
92
|
+
id: string;
|
|
93
|
+
sessionID: string;
|
|
94
|
+
role: 'user' | 'assistant';
|
|
95
|
+
parentID?: string;
|
|
96
|
+
time?: {
|
|
97
|
+
created: number;
|
|
98
|
+
completed?: number;
|
|
99
|
+
};
|
|
100
|
+
error?: unknown;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Stored text part
|
|
104
|
+
*/
|
|
105
|
+
export interface StoredTextPart {
|
|
106
|
+
id: string;
|
|
107
|
+
sessionID: string;
|
|
108
|
+
messageID: string;
|
|
109
|
+
type: 'text';
|
|
110
|
+
text: string;
|
|
111
|
+
synthetic?: boolean;
|
|
112
|
+
ignored?: boolean;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Stored tool part
|
|
116
|
+
*/
|
|
117
|
+
export interface StoredToolPart {
|
|
118
|
+
id: string;
|
|
119
|
+
sessionID: string;
|
|
120
|
+
messageID: string;
|
|
121
|
+
type: 'tool';
|
|
122
|
+
callID: string;
|
|
123
|
+
tool: string;
|
|
124
|
+
state: {
|
|
125
|
+
status: 'pending' | 'running' | 'completed' | 'error';
|
|
126
|
+
input: Record<string, unknown>;
|
|
127
|
+
output?: string;
|
|
128
|
+
error?: string;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Stored reasoning/thinking part
|
|
133
|
+
*/
|
|
134
|
+
export interface StoredReasoningPart {
|
|
135
|
+
id: string;
|
|
136
|
+
sessionID: string;
|
|
137
|
+
messageID: string;
|
|
138
|
+
type: 'reasoning';
|
|
139
|
+
text: string;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Union of all stored part types
|
|
143
|
+
*/
|
|
144
|
+
export type StoredPart = StoredTextPart | StoredToolPart | StoredReasoningPart | {
|
|
145
|
+
id: string;
|
|
146
|
+
sessionID: string;
|
|
147
|
+
messageID: string;
|
|
148
|
+
type: string;
|
|
149
|
+
[key: string]: unknown;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Unified recovery configuration
|
|
153
|
+
*/
|
|
154
|
+
export interface RecoveryConfig {
|
|
155
|
+
/** Whether to enable context window limit recovery */
|
|
156
|
+
contextWindowRecovery?: boolean;
|
|
157
|
+
/** Whether to enable edit error recovery */
|
|
158
|
+
editErrorRecovery?: boolean;
|
|
159
|
+
/** Whether to enable session recovery */
|
|
160
|
+
sessionRecovery?: boolean;
|
|
161
|
+
/** Whether to show detailed recovery messages */
|
|
162
|
+
detailed?: boolean;
|
|
163
|
+
/** Custom recovery messages */
|
|
164
|
+
customMessages?: Partial<Record<RecoveryErrorType & string, string>>;
|
|
165
|
+
/** Whether to enable auto-resume after recovery */
|
|
166
|
+
autoResume?: boolean;
|
|
167
|
+
/** Whether to enable detailed logging */
|
|
168
|
+
debug?: boolean;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Configuration for retry behavior
|
|
172
|
+
*/
|
|
173
|
+
export declare const RETRY_CONFIG: {
|
|
174
|
+
/** Maximum retry attempts */
|
|
175
|
+
readonly maxAttempts: 2;
|
|
176
|
+
/** Initial delay between retries in ms */
|
|
177
|
+
readonly initialDelayMs: 2000;
|
|
178
|
+
/** Backoff factor for exponential backoff */
|
|
179
|
+
readonly backoffFactor: 2;
|
|
180
|
+
/** Maximum delay between retries in ms */
|
|
181
|
+
readonly maxDelayMs: 30000;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* Configuration for truncation behavior
|
|
185
|
+
*/
|
|
186
|
+
export declare const TRUNCATE_CONFIG: {
|
|
187
|
+
/** Maximum truncation attempts */
|
|
188
|
+
readonly maxTruncateAttempts: 20;
|
|
189
|
+
/** Minimum output size (chars) to attempt truncation */
|
|
190
|
+
readonly minOutputSizeToTruncate: 500;
|
|
191
|
+
/** Target token ratio after truncation */
|
|
192
|
+
readonly targetTokenRatio: 0.5;
|
|
193
|
+
/** Average characters per token estimate */
|
|
194
|
+
readonly charsPerToken: 4;
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/recovery/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Recovery Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for all recovery mechanisms in Claude Code.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for retry behavior
|
|
8
|
+
*/
|
|
9
|
+
export const RETRY_CONFIG = {
|
|
10
|
+
/** Maximum retry attempts */
|
|
11
|
+
maxAttempts: 2,
|
|
12
|
+
/** Initial delay between retries in ms */
|
|
13
|
+
initialDelayMs: 2000,
|
|
14
|
+
/** Backoff factor for exponential backoff */
|
|
15
|
+
backoffFactor: 2,
|
|
16
|
+
/** Maximum delay between retries in ms */
|
|
17
|
+
maxDelayMs: 30000,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Configuration for truncation behavior
|
|
21
|
+
*/
|
|
22
|
+
export const TRUNCATE_CONFIG = {
|
|
23
|
+
/** Maximum truncation attempts */
|
|
24
|
+
maxTruncateAttempts: 20,
|
|
25
|
+
/** Minimum output size (chars) to attempt truncation */
|
|
26
|
+
minOutputSizeToTruncate: 500,
|
|
27
|
+
/** Target token ratio after truncation */
|
|
28
|
+
targetTokenRatio: 0.5,
|
|
29
|
+
/** Average characters per token estimate */
|
|
30
|
+
charsPerToken: 4,
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/recovery/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6LH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,6BAA6B;IAC7B,WAAW,EAAE,CAAC;IACd,0CAA0C;IAC1C,cAAc,EAAE,IAAI;IACpB,6CAA6C;IAC7C,aAAa,EAAE,CAAC;IAChB,0CAA0C;IAC1C,UAAU,EAAE,KAAK;CACT,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,kCAAkC;IAClC,mBAAmB,EAAE,EAAE;IACvB,wDAAwD;IACxD,uBAAuB,EAAE,GAAG;IAC5B,0CAA0C;IAC1C,gBAAgB,EAAE,GAAG;IACrB,4CAA4C;IAC5C,aAAa,EAAE,CAAC;CACR,CAAC"}
|