@winspan/claude-forge 3.7.8 → 4.1.0
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/dist/autopilot/quality-gate-utils.d.ts +6 -0
- package/dist/autopilot/quality-gate-utils.d.ts.map +1 -0
- package/dist/autopilot/quality-gate-utils.js +48 -0
- package/dist/autopilot/quality-gate-utils.js.map +1 -0
- package/dist/autopilot/quality-gate.d.ts +0 -8
- package/dist/autopilot/quality-gate.d.ts.map +1 -1
- package/dist/autopilot/quality-gate.js +6 -61
- package/dist/autopilot/quality-gate.js.map +1 -1
- package/dist/cli/commands/convention.d.ts.map +1 -1
- package/dist/cli/commands/convention.js +1 -115
- package/dist/cli/commands/convention.js.map +1 -1
- package/dist/cli/commands/init/index.d.ts.map +1 -1
- package/dist/cli/commands/init/index.js +0 -14
- package/dist/cli/commands/init/index.js.map +1 -1
- package/dist/cli/commands/init/project-doctor.d.ts.map +1 -1
- package/dist/cli/commands/init/project-doctor.js +0 -63
- package/dist/cli/commands/init/project-doctor.js.map +1 -1
- package/dist/cli/tui.d.ts.map +1 -1
- package/dist/cli/tui.js +7 -131
- package/dist/cli/tui.js.map +1 -1
- package/dist/constants.d.ts +0 -6
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -6
- package/dist/constants.js.map +1 -1
- package/dist/convention/convention-loader.js +2 -2
- package/dist/convention/convention-loader.js.map +1 -1
- package/dist/convention/convention-manager.d.ts +24 -2
- package/dist/convention/convention-manager.d.ts.map +1 -1
- package/dist/convention/convention-manager.js +62 -4
- package/dist/convention/convention-manager.js.map +1 -1
- package/dist/convention/index.d.ts +1 -2
- package/dist/convention/index.d.ts.map +1 -1
- package/dist/convention/index.js +0 -1
- package/dist/convention/index.js.map +1 -1
- package/dist/convention/types.d.ts +4 -14
- package/dist/convention/types.d.ts.map +1 -1
- package/dist/daemon/engine-registry/init-governance.d.ts +10 -0
- package/dist/daemon/engine-registry/init-governance.d.ts.map +1 -0
- package/dist/daemon/engine-registry/init-governance.js +22 -0
- package/dist/daemon/engine-registry/init-governance.js.map +1 -0
- package/dist/daemon/engine-registry.d.ts.map +1 -1
- package/dist/daemon/engine-registry.js +5 -6
- package/dist/daemon/engine-registry.js.map +1 -1
- package/dist/daemon/handler-context.d.ts +4 -2
- package/dist/daemon/handler-context.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use-handler.js +28 -3
- package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/pre-tool-use-handler.js +32 -22
- package/dist/daemon/handlers/pre-tool-use-handler.js.map +1 -1
- package/dist/daemon/handlers/session-cleanup.d.ts +0 -4
- package/dist/daemon/handlers/session-cleanup.d.ts.map +1 -1
- package/dist/daemon/handlers/session-cleanup.js +0 -81
- package/dist/daemon/handlers/session-cleanup.js.map +1 -1
- package/dist/daemon/handlers/stages/07-pipeline-reply.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/07-pipeline-reply.js +5 -1
- package/dist/daemon/handlers/stages/07-pipeline-reply.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 +5 -1
- package/dist/daemon/handlers/stages/09-pipeline-active.js.map +1 -1
- package/dist/daemon/handlers/stages/13-template-route.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/13-template-route.js +5 -1
- package/dist/daemon/handlers/stages/13-template-route.js.map +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.d.ts +5 -2
- package/dist/daemon/handlers/stages/18-complex-task.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.js +87 -9
- package/dist/daemon/handlers/stages/18-complex-task.js.map +1 -1
- package/dist/daemon/handlers/stop-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/stop-handler.js +1 -13
- package/dist/daemon/handlers/stop-handler.js.map +1 -1
- package/dist/goal/goal-classifier.d.ts.map +1 -1
- package/dist/goal/goal-classifier.js +12 -5
- package/dist/goal/goal-classifier.js.map +1 -1
- package/dist/goal/goal-types.d.ts +1 -3
- package/dist/goal/goal-types.d.ts.map +1 -1
- package/dist/goal/index.d.ts +1 -1
- package/dist/goal/index.d.ts.map +1 -1
- package/dist/governance/contract-builder.d.ts +39 -0
- package/dist/governance/contract-builder.d.ts.map +1 -0
- package/dist/governance/contract-builder.js +216 -0
- package/dist/governance/contract-builder.js.map +1 -0
- package/dist/governance/engine.d.ts +33 -0
- package/dist/governance/engine.d.ts.map +1 -0
- package/dist/governance/engine.js +183 -0
- package/dist/governance/engine.js.map +1 -0
- package/dist/governance/evidence-collector.d.ts +42 -0
- package/dist/governance/evidence-collector.d.ts.map +1 -0
- package/dist/governance/evidence-collector.js +136 -0
- package/dist/governance/evidence-collector.js.map +1 -0
- package/dist/governance/plugins/correction-plugin.d.ts +20 -0
- package/dist/governance/plugins/correction-plugin.d.ts.map +1 -0
- package/dist/governance/plugins/correction-plugin.js +113 -0
- package/dist/governance/plugins/correction-plugin.js.map +1 -0
- package/dist/governance/plugins/guidance-plugin.d.ts +21 -0
- package/dist/governance/plugins/guidance-plugin.d.ts.map +1 -0
- package/dist/governance/plugins/guidance-plugin.js +69 -0
- package/dist/governance/plugins/guidance-plugin.js.map +1 -0
- package/dist/governance/plugins/memory-plugin.d.ts +22 -0
- package/dist/governance/plugins/memory-plugin.d.ts.map +1 -0
- package/dist/governance/plugins/memory-plugin.js +106 -0
- package/dist/governance/plugins/memory-plugin.js.map +1 -0
- package/dist/governance/plugins/policy-plugin.d.ts +16 -0
- package/dist/governance/plugins/policy-plugin.d.ts.map +1 -0
- package/dist/governance/plugins/policy-plugin.js +69 -0
- package/dist/governance/plugins/policy-plugin.js.map +1 -0
- package/dist/governance/plugins/verification-plugin.d.ts +15 -0
- package/dist/governance/plugins/verification-plugin.d.ts.map +1 -0
- package/dist/governance/plugins/verification-plugin.js +65 -0
- package/dist/governance/plugins/verification-plugin.js.map +1 -0
- package/dist/governance/types.d.ts +202 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +10 -0
- package/dist/governance/types.js.map +1 -0
- package/dist/pipeline/completion-engine.js +7 -7
- package/dist/pipeline/completion-engine.js.map +1 -1
- package/dist/pipeline/completion-gate.js +3 -3
- package/dist/pipeline/completion-gate.js.map +1 -1
- package/dist/pipeline/diagnosis-service.d.ts +2 -1
- package/dist/pipeline/diagnosis-service.d.ts.map +1 -1
- package/dist/pipeline/diagnosis-service.js.map +1 -1
- package/dist/pipeline/dynamic-node-executor.js +1 -1
- package/dist/pipeline/dynamic-node-executor.js.map +1 -1
- package/dist/pipeline/execution-engine.d.ts +1 -6
- package/dist/pipeline/execution-engine.d.ts.map +1 -1
- package/dist/pipeline/execution-engine.js +1 -1
- package/dist/pipeline/execution-engine.js.map +1 -1
- package/dist/pipeline/execution-plan.js +1 -1
- package/dist/pipeline/execution-plan.js.map +1 -1
- package/dist/pipeline/i-node-executor.d.ts +4 -0
- package/dist/pipeline/i-node-executor.d.ts.map +1 -1
- package/dist/pipeline/node-type-evolver.js +1 -1
- package/dist/pipeline/node-type-evolver.js.map +1 -1
- package/dist/pipeline/node-type-sync.d.ts.map +1 -1
- package/dist/pipeline/node-type-sync.js +22 -43
- package/dist/pipeline/node-type-sync.js.map +1 -1
- package/dist/pipeline/pattern-types.d.ts +3 -1
- package/dist/pipeline/pattern-types.d.ts.map +1 -1
- package/dist/retrospective/types.d.ts +2 -4
- package/dist/retrospective/types.d.ts.map +1 -1
- package/dist/skill-registry/evolver/index.js +6 -2
- package/dist/skill-registry/evolver/index.js.map +1 -1
- package/dist/skill-registry/index.d.ts +5 -0
- package/dist/skill-registry/index.d.ts.map +1 -1
- package/dist/skill-registry/index.js +6 -0
- package/dist/skill-registry/index.js.map +1 -1
- package/dist/storage/repositories/dynamic-pipeline-repository.js +15 -5
- package/dist/storage/repositories/dynamic-pipeline-repository.js.map +1 -1
- package/dist/storage/repositories/node-attempt-repository.d.ts +1 -1
- package/dist/storage/repositories/node-attempt-repository.d.ts.map +1 -1
- package/dist/storage/repositories/node-attempt-repository.js +1 -1
- package/dist/storage/repositories/node-attempt-repository.js.map +1 -1
- package/dist/storage/repositories/pipeline-plan-repository.d.ts.map +1 -1
- package/dist/storage/repositories/pipeline-plan-repository.js +1 -1
- package/dist/storage/repositories/pipeline-plan-repository.js.map +1 -1
- package/dist/storage/repositories/template-evolution-repository.d.ts.map +1 -1
- package/dist/storage/repositories/template-evolution-repository.js.map +1 -1
- package/dist/storage/schema/migration-manager.d.ts +4 -9
- package/dist/storage/schema/migration-manager.d.ts.map +1 -1
- package/dist/storage/schema/migration-manager.js +24 -992
- package/dist/storage/schema/migration-manager.js.map +1 -1
- package/dist/storage/schema.sql +591 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +22 -6
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/web/routes/pipelines.d.ts.map +1 -1
- package/dist/web/routes/pipelines.js +16 -5
- package/dist/web/routes/pipelines.js.map +1 -1
- package/dist/web/routes/quality.d.ts.map +1 -1
- package/dist/web/routes/quality.js +18 -17
- package/dist/web/routes/quality.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +0 -7
- package/dist/web/server.js.map +1 -1
- package/dist/web-static/assets/Analytics-Bo_OyY9A.js +36 -0
- package/dist/web-static/assets/BatchProgress-qW-6664M.js +1 -0
- package/dist/web-static/assets/Breadcrumb-C1Mua6se.js +1 -0
- package/dist/web-static/assets/Config-Dn-dtdo9.js +1 -0
- package/dist/web-static/assets/ConfirmDialog-bdDaAlT1.js +1 -0
- package/dist/web-static/assets/Conventions-ByV7r45c.js +1 -0
- package/dist/web-static/assets/Dashboard-C-7N8kYZ.js +1 -0
- package/dist/web-static/assets/ErrorState-CMLoMrQY.js +1 -0
- package/dist/web-static/assets/Events-DHuyQHQe.js +1 -0
- package/dist/web-static/assets/Evolution-Dzr5xOLD.js +1 -0
- package/dist/web-static/assets/Knowledge-ClwX4cnr.js +2 -0
- package/dist/web-static/assets/MiniCharts-DsV2Sqfk.js +1 -0
- package/dist/web-static/assets/NodeTypes-DFt8b5gi.js +1 -0
- package/dist/web-static/assets/Pagination-CR-eJz36.js +1 -0
- package/dist/web-static/assets/PipelineDetail-By1HJlaB.js +4 -0
- package/dist/web-static/assets/Pipelines--MGzCPtR.js +2 -0
- package/dist/web-static/assets/ProjectDetail-CrpekCeY.js +1 -0
- package/dist/web-static/assets/Projects-Dw1qYmjz.js +1 -0
- package/dist/web-static/assets/Quality-CYwODfQP.js +3 -0
- package/dist/web-static/assets/SessionDetail-c8MYnwnk.js +1 -0
- package/dist/web-static/assets/Sessions-BkDd4Mxb.js +2 -0
- package/dist/web-static/assets/Skeleton-DbL04wuz.js +1 -0
- package/dist/web-static/assets/Skills-2OPSAnaU.js +1 -0
- package/dist/web-static/assets/TemplateDetail-DbifRj4h.js +1 -0
- package/dist/web-static/assets/Templates-CDw-GGp8.js +1 -0
- package/dist/web-static/assets/Toast-CrwuIbKC.js +1 -0
- package/dist/web-static/assets/client-C_VWY70M.js +1 -0
- package/dist/web-static/assets/index-DD2Z15TY.css +2 -0
- package/dist/web-static/assets/index-DKyAorJ6.js +2 -0
- package/dist/web-static/assets/ui-DpI1N3yJ.js +1 -0
- package/dist/web-static/assets/useDebounce-BLryFdeo.js +1 -0
- package/dist/web-static/assets/vendor-2ObLXPrQ.js +9 -0
- package/dist/web-static/assets/vendor-motion-BryL_tAt.js +9 -0
- package/dist/web-static/assets/vendor-query-CjmRaY7o.js +4 -0
- package/dist/web-static/assets/vendor-react-DZi7brq3.js +11 -0
- package/dist/web-static/index.html +10 -13
- package/package.json +5 -9
- package/dist/convention/convention-distiller.d.ts +0 -28
- package/dist/convention/convention-distiller.d.ts.map +0 -1
- package/dist/convention/convention-distiller.js +0 -172
- package/dist/convention/convention-distiller.js.map +0 -1
- package/dist/convention/official-sync.d.ts +0 -21
- package/dist/convention/official-sync.d.ts.map +0 -1
- package/dist/convention/official-sync.js +0 -196
- package/dist/convention/official-sync.js.map +0 -1
- package/dist/daemon/handlers/stages/19-moderate-task.d.ts +0 -11
- package/dist/daemon/handlers/stages/19-moderate-task.d.ts.map +0 -1
- package/dist/daemon/handlers/stages/19-moderate-task.js +0 -78
- package/dist/daemon/handlers/stages/19-moderate-task.js.map +0 -1
- package/dist/web/routes/conventions.d.ts +0 -8
- package/dist/web/routes/conventions.d.ts.map +0 -1
- package/dist/web/routes/conventions.js +0 -308
- package/dist/web/routes/conventions.js.map +0 -1
- package/dist/web/routes/logs.d.ts +0 -4
- package/dist/web/routes/logs.d.ts.map +0 -1
- package/dist/web/routes/logs.js +0 -77
- package/dist/web/routes/logs.js.map +0 -1
- package/dist/web/routes/project-conventions.d.ts +0 -7
- package/dist/web/routes/project-conventions.d.ts.map +0 -1
- package/dist/web/routes/project-conventions.js +0 -145
- package/dist/web/routes/project-conventions.js.map +0 -1
- package/dist/web-static/assets/Analytics-txva5ugO.js +0 -1
- package/dist/web-static/assets/BatchProgress-BQ533tSf.js +0 -1
- package/dist/web-static/assets/Breadcrumb-DtfwnOx6.js +0 -1
- package/dist/web-static/assets/Config-CUb6-ddH.js +0 -1
- package/dist/web-static/assets/ConfirmDialog-BKfwMp04.js +0 -1
- package/dist/web-static/assets/Conventions-E_2yAYoB.js +0 -1
- package/dist/web-static/assets/Dashboard-Dskgf0jG.js +0 -1
- package/dist/web-static/assets/ErrorState-BOInXmfg.js +0 -1
- package/dist/web-static/assets/Events-CAY9kU9T.js +0 -1
- package/dist/web-static/assets/Evolution-Ck_BqRpt.js +0 -1
- package/dist/web-static/assets/Knowledge-BHLyFp2U.js +0 -2
- package/dist/web-static/assets/NodeTypes-B6wc7VnR.js +0 -1
- package/dist/web-static/assets/Pagination-lp8b_3NR.js +0 -1
- package/dist/web-static/assets/PipelineDetail-Bc6l2jqX.js +0 -4
- package/dist/web-static/assets/PipelineTemplates-sSL-9oRh.js +0 -1
- package/dist/web-static/assets/Pipelines-Drat9IqZ.js +0 -2
- package/dist/web-static/assets/ProjectDetail-Cx8VZp8O.js +0 -1
- package/dist/web-static/assets/Projects-qDolX6Y6.js +0 -1
- package/dist/web-static/assets/Quality-Bm7oRSun.js +0 -3
- package/dist/web-static/assets/SessionDetail-BMrqH8_W.js +0 -1
- package/dist/web-static/assets/Sessions-C0BmdDPK.js +0 -2
- package/dist/web-static/assets/Skeleton-B7PVDJJ_.js +0 -1
- package/dist/web-static/assets/Skills-B3c1_uFt.js +0 -1
- package/dist/web-static/assets/TemplateDetail-ep5h3Cu5.js +0 -1
- package/dist/web-static/assets/Templates-Dho__f4l.js +0 -1
- package/dist/web-static/assets/Toast-BbB3oD2a.js +0 -1
- package/dist/web-static/assets/client-BvVpIixG.js +0 -1
- package/dist/web-static/assets/index-By8HsUem.js +0 -2
- package/dist/web-static/assets/index-CqwJts5v.css +0 -2
- package/dist/web-static/assets/ui-CDL3BZ13.js +0 -1
- package/dist/web-static/assets/useDebounce-DNfPs3Tv.js +0 -1
- package/dist/web-static/assets/vendor-DRGPi8ui.js +0 -9
- package/dist/web-static/assets/vendor-charts-9eVsQvUV.js +0 -36
- package/dist/web-static/assets/vendor-editor-CYLOGES5.js +0 -11
- package/dist/web-static/assets/vendor-flow-CHpVij2M.css +0 -1
- package/dist/web-static/assets/vendor-flow-srkes8If.js +0 -7
- package/dist/web-static/assets/vendor-motion-CQmdgnI8.js +0 -9
- package/dist/web-static/assets/vendor-query-DqPOMnuX.js +0 -4
- package/dist/web-static/assets/vendor-react-DJI9oneq.js +0 -11
- /package/dist/web-static/assets/{exportCsv-Dm5Y5M_E.js → exportCsv-CO51kx6P.js} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@winspan/claude-forge",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "SDLC intelligent orchestration engine for Claude Code",
|
|
5
5
|
"main": "dist/cli/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"prebuild": "rm -rf dist",
|
|
29
|
-
"build": "tsc && mkdir -p dist/hooks && cp -r src/hooks/* dist/hooks/ && chmod +x dist/hooks/*.sh && mkdir -p dist/prompts && cp src/prompts/*.md dist/prompts/ && npx vite build",
|
|
29
|
+
"build": "tsc && mkdir -p dist/hooks && cp -r src/hooks/* dist/hooks/ && chmod +x dist/hooks/*.sh && mkdir -p dist/prompts && cp src/prompts/*.md dist/prompts/ && cp src/storage/schema.sql dist/storage/schema.sql && npx vite build",
|
|
30
30
|
"prepublishOnly": "npm run build",
|
|
31
31
|
"dev": "tsx src/cli/index.ts",
|
|
32
32
|
"test": "vitest run",
|
|
@@ -55,16 +55,18 @@
|
|
|
55
55
|
"@tailwindcss/vite": "^4.2.2",
|
|
56
56
|
"@tanstack/react-query": "^5.99.1",
|
|
57
57
|
"@types/better-sqlite3": "^7.6.13",
|
|
58
|
+
"@types/cors": "^2.8.19",
|
|
59
|
+
"@types/express": "^5.0.6",
|
|
58
60
|
"@types/js-yaml": "^4.0.9",
|
|
59
61
|
"@types/node": "^25.5.0",
|
|
60
62
|
"@types/react": "^19.2.14",
|
|
61
63
|
"@types/react-dom": "^19.2.3",
|
|
64
|
+
"@types/uuid": "^10.0.0",
|
|
62
65
|
"@typescript-eslint/eslint-plugin": "^8.58.0",
|
|
63
66
|
"@typescript-eslint/parser": "^8.58.0",
|
|
64
67
|
"@vitejs/plugin-react": "^6.0.1",
|
|
65
68
|
"axios": "^1.15.0",
|
|
66
69
|
"clsx": "^2.1.1",
|
|
67
|
-
"dagre": "^0.8.5",
|
|
68
70
|
"date-fns": "^4.1.0",
|
|
69
71
|
"eslint": "^10.1.0",
|
|
70
72
|
"eslint-config-prettier": "^10.1.8",
|
|
@@ -74,7 +76,6 @@
|
|
|
74
76
|
"react": "^19.2.5",
|
|
75
77
|
"react-dom": "^19.2.5",
|
|
76
78
|
"react-router-dom": "^7.14.1",
|
|
77
|
-
"reactflow": "^11.11.4",
|
|
78
79
|
"recharts": "^3.8.1",
|
|
79
80
|
"tailwind-merge": "^3.5.0",
|
|
80
81
|
"tailwindcss": "^4.2.2",
|
|
@@ -85,12 +86,7 @@
|
|
|
85
86
|
},
|
|
86
87
|
"dependencies": {
|
|
87
88
|
"@anthropic-ai/sdk": "^0.82.0",
|
|
88
|
-
"@monaco-editor/react": "^4.7.0",
|
|
89
89
|
"@tanstack/react-virtual": "^3.13.24",
|
|
90
|
-
"@types/cors": "^2.8.19",
|
|
91
|
-
"@types/express": "^5.0.6",
|
|
92
|
-
"@types/uuid": "^10.0.0",
|
|
93
|
-
"@xyflow/react": "^12.10.2",
|
|
94
90
|
"better-sqlite3": "^12.8.0",
|
|
95
91
|
"chalk": "^5.6.2",
|
|
96
92
|
"commander": "^14.0.3",
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { AIProvider } from '../ai/types.js';
|
|
2
|
-
import type { ConventionLoader } from './convention-loader.js';
|
|
3
|
-
import type { Convention, ConventionDistillResult } from './types.js';
|
|
4
|
-
import type { ProjectProfile } from '../claudemd/detector.js';
|
|
5
|
-
export declare class ConventionDistiller {
|
|
6
|
-
private api;
|
|
7
|
-
private loader;
|
|
8
|
-
constructor(api: AIProvider, loader: ConventionLoader);
|
|
9
|
-
static customId(projectPath: string): string;
|
|
10
|
-
static customFilePath(projectPath: string): string;
|
|
11
|
-
/**
|
|
12
|
-
* 蒸馏项目级自定义规范。
|
|
13
|
-
* - sourceConventions 为空时,根据 projectProfile 纯技术栈生成
|
|
14
|
-
* - sourceConventions 非空时,合并源规范(同时可融合技术栈信息)
|
|
15
|
-
* - existingCustom 存在时为增量合并,否则全量生成
|
|
16
|
-
*/
|
|
17
|
-
distill(projectPath: string, sourceConventions: Convention[], existingCustom?: Convention | null, projectProfile?: ProjectProfile | null): Promise<{
|
|
18
|
-
convention: Convention;
|
|
19
|
-
result: ConventionDistillResult;
|
|
20
|
-
}>;
|
|
21
|
-
private mergeWithAI;
|
|
22
|
-
private parseAIResponse;
|
|
23
|
-
private fallbackMerge;
|
|
24
|
-
private fallbackPrinciples;
|
|
25
|
-
private mergeRoles;
|
|
26
|
-
private bumpVersion;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=convention-distiller.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convention-distiller.d.ts","sourceRoot":"","sources":["../../src/convention/convention-distiller.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAkB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAU9D,qBAAa,mBAAmB;IAClB,OAAO,CAAC,GAAG;IAAc,OAAO,CAAC,MAAM;gBAA/B,GAAG,EAAE,UAAU,EAAU,MAAM,EAAE,gBAAgB;IAErE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAI5C,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIlD;;;;;OAKG;IACG,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,cAAc,CAAC,EAAE,UAAU,GAAG,IAAI,EAClC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,OAAO,CAAC;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,CAAC;YAuDzD,WAAW;IAoDzB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;CAQpB"}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import yaml from 'js-yaml';
|
|
4
|
-
import { logger } from '../utils/logger.js';
|
|
5
|
-
export class ConventionDistiller {
|
|
6
|
-
api;
|
|
7
|
-
loader;
|
|
8
|
-
constructor(api, loader) {
|
|
9
|
-
this.api = api;
|
|
10
|
-
this.loader = loader;
|
|
11
|
-
}
|
|
12
|
-
static customId(projectPath) {
|
|
13
|
-
return `custom-${path.basename(projectPath)}`;
|
|
14
|
-
}
|
|
15
|
-
static customFilePath(projectPath) {
|
|
16
|
-
return path.join(projectPath, '.claude-forge', 'custom-convention.yaml');
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* 蒸馏项目级自定义规范。
|
|
20
|
-
* - sourceConventions 为空时,根据 projectProfile 纯技术栈生成
|
|
21
|
-
* - sourceConventions 非空时,合并源规范(同时可融合技术栈信息)
|
|
22
|
-
* - existingCustom 存在时为增量合并,否则全量生成
|
|
23
|
-
*/
|
|
24
|
-
async distill(projectPath, sourceConventions, existingCustom, projectProfile) {
|
|
25
|
-
if (sourceConventions.length === 0 && !projectProfile) {
|
|
26
|
-
throw new Error('至少需要一个源规范或项目技术栈信息才能蒸馏');
|
|
27
|
-
}
|
|
28
|
-
const customId = ConventionDistiller.customId(projectPath);
|
|
29
|
-
const filePath = ConventionDistiller.customFilePath(projectPath);
|
|
30
|
-
const aiResult = await this.mergeWithAI(sourceConventions, existingCustom ?? null, projectProfile ?? null);
|
|
31
|
-
const previousVersion = existingCustom?.version ?? null;
|
|
32
|
-
const newVersion = existingCustom
|
|
33
|
-
? this.bumpVersion(existingCustom.version)
|
|
34
|
-
: '1.0.0';
|
|
35
|
-
const mergedRoles = this.mergeRoles(existingCustom?.roles ?? {}, [aiResult.new_roles]);
|
|
36
|
-
const description = sourceConventions.length > 0
|
|
37
|
-
? `从 ${sourceConventions.map((c) => c.name).join('、')} 蒸馏的项目级综合规范`
|
|
38
|
-
: `根据 ${path.basename(projectPath)} 项目技术栈自动生成的规范`;
|
|
39
|
-
const convention = {
|
|
40
|
-
id: customId,
|
|
41
|
-
name: `${path.basename(projectPath)} 综合规范`,
|
|
42
|
-
version: newVersion,
|
|
43
|
-
description,
|
|
44
|
-
source: 'user',
|
|
45
|
-
principles: aiResult.principles,
|
|
46
|
-
active_prompt: aiResult.active_prompt,
|
|
47
|
-
roles: mergedRoles,
|
|
48
|
-
quality_standards: aiResult.quality_standards,
|
|
49
|
-
evolution: { auto_optimize: true, optimize_interval_days: 7 },
|
|
50
|
-
filePath,
|
|
51
|
-
};
|
|
52
|
-
const dir = path.dirname(filePath);
|
|
53
|
-
if (!fs.existsSync(dir))
|
|
54
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
55
|
-
const { filePath: _fp, ...serializable } = convention;
|
|
56
|
-
fs.writeFileSync(filePath, yaml.dump(serializable, { lineWidth: 120, noRefs: true }), 'utf-8');
|
|
57
|
-
logger.info(`[规范蒸馏器] 已写入 ${filePath} v${newVersion}`);
|
|
58
|
-
const distillResult = {
|
|
59
|
-
customConventionId: customId,
|
|
60
|
-
previousVersion,
|
|
61
|
-
newVersion,
|
|
62
|
-
sourcesUsed: sourceConventions.map((c) => c.id),
|
|
63
|
-
changes: aiResult.changes,
|
|
64
|
-
};
|
|
65
|
-
return { convention, result: distillResult };
|
|
66
|
-
}
|
|
67
|
-
async mergeWithAI(sources, existing, profile) {
|
|
68
|
-
const taskType = existing ? '增量合并' : (sources.length > 0 ? '全量提炼' : '技术栈生成');
|
|
69
|
-
const profileSection = profile
|
|
70
|
-
? `## 项目技术栈\n语言:${profile.languages.map((l) => l.name + (l.version ? ` ${l.version}` : '')).join('、') || '未知'}\n框架:${profile.frameworks.map((f) => f.name).join('、') || '无'}\n\n`
|
|
71
|
-
: '';
|
|
72
|
-
const sourceSections = sources.length > 0
|
|
73
|
-
? `## 源规范\n\n${sources.map((c) => {
|
|
74
|
-
const rolesYaml = Object.entries(c.roles)
|
|
75
|
-
.map(([k, v]) => ` ${k}:\n name: ${v.name}\n responsibilities: ${v.responsibilities.slice(0, 120)}\n constraints: ${v.constraints.slice(0, 80)}`)
|
|
76
|
-
.join('\n');
|
|
77
|
-
const standards = c.quality_standards
|
|
78
|
-
.map((s) => ` - [${s.severity}] ${s.category}: ${s.rule}`)
|
|
79
|
-
.join('\n');
|
|
80
|
-
return `### ${c.name} (${c.id})\n原则摘要:${c.principles.slice(0, 300)}\n激活提示:${c.active_prompt.slice(0, 200)}\n角色:\n${rolesYaml || ' (无)'}\n质量标准:\n${standards || ' (无)'}`;
|
|
81
|
-
}).join('\n\n')}\n\n`
|
|
82
|
-
: '';
|
|
83
|
-
const existingSection = existing
|
|
84
|
-
? `## 现有自定义规范(增量合并基础)\n原则:${existing.principles.slice(0, 400)}\n激活提示:${existing.active_prompt.slice(0, 200)}\n质量标准数:${existing.quality_standards.length}\n角色数:${Object.keys(existing.roles).length}\n\n`
|
|
85
|
-
: '';
|
|
86
|
-
const prompt = `你是一个工程规范专家,负责为项目生成或更新开发规范。
|
|
87
|
-
|
|
88
|
-
## 任务类型:${taskType}
|
|
89
|
-
|
|
90
|
-
${profileSection}${existingSection}${sourceSections}## 生成规则
|
|
91
|
-
1. principles:针对项目技术栈提炼最关键的工程原则,具体可执行;若有源规范则融合其核心优势,冲突时生成"视上下文而定"的折中原则
|
|
92
|
-
2. active_prompt:综合技术栈特点和规范要求,简洁有力,不超过 200 字
|
|
93
|
-
3. quality_standards:覆盖代码质量、架构、测试、安全等维度,去重;severity 按重要性设定
|
|
94
|
-
4. new_roles:定义项目适合的角色(如 architect、developer、reviewer),若为增量则只返回新增角色
|
|
95
|
-
5. changes:列出本次生成/合并的关键点(3-8 条)
|
|
96
|
-
${existing ? '6. 增量模式:只在现有基础上追加/优化,不删除现有内容' : ''}
|
|
97
|
-
|
|
98
|
-
## 输出格式(严格 JSON,不要用代码块包裹)
|
|
99
|
-
{
|
|
100
|
-
"principles": "...",
|
|
101
|
-
"active_prompt": "...",
|
|
102
|
-
"quality_standards": [{"category": "...", "rule": "...", "severity": "must|should|may"}],
|
|
103
|
-
"new_roles": {},
|
|
104
|
-
"changes": ["..."]
|
|
105
|
-
}`;
|
|
106
|
-
const response = await this.api.complete(prompt, 'convention-distill');
|
|
107
|
-
return this.parseAIResponse(response, sources, existing);
|
|
108
|
-
}
|
|
109
|
-
parseAIResponse(response, sources, existing) {
|
|
110
|
-
try {
|
|
111
|
-
const cleaned = response.replace(/```(?:json)?\s*/g, '').replace(/```\s*/g, '').trim();
|
|
112
|
-
const jsonMatch = cleaned.match(/\{[\s\S]*\}/);
|
|
113
|
-
if (!jsonMatch)
|
|
114
|
-
throw new Error('未找到 JSON');
|
|
115
|
-
const parsed = JSON.parse(jsonMatch[0]);
|
|
116
|
-
return {
|
|
117
|
-
principles: parsed.principles ?? this.fallbackPrinciples(sources),
|
|
118
|
-
active_prompt: parsed.active_prompt ?? (sources[0]?.active_prompt ?? '请遵循项目规范进行开发'),
|
|
119
|
-
quality_standards: Array.isArray(parsed.quality_standards) ? parsed.quality_standards : [],
|
|
120
|
-
new_roles: parsed.new_roles && typeof parsed.new_roles === 'object' ? parsed.new_roles : {},
|
|
121
|
-
changes: Array.isArray(parsed.changes) ? parsed.changes : ['AI 蒸馏完成'],
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
catch (err) {
|
|
125
|
-
logger.warn(`[规范蒸馏器] AI 响应解析失败,使用降级策略:${err}`);
|
|
126
|
-
return this.fallbackMerge(sources, existing);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
fallbackMerge(sources, existing) {
|
|
130
|
-
const allStandards = sources.flatMap((c) => c.quality_standards);
|
|
131
|
-
const seen = new Set();
|
|
132
|
-
const deduped = allStandards.filter((s) => {
|
|
133
|
-
const key = `${s.category}:${s.rule}`;
|
|
134
|
-
if (seen.has(key))
|
|
135
|
-
return false;
|
|
136
|
-
seen.add(key);
|
|
137
|
-
return true;
|
|
138
|
-
});
|
|
139
|
-
return {
|
|
140
|
-
principles: existing?.principles ?? this.fallbackPrinciples(sources),
|
|
141
|
-
active_prompt: existing?.active_prompt ?? (sources[0]?.active_prompt ?? '请遵循项目规范进行开发'),
|
|
142
|
-
quality_standards: deduped,
|
|
143
|
-
new_roles: {},
|
|
144
|
-
changes: ['降级合并:AI 调用失败,使用规则合并'],
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
fallbackPrinciples(sources) {
|
|
148
|
-
if (sources.length === 0)
|
|
149
|
-
return '遵循项目技术栈最佳实践';
|
|
150
|
-
return sources.map((c) => `## 来自 ${c.name}\n${c.principles.slice(0, 200)}`).join('\n\n');
|
|
151
|
-
}
|
|
152
|
-
mergeRoles(existing, incomingList) {
|
|
153
|
-
const merged = { ...existing };
|
|
154
|
-
for (const incoming of incomingList) {
|
|
155
|
-
for (const [key, role] of Object.entries(incoming)) {
|
|
156
|
-
if (!merged[key]) {
|
|
157
|
-
merged[key] = role;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return merged;
|
|
162
|
-
}
|
|
163
|
-
bumpVersion(version) {
|
|
164
|
-
const parts = version.split('.').map(Number);
|
|
165
|
-
if (parts.length >= 2 && !isNaN(parts[1])) {
|
|
166
|
-
parts[1] += 1;
|
|
167
|
-
return parts.join('.');
|
|
168
|
-
}
|
|
169
|
-
return version + '.1';
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=convention-distiller.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convention-distiller.js","sourceRoot":"","sources":["../../src/convention/convention-distiller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { ConventionLoader } from './convention-loader.js';
|
|
2
|
-
export interface ConventionSyncReport {
|
|
3
|
-
added: string[];
|
|
4
|
-
updated: string[];
|
|
5
|
-
skipped: string[];
|
|
6
|
-
}
|
|
7
|
-
export declare class OfficialConventionSync {
|
|
8
|
-
private loader;
|
|
9
|
-
constructor(loader?: ConventionLoader);
|
|
10
|
-
/**
|
|
11
|
-
* 同步官方 Convention 到 ~/.claude-forge/conventions/
|
|
12
|
-
* 版本号变更时自动更新,已存在的更高版本跳过(尊重进化器产出)
|
|
13
|
-
*/
|
|
14
|
-
sync(): ConventionSyncReport;
|
|
15
|
-
/** 获取所有官方 Convention ID */
|
|
16
|
-
getOfficialIds(): string[];
|
|
17
|
-
private writeConvention;
|
|
18
|
-
/** 版本号比较:a >= b */
|
|
19
|
-
private versionGte;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=official-sync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"official-sync.d.ts","sourceRoot":"","sources":["../../src/convention/official-sync.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAqJ3E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,gBAAgB;IAIrC;;;OAGG;IACH,IAAI,IAAI,oBAAoB;IAmC5B,2BAA2B;IAC3B,cAAc,IAAI,MAAM,EAAE;IAI1B,OAAO,CAAC,eAAe;IAKvB,mBAAmB;IACnB,OAAO,CAAC,UAAU;CAWnB"}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import yaml from 'js-yaml';
|
|
4
|
-
import { CONVENTIONS_DIR, ConventionLoader } from './convention-loader.js';
|
|
5
|
-
import { logger } from '../utils/logger.js';
|
|
6
|
-
/**
|
|
7
|
-
* 内置官方 Convention — daemon 启动时自动同步到 ~/.claude-forge/conventions/
|
|
8
|
-
* 版本号变更时自动更新,尊重进化器产出的更高版本
|
|
9
|
-
*/
|
|
10
|
-
const OFFICIAL_CONVENTIONS = [
|
|
11
|
-
{
|
|
12
|
-
id: 'official-bmad',
|
|
13
|
-
version: '1.0.0',
|
|
14
|
-
data: {
|
|
15
|
-
id: 'official-bmad',
|
|
16
|
-
name: 'BMad 敏捷开发规范',
|
|
17
|
-
version: '1.0.0',
|
|
18
|
-
description: 'BMad 敏捷方法论:角色驱动、流程规范的全栈开发工作流',
|
|
19
|
-
source: 'official',
|
|
20
|
-
principles: `## 来自 BMad 敏捷开发规范
|
|
21
|
-
本项目遵循 BMad 敏捷开发规范,所有功能开发必须按以下原则执行:
|
|
22
|
-
|
|
23
|
-
### 角色体系
|
|
24
|
-
- **产品经理(product_manager)**:负责需求分析和产品规格,输出用户故事和验收标准
|
|
25
|
-
- **架构师(architect)**:负责技术方案设计,输出组件边界、数据模型和关键技术决策
|
|
26
|
-
- **开发工程师(developer)**:负责编码实现,遵循架构方案,编写完整可运行代码
|
|
27
|
-
- **技术负责人(tech_lead)**:负责代码审查,确保实现符合规格和架构方案
|
|
28
|
-
|
|
29
|
-
### 流程原则
|
|
30
|
-
- 新功能开发必须先有产品规格文档(docs/product-spec.md)
|
|
31
|
-
- 架构决策必须有文档记录
|
|
32
|
-
- 代码审查关注正确性、安全性、可维护性三个维度
|
|
33
|
-
- 每个角色有明确的输入输出契约,不越界操作`,
|
|
34
|
-
active_prompt: '遵循 BMad 敏捷规范:需求→架构→实现→审查,每步有明确角色和产出物。',
|
|
35
|
-
roles: {
|
|
36
|
-
product_manager: {
|
|
37
|
-
name: '产品经理',
|
|
38
|
-
responsibilities: '分析需求,输出用户故事和验收标准,确保需求清晰无歧义',
|
|
39
|
-
constraints: '不涉及技术实现细节,聚焦用户价值和业务逻辑',
|
|
40
|
-
},
|
|
41
|
-
architect: {
|
|
42
|
-
name: '架构师',
|
|
43
|
-
responsibilities: '设计技术方案,定义组件边界、数据模型、API 契约和关键技术决策',
|
|
44
|
-
constraints: '不写实现代码,输出可执行的设计文档',
|
|
45
|
-
},
|
|
46
|
-
developer: {
|
|
47
|
-
name: '开发工程师',
|
|
48
|
-
responsibilities: '按架构方案编写完整可运行代码,遵循代码规范',
|
|
49
|
-
constraints: '不偏离架构方案,遇到方案未覆盖的情况先更新方案再实现',
|
|
50
|
-
},
|
|
51
|
-
tech_lead: {
|
|
52
|
-
name: '技术负责人',
|
|
53
|
-
responsibilities: '代码审查,确保实现符合规格和架构方案,把关质量',
|
|
54
|
-
constraints: '审查基于事实,不重写代码,只指出问题和改进方向',
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
quality_standards: [
|
|
58
|
-
{ category: '流程', rule: '新功能开发必须先有产品规格文档', severity: 'must' },
|
|
59
|
-
{ category: '流程', rule: '架构决策必须有文档记录', severity: 'must' },
|
|
60
|
-
{ category: '代码', rule: '代码必须经过至少一轮审查才能合并', severity: 'should' },
|
|
61
|
-
{ category: '交付', rule: '每个功能必须有可测试的验收标准', severity: 'must' },
|
|
62
|
-
],
|
|
63
|
-
evolution: { auto_optimize: true, optimize_interval_days: 14 },
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
id: 'official-harness-engineering',
|
|
68
|
-
version: '1.0.0',
|
|
69
|
-
data: {
|
|
70
|
-
id: 'official-harness-engineering',
|
|
71
|
-
name: 'Harness Engineering 安全重构规范',
|
|
72
|
-
version: '1.0.0',
|
|
73
|
-
description: '先织安全网再动代码:遗留代码改造的工程方法论',
|
|
74
|
-
source: 'official',
|
|
75
|
-
principles: `## 来自 Harness Engineering 安全重构规范
|
|
76
|
-
本项目遵循 Harness Engineering 安全重构规范,所有遗留代码改造必须按以下原则执行:
|
|
77
|
-
|
|
78
|
-
### 核心理念:先织安全网,再动代码
|
|
79
|
-
在没有充分理解和测试覆盖的情况下修改遗留代码,是最危险的工程行为。
|
|
80
|
-
Harness Engineering 要求在任何修改之前,先建立足够的安全网。
|
|
81
|
-
|
|
82
|
-
### 遗留代码改造流程
|
|
83
|
-
- **理解**:代码考古学家深度阅读现有代码,输出行为文档
|
|
84
|
-
- **织网**:安全网工程师建立特征测试,覆盖所有已知边界情况
|
|
85
|
-
- **修改**:外科医生在安全网保护下执行最小化精准修改
|
|
86
|
-
- **验证**:验证工程师确认修改前后行为一致
|
|
87
|
-
|
|
88
|
-
### TypeScript 专项原则
|
|
89
|
-
- 严格启用 \`strict: true\`,禁止使用 \`any\` 类型(必须有显式类型注解或泛型替代)
|
|
90
|
-
- 模块边界使用 \`interface\` 定义契约,内部实现使用 \`type\`
|
|
91
|
-
- 异步操作统一使用 \`async/await\`,禁止混用 Promise 链和回调
|
|
92
|
-
- 错误处理必须显式:不得静默吞掉异常,catch 块必须有实质性处理逻辑
|
|
93
|
-
- 禁止在代码中硬编码密钥、密码或任何敏感信息,使用环境变量管理
|
|
94
|
-
|
|
95
|
-
### 流程融合原则(新功能 vs 遗留改造)
|
|
96
|
-
- 新功能开发遵循 BMad 流程:产品规格 → 架构设计 → 实现 → 审查
|
|
97
|
-
- 遗留代码改造遵循 Harness 流程:理解 → 织网 → 修改 → 验证
|
|
98
|
-
- 两类任务冲突时,优先保障安全网(Harness 原则优先),再推进功能迭代(BMad 原则跟进)`,
|
|
99
|
-
active_prompt: '遵循 Harness Engineering:改动遗留代码前先建立特征测试,每次最小修改后立即验证。',
|
|
100
|
-
roles: {
|
|
101
|
-
code_archaeologist: {
|
|
102
|
-
name: '代码考古学家',
|
|
103
|
-
responsibilities: '深度阅读现有代码,理解行为边界,输出行为文档',
|
|
104
|
-
constraints: '不修改代码,只产出理解文档',
|
|
105
|
-
},
|
|
106
|
-
safety_net_engineer: {
|
|
107
|
-
name: '安全网工程师',
|
|
108
|
-
responsibilities: '建立特征测试(characterization tests),覆盖所有已知边界情况',
|
|
109
|
-
constraints: '测试描述"代码现在做什么"而非"应该做什么"',
|
|
110
|
-
},
|
|
111
|
-
surgeon: {
|
|
112
|
-
name: '外科医生',
|
|
113
|
-
responsibilities: '在安全网保护下执行最小化精准修改',
|
|
114
|
-
constraints: '每次只改一处,改完立即运行 harness,失败则立即回滚',
|
|
115
|
-
},
|
|
116
|
-
verification_engineer: {
|
|
117
|
-
name: '验证工程师',
|
|
118
|
-
responsibilities: '确认修改前后行为一致,新行为有新测试覆盖',
|
|
119
|
-
constraints: '全部 harness 通过后才允许提交',
|
|
120
|
-
},
|
|
121
|
-
},
|
|
122
|
-
quality_standards: [
|
|
123
|
-
{ category: '安全网', rule: '修改遗留代码前必须有特征测试覆盖', severity: 'must' },
|
|
124
|
-
{ category: '安全网', rule: '每次修改后必须运行全部 harness 测试', severity: 'must' },
|
|
125
|
-
{ category: '修改', rule: '每次提交只修改一处逻辑,不积累未验证变更', severity: 'should' },
|
|
126
|
-
{ category: '类型', rule: '禁止 any 类型,必须显式类型注解', severity: 'must' },
|
|
127
|
-
{ category: '错误处理', rule: 'catch 块必须有实质性处理,不得静默吞掉异常', severity: 'must' },
|
|
128
|
-
{ category: '安全', rule: '禁止硬编码密钥和密码', severity: 'must' },
|
|
129
|
-
],
|
|
130
|
-
evolution: { auto_optimize: true, optimize_interval_days: 14 },
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
];
|
|
134
|
-
export class OfficialConventionSync {
|
|
135
|
-
loader;
|
|
136
|
-
constructor(loader) {
|
|
137
|
-
this.loader = loader ?? new ConventionLoader();
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* 同步官方 Convention 到 ~/.claude-forge/conventions/
|
|
141
|
-
* 版本号变更时自动更新,已存在的更高版本跳过(尊重进化器产出)
|
|
142
|
-
*/
|
|
143
|
-
sync() {
|
|
144
|
-
const report = { added: [], updated: [], skipped: [] };
|
|
145
|
-
if (!fs.existsSync(CONVENTIONS_DIR)) {
|
|
146
|
-
fs.mkdirSync(CONVENTIONS_DIR, { recursive: true });
|
|
147
|
-
}
|
|
148
|
-
for (const entry of OFFICIAL_CONVENTIONS) {
|
|
149
|
-
const filePath = path.join(CONVENTIONS_DIR, `${entry.id}.yaml`);
|
|
150
|
-
const existing = this.loader.findById(entry.id);
|
|
151
|
-
if (existing) {
|
|
152
|
-
if (this.versionGte(existing.version, entry.version)) {
|
|
153
|
-
report.skipped.push(entry.id);
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
// 代码版本更高 → 覆盖更新
|
|
157
|
-
this.writeConvention(filePath, entry.data);
|
|
158
|
-
report.updated.push(entry.id);
|
|
159
|
-
logger.info(`[官方规范同步] 已更新:${entry.id} → v${entry.version}`);
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
// 不存在 → 新增
|
|
163
|
-
this.writeConvention(filePath, entry.data);
|
|
164
|
-
report.added.push(entry.id);
|
|
165
|
-
logger.info(`[官方规范同步] 已添加:${entry.id} v${entry.version}`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
if (report.added.length > 0 || report.updated.length > 0) {
|
|
169
|
-
logger.info(`[官方规范同步] 完成:+${report.added.length} 更新=${report.updated.length} 跳过=${report.skipped.length}`);
|
|
170
|
-
}
|
|
171
|
-
return report;
|
|
172
|
-
}
|
|
173
|
-
/** 获取所有官方 Convention ID */
|
|
174
|
-
getOfficialIds() {
|
|
175
|
-
return OFFICIAL_CONVENTIONS.map(c => c.id);
|
|
176
|
-
}
|
|
177
|
-
writeConvention(filePath, data) {
|
|
178
|
-
const content = yaml.dump(data, { lineWidth: 120, noRefs: true });
|
|
179
|
-
fs.writeFileSync(filePath, content, 'utf-8');
|
|
180
|
-
}
|
|
181
|
-
/** 版本号比较:a >= b */
|
|
182
|
-
versionGte(a, b) {
|
|
183
|
-
const pa = a.split('.').map(Number);
|
|
184
|
-
const pb = b.split('.').map(Number);
|
|
185
|
-
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
186
|
-
const na = pa[i] ?? 0;
|
|
187
|
-
const nb = pb[i] ?? 0;
|
|
188
|
-
if (na > nb)
|
|
189
|
-
return true;
|
|
190
|
-
if (na < nb)
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
193
|
-
return true;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=official-sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"official-sync.js","sourceRoot":"","sources":["../../src/convention/official-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Stage, StageResult } from './stage-interface.js';
|
|
2
|
-
import type { OrchestrationContext } from '../orchestration-context.js';
|
|
3
|
-
/** Stage 19: 中等任务处理 — 知识搜索 + 指令注入 */
|
|
4
|
-
export declare class ModerateTaskStage implements Stage {
|
|
5
|
-
readonly name = "\u4E2D\u7B49\u4EFB\u52A1\u5904\u7406";
|
|
6
|
-
readonly dependencies: string[];
|
|
7
|
-
readonly critical = true;
|
|
8
|
-
execute(ctx: OrchestrationContext): Promise<StageResult>;
|
|
9
|
-
fallback(ctx: OrchestrationContext, error: unknown): Promise<StageResult>;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=19-moderate-task.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"19-moderate-task.d.ts","sourceRoot":"","sources":["../../../../src/daemon/handlers/stages/19-moderate-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAMxE,qCAAqC;AACrC,qBAAa,iBAAkB,YAAW,KAAK;IAC7C,QAAQ,CAAC,IAAI,0CAAY;IACzB,QAAQ,CAAC,YAAY,WAA0C;IAC/D,QAAQ,CAAC,QAAQ,QAAQ;IAEnB,OAAO,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IA8DxD,QAAQ,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CAqBhF"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { ContextBuilder } from '../context-builder.js';
|
|
2
|
-
import { ForgeFormatter } from '../../../utils/formatter.js';
|
|
3
|
-
import { ContextInjector, INJECT_PRIORITY } from '../../context-injector.js';
|
|
4
|
-
import { logger } from '../../../utils/logger.js';
|
|
5
|
-
/** Stage 19: 中等任务处理 — 知识搜索 + 指令注入 */
|
|
6
|
-
export class ModerateTaskStage {
|
|
7
|
-
name = '中等任务处理';
|
|
8
|
-
dependencies = ['策略建议注入', '模板路由', '计划续接路由', '计划强制检查'];
|
|
9
|
-
critical = true;
|
|
10
|
-
async execute(ctx) {
|
|
11
|
-
const { analysis, event, handlerCtx } = ctx;
|
|
12
|
-
if (!analysis)
|
|
13
|
-
return { shouldTerminate: false };
|
|
14
|
-
const projectPath = event.project_path;
|
|
15
|
-
const builder = new ContextBuilder(handlerCtx);
|
|
16
|
-
if (!handlerCtx.goalClassifier) {
|
|
17
|
-
throw new Error('GoalClassifier 未初始化');
|
|
18
|
-
}
|
|
19
|
-
const directive = handlerCtx.goalClassifier.generateDirective(analysis);
|
|
20
|
-
const decisionsContext = await builder.readDecisionsContext(analysis.requirement, projectPath, ctx.injectionCache);
|
|
21
|
-
const similarSessionCtx = analysis.searchKeywords?.length
|
|
22
|
-
? builder.buildSimilarSessionContext(analysis.searchKeywords, projectPath, ctx.injectionCache)
|
|
23
|
-
: undefined;
|
|
24
|
-
const graphContext = analysis.searchKeywords?.length
|
|
25
|
-
? await builder.buildGraphContext(analysis.searchKeywords, projectPath)
|
|
26
|
-
: undefined;
|
|
27
|
-
const activeConventions = handlerCtx.conventionManager.getActiveConventions(projectPath);
|
|
28
|
-
const conventionPrompt = handlerCtx.conventionManager.getActivePrompt(projectPath) ?? undefined;
|
|
29
|
-
if (activeConventions.length > 0) {
|
|
30
|
-
logger.info(`已加载项目规范:${ForgeFormatter.formatConventionSummary(activeConventions)}`);
|
|
31
|
-
}
|
|
32
|
-
const clarify = analysis.clarifyQuestions?.length
|
|
33
|
-
? ForgeFormatter.formatClarifyRequest(analysis.clarifyQuestions)
|
|
34
|
-
: undefined;
|
|
35
|
-
const body = ContextInjector.build({ complexity: analysis.complexity, estimatedFiles: analysis.estimatedFiles }, { content: builder.buildPlanStartContext(projectPath, ctx.injectionCache, ctx.userPrompt), priority: INJECT_PRIORITY.PLAN, topic: 'plan' }, { content: conventionPrompt, priority: INJECT_PRIORITY.CONVENTION, topic: 'convention' }, { content: directive ?? undefined, priority: INJECT_PRIORITY.DIRECTIVE, topic: 'directive' }, { content: ctx.strategyAdvice, priority: INJECT_PRIORITY.DIRECTIVE, topic: 'strategy' }, { content: clarify, priority: INJECT_PRIORITY.DIRECTIVE, topic: 'clarify' }, { content: similarSessionCtx, priority: INJECT_PRIORITY.HISTORY, minBudget: 500, topic: 'history' }, { content: graphContext, priority: INJECT_PRIORITY.HISTORY - 1, minBudget: 300, topic: 'graph' }, { content: decisionsContext, priority: INJECT_PRIORITY.DECISIONS, topic: 'decisions' });
|
|
36
|
-
const injected = [];
|
|
37
|
-
if (conventionPrompt)
|
|
38
|
-
injected.push(`规范(${activeConventions.map(c => c.id).join(',')})`);
|
|
39
|
-
if (directive)
|
|
40
|
-
injected.push('执行指令');
|
|
41
|
-
if (clarify)
|
|
42
|
-
injected.push('澄清建议');
|
|
43
|
-
if (decisionsContext)
|
|
44
|
-
injected.push('决策历史');
|
|
45
|
-
if (similarSessionCtx)
|
|
46
|
-
injected.push('相似历史场景');
|
|
47
|
-
if (graphContext)
|
|
48
|
-
injected.push('图谱成功路径');
|
|
49
|
-
const inferredRole = builder.inferCurrentRole(analysis.requirement, activeConventions);
|
|
50
|
-
const roleStr = inferredRole ? ` | 当前角色=${inferredRole.name}` : '';
|
|
51
|
-
logger.info(`处理完成:直接执行 | 复杂度=${analysis.complexity}${roleStr} | 注入=[${injected.join(', ') || '无'}]`);
|
|
52
|
-
return {
|
|
53
|
-
shouldTerminate: true,
|
|
54
|
-
response: {
|
|
55
|
-
allow: true,
|
|
56
|
-
additionalContext: body ? ForgeFormatter.wrapInQuote(body) : undefined,
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
async fallback(ctx, error) {
|
|
61
|
-
logger.warn(`[中等任务处理] 知识搜索失败,使用基础指令:${error}`);
|
|
62
|
-
const { analysis } = ctx;
|
|
63
|
-
if (!analysis)
|
|
64
|
-
return { shouldTerminate: false };
|
|
65
|
-
const builder = new ContextBuilder(ctx.handlerCtx);
|
|
66
|
-
const directive = ctx.handlerCtx.goalClassifier?.generateDirective(analysis);
|
|
67
|
-
const context = ContextInjector.build({ content: directive ?? undefined, priority: INJECT_PRIORITY.DIRECTIVE, topic: 'directive' });
|
|
68
|
-
logger.info('降级完成:使用基础执行模式');
|
|
69
|
-
return {
|
|
70
|
-
shouldTerminate: true,
|
|
71
|
-
response: {
|
|
72
|
-
allow: true,
|
|
73
|
-
additionalContext: context ? ForgeFormatter.wrapInQuote(context) : undefined,
|
|
74
|
-
},
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=19-moderate-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"19-moderate-task.js","sourceRoot":"","sources":["../../../../src/daemon/handlers/stages/19-moderate-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Express } from 'express';
|
|
2
|
-
import type { SQLiteStorage } from '../../storage/sqlite.js';
|
|
3
|
-
/**
|
|
4
|
-
* 全局规范管理路由
|
|
5
|
-
* 管理 ~/.claude-forge/conventions/ 下的所有规范模板
|
|
6
|
-
*/
|
|
7
|
-
export declare function registerConventionsRoutes(app: Express, storage: SQLiteStorage): void;
|
|
8
|
-
//# sourceMappingURL=conventions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conventions.d.ts","sourceRoot":"","sources":["../../../src/web/routes/conventions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAe7D;;;GAGG;AAEH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAqUpF"}
|