@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,193 @@
|
|
|
1
|
+
import { TechStackDetector } from './detector.js';
|
|
2
|
+
import { ClaudeMdPrompts } from './prompts.js';
|
|
3
|
+
import { ClaudeMdWriter } from './writer.js';
|
|
4
|
+
import { ModulesConfigManager } from './modules-config.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
import fs from 'fs';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
export class ClaudeMdEngine {
|
|
9
|
+
detector;
|
|
10
|
+
api;
|
|
11
|
+
writer;
|
|
12
|
+
constructor(api) {
|
|
13
|
+
this.detector = new TechStackDetector();
|
|
14
|
+
this.api = api;
|
|
15
|
+
this.writer = new ClaudeMdWriter();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 获取当前有效人设,优先级:
|
|
19
|
+
* 1. .forge-modules.yaml persona 字段(用户手动配置,不被覆盖)
|
|
20
|
+
* 2. .claude-forge/persona.md(自动进化存储)
|
|
21
|
+
* 3. buildPersona() 技术栈推断兜底
|
|
22
|
+
*/
|
|
23
|
+
getPersona(projectPath, profile) {
|
|
24
|
+
// 1. 用户手动配置
|
|
25
|
+
const modulesConfig = new ModulesConfigManager(projectPath);
|
|
26
|
+
const config = modulesConfig.read();
|
|
27
|
+
if (config.persona?.trim()) {
|
|
28
|
+
return config.persona.trim();
|
|
29
|
+
}
|
|
30
|
+
// 2. 自动进化存储
|
|
31
|
+
const personaFile = path.join(projectPath, '.claude-forge', 'persona.md');
|
|
32
|
+
if (fs.existsSync(personaFile)) {
|
|
33
|
+
const stored = fs.readFileSync(personaFile, 'utf-8').trim();
|
|
34
|
+
if (stored)
|
|
35
|
+
return stored;
|
|
36
|
+
}
|
|
37
|
+
// 3. 技术栈推断兜底(由 prompts.ts 内部处理,传 undefined 触发)
|
|
38
|
+
return ClaudeMdPrompts.buildPersonaFromProfile(profile);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 评估并进化人设,将结果写入 .claude-forge/persona.md
|
|
42
|
+
* 仅在用户未手动配置 persona 时执行
|
|
43
|
+
*/
|
|
44
|
+
async refinePersona(projectPath, profile, distilledContent) {
|
|
45
|
+
// 用户手动配置了人设,不自动覆盖
|
|
46
|
+
const modulesConfig = new ModulesConfigManager(projectPath);
|
|
47
|
+
if (modulesConfig.read().persona?.trim())
|
|
48
|
+
return;
|
|
49
|
+
const currentPersona = this.getPersona(projectPath, profile);
|
|
50
|
+
const prompt = ClaudeMdPrompts.buildPersonaRefinementPrompt(currentPersona, distilledContent, profile);
|
|
51
|
+
try {
|
|
52
|
+
const response = await this.api.complete(prompt, 'claudemd');
|
|
53
|
+
const updated = this.parsePersonaUpdate(response);
|
|
54
|
+
if (!updated)
|
|
55
|
+
return;
|
|
56
|
+
const personaDir = path.join(projectPath, '.claude-forge');
|
|
57
|
+
if (!fs.existsSync(personaDir))
|
|
58
|
+
fs.mkdirSync(personaDir, { recursive: true });
|
|
59
|
+
fs.writeFileSync(path.join(personaDir, 'persona.md'), updated, 'utf-8');
|
|
60
|
+
logger.info(`[Forge:CLAUDE.md] 人设已进化:${updated.substring(0, 60)}...`);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
logger.warn(`[Forge:CLAUDE.md] 人设进化失败:${err}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
parsePersonaUpdate(response) {
|
|
67
|
+
const match = response.match(/###\s*PERSONA_UPDATED\s*\n\s*(true|false)/i);
|
|
68
|
+
if (match?.[1]?.toLowerCase() !== 'true')
|
|
69
|
+
return null;
|
|
70
|
+
const contentMatch = response.match(/###\s*UPDATED_PERSONA\s*\n([\s\S]*?)$/i);
|
|
71
|
+
const content = contentMatch?.[1]?.trim();
|
|
72
|
+
return content && content.length > 0 ? content : null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 仅检测技术栈(不调 API)
|
|
76
|
+
*/
|
|
77
|
+
detect(projectPath, asModule = false) {
|
|
78
|
+
return this.detector.detect(projectPath, asModule);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 检测 + 生成 CLAUDE.md(支持模块模式)
|
|
82
|
+
*/
|
|
83
|
+
async generate(projectPath, force = false, reset = false, asModule = false) {
|
|
84
|
+
const existing = this.writer.readClaudeMd(projectPath);
|
|
85
|
+
// 已存在且有自动生成标记,且不强制 → 跳过
|
|
86
|
+
if (existing && this.writer.hasAutoSection(projectPath) && !force) {
|
|
87
|
+
logger.info(`${projectPath} 的 CLAUDE.md 已存在(含自动区块),跳过`);
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
// 已存在但没有自动标记,且不强制 → 跳过(不覆盖纯用户内容)
|
|
91
|
+
if (existing && !this.writer.hasAutoSection(projectPath) && !force) {
|
|
92
|
+
logger.info(`${projectPath} 的 CLAUDE.md 已存在(用户内容),使用 --force 可添加自动区块`);
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
// 检测技术栈
|
|
96
|
+
const profile = this.detector.detect(projectPath, asModule);
|
|
97
|
+
// 获取用户已有内容(reset 模式下不保留)
|
|
98
|
+
const userContent = reset ? undefined : (this.writer.getUserContent(projectPath) || undefined);
|
|
99
|
+
// 模块模式:读取父项目 CLAUDE.md 作为上下文
|
|
100
|
+
let parentContext = null;
|
|
101
|
+
if (asModule && profile.parentProjectPath) {
|
|
102
|
+
parentContext = this.writer.readParentClaudeMd(profile.parentProjectPath);
|
|
103
|
+
if (parentContext) {
|
|
104
|
+
logger.info(`读取父项目上下文:${profile.parentProjectPath}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// 调用 Claude API 生成
|
|
108
|
+
logger.info(`正在为 ${projectPath} 生成 CLAUDE.md(${asModule ? '模块模式' : '项目模式'})...`);
|
|
109
|
+
const persona = this.getPersona(projectPath, profile);
|
|
110
|
+
const prompt = asModule
|
|
111
|
+
? ClaudeMdPrompts.buildModulePrompt(profile, parentContext, userContent, persona)
|
|
112
|
+
: ClaudeMdPrompts.buildGenerationPrompt(profile, userContent, persona);
|
|
113
|
+
try {
|
|
114
|
+
const response = await this.api.complete(prompt, 'claudemd');
|
|
115
|
+
this.writer.writeClaudeMd(projectPath, response);
|
|
116
|
+
logger.info(`CLAUDE.md 已生成:${projectPath}`);
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
logger.error(`CLAUDE.md 生成失败:${err}`);
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 扫描并批量生成子模块的 CLAUDE.md
|
|
126
|
+
*/
|
|
127
|
+
async scan(projectPath, force = false) {
|
|
128
|
+
const modules = this.detector.scanModules(projectPath);
|
|
129
|
+
const results = [];
|
|
130
|
+
logger.info(`发现 ${modules.length} 个子模块`);
|
|
131
|
+
for (const modulePath of modules) {
|
|
132
|
+
const ok = await this.generate(modulePath, force, false, true);
|
|
133
|
+
results.push({ path: modulePath, success: ok });
|
|
134
|
+
}
|
|
135
|
+
// 将成功生成的子模块以 @import 形式注入根目录 CLAUDE.md
|
|
136
|
+
const generated = results.filter(r => r.success).map(r => r.path);
|
|
137
|
+
if (generated.length > 0) {
|
|
138
|
+
this.writer.updateModuleImports(projectPath, generated);
|
|
139
|
+
logger.info(`[Forge:CLAUDE.md] 已将 ${generated.length} 个子模块 @import 注入根目录 CLAUDE.md`);
|
|
140
|
+
}
|
|
141
|
+
return results;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 基于蒸馏结果细化 CLAUDE.md
|
|
145
|
+
*/
|
|
146
|
+
async refine(projectPath, distilledContent, events) {
|
|
147
|
+
const currentContent = this.writer.readClaudeMd(projectPath);
|
|
148
|
+
if (!currentContent) {
|
|
149
|
+
logger.info(`${projectPath} 未找到 CLAUDE.md,跳过细化`);
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
logger.info(`正在评估 ${projectPath} 的 CLAUDE.md 细化...`);
|
|
153
|
+
try {
|
|
154
|
+
const profile = this.detector.detect(projectPath);
|
|
155
|
+
const persona = this.getPersona(projectPath, profile);
|
|
156
|
+
const prompt = ClaudeMdPrompts.buildRefinementPrompt(currentContent, distilledContent, events, profile, persona);
|
|
157
|
+
const response = await this.api.complete(prompt, 'claudemd');
|
|
158
|
+
// 解析 SHOULD_UPDATE 标志
|
|
159
|
+
const shouldUpdate = this.parseShouldUpdate(response);
|
|
160
|
+
if (!shouldUpdate) {
|
|
161
|
+
logger.info('CLAUDE.md 细化:无需更新');
|
|
162
|
+
// 即使 CLAUDE.md 不更新,也评估人设是否需要进化
|
|
163
|
+
await this.refinePersona(projectPath, profile, distilledContent);
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
// 提取更新内容
|
|
167
|
+
const updatedContent = this.parseUpdatedContent(response);
|
|
168
|
+
if (!updatedContent) {
|
|
169
|
+
logger.warn('CLAUDE.md refinement: SHOULD_UPDATE=true but no content found');
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
this.writer.updateAutoSection(projectPath, updatedContent);
|
|
173
|
+
logger.info('CLAUDE.md 细化成功');
|
|
174
|
+
// CLAUDE.md 更新后,同步评估人设进化
|
|
175
|
+
await this.refinePersona(projectPath, profile, distilledContent);
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
logger.error(`CLAUDE.md 细化失败:${err}`);
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
parseShouldUpdate(response) {
|
|
184
|
+
const match = response.match(/###\s*SHOULD_UPDATE\s*\n\s*(true|false)/i);
|
|
185
|
+
return match?.[1]?.toLowerCase() === 'true';
|
|
186
|
+
}
|
|
187
|
+
parseUpdatedContent(response) {
|
|
188
|
+
const match = response.match(/###\s*UPDATED_CONTENT\s*\n([\s\S]*?)$/i);
|
|
189
|
+
const content = match?.[1]?.trim();
|
|
190
|
+
return content && content.length > 0 ? content : null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/claudemd/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const FORGE_MODULES_FILE = ".forge-modules.yaml";
|
|
2
|
+
export interface ForgeModulesConfig {
|
|
3
|
+
/**
|
|
4
|
+
* 这些目录的直接子目录都视为业务模块。
|
|
5
|
+
* 例如:services → services/user、services/payment 各自是模块
|
|
6
|
+
*/
|
|
7
|
+
module_roots?: string[];
|
|
8
|
+
/**
|
|
9
|
+
* 这些路径本身就是独立模块(相对于项目根目录)。
|
|
10
|
+
* 例如:infrastructure/k8s
|
|
11
|
+
*/
|
|
12
|
+
module_dirs?: string[];
|
|
13
|
+
/**
|
|
14
|
+
* 扫描时额外跳过的目录(追加到内置的 SKIP_DIRS)。
|
|
15
|
+
* 例如:legacy、archived
|
|
16
|
+
*/
|
|
17
|
+
extra_skip_dirs?: string[];
|
|
18
|
+
/**
|
|
19
|
+
* 自定义人设(覆盖自动推断)。
|
|
20
|
+
* 例如:"你是一位在 Stripe 工作过 10 年的支付系统架构师..."
|
|
21
|
+
* 设置后不会被自动进化覆盖。
|
|
22
|
+
*/
|
|
23
|
+
persona?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class ModulesConfigManager {
|
|
26
|
+
private readonly configPath;
|
|
27
|
+
constructor(projectPath: string);
|
|
28
|
+
get filePath(): string;
|
|
29
|
+
exists(): boolean;
|
|
30
|
+
read(): ForgeModulesConfig;
|
|
31
|
+
write(config: ForgeModulesConfig): void;
|
|
32
|
+
addRoot(dir: string): boolean;
|
|
33
|
+
addDir(dirPath: string): boolean;
|
|
34
|
+
addSkip(dir: string): boolean;
|
|
35
|
+
remove(type: 'root' | 'dir' | 'skip', value: string): boolean;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=modules-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules-config.d.ts","sourceRoot":"","sources":["../../src/claudemd/modules-config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,WAAW,EAAE,MAAM;IAI/B,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,MAAM,IAAI,OAAO;IAIjB,IAAI,IAAI,kBAAkB;IAU1B,KAAK,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAUvC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ7B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQhC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAc9D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
export const FORGE_MODULES_FILE = '.forge-modules.yaml';
|
|
5
|
+
export class ModulesConfigManager {
|
|
6
|
+
configPath;
|
|
7
|
+
constructor(projectPath) {
|
|
8
|
+
this.configPath = path.join(projectPath, FORGE_MODULES_FILE);
|
|
9
|
+
}
|
|
10
|
+
get filePath() {
|
|
11
|
+
return this.configPath;
|
|
12
|
+
}
|
|
13
|
+
exists() {
|
|
14
|
+
return fs.existsSync(this.configPath);
|
|
15
|
+
}
|
|
16
|
+
read() {
|
|
17
|
+
if (!this.exists())
|
|
18
|
+
return {};
|
|
19
|
+
try {
|
|
20
|
+
const raw = yaml.load(fs.readFileSync(this.configPath, 'utf-8'));
|
|
21
|
+
return raw || {};
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
write(config) {
|
|
28
|
+
// 清理空数组字段,保持文件整洁
|
|
29
|
+
const cleaned = {};
|
|
30
|
+
if (config.module_roots?.length)
|
|
31
|
+
cleaned.module_roots = config.module_roots;
|
|
32
|
+
if (config.module_dirs?.length)
|
|
33
|
+
cleaned.module_dirs = config.module_dirs;
|
|
34
|
+
if (config.extra_skip_dirs?.length)
|
|
35
|
+
cleaned.extra_skip_dirs = config.extra_skip_dirs;
|
|
36
|
+
if (config.persona)
|
|
37
|
+
cleaned.persona = config.persona;
|
|
38
|
+
fs.writeFileSync(this.configPath, yaml.dump(cleaned, { lineWidth: -1 }), 'utf-8');
|
|
39
|
+
}
|
|
40
|
+
addRoot(dir) {
|
|
41
|
+
const config = this.read();
|
|
42
|
+
const roots = config.module_roots ?? [];
|
|
43
|
+
if (roots.includes(dir))
|
|
44
|
+
return false;
|
|
45
|
+
this.write({ ...config, module_roots: [...roots, dir] });
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
addDir(dirPath) {
|
|
49
|
+
const config = this.read();
|
|
50
|
+
const dirs = config.module_dirs ?? [];
|
|
51
|
+
if (dirs.includes(dirPath))
|
|
52
|
+
return false;
|
|
53
|
+
this.write({ ...config, module_dirs: [...dirs, dirPath] });
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
addSkip(dir) {
|
|
57
|
+
const config = this.read();
|
|
58
|
+
const skips = config.extra_skip_dirs ?? [];
|
|
59
|
+
if (skips.includes(dir))
|
|
60
|
+
return false;
|
|
61
|
+
this.write({ ...config, extra_skip_dirs: [...skips, dir] });
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
remove(type, value) {
|
|
65
|
+
const config = this.read();
|
|
66
|
+
const keyMap = {
|
|
67
|
+
root: 'module_roots',
|
|
68
|
+
dir: 'module_dirs',
|
|
69
|
+
skip: 'extra_skip_dirs',
|
|
70
|
+
};
|
|
71
|
+
const key = keyMap[type];
|
|
72
|
+
const arr = config[key] ?? [];
|
|
73
|
+
const next = arr.filter(v => v !== value);
|
|
74
|
+
if (next.length === arr.length)
|
|
75
|
+
return false;
|
|
76
|
+
this.write({ ...config, [key]: next });
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=modules-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules-config.js","sourceRoot":"","sources":["../../src/claudemd/modules-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAUDE.md 初始化提示注入器。
|
|
3
|
+
*
|
|
4
|
+
* 检查项目是否缺少 CLAUDE.md,若缺少则在 .claude/CLAUDE.md 注入引导性提示,
|
|
5
|
+
* 让 Claude Code 在会话开始时主动询问用户是否生成。
|
|
6
|
+
*
|
|
7
|
+
* 原来在 daemon/index.ts 末尾以函数形式实现(约 150 行),迁移至此。
|
|
8
|
+
* 注意:此类只操作 <!-- forge:claudemd-prompt --> 区块。
|
|
9
|
+
* resume/index.ts 的 injectToClaudeMd() 操作的是 <!-- forge:resume --> 区块,两者职责不同,不合并。
|
|
10
|
+
*/
|
|
11
|
+
export declare class PromptInjector {
|
|
12
|
+
/**
|
|
13
|
+
* 检查 projectPath 及其一级子目录,按需注入提示
|
|
14
|
+
*/
|
|
15
|
+
checkAndPrompt(projectPath: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* 检查 .claude/CLAUDE.md 是否已包含提示标记(防重复注入)
|
|
18
|
+
*/
|
|
19
|
+
hasPrompt(projectPath: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 移除 .claude/CLAUDE.md 中的提示区块(用户拒绝后清理)
|
|
22
|
+
*/
|
|
23
|
+
clearPrompt(projectPath: string): void;
|
|
24
|
+
private hasStackMarker;
|
|
25
|
+
private needsClaudeMd;
|
|
26
|
+
private collectTargetDirs;
|
|
27
|
+
private injectPrompt;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=prompt-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-injector.d.ts","sourceRoot":"","sources":["../../src/claudemd/prompt-injector.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;GASG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxD;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAMvC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAiBtC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,YAAY;CAyDrB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
const PROMPT_START = '<!-- forge:claudemd-prompt -->';
|
|
5
|
+
const PROMPT_END = '<!-- forge:end-claudemd-prompt -->';
|
|
6
|
+
const STACK_MARKERS = [
|
|
7
|
+
'package.json', 'go.mod', 'Cargo.toml',
|
|
8
|
+
'pyproject.toml', 'setup.py', 'requirements.txt',
|
|
9
|
+
'pom.xml', 'build.gradle', 'build.gradle.kts',
|
|
10
|
+
'Gemfile', 'composer.json', 'CMakeLists.txt',
|
|
11
|
+
];
|
|
12
|
+
const SKIP_DIRS = new Set([
|
|
13
|
+
'node_modules', 'vendor', 'dist', 'build',
|
|
14
|
+
]);
|
|
15
|
+
/**
|
|
16
|
+
* CLAUDE.md 初始化提示注入器。
|
|
17
|
+
*
|
|
18
|
+
* 检查项目是否缺少 CLAUDE.md,若缺少则在 .claude/CLAUDE.md 注入引导性提示,
|
|
19
|
+
* 让 Claude Code 在会话开始时主动询问用户是否生成。
|
|
20
|
+
*
|
|
21
|
+
* 原来在 daemon/index.ts 末尾以函数形式实现(约 150 行),迁移至此。
|
|
22
|
+
* 注意:此类只操作 <!-- forge:claudemd-prompt --> 区块。
|
|
23
|
+
* resume/index.ts 的 injectToClaudeMd() 操作的是 <!-- forge:resume --> 区块,两者职责不同,不合并。
|
|
24
|
+
*/
|
|
25
|
+
export class PromptInjector {
|
|
26
|
+
/**
|
|
27
|
+
* 检查 projectPath 及其一级子目录,按需注入提示
|
|
28
|
+
*/
|
|
29
|
+
async checkAndPrompt(projectPath) {
|
|
30
|
+
const targets = this.collectTargetDirs(projectPath);
|
|
31
|
+
if (targets.length === 0) {
|
|
32
|
+
logger.info(`${projectPath} 所有 CLAUDE.md 均已存在,跳过`);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.injectPrompt(projectPath, targets);
|
|
36
|
+
const dirNames = targets.map(t => t.isRoot ? '根目录' : path.basename(t.dir));
|
|
37
|
+
logger.info(`CLAUDE.md 提示已注入:${dirNames.join(', ')}`);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 检查 .claude/CLAUDE.md 是否已包含提示标记(防重复注入)
|
|
41
|
+
*/
|
|
42
|
+
hasPrompt(projectPath) {
|
|
43
|
+
const dotClaudeMdPath = path.join(projectPath, '.claude', 'CLAUDE.md');
|
|
44
|
+
if (!fs.existsSync(dotClaudeMdPath))
|
|
45
|
+
return false;
|
|
46
|
+
return fs.readFileSync(dotClaudeMdPath, 'utf-8').includes(PROMPT_START);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 移除 .claude/CLAUDE.md 中的提示区块(用户拒绝后清理)
|
|
50
|
+
*/
|
|
51
|
+
clearPrompt(projectPath) {
|
|
52
|
+
const claudeMdPath = path.join(projectPath, '.claude', 'CLAUDE.md');
|
|
53
|
+
if (!fs.existsSync(claudeMdPath))
|
|
54
|
+
return;
|
|
55
|
+
let content = fs.readFileSync(claudeMdPath, 'utf-8');
|
|
56
|
+
const startIdx = content.indexOf(PROMPT_START);
|
|
57
|
+
const endIdx = content.indexOf(PROMPT_END);
|
|
58
|
+
if (startIdx !== -1 && endIdx !== -1) {
|
|
59
|
+
content =
|
|
60
|
+
content.substring(0, startIdx) +
|
|
61
|
+
content.substring(endIdx + PROMPT_END.length);
|
|
62
|
+
content = content.replace(/\n{3,}/g, '\n\n');
|
|
63
|
+
fs.writeFileSync(claudeMdPath, content, 'utf-8');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
hasStackMarker(dirPath) {
|
|
67
|
+
return STACK_MARKERS.some(f => fs.existsSync(path.join(dirPath, f)));
|
|
68
|
+
}
|
|
69
|
+
needsClaudeMd(dirPath) {
|
|
70
|
+
const claudeMdPath = path.join(dirPath, 'CLAUDE.md');
|
|
71
|
+
if (fs.existsSync(claudeMdPath)) {
|
|
72
|
+
const content = fs.readFileSync(claudeMdPath, 'utf-8');
|
|
73
|
+
if (content.trim().length > 0)
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
collectTargetDirs(projectPath) {
|
|
79
|
+
const targets = [];
|
|
80
|
+
if (this.needsClaudeMd(projectPath) && !this.hasPrompt(projectPath)) {
|
|
81
|
+
targets.push({ dir: projectPath, isRoot: true });
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const entries = fs.readdirSync(projectPath, { withFileTypes: true });
|
|
85
|
+
for (const entry of entries) {
|
|
86
|
+
if (!entry.isDirectory())
|
|
87
|
+
continue;
|
|
88
|
+
if (entry.name.startsWith('.') || SKIP_DIRS.has(entry.name))
|
|
89
|
+
continue;
|
|
90
|
+
const subDir = path.join(projectPath, entry.name);
|
|
91
|
+
if (this.hasStackMarker(subDir) &&
|
|
92
|
+
this.needsClaudeMd(subDir) &&
|
|
93
|
+
!this.hasPrompt(subDir)) {
|
|
94
|
+
targets.push({ dir: subDir, isRoot: false });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch { /* 读取失败忽略 */ }
|
|
99
|
+
return targets;
|
|
100
|
+
}
|
|
101
|
+
injectPrompt(dirPath, subDirs) {
|
|
102
|
+
const dotClaudeDir = path.join(dirPath, '.claude');
|
|
103
|
+
if (!fs.existsSync(dotClaudeDir)) {
|
|
104
|
+
fs.mkdirSync(dotClaudeDir, { recursive: true });
|
|
105
|
+
}
|
|
106
|
+
const dotClaudeMdPath = path.join(dotClaudeDir, 'CLAUDE.md');
|
|
107
|
+
const subDirList = subDirs
|
|
108
|
+
.filter(s => !s.isRoot)
|
|
109
|
+
.map(s => ` - \`${path.basename(s.dir)}/\``)
|
|
110
|
+
.join('\n');
|
|
111
|
+
const subDirSection = subDirList
|
|
112
|
+
? `\n同时检测到以下一级子目录也有独立技术栈,建议一并生成:\n${subDirList}\n`
|
|
113
|
+
: '';
|
|
114
|
+
const subDirSteps = subDirs
|
|
115
|
+
.filter(s => !s.isRoot)
|
|
116
|
+
.map((s, i) => `\n${i + 3}. 进入 \`${path.basename(s.dir)}/\` 目录运行 \`claude-forge claudemd init -p ${s.dir}\` 生成子目录的 CLAUDE.md`)
|
|
117
|
+
.join('');
|
|
118
|
+
const nextStep = subDirs.filter(s => !s.isRoot).length + 3;
|
|
119
|
+
const prompt = `
|
|
120
|
+
${PROMPT_START}
|
|
121
|
+
## 项目 CLAUDE.md 初始化
|
|
122
|
+
|
|
123
|
+
当前项目尚未配置 CLAUDE.md 指令文件。请在会话开始时主动询问用户:
|
|
124
|
+
|
|
125
|
+
> 检测到当前项目还没有 CLAUDE.md,要不要我根据项目技术栈自动生成一个?
|
|
126
|
+
> 这可以帮助 Claude Code 更好地理解项目规范。
|
|
127
|
+
${subDirSection}
|
|
128
|
+
如果用户同意,请执行以下步骤:
|
|
129
|
+
1. 在项目根目录运行 \`claude-forge claudemd detect\` 查看检测到的技术栈
|
|
130
|
+
2. 运行 \`claude-forge claudemd init\` 自动生成根目录的 CLAUDE.md${subDirSteps}
|
|
131
|
+
${nextStep}. 生成后阅读 CLAUDE.md 内容,确认合理性
|
|
132
|
+
${nextStep + 1}. 告知用户可以手动编辑补充自定义规则
|
|
133
|
+
|
|
134
|
+
如果用户拒绝,请删除本提示块。
|
|
135
|
+
${PROMPT_END}
|
|
136
|
+
`;
|
|
137
|
+
let existingContent = '';
|
|
138
|
+
if (fs.existsSync(dotClaudeMdPath)) {
|
|
139
|
+
existingContent = fs.readFileSync(dotClaudeMdPath, 'utf-8');
|
|
140
|
+
}
|
|
141
|
+
fs.writeFileSync(dotClaudeMdPath, existingContent.trimEnd() + '\n' + prompt.trim() + '\n', 'utf-8');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=prompt-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-injector.js","sourceRoot":"","sources":["../../src/claudemd/prompt-injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ForgeEvent } from '../types/index.js';
|
|
2
|
+
import type { ProjectProfile } from './detector.js';
|
|
3
|
+
export declare class ClaudeMdPrompts {
|
|
4
|
+
/**
|
|
5
|
+
* 将 buildPersona 暴露为静态方法,供 engine 层在优先级链中调用
|
|
6
|
+
*/
|
|
7
|
+
static buildPersonaFromProfile(profile: ProjectProfile): string;
|
|
8
|
+
static buildGenerationPrompt(profile: ProjectProfile, existingContent?: string, persona?: string): string;
|
|
9
|
+
static buildModulePrompt(profile: ProjectProfile, parentContext: string | null, existingContent?: string, persona?: string): string;
|
|
10
|
+
static buildRefinementPrompt(currentClaudeMd: string, distilledContent: string, events: ForgeEvent[], profile?: ProjectProfile, persona?: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* 构建人设进化 prompt:评估当前人设是否需要根据新发现的项目模式升级
|
|
13
|
+
*/
|
|
14
|
+
static buildPersonaRefinementPrompt(currentPersona: string, distilledContent: string, profile: ProjectProfile): string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/claudemd/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,qBAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAI/D,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAgHzG,MAAM,CAAC,iBAAiB,CACtB,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM;IA2ET,MAAM,CAAC,qBAAqB,CAC1B,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,CAAC,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM;IA0DT;;OAEG;IACH,MAAM,CAAC,4BAA4B,CACjC,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,cAAc,GACtB,MAAM;CA6CV"}
|