@winspan/claude-forge 0.1.1
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/LICENSE +21 -0
- package/README.md +505 -0
- package/dist/autopilot/index.d.ts +4 -0
- package/dist/autopilot/index.d.ts.map +1 -0
- package/dist/autopilot/index.js +4 -0
- package/dist/autopilot/index.js.map +1 -0
- package/dist/autopilot/intent-engine.d.ts +60 -0
- package/dist/autopilot/intent-engine.d.ts.map +1 -0
- package/dist/autopilot/intent-engine.js +308 -0
- package/dist/autopilot/intent-engine.js.map +1 -0
- package/dist/autopilot/knowledge-engine.d.ts +67 -0
- package/dist/autopilot/knowledge-engine.d.ts.map +1 -0
- package/dist/autopilot/knowledge-engine.js +262 -0
- package/dist/autopilot/knowledge-engine.js.map +1 -0
- package/dist/autopilot/quality-gate.d.ts +69 -0
- package/dist/autopilot/quality-gate.d.ts.map +1 -0
- package/dist/autopilot/quality-gate.js +244 -0
- package/dist/autopilot/quality-gate.js.map +1 -0
- package/dist/autopilot/team-orchestrator.d.ts +16 -0
- package/dist/autopilot/team-orchestrator.d.ts.map +1 -0
- package/dist/autopilot/team-orchestrator.js +56 -0
- package/dist/autopilot/team-orchestrator.js.map +1 -0
- package/dist/backup/index.d.ts +16 -0
- package/dist/backup/index.d.ts.map +1 -0
- package/dist/backup/index.js +169 -0
- package/dist/backup/index.js.map +1 -0
- package/dist/claudemd/detector.d.ts +54 -0
- package/dist/claudemd/detector.d.ts.map +1 -0
- package/dist/claudemd/detector.js +510 -0
- package/dist/claudemd/detector.js.map +1 -0
- package/dist/claudemd/index.d.ts +44 -0
- package/dist/claudemd/index.d.ts.map +1 -0
- package/dist/claudemd/index.js +193 -0
- package/dist/claudemd/index.js.map +1 -0
- package/dist/claudemd/modules-config.d.ts +37 -0
- package/dist/claudemd/modules-config.d.ts.map +1 -0
- package/dist/claudemd/modules-config.js +80 -0
- package/dist/claudemd/modules-config.js.map +1 -0
- package/dist/claudemd/prompt-injector.d.ts +29 -0
- package/dist/claudemd/prompt-injector.d.ts.map +1 -0
- package/dist/claudemd/prompt-injector.js +144 -0
- package/dist/claudemd/prompt-injector.js.map +1 -0
- package/dist/claudemd/prompts.d.ts +16 -0
- package/dist/claudemd/prompts.d.ts.map +1 -0
- package/dist/claudemd/prompts.js +439 -0
- package/dist/claudemd/prompts.js.map +1 -0
- package/dist/claudemd/writer.d.ts +27 -0
- package/dist/claudemd/writer.d.ts.map +1 -0
- package/dist/claudemd/writer.js +91 -0
- package/dist/claudemd/writer.js.map +1 -0
- package/dist/cli/commands/backup.d.ts +3 -0
- package/dist/cli/commands/backup.d.ts.map +1 -0
- package/dist/cli/commands/backup.js +63 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/claudemd.d.ts +3 -0
- package/dist/cli/commands/claudemd.d.ts.map +1 -0
- package/dist/cli/commands/claudemd.js +322 -0
- package/dist/cli/commands/claudemd.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +67 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/console.d.ts +3 -0
- package/dist/cli/commands/console.d.ts.map +1 -0
- package/dist/cli/commands/console.js +11 -0
- package/dist/cli/commands/console.js.map +1 -0
- package/dist/cli/commands/convention.d.ts +3 -0
- package/dist/cli/commands/convention.d.ts.map +1 -0
- package/dist/cli/commands/convention.js +269 -0
- package/dist/cli/commands/convention.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +3 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +191 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/distill.d.ts +3 -0
- package/dist/cli/commands/distill.d.ts.map +1 -0
- package/dist/cli/commands/distill.js +61 -0
- package/dist/cli/commands/distill.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +306 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +311 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/pattern.d.ts +3 -0
- package/dist/cli/commands/pattern.d.ts.map +1 -0
- package/dist/cli/commands/pattern.js +118 -0
- package/dist/cli/commands/pattern.js.map +1 -0
- package/dist/cli/commands/pipeline.d.ts +3 -0
- package/dist/cli/commands/pipeline.d.ts.map +1 -0
- package/dist/cli/commands/pipeline.js +75 -0
- package/dist/cli/commands/pipeline.js.map +1 -0
- package/dist/cli/commands/profile.d.ts +3 -0
- package/dist/cli/commands/profile.d.ts.map +1 -0
- package/dist/cli/commands/profile.js +213 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/query.d.ts +3 -0
- package/dist/cli/commands/query.d.ts.map +1 -0
- package/dist/cli/commands/query.js +115 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +3 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +466 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +49 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interceptor.d.ts +5 -0
- package/dist/cli/interceptor.d.ts.map +1 -0
- package/dist/cli/interceptor.js +55 -0
- package/dist/cli/interceptor.js.map +1 -0
- package/dist/cli/tui.d.ts +2 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +360 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/cli/utils/errors.d.ts +17 -0
- package/dist/cli/utils/errors.d.ts.map +1 -0
- package/dist/cli/utils/errors.js +42 -0
- package/dist/cli/utils/errors.js.map +1 -0
- package/dist/cli/utils/output.d.ts +23 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +69 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +50 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +26 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +161 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +59 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +86 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/convention/convention-distiller.d.ts +28 -0
- package/dist/convention/convention-distiller.d.ts.map +1 -0
- package/dist/convention/convention-distiller.js +172 -0
- package/dist/convention/convention-distiller.js.map +1 -0
- package/dist/convention/convention-evolver.d.ts +31 -0
- package/dist/convention/convention-evolver.d.ts.map +1 -0
- package/dist/convention/convention-evolver.js +175 -0
- package/dist/convention/convention-evolver.js.map +1 -0
- package/dist/convention/convention-loader.d.ts +22 -0
- package/dist/convention/convention-loader.d.ts.map +1 -0
- package/dist/convention/convention-loader.js +139 -0
- package/dist/convention/convention-loader.js.map +1 -0
- package/dist/convention/convention-manager.d.ts +46 -0
- package/dist/convention/convention-manager.d.ts.map +1 -0
- package/dist/convention/convention-manager.js +193 -0
- package/dist/convention/convention-manager.js.map +1 -0
- package/dist/convention/index.d.ts +6 -0
- package/dist/convention/index.d.ts.map +1 -0
- package/dist/convention/index.js +5 -0
- package/dist/convention/index.js.map +1 -0
- package/dist/convention/types.d.ts +90 -0
- package/dist/convention/types.d.ts.map +1 -0
- package/dist/convention/types.js +13 -0
- package/dist/convention/types.js.map +1 -0
- package/dist/daemon/engine-registry/init-autopilot.d.ts +12 -0
- package/dist/daemon/engine-registry/init-autopilot.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-autopilot.js +20 -0
- package/dist/daemon/engine-registry/init-autopilot.js.map +1 -0
- package/dist/daemon/engine-registry/init-distill.d.ts +6 -0
- package/dist/daemon/engine-registry/init-distill.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-distill.js +25 -0
- package/dist/daemon/engine-registry/init-distill.js.map +1 -0
- package/dist/daemon/engine-registry/init-orchestration.d.ts +5 -0
- package/dist/daemon/engine-registry/init-orchestration.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-orchestration.js +11 -0
- package/dist/daemon/engine-registry/init-orchestration.js.map +1 -0
- package/dist/daemon/engine-registry/init-pattern-engine.d.ts +9 -0
- package/dist/daemon/engine-registry/init-pattern-engine.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-pattern-engine.js +22 -0
- package/dist/daemon/engine-registry/init-pattern-engine.js.map +1 -0
- package/dist/daemon/engine-registry/init-pipeline.d.ts +5 -0
- package/dist/daemon/engine-registry/init-pipeline.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-pipeline.js +12 -0
- package/dist/daemon/engine-registry/init-pipeline.js.map +1 -0
- package/dist/daemon/engine-registry/init-profile.d.ts +3 -0
- package/dist/daemon/engine-registry/init-profile.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-profile.js +28 -0
- package/dist/daemon/engine-registry/init-profile.js.map +1 -0
- package/dist/daemon/engine-registry/init-resume.d.ts +6 -0
- package/dist/daemon/engine-registry/init-resume.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-resume.js +16 -0
- package/dist/daemon/engine-registry/init-resume.js.map +1 -0
- package/dist/daemon/engine-registry/init-skill-registry.d.ts +10 -0
- package/dist/daemon/engine-registry/init-skill-registry.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-skill-registry.js +46 -0
- package/dist/daemon/engine-registry/init-skill-registry.js.map +1 -0
- package/dist/daemon/engine-registry.d.ts +13 -0
- package/dist/daemon/engine-registry.d.ts.map +1 -0
- package/dist/daemon/engine-registry.js +45 -0
- package/dist/daemon/engine-registry.js.map +1 -0
- package/dist/daemon/event-parser.d.ts +5 -0
- package/dist/daemon/event-parser.d.ts.map +1 -0
- package/dist/daemon/event-parser.js +29 -0
- package/dist/daemon/event-parser.js.map +1 -0
- package/dist/daemon/handler-context.d.ts +37 -0
- package/dist/daemon/handler-context.d.ts.map +1 -0
- package/dist/daemon/handler-context.js +2 -0
- package/dist/daemon/handler-context.js.map +1 -0
- package/dist/daemon/handlers/base-handler.d.ts +14 -0
- package/dist/daemon/handlers/base-handler.d.ts.map +1 -0
- package/dist/daemon/handlers/base-handler.js +18 -0
- package/dist/daemon/handlers/base-handler.js.map +1 -0
- package/dist/daemon/handlers/conversational-config-handler.d.ts +24 -0
- package/dist/daemon/handlers/conversational-config-handler.d.ts.map +1 -0
- package/dist/daemon/handlers/conversational-config-handler.js +175 -0
- package/dist/daemon/handlers/conversational-config-handler.js.map +1 -0
- package/dist/daemon/handlers/post-tool-use-handler.d.ts +9 -0
- package/dist/daemon/handlers/post-tool-use-handler.d.ts.map +1 -0
- package/dist/daemon/handlers/post-tool-use-handler.js +82 -0
- package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -0
- package/dist/daemon/handlers/pre-tool-use-handler.d.ts +11 -0
- package/dist/daemon/handlers/pre-tool-use-handler.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use-handler.js +58 -0
- package/dist/daemon/handlers/pre-tool-use-handler.js.map +1 -0
- package/dist/daemon/handlers/stop-handler.d.ts +11 -0
- package/dist/daemon/handlers/stop-handler.d.ts.map +1 -0
- package/dist/daemon/handlers/stop-handler.js +112 -0
- package/dist/daemon/handlers/stop-handler.js.map +1 -0
- package/dist/daemon/handlers/user-prompt-handler.d.ts +72 -0
- package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -0
- package/dist/daemon/handlers/user-prompt-handler.js +374 -0
- package/dist/daemon/handlers/user-prompt-handler.js.map +1 -0
- package/dist/daemon/index.d.ts +2 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +284 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +9 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +56 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/server.d.ts +22 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +139 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/distill/index.d.ts +16 -0
- package/dist/distill/index.d.ts.map +1 -0
- package/dist/distill/index.js +104 -0
- package/dist/distill/index.js.map +1 -0
- package/dist/distill/prompts.d.ts +6 -0
- package/dist/distill/prompts.d.ts.map +1 -0
- package/dist/distill/prompts.js +77 -0
- package/dist/distill/prompts.js.map +1 -0
- package/dist/distill/trigger.d.ts +40 -0
- package/dist/distill/trigger.d.ts.map +1 -0
- package/dist/distill/trigger.js +127 -0
- package/dist/distill/trigger.js.map +1 -0
- package/dist/distill/writer.d.ts +15 -0
- package/dist/distill/writer.d.ts.map +1 -0
- package/dist/distill/writer.js +73 -0
- package/dist/distill/writer.js.map +1 -0
- package/dist/doc-sync/index.d.ts +21 -0
- package/dist/doc-sync/index.d.ts.map +1 -0
- package/dist/doc-sync/index.js +190 -0
- package/dist/doc-sync/index.js.map +1 -0
- package/dist/hooks/check-context-limit.sh +97 -0
- package/dist/hooks/hooks/check-context-limit.sh +97 -0
- package/dist/hooks/hooks/notification.sh +33 -0
- package/dist/hooks/hooks/post-tool-use.sh +49 -0
- package/dist/hooks/hooks/pre-tool-use.sh +55 -0
- package/dist/hooks/hooks/stop.sh +29 -0
- package/dist/hooks/hooks/user-prompt-submit.sh +72 -0
- package/dist/hooks/notification.sh +33 -0
- package/dist/hooks/post-tool-use.sh +49 -0
- package/dist/hooks/pre-tool-use.sh +55 -0
- package/dist/hooks/stop.sh +29 -0
- package/dist/hooks/user-prompt-submit.sh +72 -0
- package/dist/orchestration/index.d.ts +32 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +72 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/notifier.d.ts +11 -0
- package/dist/orchestration/notifier.d.ts.map +1 -0
- package/dist/orchestration/notifier.js +22 -0
- package/dist/orchestration/notifier.js.map +1 -0
- package/dist/orchestration/policy-engine.d.ts +21 -0
- package/dist/orchestration/policy-engine.d.ts.map +1 -0
- package/dist/orchestration/policy-engine.js +77 -0
- package/dist/orchestration/policy-engine.js.map +1 -0
- package/dist/orchestration/tracker.d.ts +45 -0
- package/dist/orchestration/tracker.d.ts.map +1 -0
- package/dist/orchestration/tracker.js +95 -0
- package/dist/orchestration/tracker.js.map +1 -0
- package/dist/pattern-engine/execution-tracker.d.ts +45 -0
- package/dist/pattern-engine/execution-tracker.d.ts.map +1 -0
- package/dist/pattern-engine/execution-tracker.js +132 -0
- package/dist/pattern-engine/execution-tracker.js.map +1 -0
- package/dist/pattern-engine/index.d.ts +52 -0
- package/dist/pattern-engine/index.d.ts.map +1 -0
- package/dist/pattern-engine/index.js +104 -0
- package/dist/pattern-engine/index.js.map +1 -0
- package/dist/pattern-engine/pattern-evolver.d.ts +39 -0
- package/dist/pattern-engine/pattern-evolver.d.ts.map +1 -0
- package/dist/pattern-engine/pattern-evolver.js +170 -0
- package/dist/pattern-engine/pattern-evolver.js.map +1 -0
- package/dist/pattern-engine/pattern-executor.d.ts +43 -0
- package/dist/pattern-engine/pattern-executor.d.ts.map +1 -0
- package/dist/pattern-engine/pattern-executor.js +185 -0
- package/dist/pattern-engine/pattern-executor.js.map +1 -0
- package/dist/pattern-engine/pattern-loader.d.ts +14 -0
- package/dist/pattern-engine/pattern-loader.d.ts.map +1 -0
- package/dist/pattern-engine/pattern-loader.js +111 -0
- package/dist/pattern-engine/pattern-loader.js.map +1 -0
- package/dist/pattern-engine/pattern-router.d.ts +24 -0
- package/dist/pattern-engine/pattern-router.d.ts.map +1 -0
- package/dist/pattern-engine/pattern-router.js +124 -0
- package/dist/pattern-engine/pattern-router.js.map +1 -0
- package/dist/pattern-engine/types.d.ts +144 -0
- package/dist/pattern-engine/types.d.ts.map +1 -0
- package/dist/pattern-engine/types.js +8 -0
- package/dist/pattern-engine/types.js.map +1 -0
- package/dist/pipeline/analyzer.d.ts +17 -0
- package/dist/pipeline/analyzer.d.ts.map +1 -0
- package/dist/pipeline/analyzer.js +103 -0
- package/dist/pipeline/analyzer.js.map +1 -0
- package/dist/pipeline/index.d.ts +68 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +183 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/phase-manager.d.ts +32 -0
- package/dist/pipeline/phase-manager.d.ts.map +1 -0
- package/dist/pipeline/phase-manager.js +188 -0
- package/dist/pipeline/phase-manager.js.map +1 -0
- package/dist/pipeline/pipeline-options.d.ts +19 -0
- package/dist/pipeline/pipeline-options.d.ts.map +1 -0
- package/dist/pipeline/pipeline-options.js +136 -0
- package/dist/pipeline/pipeline-options.js.map +1 -0
- package/dist/pipeline/store.d.ts +32 -0
- package/dist/pipeline/store.d.ts.map +1 -0
- package/dist/pipeline/store.js +113 -0
- package/dist/pipeline/store.js.map +1 -0
- package/dist/pipeline/types.d.ts +25 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +16 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/profile/index.d.ts +77 -0
- package/dist/profile/index.d.ts.map +1 -0
- package/dist/profile/index.js +407 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/resume/context-gen.d.ts +20 -0
- package/dist/resume/context-gen.d.ts.map +1 -0
- package/dist/resume/context-gen.js +130 -0
- package/dist/resume/context-gen.js.map +1 -0
- package/dist/resume/index.d.ts +32 -0
- package/dist/resume/index.d.ts.map +1 -0
- package/dist/resume/index.js +142 -0
- package/dist/resume/index.js.map +1 -0
- package/dist/resume/state-machine.d.ts +21 -0
- package/dist/resume/state-machine.d.ts.map +1 -0
- package/dist/resume/state-machine.js +58 -0
- package/dist/resume/state-machine.js.map +1 -0
- package/dist/skill-registry/collector.d.ts +75 -0
- package/dist/skill-registry/collector.d.ts.map +1 -0
- package/dist/skill-registry/collector.js +334 -0
- package/dist/skill-registry/collector.js.map +1 -0
- package/dist/skill-registry/evolver.d.ts +84 -0
- package/dist/skill-registry/evolver.d.ts.map +1 -0
- package/dist/skill-registry/evolver.js +585 -0
- package/dist/skill-registry/evolver.js.map +1 -0
- package/dist/skill-registry/index.d.ts +73 -0
- package/dist/skill-registry/index.d.ts.map +1 -0
- package/dist/skill-registry/index.js +195 -0
- package/dist/skill-registry/index.js.map +1 -0
- package/dist/skill-registry/official-sync.d.ts +20 -0
- package/dist/skill-registry/official-sync.d.ts.map +1 -0
- package/dist/skill-registry/official-sync.js +576 -0
- package/dist/skill-registry/official-sync.js.map +1 -0
- package/dist/skill-registry/orchestration-config.d.ts +35 -0
- package/dist/skill-registry/orchestration-config.d.ts.map +1 -0
- package/dist/skill-registry/orchestration-config.js +125 -0
- package/dist/skill-registry/orchestration-config.js.map +1 -0
- package/dist/skill-registry/orchestrator.d.ts +45 -0
- package/dist/skill-registry/orchestrator.d.ts.map +1 -0
- package/dist/skill-registry/orchestrator.js +183 -0
- package/dist/skill-registry/orchestrator.js.map +1 -0
- package/dist/skill-registry/project-learner.d.ts +25 -0
- package/dist/skill-registry/project-learner.d.ts.map +1 -0
- package/dist/skill-registry/project-learner.js +176 -0
- package/dist/skill-registry/project-learner.js.map +1 -0
- package/dist/skill-registry/recommender.d.ts +25 -0
- package/dist/skill-registry/recommender.d.ts.map +1 -0
- package/dist/skill-registry/recommender.js +91 -0
- package/dist/skill-registry/recommender.js.map +1 -0
- package/dist/skill-registry/registry.d.ts +49 -0
- package/dist/skill-registry/registry.d.ts.map +1 -0
- package/dist/skill-registry/registry.js +160 -0
- package/dist/skill-registry/registry.js.map +1 -0
- package/dist/skill-registry/scanner.d.ts +36 -0
- package/dist/skill-registry/scanner.d.ts.map +1 -0
- package/dist/skill-registry/scanner.js +122 -0
- package/dist/skill-registry/scanner.js.map +1 -0
- package/dist/skill-registry/skills-config.d.ts +29 -0
- package/dist/skill-registry/skills-config.d.ts.map +1 -0
- package/dist/skill-registry/skills-config.js +86 -0
- package/dist/skill-registry/skills-config.js.map +1 -0
- package/dist/storage/index.d.ts +31 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/sqlite.d.ts +58 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +375 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/tests/claude-api.test.d.ts +2 -0
- package/dist/tests/claude-api.test.d.ts.map +1 -0
- package/dist/tests/claude-api.test.js +96 -0
- package/dist/tests/claude-api.test.js.map +1 -0
- package/dist/tests/conversational-config-handler.test.d.ts +2 -0
- package/dist/tests/conversational-config-handler.test.d.ts.map +1 -0
- package/dist/tests/conversational-config-handler.test.js +107 -0
- package/dist/tests/conversational-config-handler.test.js.map +1 -0
- package/dist/tests/doc-sync.test.d.ts +2 -0
- package/dist/tests/doc-sync.test.d.ts.map +1 -0
- package/dist/tests/doc-sync.test.js +148 -0
- package/dist/tests/doc-sync.test.js.map +1 -0
- package/dist/tests/orchestration-config.test.d.ts +2 -0
- package/dist/tests/orchestration-config.test.d.ts.map +1 -0
- package/dist/tests/orchestration-config.test.js +122 -0
- package/dist/tests/orchestration-config.test.js.map +1 -0
- package/dist/tests/pipeline-options.test.d.ts +2 -0
- package/dist/tests/pipeline-options.test.d.ts.map +1 -0
- package/dist/tests/pipeline-options.test.js +68 -0
- package/dist/tests/pipeline-options.test.js.map +1 -0
- package/dist/tests/resume-context-gen.test.d.ts +2 -0
- package/dist/tests/resume-context-gen.test.d.ts.map +1 -0
- package/dist/tests/resume-context-gen.test.js +93 -0
- package/dist/tests/resume-context-gen.test.js.map +1 -0
- package/dist/tests/sqlite.test.d.ts +2 -0
- package/dist/tests/sqlite.test.d.ts.map +1 -0
- package/dist/tests/sqlite.test.js +154 -0
- package/dist/tests/sqlite.test.js.map +1 -0
- package/dist/tests/tracker.test.d.ts +2 -0
- package/dist/tests/tracker.test.d.ts.map +1 -0
- package/dist/tests/tracker.test.js +75 -0
- package/dist/tests/tracker.test.js.map +1 -0
- package/dist/tests/tui.test.d.ts +2 -0
- package/dist/tests/tui.test.d.ts.map +1 -0
- package/dist/tests/tui.test.js +39 -0
- package/dist/tests/tui.test.js.map +1 -0
- package/dist/tests/user-prompt-handler.test.d.ts +2 -0
- package/dist/tests/user-prompt-handler.test.d.ts.map +1 -0
- package/dist/tests/user-prompt-handler.test.js +182 -0
- package/dist/tests/user-prompt-handler.test.js.map +1 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +486 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/types/event.d.ts +24 -0
- package/dist/types/event.d.ts.map +1 -0
- package/dist/types/event.js +2 -0
- package/dist/types/event.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/session.d.ts +11 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +2 -0
- package/dist/types/session.js.map +1 -0
- package/dist/utils/claude-api.d.ts +49 -0
- package/dist/utils/claude-api.d.ts.map +1 -0
- package/dist/utils/claude-api.js +233 -0
- package/dist/utils/claude-api.js.map +1 -0
- package/dist/utils/formatter.d.ts +57 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +109 -0
- package/dist/utils/formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +25 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +136 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mutex-lock.d.ts +23 -0
- package/dist/utils/mutex-lock.d.ts.map +1 -0
- package/dist/utils/mutex-lock.js +42 -0
- package/dist/utils/mutex-lock.js.map +1 -0
- package/dist/utils/truncate.d.ts +30 -0
- package/dist/utils/truncate.d.ts.map +1 -0
- package/dist/utils/truncate.js +64 -0
- package/dist/utils/truncate.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,MAAM,EAAE,MAAM,aAAa,CAAC;AAGnD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyC;IAEjE;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa;IAQtD,qBAAqB;IACrB,MAAM,CAAC,cAAc,IAAI,IAAI;IAI7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAK/B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,iBAAiB;IAgEzB,GAAG,IAAI,MAAM;IAIb,cAAc,IAAI,MAAM;IAIxB,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAiBnC,KAAK,IAAI,IAAI;CAMd;AAED,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
import { ConfigSchema } from './schema.js';
|
|
6
|
+
import { defaultConfig } from './defaults.js';
|
|
7
|
+
export class ConfigManager {
|
|
8
|
+
static instances = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* 获取单例实例(同一 configPath 只读一次文件)
|
|
11
|
+
*/
|
|
12
|
+
static getInstance(configPath) {
|
|
13
|
+
const key = configPath || path.join(os.homedir(), '.claude-forge', 'config.yaml');
|
|
14
|
+
if (!ConfigManager.instances.has(key)) {
|
|
15
|
+
ConfigManager.instances.set(key, new ConfigManager(configPath));
|
|
16
|
+
}
|
|
17
|
+
return ConfigManager.instances.get(key);
|
|
18
|
+
}
|
|
19
|
+
/** 仅用于测试:清除所有缓存实例 */
|
|
20
|
+
static clearInstances() {
|
|
21
|
+
ConfigManager.instances.clear();
|
|
22
|
+
}
|
|
23
|
+
config;
|
|
24
|
+
configPath;
|
|
25
|
+
constructor(configPath) {
|
|
26
|
+
this.configPath = configPath || this.getDefaultConfigPath();
|
|
27
|
+
this.config = this.loadConfig();
|
|
28
|
+
}
|
|
29
|
+
getDefaultConfigPath() {
|
|
30
|
+
return path.join(os.homedir(), '.claude-forge', 'config.yaml');
|
|
31
|
+
}
|
|
32
|
+
expandPath(filePath) {
|
|
33
|
+
if (filePath.startsWith('~/')) {
|
|
34
|
+
return path.join(os.homedir(), filePath.slice(2));
|
|
35
|
+
}
|
|
36
|
+
return filePath;
|
|
37
|
+
}
|
|
38
|
+
loadConfig() {
|
|
39
|
+
// 1. 从默认配置开始
|
|
40
|
+
let config = { ...defaultConfig };
|
|
41
|
+
// 2. 如果配置文件存在,加载并合并
|
|
42
|
+
if (fs.existsSync(this.configPath)) {
|
|
43
|
+
try {
|
|
44
|
+
const fileContent = fs.readFileSync(this.configPath, 'utf-8');
|
|
45
|
+
const fileConfig = yaml.load(fileContent);
|
|
46
|
+
config = this.mergeConfig(config, fileConfig);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new Error(`Failed to load config from ${this.configPath}: ${error}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 3. 从环境变量覆盖
|
|
53
|
+
config = this.applyEnvOverrides(config);
|
|
54
|
+
// 4. 校验配置
|
|
55
|
+
try {
|
|
56
|
+
return ConfigSchema.parse(config);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new Error(`Invalid configuration: ${error}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
mergeConfig(base, override) {
|
|
63
|
+
return {
|
|
64
|
+
storage: { ...base.storage, ...override.storage },
|
|
65
|
+
distill: { ...base.distill, ...override.distill },
|
|
66
|
+
resume: { ...base.resume, ...override.resume },
|
|
67
|
+
backup: { ...base.backup, ...override.backup },
|
|
68
|
+
claudemd: { ...base.claudemd, ...override.claudemd },
|
|
69
|
+
orchestration: { ...base.orchestration, ...override.orchestration },
|
|
70
|
+
autopilot: { ...base.autopilot, ...override.autopilot },
|
|
71
|
+
pattern_engine: { ...base.pattern_engine, ...override.pattern_engine },
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
applyEnvOverrides(config) {
|
|
75
|
+
const env = process.env;
|
|
76
|
+
// Storage overrides
|
|
77
|
+
if (env.CLAUDE_FORGE_STORAGE_PATH) {
|
|
78
|
+
config.storage.path = env.CLAUDE_FORGE_STORAGE_PATH;
|
|
79
|
+
}
|
|
80
|
+
if (env.CLAUDE_FORGE_STORAGE_MAX_SIZE_MB) {
|
|
81
|
+
config.storage.max_size_mb = parseInt(env.CLAUDE_FORGE_STORAGE_MAX_SIZE_MB, 10);
|
|
82
|
+
}
|
|
83
|
+
// Distill overrides
|
|
84
|
+
if (env.CLAUDE_FORGE_DISTILL_AUTO_TRIGGER) {
|
|
85
|
+
config.distill.auto_trigger = env.CLAUDE_FORGE_DISTILL_AUTO_TRIGGER === 'true';
|
|
86
|
+
}
|
|
87
|
+
if (env.CLAUDE_FORGE_DISTILL_EVENT_THRESHOLD) {
|
|
88
|
+
config.distill.event_threshold = parseInt(env.CLAUDE_FORGE_DISTILL_EVENT_THRESHOLD, 10);
|
|
89
|
+
}
|
|
90
|
+
// 优先从环境变量读取 API Key(ANTHROPIC_AUTH_TOKEN > ANTHROPIC_API_KEY > CLAUDE_FORGE_DISTILL_API_KEY)
|
|
91
|
+
// 注:config.distill.api_key 已废弃,仅作向后兼容保留
|
|
92
|
+
if (env.ANTHROPIC_AUTH_TOKEN) {
|
|
93
|
+
config.distill.api_key = env.ANTHROPIC_AUTH_TOKEN;
|
|
94
|
+
}
|
|
95
|
+
else if (env.ANTHROPIC_API_KEY) {
|
|
96
|
+
config.distill.api_key = env.ANTHROPIC_API_KEY;
|
|
97
|
+
}
|
|
98
|
+
else if (env.CLAUDE_FORGE_DISTILL_API_KEY) {
|
|
99
|
+
config.distill.api_key = env.CLAUDE_FORGE_DISTILL_API_KEY;
|
|
100
|
+
}
|
|
101
|
+
if (env.CLAUDE_FORGE_DISTILL_MODEL) {
|
|
102
|
+
config.distill.model = env.CLAUDE_FORGE_DISTILL_MODEL;
|
|
103
|
+
}
|
|
104
|
+
// Resume overrides
|
|
105
|
+
if (env.CLAUDE_FORGE_RESUME_ENABLED) {
|
|
106
|
+
config.resume.enabled = env.CLAUDE_FORGE_RESUME_ENABLED === 'true';
|
|
107
|
+
}
|
|
108
|
+
if (env.CLAUDE_FORGE_RESUME_TIMEOUT_MINUTES) {
|
|
109
|
+
config.resume.timeout_minutes = parseInt(env.CLAUDE_FORGE_RESUME_TIMEOUT_MINUTES, 10);
|
|
110
|
+
}
|
|
111
|
+
if (env.CLAUDE_FORGE_RESUME_MAX_AGE_DAYS) {
|
|
112
|
+
config.resume.max_age_days = parseInt(env.CLAUDE_FORGE_RESUME_MAX_AGE_DAYS, 10);
|
|
113
|
+
}
|
|
114
|
+
// Backup overrides
|
|
115
|
+
if (env.CLAUDE_FORGE_BACKUP_INCLUDE_PROFILE) {
|
|
116
|
+
config.backup.include_profile = env.CLAUDE_FORGE_BACKUP_INCLUDE_PROFILE === 'true';
|
|
117
|
+
}
|
|
118
|
+
if (env.CLAUDE_FORGE_BACKUP_ENCRYPT_BY_DEFAULT) {
|
|
119
|
+
config.backup.encrypt_by_default = env.CLAUDE_FORGE_BACKUP_ENCRYPT_BY_DEFAULT === 'true';
|
|
120
|
+
}
|
|
121
|
+
// ClaudeMd overrides
|
|
122
|
+
if (env.CLAUDE_FORGE_CLAUDEMD_AUTO_GENERATE) {
|
|
123
|
+
config.claudemd.auto_generate = env.CLAUDE_FORGE_CLAUDEMD_AUTO_GENERATE === 'true';
|
|
124
|
+
}
|
|
125
|
+
if (env.CLAUDE_FORGE_CLAUDEMD_AUTO_REFINE) {
|
|
126
|
+
config.claudemd.auto_refine = env.CLAUDE_FORGE_CLAUDEMD_AUTO_REFINE === 'true';
|
|
127
|
+
}
|
|
128
|
+
if (env.CLAUDE_FORGE_CLAUDEMD_REFINE_INTERVAL) {
|
|
129
|
+
config.claudemd.refine_interval = parseInt(env.CLAUDE_FORGE_CLAUDEMD_REFINE_INTERVAL, 10);
|
|
130
|
+
}
|
|
131
|
+
return config;
|
|
132
|
+
}
|
|
133
|
+
get() {
|
|
134
|
+
return { ...this.config };
|
|
135
|
+
}
|
|
136
|
+
getStoragePath() {
|
|
137
|
+
return this.expandPath(this.config.storage.path);
|
|
138
|
+
}
|
|
139
|
+
save(config) {
|
|
140
|
+
this.config = this.mergeConfig(this.config, config);
|
|
141
|
+
// 校验新配置
|
|
142
|
+
ConfigSchema.parse(this.config);
|
|
143
|
+
// 确保目录存在
|
|
144
|
+
const dir = path.dirname(this.configPath);
|
|
145
|
+
if (!fs.existsSync(dir)) {
|
|
146
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
147
|
+
}
|
|
148
|
+
// 写入文件
|
|
149
|
+
const yamlContent = yaml.dump(this.config);
|
|
150
|
+
fs.writeFileSync(this.configPath, yamlContent, 'utf-8');
|
|
151
|
+
}
|
|
152
|
+
reset() {
|
|
153
|
+
this.config = { ...defaultConfig };
|
|
154
|
+
if (fs.existsSync(this.configPath)) {
|
|
155
|
+
fs.unlinkSync(this.configPath);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
export { ConfigSchema } from './schema.js';
|
|
160
|
+
export { defaultConfig } from './defaults.js';
|
|
161
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** 合法的 Claude 模型列表。空字符串表示"未配置,从环境变量读取"。 */
|
|
3
|
+
export declare const ALLOWED_MODELS: readonly ["claude-sonnet-4-5", "claude-sonnet-4-6", "claude-opus-4", "claude-haiku-3-5"];
|
|
4
|
+
export type AllowedModel = typeof ALLOWED_MODELS[number];
|
|
5
|
+
export declare const ConfigSchema: z.ZodObject<{
|
|
6
|
+
storage: z.ZodObject<{
|
|
7
|
+
path: z.ZodDefault<z.ZodString>;
|
|
8
|
+
max_size_mb: z.ZodDefault<z.ZodNumber>;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
distill: z.ZodObject<{
|
|
11
|
+
auto_trigger: z.ZodDefault<z.ZodBoolean>;
|
|
12
|
+
event_threshold: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
timer_interval_minutes: z.ZodDefault<z.ZodNumber>;
|
|
14
|
+
api_key: z.ZodDefault<z.ZodString>;
|
|
15
|
+
model: z.ZodDefault<z.ZodString>;
|
|
16
|
+
base_url: z.ZodDefault<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
resume: z.ZodObject<{
|
|
19
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
20
|
+
timeout_minutes: z.ZodDefault<z.ZodNumber>;
|
|
21
|
+
max_age_days: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
backup: z.ZodObject<{
|
|
24
|
+
include_profile: z.ZodDefault<z.ZodBoolean>;
|
|
25
|
+
encrypt_by_default: z.ZodDefault<z.ZodBoolean>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
claudemd: z.ZodDefault<z.ZodObject<{
|
|
28
|
+
auto_generate: z.ZodDefault<z.ZodBoolean>;
|
|
29
|
+
auto_refine: z.ZodDefault<z.ZodBoolean>;
|
|
30
|
+
refine_interval: z.ZodDefault<z.ZodNumber>;
|
|
31
|
+
}, z.core.$strip>>;
|
|
32
|
+
orchestration: z.ZodDefault<z.ZodObject<{
|
|
33
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
+
notify_on_distill: z.ZodDefault<z.ZodBoolean>;
|
|
35
|
+
notify_on_claudemd: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
+
}, z.core.$strip>>;
|
|
37
|
+
autopilot: z.ZodDefault<z.ZodObject<{
|
|
38
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
39
|
+
intent_analysis: z.ZodDefault<z.ZodBoolean>;
|
|
40
|
+
knowledge_search: z.ZodDefault<z.ZodBoolean>;
|
|
41
|
+
quality_gate: z.ZodDefault<z.ZodBoolean>;
|
|
42
|
+
quality_review_interval: z.ZodDefault<z.ZodNumber>;
|
|
43
|
+
knowledge_max_age_days: z.ZodDefault<z.ZodNumber>;
|
|
44
|
+
auto_start_pipeline: z.ZodDefault<z.ZodBoolean>;
|
|
45
|
+
pipeline_confirm_mode: z.ZodDefault<z.ZodEnum<{
|
|
46
|
+
prompt: "prompt";
|
|
47
|
+
auto: "auto";
|
|
48
|
+
preview: "preview";
|
|
49
|
+
}>>;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
pattern_engine: z.ZodDefault<z.ZodObject<{
|
|
52
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
53
|
+
route_timeout_ms: z.ZodDefault<z.ZodNumber>;
|
|
54
|
+
evolve_interval_days: z.ZodDefault<z.ZodNumber>;
|
|
55
|
+
evolve_min_executions: z.ZodDefault<z.ZodNumber>;
|
|
56
|
+
}, z.core.$strip>>;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
59
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,2CAA2C;AAC3C,eAAO,MAAM,cAAc,0FAKjB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+EvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** 合法的 Claude 模型列表。空字符串表示"未配置,从环境变量读取"。 */
|
|
3
|
+
export const ALLOWED_MODELS = [
|
|
4
|
+
'claude-sonnet-4-5',
|
|
5
|
+
'claude-sonnet-4-6',
|
|
6
|
+
'claude-opus-4',
|
|
7
|
+
'claude-haiku-3-5',
|
|
8
|
+
];
|
|
9
|
+
export const ConfigSchema = z.object({
|
|
10
|
+
storage: z.object({
|
|
11
|
+
path: z.string().default('~/.claude-forge/data.db'),
|
|
12
|
+
max_size_mb: z.number().int().positive().default(1024),
|
|
13
|
+
}),
|
|
14
|
+
distill: z.object({
|
|
15
|
+
auto_trigger: z.boolean().default(true),
|
|
16
|
+
event_threshold: z.number().int().positive().default(100),
|
|
17
|
+
timer_interval_minutes: z.number().int().positive().default(30),
|
|
18
|
+
api_key: z.string().default(''),
|
|
19
|
+
model: z.string()
|
|
20
|
+
.refine((v) => v === '' || ALLOWED_MODELS.includes(v), { message: `distill.model must be one of: ${ALLOWED_MODELS.join(', ')}` })
|
|
21
|
+
.default('claude-sonnet-4-6'),
|
|
22
|
+
base_url: z.string().default(''),
|
|
23
|
+
}),
|
|
24
|
+
resume: z.object({
|
|
25
|
+
enabled: z.boolean().default(true),
|
|
26
|
+
timeout_minutes: z.number().int().positive().default(10),
|
|
27
|
+
max_age_days: z.number().int().positive().default(7),
|
|
28
|
+
}),
|
|
29
|
+
backup: z.object({
|
|
30
|
+
include_profile: z.boolean().default(false),
|
|
31
|
+
encrypt_by_default: z.boolean().default(false),
|
|
32
|
+
}),
|
|
33
|
+
claudemd: z.object({
|
|
34
|
+
auto_generate: z.boolean().default(true),
|
|
35
|
+
auto_refine: z.boolean().default(true),
|
|
36
|
+
refine_interval: z.number().int().positive().default(3),
|
|
37
|
+
}).default({
|
|
38
|
+
auto_generate: true,
|
|
39
|
+
auto_refine: true,
|
|
40
|
+
refine_interval: 3,
|
|
41
|
+
}),
|
|
42
|
+
orchestration: z.object({
|
|
43
|
+
enabled: z.boolean().default(true),
|
|
44
|
+
notify_on_distill: z.boolean().default(true),
|
|
45
|
+
notify_on_claudemd: z.boolean().default(true),
|
|
46
|
+
}).default({
|
|
47
|
+
enabled: true,
|
|
48
|
+
notify_on_distill: true,
|
|
49
|
+
notify_on_claudemd: true,
|
|
50
|
+
}),
|
|
51
|
+
autopilot: z.object({
|
|
52
|
+
enabled: z.boolean().default(true),
|
|
53
|
+
intent_analysis: z.boolean().default(true),
|
|
54
|
+
knowledge_search: z.boolean().default(true),
|
|
55
|
+
quality_gate: z.boolean().default(true),
|
|
56
|
+
quality_review_interval: z.number().int().positive().default(3),
|
|
57
|
+
knowledge_max_age_days: z.number().int().positive().default(90),
|
|
58
|
+
auto_start_pipeline: z.boolean().default(true),
|
|
59
|
+
/** 编排确认模式:prompt=先给用户选择,auto=自动启动,preview=仅展示不启动 */
|
|
60
|
+
pipeline_confirm_mode: z.enum(['prompt', 'auto', 'preview']).default('prompt'),
|
|
61
|
+
}).default({
|
|
62
|
+
enabled: true,
|
|
63
|
+
intent_analysis: true,
|
|
64
|
+
knowledge_search: true,
|
|
65
|
+
quality_gate: true,
|
|
66
|
+
quality_review_interval: 3,
|
|
67
|
+
knowledge_max_age_days: 90,
|
|
68
|
+
auto_start_pipeline: true,
|
|
69
|
+
pipeline_confirm_mode: 'prompt',
|
|
70
|
+
}),
|
|
71
|
+
pattern_engine: z.object({
|
|
72
|
+
enabled: z.boolean().default(true),
|
|
73
|
+
/** AI 路由超时(毫秒),超时后降级到关键词匹配 */
|
|
74
|
+
route_timeout_ms: z.number().int().positive().default(60_000),
|
|
75
|
+
/** Pattern 自进化间隔(天) */
|
|
76
|
+
evolve_interval_days: z.number().int().positive().default(7),
|
|
77
|
+
/** 触发自进化的最低执行次数阈值 */
|
|
78
|
+
evolve_min_executions: z.number().int().positive().default(20),
|
|
79
|
+
}).default({
|
|
80
|
+
enabled: true,
|
|
81
|
+
route_timeout_ms: 60_000,
|
|
82
|
+
evolve_interval_days: 7,
|
|
83
|
+
evolve_min_executions: 20,
|
|
84
|
+
}),
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,2CAA2C;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB;IACnB,mBAAmB;IACnB,eAAe;IACf,kBAAkB;CACV,CAAC;AAIX,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC;QACnD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KACvD,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACzD,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;aACd,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAK,cAAoC,CAAC,QAAQ,CAAC,CAAC,CAAC,EACpE,EAAE,OAAO,EAAE,iCAAiC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAC1E;aACA,OAAO,CAAC,mBAAmB,CAAC;QAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KACjC,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAClC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;KACrD,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3C,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;KAC/C,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACtC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;KACxD,CAAC,CAAC,OAAO,CAAC;QACT,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,CAAC;KACnB,CAAC;IACF,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAClC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5C,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAC9C,CAAC,CAAC,OAAO,CAAC;QACT,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,IAAI;KACzB,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAClC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9C,oDAAoD;QACpD,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;KAC/E,CAAC,CAAC,OAAO,CAAC;QACT,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,IAAI;QAClB,uBAAuB,EAAE,CAAC;QAC1B,sBAAsB,EAAE,EAAE;QAC1B,mBAAmB,EAAE,IAAI;QACzB,qBAAqB,EAAE,QAAQ;KAChC,CAAC;IACF,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC;QACvB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAClC,8BAA8B;QAC9B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7D,uBAAuB;QACvB,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,qBAAqB;QACrB,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KAC/D,CAAC,CAAC,OAAO,CAAC;QACT,OAAO,EAAE,IAAI;QACb,gBAAgB,EAAE,MAAM;QACxB,oBAAoB,EAAE,CAAC;QACvB,qBAAqB,EAAE,EAAE;KAC1B,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ClaudeAPI } from '../utils/claude-api.js';
|
|
2
|
+
import type { ConventionLoader } from './convention-loader.js';
|
|
3
|
+
import type { Convention, ConventionDistillResult } from './types.js';
|
|
4
|
+
import type { ProjectProfile } from '../claudemd/detector.js';
|
|
5
|
+
export declare class ConventionDistiller {
|
|
6
|
+
private api;
|
|
7
|
+
private loader;
|
|
8
|
+
constructor(api: ClaudeAPI, loader: ConventionLoader);
|
|
9
|
+
static customId(projectPath: string): string;
|
|
10
|
+
static customFilePath(projectPath: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* 蒸馏项目级自定义规范。
|
|
13
|
+
* - sourceConventions 为空时,根据 projectProfile 纯技术栈生成
|
|
14
|
+
* - sourceConventions 非空时,合并源规范(同时可融合技术栈信息)
|
|
15
|
+
* - existingCustom 存在时为增量合并,否则全量生成
|
|
16
|
+
*/
|
|
17
|
+
distill(projectPath: string, sourceConventions: Convention[], existingCustom?: Convention | null, projectProfile?: ProjectProfile | null): Promise<{
|
|
18
|
+
convention: Convention;
|
|
19
|
+
result: ConventionDistillResult;
|
|
20
|
+
}>;
|
|
21
|
+
private mergeWithAI;
|
|
22
|
+
private parseAIResponse;
|
|
23
|
+
private fallbackMerge;
|
|
24
|
+
private fallbackPrinciples;
|
|
25
|
+
private mergeRoles;
|
|
26
|
+
private bumpVersion;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=convention-distiller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convention-distiller.d.ts","sourceRoot":"","sources":["../../src/convention/convention-distiller.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAkB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAU9D,qBAAa,mBAAmB;IAClB,OAAO,CAAC,GAAG;IAAa,OAAO,CAAC,MAAM;gBAA9B,GAAG,EAAE,SAAS,EAAU,MAAM,EAAE,gBAAgB;IAEpE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAI5C,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIlD;;;;;OAKG;IACG,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,cAAc,CAAC,EAAE,UAAU,GAAG,IAAI,EAClC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,OAAO,CAAC;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,CAAC;YAuDzD,WAAW;IAoDzB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;CAQpB"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
export class ConventionDistiller {
|
|
6
|
+
api;
|
|
7
|
+
loader;
|
|
8
|
+
constructor(api, loader) {
|
|
9
|
+
this.api = api;
|
|
10
|
+
this.loader = loader;
|
|
11
|
+
}
|
|
12
|
+
static customId(projectPath) {
|
|
13
|
+
return `custom-${path.basename(projectPath)}`;
|
|
14
|
+
}
|
|
15
|
+
static customFilePath(projectPath) {
|
|
16
|
+
return path.join(projectPath, '.claude-forge', 'custom-convention.yaml');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 蒸馏项目级自定义规范。
|
|
20
|
+
* - sourceConventions 为空时,根据 projectProfile 纯技术栈生成
|
|
21
|
+
* - sourceConventions 非空时,合并源规范(同时可融合技术栈信息)
|
|
22
|
+
* - existingCustom 存在时为增量合并,否则全量生成
|
|
23
|
+
*/
|
|
24
|
+
async distill(projectPath, sourceConventions, existingCustom, projectProfile) {
|
|
25
|
+
if (sourceConventions.length === 0 && !projectProfile) {
|
|
26
|
+
throw new Error('至少需要一个源规范或项目技术栈信息才能蒸馏');
|
|
27
|
+
}
|
|
28
|
+
const customId = ConventionDistiller.customId(projectPath);
|
|
29
|
+
const filePath = ConventionDistiller.customFilePath(projectPath);
|
|
30
|
+
const aiResult = await this.mergeWithAI(sourceConventions, existingCustom ?? null, projectProfile ?? null);
|
|
31
|
+
const previousVersion = existingCustom?.version ?? null;
|
|
32
|
+
const newVersion = existingCustom
|
|
33
|
+
? this.bumpVersion(existingCustom.version)
|
|
34
|
+
: '1.0.0';
|
|
35
|
+
const mergedRoles = this.mergeRoles(existingCustom?.roles ?? {}, [aiResult.new_roles]);
|
|
36
|
+
const description = sourceConventions.length > 0
|
|
37
|
+
? `从 ${sourceConventions.map((c) => c.name).join('、')} 蒸馏的项目级综合规范`
|
|
38
|
+
: `根据 ${path.basename(projectPath)} 项目技术栈自动生成的规范`;
|
|
39
|
+
const convention = {
|
|
40
|
+
id: customId,
|
|
41
|
+
name: `${path.basename(projectPath)} 综合规范`,
|
|
42
|
+
version: newVersion,
|
|
43
|
+
description,
|
|
44
|
+
source: 'user',
|
|
45
|
+
principles: aiResult.principles,
|
|
46
|
+
active_prompt: aiResult.active_prompt,
|
|
47
|
+
roles: mergedRoles,
|
|
48
|
+
quality_standards: aiResult.quality_standards,
|
|
49
|
+
evolution: { auto_optimize: true, optimize_interval_days: 7 },
|
|
50
|
+
filePath,
|
|
51
|
+
};
|
|
52
|
+
const dir = path.dirname(filePath);
|
|
53
|
+
if (!fs.existsSync(dir))
|
|
54
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
55
|
+
const { filePath: _fp, ...serializable } = convention;
|
|
56
|
+
fs.writeFileSync(filePath, yaml.dump(serializable, { lineWidth: 120, noRefs: true }), 'utf-8');
|
|
57
|
+
logger.info(`[规范蒸馏器] 已写入 ${filePath} v${newVersion}`);
|
|
58
|
+
const distillResult = {
|
|
59
|
+
customConventionId: customId,
|
|
60
|
+
previousVersion,
|
|
61
|
+
newVersion,
|
|
62
|
+
sourcesUsed: sourceConventions.map((c) => c.id),
|
|
63
|
+
changes: aiResult.changes,
|
|
64
|
+
};
|
|
65
|
+
return { convention, result: distillResult };
|
|
66
|
+
}
|
|
67
|
+
async mergeWithAI(sources, existing, profile) {
|
|
68
|
+
const taskType = existing ? '增量合并' : (sources.length > 0 ? '全量提炼' : '技术栈生成');
|
|
69
|
+
const profileSection = profile
|
|
70
|
+
? `## 项目技术栈\n语言:${profile.languages.map((l) => l.name + (l.version ? ` ${l.version}` : '')).join('、') || '未知'}\n框架:${profile.frameworks.map((f) => f.name).join('、') || '无'}\n\n`
|
|
71
|
+
: '';
|
|
72
|
+
const sourceSections = sources.length > 0
|
|
73
|
+
? `## 源规范\n\n${sources.map((c) => {
|
|
74
|
+
const rolesYaml = Object.entries(c.roles)
|
|
75
|
+
.map(([k, v]) => ` ${k}:\n name: ${v.name}\n responsibilities: ${v.responsibilities.slice(0, 120)}\n constraints: ${v.constraints.slice(0, 80)}`)
|
|
76
|
+
.join('\n');
|
|
77
|
+
const standards = c.quality_standards
|
|
78
|
+
.map((s) => ` - [${s.severity}] ${s.category}: ${s.rule}`)
|
|
79
|
+
.join('\n');
|
|
80
|
+
return `### ${c.name} (${c.id})\n原则摘要:${c.principles.slice(0, 300)}\n激活提示:${c.active_prompt.slice(0, 200)}\n角色:\n${rolesYaml || ' (无)'}\n质量标准:\n${standards || ' (无)'}`;
|
|
81
|
+
}).join('\n\n')}\n\n`
|
|
82
|
+
: '';
|
|
83
|
+
const existingSection = existing
|
|
84
|
+
? `## 现有自定义规范(增量合并基础)\n原则:${existing.principles.slice(0, 400)}\n激活提示:${existing.active_prompt.slice(0, 200)}\n质量标准数:${existing.quality_standards.length}\n角色数:${Object.keys(existing.roles).length}\n\n`
|
|
85
|
+
: '';
|
|
86
|
+
const prompt = `你是一个工程规范专家,负责为项目生成或更新开发规范。
|
|
87
|
+
|
|
88
|
+
## 任务类型:${taskType}
|
|
89
|
+
|
|
90
|
+
${profileSection}${existingSection}${sourceSections}## 生成规则
|
|
91
|
+
1. principles:针对项目技术栈提炼最关键的工程原则,具体可执行;若有源规范则融合其核心优势,冲突时生成"视上下文而定"的折中原则
|
|
92
|
+
2. active_prompt:综合技术栈特点和规范要求,简洁有力,不超过 200 字
|
|
93
|
+
3. quality_standards:覆盖代码质量、架构、测试、安全等维度,去重;severity 按重要性设定
|
|
94
|
+
4. new_roles:定义项目适合的角色(如 architect、developer、reviewer),若为增量则只返回新增角色
|
|
95
|
+
5. changes:列出本次生成/合并的关键点(3-8 条)
|
|
96
|
+
${existing ? '6. 增量模式:只在现有基础上追加/优化,不删除现有内容' : ''}
|
|
97
|
+
|
|
98
|
+
## 输出格式(严格 JSON,不要用代码块包裹)
|
|
99
|
+
{
|
|
100
|
+
"principles": "...",
|
|
101
|
+
"active_prompt": "...",
|
|
102
|
+
"quality_standards": [{"category": "...", "rule": "...", "severity": "must|should|may"}],
|
|
103
|
+
"new_roles": {},
|
|
104
|
+
"changes": ["..."]
|
|
105
|
+
}`;
|
|
106
|
+
const response = await this.api.complete(prompt, 'convention-distill');
|
|
107
|
+
return this.parseAIResponse(response, sources, existing);
|
|
108
|
+
}
|
|
109
|
+
parseAIResponse(response, sources, existing) {
|
|
110
|
+
try {
|
|
111
|
+
const cleaned = response.replace(/```(?:json)?\s*/g, '').replace(/```\s*/g, '').trim();
|
|
112
|
+
const jsonMatch = cleaned.match(/\{[\s\S]*\}/);
|
|
113
|
+
if (!jsonMatch)
|
|
114
|
+
throw new Error('未找到 JSON');
|
|
115
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
116
|
+
return {
|
|
117
|
+
principles: parsed.principles ?? this.fallbackPrinciples(sources),
|
|
118
|
+
active_prompt: parsed.active_prompt ?? (sources[0]?.active_prompt ?? '请遵循项目规范进行开发'),
|
|
119
|
+
quality_standards: Array.isArray(parsed.quality_standards) ? parsed.quality_standards : [],
|
|
120
|
+
new_roles: parsed.new_roles && typeof parsed.new_roles === 'object' ? parsed.new_roles : {},
|
|
121
|
+
changes: Array.isArray(parsed.changes) ? parsed.changes : ['AI 蒸馏完成'],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
logger.warn(`[规范蒸馏器] AI 响应解析失败,使用降级策略:${err}`);
|
|
126
|
+
return this.fallbackMerge(sources, existing);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
fallbackMerge(sources, existing) {
|
|
130
|
+
const allStandards = sources.flatMap((c) => c.quality_standards);
|
|
131
|
+
const seen = new Set();
|
|
132
|
+
const deduped = allStandards.filter((s) => {
|
|
133
|
+
const key = `${s.category}:${s.rule}`;
|
|
134
|
+
if (seen.has(key))
|
|
135
|
+
return false;
|
|
136
|
+
seen.add(key);
|
|
137
|
+
return true;
|
|
138
|
+
});
|
|
139
|
+
return {
|
|
140
|
+
principles: existing?.principles ?? this.fallbackPrinciples(sources),
|
|
141
|
+
active_prompt: existing?.active_prompt ?? (sources[0]?.active_prompt ?? '请遵循项目规范进行开发'),
|
|
142
|
+
quality_standards: deduped,
|
|
143
|
+
new_roles: {},
|
|
144
|
+
changes: ['降级合并:AI 调用失败,使用规则合并'],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
fallbackPrinciples(sources) {
|
|
148
|
+
if (sources.length === 0)
|
|
149
|
+
return '遵循项目技术栈最佳实践';
|
|
150
|
+
return sources.map((c) => `## 来自 ${c.name}\n${c.principles.slice(0, 200)}`).join('\n\n');
|
|
151
|
+
}
|
|
152
|
+
mergeRoles(existing, incomingList) {
|
|
153
|
+
const merged = { ...existing };
|
|
154
|
+
for (const incoming of incomingList) {
|
|
155
|
+
for (const [key, role] of Object.entries(incoming)) {
|
|
156
|
+
if (!merged[key]) {
|
|
157
|
+
merged[key] = role;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return merged;
|
|
162
|
+
}
|
|
163
|
+
bumpVersion(version) {
|
|
164
|
+
const parts = version.split('.').map(Number);
|
|
165
|
+
if (parts.length >= 2 && !isNaN(parts[1])) {
|
|
166
|
+
parts[1] += 1;
|
|
167
|
+
return parts.join('.');
|
|
168
|
+
}
|
|
169
|
+
return version + '.1';
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=convention-distiller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convention-distiller.js","sourceRoot":"","sources":["../../src/convention/convention-distiller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ConventionLoader } from './convention-loader.js';
|
|
2
|
+
import type { ClaudeAPI } from '../utils/claude-api.js';
|
|
3
|
+
import type { SQLiteStorage } from '../storage/sqlite.js';
|
|
4
|
+
import type { Convention, ConventionEvolveResult } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* ConventionEvolver:从 Pattern 执行历史分析规范违反情况,用 AI 优化 Convention。
|
|
7
|
+
*
|
|
8
|
+
* 只优化 principles 和 quality_standards,不改变 roles 结构(角色是稳定契约)。
|
|
9
|
+
* 进化触发条件:手动调用 evolve(),或 auto_optimize=true 时由 SkillEvolver 定期触发。
|
|
10
|
+
*/
|
|
11
|
+
export declare class ConventionEvolver {
|
|
12
|
+
private readonly api;
|
|
13
|
+
private readonly storage;
|
|
14
|
+
private readonly loader;
|
|
15
|
+
constructor(api: ClaudeAPI, storage: SQLiteStorage, loader: ConventionLoader);
|
|
16
|
+
/**
|
|
17
|
+
* 对指定 Convention 执行一次进化分析。
|
|
18
|
+
* 返回 null 表示无需进化(数据不足或 AI 判断无需修改)。
|
|
19
|
+
*/
|
|
20
|
+
evolve(convention: Convention): Promise<ConventionEvolveResult | null>;
|
|
21
|
+
/**
|
|
22
|
+
* 对所有项目的 custom 规范执行进化。
|
|
23
|
+
* 源规范(非 custom- 前缀)不参与进化,由 distill 负责更新。
|
|
24
|
+
*/
|
|
25
|
+
evolveAll(projectPaths?: string[]): Promise<ConventionEvolveResult[]>;
|
|
26
|
+
/** 从 SQLite events 分析 gate 失败情况 */
|
|
27
|
+
private analyzeViolations;
|
|
28
|
+
private optimizeWithAI;
|
|
29
|
+
private bumpVersion;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=convention-evolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convention-evolver.d.ts","sourceRoot":"","sources":["../../src/convention/convention-evolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAmB,MAAM,YAAY,CAAC;AAStF;;;;;GAKG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,gBAAgB;IAG3C;;;OAGG;IACG,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IA2B5E;;;OAGG;IACG,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAgC3E,mCAAmC;IACnC,OAAO,CAAC,iBAAiB;YAkCX,cAAc;IAiE5B,OAAO,CAAC,WAAW;CAQpB"}
|