@liangjie559567/ultrapower 7.0.3 → 7.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.
Files changed (152) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +4 -0
  4. package/bridge/mcp-server.cjs +140 -91
  5. package/dist/features/delegation-routing/speckit-integration.d.ts +17 -0
  6. package/dist/features/delegation-routing/speckit-integration.d.ts.map +1 -0
  7. package/dist/features/delegation-routing/speckit-integration.js +26 -0
  8. package/dist/features/delegation-routing/speckit-integration.js.map +1 -0
  9. package/dist/features/speckit-core/constitution.d.ts +7 -0
  10. package/dist/features/speckit-core/constitution.d.ts.map +1 -0
  11. package/dist/features/speckit-core/constitution.js +160 -0
  12. package/dist/features/speckit-core/constitution.js.map +1 -0
  13. package/dist/features/speckit-core/index.d.ts +9 -0
  14. package/dist/features/speckit-core/index.d.ts.map +1 -0
  15. package/dist/features/speckit-core/index.js +9 -0
  16. package/dist/features/speckit-core/index.js.map +1 -0
  17. package/dist/features/speckit-core/plan.d.ts +7 -0
  18. package/dist/features/speckit-core/plan.d.ts.map +1 -0
  19. package/dist/features/speckit-core/plan.js +134 -0
  20. package/dist/features/speckit-core/plan.js.map +1 -0
  21. package/dist/features/speckit-core/specify.d.ts +7 -0
  22. package/dist/features/speckit-core/specify.d.ts.map +1 -0
  23. package/dist/features/speckit-core/specify.js +101 -0
  24. package/dist/features/speckit-core/specify.js.map +1 -0
  25. package/dist/features/speckit-core/tasks.d.ts +7 -0
  26. package/dist/features/speckit-core/tasks.d.ts.map +1 -0
  27. package/dist/features/speckit-core/tasks.js +80 -0
  28. package/dist/features/speckit-core/tasks.js.map +1 -0
  29. package/dist/features/speckit-core/types.d.ts +48 -0
  30. package/dist/features/speckit-core/types.d.ts.map +1 -0
  31. package/dist/features/speckit-core/types.js +5 -0
  32. package/dist/features/speckit-core/types.js.map +1 -0
  33. package/dist/features/speckit-integration/axiom-bridge.d.ts +18 -0
  34. package/dist/features/speckit-integration/axiom-bridge.d.ts.map +1 -0
  35. package/dist/features/speckit-integration/axiom-bridge.js +21 -0
  36. package/dist/features/speckit-integration/axiom-bridge.js.map +1 -0
  37. package/dist/features/speckit-integration/exports.d.ts +11 -0
  38. package/dist/features/speckit-integration/exports.d.ts.map +1 -0
  39. package/dist/features/speckit-integration/exports.js +8 -0
  40. package/dist/features/speckit-integration/exports.js.map +1 -0
  41. package/dist/features/speckit-integration/index.d.ts +19 -0
  42. package/dist/features/speckit-integration/index.d.ts.map +1 -0
  43. package/dist/features/speckit-integration/index.js +24 -0
  44. package/dist/features/speckit-integration/index.js.map +1 -0
  45. package/dist/features/speckit-integration/recommender.d.ts +18 -0
  46. package/dist/features/speckit-integration/recommender.d.ts.map +1 -0
  47. package/dist/features/speckit-integration/recommender.js +31 -0
  48. package/dist/features/speckit-integration/recommender.js.map +1 -0
  49. package/dist/features/speckit-integration/router.d.ts +18 -0
  50. package/dist/features/speckit-integration/router.d.ts.map +1 -0
  51. package/dist/features/speckit-integration/router.js +41 -0
  52. package/dist/features/speckit-integration/router.js.map +1 -0
  53. package/dist/features/task-decomposer/speckit-integration.d.ts +16 -0
  54. package/dist/features/task-decomposer/speckit-integration.d.ts.map +1 -0
  55. package/dist/features/task-decomposer/speckit-integration.js +32 -0
  56. package/dist/features/task-decomposer/speckit-integration.js.map +1 -0
  57. package/dist/hooks/autopilot/cancel.d.ts.map +1 -1
  58. package/dist/hooks/autopilot/cancel.js +15 -15
  59. package/dist/hooks/autopilot/cancel.js.map +1 -1
  60. package/dist/hooks/autopilot/enforcement.js +12 -12
  61. package/dist/hooks/autopilot/enforcement.js.map +1 -1
  62. package/dist/hooks/autopilot/state.d.ts.map +1 -1
  63. package/dist/hooks/autopilot/state.js +28 -30
  64. package/dist/hooks/autopilot/state.js.map +1 -1
  65. package/dist/hooks/bridge-normalize.d.ts +11 -0
  66. package/dist/hooks/bridge-normalize.d.ts.map +1 -1
  67. package/dist/hooks/bridge-normalize.js +4 -3
  68. package/dist/hooks/bridge-normalize.js.map +1 -1
  69. package/dist/hooks/bridge-types.d.ts +2 -0
  70. package/dist/hooks/bridge-types.d.ts.map +1 -1
  71. package/dist/hooks/bridge-types.js.map +1 -1
  72. package/dist/hooks/bridge.d.ts.map +1 -1
  73. package/dist/hooks/bridge.js +11 -2
  74. package/dist/hooks/bridge.js.map +1 -1
  75. package/dist/hooks/handlers/route-map.d.ts.map +1 -1
  76. package/dist/hooks/handlers/route-map.js +15 -0
  77. package/dist/hooks/handlers/route-map.js.map +1 -1
  78. package/dist/hooks/index.d.ts +1 -0
  79. package/dist/hooks/index.d.ts.map +1 -1
  80. package/dist/hooks/index.js +3 -0
  81. package/dist/hooks/index.js.map +1 -1
  82. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  83. package/dist/hooks/keyword-detector/index.js +60 -8
  84. package/dist/hooks/keyword-detector/index.js.map +1 -1
  85. package/dist/hooks/mode-cancel-sync.d.ts.map +1 -1
  86. package/dist/hooks/mode-cancel-sync.js +11 -12
  87. package/dist/hooks/mode-cancel-sync.js.map +1 -1
  88. package/dist/hooks/persistent-mode/index.js +2 -2
  89. package/dist/hooks/persistent-mode/index.js.map +1 -1
  90. package/dist/hooks/ralph/loop.d.ts.map +1 -1
  91. package/dist/hooks/ralph/loop.js +7 -8
  92. package/dist/hooks/ralph/loop.js.map +1 -1
  93. package/dist/hooks/ralph/verifier.js +11 -11
  94. package/dist/hooks/ralph/verifier.js.map +1 -1
  95. package/dist/hooks/ultrawork/index.d.ts.map +1 -1
  96. package/dist/hooks/ultrawork/index.js +7 -4
  97. package/dist/hooks/ultrawork/index.js.map +1 -1
  98. package/dist/hooks/validation.d.ts.map +1 -1
  99. package/dist/hooks/validation.js +2 -0
  100. package/dist/hooks/validation.js.map +1 -1
  101. package/dist/hooks/workflow-gate/index.d.ts +116 -0
  102. package/dist/hooks/workflow-gate/index.d.ts.map +1 -0
  103. package/dist/hooks/workflow-gate/index.js +352 -0
  104. package/dist/hooks/workflow-gate/index.js.map +1 -0
  105. package/dist/lib/file-lock.d.ts +4 -0
  106. package/dist/lib/file-lock.d.ts.map +1 -1
  107. package/dist/lib/file-lock.js +85 -2
  108. package/dist/lib/file-lock.js.map +1 -1
  109. package/dist/lib/state-adapter.d.ts.map +1 -1
  110. package/dist/lib/state-adapter.js +20 -12
  111. package/dist/lib/state-adapter.js.map +1 -1
  112. package/dist/lib/state-cache.d.ts +8 -5
  113. package/dist/lib/state-cache.d.ts.map +1 -1
  114. package/dist/lib/state-cache.js +26 -16
  115. package/dist/lib/state-cache.js.map +1 -1
  116. package/dist/mcp/adapters/state-adapter.d.ts +8 -8
  117. package/dist/team/index.d.ts +1 -0
  118. package/dist/team/index.d.ts.map +1 -1
  119. package/dist/team/index.js +1 -0
  120. package/dist/team/index.js.map +1 -1
  121. package/dist/team/workflow-integration.d.ts +8 -0
  122. package/dist/team/workflow-integration.d.ts.map +1 -0
  123. package/dist/team/workflow-integration.js +62 -0
  124. package/dist/team/workflow-integration.js.map +1 -0
  125. package/dist/tools/lsp/client.d.ts +8 -2
  126. package/dist/tools/lsp/client.d.ts.map +1 -1
  127. package/dist/tools/lsp/client.js +114 -68
  128. package/dist/tools/lsp/client.js.map +1 -1
  129. package/dist/tools/lsp-tools.d.ts.map +1 -1
  130. package/dist/tools/lsp-tools.js +1 -4
  131. package/dist/tools/lsp-tools.js.map +1 -1
  132. package/docs/BUG_ANALYSIS.md +188 -0
  133. package/docs/CLAUDE.md +1 -1
  134. package/docs/CODE_BASED_FLOW.md +997 -0
  135. package/docs/INSTALL.md +2 -2
  136. package/docs/REFERENCE.md +4 -1
  137. package/docs/SPECKIT_INTEGRATION.md +60 -0
  138. package/docs/SPECKIT_NATIVE.md +170 -0
  139. package/docs/architecture/ultrapower-flow-analysis.md +807 -0
  140. package/docs/reviews/autoresearch-integration/review_domain.md +295 -295
  141. package/docs/reviews/autoresearch-integration/review_product.md +287 -287
  142. package/docs/standards/README.md +1 -1
  143. package/docs/ultrapower-complete-workflow.md +900 -0
  144. package/package.json +3 -2
  145. package/skills/brainstorming/SKILL.md +57 -14
  146. package/skills/omc-doctor/SKILL.md +45 -0
  147. package/skills/speckit-constitution/SKILL.md +43 -0
  148. package/skills/speckit-implement/SKILL.md +32 -0
  149. package/skills/speckit-plan/SKILL.md +26 -0
  150. package/skills/speckit-specify/SKILL.md +26 -0
  151. package/skills/speckit-tasks/SKILL.md +26 -0
  152. package/skills/team/SKILL.md +12 -0
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Constitution Generator - 分析项目生成核心原则
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ export async function generateConstitution(projectPath) {
7
+ const analysis = await analyzeProject(projectPath);
8
+ const principles = inferPrinciples(analysis);
9
+ return {
10
+ projectName: path.basename(projectPath),
11
+ principles,
12
+ generatedAt: new Date().toISOString()
13
+ };
14
+ }
15
+ async function analyzeProject(projectPath) {
16
+ const resolvedPath = path.resolve(projectPath);
17
+ if (!resolvedPath.startsWith(path.resolve(process.cwd()))) {
18
+ throw new Error('Path traversal detected');
19
+ }
20
+ const files = fs.readdirSync(resolvedPath);
21
+ const pkgJson = readPackageJson(resolvedPath);
22
+ return {
23
+ hasTypeScript: files.includes('tsconfig.json'),
24
+ hasTests: files.some(f => f.includes('test') || f.includes('spec')),
25
+ framework: detectFramework(files),
26
+ packageManager: detectPackageManager(files),
27
+ languages: detectLanguages(resolvedPath),
28
+ dependencies: pkgJson ? Object.keys(pkgJson.dependencies || {}) : [],
29
+ hasLinter: files.includes('.eslintrc.js') || files.includes('.eslintrc.json') || !!pkgJson?.devDependencies?.eslint,
30
+ hasFormatter: files.includes('.prettierrc') || !!pkgJson?.devDependencies?.prettier,
31
+ projectStructure: detectStructure(resolvedPath)
32
+ };
33
+ }
34
+ function readPackageJson(projectPath) {
35
+ try {
36
+ const pkgPath = path.join(projectPath, 'package.json');
37
+ const content = fs.readFileSync(pkgPath, 'utf-8');
38
+ return JSON.parse(content);
39
+ }
40
+ catch (err) {
41
+ if (err instanceof SyntaxError) {
42
+ console.warn(`Invalid JSON in package.json: ${err.message}`);
43
+ }
44
+ return null;
45
+ }
46
+ }
47
+ function detectStructure(projectPath) {
48
+ try {
49
+ const entries = fs.readdirSync(projectPath, { withFileTypes: true });
50
+ if (entries.some(e => e.isDirectory() && e.name === 'packages'))
51
+ return 'monorepo';
52
+ if (entries.some(e => e.isDirectory() && e.name === 'src'))
53
+ return 'src-based';
54
+ return 'flat';
55
+ }
56
+ catch {
57
+ return 'unknown';
58
+ }
59
+ }
60
+ function detectFramework(files) {
61
+ if (files.includes('next.config.js'))
62
+ return 'Next.js';
63
+ if (files.includes('vite.config.ts'))
64
+ return 'Vite';
65
+ return undefined;
66
+ }
67
+ function detectPackageManager(files) {
68
+ if (files.includes('pnpm-lock.yaml'))
69
+ return 'pnpm';
70
+ if (files.includes('yarn.lock'))
71
+ return 'yarn';
72
+ if (files.includes('package-lock.json'))
73
+ return 'npm';
74
+ return undefined;
75
+ }
76
+ function detectLanguages(projectPath) {
77
+ const extensions = new Set();
78
+ scanDirectory(projectPath, extensions);
79
+ return Array.from(extensions);
80
+ }
81
+ function scanDirectory(dir, extensions, depth = 0, visited = new Set()) {
82
+ if (depth > 2)
83
+ return;
84
+ try {
85
+ const realPath = fs.realpathSync(dir);
86
+ if (visited.has(realPath))
87
+ return;
88
+ visited.add(realPath);
89
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
90
+ for (const entry of entries) {
91
+ if (entry.name.startsWith('.') || entry.name === 'node_modules')
92
+ continue;
93
+ if (entry.isFile()) {
94
+ const ext = path.extname(entry.name);
95
+ if (ext)
96
+ extensions.add(ext);
97
+ }
98
+ else if (entry.isDirectory()) {
99
+ scanDirectory(path.join(dir, entry.name), extensions, depth + 1, visited);
100
+ }
101
+ }
102
+ }
103
+ catch { }
104
+ }
105
+ function inferPrinciples(analysis) {
106
+ const principles = [];
107
+ if (analysis.hasTypeScript) {
108
+ principles.push({
109
+ title: 'Type Safety First',
110
+ description: 'All code must use TypeScript strict mode',
111
+ rationale: 'Project uses TypeScript - enforce type safety to catch errors early'
112
+ });
113
+ }
114
+ if (analysis.hasTests) {
115
+ principles.push({
116
+ title: 'Test-Driven Development',
117
+ description: 'Write tests before implementation',
118
+ rationale: 'Existing test infrastructure - maintain high test coverage'
119
+ });
120
+ }
121
+ if (analysis.hasLinter || analysis.hasFormatter) {
122
+ principles.push({
123
+ title: 'Code Style Consistency',
124
+ description: `Follow ${analysis.hasLinter ? 'ESLint' : ''}${analysis.hasLinter && analysis.hasFormatter ? ' and ' : ''}${analysis.hasFormatter ? 'Prettier' : ''} rules`,
125
+ rationale: 'Project has established code style tools - maintain consistency'
126
+ });
127
+ }
128
+ if (analysis.projectStructure === 'monorepo') {
129
+ principles.push({
130
+ title: 'Monorepo Architecture',
131
+ description: 'Respect package boundaries and shared dependencies',
132
+ rationale: 'Project uses monorepo structure - maintain clear module separation'
133
+ });
134
+ }
135
+ if (analysis.framework) {
136
+ principles.push({
137
+ title: `${analysis.framework} Best Practices`,
138
+ description: `Follow ${analysis.framework} conventions and patterns`,
139
+ rationale: `Project uses ${analysis.framework} - align with framework idioms`
140
+ });
141
+ }
142
+ principles.push({
143
+ title: 'Minimal Code Principle',
144
+ description: 'Write only the absolute minimal code needed',
145
+ rationale: 'Avoid over-engineering and unnecessary complexity'
146
+ });
147
+ return principles;
148
+ }
149
+ export function formatConstitution(constitution) {
150
+ let output = `# ${constitution.projectName} Constitution\n\n`;
151
+ output += `Generated: ${constitution.generatedAt}\n\n`;
152
+ output += `## Core Principles\n\n`;
153
+ constitution.principles.forEach((p, i) => {
154
+ output += `### ${i + 1}. ${p.title}\n\n`;
155
+ output += `**Description:** ${p.description}\n\n`;
156
+ output += `**Rationale:** ${p.rationale}\n\n`;
157
+ });
158
+ return output;
159
+ }
160
+ //# sourceMappingURL=constitution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitution.js","sourceRoot":"","sources":["../../../src/features/speckit-core/constitution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Spec Kit Core - 统一入口
3
+ */
4
+ export { generateConstitution, formatConstitution } from './constitution.js';
5
+ export { generateSpecification, formatSpecification } from './specify.js';
6
+ export { generatePlan, formatPlan } from './plan.js';
7
+ export { generateTasks, formatTasks } from './tasks.js';
8
+ export * from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/speckit-core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Spec Kit Core - 统一入口
3
+ */
4
+ export { generateConstitution, formatConstitution } from './constitution.js';
5
+ export { generateSpecification, formatSpecification } from './specify.js';
6
+ export { generatePlan, formatPlan } from './plan.js';
7
+ export { generateTasks, formatTasks } from './tasks.js';
8
+ export * from './types.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/speckit-core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plan Generator - 规范转技术方案
3
+ */
4
+ import type { Specification, TechnicalPlan } from './types.js';
5
+ export declare function generatePlan(spec: Specification, projectPath?: string): Promise<TechnicalPlan>;
6
+ export declare function formatPlan(plan: TechnicalPlan): string;
7
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/features/speckit-core/plan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAEhF,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBpG;AAoHD,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAYtD"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Plan Generator - 规范转技术方案
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ export async function generatePlan(spec, projectPath) {
7
+ if (!spec.feature || typeof spec.feature !== 'string') {
8
+ throw new Error('Invalid feature name');
9
+ }
10
+ if (spec.feature.includes('..') || spec.feature.includes('/') || spec.feature.includes('\\')) {
11
+ throw new Error('Invalid feature name: path traversal detected');
12
+ }
13
+ const existingFiles = projectPath ? scanExistingFiles(projectPath, spec.feature) : [];
14
+ return {
15
+ approach: generateApproach(spec),
16
+ components: identifyComponents(spec, existingFiles),
17
+ dependencies: extractDependencies(spec),
18
+ risks: identifyRisks(spec)
19
+ };
20
+ }
21
+ function generateApproach(spec) {
22
+ const hasHighPriorityReqs = spec.requirements.some(r => r.priority === 'high');
23
+ const approach = `Implement ${spec.feature} using modular architecture`;
24
+ if (hasHighPriorityReqs) {
25
+ return `${approach}. Focus on high-priority requirements first, then iterate on medium/low priority items.`;
26
+ }
27
+ return approach;
28
+ }
29
+ function scanExistingFiles(projectPath, feature) {
30
+ const existing = [];
31
+ const featurePath = path.join(projectPath, 'src', 'features', feature);
32
+ try {
33
+ if (fs.existsSync(featurePath)) {
34
+ const scanRecursive = (dir, base) => {
35
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
36
+ for (const entry of entries) {
37
+ const fullPath = path.join(dir, entry.name);
38
+ const relativePath = path.join(base, entry.name);
39
+ if (entry.isFile() && (entry.name.endsWith('.ts') || entry.name.endsWith('.tsx'))) {
40
+ existing.push(relativePath);
41
+ }
42
+ else if (entry.isDirectory()) {
43
+ scanRecursive(fullPath, relativePath);
44
+ }
45
+ }
46
+ };
47
+ scanRecursive(featurePath, path.join('src', 'features', feature));
48
+ }
49
+ }
50
+ catch { }
51
+ return existing;
52
+ }
53
+ function identifyComponents(spec, existingFiles) {
54
+ const components = [];
55
+ const featureName = spec.feature.toLowerCase().replace(/\s+/g, '-');
56
+ if (existingFiles.length > 0) {
57
+ components.push({
58
+ name: 'Existing Code Updates',
59
+ purpose: `Modify existing ${spec.feature} implementation`,
60
+ files: existingFiles
61
+ });
62
+ }
63
+ else {
64
+ components.push({
65
+ name: 'Core Module',
66
+ purpose: `Main ${spec.feature} implementation`,
67
+ files: [`src/features/${featureName}/index.ts`]
68
+ });
69
+ }
70
+ const hasTypeReqs = spec.requirements.some(r => r.description.toLowerCase().includes('type'));
71
+ if (hasTypeReqs) {
72
+ components.push({
73
+ name: 'Type Definitions',
74
+ purpose: 'TypeScript interfaces and types',
75
+ files: [`src/features/${featureName}/types.ts`]
76
+ });
77
+ }
78
+ components.push({
79
+ name: 'Tests',
80
+ purpose: 'Unit and integration tests',
81
+ files: [`src/features/${featureName}/__tests__/index.test.ts`]
82
+ });
83
+ return components;
84
+ }
85
+ function extractDependencies(spec) {
86
+ const deps = [];
87
+ const reqText = spec.requirements.map(r => r.description.toLowerCase()).join(' ');
88
+ if (reqText.includes('api') || reqText.includes('http'))
89
+ deps.push('axios or fetch');
90
+ if (reqText.includes('validation'))
91
+ deps.push('zod or yup');
92
+ if (reqText.includes('state'))
93
+ deps.push('zustand or redux');
94
+ return deps;
95
+ }
96
+ function identifyRisks(spec) {
97
+ const risks = [];
98
+ const highPriorityCount = spec.requirements.filter(r => r.priority === 'high').length;
99
+ if (highPriorityCount > 3) {
100
+ risks.push({
101
+ description: 'High complexity with multiple critical requirements',
102
+ mitigation: 'Break into smaller phases, implement incrementally'
103
+ });
104
+ }
105
+ const hasSecurityReqs = spec.requirements.some(r => r.description.toLowerCase().includes('auth') ||
106
+ r.description.toLowerCase().includes('security'));
107
+ if (hasSecurityReqs) {
108
+ risks.push({
109
+ description: 'Security-sensitive implementation',
110
+ mitigation: 'Follow security best practices, conduct security review'
111
+ });
112
+ }
113
+ if (risks.length === 0) {
114
+ risks.push({
115
+ description: 'Implementation complexity',
116
+ mitigation: 'Break into smaller tasks, test incrementally'
117
+ });
118
+ }
119
+ return risks;
120
+ }
121
+ export function formatPlan(plan) {
122
+ let output = `# Technical Plan\n\n## Approach\n${plan.approach}\n\n`;
123
+ output += `## Components\n`;
124
+ plan.components.forEach(c => {
125
+ output += `### ${c.name}\n${c.purpose}\n`;
126
+ output += `Files:\n${c.files.map(f => `- ${f}`).join('\n')}\n\n`;
127
+ });
128
+ output += `## Risks\n`;
129
+ plan.risks.forEach(r => {
130
+ output += `- **${r.description}**: ${r.mitigation}\n`;
131
+ });
132
+ return output;
133
+ }
134
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/features/speckit-core/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Specification Generator - 基于 constitution 生成功能规范
3
+ */
4
+ import type { Constitution, Specification } from './types.js';
5
+ export declare function generateSpecification(feature: string, constitution: Constitution, projectPath?: string): Promise<Specification>;
6
+ export declare function formatSpecification(spec: Specification): string;
7
+ //# sourceMappingURL=specify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specify.d.ts","sourceRoot":"","sources":["../../../src/features/speckit-core/specify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAe,MAAM,YAAY,CAAC;AAE3E,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAUxB;AAkFD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAY/D"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Specification Generator - 基于 constitution 生成功能规范
3
+ */
4
+ export async function generateSpecification(feature, constitution, projectPath) {
5
+ const featureType = inferFeatureType(feature);
6
+ return {
7
+ feature,
8
+ overview: generateOverview(feature, featureType),
9
+ requirements: generateRequirements(feature, featureType),
10
+ constraints: extractConstraints(constitution),
11
+ acceptanceCriteria: generateAcceptanceCriteria(feature, featureType, constitution)
12
+ };
13
+ }
14
+ function inferFeatureType(feature) {
15
+ const lower = feature.toLowerCase();
16
+ if (lower.includes('auth') || lower.includes('login'))
17
+ return 'auth';
18
+ if (lower.includes('api') || lower.includes('endpoint'))
19
+ return 'api';
20
+ if (lower.includes('ui') || lower.includes('component'))
21
+ return 'ui';
22
+ if (lower.includes('test'))
23
+ return 'test';
24
+ if (lower.includes('refactor'))
25
+ return 'refactor';
26
+ return 'feature';
27
+ }
28
+ function generateOverview(feature, type) {
29
+ const templates = {
30
+ api: `REST API implementation for ${feature} with proper error handling and validation`,
31
+ ui: `User interface component for ${feature} with responsive design and accessibility`,
32
+ auth: `Authentication/authorization implementation for ${feature} with security best practices`,
33
+ test: `Test suite for ${feature} with comprehensive coverage`,
34
+ refactor: `Code refactoring for ${feature} to improve maintainability and performance`,
35
+ feature: `Implementation of ${feature} following project principles`
36
+ };
37
+ return templates[type] || templates.feature;
38
+ }
39
+ function generateRequirements(feature, type) {
40
+ const baseReqs = [
41
+ {
42
+ id: 'REQ-001',
43
+ description: `Implement core ${feature} functionality`,
44
+ priority: 'high'
45
+ }
46
+ ];
47
+ const typeSpecific = {
48
+ api: [
49
+ { id: 'REQ-002', description: 'Add input validation and sanitization', priority: 'high' },
50
+ { id: 'REQ-003', description: 'Implement error handling with proper status codes', priority: 'high' },
51
+ { id: 'REQ-004', description: 'Add API documentation', priority: 'medium' }
52
+ ],
53
+ ui: [
54
+ { id: 'REQ-002', description: 'Ensure responsive design across devices', priority: 'high' },
55
+ { id: 'REQ-003', description: 'Implement accessibility (ARIA labels, keyboard navigation)', priority: 'high' },
56
+ { id: 'REQ-004', description: 'Add loading and error states', priority: 'medium' }
57
+ ],
58
+ auth: [
59
+ { id: 'REQ-002', description: 'Implement secure token handling', priority: 'high' },
60
+ { id: 'REQ-003', description: 'Add session management', priority: 'high' },
61
+ { id: 'REQ-004', description: 'Implement rate limiting', priority: 'medium' }
62
+ ]
63
+ };
64
+ const specific = typeSpecific[type] || [
65
+ { id: 'REQ-002', description: 'Add error handling', priority: 'medium' },
66
+ { id: 'REQ-003', description: 'Write comprehensive tests', priority: 'high' }
67
+ ];
68
+ return [...baseReqs, ...specific];
69
+ }
70
+ function extractConstraints(constitution) {
71
+ return constitution.principles.map(p => p.description);
72
+ }
73
+ function generateAcceptanceCriteria(feature, type, constitution) {
74
+ const base = [
75
+ 'All tests pass',
76
+ 'Code follows project principles'
77
+ ];
78
+ if (constitution.principles.some(p => p.title.includes('TypeScript'))) {
79
+ base.push('No TypeScript errors');
80
+ }
81
+ const typeSpecific = {
82
+ api: ['API returns correct status codes', 'Input validation works', 'Error responses are consistent'],
83
+ ui: ['Component renders correctly', 'Responsive on mobile/desktop', 'Accessible (WCAG 2.1)'],
84
+ auth: ['Authentication flow works', 'Tokens are secure', 'Unauthorized access blocked']
85
+ };
86
+ return [...base, ...(typeSpecific[type] || [])];
87
+ }
88
+ export function formatSpecification(spec) {
89
+ let output = `# Specification: ${spec.feature}\n\n`;
90
+ output += `## Overview\n${spec.overview}\n\n`;
91
+ output += `## Requirements\n`;
92
+ spec.requirements.forEach(r => {
93
+ output += `- [${r.priority.toUpperCase()}] ${r.id}: ${r.description}\n`;
94
+ });
95
+ output += `\n## Constraints\n`;
96
+ spec.constraints.forEach(c => output += `- ${c}\n`);
97
+ output += `\n## Acceptance Criteria\n`;
98
+ spec.acceptanceCriteria.forEach(a => output += `- [ ] ${a}\n`);
99
+ return output;
100
+ }
101
+ //# sourceMappingURL=specify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specify.js","sourceRoot":"","sources":["../../../src/features/speckit-core/specify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Task Decomposer - 方案分解为可执行任务
3
+ */
4
+ import type { TechnicalPlan, Task, Specification } from './types.js';
5
+ export declare function generateTasks(plan: TechnicalPlan, spec?: Specification): Promise<Task[]>;
6
+ export declare function formatTasks(tasks: Task[]): string;
7
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/features/speckit-core/tasks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAErE,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAqC9F;AAgCD,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAYjD"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Task Decomposer - 方案分解为可执行任务
3
+ */
4
+ export async function generateTasks(plan, spec) {
5
+ let taskId = 1;
6
+ // 为每个组件生成实现任务
7
+ const tasks = plan.components.map((component) => {
8
+ const isExisting = component.name.includes('Existing');
9
+ const effort = estimateEffort(component, spec);
10
+ return {
11
+ id: `TASK-${String(taskId++).padStart(3, '0')}`,
12
+ title: isExisting ? `Update ${component.name}` : `Implement ${component.name}`,
13
+ description: `${component.purpose}\nFiles: ${component.files.join(', ')}`,
14
+ dependencies: [],
15
+ estimatedEffort: effort
16
+ };
17
+ });
18
+ // 测试任务依赖所有实现任务
19
+ const implTaskIds = tasks.filter(t => !t.title.includes('Test')).map(t => t.id);
20
+ const testTask = tasks.find(t => t.title.includes('Test'));
21
+ if (testTask && implTaskIds.length > 0) {
22
+ testTask.dependencies = implTaskIds;
23
+ }
24
+ // 如果有依赖需要安装
25
+ if (plan.dependencies.length > 0) {
26
+ tasks.unshift({
27
+ id: `TASK-${String(taskId++).padStart(3, '0')}`,
28
+ title: 'Install dependencies',
29
+ description: `Add required packages: ${plan.dependencies.join(', ')}`,
30
+ dependencies: [],
31
+ estimatedEffort: '15m'
32
+ });
33
+ }
34
+ // 按优先级排序
35
+ return sortByPriority(tasks, spec);
36
+ }
37
+ function estimateEffort(component, spec) {
38
+ const fileCount = component.files.length;
39
+ const isTest = component.name.toLowerCase().includes('test');
40
+ if (isTest)
41
+ return fileCount > 2 ? '2h' : '1h';
42
+ const highPriorityCount = spec?.requirements.filter(r => r.priority === 'high').length || 0;
43
+ if (highPriorityCount > 3)
44
+ return fileCount > 2 ? '4h' : '3h';
45
+ return fileCount > 2 ? '3h' : '2h';
46
+ }
47
+ function sortByPriority(tasks, spec) {
48
+ if (!spec)
49
+ return tasks;
50
+ const priorityMap = { high: 3, medium: 2, low: 1 };
51
+ const hasHighPriority = spec.requirements.some(r => r.priority === 'high');
52
+ if (!hasHighPriority)
53
+ return tasks;
54
+ // 保持依赖顺序,但优先处理核心实现
55
+ return tasks.sort((a, b) => {
56
+ if (a.dependencies.includes(b.id))
57
+ return 1;
58
+ if (b.dependencies.includes(a.id))
59
+ return -1;
60
+ if (a.title.includes('Core') || a.title.includes('Main'))
61
+ return -1;
62
+ if (b.title.includes('Core') || b.title.includes('Main'))
63
+ return 1;
64
+ return 0;
65
+ });
66
+ }
67
+ export function formatTasks(tasks) {
68
+ let output = `# Task List\n\n`;
69
+ tasks.forEach(task => {
70
+ output += `## ${task.id}: ${task.title}\n`;
71
+ output += `${task.description}\n`;
72
+ output += `**Effort:** ${task.estimatedEffort}\n`;
73
+ if (task.dependencies.length > 0) {
74
+ output += `**Depends on:** ${task.dependencies.join(', ')}\n`;
75
+ }
76
+ output += `\n`;
77
+ });
78
+ return output;
79
+ }
80
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/features/speckit-core/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Spec Kit Core Types
3
+ */
4
+ export interface Constitution {
5
+ principles: Principle[];
6
+ projectName: string;
7
+ generatedAt: string;
8
+ }
9
+ export interface Principle {
10
+ title: string;
11
+ description: string;
12
+ rationale: string;
13
+ }
14
+ export interface Specification {
15
+ feature: string;
16
+ overview: string;
17
+ requirements: Requirement[];
18
+ constraints: string[];
19
+ acceptanceCriteria: string[];
20
+ }
21
+ export interface Requirement {
22
+ id: string;
23
+ description: string;
24
+ priority: 'high' | 'medium' | 'low';
25
+ }
26
+ export interface TechnicalPlan {
27
+ approach: string;
28
+ components: Component[];
29
+ dependencies: string[];
30
+ risks: Risk[];
31
+ }
32
+ export interface Component {
33
+ name: string;
34
+ purpose: string;
35
+ files: string[];
36
+ }
37
+ export interface Risk {
38
+ description: string;
39
+ mitigation: string;
40
+ }
41
+ export interface Task {
42
+ id: string;
43
+ title: string;
44
+ description: string;
45
+ dependencies: string[];
46
+ estimatedEffort: string;
47
+ }
48
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/speckit-core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Spec Kit Core Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/features/speckit-core/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}