oh-my-claude-sisyphus 1.9.0 → 1.10.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/dist/cli/index.js +0 -0
- package/dist/features/builtin-skills/skills.d.ts.map +1 -1
- package/dist/features/builtin-skills/skills.js +144 -11
- package/dist/features/builtin-skills/skills.js.map +1 -1
- package/dist/hooks/bridge.d.ts +1 -1
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +71 -0
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +12 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/persistent-mode/index.d.ts +40 -0
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -0
- package/dist/hooks/persistent-mode/index.js +200 -0
- package/dist/hooks/persistent-mode/index.js.map +1 -0
- package/dist/hooks/plugin-patterns/index.d.ts +107 -0
- package/dist/hooks/plugin-patterns/index.d.ts.map +1 -0
- package/dist/hooks/plugin-patterns/index.js +286 -0
- package/dist/hooks/plugin-patterns/index.js.map +1 -0
- package/dist/hooks/ralph-verifier/index.d.ts +72 -0
- package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
- package/dist/hooks/ralph-verifier/index.js +223 -0
- package/dist/hooks/ralph-verifier/index.js.map +1 -0
- package/dist/hooks/ultrawork-state/index.d.ts +60 -0
- package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
- package/dist/hooks/ultrawork-state/index.js +207 -0
- package/dist/hooks/ultrawork-state/index.js.map +1 -0
- package/dist/installer/hooks.d.ts +38 -2
- package/dist/installer/hooks.d.ts.map +1 -1
- package/dist/installer/hooks.js +599 -8
- package/dist/installer/hooks.js.map +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +123 -7
- package/dist/installer/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/agents/model-lists.d.ts +0 -26
- package/dist/agents/model-lists.d.ts.map +0 -1
- package/dist/agents/model-lists.js +0 -62
- package/dist/agents/model-lists.js.map +0 -1
- package/dist/auth/index.d.ts +0 -10
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -13
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/manager.d.ts +0 -54
- package/dist/auth/manager.d.ts.map +0 -1
- package/dist/auth/manager.js +0 -248
- package/dist/auth/manager.js.map +0 -1
- package/dist/auth/oauth-google.d.ts +0 -47
- package/dist/auth/oauth-google.d.ts.map +0 -1
- package/dist/auth/oauth-google.js +0 -280
- package/dist/auth/oauth-google.js.map +0 -1
- package/dist/auth/oauth-openai.d.ts +0 -46
- package/dist/auth/oauth-openai.d.ts.map +0 -1
- package/dist/auth/oauth-openai.js +0 -264
- package/dist/auth/oauth-openai.js.map +0 -1
- package/dist/auth/pkce.d.ts +0 -14
- package/dist/auth/pkce.d.ts.map +0 -1
- package/dist/auth/pkce.js +0 -35
- package/dist/auth/pkce.js.map +0 -1
- package/dist/auth/storage.d.ts +0 -52
- package/dist/auth/storage.d.ts.map +0 -1
- package/dist/auth/storage.js +0 -230
- package/dist/auth/storage.js.map +0 -1
- package/dist/auth/types.d.ts +0 -76
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -5
- package/dist/auth/types.js.map +0 -1
- package/dist/providers/index.d.ts +0 -8
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -10
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/registry.d.ts +0 -29
- package/dist/providers/registry.d.ts.map +0 -1
- package/dist/providers/registry.js +0 -162
- package/dist/providers/registry.js.map +0 -1
- package/dist/providers/router.d.ts +0 -40
- package/dist/providers/router.d.ts.map +0 -1
- package/dist/providers/router.js +0 -88
- package/dist/providers/router.js.map +0 -1
- package/dist/providers/types.d.ts +0 -92
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -27
- package/dist/providers/types.js.map +0 -1
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Mode Hook
|
|
3
|
+
*
|
|
4
|
+
* Unified handler for persistent work modes: ultrawork, ralph-loop, and todo-continuation.
|
|
5
|
+
* This hook intercepts Stop events and enforces work continuation based on:
|
|
6
|
+
* 1. Active ultrawork mode with pending todos
|
|
7
|
+
* 2. Active ralph-loop with incomplete promise
|
|
8
|
+
* 3. Any pending todos (general enforcement)
|
|
9
|
+
*
|
|
10
|
+
* Priority order: Ralph Loop > Ultrawork > Todo Continuation
|
|
11
|
+
*/
|
|
12
|
+
import { readUltraworkState, incrementReinforcement, deactivateUltrawork, getUltraworkPersistenceMessage } from '../ultrawork-state/index.js';
|
|
13
|
+
import { readRalphState, incrementRalphIteration, clearRalphState, detectCompletionPromise } from '../ralph-loop/index.js';
|
|
14
|
+
import { checkIncompleteTodos, getNextPendingTodo } from '../todo-continuation/index.js';
|
|
15
|
+
import { TODO_CONTINUATION_PROMPT } from '../../installer/hooks.js';
|
|
16
|
+
/**
|
|
17
|
+
* Check Ralph Loop state and determine if it should continue
|
|
18
|
+
*/
|
|
19
|
+
async function checkRalphLoop(sessionId, directory) {
|
|
20
|
+
const state = readRalphState(directory || process.cwd());
|
|
21
|
+
if (!state || !state.active) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
// Check if this is the right session
|
|
25
|
+
if (state.session_id && sessionId && state.session_id !== sessionId) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
// Check for completion promise in transcript
|
|
29
|
+
const completed = detectCompletionPromise(sessionId || '', state.completion_promise);
|
|
30
|
+
if (completed) {
|
|
31
|
+
clearRalphState(directory || process.cwd());
|
|
32
|
+
return {
|
|
33
|
+
shouldBlock: false,
|
|
34
|
+
message: `[RALPH LOOP COMPLETE] Task completed after ${state.iteration} iteration(s). Great work!`,
|
|
35
|
+
mode: 'none'
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Check max iterations
|
|
39
|
+
if (state.iteration >= state.max_iterations) {
|
|
40
|
+
clearRalphState(directory || process.cwd());
|
|
41
|
+
return {
|
|
42
|
+
shouldBlock: false,
|
|
43
|
+
message: `[RALPH LOOP STOPPED] Max iterations (${state.max_iterations}) reached without completion promise. Consider reviewing the task requirements.`,
|
|
44
|
+
mode: 'none'
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Increment and continue
|
|
48
|
+
const newState = incrementRalphIteration(directory || process.cwd());
|
|
49
|
+
if (!newState) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const continuationPrompt = `<ralph-loop-continuation>
|
|
53
|
+
|
|
54
|
+
[RALPH LOOP - ITERATION ${newState.iteration}/${newState.max_iterations}]
|
|
55
|
+
|
|
56
|
+
Your previous attempt did not output the completion promise. The work is NOT done yet.
|
|
57
|
+
|
|
58
|
+
CRITICAL INSTRUCTIONS:
|
|
59
|
+
1. Review your progress and the original task
|
|
60
|
+
2. Check your todo list - are ALL items marked complete?
|
|
61
|
+
3. Continue from where you left off
|
|
62
|
+
4. When FULLY complete, output: <promise>${newState.completion_promise}</promise>
|
|
63
|
+
5. Do NOT stop until the task is truly done
|
|
64
|
+
|
|
65
|
+
${newState.prompt ? `Original task: ${newState.prompt}` : ''}
|
|
66
|
+
|
|
67
|
+
</ralph-loop-continuation>
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
`;
|
|
72
|
+
return {
|
|
73
|
+
shouldBlock: true,
|
|
74
|
+
message: continuationPrompt,
|
|
75
|
+
mode: 'ralph-loop',
|
|
76
|
+
metadata: {
|
|
77
|
+
iteration: newState.iteration,
|
|
78
|
+
maxIterations: newState.max_iterations
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check Ultrawork state and determine if it should reinforce
|
|
84
|
+
*/
|
|
85
|
+
async function checkUltrawork(sessionId, directory, hasIncompleteTodos) {
|
|
86
|
+
const state = readUltraworkState(directory);
|
|
87
|
+
if (!state || !state.active) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
// If bound to a session, only reinforce for that session
|
|
91
|
+
if (state.session_id && sessionId && state.session_id !== sessionId) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
// If no incomplete todos, ultrawork can complete
|
|
95
|
+
if (!hasIncompleteTodos) {
|
|
96
|
+
deactivateUltrawork(directory);
|
|
97
|
+
return {
|
|
98
|
+
shouldBlock: false,
|
|
99
|
+
message: `[ULTRAWORK COMPLETE] All tasks finished. Ultrawork mode deactivated. Well done!`,
|
|
100
|
+
mode: 'none'
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Reinforce ultrawork mode
|
|
104
|
+
const newState = incrementReinforcement(directory);
|
|
105
|
+
if (!newState) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
const message = getUltraworkPersistenceMessage(newState);
|
|
109
|
+
return {
|
|
110
|
+
shouldBlock: true,
|
|
111
|
+
message,
|
|
112
|
+
mode: 'ultrawork',
|
|
113
|
+
metadata: {
|
|
114
|
+
reinforcementCount: newState.reinforcement_count
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check for incomplete todos (baseline enforcement)
|
|
120
|
+
*/
|
|
121
|
+
async function checkTodoContinuation(sessionId, directory) {
|
|
122
|
+
const result = await checkIncompleteTodos(sessionId, directory);
|
|
123
|
+
if (result.count === 0) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
const nextTodo = getNextPendingTodo(result);
|
|
127
|
+
const nextTaskInfo = nextTodo
|
|
128
|
+
? `\n\nNext task: "${nextTodo.content}" (${nextTodo.status})`
|
|
129
|
+
: '';
|
|
130
|
+
const message = `<todo-continuation>
|
|
131
|
+
|
|
132
|
+
${TODO_CONTINUATION_PROMPT}
|
|
133
|
+
|
|
134
|
+
[Status: ${result.count} of ${result.total} tasks remaining]${nextTaskInfo}
|
|
135
|
+
|
|
136
|
+
</todo-continuation>
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
`;
|
|
141
|
+
return {
|
|
142
|
+
shouldBlock: true,
|
|
143
|
+
message,
|
|
144
|
+
mode: 'todo-continuation',
|
|
145
|
+
metadata: {
|
|
146
|
+
todoCount: result.count
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Main persistent mode checker
|
|
152
|
+
* Checks all persistent modes in priority order and returns appropriate action
|
|
153
|
+
*/
|
|
154
|
+
export async function checkPersistentModes(sessionId, directory) {
|
|
155
|
+
const workingDir = directory || process.cwd();
|
|
156
|
+
// First, check for incomplete todos (we need this info for ultrawork)
|
|
157
|
+
const todoResult = await checkIncompleteTodos(sessionId, workingDir);
|
|
158
|
+
const hasIncompleteTodos = todoResult.count > 0;
|
|
159
|
+
// Priority 1: Ralph Loop (explicit loop mode)
|
|
160
|
+
const ralphResult = await checkRalphLoop(sessionId, workingDir);
|
|
161
|
+
if (ralphResult?.shouldBlock) {
|
|
162
|
+
return ralphResult;
|
|
163
|
+
}
|
|
164
|
+
// Priority 2: Ultrawork Mode (performance mode with persistence)
|
|
165
|
+
const ultraworkResult = await checkUltrawork(sessionId, workingDir, hasIncompleteTodos);
|
|
166
|
+
if (ultraworkResult?.shouldBlock) {
|
|
167
|
+
return ultraworkResult;
|
|
168
|
+
}
|
|
169
|
+
// Priority 3: Todo Continuation (baseline enforcement)
|
|
170
|
+
if (hasIncompleteTodos) {
|
|
171
|
+
const todoContResult = await checkTodoContinuation(sessionId, workingDir);
|
|
172
|
+
if (todoContResult?.shouldBlock) {
|
|
173
|
+
return todoContResult;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// No blocking needed
|
|
177
|
+
return {
|
|
178
|
+
shouldBlock: false,
|
|
179
|
+
message: '',
|
|
180
|
+
mode: 'none'
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Create hook output for Claude Code
|
|
185
|
+
*/
|
|
186
|
+
export function createHookOutput(result) {
|
|
187
|
+
if (!result.shouldBlock) {
|
|
188
|
+
// Allow stop, but optionally inject completion message
|
|
189
|
+
return {
|
|
190
|
+
continue: true,
|
|
191
|
+
message: result.message || undefined
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// Block stop and inject continuation message
|
|
195
|
+
return {
|
|
196
|
+
continue: false,
|
|
197
|
+
reason: result.message
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/persistent-mode/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Popular Plugin Patterns
|
|
3
|
+
*
|
|
4
|
+
* Common hook patterns from the Claude Code community:
|
|
5
|
+
* - Auto-format on file save
|
|
6
|
+
* - Lint validation before commit
|
|
7
|
+
* - Commit message validation
|
|
8
|
+
* - Test runner before commit
|
|
9
|
+
* - Type checking enforcement
|
|
10
|
+
*/
|
|
11
|
+
export interface FormatConfig {
|
|
12
|
+
/** File extensions to format */
|
|
13
|
+
extensions: string[];
|
|
14
|
+
/** Formatter command (e.g., 'prettier --write', 'black') */
|
|
15
|
+
command: string;
|
|
16
|
+
/** Whether to run on file save */
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get formatter command for a file extension
|
|
21
|
+
*/
|
|
22
|
+
export declare function getFormatter(ext: string): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a formatter is available
|
|
25
|
+
*/
|
|
26
|
+
export declare function isFormatterAvailable(command: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Format a file using the appropriate formatter
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatFile(filePath: string): {
|
|
31
|
+
success: boolean;
|
|
32
|
+
message: string;
|
|
33
|
+
};
|
|
34
|
+
export interface LintConfig {
|
|
35
|
+
/** Lint command to run */
|
|
36
|
+
command: string;
|
|
37
|
+
/** File patterns to lint */
|
|
38
|
+
patterns: string[];
|
|
39
|
+
/** Whether to block on lint errors */
|
|
40
|
+
blocking: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get linter command for a file extension
|
|
44
|
+
*/
|
|
45
|
+
export declare function getLinter(ext: string): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Run linter on a file
|
|
48
|
+
*/
|
|
49
|
+
export declare function lintFile(filePath: string): {
|
|
50
|
+
success: boolean;
|
|
51
|
+
message: string;
|
|
52
|
+
};
|
|
53
|
+
export interface CommitConfig {
|
|
54
|
+
/** Conventional commit types allowed */
|
|
55
|
+
types: string[];
|
|
56
|
+
/** Maximum subject length */
|
|
57
|
+
maxSubjectLength: number;
|
|
58
|
+
/** Require scope */
|
|
59
|
+
requireScope: boolean;
|
|
60
|
+
/** Require body */
|
|
61
|
+
requireBody: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validate a commit message against conventional commit format
|
|
65
|
+
*/
|
|
66
|
+
export declare function validateCommitMessage(message: string, config?: Partial<CommitConfig>): {
|
|
67
|
+
valid: boolean;
|
|
68
|
+
errors: string[];
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Run TypeScript type checking
|
|
72
|
+
*/
|
|
73
|
+
export declare function runTypeCheck(directory: string): {
|
|
74
|
+
success: boolean;
|
|
75
|
+
message: string;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Detect and run tests for a project
|
|
79
|
+
*/
|
|
80
|
+
export declare function runTests(directory: string): {
|
|
81
|
+
success: boolean;
|
|
82
|
+
message: string;
|
|
83
|
+
};
|
|
84
|
+
export interface PreCommitResult {
|
|
85
|
+
canCommit: boolean;
|
|
86
|
+
checks: Array<{
|
|
87
|
+
name: string;
|
|
88
|
+
passed: boolean;
|
|
89
|
+
message: string;
|
|
90
|
+
}>;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Run all pre-commit checks
|
|
94
|
+
*/
|
|
95
|
+
export declare function runPreCommitChecks(directory: string, commitMessage?: string): PreCommitResult;
|
|
96
|
+
/**
|
|
97
|
+
* Generate pre-commit check reminder message
|
|
98
|
+
*/
|
|
99
|
+
export declare function getPreCommitReminderMessage(result: PreCommitResult): string;
|
|
100
|
+
/**
|
|
101
|
+
* Generate auto-format reminder message
|
|
102
|
+
*/
|
|
103
|
+
export declare function getAutoFormatMessage(filePath: string, result: {
|
|
104
|
+
success: boolean;
|
|
105
|
+
message: string;
|
|
106
|
+
}): string;
|
|
107
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/plugin-patterns/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;CAClB;AAgBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQ7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAkBlF;AAMD,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAYD;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqBhF;AAMD,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,mBAAmB;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAkBD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAyCtC;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAmBrF;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA0BjF;AAMD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,CAyBjB;AAMD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAqB3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAmB5G"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Popular Plugin Patterns
|
|
3
|
+
*
|
|
4
|
+
* Common hook patterns from the Claude Code community:
|
|
5
|
+
* - Auto-format on file save
|
|
6
|
+
* - Lint validation before commit
|
|
7
|
+
* - Commit message validation
|
|
8
|
+
* - Test runner before commit
|
|
9
|
+
* - Type checking enforcement
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync } from 'fs';
|
|
12
|
+
import { join, extname } from 'path';
|
|
13
|
+
import { execSync } from 'child_process';
|
|
14
|
+
const DEFAULT_FORMATTERS = {
|
|
15
|
+
'.ts': 'prettier --write',
|
|
16
|
+
'.tsx': 'prettier --write',
|
|
17
|
+
'.js': 'prettier --write',
|
|
18
|
+
'.jsx': 'prettier --write',
|
|
19
|
+
'.json': 'prettier --write',
|
|
20
|
+
'.css': 'prettier --write',
|
|
21
|
+
'.scss': 'prettier --write',
|
|
22
|
+
'.md': 'prettier --write',
|
|
23
|
+
'.py': 'black',
|
|
24
|
+
'.go': 'gofmt -w',
|
|
25
|
+
'.rs': 'rustfmt'
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Get formatter command for a file extension
|
|
29
|
+
*/
|
|
30
|
+
export function getFormatter(ext) {
|
|
31
|
+
return DEFAULT_FORMATTERS[ext] || null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if a formatter is available
|
|
35
|
+
*/
|
|
36
|
+
export function isFormatterAvailable(command) {
|
|
37
|
+
try {
|
|
38
|
+
const binary = command.split(' ')[0];
|
|
39
|
+
execSync(`which ${binary}`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Format a file using the appropriate formatter
|
|
48
|
+
*/
|
|
49
|
+
export function formatFile(filePath) {
|
|
50
|
+
const ext = extname(filePath);
|
|
51
|
+
const formatter = getFormatter(ext);
|
|
52
|
+
if (!formatter) {
|
|
53
|
+
return { success: true, message: `No formatter configured for ${ext}` };
|
|
54
|
+
}
|
|
55
|
+
if (!isFormatterAvailable(formatter)) {
|
|
56
|
+
return { success: true, message: `Formatter ${formatter} not available` };
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
execSync(`${formatter} "${filePath}"`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
60
|
+
return { success: true, message: `Formatted ${filePath}` };
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return { success: false, message: `Format failed: ${error}` };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const DEFAULT_LINTERS = {
|
|
67
|
+
'.ts': 'eslint --fix',
|
|
68
|
+
'.tsx': 'eslint --fix',
|
|
69
|
+
'.js': 'eslint --fix',
|
|
70
|
+
'.jsx': 'eslint --fix',
|
|
71
|
+
'.py': 'ruff check --fix',
|
|
72
|
+
'.go': 'golangci-lint run',
|
|
73
|
+
'.rs': 'cargo clippy'
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Get linter command for a file extension
|
|
77
|
+
*/
|
|
78
|
+
export function getLinter(ext) {
|
|
79
|
+
return DEFAULT_LINTERS[ext] || null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Run linter on a file
|
|
83
|
+
*/
|
|
84
|
+
export function lintFile(filePath) {
|
|
85
|
+
const ext = extname(filePath);
|
|
86
|
+
const linter = getLinter(ext);
|
|
87
|
+
if (!linter) {
|
|
88
|
+
return { success: true, message: `No linter configured for ${ext}` };
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const binary = linter.split(' ')[0];
|
|
92
|
+
execSync(`which ${binary}`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return { success: true, message: `Linter ${linter} not available` };
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
execSync(`${linter} "${filePath}"`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
99
|
+
return { success: true, message: `Lint passed for ${filePath}` };
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
return { success: false, message: `Lint errors in ${filePath}` };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const DEFAULT_COMMIT_TYPES = [
|
|
106
|
+
'feat', // New feature
|
|
107
|
+
'fix', // Bug fix
|
|
108
|
+
'docs', // Documentation
|
|
109
|
+
'style', // Formatting, no code change
|
|
110
|
+
'refactor', // Refactoring
|
|
111
|
+
'perf', // Performance improvement
|
|
112
|
+
'test', // Adding tests
|
|
113
|
+
'build', // Build system changes
|
|
114
|
+
'ci', // CI configuration
|
|
115
|
+
'chore', // Maintenance
|
|
116
|
+
'revert' // Revert previous commit
|
|
117
|
+
];
|
|
118
|
+
const CONVENTIONAL_COMMIT_REGEX = /^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\([a-z0-9-]+\))?(!)?:\s.+$/;
|
|
119
|
+
/**
|
|
120
|
+
* Validate a commit message against conventional commit format
|
|
121
|
+
*/
|
|
122
|
+
export function validateCommitMessage(message, config) {
|
|
123
|
+
const errors = [];
|
|
124
|
+
const lines = message.trim().split('\n');
|
|
125
|
+
const subject = lines[0];
|
|
126
|
+
// Check subject line
|
|
127
|
+
if (!subject) {
|
|
128
|
+
errors.push('Commit message cannot be empty');
|
|
129
|
+
return { valid: false, errors };
|
|
130
|
+
}
|
|
131
|
+
// Check conventional commit format
|
|
132
|
+
if (!CONVENTIONAL_COMMIT_REGEX.test(subject)) {
|
|
133
|
+
errors.push('Subject must follow conventional commit format: type(scope?): description');
|
|
134
|
+
errors.push(`Allowed types: ${DEFAULT_COMMIT_TYPES.join(', ')}`);
|
|
135
|
+
}
|
|
136
|
+
// Check subject length
|
|
137
|
+
const maxLength = config?.maxSubjectLength || 72;
|
|
138
|
+
if (subject.length > maxLength) {
|
|
139
|
+
errors.push(`Subject line exceeds ${maxLength} characters`);
|
|
140
|
+
}
|
|
141
|
+
// Check for scope if required
|
|
142
|
+
if (config?.requireScope) {
|
|
143
|
+
const hasScope = /\([a-z0-9-]+\)/.test(subject);
|
|
144
|
+
if (!hasScope) {
|
|
145
|
+
errors.push('Scope is required in commit message');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Check for body if required
|
|
149
|
+
if (config?.requireBody) {
|
|
150
|
+
if (lines.length < 3 || !lines[2]) {
|
|
151
|
+
errors.push('Commit body is required');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return { valid: errors.length === 0, errors };
|
|
155
|
+
}
|
|
156
|
+
// =============================================================================
|
|
157
|
+
// TYPE CHECKING PATTERN
|
|
158
|
+
// =============================================================================
|
|
159
|
+
/**
|
|
160
|
+
* Run TypeScript type checking
|
|
161
|
+
*/
|
|
162
|
+
export function runTypeCheck(directory) {
|
|
163
|
+
const tsconfigPath = join(directory, 'tsconfig.json');
|
|
164
|
+
if (!existsSync(tsconfigPath)) {
|
|
165
|
+
return { success: true, message: 'No tsconfig.json found' };
|
|
166
|
+
}
|
|
167
|
+
try {
|
|
168
|
+
execSync('which tsc', { encoding: 'utf-8', stdio: 'pipe' });
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return { success: true, message: 'TypeScript not installed' };
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
execSync('tsc --noEmit', { cwd: directory, encoding: 'utf-8', stdio: 'pipe' });
|
|
175
|
+
return { success: true, message: 'Type check passed' };
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
return { success: false, message: 'Type errors found' };
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// =============================================================================
|
|
182
|
+
// TEST RUNNER PATTERN
|
|
183
|
+
// =============================================================================
|
|
184
|
+
/**
|
|
185
|
+
* Detect and run tests for a project
|
|
186
|
+
*/
|
|
187
|
+
export function runTests(directory) {
|
|
188
|
+
const packageJsonPath = join(directory, 'package.json');
|
|
189
|
+
if (existsSync(packageJsonPath)) {
|
|
190
|
+
try {
|
|
191
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
192
|
+
if (pkg.scripts?.test) {
|
|
193
|
+
execSync('npm test', { cwd: directory, encoding: 'utf-8', stdio: 'pipe' });
|
|
194
|
+
return { success: true, message: 'Tests passed' };
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
return { success: false, message: 'Tests failed' };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Check for pytest
|
|
202
|
+
if (existsSync(join(directory, 'pytest.ini')) || existsSync(join(directory, 'pyproject.toml'))) {
|
|
203
|
+
try {
|
|
204
|
+
execSync('pytest', { cwd: directory, encoding: 'utf-8', stdio: 'pipe' });
|
|
205
|
+
return { success: true, message: 'Tests passed' };
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
return { success: false, message: 'Tests failed' };
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return { success: true, message: 'No test runner found' };
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Run all pre-commit checks
|
|
215
|
+
*/
|
|
216
|
+
export function runPreCommitChecks(directory, commitMessage) {
|
|
217
|
+
const checks = [];
|
|
218
|
+
// Type checking
|
|
219
|
+
const typeCheck = runTypeCheck(directory);
|
|
220
|
+
checks.push({
|
|
221
|
+
name: 'Type Check',
|
|
222
|
+
passed: typeCheck.success,
|
|
223
|
+
message: typeCheck.message
|
|
224
|
+
});
|
|
225
|
+
// Commit message validation
|
|
226
|
+
if (commitMessage) {
|
|
227
|
+
const commitCheck = validateCommitMessage(commitMessage);
|
|
228
|
+
checks.push({
|
|
229
|
+
name: 'Commit Message',
|
|
230
|
+
passed: commitCheck.valid,
|
|
231
|
+
message: commitCheck.valid ? 'Valid format' : commitCheck.errors.join('; ')
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
// All checks must pass
|
|
235
|
+
const canCommit = checks.every(c => c.passed);
|
|
236
|
+
return { canCommit, checks };
|
|
237
|
+
}
|
|
238
|
+
// =============================================================================
|
|
239
|
+
// HOOK MESSAGE GENERATORS
|
|
240
|
+
// =============================================================================
|
|
241
|
+
/**
|
|
242
|
+
* Generate pre-commit check reminder message
|
|
243
|
+
*/
|
|
244
|
+
export function getPreCommitReminderMessage(result) {
|
|
245
|
+
if (result.canCommit) {
|
|
246
|
+
return '';
|
|
247
|
+
}
|
|
248
|
+
const failedChecks = result.checks.filter(c => !c.passed);
|
|
249
|
+
return `<pre-commit-validation>
|
|
250
|
+
|
|
251
|
+
[PRE-COMMIT CHECKS FAILED]
|
|
252
|
+
|
|
253
|
+
The following checks did not pass:
|
|
254
|
+
${failedChecks.map(c => `- ${c.name}: ${c.message}`).join('\n')}
|
|
255
|
+
|
|
256
|
+
Please fix these issues before committing.
|
|
257
|
+
|
|
258
|
+
</pre-commit-validation>
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
`;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate auto-format reminder message
|
|
266
|
+
*/
|
|
267
|
+
export function getAutoFormatMessage(filePath, result) {
|
|
268
|
+
if (result.success) {
|
|
269
|
+
return '';
|
|
270
|
+
}
|
|
271
|
+
return `<auto-format>
|
|
272
|
+
|
|
273
|
+
[FORMAT WARNING]
|
|
274
|
+
|
|
275
|
+
File ${filePath} could not be auto-formatted:
|
|
276
|
+
${result.message}
|
|
277
|
+
|
|
278
|
+
Please check the file manually.
|
|
279
|
+
|
|
280
|
+
</auto-format>
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
`;
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/plugin-patterns/index.ts"],"names":[],"mappings":"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"}
|