codesift-mcp 0.2.6 → 0.2.7

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 (44) hide show
  1. package/dist/cli/commands.d.ts.map +1 -1
  2. package/dist/cli/commands.js +5 -1
  3. package/dist/cli/commands.js.map +1 -1
  4. package/dist/cli/help.d.ts +1 -1
  5. package/dist/cli/help.d.ts.map +1 -1
  6. package/dist/cli/help.js +14 -0
  7. package/dist/cli/help.js.map +1 -1
  8. package/dist/cli/hooks.d.ts +1 -0
  9. package/dist/cli/hooks.d.ts.map +1 -1
  10. package/dist/cli/hooks.js +170 -61
  11. package/dist/cli/hooks.js.map +1 -1
  12. package/dist/cli/platform.d.ts +12 -0
  13. package/dist/cli/platform.d.ts.map +1 -0
  14. package/dist/cli/platform.js +36 -0
  15. package/dist/cli/platform.js.map +1 -0
  16. package/dist/cli/setup.d.ts +6 -0
  17. package/dist/cli/setup.d.ts.map +1 -1
  18. package/dist/cli/setup.js +161 -121
  19. package/dist/cli/setup.js.map +1 -1
  20. package/dist/cli/shell-templates.d.ts +4 -0
  21. package/dist/cli/shell-templates.d.ts.map +1 -0
  22. package/dist/cli/shell-templates.js +86 -0
  23. package/dist/cli/shell-templates.js.map +1 -0
  24. package/dist/instructions.d.ts +1 -1
  25. package/dist/instructions.d.ts.map +1 -1
  26. package/dist/instructions.js +4 -4
  27. package/dist/register-tools.d.ts.map +1 -1
  28. package/dist/register-tools.js +68 -42
  29. package/dist/register-tools.js.map +1 -1
  30. package/dist/server-helpers.d.ts.map +1 -1
  31. package/dist/server-helpers.js +13 -1
  32. package/dist/server-helpers.js.map +1 -1
  33. package/dist/server.d.ts.map +1 -1
  34. package/dist/server.js +17 -0
  35. package/dist/server.js.map +1 -1
  36. package/dist/tools/project-tools.d.ts +107 -0
  37. package/dist/tools/project-tools.d.ts.map +1 -0
  38. package/dist/tools/project-tools.js +535 -0
  39. package/dist/tools/project-tools.js.map +1 -0
  40. package/package.json +1 -1
  41. package/rules/codesift.md +7 -9
  42. package/rules/codesift.mdc +6 -8
  43. package/rules/codex.md +6 -8
  44. package/rules/gemini.md +6 -8
package/dist/cli/setup.js CHANGED
@@ -7,6 +7,7 @@ import { fileURLToPath } from "node:url";
7
7
  import { readFile, writeFile, mkdir } from "node:fs/promises";
8
8
  import { existsSync } from "node:fs";
9
9
  import { createHash } from "node:crypto";
10
+ import { setupClineHooks } from "./shell-templates.js";
10
11
  // ---------------------------------------------------------------------------
11
12
  // Types
12
13
  // ---------------------------------------------------------------------------
@@ -24,6 +25,11 @@ const MCP_SERVER_ENTRY = {
24
25
  command: "npx",
25
26
  args: ["-y", "codesift-mcp"],
26
27
  };
28
+ const JSON_PLATFORM_CONFIGS = {
29
+ claude: { configDirName: ".claude", configFileName: "settings.json" },
30
+ cursor: { configDirName: ".cursor", configFileName: "mcp.json" },
31
+ gemini: { configDirName: ".gemini", configFileName: "settings.json" },
32
+ };
27
33
  // ---------------------------------------------------------------------------
28
34
  // Helpers
29
35
  // ---------------------------------------------------------------------------
@@ -80,6 +86,9 @@ const APPEND_MODE_PLATFORMS = {
80
86
  };
81
87
  const DELIMITER_START = "<!-- codesift-rules-start -->";
82
88
  const DELIMITER_END = "<!-- codesift-rules-end -->";
89
+ function escapeRegex(str) {
90
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
91
+ }
83
92
  async function installRulesAppendMode(platform, _options) {
84
93
  const config = APPEND_MODE_PLATFORMS[platform];
85
94
  if (!config)
@@ -111,9 +120,6 @@ async function installRulesAppendMode(platform, _options) {
111
120
  return { path: targetPath, action: "error", error: msg };
112
121
  }
113
122
  }
114
- function escapeRegex(str) {
115
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
116
- }
117
123
  const HEADER_REGEX = /^<!-- codesift-rules v([\d.]+) hash:(\w+) -->/;
118
124
  export async function installRules(platform, homeDir, options) {
119
125
  // Append-mode platforms (codex, gemini) write into cwd
@@ -148,35 +154,17 @@ export async function installRules(platform, homeDir, options) {
148
154
  const firstLine = existingContent.split("\n")[0] ?? "";
149
155
  const match = HEADER_REGEX.exec(firstLine);
150
156
  if (match) {
151
- const existingVersion = match[1];
152
- const existingHash = match[2];
153
- // Always verify actual body hash to detect user edits
154
157
  const existingBody = existingContent.replace(HEADER_REGEX, "").trimStart();
155
- const existingBodyHash = sha256(existingBody);
156
- const bodyUnmodified = existingBodyHash === sourceHash;
158
+ const bodyUnmodified = sha256(existingBody) === sourceHash;
157
159
  if (bodyUnmodified) {
158
- // Body matches source template
159
- if (existingVersion === version && existingHash === sourceHash) {
160
- // Same version, same hash, same body → nothing to do
160
+ if (match[1] === version && match[2] === sourceHash) {
161
161
  return { path: targetPath, action: "skipped" };
162
162
  }
163
- // Version or header hash differs but body matches → safe update
164
163
  await writeFile(targetPath, newContent, "utf-8");
165
164
  return { path: targetPath, action: "updated" };
166
165
  }
167
- // Body has been modified by user
168
- if (!options?.force) {
169
- return {
170
- path: targetPath,
171
- action: "skipped",
172
- warning: `Rules file has been modified by user. Use --force to overwrite.`,
173
- };
174
- }
175
- // Force overwrite
176
- await writeFile(targetPath, newContent, "utf-8");
177
- return { path: targetPath, action: "force-updated" };
178
166
  }
179
- // No valid header found — treat as user-owned file
167
+ // Body modified or no valid header — treat as user-owned file
180
168
  if (!options?.force) {
181
169
  return {
182
170
  path: targetPath,
@@ -199,7 +187,7 @@ export async function installRules(platform, homeDir, options) {
199
187
  }
200
188
  }
201
189
  // ---------------------------------------------------------------------------
202
- // Codex — ~/.codex/config.toml
190
+ // Codex — ~/.codex/config.toml (unique TOML format)
203
191
  // ---------------------------------------------------------------------------
204
192
  async function setupCodex() {
205
193
  const configDir = join(homedir(), ".codex");
@@ -220,130 +208,167 @@ async function setupCodex() {
220
208
  return { platform: "codex", config_path: configPath, status: "created" };
221
209
  }
222
210
  // ---------------------------------------------------------------------------
223
- // Claude Code — ~/.claude/settings.json
211
+ // JSON-based platform setup (Claude, Cursor, Gemini)
224
212
  // ---------------------------------------------------------------------------
225
- async function setupClaude() {
226
- const configDir = join(homedir(), ".claude");
227
- const configPath = join(configDir, "settings.json");
213
+ async function setupJsonPlatform(platform) {
214
+ const config = JSON_PLATFORM_CONFIGS[platform];
215
+ if (!config)
216
+ throw new Error(`No JSON config for platform: ${platform}`);
217
+ const configDir = join(homedir(), config.configDirName);
218
+ const configPath = join(configDir, config.configFileName);
228
219
  await ensureDir(configDir);
229
220
  if (existsSync(configPath)) {
230
221
  const settings = await readJsonFile(configPath);
231
222
  const mcpServers = settings["mcpServers"];
232
223
  if (mcpServers?.["codesift"]) {
233
- return { platform: "claude", config_path: configPath, status: "already_configured" };
224
+ return { platform, config_path: configPath, status: "already_configured" };
234
225
  }
235
226
  if (!settings["mcpServers"]) {
236
227
  settings["mcpServers"] = {};
237
228
  }
238
229
  settings["mcpServers"]["codesift"] = { ...MCP_SERVER_ENTRY };
239
230
  await writeJsonFile(configPath, settings);
240
- return { platform: "claude", config_path: configPath, status: "updated" };
231
+ return { platform, config_path: configPath, status: "updated" };
241
232
  }
242
- // Create new file
243
233
  await writeJsonFile(configPath, { mcpServers: { codesift: { ...MCP_SERVER_ENTRY } } });
244
- return { platform: "claude", config_path: configPath, status: "created" };
234
+ return { platform, config_path: configPath, status: "created" };
245
235
  }
246
- // ---------------------------------------------------------------------------
247
- // Cursor ~/.cursor/mcp.json
248
- // ---------------------------------------------------------------------------
249
- async function setupCursor() {
250
- const configDir = join(homedir(), ".cursor");
251
- const configPath = join(configDir, "mcp.json");
252
- await ensureDir(configDir);
236
+ /** Load or create a hooks section from a JSON config file. */
237
+ async function loadHooksSection(configPath) {
238
+ let root = {};
253
239
  if (existsSync(configPath)) {
254
- const config = await readJsonFile(configPath);
255
- const mcpServers = config["mcpServers"];
256
- if (mcpServers?.["codesift"]) {
257
- return { platform: "cursor", config_path: configPath, status: "already_configured" };
258
- }
259
- if (!config["mcpServers"]) {
260
- config["mcpServers"] = {};
261
- }
262
- config["mcpServers"]["codesift"] = { ...MCP_SERVER_ENTRY };
263
- await writeJsonFile(configPath, config);
264
- return { platform: "cursor", config_path: configPath, status: "updated" };
240
+ root = await readJsonFile(configPath);
265
241
  }
266
- await writeJsonFile(configPath, { mcpServers: { codesift: { ...MCP_SERVER_ENTRY } } });
267
- return { platform: "cursor", config_path: configPath, status: "created" };
242
+ if (typeof root["hooks"] !== "object" || root["hooks"] === null || Array.isArray(root["hooks"])) {
243
+ root["hooks"] = {};
244
+ }
245
+ return { root, hooks: root["hooks"] };
268
246
  }
269
- // ---------------------------------------------------------------------------
270
- // Gemini CLI ~/.gemini/settings.json
271
- // ---------------------------------------------------------------------------
272
- async function setupGemini() {
273
- const configDir = join(homedir(), ".gemini");
274
- const configPath = join(configDir, "settings.json");
275
- await ensureDir(configDir);
276
- if (existsSync(configPath)) {
277
- const settings = await readJsonFile(configPath);
278
- const mcpServers = settings["mcpServers"];
279
- if (mcpServers?.["codesift"]) {
280
- return { platform: "gemini", config_path: configPath, status: "already_configured" };
281
- }
282
- if (!settings["mcpServers"]) {
283
- settings["mcpServers"] = {};
284
- }
285
- settings["mcpServers"]["codesift"] = { ...MCP_SERVER_ENTRY };
286
- await writeJsonFile(configPath, settings);
287
- return { platform: "gemini", config_path: configPath, status: "updated" };
247
+ /** Idempotent: ensure hooks[event] array exists, add entry if matcher not present. */
248
+ function ensureHookEntry(hooks, event, entry) {
249
+ if (!Array.isArray(hooks[event])) {
250
+ hooks[event] = [];
288
251
  }
289
- await writeJsonFile(configPath, { mcpServers: { codesift: { ...MCP_SERVER_ENTRY } } });
290
- return { platform: "gemini", config_path: configPath, status: "created" };
252
+ if (!hooks[event].some((h) => h.matcher === entry.matcher)) {
253
+ hooks[event].push(entry);
254
+ }
255
+ }
256
+ /** Check if any hook in entries has a codesift command (content-based dedup). */
257
+ function hasCodesiftHook(entries) {
258
+ return entries.some((h) => h.hooks?.some?.((hk) => typeof hk === "object" && hk !== null && typeof hk["command"] === "string" && hk["command"].includes("codesift")));
291
259
  }
292
260
  // ---------------------------------------------------------------------------
293
261
  // Claude Code hooks — .claude/settings.local.json
294
262
  // ---------------------------------------------------------------------------
295
- const PRE_TOOL_USE_HOOK = {
296
- matcher: "Read",
297
- hooks: [{ type: "command", command: "codesift precheck-read" }],
298
- };
299
- const POST_TOOL_USE_HOOK = {
300
- matcher: "Write|Edit",
301
- hooks: [{ type: "command", command: "codesift postindex-file" }],
302
- };
303
- const PRECOMPACT_HOOK = {
304
- matcher: "",
305
- hooks: [{ type: "command", command: "codesift precompact-snapshot" }],
263
+ const CLAUDE_HOOKS = {
264
+ PreToolUse: [
265
+ { matcher: "Read", hooks: [{ type: "command", command: "codesift precheck-read" }] },
266
+ { matcher: "Bash", hooks: [{ type: "command", command: "codesift precheck-bash" }] },
267
+ ],
268
+ PostToolUse: [
269
+ { matcher: "Write|Edit", hooks: [{ type: "command", command: "codesift postindex-file" }] },
270
+ ],
271
+ PreCompact: [
272
+ { matcher: "", hooks: [{ type: "command", command: "codesift precompact-snapshot" }] },
273
+ ],
306
274
  };
307
275
  export async function setupClaudeHooks() {
308
276
  const configDir = join(homedir(), ".claude");
309
277
  const settingsPath = join(configDir, "settings.local.json");
310
278
  await ensureDir(configDir);
311
- let settings = {};
312
- if (existsSync(settingsPath)) {
313
- settings = await readJsonFile(settingsPath);
314
- }
315
- if (typeof settings["hooks"] !== "object" || settings["hooks"] === null) {
316
- settings["hooks"] = {};
317
- }
318
- const hooks = settings["hooks"];
319
- // PreToolUse — add if not already present for matcher "Read"
320
- if (!Array.isArray(hooks["PreToolUse"])) {
321
- hooks["PreToolUse"] = [];
322
- }
323
- if (!hooks["PreToolUse"].some((h) => h.matcher === PRE_TOOL_USE_HOOK.matcher)) {
324
- hooks["PreToolUse"].push(PRE_TOOL_USE_HOOK);
279
+ const { root, hooks } = await loadHooksSection(settingsPath);
280
+ for (const [event, entries] of Object.entries(CLAUDE_HOOKS)) {
281
+ for (const entry of entries) {
282
+ ensureHookEntry(hooks, event, entry);
283
+ }
325
284
  }
326
- // PostToolUse — add if not already present for matcher "Write|Edit"
327
- if (!Array.isArray(hooks["PostToolUse"])) {
328
- hooks["PostToolUse"] = [];
285
+ await writeJsonFile(settingsPath, root);
286
+ }
287
+ // ---------------------------------------------------------------------------
288
+ // Codex CLI hooks — ~/.codex/hooks.json
289
+ // ---------------------------------------------------------------------------
290
+ // Codex only has the Bash tool — Read-redirect and PostToolUse don't apply.
291
+ // No PreCompact event. Install: Stop (conversation indexing) only.
292
+ // ---------------------------------------------------------------------------
293
+ export async function setupCodexHooks() {
294
+ const configDir = process.env["CODEX_HOME"] ?? join(homedir(), ".codex");
295
+ const hooksPath = join(configDir, "hooks.json");
296
+ await ensureDir(configDir);
297
+ const { root, hooks } = await loadHooksSection(hooksPath);
298
+ if (!Array.isArray(hooks["Stop"])) {
299
+ hooks["Stop"] = [];
329
300
  }
330
- if (!hooks["PostToolUse"].some((h) => h.matcher === POST_TOOL_USE_HOOK.matcher)) {
331
- hooks["PostToolUse"].push(POST_TOOL_USE_HOOK);
301
+ if (!hasCodesiftHook(hooks["Stop"])) {
302
+ hooks["Stop"].push({
303
+ matcher: "",
304
+ hooks: [{ type: "command", command: "codesift index-conversations --quiet" }],
305
+ });
332
306
  }
333
- // PreCompact — add if not already present
334
- if (!Array.isArray(hooks["PreCompact"])) {
335
- hooks["PreCompact"] = [];
307
+ await writeJsonFile(hooksPath, root);
308
+ }
309
+ // ---------------------------------------------------------------------------
310
+ // Gemini CLI hooks — ~/.gemini/settings.json
311
+ // ---------------------------------------------------------------------------
312
+ // Gemini uses different event names and tool names:
313
+ // PreToolUse → BeforeTool, PostToolUse → AfterTool,
314
+ // PreCompact → PreCompress, Stop → SessionEnd
315
+ // Read → read_file, Edit → replace, Write → write_file
316
+ // Gemini passes hook input via stdin (not HOOK_TOOL_INPUT env var).
317
+ // ---------------------------------------------------------------------------
318
+ const GEMINI_HOOKS = {
319
+ BeforeTool: {
320
+ matcher: "read_file",
321
+ hooks: [{ type: "command", command: "codesift precheck-read --stdin" }],
322
+ },
323
+ AfterTool: {
324
+ matcher: "write_file|replace",
325
+ hooks: [{ type: "command", command: "codesift postindex-file --stdin" }],
326
+ },
327
+ PreCompress: {
328
+ matcher: "",
329
+ hooks: [{ type: "command", command: "codesift precompact-snapshot --stdin" }],
330
+ },
331
+ SessionEnd: {
332
+ matcher: "",
333
+ hooks: [{ type: "command", command: "codesift index-conversations --quiet" }],
334
+ },
335
+ };
336
+ export async function setupGeminiHooks() {
337
+ const configDir = join(homedir(), ".gemini");
338
+ const settingsPath = join(configDir, "settings.json");
339
+ await ensureDir(configDir);
340
+ const { root, hooks } = await loadHooksSection(settingsPath);
341
+ for (const [eventName, hookEntry] of Object.entries(GEMINI_HOOKS)) {
342
+ if (!Array.isArray(hooks[eventName])) {
343
+ hooks[eventName] = [];
344
+ }
345
+ if (!hasCodesiftHook(hooks[eventName])) {
346
+ hooks[eventName].push(hookEntry);
347
+ }
336
348
  }
337
- if (!hooks["PreCompact"].some((h) => h.matcher === PRECOMPACT_HOOK.matcher)) {
338
- hooks["PreCompact"].push(PRECOMPACT_HOOK);
349
+ await writeJsonFile(settingsPath, root);
350
+ }
351
+ // ---------------------------------------------------------------------------
352
+ // Auto-install hooks for detected platform
353
+ // ---------------------------------------------------------------------------
354
+ export { setupClineHooks };
355
+ const PLATFORM_HOOK_INSTALLERS = {
356
+ claude: setupClaudeHooks,
357
+ codex: setupCodexHooks,
358
+ gemini: setupGeminiHooks,
359
+ cline: setupClineHooks,
360
+ };
361
+ export async function setupHooksForPlatform(platform) {
362
+ const installer = PLATFORM_HOOK_INSTALLERS[platform];
363
+ if (installer) {
364
+ await installer();
339
365
  }
340
- await writeJsonFile(settingsPath, settings);
341
366
  }
342
367
  const PLATFORM_HANDLERS = {
343
368
  codex: setupCodex,
344
- claude: setupClaude,
345
- cursor: setupCursor,
346
- gemini: setupGemini,
369
+ claude: () => setupJsonPlatform("claude"),
370
+ cursor: () => setupJsonPlatform("cursor"),
371
+ gemini: () => setupJsonPlatform("gemini"),
347
372
  };
348
373
  export async function setup(platform, options) {
349
374
  const handler = PLATFORM_HANDLERS[platform];
@@ -351,10 +376,17 @@ export async function setup(platform, options) {
351
376
  throw new Error(`Unknown platform: "${platform}". Supported: ${SUPPORTED_PLATFORMS.join(", ")}, all`);
352
377
  }
353
378
  const result = await handler();
354
- if (platform === "claude" && options?.hooks) {
355
- await setupClaudeHooks();
379
+ if (options?.hooks) {
380
+ const hookInstaller = PLATFORM_HOOK_INSTALLERS[platform];
381
+ if (hookInstaller) {
382
+ await hookInstaller();
383
+ }
384
+ if (platform === "claude") {
385
+ // Auto-install rules with hooks — agents need rules to know the full tool mapping
386
+ await installRules(platform, homedir(), options);
387
+ }
356
388
  }
357
- if (options?.rules) {
389
+ if (options?.rules && !(options?.hooks && platform === "claude")) {
358
390
  await installRules(platform, homedir(), options);
359
391
  }
360
392
  return result;
@@ -362,7 +394,7 @@ export async function setup(platform, options) {
362
394
  export async function setupAll(options) {
363
395
  const results = [];
364
396
  for (const platform of SUPPORTED_PLATFORMS) {
365
- const result = await setup(platform, platform === "claude" ? options : undefined);
397
+ const result = await setup(platform, options);
366
398
  results.push(result);
367
399
  }
368
400
  return results;
@@ -401,10 +433,18 @@ export async function formatSetupLines(platform, options) {
401
433
  lines.push(`✓ ${label} ${rulesResult.path}`);
402
434
  }
403
435
  }
404
- if (platform === "claude" && options?.hooks) {
405
- await setupClaudeHooks();
406
- const hooksPath = join(homedir(), ".claude", "settings.local.json");
407
- lines.push(`✓ hooks configured ${hooksPath}`);
436
+ if (options?.hooks) {
437
+ const hookInstaller = PLATFORM_HOOK_INSTALLERS[platform];
438
+ if (hookInstaller) {
439
+ await hookInstaller();
440
+ const hookPaths = {
441
+ claude: join(homedir(), ".claude", "settings.local.json"),
442
+ codex: join(process.env["CODEX_HOME"] ?? join(homedir(), ".codex"), "hooks.json"),
443
+ gemini: join(homedir(), ".gemini", "settings.json"),
444
+ };
445
+ const hooksPath = hookPaths[platform] ?? "hooks";
446
+ lines.push(`✓ hooks configured ${hooksPath}`);
447
+ }
408
448
  }
409
449
  return lines;
410
450
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getClineHooksDirCandidates(): string[];
2
+ export declare const CLINE_HOOK_SCRIPTS: Record<string, string>;
3
+ export declare function setupClineHooks(): Promise<void>;
4
+ //# sourceMappingURL=shell-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-templates.d.ts","sourceRoot":"","sources":["../../src/cli/shell-templates.ts"],"names":[],"mappings":"AAaA,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAKrD;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoCrD,CAAC;AAEF,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCrD"}
@@ -0,0 +1,86 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Cline hooks — shell scripts for file-based hook system
3
+ // ---------------------------------------------------------------------------
4
+ // Cline uses file-based hooks (shell scripts). Each hook is a .sh file that
5
+ // receives JSON on stdin and outputs JSON on stdout.
6
+ // We create wrapper scripts that delegate to codesift CLI commands.
7
+ // ---------------------------------------------------------------------------
8
+ import { homedir } from "node:os";
9
+ import { join } from "node:path";
10
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
11
+ import { existsSync } from "node:fs";
12
+ export function getClineHooksDirCandidates() {
13
+ return [
14
+ join(homedir(), "Documents", "Cline", "Hooks"), // macOS default
15
+ join(homedir(), ".cline", "hooks"), // Linux alternative
16
+ ];
17
+ }
18
+ export const CLINE_HOOK_SCRIPTS = {
19
+ "PreToolUse.sh": `#!/bin/bash
20
+ # CodeSift: redirect large file reads to CodeSift tools
21
+ INPUT=$(cat)
22
+ TOOL=$(echo "$INPUT" | grep -o '"tool":"[^"]*"' | head -1 | cut -d'"' -f4)
23
+ if [ "$TOOL" = "Read" ] || [ "$TOOL" = "read_file" ]; then
24
+ export HOOK_TOOL_INPUT="$INPUT"
25
+ OUTPUT=$(codesift precheck-read 2>/dev/null)
26
+ if [ $? -eq 2 ]; then
27
+ echo "{\\"cancel\\": true, \\"contextModification\\": $(echo "$OUTPUT" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()))' 2>/dev/null || echo '""')}"
28
+ exit 0
29
+ fi
30
+ fi
31
+ echo "{\\"cancel\\": false}"
32
+ `,
33
+ "PostToolUse.sh": `#!/bin/bash
34
+ # CodeSift: auto-reindex files after edit/write
35
+ INPUT=$(cat)
36
+ TOOL=$(echo "$INPUT" | grep -o '"tool":"[^"]*"' | head -1 | cut -d'"' -f4)
37
+ if [ "$TOOL" = "Write" ] || [ "$TOOL" = "Edit" ] || [ "$TOOL" = "write_file" ] || [ "$TOOL" = "replace" ]; then
38
+ export HOOK_TOOL_INPUT="$INPUT"
39
+ codesift postindex-file >/dev/null 2>&1
40
+ fi
41
+ echo "{\\"cancel\\": false}"
42
+ `,
43
+ "PreCompact.sh": `#!/bin/bash
44
+ # CodeSift: inject session snapshot before context compaction
45
+ INPUT=$(cat)
46
+ export HOOK_TOOL_INPUT="$INPUT"
47
+ SNAPSHOT=$(codesift precompact-snapshot 2>/dev/null)
48
+ if [ -n "$SNAPSHOT" ]; then
49
+ echo "{\\"cancel\\": false, \\"contextModification\\": $(echo "$SNAPSHOT" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()))' 2>/dev/null || echo '""')}"
50
+ else
51
+ echo "{\\"cancel\\": false}"
52
+ fi
53
+ `,
54
+ };
55
+ export async function setupClineHooks() {
56
+ // Find or create hooks directory
57
+ let hooksDir;
58
+ for (const candidate of getClineHooksDirCandidates()) {
59
+ if (existsSync(candidate)) {
60
+ hooksDir = candidate;
61
+ break;
62
+ }
63
+ }
64
+ if (!hooksDir) {
65
+ // Create default directory
66
+ hooksDir = getClineHooksDirCandidates()[0];
67
+ await mkdir(hooksDir, { recursive: true });
68
+ }
69
+ for (const [filename, content] of Object.entries(CLINE_HOOK_SCRIPTS)) {
70
+ const hookPath = join(hooksDir, filename);
71
+ if (existsSync(hookPath)) {
72
+ // Don't overwrite existing hooks — they may contain user customizations
73
+ const existing = await readFile(hookPath, "utf-8");
74
+ if (existing.includes("codesift"))
75
+ continue; // Already has our hooks
76
+ // Append our section
77
+ const marker = "\n\n# --- CodeSift hooks (auto-installed) ---\n";
78
+ if (!existing.includes("CodeSift")) {
79
+ await writeFile(hookPath, existing.trimEnd() + marker + content, "utf-8");
80
+ }
81
+ continue;
82
+ }
83
+ await writeFile(hookPath, content, { mode: 0o755 });
84
+ }
85
+ }
86
+ //# sourceMappingURL=shell-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-templates.js","sourceRoot":"","sources":["../../src/cli/shell-templates.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAC9E,4EAA4E;AAC5E,qDAAqD;AACrD,oEAAoE;AACpE,8EAA8E;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAQ,gBAAgB;QACtE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAsB,oBAAoB;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,eAAe,EAAE;;;;;;;;;;;;;CAalB;IACC,gBAAgB,EAAE;;;;;;;;;CASnB;IACC,eAAe,EAAE;;;;;;;;;;CAUlB;CACA,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,iCAAiC;IACjC,IAAI,QAA4B,CAAC;IACjC,KAAK,MAAM,SAAS,IAAI,0BAA0B,EAAE,EAAE,CAAC;QACrD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,QAAQ,GAAG,SAAS,CAAC;YACrB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,2BAA2B;QAC3B,QAAQ,GAAG,0BAA0B,EAAE,CAAC,CAAC,CAAE,CAAC;QAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,wEAAwE;YACxE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,SAAS,CAAC,wBAAwB;YACrE,qBAAqB;YACrB,MAAM,MAAM,GAAG,iDAAiD,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5E,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
@@ -2,5 +2,5 @@
2
2
  * CODESIFT_INSTRUCTIONS — single source of truth for agent guidance.
3
3
  * Target: ~800 tokens (~3200 chars). Compact abbreviated format.
4
4
  */
5
- export declare const CODESIFT_INSTRUCTIONS = "CodeSift \u2014 66 MCP tools (14 core, 52 hidden via disable()).\n\nDISCOVERY\n discover_tools(query=\"dead code\") \u2192 keyword search \u2192 returns tool names\n describe_tools(names=[\"find_dead_code\"]) \u2192 full schema with param types\n describe_tools(names=[...], reveal=true) \u2192 also adds tool to ListTools\n Then call the tool directly by name.\n\nHINT CODES (appear in tool responses \u2014 take the suggested action immediately)\n H1(n) n matches returned \u2192 add group_by_file=true\n H2(n,tool) n consecutive identical calls \u2192 batch into one tool call\n H3(n) list_repos called n times \u2192 reuse cached value (call once/session)\n H4 include_source without file_pattern \u2192 add file_pattern\n H5(path) duplicate get_file_tree \u2192 use cached result\n H6(n) n results without detail_level \u2192 add detail_level=compact\n H7 get_symbol after search_symbols \u2192 use get_context_bundle instead\n H8(n) n\u00D7 get_symbol calls \u2192 use assemble_context(level=L1) instead\n H9 question-word text query \u2192 use semantic_search or codebase_retrieval(type:semantic)\n\nALWAYS\n Call list_repos once per session \u2014 cache and reuse the result.\n Use semantic_search or codebase_retrieval(type:semantic) for conceptual/question queries.\n Pass file_pattern when scope is known (cuts noise and tokens).\n Use get_symbols (batch) for 2+ symbols \u2014 never sequential get_symbol calls.\n Batch 3+ searches into codebase_retrieval(queries=[...]).\n Pass token_budget to cap large responses.\n Call index_file(path) after editing a file (9ms vs 3-8s for index_folder).\n Use trace_route first for any API endpoint trace.\n\nNEVER\n Call index_folder if repo is already in list_repos (file watcher auto-updates).\n Call list_repos more than once per session.\n Use get_knowledge_map without detect_communities first (129K+ tokens).\n Use sequential search_text + trace_call_chain for endpoint \u2014 use trace_route.\n Read entire file for a return type \u2014 use get_type_info.\n\nKEY PARAMS\n search_symbols: detail_level=compact (~15 tok/result) | token_budget=N | kind=function/class/type\n search_text: group_by_file=true (-80% output) | auto_group=true (>50 matches)\n ranked=true \u2192 classify by function, dedup (max 2/fn), rank by centrality\n assemble_context: level=L0 (full source) | L1 (signatures, 3-5x denser) | L2 (summaries) | L3 (dirs)\n codebase_retrieval: always pass token_budget; batch 3+ queries\n get_knowledge_map: ALWAYS pass focus= to avoid 129K+ token dumps\n\nRESPONSE CASCADE (auto, no params needed)\n >52.5K chars \u2192 compact format [compact] annotation prepended\n >87.5K chars \u2192 counts only [counts] annotation prepended\n >105K chars \u2192 hard truncate\n Cascade skipped when detail_level or token_budget is explicitly set.\n\nTOOL MAPPING (quick ref)\n text pattern \u2192 search_text(file_pattern=)\n function/class \u2192 search_symbols(include_source=true)\n file structure \u2192 get_file_outline | find files \u2192 get_file_tree(compact=true)\n 1 symbol \u2192 get_symbol | 2+ symbols \u2192 get_symbols (batch)\n symbol + refs \u2192 find_and_show(include_refs=true) | usages \u2192 find_references\n call chain \u2192 trace_call_chain | blast radius \u2192 impact_analysis(since=\"HEAD~3\")\n concept question \u2192 semantic_search or codebase_retrieval(type:semantic)\n multi-search 3+ \u2192 codebase_retrieval(queries=[...])\n dead code \u2192 find_dead_code | complexity \u2192 analyze_complexity\n duplication \u2192 find_clones(min_similarity=0.7) | anti-patterns \u2192 search_patterns\n architecture/deps \u2192 detect_communities(focus=) | git churn \u2192 analyze_hotspots(since_days=90)\n mermaid diagram \u2192 trace_call_chain(output_format=\"mermaid\")\n API endpoint \u2192 trace_route (FIRST) | secrets \u2192 scan_secrets\n past sessions \u2192 search_conversations | changed code \u2192 changed_symbols(since=)\n session snapshot \u2192 get_session_snapshot | session \u2192 get_session_context\n";
5
+ export declare const CODESIFT_INSTRUCTIONS = "CodeSift \u2014 66 MCP tools (14 core, 52 hidden via disable()).\n\nDISCOVERY\n discover_tools(query=\"dead code\") \u2192 keyword search \u2192 returns tool names\n describe_tools(names=[\"find_dead_code\"]) \u2192 full schema with param types\n describe_tools(names=[...], reveal=true) \u2192 also adds tool to ListTools\n Then call the tool directly by name.\n\nHINT CODES (appear in tool responses \u2014 take the suggested action immediately)\n H1(n) n matches returned \u2192 add group_by_file=true\n H2(n,tool) n consecutive identical calls \u2192 batch into one tool call\n H3(n) list_repos called n times \u2192 repo auto-resolves from CWD, no need to call\n H4 include_source without file_pattern \u2192 add file_pattern\n H5(path) duplicate get_file_tree \u2192 use cached result\n H6(n) n results without detail_level \u2192 add detail_level=compact\n H7 get_symbol after search_symbols \u2192 use get_context_bundle instead\n H8(n) n\u00D7 get_symbol calls \u2192 use assemble_context(level=L1) instead\n H9 question-word text query \u2192 use semantic_search or codebase_retrieval(type:semantic)\n\nALWAYS\n repo param auto-resolves from CWD \u2014 skip list_repos for single-repo sessions.\n Use semantic_search or codebase_retrieval(type:semantic) for conceptual/question queries.\n Pass file_pattern when scope is known (cuts noise and tokens).\n Use get_symbols (batch) for 2+ symbols \u2014 never sequential get_symbol calls.\n Batch 3+ searches into codebase_retrieval(queries=[...]).\n Pass token_budget to cap large responses.\n Call index_file(path) after editing a file (9ms vs 3-8s for index_folder).\n Use trace_route first for any API endpoint trace.\n\nNEVER\n Call index_folder if repo is already indexed (file watcher auto-updates).\n Call list_repos in single-repo sessions \u2014 repo auto-resolves from CWD.\n Use get_knowledge_map without detect_communities first (129K+ tokens).\n Use sequential search_text + trace_call_chain for endpoint \u2014 use trace_route.\n Read entire file for a return type \u2014 use get_type_info.\n\nKEY PARAMS\n search_symbols: detail_level=compact (~15 tok/result) | token_budget=N | kind=function/class/type\n search_text: group_by_file=true (-80% output) | auto_group=true (>50 matches)\n ranked=true \u2192 classify by function, dedup (max 2/fn), rank by centrality\n assemble_context: level=L0 (full source) | L1 (signatures, 3-5x denser) | L2 (summaries) | L3 (dirs)\n codebase_retrieval: always pass token_budget; batch 3+ queries\n get_knowledge_map: ALWAYS pass focus= to avoid 129K+ token dumps\n\nRESPONSE CASCADE (auto, no params needed)\n >52.5K chars \u2192 compact format [compact] annotation prepended\n >87.5K chars \u2192 counts only [counts] annotation prepended\n >105K chars \u2192 hard truncate\n Cascade skipped when detail_level or token_budget is explicitly set.\n\nTOOL MAPPING (quick ref)\n text pattern \u2192 search_text(file_pattern=)\n function/class \u2192 search_symbols(include_source=true)\n file structure \u2192 get_file_outline | find files \u2192 get_file_tree(compact=true)\n 1 symbol \u2192 get_symbol | 2+ symbols \u2192 get_symbols (batch)\n symbol + refs \u2192 find_and_show(include_refs=true) | usages \u2192 find_references\n call chain \u2192 trace_call_chain | blast radius \u2192 impact_analysis(since=\"HEAD~3\")\n concept question \u2192 semantic_search or codebase_retrieval(type:semantic)\n multi-search 3+ \u2192 codebase_retrieval(queries=[...])\n dead code \u2192 find_dead_code | complexity \u2192 analyze_complexity\n duplication \u2192 find_clones(min_similarity=0.7) | anti-patterns \u2192 search_patterns\n architecture/deps \u2192 detect_communities(focus=) | git churn \u2192 analyze_hotspots(since_days=90)\n mermaid diagram \u2192 trace_call_chain(output_format=\"mermaid\")\n API endpoint \u2192 trace_route (FIRST) | secrets \u2192 scan_secrets\n past sessions \u2192 search_conversations | changed code \u2192 changed_symbols(since=)\n session snapshot \u2192 get_session_snapshot | session \u2192 get_session_context\n";
6
6
  //# sourceMappingURL=instructions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,snIAkEjC,CAAC"}
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,qqIAkEjC,CAAC"}
@@ -13,7 +13,7 @@ DISCOVERY
13
13
  HINT CODES (appear in tool responses — take the suggested action immediately)
14
14
  H1(n) n matches returned → add group_by_file=true
15
15
  H2(n,tool) n consecutive identical calls → batch into one tool call
16
- H3(n) list_repos called n times → reuse cached value (call once/session)
16
+ H3(n) list_repos called n times → repo auto-resolves from CWD, no need to call
17
17
  H4 include_source without file_pattern → add file_pattern
18
18
  H5(path) duplicate get_file_tree → use cached result
19
19
  H6(n) n results without detail_level → add detail_level=compact
@@ -22,7 +22,7 @@ HINT CODES (appear in tool responses — take the suggested action immediately)
22
22
  H9 question-word text query → use semantic_search or codebase_retrieval(type:semantic)
23
23
 
24
24
  ALWAYS
25
- Call list_repos once per sessioncache and reuse the result.
25
+ repo param auto-resolves from CWDskip list_repos for single-repo sessions.
26
26
  Use semantic_search or codebase_retrieval(type:semantic) for conceptual/question queries.
27
27
  Pass file_pattern when scope is known (cuts noise and tokens).
28
28
  Use get_symbols (batch) for 2+ symbols — never sequential get_symbol calls.
@@ -32,8 +32,8 @@ ALWAYS
32
32
  Use trace_route first for any API endpoint trace.
33
33
 
34
34
  NEVER
35
- Call index_folder if repo is already in list_repos (file watcher auto-updates).
36
- Call list_repos more than once per session.
35
+ Call index_folder if repo is already indexed (file watcher auto-updates).
36
+ Call list_repos in single-repo sessions repo auto-resolves from CWD.
37
37
  Use get_knowledge_map without detect_communities first (129K+ tokens).
38
38
  Use sequential search_text + trace_call_chain for endpoint — use trace_route.
39
39
  Read entire file for a return type — use get_type_info.