codesift-mcp 0.9.5 → 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -23
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +88 -2
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +18 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/hooks/input.d.ts +11 -0
- package/dist/cli/hooks/input.d.ts.map +1 -0
- package/dist/cli/hooks/input.js +111 -0
- package/dist/cli/hooks/input.js.map +1 -0
- package/dist/cli/hooks/post-tool-use.d.ts +2 -0
- package/dist/cli/hooks/post-tool-use.d.ts.map +1 -0
- package/dist/cli/hooks/post-tool-use.js +339 -0
- package/dist/cli/hooks/post-tool-use.js.map +1 -0
- package/dist/cli/hooks/pre-compact.d.ts +2 -0
- package/dist/cli/hooks/pre-compact.d.ts.map +1 -0
- package/dist/cli/hooks/pre-compact.js +41 -0
- package/dist/cli/hooks/pre-compact.js.map +1 -0
- package/dist/cli/hooks/pre-tool-use.d.ts +5 -0
- package/dist/cli/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/cli/hooks/pre-tool-use.js +215 -0
- package/dist/cli/hooks/pre-tool-use.js.map +1 -0
- package/dist/cli/hooks/session.d.ts +5 -0
- package/dist/cli/hooks/session.d.ts.map +1 -0
- package/dist/cli/hooks/session.js +188 -0
- package/dist/cli/hooks/session.js.map +1 -0
- package/dist/cli/hooks/shared.d.ts +6 -0
- package/dist/cli/hooks/shared.d.ts.map +1 -0
- package/dist/cli/hooks/shared.js +70 -0
- package/dist/cli/hooks/shared.js.map +1 -0
- package/dist/cli/hooks/wiki.d.ts +10 -0
- package/dist/cli/hooks/wiki.d.ts.map +1 -0
- package/dist/cli/hooks/wiki.js +202 -0
- package/dist/cli/hooks/wiki.js.map +1 -0
- package/dist/cli/hooks.d.ts +5 -16
- package/dist/cli/hooks.d.ts.map +1 -1
- package/dist/cli/hooks.js +5 -1132
- package/dist/cli/hooks.js.map +1 -1
- package/dist/cli/setup/claude.d.ts +4 -0
- package/dist/cli/setup/claude.d.ts.map +1 -0
- package/dist/cli/setup/claude.js +123 -0
- package/dist/cli/setup/claude.js.map +1 -0
- package/dist/cli/setup/codex.d.ts +12 -0
- package/dist/cli/setup/codex.d.ts.map +1 -0
- package/dist/cli/setup/codex.js +182 -0
- package/dist/cli/setup/codex.js.map +1 -0
- package/dist/cli/setup/cursor.d.ts +3 -0
- package/dist/cli/setup/cursor.d.ts.map +1 -0
- package/dist/cli/setup/cursor.js +6 -0
- package/dist/cli/setup/cursor.js.map +1 -0
- package/dist/cli/setup/fs.d.ts +6 -0
- package/dist/cli/setup/fs.d.ts.map +1 -0
- package/dist/cli/setup/fs.js +44 -0
- package/dist/cli/setup/fs.js.map +1 -0
- package/dist/cli/setup/gemini.d.ts +5 -0
- package/dist/cli/setup/gemini.d.ts.map +1 -0
- package/dist/cli/setup/gemini.js +46 -0
- package/dist/cli/setup/gemini.js.map +1 -0
- package/dist/cli/setup/hooks.d.ts +12 -0
- package/dist/cli/setup/hooks.d.ts.map +1 -0
- package/dist/cli/setup/hooks.js +29 -0
- package/dist/cli/setup/hooks.js.map +1 -0
- package/dist/cli/setup/mcp.d.ts +13 -0
- package/dist/cli/setup/mcp.d.ts.map +1 -0
- package/dist/cli/setup/mcp.js +104 -0
- package/dist/cli/setup/mcp.js.map +1 -0
- package/dist/cli/setup/rules.d.ts +4 -0
- package/dist/cli/setup/rules.d.ts.map +1 -0
- package/dist/cli/setup/rules.js +157 -0
- package/dist/cli/setup/rules.js.map +1 -0
- package/dist/cli/setup/types.d.ts +24 -0
- package/dist/cli/setup/types.d.ts.map +1 -0
- package/dist/cli/setup/types.js +2 -0
- package/dist/cli/setup/types.js.map +1 -0
- package/dist/cli/setup.d.ts +8 -48
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +49 -705
- package/dist/cli/setup.js.map +1 -1
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +56 -2
- package/dist/config.js.map +1 -1
- package/dist/formatter-dispatch.d.ts +53 -0
- package/dist/formatter-dispatch.d.ts.map +1 -0
- package/dist/formatter-dispatch.js +54 -0
- package/dist/formatter-dispatch.js.map +1 -0
- package/dist/formatters-analysis.d.ts +9 -0
- package/dist/formatters-analysis.d.ts.map +1 -0
- package/dist/formatters-analysis.js +166 -0
- package/dist/formatters-analysis.js.map +1 -0
- package/dist/formatters-core.d.ts +200 -0
- package/dist/formatters-core.d.ts.map +1 -0
- package/dist/formatters-core.js +206 -0
- package/dist/formatters-core.js.map +1 -0
- package/dist/formatters-graph.d.ts +124 -0
- package/dist/formatters-graph.d.ts.map +1 -0
- package/dist/formatters-graph.js +175 -0
- package/dist/formatters-graph.js.map +1 -0
- package/dist/formatters-nextjs.d.ts +22 -0
- package/dist/formatters-nextjs.d.ts.map +1 -0
- package/dist/formatters-nextjs.js +394 -0
- package/dist/formatters-nextjs.js.map +1 -0
- package/dist/formatters.d.ts +8 -349
- package/dist/formatters.d.ts.map +1 -1
- package/dist/formatters.js +10 -929
- package/dist/formatters.js.map +1 -1
- package/dist/parser/astro-template/preprocess.d.ts +12 -0
- package/dist/parser/astro-template/preprocess.d.ts.map +1 -0
- package/dist/parser/astro-template/preprocess.js +34 -0
- package/dist/parser/astro-template/preprocess.js.map +1 -0
- package/dist/parser/astro-template/resolution.d.ts +16 -0
- package/dist/parser/astro-template/resolution.d.ts.map +1 -0
- package/dist/parser/astro-template/resolution.js +58 -0
- package/dist/parser/astro-template/resolution.js.map +1 -0
- package/dist/parser/astro-template/scanner.d.ts +4 -0
- package/dist/parser/astro-template/scanner.d.ts.map +1 -0
- package/dist/parser/astro-template/scanner.js +71 -0
- package/dist/parser/astro-template/scanner.js.map +1 -0
- package/dist/parser/astro-template/state.d.ts +22 -0
- package/dist/parser/astro-template/state.d.ts.map +1 -0
- package/dist/parser/astro-template/state.js +48 -0
- package/dist/parser/astro-template/state.js.map +1 -0
- package/dist/parser/astro-template/tag-processor.d.ts +3 -0
- package/dist/parser/astro-template/tag-processor.d.ts.map +1 -0
- package/dist/parser/astro-template/tag-processor.js +63 -0
- package/dist/parser/astro-template/tag-processor.js.map +1 -0
- package/dist/parser/astro-template/types.d.ts +42 -0
- package/dist/parser/astro-template/types.d.ts.map +1 -0
- package/dist/parser/astro-template/types.js +2 -0
- package/dist/parser/astro-template/types.js.map +1 -0
- package/dist/parser/astro-template.d.ts +2 -45
- package/dist/parser/astro-template.d.ts.map +1 -1
- package/dist/parser/astro-template.js +7 -168
- package/dist/parser/astro-template.js.map +1 -1
- package/dist/parser/extractors/_shared.js +1 -1
- package/dist/parser/extractors/_shared.js.map +1 -1
- package/dist/parser/extractors/astro.js +1 -1
- package/dist/parser/extractors/astro.js.map +1 -1
- package/dist/parser/extractors/conversation.js +1 -1
- package/dist/parser/extractors/conversation.js.map +1 -1
- package/dist/parser/extractors/hono-app-discovery.d.ts +4 -0
- package/dist/parser/extractors/hono-app-discovery.d.ts.map +1 -0
- package/dist/parser/extractors/hono-app-discovery.js +169 -0
- package/dist/parser/extractors/hono-app-discovery.js.map +1 -0
- package/dist/parser/extractors/hono-ast-utils.d.ts +6 -0
- package/dist/parser/extractors/hono-ast-utils.d.ts.map +1 -0
- package/dist/parser/extractors/hono-ast-utils.js +77 -0
- package/dist/parser/extractors/hono-ast-utils.js.map +1 -0
- package/dist/parser/extractors/hono-context-extractor.d.ts +15 -0
- package/dist/parser/extractors/hono-context-extractor.d.ts.map +1 -0
- package/dist/parser/extractors/hono-context-extractor.js +191 -0
- package/dist/parser/extractors/hono-context-extractor.js.map +1 -0
- package/dist/parser/extractors/hono-middleware-extractor.d.ts +38 -0
- package/dist/parser/extractors/hono-middleware-extractor.d.ts.map +1 -0
- package/dist/parser/extractors/hono-middleware-extractor.js +480 -0
- package/dist/parser/extractors/hono-middleware-extractor.js.map +1 -0
- package/dist/parser/extractors/hono-openapi-extractor.d.ts +11 -0
- package/dist/parser/extractors/hono-openapi-extractor.d.ts.map +1 -0
- package/dist/parser/extractors/hono-openapi-extractor.js +119 -0
- package/dist/parser/extractors/hono-openapi-extractor.js.map +1 -0
- package/dist/parser/extractors/hono-route-extractor.d.ts +11 -0
- package/dist/parser/extractors/hono-route-extractor.d.ts.map +1 -0
- package/dist/parser/extractors/hono-route-extractor.js +128 -0
- package/dist/parser/extractors/hono-route-extractor.js.map +1 -0
- package/dist/parser/extractors/hono-route-utils.d.ts +11 -0
- package/dist/parser/extractors/hono-route-utils.d.ts.map +1 -0
- package/dist/parser/extractors/hono-route-utils.js +40 -0
- package/dist/parser/extractors/hono-route-utils.js.map +1 -0
- package/dist/parser/extractors/hono-runtime-extractor.d.ts +17 -0
- package/dist/parser/extractors/hono-runtime-extractor.d.ts.map +1 -0
- package/dist/parser/extractors/hono-runtime-extractor.js +141 -0
- package/dist/parser/extractors/hono-runtime-extractor.js.map +1 -0
- package/dist/parser/extractors/hono.d.ts +5 -79
- package/dist/parser/extractors/hono.d.ts.map +1 -1
- package/dist/parser/extractors/hono.js +32 -1159
- package/dist/parser/extractors/hono.js.map +1 -1
- package/dist/parser/extractors/kotlin-ast-helpers.d.ts +43 -0
- package/dist/parser/extractors/kotlin-ast-helpers.d.ts.map +1 -0
- package/dist/parser/extractors/kotlin-ast-helpers.js +187 -0
- package/dist/parser/extractors/kotlin-ast-helpers.js.map +1 -0
- package/dist/parser/extractors/kotlin-test-symbols.d.ts +21 -0
- package/dist/parser/extractors/kotlin-test-symbols.d.ts.map +1 -0
- package/dist/parser/extractors/kotlin-test-symbols.js +162 -0
- package/dist/parser/extractors/kotlin-test-symbols.js.map +1 -0
- package/dist/parser/extractors/kotlin.d.ts.map +1 -1
- package/dist/parser/extractors/kotlin.js +3 -334
- package/dist/parser/extractors/kotlin.js.map +1 -1
- package/dist/parser/extractors/markdown.js +1 -1
- package/dist/parser/extractors/markdown.js.map +1 -1
- package/dist/parser/extractors/prisma.js +1 -1
- package/dist/parser/extractors/prisma.js.map +1 -1
- package/dist/parser/extractors/sql-boundaries.d.ts +3 -0
- package/dist/parser/extractors/sql-boundaries.d.ts.map +1 -0
- package/dist/parser/extractors/sql-boundaries.js +19 -0
- package/dist/parser/extractors/sql-boundaries.js.map +1 -0
- package/dist/parser/extractors/sql-columns.d.ts +14 -0
- package/dist/parser/extractors/sql-columns.d.ts.map +1 -0
- package/dist/parser/extractors/sql-columns.js +59 -0
- package/dist/parser/extractors/sql-columns.js.map +1 -0
- package/dist/parser/extractors/sql-docstrings.d.ts +2 -0
- package/dist/parser/extractors/sql-docstrings.d.ts.map +1 -0
- package/dist/parser/extractors/sql-docstrings.js +45 -0
- package/dist/parser/extractors/sql-docstrings.js.map +1 -0
- package/dist/parser/extractors/sql-end-scanner.d.ts +5 -0
- package/dist/parser/extractors/sql-end-scanner.d.ts.map +1 -0
- package/dist/parser/extractors/sql-end-scanner.js +84 -0
- package/dist/parser/extractors/sql-end-scanner.js.map +1 -0
- package/dist/parser/extractors/sql-jinja.d.ts +2 -0
- package/dist/parser/extractors/sql-jinja.d.ts.map +1 -0
- package/dist/parser/extractors/sql-jinja.js +8 -0
- package/dist/parser/extractors/sql-jinja.js.map +1 -0
- package/dist/parser/extractors/sql-matcher-catalog.d.ts +9 -0
- package/dist/parser/extractors/sql-matcher-catalog.d.ts.map +1 -0
- package/dist/parser/extractors/sql-matcher-catalog.js +15 -0
- package/dist/parser/extractors/sql-matcher-catalog.js.map +1 -0
- package/dist/parser/extractors/sql-matchers.d.ts +9 -0
- package/dist/parser/extractors/sql-matchers.d.ts.map +1 -0
- package/dist/parser/extractors/sql-matchers.js +20 -0
- package/dist/parser/extractors/sql-matchers.js.map +1 -0
- package/dist/parser/extractors/sql-offsets.d.ts +2 -0
- package/dist/parser/extractors/sql-offsets.d.ts.map +1 -0
- package/dist/parser/extractors/sql-offsets.js +25 -0
- package/dist/parser/extractors/sql-offsets.js.map +1 -0
- package/dist/parser/extractors/sql-parens.d.ts +4 -0
- package/dist/parser/extractors/sql-parens.d.ts.map +1 -0
- package/dist/parser/extractors/sql-parens.js +70 -0
- package/dist/parser/extractors/sql-parens.js.map +1 -0
- package/dist/parser/extractors/sql-symbols.d.ts +11 -0
- package/dist/parser/extractors/sql-symbols.d.ts.map +1 -0
- package/dist/parser/extractors/sql-symbols.js +23 -0
- package/dist/parser/extractors/sql-symbols.js.map +1 -0
- package/dist/parser/extractors/sql.d.ts +2 -30
- package/dist/parser/extractors/sql.d.ts.map +1 -1
- package/dist/parser/extractors/sql.js +23 -496
- package/dist/parser/extractors/sql.js.map +1 -1
- package/dist/parser/extractors/typescript-cjs-nodes.d.ts +5 -0
- package/dist/parser/extractors/typescript-cjs-nodes.d.ts.map +1 -0
- package/dist/parser/extractors/typescript-cjs-nodes.js +148 -0
- package/dist/parser/extractors/typescript-cjs-nodes.js.map +1 -0
- package/dist/parser/extractors/typescript-class-nodes.d.ts +8 -0
- package/dist/parser/extractors/typescript-class-nodes.d.ts.map +1 -0
- package/dist/parser/extractors/typescript-class-nodes.js +183 -0
- package/dist/parser/extractors/typescript-class-nodes.js.map +1 -0
- package/dist/parser/extractors/typescript-declaration-nodes.d.ts +5 -0
- package/dist/parser/extractors/typescript-declaration-nodes.d.ts.map +1 -0
- package/dist/parser/extractors/typescript-declaration-nodes.js +105 -0
- package/dist/parser/extractors/typescript-declaration-nodes.js.map +1 -0
- package/dist/parser/extractors/typescript-module-nodes.d.ts +6 -0
- package/dist/parser/extractors/typescript-module-nodes.d.ts.map +1 -0
- package/dist/parser/extractors/typescript-module-nodes.js +151 -0
- package/dist/parser/extractors/typescript-module-nodes.js.map +1 -0
- package/dist/parser/extractors/typescript-react.d.ts +11 -0
- package/dist/parser/extractors/typescript-react.d.ts.map +1 -0
- package/dist/parser/extractors/typescript-react.js +101 -0
- package/dist/parser/extractors/typescript-react.js.map +1 -0
- package/dist/parser/extractors/typescript-shared.d.ts +26 -0
- package/dist/parser/extractors/typescript-shared.d.ts.map +1 -0
- package/dist/parser/extractors/typescript-shared.js +101 -0
- package/dist/parser/extractors/typescript-shared.js.map +1 -0
- package/dist/parser/extractors/typescript-test-nodes.d.ts +4 -0
- package/dist/parser/extractors/typescript-test-nodes.d.ts.map +1 -0
- package/dist/parser/extractors/typescript-test-nodes.js +112 -0
- package/dist/parser/extractors/typescript-test-nodes.js.map +1 -0
- package/dist/parser/extractors/typescript-type-nodes.d.ts +6 -0
- package/dist/parser/extractors/typescript-type-nodes.d.ts.map +1 -0
- package/dist/parser/extractors/typescript-type-nodes.js +48 -0
- package/dist/parser/extractors/typescript-type-nodes.js.map +1 -0
- package/dist/parser/extractors/typescript.d.ts.map +1 -1
- package/dist/parser/extractors/typescript.js +68 -1127
- package/dist/parser/extractors/typescript.js.map +1 -1
- package/dist/parser/parser-manager.d.ts.map +1 -1
- package/dist/parser/parser-manager.js +5 -0
- package/dist/parser/parser-manager.js.map +1 -1
- package/dist/parser/symbol-extractor.d.ts +1 -12
- package/dist/parser/symbol-extractor.d.ts.map +1 -1
- package/dist/parser/symbol-extractor.js +2 -24
- package/dist/parser/symbol-extractor.js.map +1 -1
- package/dist/parser/symbol-utils.d.ts +4 -0
- package/dist/parser/symbol-utils.d.ts.map +1 -0
- package/dist/parser/symbol-utils.js +20 -0
- package/dist/parser/symbol-utils.js.map +1 -0
- package/dist/register-tool-groups/analysis/cross-repo.d.ts +4 -0
- package/dist/register-tool-groups/analysis/cross-repo.d.ts.map +1 -0
- package/dist/register-tool-groups/analysis/cross-repo.js +108 -0
- package/dist/register-tool-groups/analysis/cross-repo.js.map +1 -0
- package/dist/register-tool-groups/analysis/review.d.ts +3 -0
- package/dist/register-tool-groups/analysis/review.d.ts.map +1 -0
- package/dist/register-tool-groups/analysis/review.js +96 -0
- package/dist/register-tool-groups/analysis/review.js.map +1 -0
- package/dist/register-tool-groups/analysis/workspace.d.ts +3 -0
- package/dist/register-tool-groups/analysis/workspace.d.ts.map +1 -0
- package/dist/register-tool-groups/analysis/workspace.js +82 -0
- package/dist/register-tool-groups/analysis/workspace.js.map +1 -0
- package/dist/register-tool-groups/analysis.d.ts +3 -0
- package/dist/register-tool-groups/analysis.d.ts.map +1 -0
- package/dist/register-tool-groups/analysis.js +541 -0
- package/dist/register-tool-groups/analysis.js.map +1 -0
- package/dist/register-tool-groups/astro.d.ts +3 -0
- package/dist/register-tool-groups/astro.d.ts.map +1 -0
- package/dist/register-tool-groups/astro.js +302 -0
- package/dist/register-tool-groups/astro.js.map +1 -0
- package/dist/register-tool-groups/core/index.d.ts +3 -0
- package/dist/register-tool-groups/core/index.d.ts.map +1 -0
- package/dist/register-tool-groups/core/index.js +96 -0
- package/dist/register-tool-groups/core/index.js.map +1 -0
- package/dist/register-tool-groups/core/meta.d.ts +3 -0
- package/dist/register-tool-groups/core/meta.d.ts.map +1 -0
- package/dist/register-tool-groups/core/meta.js +180 -0
- package/dist/register-tool-groups/core/meta.js.map +1 -0
- package/dist/register-tool-groups/core/schema.d.ts +3 -0
- package/dist/register-tool-groups/core/schema.d.ts.map +1 -0
- package/dist/register-tool-groups/core/schema.js +16 -0
- package/dist/register-tool-groups/core/schema.js.map +1 -0
- package/dist/register-tool-groups/core/search.d.ts +4 -0
- package/dist/register-tool-groups/core/search.d.ts.map +1 -0
- package/dist/register-tool-groups/core/search.js +262 -0
- package/dist/register-tool-groups/core/search.js.map +1 -0
- package/dist/register-tool-groups/core/symbols.d.ts +3 -0
- package/dist/register-tool-groups/core/symbols.d.ts.map +1 -0
- package/dist/register-tool-groups/core/symbols.js +338 -0
- package/dist/register-tool-groups/core/symbols.js.map +1 -0
- package/dist/register-tool-groups/core.d.ts +3 -0
- package/dist/register-tool-groups/core.d.ts.map +1 -0
- package/dist/register-tool-groups/core.js +12 -0
- package/dist/register-tool-groups/core.js.map +1 -0
- package/dist/register-tool-groups/deps.d.ts +10 -0
- package/dist/register-tool-groups/deps.d.ts.map +1 -0
- package/dist/register-tool-groups/deps.js +6 -0
- package/dist/register-tool-groups/deps.js.map +1 -0
- package/dist/register-tool-groups/handler-wrappers.d.ts +63 -0
- package/dist/register-tool-groups/handler-wrappers.d.ts.map +1 -0
- package/dist/register-tool-groups/handler-wrappers.js +106 -0
- package/dist/register-tool-groups/handler-wrappers.js.map +1 -0
- package/dist/register-tool-groups/hono.d.ts +3 -0
- package/dist/register-tool-groups/hono.d.ts.map +1 -0
- package/dist/register-tool-groups/hono.js +179 -0
- package/dist/register-tool-groups/hono.js.map +1 -0
- package/dist/register-tool-groups/index.d.ts +3 -0
- package/dist/register-tool-groups/index.d.ts.map +1 -0
- package/dist/register-tool-groups/index.js +28 -0
- package/dist/register-tool-groups/index.js.map +1 -0
- package/dist/register-tool-groups/kotlin.d.ts +3 -0
- package/dist/register-tool-groups/kotlin.d.ts.map +1 -0
- package/dist/register-tool-groups/kotlin.js +162 -0
- package/dist/register-tool-groups/kotlin.js.map +1 -0
- package/dist/register-tool-groups/meta.d.ts +3 -0
- package/dist/register-tool-groups/meta.d.ts.map +1 -0
- package/dist/register-tool-groups/meta.js +563 -0
- package/dist/register-tool-groups/meta.js.map +1 -0
- package/dist/register-tool-groups/nextjs.d.ts +3 -0
- package/dist/register-tool-groups/nextjs.d.ts.map +1 -0
- package/dist/register-tool-groups/nextjs.js +78 -0
- package/dist/register-tool-groups/nextjs.js.map +1 -0
- package/dist/register-tool-groups/php.d.ts +3 -0
- package/dist/register-tool-groups/php.d.ts.map +1 -0
- package/dist/register-tool-groups/php.js +312 -0
- package/dist/register-tool-groups/php.js.map +1 -0
- package/dist/register-tool-groups/python.d.ts +3 -0
- package/dist/register-tool-groups/python.d.ts.map +1 -0
- package/dist/register-tool-groups/python.js +366 -0
- package/dist/register-tool-groups/python.js.map +1 -0
- package/dist/register-tool-groups/react.d.ts +3 -0
- package/dist/register-tool-groups/react.d.ts.map +1 -0
- package/dist/register-tool-groups/react.js +119 -0
- package/dist/register-tool-groups/react.js.map +1 -0
- package/dist/register-tool-groups/shared.d.ts +156 -0
- package/dist/register-tool-groups/shared.d.ts.map +1 -0
- package/dist/register-tool-groups/shared.js +182 -0
- package/dist/register-tool-groups/shared.js.map +1 -0
- package/dist/register-tool-groups/sql.d.ts +3 -0
- package/dist/register-tool-groups/sql.d.ts.map +1 -0
- package/dist/register-tool-groups/sql.js +260 -0
- package/dist/register-tool-groups/sql.js.map +1 -0
- package/dist/register-tool-loaders.d.ts +22 -22
- package/dist/register-tool-loaders.d.ts.map +1 -1
- package/dist/register-tools/autoload.d.ts +8 -0
- package/dist/register-tools/autoload.d.ts.map +1 -0
- package/dist/register-tools/autoload.js +517 -0
- package/dist/register-tools/autoload.js.map +1 -0
- package/dist/register-tools/discovery.d.ts +55 -0
- package/dist/register-tools/discovery.d.ts.map +1 -0
- package/dist/register-tools/discovery.js +206 -0
- package/dist/register-tools/discovery.js.map +1 -0
- package/dist/register-tools/runtime.d.ts +89 -0
- package/dist/register-tools/runtime.d.ts.map +1 -0
- package/dist/register-tools/runtime.js +491 -0
- package/dist/register-tools/runtime.js.map +1 -0
- package/dist/register-tools.d.ts +5 -172
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +27 -4878
- package/dist/register-tools.js.map +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/bm25.js.map +1 -1
- package/dist/search/tool-embedding-cache.d.ts +4 -0
- package/dist/search/tool-embedding-cache.d.ts.map +1 -0
- package/dist/search/tool-embedding-cache.js +44 -0
- package/dist/search/tool-embedding-cache.js.map +1 -0
- package/dist/search/tool-embedding-storage.d.ts +8 -0
- package/dist/search/tool-embedding-storage.d.ts.map +1 -0
- package/dist/search/tool-embedding-storage.js +56 -0
- package/dist/search/tool-embedding-storage.js.map +1 -0
- package/dist/search/tool-ranker-bm25.d.ts +6 -0
- package/dist/search/tool-ranker-bm25.d.ts.map +1 -0
- package/dist/search/tool-ranker-bm25.js +40 -0
- package/dist/search/tool-ranker-bm25.js.map +1 -0
- package/dist/search/tool-ranker-orchestrator.d.ts +3 -0
- package/dist/search/tool-ranker-orchestrator.d.ts.map +1 -0
- package/dist/search/tool-ranker-orchestrator.js +49 -0
- package/dist/search/tool-ranker-orchestrator.js.map +1 -0
- package/dist/search/tool-ranker-reasoning.d.ts +4 -0
- package/dist/search/tool-ranker-reasoning.d.ts.map +1 -0
- package/dist/search/tool-ranker-reasoning.js +35 -0
- package/dist/search/tool-ranker-reasoning.js.map +1 -0
- package/dist/search/tool-ranker-signal-math.d.ts +6 -0
- package/dist/search/tool-ranker-signal-math.d.ts.map +1 -0
- package/dist/search/tool-ranker-signal-math.js +51 -0
- package/dist/search/tool-ranker-signal-math.js.map +1 -0
- package/dist/search/tool-ranker-signals.d.ts +20 -0
- package/dist/search/tool-ranker-signals.d.ts.map +1 -0
- package/dist/search/tool-ranker-signals.js +50 -0
- package/dist/search/tool-ranker-signals.js.map +1 -0
- package/dist/search/tool-ranker-types.d.ts +26 -0
- package/dist/search/tool-ranker-types.d.ts.map +1 -0
- package/dist/search/tool-ranker-types.js +2 -0
- package/dist/search/tool-ranker-types.js.map +1 -0
- package/dist/search/tool-ranker.d.ts +6 -89
- package/dist/search/tool-ranker.d.ts.map +1 -1
- package/dist/search/tool-ranker.js +5 -419
- package/dist/search/tool-ranker.js.map +1 -1
- package/dist/server-helpers/repo-resolution.d.ts +45 -0
- package/dist/server-helpers/repo-resolution.d.ts.map +1 -0
- package/dist/server-helpers/repo-resolution.js +113 -0
- package/dist/server-helpers/repo-resolution.js.map +1 -0
- package/dist/server-helpers/response-hints.d.ts +9 -0
- package/dist/server-helpers/response-hints.d.ts.map +1 -0
- package/dist/server-helpers/response-hints.js +225 -0
- package/dist/server-helpers/response-hints.js.map +1 -0
- package/dist/server-helpers.d.ts +14 -35
- package/dist/server-helpers.d.ts.map +1 -1
- package/dist/server-helpers.js +53 -320
- package/dist/server-helpers.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +39 -0
- package/dist/server.js.map +1 -1
- package/dist/storage/usage-tracker.d.ts.map +1 -1
- package/dist/storage/usage-tracker.js +12 -0
- package/dist/storage/usage-tracker.js.map +1 -1
- package/dist/tools/astro-actions/ast.d.ts +14 -0
- package/dist/tools/astro-actions/ast.d.ts.map +1 -0
- package/dist/tools/astro-actions/ast.js +75 -0
- package/dist/tools/astro-actions/ast.js.map +1 -0
- package/dist/tools/astro-actions/audit.d.ts +5 -0
- package/dist/tools/astro-actions/audit.d.ts.map +1 -0
- package/dist/tools/astro-actions/audit.js +102 -0
- package/dist/tools/astro-actions/audit.js.map +1 -0
- package/dist/tools/astro-actions/callers.d.ts +9 -0
- package/dist/tools/astro-actions/callers.d.ts.map +1 -0
- package/dist/tools/astro-actions/callers.js +84 -0
- package/dist/tools/astro-actions/callers.js.map +1 -0
- package/dist/tools/astro-actions/parser.d.ts +3 -0
- package/dist/tools/astro-actions/parser.d.ts.map +1 -0
- package/dist/tools/astro-actions/parser.js +156 -0
- package/dist/tools/astro-actions/parser.js.map +1 -0
- package/dist/tools/astro-actions/types.d.ts +58 -0
- package/dist/tools/astro-actions/types.d.ts.map +1 -0
- package/dist/tools/astro-actions/types.js +2 -0
- package/dist/tools/astro-actions/types.js.map +1 -0
- package/dist/tools/astro-actions/zod-ast.d.ts +7 -0
- package/dist/tools/astro-actions/zod-ast.d.ts.map +1 -0
- package/dist/tools/astro-actions/zod-ast.js +51 -0
- package/dist/tools/astro-actions/zod-ast.js.map +1 -0
- package/dist/tools/astro-actions.d.ts +6 -46
- package/dist/tools/astro-actions.d.ts.map +1 -1
- package/dist/tools/astro-actions.js +6 -545
- package/dist/tools/astro-actions.js.map +1 -1
- package/dist/tools/astro-content-collections/diagnostics.d.ts +3 -0
- package/dist/tools/astro-content-collections/diagnostics.d.ts.map +1 -0
- package/dist/tools/astro-content-collections/diagnostics.js +277 -0
- package/dist/tools/astro-content-collections/diagnostics.js.map +1 -0
- package/dist/tools/astro-content-collections/discovery.d.ts +6 -0
- package/dist/tools/astro-content-collections/discovery.d.ts.map +1 -0
- package/dist/tools/astro-content-collections/discovery.js +152 -0
- package/dist/tools/astro-content-collections/discovery.js.map +1 -0
- package/dist/tools/astro-content-collections/schema.d.ts +15 -0
- package/dist/tools/astro-content-collections/schema.d.ts.map +1 -0
- package/dist/tools/astro-content-collections/schema.js +119 -0
- package/dist/tools/astro-content-collections/schema.js.map +1 -0
- package/dist/tools/astro-content-collections/types.d.ts +61 -0
- package/dist/tools/astro-content-collections/types.d.ts.map +1 -0
- package/dist/tools/astro-content-collections/types.js +2 -0
- package/dist/tools/astro-content-collections/types.js.map +1 -0
- package/dist/tools/astro-content-collections.d.ts +5 -40
- package/dist/tools/astro-content-collections.d.ts.map +1 -1
- package/dist/tools/astro-content-collections.js +42 -449
- package/dist/tools/astro-content-collections.js.map +1 -1
- package/dist/tools/astro-routes.js +1 -1
- package/dist/tools/astro-routes.js.map +1 -1
- package/dist/tools/complexity-tools.d.ts +6 -0
- package/dist/tools/complexity-tools.d.ts.map +1 -1
- package/dist/tools/complexity-tools.js +26 -0
- package/dist/tools/complexity-tools.js.map +1 -1
- package/dist/tools/context-levels/l0.d.ts +4 -0
- package/dist/tools/context-levels/l0.d.ts.map +1 -0
- package/dist/tools/context-levels/l0.js +17 -0
- package/dist/tools/context-levels/l0.js.map +1 -0
- package/dist/tools/context-levels/l1.d.ts +4 -0
- package/dist/tools/context-levels/l1.d.ts.map +1 -0
- package/dist/tools/context-levels/l1.js +26 -0
- package/dist/tools/context-levels/l1.js.map +1 -0
- package/dist/tools/context-levels/l2.d.ts +4 -0
- package/dist/tools/context-levels/l2.d.ts.map +1 -0
- package/dist/tools/context-levels/l2.js +36 -0
- package/dist/tools/context-levels/l2.js.map +1 -0
- package/dist/tools/context-levels/l3.d.ts +4 -0
- package/dist/tools/context-levels/l3.d.ts.map +1 -0
- package/dist/tools/context-levels/l3.js +30 -0
- package/dist/tools/context-levels/l3.js.map +1 -0
- package/dist/tools/context-levels/shared.d.ts +2 -0
- package/dist/tools/context-levels/shared.d.ts.map +1 -0
- package/dist/tools/context-levels/shared.js +4 -0
- package/dist/tools/context-levels/shared.js.map +1 -0
- package/dist/tools/context-levels/types.d.ts +34 -0
- package/dist/tools/context-levels/types.d.ts.map +1 -0
- package/dist/tools/context-levels/types.js +2 -0
- package/dist/tools/context-levels/types.js.map +1 -0
- package/dist/tools/context-tools.d.ts +2 -34
- package/dist/tools/context-tools.d.ts.map +1 -1
- package/dist/tools/context-tools.js +11 -127
- package/dist/tools/context-tools.js.map +1 -1
- package/dist/tools/conversation-cache.d.ts +6 -0
- package/dist/tools/conversation-cache.d.ts.map +1 -0
- package/dist/tools/conversation-cache.js +29 -0
- package/dist/tools/conversation-cache.js.map +1 -0
- package/dist/tools/conversation-index-tools.d.ts +39 -0
- package/dist/tools/conversation-index-tools.d.ts.map +1 -0
- package/dist/tools/conversation-index-tools.js +136 -0
- package/dist/tools/conversation-index-tools.js.map +1 -0
- package/dist/tools/conversation-paths.d.ts +4 -0
- package/dist/tools/conversation-paths.d.ts.map +1 -0
- package/dist/tools/conversation-paths.js +15 -0
- package/dist/tools/conversation-paths.js.map +1 -0
- package/dist/tools/conversation-search-tools.d.ts +52 -0
- package/dist/tools/conversation-search-tools.d.ts.map +1 -0
- package/dist/tools/conversation-search-tools.js +229 -0
- package/dist/tools/conversation-search-tools.js.map +1 -0
- package/dist/tools/conversation-tools.d.ts +6 -112
- package/dist/tools/conversation-tools.d.ts.map +1 -1
- package/dist/tools/conversation-tools.js +4 -425
- package/dist/tools/conversation-tools.js.map +1 -1
- package/dist/tools/cross-repo-outbound-lexer/call-detectors.d.ts +5 -0
- package/dist/tools/cross-repo-outbound-lexer/call-detectors.d.ts.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/call-detectors.js +76 -0
- package/dist/tools/cross-repo-outbound-lexer/call-detectors.js.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/context.d.ts +18 -0
- package/dist/tools/cross-repo-outbound-lexer/context.d.ts.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/context.js +33 -0
- package/dist/tools/cross-repo-outbound-lexer/context.js.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/literal-readers.d.ts +6 -0
- package/dist/tools/cross-repo-outbound-lexer/literal-readers.d.ts.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/literal-readers.js +65 -0
- package/dist/tools/cross-repo-outbound-lexer/literal-readers.js.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/non-code-states.d.ts +3 -0
- package/dist/tools/cross-repo-outbound-lexer/non-code-states.d.ts.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/non-code-states.js +103 -0
- package/dist/tools/cross-repo-outbound-lexer/non-code-states.js.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/template-reader.d.ts +3 -0
- package/dist/tools/cross-repo-outbound-lexer/template-reader.d.ts.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/template-reader.js +82 -0
- package/dist/tools/cross-repo-outbound-lexer/template-reader.js.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/types.d.ts +18 -0
- package/dist/tools/cross-repo-outbound-lexer/types.d.ts.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/types.js +2 -0
- package/dist/tools/cross-repo-outbound-lexer/types.js.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer.d.ts +5 -31
- package/dist/tools/cross-repo-outbound-lexer.d.ts.map +1 -1
- package/dist/tools/cross-repo-outbound-lexer.js +75 -575
- package/dist/tools/cross-repo-outbound-lexer.js.map +1 -1
- package/dist/tools/dependency-audit-freshness-tools.d.ts +3 -0
- package/dist/tools/dependency-audit-freshness-tools.d.ts.map +1 -0
- package/dist/tools/dependency-audit-freshness-tools.js +62 -0
- package/dist/tools/dependency-audit-freshness-tools.js.map +1 -0
- package/dist/tools/dependency-audit-license-tools.d.ts +5 -0
- package/dist/tools/dependency-audit-license-tools.d.ts.map +1 -0
- package/dist/tools/dependency-audit-license-tools.js +75 -0
- package/dist/tools/dependency-audit-license-tools.js.map +1 -0
- package/dist/tools/dependency-audit-lockfile-tools.d.ts +3 -0
- package/dist/tools/dependency-audit-lockfile-tools.d.ts.map +1 -0
- package/dist/tools/dependency-audit-lockfile-tools.js +147 -0
- package/dist/tools/dependency-audit-lockfile-tools.js.map +1 -0
- package/dist/tools/dependency-audit-tools.d.ts +2 -54
- package/dist/tools/dependency-audit-tools.d.ts.map +1 -1
- package/dist/tools/dependency-audit-tools.js +69 -484
- package/dist/tools/dependency-audit-tools.js.map +1 -1
- package/dist/tools/dependency-audit-types.d.ts +65 -0
- package/dist/tools/dependency-audit-types.d.ts.map +1 -0
- package/dist/tools/dependency-audit-types.js +19 -0
- package/dist/tools/dependency-audit-types.js.map +1 -0
- package/dist/tools/dependency-audit-vulnerability-tools.d.ts +4 -0
- package/dist/tools/dependency-audit-vulnerability-tools.d.ts.map +1 -0
- package/dist/tools/dependency-audit-vulnerability-tools.js +103 -0
- package/dist/tools/dependency-audit-vulnerability-tools.js.map +1 -0
- package/dist/tools/diff-tools.d.ts.map +1 -1
- package/dist/tools/diff-tools.js +5 -7
- package/dist/tools/diff-tools.js.map +1 -1
- package/dist/tools/impact-tools.d.ts.map +1 -1
- package/dist/tools/impact-tools.js +5 -4
- package/dist/tools/impact-tools.js.map +1 -1
- package/dist/tools/index-shared.d.ts +17 -0
- package/dist/tools/index-shared.d.ts.map +1 -0
- package/dist/tools/index-shared.js +18 -0
- package/dist/tools/index-shared.js.map +1 -0
- package/dist/tools/index-tools/file-indexer.d.ts +27 -0
- package/dist/tools/index-tools/file-indexer.d.ts.map +1 -0
- package/dist/tools/index-tools/file-indexer.js +223 -0
- package/dist/tools/index-tools/file-indexer.js.map +1 -0
- package/dist/tools/index-tools/folder-indexer.d.ts +21 -0
- package/dist/tools/index-tools/folder-indexer.d.ts.map +1 -0
- package/dist/tools/index-tools/folder-indexer.js +399 -0
- package/dist/tools/index-tools/folder-indexer.js.map +1 -0
- package/dist/tools/index-tools/folder-merge.d.ts +23 -0
- package/dist/tools/index-tools/folder-merge.d.ts.map +1 -0
- package/dist/tools/index-tools/folder-merge.js +205 -0
- package/dist/tools/index-tools/folder-merge.js.map +1 -0
- package/dist/tools/index-tools/parse.d.ts +35 -0
- package/dist/tools/index-tools/parse.d.ts.map +1 -0
- package/dist/tools/index-tools/parse.js +262 -0
- package/dist/tools/index-tools/parse.js.map +1 -0
- package/dist/tools/index-tools/registry.d.ts +40 -0
- package/dist/tools/index-tools/registry.d.ts.map +1 -0
- package/dist/tools/index-tools/registry.js +258 -0
- package/dist/tools/index-tools/registry.js.map +1 -0
- package/dist/tools/index-tools/snapshots.d.ts +51 -0
- package/dist/tools/index-tools/snapshots.d.ts.map +1 -0
- package/dist/tools/index-tools/snapshots.js +223 -0
- package/dist/tools/index-tools/snapshots.js.map +1 -0
- package/dist/tools/index-tools/state.d.ts +8 -0
- package/dist/tools/index-tools/state.d.ts.map +1 -0
- package/dist/tools/index-tools/state.js +6 -0
- package/dist/tools/index-tools/state.js.map +1 -0
- package/dist/tools/index-tools/types.d.ts +20 -0
- package/dist/tools/index-tools/types.d.ts.map +1 -0
- package/dist/tools/index-tools/types.js +2 -0
- package/dist/tools/index-tools/types.js.map +1 -0
- package/dist/tools/index-tools/watcher.d.ts +10 -0
- package/dist/tools/index-tools/watcher.d.ts.map +1 -0
- package/dist/tools/index-tools/watcher.js +130 -0
- package/dist/tools/index-tools/watcher.js.map +1 -0
- package/dist/tools/index-tools.d.ts +16 -152
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +12 -1674
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/kotlin-extension-tools.d.ts +16 -0
- package/dist/tools/kotlin-extension-tools.d.ts.map +1 -0
- package/dist/tools/kotlin-extension-tools.js +31 -0
- package/dist/tools/kotlin-extension-tools.js.map +1 -0
- package/dist/tools/kotlin-flow-tools.d.ts +12 -0
- package/dist/tools/kotlin-flow-tools.d.ts.map +1 -0
- package/dist/tools/kotlin-flow-tools.js +72 -0
- package/dist/tools/kotlin-flow-tools.js.map +1 -0
- package/dist/tools/kotlin-kmp-tools.d.ts +29 -0
- package/dist/tools/kotlin-kmp-tools.d.ts.map +1 -0
- package/dist/tools/kotlin-kmp-tools.js +87 -0
- package/dist/tools/kotlin-kmp-tools.js.map +1 -0
- package/dist/tools/kotlin-sealed-tools.d.ts +27 -0
- package/dist/tools/kotlin-sealed-tools.d.ts.map +1 -0
- package/dist/tools/kotlin-sealed-tools.js +130 -0
- package/dist/tools/kotlin-sealed-tools.js.map +1 -0
- package/dist/tools/kotlin-suspend-tools.d.ts +24 -0
- package/dist/tools/kotlin-suspend-tools.d.ts.map +1 -0
- package/dist/tools/kotlin-suspend-tools.js +161 -0
- package/dist/tools/kotlin-suspend-tools.js.map +1 -0
- package/dist/tools/kotlin-tools.d.ts +6 -141
- package/dist/tools/kotlin-tools.d.ts.map +1 -1
- package/dist/tools/kotlin-tools.js +6 -571
- package/dist/tools/kotlin-tools.js.map +1 -1
- package/dist/tools/nest-audit-tools.d.ts +43 -0
- package/dist/tools/nest-audit-tools.d.ts.map +1 -0
- package/dist/tools/nest-audit-tools.js +232 -0
- package/dist/tools/nest-audit-tools.js.map +1 -0
- package/dist/tools/nest-di-tools.d.ts +32 -0
- package/dist/tools/nest-di-tools.d.ts.map +1 -0
- package/dist/tools/nest-di-tools.js +161 -0
- package/dist/tools/nest-di-tools.js.map +1 -0
- package/dist/tools/nest-guard-tools.d.ts +34 -0
- package/dist/tools/nest-guard-tools.d.ts.map +1 -0
- package/dist/tools/nest-guard-tools.js +240 -0
- package/dist/tools/nest-guard-tools.js.map +1 -0
- package/dist/tools/nest-lifecycle-tools.d.ts +16 -0
- package/dist/tools/nest-lifecycle-tools.d.ts.map +1 -0
- package/dist/tools/nest-lifecycle-tools.js +54 -0
- package/dist/tools/nest-lifecycle-tools.js.map +1 -0
- package/dist/tools/nest-module-tools.d.ts +28 -0
- package/dist/tools/nest-module-tools.d.ts.map +1 -0
- package/dist/tools/nest-module-tools.js +86 -0
- package/dist/tools/nest-module-tools.js.map +1 -0
- package/dist/tools/nest-pipeline-tools.d.ts +32 -0
- package/dist/tools/nest-pipeline-tools.d.ts.map +1 -0
- package/dist/tools/nest-pipeline-tools.js +122 -0
- package/dist/tools/nest-pipeline-tools.js.map +1 -0
- package/dist/tools/nest-route-tools.d.ts +43 -0
- package/dist/tools/nest-route-tools.d.ts.map +1 -0
- package/dist/tools/nest-route-tools.js +261 -0
- package/dist/tools/nest-route-tools.js.map +1 -0
- package/dist/tools/nest-shared-tools.d.ts +13 -0
- package/dist/tools/nest-shared-tools.d.ts.map +1 -0
- package/dist/tools/nest-shared-tools.js +36 -0
- package/dist/tools/nest-shared-tools.js.map +1 -0
- package/dist/tools/nest-tools.d.ts +18 -195
- package/dist/tools/nest-tools.d.ts.map +1 -1
- package/dist/tools/nest-tools.js +11 -1140
- package/dist/tools/nest-tools.js.map +1 -1
- package/dist/tools/pattern-registry.d.ts +4 -0
- package/dist/tools/pattern-registry.d.ts.map +1 -0
- package/dist/tools/pattern-registry.js +3 -0
- package/dist/tools/pattern-registry.js.map +1 -0
- package/dist/tools/pattern-tools.d.ts +5 -46
- package/dist/tools/pattern-tools.d.ts.map +1 -1
- package/dist/tools/pattern-tools.js +4 -1102
- package/dist/tools/pattern-tools.js.map +1 -1
- package/dist/tools/patterns/adapters/astro.d.ts +3 -0
- package/dist/tools/patterns/adapters/astro.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/astro.js +56 -0
- package/dist/tools/patterns/adapters/astro.js.map +1 -0
- package/dist/tools/patterns/adapters/common.d.ts +3 -0
- package/dist/tools/patterns/adapters/common.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/common.js +38 -0
- package/dist/tools/patterns/adapters/common.js.map +1 -0
- package/dist/tools/patterns/adapters/database.d.ts +3 -0
- package/dist/tools/patterns/adapters/database.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/database.js +32 -0
- package/dist/tools/patterns/adapters/database.js.map +1 -0
- package/dist/tools/patterns/adapters/hono.d.ts +3 -0
- package/dist/tools/patterns/adapters/hono.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/hono.js +32 -0
- package/dist/tools/patterns/adapters/hono.js.map +1 -0
- package/dist/tools/patterns/adapters/kotlin.d.ts +3 -0
- package/dist/tools/patterns/adapters/kotlin.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/kotlin.js +50 -0
- package/dist/tools/patterns/adapters/kotlin.js.map +1 -0
- package/dist/tools/patterns/adapters/nest.d.ts +3 -0
- package/dist/tools/patterns/adapters/nest.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/nest.js +122 -0
- package/dist/tools/patterns/adapters/nest.js.map +1 -0
- package/dist/tools/patterns/adapters/nextjs.d.ts +4 -0
- package/dist/tools/patterns/adapters/nextjs.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/nextjs.js +59 -0
- package/dist/tools/patterns/adapters/nextjs.js.map +1 -0
- package/dist/tools/patterns/adapters/php.d.ts +3 -0
- package/dist/tools/patterns/adapters/php.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/php.js +157 -0
- package/dist/tools/patterns/adapters/php.js.map +1 -0
- package/dist/tools/patterns/adapters/python.d.ts +3 -0
- package/dist/tools/patterns/adapters/python.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/python.js +72 -0
- package/dist/tools/patterns/adapters/python.js.map +1 -0
- package/dist/tools/patterns/adapters/react.d.ts +4 -0
- package/dist/tools/patterns/adapters/react.d.ts.map +1 -0
- package/dist/tools/patterns/adapters/react.js +345 -0
- package/dist/tools/patterns/adapters/react.js.map +1 -0
- package/dist/tools/patterns/catalog.d.ts +8 -0
- package/dist/tools/patterns/catalog.d.ts.map +1 -0
- package/dist/tools/patterns/catalog.js +30 -0
- package/dist/tools/patterns/catalog.js.map +1 -0
- package/dist/tools/patterns/execution.d.ts +38 -0
- package/dist/tools/patterns/execution.d.ts.map +1 -0
- package/dist/tools/patterns/execution.js +298 -0
- package/dist/tools/patterns/execution.js.map +1 -0
- package/dist/tools/patterns/types.d.ts +13 -0
- package/dist/tools/patterns/types.d.ts.map +1 -0
- package/dist/tools/patterns/types.js +2 -0
- package/dist/tools/patterns/types.js.map +1 -0
- package/dist/tools/pg-drift-compare.d.ts +3 -0
- package/dist/tools/pg-drift-compare.d.ts.map +1 -0
- package/dist/tools/pg-drift-compare.js +30 -0
- package/dist/tools/pg-drift-compare.js.map +1 -0
- package/dist/tools/pg-drift-schema.d.ts +5 -0
- package/dist/tools/pg-drift-schema.d.ts.map +1 -0
- package/dist/tools/pg-drift-schema.js +28 -0
- package/dist/tools/pg-drift-schema.js.map +1 -0
- package/dist/tools/pg-drift-types.d.ts +25 -0
- package/dist/tools/pg-drift-types.d.ts.map +1 -0
- package/dist/tools/pg-drift-types.js +2 -0
- package/dist/tools/pg-drift-types.js.map +1 -0
- package/dist/tools/pg-drift.d.ts +5 -0
- package/dist/tools/pg-drift.d.ts.map +1 -0
- package/dist/tools/pg-drift.js +30 -0
- package/dist/tools/pg-drift.js.map +1 -0
- package/dist/tools/pg-introspect-formatters.d.ts +7 -0
- package/dist/tools/pg-introspect-formatters.d.ts.map +1 -0
- package/dist/tools/pg-introspect-formatters.js +66 -0
- package/dist/tools/pg-introspect-formatters.js.map +1 -0
- package/dist/tools/pg-introspect-tools.d.ts +5 -146
- package/dist/tools/pg-introspect-tools.d.ts.map +1 -1
- package/dist/tools/pg-introspect-tools.js +3 -395
- package/dist/tools/pg-introspect-tools.js.map +1 -1
- package/dist/tools/pg-introspection.d.ts +90 -0
- package/dist/tools/pg-introspection.d.ts.map +1 -0
- package/dist/tools/pg-introspection.js +288 -0
- package/dist/tools/pg-introspection.js.map +1 -0
- package/dist/tools/php-active-record-tools.d.ts +22 -0
- package/dist/tools/php-active-record-tools.d.ts.map +1 -0
- package/dist/tools/php-active-record-tools.js +165 -0
- package/dist/tools/php-active-record-tools.js.map +1 -0
- package/dist/tools/php-event-tools.d.ts +21 -0
- package/dist/tools/php-event-tools.d.ts.map +1 -0
- package/dist/tools/php-event-tools.js +205 -0
- package/dist/tools/php-event-tools.js.map +1 -0
- package/dist/tools/php-god-model-tools.d.ts +34 -0
- package/dist/tools/php-god-model-tools.d.ts.map +1 -0
- package/dist/tools/php-god-model-tools.js +88 -0
- package/dist/tools/php-god-model-tools.js.map +1 -0
- package/dist/tools/php-import-utils.d.ts +10 -0
- package/dist/tools/php-import-utils.d.ts.map +1 -0
- package/dist/tools/php-import-utils.js +71 -0
- package/dist/tools/php-import-utils.js.map +1 -0
- package/dist/tools/php-namespace-tools.d.ts +10 -0
- package/dist/tools/php-namespace-tools.d.ts.map +1 -0
- package/dist/tools/php-namespace-tools.js +98 -0
- package/dist/tools/php-namespace-tools.js.map +1 -0
- package/dist/tools/php-nplus1-tools.d.ts +27 -0
- package/dist/tools/php-nplus1-tools.d.ts.map +1 -0
- package/dist/tools/php-nplus1-tools.js +191 -0
- package/dist/tools/php-nplus1-tools.js.map +1 -0
- package/dist/tools/php-project-audit-tools.d.ts +31 -0
- package/dist/tools/php-project-audit-tools.d.ts.map +1 -0
- package/dist/tools/php-project-audit-tools.js +173 -0
- package/dist/tools/php-project-audit-tools.js.map +1 -0
- package/dist/tools/php-security-tools.d.ts +24 -0
- package/dist/tools/php-security-tools.d.ts.map +1 -0
- package/dist/tools/php-security-tools.js +172 -0
- package/dist/tools/php-security-tools.js.map +1 -0
- package/dist/tools/php-service-tools.d.ts +25 -0
- package/dist/tools/php-service-tools.d.ts.map +1 -0
- package/dist/tools/php-service-tools.js +326 -0
- package/dist/tools/php-service-tools.js.map +1 -0
- package/dist/tools/php-tools.d.ts +21 -255
- package/dist/tools/php-tools.d.ts.map +1 -1
- package/dist/tools/php-tools.js +12 -1423
- package/dist/tools/php-tools.js.map +1 -1
- package/dist/tools/php-view-tools.d.ts +76 -0
- package/dist/tools/php-view-tools.d.ts.map +1 -0
- package/dist/tools/php-view-tools.js +413 -0
- package/dist/tools/php-view-tools.js.map +1 -0
- package/dist/tools/plan-turn/formatter.d.ts +3 -0
- package/dist/tools/plan-turn/formatter.d.ts.map +1 -0
- package/dist/tools/plan-turn/formatter.js +88 -0
- package/dist/tools/plan-turn/formatter.js.map +1 -0
- package/dist/tools/plan-turn/framework-context.d.ts +5 -0
- package/dist/tools/plan-turn/framework-context.d.ts.map +1 -0
- package/dist/tools/plan-turn/framework-context.js +68 -0
- package/dist/tools/plan-turn/framework-context.js.map +1 -0
- package/dist/tools/plan-turn/framework-data.d.ts +5 -0
- package/dist/tools/plan-turn/framework-data.d.ts.map +1 -0
- package/dist/tools/plan-turn/framework-data.js +48 -0
- package/dist/tools/plan-turn/framework-data.js.map +1 -0
- package/dist/tools/plan-turn/orchestrator.d.ts +4 -0
- package/dist/tools/plan-turn/orchestrator.d.ts.map +1 -0
- package/dist/tools/plan-turn/orchestrator.js +262 -0
- package/dist/tools/plan-turn/orchestrator.js.map +1 -0
- package/dist/tools/plan-turn/query-parser.d.ts +6 -0
- package/dist/tools/plan-turn/query-parser.d.ts.map +1 -0
- package/dist/tools/plan-turn/query-parser.js +60 -0
- package/dist/tools/plan-turn/query-parser.js.map +1 -0
- package/dist/tools/plan-turn/recommendations.d.ts +11 -0
- package/dist/tools/plan-turn/recommendations.d.ts.map +1 -0
- package/dist/tools/plan-turn/recommendations.js +93 -0
- package/dist/tools/plan-turn/recommendations.js.map +1 -0
- package/dist/tools/plan-turn/stale-index.d.ts +4 -0
- package/dist/tools/plan-turn/stale-index.d.ts.map +1 -0
- package/dist/tools/plan-turn/stale-index.js +17 -0
- package/dist/tools/plan-turn/stale-index.js.map +1 -0
- package/dist/tools/plan-turn/types.d.ts +61 -0
- package/dist/tools/plan-turn/types.d.ts.map +1 -0
- package/dist/tools/plan-turn/types.js +2 -0
- package/dist/tools/plan-turn/types.js.map +1 -0
- package/dist/tools/plan-turn-tools.d.ts +8 -111
- package/dist/tools/plan-turn-tools.d.ts.map +1 -1
- package/dist/tools/plan-turn-tools.js +6 -696
- package/dist/tools/plan-turn-tools.js.map +1 -1
- package/dist/tools/project-profile-express.d.ts +3 -0
- package/dist/tools/project-profile-express.d.ts.map +1 -0
- package/dist/tools/project-profile-express.js +46 -0
- package/dist/tools/project-profile-express.js.map +1 -0
- package/dist/tools/project-profile-extractors.d.ts +9 -0
- package/dist/tools/project-profile-extractors.d.ts.map +1 -0
- package/dist/tools/project-profile-extractors.js +312 -0
- package/dist/tools/project-profile-extractors.js.map +1 -0
- package/dist/tools/project-profile-fs.d.ts +3 -0
- package/dist/tools/project-profile-fs.d.ts.map +1 -0
- package/dist/tools/project-profile-fs.js +19 -0
- package/dist/tools/project-profile-fs.js.map +1 -0
- package/dist/tools/project-profile-hono.d.ts +13 -0
- package/dist/tools/project-profile-hono.d.ts.map +1 -0
- package/dist/tools/project-profile-hono.js +110 -0
- package/dist/tools/project-profile-hono.js.map +1 -0
- package/dist/tools/project-profile-imports.d.ts +6 -0
- package/dist/tools/project-profile-imports.d.ts.map +1 -0
- package/dist/tools/project-profile-imports.js +95 -0
- package/dist/tools/project-profile-imports.js.map +1 -0
- package/dist/tools/project-profile-nest.d.ts +8 -0
- package/dist/tools/project-profile-nest.d.ts.map +1 -0
- package/dist/tools/project-profile-nest.js +352 -0
- package/dist/tools/project-profile-nest.js.map +1 -0
- package/dist/tools/project-profile-next.d.ts +5 -0
- package/dist/tools/project-profile-next.d.ts.map +1 -0
- package/dist/tools/project-profile-next.js +92 -0
- package/dist/tools/project-profile-next.js.map +1 -0
- package/dist/tools/project-profile-persistence.d.ts +3 -0
- package/dist/tools/project-profile-persistence.d.ts.map +1 -0
- package/dist/tools/project-profile-persistence.js +19 -0
- package/dist/tools/project-profile-persistence.js.map +1 -0
- package/dist/tools/project-profile-php.d.ts +8 -0
- package/dist/tools/project-profile-php.d.ts.map +1 -0
- package/dist/tools/project-profile-php.js +76 -0
- package/dist/tools/project-profile-php.js.map +1 -0
- package/dist/tools/project-profile-python.d.ts +5 -0
- package/dist/tools/project-profile-python.d.ts.map +1 -0
- package/dist/tools/project-profile-python.js +51 -0
- package/dist/tools/project-profile-python.js.map +1 -0
- package/dist/tools/project-profile-react.d.ts +6 -0
- package/dist/tools/project-profile-react.d.ts.map +1 -0
- package/dist/tools/project-profile-react.js +106 -0
- package/dist/tools/project-profile-react.js.map +1 -0
- package/dist/tools/project-profile-stack.d.ts +3 -0
- package/dist/tools/project-profile-stack.d.ts.map +1 -0
- package/dist/tools/project-profile-stack.js +354 -0
- package/dist/tools/project-profile-stack.js.map +1 -0
- package/dist/tools/project-profile-summary.d.ts +30 -0
- package/dist/tools/project-profile-summary.d.ts.map +1 -0
- package/dist/tools/project-profile-summary.js +112 -0
- package/dist/tools/project-profile-summary.js.map +1 -0
- package/dist/tools/project-profile-types.d.ts +315 -0
- package/dist/tools/project-profile-types.d.ts.map +1 -0
- package/dist/tools/project-profile-types.js +2 -0
- package/dist/tools/project-profile-types.js.map +1 -0
- package/dist/tools/project-tools.d.ts +17 -383
- package/dist/tools/project-tools.d.ts.map +1 -1
- package/dist/tools/project-tools.js +35 -1621
- package/dist/tools/project-tools.js.map +1 -1
- package/dist/tools/python-audit/aggregate.d.ts +3 -0
- package/dist/tools/python-audit/aggregate.d.ts.map +1 -0
- package/dist/tools/python-audit/aggregate.js +103 -0
- package/dist/tools/python-audit/aggregate.js.map +1 -0
- package/dist/tools/python-audit/checks/anti-patterns.d.ts +6 -0
- package/dist/tools/python-audit/checks/anti-patterns.d.ts.map +1 -0
- package/dist/tools/python-audit/checks/anti-patterns.js +14 -0
- package/dist/tools/python-audit/checks/anti-patterns.js.map +1 -0
- package/dist/tools/python-audit/checks/celery.d.ts +2 -0
- package/dist/tools/python-audit/checks/celery.d.ts.map +1 -0
- package/dist/tools/python-audit/checks/celery.js +5 -0
- package/dist/tools/python-audit/checks/celery.js.map +1 -0
- package/dist/tools/python-audit/checks/circular-imports.d.ts +2 -0
- package/dist/tools/python-audit/checks/circular-imports.d.ts.map +1 -0
- package/dist/tools/python-audit/checks/circular-imports.js +5 -0
- package/dist/tools/python-audit/checks/circular-imports.js.map +1 -0
- package/dist/tools/python-audit/checks/dead-code.d.ts +2 -0
- package/dist/tools/python-audit/checks/dead-code.d.ts.map +1 -0
- package/dist/tools/python-audit/checks/dead-code.js +5 -0
- package/dist/tools/python-audit/checks/dead-code.js.map +1 -0
- package/dist/tools/python-audit/checks/dependencies.d.ts +2 -0
- package/dist/tools/python-audit/checks/dependencies.d.ts.map +1 -0
- package/dist/tools/python-audit/checks/dependencies.js +5 -0
- package/dist/tools/python-audit/checks/dependencies.js.map +1 -0
- package/dist/tools/python-audit/checks/django-settings.d.ts +2 -0
- package/dist/tools/python-audit/checks/django-settings.d.ts.map +1 -0
- package/dist/tools/python-audit/checks/django-settings.js +5 -0
- package/dist/tools/python-audit/checks/django-settings.js.map +1 -0
- package/dist/tools/python-audit/checks/framework-wiring.d.ts +2 -0
- package/dist/tools/python-audit/checks/framework-wiring.d.ts.map +1 -0
- package/dist/tools/python-audit/checks/framework-wiring.js +5 -0
- package/dist/tools/python-audit/checks/framework-wiring.js.map +1 -0
- package/dist/tools/python-audit/checks/pytest-fixtures.d.ts +2 -0
- package/dist/tools/python-audit/checks/pytest-fixtures.d.ts.map +1 -0
- package/dist/tools/python-audit/checks/pytest-fixtures.js +5 -0
- package/dist/tools/python-audit/checks/pytest-fixtures.js.map +1 -0
- package/dist/tools/python-audit/runner.d.ts +5 -0
- package/dist/tools/python-audit/runner.d.ts.map +1 -0
- package/dist/tools/python-audit/runner.js +18 -0
- package/dist/tools/python-audit/runner.js.map +1 -0
- package/dist/tools/python-audit/types.d.ts +43 -0
- package/dist/tools/python-audit/types.d.ts.map +1 -0
- package/dist/tools/python-audit/types.js +2 -0
- package/dist/tools/python-audit/types.js.map +1 -0
- package/dist/tools/python-audit.d.ts +3 -39
- package/dist/tools/python-audit.d.ts.map +1 -1
- package/dist/tools/python-audit.js +34 -233
- package/dist/tools/python-audit.js.map +1 -1
- package/dist/tools/react-compiler-tools.d.ts +37 -0
- package/dist/tools/react-compiler-tools.d.ts.map +1 -0
- package/dist/tools/react-compiler-tools.js +104 -0
- package/dist/tools/react-compiler-tools.js.map +1 -0
- package/dist/tools/react-component-tree-tools.d.ts +58 -0
- package/dist/tools/react-component-tree-tools.d.ts.map +1 -0
- package/dist/tools/react-component-tree-tools.js +292 -0
- package/dist/tools/react-component-tree-tools.js.map +1 -0
- package/dist/tools/react-context-tools.d.ts +41 -0
- package/dist/tools/react-context-tools.d.ts.map +1 -0
- package/dist/tools/react-context-tools.js +76 -0
- package/dist/tools/react-context-tools.js.map +1 -0
- package/dist/tools/react-hooks-tools.d.ts +58 -0
- package/dist/tools/react-hooks-tools.d.ts.map +1 -0
- package/dist/tools/react-hooks-tools.js +144 -0
- package/dist/tools/react-hooks-tools.js.map +1 -0
- package/dist/tools/react-quickstart-tools.d.ts +59 -0
- package/dist/tools/react-quickstart-tools.d.ts.map +1 -0
- package/dist/tools/react-quickstart-tools.js +164 -0
- package/dist/tools/react-quickstart-tools.js.map +1 -0
- package/dist/tools/react-render-tools.d.ts +75 -0
- package/dist/tools/react-render-tools.d.ts.map +1 -0
- package/dist/tools/react-render-tools.js +234 -0
- package/dist/tools/react-render-tools.js.map +1 -0
- package/dist/tools/react-shared-tools.d.ts +5 -0
- package/dist/tools/react-shared-tools.d.ts.map +1 -0
- package/dist/tools/react-shared-tools.js +12 -0
- package/dist/tools/react-shared-tools.js.map +1 -0
- package/dist/tools/react-suspense-tools.d.ts +29 -0
- package/dist/tools/react-suspense-tools.d.ts.map +1 -0
- package/dist/tools/react-suspense-tools.js +269 -0
- package/dist/tools/react-suspense-tools.js.map +1 -0
- package/dist/tools/react-tools.d.ts +19 -340
- package/dist/tools/react-tools.d.ts.map +1 -1
- package/dist/tools/react-tools.js +10 -1263
- package/dist/tools/react-tools.js.map +1 -1
- package/dist/tools/review-diff/check-runner.d.ts +5 -0
- package/dist/tools/review-diff/check-runner.d.ts.map +1 -0
- package/dist/tools/review-diff/check-runner.js +26 -0
- package/dist/tools/review-diff/check-runner.js.map +1 -0
- package/dist/tools/review-diff/checks/astro-hydration.d.ts +8 -0
- package/dist/tools/review-diff/checks/astro-hydration.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/astro-hydration.js +54 -0
- package/dist/tools/review-diff/checks/astro-hydration.js.map +1 -0
- package/dist/tools/review-diff/checks/blast-radius.d.ts +7 -0
- package/dist/tools/review-diff/checks/blast-radius.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/blast-radius.js +39 -0
- package/dist/tools/review-diff/checks/blast-radius.js.map +1 -0
- package/dist/tools/review-diff/checks/breaking.d.ts +13 -0
- package/dist/tools/review-diff/checks/breaking.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/breaking.js +115 -0
- package/dist/tools/review-diff/checks/breaking.js.map +1 -0
- package/dist/tools/review-diff/checks/bug-patterns.d.ts +8 -0
- package/dist/tools/review-diff/checks/bug-patterns.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/bug-patterns.js +130 -0
- package/dist/tools/review-diff/checks/bug-patterns.js.map +1 -0
- package/dist/tools/review-diff/checks/complexity.d.ts +8 -0
- package/dist/tools/review-diff/checks/complexity.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/complexity.js +41 -0
- package/dist/tools/review-diff/checks/complexity.js.map +1 -0
- package/dist/tools/review-diff/checks/coupling.d.ts +7 -0
- package/dist/tools/review-diff/checks/coupling.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/coupling.js +52 -0
- package/dist/tools/review-diff/checks/coupling.js.map +1 -0
- package/dist/tools/review-diff/checks/dead-code.d.ts +7 -0
- package/dist/tools/review-diff/checks/dead-code.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/dead-code.js +39 -0
- package/dist/tools/review-diff/checks/dead-code.js.map +1 -0
- package/dist/tools/review-diff/checks/hotspots.d.ts +8 -0
- package/dist/tools/review-diff/checks/hotspots.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/hotspots.js +39 -0
- package/dist/tools/review-diff/checks/hotspots.js.map +1 -0
- package/dist/tools/review-diff/checks/secrets.d.ts +7 -0
- package/dist/tools/review-diff/checks/secrets.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/secrets.js +38 -0
- package/dist/tools/review-diff/checks/secrets.js.map +1 -0
- package/dist/tools/review-diff/checks/test-gaps.d.ts +16 -0
- package/dist/tools/review-diff/checks/test-gaps.d.ts.map +1 -0
- package/dist/tools/review-diff/checks/test-gaps.js +77 -0
- package/dist/tools/review-diff/checks/test-gaps.js.map +1 -0
- package/dist/tools/review-diff/constants.d.ts +6 -0
- package/dist/tools/review-diff/constants.d.ts.map +1 -0
- package/dist/tools/review-diff/constants.js +16 -0
- package/dist/tools/review-diff/constants.js.map +1 -0
- package/dist/tools/review-diff/file-pattern.d.ts +2 -0
- package/dist/tools/review-diff/file-pattern.d.ts.map +1 -0
- package/dist/tools/review-diff/file-pattern.js +9 -0
- package/dist/tools/review-diff/file-pattern.js.map +1 -0
- package/dist/tools/review-diff/orchestrator.d.ts +3 -0
- package/dist/tools/review-diff/orchestrator.d.ts.map +1 -0
- package/dist/tools/review-diff/orchestrator.js +173 -0
- package/dist/tools/review-diff/orchestrator.js.map +1 -0
- package/dist/tools/review-diff/scoring.d.ts +31 -0
- package/dist/tools/review-diff/scoring.d.ts.map +1 -0
- package/dist/tools/review-diff/scoring.js +82 -0
- package/dist/tools/review-diff/scoring.js.map +1 -0
- package/dist/tools/review-diff/timeout.d.ts +5 -0
- package/dist/tools/review-diff/timeout.d.ts.map +1 -0
- package/dist/tools/review-diff/timeout.js +14 -0
- package/dist/tools/review-diff/timeout.js.map +1 -0
- package/dist/tools/review-diff/types.d.ts +56 -0
- package/dist/tools/review-diff/types.d.ts.map +1 -0
- package/dist/tools/review-diff/types.js +2 -0
- package/dist/tools/review-diff/types.js.map +1 -0
- package/dist/tools/review-diff-tools.d.ts +19 -147
- package/dist/tools/review-diff-tools.d.ts.map +1 -1
- package/dist/tools/review-diff-tools.js +18 -941
- package/dist/tools/review-diff-tools.js.map +1 -1
- package/dist/tools/route-shared.d.ts +6 -0
- package/dist/tools/route-shared.d.ts.map +1 -0
- package/dist/tools/route-shared.js +37 -0
- package/dist/tools/route-shared.js.map +1 -0
- package/dist/tools/route-tools.d.ts +1 -7
- package/dist/tools/route-tools.d.ts.map +1 -1
- package/dist/tools/route-tools.js +2 -22
- package/dist/tools/route-tools.js.map +1 -1
- package/dist/tools/search-tools/constants.d.ts +33 -0
- package/dist/tools/search-tools/constants.d.ts.map +1 -0
- package/dist/tools/search-tools/constants.js +54 -0
- package/dist/tools/search-tools/constants.js.map +1 -0
- package/dist/tools/search-tools/ripgrep.d.ts +13 -0
- package/dist/tools/search-tools/ripgrep.d.ts.map +1 -0
- package/dist/tools/search-tools/ripgrep.js +138 -0
- package/dist/tools/search-tools/ripgrep.js.map +1 -0
- package/dist/tools/search-tools/semantic-search.d.ts +9 -0
- package/dist/tools/search-tools/semantic-search.d.ts.map +1 -0
- package/dist/tools/search-tools/semantic-search.js +19 -0
- package/dist/tools/search-tools/semantic-search.js.map +1 -0
- package/dist/tools/search-tools/symbol-search.d.ts +4 -0
- package/dist/tools/search-tools/symbol-search.d.ts.map +1 -0
- package/dist/tools/search-tools/symbol-search.js +146 -0
- package/dist/tools/search-tools/symbol-search.js.map +1 -0
- package/dist/tools/search-tools/text-search.d.ts +10 -0
- package/dist/tools/search-tools/text-search.d.ts.map +1 -0
- package/dist/tools/search-tools/text-search.js +260 -0
- package/dist/tools/search-tools/text-search.js.map +1 -0
- package/dist/tools/search-tools/types.d.ts +28 -0
- package/dist/tools/search-tools/types.d.ts.map +1 -0
- package/dist/tools/search-tools/types.js +2 -0
- package/dist/tools/search-tools/types.js.map +1 -0
- package/dist/tools/search-tools/zero-hit.d.ts +3 -0
- package/dist/tools/search-tools/zero-hit.d.ts.map +1 -0
- package/dist/tools/search-tools/zero-hit.js +92 -0
- package/dist/tools/search-tools/zero-hit.js.map +1 -0
- package/dist/tools/search-tools.d.ts +5 -64
- package/dist/tools/search-tools.d.ts.map +1 -1
- package/dist/tools/search-tools.js +4 -770
- package/dist/tools/search-tools.js.map +1 -1
- package/dist/tools/secret-detectors.d.ts +12 -0
- package/dist/tools/secret-detectors.d.ts.map +1 -0
- package/dist/tools/secret-detectors.js +86 -0
- package/dist/tools/secret-detectors.js.map +1 -0
- package/dist/tools/secret-file-scanner.d.ts +7 -0
- package/dist/tools/secret-file-scanner.d.ts.map +1 -0
- package/dist/tools/secret-file-scanner.js +52 -0
- package/dist/tools/secret-file-scanner.js.map +1 -0
- package/dist/tools/secret-scan-cache.d.ts +6 -0
- package/dist/tools/secret-scan-cache.d.ts.map +1 -0
- package/dist/tools/secret-scan-cache.js +14 -0
- package/dist/tools/secret-scan-cache.js.map +1 -0
- package/dist/tools/secret-scan-shared.d.ts +5 -0
- package/dist/tools/secret-scan-shared.d.ts.map +1 -0
- package/dist/tools/secret-scan-shared.js +4 -0
- package/dist/tools/secret-scan-shared.js.map +1 -0
- package/dist/tools/secret-scan-types.d.ts +21 -0
- package/dist/tools/secret-scan-types.d.ts.map +1 -0
- package/dist/tools/secret-scan-types.js +2 -0
- package/dist/tools/secret-scan-types.js.map +1 -0
- package/dist/tools/secret-tools.d.ts +3 -75
- package/dist/tools/secret-tools.d.ts.map +1 -1
- package/dist/tools/secret-tools.js +4 -316
- package/dist/tools/secret-tools.js.map +1 -1
- package/dist/tools/sql-audit-tools.d.ts +42 -0
- package/dist/tools/sql-audit-tools.d.ts.map +1 -0
- package/dist/tools/sql-audit-tools.js +130 -0
- package/dist/tools/sql-audit-tools.js.map +1 -0
- package/dist/tools/sql-column-tools.d.ts +28 -0
- package/dist/tools/sql-column-tools.d.ts.map +1 -0
- package/dist/tools/sql-column-tools.js +58 -0
- package/dist/tools/sql-column-tools.js.map +1 -0
- package/dist/tools/sql-complexity-tools.d.ts +22 -0
- package/dist/tools/sql-complexity-tools.d.ts.map +1 -0
- package/dist/tools/sql-complexity-tools.js +60 -0
- package/dist/tools/sql-complexity-tools.js.map +1 -0
- package/dist/tools/sql-dml-safety-tools.d.ts +26 -0
- package/dist/tools/sql-dml-safety-tools.d.ts.map +1 -0
- package/dist/tools/sql-dml-safety-tools.js +104 -0
- package/dist/tools/sql-dml-safety-tools.js.map +1 -0
- package/dist/tools/sql-drift-tools.d.ts +39 -0
- package/dist/tools/sql-drift-tools.d.ts.map +1 -0
- package/dist/tools/sql-drift-tools.js +238 -0
- package/dist/tools/sql-drift-tools.js.map +1 -0
- package/dist/tools/sql-lint-schema-tools.d.ts +28 -0
- package/dist/tools/sql-lint-schema-tools.d.ts.map +1 -0
- package/dist/tools/sql-lint-schema-tools.js +96 -0
- package/dist/tools/sql-lint-schema-tools.js.map +1 -0
- package/dist/tools/sql-migration-diff-tools.d.ts +24 -0
- package/dist/tools/sql-migration-diff-tools.d.ts.map +1 -0
- package/dist/tools/sql-migration-diff-tools.js +120 -0
- package/dist/tools/sql-migration-diff-tools.js.map +1 -0
- package/dist/tools/sql-orphan-table-tools.d.ts +20 -0
- package/dist/tools/sql-orphan-table-tools.d.ts.map +1 -0
- package/dist/tools/sql-orphan-table-tools.js +70 -0
- package/dist/tools/sql-orphan-table-tools.js.map +1 -0
- package/dist/tools/sql-query-tools.d.ts +32 -0
- package/dist/tools/sql-query-tools.d.ts.map +1 -0
- package/dist/tools/sql-query-tools.js +130 -0
- package/dist/tools/sql-query-tools.js.map +1 -0
- package/dist/tools/sql-schema-tools.d.ts +47 -0
- package/dist/tools/sql-schema-tools.d.ts.map +1 -0
- package/dist/tools/sql-schema-tools.js +202 -0
- package/dist/tools/sql-schema-tools.js.map +1 -0
- package/dist/tools/sql-shared-tools.d.ts +6 -0
- package/dist/tools/sql-shared-tools.d.ts.map +1 -0
- package/dist/tools/sql-shared-tools.js +59 -0
- package/dist/tools/sql-shared-tools.js.map +1 -0
- package/dist/tools/sql-tools.d.ts +25 -296
- package/dist/tools/sql-tools.d.ts.map +1 -1
- package/dist/tools/sql-tools.js +15 -1232
- package/dist/tools/sql-tools.js.map +1 -1
- package/dist/tools/status-tools.js +1 -1
- package/dist/tools/status-tools.js.map +1 -1
- package/dist/tools/workspace-tools.d.ts +1 -1
- package/dist/tools/yii3-migration-categories-application.d.ts +4 -0
- package/dist/tools/yii3-migration-categories-application.d.ts.map +1 -0
- package/dist/tools/yii3-migration-categories-application.js +56 -0
- package/dist/tools/yii3-migration-categories-application.js.map +1 -0
- package/dist/tools/yii3-migration-categories-infrastructure.d.ts +4 -0
- package/dist/tools/yii3-migration-categories-infrastructure.d.ts.map +1 -0
- package/dist/tools/yii3-migration-categories-infrastructure.js +67 -0
- package/dist/tools/yii3-migration-categories-infrastructure.js.map +1 -0
- package/dist/tools/yii3-migration-categories-model-view.d.ts +4 -0
- package/dist/tools/yii3-migration-categories-model-view.d.ts.map +1 -0
- package/dist/tools/yii3-migration-categories-model-view.js +59 -0
- package/dist/tools/yii3-migration-categories-model-view.js.map +1 -0
- package/dist/tools/yii3-migration-categories-runtime.d.ts +4 -0
- package/dist/tools/yii3-migration-categories-runtime.d.ts.map +1 -0
- package/dist/tools/yii3-migration-categories-runtime.js +49 -0
- package/dist/tools/yii3-migration-categories-runtime.js.map +1 -0
- package/dist/tools/yii3-migration-categories.d.ts +5 -0
- package/dist/tools/yii3-migration-categories.d.ts.map +1 -0
- package/dist/tools/yii3-migration-categories.js +18 -0
- package/dist/tools/yii3-migration-categories.js.map +1 -0
- package/dist/tools/yii3-migration-report.d.ts +4 -0
- package/dist/tools/yii3-migration-report.d.ts.map +1 -0
- package/dist/tools/yii3-migration-report.js +88 -0
- package/dist/tools/yii3-migration-report.js.map +1 -0
- package/dist/tools/yii3-migration-scanner.d.ts +28 -0
- package/dist/tools/yii3-migration-scanner.d.ts.map +1 -0
- package/dist/tools/yii3-migration-scanner.js +87 -0
- package/dist/tools/yii3-migration-scanner.js.map +1 -0
- package/dist/tools/yii3-migration-tools.d.ts +4 -73
- package/dist/tools/yii3-migration-tools.d.ts.map +1 -1
- package/dist/tools/yii3-migration-tools.js +5 -433
- package/dist/tools/yii3-migration-tools.js.map +1 -1
- package/dist/tools/yii3-migration-types.d.ts +50 -0
- package/dist/tools/yii3-migration-types.d.ts.map +1 -0
- package/dist/tools/yii3-migration-types.js +3 -0
- package/dist/tools/yii3-migration-types.js.map +1 -0
- package/dist/utils/git-validation.d.ts +24 -0
- package/dist/utils/git-validation.d.ts.map +1 -1
- package/dist/utils/git-validation.js +30 -0
- package/dist/utils/git-validation.js.map +1 -1
- package/dist/utils/source-stripper/code-handler.d.ts +3 -0
- package/dist/utils/source-stripper/code-handler.d.ts.map +1 -0
- package/dist/utils/source-stripper/code-handler.js +79 -0
- package/dist/utils/source-stripper/code-handler.js.map +1 -0
- package/dist/utils/source-stripper/comment-handler.d.ts +4 -0
- package/dist/utils/source-stripper/comment-handler.d.ts.map +1 -0
- package/dist/utils/source-stripper/comment-handler.js +24 -0
- package/dist/utils/source-stripper/comment-handler.js.map +1 -0
- package/dist/utils/source-stripper/machine.d.ts +2 -0
- package/dist/utils/source-stripper/machine.d.ts.map +1 -0
- package/dist/utils/source-stripper/machine.js +34 -0
- package/dist/utils/source-stripper/machine.js.map +1 -0
- package/dist/utils/source-stripper/regex-handler.d.ts +3 -0
- package/dist/utils/source-stripper/regex-handler.d.ts.map +1 -0
- package/dist/utils/source-stripper/regex-handler.js +44 -0
- package/dist/utils/source-stripper/regex-handler.js.map +1 -0
- package/dist/utils/source-stripper/state.d.ts +4 -0
- package/dist/utils/source-stripper/state.d.ts.map +1 -0
- package/dist/utils/source-stripper/state.js +20 -0
- package/dist/utils/source-stripper/state.js.map +1 -0
- package/dist/utils/source-stripper/string-handler.d.ts +3 -0
- package/dist/utils/source-stripper/string-handler.d.ts.map +1 -0
- package/dist/utils/source-stripper/string-handler.js +19 -0
- package/dist/utils/source-stripper/string-handler.js.map +1 -0
- package/dist/utils/source-stripper/template-handler.d.ts +4 -0
- package/dist/utils/source-stripper/template-handler.d.ts.map +1 -0
- package/dist/utils/source-stripper/template-handler.js +40 -0
- package/dist/utils/source-stripper/template-handler.js.map +1 -0
- package/dist/utils/source-stripper/types.d.ts +17 -0
- package/dist/utils/source-stripper/types.d.ts.map +1 -0
- package/dist/utils/source-stripper/types.js +4 -0
- package/dist/utils/source-stripper/types.js.map +1 -0
- package/dist/utils/source-stripper.d.ts +0 -21
- package/dist/utils/source-stripper.d.ts.map +1 -1
- package/dist/utils/source-stripper.js +6 -234
- package/dist/utils/source-stripper.js.map +1 -1
- package/dist/utils/walk/errors.d.ts +4 -0
- package/dist/utils/walk/errors.d.ts.map +1 -0
- package/dist/utils/walk/errors.js +18 -0
- package/dist/utils/walk/errors.js.map +1 -0
- package/dist/utils/walk/filters.d.ts +11 -0
- package/dist/utils/walk/filters.d.ts.map +1 -0
- package/dist/utils/walk/filters.js +53 -0
- package/dist/utils/walk/filters.js.map +1 -0
- package/dist/utils/walk/limits.d.ts +10 -0
- package/dist/utils/walk/limits.d.ts.map +1 -0
- package/dist/utils/walk/limits.js +22 -0
- package/dist/utils/walk/limits.js.map +1 -0
- package/dist/utils/walk/traversal.d.ts +9 -0
- package/dist/utils/walk/traversal.d.ts.map +1 -0
- package/dist/utils/walk/traversal.js +38 -0
- package/dist/utils/walk/traversal.js.map +1 -0
- package/dist/utils/walk/types.d.ts +18 -0
- package/dist/utils/walk/types.d.ts.map +1 -0
- package/dist/utils/walk/types.js +2 -0
- package/dist/utils/walk/types.js.map +1 -0
- package/dist/utils/walk.d.ts +4 -65
- package/dist/utils/walk.d.ts.map +1 -1
- package/dist/utils/walk.js +23 -151
- package/dist/utils/walk.js.map +1 -1
- package/package.json +6 -5
package/dist/cli/hooks.js
CHANGED
|
@@ -1,1133 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// Input sources:
|
|
7
|
-
// Claude Code / Codex: HOOK_TOOL_INPUT env var (JSON)
|
|
8
|
-
// Gemini CLI / Cline: stdin (JSON), triggered by --stdin flag
|
|
9
|
-
//
|
|
10
|
-
// Exit codes: 0 = allow, 2 = deny (with redirect message on stdout)
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
import { readFileSync, existsSync, unlinkSync, mkdirSync, writeFileSync, appendFileSync } from "node:fs";
|
|
13
|
-
import { dirname, extname, join, relative, posix as pathPosix } from "node:path";
|
|
14
|
-
import { homedir, hostname, tmpdir } from "node:os";
|
|
15
|
-
import { createHash } from "node:crypto";
|
|
16
|
-
import { spawn } from "node:child_process";
|
|
17
|
-
import { getCurrentGitCommit } from "../utils/git-head.js";
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
// Cross-platform input parsing
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
/**
|
|
22
|
-
* Read raw hook input from env var (Claude/Codex) or stdin (Gemini/Cline).
|
|
23
|
-
*/
|
|
24
|
-
function readRawInput() {
|
|
25
|
-
const envInput = process.env["HOOK_TOOL_INPUT"];
|
|
26
|
-
if (envInput)
|
|
27
|
-
return envInput;
|
|
28
|
-
if (process.argv.includes("--stdin")) {
|
|
29
|
-
try {
|
|
30
|
-
return readFileSync(0, "utf-8");
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
const EMPTY_INPUT = Object.freeze({ filePath: null, sessionId: null, command: null, toolName: null });
|
|
39
|
-
/**
|
|
40
|
-
* Parse hook input JSON once, extracting all fields across all platforms.
|
|
41
|
-
*
|
|
42
|
-
* Supported formats:
|
|
43
|
-
* Claude Code / Codex: { tool_input: { file_path, command }, session_id }
|
|
44
|
-
* Gemini CLI: { tool: { input: { path|file_path, command } }, sessionId }
|
|
45
|
-
* Cline: { preToolUse|postToolUse: { args: { file_path } } }
|
|
46
|
-
*/
|
|
47
|
-
function parseHookInput(raw) {
|
|
48
|
-
let parsed;
|
|
49
|
-
try {
|
|
50
|
-
parsed = JSON.parse(raw);
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return EMPTY_INPUT;
|
|
54
|
-
}
|
|
55
|
-
if (parsed === null || typeof parsed !== "object")
|
|
56
|
-
return EMPTY_INPUT;
|
|
57
|
-
const obj = parsed;
|
|
58
|
-
let filePath = null;
|
|
59
|
-
let command = null;
|
|
60
|
-
// Claude Code / Codex: { tool_input: { file_path, command } }
|
|
61
|
-
if (obj["tool_input"] && typeof obj["tool_input"] === "object") {
|
|
62
|
-
const ti = obj["tool_input"];
|
|
63
|
-
if (typeof ti["file_path"] === "string")
|
|
64
|
-
filePath = ti["file_path"];
|
|
65
|
-
if (typeof ti["command"] === "string")
|
|
66
|
-
command = ti["command"];
|
|
67
|
-
}
|
|
68
|
-
// Gemini CLI: { tool: { input: { path|file_path, command } } }
|
|
69
|
-
if (obj["tool"] && typeof obj["tool"] === "object") {
|
|
70
|
-
const tool = obj["tool"];
|
|
71
|
-
if (tool["input"] && typeof tool["input"] === "object") {
|
|
72
|
-
const input = tool["input"];
|
|
73
|
-
if (filePath === null) {
|
|
74
|
-
if (typeof input["path"] === "string")
|
|
75
|
-
filePath = input["path"];
|
|
76
|
-
else if (typeof input["file_path"] === "string")
|
|
77
|
-
filePath = input["file_path"];
|
|
78
|
-
}
|
|
79
|
-
if (command === null && typeof input["command"] === "string")
|
|
80
|
-
command = input["command"];
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// Cline: { preToolUse|postToolUse: { args: { file_path } } }
|
|
84
|
-
if (filePath === null) {
|
|
85
|
-
for (const key of ["preToolUse", "postToolUse"]) {
|
|
86
|
-
if (obj[key] && typeof obj[key] === "object") {
|
|
87
|
-
const hook = obj[key];
|
|
88
|
-
if (hook["args"] && typeof hook["args"] === "object") {
|
|
89
|
-
const args = hook["args"];
|
|
90
|
-
if (typeof args["file_path"] === "string") {
|
|
91
|
-
filePath = args["file_path"];
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Session ID: top-level { session_id } or { sessionId }
|
|
99
|
-
let sessionId = null;
|
|
100
|
-
if (typeof obj["session_id"] === "string")
|
|
101
|
-
sessionId = obj["session_id"];
|
|
102
|
-
else if (typeof obj["sessionId"] === "string")
|
|
103
|
-
sessionId = obj["sessionId"];
|
|
104
|
-
// Tool name: top-level { tool_name } (Claude Code) or { tool: { name } } (Gemini)
|
|
105
|
-
let toolName = null;
|
|
106
|
-
if (typeof obj["tool_name"] === "string")
|
|
107
|
-
toolName = obj["tool_name"];
|
|
108
|
-
else if (obj["tool"] && typeof obj["tool"] === "object") {
|
|
109
|
-
const t = obj["tool"];
|
|
110
|
-
if (typeof t["name"] === "string")
|
|
111
|
-
toolName = t["name"];
|
|
112
|
-
}
|
|
113
|
-
return { filePath, sessionId, command, toolName };
|
|
114
|
-
}
|
|
115
|
-
// ---------------------------------------------------------------------------
|
|
116
|
-
// Constants
|
|
117
|
-
// ---------------------------------------------------------------------------
|
|
118
|
-
const CODE_EXTENSIONS = new Set([
|
|
119
|
-
".ts",
|
|
120
|
-
".tsx",
|
|
121
|
-
".js",
|
|
122
|
-
".jsx",
|
|
123
|
-
".py",
|
|
124
|
-
".go",
|
|
125
|
-
".rs",
|
|
126
|
-
".java",
|
|
127
|
-
".c",
|
|
128
|
-
".cpp",
|
|
129
|
-
".cs",
|
|
130
|
-
".rb",
|
|
131
|
-
".php",
|
|
132
|
-
".swift",
|
|
133
|
-
".kt",
|
|
134
|
-
".scala",
|
|
135
|
-
".vue",
|
|
136
|
-
".svelte",
|
|
137
|
-
]);
|
|
138
|
-
const DEFAULT_MIN_LINES = 200;
|
|
139
|
-
const WIKI_MANIFEST_REL = join(".codesift", "wiki", "wiki-manifest.json");
|
|
140
|
-
const WIKI_SUMMARY_DEFAULT_MAX_CHARS = 2500;
|
|
141
|
-
const WIKI_OVERVIEW_DEFAULT_MAX_CHARS = 1800;
|
|
142
|
-
/** Char budget for `.summary.md` hook injection. `CODESIFT_WIKI_SUMMARY_MAX_CHARS`
|
|
143
|
-
* env var overrides when it parses to a positive integer; NaN or <=0 falls
|
|
144
|
-
* back to the default (CQ8: defensive env parsing so the hook never crashes). */
|
|
145
|
-
export function wikiSummaryMaxChars() {
|
|
146
|
-
return positiveIntEnv("CODESIFT_WIKI_SUMMARY_MAX_CHARS", WIKI_SUMMARY_DEFAULT_MAX_CHARS);
|
|
147
|
-
}
|
|
148
|
-
/** Char budget for the SessionStart project-overview injection. */
|
|
149
|
-
export function wikiOverviewMaxChars() {
|
|
150
|
-
return positiveIntEnv("CODESIFT_WIKI_OVERVIEW_MAX_CHARS", WIKI_OVERVIEW_DEFAULT_MAX_CHARS);
|
|
151
|
-
}
|
|
152
|
-
/** Parse a positive-int env var with a default fallback (NaN/<=0 → default). */
|
|
153
|
-
function positiveIntEnv(name, fallback) {
|
|
154
|
-
const raw = process.env[name];
|
|
155
|
-
if (raw === undefined || raw === "")
|
|
156
|
-
return fallback;
|
|
157
|
-
const n = parseInt(raw, 10);
|
|
158
|
-
if (!Number.isFinite(n) || n <= 0)
|
|
159
|
-
return fallback;
|
|
160
|
-
return n;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Walk up from `startDir` looking for `.codesift/wiki/wiki-manifest.json`.
|
|
164
|
-
* Returns the repo root directory if found, otherwise null.
|
|
165
|
-
*/
|
|
166
|
-
function findRepoRootFromDir(startDir) {
|
|
167
|
-
let dir = startDir;
|
|
168
|
-
while (true) {
|
|
169
|
-
try {
|
|
170
|
-
readFileSync(join(dir, WIKI_MANIFEST_REL));
|
|
171
|
-
return dir;
|
|
172
|
-
}
|
|
173
|
-
catch {
|
|
174
|
-
// manifest not found at this level
|
|
175
|
-
}
|
|
176
|
-
const parent = dirname(dir);
|
|
177
|
-
if (parent === dir)
|
|
178
|
-
break; // reached filesystem root
|
|
179
|
-
dir = parent;
|
|
180
|
-
}
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Walk up from `filePath`'s directory looking for the wiki manifest.
|
|
185
|
-
* Returns the repo root directory if found, otherwise null.
|
|
186
|
-
*/
|
|
187
|
-
function findRepoRoot(filePath) {
|
|
188
|
-
return findRepoRootFromDir(dirname(filePath));
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Append a wiki telemetry event to usage.jsonl (same shape as MCP tool events,
|
|
192
|
-
* so usage_stats and existing tooling pick it up). Synchronous + swallowed:
|
|
193
|
-
* hooks are short-lived and call process.exit, so an async write could be lost.
|
|
194
|
-
* Opt out of all wiki telemetry with CODESIFT_WIKI_TELEMETRY=0.
|
|
195
|
-
*/
|
|
196
|
-
function logWikiEvent(tool, repo, args, resultTokens = 0, sessionId) {
|
|
197
|
-
try {
|
|
198
|
-
if (process.env.CODESIFT_WIKI_TELEMETRY === "0")
|
|
199
|
-
return;
|
|
200
|
-
const dataDir = process.env["CODESIFT_DATA_DIR"] ?? join(homedir(), ".codesift");
|
|
201
|
-
const entry = {
|
|
202
|
-
ts: Date.now(),
|
|
203
|
-
tool,
|
|
204
|
-
repo,
|
|
205
|
-
args_summary: args,
|
|
206
|
-
elapsed_ms: 0,
|
|
207
|
-
result_tokens: resultTokens,
|
|
208
|
-
result_chunks: 0,
|
|
209
|
-
// Prefer the real session_id from the hook payload (now that --stdin works)
|
|
210
|
-
// so wiki consumption can be correlated to sessions; fall back to the env
|
|
211
|
-
// var, then "hook" for entries with no resolvable session.
|
|
212
|
-
session_id: sessionId ?? process.env["CLAUDE_SESSION_ID"] ?? "hook",
|
|
213
|
-
host: process.env["CODESIFT_HOST_TAG"] ?? hostname(),
|
|
214
|
-
};
|
|
215
|
-
mkdirSync(dataDir, { recursive: true });
|
|
216
|
-
appendFileSync(join(dataDir, "usage.jsonl"), JSON.stringify(entry) + "\n");
|
|
217
|
-
}
|
|
218
|
-
catch {
|
|
219
|
-
// CQ8: telemetry must never break the hook.
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Try to load the wiki community summary for `filePath`.
|
|
224
|
-
* Returns the summary string (truncated to WIKI_SUMMARY_MAX_CHARS) if found,
|
|
225
|
-
* or null if any step fails (missing manifest, file not mapped, missing .md, etc.).
|
|
226
|
-
*
|
|
227
|
-
* ALL reads are synchronous — the hook must exit fast.
|
|
228
|
-
* ALL errors are caught — never crash the hook (CQ8).
|
|
229
|
-
*/
|
|
230
|
-
function tryLoadWikiSummary(filePath) {
|
|
231
|
-
try {
|
|
232
|
-
const repoRoot = findRepoRoot(filePath);
|
|
233
|
-
if (!repoRoot)
|
|
234
|
-
return null;
|
|
235
|
-
const manifestPath = join(repoRoot, WIKI_MANIFEST_REL);
|
|
236
|
-
let manifestRaw;
|
|
237
|
-
try {
|
|
238
|
-
manifestRaw = readFileSync(manifestPath, "utf-8");
|
|
239
|
-
}
|
|
240
|
-
catch {
|
|
241
|
-
return null;
|
|
242
|
-
}
|
|
243
|
-
let manifest;
|
|
244
|
-
try {
|
|
245
|
-
manifest = JSON.parse(manifestRaw);
|
|
246
|
-
}
|
|
247
|
-
catch {
|
|
248
|
-
return null;
|
|
249
|
-
}
|
|
250
|
-
const fileToComm = manifest["file_to_community"];
|
|
251
|
-
if (!fileToComm || typeof fileToComm !== "object")
|
|
252
|
-
return null;
|
|
253
|
-
const map = fileToComm;
|
|
254
|
-
// Resolve the file path relative to the repo root for lookup.
|
|
255
|
-
// Manifest keys are POSIX-style; normalize separators and collapse `./`, `//`
|
|
256
|
-
// so that Windows backslashes and mixed slashes resolve to a single canonical key.
|
|
257
|
-
const relPath = pathPosix.normalize(relative(repoRoot, filePath).split("\\").join("/"));
|
|
258
|
-
const communitySlug = map[relPath];
|
|
259
|
-
if (typeof communitySlug !== "string")
|
|
260
|
-
return null;
|
|
261
|
-
// Validate slug format (defense-in-depth: prevent path traversal via crafted manifest)
|
|
262
|
-
if (!/^[a-z0-9-]+$/.test(communitySlug))
|
|
263
|
-
return null;
|
|
264
|
-
const summaryPath = join(repoRoot, ".codesift", "wiki", `${communitySlug}.summary.md`);
|
|
265
|
-
let summary;
|
|
266
|
-
try {
|
|
267
|
-
summary = readFileSync(summaryPath, "utf-8");
|
|
268
|
-
}
|
|
269
|
-
catch {
|
|
270
|
-
return null;
|
|
271
|
-
}
|
|
272
|
-
const maxChars = wikiSummaryMaxChars();
|
|
273
|
-
return summary.length > maxChars ? summary.slice(0, maxChars) : summary;
|
|
274
|
-
}
|
|
275
|
-
catch {
|
|
276
|
-
// CQ8: never crash the hook
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Build a compact, agent-facing project overview from the v2 wiki manifest at
|
|
282
|
-
* `repoRoot`. Returns null for missing/v1/malformed manifests (graceful — the
|
|
283
|
-
* caller falls back to the static prompt). Output is capped to the overview
|
|
284
|
-
* char budget so it never bloats the SessionStart context.
|
|
285
|
-
*
|
|
286
|
-
* ALL reads are synchronous and ALL errors are swallowed (CQ8: never crash).
|
|
287
|
-
*/
|
|
288
|
-
function tryLoadProjectOverview(repoRoot) {
|
|
289
|
-
try {
|
|
290
|
-
let manifest;
|
|
291
|
-
try {
|
|
292
|
-
manifest = JSON.parse(readFileSync(join(repoRoot, WIKI_MANIFEST_REL), "utf-8"));
|
|
293
|
-
}
|
|
294
|
-
catch {
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
// v2 manifests carry schema_version === 2; v1 has no project/modules blocks.
|
|
298
|
-
if (manifest["schema_version"] !== 2)
|
|
299
|
-
return null;
|
|
300
|
-
const project = manifest["project"];
|
|
301
|
-
if (!project || typeof project !== "object")
|
|
302
|
-
return null;
|
|
303
|
-
const p = project;
|
|
304
|
-
const stack = (p["stack"] ?? {});
|
|
305
|
-
const str = (v) => (typeof v === "string" && v.trim() !== "" ? v.trim() : null);
|
|
306
|
-
const lines = [];
|
|
307
|
-
lines.push(`\n\nCodeSift project wiki (architecture map — use instead of re-discovering structure):`);
|
|
308
|
-
const name = str(p["name"]) ?? "this repo";
|
|
309
|
-
const stackBits = [
|
|
310
|
-
str(stack["language"]),
|
|
311
|
-
str(stack["framework"]),
|
|
312
|
-
str(stack["test_runner"]) ? `test:${str(stack["test_runner"])}` : null,
|
|
313
|
-
str(stack["package_manager"]) ? `pm:${str(stack["package_manager"])}` : null,
|
|
314
|
-
].filter(Boolean);
|
|
315
|
-
lines.push(`Project: ${name}${stackBits.length ? ` — ${stackBits.join(" · ")}` : ""}`);
|
|
316
|
-
const entry = p["entry_points"];
|
|
317
|
-
if (Array.isArray(entry) && entry.length > 0) {
|
|
318
|
-
lines.push(`Entry points: ${entry.filter((e) => typeof e === "string").slice(0, 5).join(", ")}`);
|
|
319
|
-
}
|
|
320
|
-
const modules = manifest["modules"];
|
|
321
|
-
if (Array.isArray(modules) && modules.length > 0) {
|
|
322
|
-
lines.push(`Modules (${modules.length}):`);
|
|
323
|
-
for (const m of modules.slice(0, 14)) {
|
|
324
|
-
if (!m || typeof m !== "object")
|
|
325
|
-
continue;
|
|
326
|
-
const mod = m;
|
|
327
|
-
const mName = str(mod["name"]) ?? str(mod["slug"]) ?? "module";
|
|
328
|
-
let desc = str(mod["description"]) ?? "";
|
|
329
|
-
if (desc.length > 110)
|
|
330
|
-
desc = desc.slice(0, 107) + "…";
|
|
331
|
-
lines.push(` - ${mName}${desc ? `: ${desc}` : ""}`);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
const gotchas = p["known_gotchas"];
|
|
335
|
-
if (Array.isArray(gotchas) && gotchas.length > 0) {
|
|
336
|
-
const top = gotchas
|
|
337
|
-
.filter((g) => !!g && typeof g === "object")
|
|
338
|
-
.sort((a, b) => sevRank(b["severity"]) - sevRank(a["severity"]))
|
|
339
|
-
.slice(0, 2)
|
|
340
|
-
.map((g) => str(g["gotcha"]))
|
|
341
|
-
.filter(Boolean);
|
|
342
|
-
if (top.length > 0)
|
|
343
|
-
lines.push(`Gotchas: ${top.join(" | ")}`);
|
|
344
|
-
}
|
|
345
|
-
// Push→pull pointer: this overview is an orientation MAP, not the full
|
|
346
|
-
// architecture. Point the agent at the on-demand path — the queryable tools
|
|
347
|
-
// (get_knowledge_map / assemble_context) have near-zero usage because agents
|
|
348
|
-
// don't know to reach for them. Research (ETH arXiv:2602.11988) shows a
|
|
349
|
-
// pushed overview earns its tokens only when it surfaces non-inferable signal
|
|
350
|
-
// AND lets the agent pull the rest rather than re-discovering by hand.
|
|
351
|
-
lines.push("Need detail beyond this map? Pull on demand: get_knowledge_map(focus=<module>) for dependencies, assemble_context(level=\"L3\") for a directory overview, search_symbols/get_file_outline for a specific area — don't hand-walk the tree.");
|
|
352
|
-
// Staleness hint: compare manifest commit to current HEAD. Best-effort and
|
|
353
|
-
// gated — the probe is a synchronous subprocess on the SessionStart hot
|
|
354
|
-
// path, so users who care about absolute startup latency can disable it.
|
|
355
|
-
// (Auto-regen keeps the wiki fresh anyway, so the hint rarely fires.)
|
|
356
|
-
if (process.env.CODESIFT_WIKI_STALENESS_CHECK !== "0") {
|
|
357
|
-
const manifestCommit = str(manifest["git_commit"]);
|
|
358
|
-
const head = getCurrentGitCommit(repoRoot);
|
|
359
|
-
if (manifestCommit && manifestCommit !== "unknown" && head && !head.startsWith(manifestCommit) && !manifestCommit.startsWith(head)) {
|
|
360
|
-
lines.push(`(Wiki generated at ${manifestCommit.slice(0, 8)}; HEAD is ${head.slice(0, 8)} — auto-refreshes on edits.)`);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
const out = lines.join("\n");
|
|
364
|
-
const max = wikiOverviewMaxChars();
|
|
365
|
-
if (out.length <= max)
|
|
366
|
-
return out;
|
|
367
|
-
// Trim to the last full line so the overview never ends mid-sentence.
|
|
368
|
-
const truncated = out.slice(0, max);
|
|
369
|
-
const lastNl = truncated.lastIndexOf("\n");
|
|
370
|
-
return lastNl > 0 ? truncated.slice(0, lastNl) : truncated;
|
|
371
|
-
}
|
|
372
|
-
catch {
|
|
373
|
-
return null;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
function sevRank(s) {
|
|
377
|
-
return s === "high" ? 3 : s === "medium" ? 2 : s === "low" ? 1 : 0;
|
|
378
|
-
}
|
|
379
|
-
// ---------------------------------------------------------------------------
|
|
380
|
-
// handlePrecheckRead
|
|
381
|
-
//
|
|
382
|
-
// PreToolUse hook for the Read tool. When the agent attempts to read a large
|
|
383
|
-
// code file, deny the read and redirect to CodeSift tools instead.
|
|
384
|
-
//
|
|
385
|
-
// Env vars:
|
|
386
|
-
// HOOK_TOOL_INPUT — JSON string with tool_input.file_path
|
|
387
|
-
// CODESIFT_READ_HOOK_MIN_LINES — override the line threshold (default: 200)
|
|
388
|
-
// ---------------------------------------------------------------------------
|
|
389
|
-
export async function handlePrecheckRead() {
|
|
390
|
-
try {
|
|
391
|
-
const raw = readRawInput();
|
|
392
|
-
if (!raw) {
|
|
393
|
-
process.exit(0);
|
|
394
|
-
return;
|
|
395
|
-
}
|
|
396
|
-
const { filePath } = parseHookInput(raw);
|
|
397
|
-
if (!filePath) {
|
|
398
|
-
process.exit(0);
|
|
399
|
-
return;
|
|
400
|
-
}
|
|
401
|
-
const ext = extname(filePath).toLowerCase();
|
|
402
|
-
if (!CODE_EXTENSIONS.has(ext)) {
|
|
403
|
-
process.exit(0);
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
// Only redirect inside repos the user actually indexed — never interfere
|
|
407
|
-
// with reads in unrelated (non-CodeSift) projects. This makes precheck-read
|
|
408
|
-
// consistent with precheck-bash/glob/grep (all indexed-repo-scoped).
|
|
409
|
-
if (!isCurrentRepoIndexed()) {
|
|
410
|
-
process.exit(0);
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
// Allow bounded reads (offset/limit): a windowed read is targeted, and it
|
|
414
|
-
// is how an agent reads the region it is about to Edit — Claude Code
|
|
415
|
-
// requires a prior Read before Edit/Write, so redirecting these would make
|
|
416
|
-
// any file >= the threshold uneditable (a catch-22). Unbounded full reads
|
|
417
|
-
// of large files are still redirected below.
|
|
418
|
-
try {
|
|
419
|
-
const ti = JSON.parse(raw).tool_input;
|
|
420
|
-
if (ti && (typeof ti["offset"] === "number" || typeof ti["limit"] === "number")) {
|
|
421
|
-
process.exit(0);
|
|
422
|
-
return;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
catch {
|
|
426
|
-
// malformed — fall through to the size check
|
|
427
|
-
}
|
|
428
|
-
const minLinesEnv = process.env["CODESIFT_READ_HOOK_MIN_LINES"];
|
|
429
|
-
const parsed_min = minLinesEnv ? parseInt(minLinesEnv, 10) : NaN;
|
|
430
|
-
const minLines = Number.isNaN(parsed_min) ? DEFAULT_MIN_LINES : parsed_min;
|
|
431
|
-
let content;
|
|
432
|
-
try {
|
|
433
|
-
content = readFileSync(filePath, "utf-8");
|
|
434
|
-
}
|
|
435
|
-
catch {
|
|
436
|
-
// File not found or unreadable — allow
|
|
437
|
-
process.exit(0);
|
|
438
|
-
return;
|
|
439
|
-
}
|
|
440
|
-
const lineCount = content.split("\n").length;
|
|
441
|
-
if (lineCount >= minLines) {
|
|
442
|
-
const relPath = filePath.split("/").slice(-3).join("/");
|
|
443
|
-
const reason = `File ${relPath} has ${lineCount} lines. Use CodeSift tools instead:\n` +
|
|
444
|
-
` get_file_outline(repo, "${relPath}") for structure\n` +
|
|
445
|
-
` search_text(repo, "query", file_pattern="${relPath}") for specific content\n` +
|
|
446
|
-
` get_symbol(repo, "symbol_id") for a specific function\n` +
|
|
447
|
-
` To EDIT this file: Read a bounded range (pass offset+limit) — bounded reads are always allowed.`;
|
|
448
|
-
process.stdout.write(JSON.stringify({
|
|
449
|
-
hookSpecificOutput: {
|
|
450
|
-
hookEventName: "PreToolUse",
|
|
451
|
-
permissionDecision: "deny",
|
|
452
|
-
permissionDecisionReason: reason,
|
|
453
|
-
},
|
|
454
|
-
}));
|
|
455
|
-
process.exit(0);
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
// Wiki context injection — only fires for small files (not redirected above)
|
|
459
|
-
const wikiSummary = tryLoadWikiSummary(filePath);
|
|
460
|
-
if (wikiSummary) {
|
|
461
|
-
process.stdout.write(wikiSummary);
|
|
462
|
-
}
|
|
463
|
-
process.exit(0);
|
|
464
|
-
}
|
|
465
|
-
catch {
|
|
466
|
-
// CQ8: never crash — always fall back to allow so the agent is not blocked
|
|
467
|
-
process.exit(0);
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
// ---------------------------------------------------------------------------
|
|
471
|
-
// handlePrecheckBash
|
|
472
|
-
//
|
|
473
|
-
// PreToolUse hook for the Bash tool. When the agent attempts to run file-
|
|
474
|
-
// finding (find ... -name) or content-searching (grep -r, rg) commands,
|
|
475
|
-
// deny and redirect to CodeSift tools instead.
|
|
476
|
-
//
|
|
477
|
-
// This ensures sub-agents (Explore, Plan, etc.) use the CodeSift index
|
|
478
|
-
// rather than raw shell commands, even when they don't have CodeSift rules
|
|
479
|
-
// in their context.
|
|
480
|
-
//
|
|
481
|
-
// Env vars:
|
|
482
|
-
// HOOK_TOOL_INPUT — JSON string with tool_input.command
|
|
483
|
-
// ---------------------------------------------------------------------------
|
|
484
|
-
function isFileFindCommand(cmd) {
|
|
485
|
-
const hasFind = /\bfind\s/.test(cmd);
|
|
486
|
-
const hasNameFilter = /\s-i?name\s/.test(cmd);
|
|
487
|
-
// Don't intercept destructive operations
|
|
488
|
-
const hasDestructive = /\s-(?:exec|delete|ok)\b|\brm\s|\bmv\s/.test(cmd);
|
|
489
|
-
return hasFind && hasNameFilter && !hasDestructive;
|
|
490
|
-
}
|
|
491
|
-
function isContentGrepCommand(cmd) {
|
|
492
|
-
// grep -r/-R/--recursive (but not git grep)
|
|
493
|
-
const hasRecursiveGrep = /\bgrep\b.*(?:\s-\w*[rR]\w*\s|--recursive)/.test(cmd) && !/\bgit\s+grep\b/.test(cmd);
|
|
494
|
-
// standalone rg (not as part of another word like "org")
|
|
495
|
-
const hasRg = /(?:^|[\s;&|])rg\s/.test(cmd);
|
|
496
|
-
return hasRecursiveGrep || hasRg;
|
|
497
|
-
}
|
|
498
|
-
function getRegistryPath() {
|
|
499
|
-
return join(process.env["CODESIFT_DATA_DIR"] ?? join(homedir(), ".codesift"), "registry.json");
|
|
500
|
-
}
|
|
501
|
-
/**
|
|
502
|
-
* Treat the current shell as "inside an indexed repo" when CWD equals OR is
|
|
503
|
-
* a descendant of any registered repo root whose on-disk index still exists.
|
|
504
|
-
* Subdirectory match matters because agents typically work several levels
|
|
505
|
-
* below the repo root (e.g. `src/utils/`); the previous exact-equality check
|
|
506
|
-
* silently bypassed the redirect in those cases.
|
|
507
|
-
*/
|
|
508
|
-
function isCurrentRepoIndexed() {
|
|
509
|
-
try {
|
|
510
|
-
const raw = readFileSync(getRegistryPath(), "utf-8");
|
|
511
|
-
const parsed = JSON.parse(raw);
|
|
512
|
-
if (!parsed.repos || typeof parsed.repos !== "object")
|
|
513
|
-
return false;
|
|
514
|
-
const repos = Object.values(parsed.repos);
|
|
515
|
-
const cwd = process.cwd();
|
|
516
|
-
for (const repo of repos) {
|
|
517
|
-
if (!repo || typeof repo !== "object")
|
|
518
|
-
continue;
|
|
519
|
-
const meta = repo;
|
|
520
|
-
if (typeof meta.root !== "string" || typeof meta.index_path !== "string")
|
|
521
|
-
continue;
|
|
522
|
-
if (!isCwdInsideRepo(cwd, meta.root))
|
|
523
|
-
continue;
|
|
524
|
-
if (existsSync(meta.index_path))
|
|
525
|
-
return true;
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
catch {
|
|
529
|
-
// Hooks should never block normal shell use if registry inspection fails.
|
|
530
|
-
}
|
|
531
|
-
return false;
|
|
532
|
-
}
|
|
533
|
-
function isCwdInsideRepo(cwd, repoRoot) {
|
|
534
|
-
if (cwd === repoRoot)
|
|
535
|
-
return true;
|
|
536
|
-
const rootWithSep = repoRoot.endsWith("/") ? repoRoot : repoRoot + "/";
|
|
537
|
-
return cwd.startsWith(rootWithSep);
|
|
538
|
-
}
|
|
539
|
-
export async function handlePrecheckBash() {
|
|
540
|
-
try {
|
|
541
|
-
const raw = readRawInput();
|
|
542
|
-
if (!raw) {
|
|
543
|
-
process.exit(0);
|
|
544
|
-
return;
|
|
545
|
-
}
|
|
546
|
-
const { command } = parseHookInput(raw);
|
|
547
|
-
if (!command) {
|
|
548
|
-
process.exit(0);
|
|
549
|
-
return;
|
|
550
|
-
}
|
|
551
|
-
const shouldIntercept = isFileFindCommand(command) || isContentGrepCommand(command);
|
|
552
|
-
if (!shouldIntercept) {
|
|
553
|
-
process.exit(0);
|
|
554
|
-
return;
|
|
555
|
-
}
|
|
556
|
-
const shouldRedirectToCodeSift = isCurrentRepoIndexed();
|
|
557
|
-
if (!shouldRedirectToCodeSift) {
|
|
558
|
-
process.exit(0);
|
|
559
|
-
return;
|
|
560
|
-
}
|
|
561
|
-
if (isFileFindCommand(command)) {
|
|
562
|
-
denyTool(`Current repo is indexed by CodeSift. Use CodeSift MCP tools instead of find:\n` +
|
|
563
|
-
` get_file_tree(compact=true, name_pattern="*.ts")\n` +
|
|
564
|
-
` search_symbols(query="test", kind="function")`);
|
|
565
|
-
}
|
|
566
|
-
if (isContentGrepCommand(command)) {
|
|
567
|
-
denyTool(`Current repo is indexed by CodeSift. Use CodeSift MCP tools instead of grep/rg:\n` +
|
|
568
|
-
` search_text(query="pattern", file_pattern="*.ts")\n` +
|
|
569
|
-
` search_symbols(query="name", include_source=true)`);
|
|
570
|
-
}
|
|
571
|
-
process.exit(0);
|
|
572
|
-
}
|
|
573
|
-
catch {
|
|
574
|
-
// CQ8: never crash — always fall back to allow
|
|
575
|
-
process.exit(0);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
// ---------------------------------------------------------------------------
|
|
579
|
-
// handlePrecheckGlob
|
|
580
|
-
//
|
|
581
|
-
// PreToolUse hook for the Glob tool. Redirects file-finding operations to
|
|
582
|
-
// CodeSift's get_file_tree which uses the pre-built index.
|
|
583
|
-
//
|
|
584
|
-
// Env vars:
|
|
585
|
-
// HOOK_TOOL_INPUT — JSON string with tool_input.pattern
|
|
586
|
-
// ---------------------------------------------------------------------------
|
|
587
|
-
export async function handlePrecheckGlob() {
|
|
588
|
-
try {
|
|
589
|
-
const raw = readRawInput();
|
|
590
|
-
if (!raw) {
|
|
591
|
-
process.exit(0);
|
|
592
|
-
return;
|
|
593
|
-
}
|
|
594
|
-
denyTool(`CodeSift is available. Use CodeSift instead of Glob:\n` +
|
|
595
|
-
` get_file_tree(compact=true, name_pattern="*.ts") — find files\n` +
|
|
596
|
-
` search_symbols(query="name", kind="function") — find symbols`);
|
|
597
|
-
}
|
|
598
|
-
catch {
|
|
599
|
-
process.exit(0);
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
// ---------------------------------------------------------------------------
|
|
603
|
-
// handlePrecheckGrep
|
|
604
|
-
//
|
|
605
|
-
// PreToolUse hook for the Grep tool. Redirects content-searching operations
|
|
606
|
-
// to CodeSift's search_text which uses the pre-built BM25 index.
|
|
607
|
-
//
|
|
608
|
-
// Env vars:
|
|
609
|
-
// HOOK_TOOL_INPUT — JSON string with tool_input.pattern
|
|
610
|
-
// ---------------------------------------------------------------------------
|
|
611
|
-
export async function handlePrecheckGrep() {
|
|
612
|
-
try {
|
|
613
|
-
const raw = readRawInput();
|
|
614
|
-
if (!raw) {
|
|
615
|
-
process.exit(0);
|
|
616
|
-
return;
|
|
617
|
-
}
|
|
618
|
-
denyTool(`CodeSift is available. Use CodeSift instead of Grep:\n` +
|
|
619
|
-
` search_text(query="pattern", file_pattern="*.ts") — BM25-ranked full-text search\n` +
|
|
620
|
-
` search_symbols(query="name", include_source=true) — find functions/classes`);
|
|
621
|
-
}
|
|
622
|
-
catch {
|
|
623
|
-
process.exit(0);
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
// ---------------------------------------------------------------------------
|
|
627
|
-
// handlePostindexFile
|
|
628
|
-
//
|
|
629
|
-
// PostToolUse hook for Write/Edit tools. When the agent writes or edits a
|
|
630
|
-
// code file, re-index that file so the CodeSift index stays up to date.
|
|
631
|
-
//
|
|
632
|
-
// Env vars:
|
|
633
|
-
// HOOK_TOOL_INPUT — JSON string with tool_input.file_path
|
|
634
|
-
//
|
|
635
|
-
// Always exits 0 (fire-and-forget — never block the agent on hook errors).
|
|
636
|
-
// ---------------------------------------------------------------------------
|
|
637
|
-
// Debounce window for handlePostindexFile. Telemetry showed 417/659
|
|
638
|
-
// index_file calls were duplicates within 60s — Edit/Edit/Edit bursts hit the
|
|
639
|
-
// hook 2-3× per logical change. 2s catches them without delaying real reindex.
|
|
640
|
-
const POSTINDEX_DEBOUNCE_MS = 2000;
|
|
641
|
-
function postindexDebouncePath() {
|
|
642
|
-
const dataDir = process.env["CODESIFT_DATA_DIR"] ?? join(homedir(), ".codesift");
|
|
643
|
-
return join(dataDir, "hook-debounce.json");
|
|
644
|
-
}
|
|
645
|
-
/**
|
|
646
|
-
* Returns true if `filePath` was indexed within the debounce window.
|
|
647
|
-
* Best-effort: any I/O error returns false so the hook never blocks the agent.
|
|
648
|
-
*/
|
|
649
|
-
function shouldDebouncePostindex(filePath, now) {
|
|
650
|
-
try {
|
|
651
|
-
const path = postindexDebouncePath();
|
|
652
|
-
let state = {};
|
|
653
|
-
if (existsSync(path)) {
|
|
654
|
-
try {
|
|
655
|
-
state = JSON.parse(readFileSync(path, "utf-8"));
|
|
656
|
-
}
|
|
657
|
-
catch {
|
|
658
|
-
state = {};
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
const last = state[filePath];
|
|
662
|
-
if (typeof last === "number" && now - last < POSTINDEX_DEBOUNCE_MS) {
|
|
663
|
-
return true;
|
|
664
|
-
}
|
|
665
|
-
// Update state with current timestamp; opportunistically prune stale entries
|
|
666
|
-
// older than 60s to keep the file small.
|
|
667
|
-
const pruned = { [filePath]: now };
|
|
668
|
-
for (const [k, v] of Object.entries(state)) {
|
|
669
|
-
if (k !== filePath && typeof v === "number" && now - v < 60_000) {
|
|
670
|
-
pruned[k] = v;
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
try {
|
|
674
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
675
|
-
writeFileSync(path, JSON.stringify(pruned));
|
|
676
|
-
}
|
|
677
|
-
catch {
|
|
678
|
-
// Disk error — fall through; we still indexed once, no harm done.
|
|
679
|
-
}
|
|
680
|
-
return false;
|
|
681
|
-
}
|
|
682
|
-
catch {
|
|
683
|
-
return false;
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
// Auto-regenerate the wiki at most once per this window per repo. Telemetry
|
|
687
|
-
// (Jun 2026) showed the wiki's queryable/pull path goes effectively unused by
|
|
688
|
-
// agents, so per-structural-change regen was burning CPU to keep a map nobody
|
|
689
|
-
// reads on demand fresh-to-the-minute. The overview changes slowly and tolerates
|
|
690
|
-
// being a day stale, so the window is 24h: still auto-fresh, near-zero cost, no
|
|
691
|
-
// per-edit churn. Override with CODESIFT_WIKI_REGEN_DEBOUNCE_MIN (minutes); set
|
|
692
|
-
// CODESIFT_WIKI_AUTO_REGEN=1 to enable background refresh (manual
|
|
693
|
-
// `codesift wiki-generate` is the default).
|
|
694
|
-
function wikiRegenDebounceMs() {
|
|
695
|
-
const raw = process.env["CODESIFT_WIKI_REGEN_DEBOUNCE_MIN"];
|
|
696
|
-
const min = raw ? parseInt(raw, 10) : NaN;
|
|
697
|
-
return (Number.isNaN(min) || min <= 0 ? 24 * 60 : min) * 60 * 1000;
|
|
698
|
-
}
|
|
699
|
-
const WIKI_REGEN_DEBOUNCE_MS = wikiRegenDebounceMs();
|
|
700
|
-
// Skip background auto-regen entirely for repos larger than this (file count).
|
|
701
|
-
// Whole-repo analysis on a huge repo is too heavy to run opportunistically on
|
|
702
|
-
// edit — users regenerate those manually with `codesift wiki-generate`.
|
|
703
|
-
// Override with CODESIFT_WIKI_AUTO_REGEN_MAX_FILES.
|
|
704
|
-
const WIKI_REGEN_DEFAULT_MAX_FILES = 5000;
|
|
705
|
-
function wikiRegenMaxFiles() {
|
|
706
|
-
return positiveIntEnv("CODESIFT_WIKI_AUTO_REGEN_MAX_FILES", WIKI_REGEN_DEFAULT_MAX_FILES);
|
|
707
|
-
}
|
|
708
|
-
function wikiRegenStatePath() {
|
|
709
|
-
const dataDir = process.env["CODESIFT_DATA_DIR"] ?? join(homedir(), ".codesift");
|
|
710
|
-
return join(dataDir, "wiki-regen-debounce.json");
|
|
711
|
-
}
|
|
712
|
-
/** True if `repoRoot`'s wiki was regenerated within the throttle window. */
|
|
713
|
-
function shouldDebounceWikiRegen(repoRoot, now) {
|
|
714
|
-
try {
|
|
715
|
-
const path = wikiRegenStatePath();
|
|
716
|
-
let state = {};
|
|
717
|
-
if (existsSync(path)) {
|
|
718
|
-
try {
|
|
719
|
-
state = JSON.parse(readFileSync(path, "utf-8"));
|
|
720
|
-
}
|
|
721
|
-
catch {
|
|
722
|
-
state = {};
|
|
723
|
-
}
|
|
724
|
-
}
|
|
725
|
-
const last = state[repoRoot];
|
|
726
|
-
if (typeof last === "number" && now - last < WIKI_REGEN_DEBOUNCE_MS)
|
|
727
|
-
return true;
|
|
728
|
-
const pruned = { [repoRoot]: now };
|
|
729
|
-
for (const [k, v] of Object.entries(state)) {
|
|
730
|
-
if (k !== repoRoot && typeof v === "number" && now - v < 60 * 60_000)
|
|
731
|
-
pruned[k] = v;
|
|
732
|
-
}
|
|
733
|
-
try {
|
|
734
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
735
|
-
writeFileSync(path, JSON.stringify(pruned));
|
|
736
|
-
}
|
|
737
|
-
catch { /* disk */ }
|
|
738
|
-
return false;
|
|
739
|
-
}
|
|
740
|
-
catch {
|
|
741
|
-
return false;
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
|
-
/**
|
|
745
|
-
* Opportunistically regenerate the wiki for the repo containing `filePath`.
|
|
746
|
-
* Fire-and-forget: spawns a detached `wiki-generate` process and returns
|
|
747
|
-
* immediately so the agent is never blocked. No-ops unless ALL of:
|
|
748
|
-
* - a wiki already exists for the repo (we never auto-create — opt-in only),
|
|
749
|
-
* - the repo is not larger than the size cap (huge repos are manual-only),
|
|
750
|
-
* - the edit added a NEW file (structure changed). Edits to files already
|
|
751
|
-
* known to the wiki don't change the module map / overview, so they skip
|
|
752
|
-
* regen — this makes the common case (editing existing code) cost nothing,
|
|
753
|
-
* - the per-repo throttle window has elapsed.
|
|
754
|
-
* Opt in via `CODESIFT_WIKI_AUTO_REGEN=1`.
|
|
755
|
-
*/
|
|
756
|
-
function maybeRegenerateWiki(filePath, now, sessionId) {
|
|
757
|
-
try {
|
|
758
|
-
const optIn = process.env.CODESIFT_WIKI_AUTO_REGEN;
|
|
759
|
-
if (optIn !== "1" && optIn !== "true")
|
|
760
|
-
return;
|
|
761
|
-
// Only repos that already have a wiki manifest are auto-refreshed.
|
|
762
|
-
const repoRoot = findRepoRoot(filePath);
|
|
763
|
-
if (!repoRoot)
|
|
764
|
-
return;
|
|
765
|
-
// Read the manifest once for the size + structural gates.
|
|
766
|
-
let manifest;
|
|
767
|
-
try {
|
|
768
|
-
manifest = JSON.parse(readFileSync(join(repoRoot, WIKI_MANIFEST_REL), "utf-8"));
|
|
769
|
-
}
|
|
770
|
-
catch {
|
|
771
|
-
return;
|
|
772
|
-
}
|
|
773
|
-
const fileMap = manifest["file_to_community"];
|
|
774
|
-
const knownFiles = fileMap && typeof fileMap === "object" ? fileMap : null;
|
|
775
|
-
// Size gate: don't run whole-repo analysis in the background for huge repos.
|
|
776
|
-
if (knownFiles && Object.keys(knownFiles).length > wikiRegenMaxFiles())
|
|
777
|
-
return;
|
|
778
|
-
// Structural gate: only regenerate when a NEW file appeared. An edit to a
|
|
779
|
-
// file the wiki already knows about doesn't change the architecture map, so
|
|
780
|
-
// we skip it — the throttle is then never even consulted for plain edits.
|
|
781
|
-
if (knownFiles) {
|
|
782
|
-
const rel = pathPosix.normalize(relative(repoRoot, filePath).split("\\").join("/"));
|
|
783
|
-
if (rel in knownFiles)
|
|
784
|
-
return;
|
|
785
|
-
}
|
|
786
|
-
if (shouldDebounceWikiRegen(repoRoot, now))
|
|
787
|
-
return;
|
|
788
|
-
// Re-run the same CLI entry point that's executing this hook, with cwd set
|
|
789
|
-
// to the repo root so `wiki-generate` auto-resolves the repo. Detached +
|
|
790
|
-
// unref + ignored stdio so it outlives this short-lived hook process.
|
|
791
|
-
const cliEntry = process.argv[1];
|
|
792
|
-
if (!cliEntry)
|
|
793
|
-
return;
|
|
794
|
-
const child = spawn(process.execPath, [cliEntry, "wiki-generate", "--no-lens"], {
|
|
795
|
-
cwd: repoRoot,
|
|
796
|
-
detached: true,
|
|
797
|
-
stdio: "ignore",
|
|
798
|
-
});
|
|
799
|
-
child.on("error", () => { });
|
|
800
|
-
child.unref();
|
|
801
|
-
logWikiEvent("wiki_auto_regen", repoRoot, { trigger: "new-file", file: relative(repoRoot, filePath) }, 0, sessionId);
|
|
802
|
-
}
|
|
803
|
-
catch {
|
|
804
|
-
// CQ8: auto-regen is best-effort — never crash the hook.
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
export async function handlePostindexFile() {
|
|
808
|
-
try {
|
|
809
|
-
const raw = readRawInput();
|
|
810
|
-
if (!raw) {
|
|
811
|
-
process.exit(0);
|
|
812
|
-
return;
|
|
813
|
-
}
|
|
814
|
-
const { filePath } = parseHookInput(raw);
|
|
815
|
-
if (!filePath) {
|
|
816
|
-
process.exit(0);
|
|
817
|
-
return;
|
|
818
|
-
}
|
|
819
|
-
const ext = extname(filePath).toLowerCase();
|
|
820
|
-
if (!CODE_EXTENSIONS.has(ext)) {
|
|
821
|
-
process.exit(0);
|
|
822
|
-
return;
|
|
823
|
-
}
|
|
824
|
-
if (shouldDebouncePostindex(filePath, Date.now())) {
|
|
825
|
-
process.exit(0);
|
|
826
|
-
return;
|
|
827
|
-
}
|
|
828
|
-
try {
|
|
829
|
-
const { indexFile } = await import("../tools/index-tools.js");
|
|
830
|
-
await indexFile(filePath);
|
|
831
|
-
}
|
|
832
|
-
catch {
|
|
833
|
-
// CQ8: fire-and-forget — never crash, never block the agent
|
|
834
|
-
}
|
|
835
|
-
// Keep the wiki fresh: throttled, detached background regeneration.
|
|
836
|
-
maybeRegenerateWiki(filePath, Date.now(), parseHookInput(raw).sessionId);
|
|
837
|
-
process.exit(0);
|
|
838
|
-
}
|
|
839
|
-
catch {
|
|
840
|
-
process.exit(0);
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
// ---------------------------------------------------------------------------
|
|
844
|
-
// handlePrecompactSnapshot
|
|
845
|
-
//
|
|
846
|
-
// PreCompact hook for Claude Code. Reads the sidecar JSON file written by
|
|
847
|
-
// the MCP server process, formats a compact snapshot, and writes it to stdout.
|
|
848
|
-
// Claude Code injects stdout content into context before compaction.
|
|
849
|
-
//
|
|
850
|
-
// Env vars:
|
|
851
|
-
// HOOK_TOOL_INPUT — JSON string with session_id
|
|
852
|
-
//
|
|
853
|
-
// Always exits 0 — never blocks compaction.
|
|
854
|
-
// ---------------------------------------------------------------------------
|
|
855
|
-
export async function handlePrecompactSnapshot() {
|
|
856
|
-
try {
|
|
857
|
-
const raw = readRawInput();
|
|
858
|
-
if (!raw) {
|
|
859
|
-
process.exit(0);
|
|
860
|
-
return;
|
|
861
|
-
}
|
|
862
|
-
const { sessionId } = parseHookInput(raw);
|
|
863
|
-
if (!sessionId || !/^[a-f0-9-]+$/i.test(sessionId)) {
|
|
864
|
-
process.exit(0);
|
|
865
|
-
return;
|
|
866
|
-
}
|
|
867
|
-
// Read sidecar file
|
|
868
|
-
const dataDir = process.env["CODESIFT_DATA_DIR"] ?? join(homedir(), ".codesift");
|
|
869
|
-
const sidecarPath = join(dataDir, `session-${sessionId}.json`);
|
|
870
|
-
let sidecarData;
|
|
871
|
-
try {
|
|
872
|
-
const content = readFileSync(sidecarPath, "utf-8");
|
|
873
|
-
sidecarData = JSON.parse(content);
|
|
874
|
-
}
|
|
875
|
-
catch {
|
|
876
|
-
// Sidecar missing or invalid — exit gracefully
|
|
877
|
-
process.exit(0);
|
|
878
|
-
return;
|
|
879
|
-
}
|
|
880
|
-
// Deserialize and format snapshot
|
|
881
|
-
const { deserializeState, formatSnapshot } = await import("../storage/session-state.js");
|
|
882
|
-
const sessionState = deserializeState(sidecarData);
|
|
883
|
-
const snapshot = formatSnapshot(sessionState);
|
|
884
|
-
if (snapshot) {
|
|
885
|
-
process.stdout.write(snapshot, () => process.exit(0));
|
|
886
|
-
return;
|
|
887
|
-
}
|
|
888
|
-
process.exit(0);
|
|
889
|
-
}
|
|
890
|
-
catch {
|
|
891
|
-
// CQ8: never crash — never block compaction
|
|
892
|
-
process.exit(0);
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
|
-
// ---------------------------------------------------------------------------
|
|
896
|
-
// SessionStart / SessionGate / SentinelWriter / Agent gate hooks
|
|
897
|
-
// Inspired by cmm-claude-code-setup (https://github.com/halindrome/cmm-claude-code-setup)
|
|
898
|
-
// ---------------------------------------------------------------------------
|
|
899
|
-
/** Emit modern Claude Code "deny" decision via stdout JSON, then exit 0. */
|
|
900
|
-
function denyTool(reason) {
|
|
901
|
-
process.stdout.write(JSON.stringify({
|
|
902
|
-
hookSpecificOutput: {
|
|
903
|
-
hookEventName: "PreToolUse",
|
|
904
|
-
permissionDecision: "deny",
|
|
905
|
-
permissionDecisionReason: reason,
|
|
906
|
-
},
|
|
907
|
-
}));
|
|
908
|
-
process.exit(0);
|
|
909
|
-
}
|
|
910
|
-
function getSessionSentinelPath(sessionId) {
|
|
911
|
-
const id = sessionId ?? "default";
|
|
912
|
-
const hash = createHash("sha1").update(id).digest("hex").slice(0, 16);
|
|
913
|
-
return join(tmpdir(), `codesift-session-ready-${hash}`);
|
|
914
|
-
}
|
|
915
|
-
export async function handleSessionStart() {
|
|
916
|
-
try {
|
|
917
|
-
const raw = readRawInput();
|
|
918
|
-
const { sessionId } = raw ? parseHookInput(raw) : EMPTY_INPUT;
|
|
919
|
-
const sentinel = getSessionSentinelPath(sessionId);
|
|
920
|
-
try {
|
|
921
|
-
unlinkSync(sentinel);
|
|
922
|
-
}
|
|
923
|
-
catch { /* not exist */ }
|
|
924
|
-
// Inject context prompt
|
|
925
|
-
let additionalContext = "CodeSift MCP is available (mcp__codesift__* tools). " +
|
|
926
|
-
"Before searching code with built-in Grep/Glob/Read, prefer CodeSift tools: " +
|
|
927
|
-
"search_text, get_file_tree, search_symbols, plan_turn. " +
|
|
928
|
-
"Repo auto-resolves from CWD — no need for list_repos.";
|
|
929
|
-
// Append the project wiki overview (architecture map) so every session starts
|
|
930
|
-
// oriented without spending tool calls re-discovering structure. Best-effort:
|
|
931
|
-
// only fires when a v2 wiki manifest exists at/above CWD; never blocks startup.
|
|
932
|
-
if (process.env.CODESIFT_WIKI_OVERVIEW !== "0") {
|
|
933
|
-
const repoRoot = findRepoRootFromDir(process.cwd());
|
|
934
|
-
if (repoRoot) {
|
|
935
|
-
const overview = tryLoadProjectOverview(repoRoot);
|
|
936
|
-
if (overview) {
|
|
937
|
-
additionalContext += overview;
|
|
938
|
-
logWikiEvent("wiki_overview_injected", repoRoot, {
|
|
939
|
-
chars: overview.length,
|
|
940
|
-
modules: (overview.match(/^ - /gm) || []).length,
|
|
941
|
-
}, Math.ceil(overview.length / 4), sessionId);
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
process.stdout.write(JSON.stringify({
|
|
946
|
-
hookSpecificOutput: {
|
|
947
|
-
hookEventName: "SessionStart",
|
|
948
|
-
additionalContext,
|
|
949
|
-
},
|
|
950
|
-
}));
|
|
951
|
-
process.exit(0);
|
|
952
|
-
}
|
|
953
|
-
catch {
|
|
954
|
-
process.exit(0);
|
|
955
|
-
}
|
|
956
|
-
}
|
|
957
|
-
// ---------------------------------------------------------------------------
|
|
958
|
-
// handleSessionGate
|
|
959
|
-
//
|
|
960
|
-
// PreToolUse hook with empty matcher (matches ALL tools). Blocks every tool
|
|
961
|
-
// EXCEPT the allow-list until a CodeSift tool has been called once
|
|
962
|
-
// (sentinel file). Inspired by cmm-claude-code-setup/session-gate.sh.
|
|
963
|
-
//
|
|
964
|
-
// Allow-list (always permitted):
|
|
965
|
-
// - All mcp__codesift__* (so the agent CAN call them to release the gate)
|
|
966
|
-
// - Agent (so subagents can spawn — they have their own gate)
|
|
967
|
-
// - Skill, ToolSearch, SendMessage, TaskCreate, TaskUpdate, TaskList
|
|
968
|
-
// - PushNotification, ScheduleWakeup
|
|
969
|
-
//
|
|
970
|
-
// Once any mcp__codesift__index_status / plan_turn / index_folder is called,
|
|
971
|
-
// the sentinel is created (by handleSentinelWriter PostToolUse) and all tools
|
|
972
|
-
// are unlocked for the rest of the session.
|
|
973
|
-
// ---------------------------------------------------------------------------
|
|
974
|
-
const SESSION_GATE_ALLOWLIST = new Set([
|
|
975
|
-
"Agent", "Skill", "ToolSearch", "SendMessage",
|
|
976
|
-
"TaskCreate", "TaskUpdate", "TaskList", "TaskGet", "TaskOutput", "TaskStop",
|
|
977
|
-
"PushNotification", "ScheduleWakeup", "AskUserQuestion",
|
|
978
|
-
"EnterPlanMode", "ExitPlanMode", "EnterWorktree", "ExitWorktree",
|
|
979
|
-
"Monitor", "CronCreate", "CronList", "CronDelete", "RemoteTrigger",
|
|
980
|
-
]);
|
|
981
|
-
export async function handleSessionGate() {
|
|
982
|
-
try {
|
|
983
|
-
const raw = readRawInput();
|
|
984
|
-
if (!raw) {
|
|
985
|
-
process.exit(0);
|
|
986
|
-
return;
|
|
987
|
-
}
|
|
988
|
-
const { toolName, sessionId } = parseHookInput(raw);
|
|
989
|
-
if (!toolName) {
|
|
990
|
-
process.exit(0);
|
|
991
|
-
return;
|
|
992
|
-
}
|
|
993
|
-
// Allow CodeSift tools (they release the gate)
|
|
994
|
-
if (toolName.startsWith("mcp__codesift__")) {
|
|
995
|
-
process.exit(0);
|
|
996
|
-
return;
|
|
997
|
-
}
|
|
998
|
-
// Allow infrastructure tools
|
|
999
|
-
if (SESSION_GATE_ALLOWLIST.has(toolName)) {
|
|
1000
|
-
process.exit(0);
|
|
1001
|
-
return;
|
|
1002
|
-
}
|
|
1003
|
-
// Allow other MCP tools (sentry, playwright, etc. — not our concern)
|
|
1004
|
-
if (toolName.startsWith("mcp__") && !toolName.startsWith("mcp__codesift__")) {
|
|
1005
|
-
process.exit(0);
|
|
1006
|
-
return;
|
|
1007
|
-
}
|
|
1008
|
-
// Check sentinel — has CodeSift been called yet?
|
|
1009
|
-
const sentinel = getSessionSentinelPath(sessionId);
|
|
1010
|
-
if (existsSync(sentinel)) {
|
|
1011
|
-
process.exit(0);
|
|
1012
|
-
return;
|
|
1013
|
-
}
|
|
1014
|
-
// Block — agent must call CodeSift first
|
|
1015
|
-
denyTool(`CodeSift session not initialized. Call one of these first:\n` +
|
|
1016
|
-
` mcp__codesift__index_status() — check if repo is indexed\n` +
|
|
1017
|
-
` mcp__codesift__plan_turn(query="...") — natural-language tool router\n` +
|
|
1018
|
-
` mcp__codesift__get_file_tree() — list repo files\n` +
|
|
1019
|
-
`Then '${toolName}' will be allowed.`);
|
|
1020
|
-
}
|
|
1021
|
-
catch {
|
|
1022
|
-
process.exit(0);
|
|
1023
|
-
}
|
|
1024
|
-
}
|
|
1025
|
-
// ---------------------------------------------------------------------------
|
|
1026
|
-
// handleSentinelWriter
|
|
1027
|
-
//
|
|
1028
|
-
// PostToolUse hook for mcp__codesift__* tools. Creates the session-ready
|
|
1029
|
-
// sentinel so subsequent tool calls pass the SessionGate.
|
|
1030
|
-
// ---------------------------------------------------------------------------
|
|
1031
|
-
export async function handleSentinelWriter() {
|
|
1032
|
-
try {
|
|
1033
|
-
const raw = readRawInput();
|
|
1034
|
-
if (!raw) {
|
|
1035
|
-
process.exit(0);
|
|
1036
|
-
return;
|
|
1037
|
-
}
|
|
1038
|
-
const { sessionId } = parseHookInput(raw);
|
|
1039
|
-
const sentinel = getSessionSentinelPath(sessionId);
|
|
1040
|
-
try {
|
|
1041
|
-
mkdirSync(dirname(sentinel), { recursive: true });
|
|
1042
|
-
writeFileSync(sentinel, String(Date.now()), "utf-8");
|
|
1043
|
-
}
|
|
1044
|
-
catch { /* best-effort */ }
|
|
1045
|
-
process.exit(0);
|
|
1046
|
-
}
|
|
1047
|
-
catch {
|
|
1048
|
-
process.exit(0);
|
|
1049
|
-
}
|
|
1050
|
-
}
|
|
1051
|
-
// ---------------------------------------------------------------------------
|
|
1052
|
-
// handlePrecheckAgent
|
|
1053
|
-
//
|
|
1054
|
-
// PreToolUse hook for the Agent tool. Blocks Task/Explore subagent spawns
|
|
1055
|
-
// whose prompt does NOT reference CodeSift tool names. Forces parent agent
|
|
1056
|
-
// to either do the work itself with CodeSift, or pass CodeSift tool names
|
|
1057
|
-
// in the subagent prompt. Inspired by cmm/agent-cmm-gate.sh.
|
|
1058
|
-
// ---------------------------------------------------------------------------
|
|
1059
|
-
const CODESIFT_TOOL_KEYWORDS = [
|
|
1060
|
-
"search_text", "search_symbols", "get_file_tree", "get_file_outline",
|
|
1061
|
-
"index_file", "get_symbol", "get_symbols", "find_references", "trace_call_chain",
|
|
1062
|
-
"trace_route", "codebase_retrieval", "assemble_context", "plan_turn",
|
|
1063
|
-
"search_all_conversations", "find_dead_code", "scan_secrets", "review_diff", "audit_scan",
|
|
1064
|
-
"detect_communities", "analyze_complexity", "analyze_hotspots",
|
|
1065
|
-
"impact_analysis", "find_and_show", "discover_tools", "describe_tools",
|
|
1066
|
-
"codesift", "CodeSift",
|
|
1067
|
-
];
|
|
1068
|
-
export async function handlePrecheckAgent() {
|
|
1069
|
-
try {
|
|
1070
|
-
const raw = readRawInput();
|
|
1071
|
-
if (!raw) {
|
|
1072
|
-
process.exit(0);
|
|
1073
|
-
return;
|
|
1074
|
-
}
|
|
1075
|
-
let parsed;
|
|
1076
|
-
try {
|
|
1077
|
-
parsed = JSON.parse(raw);
|
|
1078
|
-
}
|
|
1079
|
-
catch {
|
|
1080
|
-
process.exit(0);
|
|
1081
|
-
return;
|
|
1082
|
-
}
|
|
1083
|
-
if (!parsed || typeof parsed !== "object") {
|
|
1084
|
-
process.exit(0);
|
|
1085
|
-
return;
|
|
1086
|
-
}
|
|
1087
|
-
const obj = parsed;
|
|
1088
|
-
const ti = obj["tool_input"];
|
|
1089
|
-
if (!ti) {
|
|
1090
|
-
process.exit(0);
|
|
1091
|
-
return;
|
|
1092
|
-
}
|
|
1093
|
-
const subagentType = typeof ti["subagent_type"] === "string" ? ti["subagent_type"] : "";
|
|
1094
|
-
const prompt = typeof ti["prompt"] === "string" ? ti["prompt"] : "";
|
|
1095
|
-
// Only nudge inside indexed repos — Explore can't use CodeSift in a repo
|
|
1096
|
-
// that was never indexed, so gating subagents there is pointless friction.
|
|
1097
|
-
if (!isCurrentRepoIndexed()) {
|
|
1098
|
-
process.exit(0);
|
|
1099
|
-
return;
|
|
1100
|
-
}
|
|
1101
|
-
// Only gate code-exploration subagents
|
|
1102
|
-
if (subagentType !== "Explore" && subagentType !== "general-purpose" && subagentType !== "Plan") {
|
|
1103
|
-
process.exit(0);
|
|
1104
|
-
return;
|
|
1105
|
-
}
|
|
1106
|
-
// Allow if prompt mentions any CodeSift keyword
|
|
1107
|
-
const lower = prompt.toLowerCase();
|
|
1108
|
-
if (CODESIFT_TOOL_KEYWORDS.some((k) => lower.includes(k.toLowerCase()))) {
|
|
1109
|
-
process.exit(0);
|
|
1110
|
-
return;
|
|
1111
|
-
}
|
|
1112
|
-
// Detect code-search intent — block these
|
|
1113
|
-
const CODE_SEARCH_INTENT = /\b(find|search|investigate|trace|explore|locate|grep|look\s+for|where\s+is|how\s+does|what\s+calls)\b.*\b(code|file|function|class|module|component|symbol|import|method|hook|route|endpoint|service|handler|in\s+the\s+(codebase|project|repo))\b/i;
|
|
1114
|
-
if (CODE_SEARCH_INTENT.test(prompt)) {
|
|
1115
|
-
// Code search detected without CodeSift keywords — block
|
|
1116
|
-
}
|
|
1117
|
-
else if (prompt.length < 200) {
|
|
1118
|
-
// Non-code-search short prompt — allow
|
|
1119
|
-
process.exit(0);
|
|
1120
|
-
return;
|
|
1121
|
-
}
|
|
1122
|
-
// Block — subagent prompt should reference CodeSift tools
|
|
1123
|
-
denyTool(`Subagent '${subagentType}' prompt does not mention any CodeSift tool.\n` +
|
|
1124
|
-
`Explore subagent does NOT have access to mcp__codesift__* tools — it will use Grep/Glob/Read.\n` +
|
|
1125
|
-
`Either:\n` +
|
|
1126
|
-
` 1. Add CodeSift tool names to the subagent prompt (search_text, get_file_tree, etc.)\n` +
|
|
1127
|
-
` 2. Do the work yourself using mcp__codesift__* tools — usually faster and cheaper`);
|
|
1128
|
-
}
|
|
1129
|
-
catch {
|
|
1130
|
-
process.exit(0);
|
|
1131
|
-
}
|
|
1132
|
-
}
|
|
1
|
+
export { handlePrecheckRead, handlePrecheckBash, handlePrecheckGlob, handlePrecheckGrep, } from "./hooks/pre-tool-use.js";
|
|
2
|
+
export { handlePostindexFile } from "./hooks/post-tool-use.js";
|
|
3
|
+
export { handlePrecompactSnapshot } from "./hooks/pre-compact.js";
|
|
4
|
+
export { handleSessionStart, handleSessionGate, handleSentinelWriter, handlePrecheckAgent, } from "./hooks/session.js";
|
|
5
|
+
export { wikiOverviewMaxChars, wikiSummaryMaxChars } from "./hooks/wiki.js";
|
|
1133
6
|
//# sourceMappingURL=hooks.js.map
|