@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,45 @@
|
|
|
1
|
+
import type { ForgeEvent } from '../types/index.js';
|
|
2
|
+
import type { SQLiteStorage } from '../storage/sqlite.js';
|
|
3
|
+
import type { PatternExecution } from './types.js';
|
|
4
|
+
import type { PatternExecutor } from './pattern-executor.js';
|
|
5
|
+
import type { Pattern } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* ExecutionTracer:PostToolUse 状态机推进器。
|
|
8
|
+
*
|
|
9
|
+
* 职责:
|
|
10
|
+
* 1. 监听 PostToolUse 事件,检测当前阶段的 completion_signal
|
|
11
|
+
* 2. 将阶段执行记录写入 SQLite pattern_executions 表
|
|
12
|
+
* 3. 调用 PatternExecutor.advancePhase() 推进状态机
|
|
13
|
+
*
|
|
14
|
+
* 不负责:AI 调用、prompt 渲染、Pattern 路由
|
|
15
|
+
*/
|
|
16
|
+
export declare class ExecutionTracer {
|
|
17
|
+
private readonly storage;
|
|
18
|
+
private readonly executor;
|
|
19
|
+
/** 记录每个 planId+phaseId 的开始时间(毫秒时间戳) */
|
|
20
|
+
private phaseStartTimes;
|
|
21
|
+
constructor(storage: SQLiteStorage, executor: PatternExecutor);
|
|
22
|
+
/**
|
|
23
|
+
* 处理 PostToolUse 事件。
|
|
24
|
+
* 若当前项目有活跃 Pattern 计划且检测到 completion_signal,则推进阶段。
|
|
25
|
+
*
|
|
26
|
+
* @returns 推进后的下一阶段 ID,null 表示未推进或 Pattern 已完成
|
|
27
|
+
*/
|
|
28
|
+
onPostToolUse(event: ForgeEvent, pattern: Pattern): Promise<string | null>;
|
|
29
|
+
/**
|
|
30
|
+
* 记录阶段开始(在 PatternExecutor.startPlan 后调用)。
|
|
31
|
+
*/
|
|
32
|
+
recordPhaseStart(planId: string, phaseId: string, patternId: string, sessionId: string, projectPath: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* 将执行记录写入 SQLite。
|
|
35
|
+
* 使用 INSERT OR REPLACE 以支持状态更新(running → completed)。
|
|
36
|
+
*/
|
|
37
|
+
private writeExecution;
|
|
38
|
+
/**
|
|
39
|
+
* 查询指定 Pattern 的最近执行记录(供 PatternEvolver 使用)。
|
|
40
|
+
*/
|
|
41
|
+
queryExecutions(patternId: string, limit?: number): PatternExecution[];
|
|
42
|
+
/** 更新用户满意度(+1 正向 / -1 负向 / 0 中性) */
|
|
43
|
+
updateSatisfaction(executionId: string, satisfaction: number): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=execution-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-tracker.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/execution-tracker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAM1C;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,uCAAuC;IACvC,OAAO,CAAC,eAAe,CAA6B;gBAGjC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,eAAe;IAG5C;;;;;OAKG;IACG,aAAa,CACjB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiEzB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBlH;;;OAGG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,gBAAgB,EAAE;IASlE,oCAAoC;IACpC,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;CAOpE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
import { truncateHead } from '../utils/truncate.js';
|
|
4
|
+
const OUTPUT_MAX_CHARS = 500;
|
|
5
|
+
/**
|
|
6
|
+
* ExecutionTracer:PostToolUse 状态机推进器。
|
|
7
|
+
*
|
|
8
|
+
* 职责:
|
|
9
|
+
* 1. 监听 PostToolUse 事件,检测当前阶段的 completion_signal
|
|
10
|
+
* 2. 将阶段执行记录写入 SQLite pattern_executions 表
|
|
11
|
+
* 3. 调用 PatternExecutor.advancePhase() 推进状态机
|
|
12
|
+
*
|
|
13
|
+
* 不负责:AI 调用、prompt 渲染、Pattern 路由
|
|
14
|
+
*/
|
|
15
|
+
export class ExecutionTracer {
|
|
16
|
+
storage;
|
|
17
|
+
executor;
|
|
18
|
+
/** 记录每个 planId+phaseId 的开始时间(毫秒时间戳) */
|
|
19
|
+
phaseStartTimes = new Map();
|
|
20
|
+
constructor(storage, executor) {
|
|
21
|
+
this.storage = storage;
|
|
22
|
+
this.executor = executor;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 处理 PostToolUse 事件。
|
|
26
|
+
* 若当前项目有活跃 Pattern 计划且检测到 completion_signal,则推进阶段。
|
|
27
|
+
*
|
|
28
|
+
* @returns 推进后的下一阶段 ID,null 表示未推进或 Pattern 已完成
|
|
29
|
+
*/
|
|
30
|
+
async onPostToolUse(event, pattern) {
|
|
31
|
+
const plan = this.executor.getActivePlan(event.project_path);
|
|
32
|
+
if (!plan?.currentPhaseId)
|
|
33
|
+
return null;
|
|
34
|
+
const toolName = event.tool_name ?? '';
|
|
35
|
+
const toolInput = (event.tool_input ?? {});
|
|
36
|
+
const triggered = this.executor.checkCompletionSignal(event.project_path, toolName, toolInput, pattern);
|
|
37
|
+
if (!triggered)
|
|
38
|
+
return null;
|
|
39
|
+
const completedPhaseId = plan.currentPhaseId;
|
|
40
|
+
const startKey = `${plan.id}:${completedPhaseId}`;
|
|
41
|
+
const startedAt = this.phaseStartTimes.get(startKey);
|
|
42
|
+
const completedAt = new Date().toISOString();
|
|
43
|
+
const durationMs = startedAt ? Date.now() - startedAt : null;
|
|
44
|
+
// 提取阶段输出摘要(tool_output 截断到 500 字符)
|
|
45
|
+
const rawOutput = String(event.tool_output ?? '');
|
|
46
|
+
const output = truncateHead(rawOutput, OUTPUT_MAX_CHARS);
|
|
47
|
+
// 写入 SQLite
|
|
48
|
+
this.writeExecution({
|
|
49
|
+
id: randomUUID(),
|
|
50
|
+
pattern_id: pattern.id,
|
|
51
|
+
session_id: plan.sessionId,
|
|
52
|
+
project_path: event.project_path,
|
|
53
|
+
phase_id: completedPhaseId,
|
|
54
|
+
status: 'completed',
|
|
55
|
+
started_at: startedAt ? new Date(startedAt).toISOString() : null,
|
|
56
|
+
completed_at: completedAt,
|
|
57
|
+
duration_ms: durationMs,
|
|
58
|
+
output,
|
|
59
|
+
user_satisfaction: null,
|
|
60
|
+
created_at: new Date().toISOString(),
|
|
61
|
+
});
|
|
62
|
+
this.phaseStartTimes.delete(startKey);
|
|
63
|
+
// 推进状态机
|
|
64
|
+
const nextPhaseId = this.executor.advancePhase(event.project_path, completedPhaseId, output, pattern);
|
|
65
|
+
// 若有下一阶段,记录其开始时间
|
|
66
|
+
if (nextPhaseId) {
|
|
67
|
+
const nextKey = `${plan.id}:${nextPhaseId}`;
|
|
68
|
+
this.phaseStartTimes.set(nextKey, Date.now());
|
|
69
|
+
logger.info(`[Forge:追踪器] 阶段 ${completedPhaseId} 完成 → 推进到 ${nextPhaseId}`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
logger.info(`[Forge:追踪器] Pattern ${pattern.id} 全部阶段完成`);
|
|
73
|
+
this.executor.clearPlan(event.project_path);
|
|
74
|
+
}
|
|
75
|
+
return nextPhaseId;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 记录阶段开始(在 PatternExecutor.startPlan 后调用)。
|
|
79
|
+
*/
|
|
80
|
+
recordPhaseStart(planId, phaseId, patternId, sessionId, projectPath) {
|
|
81
|
+
const key = `${planId}:${phaseId}`;
|
|
82
|
+
this.phaseStartTimes.set(key, Date.now());
|
|
83
|
+
this.writeExecution({
|
|
84
|
+
id: randomUUID(),
|
|
85
|
+
pattern_id: patternId,
|
|
86
|
+
session_id: sessionId,
|
|
87
|
+
project_path: projectPath,
|
|
88
|
+
phase_id: phaseId,
|
|
89
|
+
status: 'running',
|
|
90
|
+
started_at: new Date().toISOString(),
|
|
91
|
+
completed_at: null,
|
|
92
|
+
duration_ms: null,
|
|
93
|
+
output: null,
|
|
94
|
+
user_satisfaction: null,
|
|
95
|
+
created_at: new Date().toISOString(),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 将执行记录写入 SQLite。
|
|
100
|
+
* 使用 INSERT OR REPLACE 以支持状态更新(running → completed)。
|
|
101
|
+
*/
|
|
102
|
+
writeExecution(record) {
|
|
103
|
+
try {
|
|
104
|
+
this.storage.writePatternExecution(record);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
logger.warn(`[Forge:追踪器] 写入执行记录失败:${err}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 查询指定 Pattern 的最近执行记录(供 PatternEvolver 使用)。
|
|
112
|
+
*/
|
|
113
|
+
queryExecutions(patternId, limit = 50) {
|
|
114
|
+
try {
|
|
115
|
+
return this.storage.queryPatternExecutions(patternId, limit);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
logger.warn(`[Forge:追踪器] 查询执行记录失败:${err}`);
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** 更新用户满意度(+1 正向 / -1 负向 / 0 中性) */
|
|
123
|
+
updateSatisfaction(executionId, satisfaction) {
|
|
124
|
+
try {
|
|
125
|
+
this.storage.updatePatternSatisfaction(executionId, satisfaction);
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
logger.warn(`[Forge:追踪器] 更新满意度失败:${err}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=execution-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-tracker.js","sourceRoot":"","sources":["../../src/pattern-engine/execution-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAMpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;;;;GASG;AACH,MAAM,OAAO,eAAe;IAKP;IACA;IALnB,uCAAuC;IAC/B,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,YACmB,OAAsB,EACtB,QAAyB;QADzB,YAAO,GAAP,OAAO,CAAe;QACtB,aAAQ,GAAR,QAAQ,CAAiB;IACzC,CAAC;IAEJ;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CACjB,KAAiB,EACjB,OAAgB;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,cAAc;YAAE,OAAO,IAAI,CAAC;QAEvC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAA4B,CAAC;QAEtE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CACnD,KAAK,CAAC,YAAY,EAClB,QAAQ,EACR,SAAS,EACT,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,gBAAgB,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7D,mCAAmC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAEzD,YAAY;QACZ,IAAI,CAAC,cAAc,CAAC;YAClB,EAAE,EAAE,UAAU,EAAE;YAChB,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,QAAQ,EAAE,gBAAgB;YAC1B,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;YAChE,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,UAAU;YACvB,MAAM;YACN,iBAAiB,EAAE,IAAI;YACvB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtC,QAAQ;QACR,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAC5C,KAAK,CAAC,YAAY,EAClB,gBAAgB,EAChB,MAAM,EACN,OAAO,CACR,CAAC;QAEF,iBAAiB;QACjB,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,kBAAkB,gBAAgB,aAAa,WAAW,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAc,EAAE,OAAe,EAAE,SAAiB,EAAE,SAAiB,EAAE,WAAmB;QACzG,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,cAAc,CAAC;YAClB,EAAE,EAAE,UAAU,EAAE;YAChB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,WAAW;YACzB,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,IAAI;YACZ,iBAAiB,EAAE,IAAI;YACvB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,MAAwB;QAC7C,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;QAC3C,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;YAC3C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,kBAAkB,CAAC,WAAmB,EAAE,YAAoB;QAC1D,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { PatternLoader } from './pattern-loader.js';
|
|
2
|
+
import { ExecutionTracer } from './execution-tracker.js';
|
|
3
|
+
import type { ClaudeAPI } from '../utils/claude-api.js';
|
|
4
|
+
import type { SQLiteStorage } from '../storage/sqlite.js';
|
|
5
|
+
import type { Pattern, RouteResult, PatternContext, ExecutionPlan } from './types.js';
|
|
6
|
+
import type { Convention } from '../convention/types.js';
|
|
7
|
+
import type { ForgeEvent } from '../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* PatternEngine 门面类:统一入口,供 daemon handler 调用。
|
|
10
|
+
*
|
|
11
|
+
* Phase 1 提供:Pattern 加载与路由。
|
|
12
|
+
* Phase 2 扩展:PatternExecutor、ExecutionTracer。
|
|
13
|
+
* Phase 3 将在此扩展:PatternEvolver。
|
|
14
|
+
*/
|
|
15
|
+
export declare class PatternEngine {
|
|
16
|
+
private loader;
|
|
17
|
+
private router;
|
|
18
|
+
private executor;
|
|
19
|
+
private tracer;
|
|
20
|
+
private patterns;
|
|
21
|
+
constructor(api: ClaudeAPI, storage: SQLiteStorage);
|
|
22
|
+
/** 初始化:加载所有 Pattern 文件 */
|
|
23
|
+
initialize(): void;
|
|
24
|
+
/** 重新加载 Pattern 文件(热更新) */
|
|
25
|
+
reload(): void;
|
|
26
|
+
/** 路由用户输入到合适的 Pattern */
|
|
27
|
+
route(userInput: string, complexity?: 'simple' | 'moderate' | 'complex'): Promise<RouteResult>;
|
|
28
|
+
/**
|
|
29
|
+
* 路由并启动执行计划。
|
|
30
|
+
* 若命中 Pattern,创建 ExecutionPlan 并返回 PatternContext(含渲染后的 prompt)。
|
|
31
|
+
* 未命中返回 null,调用方继续走原有 Skill 编排路径。
|
|
32
|
+
*/
|
|
33
|
+
routeAndStart(userInput: string, sessionId: string, projectPath: string, complexity?: 'simple' | 'moderate' | 'complex'): Promise<PatternContext | null>;
|
|
34
|
+
/** 从当前活跃计划生成 additionalContext 字符串(供 UserPromptHandler 注入) */
|
|
35
|
+
buildAdditionalContext(patternCtx: PatternContext, patternId: string, convention?: Convention | null): string | null;
|
|
36
|
+
/**
|
|
37
|
+
* 处理 PostToolUse 事件:检测 completion_signal → 推进状态机 → 记录轨迹。
|
|
38
|
+
* 返回下一阶段 ID(null 表示未推进或 Pattern 已完成)。
|
|
39
|
+
*/
|
|
40
|
+
onPostToolUse(event: ForgeEvent): Promise<string | null>;
|
|
41
|
+
/** 获取当前活跃计划(供外部判断是否有活跃 Pattern) */
|
|
42
|
+
getActivePlan(projectPath: string): ExecutionPlan | null;
|
|
43
|
+
/** 返回所有已加载的 Pattern(只读) */
|
|
44
|
+
listPatterns(): readonly Pattern[];
|
|
45
|
+
/** 按 ID 查找 Pattern */
|
|
46
|
+
getPattern(id: string): Pattern | null;
|
|
47
|
+
/** 获取 PatternLoader(供 PatternEvolver 调用 savePattern) */
|
|
48
|
+
getLoader(): PatternLoader;
|
|
49
|
+
/** 获取 ExecutionTracer(供外部更新满意度) */
|
|
50
|
+
getTracer(): ExecutionTracer;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAiB;gBAErB,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa;IAOlD,0BAA0B;IAC1B,UAAU,IAAI,IAAI;IAMlB,2BAA2B;IAC3B,MAAM,IAAI,IAAI;IAMd,yBAAyB;IACnB,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAC7C,OAAO,CAAC,WAAW,CAAC;IAIvB;;;;OAIG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAC7C,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAejC,8DAA8D;IAC9D,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAMpH;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiB9D,mCAAmC;IACnC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAIxD,2BAA2B;IAC3B,YAAY,IAAI,SAAS,OAAO,EAAE;IAIlC,sBAAsB;IACtB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAItC,wDAAwD;IACxD,SAAS,IAAI,aAAa;IAI1B,mCAAmC;IACnC,SAAS,IAAI,eAAe;CAG7B"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { PatternLoader } from './pattern-loader.js';
|
|
2
|
+
import { PatternRouter } from './pattern-router.js';
|
|
3
|
+
import { PatternExecutor } from './pattern-executor.js';
|
|
4
|
+
import { ExecutionTracer } from './execution-tracker.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* PatternEngine 门面类:统一入口,供 daemon handler 调用。
|
|
8
|
+
*
|
|
9
|
+
* Phase 1 提供:Pattern 加载与路由。
|
|
10
|
+
* Phase 2 扩展:PatternExecutor、ExecutionTracer。
|
|
11
|
+
* Phase 3 将在此扩展:PatternEvolver。
|
|
12
|
+
*/
|
|
13
|
+
export class PatternEngine {
|
|
14
|
+
loader;
|
|
15
|
+
router;
|
|
16
|
+
executor;
|
|
17
|
+
tracer;
|
|
18
|
+
patterns = [];
|
|
19
|
+
constructor(api, storage) {
|
|
20
|
+
this.loader = new PatternLoader();
|
|
21
|
+
this.router = new PatternRouter(api);
|
|
22
|
+
this.executor = new PatternExecutor();
|
|
23
|
+
this.tracer = new ExecutionTracer(storage, this.executor);
|
|
24
|
+
}
|
|
25
|
+
/** 初始化:加载所有 Pattern 文件 */
|
|
26
|
+
initialize() {
|
|
27
|
+
this.patterns = this.loader.loadAll();
|
|
28
|
+
this.router.setPatterns(this.patterns);
|
|
29
|
+
logger.info(`[Pattern引擎] 已初始化,共 ${this.patterns.length} 个 Pattern`);
|
|
30
|
+
}
|
|
31
|
+
/** 重新加载 Pattern 文件(热更新) */
|
|
32
|
+
reload() {
|
|
33
|
+
this.patterns = this.loader.loadAll();
|
|
34
|
+
this.router.setPatterns(this.patterns);
|
|
35
|
+
logger.info(`[Pattern引擎] 已重新加载,共 ${this.patterns.length} 个 Pattern`);
|
|
36
|
+
}
|
|
37
|
+
/** 路由用户输入到合适的 Pattern */
|
|
38
|
+
async route(userInput, complexity) {
|
|
39
|
+
return this.router.route(userInput, complexity);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 路由并启动执行计划。
|
|
43
|
+
* 若命中 Pattern,创建 ExecutionPlan 并返回 PatternContext(含渲染后的 prompt)。
|
|
44
|
+
* 未命中返回 null,调用方继续走原有 Skill 编排路径。
|
|
45
|
+
*/
|
|
46
|
+
async routeAndStart(userInput, sessionId, projectPath, complexity) {
|
|
47
|
+
const result = await this.route(userInput, complexity);
|
|
48
|
+
if (!result.pattern)
|
|
49
|
+
return null;
|
|
50
|
+
const pattern = result.pattern;
|
|
51
|
+
const plan = this.executor.startPlan(pattern, sessionId, projectPath);
|
|
52
|
+
// 记录第一个阶段的开始时间
|
|
53
|
+
if (plan.currentPhaseId) {
|
|
54
|
+
this.tracer.recordPhaseStart(plan.id, plan.currentPhaseId, pattern.id, sessionId, projectPath);
|
|
55
|
+
}
|
|
56
|
+
return this.executor.execute(pattern, plan, userInput);
|
|
57
|
+
}
|
|
58
|
+
/** 从当前活跃计划生成 additionalContext 字符串(供 UserPromptHandler 注入) */
|
|
59
|
+
buildAdditionalContext(patternCtx, patternId, convention) {
|
|
60
|
+
const pattern = this.patterns.find((p) => p.id === patternId) ?? null;
|
|
61
|
+
if (!pattern)
|
|
62
|
+
return null;
|
|
63
|
+
return this.executor.buildAdditionalContext(patternCtx, pattern, convention);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 处理 PostToolUse 事件:检测 completion_signal → 推进状态机 → 记录轨迹。
|
|
67
|
+
* 返回下一阶段 ID(null 表示未推进或 Pattern 已完成)。
|
|
68
|
+
*/
|
|
69
|
+
async onPostToolUse(event) {
|
|
70
|
+
const plan = this.executor.getActivePlan(event.project_path);
|
|
71
|
+
if (!plan)
|
|
72
|
+
return null;
|
|
73
|
+
const pattern = this.patterns.find((p) => p.id === plan.patternId) ?? null;
|
|
74
|
+
if (!pattern)
|
|
75
|
+
return null;
|
|
76
|
+
const nextPhaseId = await this.tracer.onPostToolUse(event, pattern);
|
|
77
|
+
// 若推进到下一阶段,记录其开始时间
|
|
78
|
+
if (nextPhaseId) {
|
|
79
|
+
this.tracer.recordPhaseStart(plan.id, nextPhaseId, pattern.id, plan.sessionId, event.project_path);
|
|
80
|
+
}
|
|
81
|
+
return nextPhaseId;
|
|
82
|
+
}
|
|
83
|
+
/** 获取当前活跃计划(供外部判断是否有活跃 Pattern) */
|
|
84
|
+
getActivePlan(projectPath) {
|
|
85
|
+
return this.executor.getActivePlan(projectPath);
|
|
86
|
+
}
|
|
87
|
+
/** 返回所有已加载的 Pattern(只读) */
|
|
88
|
+
listPatterns() {
|
|
89
|
+
return this.patterns;
|
|
90
|
+
}
|
|
91
|
+
/** 按 ID 查找 Pattern */
|
|
92
|
+
getPattern(id) {
|
|
93
|
+
return this.patterns.find((p) => p.id === id) ?? null;
|
|
94
|
+
}
|
|
95
|
+
/** 获取 PatternLoader(供 PatternEvolver 调用 savePattern) */
|
|
96
|
+
getLoader() {
|
|
97
|
+
return this.loader;
|
|
98
|
+
}
|
|
99
|
+
/** 获取 ExecutionTracer(供外部更新满意度) */
|
|
100
|
+
getTracer() {
|
|
101
|
+
return this.tracer;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pattern-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAO5C;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,QAAQ,CAAkB;IAC1B,MAAM,CAAkB;IACxB,QAAQ,GAAc,EAAE,CAAC;IAEjC,YAAY,GAAc,EAAE,OAAsB;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,0BAA0B;IAC1B,UAAU;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC;IACtE,CAAC;IAED,2BAA2B;IAC3B,MAAM;QACJ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC;IACvE,CAAC;IAED,yBAAyB;IACzB,KAAK,CAAC,KAAK,CACT,SAAiB,EACjB,UAA8C;QAE9C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CACjB,SAAiB,EACjB,SAAiB,EACjB,WAAmB,EACnB,UAA8C;QAE9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAEtE,eAAe;QACf,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACjG,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,8DAA8D;IAC9D,sBAAsB,CAAC,UAA0B,EAAE,SAAiB,EAAE,UAA8B;QAClG,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC;QACtE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,KAAiB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QAC3E,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpE,mBAAmB;QACnB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACrG,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,aAAa,CAAC,WAAmB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,2BAA2B;IAC3B,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,sBAAsB;IACtB,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IACxD,CAAC;IAED,wDAAwD;IACxD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ClaudeAPI } from '../utils/claude-api.js';
|
|
2
|
+
import type { SQLiteStorage } from '../storage/sqlite.js';
|
|
3
|
+
import type { Pattern } from './types.js';
|
|
4
|
+
import type { Convention } from '../convention/types.js';
|
|
5
|
+
interface EvolveResult {
|
|
6
|
+
patternId: string;
|
|
7
|
+
previousVersion: string;
|
|
8
|
+
newVersion: string;
|
|
9
|
+
changes: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* PatternEvolver:从执行历史学习,用 AI 优化 Pattern YAML。
|
|
13
|
+
* 触发条件:定时(evolve_interval_days)或阈值(evolve_min_executions)。
|
|
14
|
+
*/
|
|
15
|
+
export declare class PatternEvolver {
|
|
16
|
+
private api;
|
|
17
|
+
private storage;
|
|
18
|
+
private loader;
|
|
19
|
+
private defaultMinExecutions;
|
|
20
|
+
constructor(api: ClaudeAPI, storage: SQLiteStorage, defaultMinExecutions?: number);
|
|
21
|
+
/**
|
|
22
|
+
* 对所有 Pattern 执行自进化。
|
|
23
|
+
* 返回每个实际被优化的 Pattern 的进化报告。
|
|
24
|
+
* convention 参数可选,传入时约束所有 Pattern 的进化不得违反其 must 级规则。
|
|
25
|
+
*/
|
|
26
|
+
evolve(minExecutions?: number, convention?: Convention | null): Promise<EvolveResult[]>;
|
|
27
|
+
/**
|
|
28
|
+
* 对单个 Pattern 执行自进化。
|
|
29
|
+
* 执行次数不足时跳过,返回 null。
|
|
30
|
+
* convention 参数可选,传入时 AI 优化不得违反其 must 级质量标准。
|
|
31
|
+
*/
|
|
32
|
+
evolvePattern(pattern: Pattern, minExecutions?: number, convention?: Convention | null): Promise<EvolveResult | null>;
|
|
33
|
+
private computeMetrics;
|
|
34
|
+
private optimizeWithAI;
|
|
35
|
+
private bumpVersion;
|
|
36
|
+
private writeBack;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=pattern-evolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-evolver.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/pattern-evolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWzD,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,oBAAoB,SAAK;IAO7E;;;;OAIG;IACG,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB7F;;;;OAIG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,SAAK,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAqCvH,OAAO,CAAC,cAAc;YAuBR,cAAc;IAkE5B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,SAAS;CAmBlB"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import yaml from 'js-yaml';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
import { PatternLoader } from './pattern-loader.js';
|
|
5
|
+
/**
|
|
6
|
+
* PatternEvolver:从执行历史学习,用 AI 优化 Pattern YAML。
|
|
7
|
+
* 触发条件:定时(evolve_interval_days)或阈值(evolve_min_executions)。
|
|
8
|
+
*/
|
|
9
|
+
export class PatternEvolver {
|
|
10
|
+
api;
|
|
11
|
+
storage;
|
|
12
|
+
loader;
|
|
13
|
+
defaultMinExecutions;
|
|
14
|
+
constructor(api, storage, defaultMinExecutions = 20) {
|
|
15
|
+
this.api = api;
|
|
16
|
+
this.storage = storage;
|
|
17
|
+
this.loader = new PatternLoader();
|
|
18
|
+
this.defaultMinExecutions = defaultMinExecutions;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 对所有 Pattern 执行自进化。
|
|
22
|
+
* 返回每个实际被优化的 Pattern 的进化报告。
|
|
23
|
+
* convention 参数可选,传入时约束所有 Pattern 的进化不得违反其 must 级规则。
|
|
24
|
+
*/
|
|
25
|
+
async evolve(minExecutions, convention) {
|
|
26
|
+
const threshold = minExecutions ?? this.defaultMinExecutions;
|
|
27
|
+
const patterns = this.loader.loadAll();
|
|
28
|
+
const results = [];
|
|
29
|
+
for (const pattern of patterns) {
|
|
30
|
+
try {
|
|
31
|
+
const result = await this.evolvePattern(pattern, threshold, convention);
|
|
32
|
+
if (result)
|
|
33
|
+
results.push(result);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
logger.warn(`[Pattern进化器] ${pattern.id} 进化失败:${err}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return results;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 对单个 Pattern 执行自进化。
|
|
43
|
+
* 执行次数不足时跳过,返回 null。
|
|
44
|
+
* convention 参数可选,传入时 AI 优化不得违反其 must 级质量标准。
|
|
45
|
+
*/
|
|
46
|
+
async evolvePattern(pattern, minExecutions = 20, convention) {
|
|
47
|
+
const executions = this.storage.queryPatternExecutions(pattern.id, 50);
|
|
48
|
+
if (executions.length < minExecutions) {
|
|
49
|
+
logger.info(`[Pattern进化器] ${pattern.id} 执行次数不足(${executions.length}/${minExecutions}),跳过`);
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const metrics = this.computeMetrics(executions);
|
|
53
|
+
const problemPhases = metrics.filter((m) => m.completed / m.total < 0.6 || m.avgSatisfaction < 0);
|
|
54
|
+
if (problemPhases.length === 0) {
|
|
55
|
+
logger.info(`[Pattern进化器] ${pattern.id} 各阶段健康,无需优化`);
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
logger.info(`[Pattern进化器] ${pattern.id} 发现 ${problemPhases.length} 个问题阶段,启动 AI 优化`);
|
|
59
|
+
const optimized = await this.optimizeWithAI(pattern, metrics, problemPhases, convention);
|
|
60
|
+
if (!optimized)
|
|
61
|
+
return null;
|
|
62
|
+
const previousVersion = pattern.version;
|
|
63
|
+
const newVersion = this.bumpVersion(pattern.version);
|
|
64
|
+
optimized.version = newVersion;
|
|
65
|
+
this.writeBack(pattern, optimized);
|
|
66
|
+
const changes = problemPhases.map((m) => `阶段 ${m.phaseId} 完成率 ${((m.completed / m.total) * 100).toFixed(0)}% → 已优化`);
|
|
67
|
+
logger.info(`[Pattern进化器] ${pattern.id} 进化完成 v${previousVersion} → v${newVersion}`);
|
|
68
|
+
return { patternId: pattern.id, previousVersion, newVersion, changes };
|
|
69
|
+
}
|
|
70
|
+
// ── 私有方法 ──────────────────────────────────────────────────────────────
|
|
71
|
+
computeMetrics(executions) {
|
|
72
|
+
const byPhase = new Map();
|
|
73
|
+
for (const e of executions) {
|
|
74
|
+
const list = byPhase.get(e.phase_id) ?? [];
|
|
75
|
+
list.push(e);
|
|
76
|
+
byPhase.set(e.phase_id, list);
|
|
77
|
+
}
|
|
78
|
+
const metrics = [];
|
|
79
|
+
for (const [phaseId, records] of byPhase) {
|
|
80
|
+
const completed = records.filter((r) => r.status === 'completed').length;
|
|
81
|
+
const failed = records.filter((r) => r.status === 'failed').length;
|
|
82
|
+
const durations = records.filter((r) => r.duration_ms != null).map((r) => r.duration_ms);
|
|
83
|
+
const avgDurationMs = durations.length > 0 ? durations.reduce((a, b) => a + b, 0) / durations.length : 0;
|
|
84
|
+
const satisfactions = records.filter((r) => r.user_satisfaction != null).map((r) => r.user_satisfaction);
|
|
85
|
+
const avgSatisfaction = satisfactions.length > 0 ? satisfactions.reduce((a, b) => a + b, 0) / satisfactions.length : 0;
|
|
86
|
+
metrics.push({ phaseId, total: records.length, completed, failed, avgDurationMs, avgSatisfaction });
|
|
87
|
+
}
|
|
88
|
+
return metrics;
|
|
89
|
+
}
|
|
90
|
+
async optimizeWithAI(pattern, allMetrics, problemPhases, convention) {
|
|
91
|
+
const metricsText = allMetrics.map((m) => ` ${m.phaseId}: 完成率=${((m.completed / m.total) * 100).toFixed(0)}% 失败=${m.failed} ` +
|
|
92
|
+
`平均耗时=${(m.avgDurationMs / 1000).toFixed(1)}s 满意度=${m.avgSatisfaction.toFixed(2)}`).join('\n');
|
|
93
|
+
const problemText = problemPhases.map((m) => m.phaseId).join(', ');
|
|
94
|
+
const currentYaml = yaml.dump({
|
|
95
|
+
id: pattern.id,
|
|
96
|
+
name: pattern.name,
|
|
97
|
+
version: pattern.version,
|
|
98
|
+
description: pattern.description,
|
|
99
|
+
trigger: pattern.trigger,
|
|
100
|
+
phases: pattern.phases,
|
|
101
|
+
evolution: pattern.evolution,
|
|
102
|
+
});
|
|
103
|
+
const mustRules = convention?.quality_standards?.filter((s) => s.severity === 'must') ?? [];
|
|
104
|
+
const conventionSection = mustRules.length > 0
|
|
105
|
+
? `\n## Convention 约束(${convention.name},不得违反)\n` +
|
|
106
|
+
mustRules.map((r) => `- [${r.category}] ${r.rule}`).join('\n') + '\n'
|
|
107
|
+
: '';
|
|
108
|
+
const prompt = `你是一个 Pattern 进化专家。根据执行数据,优化以下工作流 Pattern 的问题阶段。
|
|
109
|
+
|
|
110
|
+
## 执行指标
|
|
111
|
+
${metricsText}
|
|
112
|
+
|
|
113
|
+
## 问题阶段
|
|
114
|
+
${problemText}
|
|
115
|
+
|
|
116
|
+
## 当前 Pattern YAML
|
|
117
|
+
\`\`\`yaml
|
|
118
|
+
${currentYaml}
|
|
119
|
+
\`\`\`
|
|
120
|
+
${conventionSection}
|
|
121
|
+
## 优化任务
|
|
122
|
+
针对问题阶段(完成率<60% 或用户满意度<0),优化其 prompt_template 或 tools_allowed:
|
|
123
|
+
- 让 prompt 更具体、可执行
|
|
124
|
+
- 减少模糊指令
|
|
125
|
+
- 确保 completion_signal 合理${mustRules.length > 0 ? '\n- 优化后的 prompt_template 必须符合上方 Convention 约束,不得与 must 级规则冲突' : ''}
|
|
126
|
+
|
|
127
|
+
## 输出格式
|
|
128
|
+
输出完整优化后的 YAML(与输入格式一致),无其他文字。`;
|
|
129
|
+
try {
|
|
130
|
+
const response = await this.api.complete(prompt, 'pattern-evolver', 0, 60_000);
|
|
131
|
+
const yamlMatch = response.match(/```yaml\n([\s\S]*?)```/) ?? response.match(/^([\s\S]+)$/);
|
|
132
|
+
if (!yamlMatch)
|
|
133
|
+
return null;
|
|
134
|
+
const parsed = yaml.load(yamlMatch[1]);
|
|
135
|
+
if (!parsed?.id || !parsed?.phases)
|
|
136
|
+
return null;
|
|
137
|
+
return parsed;
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
logger.warn(`[Pattern进化器] AI 优化失败:${err}`);
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
bumpVersion(version) {
|
|
145
|
+
const parts = version.split('.');
|
|
146
|
+
if (parts.length >= 2) {
|
|
147
|
+
const minor = parseFloat(parts[1] ?? '0') + 1;
|
|
148
|
+
return `${parts[0]}.${minor}`;
|
|
149
|
+
}
|
|
150
|
+
return `${version}.1`;
|
|
151
|
+
}
|
|
152
|
+
writeBack(original, optimized) {
|
|
153
|
+
if (!original.filePath) {
|
|
154
|
+
logger.warn(`[Pattern进化器] ${original.id} 无文件路径,跳过写回`);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const toWrite = yaml.dump({
|
|
158
|
+
id: optimized.id,
|
|
159
|
+
name: optimized.name,
|
|
160
|
+
version: optimized.version,
|
|
161
|
+
description: optimized.description,
|
|
162
|
+
source: original.source,
|
|
163
|
+
trigger: optimized.trigger,
|
|
164
|
+
phases: optimized.phases,
|
|
165
|
+
evolution: optimized.evolution,
|
|
166
|
+
}, { lineWidth: 120 });
|
|
167
|
+
fs.writeFileSync(original.filePath, toWrite, 'utf-8');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=pattern-evolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-evolver.js","sourceRoot":"","sources":["../../src/pattern-engine/pattern-evolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Pattern, ExecutionPlan, PatternContext } from './types.js';
|
|
2
|
+
import type { Convention } from '../convention/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* PatternExecutor:将匹配到的 Pattern 展开为 ExecutionPlan,
|
|
5
|
+
* 渲染当前阶段的 prompt_template,生成注入给 Claude 的 additionalContext。
|
|
6
|
+
*
|
|
7
|
+
* 职责边界:
|
|
8
|
+
* - 创建和管理内存中的 ExecutionPlan(持久化由 ExecutionTracer 负责)
|
|
9
|
+
* - 模板渲染
|
|
10
|
+
* - 生成 PatternContext 供 UserPromptHandler 注入
|
|
11
|
+
*
|
|
12
|
+
* 不负责:AI 调用、SQLite 写入、状态机推进
|
|
13
|
+
*/
|
|
14
|
+
export declare class PatternExecutor {
|
|
15
|
+
/** 按 projectPath 存储当前活跃的执行计划(每个项目同时只有一个) */
|
|
16
|
+
private activePlans;
|
|
17
|
+
/**
|
|
18
|
+
* 为指定项目启动一个新的执行计划。
|
|
19
|
+
* 若该项目已有活跃计划,先清除(不支持并发 Pattern 执行)。
|
|
20
|
+
*/
|
|
21
|
+
startPlan(pattern: Pattern, sessionId: string, projectPath: string): ExecutionPlan;
|
|
22
|
+
/**
|
|
23
|
+
* 生成当前活跃阶段的 PatternContext(含渲染后的 prompt)。
|
|
24
|
+
* 返回 null 表示无活跃计划或当前阶段已执行完毕。
|
|
25
|
+
*/
|
|
26
|
+
execute(pattern: Pattern, plan: ExecutionPlan, requirement: string): PatternContext | null;
|
|
27
|
+
/**
|
|
28
|
+
* 将指定阶段标记为已完成,并推进到下一个可执行阶段。
|
|
29
|
+
* 供 ExecutionTracer 在检测到 completion_signal 时调用。
|
|
30
|
+
*
|
|
31
|
+
* @returns 下一个阶段 ID,null 表示整个 Pattern 已执行完毕
|
|
32
|
+
*/
|
|
33
|
+
advancePhase(projectPath: string, completedPhaseId: string, phaseOutput: string, pattern: Pattern): string | null;
|
|
34
|
+
/** 获取项目当前活跃计划(不存在则返回 null) */
|
|
35
|
+
getActivePlan(projectPath: string): ExecutionPlan | null;
|
|
36
|
+
/** 清除项目的活跃计划(Pattern 完成或被中断时调用) */
|
|
37
|
+
clearPlan(projectPath: string): void;
|
|
38
|
+
/** 构建注入给 Claude 的 additionalContext 字符串,可选传入 Convention 以注入角色约束 */
|
|
39
|
+
buildAdditionalContext(patternCtx: PatternContext, pattern: Pattern, convention?: Convention | null): string;
|
|
40
|
+
/** 检测 PostToolUse 事件是否触发了当前阶段的 completion_signal */
|
|
41
|
+
checkCompletionSignal(projectPath: string, toolName: string, toolInput: Record<string, unknown>, pattern: Pattern): boolean;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=pattern-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-executor.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/pattern-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAgB,aAAa,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AACzG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA4BzD;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IAC1B,4CAA4C;IAC5C,OAAO,CAAC,WAAW,CAAoC;IAEvD;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;IA4BlF;;;OAGG;IACH,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,GAClB,cAAc,GAAG,IAAI;IAwBxB;;;;;OAKG;IACH,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,GACf,MAAM,GAAG,IAAI;IA2BhB,8BAA8B;IAC9B,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAIxD,mCAAmC;IACnC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKpC,mEAAmE;IACnE,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM;IAkC5G,oDAAoD;IACpD,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE,OAAO,GACf,OAAO;CAqBX"}
|