clawck 0.1.3 → 0.3.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.
Files changed (77) hide show
  1. package/README.md +214 -166
  2. package/dist/cli/index.js +490 -53
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/core/clawck.d.ts +14 -3
  5. package/dist/core/clawck.d.ts.map +1 -1
  6. package/dist/core/clawck.js +41 -14
  7. package/dist/core/clawck.js.map +1 -1
  8. package/dist/core/database.d.ts +1 -0
  9. package/dist/core/database.d.ts.map +1 -1
  10. package/dist/core/database.js +26 -7
  11. package/dist/core/database.js.map +1 -1
  12. package/dist/core/patterns.d.ts +7 -0
  13. package/dist/core/patterns.d.ts.map +1 -0
  14. package/dist/core/patterns.js +36 -0
  15. package/dist/core/patterns.js.map +1 -0
  16. package/dist/core/types.d.ts +31 -0
  17. package/dist/core/types.d.ts.map +1 -1
  18. package/dist/core/types.js.map +1 -1
  19. package/dist/core/webhooks.d.ts +22 -0
  20. package/dist/core/webhooks.d.ts.map +1 -0
  21. package/dist/core/webhooks.js +70 -0
  22. package/dist/core/webhooks.js.map +1 -0
  23. package/dist/hooks/adapters.d.ts +8 -0
  24. package/dist/hooks/adapters.d.ts.map +1 -0
  25. package/dist/hooks/adapters.js +138 -0
  26. package/dist/hooks/adapters.js.map +1 -0
  27. package/dist/hooks/handler.d.ts +9 -0
  28. package/dist/hooks/handler.d.ts.map +1 -0
  29. package/dist/hooks/handler.js +90 -0
  30. package/dist/hooks/handler.js.map +1 -0
  31. package/dist/hooks/index.d.ts +10 -0
  32. package/dist/hooks/index.d.ts.map +1 -0
  33. package/dist/hooks/index.js +23 -0
  34. package/dist/hooks/index.js.map +1 -0
  35. package/dist/hooks/install.d.ts +16 -0
  36. package/dist/hooks/install.d.ts.map +1 -0
  37. package/dist/hooks/install.js +239 -0
  38. package/dist/hooks/install.js.map +1 -0
  39. package/dist/hooks/session.d.ts +10 -0
  40. package/dist/hooks/session.d.ts.map +1 -0
  41. package/dist/hooks/session.js +72 -0
  42. package/dist/hooks/session.js.map +1 -0
  43. package/dist/hooks/stdin.d.ts +6 -0
  44. package/dist/hooks/stdin.d.ts.map +1 -0
  45. package/dist/hooks/stdin.js +38 -0
  46. package/dist/hooks/stdin.js.map +1 -0
  47. package/dist/hooks/types.d.ts +23 -0
  48. package/dist/hooks/types.d.ts.map +1 -0
  49. package/dist/hooks/types.js +7 -0
  50. package/dist/hooks/types.js.map +1 -0
  51. package/dist/reports/html.d.ts +13 -0
  52. package/dist/reports/html.d.ts.map +1 -0
  53. package/dist/reports/html.js +321 -0
  54. package/dist/reports/html.js.map +1 -0
  55. package/dist/reports/pdf.d.ts +13 -0
  56. package/dist/reports/pdf.d.ts.map +1 -0
  57. package/dist/reports/pdf.js +169 -0
  58. package/dist/reports/pdf.js.map +1 -0
  59. package/dist/server/api.d.ts.map +1 -1
  60. package/dist/server/api.js +16 -0
  61. package/dist/server/api.js.map +1 -1
  62. package/dist/server/mcp.d.ts.map +1 -1
  63. package/dist/server/mcp.js +30 -9
  64. package/dist/server/mcp.js.map +1 -1
  65. package/docs/skills/clawck-setup.md +131 -0
  66. package/docs/skills/clawck-usage.md +148 -0
  67. package/docs/snippets/claude-md.txt +24 -0
  68. package/docs/snippets/hooks-claude.json +16 -0
  69. package/docs/snippets/hooks-cline.txt +10 -0
  70. package/docs/snippets/hooks-codex.json +16 -0
  71. package/docs/snippets/hooks-cursor.json +16 -0
  72. package/docs/snippets/hooks-gemini.json +16 -0
  73. package/docs/snippets/hooks-windsurf.json +16 -0
  74. package/docs/snippets/mcp-config.json +7 -0
  75. package/docs/snippets/openclaw-agent-md.txt +18 -0
  76. package/docs/snippets/openclaw-heartbeat-md.txt +17 -0
  77. package/package.json +4 -2
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ /**
3
+ * ⏱️🦀 Clawck — Platform Install Configs
4
+ * Generates platform-specific hook configuration and detects existing installs.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.PLATFORM_NAMES = exports.PLATFORMS = void 0;
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const os_1 = __importDefault(require("os"));
14
+ function homeDir() {
15
+ return os_1.default.homedir();
16
+ }
17
+ exports.PLATFORMS = {
18
+ claude: {
19
+ name: 'claude',
20
+ displayName: 'Claude Code',
21
+ configPaths: [
22
+ path_1.default.join(homeDir(), '.claude', 'settings.json'),
23
+ '.claude/settings.json',
24
+ ],
25
+ snippetFile: 'hooks-claude.json',
26
+ generate: () => JSON.stringify({
27
+ hooks: {
28
+ UserPromptSubmit: [
29
+ {
30
+ type: "command",
31
+ command: "clawck hook start"
32
+ }
33
+ ],
34
+ Stop: [
35
+ {
36
+ type: "command",
37
+ command: "clawck hook stop"
38
+ }
39
+ ]
40
+ }
41
+ }, null, 2),
42
+ detect: () => {
43
+ const paths = [
44
+ path_1.default.join(homeDir(), '.claude', 'settings.json'),
45
+ path_1.default.resolve('.claude/settings.json'),
46
+ ];
47
+ return paths.some(p => {
48
+ try {
49
+ const content = fs_1.default.readFileSync(p, 'utf-8');
50
+ return content.includes('clawck hook');
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ });
56
+ },
57
+ },
58
+ gemini: {
59
+ name: 'gemini',
60
+ displayName: 'Gemini CLI',
61
+ configPaths: [
62
+ path_1.default.join(homeDir(), '.gemini', 'settings.json'),
63
+ '.gemini/settings.json',
64
+ ],
65
+ snippetFile: 'hooks-gemini.json',
66
+ generate: () => JSON.stringify({
67
+ hooks: {
68
+ BeforeAgent: [
69
+ {
70
+ type: "command",
71
+ command: "clawck hook start"
72
+ }
73
+ ],
74
+ AfterAgent: [
75
+ {
76
+ type: "command",
77
+ command: "clawck hook stop"
78
+ }
79
+ ]
80
+ }
81
+ }, null, 2),
82
+ detect: () => {
83
+ const paths = [
84
+ path_1.default.join(homeDir(), '.gemini', 'settings.json'),
85
+ path_1.default.resolve('.gemini/settings.json'),
86
+ ];
87
+ return paths.some(p => {
88
+ try {
89
+ const content = fs_1.default.readFileSync(p, 'utf-8');
90
+ return content.includes('clawck hook');
91
+ }
92
+ catch {
93
+ return false;
94
+ }
95
+ });
96
+ },
97
+ },
98
+ cursor: {
99
+ name: 'cursor',
100
+ displayName: 'Cursor',
101
+ configPaths: [
102
+ '.cursor/hooks.json',
103
+ ],
104
+ snippetFile: 'hooks-cursor.json',
105
+ generate: () => JSON.stringify({
106
+ hooks: {
107
+ pre_user_prompt: [
108
+ {
109
+ type: "command",
110
+ command: "clawck hook start"
111
+ }
112
+ ],
113
+ stop: [
114
+ {
115
+ type: "command",
116
+ command: "clawck hook stop"
117
+ }
118
+ ]
119
+ }
120
+ }, null, 2),
121
+ detect: () => {
122
+ try {
123
+ const content = fs_1.default.readFileSync(path_1.default.resolve('.cursor/hooks.json'), 'utf-8');
124
+ return content.includes('clawck hook');
125
+ }
126
+ catch {
127
+ return false;
128
+ }
129
+ },
130
+ },
131
+ cline: {
132
+ name: 'cline',
133
+ displayName: 'Cline',
134
+ configPaths: [
135
+ '.clinerules/hooks/',
136
+ ],
137
+ snippetFile: 'hooks-cline.txt',
138
+ generate: () => [
139
+ '# Cline Hook Scripts',
140
+ '# Place these as executable scripts in .clinerules/hooks/',
141
+ '',
142
+ '# --- .clinerules/hooks/TaskStart ---',
143
+ '#!/bin/bash',
144
+ 'clawck hook start',
145
+ '',
146
+ '# --- .clinerules/hooks/PostToolUse ---',
147
+ '#!/bin/bash',
148
+ 'clawck hook stop',
149
+ ].join('\n'),
150
+ detect: () => {
151
+ const dir = path_1.default.resolve('.clinerules/hooks');
152
+ if (!fs_1.default.existsSync(dir))
153
+ return false;
154
+ try {
155
+ const files = fs_1.default.readdirSync(dir);
156
+ return files.some(f => {
157
+ try {
158
+ const content = fs_1.default.readFileSync(path_1.default.join(dir, f), 'utf-8');
159
+ return content.includes('clawck hook');
160
+ }
161
+ catch {
162
+ return false;
163
+ }
164
+ });
165
+ }
166
+ catch {
167
+ return false;
168
+ }
169
+ },
170
+ },
171
+ windsurf: {
172
+ name: 'windsurf',
173
+ displayName: 'Windsurf',
174
+ configPaths: [
175
+ '.windsurf/hooks.json',
176
+ ],
177
+ snippetFile: 'hooks-windsurf.json',
178
+ generate: () => JSON.stringify({
179
+ hooks: {
180
+ pre_user_prompt: [
181
+ {
182
+ type: "command",
183
+ command: "clawck hook start"
184
+ }
185
+ ],
186
+ post_agent: [
187
+ {
188
+ type: "command",
189
+ command: "clawck hook stop"
190
+ }
191
+ ]
192
+ }
193
+ }, null, 2),
194
+ detect: () => {
195
+ try {
196
+ const content = fs_1.default.readFileSync(path_1.default.resolve('.windsurf/hooks.json'), 'utf-8');
197
+ return content.includes('clawck hook');
198
+ }
199
+ catch {
200
+ return false;
201
+ }
202
+ },
203
+ },
204
+ codex: {
205
+ name: 'codex',
206
+ displayName: 'Codex',
207
+ configPaths: [
208
+ 'codex.json',
209
+ ],
210
+ snippetFile: 'hooks-codex.json',
211
+ generate: () => JSON.stringify({
212
+ hooks: {
213
+ "turn-start": [
214
+ {
215
+ type: "command",
216
+ command: "clawck hook start"
217
+ }
218
+ ],
219
+ "agent-turn-complete": [
220
+ {
221
+ type: "command",
222
+ command: "clawck hook stop"
223
+ }
224
+ ]
225
+ }
226
+ }, null, 2),
227
+ detect: () => {
228
+ try {
229
+ const content = fs_1.default.readFileSync(path_1.default.resolve('codex.json'), 'utf-8');
230
+ return content.includes('clawck hook');
231
+ }
232
+ catch {
233
+ return false;
234
+ }
235
+ },
236
+ },
237
+ };
238
+ exports.PLATFORM_NAMES = Object.keys(exports.PLATFORMS);
239
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/hooks/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * ⏱️🦀 Clawck — Session File Management
3
+ * Persists hook session state as JSON files (not SQLite) to avoid DB lock issues.
4
+ */
5
+ import { SessionState } from './types';
6
+ export declare function saveSession(dataDir: string, sessionId: string, state: SessionState): void;
7
+ export declare function loadSession(dataDir: string, sessionId: string): SessionState | null;
8
+ export declare function clearSession(dataDir: string, sessionId: string): void;
9
+ export declare function cleanStaleSessions(dataDir: string, maxAgeMs?: number): number;
10
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/hooks/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAYvC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAIzF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQnF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOrE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAW,GAAG,MAAM,CAsB/E"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /**
3
+ * ⏱️🦀 Clawck — Session File Management
4
+ * Persists hook session state as JSON files (not SQLite) to avoid DB lock issues.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.saveSession = saveSession;
11
+ exports.loadSession = loadSession;
12
+ exports.clearSession = clearSession;
13
+ exports.cleanStaleSessions = cleanStaleSessions;
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const path_1 = __importDefault(require("path"));
16
+ function sessionsDir(dataDir) {
17
+ return path_1.default.join(dataDir, 'hooks', 'sessions');
18
+ }
19
+ function sessionPath(dataDir, sessionId) {
20
+ // Sanitize session ID to prevent path traversal
21
+ const safe = sessionId.replace(/[^a-zA-Z0-9_-]/g, '_');
22
+ return path_1.default.join(sessionsDir(dataDir), `${safe}.json`);
23
+ }
24
+ function saveSession(dataDir, sessionId, state) {
25
+ const dir = sessionsDir(dataDir);
26
+ fs_1.default.mkdirSync(dir, { recursive: true });
27
+ fs_1.default.writeFileSync(sessionPath(dataDir, sessionId), JSON.stringify(state));
28
+ }
29
+ function loadSession(dataDir, sessionId) {
30
+ const filePath = sessionPath(dataDir, sessionId);
31
+ if (!fs_1.default.existsSync(filePath))
32
+ return null;
33
+ try {
34
+ return JSON.parse(fs_1.default.readFileSync(filePath, 'utf-8'));
35
+ }
36
+ catch {
37
+ return null;
38
+ }
39
+ }
40
+ function clearSession(dataDir, sessionId) {
41
+ const filePath = sessionPath(dataDir, sessionId);
42
+ try {
43
+ fs_1.default.unlinkSync(filePath);
44
+ }
45
+ catch {
46
+ // Already gone — fine
47
+ }
48
+ }
49
+ function cleanStaleSessions(dataDir, maxAgeMs = 86400000) {
50
+ const dir = sessionsDir(dataDir);
51
+ if (!fs_1.default.existsSync(dir))
52
+ return 0;
53
+ let cleaned = 0;
54
+ const now = Date.now();
55
+ for (const file of fs_1.default.readdirSync(dir)) {
56
+ if (!file.endsWith('.json'))
57
+ continue;
58
+ const filePath = path_1.default.join(dir, file);
59
+ try {
60
+ const stat = fs_1.default.statSync(filePath);
61
+ if (now - stat.mtimeMs > maxAgeMs) {
62
+ fs_1.default.unlinkSync(filePath);
63
+ cleaned++;
64
+ }
65
+ }
66
+ catch {
67
+ // Skip files we can't stat
68
+ }
69
+ }
70
+ return cleaned;
71
+ }
72
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/hooks/session.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAgBH,kCAIC;AAED,kCAQC;AAED,oCAOC;AAED,gDAsBC;AA7DD,4CAAoB;AACpB,gDAAwB;AAGxB,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,SAAiB;IACrD,gDAAgD;IAChD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACvD,OAAO,cAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,WAAW,CAAC,OAAe,EAAE,SAAiB,EAAE,KAAmB;IACjF,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,YAAE,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,WAAW,CAAC,OAAe,EAAE,SAAiB;IAC5D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,OAAe,EAAE,SAAiB;IAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAe,EAAE,QAAQ,GAAG,QAAQ;IACrE,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAElC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,KAAK,MAAM,IAAI,IAAI,YAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC;gBAClC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ⏱️🦀 Clawck — Stdin Reader
3
+ * Reads JSON from stdin with timeout protection.
4
+ */
5
+ export declare function readStdin(timeoutMs?: number): Promise<string>;
6
+ //# sourceMappingURL=stdin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin.d.ts","sourceRoot":"","sources":["../../src/hooks/stdin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,SAAS,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC3D"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * ⏱️🦀 Clawck — Stdin Reader
4
+ * Reads JSON from stdin with timeout protection.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.readStdin = readStdin;
8
+ function readStdin(timeoutMs = 1000) {
9
+ // No piped data if running in a TTY
10
+ if (process.stdin.isTTY) {
11
+ return Promise.resolve('');
12
+ }
13
+ return new Promise((resolve) => {
14
+ const chunks = [];
15
+ let resolved = false;
16
+ const finish = () => {
17
+ if (resolved)
18
+ return;
19
+ resolved = true;
20
+ process.stdin.removeAllListeners();
21
+ resolve(Buffer.concat(chunks).toString('utf-8'));
22
+ };
23
+ const timer = setTimeout(finish, timeoutMs);
24
+ process.stdin.on('data', (chunk) => {
25
+ chunks.push(chunk);
26
+ });
27
+ process.stdin.on('end', () => {
28
+ clearTimeout(timer);
29
+ finish();
30
+ });
31
+ process.stdin.on('error', () => {
32
+ clearTimeout(timer);
33
+ finish();
34
+ });
35
+ process.stdin.resume();
36
+ });
37
+ }
38
+ //# sourceMappingURL=stdin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/hooks/stdin.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,8BAmCC;AAnCD,SAAgB,SAAS,CAAC,SAAS,GAAG,IAAI;IACxC,oCAAoC;IACpC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACnC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE5C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ⏱️🦀 Clawck — Hook Types
3
+ * Type definitions for platform hook integration.
4
+ */
5
+ export type HookEvent = 'start' | 'stop';
6
+ export type Platform = 'claude' | 'gemini' | 'cursor' | 'cline' | 'windsurf' | 'codex' | 'unknown';
7
+ export interface HookContext {
8
+ platform: Platform;
9
+ session_id: string;
10
+ task: string;
11
+ project?: string;
12
+ agent?: string;
13
+ model?: string;
14
+ cwd?: string;
15
+ raw: unknown;
16
+ }
17
+ export interface SessionState {
18
+ entry_id: string;
19
+ platform: Platform;
20
+ started_at: string;
21
+ session_id: string;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnG,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * ⏱️🦀 Clawck — Hook Types
4
+ * Type definitions for platform hook integration.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * ⏱️🦀 Clawck — HTML Report Generation
3
+ * Generates interactive timesheet HTML reports.
4
+ */
5
+ import { TimesheetSummary, ClawckEntry } from '../core/types';
6
+ export interface HTMLReportOptions {
7
+ title?: string;
8
+ clientName?: string;
9
+ dateRange: string;
10
+ rawEntries?: ClawckEntry[];
11
+ }
12
+ export declare function generateTimesheetHTML(summary: TimesheetSummary, options: HTMLReportOptions): string;
13
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/reports/html.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,iBAAiB,GACzB,MAAM,CAkPR"}