@ai-coders/context 0.6.0 → 0.7.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 +125 -68
- package/dist/commands/export.d.ts +4 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +39 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/fill.d.ts +13 -0
- package/dist/commands/fill.d.ts.map +1 -0
- package/dist/commands/fill.js +65 -0
- package/dist/commands/fill.js.map +1 -0
- package/dist/commands/index.d.ts +29 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +74 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +64 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +92 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/plan.d.ts +9 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +126 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/report.d.ts +4 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +36 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/serve.d.ts +4 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +29 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/skill.d.ts +4 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +217 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/start.d.ts +4 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +56 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/sync.d.ts +9 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +134 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/types.d.ts +17 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +3 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +111 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/workflow.d.ts +4 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +171 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/generators/agents/agentGenerator.d.ts +2 -0
- package/dist/generators/agents/agentGenerator.d.ts.map +1 -1
- package/dist/generators/agents/agentGenerator.js +46 -2
- package/dist/generators/agents/agentGenerator.js.map +1 -1
- package/dist/generators/agents/templates/index.d.ts +0 -1
- package/dist/generators/agents/templates/index.d.ts.map +1 -1
- package/dist/generators/agents/templates/index.js +1 -3
- package/dist/generators/agents/templates/index.js.map +1 -1
- package/dist/generators/agents/templates/playbookTemplate.d.ts.map +1 -1
- package/dist/generators/agents/templates/playbookTemplate.js +11 -0
- package/dist/generators/agents/templates/playbookTemplate.js.map +1 -1
- package/dist/generators/documentation/documentationGenerator.d.ts +2 -1
- package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -1
- package/dist/generators/documentation/documentationGenerator.js +53 -34
- package/dist/generators/documentation/documentationGenerator.js.map +1 -1
- package/dist/generators/documentation/templates/apiReferenceTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/apiReferenceTemplate.js +11 -0
- package/dist/generators/documentation/templates/apiReferenceTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/architectureTemplate.d.ts +11 -0
- package/dist/generators/documentation/templates/architectureTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/architectureTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/dataFlowTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/dataFlowTemplate.js +11 -0
- 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 +11 -0
- package/dist/generators/documentation/templates/developmentWorkflowTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/glossaryTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/glossaryTemplate.js.map +1 -1
- package/dist/generators/documentation/templates/index.d.ts +0 -12
- package/dist/generators/documentation/templates/index.d.ts.map +1 -1
- package/dist/generators/documentation/templates/index.js +1 -25
- package/dist/generators/documentation/templates/index.js.map +1 -1
- package/dist/generators/documentation/templates/migrationTemplate.d.ts.map +1 -1
- package/dist/generators/documentation/templates/migrationTemplate.js +11 -0
- 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 +11 -0
- 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 +11 -0
- 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 +11 -0
- 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 +11 -0
- 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 +11 -0
- 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 +11 -0
- package/dist/generators/documentation/templates/troubleshootingTemplate.js.map +1 -1
- package/dist/generators/plans/templates/planTemplate.d.ts +11 -0
- package/dist/generators/plans/templates/planTemplate.d.ts.map +1 -1
- package/dist/generators/plans/templates/planTemplate.js.map +1 -1
- package/dist/generators/shared/index.d.ts +1 -0
- package/dist/generators/shared/index.d.ts.map +1 -1
- package/dist/generators/shared/index.js +16 -0
- package/dist/generators/shared/index.js.map +1 -1
- package/dist/generators/shared/scaffoldStructures.d.ts +13 -0
- package/dist/generators/shared/scaffoldStructures.d.ts.map +1 -0
- package/dist/generators/shared/scaffoldStructures.js +30 -0
- package/dist/generators/shared/scaffoldStructures.js.map +1 -0
- package/dist/generators/shared/structures/agents/definitions.d.ts +18 -0
- package/dist/generators/shared/structures/agents/definitions.d.ts.map +1 -0
- package/dist/generators/shared/structures/agents/definitions.js +22 -0
- package/dist/generators/shared/structures/agents/definitions.js.map +1 -0
- package/dist/generators/shared/structures/agents/factory.d.ts +9 -0
- package/dist/generators/shared/structures/agents/factory.d.ts.map +1 -0
- package/dist/generators/shared/structures/agents/factory.js +112 -0
- package/dist/generators/shared/structures/agents/factory.js.map +1 -0
- package/dist/generators/shared/structures/agents/index.d.ts +6 -0
- package/dist/generators/shared/structures/agents/index.d.ts.map +1 -0
- package/dist/generators/shared/structures/agents/index.js +24 -0
- package/dist/generators/shared/structures/agents/index.js.map +1 -0
- package/dist/generators/shared/structures/documentation/apiReference.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/apiReference.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/apiReference.js +100 -0
- package/dist/generators/shared/structures/documentation/apiReference.js.map +1 -0
- package/dist/generators/shared/structures/documentation/architecture.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/architecture.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/architecture.js +121 -0
- package/dist/generators/shared/structures/documentation/architecture.js.map +1 -0
- package/dist/generators/shared/structures/documentation/dataFlow.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/dataFlow.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/dataFlow.js +72 -0
- package/dist/generators/shared/structures/documentation/dataFlow.js.map +1 -0
- package/dist/generators/shared/structures/documentation/glossary.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/glossary.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/glossary.js +71 -0
- package/dist/generators/shared/structures/documentation/glossary.js.map +1 -0
- package/dist/generators/shared/structures/documentation/index.d.ts +16 -0
- package/dist/generators/shared/structures/documentation/index.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/index.js +31 -0
- package/dist/generators/shared/structures/documentation/index.js.map +1 -0
- package/dist/generators/shared/structures/documentation/migration.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/migration.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/migration.js +113 -0
- package/dist/generators/shared/structures/documentation/migration.js.map +1 -0
- package/dist/generators/shared/structures/documentation/onboarding.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/onboarding.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/onboarding.js +99 -0
- package/dist/generators/shared/structures/documentation/onboarding.js.map +1 -0
- package/dist/generators/shared/structures/documentation/projectOverview.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/projectOverview.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/projectOverview.js +115 -0
- package/dist/generators/shared/structures/documentation/projectOverview.js.map +1 -0
- package/dist/generators/shared/structures/documentation/security.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/security.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/security.js +55 -0
- package/dist/generators/shared/structures/documentation/security.js.map +1 -0
- package/dist/generators/shared/structures/documentation/testing.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/testing.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/testing.js +57 -0
- package/dist/generators/shared/structures/documentation/testing.js.map +1 -0
- package/dist/generators/shared/structures/documentation/tooling.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/tooling.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/tooling.js +55 -0
- package/dist/generators/shared/structures/documentation/tooling.js.map +1 -0
- package/dist/generators/shared/structures/documentation/troubleshooting.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/troubleshooting.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/troubleshooting.js +91 -0
- package/dist/generators/shared/structures/documentation/troubleshooting.js.map +1 -0
- package/dist/generators/shared/structures/documentation/workflow.d.ts +3 -0
- package/dist/generators/shared/structures/documentation/workflow.d.ts.map +1 -0
- package/dist/generators/shared/structures/documentation/workflow.js +56 -0
- package/dist/generators/shared/structures/documentation/workflow.js.map +1 -0
- package/dist/generators/shared/structures/index.d.ts +15 -0
- package/dist/generators/shared/structures/index.d.ts.map +1 -0
- package/dist/generators/shared/structures/index.js +37 -0
- package/dist/generators/shared/structures/index.js.map +1 -0
- package/dist/generators/shared/structures/plans/index.d.ts +5 -0
- package/dist/generators/shared/structures/plans/index.d.ts.map +1 -0
- package/dist/generators/shared/structures/plans/index.js +9 -0
- package/dist/generators/shared/structures/plans/index.js.map +1 -0
- package/dist/generators/shared/structures/plans/planStructure.d.ts +6 -0
- package/dist/generators/shared/structures/plans/planStructure.d.ts.map +1 -0
- package/dist/generators/shared/structures/plans/planStructure.js +65 -0
- package/dist/generators/shared/structures/plans/planStructure.js.map +1 -0
- package/dist/generators/shared/structures/registry.d.ts +18 -0
- package/dist/generators/shared/structures/registry.d.ts.map +1 -0
- package/dist/generators/shared/structures/registry.js +104 -0
- package/dist/generators/shared/structures/registry.js.map +1 -0
- package/dist/generators/shared/structures/serialization.d.ts +15 -0
- package/dist/generators/shared/structures/serialization.d.ts.map +1 -0
- package/dist/generators/shared/structures/serialization.js +119 -0
- package/dist/generators/shared/structures/serialization.js.map +1 -0
- package/dist/generators/shared/structures/skills/definitions.d.ts +14 -0
- package/dist/generators/shared/structures/skills/definitions.d.ts.map +1 -0
- package/dist/generators/shared/structures/skills/definitions.js +18 -0
- package/dist/generators/shared/structures/skills/definitions.js.map +1 -0
- package/dist/generators/shared/structures/skills/factory.d.ts +9 -0
- package/dist/generators/shared/structures/skills/factory.d.ts.map +1 -0
- package/dist/generators/shared/structures/skills/factory.js +56 -0
- package/dist/generators/shared/structures/skills/factory.js.map +1 -0
- package/dist/generators/shared/structures/skills/index.d.ts +6 -0
- package/dist/generators/shared/structures/skills/index.d.ts.map +1 -0
- package/dist/generators/shared/structures/skills/index.js +20 -0
- package/dist/generators/shared/structures/skills/index.js.map +1 -0
- package/dist/generators/shared/structures/types.d.ts +59 -0
- package/dist/generators/shared/structures/types.d.ts.map +1 -0
- package/dist/generators/shared/structures/types.js +6 -0
- package/dist/generators/shared/structures/types.js.map +1 -0
- package/dist/generators/shared/structures/validation.d.ts +13 -0
- package/dist/generators/shared/structures/validation.d.ts.map +1 -0
- package/dist/generators/shared/structures/validation.js +51 -0
- package/dist/generators/shared/structures/validation.js.map +1 -0
- package/dist/generators/skills/skillGenerator.d.ts +5 -0
- package/dist/generators/skills/skillGenerator.d.ts.map +1 -1
- package/dist/generators/skills/skillGenerator.js +26 -17
- package/dist/generators/skills/skillGenerator.js.map +1 -1
- package/dist/generators/skills/templates/skillTemplate.d.ts +10 -0
- package/dist/generators/skills/templates/skillTemplate.d.ts.map +1 -1
- package/dist/generators/skills/templates/skillTemplate.js +10 -0
- package/dist/generators/skills/templates/skillTemplate.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +203 -5
- package/dist/index.js.map +1 -1
- package/dist/prompts/defaults.d.ts +5 -0
- package/dist/prompts/defaults.d.ts.map +1 -1
- package/dist/prompts/defaults.js +44 -1
- package/dist/prompts/defaults.js.map +1 -1
- package/dist/services/ai/agents/documentationAgent.d.ts +2 -0
- package/dist/services/ai/agents/documentationAgent.d.ts.map +1 -1
- package/dist/services/ai/agents/documentationAgent.js +33 -9
- package/dist/services/ai/agents/documentationAgent.js.map +1 -1
- package/dist/services/ai/agents/playbookAgent.d.ts +2 -0
- package/dist/services/ai/agents/playbookAgent.d.ts.map +1 -1
- package/dist/services/ai/agents/playbookAgent.js +44 -19
- package/dist/services/ai/agents/playbookAgent.js.map +1 -1
- package/dist/services/ai/agents/skillAgent.d.ts +2 -0
- package/dist/services/ai/agents/skillAgent.d.ts.map +1 -1
- package/dist/services/ai/agents/skillAgent.js +54 -22
- package/dist/services/ai/agents/skillAgent.js.map +1 -1
- package/dist/services/ai/schemas.d.ts +138 -9
- package/dist/services/ai/schemas.d.ts.map +1 -1
- package/dist/services/ai/schemas.js +70 -5
- package/dist/services/ai/schemas.js.map +1 -1
- package/dist/services/ai/toolRegistry.d.ts.map +1 -1
- package/dist/services/ai/toolRegistry.js +25 -17
- package/dist/services/ai/toolRegistry.js.map +1 -1
- package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +1 -1
- package/dist/services/ai/tools/checkScaffoldingTool.js +4 -1
- package/dist/services/ai/tools/checkScaffoldingTool.js.map +1 -1
- package/dist/services/ai/tools/fillScaffoldingTool.d.ts +24 -9
- package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +1 -1
- package/dist/services/ai/tools/fillScaffoldingTool.js +46 -130
- package/dist/services/ai/tools/fillScaffoldingTool.js.map +1 -1
- package/dist/services/ai/tools/getCodebaseMapTool.d.ts +1 -1
- package/dist/services/ai/tools/getCodebaseMapTool.d.ts.map +1 -1
- package/dist/services/ai/tools/getCodebaseMapTool.js +4 -1
- package/dist/services/ai/tools/getCodebaseMapTool.js.map +1 -1
- package/dist/services/ai/tools/index.d.ts +1 -1
- package/dist/services/ai/tools/index.d.ts.map +1 -1
- package/dist/services/ai/tools/index.js +3 -1
- package/dist/services/ai/tools/index.js.map +1 -1
- package/dist/services/ai/tools/initializeContextTool.d.ts +109 -7
- package/dist/services/ai/tools/initializeContextTool.d.ts.map +1 -1
- package/dist/services/ai/tools/initializeContextTool.js +282 -17
- package/dist/services/ai/tools/initializeContextTool.js.map +1 -1
- package/dist/services/ai/tools/scaffoldPlanTool.d.ts +17 -1
- package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +1 -1
- package/dist/services/ai/tools/scaffoldPlanTool.js +94 -5
- package/dist/services/ai/tools/scaffoldPlanTool.js.map +1 -1
- package/dist/services/ai/tools/toolFactory.d.ts +35 -0
- package/dist/services/ai/tools/toolFactory.d.ts.map +1 -0
- package/dist/services/ai/tools/toolFactory.js +20 -0
- package/dist/services/ai/tools/toolFactory.js.map +1 -0
- package/dist/services/export/contextExportService.d.ts +45 -0
- package/dist/services/export/contextExportService.d.ts.map +1 -0
- package/dist/services/export/contextExportService.js +161 -0
- package/dist/services/export/contextExportService.js.map +1 -0
- package/dist/services/export/exportRulesService.d.ts +15 -1
- package/dist/services/export/exportRulesService.d.ts.map +1 -1
- package/dist/services/export/exportRulesService.js +100 -36
- package/dist/services/export/exportRulesService.js.map +1 -1
- package/dist/services/export/index.d.ts +2 -0
- package/dist/services/export/index.d.ts.map +1 -1
- package/dist/services/export/index.js +3 -1
- package/dist/services/export/index.js.map +1 -1
- package/dist/services/export/skillExportService.d.ts +6 -1
- package/dist/services/export/skillExportService.d.ts.map +1 -1
- package/dist/services/export/skillExportService.js +46 -22
- package/dist/services/export/skillExportService.js.map +1 -1
- package/dist/services/fill/fillService.d.ts.map +1 -1
- package/dist/services/fill/fillService.js +30 -3
- package/dist/services/fill/fillService.js.map +1 -1
- package/dist/services/fill/skillFillService.d.ts.map +1 -1
- package/dist/services/fill/skillFillService.js +8 -1
- package/dist/services/fill/skillFillService.js.map +1 -1
- package/dist/services/import/presets.d.ts +12 -0
- package/dist/services/import/presets.d.ts.map +1 -1
- package/dist/services/import/presets.js +32 -152
- package/dist/services/import/presets.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 +42 -9
- package/dist/services/init/initService.js.map +1 -1
- package/dist/services/mcp/actionLogger.d.ts +19 -0
- package/dist/services/mcp/actionLogger.d.ts.map +1 -0
- package/dist/services/mcp/actionLogger.js +128 -0
- package/dist/services/mcp/actionLogger.js.map +1 -0
- package/dist/services/mcp/gateway/agent.d.ts +17 -0
- package/dist/services/mcp/gateway/agent.d.ts.map +1 -0
- package/dist/services/mcp/gateway/agent.js +147 -0
- package/dist/services/mcp/gateway/agent.js.map +1 -0
- package/dist/services/mcp/gateway/context.d.ts +21 -0
- package/dist/services/mcp/gateway/context.d.ts.map +1 -0
- package/dist/services/mcp/gateway/context.js +249 -0
- package/dist/services/mcp/gateway/context.js.map +1 -0
- package/dist/services/mcp/gateway/explore.d.ts +16 -0
- package/dist/services/mcp/gateway/explore.d.ts.map +1 -0
- package/dist/services/mcp/gateway/explore.js +60 -0
- package/dist/services/mcp/gateway/explore.js.map +1 -0
- package/dist/services/mcp/gateway/index.d.ts +24 -0
- package/dist/services/mcp/gateway/index.d.ts.map +1 -0
- package/dist/services/mcp/gateway/index.js +53 -0
- package/dist/services/mcp/gateway/index.js.map +1 -0
- package/dist/services/mcp/gateway/metrics.d.ts +56 -0
- package/dist/services/mcp/gateway/metrics.d.ts.map +1 -0
- package/dist/services/mcp/gateway/metrics.js +153 -0
- package/dist/services/mcp/gateway/metrics.js.map +1 -0
- package/dist/services/mcp/gateway/plan.d.ts +18 -0
- package/dist/services/mcp/gateway/plan.d.ts.map +1 -0
- package/dist/services/mcp/gateway/plan.js +273 -0
- package/dist/services/mcp/gateway/plan.js.map +1 -0
- package/dist/services/mcp/gateway/project.d.ts +16 -0
- package/dist/services/mcp/gateway/project.d.ts.map +1 -0
- package/dist/services/mcp/gateway/project.js +149 -0
- package/dist/services/mcp/gateway/project.js.map +1 -0
- package/dist/services/mcp/gateway/projectReport.d.ts +20 -0
- package/dist/services/mcp/gateway/projectReport.d.ts.map +1 -0
- package/dist/services/mcp/gateway/projectReport.js +61 -0
- package/dist/services/mcp/gateway/projectReport.js.map +1 -0
- package/dist/services/mcp/gateway/projectSetup.d.ts +29 -0
- package/dist/services/mcp/gateway/projectSetup.d.ts.map +1 -0
- package/dist/services/mcp/gateway/projectSetup.js +141 -0
- package/dist/services/mcp/gateway/projectSetup.js.map +1 -0
- package/dist/services/mcp/gateway/response.d.ts +45 -0
- package/dist/services/mcp/gateway/response.d.ts.map +1 -0
- package/dist/services/mcp/gateway/response.js +111 -0
- package/dist/services/mcp/gateway/response.js.map +1 -0
- package/dist/services/mcp/gateway/shared.d.ts +38 -0
- package/dist/services/mcp/gateway/shared.d.ts.map +1 -0
- package/dist/services/mcp/gateway/shared.js +39 -0
- package/dist/services/mcp/gateway/shared.js.map +1 -0
- package/dist/services/mcp/gateway/skill.d.ts +17 -0
- package/dist/services/mcp/gateway/skill.d.ts.map +1 -0
- package/dist/services/mcp/gateway/skill.js +323 -0
- package/dist/services/mcp/gateway/skill.js.map +1 -0
- package/dist/services/mcp/gateway/sync.d.ts +17 -0
- package/dist/services/mcp/gateway/sync.d.ts.map +1 -0
- package/dist/services/mcp/gateway/sync.js +219 -0
- package/dist/services/mcp/gateway/sync.js.map +1 -0
- package/dist/services/mcp/gateway/types.d.ts +116 -0
- package/dist/services/mcp/gateway/types.d.ts.map +1 -0
- package/dist/services/mcp/gateway/types.js +12 -0
- package/dist/services/mcp/gateway/types.js.map +1 -0
- package/dist/services/mcp/gateway/workflow.d.ts +18 -0
- package/dist/services/mcp/gateway/workflow.d.ts.map +1 -0
- package/dist/services/mcp/gateway/workflow.js +317 -0
- package/dist/services/mcp/gateway/workflow.js.map +1 -0
- package/dist/services/mcp/gateway/workflowAdvance.d.ts +25 -0
- package/dist/services/mcp/gateway/workflowAdvance.d.ts.map +1 -0
- package/dist/services/mcp/gateway/workflowAdvance.js +133 -0
- package/dist/services/mcp/gateway/workflowAdvance.js.map +1 -0
- package/dist/services/mcp/gateway/workflowInit.d.ts +28 -0
- package/dist/services/mcp/gateway/workflowInit.d.ts.map +1 -0
- package/dist/services/mcp/gateway/workflowInit.js +213 -0
- package/dist/services/mcp/gateway/workflowInit.js.map +1 -0
- package/dist/services/mcp/gateway/workflowManage.d.ts +31 -0
- package/dist/services/mcp/gateway/workflowManage.d.ts.map +1 -0
- package/dist/services/mcp/gateway/workflowManage.js +222 -0
- package/dist/services/mcp/gateway/workflowManage.js.map +1 -0
- package/dist/services/mcp/gateway/workflowStatus.d.ts +17 -0
- package/dist/services/mcp/gateway/workflowStatus.d.ts.map +1 -0
- package/dist/services/mcp/gateway/workflowStatus.js +91 -0
- package/dist/services/mcp/gateway/workflowStatus.js.map +1 -0
- package/dist/services/mcp/gatewayTools.d.ts +15 -0
- package/dist/services/mcp/gatewayTools.d.ts.map +1 -0
- package/dist/services/mcp/gatewayTools.js +38 -0
- package/dist/services/mcp/gatewayTools.js.map +1 -0
- package/dist/services/mcp/index.d.ts +7 -0
- package/dist/services/mcp/index.d.ts.map +1 -1
- package/dist/services/mcp/index.js +22 -1
- package/dist/services/mcp/index.js.map +1 -1
- package/dist/services/mcp/mcpInstallService.d.ts +56 -0
- package/dist/services/mcp/mcpInstallService.d.ts.map +1 -0
- package/dist/services/mcp/mcpInstallService.js +549 -0
- package/dist/services/mcp/mcpInstallService.js.map +1 -0
- package/dist/services/mcp/mcpServer.d.ts +45 -19
- package/dist/services/mcp/mcpServer.d.ts.map +1 -1
- package/dist/services/mcp/mcpServer.js +637 -1696
- package/dist/services/mcp/mcpServer.js.map +1 -1
- package/dist/services/passthrough/protocol.d.ts +4 -4
- package/dist/services/qa/index.d.ts +9 -0
- package/dist/services/qa/index.d.ts.map +1 -0
- package/dist/services/qa/index.js +15 -0
- package/dist/services/qa/index.js.map +1 -0
- package/dist/services/qa/patternInferer.d.ts +41 -0
- package/dist/services/qa/patternInferer.d.ts.map +1 -0
- package/dist/services/qa/patternInferer.js +366 -0
- package/dist/services/qa/patternInferer.js.map +1 -0
- package/dist/services/qa/qaService.d.ts +107 -0
- package/dist/services/qa/qaService.d.ts.map +1 -0
- package/dist/services/qa/qaService.js +874 -0
- package/dist/services/qa/qaService.js.map +1 -0
- package/dist/services/qa/topicDetector.d.ts +54 -0
- package/dist/services/qa/topicDetector.d.ts.map +1 -0
- package/dist/services/qa/topicDetector.js +306 -0
- package/dist/services/qa/topicDetector.js.map +1 -0
- package/dist/services/quickSync/quickSyncService.d.ts.map +1 -1
- package/dist/services/quickSync/quickSyncService.js +6 -10
- package/dist/services/quickSync/quickSyncService.js.map +1 -1
- package/dist/services/reverseSync/importSkillsService.d.ts +47 -0
- package/dist/services/reverseSync/importSkillsService.d.ts.map +1 -0
- package/dist/services/reverseSync/importSkillsService.js +362 -0
- package/dist/services/reverseSync/importSkillsService.js.map +1 -0
- package/dist/services/reverseSync/index.d.ts +12 -0
- package/dist/services/reverseSync/index.d.ts.map +1 -0
- package/dist/services/reverseSync/index.js +49 -0
- package/dist/services/reverseSync/index.js.map +1 -0
- package/dist/services/reverseSync/presets.d.ts +51 -0
- package/dist/services/reverseSync/presets.d.ts.map +1 -0
- package/dist/services/reverseSync/presets.js +77 -0
- package/dist/services/reverseSync/presets.js.map +1 -0
- package/dist/services/reverseSync/reverseQuickSyncService.d.ts +37 -0
- package/dist/services/reverseSync/reverseQuickSyncService.d.ts.map +1 -0
- package/dist/services/reverseSync/reverseQuickSyncService.js +265 -0
- package/dist/services/reverseSync/reverseQuickSyncService.js.map +1 -0
- package/dist/services/reverseSync/skillsDetector.d.ts +36 -0
- package/dist/services/reverseSync/skillsDetector.d.ts.map +1 -0
- package/dist/services/reverseSync/skillsDetector.js +287 -0
- package/dist/services/reverseSync/skillsDetector.js.map +1 -0
- package/dist/services/reverseSync/toolDetector.d.ts +36 -0
- package/dist/services/reverseSync/toolDetector.d.ts.map +1 -0
- package/dist/services/reverseSync/toolDetector.js +174 -0
- package/dist/services/reverseSync/toolDetector.js.map +1 -0
- package/dist/services/reverseSync/types.d.ts +203 -0
- package/dist/services/reverseSync/types.d.ts.map +1 -0
- package/dist/services/reverseSync/types.js +9 -0
- package/dist/services/reverseSync/types.js.map +1 -0
- package/dist/services/semantic/codebaseAnalyzer.d.ts +23 -1
- package/dist/services/semantic/codebaseAnalyzer.d.ts.map +1 -1
- package/dist/services/semantic/codebaseAnalyzer.js +531 -0
- package/dist/services/semantic/codebaseAnalyzer.js.map +1 -1
- package/dist/services/semantic/contextBuilder.d.ts.map +1 -1
- package/dist/services/semantic/contextBuilder.js +23 -8
- package/dist/services/semantic/contextBuilder.js.map +1 -1
- package/dist/services/semantic/types.d.ts +50 -0
- package/dist/services/semantic/types.d.ts.map +1 -1
- package/dist/services/semantic/types.js.map +1 -1
- package/dist/services/shared/contentTypeRegistry.d.ts +66 -0
- package/dist/services/shared/contentTypeRegistry.d.ts.map +1 -0
- package/dist/services/shared/contentTypeRegistry.js +113 -0
- package/dist/services/shared/contentTypeRegistry.js.map +1 -0
- package/dist/services/shared/contextRootResolver.d.ts +57 -0
- package/dist/services/shared/contextRootResolver.d.ts.map +1 -0
- package/dist/services/shared/contextRootResolver.js +102 -0
- package/dist/services/shared/contextRootResolver.js.map +1 -0
- package/dist/services/shared/index.d.ts +4 -1
- package/dist/services/shared/index.d.ts.map +1 -1
- package/dist/services/shared/index.js +39 -1
- package/dist/services/shared/index.js.map +1 -1
- package/dist/services/shared/pathHelpers.d.ts +15 -1
- package/dist/services/shared/pathHelpers.d.ts.map +1 -1
- package/dist/services/shared/pathHelpers.js +26 -1
- package/dist/services/shared/pathHelpers.js.map +1 -1
- package/dist/services/shared/toolRegistry.d.ts +135 -0
- package/dist/services/shared/toolRegistry.d.ts.map +1 -0
- package/dist/services/shared/toolRegistry.js +515 -0
- package/dist/services/shared/toolRegistry.js.map +1 -0
- package/dist/services/stack/scaffoldFilter.d.ts +1 -1
- package/dist/services/sync/presets.d.ts +3 -0
- package/dist/services/sync/presets.d.ts.map +1 -1
- package/dist/services/sync/presets.js +20 -32
- package/dist/services/sync/presets.js.map +1 -1
- package/dist/services/sync/syncService.d.ts +8 -0
- package/dist/services/sync/syncService.d.ts.map +1 -1
- package/dist/services/sync/syncService.js +21 -2
- package/dist/services/sync/syncService.js.map +1 -1
- package/dist/services/sync/types.d.ts +1 -1
- package/dist/services/sync/types.d.ts.map +1 -1
- package/dist/services/tools/index.d.ts +95 -0
- package/dist/services/tools/index.d.ts.map +1 -0
- package/dist/services/tools/index.js +236 -0
- package/dist/services/tools/index.js.map +1 -0
- package/dist/services/workflow/workflowService.d.ts +57 -4
- package/dist/services/workflow/workflowService.d.ts.map +1 -1
- package/dist/services/workflow/workflowService.js +79 -6
- package/dist/services/workflow/workflowService.js.map +1 -1
- package/dist/types/scaffoldFrontmatter.d.ts +145 -0
- package/dist/types/scaffoldFrontmatter.d.ts.map +1 -0
- package/dist/types/scaffoldFrontmatter.js +172 -0
- package/dist/types/scaffoldFrontmatter.js.map +1 -0
- package/dist/utils/cliUI.d.ts +1 -1
- package/dist/utils/cliUI.d.ts.map +1 -1
- package/dist/utils/cliUI.js +4 -1
- package/dist/utils/cliUI.js.map +1 -1
- package/dist/utils/frontMatter.d.ts +48 -0
- package/dist/utils/frontMatter.d.ts.map +1 -1
- package/dist/utils/frontMatter.js +135 -0
- package/dist/utils/frontMatter.js.map +1 -1
- package/dist/utils/gitService.d.ts +26 -0
- package/dist/utils/gitService.d.ts.map +1 -1
- package/dist/utils/gitService.js +96 -0
- package/dist/utils/gitService.js.map +1 -1
- package/dist/utils/i18n.d.ts +43 -2
- package/dist/utils/i18n.d.ts.map +1 -1
- package/dist/utils/i18n.js +96 -6
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/prompts/index.d.ts +4 -0
- package/dist/utils/prompts/index.d.ts.map +1 -1
- package/dist/utils/prompts/index.js +15 -0
- package/dist/utils/prompts/index.js.map +1 -1
- package/dist/workflow/errors.d.ts +48 -0
- package/dist/workflow/errors.d.ts.map +1 -0
- package/dist/workflow/errors.js +52 -0
- package/dist/workflow/errors.js.map +1 -0
- package/dist/workflow/gates/gateChecker.d.ts +93 -0
- package/dist/workflow/gates/gateChecker.d.ts.map +1 -0
- package/dist/workflow/gates/gateChecker.js +197 -0
- package/dist/workflow/gates/gateChecker.js.map +1 -0
- package/dist/workflow/gates/index.d.ts +7 -0
- package/dist/workflow/gates/index.d.ts.map +1 -0
- package/dist/workflow/gates/index.js +13 -0
- package/dist/workflow/gates/index.js.map +1 -0
- package/dist/workflow/index.d.ts +4 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +14 -3
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/orchestrator.d.ts +94 -5
- package/dist/workflow/orchestrator.d.ts.map +1 -1
- package/dist/workflow/orchestrator.js +300 -11
- package/dist/workflow/orchestrator.js.map +1 -1
- package/dist/workflow/plans/planLinker.d.ts +79 -3
- package/dist/workflow/plans/planLinker.d.ts.map +1 -1
- package/dist/workflow/plans/planLinker.js +522 -3
- package/dist/workflow/plans/planLinker.js.map +1 -1
- package/dist/workflow/plans/types.d.ts +64 -0
- package/dist/workflow/plans/types.d.ts.map +1 -1
- package/dist/workflow/roles.d.ts +6 -0
- package/dist/workflow/roles.d.ts.map +1 -1
- package/dist/workflow/roles.js +6 -0
- package/dist/workflow/roles.js.map +1 -1
- package/dist/workflow/scaling.d.ts +1 -0
- package/dist/workflow/scaling.d.ts.map +1 -1
- package/dist/workflow/scaling.js +8 -17
- package/dist/workflow/scaling.js.map +1 -1
- package/dist/workflow/status/statusManager.d.ts +54 -1
- package/dist/workflow/status/statusManager.d.ts.map +1 -1
- package/dist/workflow/status/statusManager.js +539 -9
- package/dist/workflow/status/statusManager.js.map +1 -1
- package/dist/workflow/status/templates.d.ts +14 -5
- package/dist/workflow/status/templates.d.ts.map +1 -1
- package/dist/workflow/status/templates.js +55 -41
- package/dist/workflow/status/templates.js.map +1 -1
- package/dist/workflow/types.d.ts +138 -2
- package/dist/workflow/types.d.ts.map +1 -1
- package/dist/workflow/types.js +0 -1
- package/dist/workflow/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -45,6 +45,7 @@ const path = __importStar(require("path"));
|
|
|
45
45
|
const fs = __importStar(require("fs-extra"));
|
|
46
46
|
const types_1 = require("./types");
|
|
47
47
|
const agents_1 = require("../agents");
|
|
48
|
+
const gitService_1 = require("../../utils/gitService");
|
|
48
49
|
/**
|
|
49
50
|
* Plan Linker class
|
|
50
51
|
*
|
|
@@ -57,12 +58,32 @@ const agents_1 = require("../agents");
|
|
|
57
58
|
* Agent discovery is delegated to AgentRegistry (SRP).
|
|
58
59
|
*/
|
|
59
60
|
class PlanLinker {
|
|
60
|
-
constructor(repoPath) {
|
|
61
|
+
constructor(repoPath, statusManager, autoCommitOnPhaseComplete = true) {
|
|
61
62
|
this.repoPath = repoPath;
|
|
62
63
|
this.contextPath = path.join(repoPath, '.context');
|
|
63
64
|
this.plansPath = path.join(this.contextPath, 'plans');
|
|
64
65
|
this.workflowPath = path.join(this.contextPath, 'workflow');
|
|
65
66
|
this.agentRegistry = (0, agents_1.createAgentRegistry)(repoPath);
|
|
67
|
+
this.statusManager = statusManager;
|
|
68
|
+
this.autoCommitOnPhaseComplete = autoCommitOnPhaseComplete;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a PlanLinker with the given repository path
|
|
72
|
+
*/
|
|
73
|
+
static async create(repoPath = process.cwd(), statusManager, autoCommitOnPhaseComplete = true) {
|
|
74
|
+
return new PlanLinker(repoPath, statusManager, autoCommitOnPhaseComplete);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Ensure workflow plan index exists
|
|
78
|
+
*/
|
|
79
|
+
async ensureWorkflowPlanIndex() {
|
|
80
|
+
const plansFile = path.join(this.workflowPath, 'plans.json');
|
|
81
|
+
if (await fs.pathExists(plansFile)) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
await fs.ensureDir(this.workflowPath);
|
|
85
|
+
const initialPlans = { active: [], completed: [] };
|
|
86
|
+
await fs.writeFile(plansFile, JSON.stringify(initialPlans, null, 2), 'utf-8');
|
|
66
87
|
}
|
|
67
88
|
/**
|
|
68
89
|
* Discover all available agents (built-in + custom)
|
|
@@ -187,6 +208,16 @@ class PlanLinker {
|
|
|
187
208
|
// Save tracking
|
|
188
209
|
await fs.ensureDir(path.dirname(trackingFile));
|
|
189
210
|
await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
|
|
211
|
+
// Log phase update to workflow execution history
|
|
212
|
+
if (this.statusManager) {
|
|
213
|
+
const currentPhase = await this.statusManager.getCurrentPhase();
|
|
214
|
+
await this.statusManager.addHistoryEntry({
|
|
215
|
+
phase: currentPhase,
|
|
216
|
+
action: 'plan_phase_updated',
|
|
217
|
+
plan: planSlug,
|
|
218
|
+
description: `Plan phase ${phaseId} updated to ${status}`,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
190
221
|
return true;
|
|
191
222
|
}
|
|
192
223
|
/**
|
|
@@ -215,6 +246,16 @@ class PlanLinker {
|
|
|
215
246
|
tracking.decisions.push(fullDecision);
|
|
216
247
|
await fs.ensureDir(path.dirname(trackingFile));
|
|
217
248
|
await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
|
|
249
|
+
// Log decision to workflow execution history
|
|
250
|
+
if (this.statusManager) {
|
|
251
|
+
const currentPhase = await this.statusManager.getCurrentPhase();
|
|
252
|
+
await this.statusManager.addHistoryEntry({
|
|
253
|
+
phase: decision.phase || currentPhase,
|
|
254
|
+
action: 'decision_recorded',
|
|
255
|
+
plan: planSlug,
|
|
256
|
+
description: `Decision recorded: ${decision.title}`,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
218
259
|
return fullDecision;
|
|
219
260
|
}
|
|
220
261
|
/**
|
|
@@ -261,6 +302,381 @@ class PlanLinker {
|
|
|
261
302
|
byPhase,
|
|
262
303
|
};
|
|
263
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* Update individual step status within a plan phase
|
|
307
|
+
*/
|
|
308
|
+
async updatePlanStep(planSlug, phaseId, stepIndex, status, options) {
|
|
309
|
+
const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
|
|
310
|
+
const now = new Date().toISOString();
|
|
311
|
+
// Load existing tracking or create new
|
|
312
|
+
let tracking = await this.loadPlanTracking(planSlug);
|
|
313
|
+
if (!tracking) {
|
|
314
|
+
tracking = {
|
|
315
|
+
planSlug,
|
|
316
|
+
progress: 0,
|
|
317
|
+
phases: {},
|
|
318
|
+
decisions: [],
|
|
319
|
+
lastUpdated: now,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
// Ensure phase exists in tracking
|
|
323
|
+
if (!tracking.phases[phaseId]) {
|
|
324
|
+
tracking.phases[phaseId] = {
|
|
325
|
+
phaseId,
|
|
326
|
+
status: 'in_progress',
|
|
327
|
+
startedAt: now,
|
|
328
|
+
steps: [],
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
// Find or create step entry
|
|
332
|
+
let step = tracking.phases[phaseId].steps.find(s => s.stepIndex === stepIndex);
|
|
333
|
+
if (!step) {
|
|
334
|
+
// Get step description from the plan if possible
|
|
335
|
+
const plan = await this.getLinkedPlan(planSlug);
|
|
336
|
+
const planPhase = plan?.phases.find(p => p.id === phaseId);
|
|
337
|
+
const planStep = planPhase?.steps.find(s => s.order === stepIndex);
|
|
338
|
+
step = {
|
|
339
|
+
stepIndex,
|
|
340
|
+
description: planStep?.description || `Step ${stepIndex}`,
|
|
341
|
+
status: 'pending',
|
|
342
|
+
};
|
|
343
|
+
tracking.phases[phaseId].steps.push(step);
|
|
344
|
+
}
|
|
345
|
+
// Update step status and timestamps
|
|
346
|
+
step.status = status;
|
|
347
|
+
if (status === 'in_progress' && !step.startedAt) {
|
|
348
|
+
step.startedAt = now;
|
|
349
|
+
}
|
|
350
|
+
if (status === 'completed') {
|
|
351
|
+
step.completedAt = now;
|
|
352
|
+
}
|
|
353
|
+
if (options?.output) {
|
|
354
|
+
step.output = options.output;
|
|
355
|
+
}
|
|
356
|
+
if (options?.notes) {
|
|
357
|
+
step.notes = options.notes;
|
|
358
|
+
}
|
|
359
|
+
// Update phase status based on steps
|
|
360
|
+
const phaseSteps = tracking.phases[phaseId].steps;
|
|
361
|
+
const allStepsCompleted = phaseSteps.length > 0 && phaseSteps.every(s => s.status === 'completed');
|
|
362
|
+
const anyStepInProgress = phaseSteps.some(s => s.status === 'in_progress');
|
|
363
|
+
if (allStepsCompleted) {
|
|
364
|
+
tracking.phases[phaseId].status = 'completed';
|
|
365
|
+
tracking.phases[phaseId].completedAt = now;
|
|
366
|
+
// Auto-commit on phase completion
|
|
367
|
+
if (this.autoCommitOnPhaseComplete) {
|
|
368
|
+
await this.autoCommitPhase(planSlug, phaseId);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
else if (anyStepInProgress || phaseSteps.some(s => s.status === 'completed')) {
|
|
372
|
+
tracking.phases[phaseId].status = 'in_progress';
|
|
373
|
+
}
|
|
374
|
+
// Recalculate overall progress
|
|
375
|
+
tracking.progress = this.calculateStepProgress(tracking);
|
|
376
|
+
tracking.lastUpdated = now;
|
|
377
|
+
// Save tracking
|
|
378
|
+
await fs.ensureDir(path.dirname(trackingFile));
|
|
379
|
+
await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
|
|
380
|
+
// Log step to workflow execution history (breadcrumb trail)
|
|
381
|
+
if (this.statusManager) {
|
|
382
|
+
const action = status === 'completed' ? 'step_completed' :
|
|
383
|
+
status === 'in_progress' ? 'step_started' :
|
|
384
|
+
status === 'skipped' ? 'step_skipped' : null;
|
|
385
|
+
if (action) {
|
|
386
|
+
await this.statusManager.addStepHistoryEntry({
|
|
387
|
+
action,
|
|
388
|
+
plan: planSlug,
|
|
389
|
+
planPhase: phaseId,
|
|
390
|
+
stepIndex,
|
|
391
|
+
stepDescription: step.description,
|
|
392
|
+
output: options?.output,
|
|
393
|
+
notes: options?.notes,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// Auto-sync to markdown
|
|
398
|
+
await this.syncPlanMarkdown(planSlug);
|
|
399
|
+
return true;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Get detailed execution status for a plan including all steps
|
|
403
|
+
*/
|
|
404
|
+
async getPlanExecutionStatus(planSlug) {
|
|
405
|
+
return this.loadPlanTracking(planSlug);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Sync tracking data back to the plan markdown file
|
|
409
|
+
* Updates checkboxes, timestamps, and adds execution history section
|
|
410
|
+
*/
|
|
411
|
+
async syncPlanMarkdown(planSlug) {
|
|
412
|
+
const planPath = path.join(this.plansPath, `${planSlug}.md`);
|
|
413
|
+
const tracking = await this.loadPlanTracking(planSlug);
|
|
414
|
+
if (!tracking || !await fs.pathExists(planPath)) {
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
let content = await fs.readFile(planPath, 'utf-8');
|
|
418
|
+
// Update frontmatter with progress and phase statuses
|
|
419
|
+
content = this.updateFrontmatterProgress(content, tracking);
|
|
420
|
+
// Update step checkboxes in markdown body
|
|
421
|
+
content = this.updateStepCheckboxes(content, tracking);
|
|
422
|
+
// Add/update execution history section
|
|
423
|
+
content = this.updateExecutionHistorySection(content, tracking);
|
|
424
|
+
await fs.writeFile(planPath, content, 'utf-8');
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Record commit information for a completed phase
|
|
429
|
+
*/
|
|
430
|
+
async recordPhaseCommit(planSlug, phaseId, commitInfo) {
|
|
431
|
+
const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
|
|
432
|
+
const now = new Date().toISOString();
|
|
433
|
+
// Load existing tracking
|
|
434
|
+
let tracking = await this.loadPlanTracking(planSlug);
|
|
435
|
+
if (!tracking) {
|
|
436
|
+
return false;
|
|
437
|
+
}
|
|
438
|
+
// Ensure phase exists in tracking
|
|
439
|
+
if (!tracking.phases[phaseId]) {
|
|
440
|
+
return false;
|
|
441
|
+
}
|
|
442
|
+
// Record commit info
|
|
443
|
+
tracking.phases[phaseId].commitHash = commitInfo.hash;
|
|
444
|
+
tracking.phases[phaseId].commitShortHash = commitInfo.shortHash;
|
|
445
|
+
tracking.phases[phaseId].committedAt = now;
|
|
446
|
+
if (commitInfo.committedBy) {
|
|
447
|
+
tracking.phases[phaseId].committedBy = commitInfo.committedBy;
|
|
448
|
+
}
|
|
449
|
+
tracking.lastUpdated = now;
|
|
450
|
+
// Save tracking
|
|
451
|
+
await fs.ensureDir(path.dirname(trackingFile));
|
|
452
|
+
await fs.writeFile(trackingFile, JSON.stringify(tracking, null, 2), 'utf-8');
|
|
453
|
+
// Sync to markdown
|
|
454
|
+
await this.syncPlanMarkdown(planSlug);
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Load plan tracking from JSON file
|
|
459
|
+
*/
|
|
460
|
+
async loadPlanTracking(planSlug) {
|
|
461
|
+
const trackingFile = path.join(this.workflowPath, 'plan-tracking', `${planSlug}.json`);
|
|
462
|
+
if (!await fs.pathExists(trackingFile)) {
|
|
463
|
+
return null;
|
|
464
|
+
}
|
|
465
|
+
try {
|
|
466
|
+
const content = await fs.readFile(trackingFile, 'utf-8');
|
|
467
|
+
const data = JSON.parse(content);
|
|
468
|
+
// Migrate old format to new format if needed
|
|
469
|
+
if (!data.phases || typeof data.phases !== 'object') {
|
|
470
|
+
// Old format had phases as simple status objects
|
|
471
|
+
const migratedPhases = {};
|
|
472
|
+
if (data.phases) {
|
|
473
|
+
for (const [phaseId, phaseData] of Object.entries(data.phases)) {
|
|
474
|
+
migratedPhases[phaseId] = {
|
|
475
|
+
phaseId,
|
|
476
|
+
status: phaseData.status,
|
|
477
|
+
startedAt: phaseData.updatedAt,
|
|
478
|
+
completedAt: phaseData.status === 'completed' ? phaseData.updatedAt : undefined,
|
|
479
|
+
steps: [],
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return {
|
|
484
|
+
planSlug,
|
|
485
|
+
progress: data.progress || 0,
|
|
486
|
+
phases: migratedPhases,
|
|
487
|
+
decisions: data.decisions || [],
|
|
488
|
+
lastUpdated: data.lastUpdated || new Date().toISOString(),
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
return data;
|
|
492
|
+
}
|
|
493
|
+
catch {
|
|
494
|
+
return null;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Calculate progress based on completed steps across all phases
|
|
499
|
+
*/
|
|
500
|
+
calculateStepProgress(tracking) {
|
|
501
|
+
let totalSteps = 0;
|
|
502
|
+
let completedSteps = 0;
|
|
503
|
+
for (const phase of Object.values(tracking.phases)) {
|
|
504
|
+
totalSteps += phase.steps.length;
|
|
505
|
+
completedSteps += phase.steps.filter(s => s.status === 'completed').length;
|
|
506
|
+
}
|
|
507
|
+
return totalSteps > 0 ? Math.round((completedSteps / totalSteps) * 100) : 0;
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Update frontmatter with progress percentage
|
|
511
|
+
*/
|
|
512
|
+
updateFrontmatterProgress(content, tracking) {
|
|
513
|
+
// Check if frontmatter exists
|
|
514
|
+
if (!content.startsWith('---')) {
|
|
515
|
+
return content;
|
|
516
|
+
}
|
|
517
|
+
const endIndex = content.indexOf('---', 3);
|
|
518
|
+
if (endIndex === -1) {
|
|
519
|
+
return content;
|
|
520
|
+
}
|
|
521
|
+
let frontmatter = content.slice(0, endIndex);
|
|
522
|
+
const body = content.slice(endIndex);
|
|
523
|
+
// Update or add progress field
|
|
524
|
+
if (frontmatter.includes('progress:')) {
|
|
525
|
+
frontmatter = frontmatter.replace(/progress:\s*\d+/, `progress: ${tracking.progress}`);
|
|
526
|
+
}
|
|
527
|
+
else {
|
|
528
|
+
// Add progress after status line or at end of frontmatter
|
|
529
|
+
if (frontmatter.includes('status:')) {
|
|
530
|
+
frontmatter = frontmatter.replace(/(status:\s*\w+)/, `$1\nprogress: ${tracking.progress}`);
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
frontmatter = frontmatter.trimEnd() + `\nprogress: ${tracking.progress}\n`;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
// Update or add lastUpdated field
|
|
537
|
+
if (frontmatter.includes('lastUpdated:')) {
|
|
538
|
+
frontmatter = frontmatter.replace(/lastUpdated:\s*"[^"]*"/, `lastUpdated: "${tracking.lastUpdated}"`);
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
frontmatter = frontmatter.trimEnd() + `\nlastUpdated: "${tracking.lastUpdated}"\n`;
|
|
542
|
+
}
|
|
543
|
+
return frontmatter + body;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Update step checkboxes in markdown body
|
|
547
|
+
*/
|
|
548
|
+
updateStepCheckboxes(content, tracking) {
|
|
549
|
+
// Match numbered steps with optional existing checkboxes
|
|
550
|
+
// Patterns like: "1. **Step text**" or "1. [ ] **Step text**" or "1. [x] **Step text**"
|
|
551
|
+
const stepPattern = /^(\d+)\.\s*(?:\[[ x]\]\s*)?(.+?)(?:\s*\*\([^)]*\)\*)?$/gm;
|
|
552
|
+
// Track which phase we're currently in by finding phase headers
|
|
553
|
+
let currentPhaseId = null;
|
|
554
|
+
// Split content into lines for processing
|
|
555
|
+
const lines = content.split('\n');
|
|
556
|
+
const updatedLines = [];
|
|
557
|
+
for (const line of lines) {
|
|
558
|
+
// Check for phase header
|
|
559
|
+
const phaseMatch = line.match(/^###\s+Phase\s+(\d+)/);
|
|
560
|
+
if (phaseMatch) {
|
|
561
|
+
currentPhaseId = `phase-${phaseMatch[1]}`;
|
|
562
|
+
updatedLines.push(line);
|
|
563
|
+
continue;
|
|
564
|
+
}
|
|
565
|
+
// Check for numbered step
|
|
566
|
+
const stepMatch = line.match(/^(\d+)\.\s*(?:\[[ x]\]\s*)?(.+?)(?:\s*\*\([^)]*\)\*)?$/);
|
|
567
|
+
if (stepMatch && currentPhaseId) {
|
|
568
|
+
const stepNum = parseInt(stepMatch[1], 10);
|
|
569
|
+
const stepText = stepMatch[2].trim();
|
|
570
|
+
// Find step in tracking
|
|
571
|
+
const phaseTracking = tracking.phases[currentPhaseId];
|
|
572
|
+
const stepTracking = phaseTracking?.steps.find(s => s.stepIndex === stepNum);
|
|
573
|
+
if (stepTracking) {
|
|
574
|
+
const checkMark = stepTracking.status === 'completed' ? '[x]' : '[ ]';
|
|
575
|
+
let timestamp = '';
|
|
576
|
+
if (stepTracking.completedAt) {
|
|
577
|
+
timestamp = ` *(completed: ${stepTracking.completedAt})*`;
|
|
578
|
+
}
|
|
579
|
+
else if (stepTracking.startedAt && stepTracking.status === 'in_progress') {
|
|
580
|
+
timestamp = ` *(in progress since: ${stepTracking.startedAt})*`;
|
|
581
|
+
}
|
|
582
|
+
updatedLines.push(`${stepNum}. ${checkMark} ${stepText}${timestamp}`);
|
|
583
|
+
continue;
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
updatedLines.push(line);
|
|
587
|
+
}
|
|
588
|
+
return updatedLines.join('\n');
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Add or update execution history section in markdown
|
|
592
|
+
*/
|
|
593
|
+
updateExecutionHistorySection(content, tracking) {
|
|
594
|
+
const historySection = this.generateExecutionHistoryMarkdown(tracking);
|
|
595
|
+
// Check if section exists
|
|
596
|
+
const historyMarker = '## Execution History';
|
|
597
|
+
const existingIndex = content.indexOf(historyMarker);
|
|
598
|
+
if (existingIndex > -1) {
|
|
599
|
+
// Find the end of the section (next ## header or end of file)
|
|
600
|
+
const afterHistory = content.slice(existingIndex);
|
|
601
|
+
const nextSectionMatch = afterHistory.match(/\n## [^E]/);
|
|
602
|
+
if (nextSectionMatch && nextSectionMatch.index) {
|
|
603
|
+
const endIndex = existingIndex + nextSectionMatch.index;
|
|
604
|
+
content = content.slice(0, existingIndex) + historySection + content.slice(endIndex);
|
|
605
|
+
}
|
|
606
|
+
else {
|
|
607
|
+
// History is the last section
|
|
608
|
+
content = content.slice(0, existingIndex) + historySection;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
// Add before "## Evidence" or "## Rollback" or at end
|
|
613
|
+
const insertPoints = ['## Evidence', '## Rollback'];
|
|
614
|
+
let insertIndex = -1;
|
|
615
|
+
for (const marker of insertPoints) {
|
|
616
|
+
const idx = content.indexOf(marker);
|
|
617
|
+
if (idx > -1) {
|
|
618
|
+
insertIndex = idx;
|
|
619
|
+
break;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
if (insertIndex > -1) {
|
|
623
|
+
content = content.slice(0, insertIndex) + historySection + '\n\n' + content.slice(insertIndex);
|
|
624
|
+
}
|
|
625
|
+
else {
|
|
626
|
+
content = content.trimEnd() + '\n\n' + historySection;
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
return content;
|
|
630
|
+
}
|
|
631
|
+
/**
|
|
632
|
+
* Generate execution history markdown section
|
|
633
|
+
*/
|
|
634
|
+
generateExecutionHistoryMarkdown(tracking) {
|
|
635
|
+
const lines = [
|
|
636
|
+
'## Execution History',
|
|
637
|
+
'',
|
|
638
|
+
`> Last updated: ${tracking.lastUpdated} | Progress: ${tracking.progress}%`,
|
|
639
|
+
'',
|
|
640
|
+
];
|
|
641
|
+
// Sort phases by ID
|
|
642
|
+
const sortedPhases = Object.entries(tracking.phases).sort(([a], [b]) => a.localeCompare(b));
|
|
643
|
+
for (const [phaseId, phase] of sortedPhases) {
|
|
644
|
+
const statusIcon = phase.status === 'completed' ? '[DONE]' :
|
|
645
|
+
phase.status === 'in_progress' ? '[IN PROGRESS]' :
|
|
646
|
+
phase.status === 'skipped' ? '[SKIPPED]' :
|
|
647
|
+
'[PENDING]';
|
|
648
|
+
lines.push(`### ${phaseId} ${statusIcon}`);
|
|
649
|
+
if (phase.startedAt) {
|
|
650
|
+
lines.push(`- Started: ${phase.startedAt}`);
|
|
651
|
+
}
|
|
652
|
+
if (phase.completedAt) {
|
|
653
|
+
lines.push(`- Completed: ${phase.completedAt}`);
|
|
654
|
+
}
|
|
655
|
+
if (phase.steps.length > 0) {
|
|
656
|
+
lines.push('');
|
|
657
|
+
const sortedSteps = [...phase.steps].sort((a, b) => a.stepIndex - b.stepIndex);
|
|
658
|
+
for (const step of sortedSteps) {
|
|
659
|
+
const check = step.status === 'completed' ? 'x' : ' ';
|
|
660
|
+
let line = `- [${check}] Step ${step.stepIndex}: ${step.description}`;
|
|
661
|
+
if (step.completedAt) {
|
|
662
|
+
line += ` *(${step.completedAt})*`;
|
|
663
|
+
}
|
|
664
|
+
else if (step.startedAt && step.status === 'in_progress') {
|
|
665
|
+
line += ` *(in progress)*`;
|
|
666
|
+
}
|
|
667
|
+
lines.push(line);
|
|
668
|
+
if (step.output) {
|
|
669
|
+
lines.push(` - Output: ${step.output}`);
|
|
670
|
+
}
|
|
671
|
+
if (step.notes) {
|
|
672
|
+
lines.push(` - Notes: ${step.notes}`);
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
lines.push('');
|
|
677
|
+
}
|
|
678
|
+
return lines.join('\n');
|
|
679
|
+
}
|
|
264
680
|
/**
|
|
265
681
|
* Parse plan markdown file to extract info
|
|
266
682
|
*/
|
|
@@ -490,10 +906,113 @@ class PlanLinker {
|
|
|
490
906
|
await fs.ensureDir(this.workflowPath);
|
|
491
907
|
await fs.writeFile(plansFile, JSON.stringify(plans, null, 2), 'utf-8');
|
|
492
908
|
}
|
|
909
|
+
/**
|
|
910
|
+
* Clear all plans and tracking data
|
|
911
|
+
* Used when deleting/resetting a workflow
|
|
912
|
+
*/
|
|
913
|
+
async clearAllPlans() {
|
|
914
|
+
const plansFile = path.join(this.workflowPath, 'plans.json');
|
|
915
|
+
const trackingDir = path.join(this.workflowPath, 'plan-tracking');
|
|
916
|
+
// Remove plans.json
|
|
917
|
+
if (await fs.pathExists(plansFile)) {
|
|
918
|
+
await fs.remove(plansFile);
|
|
919
|
+
}
|
|
920
|
+
// Remove plan-tracking directory
|
|
921
|
+
if (await fs.pathExists(trackingDir)) {
|
|
922
|
+
await fs.remove(trackingDir);
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
/**
|
|
926
|
+
* Archive all plans and tracking data
|
|
927
|
+
* Moves files to .context/workflow/archive/{timestamp}/
|
|
928
|
+
*/
|
|
929
|
+
async archivePlans() {
|
|
930
|
+
const plansFile = path.join(this.workflowPath, 'plans.json');
|
|
931
|
+
const trackingDir = path.join(this.workflowPath, 'plan-tracking');
|
|
932
|
+
// Check if there's anything to archive
|
|
933
|
+
const hasPlans = await fs.pathExists(plansFile);
|
|
934
|
+
const hasTracking = await fs.pathExists(trackingDir);
|
|
935
|
+
if (!hasPlans && !hasTracking) {
|
|
936
|
+
return;
|
|
937
|
+
}
|
|
938
|
+
// Create archive directory with timestamp
|
|
939
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
940
|
+
const archiveDir = path.join(this.workflowPath, 'archive', `plans-${timestamp}`);
|
|
941
|
+
await fs.ensureDir(archiveDir);
|
|
942
|
+
// Move plans.json to archive
|
|
943
|
+
if (hasPlans) {
|
|
944
|
+
await fs.move(plansFile, path.join(archiveDir, 'plans.json'));
|
|
945
|
+
}
|
|
946
|
+
// Move plan-tracking directory to archive
|
|
947
|
+
if (hasTracking) {
|
|
948
|
+
await fs.move(trackingDir, path.join(archiveDir, 'plan-tracking'));
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
/**
|
|
952
|
+
* Automatically create a git commit when a phase completes
|
|
953
|
+
* @param planSlug Plan identifier
|
|
954
|
+
* @param phaseId Phase identifier
|
|
955
|
+
* @returns true if commit was created, false if skipped or failed
|
|
956
|
+
*/
|
|
957
|
+
async autoCommitPhase(planSlug, phaseId) {
|
|
958
|
+
try {
|
|
959
|
+
// Load plan to get phase details
|
|
960
|
+
const plan = await this.getLinkedPlan(planSlug);
|
|
961
|
+
if (!plan) {
|
|
962
|
+
console.warn(`[AutoCommit] Plan not found: ${planSlug}`);
|
|
963
|
+
return false;
|
|
964
|
+
}
|
|
965
|
+
const phase = plan.phases.find(p => p.id === phaseId);
|
|
966
|
+
if (!phase) {
|
|
967
|
+
console.warn(`[AutoCommit] Phase not found: ${phaseId} in plan ${planSlug}`);
|
|
968
|
+
return false;
|
|
969
|
+
}
|
|
970
|
+
// Initialize git service
|
|
971
|
+
const gitService = new gitService_1.GitService(this.repoPath);
|
|
972
|
+
// Check if this is a git repository
|
|
973
|
+
if (!gitService.isGitRepository()) {
|
|
974
|
+
console.warn('[AutoCommit] Not a git repository - skipping auto-commit');
|
|
975
|
+
return false;
|
|
976
|
+
}
|
|
977
|
+
// Default commit message from phase's commitCheckpoint or generate one
|
|
978
|
+
const commitMessage = phase.commitCheckpoint ||
|
|
979
|
+
`chore(plan): complete ${phase.name} for ${planSlug}`;
|
|
980
|
+
// Stage .context/** files (plan tracking and markdown updates)
|
|
981
|
+
const stagePatterns = ['.context/**'];
|
|
982
|
+
try {
|
|
983
|
+
const stagedFiles = gitService.stageFiles(stagePatterns);
|
|
984
|
+
if (stagedFiles.length === 0) {
|
|
985
|
+
console.info('[AutoCommit] No files to commit - skipping');
|
|
986
|
+
return false;
|
|
987
|
+
}
|
|
988
|
+
// Create the commit with AI Context Agent as co-author
|
|
989
|
+
const coAuthor = 'AI Context Agent';
|
|
990
|
+
const commitResult = gitService.commit(commitMessage, coAuthor);
|
|
991
|
+
// Record the commit in plan tracking
|
|
992
|
+
await this.recordPhaseCommit(planSlug, phaseId, {
|
|
993
|
+
hash: commitResult.hash,
|
|
994
|
+
shortHash: commitResult.shortHash,
|
|
995
|
+
committedBy: coAuthor,
|
|
996
|
+
});
|
|
997
|
+
console.info(`[AutoCommit] Created commit ${commitResult.shortHash} for phase ${phaseId}`);
|
|
998
|
+
return true;
|
|
999
|
+
}
|
|
1000
|
+
catch (error) {
|
|
1001
|
+
// Non-critical failure - log but don't throw
|
|
1002
|
+
console.warn(`[AutoCommit] Failed to create commit for phase ${phaseId}:`, error);
|
|
1003
|
+
return false;
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
catch (error) {
|
|
1007
|
+
// Catch-all to prevent breaking the main updatePlanStep flow
|
|
1008
|
+
console.error('[AutoCommit] Unexpected error in autoCommitPhase:', error);
|
|
1009
|
+
return false;
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
493
1012
|
}
|
|
494
1013
|
exports.PlanLinker = PlanLinker;
|
|
495
1014
|
// Export singleton factory
|
|
496
|
-
function createPlanLinker(repoPath) {
|
|
497
|
-
return new PlanLinker(repoPath);
|
|
1015
|
+
function createPlanLinker(repoPath, statusManager, autoCommitOnPhaseComplete = true) {
|
|
1016
|
+
return new PlanLinker(repoPath, statusManager, autoCommitOnPhaseComplete);
|
|
498
1017
|
}
|
|
499
1018
|
//# sourceMappingURL=planLinker.js.map
|