@miniidealab/openlogos 0.2.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/i18n.js ADDED
@@ -0,0 +1,382 @@
1
+ import { readFileSync, existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ export function readLocale(root) {
4
+ const configPath = join(root, 'logos', 'logos.config.json');
5
+ if (!existsSync(configPath))
6
+ return 'en';
7
+ try {
8
+ const config = JSON.parse(readFileSync(configPath, 'utf-8'));
9
+ if (config.locale === 'zh')
10
+ return 'zh';
11
+ }
12
+ catch { /* ignore */ }
13
+ return 'en';
14
+ }
15
+ const messages = {
16
+ en: {
17
+ // init
18
+ 'init.creating': 'Creating OpenLogos project structure for "{name}"{source}...',
19
+ 'init.done': 'Project initialized. Next steps:',
20
+ 'init.step1': ' 1. Review logos/logos.config.json to verify project settings',
21
+ 'init.nameTip': ' Tip: Project name "{name}" was auto-detected{source}.\n To change it, edit logos/logos.config.json and run `openlogos sync`.',
22
+ 'init.step2': ' 2. Start with Phase 1: tell AI "Help me write requirements"',
23
+ 'init.step3': ' 3. Run `openlogos status` to check progress at any time',
24
+ 'init.nameConflict': 'Project name conflict detected:',
25
+ 'init.nameChoice1': ' 1. "{name}" ← your input',
26
+ 'init.nameChoice2': ' 2. "{name}" ← from {source}',
27
+ 'init.namePrompt': 'Which name would you like to use? [1/2] (default: 1): ',
28
+ 'init.langPrompt': 'Your choice [1/2] (default: 1): ',
29
+ // status
30
+ 'phase.1': 'Phase 1 · Requirements (WHY)',
31
+ 'phase.2': 'Phase 2 · Product Design (WHAT)',
32
+ 'phase.3-0': 'Phase 3-0 · Architecture',
33
+ 'phase.3-1': 'Phase 3-1 · Scenario Modeling',
34
+ 'phase.3-2-api': 'Phase 3-2 · API Design',
35
+ 'phase.3-2-db': 'Phase 3-2 · Database Design',
36
+ 'phase.3-3a': 'Phase 3-3a · Test Case Design (Unit + Scenario)',
37
+ 'phase.3-3b': 'Phase 3-3b · API Orchestration Tests',
38
+ 'phase.3-5': 'Phase 3-5 · Test Acceptance (verify)',
39
+ 'status.activeProposals': 'Active Change Proposals',
40
+ 'status.allDone': 'All phases complete! Run `openlogos verify` to check test acceptance.',
41
+ 'status.allDoneHint': ' → Or tell AI: "Implement S01 according to specs"',
42
+ 'status.suggestNext': 'Suggested next step: {label}',
43
+ 'suggest.phase1': 'Tell AI: "Help me write requirements"',
44
+ 'suggest.phase2': 'Tell AI: "Do product design based on requirements"',
45
+ 'suggest.phase3-0': 'Tell AI: "Help me design the technical architecture"',
46
+ 'suggest.phase3-1': 'Tell AI: "Help me draw S01 sequence diagram"',
47
+ 'suggest.phase3-2-api': 'Tell AI: "Help me design the API"',
48
+ 'suggest.phase3-2-db': 'Tell AI: "Help me design the database"',
49
+ 'suggest.phase3-3a': 'Tell AI: "Help me design test cases"',
50
+ 'suggest.phase3-3b': 'Tell AI: "Help me design orchestration tests"',
51
+ 'suggest.phase3-5': 'Run your tests, then run `openlogos verify`',
52
+ 'suggest.fallback': 'Continue improving documents',
53
+ // verify
54
+ 'verify.title': 'OpenLogos Test Verification',
55
+ 'verify.readingResults': 'Reading test results: {path}',
56
+ 'verify.readingCases': 'Reading test cases: logos/resources/test/',
57
+ 'verify.summary': 'Results Summary',
58
+ 'verify.totalDefined': 'Total defined: {count} cases ({ut} UT + {st} ST)',
59
+ 'verify.totalExecuted': 'Total executed: {count} cases',
60
+ 'verify.passed': 'Passed: {count}',
61
+ 'verify.failed': 'Failed: {count}',
62
+ 'verify.skipped': 'Skipped: {count}',
63
+ 'verify.coverage': 'Coverage: {pct}% ({covered}/{total})',
64
+ 'verify.passRate': 'Pass rate: {pct}% ({passed}/{total})',
65
+ 'verify.gatePass': 'Gate 3.5: PASS',
66
+ 'verify.gateFail': 'Gate 3.5: FAIL',
67
+ 'verify.gateFailCoverage': 'Gate 3.5: FAIL (incomplete coverage)',
68
+ 'verify.failedCases': 'Failed cases:',
69
+ 'verify.uncoveredCases': 'Uncovered cases ({count}):',
70
+ 'verify.reportPath': 'Report: {path}',
71
+ 'verify.noResults': 'No test results found at {path}.\nRun your tests first, then try again.',
72
+ 'verify.noCases': 'No test case specs found in logos/resources/test/.\nRun test design (Step 3a) first.',
73
+ 'verify.checklistTitle': 'Design-time Coverage (Layer 1)',
74
+ 'verify.checklistSummary': 'Checklist: {checked}/{total} assertions confirmed',
75
+ 'verify.checklistUnchecked': 'Unchecked assertions ({count}):',
76
+ 'verify.gateFailChecklist': 'Gate 3.5: FAIL (design-time checklist incomplete)',
77
+ 'verify.acTitle': 'Acceptance Criteria Traceability (Layer 3)',
78
+ 'verify.acSummary': 'AC traceability: {passed}/{total} criteria passed',
79
+ 'verify.acFailed': 'Failing criteria ({count}):',
80
+ 'verify.gateFailAc': 'Gate 3.5: FAIL (acceptance criteria not fully traced)',
81
+ // change
82
+ 'change.creating': 'Creating change proposal: {slug}',
83
+ 'change.done': 'Change proposal created. Next steps:',
84
+ 'change.step1': ' 1. Tell AI: "Help me fill in change proposal {slug}"',
85
+ 'change.step2': ' 2. AI will analyze impact and fill in proposal.md + tasks.md',
86
+ 'change.step3': ' 3. Then work through tasks.md, putting deltas in deltas/',
87
+ 'change.step4': ' 4. When done, run `openlogos merge {slug}` to generate merge instructions',
88
+ // merge
89
+ 'merge.summary': 'Merge Summary:',
90
+ 'merge.proposal': ' - Change proposal: {slug}',
91
+ 'merge.deltaCount': ' - Delta files: {count}',
92
+ 'merge.aiHint': 'Tell AI: "Read logos/changes/{slug}/MERGE_PROMPT.md and execute merge"',
93
+ 'merge.archiveHint': 'After merge, run `openlogos archive {slug}` to archive the proposal.',
94
+ // archive
95
+ 'archive.done': '✓ Change proposal \'{slug}\' archived.',
96
+ 'archive.path': ' logos/changes/{slug}/ → logos/changes/archive/{slug}/',
97
+ },
98
+ zh: {
99
+ // init
100
+ 'init.creating': 'Creating OpenLogos project structure for "{name}"{source}...',
101
+ 'init.done': '项目初始化完成。下一步:',
102
+ 'init.step1': ' 1. 检查 logos/logos.config.json 确认项目配置',
103
+ 'init.nameTip': ' 提示:项目名 "{name}" 是自动探测的{source}。\n 如需修改,编辑 logos/logos.config.json 后运行 `openlogos sync`。',
104
+ 'init.step2': ' 2. 开始 Phase 1:对 AI 说「帮我写需求文档」',
105
+ 'init.step3': ' 3. 随时运行 `openlogos status` 查看进度',
106
+ 'init.nameConflict': '检测到项目名不一致:',
107
+ 'init.nameChoice1': ' 1. "{name}" ← 你的输入',
108
+ 'init.nameChoice2': ' 2. "{name}" ← 来自 {source}',
109
+ 'init.namePrompt': '使用哪个名称?[1/2](默认 1):',
110
+ 'init.langPrompt': '请选择 [1/2](默认 1):',
111
+ // status
112
+ 'phase.1': 'Phase 1 · 需求文档 (WHY)',
113
+ 'phase.2': 'Phase 2 · 产品设计 (WHAT)',
114
+ 'phase.3-0': 'Phase 3-0 · 技术架构',
115
+ 'phase.3-1': 'Phase 3-1 · 场景建模',
116
+ 'phase.3-2-api': 'Phase 3-2 · API 设计',
117
+ 'phase.3-2-db': 'Phase 3-2 · 数据库设计',
118
+ 'phase.3-3a': 'Phase 3-3a · 测试用例设计(单元 + 场景)',
119
+ 'phase.3-3b': 'Phase 3-3b · API 编排测试',
120
+ 'phase.3-5': 'Phase 3-5 · 测试验收(verify)',
121
+ 'status.activeProposals': '活跃变更提案',
122
+ 'status.allDone': '所有阶段已完成!运行 `openlogos verify` 查看测试验收结果。',
123
+ 'status.allDoneHint': ' → 或对 AI 说:「按 S01 的规格帮我实现」',
124
+ 'status.suggestNext': '建议下一步:{label}',
125
+ 'suggest.phase1': '对 AI 说:「帮我写需求文档」',
126
+ 'suggest.phase2': '对 AI 说:「基于需求文档做产品设计」',
127
+ 'suggest.phase3-0': '对 AI 说:「帮我设计技术架构」',
128
+ 'suggest.phase3-1': '对 AI 说:「帮我画 S01 的时序图」',
129
+ 'suggest.phase3-2-api': '对 AI 说:「帮我设计 API」',
130
+ 'suggest.phase3-2-db': '对 AI 说:「帮我设计数据库」',
131
+ 'suggest.phase3-3a': '对 AI 说:「帮我设计测试用例」',
132
+ 'suggest.phase3-3b': '对 AI 说:「帮我设计编排测试」',
133
+ 'suggest.phase3-5': '运行测试后执行 `openlogos verify`',
134
+ 'suggest.fallback': '继续完善文档',
135
+ // verify
136
+ 'verify.title': 'OpenLogos 测试验收',
137
+ 'verify.readingResults': '读取测试结果:{path}',
138
+ 'verify.readingCases': '读取测试用例:logos/resources/test/',
139
+ 'verify.summary': '结果摘要',
140
+ 'verify.totalDefined': '定义用例: {count} 个({ut} UT + {st} ST)',
141
+ 'verify.totalExecuted': '执行用例: {count} 个',
142
+ 'verify.passed': '通过: {count}',
143
+ 'verify.failed': '失败: {count}',
144
+ 'verify.skipped': '跳过: {count}',
145
+ 'verify.coverage': '覆盖度:{pct}%({covered}/{total})',
146
+ 'verify.passRate': '通过率:{pct}%({passed}/{total})',
147
+ 'verify.gatePass': 'Gate 3.5:PASS',
148
+ 'verify.gateFail': 'Gate 3.5:FAIL',
149
+ 'verify.gateFailCoverage': 'Gate 3.5:FAIL(覆盖不完整)',
150
+ 'verify.failedCases': '失败用例:',
151
+ 'verify.uncoveredCases': '未覆盖用例({count}):',
152
+ 'verify.reportPath': '报告:{path}',
153
+ 'verify.noResults': '未找到测试结果文件:{path}\n请先运行测试,再重试。',
154
+ 'verify.noCases': '未找到测试用例规格文件(logos/resources/test/)。\n请先完成测试设计(Step 3a)。',
155
+ 'verify.checklistTitle': '设计时覆盖度(Layer 1)',
156
+ 'verify.checklistSummary': '覆盖度校验:{checked}/{total} 项确认',
157
+ 'verify.checklistUnchecked': '未确认项({count}):',
158
+ 'verify.gateFailChecklist': 'Gate 3.5:FAIL(设计时覆盖度校验未通过)',
159
+ 'verify.acTitle': '验收条件追溯(Layer 3)',
160
+ 'verify.acSummary': '验收追溯:{passed}/{total} 个验收条件通过',
161
+ 'verify.acFailed': '未通过的验收条件({count}):',
162
+ 'verify.gateFailAc': 'Gate 3.5:FAIL(验收条件追溯未完全通过)',
163
+ // change
164
+ 'change.creating': '创建变更提案:{slug}',
165
+ 'change.done': '变更提案已创建。下一步:',
166
+ 'change.step1': ' 1. 对 AI 说:「帮我填写变更提案 {slug}」',
167
+ 'change.step2': ' 2. AI 将分析影响范围并填写 proposal.md + tasks.md',
168
+ 'change.step3': ' 3. 然后按 tasks.md 逐项产出 delta 文件到 deltas/',
169
+ 'change.step4': ' 4. 完成后运行 `openlogos merge {slug}` 生成合并指令',
170
+ // merge
171
+ 'merge.summary': '合并摘要:',
172
+ 'merge.proposal': ' - 变更提案:{slug}',
173
+ 'merge.deltaCount': ' - Delta 文件:{count} 个',
174
+ 'merge.aiHint': '对 AI 说:「读取 logos/changes/{slug}/MERGE_PROMPT.md 并执行合并」',
175
+ 'merge.archiveHint': '合并完成后,运行 `openlogos archive {slug}` 归档提案。',
176
+ // archive
177
+ 'archive.done': '✓ 变更提案 \'{slug}\' 已归档。',
178
+ 'archive.path': ' logos/changes/{slug}/ → logos/changes/archive/{slug}/',
179
+ },
180
+ };
181
+ export function t(locale, key, vars) {
182
+ let msg = messages[locale]?.[key] ?? messages['en'][key] ?? key;
183
+ if (vars) {
184
+ for (const [k, v] of Object.entries(vars)) {
185
+ msg = msg.replaceAll(`{${k}}`, v);
186
+ }
187
+ }
188
+ return msg;
189
+ }
190
+ // Phase label key mapping (used by status.ts)
191
+ export const PHASE_KEYS = [
192
+ 'phase.1', 'phase.2', 'phase.3-0', 'phase.3-1',
193
+ 'phase.3-2-api', 'phase.3-2-db', 'phase.3-3a', 'phase.3-3b',
194
+ 'phase.3-5',
195
+ ];
196
+ export const SUGGEST_KEYS = {
197
+ 'phase.1': 'suggest.phase1',
198
+ 'phase.2': 'suggest.phase2',
199
+ 'phase.3-0': 'suggest.phase3-0',
200
+ 'phase.3-1': 'suggest.phase3-1',
201
+ 'phase.3-2-api': 'suggest.phase3-2-api',
202
+ 'phase.3-2-db': 'suggest.phase3-2-db',
203
+ 'phase.3-3a': 'suggest.phase3-3a',
204
+ 'phase.3-3b': 'suggest.phase3-3b',
205
+ 'phase.3-5': 'suggest.phase3-5',
206
+ };
207
+ // --- Long-form templates ---
208
+ export function proposalTemplate(locale, slug) {
209
+ if (locale === 'zh') {
210
+ return `# 变更提案:${slug}
211
+
212
+ ## 变更原因
213
+ [为什么要做这个变更?来源于哪个需求/反馈/Bug?]
214
+
215
+ ## 变更类型
216
+ [需求级 / 设计级 / 接口级 / 代码级]
217
+
218
+ ## 变更范围
219
+ - 影响的需求文档:[列表]
220
+ - 影响的功能规格:[列表]
221
+ - 影响的业务场景:[列表]
222
+ - 影响的 API:[列表]
223
+ - 影响的 DB 表:[列表]
224
+ - 影响的编排测试:[列表]
225
+
226
+ ## 变更概述
227
+ [用 1-3 段话概述具体改什么]
228
+ `;
229
+ }
230
+ return `# Change Proposal: ${slug}
231
+
232
+ ## Reason
233
+ [Why is this change needed? Which requirement/feedback/bug triggered it?]
234
+
235
+ ## Change Type
236
+ [Requirements / Design / Interface / Code]
237
+
238
+ ## Scope
239
+ - Affected requirements: [list]
240
+ - Affected feature specs: [list]
241
+ - Affected scenarios: [list]
242
+ - Affected APIs: [list]
243
+ - Affected DB tables: [list]
244
+ - Affected orchestration tests: [list]
245
+
246
+ ## Summary
247
+ [Describe what will change in 1-3 paragraphs]
248
+ `;
249
+ }
250
+ export function tasksTemplate(locale) {
251
+ if (locale === 'zh') {
252
+ return `# 实现任务
253
+
254
+ ## Phase 1: 文档变更
255
+ - [ ] 更新需求文档的场景和验收条件
256
+ - [ ] 更新产品设计文档的功能规格
257
+
258
+ ## Phase 2: 设计变更
259
+ - [ ] 更新原型
260
+ - [ ] 更新场景时序图
261
+ - [ ] 更新 API YAML
262
+ - [ ] 更新 DB DDL
263
+
264
+ ## Phase 3: 编排与代码
265
+ - [ ] 更新 API 编排测试用例
266
+ - [ ] 实现代码变更
267
+ - [ ] 部署到测试环境
268
+ - [ ] 运行编排验收
269
+ `;
270
+ }
271
+ return `# Implementation Tasks
272
+
273
+ ## Phase 1: Document Changes
274
+ - [ ] Update requirements scenarios and acceptance criteria
275
+ - [ ] Update product design feature specs
276
+
277
+ ## Phase 2: Design Changes
278
+ - [ ] Update prototypes
279
+ - [ ] Update scenario sequence diagrams
280
+ - [ ] Update API YAML
281
+ - [ ] Update DB DDL
282
+
283
+ ## Phase 3: Orchestration & Code
284
+ - [ ] Update API orchestration test cases
285
+ - [ ] Implement code changes
286
+ - [ ] Deploy to test environment
287
+ - [ ] Run orchestration acceptance
288
+ `;
289
+ }
290
+ export function mergePromptTemplate(locale, slug, proposalContent, deltas) {
291
+ if (locale === 'zh') {
292
+ let prompt = `# 合并指令
293
+
294
+ ## 变更提案
295
+ - 提案名称:${slug}
296
+ - 提案目录:logos/changes/${slug}/
297
+
298
+ ## 提案内容
299
+
300
+ ${proposalContent}
301
+
302
+ ## 需要合并的 Delta 文件
303
+
304
+ `;
305
+ for (let i = 0; i < deltas.length; i++) {
306
+ const d = deltas[i];
307
+ prompt += `### ${i + 1}. ${d.relativePath}
308
+
309
+ - Delta 文件:\`${d.deltaFullPath}\`
310
+ - 目标目录:\`${d.targetDir}/\`
311
+ - 操作:读取 delta 中的 ADDED / MODIFIED / REMOVED 标记,合并到目标目录中对应的主文档
312
+
313
+ `;
314
+ }
315
+ prompt += `## 执行要求
316
+
317
+ 1. 逐个 Delta 文件处理,每处理完一个报告修改摘要
318
+ 2. 对于 ADDED 标记:在主文档的指定位置插入新内容
319
+ 3. 对于 MODIFIED 标记:替换主文档中同名章节的内容
320
+ 4. 对于 REMOVED 标记:从主文档中删除对应章节
321
+ 5. 保持主文档的原有格式和风格
322
+ 6. 如果主文档有"最后更新"时间戳,同步更新
323
+ 7. 所有变更完成后,列出修改清单
324
+ 8. 完成后提醒用户运行 \`openlogos archive ${slug}\`
325
+ `;
326
+ return prompt;
327
+ }
328
+ let prompt = `# Merge Instruction
329
+
330
+ ## Change Proposal
331
+ - Proposal: ${slug}
332
+ - Directory: logos/changes/${slug}/
333
+
334
+ ## Proposal Content
335
+
336
+ ${proposalContent}
337
+
338
+ ## Delta Files to Merge
339
+
340
+ `;
341
+ for (let i = 0; i < deltas.length; i++) {
342
+ const d = deltas[i];
343
+ prompt += `### ${i + 1}. ${d.relativePath}
344
+
345
+ - Delta file: \`${d.deltaFullPath}\`
346
+ - Target directory: \`${d.targetDir}/\`
347
+ - Action: Read ADDED / MODIFIED / REMOVED markers in the delta and merge into the corresponding main document in the target directory
348
+
349
+ `;
350
+ }
351
+ prompt += `## Execution Requirements
352
+
353
+ 1. Process each delta file one by one, report a summary after each
354
+ 2. For ADDED markers: insert new content at the specified location in the main document
355
+ 3. For MODIFIED markers: replace the content of the same-named section in the main document
356
+ 4. For REMOVED markers: delete the corresponding section from the main document
357
+ 5. Preserve the original formatting and style of the main document
358
+ 6. If the main document has a "last updated" timestamp, update it
359
+ 7. After all changes are complete, list the modification summary
360
+ 8. Remind the user to run \`openlogos archive ${slug}\`
361
+ `;
362
+ return prompt;
363
+ }
364
+ export function conventionsForYaml(locale) {
365
+ if (locale === 'zh') {
366
+ return `conventions:
367
+ - "遵循 OpenLogos 三层推进模型(Why → What → How)"
368
+ - "每次变更必须先创建 logos/changes/ 变更提案"`;
369
+ }
370
+ return `conventions:
371
+ - "Follow the OpenLogos three-layer progression (Why → What → How)"
372
+ - "Every change must start with a logos/changes/ change proposal"`;
373
+ }
374
+ export function conventionsForAgentsMd(locale) {
375
+ if (locale === 'zh') {
376
+ return `- 遵循 OpenLogos 三层推进模型(Why → What → How)
377
+ - 每次变更必须先创建 logos/changes/ 变更提案`;
378
+ }
379
+ return `- Follow the OpenLogos three-layer progression (Why → What → How)
380
+ - Every change must start with a logos/changes/ change proposal`;
381
+ }
382
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,QAAQ,GAA2C;IACvD,EAAE,EAAE;QACF,OAAO;QACP,eAAe,EAAE,8DAA8D;QAC/E,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EAAE,gEAAgE;QAC9E,cAAc,EAAE,sIAAsI;QACtJ,YAAY,EAAE,+DAA+D;QAC7E,YAAY,EAAE,2DAA2D;QACzE,mBAAmB,EAAE,iCAAiC;QACtD,kBAAkB,EAAE,6BAA6B;QACjD,kBAAkB,EAAE,mCAAmC;QACvD,iBAAiB,EAAE,wDAAwD;QAC3E,iBAAiB,EAAE,kCAAkC;QAErD,SAAS;QACT,SAAS,EAAE,8BAA8B;QACzC,SAAS,EAAE,iCAAiC;QAC5C,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE,+BAA+B;QAC5C,eAAe,EAAE,wBAAwB;QACzC,cAAc,EAAE,6BAA6B;QAC7C,YAAY,EAAE,iDAAiD;QAC/D,YAAY,EAAE,sCAAsC;QACpD,WAAW,EAAE,sCAAsC;QACnD,wBAAwB,EAAE,yBAAyB;QACnD,gBAAgB,EAAE,uEAAuE;QACzF,oBAAoB,EAAE,qDAAqD;QAC3E,oBAAoB,EAAE,8BAA8B;QACpD,gBAAgB,EAAE,uCAAuC;QACzD,gBAAgB,EAAE,oDAAoD;QACtE,kBAAkB,EAAE,sDAAsD;QAC1E,kBAAkB,EAAE,8CAA8C;QAClE,sBAAsB,EAAE,mCAAmC;QAC3D,qBAAqB,EAAE,wCAAwC;QAC/D,mBAAmB,EAAE,sCAAsC;QAC3D,mBAAmB,EAAE,+CAA+C;QACpE,kBAAkB,EAAE,6CAA6C;QACjE,kBAAkB,EAAE,8BAA8B;QAElD,SAAS;QACT,cAAc,EAAE,6BAA6B;QAC7C,uBAAuB,EAAE,8BAA8B;QACvD,qBAAqB,EAAE,2CAA2C;QAClE,gBAAgB,EAAE,iBAAiB;QACnC,qBAAqB,EAAE,mDAAmD;QAC1E,sBAAsB,EAAE,+BAA+B;QACvD,eAAe,EAAE,sBAAsB;QACvC,eAAe,EAAE,uBAAuB;QACxC,gBAAgB,EAAE,sBAAsB;QACxC,iBAAiB,EAAE,wCAAwC;QAC3D,iBAAiB,EAAE,uCAAuC;QAC1D,iBAAiB,EAAE,gBAAgB;QACnC,iBAAiB,EAAE,gBAAgB;QACnC,yBAAyB,EAAE,sCAAsC;QACjE,oBAAoB,EAAE,eAAe;QACrC,uBAAuB,EAAE,4BAA4B;QACrD,mBAAmB,EAAE,gBAAgB;QACrC,kBAAkB,EAAE,yEAAyE;QAC7F,gBAAgB,EAAE,sFAAsF;QACxG,uBAAuB,EAAE,gCAAgC;QACzD,yBAAyB,EAAE,mDAAmD;QAC9E,2BAA2B,EAAE,iCAAiC;QAC9D,0BAA0B,EAAE,mDAAmD;QAC/E,gBAAgB,EAAE,4CAA4C;QAC9D,kBAAkB,EAAE,mDAAmD;QACvE,iBAAiB,EAAE,6BAA6B;QAChD,mBAAmB,EAAE,uDAAuD;QAE5E,SAAS;QACT,iBAAiB,EAAE,kCAAkC;QACrD,aAAa,EAAE,sCAAsC;QACrD,cAAc,EAAE,wDAAwD;QACxE,cAAc,EAAE,gEAAgE;QAChF,cAAc,EAAE,4DAA4D;QAC5E,cAAc,EAAE,6EAA6E;QAE7F,QAAQ;QACR,eAAe,EAAE,gBAAgB;QACjC,gBAAgB,EAAE,6BAA6B;QAC/C,kBAAkB,EAAE,0BAA0B;QAC9C,cAAc,EAAE,wEAAwE;QACxF,mBAAmB,EAAE,sEAAsE;QAE3F,UAAU;QACV,cAAc,EAAE,wCAAwC;QACxD,cAAc,EAAE,yDAAyD;KAC1E;IACD,EAAE,EAAE;QACF,OAAO;QACP,eAAe,EAAE,8DAA8D;QAC/E,WAAW,EAAE,cAAc;QAC3B,YAAY,EAAE,wCAAwC;QACtD,cAAc,EAAE,iGAAiG;QACjH,YAAY,EAAE,iCAAiC;QAC/C,YAAY,EAAE,mCAAmC;QACjD,mBAAmB,EAAE,YAAY;QACjC,kBAAkB,EAAE,uBAAuB;QAC3C,kBAAkB,EAAE,iCAAiC;QACrD,iBAAiB,EAAE,qBAAqB;QACxC,iBAAiB,EAAE,kBAAkB;QAErC,SAAS;QACT,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,uBAAuB;QAClC,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,kBAAkB;QAC/B,eAAe,EAAE,oBAAoB;QACrC,cAAc,EAAE,mBAAmB;QACnC,YAAY,EAAE,8BAA8B;QAC5C,YAAY,EAAE,uBAAuB;QACrC,WAAW,EAAE,0BAA0B;QACvC,wBAAwB,EAAE,QAAQ;QAClC,gBAAgB,EAAE,yCAAyC;QAC3D,oBAAoB,EAAE,8BAA8B;QACpD,oBAAoB,EAAE,eAAe;QACrC,gBAAgB,EAAE,kBAAkB;QACpC,gBAAgB,EAAE,sBAAsB;QACxC,kBAAkB,EAAE,mBAAmB;QACvC,kBAAkB,EAAE,uBAAuB;QAC3C,sBAAsB,EAAE,mBAAmB;QAC3C,qBAAqB,EAAE,kBAAkB;QACzC,mBAAmB,EAAE,mBAAmB;QACxC,mBAAmB,EAAE,mBAAmB;QACxC,kBAAkB,EAAE,4BAA4B;QAChD,kBAAkB,EAAE,QAAQ;QAE5B,SAAS;QACT,cAAc,EAAE,gBAAgB;QAChC,uBAAuB,EAAE,eAAe;QACxC,qBAAqB,EAAE,8BAA8B;QACrD,gBAAgB,EAAE,MAAM;QACxB,qBAAqB,EAAE,qCAAqC;QAC5D,sBAAsB,EAAE,kBAAkB;QAC1C,eAAe,EAAE,gBAAgB;QACjC,eAAe,EAAE,iBAAiB;QAClC,gBAAgB,EAAE,iBAAiB;QACnC,iBAAiB,EAAE,+BAA+B;QAClD,iBAAiB,EAAE,8BAA8B;QACjD,iBAAiB,EAAE,eAAe;QAClC,iBAAiB,EAAE,eAAe;QAClC,yBAAyB,EAAE,sBAAsB;QACjD,oBAAoB,EAAE,OAAO;QAC7B,uBAAuB,EAAE,iBAAiB;QAC1C,mBAAmB,EAAE,WAAW;QAChC,kBAAkB,EAAE,+BAA+B;QACnD,gBAAgB,EAAE,yDAAyD;QAC3E,uBAAuB,EAAE,iBAAiB;QAC1C,yBAAyB,EAAE,6BAA6B;QACxD,2BAA2B,EAAE,gBAAgB;QAC7C,0BAA0B,EAAE,4BAA4B;QACxD,gBAAgB,EAAE,iBAAiB;QACnC,kBAAkB,EAAE,+BAA+B;QACnD,iBAAiB,EAAE,oBAAoB;QACvC,mBAAmB,EAAE,4BAA4B;QAEjD,SAAS;QACT,iBAAiB,EAAE,eAAe;QAClC,aAAa,EAAE,cAAc;QAC7B,cAAc,EAAE,+BAA+B;QAC/C,cAAc,EAAE,2CAA2C;QAC3D,cAAc,EAAE,0CAA0C;QAC1D,cAAc,EAAE,4CAA4C;QAE5D,QAAQ;QACR,eAAe,EAAE,OAAO;QACxB,gBAAgB,EAAE,iBAAiB;QACnC,kBAAkB,EAAE,wBAAwB;QAC5C,cAAc,EAAE,wDAAwD;QACxE,mBAAmB,EAAE,2CAA2C;QAEhE,UAAU;QACV,cAAc,EAAE,wBAAwB;QACxC,cAAc,EAAE,yDAAyD;KAC1E;CACF,CAAC;AAEF,MAAM,UAAU,CAAC,CAAC,MAAc,EAAE,GAAW,EAAE,IAA6B;IAC1E,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IAChE,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;IAC9C,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY;IAC3D,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,SAAS,EAAE,gBAAgB;IAC3B,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,kBAAkB;IAC/B,eAAe,EAAE,sBAAsB;IACvC,cAAc,EAAE,qBAAqB;IACrC,YAAY,EAAE,mBAAmB;IACjC,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,kBAAkB;CAChC,CAAC;AAEF,8BAA8B;AAE9B,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,IAAY;IAC3D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,UAAU,IAAI;;;;;;;;;;;;;;;;;;CAkBxB,CAAC;IACA,CAAC;IACD,OAAO,sBAAsB,IAAI;;;;;;;;;;;;;;;;;;CAkBlC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;;;;;;;;;;;;;;;;;CAiBV,CAAC;IACA,CAAC;IACD,OAAO;;;;;;;;;;;;;;;;;CAiBR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,IAAY,EACZ,eAAuB,EACvB,MAAiF;IAEjF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,MAAM,GAAG;;;SAGR,IAAI;uBACU,IAAI;;;;EAIzB,eAAe;;;;CAIhB,CAAC;QACE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY;;eAEhC,CAAC,CAAC,aAAa;WACnB,CAAC,CAAC,SAAS;;;CAGrB,CAAC;QACE,CAAC;QACD,MAAM,IAAI;;;;;;;;;mCASqB,IAAI;CACtC,CAAC;QACE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,GAAG;;;cAGD,IAAI;6BACW,IAAI;;;;EAI/B,eAAe;;;;CAIhB,CAAC;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY;;kBAE3B,CAAC,CAAC,aAAa;wBACT,CAAC,CAAC,SAAS;;;CAGlC,CAAC;IACA,CAAC;IACD,MAAM,IAAI;;;;;;;;;gDASoC,IAAI;CACnD,CAAC;IACA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;;oCAEyB,CAAC;IACnC,CAAC;IACD,OAAO;;oEAE2D,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;gCACqB,CAAC;IAC/B,CAAC;IACD,OAAO;gEACuD,CAAC;AACjE,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env node
2
+ import { init } from './commands/init.js';
3
+ import { sync } from './commands/sync.js';
4
+ import { status } from './commands/status.js';
5
+ import { change } from './commands/change.js';
6
+ import { merge } from './commands/merge.js';
7
+ import { archive } from './commands/archive.js';
8
+ import { verify } from './commands/verify.js';
9
+ const HELP = `
10
+ openlogos - CLI tool for the OpenLogos methodology
11
+
12
+ Usage:
13
+ openlogos <command> [options]
14
+
15
+ Commands:
16
+ init [name] Initialize a new OpenLogos project structure
17
+ sync Regenerate AI instruction files (AGENTS.md, CLAUDE.md)
18
+ status Show current project phase and suggest next steps
19
+ verify Verify test results against test case specs
20
+ change <slug> Create a change proposal for iterative updates
21
+ merge <slug> Generate MERGE_PROMPT.md for AI to execute delta merging
22
+ archive <slug> Archive a completed change proposal
23
+
24
+ Options:
25
+ --help, -h Show this help message
26
+ --version, -v Show version number
27
+
28
+ Examples:
29
+ openlogos init my-saas-project
30
+ openlogos sync
31
+ openlogos status
32
+ openlogos verify
33
+ openlogos change add-remember-me
34
+ openlogos merge add-remember-me
35
+ openlogos archive add-remember-me
36
+
37
+ Learn more: https://openlogos.ai
38
+ `;
39
+ const VERSION = '0.1.0';
40
+ async function main() {
41
+ const args = process.argv.slice(2);
42
+ if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
43
+ console.log(HELP);
44
+ process.exit(0);
45
+ }
46
+ if (args.includes('--version') || args.includes('-v')) {
47
+ console.log(VERSION);
48
+ process.exit(0);
49
+ }
50
+ const command = args[0];
51
+ switch (command) {
52
+ case 'init':
53
+ await init(args[1]);
54
+ break;
55
+ case 'sync':
56
+ sync();
57
+ break;
58
+ case 'status':
59
+ status();
60
+ break;
61
+ case 'verify':
62
+ verify();
63
+ break;
64
+ case 'change':
65
+ change(args[1]);
66
+ break;
67
+ case 'merge':
68
+ merge(args[1]);
69
+ break;
70
+ case 'archive':
71
+ archive(args[1]);
72
+ break;
73
+ default:
74
+ console.error(`Unknown command: ${command}`);
75
+ console.log(HELP);
76
+ process.exit(1);
77
+ }
78
+ }
79
+ main();
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BZ,CAAC;AAEF,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM;QACR,KAAK,MAAM;YACT,IAAI,EAAE,CAAC;YACP,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,EAAE,CAAC;YACT,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,EAAE,CAAC;YACT,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM;QACR,KAAK,OAAO;YACV,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,MAAM;QACR,KAAK,SAAS;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@miniidealab/openlogos",
3
+ "version": "0.2.0",
4
+ "description": "CLI tool for the OpenLogos software engineering methodology",
5
+ "type": "module",
6
+ "bin": {
7
+ "openlogos": "dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch",
12
+ "start": "node dist/index.js",
13
+ "lint": "eslint src/",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest"
16
+ },
17
+ "keywords": [
18
+ "openlogos",
19
+ "software-engineering",
20
+ "methodology",
21
+ "ai",
22
+ "cli"
23
+ ],
24
+ "author": "MiniIdea",
25
+ "license": "Apache-2.0",
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "homepage": "https://openlogos.ai",
30
+ "bugs": {
31
+ "url": "https://github.com/miniidealab/openlogos/issues"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/miniidealab/openlogos.git",
36
+ "directory": "cli"
37
+ },
38
+ "engines": {
39
+ "node": ">=18.0.0"
40
+ },
41
+ "files": [
42
+ "dist"
43
+ ],
44
+ "devDependencies": {
45
+ "@eslint/js": "^9.39.4",
46
+ "@types/node": "^25.5.0",
47
+ "eslint": "^9.39.4",
48
+ "typescript": "^6.0.2",
49
+ "typescript-eslint": "^8.58.0",
50
+ "vitest": "^3.2.4"
51
+ }
52
+ }