@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,91 @@
|
|
|
1
|
+
export class SkillRecommender {
|
|
2
|
+
registry;
|
|
3
|
+
sessionRecommended = new Set();
|
|
4
|
+
constructor(registry) {
|
|
5
|
+
this.registry = registry;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 根据工具调用事件推荐 Skill
|
|
9
|
+
* 返回 additionalContext 或 null
|
|
10
|
+
*/
|
|
11
|
+
recommend(event) {
|
|
12
|
+
const inputStr = event.tool_input ? JSON.stringify(event.tool_input) : '';
|
|
13
|
+
const toolName = event.tool_name || '';
|
|
14
|
+
// 检测 Skill 调用(Bash 中包含 skill 名或 lark-cli 等)
|
|
15
|
+
this.detectSkillUsage(event);
|
|
16
|
+
// 根据上下文推荐(只在每个 session 推荐一次)
|
|
17
|
+
const recommendations = this.matchSkills(toolName, inputStr);
|
|
18
|
+
const newRecs = recommendations.filter(r => !this.sessionRecommended.has(r.name));
|
|
19
|
+
if (newRecs.length === 0)
|
|
20
|
+
return null;
|
|
21
|
+
// 标记已推荐
|
|
22
|
+
for (const r of newRecs) {
|
|
23
|
+
this.sessionRecommended.add(r.name);
|
|
24
|
+
}
|
|
25
|
+
const recList = newRecs
|
|
26
|
+
.map(r => `- **${r.name}**: ${r.description.substring(0, 80)}`)
|
|
27
|
+
.join('\n');
|
|
28
|
+
return `[Forge 能力推荐] 检测到相关操作,以下 Skill 可能有帮助:\n${recList}`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 检测工具调用中是否使用了已注册的 Skill
|
|
32
|
+
*/
|
|
33
|
+
detectSkillUsage(event) {
|
|
34
|
+
if (event.tool_name !== 'Bash' && event.tool_name !== 'Skill')
|
|
35
|
+
return;
|
|
36
|
+
const inputStr = event.tool_input ? JSON.stringify(event.tool_input) : '';
|
|
37
|
+
// 检测 lark-cli 调用
|
|
38
|
+
const larkMatch = inputStr.match(/lark-cli\s+(\w+)/);
|
|
39
|
+
if (larkMatch) {
|
|
40
|
+
const skillName = `lark-${larkMatch[1]}`;
|
|
41
|
+
this.registry.recordUsage(skillName, true);
|
|
42
|
+
}
|
|
43
|
+
// 检测 Skill 工具调用
|
|
44
|
+
if (event.tool_name === 'Skill') {
|
|
45
|
+
const skillField = event.tool_input?.skill;
|
|
46
|
+
if (skillField) {
|
|
47
|
+
this.registry.recordUsage(skillField, true);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 根据工具调用内容匹配可能有用的 Skill
|
|
53
|
+
*/
|
|
54
|
+
matchSkills(toolName, inputStr) {
|
|
55
|
+
const matches = [];
|
|
56
|
+
const allSkills = this.registry.getAll();
|
|
57
|
+
const input = inputStr.toLowerCase();
|
|
58
|
+
// 关键词 → Skill 映射
|
|
59
|
+
const KEYWORD_MAP = [
|
|
60
|
+
{ keywords: ['飞书', 'feishu', 'lark'], skills: ['lark-shared'] },
|
|
61
|
+
{ keywords: ['日历', 'calendar', '日程', '会议'], skills: ['lark-calendar'] },
|
|
62
|
+
{ keywords: ['消息', 'message', '群聊', 'chat'], skills: ['lark-im'] },
|
|
63
|
+
{ keywords: ['文档', 'document', 'doc'], skills: ['lark-doc'] },
|
|
64
|
+
{ keywords: ['表格', 'sheet', 'spreadsheet'], skills: ['lark-sheets'] },
|
|
65
|
+
{ keywords: ['多维表格', 'bitable', 'base'], skills: ['lark-base'] },
|
|
66
|
+
{ keywords: ['任务', 'task', '待办', 'todo'], skills: ['lark-task'] },
|
|
67
|
+
{ keywords: ['邮件', 'email', 'mail'], skills: ['lark-mail'] },
|
|
68
|
+
{ keywords: ['知识库', 'wiki'], skills: ['lark-wiki'] },
|
|
69
|
+
{ keywords: ['云空间', 'drive', '文件管理'], skills: ['lark-drive'] },
|
|
70
|
+
{ keywords: ['通讯录', 'contact', '员工', '搜索人'], skills: ['lark-contact'] },
|
|
71
|
+
];
|
|
72
|
+
for (const mapping of KEYWORD_MAP) {
|
|
73
|
+
if (mapping.keywords.some(kw => input.includes(kw))) {
|
|
74
|
+
for (const skillName of mapping.skills) {
|
|
75
|
+
const skill = this.registry.get(skillName);
|
|
76
|
+
if (skill && !matches.some(m => m.name === skill.name)) {
|
|
77
|
+
matches.push(skill);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return matches;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 会话结束时重置推荐记录
|
|
86
|
+
*/
|
|
87
|
+
resetSession() {
|
|
88
|
+
this.sessionRecommended.clear();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=recommender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommender.js","sourceRoot":"","sources":["../../src/skill-registry/recommender.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,gBAAgB;IACnB,QAAQ,CAAgB;IACxB,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/C,YAAY,QAAuB;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAiB;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QAEvC,4CAA4C;QAC5C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE7B,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAElF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,QAAQ;QACR,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,OAAO,GAAG,OAAO;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;aAC9D,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,yCAAyC,OAAO,EAAE,CAAC;IAC5D,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,KAAiB;QACxC,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO;YAAE,OAAO;QAEtE,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1E,iBAAiB;QACjB,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,gBAAgB;QAChB,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,KAA2B,CAAC;YACjE,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,QAAgB,EAAE,QAAgB;QACpD,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAErC,iBAAiB;QACjB,MAAM,WAAW,GAAoD;YACnE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE;YAC/D,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE;YACvE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;YAClE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE;YAC7D,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE;YACrE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;YAChE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;YACjE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;YAC5D,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;YACpD,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE;YAC9D,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE;SACxE,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACpD,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC3C,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACvD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type SkillMeta } from './scanner.js';
|
|
2
|
+
export declare class SkillRegistry {
|
|
3
|
+
private data;
|
|
4
|
+
private scanner;
|
|
5
|
+
constructor();
|
|
6
|
+
/**
|
|
7
|
+
* 扫描并更新注册表(保留使用统计)
|
|
8
|
+
*/
|
|
9
|
+
refresh(): number;
|
|
10
|
+
/**
|
|
11
|
+
* 记录 Skill 使用
|
|
12
|
+
*/
|
|
13
|
+
recordUsage(skillName: string, success?: boolean): void;
|
|
14
|
+
/**
|
|
15
|
+
* 获取所有已注册的 Skill
|
|
16
|
+
*/
|
|
17
|
+
getAll(): SkillMeta[];
|
|
18
|
+
/**
|
|
19
|
+
* 按名称查找
|
|
20
|
+
*/
|
|
21
|
+
get(name: string): SkillMeta | null;
|
|
22
|
+
/**
|
|
23
|
+
* 按关键词搜索
|
|
24
|
+
*/
|
|
25
|
+
search(query: string): SkillMeta[];
|
|
26
|
+
/**
|
|
27
|
+
* 获取使用频率最高的 Skill
|
|
28
|
+
*/
|
|
29
|
+
getTopUsed(limit?: number): SkillMeta[];
|
|
30
|
+
/**
|
|
31
|
+
* 记录用户反馈(正向/负向)
|
|
32
|
+
*/
|
|
33
|
+
recordFeedback(skillName: string, isPositive: boolean): void;
|
|
34
|
+
/**
|
|
35
|
+
* 获取评分最高的 Skill(按正向反馈率排序)
|
|
36
|
+
*/
|
|
37
|
+
getTopRated(limit?: number): SkillMeta[];
|
|
38
|
+
/**
|
|
39
|
+
* 注册外部 Skill(来自互联网采集或自动生成)
|
|
40
|
+
*/
|
|
41
|
+
register(skill: SkillMeta): void;
|
|
42
|
+
/**
|
|
43
|
+
* 移除 Skill
|
|
44
|
+
*/
|
|
45
|
+
unregister(name: string): boolean;
|
|
46
|
+
private load;
|
|
47
|
+
private save;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/skill-registry/registry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAW5D,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,OAAO,CAAe;;IAO9B;;OAEG;IACH,OAAO,IAAI,MAAM;IA2BjB;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,GAAG,IAAI;IAe7D;;OAEG;IACH,MAAM,IAAI,SAAS,EAAE;IAIrB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAInC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE;IASlC;;OAEG;IACH,UAAU,CAAC,KAAK,GAAE,MAAU,GAAG,SAAS,EAAE;IAO1C;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAkB5D;;OAEG;IACH,WAAW,CAAC,KAAK,GAAE,MAAU,GAAG,SAAS,EAAE;IAgB3C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMhC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOjC,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,IAAI;CAOb"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import { SkillScanner } from './scanner.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
const REGISTRY_PATH = path.join(os.homedir(), '.claude-forge', 'skill-registry.json');
|
|
7
|
+
export class SkillRegistry {
|
|
8
|
+
data;
|
|
9
|
+
scanner;
|
|
10
|
+
constructor() {
|
|
11
|
+
this.scanner = new SkillScanner();
|
|
12
|
+
this.data = this.load();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 扫描并更新注册表(保留使用统计)
|
|
16
|
+
*/
|
|
17
|
+
refresh() {
|
|
18
|
+
const scannedSkills = this.scanner.scanSkills();
|
|
19
|
+
const scannedAgents = this.scanner.scanAgents();
|
|
20
|
+
const all = [...scannedSkills, ...scannedAgents];
|
|
21
|
+
let newCount = 0;
|
|
22
|
+
for (const skill of all) {
|
|
23
|
+
const existing = this.data.skills[skill.name];
|
|
24
|
+
if (existing) {
|
|
25
|
+
// 保留统计数据,更新元信息
|
|
26
|
+
skill.stats = existing.stats;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
newCount++;
|
|
30
|
+
}
|
|
31
|
+
this.data.skills[skill.name] = skill;
|
|
32
|
+
}
|
|
33
|
+
this.data.lastScan = new Date().toISOString();
|
|
34
|
+
this.save();
|
|
35
|
+
if (newCount > 0) {
|
|
36
|
+
logger.info(`技能注册表已刷新:共 ${all.length} 个,新增 ${newCount} 个`);
|
|
37
|
+
}
|
|
38
|
+
return all.length;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 记录 Skill 使用
|
|
42
|
+
*/
|
|
43
|
+
recordUsage(skillName, success = true) {
|
|
44
|
+
const skill = this.data.skills[skillName];
|
|
45
|
+
if (!skill)
|
|
46
|
+
return;
|
|
47
|
+
skill.stats.callCount++;
|
|
48
|
+
skill.stats.lastUsed = new Date().toISOString();
|
|
49
|
+
// 滑动平均成功率
|
|
50
|
+
const total = skill.stats.callCount;
|
|
51
|
+
const prevRate = skill.stats.successRate;
|
|
52
|
+
skill.stats.successRate = prevRate + (((success ? 1 : 0) - prevRate) / total);
|
|
53
|
+
this.save();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 获取所有已注册的 Skill
|
|
57
|
+
*/
|
|
58
|
+
getAll() {
|
|
59
|
+
return Object.values(this.data.skills);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 按名称查找
|
|
63
|
+
*/
|
|
64
|
+
get(name) {
|
|
65
|
+
return this.data.skills[name] || null;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 按关键词搜索
|
|
69
|
+
*/
|
|
70
|
+
search(query) {
|
|
71
|
+
const q = query.toLowerCase();
|
|
72
|
+
return this.getAll().filter(s => s.name.toLowerCase().includes(q) ||
|
|
73
|
+
s.description.toLowerCase().includes(q) ||
|
|
74
|
+
s.tags?.some(t => t.toLowerCase().includes(q)));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 获取使用频率最高的 Skill
|
|
78
|
+
*/
|
|
79
|
+
getTopUsed(limit = 5) {
|
|
80
|
+
return this.getAll()
|
|
81
|
+
.filter(s => s.stats.callCount > 0)
|
|
82
|
+
.sort((a, b) => b.stats.callCount - a.stats.callCount)
|
|
83
|
+
.slice(0, limit);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 记录用户反馈(正向/负向)
|
|
87
|
+
*/
|
|
88
|
+
recordFeedback(skillName, isPositive) {
|
|
89
|
+
const skill = this.data.skills[skillName];
|
|
90
|
+
if (!skill)
|
|
91
|
+
return;
|
|
92
|
+
if (!skill.stats.userFeedback) {
|
|
93
|
+
skill.stats.userFeedback = { positive: 0, negative: 0 };
|
|
94
|
+
}
|
|
95
|
+
if (isPositive) {
|
|
96
|
+
skill.stats.userFeedback.positive++;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
skill.stats.userFeedback.negative++;
|
|
100
|
+
}
|
|
101
|
+
this.save();
|
|
102
|
+
logger.info(`技能反馈已记录:${skillName} ${isPositive ? '+1' : '-1'}`);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 获取评分最高的 Skill(按正向反馈率排序)
|
|
106
|
+
*/
|
|
107
|
+
getTopRated(limit = 5) {
|
|
108
|
+
return this.getAll()
|
|
109
|
+
.filter(s => {
|
|
110
|
+
const fb = s.stats.userFeedback;
|
|
111
|
+
return fb && (fb.positive + fb.negative) > 0;
|
|
112
|
+
})
|
|
113
|
+
.sort((a, b) => {
|
|
114
|
+
const fbA = a.stats.userFeedback;
|
|
115
|
+
const fbB = b.stats.userFeedback;
|
|
116
|
+
const rateA = fbA.positive / (fbA.positive + fbA.negative);
|
|
117
|
+
const rateB = fbB.positive / (fbB.positive + fbB.negative);
|
|
118
|
+
return rateB - rateA;
|
|
119
|
+
})
|
|
120
|
+
.slice(0, limit);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 注册外部 Skill(来自互联网采集或自动生成)
|
|
124
|
+
*/
|
|
125
|
+
register(skill) {
|
|
126
|
+
this.data.skills[skill.name] = skill;
|
|
127
|
+
this.save();
|
|
128
|
+
logger.info(`技能已注册:${skill.name}(来源:${skill.source})`);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 移除 Skill
|
|
132
|
+
*/
|
|
133
|
+
unregister(name) {
|
|
134
|
+
if (!this.data.skills[name])
|
|
135
|
+
return false;
|
|
136
|
+
delete this.data.skills[name];
|
|
137
|
+
this.save();
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
load() {
|
|
141
|
+
try {
|
|
142
|
+
if (fs.existsSync(REGISTRY_PATH)) {
|
|
143
|
+
const content = fs.readFileSync(REGISTRY_PATH, 'utf-8');
|
|
144
|
+
return JSON.parse(content);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
logger.warn('技能注册表加载失败,重新初始化');
|
|
149
|
+
}
|
|
150
|
+
return { skills: {}, lastScan: '', version: 1 };
|
|
151
|
+
}
|
|
152
|
+
save() {
|
|
153
|
+
const dir = path.dirname(REGISTRY_PATH);
|
|
154
|
+
if (!fs.existsSync(dir)) {
|
|
155
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
156
|
+
}
|
|
157
|
+
fs.writeFileSync(REGISTRY_PATH, JSON.stringify(this.data, null, 2), 'utf-8');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skill-registry/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface SkillMeta {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
description: string;
|
|
5
|
+
source: 'local' | 'remote' | 'generated' | 'official' | 'user';
|
|
6
|
+
path: string;
|
|
7
|
+
requires?: {
|
|
8
|
+
bins?: string[];
|
|
9
|
+
};
|
|
10
|
+
tags?: string[];
|
|
11
|
+
stats: {
|
|
12
|
+
callCount: number;
|
|
13
|
+
lastUsed: string | null;
|
|
14
|
+
successRate: number;
|
|
15
|
+
userFeedback: {
|
|
16
|
+
positive: number;
|
|
17
|
+
negative: number;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 扫描技能目录:~/.claude/skills/、~/.claude/agents/
|
|
23
|
+
*/
|
|
24
|
+
export declare class SkillScanner {
|
|
25
|
+
scanSkills(): SkillMeta[];
|
|
26
|
+
scanAgents(): SkillMeta[];
|
|
27
|
+
/**
|
|
28
|
+
* 扫描指定目录下的所有技能
|
|
29
|
+
*/
|
|
30
|
+
private scanDirectory;
|
|
31
|
+
/**
|
|
32
|
+
* 解析 SKILL.md 的 frontmatter
|
|
33
|
+
*/
|
|
34
|
+
private parseSkillMd;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/skill-registry/scanner.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;CACH;AAKD;;GAEG;AACH,qBAAa,YAAY;IACvB,UAAU,IAAI,SAAS,EAAE;IAQzB,UAAU,IAAI,SAAS,EAAE;IAgCzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;OAEG;IACH,OAAO,CAAC,YAAY;CA0CrB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
const SKILLS_DIR = path.join(os.homedir(), '.claude', 'skills');
|
|
6
|
+
const AGENTS_DIR = path.join(os.homedir(), '.claude', 'agents');
|
|
7
|
+
/**
|
|
8
|
+
* 扫描技能目录:~/.claude/skills/、~/.claude/agents/
|
|
9
|
+
*/
|
|
10
|
+
export class SkillScanner {
|
|
11
|
+
scanSkills() {
|
|
12
|
+
const skills = [];
|
|
13
|
+
skills.push(...this.scanDirectory(SKILLS_DIR, 'local'));
|
|
14
|
+
return skills;
|
|
15
|
+
}
|
|
16
|
+
scanAgents() {
|
|
17
|
+
const agents = [];
|
|
18
|
+
if (!fs.existsSync(AGENTS_DIR))
|
|
19
|
+
return agents;
|
|
20
|
+
const files = fs.readdirSync(AGENTS_DIR, { withFileTypes: true });
|
|
21
|
+
for (const file of files) {
|
|
22
|
+
if (!file.name.endsWith('.md'))
|
|
23
|
+
continue;
|
|
24
|
+
const agentPath = path.join(AGENTS_DIR, file.name);
|
|
25
|
+
try {
|
|
26
|
+
const content = fs.readFileSync(agentPath, 'utf-8');
|
|
27
|
+
const name = file.name.replace('.md', '');
|
|
28
|
+
const descMatch = content.match(/description:\s*"?([^"\n]+)"?/);
|
|
29
|
+
agents.push({
|
|
30
|
+
name: `agent:${name}`,
|
|
31
|
+
version: '1.0.0',
|
|
32
|
+
description: descMatch?.[1] || `Agent: ${name}`,
|
|
33
|
+
source: 'local',
|
|
34
|
+
path: agentPath,
|
|
35
|
+
tags: ['agent'],
|
|
36
|
+
stats: { callCount: 0, lastUsed: null, successRate: 1, userFeedback: { positive: 0, negative: 0 } },
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// skip
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return agents;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 扫描指定目录下的所有技能
|
|
47
|
+
*/
|
|
48
|
+
scanDirectory(dir, source) {
|
|
49
|
+
const skills = [];
|
|
50
|
+
if (!fs.existsSync(dir))
|
|
51
|
+
return skills;
|
|
52
|
+
const dirs = fs.readdirSync(dir, { withFileTypes: true });
|
|
53
|
+
for (const entry of dirs) {
|
|
54
|
+
const skillPath = path.join(dir, entry.name);
|
|
55
|
+
let isDir = entry.isDirectory();
|
|
56
|
+
if (!isDir && entry.isSymbolicLink()) {
|
|
57
|
+
try {
|
|
58
|
+
isDir = fs.statSync(skillPath).isDirectory();
|
|
59
|
+
}
|
|
60
|
+
catch { /* broken symlink */ }
|
|
61
|
+
}
|
|
62
|
+
if (!isDir)
|
|
63
|
+
continue;
|
|
64
|
+
const skillMdPath = path.join(skillPath, 'SKILL.md');
|
|
65
|
+
if (!fs.existsSync(skillMdPath))
|
|
66
|
+
continue;
|
|
67
|
+
try {
|
|
68
|
+
const meta = this.parseSkillMd(skillMdPath, entry.name);
|
|
69
|
+
if (meta) {
|
|
70
|
+
meta.path = skillPath;
|
|
71
|
+
meta.source = source;
|
|
72
|
+
skills.push(meta);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
logger.warn(`技能 ${entry.name} 解析失败:${err}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return skills;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 解析 SKILL.md 的 frontmatter
|
|
83
|
+
*/
|
|
84
|
+
parseSkillMd(filePath, dirName) {
|
|
85
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
86
|
+
// 解析 YAML frontmatter
|
|
87
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
88
|
+
if (!fmMatch) {
|
|
89
|
+
return {
|
|
90
|
+
name: dirName,
|
|
91
|
+
version: '0.0.0',
|
|
92
|
+
description: '',
|
|
93
|
+
source: 'local',
|
|
94
|
+
path: '',
|
|
95
|
+
stats: { callCount: 0, lastUsed: null, successRate: 1, userFeedback: { positive: 0, negative: 0 } },
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const fm = fmMatch[1];
|
|
99
|
+
const nameMatch = fm.match(/name:\s*(.+)/);
|
|
100
|
+
const versionMatch = fm.match(/version:\s*(.+)/);
|
|
101
|
+
const descMatch = fm.match(/description:\s*"([^"]+)"/);
|
|
102
|
+
const binsMatch = fm.match(/bins:\s*\[([^\]]+)\]/);
|
|
103
|
+
const tagsMatch = fm.match(/tags:\s*\[([^\]]+)\]/);
|
|
104
|
+
const bins = binsMatch
|
|
105
|
+
? binsMatch[1].split(',').map(b => b.trim().replace(/"/g, ''))
|
|
106
|
+
: undefined;
|
|
107
|
+
const tags = tagsMatch
|
|
108
|
+
? tagsMatch[1].split(',').map(t => t.trim().replace(/"/g, ''))
|
|
109
|
+
: undefined;
|
|
110
|
+
return {
|
|
111
|
+
name: nameMatch?.[1]?.trim() || dirName,
|
|
112
|
+
version: versionMatch?.[1]?.trim() || '0.0.0',
|
|
113
|
+
description: descMatch?.[1] || '',
|
|
114
|
+
source: 'local',
|
|
115
|
+
path: '',
|
|
116
|
+
requires: bins ? { bins } : undefined,
|
|
117
|
+
tags,
|
|
118
|
+
stats: { callCount: 0, lastUsed: null, successRate: 1, userFeedback: { positive: 0, negative: 0 } },
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/skill-registry/scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CuratedSource } from './collector.js';
|
|
2
|
+
export interface UserSkillEntry {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
tags: string[];
|
|
6
|
+
/** SKILL.md 完整内容,以 --- 开头 */
|
|
7
|
+
content: string;
|
|
8
|
+
version: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SkillsConfig {
|
|
11
|
+
/** 用户自定义技能 */
|
|
12
|
+
skills: UserSkillEntry[];
|
|
13
|
+
/** 用户自定义社区采集渠道 */
|
|
14
|
+
sources: CuratedSource[];
|
|
15
|
+
}
|
|
16
|
+
export declare class SkillsConfigManager {
|
|
17
|
+
private configPath;
|
|
18
|
+
constructor(configPath?: string);
|
|
19
|
+
getConfigPath(): string;
|
|
20
|
+
load(): SkillsConfig;
|
|
21
|
+
save(config: SkillsConfig): void;
|
|
22
|
+
addSkill(entry: UserSkillEntry): void;
|
|
23
|
+
removeSkill(name: string): boolean;
|
|
24
|
+
addSource(source: CuratedSource): void;
|
|
25
|
+
removeSource(repo: string): boolean;
|
|
26
|
+
listSources(): CuratedSource[];
|
|
27
|
+
listSkills(): UserSkillEntry[];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=skills-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-config.d.ts","sourceRoot":"","sources":["../../src/skill-registry/skills-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,kBAAkB;IAClB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAOD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,SAAqB;IAI3C,aAAa,IAAI,MAAM;IAIvB,IAAI,IAAI,YAAY;IAgBpB,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAOhC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAWrC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWlC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAStC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnC,WAAW,IAAI,aAAa,EAAE;IAI9B,UAAU,IAAI,cAAc,EAAE;CAG/B"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
const CONFIG_DIR = path.join(os.homedir(), '.claude-forge');
|
|
5
|
+
const SKILLS_CONFIG_PATH = path.join(CONFIG_DIR, 'skills-config.json');
|
|
6
|
+
const DEFAULT_CONFIG = {
|
|
7
|
+
skills: [],
|
|
8
|
+
sources: [],
|
|
9
|
+
};
|
|
10
|
+
export class SkillsConfigManager {
|
|
11
|
+
configPath;
|
|
12
|
+
constructor(configPath = SKILLS_CONFIG_PATH) {
|
|
13
|
+
this.configPath = configPath;
|
|
14
|
+
}
|
|
15
|
+
getConfigPath() {
|
|
16
|
+
return this.configPath;
|
|
17
|
+
}
|
|
18
|
+
load() {
|
|
19
|
+
if (!fs.existsSync(this.configPath)) {
|
|
20
|
+
return { ...DEFAULT_CONFIG, skills: [], sources: [] };
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const raw = fs.readFileSync(this.configPath, 'utf-8');
|
|
24
|
+
const parsed = JSON.parse(raw);
|
|
25
|
+
return {
|
|
26
|
+
skills: parsed.skills ?? [],
|
|
27
|
+
sources: parsed.sources ?? [],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return { ...DEFAULT_CONFIG, skills: [], sources: [] };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
save(config) {
|
|
35
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
36
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
37
|
+
}
|
|
38
|
+
fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
39
|
+
}
|
|
40
|
+
addSkill(entry) {
|
|
41
|
+
const config = this.load();
|
|
42
|
+
const idx = config.skills.findIndex(s => s.name === entry.name);
|
|
43
|
+
if (idx >= 0) {
|
|
44
|
+
config.skills[idx] = entry;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
config.skills.push(entry);
|
|
48
|
+
}
|
|
49
|
+
this.save(config);
|
|
50
|
+
}
|
|
51
|
+
removeSkill(name) {
|
|
52
|
+
const config = this.load();
|
|
53
|
+
const before = config.skills.length;
|
|
54
|
+
config.skills = config.skills.filter(s => s.name !== name);
|
|
55
|
+
if (config.skills.length < before) {
|
|
56
|
+
this.save(config);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
addSource(source) {
|
|
62
|
+
const config = this.load();
|
|
63
|
+
const exists = config.sources.some(s => s.repo === source.repo && s.dir === source.dir);
|
|
64
|
+
if (!exists) {
|
|
65
|
+
config.sources.push(source);
|
|
66
|
+
this.save(config);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
removeSource(repo) {
|
|
70
|
+
const config = this.load();
|
|
71
|
+
const before = config.sources.length;
|
|
72
|
+
config.sources = config.sources.filter(s => s.repo !== repo);
|
|
73
|
+
if (config.sources.length < before) {
|
|
74
|
+
this.save(config);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
listSources() {
|
|
80
|
+
return this.load().sources;
|
|
81
|
+
}
|
|
82
|
+
listSkills() {
|
|
83
|
+
return this.load().skills;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=skills-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-config.js","sourceRoot":"","sources":["../../src/skill-registry/skills-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ForgeEvent } from '../types/index.js';
|
|
2
|
+
import type { Session, SessionStatus } from '../types/session.js';
|
|
3
|
+
export interface EventQuery {
|
|
4
|
+
session_id?: string;
|
|
5
|
+
project_path?: string;
|
|
6
|
+
start_time?: string;
|
|
7
|
+
end_time?: string;
|
|
8
|
+
tool_name?: string;
|
|
9
|
+
hook_type?: string;
|
|
10
|
+
distilled?: boolean;
|
|
11
|
+
limit?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface SessionQuery {
|
|
15
|
+
project_path?: string;
|
|
16
|
+
status?: SessionStatus;
|
|
17
|
+
limit?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface StorageEngine {
|
|
20
|
+
writeEvent(event: ForgeEvent): void;
|
|
21
|
+
queryEvents(filters: EventQuery): ForgeEvent[];
|
|
22
|
+
countEvents(filters: EventQuery): number;
|
|
23
|
+
markEventsDistilled(eventIds: string[]): void;
|
|
24
|
+
getSession(sessionId: string, projectPath?: string): Session | null;
|
|
25
|
+
querySessions(filters: SessionQuery): Session[];
|
|
26
|
+
updateSessionStatus(sessionId: string, status: SessionStatus, endTime?: string, projectPath?: string): void;
|
|
27
|
+
getUndistilledEvents(sessionId: string, projectPath?: string): ForgeEvent[];
|
|
28
|
+
getStorageSize(): number;
|
|
29
|
+
close(): void;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IAC/C,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC;IACzC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE9C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACpE,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,EAAE,CAAC;IAChD,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5G,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5E,cAAc,IAAI,MAAM,CAAC;IAEzB,KAAK,IAAI,IAAI,CAAC;CACf"}
|