speccrew 0.5.6 → 0.5.8

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.
@@ -90,28 +90,11 @@ flowchart LR
90
90
 
91
91
  ---
92
92
 
93
- ## 3. Sıfırıncı Adım: Proje Teşhisi ve Bilgi Tabanı Başlatma
93
+ ## 3. Sıfırıncı Adım: Bilgi Tabanı Başlatma
94
94
 
95
95
  Resmi mühendislik sürecini başlatmadan önce proje bilgi tabanını başlatmanız gerekir.
96
96
 
97
- ### 3.1 Proje Teşhisi
98
-
99
- **Örnek Konuşma**:
100
- ```
101
- @speccrew-team-leader projeyi teşhis et
102
- ```
103
-
104
- **Ajan Ne Yapacak**:
105
- - Proje yapısını tara
106
- - Teknoloji yığınını tespit et
107
- - İş modüllerini tanımla
108
-
109
- **Çıktı**:
110
- ```
111
- speccrew-workspace/knowledges/base/diagnosis-reports/diagnosis-report-{date}.md
112
- ```
113
-
114
- ### 3.2 Teknik Bilgi Tabanı Başlatma
97
+ ### 3.1 Teknik Bilgi Tabanı Başlatma
115
98
 
116
99
  **Örnek Konuşma**:
117
100
  ```
@@ -133,7 +116,7 @@ speccrew-workspace/knowledges/techs/{platform-id}/
133
116
  └── INDEX.md # İndeks dosyası
134
117
  ```
135
118
 
136
- ### 3.3 İş Bilgi Tabanı Başlatma
119
+ ### 3.2 İş Bilgi Tabanı Başlatma
137
120
 
138
121
  **Örnek Konuşma**:
139
122
  ```
@@ -466,11 +449,24 @@ speccrew update
466
449
 
467
450
  > **Not**: Her iki adım da gereklidir. Yalnızca `speccrew update` çalıştırmak CLI aracının kendisini güncellemez; yalnızca `npm install` çalıştırmak proje dosyalarını güncellemez.
468
451
 
469
- ### S5: Geçmiş iterasyonları nasıl görüntülerim?
452
+ ### S5: `speccrew update` yeni sürüm gösteriyor ancak kurulumdan sonra hala eski sürüm?
453
+
454
+ Genellikle npm önbelleğinden kaynaklanır. Çözüm:
455
+ ```bash
456
+ npm cache clean --force
457
+ npm install -g speccrew@latest
458
+ npm list -g speccrew
459
+ ```
460
+ Hala çalışmazsa, belirli bir sürüm yükleyin:
461
+ ```bash
462
+ npm install -g speccrew@0.5.6
463
+ ```
464
+
465
+ ### S6: Geçmiş iterasyonları nasıl görüntülerim?
470
466
 
471
467
  Arşivledikten sonra `speccrew-workspace/iteration-archives/` içinde inceleyin, `{numara}-{tip}-{isim}-{tarih}/` formatında düzenlenmiştir.
472
468
 
473
- ### S6: Bilgi tabanının düzenli olarak güncellenmesi gerekiyor mu?
469
+ ### S7: Bilgi tabanının düzenli olarak güncellenmesi gerekiyor mu?
474
470
 
475
471
  Aşağıdaki durumlarda yeniden başlatma gerekir:
476
472
  - Proje yapısında önemli değişiklikler
@@ -485,7 +481,6 @@ Aşağıdaki durumlarda yeniden başlatma gerekir:
485
481
 
486
482
  | Aşama | Ajan | Başlangıç Konuşması |
487
483
  |------|-------|-------------------|
488
- | Teşhis | Team Leader | `@speccrew-team-leader projeyi teşhis et` |
489
484
  | Başlatma | Team Leader | `@speccrew-team-leader teknik bilgi tabanını başlat` |
490
485
  | Gereksinim Analizi | Product Manager | `@speccrew-product-manager yeni bir gereksinimim var: [açıklama]` |
491
486
  | Özellik Tasarımı | Feature Designer | `@speccrew-feature-designer özellik tasarımına başla` |
@@ -519,5 +514,5 @@ Aşağıdaki durumlarda yeniden başlatma gerekir:
519
514
  ## Sonraki Adımlar
520
515
 
521
516
  1. Projenizi başlatmak için `speccrew init --ide qoder` çalıştırın
522
- 2. Sıfırıncı Adımı uygulayın: Proje Teşhisi ve Bilgi Tabanı Başlatma
517
+ 2. Sıfırıncı Adımı uygulayın: Bilgi Tabanı Başlatma
523
518
  3. İş akışını takip ederek her aşamada ilerleyin, şart odaklı geliştirme deneyiminin keyfini çıkarın!
@@ -90,28 +90,11 @@ flowchart LR
90
90
 
91
91
  ---
92
92
 
93
- ## 3. Нульовий Крок: Діагностика Проекту та Ініціалізація Бази Знань
93
+ ## 3. Нульовий Крок: Ініціалізація Бази Знань
94
94
 
95
95
  Перед початком формального інженерного процесу необхідно ініціалізувати базу знань проекту.
96
96
 
97
- ### 3.1 Діагностика Проекту
98
-
99
- **Приклад Діалогу**:
100
- ```
101
- @speccrew-team-leader діагностувати проект
102
- ```
103
-
104
- **Що Зробить Агент**:
105
- - Сканування структури проекту
106
- - Виявлення технологічного стеку
107
- - Ідентифікація бізнес-модулів
108
-
109
- **Результат**:
110
- ```
111
- speccrew-workspace/knowledges/base/diagnosis-reports/diagnosis-report-{date}.md
112
- ```
113
-
114
- ### 3.2 Ініціалізація Технічної Бази Знань
97
+ ### 3.1 Ініціалізація Технічної Бази Знань
115
98
 
116
99
  **Приклад Діалогу**:
117
100
  ```
@@ -133,7 +116,7 @@ speccrew-workspace/knowledges/techs/{platform-id}/
133
116
  └── INDEX.md # Файл індексу
134
117
  ```
135
118
 
136
- ### 3.3 Ініціалізація Бізнес-Бази Знань
119
+ ### 3.2 Ініціалізація Бізнес-Бази Знань
137
120
 
138
121
  **Приклад Діалогу**:
139
122
  ```
@@ -466,11 +449,24 @@ speccrew update
466
449
 
467
450
  > **Примітка**: Обидва етапи обов'язкові. Виконання тільки `speccrew update` не оновить сам CLI-інструмент; виконання тільки `npm install` не оновить файли проекту.
468
451
 
469
- ### П5: Як переглянути історичні ітерації?
452
+ ### П5: `speccrew update` показує нову версію, але після встановлення все ще стара?
453
+
454
+ Зазвичай це викликано кешем npm. Рішення:
455
+ ```bash
456
+ npm cache clean --force
457
+ npm install -g speccrew@latest
458
+ npm list -g speccrew
459
+ ```
460
+ Якщо все ще не працює, встановіть конкретну версію:
461
+ ```bash
462
+ npm install -g speccrew@0.5.6
463
+ ```
464
+
465
+ ### П6: Як переглянути історичні ітерації?
470
466
 
471
467
  Після архівування перегляньте в `speccrew-workspace/iteration-archives/`, організовано у форматі `{номер}-{тип}-{ім'я}-{дата}/`.
472
468
 
473
- ### П6: Чи база знань потребує регулярного оновлення?
469
+ ### П7: Чи база знань потребує регулярного оновлення?
474
470
 
475
471
  Реініціалізація потрібна в наступних ситуаціях:
476
472
  - Значні зміни структури проекту
@@ -485,7 +481,6 @@ speccrew update
485
481
 
486
482
  | Етап | Агент | Початковий Діалог |
487
483
  |------|-------|-------------------|
488
- | Діагностика | Team Leader | `@speccrew-team-leader діагностувати проект` |
489
484
  | Ініціалізація | Team Leader | `@speccrew-team-leader ініціалізувати технічну базу знань` |
490
485
  | Аналіз Вимог | Product Manager | `@speccrew-product-manager у мене нова вимога: [опис]` |
491
486
  | Проектування Функцій | Feature Designer | `@speccrew-feature-designer розпочати проектування функцій` |
@@ -519,5 +514,5 @@ speccrew update
519
514
  ## Наступні Кроки
520
515
 
521
516
  1. Виконайте `speccrew init --ide qoder` для ініціалізації вашого проекту
522
- 2. Виконайте Нульовий Крок: Діагностика Проекту та Ініціалізація Бази Знань
517
+ 2. Виконайте Нульовий Крок: Ініціалізація Бази Знань
523
518
  3. Просувайтесь через кожен етап слідуючи робочому процесу, насолоджуйтесь досвідом розробки на основі специфікацій!
@@ -90,28 +90,11 @@ flowchart LR
90
90
 
91
91
  ---
92
92
 
93
- ## 3. Bước Không: Chẩn Đoán Dự Án và Khởi Tạo Cơ Sở Kiến Thức
93
+ ## 3. Bước Không: Khởi Tạo Cơ Sở Kiến Thức
94
94
 
95
95
  Trước khi bắt đầu quy trình kỹ thuật chính thức, bạn cần khởi tạo cơ sở kiến thức của dự án.
96
96
 
97
- ### 3.1 Chẩn Đoán Dự Án
98
-
99
- **Ví Dụ Hội Thoại**:
100
- ```
101
- @speccrew-team-leader chẩn đoán dự án
102
- ```
103
-
104
- **Agent Sẽ Làm Gì**:
105
- - Quét cấu trúc dự án
106
- - Phát hiện công nghệ stack
107
- - Xác định các module nghiệp vụ
108
-
109
- **Kết Quả**:
110
- ```
111
- speccrew-workspace/knowledges/base/diagnosis-reports/diagnosis-report-{date}.md
112
- ```
113
-
114
- ### 3.2 Khởi Tạo Cơ Sở Kiến Thức Kỹ Thuật
97
+ ### 3.1 Khởi Tạo Sở Kiến Thức Kỹ Thuật
115
98
 
116
99
  **Ví Dụ Hội Thoại**:
117
100
  ```
@@ -133,7 +116,7 @@ speccrew-workspace/knowledges/techs/{platform-id}/
133
116
  └── INDEX.md # Tệp chỉ mục
134
117
  ```
135
118
 
136
- ### 3.3 Khởi Tạo Cơ Sở Kiến Thức Nghiệp Vụ
119
+ ### 3.2 Khởi Tạo Cơ Sở Kiến Thức Nghiệp Vụ
137
120
 
138
121
  **Ví Dụ Hội Thoại**:
139
122
  ```
@@ -466,11 +449,24 @@ speccrew update
466
449
 
467
450
  > **Lưu ý**: Cả hai bước đều cần thiết. Chỉ chạy `speccrew update` sẽ không cập nhật chính công cụ CLI; chỉ chạy `npm install` sẽ không cập nhật các tệp dự án.
468
451
 
469
- ### H5: Làm thế nào để xem các iteration lịch sử?
452
+ ### H5: `speccrew update` hiển thị phiên bản mới nhưng sau cài đặt vẫn là phiên bản cũ?
453
+
454
+ Thường do bộ nhớ cache npm. Cách giải quyết:
455
+ ```bash
456
+ npm cache clean --force
457
+ npm install -g speccrew@latest
458
+ npm list -g speccrew
459
+ ```
460
+ Nếu vẫn không được, hãy cài đặt phiên bản cụ thể:
461
+ ```bash
462
+ npm install -g speccrew@0.5.6
463
+ ```
464
+
465
+ ### H6: Làm thế nào để xem các iteration lịch sử?
470
466
 
471
467
  Sau khi lưu trữ, xem trong `speccrew-workspace/iteration-archives/`, được tổ chức theo định dạng `{số}-{loại}-{tên}-{ngày}/`.
472
468
 
473
- ### H6: Cơ sở kiến thức có cần cập nhật thường xuyên không?
469
+ ### H7: Cơ sở kiến thức có cần cập nhật thường xuyên không?
474
470
 
475
471
  Cần khởi tạo lại trong các tình huống sau:
476
472
  - Thay đổi đáng kể về cấu trúc dự án
@@ -485,7 +481,6 @@ Cần khởi tạo lại trong các tình huống sau:
485
481
 
486
482
  | Giai Đoạn | Agent | Hội Thoại Bắt Đầu |
487
483
  |------|-------|-------------------|
488
- | Chẩn Đoán | Team Leader | `@speccrew-team-leader chẩn đoán dự án` |
489
484
  | Khởi Tạo | Team Leader | `@speccrew-team-leader khởi tạo cơ sở kiến thức kỹ thuật` |
490
485
  | Phân Tích Yêu Cầu | Product Manager | `@speccrew-product-manager tôi có yêu cầu mới: [mô tả]` |
491
486
  | Thiết Kế Tính Năng | Feature Designer | `@speccrew-feature-designer bắt đầu thiết kế tính năng` |
@@ -519,5 +514,5 @@ Cần khởi tạo lại trong các tình huống sau:
519
514
  ## 9. Bước Tiếp Theo
520
515
 
521
516
  1. Chạy `speccrew init --ide qoder` để khởi tạo dự án của bạn
522
- 2. Thực hiện Bước Không: Chẩn Đoán Dự Án và Khởi Tạo Cơ Sở Kiến Thức
517
+ 2. Thực hiện Bước Không: Khởi Tạo Cơ Sở Kiến Thức
523
518
  3. Tiến bộ qua từng giai đoạn theo quy trình làm việc, tận hưởng trải nghiệm phát triển dựa trên đặc tả!
@@ -89,28 +89,11 @@ flowchart LR
89
89
 
90
90
  ---
91
91
 
92
- ## 3. 第零步:專案診斷與知識庫初始化
92
+ ## 3. 第零步:知識庫初始化
93
93
 
94
94
  在開始正式工程流程前,需要先初始化專案知識庫。
95
95
 
96
- ### 3.1 專案診斷
97
-
98
- **對話範例**:
99
- ```
100
- @speccrew-team-leader 診斷專案
101
- ```
102
-
103
- **Agent 會做什麼**:
104
- - 掃描專案結構
105
- - 偵測技術棧
106
- - 識別業務模組
107
-
108
- **產出物**:
109
- ```
110
- speccrew-workspace/knowledges/base/diagnosis-reports/diagnosis-report-{date}.md
111
- ```
112
-
113
- ### 3.2 技術知識庫初始化
96
+ ### 3.1 技術知識庫初始化
114
97
 
115
98
  **對話範例**:
116
99
  ```
@@ -132,7 +115,7 @@ speccrew-workspace/knowledges/techs/{platform-id}/
132
115
  └── INDEX.md # 索引檔案
133
116
  ```
134
117
 
135
- ### 3.3 業務知識庫初始化
118
+ ### 3.2 業務知識庫初始化
136
119
 
137
120
  **對話範例**:
138
121
  ```
@@ -465,11 +448,29 @@ speccrew update
465
448
 
466
449
  > **注意**:兩個步驟都需要執行。只執行 `speccrew update` 不會更新 CLI 工具本身;只執行 `npm install` 不會更新專案檔案。
467
450
 
468
- ### Q5: 如何查看歷史迭代?
451
+ ### Q5: `speccrew update` 顯示有新版本可用,但 `npm install -g speccrew@latest` 仍然安裝舊版本?
452
+
453
+ 這通常是 npm 緩存造成的。解決方法:
454
+
455
+ ```bash
456
+ # 清除 npm 緩存並重新安裝
457
+ npm cache clean --force
458
+ npm install -g speccrew@latest
459
+
460
+ # 驗證版本
461
+ npm list -g speccrew
462
+ ```
463
+
464
+ 如果仍然無效,嘗試使用特定版本號安裝:
465
+ ```bash
466
+ npm install -g speccrew@0.5.6
467
+ ```
468
+
469
+ ### Q6: 如何查看歷史迭代?
469
470
 
470
471
  歸檔後在 `speccrew-workspace/iteration-archives/` 中查看,按 `{序號}-{類型}-{名稱}-{日期}/` 格式組織。
471
472
 
472
- ### Q6: 知識庫需要定期更新嗎?
473
+ ### Q7: 知識庫需要定期更新嗎?
473
474
 
474
475
  以下情況需要重新初始化:
475
476
  - 專案結構發生重大變化
@@ -484,7 +485,6 @@ speccrew update
484
485
 
485
486
  | 階段 | Agent | 啟動對話 |
486
487
  |------|-------|----------|
487
- | 診斷 | Team Leader | `@speccrew-team-leader 診斷專案` |
488
488
  | 初始化 | Team Leader | `@speccrew-team-leader 初始化技術知識庫` |
489
489
  | 需求分析 | Product Manager | `@speccrew-product-manager 我有一個新需求:[描述]` |
490
490
  | 功能設計 | Feature Designer | `@speccrew-feature-designer 開始功能設計` |
@@ -518,5 +518,5 @@ speccrew update
518
518
  ## 9. 下一步
519
519
 
520
520
  1. 執行 `speccrew init --ide qoder` 初始化您的專案
521
- 2. 執行第零步:專案診斷與知識庫初始化
521
+ 2. 執行第零步:知識庫初始化
522
522
  3. 按照工作流程逐階段推進,享受規範驅動的開發體驗!
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "speccrew",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "description": "Spec-Driven Development toolkit for AI-powered IDEs",
5
5
  "author": "charlesmu99",
6
6
  "repository": {
@@ -225,7 +225,10 @@ function parseArgs() {
225
225
  description: null,
226
226
  startedAt: null,
227
227
  completedAt: null,
228
- confirmedAt: null
228
+ confirmedAt: null,
229
+ featuresDir: null,
230
+ platforms: null,
231
+ force: false
229
232
  };
230
233
 
231
234
  // 第一个参数是命令
@@ -314,6 +317,18 @@ function parseArgs() {
314
317
  case '-Overview':
315
318
  result.overview = true;
316
319
  break;
320
+ case '--features-dir':
321
+ case '-Features-Dir':
322
+ result.featuresDir = args[++i];
323
+ break;
324
+ case '--platforms':
325
+ case '-Platforms':
326
+ result.platforms = args[++i];
327
+ break;
328
+ case '--force':
329
+ case '-Force':
330
+ result.force = true;
331
+ break;
317
332
  }
318
333
  }
319
334
 
@@ -785,6 +800,154 @@ function cmdUpdateWorkflow(args) {
785
800
  }
786
801
  }
787
802
 
803
+ /**
804
+ * 命令:init-tasks - 扫描 feature-design 目录生成任务列表
805
+ */
806
+ function cmdInitTasks(args) {
807
+ // 参数验证
808
+ if (!args.file || !args.stage || !args.featuresDir || !args.platforms) {
809
+ outputError('Usage: init-tasks --file <path> --stage <stage_name> --features-dir <dir> --platforms <comma-separated> [--force]');
810
+ }
811
+
812
+ const filePath = path.resolve(args.file);
813
+ const featuresDir = path.resolve(args.featuresDir);
814
+ const platforms = args.platforms.split(',').map(p => p.trim()).filter(p => p);
815
+
816
+ // 验证 platforms 非空
817
+ if (platforms.length === 0) {
818
+ outputError('Platforms list cannot be empty');
819
+ }
820
+
821
+ // 验证 features-dir 存在
822
+ if (!fs.existsSync(featuresDir)) {
823
+ outputError(`Features directory not found: ${featuresDir}`);
824
+ }
825
+
826
+ // 扫描 .feature-spec.md 文件
827
+ const featureFiles = [];
828
+ const files = fs.readdirSync(featuresDir);
829
+ for (const file of files) {
830
+ if (file.endsWith('.feature-spec.md')) {
831
+ featureFiles.push(file);
832
+ }
833
+ }
834
+
835
+ if (featureFiles.length === 0) {
836
+ outputError(`No .feature-spec.md files found in: ${featuresDir}`);
837
+ }
838
+
839
+ // 从文件名提取 feature 信息
840
+ // 格式: F-{MODULE}-{NNN}-{feature-name}.feature-spec.md
841
+ const featurePattern = /^(F-([A-Z]+)-\d+)-(.+)\.feature-spec\.md$/;
842
+ const features = [];
843
+
844
+ for (const file of featureFiles) {
845
+ const match = file.match(featurePattern);
846
+ if (match) {
847
+ features.push({
848
+ feature_id: match[1], // F-APPT-001
849
+ module: match[2], // APPT
850
+ name: match[3], // 预约信息CRUD
851
+ file: file
852
+ });
853
+ }
854
+ }
855
+
856
+ if (features.length === 0) {
857
+ outputError('No valid feature files found. Expected format: F-{MODULE}-{NNN}-{feature-name}.feature-spec.md');
858
+ }
859
+
860
+ // 按 feature ID 排序
861
+ features.sort((a, b) => a.feature_id.localeCompare(b.feature_id));
862
+
863
+ // 检查目标文件是否已有 tasks
864
+ if (fs.existsSync(filePath)) {
865
+ const existingData = readJsonFile(filePath);
866
+ if (existingData.tasks && existingData.tasks.length > 0 && !args.force) {
867
+ outputError(`Progress file already has ${existingData.tasks.length} tasks. Use --force to overwrite.`);
868
+ }
869
+ }
870
+
871
+ // 生成任务列表
872
+ const tasks = [];
873
+ const now = getTimestamp();
874
+
875
+ // Module 排序顺序
876
+ const moduleOrder = ['APPT', 'BASE', 'CUST', 'EMP', 'ITEM', 'KNW', 'REPORT', 'REV', 'SERV'];
877
+ const getModuleIndex = (module) => {
878
+ const idx = moduleOrder.indexOf(module);
879
+ return idx === -1 ? 999 : idx;
880
+ };
881
+
882
+ // 按 module 分组
883
+ const featuresByModule = {};
884
+ for (const feature of features) {
885
+ if (!featuresByModule[feature.module]) {
886
+ featuresByModule[feature.module] = [];
887
+ }
888
+ featuresByModule[feature.module].push(feature);
889
+ }
890
+
891
+ // 每个 module 内按 feature ID 排序
892
+ for (const module of Object.keys(featuresByModule)) {
893
+ featuresByModule[module].sort((a, b) => a.feature_id.localeCompare(b.feature_id));
894
+ }
895
+
896
+ // 按 module 顺序生成任务
897
+ const sortedModules = Object.keys(featuresByModule).sort((a, b) => getModuleIndex(a) - getModuleIndex(b));
898
+
899
+ for (const module of sortedModules) {
900
+ for (const feature of featuresByModule[module]) {
901
+ for (const platform of platforms) {
902
+ tasks.push({
903
+ id: `sd-${platform}-${feature.feature_id}`,
904
+ name: `System Design - ${platform} - ${feature.feature_id} ${feature.name}`,
905
+ status: 'pending',
906
+ platform: platform,
907
+ feature_id: feature.feature_id,
908
+ module: feature.module,
909
+ created_at: now
910
+ });
911
+ }
912
+ }
913
+ }
914
+
915
+ // 创建进度文件结构
916
+ const progressData = {
917
+ stage: args.stage,
918
+ created_at: now,
919
+ updated_at: now,
920
+ counts: calculateCounts(tasks),
921
+ tasks: tasks,
922
+ checkpoints: {}
923
+ };
924
+
925
+ // 确保目录存在
926
+ const dir = path.dirname(filePath);
927
+ if (!fs.existsSync(dir)) {
928
+ fs.mkdirSync(dir, { recursive: true });
929
+ }
930
+
931
+ // 获取锁并写入
932
+ let lockPath = null;
933
+ try {
934
+ lockPath = acquireLock(filePath);
935
+ atomicWriteJson(filePath, progressData);
936
+ outputSuccess(
937
+ `Generated ${tasks.length} tasks from ${features.length} features × ${platforms.length} platforms`,
938
+ {
939
+ file: filePath,
940
+ stage: args.stage,
941
+ features_count: features.length,
942
+ platforms: platforms,
943
+ counts: progressData.counts
944
+ }
945
+ );
946
+ } finally {
947
+ if (lockPath) releaseLock(lockPath);
948
+ }
949
+ }
950
+
788
951
  // ============================================================================
789
952
  // 主入口
790
953
  // ============================================================================
@@ -803,6 +966,7 @@ function main() {
803
966
  console.error(' update-counts Recalculate task counts');
804
967
  console.error(' write-checkpoint Write or update a checkpoint');
805
968
  console.error(' update-workflow Update a workflow stage status');
969
+ console.error(' init-tasks Generate tasks from feature-spec files');
806
970
  console.error('');
807
971
  console.error('Run "node update-progress.js <command> --help" for more information.');
808
972
  process.exit(1);
@@ -829,6 +993,9 @@ function main() {
829
993
  case 'update-workflow':
830
994
  cmdUpdateWorkflow(args);
831
995
  break;
996
+ case 'init-tasks':
997
+ cmdInitTasks(args);
998
+ break;
832
999
  default:
833
1000
  outputError(`Unknown command: ${args.command}`);
834
1001
  }