@xulthekl/team-flow 0.34.0 → 0.34.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.
@@ -1,3 +1,3 @@
1
- # team-flow v0.34.0 | 阶段: {{state}} | 工作流: {{workflow}}
1
+ # team-flow v0.34.1 | 阶段: {{state}} | 工作流: {{workflow}}
2
2
  当前阶段允许的操作由 workflow-start 路由规则定义。
3
3
  禁止跨越 DP gate 进入下一阶段。变更范围以 execution-contract.md 的 Intent Lock 为准。
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "team-flow",
11
11
  "description": "8-state spec workflow + compound global compounding + architecture-design (4A/DDD) + local HTML prototype + product-level orchestration + bootstrap + e2e + session handoff + workflow feedback. 24 skills + 15 agents with embedded TDD, SDD, code review, debugging, delta spec sync, and design-system-driven prototyping.",
12
- "version": "0.34.0",
12
+ "version": "0.34.1",
13
13
  "source": "./",
14
14
  "author": {
15
15
  "name": "LT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "team-flow",
3
- "version": "0.34.0",
3
+ "version": "0.34.1",
4
4
  "description": "Unified workflow plugin: team-flow (spec-driven dev: TDD/SDD/code-review/debugging) + compound-engineering core subset (brainstorm/plan/compound/strategy/ideate/proof, global compounding) + architecture-design (4A+DDD incremental design & global compounding) + prototype (local HTML prototype, zero external deps) + e2e (Playwright E2E, AC-driven) + workflow-orchestrator (product-level workflow orchestration) + workflow-bootstrap (existing project onboarding) + session-handoff (context transfer) + workflow-feedback (issue tracking). 24 skills + 15 agents, one install.",
5
5
  "source": "./",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "team-flow",
3
- "version": "0.34.0",
3
+ "version": "0.34.1",
4
4
  "description": "Spec-first workflow that bridges OpenSpec-style planning and Superpowers-style execution discipline.",
5
5
  "author": {
6
6
  "name": "MageByte",
@@ -5,7 +5,7 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "Unified workflow plugin marketplace for Cursor (team-flow: team-flow + compound + architecture-design + prototype).",
8
- "version": "0.34.0"
8
+ "version": "0.34.1"
9
9
  },
10
10
  "plugins": [
11
11
  {
@@ -2,7 +2,7 @@
2
2
  "name": "team-flow",
3
3
  "displayName": "team-flow",
4
4
  "description": "Unified workflow plugin: team-flow (spec-driven dev: TDD/SDD/code-review/debugging) + compound-engineering core subset (brainstorm/plan/compound/strategy/ideate/proof, global compounding) + architecture-design (4A+DDD incremental design & global compounding) + prototype (local HTML prototype, zero external deps) + e2e (Playwright E2E, AC-driven) + workflow-orchestrator (product-level workflow orchestration) + workflow-bootstrap (existing project onboarding) + session-handoff (context transfer) + workflow-feedback (issue tracking). 24 skills + 15 agents, one install.",
5
- "version": "0.34.0",
5
+ "version": "0.34.1",
6
6
  "author": {
7
7
  "name": "LT",
8
8
  "url": "https://github.com/LT"
@@ -6,13 +6,13 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Unified workflow plugins and skills for AI coding agents (team-flow: team-flow + compound + architecture-design + prototype).",
9
- "version": "0.34.0"
9
+ "version": "0.34.1"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "team-flow",
14
14
  "description": "Unified workflow with planning artifacts, execution contracts, TDD, review gates, systematic debugging, delta spec sync, architecture-design, and local HTML prototyping.",
15
- "version": "0.34.0",
15
+ "version": "0.34.1",
16
16
  "source": ".",
17
17
  "author": {
18
18
  "name": "LT",
package/CHANGELOG.md CHANGED
@@ -6,6 +6,28 @@ The format loosely follows Keep a Changelog.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.34.1] - 2026-08-04
10
+
11
+ ### Added(工作空间支持——conventions-generator 支持多子项目扫描)
12
+
13
+ #### 工作空间扫描(v0.34.1 核心特性)
14
+ - **scripts/lib/conventions-generator.mjs**:新增工作空间模式
15
+ - `scanSubProjects(root)`:扫描工作空间中的所有子项目
16
+ - `aggregateTechStacks(subProjects)`:汇总所有子项目的技术栈
17
+ - `selectTemplatesForWorkspace(aggregatedTechStack)`:为工作空间选择 conventions 模板
18
+ - `run()` 函数支持自动检测工作空间模式(子项目 > 1 时进入)
19
+ - 输出模式标识:`mode: 'workspace'` 或 `mode: 'single'`
20
+
21
+ #### 使用场景
22
+ - **前后端分离项目**:Java 后端 + Vue 前端 → 生成 Java + JavaScript conventions
23
+ - **多语言项目**:Java 后端 + Python 脚本 + JavaScript 前端 → 生成三种语言 conventions
24
+ - **单项目兼容**:原有单项目逻辑完全保留
25
+
26
+ ### Tests
27
+ - **tests/lib/conventions-generator.test.mjs**:新增 12 个测试(scanSubProjects: 4 / aggregateTechStacks: 3 / selectTemplatesForWorkspace: 5)
28
+ - 全量回归:583/583 通过(含 27 个 conventions-generator 测试)
29
+ - check-versions ✅
30
+
9
31
  ## [0.34.0] - 2026-08-04
10
32
 
11
33
  ### Added(测试能力增强——吸收 glaf4-test 通用能力 + conventions 机制,设计见工作区级文档 team-flow-workspace/docs/plan/test-capability-enhancement-design.md)
package/GEMINI.md CHANGED
@@ -8,7 +8,7 @@ The workflow is self-contained and does not require OpenSpec or Superpowers at r
8
8
 
9
9
 
10
10
  <!-- team-flow-phase-guard-start -->
11
- # team-flow v0.34.0 | 阶段: {{state}} | 工作流: {{workflow}}
11
+ # team-flow v0.34.1 | 阶段: {{state}} | 工作流: {{workflow}}
12
12
  当前阶段允许的操作由 workflow-start 路由规则定义。
13
13
  禁止跨越 DP gate 进入下一阶段。变更范围以 execution-contract.md 的 Intent Lock 为准。
14
14
  <!-- team-flow-phase-guard-end -->
package/INSTALL.md CHANGED
@@ -7,7 +7,7 @@
7
7
  - [Fission-AI/OpenSpec](https://github.com/Fission-AI/OpenSpec) — 规划引擎(Schema 验证、Delta Spec、工件解析)
8
8
  - [obra/superpowers](https://github.com/obra/superpowers) — 执行纪律(TDD 铁律、SDD、系统化调试、代码审查)
9
9
 
10
- 当前发布版本:**v0.34.0**。
10
+ 当前发布版本:**v0.34.1**。
11
11
 
12
12
  ---
13
13
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # team-flow
2
2
 
3
- > 当前版本:`v0.34.0`
3
+ > 当前版本:`v0.34.1`
4
4
 
5
5
  > 统一插件:**team-flow**(spec 驱动开发)+ **compound-engineering 核心子集**(全局复利)+ **architecture-design**(4A+DDD 增量设计)+ **prototype**(本地 HTML 原型)+ **e2e**(AC 驱动 E2E)+ **workflow-orchestrator**(产品级编排)+ **workflow-bootstrap**(既有项目接入)。一次安装,七套能力协同。
6
6
 
package/docs/README_en.md CHANGED
@@ -126,7 +126,7 @@ npm install -g team-flow
126
126
 
127
127
  ### Version
128
128
 
129
- - Current: `v0.34.0`
129
+ - Current: `v0.34.1`
130
130
  - v0.9.1 highlights: DP-4 execution-mode recommendations, a portable runtime across 17 platforms, and a raw-package smoke with no plugin-root variable.
131
131
  - Self-contained — no OpenSpec or Superpowers runtime required
132
132
  - Upstream: [Fission-AI/OpenSpec](https://github.com/Fission-AI/OpenSpec), [obra/superpowers](https://github.com/obra/superpowers)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "team-flow",
3
3
  "description": "Unified workflow plugin: team-flow (spec-driven dev) + compound-engineering core subset + architecture-design (4A/DDD) + prototype (local HTML). 24 skills, one install.",
4
- "version": "0.34.0",
4
+ "version": "0.34.1",
5
5
  "contextFileName": "GEMINI.md"
6
6
  }
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env bash
2
- # v0.34.0: auto-sync CLI version with plugin version
2
+ # v0.34.1: auto-sync CLI version with plugin version
3
3
  set -e
4
4
 
5
5
  # ═══════════════════════════════════════════════════════════════
6
6
  # Plugin version (update this when releasing new versions)
7
7
  # ═══════════════════════════════════════════════════════════════
8
- PLUGIN_VERSION="0.34.0"
8
+ PLUGIN_VERSION="0.34.1"
9
9
 
10
10
  # ═══════════════════════════════════════════════════════════════
11
11
  # Step 1: Auto-sync CLI version with plugin version
package/llms.txt CHANGED
@@ -3,7 +3,7 @@
3
3
  ## Overview
4
4
  spec-superflow is a self-contained workflow integration plugin for Claude Code, Cursor, OpenAI Codex CLI/App, GitHub Copilot CLI, Gemini CLI, OpenCode, WorkBuddy, and Trae. It merges spec-driven planning artifacts (proposal, specs, design, tasks) with disciplined execution guardrails (TDD, review gates, controlled handoff) into one unified workflow.
5
5
 
6
- Current version: v0.34.0.
6
+ Current version: v0.34.1.
7
7
 
8
8
  ## Key Documents
9
9
  - README.md: Chinese homepage with full usage guide and FAQ
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xulthekl/team-flow",
3
- "version": "0.34.0",
3
+ "version": "0.34.1",
4
4
  "description": "Unified plugin (24 skills + 15 agents) integrating team-flow, compound-engineering, architecture-design, prototype, design-system, workflow-orchestrator, workflow-bootstrap, e2e, session-handoff, workflow-feedback for multi-agent coding tools.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "team-flow",
3
- "version": "0.34.0",
3
+ "version": "0.34.1",
4
4
  "description": "Unified workflow plugin: team-flow (spec-driven dev: TDD/SDD/code-review/debugging) + compound-engineering core subset (brainstorm/plan/compound/strategy/ideate/proof, global compounding) + architecture-design (4A+DDD incremental design & global compounding) + prototype (local HTML prototype, zero external deps) + e2e (Playwright E2E, AC-driven) + workflow-orchestrator (product-level workflow orchestration) + workflow-bootstrap (existing project onboarding) + session-handoff (context transfer) + workflow-feedback (issue tracking). 24 skills + 15 agents, one install.",
5
5
  "author": {
6
6
  "name": "LT"
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
- // scripts/lib/conventions-generator.mjs — conventions 生成器(v0.34.0 新增)
2
+ // scripts/lib/conventions-generator.mjs — conventions 生成器(v0.34.0 新增,v0.34.1 工作空间支持)
3
3
  //
4
4
  // 根据项目技术栈自动生成测试规范 conventions,符合 glaf4-test 要求。
5
- // 支持存量项目(自动识别)和全新项目(交互式引导)。
5
+ // 支持存量项目(自动识别)、全新项目(交互式引导)和工作空间(多子项目)。
6
6
  //
7
7
  // 使用方式:
8
8
  // node scripts/lib/conventions-generator.mjs --root <项目根目录> [--interactive]
9
9
  //
10
- // 设计来源:test-capability-enhancement-design v1.0 §四
10
+ // 设计来源:test-capability-enhancement-design v1.0 §四 + §55.4
11
11
 
12
12
  import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';
13
13
  import path, { join } from 'node:path';
@@ -98,6 +98,102 @@ export function detectTechStack(root) {
98
98
  return result;
99
99
  }
100
100
 
101
+ // ── 工作空间扫描 ─────────────────────────────────────────────────────────
102
+
103
+ /**
104
+ * 扫描工作空间中的所有子项目
105
+ * @param {string} root 工作空间根目录
106
+ * @returns {Array<{ path: string, name: string, techStack: object }>}
107
+ */
108
+ export function scanSubProjects(root) {
109
+ const subProjects = [];
110
+
111
+ // 扫描一级子目录
112
+ const entries = readdirSync(root, { withFileTypes: true });
113
+
114
+ for (const entry of entries) {
115
+ if (!entry.isDirectory()) continue;
116
+ if (entry.name.startsWith('.') || entry.name === 'node_modules') continue;
117
+
118
+ const subProjectPath = join(root, entry.name);
119
+ const techStack = detectTechStack(subProjectPath);
120
+
121
+ // 如果检测到技术栈,记录为子项目
122
+ if (techStack.language) {
123
+ subProjects.push({
124
+ path: subProjectPath,
125
+ name: entry.name,
126
+ techStack,
127
+ });
128
+ }
129
+ }
130
+
131
+ return subProjects;
132
+ }
133
+
134
+ /**
135
+ * 汇总所有子项目的技术栈
136
+ * @param {Array<{ path: string, name: string, techStack: object }>} subProjects
137
+ * @returns {{ language: string|null, buildTool: string|null, testFramework: string|null, appFramework: string|null, languages: string[], appFrameworks: string[] }}
138
+ */
139
+ export function aggregateTechStacks(subProjects) {
140
+ const languages = new Set();
141
+ const buildTools = new Set();
142
+ const testFrameworks = new Set();
143
+ const appFrameworks = new Set();
144
+
145
+ for (const { techStack } of subProjects) {
146
+ if (techStack.language) languages.add(techStack.language);
147
+ if (techStack.buildTool) buildTools.add(techStack.buildTool);
148
+ if (techStack.testFramework) testFrameworks.add(techStack.testFramework);
149
+ if (techStack.appFramework) appFrameworks.add(techStack.appFramework);
150
+ }
151
+
152
+ return {
153
+ // 主技术栈(第一个子项目)
154
+ language: subProjects[0]?.techStack.language || null,
155
+ buildTool: subProjects[0]?.techStack.buildTool || null,
156
+ testFramework: subProjects[0]?.techStack.testFramework || null,
157
+ appFramework: subProjects[0]?.techStack.appFramework || null,
158
+ // 汇总列表
159
+ languages: [...languages],
160
+ appFrameworks: [...appFrameworks],
161
+ };
162
+ }
163
+
164
+ /**
165
+ * 为工作空间选择 conventions 模板
166
+ * @param {{ languages: string[], appFrameworks: string[] }} aggregatedTechStack
167
+ * @returns {string[]} 模板文件名列表
168
+ */
169
+ export function selectTemplatesForWorkspace(aggregatedTechStack) {
170
+ const templates = [];
171
+
172
+ // Java 相关
173
+ if (aggregatedTechStack.languages.includes('java')) {
174
+ if (existsSync(join(GLAF4_TEMPLATE_DIR, 'java-testing.md'))) {
175
+ templates.push('glaf4-compliant/java-testing.md');
176
+ }
177
+ if (aggregatedTechStack.appFrameworks.includes('spring-boot')) {
178
+ if (existsSync(join(GLAF4_TEMPLATE_DIR, 'spring-patterns.md'))) {
179
+ templates.push('glaf4-compliant/spring-patterns.md');
180
+ }
181
+ }
182
+ }
183
+
184
+ // JavaScript 相关
185
+ if (aggregatedTechStack.languages.includes('javascript')) {
186
+ templates.push('js-testing.md');
187
+ }
188
+
189
+ // Python 相关
190
+ if (aggregatedTechStack.languages.includes('python')) {
191
+ templates.push('python-testing.md');
192
+ }
193
+
194
+ return templates;
195
+ }
196
+
101
197
  // ── 模板选择 ─────────────────────────────────────────────────────────────
102
198
 
103
199
  /**
@@ -290,54 +386,120 @@ export async function run(args) {
290
386
  process.exit(0);
291
387
  }
292
388
 
293
- // 检测技术栈
294
- let techStack = detectTechStack(root);
389
+ // 检测是否为工作空间(包含多个子项目)
390
+ const subProjects = scanSubProjects(root);
295
391
 
296
- // 如果未检测到技术栈且启用交互式模式
297
- if (!techStack.language && values.interactive) {
298
- techStack = await interactiveSetup();
299
- }
392
+ if (subProjects.length > 1) {
393
+ // 工作空间模式:扫描所有子项目
394
+ console.log(`\n=== 检测到工作空间(${subProjects.length} 个子项目)===\n`);
300
395
 
301
- // 如果仍未检测到技术栈
302
- if (!techStack.language) {
303
- console.error('❌ 未检测到技术栈特征');
304
- console.error(' 请指定项目根目录,或使用 --interactive 模式手动配置');
305
- process.exit(1);
306
- }
396
+ for (const { name, techStack } of subProjects) {
397
+ console.log(` - ${name}: ${techStack.language}`);
398
+ }
307
399
 
308
- // 选择模板
309
- const templates = selectTemplates(techStack);
400
+ // 汇总技术栈
401
+ const aggregatedTechStack = aggregateTechStacks(subProjects);
310
402
 
311
- if (templates.length === 0) {
312
- console.error('❌ 未找到匹配的 conventions 模板');
313
- console.error(` 技术栈: ${JSON.stringify(techStack)}`);
314
- process.exit(1);
315
- }
403
+ // 选择模板
404
+ const templates = selectTemplatesForWorkspace(aggregatedTechStack);
405
+
406
+ if (templates.length === 0) {
407
+ console.error('❌ 未找到匹配的 conventions 模板');
408
+ console.error(` 检测到的语言: ${aggregatedTechStack.languages.join(', ')}`);
409
+ process.exit(1);
410
+ }
411
+
412
+ // 生成 conventions
413
+ const result = generateConventions(root, aggregatedTechStack, templates);
414
+
415
+ // 更新配置
416
+ updateConfig(root, result.created);
417
+
418
+ // 输出结果
419
+ if (values.json) {
420
+ console.log(JSON.stringify({
421
+ ok: true,
422
+ mode: 'workspace',
423
+ subProjects: subProjects.map(p => ({ name: p.name, language: p.techStack.language })),
424
+ aggregatedTechStack: {
425
+ languages: aggregatedTechStack.languages,
426
+ appFrameworks: aggregatedTechStack.appFrameworks,
427
+ },
428
+ templates,
429
+ created: result.created,
430
+ skipped: result.skipped,
431
+ conventionsDir,
432
+ }));
433
+ } else {
434
+ console.log('\n✅ 工作空间级 conventions 生成完成');
435
+ console.log(` 检测到的语言:${aggregatedTechStack.languages.join(', ')}`);
436
+ console.log(` 创建:${result.created.join(', ')}`);
437
+ if (result.skipped.length > 0) {
438
+ console.log(` 跳过:${result.skipped.join(', ')}`);
439
+ }
440
+ console.log(` 路径:${conventionsDir}`);
441
+ }
316
442
 
317
- // 生成 conventions
318
- const result = generateConventions(root, techStack, templates);
319
-
320
- // 更新配置
321
- updateConfig(root, result.created);
322
-
323
- // 输出结果
324
- if (values.json) {
325
- console.log(JSON.stringify({
326
- ok: true,
327
- techStack,
328
- templates,
329
- created: result.created,
330
- skipped: result.skipped,
331
- conventionsDir,
332
- }));
333
443
  } else {
334
- console.log('✅ conventions 生成完成');
335
- console.log(` 技术栈: ${techStack.language} + ${techStack.testFramework}`);
336
- console.log(` 创建: ${result.created.join(', ')}`);
337
- if (result.skipped.length > 0) {
338
- console.log(` 跳过: ${result.skipped.join(', ')}`);
444
+ // 单项目模式
445
+ let techStack;
446
+
447
+ if (subProjects.length === 1) {
448
+ // 从子项目检测
449
+ techStack = subProjects[0].techStack;
450
+ console.log(`\n=== 检测到单项目:${subProjects[0].name} ===\n`);
451
+ } else {
452
+ // 从根目录检测
453
+ techStack = detectTechStack(root);
454
+ }
455
+
456
+ // 如果未检测到技术栈且启用交互式模式
457
+ if (!techStack.language && values.interactive) {
458
+ techStack = await interactiveSetup();
459
+ }
460
+
461
+ // 如果仍未检测到技术栈
462
+ if (!techStack.language) {
463
+ console.error('❌ 未检测到技术栈特征');
464
+ console.error(' 请指定项目根目录,或使用 --interactive 模式手动配置');
465
+ process.exit(1);
466
+ }
467
+
468
+ // 选择模板
469
+ const templates = selectTemplates(techStack);
470
+
471
+ if (templates.length === 0) {
472
+ console.error('❌ 未找到匹配的 conventions 模板');
473
+ console.error(` 技术栈: ${JSON.stringify(techStack)}`);
474
+ process.exit(1);
475
+ }
476
+
477
+ // 生成 conventions
478
+ const result = generateConventions(root, techStack, templates);
479
+
480
+ // 更新配置
481
+ updateConfig(root, result.created);
482
+
483
+ // 输出结果
484
+ if (values.json) {
485
+ console.log(JSON.stringify({
486
+ ok: true,
487
+ mode: 'single',
488
+ techStack,
489
+ templates,
490
+ created: result.created,
491
+ skipped: result.skipped,
492
+ conventionsDir,
493
+ }));
494
+ } else {
495
+ console.log('✅ conventions 生成完成');
496
+ console.log(` 技术栈: ${techStack.language} + ${techStack.testFramework}`);
497
+ console.log(` 创建: ${result.created.join(', ')}`);
498
+ if (result.skipped.length > 0) {
499
+ console.log(` 跳过: ${result.skipped.join(', ')}`);
500
+ }
501
+ console.log(` 路径: ${conventionsDir}`);
339
502
  }
340
- console.log(` 路径: ${conventionsDir}`);
341
503
  }
342
504
  }
343
505