@winspan/claude-forge 3.0.1 → 3.5.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/README.md +2 -2
- package/dist/ai/base-provider.d.ts.map +1 -0
- package/dist/ai/base-provider.js.map +1 -0
- package/dist/ai/factory.d.ts.map +1 -0
- package/dist/ai/factory.js.map +1 -0
- package/dist/{ai-gateway → ai}/index.d.ts +2 -2
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/model-selector.d.ts.map +1 -0
- package/dist/ai/model-selector.js.map +1 -0
- package/dist/ai/ollama-provider.d.ts.map +1 -0
- package/dist/ai/ollama-provider.js.map +1 -0
- package/dist/ai/openai-provider.d.ts.map +1 -0
- package/dist/ai/openai-provider.js.map +1 -0
- package/dist/ai/rate-limiter.d.ts.map +1 -0
- package/dist/ai/rate-limiter.js.map +1 -0
- package/dist/ai/response-cache.d.ts.map +1 -0
- package/dist/ai/response-cache.js.map +1 -0
- package/dist/ai/token-budget.d.ts.map +1 -0
- package/dist/ai/token-budget.js.map +1 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/autopilot/index.d.ts +0 -1
- package/dist/autopilot/index.d.ts.map +1 -1
- package/dist/autopilot/index.js +0 -1
- package/dist/autopilot/index.js.map +1 -1
- package/dist/autopilot/issue-tracker.d.ts +1 -1
- package/dist/autopilot/issue-tracker.d.ts.map +1 -1
- package/dist/autopilot/issue-tracker.js +1 -1
- package/dist/autopilot/issue-tracker.js.map +1 -1
- package/dist/autopilot/phase-gap-detector.d.ts +1 -1
- package/dist/autopilot/phase-gap-detector.d.ts.map +1 -1
- package/dist/autopilot/phase-gap-detector.js +1 -1
- package/dist/autopilot/phase-gap-detector.js.map +1 -1
- package/dist/autopilot/quality-gate.d.ts +3 -3
- package/dist/autopilot/quality-gate.d.ts.map +1 -1
- package/dist/autopilot/quality-gate.js +3 -3
- package/dist/autopilot/quality-gate.js.map +1 -1
- package/dist/autopilot/rule-distiller.d.ts +1 -1
- package/dist/autopilot/rule-distiller.d.ts.map +1 -1
- package/dist/autopilot/task-completion-detector.d.ts +2 -2
- package/dist/autopilot/task-completion-detector.d.ts.map +1 -1
- package/dist/claudemd/index.d.ts +1 -1
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/cli/commands/pipeline.d.ts.map +1 -1
- package/dist/cli/commands/pipeline.js +3 -13
- package/dist/cli/commands/pipeline.js.map +1 -1
- package/dist/convention/convention-distiller.d.ts +1 -1
- package/dist/convention/convention-distiller.d.ts.map +1 -1
- package/dist/convention/convention-evolver.d.ts +1 -1
- package/dist/convention/convention-evolver.d.ts.map +1 -1
- package/dist/daemon/engine-registry/init-autopilot.d.ts +3 -3
- package/dist/daemon/engine-registry/init-autopilot.d.ts.map +1 -1
- package/dist/daemon/engine-registry/init-autopilot.js +7 -8
- package/dist/daemon/engine-registry/init-autopilot.js.map +1 -1
- package/dist/daemon/engine-registry/init-distill.d.ts +1 -1
- package/dist/daemon/engine-registry/init-distill.d.ts.map +1 -1
- package/dist/daemon/engine-registry/init-pipeline.d.ts +1 -1
- package/dist/daemon/engine-registry/init-pipeline.d.ts.map +1 -1
- package/dist/daemon/engine-registry/init-resume.d.ts +1 -1
- package/dist/daemon/engine-registry/init-resume.d.ts.map +1 -1
- package/dist/daemon/engine-registry/init-skill-registry.d.ts +1 -1
- package/dist/daemon/engine-registry/init-skill-registry.d.ts.map +1 -1
- package/dist/daemon/engine-registry.d.ts +1 -1
- package/dist/daemon/engine-registry.d.ts.map +1 -1
- package/dist/daemon/engine-registry.js +6 -6
- package/dist/daemon/engine-registry.js.map +1 -1
- package/dist/daemon/handler-context.d.ts +6 -6
- package/dist/daemon/handler-context.d.ts.map +1 -1
- package/dist/daemon/handlers/context-builder.js +1 -1
- package/dist/daemon/handlers/context-builder.js.map +1 -1
- package/dist/daemon/handlers/orchestration-context.d.ts +1 -1
- package/dist/daemon/handlers/orchestration-context.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use-handler.js +4 -4
- package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -1
- package/dist/daemon/handlers/session-cleanup.d.ts.map +1 -1
- package/dist/daemon/handlers/session-cleanup.js +2 -16
- package/dist/daemon/handlers/session-cleanup.js.map +1 -1
- package/dist/daemon/handlers/stages/06-engine-check.js +1 -1
- package/dist/daemon/handlers/stages/06-engine-check.js.map +1 -1
- package/dist/daemon/handlers/stages/09-pipeline-active.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/09-pipeline-active.js +0 -7
- package/dist/daemon/handlers/stages/09-pipeline-active.js.map +1 -1
- package/dist/daemon/handlers/stages/11-intent-analysis.d.ts +1 -1
- package/dist/daemon/handlers/stages/11-intent-analysis.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/11-intent-analysis.js +12 -6
- package/dist/daemon/handlers/stages/11-intent-analysis.js.map +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.js +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.js.map +1 -1
- package/dist/daemon/handlers/stages/19-moderate-task.js +2 -2
- package/dist/daemon/handlers/stages/19-moderate-task.js.map +1 -1
- package/dist/daemon/handlers/stop-handler.js +3 -3
- package/dist/daemon/handlers/stop-handler.js.map +1 -1
- package/dist/daemon/handlers/user-prompt-handler.js +1 -1
- package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
- package/dist/daemon/index.js +4 -4
- package/dist/daemon/index.js.map +1 -1
- package/dist/distill/index.d.ts +1 -1
- package/dist/distill/index.d.ts.map +1 -1
- package/dist/distill/tree-index.d.ts +1 -1
- package/dist/distill/tree-index.d.ts.map +1 -1
- package/dist/distill/trigger.js +1 -1
- package/dist/distill/trigger.js.map +1 -1
- package/dist/distill/writer.d.ts +1 -1
- package/dist/distill/writer.d.ts.map +1 -1
- package/dist/goal/goal-classifier.d.ts +38 -0
- package/dist/goal/goal-classifier.d.ts.map +1 -0
- package/dist/{autopilot/intent-engine.js → goal/goal-classifier.js} +187 -297
- package/dist/goal/goal-classifier.js.map +1 -0
- package/dist/goal/goal-decomposer.d.ts +32 -0
- package/dist/goal/goal-decomposer.d.ts.map +1 -0
- package/dist/{pipeline/analyzer.js → goal/goal-decomposer.js} +45 -112
- package/dist/goal/goal-decomposer.js.map +1 -0
- package/dist/goal/goal-planner.d.ts +16 -0
- package/dist/goal/goal-planner.d.ts.map +1 -0
- package/dist/goal/goal-planner.js +90 -0
- package/dist/goal/goal-planner.js.map +1 -0
- package/dist/goal/goal-types.d.ts +62 -0
- package/dist/goal/goal-types.d.ts.map +1 -0
- package/dist/goal/goal-types.js +8 -0
- package/dist/goal/goal-types.js.map +1 -0
- package/dist/goal/index.d.ts +5 -0
- package/dist/goal/index.d.ts.map +1 -0
- package/dist/goal/index.js +4 -0
- package/dist/goal/index.js.map +1 -0
- package/dist/pipeline/artifact-generator.d.ts +1 -1
- package/dist/pipeline/artifact-generator.d.ts.map +1 -1
- package/dist/pipeline/artifact-generator.js +0 -1
- package/dist/pipeline/artifact-generator.js.map +1 -1
- package/dist/pipeline/dynamic-node-executor.d.ts +3 -29
- package/dist/pipeline/dynamic-node-executor.d.ts.map +1 -1
- package/dist/pipeline/dynamic-node-executor.js +49 -115
- package/dist/pipeline/dynamic-node-executor.js.map +1 -1
- package/dist/pipeline/execution-plan.d.ts +1 -1
- package/dist/pipeline/execution-plan.d.ts.map +1 -1
- package/dist/pipeline/i-node-executor.d.ts +2 -2
- package/dist/pipeline/i-node-executor.js +1 -1
- package/dist/pipeline/index.d.ts +6 -14
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +48 -174
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/node-runtime.d.ts +41 -0
- package/dist/pipeline/node-runtime.d.ts.map +1 -0
- package/dist/pipeline/node-runtime.js +73 -0
- package/dist/pipeline/node-runtime.js.map +1 -0
- package/dist/pipeline/node-type-sync.d.ts.map +1 -1
- package/dist/pipeline/node-type-sync.js.map +1 -1
- package/dist/pipeline/semantic-validator.d.ts +1 -1
- package/dist/pipeline/semantic-validator.d.ts.map +1 -1
- package/dist/pipeline/step-orchestrator.d.ts +1 -1
- package/dist/pipeline/step-orchestrator.d.ts.map +1 -1
- package/dist/pipeline/step-validator.d.ts.map +1 -1
- package/dist/pipeline/step-validator.js +1 -2
- package/dist/pipeline/step-validator.js.map +1 -1
- package/dist/pipeline/store.d.ts +18 -48
- package/dist/pipeline/store.d.ts.map +1 -1
- package/dist/pipeline/store.js +101 -424
- package/dist/pipeline/store.js.map +1 -1
- package/dist/pipeline/template-router.d.ts +1 -1
- package/dist/pipeline/template-router.d.ts.map +1 -1
- package/dist/pipeline/types.d.ts +3 -3
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/pipeline/types.js +1 -1
- package/dist/pipeline/types.js.map +1 -1
- package/dist/resume/context-gen.d.ts +1 -1
- package/dist/resume/context-gen.d.ts.map +1 -1
- package/dist/resume/index.d.ts +1 -1
- package/dist/resume/index.d.ts.map +1 -1
- package/dist/retrospective/index.d.ts +2 -2
- package/dist/retrospective/index.d.ts.map +1 -1
- package/dist/retrospective/index.js +1 -1
- package/dist/retrospective/metrics-extractor.d.ts +1 -1
- package/dist/retrospective/metrics-extractor.js +1 -1
- package/dist/retrospective/pattern-learner.d.ts +1 -1
- package/dist/retrospective/pattern-learner.d.ts.map +1 -1
- package/dist/skill-registry/collector.d.ts +1 -1
- package/dist/skill-registry/collector.d.ts.map +1 -1
- package/dist/skill-registry/evolver/community-distiller.d.ts +1 -1
- package/dist/skill-registry/evolver/community-distiller.d.ts.map +1 -1
- package/dist/skill-registry/evolver/generation-engine.d.ts +1 -1
- package/dist/skill-registry/evolver/generation-engine.d.ts.map +1 -1
- package/dist/skill-registry/evolver/index.d.ts +1 -1
- package/dist/skill-registry/evolver/index.d.ts.map +1 -1
- package/dist/skill-registry/evolver/keyword-evolver.d.ts +1 -1
- package/dist/skill-registry/evolver/keyword-evolver.d.ts.map +1 -1
- package/dist/skill-registry/evolver/official-evolver.d.ts +1 -1
- package/dist/skill-registry/evolver/official-evolver.d.ts.map +1 -1
- package/dist/skill-registry/evolver/optimization-engine.d.ts +1 -1
- package/dist/skill-registry/evolver/optimization-engine.d.ts.map +1 -1
- package/dist/skill-registry/evolver/repair-engine.d.ts +1 -1
- package/dist/skill-registry/evolver/repair-engine.d.ts.map +1 -1
- package/dist/skill-registry/index.d.ts +1 -1
- package/dist/skill-registry/index.d.ts.map +1 -1
- package/dist/skill-registry/official-sync/skill-definitions.d.ts.map +1 -1
- package/dist/skill-registry/official-sync/skill-definitions.js +675 -0
- package/dist/skill-registry/official-sync/skill-definitions.js.map +1 -1
- package/dist/skill-registry/orchestrator.d.ts +1 -1
- package/dist/skill-registry/orchestrator.d.ts.map +1 -1
- package/dist/skill-registry/pattern-evolver.d.ts +1 -1
- package/dist/skill-registry/pattern-evolver.d.ts.map +1 -1
- package/dist/skill-registry/project-learner.d.ts +1 -1
- package/dist/skill-registry/project-learner.d.ts.map +1 -1
- package/dist/{core/types.d.ts → types/core-types.d.ts} +1 -1
- package/dist/types/core-types.d.ts.map +1 -0
- package/dist/{core/types.js → types/core-types.js} +1 -1
- package/dist/types/core-types.js.map +1 -0
- package/dist/utils/cache-registry.d.ts.map +1 -0
- package/dist/utils/cache-registry.js.map +1 -0
- package/dist/utils/circuit-breaker.js +1 -1
- package/dist/utils/circuit-breaker.js.map +1 -1
- package/dist/utils/claude-api.d.ts +3 -3
- package/dist/utils/claude-api.d.ts.map +1 -1
- package/dist/utils/claude-api.js +2 -2
- package/dist/utils/claude-api.js.map +1 -1
- package/dist/utils/error-handler.d.ts +0 -4
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +0 -20
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/pending-prompt-sink.d.ts.map +1 -0
- package/dist/utils/pending-prompt-sink.js.map +1 -0
- package/dist/web/routes/quality.d.ts +1 -1
- package/dist/web/routes/quality.d.ts.map +1 -1
- package/dist/web/server.d.ts +2 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web-static/assets/{index-_pTdFFt3.js → index-BGuTeBhr.js} +1 -1
- package/dist/web-static/index.html +1 -1
- package/package.json +1 -1
- package/dist/ai-gateway/index.d.ts.map +0 -1
- package/dist/ai-gateway/index.js.map +0 -1
- package/dist/ai-gateway/model-selector.d.ts.map +0 -1
- package/dist/ai-gateway/model-selector.js.map +0 -1
- package/dist/ai-gateway/rate-limiter.d.ts.map +0 -1
- package/dist/ai-gateway/rate-limiter.js.map +0 -1
- package/dist/ai-gateway/response-cache.d.ts.map +0 -1
- package/dist/ai-gateway/response-cache.js.map +0 -1
- package/dist/ai-gateway/token-budget.d.ts.map +0 -1
- package/dist/ai-gateway/token-budget.js.map +0 -1
- package/dist/ai-provider/base-provider.d.ts.map +0 -1
- package/dist/ai-provider/base-provider.js.map +0 -1
- package/dist/ai-provider/factory.d.ts.map +0 -1
- package/dist/ai-provider/factory.js.map +0 -1
- package/dist/ai-provider/index.d.ts +0 -7
- package/dist/ai-provider/index.d.ts.map +0 -1
- package/dist/ai-provider/index.js +0 -6
- package/dist/ai-provider/index.js.map +0 -1
- package/dist/ai-provider/ollama-provider.d.ts.map +0 -1
- package/dist/ai-provider/ollama-provider.js.map +0 -1
- package/dist/ai-provider/openai-provider.d.ts.map +0 -1
- package/dist/ai-provider/openai-provider.js.map +0 -1
- package/dist/ai-provider/types.d.ts.map +0 -1
- package/dist/ai-provider/types.js.map +0 -1
- package/dist/autopilot/intent-engine.d.ts +0 -100
- package/dist/autopilot/intent-engine.d.ts.map +0 -1
- package/dist/autopilot/intent-engine.js.map +0 -1
- package/dist/autopilot/knowledge-engine.d.ts +0 -67
- package/dist/autopilot/knowledge-engine.d.ts.map +0 -1
- package/dist/autopilot/knowledge-engine.js +0 -262
- package/dist/autopilot/knowledge-engine.js.map +0 -1
- package/dist/core/cache-registry.d.ts.map +0 -1
- package/dist/core/cache-registry.js.map +0 -1
- package/dist/core/pending-prompt-sink.d.ts.map +0 -1
- package/dist/core/pending-prompt-sink.js.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js.map +0 -1
- package/dist/doc-sync/index.d.ts +0 -29
- package/dist/doc-sync/index.d.ts.map +0 -1
- package/dist/doc-sync/index.js +0 -276
- package/dist/doc-sync/index.js.map +0 -1
- package/dist/pipeline/aggregator.d.ts +0 -161
- package/dist/pipeline/aggregator.d.ts.map +0 -1
- package/dist/pipeline/aggregator.js +0 -261
- package/dist/pipeline/aggregator.js.map +0 -1
- package/dist/pipeline/analyzer.d.ts +0 -46
- package/dist/pipeline/analyzer.d.ts.map +0 -1
- package/dist/pipeline/analyzer.js.map +0 -1
- package/dist/pipeline/artifact-enforcement.d.ts +0 -74
- package/dist/pipeline/artifact-enforcement.d.ts.map +0 -1
- package/dist/pipeline/artifact-enforcement.js +0 -187
- package/dist/pipeline/artifact-enforcement.js.map +0 -1
- package/dist/pipeline/artifact-rules.d.ts +0 -39
- package/dist/pipeline/artifact-rules.d.ts.map +0 -1
- package/dist/pipeline/artifact-rules.js +0 -104
- package/dist/pipeline/artifact-rules.js.map +0 -1
- package/dist/pipeline/checkpoint.d.ts +0 -38
- package/dist/pipeline/checkpoint.d.ts.map +0 -1
- package/dist/pipeline/checkpoint.js +0 -132
- package/dist/pipeline/checkpoint.js.map +0 -1
- package/dist/pipeline/dynamic-aggregator.d.ts +0 -83
- package/dist/pipeline/dynamic-aggregator.d.ts.map +0 -1
- package/dist/pipeline/dynamic-aggregator.js +0 -303
- package/dist/pipeline/dynamic-aggregator.js.map +0 -1
- package/dist/pipeline/event-sourced-engine.d.ts +0 -77
- package/dist/pipeline/event-sourced-engine.d.ts.map +0 -1
- package/dist/pipeline/event-sourced-engine.js +0 -267
- package/dist/pipeline/event-sourced-engine.js.map +0 -1
- package/dist/pipeline/event-store.d.ts +0 -58
- package/dist/pipeline/event-store.d.ts.map +0 -1
- package/dist/pipeline/event-store.js +0 -184
- package/dist/pipeline/event-store.js.map +0 -1
- package/dist/pipeline/events.d.ts +0 -308
- package/dist/pipeline/events.d.ts.map +0 -1
- package/dist/pipeline/events.js +0 -49
- package/dist/pipeline/events.js.map +0 -1
- package/dist/pipeline/execution-plan-builder.d.ts +0 -20
- package/dist/pipeline/execution-plan-builder.d.ts.map +0 -1
- package/dist/pipeline/execution-plan-builder.js +0 -100
- package/dist/pipeline/execution-plan-builder.js.map +0 -1
- package/dist/pipeline/optimized-aggregator.d.ts +0 -36
- package/dist/pipeline/optimized-aggregator.d.ts.map +0 -1
- package/dist/pipeline/optimized-aggregator.js +0 -93
- package/dist/pipeline/optimized-aggregator.js.map +0 -1
- package/dist/pipeline/phase-manager.d.ts +0 -190
- package/dist/pipeline/phase-manager.d.ts.map +0 -1
- package/dist/pipeline/phase-manager.js +0 -961
- package/dist/pipeline/phase-manager.js.map +0 -1
- package/dist/pipeline/progress-tracker.d.ts +0 -29
- package/dist/pipeline/progress-tracker.d.ts.map +0 -1
- package/dist/pipeline/progress-tracker.js +0 -99
- package/dist/pipeline/progress-tracker.js.map +0 -1
- package/dist/pipeline/snapshot-store.d.ts +0 -45
- package/dist/pipeline/snapshot-store.d.ts.map +0 -1
- package/dist/pipeline/snapshot-store.js +0 -89
- package/dist/pipeline/snapshot-store.js.map +0 -1
- package/dist/pipeline/state-machine-types.d.ts +0 -157
- package/dist/pipeline/state-machine-types.d.ts.map +0 -1
- package/dist/pipeline/state-machine-types.js +0 -2
- package/dist/pipeline/state-machine-types.js.map +0 -1
- package/dist/pipeline/state-machine.d.ts +0 -44
- package/dist/pipeline/state-machine.d.ts.map +0 -1
- package/dist/pipeline/state-machine.js +0 -206
- package/dist/pipeline/state-machine.js.map +0 -1
- package/dist/pipeline/state-query.d.ts +0 -71
- package/dist/pipeline/state-query.d.ts.map +0 -1
- package/dist/pipeline/state-query.js +0 -213
- package/dist/pipeline/state-query.js.map +0 -1
- package/dist/pipeline/transitions.d.ts +0 -28
- package/dist/pipeline/transitions.d.ts.map +0 -1
- package/dist/pipeline/transitions.js +0 -336
- package/dist/pipeline/transitions.js.map +0 -1
- package/dist/strategy/bandit.d.ts +0 -51
- package/dist/strategy/bandit.d.ts.map +0 -1
- package/dist/strategy/bandit.js +0 -116
- package/dist/strategy/bandit.js.map +0 -1
- /package/dist/{ai-provider → ai}/base-provider.d.ts +0 -0
- /package/dist/{ai-provider → ai}/base-provider.js +0 -0
- /package/dist/{ai-provider → ai}/factory.d.ts +0 -0
- /package/dist/{ai-provider → ai}/factory.js +0 -0
- /package/dist/{ai-gateway → ai}/index.js +0 -0
- /package/dist/{ai-gateway → ai}/model-selector.d.ts +0 -0
- /package/dist/{ai-gateway → ai}/model-selector.js +0 -0
- /package/dist/{ai-provider → ai}/ollama-provider.d.ts +0 -0
- /package/dist/{ai-provider → ai}/ollama-provider.js +0 -0
- /package/dist/{ai-provider → ai}/openai-provider.d.ts +0 -0
- /package/dist/{ai-provider → ai}/openai-provider.js +0 -0
- /package/dist/{ai-gateway → ai}/rate-limiter.d.ts +0 -0
- /package/dist/{ai-gateway → ai}/rate-limiter.js +0 -0
- /package/dist/{ai-gateway → ai}/response-cache.d.ts +0 -0
- /package/dist/{ai-gateway → ai}/response-cache.js +0 -0
- /package/dist/{ai-gateway → ai}/token-budget.d.ts +0 -0
- /package/dist/{ai-gateway → ai}/token-budget.js +0 -0
- /package/dist/{ai-provider → ai}/types.d.ts +0 -0
- /package/dist/{ai-provider → ai}/types.js +0 -0
- /package/dist/{core → utils}/cache-registry.d.ts +0 -0
- /package/dist/{core → utils}/cache-registry.js +0 -0
- /package/dist/{core → utils}/pending-prompt-sink.d.ts +0 -0
- /package/dist/{core → utils}/pending-prompt-sink.js +0 -0
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 动态 Pipeline 事件聚合器
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* 1. 从事件流重建 DynamicPipeline 状态
|
|
6
|
-
* 2. 应用动态节点事件到状态
|
|
7
|
-
* 3. 继承基础聚合器的事件处理能力
|
|
8
|
-
*/
|
|
9
|
-
import { PipelineAggregator } from './aggregator.js';
|
|
10
|
-
import { PipelineEventType, } from './events.js';
|
|
11
|
-
/**
|
|
12
|
-
* 动态 Pipeline 聚合器
|
|
13
|
-
*/
|
|
14
|
-
export class DynamicPipelineAggregator extends PipelineAggregator {
|
|
15
|
-
/**
|
|
16
|
-
* 从事件流重建 DynamicPipeline 状态
|
|
17
|
-
*/
|
|
18
|
-
rebuildDynamic(pipelineId) {
|
|
19
|
-
const events = this.eventStore.getEvents(pipelineId);
|
|
20
|
-
if (events.length === 0) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
let state = null;
|
|
24
|
-
for (const event of events) {
|
|
25
|
-
state = this.applyDynamic(state, event);
|
|
26
|
-
}
|
|
27
|
-
return state;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* 应用单个事件到 DynamicPipeline 状态
|
|
31
|
-
*/
|
|
32
|
-
applyDynamic(state, event) {
|
|
33
|
-
switch (event.type) {
|
|
34
|
-
case PipelineEventType.DYNAMIC_PIPELINE_CREATED:
|
|
35
|
-
return this.applyDynamicPipelineCreated(event);
|
|
36
|
-
case PipelineEventType.DYNAMIC_NODE_CREATED:
|
|
37
|
-
return this.applyDynamicNodeCreated(state, event);
|
|
38
|
-
case PipelineEventType.DYNAMIC_NODE_STARTED:
|
|
39
|
-
return this.applyDynamicNodeStarted(state, event);
|
|
40
|
-
case PipelineEventType.DYNAMIC_NODE_COMPLETED:
|
|
41
|
-
return this.applyDynamicNodeCompleted(state, event);
|
|
42
|
-
case PipelineEventType.DYNAMIC_NODE_FAILED:
|
|
43
|
-
return this.applyDynamicNodeFailed(state, event);
|
|
44
|
-
case PipelineEventType.DYNAMIC_NODE_ADVANCED:
|
|
45
|
-
return this.applyDynamicNodeAdvanced(state, event);
|
|
46
|
-
case PipelineEventType.DYNAMIC_PIPELINE_COMPLETED:
|
|
47
|
-
return this.applyDynamicPipelineCompleted(state, event);
|
|
48
|
-
// Step 生命周期事件
|
|
49
|
-
case PipelineEventType.STEP_STARTED:
|
|
50
|
-
return this.applyStepStarted(state, event);
|
|
51
|
-
case PipelineEventType.STEP_COMPLETED:
|
|
52
|
-
return this.applyStepCompleted(state, event);
|
|
53
|
-
case PipelineEventType.STEP_FAILED:
|
|
54
|
-
return this.applyStepFailed(state, event);
|
|
55
|
-
case PipelineEventType.STEP_VALIDATED:
|
|
56
|
-
return this.applyStepValidated(state, event);
|
|
57
|
-
case PipelineEventType.STEP_RETRYING:
|
|
58
|
-
return this.applyStepRetrying(state, event);
|
|
59
|
-
case PipelineEventType.STEP_NEED_HUMAN:
|
|
60
|
-
return this.applyStepNeedHuman(state, event);
|
|
61
|
-
// 其他事件类型不改变状态
|
|
62
|
-
default:
|
|
63
|
-
return state;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* 应用 DYNAMIC_PIPELINE_CREATED 事件
|
|
68
|
-
*/
|
|
69
|
-
applyDynamicPipelineCreated(event) {
|
|
70
|
-
const payload = event.payload;
|
|
71
|
-
return {
|
|
72
|
-
id: event.pipelineId,
|
|
73
|
-
requirement: payload.requirement,
|
|
74
|
-
projectPath: payload.projectPath,
|
|
75
|
-
sessionId: payload.sessionId,
|
|
76
|
-
nodes: payload.nodes.map(n => ({
|
|
77
|
-
id: n.id,
|
|
78
|
-
nodeTypeId: n.nodeTypeId,
|
|
79
|
-
status: 'pending',
|
|
80
|
-
dependencies: n.dependencies,
|
|
81
|
-
boundSkillName: n.boundSkillName,
|
|
82
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
83
|
-
})),
|
|
84
|
-
templateId: payload.templateId,
|
|
85
|
-
conventionId: payload.conventionId,
|
|
86
|
-
complexity: payload.complexity,
|
|
87
|
-
reasoning: payload.reasoning,
|
|
88
|
-
status: 'in_progress',
|
|
89
|
-
createdAt: new Date(event.timestamp).toISOString(),
|
|
90
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* 应用 DYNAMIC_NODE_CREATED 事件
|
|
95
|
-
*/
|
|
96
|
-
applyDynamicNodeCreated(state, event) {
|
|
97
|
-
const payload = event.payload;
|
|
98
|
-
const newNode = {
|
|
99
|
-
id: payload.nodeId,
|
|
100
|
-
nodeTypeId: payload.nodeTypeId,
|
|
101
|
-
status: 'pending',
|
|
102
|
-
dependencies: payload.dependencies,
|
|
103
|
-
boundSkillName: payload.boundSkillName,
|
|
104
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
105
|
-
};
|
|
106
|
-
return {
|
|
107
|
-
...state,
|
|
108
|
-
nodes: [...state.nodes, newNode],
|
|
109
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 应用 DYNAMIC_NODE_STARTED 事件
|
|
114
|
-
*/
|
|
115
|
-
applyDynamicNodeStarted(state, event) {
|
|
116
|
-
const payload = event.payload;
|
|
117
|
-
return {
|
|
118
|
-
...state,
|
|
119
|
-
currentNodeId: payload.nodeId,
|
|
120
|
-
nodes: state.nodes.map(node => node.id === payload.nodeId
|
|
121
|
-
? {
|
|
122
|
-
...node,
|
|
123
|
-
status: 'in_progress',
|
|
124
|
-
startedAt: new Date(event.timestamp).toISOString(),
|
|
125
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
126
|
-
}
|
|
127
|
-
: node),
|
|
128
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* 应用 DYNAMIC_NODE_COMPLETED 事件
|
|
133
|
-
*/
|
|
134
|
-
applyDynamicNodeCompleted(state, event) {
|
|
135
|
-
const payload = event.payload;
|
|
136
|
-
return {
|
|
137
|
-
...state,
|
|
138
|
-
nodes: state.nodes.map(node => node.id === payload.nodeId
|
|
139
|
-
? {
|
|
140
|
-
...node,
|
|
141
|
-
status: 'completed',
|
|
142
|
-
output: payload.output,
|
|
143
|
-
completedAt: new Date(event.timestamp).toISOString(),
|
|
144
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
145
|
-
}
|
|
146
|
-
: node),
|
|
147
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* 应用 DYNAMIC_NODE_FAILED 事件
|
|
152
|
-
*/
|
|
153
|
-
applyDynamicNodeFailed(state, event) {
|
|
154
|
-
const payload = event.payload;
|
|
155
|
-
return {
|
|
156
|
-
...state,
|
|
157
|
-
nodes: state.nodes.map(node => node.id === payload.nodeId
|
|
158
|
-
? {
|
|
159
|
-
...node,
|
|
160
|
-
status: 'failed',
|
|
161
|
-
output: payload.reason,
|
|
162
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
163
|
-
}
|
|
164
|
-
: node),
|
|
165
|
-
status: 'failed',
|
|
166
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* 应用 DYNAMIC_NODE_ADVANCED 事件
|
|
171
|
-
*/
|
|
172
|
-
applyDynamicNodeAdvanced(state, event) {
|
|
173
|
-
const payload = event.payload;
|
|
174
|
-
return {
|
|
175
|
-
...state,
|
|
176
|
-
currentNodeId: payload.toNodeId,
|
|
177
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* 应用 DYNAMIC_PIPELINE_COMPLETED 事件
|
|
182
|
-
*/
|
|
183
|
-
applyDynamicPipelineCompleted(state, event) {
|
|
184
|
-
return {
|
|
185
|
-
...state,
|
|
186
|
-
status: 'completed',
|
|
187
|
-
currentNodeId: undefined,
|
|
188
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* 获取节点进度
|
|
193
|
-
*/
|
|
194
|
-
getNodeProgress(pipelineId) {
|
|
195
|
-
const state = this.rebuildDynamic(pipelineId);
|
|
196
|
-
if (!state) {
|
|
197
|
-
return { completed: 0, total: 0, percentage: 0 };
|
|
198
|
-
}
|
|
199
|
-
const completed = state.nodes.filter(n => n.status === 'completed').length;
|
|
200
|
-
const total = state.nodes.length;
|
|
201
|
-
const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
|
|
202
|
-
return { completed, total, percentage };
|
|
203
|
-
}
|
|
204
|
-
// ─── Step 事件处理 ────────────────────────────────────────────────────────────
|
|
205
|
-
/**
|
|
206
|
-
* 应用 STEP_STARTED 事件
|
|
207
|
-
*/
|
|
208
|
-
applyStepStarted(state, event) {
|
|
209
|
-
const payload = event.payload;
|
|
210
|
-
return {
|
|
211
|
-
...state,
|
|
212
|
-
nodes: state.nodes.map(node => node.id === payload.node_id
|
|
213
|
-
? {
|
|
214
|
-
...node,
|
|
215
|
-
currentStepId: payload.step_execution_id,
|
|
216
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
217
|
-
}
|
|
218
|
-
: node),
|
|
219
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* 应用 STEP_COMPLETED 事件
|
|
224
|
-
*/
|
|
225
|
-
applyStepCompleted(state, event) {
|
|
226
|
-
const payload = event.payload;
|
|
227
|
-
return {
|
|
228
|
-
...state,
|
|
229
|
-
nodes: state.nodes.map(node => node.id === payload.node_id
|
|
230
|
-
? {
|
|
231
|
-
...node,
|
|
232
|
-
completedSteps: [...(node.completedSteps || []), payload.step_execution_id],
|
|
233
|
-
currentStepId: payload.next_step_id || undefined,
|
|
234
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
235
|
-
}
|
|
236
|
-
: node),
|
|
237
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* 应用 STEP_FAILED 事件
|
|
242
|
-
*/
|
|
243
|
-
applyStepFailed(state, event) {
|
|
244
|
-
const payload = event.payload;
|
|
245
|
-
return {
|
|
246
|
-
...state,
|
|
247
|
-
nodes: state.nodes.map(node => node.id === payload.node_id
|
|
248
|
-
? {
|
|
249
|
-
...node,
|
|
250
|
-
failedSteps: [
|
|
251
|
-
...(node.failedSteps || []),
|
|
252
|
-
{
|
|
253
|
-
step_id: payload.step_execution_id,
|
|
254
|
-
reason: payload.reason,
|
|
255
|
-
attempts: payload.attempts,
|
|
256
|
-
},
|
|
257
|
-
],
|
|
258
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
259
|
-
}
|
|
260
|
-
: node),
|
|
261
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* 应用 STEP_VALIDATED 事件
|
|
266
|
-
*/
|
|
267
|
-
applyStepValidated(state, event) {
|
|
268
|
-
// 验证事件不改变核心状态,只记录验证结果(可选:更新 stepExecutions)
|
|
269
|
-
return {
|
|
270
|
-
...state,
|
|
271
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* 应用 STEP_RETRYING 事件
|
|
276
|
-
*/
|
|
277
|
-
applyStepRetrying(state, event) {
|
|
278
|
-
// 重试事件不改变核心状态,只记录重试次数(可选:更新 stepExecutions)
|
|
279
|
-
return {
|
|
280
|
-
...state,
|
|
281
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* 应用 STEP_NEED_HUMAN 事件
|
|
286
|
-
*/
|
|
287
|
-
applyStepNeedHuman(state, event) {
|
|
288
|
-
const payload = event.payload;
|
|
289
|
-
return {
|
|
290
|
-
...state,
|
|
291
|
-
nodes: state.nodes.map(node => node.id === payload.node_id
|
|
292
|
-
? {
|
|
293
|
-
...node,
|
|
294
|
-
status: 'failed', // Step 需要人工介入时,标记 Node 为 failed
|
|
295
|
-
output: `Step "${payload.step_definition_id}" 需要人工介入:${payload.reason}`,
|
|
296
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
297
|
-
}
|
|
298
|
-
: node),
|
|
299
|
-
updatedAt: new Date(event.timestamp).toISOString(),
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
//# sourceMappingURL=dynamic-aggregator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-aggregator.js","sourceRoot":"","sources":["../../src/pipeline/dynamic-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pipeline 事件溯源 + 状态机 集成示例
|
|
3
|
-
*
|
|
4
|
-
* 展示如何使用新架构替代旧的 PipelineEngine
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* 新架构的 Pipeline 引擎
|
|
8
|
-
*/
|
|
9
|
-
export declare class EventSourcedPipelineEngine {
|
|
10
|
-
private eventStore;
|
|
11
|
-
private snapshotStore;
|
|
12
|
-
private aggregator;
|
|
13
|
-
private stateMachine;
|
|
14
|
-
private stateQuery;
|
|
15
|
-
constructor(dbPath: string);
|
|
16
|
-
/**
|
|
17
|
-
* 创建 Pipeline
|
|
18
|
-
*/
|
|
19
|
-
createPipeline(params: {
|
|
20
|
-
requirement: string;
|
|
21
|
-
projectPath: string;
|
|
22
|
-
sessionId: string;
|
|
23
|
-
techStack?: string;
|
|
24
|
-
complexity?: string;
|
|
25
|
-
plannedPhases: string[];
|
|
26
|
-
}): Promise<string>;
|
|
27
|
-
/**
|
|
28
|
-
* 添加任务
|
|
29
|
-
*/
|
|
30
|
-
addTask(pipelineId: string, task: {
|
|
31
|
-
id: string;
|
|
32
|
-
title: string;
|
|
33
|
-
phase: string;
|
|
34
|
-
description?: string;
|
|
35
|
-
}): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* 标记任务完成
|
|
38
|
-
*/
|
|
39
|
-
completeTask(pipelineId: string, taskId: string, artifact: string): Promise<void>;
|
|
40
|
-
/**
|
|
41
|
-
* 质量检查通过
|
|
42
|
-
*/
|
|
43
|
-
qualityCheckPassed(pipelineId: string, level: 'pass' | 'warn'): Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* 质量检查失败
|
|
46
|
-
*/
|
|
47
|
-
qualityCheckFailed(pipelineId: string, issues: string[], fixAttempt: number): Promise<void>;
|
|
48
|
-
/**
|
|
49
|
-
* 手动推进阶段(强制放行后)
|
|
50
|
-
*/
|
|
51
|
-
manualAdvance(pipelineId: string, reason?: string): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* 获取进度快照
|
|
54
|
-
*/
|
|
55
|
-
getProgressSnapshot(pipelineId: string): string;
|
|
56
|
-
/**
|
|
57
|
-
* 获取状态历史
|
|
58
|
-
*/
|
|
59
|
-
getStateHistory(pipelineId: string): import("./state-query.js").StateHistoryEntry[];
|
|
60
|
-
/**
|
|
61
|
-
* 获取质量门禁统计
|
|
62
|
-
*/
|
|
63
|
-
getQualityStats(pipelineId: string): {
|
|
64
|
-
totalChecks: number;
|
|
65
|
-
passed: number;
|
|
66
|
-
failed: number;
|
|
67
|
-
forcedPass: number;
|
|
68
|
-
};
|
|
69
|
-
private getPhaseLabel;
|
|
70
|
-
private getStatusEmoji;
|
|
71
|
-
private renderProgressBar;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* 使用示例
|
|
75
|
-
*/
|
|
76
|
-
export declare function example(): Promise<void>;
|
|
77
|
-
//# sourceMappingURL=event-sourced-engine.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event-sourced-engine.d.ts","sourceRoot":"","sources":["../../src/pipeline/event-sourced-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,UAAU,CAAqB;gBAE3B,MAAM,EAAE,MAAM;IAS1B;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBnB;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;QACtC,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjB;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BvF;;OAEG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnF;;OAEG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjG;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvE;;OAEG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IA8C/C;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM;IAIlC;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM;;;;;;IAIlC,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,iBAAiB;CAK1B;AAED;;GAEG;AACH,wBAAsB,OAAO,kBAiD5B"}
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pipeline 事件溯源 + 状态机 集成示例
|
|
3
|
-
*
|
|
4
|
-
* 展示如何使用新架构替代旧的 PipelineEngine
|
|
5
|
-
*/
|
|
6
|
-
import { EventStore } from './event-store.js';
|
|
7
|
-
import { SnapshotStore } from './snapshot-store.js';
|
|
8
|
-
import { OptimizedAggregator } from './optimized-aggregator.js';
|
|
9
|
-
import { PipelineStateMachine } from './state-machine.js';
|
|
10
|
-
import { PipelineStateQuery } from './state-query.js';
|
|
11
|
-
import { PipelineEventType } from './events.js';
|
|
12
|
-
import { logger } from '../utils/logger.js';
|
|
13
|
-
/**
|
|
14
|
-
* 新架构的 Pipeline 引擎
|
|
15
|
-
*/
|
|
16
|
-
export class EventSourcedPipelineEngine {
|
|
17
|
-
eventStore;
|
|
18
|
-
snapshotStore;
|
|
19
|
-
aggregator;
|
|
20
|
-
stateMachine;
|
|
21
|
-
stateQuery;
|
|
22
|
-
constructor(dbPath) {
|
|
23
|
-
// 初始化各个组件
|
|
24
|
-
this.eventStore = new EventStore(dbPath);
|
|
25
|
-
this.snapshotStore = new SnapshotStore(dbPath);
|
|
26
|
-
this.aggregator = new OptimizedAggregator(this.eventStore, this.snapshotStore);
|
|
27
|
-
this.stateMachine = new PipelineStateMachine(this.eventStore, this.aggregator);
|
|
28
|
-
this.stateQuery = new PipelineStateQuery(this.aggregator, this.eventStore, this.stateMachine);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* 创建 Pipeline
|
|
32
|
-
*/
|
|
33
|
-
async createPipeline(params) {
|
|
34
|
-
const pipelineId = `pipeline-${Date.now()}`;
|
|
35
|
-
// 生成 PIPELINE_CREATED 事件
|
|
36
|
-
this.eventStore.append({
|
|
37
|
-
pipelineId,
|
|
38
|
-
type: PipelineEventType.PIPELINE_CREATED,
|
|
39
|
-
payload: {
|
|
40
|
-
requirement: params.requirement,
|
|
41
|
-
projectPath: params.projectPath,
|
|
42
|
-
sessionId: params.sessionId,
|
|
43
|
-
techStack: params.techStack,
|
|
44
|
-
complexity: params.complexity,
|
|
45
|
-
taskType: 'feature',
|
|
46
|
-
plannedPhases: params.plannedPhases,
|
|
47
|
-
},
|
|
48
|
-
metadata: {
|
|
49
|
-
sessionId: params.sessionId,
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
return pipelineId;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* 添加任务
|
|
56
|
-
*/
|
|
57
|
-
async addTask(pipelineId, task) {
|
|
58
|
-
this.eventStore.append({
|
|
59
|
-
pipelineId,
|
|
60
|
-
type: PipelineEventType.TASK_CREATED,
|
|
61
|
-
payload: {
|
|
62
|
-
taskId: task.id,
|
|
63
|
-
title: task.title,
|
|
64
|
-
phase: task.phase,
|
|
65
|
-
description: task.description,
|
|
66
|
-
source: 'manual',
|
|
67
|
-
},
|
|
68
|
-
metadata: {
|
|
69
|
-
sessionId: '',
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* 标记任务完成
|
|
75
|
-
*/
|
|
76
|
-
async completeTask(pipelineId, taskId, artifact) {
|
|
77
|
-
this.eventStore.append({
|
|
78
|
-
pipelineId,
|
|
79
|
-
type: PipelineEventType.TASK_COMPLETED,
|
|
80
|
-
payload: {
|
|
81
|
-
taskId,
|
|
82
|
-
title: '',
|
|
83
|
-
phase: '',
|
|
84
|
-
artifact,
|
|
85
|
-
detectionMethod: 'explicit_signal',
|
|
86
|
-
},
|
|
87
|
-
metadata: {
|
|
88
|
-
sessionId: '',
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
// 检查是否所有任务完成
|
|
92
|
-
const pipeline = this.aggregator.rebuild(pipelineId);
|
|
93
|
-
if (!pipeline)
|
|
94
|
-
return;
|
|
95
|
-
const phaseTasks = pipeline.tasks.filter(t => t.phase === pipeline.phase);
|
|
96
|
-
const completed = phaseTasks.filter(t => t.status === 'completed').length;
|
|
97
|
-
if (completed === phaseTasks.length && phaseTasks.length > 0) {
|
|
98
|
-
// 触发质量检查
|
|
99
|
-
await this.stateMachine.transition(pipelineId, {
|
|
100
|
-
type: 'ALL_TASKS_COMPLETED',
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* 质量检查通过
|
|
106
|
-
*/
|
|
107
|
-
async qualityCheckPassed(pipelineId, level) {
|
|
108
|
-
await this.stateMachine.transition(pipelineId, {
|
|
109
|
-
type: 'QUALITY_CHECK_PASSED',
|
|
110
|
-
level,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* 质量检查失败
|
|
115
|
-
*/
|
|
116
|
-
async qualityCheckFailed(pipelineId, issues, fixAttempt) {
|
|
117
|
-
if (fixAttempt >= 2) {
|
|
118
|
-
// 达到最大次数,强制放行
|
|
119
|
-
await this.stateMachine.transition(pipelineId, {
|
|
120
|
-
type: 'QUALITY_MAX_ATTEMPTS_REACHED',
|
|
121
|
-
unresolvedIssues: issues,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
// 阻塞并等待修复
|
|
126
|
-
await this.stateMachine.transition(pipelineId, {
|
|
127
|
-
type: 'QUALITY_CHECK_FAILED',
|
|
128
|
-
issues,
|
|
129
|
-
fixAttempt,
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* 手动推进阶段(强制放行后)
|
|
135
|
-
*/
|
|
136
|
-
async manualAdvance(pipelineId, reason) {
|
|
137
|
-
await this.stateMachine.transition(pipelineId, {
|
|
138
|
-
type: 'MANUAL_ADVANCE',
|
|
139
|
-
reason,
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* 获取进度快照
|
|
144
|
-
*/
|
|
145
|
-
getProgressSnapshot(pipelineId) {
|
|
146
|
-
const pipeline = this.aggregator.rebuild(pipelineId);
|
|
147
|
-
if (!pipeline)
|
|
148
|
-
return 'Pipeline not found';
|
|
149
|
-
const state = this.stateQuery.getCurrentState(pipelineId);
|
|
150
|
-
if (!state)
|
|
151
|
-
return 'State not found';
|
|
152
|
-
const progress = this.aggregator.getPhaseProgress(pipelineId, state.phase);
|
|
153
|
-
const globalProgress = this.aggregator.getGlobalProgress(pipelineId);
|
|
154
|
-
const phaseLabel = this.getPhaseLabel(state.phase);
|
|
155
|
-
const statusEmoji = this.getStatusEmoji(state.status);
|
|
156
|
-
const progressBar = this.renderProgressBar(progress.completed, progress.total);
|
|
157
|
-
let snapshot = `#${pipelineId.slice(0, 8)} ${phaseLabel} ${progress.completed}/${progress.total} [${progressBar}] 全局${globalProgress.percentage}%`;
|
|
158
|
-
// 添加状态标记
|
|
159
|
-
if (state.status === 'quality_checking') {
|
|
160
|
-
snapshot += '\n 🚦 阶段状态: 🔍 质量检查中...';
|
|
161
|
-
}
|
|
162
|
-
else if (state.status === 'quality_blocked') {
|
|
163
|
-
const fixAttempt = 'fixAttempt' in state ? state.fixAttempt : 1;
|
|
164
|
-
snapshot += `\n 🚦 阶段状态: ⚠️ 待修复 (第${fixAttempt}次)`;
|
|
165
|
-
const blockReason = this.stateQuery.getBlockReason(pipelineId);
|
|
166
|
-
if (blockReason) {
|
|
167
|
-
snapshot += `\n ${blockReason}`;
|
|
168
|
-
}
|
|
169
|
-
snapshot += '\n ⏸️ 阶段推进已暂停,修复后将自动继续';
|
|
170
|
-
}
|
|
171
|
-
else if (state.status === 'quality_forced_pass') {
|
|
172
|
-
snapshot += '\n 🚦 阶段状态: 🟡 强制放行(质量不达标)';
|
|
173
|
-
snapshot += '\n ⚠️ 请手动确认产物质量后,使用 MANUAL_ADVANCE 推进阶段';
|
|
174
|
-
}
|
|
175
|
-
// 添加任务列表
|
|
176
|
-
const phaseTasks = pipeline.tasks.filter(t => t.phase === state.phase);
|
|
177
|
-
if (phaseTasks.length > 0) {
|
|
178
|
-
snapshot += '\n' + phaseTasks.map(t => {
|
|
179
|
-
const icon = t.status === 'completed' ? '✅' : t.status === 'in_progress' ? '▶' : '○';
|
|
180
|
-
return ` ${icon} ${t.title}`;
|
|
181
|
-
}).join('\n');
|
|
182
|
-
}
|
|
183
|
-
return snapshot;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* 获取状态历史
|
|
187
|
-
*/
|
|
188
|
-
getStateHistory(pipelineId) {
|
|
189
|
-
return this.stateQuery.getStateHistory(pipelineId);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* 获取质量门禁统计
|
|
193
|
-
*/
|
|
194
|
-
getQualityStats(pipelineId) {
|
|
195
|
-
return this.stateQuery.getQualityGateStats(pipelineId);
|
|
196
|
-
}
|
|
197
|
-
getPhaseLabel(phase) {
|
|
198
|
-
const labels = {
|
|
199
|
-
analyze: '需求分析',
|
|
200
|
-
design: '架构设计',
|
|
201
|
-
profile: '用户画像',
|
|
202
|
-
code: '编码实现',
|
|
203
|
-
test: '测试',
|
|
204
|
-
review: '代码审查',
|
|
205
|
-
done: '完成',
|
|
206
|
-
};
|
|
207
|
-
return labels[phase] || phase;
|
|
208
|
-
}
|
|
209
|
-
getStatusEmoji(status) {
|
|
210
|
-
switch (status) {
|
|
211
|
-
case 'in_progress': return '▶';
|
|
212
|
-
case 'quality_checking': return '🔍';
|
|
213
|
-
case 'quality_blocked': return '⚠️';
|
|
214
|
-
case 'quality_forced_pass': return '🟡';
|
|
215
|
-
case 'completed': return '✅';
|
|
216
|
-
default: return '○';
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
renderProgressBar(completed, total) {
|
|
220
|
-
if (total === 0)
|
|
221
|
-
return '░░░░░░░░░░';
|
|
222
|
-
const filled = Math.round((completed / total) * 10);
|
|
223
|
-
return '█'.repeat(filled) + '░'.repeat(10 - filled);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* 使用示例
|
|
228
|
-
*/
|
|
229
|
-
export async function example() {
|
|
230
|
-
const engine = new EventSourcedPipelineEngine('./pipeline.db');
|
|
231
|
-
// 1. 创建 Pipeline
|
|
232
|
-
const pipelineId = await engine.createPipeline({
|
|
233
|
-
requirement: '实现用户登录功能',
|
|
234
|
-
projectPath: '/path/to/project',
|
|
235
|
-
sessionId: 'session-123',
|
|
236
|
-
plannedPhases: ['analyze', 'design', 'code', 'test', 'review'],
|
|
237
|
-
});
|
|
238
|
-
logger.info(`Pipeline 创建: ${pipelineId}`);
|
|
239
|
-
// 2. 添加任务
|
|
240
|
-
await engine.addTask(pipelineId, {
|
|
241
|
-
id: 'task-1',
|
|
242
|
-
title: '分析登录流程',
|
|
243
|
-
phase: 'analyze',
|
|
244
|
-
});
|
|
245
|
-
await engine.addTask(pipelineId, {
|
|
246
|
-
id: 'task-2',
|
|
247
|
-
title: '设计数据库表结构',
|
|
248
|
-
phase: 'analyze',
|
|
249
|
-
});
|
|
250
|
-
// 3. 完成任务
|
|
251
|
-
await engine.completeTask(pipelineId, 'task-1', '登录流程分析完成');
|
|
252
|
-
await engine.completeTask(pipelineId, 'task-2', '数据库表结构设计完成');
|
|
253
|
-
// 此时会自动触发质量检查
|
|
254
|
-
// 4. 质量检查失败
|
|
255
|
-
await engine.qualityCheckFailed(pipelineId, ['缺少安全性分析'], 1);
|
|
256
|
-
logger.info(`进度快照: ${JSON.stringify(engine.getProgressSnapshot(pipelineId))}`);
|
|
257
|
-
// 5. 修复后重新检查
|
|
258
|
-
await engine.qualityCheckPassed(pipelineId, 'pass');
|
|
259
|
-
logger.info(`进度快照: ${JSON.stringify(engine.getProgressSnapshot(pipelineId))}`);
|
|
260
|
-
// 6. 查看状态历史
|
|
261
|
-
const history = engine.getStateHistory(pipelineId);
|
|
262
|
-
logger.info(`状态历史: ${JSON.stringify(history)}`);
|
|
263
|
-
// 7. 查看质量统计
|
|
264
|
-
const stats = engine.getQualityStats(pipelineId);
|
|
265
|
-
logger.info(`质量统计: ${JSON.stringify(stats)}`);
|
|
266
|
-
}
|
|
267
|
-
//# sourceMappingURL=event-sourced-engine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event-sourced-engine.js","sourceRoot":"","sources":["../../src/pipeline/event-sourced-engine.ts"],"names":[],"mappings":"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"}
|