claude-ketchup 0.1.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/LICENSE +21 -0
- package/README.md +544 -0
- package/bin/cli.ts +6 -0
- package/bin/postinstall.ts +5 -0
- package/bin/preuninstall.ts +5 -0
- package/commands/ketchup.md +107 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +7 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/postinstall.d.ts +3 -0
- package/dist/bin/postinstall.d.ts.map +1 -0
- package/dist/bin/postinstall.js +6 -0
- package/dist/bin/postinstall.js.map +1 -0
- package/dist/bin/preuninstall.d.ts +3 -0
- package/dist/bin/preuninstall.d.ts.map +1 -0
- package/dist/bin/preuninstall.js +6 -0
- package/dist/bin/preuninstall.js.map +1 -0
- package/dist/scripts/pre-tool-use.d.ts +3 -0
- package/dist/scripts/pre-tool-use.d.ts.map +1 -0
- package/dist/scripts/pre-tool-use.js +43 -0
- package/dist/scripts/pre-tool-use.js.map +1 -0
- package/dist/scripts/session-start.d.ts +3 -0
- package/dist/scripts/session-start.d.ts.map +1 -0
- package/dist/scripts/session-start.js +42 -0
- package/dist/scripts/session-start.js.map +1 -0
- package/dist/scripts/user-prompt-submit.d.ts +3 -0
- package/dist/scripts/user-prompt-submit.d.ts.map +1 -0
- package/dist/scripts/user-prompt-submit.js +43 -0
- package/dist/scripts/user-prompt-submit.js.map +1 -0
- package/dist/src/clean-logs.d.ts +6 -0
- package/dist/src/clean-logs.d.ts.map +1 -0
- package/dist/src/clean-logs.js +38 -0
- package/dist/src/clean-logs.js.map +1 -0
- package/dist/src/clean-logs.test.d.ts +2 -0
- package/dist/src/clean-logs.test.d.ts.map +1 -0
- package/dist/src/clean-logs.test.js +101 -0
- package/dist/src/clean-logs.test.js.map +1 -0
- package/dist/src/cli/cli.d.ts +3 -0
- package/dist/src/cli/cli.d.ts.map +1 -0
- package/dist/src/cli/cli.js +24 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/cli/cli.test.d.ts +2 -0
- package/dist/src/cli/cli.test.d.ts.map +1 -0
- package/dist/src/cli/cli.test.js +20 -0
- package/dist/src/cli/cli.test.js.map +1 -0
- package/dist/src/cli/doctor.d.ts +7 -0
- package/dist/src/cli/doctor.d.ts.map +1 -0
- package/dist/src/cli/doctor.js +52 -0
- package/dist/src/cli/doctor.js.map +1 -0
- package/dist/src/cli/doctor.test.d.ts +2 -0
- package/dist/src/cli/doctor.test.d.ts.map +1 -0
- package/dist/src/cli/doctor.test.js +77 -0
- package/dist/src/cli/doctor.test.js.map +1 -0
- package/dist/src/cli/repair.d.ts +7 -0
- package/dist/src/cli/repair.d.ts.map +1 -0
- package/dist/src/cli/repair.js +67 -0
- package/dist/src/cli/repair.js.map +1 -0
- package/dist/src/cli/repair.test.d.ts +2 -0
- package/dist/src/cli/repair.test.d.ts.map +1 -0
- package/dist/src/cli/repair.test.js +72 -0
- package/dist/src/cli/repair.test.js.map +1 -0
- package/dist/src/cli/skills.d.ts +11 -0
- package/dist/src/cli/skills.d.ts.map +1 -0
- package/dist/src/cli/skills.js +53 -0
- package/dist/src/cli/skills.js.map +1 -0
- package/dist/src/cli/skills.test.d.ts +2 -0
- package/dist/src/cli/skills.test.d.ts.map +1 -0
- package/dist/src/cli/skills.test.js +89 -0
- package/dist/src/cli/skills.test.js.map +1 -0
- package/dist/src/cli/status.d.ts +10 -0
- package/dist/src/cli/status.d.ts.map +1 -0
- package/dist/src/cli/status.js +63 -0
- package/dist/src/cli/status.js.map +1 -0
- package/dist/src/cli/status.test.d.ts +2 -0
- package/dist/src/cli/status.test.d.ts.map +1 -0
- package/dist/src/cli/status.test.js +70 -0
- package/dist/src/cli/status.test.js.map +1 -0
- package/dist/src/clue-collector.d.ts +23 -0
- package/dist/src/clue-collector.d.ts.map +1 -0
- package/dist/src/clue-collector.js +226 -0
- package/dist/src/clue-collector.js.map +1 -0
- package/dist/src/clue-collector.test.d.ts +2 -0
- package/dist/src/clue-collector.test.d.ts.map +1 -0
- package/dist/src/clue-collector.test.js +213 -0
- package/dist/src/clue-collector.test.js.map +1 -0
- package/dist/src/debug-logger.d.ts +2 -0
- package/dist/src/debug-logger.d.ts.map +1 -0
- package/dist/src/debug-logger.js +23 -0
- package/dist/src/debug-logger.js.map +1 -0
- package/dist/src/debug-logger.test.d.ts +2 -0
- package/dist/src/debug-logger.test.d.ts.map +1 -0
- package/dist/src/debug-logger.test.js +63 -0
- package/dist/src/debug-logger.test.js.map +1 -0
- package/dist/src/deny-list.d.ts +3 -0
- package/dist/src/deny-list.d.ts.map +1 -0
- package/dist/src/deny-list.js +62 -0
- package/dist/src/deny-list.js.map +1 -0
- package/dist/src/deny-list.test.d.ts +2 -0
- package/dist/src/deny-list.test.d.ts.map +1 -0
- package/dist/src/deny-list.test.js +93 -0
- package/dist/src/deny-list.test.js.map +1 -0
- package/dist/src/e2e.test.d.ts +2 -0
- package/dist/src/e2e.test.d.ts.map +1 -0
- package/dist/src/e2e.test.js +88 -0
- package/dist/src/e2e.test.js.map +1 -0
- package/dist/src/gitignore-manager.d.ts +2 -0
- package/dist/src/gitignore-manager.d.ts.map +1 -0
- package/dist/src/gitignore-manager.js +45 -0
- package/dist/src/gitignore-manager.js.map +1 -0
- package/dist/src/gitignore-manager.test.d.ts +2 -0
- package/dist/src/gitignore-manager.test.d.ts.map +1 -0
- package/dist/src/gitignore-manager.test.js +70 -0
- package/dist/src/gitignore-manager.test.js.map +1 -0
- package/dist/src/hook-state.d.ts +43 -0
- package/dist/src/hook-state.d.ts.map +1 -0
- package/dist/src/hook-state.js +124 -0
- package/dist/src/hook-state.js.map +1 -0
- package/dist/src/hook-state.test.d.ts +2 -0
- package/dist/src/hook-state.test.d.ts.map +1 -0
- package/dist/src/hook-state.test.js +190 -0
- package/dist/src/hook-state.test.js.map +1 -0
- package/dist/src/hooks/auto-continue.d.ts +9 -0
- package/dist/src/hooks/auto-continue.d.ts.map +1 -0
- package/dist/src/hooks/auto-continue.js +56 -0
- package/dist/src/hooks/auto-continue.js.map +1 -0
- package/dist/src/hooks/auto-continue.test.d.ts +2 -0
- package/dist/src/hooks/auto-continue.test.d.ts.map +1 -0
- package/dist/src/hooks/auto-continue.test.js +141 -0
- package/dist/src/hooks/auto-continue.test.js.map +1 -0
- package/dist/src/hooks/pre-tool-use.d.ts +8 -0
- package/dist/src/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/src/hooks/pre-tool-use.js +19 -0
- package/dist/src/hooks/pre-tool-use.js.map +1 -0
- package/dist/src/hooks/pre-tool-use.test.d.ts +2 -0
- package/dist/src/hooks/pre-tool-use.test.d.ts.map +1 -0
- package/dist/src/hooks/pre-tool-use.test.js +84 -0
- package/dist/src/hooks/pre-tool-use.test.js.map +1 -0
- package/dist/src/hooks/session-start.d.ts +6 -0
- package/dist/src/hooks/session-start.d.ts.map +1 -0
- package/dist/src/hooks/session-start.js +49 -0
- package/dist/src/hooks/session-start.js.map +1 -0
- package/dist/src/hooks/session-start.test.d.ts +2 -0
- package/dist/src/hooks/session-start.test.d.ts.map +1 -0
- package/dist/src/hooks/session-start.test.js +96 -0
- package/dist/src/hooks/session-start.test.js.map +1 -0
- package/dist/src/hooks/user-prompt-submit.d.ts +6 -0
- package/dist/src/hooks/user-prompt-submit.d.ts.map +1 -0
- package/dist/src/hooks/user-prompt-submit.js +54 -0
- package/dist/src/hooks/user-prompt-submit.js.map +1 -0
- package/dist/src/hooks/user-prompt-submit.test.d.ts +2 -0
- package/dist/src/hooks/user-prompt-submit.test.d.ts.map +1 -0
- package/dist/src/hooks/user-prompt-submit.test.js +92 -0
- package/dist/src/hooks/user-prompt-submit.test.js.map +1 -0
- package/dist/src/hooks/validate-commit.d.ts +12 -0
- package/dist/src/hooks/validate-commit.d.ts.map +1 -0
- package/dist/src/hooks/validate-commit.js +58 -0
- package/dist/src/hooks/validate-commit.js.map +1 -0
- package/dist/src/hooks/validate-commit.test.d.ts +2 -0
- package/dist/src/hooks/validate-commit.test.d.ts.map +1 -0
- package/dist/src/hooks/validate-commit.test.js +150 -0
- package/dist/src/hooks/validate-commit.test.js.map +1 -0
- package/dist/src/index.d.ts +13 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +38 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/linker.d.ts +6 -0
- package/dist/src/linker.d.ts.map +1 -0
- package/dist/src/linker.js +78 -0
- package/dist/src/linker.js.map +1 -0
- package/dist/src/linker.test.d.ts +2 -0
- package/dist/src/linker.test.d.ts.map +1 -0
- package/dist/src/linker.test.js +192 -0
- package/dist/src/linker.test.js.map +1 -0
- package/dist/src/logger.d.ts +21 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +117 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/logger.test.d.ts +2 -0
- package/dist/src/logger.test.d.ts.map +1 -0
- package/dist/src/logger.test.js +159 -0
- package/dist/src/logger.test.js.map +1 -0
- package/dist/src/postinstall.d.ts +7 -0
- package/dist/src/postinstall.d.ts.map +1 -0
- package/dist/src/postinstall.js +81 -0
- package/dist/src/postinstall.js.map +1 -0
- package/dist/src/postinstall.test.d.ts +2 -0
- package/dist/src/postinstall.test.d.ts.map +1 -0
- package/dist/src/postinstall.test.js +125 -0
- package/dist/src/postinstall.test.js.map +1 -0
- package/dist/src/preuninstall.d.ts +2 -0
- package/dist/src/preuninstall.d.ts.map +1 -0
- package/dist/src/preuninstall.js +62 -0
- package/dist/src/preuninstall.js.map +1 -0
- package/dist/src/preuninstall.test.d.ts +2 -0
- package/dist/src/preuninstall.test.d.ts.map +1 -0
- package/dist/src/preuninstall.test.js +97 -0
- package/dist/src/preuninstall.test.js.map +1 -0
- package/dist/src/root-finder.d.ts +2 -0
- package/dist/src/root-finder.d.ts.map +1 -0
- package/dist/src/root-finder.js +71 -0
- package/dist/src/root-finder.js.map +1 -0
- package/dist/src/root-finder.test.d.ts +2 -0
- package/dist/src/root-finder.test.d.ts.map +1 -0
- package/dist/src/root-finder.test.js +111 -0
- package/dist/src/root-finder.test.js.map +1 -0
- package/dist/src/settings-merger.d.ts +2 -0
- package/dist/src/settings-merger.d.ts.map +1 -0
- package/dist/src/settings-merger.js +136 -0
- package/dist/src/settings-merger.js.map +1 -0
- package/dist/src/settings-merger.test.d.ts +2 -0
- package/dist/src/settings-merger.test.d.ts.map +1 -0
- package/dist/src/settings-merger.test.js +387 -0
- package/dist/src/settings-merger.test.js.map +1 -0
- package/dist/src/skills-loader.d.ts +14 -0
- package/dist/src/skills-loader.d.ts.map +1 -0
- package/dist/src/skills-loader.js +90 -0
- package/dist/src/skills-loader.js.map +1 -0
- package/dist/src/skills-loader.test.d.ts +2 -0
- package/dist/src/skills-loader.test.d.ts.map +1 -0
- package/dist/src/skills-loader.test.js +222 -0
- package/dist/src/skills-loader.test.js.map +1 -0
- package/dist/src/state-manager.d.ts +5 -0
- package/dist/src/state-manager.d.ts.map +1 -0
- package/dist/src/state-manager.js +55 -0
- package/dist/src/state-manager.js.map +1 -0
- package/dist/src/state-manager.test.d.ts +2 -0
- package/dist/src/state-manager.test.d.ts.map +1 -0
- package/dist/src/state-manager.test.js +85 -0
- package/dist/src/state-manager.test.js.map +1 -0
- package/dist/src/subagent-classifier.d.ts +4 -0
- package/dist/src/subagent-classifier.d.ts.map +1 -0
- package/dist/src/subagent-classifier.js +53 -0
- package/dist/src/subagent-classifier.js.map +1 -0
- package/dist/src/subagent-classifier.test.d.ts +2 -0
- package/dist/src/subagent-classifier.test.d.ts.map +1 -0
- package/dist/src/subagent-classifier.test.js +88 -0
- package/dist/src/subagent-classifier.test.js.map +1 -0
- package/package.json +59 -0
- package/scripts/pre-tool-use.ts +10 -0
- package/scripts/session-start.ts +9 -0
- package/scripts/tail-logs.sh +17 -0
- package/scripts/test-hooks.sh +910 -0
- package/scripts/user-prompt-submit.ts +10 -0
- package/skills/ketchup.enforced.md +23 -0
- package/templates/settings.json +57 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const subagent_classifier_js_1 = require("./subagent-classifier.js");
|
|
5
|
+
(0, vitest_1.describe)('subagent-classifier', () => {
|
|
6
|
+
(0, vitest_1.describe)('classifySubagent', () => {
|
|
7
|
+
(0, vitest_1.it)('classifies explore patterns', () => {
|
|
8
|
+
const exploreDescriptions = [
|
|
9
|
+
'Search for files matching pattern',
|
|
10
|
+
'Find the implementation of this function',
|
|
11
|
+
'Understand how the auth system works',
|
|
12
|
+
'Investigate the error',
|
|
13
|
+
'Analyze the codebase structure',
|
|
14
|
+
'Look for usages of this API',
|
|
15
|
+
'Research existing patterns',
|
|
16
|
+
];
|
|
17
|
+
for (const desc of exploreDescriptions) {
|
|
18
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.classifySubagent)(desc)).toBe('explore');
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
(0, vitest_1.it)('classifies work patterns', () => {
|
|
22
|
+
const workDescriptions = [
|
|
23
|
+
'Implement the new feature',
|
|
24
|
+
'Create a user registration form',
|
|
25
|
+
'Write tests for the login component',
|
|
26
|
+
'Fix the bug in the parser',
|
|
27
|
+
'Refactor the database layer',
|
|
28
|
+
'Update the configuration',
|
|
29
|
+
'Add error handling',
|
|
30
|
+
'Build the API endpoint',
|
|
31
|
+
];
|
|
32
|
+
for (const desc of workDescriptions) {
|
|
33
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.classifySubagent)(desc)).toBe('work');
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)('returns unknown for ambiguous descriptions', () => {
|
|
37
|
+
const ambiguousDescriptions = [
|
|
38
|
+
'Process the request',
|
|
39
|
+
'Handle the response',
|
|
40
|
+
'Do something with the data',
|
|
41
|
+
];
|
|
42
|
+
for (const desc of ambiguousDescriptions) {
|
|
43
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.classifySubagent)(desc)).toBe('unknown');
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.it)('is case insensitive', () => {
|
|
47
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.classifySubagent)('SEARCH for files')).toBe('explore');
|
|
48
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.classifySubagent)('IMPLEMENT feature')).toBe('work');
|
|
49
|
+
});
|
|
50
|
+
(0, vitest_1.it)('returns unknown for empty description', () => {
|
|
51
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.classifySubagent)('')).toBe('unknown');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.describe)('extractTaskDescription', () => {
|
|
55
|
+
(0, vitest_1.it)('extracts description from Task tool invocation', () => {
|
|
56
|
+
const transcript = [
|
|
57
|
+
'<invoke name="Task">',
|
|
58
|
+
'<parameter name="description">Search for auth implementation</parameter>',
|
|
59
|
+
'<parameter name="prompt">Find all files</parameter>',
|
|
60
|
+
'</invoke>',
|
|
61
|
+
].join('\n');
|
|
62
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.extractTaskDescription)(transcript)).toBe('Search for auth implementation');
|
|
63
|
+
});
|
|
64
|
+
(0, vitest_1.it)('returns undefined when no Task invocation found', () => {
|
|
65
|
+
const transcript = [
|
|
66
|
+
'<invoke name="Read">',
|
|
67
|
+
'<parameter name="file_path">/some/file.ts</parameter>',
|
|
68
|
+
'</invoke>',
|
|
69
|
+
].join('\n');
|
|
70
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.extractTaskDescription)(transcript)).toBeUndefined();
|
|
71
|
+
});
|
|
72
|
+
(0, vitest_1.it)('returns undefined for empty transcript', () => {
|
|
73
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.extractTaskDescription)('')).toBeUndefined();
|
|
74
|
+
});
|
|
75
|
+
(0, vitest_1.it)('extracts first Task description when multiple present', () => {
|
|
76
|
+
const transcript = [
|
|
77
|
+
'<invoke name="Task">',
|
|
78
|
+
'<parameter name="description">First task</parameter>',
|
|
79
|
+
'</invoke>',
|
|
80
|
+
'<invoke name="Task">',
|
|
81
|
+
'<parameter name="description">Second task</parameter>',
|
|
82
|
+
'</invoke>',
|
|
83
|
+
].join('\n');
|
|
84
|
+
(0, vitest_1.expect)((0, subagent_classifier_js_1.extractTaskDescription)(transcript)).toBe('First task');
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=subagent-classifier.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-classifier.test.js","sourceRoot":"","sources":["../../src/subagent-classifier.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-ketchup",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"authors": [
|
|
5
|
+
{
|
|
6
|
+
"name": "Sam Hatoum"
|
|
7
|
+
}
|
|
8
|
+
],
|
|
9
|
+
"description": "Husky-style hooks and skills management for Claude Code",
|
|
10
|
+
"main": "dist/src/index.js",
|
|
11
|
+
"types": "dist/src/index.d.ts",
|
|
12
|
+
"bin": {
|
|
13
|
+
"claude-ketchup": "dist/bin/cli.js"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"test": "vitest run",
|
|
18
|
+
"test:watch": "vitest",
|
|
19
|
+
"postinstall": "npx tsx bin/postinstall.ts",
|
|
20
|
+
"preuninstall": "npx tsx bin/preuninstall.ts",
|
|
21
|
+
"docs:dev": "vitepress dev docs",
|
|
22
|
+
"docs:build": "vitepress build docs",
|
|
23
|
+
"docs:preview": "vitepress preview docs"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"claude",
|
|
27
|
+
"claude-code",
|
|
28
|
+
"hooks",
|
|
29
|
+
"skills",
|
|
30
|
+
"automation"
|
|
31
|
+
],
|
|
32
|
+
"author": "Sam Hatoum",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"commander": "^12.0.0",
|
|
36
|
+
"micromatch": "^4.0.8",
|
|
37
|
+
"yaml": "^2.3.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/micromatch": "^4.0.10",
|
|
41
|
+
"@types/node": "^20.0.0",
|
|
42
|
+
"tsx": "^4.0.0",
|
|
43
|
+
"typescript": "^5.0.0",
|
|
44
|
+
"vitepress": "^1.6.4",
|
|
45
|
+
"vitest": "^1.0.0"
|
|
46
|
+
},
|
|
47
|
+
"files": [
|
|
48
|
+
"dist/",
|
|
49
|
+
"bin/",
|
|
50
|
+
"templates/",
|
|
51
|
+
"scripts/",
|
|
52
|
+
"skills/",
|
|
53
|
+
"commands/"
|
|
54
|
+
],
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=18.0.0"
|
|
57
|
+
},
|
|
58
|
+
"packageManager": "pnpm@10.28.0"
|
|
59
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
|
|
4
|
+
import { handlePreToolUse } from '../src/hooks/pre-tool-use.js';
|
|
5
|
+
|
|
6
|
+
const claudeDir = path.resolve(process.cwd(), '.claude');
|
|
7
|
+
const toolInput = JSON.parse(process.argv[2] || '{}');
|
|
8
|
+
const result = handlePreToolUse(claudeDir, toolInput);
|
|
9
|
+
|
|
10
|
+
console.log(JSON.stringify(result));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
|
|
4
|
+
import { handleSessionStart } from '../src/hooks/session-start.js';
|
|
5
|
+
|
|
6
|
+
const claudeDir = path.resolve(process.cwd(), '.claude');
|
|
7
|
+
const result = handleSessionStart(claudeDir);
|
|
8
|
+
|
|
9
|
+
console.log(JSON.stringify(result));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Tail all ketchup log files in real-time
|
|
3
|
+
# Usage: ./tail-logs.sh [logs-dir]
|
|
4
|
+
|
|
5
|
+
LOGS_DIR="${1:-.claude/logs}"
|
|
6
|
+
|
|
7
|
+
if [ ! -d "$LOGS_DIR" ]; then
|
|
8
|
+
echo "Logs directory not found: $LOGS_DIR"
|
|
9
|
+
exit 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
echo "Tailing logs in $LOGS_DIR..."
|
|
13
|
+
echo "Press Ctrl+C to stop"
|
|
14
|
+
echo
|
|
15
|
+
|
|
16
|
+
# Use tail -f with all .log files, showing which file each line comes from
|
|
17
|
+
find "$LOGS_DIR" -name "*.log" -exec tail -f {} + 2>/dev/null
|