@miniidealab/openlogos 0.6.6 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ Usage:
20
20
  Commands:
21
21
  init [name] Initialize a new OpenLogos project structure
22
22
  --locale <en|zh> Set language (skip prompt)
23
- --ai-tool <claude-code|opencode|cursor|other> Set AI tool (skip prompt)
23
+ --ai-tool <claude-code|opencode|cursor|other|all> Set AI tool (skip prompt)
24
24
  sync Regenerate AI instruction files (AGENTS.md, CLAUDE.md)
25
25
  status Show current project phase and suggest next steps
26
26
  verify Verify test results against test case specs
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "0.6.3";
1
+ export declare const VERSION: string;
2
2
  export type OutputFormat = 'text' | 'json';
3
3
  export declare function parseFormat(args: string[]): OutputFormat;
4
4
  export interface JsonEnvelope {
@@ -1 +1 @@
1
- {"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/lib/json-output.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAMxD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,YAAY,CAOzE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAO9F"}
1
+ {"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/lib/json-output.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,EAAE,MAAqB,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAMxD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,YAAY,CAOzE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAO9F"}
@@ -1,4 +1,8 @@
1
- export const VERSION = '0.6.3';
1
+ import { readFileSync } from 'node:fs';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { join, dirname } from 'node:path';
4
+ const _pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), '../../package.json'), 'utf-8'));
5
+ export const VERSION = _pkg.version;
2
6
  export function parseFormat(args) {
3
7
  const idx = args.indexOf('--format');
4
8
  if (idx !== -1 && args[idx + 1] === 'json') {
@@ -1 +1 @@
1
- {"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/lib/json-output.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAI/B,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAaD,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,IAAa;IACzD,OAAO;QACL,OAAO;QACP,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAY,EAAE,OAAe;IAC9E,OAAO;QACL,OAAO;QACP,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KACzB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/lib/json-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACpH,MAAM,CAAC,MAAM,OAAO,GAAW,IAAI,CAAC,OAAO,CAAC;AAI5C,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAaD,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,IAAa;IACzD,OAAO;QACL,OAAO;QACP,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAY,EAAE,OAAe;IAC9E,OAAO;QACL,OAAO;QACP,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KACzB,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miniidealab/openlogos",
3
- "version": "0.6.6",
3
+ "version": "0.7.1",
4
4
  "description": "CLI tool for the OpenLogos software engineering methodology",
5
5
  "type": "module",
6
6
  "bin": {
@@ -195,4 +195,24 @@ resource_index:
195
195
 
196
196
  2. 同步更新 `logos/logos-project.yaml` 的 `tech_stack` 和 `external_dependencies` 字段(这是本 Skill 的核心产出之一)。
197
197
 
198
- **不执行此步骤将导致后续 AI 在场景建模和代码生成时无法读取架构决策,产生技术栈不一致的代码。**
198
+ 3. **(强制)梳理并预写入场景清单**:
199
+
200
+ 根据架构文档、需求文档和产品设计文档,整理出本项目的完整核心业务场景列表,向用户逐一确认后,将其写入 `logos/logos-project.yaml` 的 `scenarios` 字段:
201
+
202
+ ```yaml
203
+ scenarios:
204
+ - id: S01
205
+ name: <场景名称>
206
+ - id: S02
207
+ name: <场景名称>
208
+ # ...
209
+ ```
210
+
211
+ **确认要点**:
212
+ - 场景清单是否覆盖了所有核心用户旅程?
213
+ - 是否有遗漏的边界场景或管理后台场景?
214
+ - 场景编号是否按业务优先级排序?
215
+
216
+ 此步骤产出的 `scenarios` 字段将作为 `scenario-architect` Skill 的输入基础,直接影响后续阶段的完成判断。**若此步骤跳过,`scenario-architect` Skill 开始时将强制要求补填。**
217
+
218
+ **不执行收尾步骤将导致后续 AI 在场景建模和代码生成时无法读取架构决策,产生技术栈不一致的代码。**
@@ -32,6 +32,44 @@
32
32
 
33
33
  ## 执行步骤
34
34
 
35
+ ### Step 0: 确认场景清单(强制,建模前必须执行)
36
+
37
+ 在开始任何场景时序图绘制之前,**必须**先完成场景清单的确认:
38
+
39
+ 1. 读取 `logos/logos-project.yaml`,检查是否已有 `scenarios` 字段。
40
+
41
+ **情况 A:`scenarios` 字段不存在**
42
+
43
+ 停止建模,要求用户先确认完整的场景清单。结合需求文档(Phase 1)、产品设计文档(Phase 2)和架构概要(Phase 3 Step 0),整理出候选清单,向用户逐一确认:
44
+
45
+ - 每个场景的编号(`S01`、`S02`...)和名称
46
+ - 是否有遗漏的核心用户旅程?
47
+ - 是否有遗漏的管理后台或系统级场景?
48
+
49
+ 确认后,将清单写入 `logos/logos-project.yaml`:
50
+
51
+ ```yaml
52
+ scenarios:
53
+ - id: S01
54
+ name: <场景名称>
55
+ - id: S02
56
+ name: <场景名称>
57
+ # ...
58
+ ```
59
+
60
+ **情况 B:`scenarios` 字段已存在**
61
+
62
+ 展示当前清单,并询问用户是否有遗漏或调整:
63
+
64
+ > 当前场景清单共 N 个:S01(xxx)、S02(xxx)...
65
+ > 请确认是否完整,或告知需要新增/调整的场景。
66
+
67
+ 只有用户明确确认清单无误后,才进入 Step 1 开始建模。
68
+
69
+ 2. 确认清单后,告知用户当前已完成哪些场景(`SXX-*.md` 文件存在),还剩哪些场景待建模,然后按用户指示开始目标场景的建模。
70
+
71
+ ---
72
+
35
73
  ### Step 1: 加载场景上下文
36
74
 
37
75
  读取 Phase 1 需求文档、Phase 2 产品设计文档和 Phase 3 Step 0 技术架构概要中的场景定义。**不要重新发明场景**——直接沿用已有编号和描述。参与方命名应与架构图中的系统组件保持一致。
@@ -16,6 +16,7 @@
16
16
  |------|------|------|------|
17
17
  | `project` | object | 是 | 项目基本信息 |
18
18
  | `tech_stack` | object | 是 | 技术栈描述 |
19
+ | `scenarios` | array | 否 | 场景清单(单一真相来源,Phase 3-1 前写入) |
19
20
  | `resource_index` | array | 是 | 资源索引列表 |
20
21
  | `conventions` | array | 否 | 项目约定 |
21
22
 
@@ -70,6 +71,29 @@
70
71
  | `path` | string | 是 | 文件相对路径 |
71
72
  | `desc` | string | 是 | 一句话描述——告诉 AI 什么场景下需要读这个文件 |
72
73
 
74
+ ### scenarios
75
+
76
+ 数组,声明项目的**完整场景清单**。场景是 OpenLogos 方法论中最核心的设计元素,是后续各阶段产出物的组织单位。
77
+
78
+ **写入时机**:
79
+ 1. 在 `architecture-designer` Skill 完成后,由 AI 引导用户确认场景清单并预先写入;
80
+ 2. 在 `scenario-architect` Skill 开始建模时,强制检查并补全。
81
+
82
+ | 字段 | 类型 | 必填 | 说明 |
83
+ |------|------|------|------|
84
+ | `id` | string | 是 | 场景唯一编号,格式为 `S` + 两位数字,如 `S01`、`S02` |
85
+ | `name` | string | 是 | 场景名称(一句话描述) |
86
+
87
+ **命名规则约定**(各阶段产出物通过 `SXX` 前缀与场景关联,无需在 yaml 中声明路径):
88
+
89
+ | 阶段 | 产出物路径规则 | 示例 |
90
+ |------|-------------|------|
91
+ | Phase 3-1 场景建模 | `logos/resources/prd/3-technical-plan/2-scenario-implementation/SXX-*.md` | `S01-user-register.md` |
92
+ | Phase 3-2 API 设计 | `logos/resources/api/SXX-*.yaml` 或 `SXX-*.yml` | `S01-user-register.yaml` |
93
+ | Phase 3-3a 测试用例 | `logos/resources/test/SXX-*.md` | `S01-test-cases.md` |
94
+
95
+ **完成判断规则**:只有 `scenarios` 中每个 `id` 在对应阶段都存在匹配文件,该阶段才视为完成。若 `scenarios` 字段缺失,则降级为旧的"目录有文件即完成"逻辑(向后兼容)。
96
+
73
97
  ### conventions
74
98
 
75
99
  数组,每个元素是一条项目约定(字符串格式)。