@torus-engineering/tas-kit 1.6.0 → 1.7.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/.tas/templates/SAD.md +221 -11
- package/bin/cli.js +13 -6
- package/lib/install.js +68 -6
- package/package.json +2 -2
package/.tas/templates/SAD.md
CHANGED
|
@@ -7,58 +7,268 @@
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## 1. Executive Summary
|
|
10
|
+
|
|
11
|
+
<!-- MANDATORY. Viết cho người đọc không có technical background.
|
|
12
|
+
Bắt buộc:
|
|
13
|
+
- 1.1 Purpose: Tại sao SAD này tồn tại, vấn đề gì cần giải quyết
|
|
14
|
+
- 1.2 Scope: Hệ thống nào, ranh giới nào được/không được cover
|
|
15
|
+
- 1.3 Key Objectives: 3-5 mục tiêu kiến trúc cụ thể, đo lường được
|
|
16
|
+
Format: Prose ngắn, tối đa 1 trang tổng cộng -->
|
|
17
|
+
|
|
10
18
|
### 1.1 Purpose
|
|
11
19
|
### 1.2 Scope
|
|
12
20
|
### 1.3 Key Objectives
|
|
13
21
|
|
|
22
|
+
---
|
|
23
|
+
|
|
14
24
|
## 2. Architecture Vision
|
|
25
|
+
|
|
26
|
+
<!-- MANDATORY.
|
|
27
|
+
Bắt buộc:
|
|
28
|
+
- 2.1 Vision Statement: 1-2 câu mô tả "kiến trúc này hướng tới điều gì"
|
|
29
|
+
- 2.2 Architecture Principles: 4-8 nguyên tắc dẫn dắt quyết định thiết kế
|
|
30
|
+
(vd: Stateless services, API-first, Defense in depth, Fail fast)
|
|
31
|
+
- 2.3 Constraints & Assumptions: Ràng buộc kỹ thuật/tổ chức, giả định đang được chấp nhận
|
|
32
|
+
Format: Bullet list cho principles và constraints -->
|
|
33
|
+
|
|
15
34
|
### 2.1 Vision Statement
|
|
16
35
|
### 2.2 Architecture Principles
|
|
17
36
|
### 2.3 Constraints & Assumptions
|
|
18
37
|
|
|
38
|
+
---
|
|
39
|
+
|
|
19
40
|
## 3. Business Requirements
|
|
41
|
+
|
|
42
|
+
<!-- MANDATORY.
|
|
43
|
+
Bắt buộc:
|
|
44
|
+
- 3.1 Business Problem: Mô tả bài toán kinh doanh cần giải quyết
|
|
45
|
+
- 3.2 Stakeholders: Bảng stakeholder (role, concerns, influence)
|
|
46
|
+
- 3.3 Functional Requirements: Danh sách FR-xxx, mỗi item có ID để trace
|
|
47
|
+
- 3.4 Non-Functional Requirements: Danh sách NFR với metric cụ thể
|
|
48
|
+
(vd: Latency P99 < 300ms, Availability 99.9%, RPS 5000)
|
|
49
|
+
Nên có: Priority (Must/Should/Could) cho mỗi requirement
|
|
50
|
+
Format: Table hoặc numbered list với ID (FR-001, NFR-001) -->
|
|
51
|
+
|
|
20
52
|
### 3.1 Business Problem
|
|
21
53
|
### 3.2 Stakeholders
|
|
22
54
|
### 3.3 Functional Requirements
|
|
23
55
|
### 3.4 Non-Functional Requirements
|
|
24
56
|
|
|
57
|
+
---
|
|
58
|
+
|
|
25
59
|
## 4. Technology Baseline
|
|
60
|
+
|
|
61
|
+
<!-- MANDATORY.
|
|
62
|
+
Bắt buộc:
|
|
63
|
+
- 4.1 Current State: Hệ thống hiện tại (nếu là greenfield thì ghi rõ)
|
|
64
|
+
- 4.2 Technology Stack: Bảng layer → technology → version → rationale
|
|
65
|
+
(Frontend / Backend / Database / Infrastructure / Messaging / Monitoring)
|
|
66
|
+
- 4.3 Dependencies: External services, third-party APIs, shared platforms
|
|
67
|
+
Nên có: Diagram current-state nếu là migration/modernization
|
|
68
|
+
Format: Table cho Technology Stack -->
|
|
69
|
+
|
|
26
70
|
### 4.1 Current State
|
|
27
71
|
### 4.2 Technology Stack
|
|
28
72
|
### 4.3 Dependencies
|
|
29
73
|
|
|
74
|
+
---
|
|
75
|
+
|
|
30
76
|
## 5. System Context (C4 Level 1)
|
|
31
|
-
<!-- Dùng Mermaid flow diagram, :::mermaid wrapper, không dùng () -->
|
|
32
77
|
|
|
33
|
-
|
|
34
|
-
|
|
78
|
+
<!-- MANDATORY. Trả lời: "Hệ thống này nằm ở đâu trong hệ sinh thái?"
|
|
79
|
+
Bắt buộc:
|
|
80
|
+
- Mermaid flowchart: hệ thống ở giữa, xung quanh là users và external systems
|
|
81
|
+
- Chú thích mỗi external system: tên, vai trò, protocol giao tiếp
|
|
82
|
+
Không cần: chi tiết nội bộ của hệ thống (để C4 Level 2)
|
|
83
|
+
Format: Mermaid flowchart (dùng :::mermaid wrapper, không dùng () trong node label)
|
|
84
|
+
|
|
85
|
+
Ví dụ:
|
|
86
|
+
:::mermaid
|
|
87
|
+
flowchart TD
|
|
88
|
+
U[fa:fa-user End User] -- |HTTPS| SYS[Your System]
|
|
89
|
+
SYS -- |REST| EXT1[Payment Gateway]
|
|
90
|
+
SYS -- |SMTP| EXT2[Email Service]
|
|
91
|
+
ADMIN[fa:fa-user Admin] -- |HTTPS| SYS
|
|
92
|
+
::: -->
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 6. Logical View (C4 Level 2 — Container)
|
|
97
|
+
|
|
98
|
+
<!-- MANDATORY. Trả lời: "Hệ thống gồm những container nào?"
|
|
99
|
+
Bắt buộc:
|
|
100
|
+
- Mermaid flowchart: tất cả containers (web app, API, DB, cache, queue, ...)
|
|
101
|
+
- Mỗi container: tên, technology, vai trò chính
|
|
102
|
+
- Luồng tương tác giữa containers với protocol/label
|
|
103
|
+
Nên có: Phân nhóm theo bounded context nếu hệ thống lớn
|
|
104
|
+
Format: Mermaid flowchart với subgraph để nhóm theo domain
|
|
105
|
+
|
|
106
|
+
Ví dụ node: WebApp["Web App\n(Next.js / Vercel)"] -->
|
|
107
|
+
|
|
108
|
+
---
|
|
35
109
|
|
|
36
110
|
## 7. Component View (C4 Level 3)
|
|
37
|
-
|
|
111
|
+
|
|
112
|
+
<!-- CONDITIONAL — Bắt buộc nếu hệ thống có độ phức tạp cao hoặc team mới.
|
|
113
|
+
Trả lời: "Bên trong mỗi container có components nào?"
|
|
114
|
+
Hướng dẫn:
|
|
115
|
+
- Mỗi container phức tạp → một subsection riêng (7.1, 7.2, ...)
|
|
116
|
+
- Container đơn giản (chỉ proxy, static file, thin wrapper) → bỏ qua
|
|
117
|
+
- Không cần drill vào mọi container — chỉ những container có internal logic đáng kể
|
|
118
|
+
Mỗi subsection bắt buộc:
|
|
119
|
+
- Mermaid flowchart liệt kê components bên trong container đó
|
|
120
|
+
- Mỗi component: tên, trách nhiệm chính, interface exposed
|
|
121
|
+
- Dependency direction giữa components (tránh circular)
|
|
122
|
+
Format: Mermaid flowchart với subgraph bao ngoài (tên container), nodes là components
|
|
123
|
+
|
|
124
|
+
Ví dụ:
|
|
125
|
+
:::mermaid
|
|
126
|
+
flowchart TD
|
|
127
|
+
subgraph API["API Service (NestJS)"]
|
|
128
|
+
Router[Route Handler] -- AuthMW[Auth Middleware]
|
|
129
|
+
AuthMW -- Controller[Order Controller]
|
|
130
|
+
Controller -- Service[Order Service]
|
|
131
|
+
Service -- Repo[Order Repository]
|
|
132
|
+
Service -- Queue[Queue Publisher]
|
|
133
|
+
end
|
|
134
|
+
::: -->
|
|
135
|
+
|
|
136
|
+
### 7.1 [Container Name]
|
|
137
|
+
|
|
138
|
+
<!-- Bắt buộc: Mermaid component diagram như hướng dẫn trên.
|
|
139
|
+
Nên có: Mô tả ngắn vai trò của container này trước diagram. -->
|
|
140
|
+
|
|
141
|
+
### 7.2 [Container Name]
|
|
142
|
+
|
|
143
|
+
<!-- Thêm subsection cho mỗi container phức tạp. Xóa subsection này nếu không cần. -->
|
|
144
|
+
|
|
145
|
+
---
|
|
38
146
|
|
|
39
147
|
## 8. Data Architecture & ERD
|
|
40
|
-
|
|
148
|
+
|
|
149
|
+
<!-- MANDATORY nếu hệ thống có persistence layer.
|
|
150
|
+
Bắt buộc:
|
|
151
|
+
- ERD: entities, attributes (chỉ key fields), relationships với cardinality
|
|
152
|
+
- Data flow overview: data đi từ đâu đến đâu, transform ở đâu
|
|
153
|
+
Nên có:
|
|
154
|
+
- Data classification: PII / Sensitive / Internal / Public cho mỗi entity
|
|
155
|
+
- Retention policy nếu có compliance requirement
|
|
156
|
+
- Sharding/partitioning strategy nếu data scale lớn
|
|
157
|
+
Format: Mermaid erDiagram cho ERD -->
|
|
158
|
+
|
|
159
|
+
---
|
|
41
160
|
|
|
42
161
|
## 9. Integration & Data Flow
|
|
43
|
-
|
|
162
|
+
|
|
163
|
+
<!-- MANDATORY nếu hệ thống tích hợp với external services hoặc có async flows.
|
|
164
|
+
Bắt buộc:
|
|
165
|
+
- Sequence diagram cho mỗi critical flow (auth, payment, order, ...)
|
|
166
|
+
- Async flows: queue/event-driven patterns phải được diagram rõ
|
|
167
|
+
Nên có: Error/retry flows cho critical paths
|
|
168
|
+
Format: Mermaid sequenceDiagram, một diagram per flow -->
|
|
169
|
+
|
|
170
|
+
### 9.1 API Design Principles
|
|
171
|
+
|
|
172
|
+
<!-- MANDATORY nếu hệ thống expose API (internal hoặc external).
|
|
173
|
+
Bắt buộc:
|
|
174
|
+
- API Style: REST / GraphQL / gRPC / Event-driven — và lý do chọn
|
|
175
|
+
- Versioning strategy: URL path (/v1/) vs header vs query param
|
|
176
|
+
- Authentication scheme: Bearer JWT / API Key / OAuth2 / mTLS
|
|
177
|
+
- Standard error format: HTTP status codes, error body structure
|
|
178
|
+
Nên có:
|
|
179
|
+
- Rate limiting approach (per-user, per-IP, tiered)
|
|
180
|
+
- Pagination convention (cursor vs offset)
|
|
181
|
+
- Idempotency handling cho mutating operations
|
|
182
|
+
Không đưa vào đây: endpoint list, request/response schema chi tiết
|
|
183
|
+
→ Những thứ đó thuộc API Contract document riêng (viết khi implement)
|
|
184
|
+
Format: Bullet list hoặc table ngắn gọn -->
|
|
185
|
+
|
|
186
|
+
---
|
|
44
187
|
|
|
45
188
|
## 10. Security Architecture
|
|
46
189
|
|
|
47
|
-
|
|
48
|
-
|
|
190
|
+
<!-- MANDATORY. Đây là architectural concern, không phải implementation detail.
|
|
191
|
+
Bắt buộc:
|
|
192
|
+
- Threat Model: attack surfaces, trust boundaries, top threats (dùng STRIDE nếu cần)
|
|
193
|
+
- Identity & Auth Flow: AuthN/AuthZ mechanism, token lifecycle, privilege escalation path
|
|
194
|
+
- Data Classification: PII / Sensitive / Internal / Public — handling rules per class
|
|
195
|
+
- Network Security Zones: public / DMZ / private / data tier và rules giữa các zones
|
|
196
|
+
- Encryption: at-rest (algorithm, key management) và in-transit (TLS version, cert strategy)
|
|
197
|
+
Nên có:
|
|
198
|
+
- Secrets management approach (Vault, AWS SSM, env vars strategy)
|
|
199
|
+
- Audit logging scope: what events must be logged, retention
|
|
200
|
+
- Compliance requirements: GDPR, PCI-DSS, SOC2, ... nếu applicable
|
|
201
|
+
Format:
|
|
202
|
+
- Threat model: table (Threat | Vector | Mitigation)
|
|
203
|
+
- Auth flow: Mermaid sequenceDiagram
|
|
204
|
+
- Network zones: Mermaid flowchart với subgraph per zone -->
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 11. NFR Strategies
|
|
209
|
+
|
|
210
|
+
<!-- MANDATORY. Mỗi NFR-xxx trong Section 3.4 phải có strategy tương ứng ở đây (reference bằng ID).
|
|
211
|
+
Bắt buộc — cover các categories sau nếu có NFR liên quan:
|
|
212
|
+
- Performance: caching strategy (L1/L2/CDN), DB indexing, query optimization approach
|
|
213
|
+
- Scalability: horizontal vs vertical, stateless design, queue-based decoupling
|
|
214
|
+
- Availability: redundancy model (Active-Active/Active-Passive), failover mechanism, SLA target
|
|
215
|
+
- Resilience: circuit breaker, retry with backoff, bulkhead, timeout policy
|
|
216
|
+
- Observability: structured logging, distributed tracing, metrics & alerting thresholds
|
|
217
|
+
Nên có:
|
|
218
|
+
- Capacity planning baseline: expected load, growth projection, scale trigger points
|
|
219
|
+
- DR strategy: RPO/RTO targets, backup frequency, restore procedure overview
|
|
220
|
+
Format: Table với cột NFR ID để trace ngược về Section 3.4
|
|
221
|
+
| NFR ID | Category | Target | Strategy | Notes |
|
|
222
|
+
|--------|----------|--------|----------|-------|
|
|
223
|
+
| NFR-001 | Latency | P99 < 300ms | Redis cache L2, read replicas | Cache TTL 5m |
|
|
224
|
+
| NFR-002 | Availability | 99.9% | Active-Active, 2 AZs | Health check interval 10s | -->
|
|
225
|
+
|
|
226
|
+
---
|
|
49
227
|
|
|
50
|
-
## 12.
|
|
228
|
+
## 12. Deployment Topology
|
|
229
|
+
|
|
230
|
+
<!-- MANDATORY. Trả lời: "Các components chạy ở đâu trong infrastructure?"
|
|
231
|
+
Bắt buộc:
|
|
232
|
+
- Infrastructure diagram: regions, AZs, VPC/subnets, load balancers, entry points
|
|
233
|
+
- Component-to-infrastructure mapping: service X → ECS Fargate, DB → RDS Multi-AZ, ...
|
|
234
|
+
- Traffic entry points: CDN → ALB → API Gateway → Service flow
|
|
235
|
+
- Environment matrix: dev / staging / prod — sự khác nhau về scale, config, isolation
|
|
236
|
+
Nên có:
|
|
237
|
+
- Network topology: public subnet / private subnet / data subnet và routing rules
|
|
238
|
+
- CI/CD pipeline overview: build → test → deploy flow và approval gates
|
|
239
|
+
- Container orchestration config nếu dùng K8s/ECS (namespace, resource limits)
|
|
240
|
+
Format:
|
|
241
|
+
- Mermaid flowchart với subgraph per environment tier hoặc per network zone
|
|
242
|
+
- Environment matrix: table (Component | Dev | Staging | Prod) -->
|
|
243
|
+
|
|
244
|
+
---
|
|
51
245
|
|
|
52
246
|
## 13. Architectural Decisions
|
|
247
|
+
|
|
248
|
+
<!-- MANDATORY. Ghi lại mọi quyết định kiến trúc quan trọng và lý do.
|
|
249
|
+
Bắt buộc: Mỗi ADR entry gồm Decision, Status, Date, Rationale
|
|
250
|
+
Nên có: Alternatives considered và tại sao không chọn
|
|
251
|
+
Format: Table — thêm row mỗi khi có quyết định mới
|
|
252
|
+
Status values: Proposed | Accepted | Deprecated | Superseded -->
|
|
253
|
+
|
|
53
254
|
| ID | Decision | Status | Date | Rationale |
|
|
54
255
|
|----|----------|--------|------|-----------|
|
|
55
256
|
|
|
257
|
+
---
|
|
258
|
+
|
|
56
259
|
## 14. Risks & Mitigation
|
|
57
|
-
|
|
58
|
-
|
|
260
|
+
|
|
261
|
+
<!-- MANDATORY.
|
|
262
|
+
Bắt buộc: Risk, Impact (H/M/L), Probability (H/M/L), Mitigation action
|
|
263
|
+
Nên có: Owner và review date cho mỗi risk
|
|
264
|
+
Format: Table, sắp xếp theo Impact × Probability giảm dần -->
|
|
265
|
+
|
|
266
|
+
| Risk | Impact | Probability | Mitigation | Owner |
|
|
267
|
+
|------|--------|-------------|------------|-------|
|
|
59
268
|
|
|
60
269
|
---
|
|
61
270
|
|
|
62
271
|
## Changelog
|
|
272
|
+
|
|
63
273
|
| Date | Version | Changes | Author |
|
|
64
274
|
|------|---------|---------|--------|
|
package/bin/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { install } from '../lib/install.js';
|
|
2
|
+
import { install, update } from '../lib/install.js';
|
|
3
3
|
|
|
4
4
|
const args = process.argv.slice(2);
|
|
5
5
|
const command = args[0];
|
|
@@ -9,7 +9,12 @@ function printHelp() {
|
|
|
9
9
|
tas-kit — Torus Agentic SDLC Kit installer
|
|
10
10
|
|
|
11
11
|
Usage:
|
|
12
|
-
npx @torus-engineering/tas-kit
|
|
12
|
+
npx @torus-engineering/tas-kit <command> [options]
|
|
13
|
+
|
|
14
|
+
Commands:
|
|
15
|
+
install Copy TAS Kit files into a project (first-time setup)
|
|
16
|
+
update Overwrite .claude/ and .tas/ with the latest kit version
|
|
17
|
+
(preserves CLAUDE.md, tas.yaml, .env.example)
|
|
13
18
|
|
|
14
19
|
Options:
|
|
15
20
|
--directory <path> Target directory (default: current working directory)
|
|
@@ -19,7 +24,8 @@ Options:
|
|
|
19
24
|
Examples:
|
|
20
25
|
npx @torus-engineering/tas-kit install
|
|
21
26
|
npx @torus-engineering/tas-kit install --directory /path/to/my-project
|
|
22
|
-
npx @torus-engineering/tas-kit
|
|
27
|
+
npx @torus-engineering/tas-kit update
|
|
28
|
+
npx @torus-engineering/tas-kit update --yes
|
|
23
29
|
`.trim());
|
|
24
30
|
}
|
|
25
31
|
|
|
@@ -28,7 +34,7 @@ if (!command || command === '--help' || command === '-h') {
|
|
|
28
34
|
process.exit(0);
|
|
29
35
|
}
|
|
30
36
|
|
|
31
|
-
if (command !== 'install') {
|
|
37
|
+
if (command !== 'install' && command !== 'update') {
|
|
32
38
|
console.error(`Unknown command: "${command}"\n`);
|
|
33
39
|
printHelp();
|
|
34
40
|
process.exit(1);
|
|
@@ -43,7 +49,8 @@ for (let i = 1; i < args.length; i++) {
|
|
|
43
49
|
}
|
|
44
50
|
}
|
|
45
51
|
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
const runner = command === 'update' ? update : install;
|
|
53
|
+
runner(opts).catch((err) => {
|
|
54
|
+
console.error(`\n${command === 'update' ? 'Update' : 'Install'} failed:`, err.message);
|
|
48
55
|
process.exit(1);
|
|
49
56
|
});
|
package/lib/install.js
CHANGED
|
@@ -23,6 +23,63 @@ async function copyDir(src, dest) {
|
|
|
23
23
|
await fs.cp(src, dest, { recursive: true });
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
export async function update({ directory, yes }) {
|
|
27
|
+
const target = path.resolve(directory);
|
|
28
|
+
|
|
29
|
+
// Must already have .claude/ or .tas/ — otherwise suggest install
|
|
30
|
+
const claudeExists = await exists(path.join(target, '.claude'));
|
|
31
|
+
const tasExists = await exists(path.join(target, '.tas'));
|
|
32
|
+
if (!claudeExists && !tasExists) {
|
|
33
|
+
console.error(` ERROR: No TAS Kit found in: ${target}`);
|
|
34
|
+
console.error(` Run "install" first to set up TAS Kit.`);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
console.log(`\nUpdating TAS Kit in: ${target}\n`);
|
|
39
|
+
|
|
40
|
+
if (!yes) {
|
|
41
|
+
console.warn(` This will overwrite .claude/ and .tas/ with the latest kit files.`);
|
|
42
|
+
console.warn(` Your CLAUDE.md, tas.yaml, and .env.example will NOT be touched.\n`);
|
|
43
|
+
const ok = await confirm('Continue?');
|
|
44
|
+
if (!ok) {
|
|
45
|
+
console.log('Update cancelled.');
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
console.log();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Overwrite .claude/
|
|
52
|
+
await copyDir(
|
|
53
|
+
path.join(PACKAGE_DIR, '.claude'),
|
|
54
|
+
path.join(target, '.claude')
|
|
55
|
+
);
|
|
56
|
+
console.log(' [ok] .claude/ (updated)');
|
|
57
|
+
|
|
58
|
+
// Overwrite .tas/
|
|
59
|
+
await copyDir(
|
|
60
|
+
path.join(PACKAGE_DIR, '.tas'),
|
|
61
|
+
path.join(target, '.tas')
|
|
62
|
+
);
|
|
63
|
+
console.log(' [ok] .tas/ (updated)');
|
|
64
|
+
|
|
65
|
+
// Set executable bit on tas-ado.py (Unix/macOS)
|
|
66
|
+
if (process.platform !== 'win32') {
|
|
67
|
+
const adoPy = path.join(target, '.tas', 'tools', 'tas-ado.py');
|
|
68
|
+
if (await exists(adoPy)) {
|
|
69
|
+
await fs.chmod(adoPy, 0o755);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
console.log(` [--] CLAUDE.md, tas.yaml, .env.example — not touched`);
|
|
74
|
+
|
|
75
|
+
console.log(`
|
|
76
|
+
TAS Kit updated successfully!
|
|
77
|
+
|
|
78
|
+
If this version added new settings or templates, check the changelog
|
|
79
|
+
and manually merge changes into your CLAUDE.md and tas.yaml if needed.
|
|
80
|
+
`);
|
|
81
|
+
}
|
|
82
|
+
|
|
26
83
|
export async function install({ directory, yes }) {
|
|
27
84
|
const target = path.resolve(directory);
|
|
28
85
|
|
|
@@ -73,12 +130,17 @@ export async function install({ directory, yes }) {
|
|
|
73
130
|
console.log(' [--] CLAUDE.md already exists, skipped');
|
|
74
131
|
}
|
|
75
132
|
|
|
76
|
-
// Copy .env.example
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
133
|
+
// Copy .env.example (only if absent)
|
|
134
|
+
const envExampleTarget = path.join(target, '.env.example');
|
|
135
|
+
if (!(await exists(envExampleTarget))) {
|
|
136
|
+
await fs.copyFile(
|
|
137
|
+
path.join(PACKAGE_DIR, '.env.example'),
|
|
138
|
+
envExampleTarget
|
|
139
|
+
);
|
|
140
|
+
console.log(' [ok] .env.example');
|
|
141
|
+
} else {
|
|
142
|
+
console.log(' [--] .env.example already exists, skipped');
|
|
143
|
+
}
|
|
82
144
|
|
|
83
145
|
// Copy tas-example.yaml as tas.yaml (only if absent)
|
|
84
146
|
const tasYamlTarget = path.join(target, 'tas.yaml');
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@torus-engineering/tas-kit",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Torus Agentic SDLC Kit —
|
|
3
|
+
"version": "1.7.0",
|
|
4
|
+
"description": "Torus Agentic SDLC Kit — Collection of commands, skills, rules, hooks, agents and workflows for modern AI-First SDLC",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"tas-kit": "bin/cli.js"
|