@ai-coders/context 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +260 -22
- package/dist/fragments/compose.d.ts +30 -0
- package/dist/fragments/compose.d.ts.map +1 -0
- package/dist/fragments/compose.js +274 -0
- package/dist/fragments/compose.js.map +1 -0
- package/dist/fragments/extractors/index.d.ts +26 -0
- package/dist/fragments/extractors/index.d.ts.map +1 -0
- package/dist/fragments/extractors/index.js +58 -0
- package/dist/fragments/extractors/index.js.map +1 -0
- package/dist/fragments/extractors/module.d.ts +12 -0
- package/dist/fragments/extractors/module.d.ts.map +1 -0
- package/dist/fragments/extractors/module.js +302 -0
- package/dist/fragments/extractors/module.js.map +1 -0
- package/dist/fragments/extractors/project.d.ts +12 -0
- package/dist/fragments/extractors/project.d.ts.map +1 -0
- package/dist/fragments/extractors/project.js +274 -0
- package/dist/fragments/extractors/project.js.map +1 -0
- package/dist/fragments/extractors/semantic.d.ts +12 -0
- package/dist/fragments/extractors/semantic.d.ts.map +1 -0
- package/dist/fragments/extractors/semantic.js +329 -0
- package/dist/fragments/extractors/semantic.js.map +1 -0
- package/dist/fragments/index.d.ts +47 -0
- package/dist/fragments/index.d.ts.map +1 -0
- package/dist/fragments/index.js +75 -0
- package/dist/fragments/index.js.map +1 -0
- package/dist/fragments/query.d.ts +101 -0
- package/dist/fragments/query.d.ts.map +1 -0
- package/dist/fragments/query.js +200 -0
- package/dist/fragments/query.js.map +1 -0
- package/dist/fragments/render/compact.d.ts +15 -0
- package/dist/fragments/render/compact.d.ts.map +1 -0
- package/dist/fragments/render/compact.js +209 -0
- package/dist/fragments/render/compact.js.map +1 -0
- package/dist/fragments/render/index.d.ts +17 -0
- package/dist/fragments/render/index.d.ts.map +1 -0
- package/dist/fragments/render/index.js +40 -0
- package/dist/fragments/render/index.js.map +1 -0
- package/dist/fragments/render/json.d.ts +9 -0
- package/dist/fragments/render/json.d.ts.map +1 -0
- package/dist/fragments/render/json.js +44 -0
- package/dist/fragments/render/json.js.map +1 -0
- package/dist/fragments/render/markdown.d.ts +9 -0
- package/dist/fragments/render/markdown.d.ts.map +1 -0
- package/dist/fragments/render/markdown.js +291 -0
- package/dist/fragments/render/markdown.js.map +1 -0
- package/dist/fragments/store.d.ts +49 -0
- package/dist/fragments/store.d.ts.map +1 -0
- package/dist/fragments/store.js +161 -0
- package/dist/fragments/store.js.map +1 -0
- package/dist/fragments/types.d.ts +241 -0
- package/dist/fragments/types.d.ts.map +1 -0
- package/dist/fragments/types.js +8 -0
- package/dist/fragments/types.js.map +1 -0
- package/dist/generators/agents/agentGenerator.d.ts +8 -1
- package/dist/generators/agents/agentGenerator.d.ts.map +1 -1
- package/dist/generators/agents/agentGenerator.js +108 -10
- package/dist/generators/agents/agentGenerator.js.map +1 -1
- package/dist/generators/agents/templates/playbookTemplate.d.ts +3 -2
- package/dist/generators/agents/templates/playbookTemplate.d.ts.map +1 -1
- package/dist/generators/agents/templates/playbookTemplate.js +143 -45
- package/dist/generators/agents/templates/playbookTemplate.js.map +1 -1
- package/dist/generators/agents/templates/types.d.ts +9 -1
- package/dist/generators/agents/templates/types.d.ts.map +1 -1
- package/dist/generators/documentation/documentationGenerator.d.ts +2 -0
- package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -1
- package/dist/generators/documentation/documentationGenerator.js +18 -3
- package/dist/generators/documentation/documentationGenerator.js.map +1 -1
- package/dist/generators/documentation/guideRegistry.d.ts.map +1 -1
- package/dist/generators/documentation/guideRegistry.js +0 -8
- package/dist/generators/documentation/guideRegistry.js.map +1 -1
- package/dist/generators/documentation/templates/apiReferenceTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/apiReferenceTemplate.js +1 -22
- package/dist/generators/documentation/templates/apiReferenceTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/architectureTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/architectureTemplate.js +160 -26
- package/dist/generators/documentation/templates/architectureTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/common.d.ts +28 -1
- package/dist/generators/documentation/templates/common.d.ts.map +1 -1
- package/dist/generators/documentation/templates/common.js +130 -10
- package/dist/generators/documentation/templates/common.js.map +1 -1
- package/dist/generators/documentation/templates/dataFlowTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/dataFlowTemplate.js +98 -18
- package/dist/generators/documentation/templates/dataFlowTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/developmentWorkflowTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/developmentWorkflowTemplate.js +1 -18
- package/dist/generators/documentation/templates/developmentWorkflowTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/glossaryTemplate.d.ts +1 -1
- package/dist/generators/documentation/templates/glossaryTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/glossaryTemplate.js +51 -23
- package/dist/generators/documentation/templates/glossaryTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/indexTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/indexTemplate.js +1 -18
- package/dist/generators/documentation/templates/indexTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/migrationTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/migrationTemplate.js +1 -23
- package/dist/generators/documentation/templates/migrationTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/onboardingTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/onboardingTemplate.js +1 -23
- package/dist/generators/documentation/templates/onboardingTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/projectOverviewTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/projectOverviewTemplate.js +81 -19
- package/dist/generators/documentation/templates/projectOverviewTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/securityTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/securityTemplate.js +1 -18
- package/dist/generators/documentation/templates/securityTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/testingTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/testingTemplate.js +1 -19
- package/dist/generators/documentation/templates/testingTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/toolingTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/toolingTemplate.js +2 -19
- package/dist/generators/documentation/templates/toolingTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/troubleshootingTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/troubleshootingTemplate.js +1 -23
- package/dist/generators/documentation/templates/troubleshootingTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/types.d.ts +2 -1
- package/dist/generators/documentation/templates/types.d.ts.map +1 -1
- package/dist/generators/plans/planGenerator.d.ts +4 -0
- package/dist/generators/plans/planGenerator.d.ts.map +1 -1
- package/dist/generators/plans/planGenerator.js +30 -2
- package/dist/generators/plans/planGenerator.js.map +1 -1
- package/dist/generators/plans/templates/indexTemplate.d.ts.map +1 -1
- package/dist/generators/plans/templates/indexTemplate.js +3 -12
- package/dist/generators/plans/templates/indexTemplate.js.map +1 -1
- package/dist/generators/plans/templates/planTemplate.d.ts.map +1 -1
- package/dist/generators/plans/templates/planTemplate.js +54 -32
- package/dist/generators/plans/templates/planTemplate.js.map +1 -1
- package/dist/generators/plans/templates/types.d.ts +10 -0
- package/dist/generators/plans/templates/types.d.ts.map +1 -1
- package/dist/generators/shared/generatorUtils.d.ts.map +1 -1
- package/dist/generators/shared/generatorUtils.js +6 -9
- package/dist/generators/shared/generatorUtils.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +430 -90
- package/dist/index.js.map +1 -1
- package/dist/prompts/defaults.d.ts +2 -2
- package/dist/prompts/defaults.d.ts.map +1 -1
- package/dist/prompts/defaults.js +26 -56
- package/dist/prompts/defaults.js.map +1 -1
- package/dist/services/ai/agentEvents.d.ts +45 -0
- package/dist/services/ai/agentEvents.d.ts.map +1 -0
- package/dist/services/ai/agentEvents.js +61 -0
- package/dist/services/ai/agentEvents.js.map +1 -0
- package/dist/services/ai/agents/documentationAgent.d.ts +53 -0
- package/dist/services/ai/agents/documentationAgent.d.ts.map +1 -0
- package/dist/services/ai/agents/documentationAgent.js +243 -0
- package/dist/services/ai/agents/documentationAgent.js.map +1 -0
- package/dist/services/ai/agents/index.d.ts +7 -0
- package/dist/services/ai/agents/index.d.ts.map +1 -0
- package/dist/services/ai/agents/index.js +10 -0
- package/dist/services/ai/agents/index.js.map +1 -0
- package/dist/services/ai/agents/planAgent.d.ts +68 -0
- package/dist/services/ai/agents/planAgent.d.ts.map +1 -0
- package/dist/services/ai/agents/planAgent.js +389 -0
- package/dist/services/ai/agents/planAgent.js.map +1 -0
- package/dist/services/ai/agents/playbookAgent.d.ts +54 -0
- package/dist/services/ai/agents/playbookAgent.d.ts.map +1 -0
- package/dist/services/ai/agents/playbookAgent.js +265 -0
- package/dist/services/ai/agents/playbookAgent.js.map +1 -0
- package/dist/services/ai/aiSdkClient.d.ts +67 -0
- package/dist/services/ai/aiSdkClient.d.ts.map +1 -0
- package/dist/services/ai/aiSdkClient.js +143 -0
- package/dist/services/ai/aiSdkClient.js.map +1 -0
- package/dist/services/ai/index.d.ts +7 -0
- package/dist/services/ai/index.d.ts.map +1 -0
- package/dist/services/ai/index.js +49 -0
- package/dist/services/ai/index.js.map +1 -0
- package/dist/services/ai/providerFactory.d.ts +35 -0
- package/dist/services/ai/providerFactory.d.ts.map +1 -0
- package/dist/services/ai/providerFactory.js +107 -0
- package/dist/services/ai/providerFactory.js.map +1 -0
- package/dist/services/ai/schemas.d.ts +331 -0
- package/dist/services/ai/schemas.d.ts.map +1 -0
- package/dist/services/ai/schemas.js +236 -0
- package/dist/services/ai/schemas.js.map +1 -0
- package/dist/services/ai/tools/analyzeSymbolsTool.d.ts +33 -0
- package/dist/services/ai/tools/analyzeSymbolsTool.d.ts.map +1 -0
- package/dist/services/ai/tools/analyzeSymbolsTool.js +57 -0
- package/dist/services/ai/tools/analyzeSymbolsTool.js.map +1 -0
- package/dist/services/ai/tools/checkScaffoldingTool.d.ts +18 -0
- package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +1 -0
- package/dist/services/ai/tools/checkScaffoldingTool.js +86 -0
- package/dist/services/ai/tools/checkScaffoldingTool.js.map +1 -0
- package/dist/services/ai/tools/fillScaffoldingTool.d.ts +38 -0
- package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +1 -0
- package/dist/services/ai/tools/fillScaffoldingTool.js +259 -0
- package/dist/services/ai/tools/fillScaffoldingTool.js.map +1 -0
- package/dist/services/ai/tools/getFileStructureTool.d.ts +29 -0
- package/dist/services/ai/tools/getFileStructureTool.d.ts.map +1 -0
- package/dist/services/ai/tools/getFileStructureTool.js +48 -0
- package/dist/services/ai/tools/getFileStructureTool.js.map +1 -0
- package/dist/services/ai/tools/index.d.ts +20 -0
- package/dist/services/ai/tools/index.d.ts.map +1 -0
- package/dist/services/ai/tools/index.js +62 -0
- package/dist/services/ai/tools/index.js.map +1 -0
- package/dist/services/ai/tools/initializeContextTool.d.ts +25 -0
- package/dist/services/ai/tools/initializeContextTool.d.ts.map +1 -0
- package/dist/services/ai/tools/initializeContextTool.js +121 -0
- package/dist/services/ai/tools/initializeContextTool.js.map +1 -0
- package/dist/services/ai/tools/listFilesTool.d.ts +18 -0
- package/dist/services/ai/tools/listFilesTool.d.ts.map +1 -0
- package/dist/services/ai/tools/listFilesTool.js +34 -0
- package/dist/services/ai/tools/listFilesTool.js.map +1 -0
- package/dist/services/ai/tools/readFileTool.d.ts +17 -0
- package/dist/services/ai/tools/readFileTool.d.ts.map +1 -0
- package/dist/services/ai/tools/readFileTool.js +63 -0
- package/dist/services/ai/tools/readFileTool.js.map +1 -0
- package/dist/services/ai/tools/scaffoldPlanTool.d.ts +19 -0
- package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +1 -0
- package/dist/services/ai/tools/scaffoldPlanTool.js +81 -0
- package/dist/services/ai/tools/scaffoldPlanTool.js.map +1 -0
- package/dist/services/ai/tools/searchCodeTool.d.ts +25 -0
- package/dist/services/ai/tools/searchCodeTool.d.ts.map +1 -0
- package/dist/services/ai/tools/searchCodeTool.js +96 -0
- package/dist/services/ai/tools/searchCodeTool.js.map +1 -0
- package/dist/services/fill/fillService.d.ts +11 -1
- package/dist/services/fill/fillService.d.ts.map +1 -1
- package/dist/services/fill/fillService.js +151 -39
- package/dist/services/fill/fillService.js.map +1 -1
- package/dist/services/init/initService.d.ts +1 -0
- package/dist/services/init/initService.d.ts.map +1 -1
- package/dist/services/init/initService.js +12 -7
- package/dist/services/init/initService.js.map +1 -1
- package/dist/services/llmClientFactory.d.ts +36 -2
- package/dist/services/llmClientFactory.d.ts.map +1 -1
- package/dist/services/llmClientFactory.js +57 -11
- package/dist/services/llmClientFactory.js.map +1 -1
- package/dist/services/mcp/index.d.ts +2 -0
- package/dist/services/mcp/index.d.ts.map +1 -0
- package/dist/services/mcp/index.js +7 -0
- package/dist/services/mcp/index.js.map +1 -0
- package/dist/services/mcp/mcpServer.d.ts +45 -0
- package/dist/services/mcp/mcpServer.d.ts.map +1 -0
- package/dist/services/mcp/mcpServer.js +371 -0
- package/dist/services/mcp/mcpServer.js.map +1 -0
- package/dist/services/openRouterClient.js +1 -1
- package/dist/services/openRouterClient.js.map +1 -1
- package/dist/services/passthrough/commandRouter.d.ts +53 -0
- package/dist/services/passthrough/commandRouter.d.ts.map +1 -0
- package/dist/services/passthrough/commandRouter.js +349 -0
- package/dist/services/passthrough/commandRouter.js.map +1 -0
- package/dist/services/passthrough/index.d.ts +7 -0
- package/dist/services/passthrough/index.d.ts.map +1 -0
- package/dist/services/passthrough/index.js +23 -0
- package/dist/services/passthrough/index.js.map +1 -0
- package/dist/services/passthrough/protocol.d.ts +269 -0
- package/dist/services/passthrough/protocol.d.ts.map +1 -0
- package/dist/services/passthrough/protocol.js +151 -0
- package/dist/services/passthrough/protocol.js.map +1 -0
- package/dist/services/passthrough/stdinReader.d.ts +42 -0
- package/dist/services/passthrough/stdinReader.d.ts.map +1 -0
- package/dist/services/passthrough/stdinReader.js +111 -0
- package/dist/services/passthrough/stdinReader.js.map +1 -0
- package/dist/services/plan/planService.d.ts +3 -1
- package/dist/services/plan/planService.d.ts.map +1 -1
- package/dist/services/plan/planService.js +49 -41
- package/dist/services/plan/planService.js.map +1 -1
- package/dist/services/semantic/codebaseAnalyzer.d.ts +40 -0
- package/dist/services/semantic/codebaseAnalyzer.d.ts.map +1 -0
- package/dist/services/semantic/codebaseAnalyzer.js +540 -0
- package/dist/services/semantic/codebaseAnalyzer.js.map +1 -0
- package/dist/services/semantic/contextBuilder.d.ts +79 -0
- package/dist/services/semantic/contextBuilder.d.ts.map +1 -0
- package/dist/services/semantic/contextBuilder.js +538 -0
- package/dist/services/semantic/contextBuilder.js.map +1 -0
- package/dist/services/semantic/index.d.ts +12 -0
- package/dist/services/semantic/index.d.ts.map +1 -0
- package/dist/services/semantic/index.js +33 -0
- package/dist/services/semantic/index.js.map +1 -0
- package/dist/services/semantic/lsp/index.d.ts +2 -0
- package/dist/services/semantic/lsp/index.d.ts.map +1 -0
- package/dist/services/semantic/lsp/index.js +6 -0
- package/dist/services/semantic/lsp/index.js.map +1 -0
- package/dist/services/semantic/lsp/lspLayer.d.ts +32 -0
- package/dist/services/semantic/lsp/lspLayer.d.ts.map +1 -0
- package/dist/services/semantic/lsp/lspLayer.js +378 -0
- package/dist/services/semantic/lsp/lspLayer.js.map +1 -0
- package/dist/services/semantic/treeSitter/index.d.ts +2 -0
- package/dist/services/semantic/treeSitter/index.d.ts.map +1 -0
- package/dist/services/semantic/treeSitter/index.js +6 -0
- package/dist/services/semantic/treeSitter/index.js.map +1 -0
- package/dist/services/semantic/treeSitter/treeSitterLayer.d.ts +37 -0
- package/dist/services/semantic/treeSitter/treeSitterLayer.d.ts.map +1 -0
- package/dist/services/semantic/treeSitter/treeSitterLayer.js +518 -0
- package/dist/services/semantic/treeSitter/treeSitterLayer.js.map +1 -0
- package/dist/services/semantic/types.d.ts +122 -0
- package/dist/services/semantic/types.d.ts.map +1 -0
- package/dist/services/semantic/types.js +31 -0
- package/dist/services/semantic/types.js.map +1 -0
- package/dist/services/serve/index.d.ts +2 -0
- package/dist/services/serve/index.d.ts.map +1 -0
- package/dist/services/serve/index.js +6 -0
- package/dist/services/serve/index.js.map +1 -0
- package/dist/services/serve/serveService.d.ts +38 -0
- package/dist/services/serve/serveService.d.ts.map +1 -0
- package/dist/services/serve/serveService.js +99 -0
- package/dist/services/serve/serveService.js.map +1 -0
- package/dist/services/shared/llmConfig.d.ts +19 -3
- package/dist/services/shared/llmConfig.d.ts.map +1 -1
- package/dist/services/shared/llmConfig.js +39 -10
- package/dist/services/shared/llmConfig.js.map +1 -1
- package/dist/services/sync/index.d.ts +6 -0
- package/dist/services/sync/index.d.ts.map +1 -0
- package/dist/services/sync/index.js +16 -0
- package/dist/services/sync/index.js.map +1 -0
- package/dist/services/sync/markdownReferenceHandler.d.ts +3 -0
- package/dist/services/sync/markdownReferenceHandler.d.ts.map +1 -0
- package/dist/services/sync/markdownReferenceHandler.js +133 -0
- package/dist/services/sync/markdownReferenceHandler.js.map +1 -0
- package/dist/services/sync/presets.d.ts +6 -0
- package/dist/services/sync/presets.d.ts.map +1 -0
- package/dist/services/sync/presets.js +49 -0
- package/dist/services/sync/presets.js.map +1 -0
- package/dist/services/sync/symlinkHandler.d.ts +7 -0
- package/dist/services/sync/symlinkHandler.d.ts.map +1 -0
- package/dist/services/sync/symlinkHandler.js +129 -0
- package/dist/services/sync/symlinkHandler.js.map +1 -0
- package/dist/services/sync/syncService.d.ts +15 -0
- package/dist/services/sync/syncService.d.ts.map +1 -0
- package/dist/services/sync/syncService.js +222 -0
- package/dist/services/sync/syncService.js.map +1 -0
- package/dist/services/sync/types.d.ts +62 -0
- package/dist/services/sync/types.d.ts.map +1 -0
- package/dist/services/sync/types.js +3 -0
- package/dist/services/sync/types.js.map +1 -0
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cliUI.d.ts +33 -0
- package/dist/utils/cliUI.d.ts.map +1 -1
- package/dist/utils/cliUI.js +157 -107
- package/dist/utils/cliUI.js.map +1 -1
- package/dist/utils/contentSanitizer.d.ts +42 -0
- package/dist/utils/contentSanitizer.d.ts.map +1 -0
- package/dist/utils/contentSanitizer.js +238 -0
- package/dist/utils/contentSanitizer.js.map +1 -0
- package/dist/utils/gitService.d.ts.map +1 -1
- package/dist/utils/gitService.js +12 -14
- package/dist/utils/gitService.js.map +1 -1
- package/dist/utils/i18n.d.ts +87 -13
- package/dist/utils/i18n.d.ts.map +1 -1
- package/dist/utils/i18n.js +176 -28
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/prompts/configSummary.d.ts +7 -0
- package/dist/utils/prompts/configSummary.d.ts.map +1 -0
- package/dist/utils/prompts/configSummary.js +63 -0
- package/dist/utils/prompts/configSummary.js.map +1 -0
- package/dist/utils/prompts/index.d.ts +22 -0
- package/dist/utils/prompts/index.d.ts.map +1 -0
- package/dist/utils/prompts/index.js +122 -0
- package/dist/utils/prompts/index.js.map +1 -0
- package/dist/utils/prompts/llmPrompts.d.ts +11 -0
- package/dist/utils/prompts/llmPrompts.d.ts.map +1 -0
- package/dist/utils/prompts/llmPrompts.js +96 -0
- package/dist/utils/prompts/llmPrompts.js.map +1 -0
- package/dist/utils/prompts/smartDefaults.d.ts +15 -0
- package/dist/utils/prompts/smartDefaults.d.ts.map +1 -0
- package/dist/utils/prompts/smartDefaults.js +105 -0
- package/dist/utils/prompts/smartDefaults.js.map +1 -0
- package/dist/utils/prompts/types.d.ts +38 -0
- package/dist/utils/prompts/types.d.ts.map +1 -0
- package/dist/utils/prompts/types.js +3 -0
- package/dist/utils/prompts/types.js.map +1 -0
- package/dist/utils/theme.d.ts +66 -0
- package/dist/utils/theme.d.ts.map +1 -0
- package/dist/utils/theme.js +93 -0
- package/dist/utils/theme.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/package.json +12 -2
- package/prompts/update_scaffold_prompt.md +14 -34
- package/dist/commands/shared/agents.d.ts +0 -2
- package/dist/commands/shared/agents.d.ts.map +0 -1
- package/dist/commands/shared/agents.js +0 -15
- package/dist/commands/shared/agents.js.map +0 -1
- package/dist/commands/shared/selection.d.ts +0 -12
- package/dist/commands/shared/selection.d.ts.map +0 -1
- package/dist/commands/shared/selection.js +0 -95
- package/dist/commands/shared/selection.js.map +0 -1
- package/dist/generators/documentation/templates/frontMatter.d.ts +0 -11
- package/dist/generators/documentation/templates/frontMatter.d.ts.map +0 -1
- package/dist/generators/documentation/templates/frontMatter.js +0 -29
- package/dist/generators/documentation/templates/frontMatter.js.map +0 -1
- package/dist/services/anthropicClient.d.ts +0 -12
- package/dist/services/anthropicClient.d.ts.map +0 -1
- package/dist/services/anthropicClient.js +0 -98
- package/dist/services/anthropicClient.js.map +0 -1
- package/dist/services/geminiClient.d.ts +0 -12
- package/dist/services/geminiClient.d.ts.map +0 -1
- package/dist/services/geminiClient.js +0 -96
- package/dist/services/geminiClient.js.map +0 -1
- package/dist/services/grokClient.d.ts +0 -12
- package/dist/services/grokClient.d.ts.map +0 -1
- package/dist/services/grokClient.js +0 -101
- package/dist/services/grokClient.js.map +0 -1
- package/dist/services/openaiClient.d.ts +0 -12
- package/dist/services/openaiClient.d.ts.map +0 -1
- package/dist/services/openaiClient.js +0 -98
- package/dist/services/openaiClient.js.map +0 -1
- package/dist/utils/pricing.d.ts +0 -14
- package/dist/utils/pricing.d.ts.map +0 -1
- package/dist/utils/pricing.js +0 -115
- package/dist/utils/pricing.js.map +0 -1
package/README.md
CHANGED
|
@@ -19,7 +19,12 @@ A lightweight CLI that scaffolds living documentation and AI-agent playbooks for
|
|
|
19
19
|
- 🤖 `agents/` folder containing playbooks for common engineering agents and a handy index
|
|
20
20
|
- 🔁 Repeatable scaffolding that you can re-run as the project evolves
|
|
21
21
|
- 🧭 Repository-aware templates that highlight top-level directories for quick orientation
|
|
22
|
-
- 🧠 AI-ready
|
|
22
|
+
- 🧠 AI-ready templates that assistants can update using the `fill` command
|
|
23
|
+
- 🌐 **Multi-provider support** for OpenAI, Anthropic, Google, and OpenRouter
|
|
24
|
+
- ⚡ **Semantic context mode** using Tree-sitter for token-efficient LLM calls
|
|
25
|
+
- 📊 **Real-time progress** showing agent activity and tool usage
|
|
26
|
+
- 🔌 **MCP Server** for seamless Claude Code integration
|
|
27
|
+
- 🔗 **Passthrough mode** for external AI agents via stdin/stdout JSON
|
|
23
28
|
|
|
24
29
|
## 📦 Installation
|
|
25
30
|
|
|
@@ -54,6 +59,15 @@ npx @ai-coders/context init ./my-repo agents --output ./knowledge-base
|
|
|
54
59
|
# Fill docs and agents with the repo context (preview the first 3 updates)
|
|
55
60
|
npx @ai-coders/context fill ./my-repo --output ./.context --limit 3
|
|
56
61
|
|
|
62
|
+
# Use a specific provider (OpenAI, Anthropic, Google, or OpenRouter)
|
|
63
|
+
npx @ai-coders/context fill ./my-repo --provider anthropic --model claude-sonnet-4-20250514
|
|
64
|
+
|
|
65
|
+
# Disable semantic mode for more thorough tool-based exploration
|
|
66
|
+
npx @ai-coders/context fill ./my-repo --no-semantic
|
|
67
|
+
|
|
68
|
+
# Specify languages for semantic analysis
|
|
69
|
+
npx @ai-coders/context fill ./my-repo --languages typescript,python,go
|
|
70
|
+
|
|
57
71
|
# Draft a collaboration plan seeded with agent and doc touchpoints
|
|
58
72
|
npx @ai-coders/context plan release-readiness --output ./.context
|
|
59
73
|
|
|
@@ -77,17 +91,91 @@ After running the command, inspect the generated structure:
|
|
|
77
91
|
└── ...
|
|
78
92
|
```
|
|
79
93
|
|
|
80
|
-
Customize the Markdown files to reflect your project
|
|
94
|
+
Customize the Markdown files to reflect your project's specifics and commit them alongside the code.
|
|
81
95
|
|
|
82
|
-
##
|
|
96
|
+
## 🌐 Multi-Provider Support
|
|
97
|
+
|
|
98
|
+
The `fill` and `plan` commands support multiple LLM providers:
|
|
99
|
+
|
|
100
|
+
| Provider | Models | Environment Variable |
|
|
101
|
+
|----------|--------|---------------------|
|
|
102
|
+
| OpenRouter | `x-ai/grok-4-fast`, `anthropic/claude-sonnet-4`, etc. | `OPENROUTER_API_KEY` |
|
|
103
|
+
| OpenAI | `gpt-4o`, `gpt-4-turbo`, etc. | `OPENAI_API_KEY` |
|
|
104
|
+
| Anthropic | `claude-sonnet-4-20250514`, `claude-opus-4-20250514`, etc. | `ANTHROPIC_API_KEY` |
|
|
105
|
+
| Google | `gemini-2.0-flash`, `gemini-1.5-pro`, etc. | `GOOGLE_API_KEY` |
|
|
106
|
+
|
|
107
|
+
The CLI auto-detects available API keys from environment variables. Override with `--provider` and `--model`:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Use Anthropic's Claude
|
|
111
|
+
ANTHROPIC_API_KEY=sk-... npx @ai-coders/context fill . --provider anthropic
|
|
112
|
+
|
|
113
|
+
# Use OpenAI's GPT-4
|
|
114
|
+
OPENAI_API_KEY=sk-... npx @ai-coders/context fill . --provider openai --model gpt-4o
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## ⚡ Semantic Context Mode
|
|
118
|
+
|
|
119
|
+
By default, the `fill` command uses **semantic context mode** which pre-computes codebase analysis using Tree-sitter before calling the LLM. This is:
|
|
120
|
+
|
|
121
|
+
- **Faster**: Single LLM call instead of multi-step tool exploration
|
|
122
|
+
- **Token-efficient**: Pre-computed context instead of back-and-forth tool calls
|
|
123
|
+
- **Consistent**: Same analysis applied to all files
|
|
124
|
+
|
|
125
|
+
To use the more thorough tool-based exploration (where the LLM explores the codebase step by step), use `--no-semantic`:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
npx @ai-coders/context fill . --no-semantic
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Language Selection
|
|
132
|
+
|
|
133
|
+
Specify which programming languages to analyze for semantic context:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Analyze only TypeScript and Python
|
|
137
|
+
npx @ai-coders/context fill . --languages typescript,python
|
|
138
|
+
|
|
139
|
+
# Default languages: typescript, javascript, python, go
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Supported languages: `typescript`, `javascript`, `python`, `go`, `rust`, `java`, `cpp`, `c_sharp`, `ruby`, `php`
|
|
143
|
+
|
|
144
|
+
### LSP Enhancement (Optional)
|
|
145
|
+
|
|
146
|
+
For deeper semantic analysis, the tool supports optional **LSP (Language Server Protocol)** integration. While Tree-sitter handles ~90% of the analysis with fast syntactic parsing, LSP provides additional semantic information when enabled:
|
|
83
147
|
|
|
84
|
-
|
|
148
|
+
| Feature | Tree-sitter | LSP |
|
|
149
|
+
|---------|-------------|-----|
|
|
150
|
+
| Symbol extraction | ✅ | - |
|
|
151
|
+
| Import/export analysis | ✅ | - |
|
|
152
|
+
| Type inference | - | ✅ |
|
|
153
|
+
| Interface implementations | - | ✅ |
|
|
154
|
+
| Cross-file references | - | ✅ |
|
|
155
|
+
| Definition resolution | - | ✅ |
|
|
85
156
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
157
|
+
**Usage:**
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# Enable LSP for fill command (disabled by default)
|
|
161
|
+
npx @ai-coders/context fill ./my-repo --lsp
|
|
162
|
+
|
|
163
|
+
# LSP is enabled by default for plan fill
|
|
164
|
+
npx @ai-coders/context plan my-plan --fill
|
|
165
|
+
|
|
166
|
+
# Disable LSP for plan fill
|
|
167
|
+
npx @ai-coders/context plan my-plan --fill --no-lsp
|
|
168
|
+
```
|
|
89
169
|
|
|
90
|
-
|
|
170
|
+
**Supported Language Servers:**
|
|
171
|
+
- TypeScript/JavaScript: `typescript-language-server`
|
|
172
|
+
- Python: `pylsp`
|
|
173
|
+
|
|
174
|
+
**Graceful Degradation:** If a language server is not installed, the analysis continues without LSP enhancement—no errors, no interruption.
|
|
175
|
+
|
|
176
|
+
## 🧠 Guided Updates for AI Assistants
|
|
177
|
+
|
|
178
|
+
Need help filling in the scaffold? Use [`prompts/update_scaffold_prompt.md`](./prompts/update_scaffold_prompt.md) as the canonical instruction set for any LLM or CLI agent. Share that prompt verbatim with your assistant to keep updates consistent across teams.
|
|
91
179
|
|
|
92
180
|
### Available Doc Guides & Agent Types
|
|
93
181
|
|
|
@@ -96,14 +184,6 @@ The scaffold includes the following guides and playbooks out of the box:
|
|
|
96
184
|
- Docs: `project-overview`, `architecture`, `development-workflow`, `testing-strategy`, `glossary`, `data-flow`, `security`, `tooling`
|
|
97
185
|
- Agents: `code-reviewer`, `bug-fixer`, `feature-developer`, `refactoring-specialist`, `test-writer`, `documentation-writer`, `performance-optimizer`, `security-auditor`, `backend-specialist`, `frontend-specialist`, `architect-specialist`
|
|
98
186
|
|
|
99
|
-
### AI Marker Reference
|
|
100
|
-
|
|
101
|
-
- `<!-- agent-update:start:section-id --> … <!-- agent-update:end -->` wrap the sections that AI assistants should rewrite with up-to-date project knowledge.
|
|
102
|
-
- `<!-- agent-fill:slot-id --> … <!-- /agent-fill -->` highlight inline placeholders that must be replaced with concrete details before removing the wrapper.
|
|
103
|
-
- `<!-- agent-readonly:context -->` flags guidance that should remain as-is; treat the adjacent content as instructions rather than editable prose.
|
|
104
|
-
|
|
105
|
-
When contributing, focus edits inside `agent-update` regions or `agent-fill` placeholders and leave `agent-readonly` guidance untouched unless you have explicit maintainer approval.
|
|
106
|
-
|
|
107
187
|
## 🛠 Commands
|
|
108
188
|
|
|
109
189
|
### `init`
|
|
@@ -120,6 +200,7 @@ Options:
|
|
|
120
200
|
-o, --output <dir> Output directory (default: ./.context)
|
|
121
201
|
--exclude <patterns...> Glob patterns to skip during the scan
|
|
122
202
|
--include <patterns...> Glob patterns to explicitly include
|
|
203
|
+
--no-semantic Disable semantic code analysis
|
|
123
204
|
-v, --verbose Print detailed progress information
|
|
124
205
|
-h, --help Display help for command
|
|
125
206
|
```
|
|
@@ -134,14 +215,19 @@ Options:
|
|
|
134
215
|
-o, --output <dir> Scaffold directory containing docs/ and agents/ (default: ./.context)
|
|
135
216
|
-k, --api-key <key> API key for the selected LLM provider
|
|
136
217
|
-m, --model <model> LLM model to use (default: x-ai/grok-4-fast)
|
|
137
|
-
-p, --provider <name> Provider
|
|
138
|
-
--base-url <url> Custom base URL for
|
|
218
|
+
-p, --provider <name> Provider: openrouter, openai, anthropic, or google
|
|
219
|
+
--base-url <url> Custom base URL for provider APIs
|
|
139
220
|
--prompt <file> Instruction prompt to follow (optional; uses bundled instructions when omitted)
|
|
140
221
|
--limit <number> Maximum number of files to update in one run
|
|
222
|
+
--no-semantic Disable semantic context mode (use tool-based exploration)
|
|
223
|
+
--languages <langs> Programming languages to analyze (e.g., typescript,python,go)
|
|
224
|
+
--exclude <patterns...> Glob patterns to exclude from repository analysis
|
|
225
|
+
--include <patterns...> Glob patterns to include during analysis
|
|
226
|
+
-v, --verbose Print detailed progress information
|
|
141
227
|
-h, --help Display help for command
|
|
142
228
|
```
|
|
143
229
|
|
|
144
|
-
Under the hood, the command
|
|
230
|
+
Under the hood, the command uses specialized agents (DocumentationAgent, PlaybookAgent) that analyze your codebase and generate context-aware documentation. Real-time progress is displayed showing which agent is working and what tools are being used.
|
|
145
231
|
|
|
146
232
|
### `plan`
|
|
147
233
|
Create a collaboration plan that links documentation guides and agent playbooks, or fill an existing plan with LLM assistance.
|
|
@@ -158,12 +244,14 @@ Options:
|
|
|
158
244
|
-r, --repo <path> Repository root to summarize for additional context (fill mode)
|
|
159
245
|
-k, --api-key <key> API key for the selected LLM provider (fill mode)
|
|
160
246
|
-m, --model <model> LLM model to use (default: x-ai/grok-4-fast)
|
|
161
|
-
-p, --provider <name> Provider
|
|
162
|
-
--base-url <url> Custom base URL for
|
|
247
|
+
-p, --provider <name> Provider: openrouter, openai, anthropic, or google
|
|
248
|
+
--base-url <url> Custom base URL for provider APIs
|
|
163
249
|
--prompt <file> Instruction prompt to follow (optional; uses bundled instructions when omitted)
|
|
164
250
|
--dry-run Preview changes without writing files
|
|
251
|
+
--no-semantic Disable semantic context mode
|
|
165
252
|
--include <patterns...> Glob patterns to include during repository analysis
|
|
166
253
|
--exclude <patterns...> Glob patterns to exclude from repository analysis
|
|
254
|
+
-v, --verbose Print detailed progress information
|
|
167
255
|
-h, --help Display help for command
|
|
168
256
|
```
|
|
169
257
|
|
|
@@ -171,7 +259,157 @@ In scaffold mode the command creates `.context/plans/<plan-name>.md`, keeps a `p
|
|
|
171
259
|
|
|
172
260
|
💡 Tip: run `npx @ai-coders/context` with no arguments to enter an interactive mode that guides you through scaffold and LLM-fill options.
|
|
173
261
|
|
|
174
|
-
Prefer driving the update elsewhere? Just grab [`prompts/update_scaffold_prompt.md`](./prompts/update_scaffold_prompt.md) and run it in your favorite playground or agent host. When you
|
|
262
|
+
Prefer driving the update elsewhere? Just grab [`prompts/update_scaffold_prompt.md`](./prompts/update_scaffold_prompt.md) and run it in your favorite playground or agent host. When you're ready to automate, drop your API key in `.env` (for example `OPENROUTER_API_KEY` and `OPENROUTER_MODEL`) and let `fill` handle the edits inline.
|
|
263
|
+
|
|
264
|
+
### `mcp`
|
|
265
|
+
Start an MCP (Model Context Protocol) server for Claude Code integration. This exposes code analysis tools and semantic context as MCP resources.
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
Usage: ai-context mcp
|
|
269
|
+
|
|
270
|
+
Options:
|
|
271
|
+
-r, --repo-path <path> Default repository path for tools
|
|
272
|
+
-v, --verbose Enable verbose logging to stderr
|
|
273
|
+
-h, --help Display help for command
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Available MCP Tools:**
|
|
277
|
+
- `readFile` - Read file contents from the filesystem
|
|
278
|
+
- `listFiles` - List files matching a glob pattern
|
|
279
|
+
- `analyzeSymbols` - Extract code symbols (classes, functions, interfaces) using Tree-sitter
|
|
280
|
+
- `getFileStructure` - Get the directory structure of a repository
|
|
281
|
+
- `searchCode` - Search for code patterns using regex
|
|
282
|
+
- `buildSemanticContext` - Build optimized semantic context for LLM prompts
|
|
283
|
+
- `checkScaffolding` - Check if `.context` scaffolding exists (returns granular status for docs, agents, plans)
|
|
284
|
+
- `initializeContext` - Initialize `.context` scaffolding (create template files)
|
|
285
|
+
- `fillScaffolding` - Analyze codebase and generate content for each template file (AI agent writes the content)
|
|
286
|
+
- `scaffoldPlan` - Create a plan template in `.context/plans/`
|
|
287
|
+
|
|
288
|
+
**Available MCP Resources:**
|
|
289
|
+
- `context://codebase/{contextType}` - Semantic context (documentation, playbook, plan, compact)
|
|
290
|
+
- `file://{path}` - Read file contents
|
|
291
|
+
|
|
292
|
+
### `serve`
|
|
293
|
+
Start a passthrough server for external AI agents. Accepts JSON commands via stdin and responds via stdout.
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
Usage: ai-context serve
|
|
297
|
+
|
|
298
|
+
Options:
|
|
299
|
+
-r, --repo-path <path> Default repository path for tools
|
|
300
|
+
-f, --format <format> Output format: json or jsonl (default: jsonl)
|
|
301
|
+
-v, --verbose Enable verbose logging to stderr
|
|
302
|
+
-h, --help Display help for command
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**Available Methods:**
|
|
306
|
+
- `capabilities` - List server capabilities
|
|
307
|
+
- `tool.list` - List available tools
|
|
308
|
+
- `tool.call` - Execute a tool
|
|
309
|
+
- `context.build` - Build semantic context
|
|
310
|
+
- `agent.run` - Run an agent (requires LLM config)
|
|
311
|
+
|
|
312
|
+
## 🔌 Claude Code Integration (MCP)
|
|
313
|
+
|
|
314
|
+
The easiest way to use this package with Claude Code is through the MCP server. Add the following to your Claude Code settings:
|
|
315
|
+
|
|
316
|
+
**~/.claude/settings.json:**
|
|
317
|
+
```json
|
|
318
|
+
{
|
|
319
|
+
"mcpServers": {
|
|
320
|
+
"ai-context": {
|
|
321
|
+
"command": "npx",
|
|
322
|
+
"args": ["@ai-coders/context", "mcp", "-r", "/path/to/your/repo"]
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Once configured, Claude Code will have access to all code analysis tools:
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
# Claude Code can now use these tools:
|
|
332
|
+
- readFile: Read any file in your repository
|
|
333
|
+
- listFiles: Find files by glob patterns
|
|
334
|
+
- analyzeSymbols: Extract code structure with Tree-sitter
|
|
335
|
+
- searchCode: Search for patterns across the codebase
|
|
336
|
+
- buildSemanticContext: Get optimized context for any task
|
|
337
|
+
- checkScaffolding: Check if .context scaffolding exists
|
|
338
|
+
- initializeContext: Create scaffolding templates
|
|
339
|
+
- fillScaffolding: Generate content for templates
|
|
340
|
+
- scaffoldPlan: Create plan templates
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### Example MCP Usage in Claude Code
|
|
344
|
+
|
|
345
|
+
When working with Claude Code, you can ask it to:
|
|
346
|
+
|
|
347
|
+
- "Use the ai-context tools to analyze the authentication module"
|
|
348
|
+
- "Build a semantic context for the src/services directory"
|
|
349
|
+
- "List all TypeScript files in the project and analyze their exports"
|
|
350
|
+
|
|
351
|
+
## 🔗 External AI Agent Integration (Passthrough)
|
|
352
|
+
|
|
353
|
+
For AI agents that don't support MCP, use the passthrough server with JSON communication:
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
# Start the server
|
|
357
|
+
npx @ai-coders/context serve -r ./my-project
|
|
358
|
+
|
|
359
|
+
# Send commands via stdin
|
|
360
|
+
echo '{"id":"1","method":"capabilities"}' | npx @ai-coders/context serve
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
**Example: List files**
|
|
364
|
+
```bash
|
|
365
|
+
echo '{"id":"1","method":"tool.call","params":{"tool":"listFiles","args":{"pattern":"**/*.ts"}}}' \
|
|
366
|
+
| npx @ai-coders/context serve -r ./my-project
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
**Example: Build semantic context**
|
|
370
|
+
```bash
|
|
371
|
+
echo '{"id":"1","method":"context.build","params":{"repoPath":"./","contextType":"documentation"}}' \
|
|
372
|
+
| npx @ai-coders/context serve
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**Response format:**
|
|
376
|
+
```json
|
|
377
|
+
{
|
|
378
|
+
"id": "1",
|
|
379
|
+
"success": true,
|
|
380
|
+
"result": { /* tool output */ }
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**Notifications (streamed during execution):**
|
|
385
|
+
```json
|
|
386
|
+
{"type": "progress", "data": {"step": 1, "message": "Analyzing..."}}
|
|
387
|
+
{"type": "tool_call", "data": {"toolName": "readFile", "args": {"filePath": "..."}}}
|
|
388
|
+
{"type": "tool_result", "data": {"toolName": "readFile", "success": true}}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
## 🔧 Environment Variables
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
# Provider selection (auto-detected from available keys)
|
|
395
|
+
AI_CONTEXT_PROVIDER=openrouter|openai|anthropic|google
|
|
396
|
+
|
|
397
|
+
# API Keys (at least one required for fill/plan --fill)
|
|
398
|
+
OPENROUTER_API_KEY=...
|
|
399
|
+
OPENAI_API_KEY=...
|
|
400
|
+
ANTHROPIC_API_KEY=...
|
|
401
|
+
GOOGLE_API_KEY=...
|
|
402
|
+
|
|
403
|
+
# Optional model override per provider
|
|
404
|
+
OPENROUTER_MODEL=x-ai/grok-4-fast
|
|
405
|
+
OPENAI_MODEL=gpt-4o
|
|
406
|
+
ANTHROPIC_MODEL=claude-sonnet-4-20250514
|
|
407
|
+
GOOGLE_MODEL=gemini-2.0-flash
|
|
408
|
+
|
|
409
|
+
# CLI settings
|
|
410
|
+
AI_CONTEXT_LANG=en|pt-BR
|
|
411
|
+
AI_CONTEXT_DISABLE_UPDATE_CHECK=true
|
|
412
|
+
```
|
|
175
413
|
|
|
176
414
|
## 🧰 Local Development
|
|
177
415
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fragment Composition - Strategies for combining fragments
|
|
3
|
+
*/
|
|
4
|
+
import type { ContextFragment, CompositionOptions, FragmentStore } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Compose fragments into a coherent context using the specified strategy
|
|
7
|
+
*/
|
|
8
|
+
export declare function composeFragments(fragments: ContextFragment<unknown>[], options: CompositionOptions): ContextFragment<unknown>[];
|
|
9
|
+
/**
|
|
10
|
+
* Create a composition pipeline helper
|
|
11
|
+
*/
|
|
12
|
+
export declare function createComposer(store: FragmentStore): {
|
|
13
|
+
/**
|
|
14
|
+
* Compose by priority (default)
|
|
15
|
+
*/
|
|
16
|
+
byPriority(maxTokens?: number): ContextFragment<unknown>[];
|
|
17
|
+
/**
|
|
18
|
+
* Compose by expanding from a seed
|
|
19
|
+
*/
|
|
20
|
+
expand(seed: string, depth?: number, maxTokens?: number): ContextFragment<unknown>[];
|
|
21
|
+
/**
|
|
22
|
+
* Compose by task relevance
|
|
23
|
+
*/
|
|
24
|
+
forTask(task: string, maxTokens?: number): ContextFragment<unknown>[];
|
|
25
|
+
/**
|
|
26
|
+
* Get essential context (project overview + high priority)
|
|
27
|
+
*/
|
|
28
|
+
essential(maxTokens?: number): ContextFragment<unknown>[];
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/fragments/compose.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAElB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,EACrC,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CAAC,OAAO,CAAC,EAAE,CAW5B;AA6QD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa;IAE/C;;OAEG;2BACoB,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;IAO1D;;OAEG;iBACU,MAAM,UAAU,MAAM,cAAc,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;IASpF;;OAEG;kBACW,MAAM,cAAc,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;IAQrE;;OAEG;0BACmB,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;EAe5D"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fragment Composition - Strategies for combining fragments
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.composeFragments = composeFragments;
|
|
7
|
+
exports.createComposer = createComposer;
|
|
8
|
+
/**
|
|
9
|
+
* Compose fragments into a coherent context using the specified strategy
|
|
10
|
+
*/
|
|
11
|
+
function composeFragments(fragments, options) {
|
|
12
|
+
switch (options.strategy) {
|
|
13
|
+
case 'priority':
|
|
14
|
+
return composePriority(fragments, options);
|
|
15
|
+
case 'expand':
|
|
16
|
+
return composeExpand(fragments, options);
|
|
17
|
+
case 'task':
|
|
18
|
+
return composeTask(fragments, options);
|
|
19
|
+
default:
|
|
20
|
+
return composePriority(fragments, options);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Priority-based composition: sort by priority, limit by tokens
|
|
25
|
+
*/
|
|
26
|
+
function composePriority(fragments, options) {
|
|
27
|
+
// Sort by priority (highest first)
|
|
28
|
+
const sorted = [...fragments].sort((a, b) => b.meta.priority - a.meta.priority);
|
|
29
|
+
if (!options.maxTokens) {
|
|
30
|
+
return sorted;
|
|
31
|
+
}
|
|
32
|
+
// Estimate tokens and cut off
|
|
33
|
+
return limitByTokens(sorted, options.maxTokens);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Graph expansion: start from a seed symbol/file, expand to related fragments
|
|
37
|
+
*/
|
|
38
|
+
function composeExpand(fragments, options) {
|
|
39
|
+
const seed = options.seed;
|
|
40
|
+
const depth = options.depth || 2;
|
|
41
|
+
if (!seed) {
|
|
42
|
+
return composePriority(fragments, options);
|
|
43
|
+
}
|
|
44
|
+
const result = [];
|
|
45
|
+
const visited = new Set();
|
|
46
|
+
const queue = [];
|
|
47
|
+
// Find seed fragments
|
|
48
|
+
const seedFragments = fragments.filter((f) => f.refs.symbols.includes(seed) ||
|
|
49
|
+
f.refs.files.some((file) => file.includes(seed)) ||
|
|
50
|
+
f.data &&
|
|
51
|
+
typeof f.data === 'object' &&
|
|
52
|
+
'name' in f.data &&
|
|
53
|
+
f.data.name === seed);
|
|
54
|
+
for (const fragment of seedFragments) {
|
|
55
|
+
queue.push({ fragment, level: 0 });
|
|
56
|
+
}
|
|
57
|
+
while (queue.length > 0) {
|
|
58
|
+
const { fragment, level } = queue.shift();
|
|
59
|
+
if (visited.has(fragment.id))
|
|
60
|
+
continue;
|
|
61
|
+
visited.add(fragment.id);
|
|
62
|
+
result.push(fragment);
|
|
63
|
+
if (level >= depth)
|
|
64
|
+
continue;
|
|
65
|
+
// Find related fragments
|
|
66
|
+
const related = findRelatedFragments(fragment, fragments, visited);
|
|
67
|
+
for (const relFragment of related) {
|
|
68
|
+
queue.push({ fragment: relFragment, level: level + 1 });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Sort by priority within result
|
|
72
|
+
result.sort((a, b) => b.meta.priority - a.meta.priority);
|
|
73
|
+
if (options.maxTokens) {
|
|
74
|
+
return limitByTokens(result, options.maxTokens);
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Task-based composition: select fragments relevant to a task description
|
|
80
|
+
*/
|
|
81
|
+
function composeTask(fragments, options) {
|
|
82
|
+
const task = options.task;
|
|
83
|
+
if (!task) {
|
|
84
|
+
return composePriority(fragments, options);
|
|
85
|
+
}
|
|
86
|
+
// Extract keywords from task
|
|
87
|
+
const keywords = extractKeywords(task);
|
|
88
|
+
// Score fragments by relevance to task
|
|
89
|
+
const scored = fragments.map((fragment) => ({
|
|
90
|
+
fragment,
|
|
91
|
+
score: scoreRelevance(fragment, keywords),
|
|
92
|
+
}));
|
|
93
|
+
// Sort by combined score (relevance + priority)
|
|
94
|
+
scored.sort((a, b) => {
|
|
95
|
+
const aTotal = a.score * 0.7 + a.fragment.meta.priority * 0.3;
|
|
96
|
+
const bTotal = b.score * 0.7 + b.fragment.meta.priority * 0.3;
|
|
97
|
+
return bTotal - aTotal;
|
|
98
|
+
});
|
|
99
|
+
const result = scored.map((s) => s.fragment);
|
|
100
|
+
if (options.maxTokens) {
|
|
101
|
+
return limitByTokens(result, options.maxTokens);
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Find fragments related to a given fragment
|
|
107
|
+
*/
|
|
108
|
+
function findRelatedFragments(fragment, allFragments, visited) {
|
|
109
|
+
const related = [];
|
|
110
|
+
// By referenced fragments
|
|
111
|
+
for (const refId of fragment.refs.fragments) {
|
|
112
|
+
const refFragment = allFragments.find((f) => f.id === refId && !visited.has(f.id));
|
|
113
|
+
if (refFragment) {
|
|
114
|
+
related.push(refFragment);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// By shared files
|
|
118
|
+
for (const file of fragment.refs.files) {
|
|
119
|
+
const fileFragments = allFragments.filter((f) => f.refs.files.includes(file) && !visited.has(f.id));
|
|
120
|
+
related.push(...fileFragments);
|
|
121
|
+
}
|
|
122
|
+
// By shared symbols
|
|
123
|
+
for (const symbol of fragment.refs.symbols) {
|
|
124
|
+
const symbolFragments = allFragments.filter((f) => (f.refs.symbols.includes(symbol) ||
|
|
125
|
+
(f.data &&
|
|
126
|
+
typeof f.data === 'object' &&
|
|
127
|
+
'name' in f.data &&
|
|
128
|
+
f.data.name === symbol)) &&
|
|
129
|
+
!visited.has(f.id));
|
|
130
|
+
related.push(...symbolFragments);
|
|
131
|
+
}
|
|
132
|
+
// Deduplicate
|
|
133
|
+
const uniqueIds = new Set();
|
|
134
|
+
return related.filter((f) => {
|
|
135
|
+
if (uniqueIds.has(f.id))
|
|
136
|
+
return false;
|
|
137
|
+
uniqueIds.add(f.id);
|
|
138
|
+
return true;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Extract keywords from a task description
|
|
143
|
+
*/
|
|
144
|
+
function extractKeywords(task) {
|
|
145
|
+
const stopWords = new Set([
|
|
146
|
+
'a', 'an', 'the', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
|
|
147
|
+
'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
|
|
148
|
+
'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'to', 'of',
|
|
149
|
+
'in', 'for', 'on', 'with', 'at', 'by', 'from', 'up', 'about', 'into',
|
|
150
|
+
'through', 'during', 'before', 'after', 'above', 'below', 'between',
|
|
151
|
+
'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when',
|
|
152
|
+
'where', 'why', 'how', 'all', 'each', 'few', 'more', 'most', 'other',
|
|
153
|
+
'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than',
|
|
154
|
+
'too', 'very', 'just', 'and', 'but', 'if', 'or', 'because', 'as', 'until',
|
|
155
|
+
'while', 'this', 'that', 'these', 'those', 'i', 'me', 'my', 'we', 'our',
|
|
156
|
+
'you', 'your', 'it', 'its', 'add', 'create', 'new', 'implement', 'fix',
|
|
157
|
+
'update', 'change', 'modify', 'help', 'want', 'make', 'get', 'set',
|
|
158
|
+
]);
|
|
159
|
+
return task
|
|
160
|
+
.toLowerCase()
|
|
161
|
+
.replace(/[^a-z0-9\s]/g, ' ')
|
|
162
|
+
.split(/\s+/)
|
|
163
|
+
.filter((word) => word.length > 2 && !stopWords.has(word));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Score a fragment's relevance to keywords
|
|
167
|
+
*/
|
|
168
|
+
function scoreRelevance(fragment, keywords) {
|
|
169
|
+
let score = 0;
|
|
170
|
+
const textToSearch = [
|
|
171
|
+
fragment.summary || '',
|
|
172
|
+
fragment.type,
|
|
173
|
+
...fragment.meta.tags,
|
|
174
|
+
...fragment.refs.symbols,
|
|
175
|
+
...(fragment.data && typeof fragment.data === 'object'
|
|
176
|
+
? Object.values(fragment.data)
|
|
177
|
+
.filter((v) => typeof v === 'string')
|
|
178
|
+
.map((v) => v)
|
|
179
|
+
: []),
|
|
180
|
+
]
|
|
181
|
+
.join(' ')
|
|
182
|
+
.toLowerCase();
|
|
183
|
+
for (const keyword of keywords) {
|
|
184
|
+
if (textToSearch.includes(keyword)) {
|
|
185
|
+
score += 1;
|
|
186
|
+
// Bonus for exact symbol match
|
|
187
|
+
if (fragment.refs.symbols.some((s) => s.toLowerCase() === keyword)) {
|
|
188
|
+
score += 2;
|
|
189
|
+
}
|
|
190
|
+
// Bonus for type match
|
|
191
|
+
if (fragment.type.includes(keyword)) {
|
|
192
|
+
score += 1;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Normalize by keyword count
|
|
197
|
+
return keywords.length > 0 ? score / keywords.length : 0;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Limit fragments by estimated token count
|
|
201
|
+
*/
|
|
202
|
+
function limitByTokens(fragments, maxTokens) {
|
|
203
|
+
const result = [];
|
|
204
|
+
let totalTokens = 0;
|
|
205
|
+
for (const fragment of fragments) {
|
|
206
|
+
const tokens = estimateTokens(fragment);
|
|
207
|
+
if (totalTokens + tokens > maxTokens) {
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
result.push(fragment);
|
|
211
|
+
totalTokens += tokens;
|
|
212
|
+
}
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Estimate token count for a fragment (rough approximation)
|
|
217
|
+
*/
|
|
218
|
+
function estimateTokens(fragment) {
|
|
219
|
+
const json = JSON.stringify(fragment);
|
|
220
|
+
// Rough estimate: ~4 chars per token
|
|
221
|
+
return Math.ceil(json.length / 4);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Create a composition pipeline helper
|
|
225
|
+
*/
|
|
226
|
+
function createComposer(store) {
|
|
227
|
+
return {
|
|
228
|
+
/**
|
|
229
|
+
* Compose by priority (default)
|
|
230
|
+
*/
|
|
231
|
+
byPriority(maxTokens) {
|
|
232
|
+
return composeFragments(store.all(), {
|
|
233
|
+
strategy: 'priority',
|
|
234
|
+
maxTokens,
|
|
235
|
+
});
|
|
236
|
+
},
|
|
237
|
+
/**
|
|
238
|
+
* Compose by expanding from a seed
|
|
239
|
+
*/
|
|
240
|
+
expand(seed, depth, maxTokens) {
|
|
241
|
+
return composeFragments(store.all(), {
|
|
242
|
+
strategy: 'expand',
|
|
243
|
+
seed,
|
|
244
|
+
depth,
|
|
245
|
+
maxTokens,
|
|
246
|
+
});
|
|
247
|
+
},
|
|
248
|
+
/**
|
|
249
|
+
* Compose by task relevance
|
|
250
|
+
*/
|
|
251
|
+
forTask(task, maxTokens) {
|
|
252
|
+
return composeFragments(store.all(), {
|
|
253
|
+
strategy: 'task',
|
|
254
|
+
task,
|
|
255
|
+
maxTokens,
|
|
256
|
+
});
|
|
257
|
+
},
|
|
258
|
+
/**
|
|
259
|
+
* Get essential context (project overview + high priority)
|
|
260
|
+
*/
|
|
261
|
+
essential(maxTokens) {
|
|
262
|
+
const essential = store
|
|
263
|
+
.all()
|
|
264
|
+
.filter((f) => f.type === 'project-overview' ||
|
|
265
|
+
f.meta.tags.includes('essential') ||
|
|
266
|
+
f.meta.priority >= 8);
|
|
267
|
+
return composeFragments(essential, {
|
|
268
|
+
strategy: 'priority',
|
|
269
|
+
maxTokens,
|
|
270
|
+
});
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/fragments/compose.ts"],"names":[],"mappings":"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"}
|