cortex-tms 2.4.0 β 2.5.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/README.md +210 -117
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +165 -7
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/tutorial.d.ts +4 -0
- package/dist/commands/tutorial.d.ts.map +1 -0
- package/dist/commands/tutorial.js +203 -0
- package/dist/commands/tutorial.js.map +1 -0
- package/dist/utils/backup.d.ts +26 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +143 -0
- package/dist/utils/backup.js.map +1 -0
- package/package.json +3 -1
- package/templates/PROMPTS.md +8 -2
package/README.md
CHANGED
|
@@ -1,50 +1,137 @@
|
|
|
1
1
|
# Cortex TMS π§
|
|
2
2
|
|
|
3
|
-
**The Universal AI-Optimized Project Boilerplate (v2.
|
|
3
|
+
**The Universal AI-Optimized Project Boilerplate (v2.5.0)**
|
|
4
4
|
|
|
5
|
-
Cortex TMS is
|
|
5
|
+
Cortex TMS is an **interactive operating system for AI-assisted development**. It's not just documentationβit's an **activation layer** that turns your repository into a machine-legible project constitution with intelligent tooling for version management and AI collaboration.
|
|
6
6
|
|
|
7
|
-
**Current Status**: β
**Production Ready** | [NPM Package](https://www.npmjs.com/package/cortex-tms) | [GitHub
|
|
7
|
+
**Current Status**: β
**Stable / Production Ready** | [NPM Package](https://www.npmjs.com/package/cortex-tms) | [GitHub Repository](https://github.com/jantonca/cortex-tms)
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## π
|
|
12
|
-
|
|
13
|
-
### Option 1: CLI Tool (Recommended)
|
|
11
|
+
## π Instant Activation
|
|
14
12
|
|
|
15
13
|
Get started in under 60 seconds:
|
|
16
14
|
|
|
17
15
|
```bash
|
|
18
|
-
|
|
16
|
+
# 1. Initialize your project
|
|
19
17
|
npx cortex-tms init
|
|
18
|
+
|
|
19
|
+
# 2. Open the Project Cockpit
|
|
20
|
+
npx cortex-tms status
|
|
21
|
+
|
|
22
|
+
# 3. Activate your AI Agent
|
|
23
|
+
npx cortex-tms prompt init-session
|
|
24
|
+
# (Copies project-aware prompt to clipboard!)
|
|
25
|
+
|
|
26
|
+
# 4. Check version health
|
|
27
|
+
npx cortex-tms migrate
|
|
20
28
|
```
|
|
21
29
|
|
|
22
|
-
Choose your scope (Nano/Standard/Enterprise) and start building with AI-optimized documentation.
|
|
30
|
+
Choose your scope (Nano/Standard/Enterprise) and start building with AI-optimized documentation and intelligent CLI tooling.
|
|
31
|
+
|
|
32
|
+
π **New here?** The Essential 7 prompts in `PROMPTS.md` will guide you through the entire development lifecycle.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## π― The Philosophy: Signal over Noise
|
|
37
|
+
|
|
38
|
+
Traditional repos drown AI agents in thousands of lines of historical tasks and stale documentation. **Cortex TMS** forces agents into a "Tiered" approach:
|
|
39
|
+
|
|
40
|
+
1. **HOT (Active)**: `NEXT-TASKS.md`, `PROMPTS.md` β What we are doing _now_ and how to ask the AI for help.
|
|
41
|
+
2. **WARM (Truth)**: `docs/core/` β The project's "Laws" (Architecture, Patterns, Domain Logic).
|
|
42
|
+
3. **COLD (History)**: `docs/archive/` β Historical changelogs (Ignore unless asked).
|
|
43
|
+
|
|
44
|
+
**Why this works**: AI agents have limited context windows. Reading everything is wasteful. The tier system maximizes signal, minimizes noise.
|
|
45
|
+
|
|
46
|
+
---
|
|
23
47
|
|
|
24
|
-
|
|
48
|
+
## π οΈ CLI Commands
|
|
25
49
|
|
|
26
|
-
|
|
50
|
+
Cortex TMS provides 6 production-ready commands:
|
|
27
51
|
|
|
28
|
-
###
|
|
52
|
+
### `cortex-tms tutorial`
|
|
53
|
+
Interactive walkthrough teaching the "Cortex Way" - perfect for first-time users.
|
|
29
54
|
|
|
30
55
|
```bash
|
|
31
|
-
|
|
32
|
-
cortex-tms init --scope standard
|
|
56
|
+
cortex-tms tutorial # Start the guided tour
|
|
33
57
|
```
|
|
34
58
|
|
|
35
|
-
|
|
59
|
+
**What You'll Learn**:
|
|
60
|
+
- Project Dashboard: Using `status` to see your cockpit
|
|
61
|
+
- AI Activation: Using `prompt` to activate project-aware AI agents
|
|
62
|
+
- Zero-Drift Governance: Automated version sync with `docs:sync`
|
|
63
|
+
- Health Checks: Understanding `validate` and the Archive Protocol
|
|
64
|
+
- Safe Migration: Fearless template upgrades with backup/rollback
|
|
65
|
+
|
|
66
|
+
**Navigation**: Use arrow keys and Enter to progress, select Exit to quit anytime
|
|
36
67
|
|
|
37
68
|
---
|
|
38
69
|
|
|
39
|
-
|
|
70
|
+
### `cortex-tms init`
|
|
71
|
+
Initialize TMS structure in your project with interactive scope selection.
|
|
40
72
|
|
|
41
|
-
|
|
73
|
+
```bash
|
|
74
|
+
cortex-tms init # Interactive mode
|
|
75
|
+
cortex-tms init --scope standard # Non-interactive
|
|
76
|
+
cortex-tms init --dry-run # Preview changes
|
|
77
|
+
```
|
|
42
78
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
3. **COLD (History)**: `docs/archive/` β Historical changelogs (Ignore unless asked).
|
|
79
|
+
### `cortex-tms validate`
|
|
80
|
+
Verify your project's TMS health and auto-fix common issues.
|
|
46
81
|
|
|
47
|
-
|
|
82
|
+
```bash
|
|
83
|
+
cortex-tms validate # Check project health
|
|
84
|
+
cortex-tms validate --fix # Auto-repair missing files
|
|
85
|
+
cortex-tms validate --strict # Strict mode with no warnings
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### `cortex-tms status`
|
|
89
|
+
Project cockpit with health dashboard, sprint progress, and quick actions.
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
cortex-tms status # Visual dashboard with progress bars
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### `cortex-tms migrate`
|
|
96
|
+
Intelligent version managementβdetect outdated templates and automatically upgrade with safety backups.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
cortex-tms migrate # Analyze version status
|
|
100
|
+
cortex-tms migrate --apply # Auto-upgrade OUTDATED files (creates backup)
|
|
101
|
+
cortex-tms migrate --apply --force # Upgrade ALL files including customized
|
|
102
|
+
cortex-tms migrate --rollback # Restore from backup (interactive selection)
|
|
103
|
+
cortex-tms migrate --dry-run # Preview migration plan
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Status Categories**:
|
|
107
|
+
- `LATEST`: Already on current version
|
|
108
|
+
- `OUTDATED`: Safe to auto-upgrade (matches old template)
|
|
109
|
+
- `CUSTOMIZED`: Manual review needed (has user changes)
|
|
110
|
+
- `MISSING`: Optional file not installed
|
|
111
|
+
|
|
112
|
+
**Safety Features**:
|
|
113
|
+
- Automatic backups in `.cortex/backups/` before any changes
|
|
114
|
+
- Timestamped snapshots with manifest files
|
|
115
|
+
- One-click rollback with interactive backup selection
|
|
116
|
+
- Confirmation prompts prevent accidental overwrites
|
|
117
|
+
|
|
118
|
+
### `cortex-tms prompt`
|
|
119
|
+
Access project-aware AI prompts from the Essential 7 library.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
cortex-tms prompt # Interactive selection
|
|
123
|
+
cortex-tms prompt init-session # Direct access (auto-copies to clipboard!)
|
|
124
|
+
cortex-tms prompt --list # Browse all prompts
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**The Essential 7**:
|
|
128
|
+
- `init-session` - Start your AI session with context
|
|
129
|
+
- `feature` - Implement new features with architectural anchors
|
|
130
|
+
- `debug` - Troubleshoot with known issues lookup
|
|
131
|
+
- `review` - Code review against project patterns
|
|
132
|
+
- `refactor` - Structural improvements
|
|
133
|
+
- `decision` - Create Architecture Decision Records
|
|
134
|
+
- `finish` - Execute maintenance protocol
|
|
48
135
|
|
|
49
136
|
---
|
|
50
137
|
|
|
@@ -53,9 +140,10 @@ Traditional repos drown AI agents in thousands of lines of historical tasks and
|
|
|
53
140
|
| Folder / File | Purpose | AI Context Tier |
|
|
54
141
|
|:-------------|:--------|:---------------|
|
|
55
142
|
| `NEXT-TASKS.md` | Active sprint and current focus | **HOT** (Always Read) |
|
|
56
|
-
| `
|
|
143
|
+
| `PROMPTS.md` | AI interaction templates (Essential 7) | **HOT** (Always Read) |
|
|
57
144
|
| `CLAUDE.md` | CLI commands & workflow config | **HOT** (Always Read) |
|
|
58
145
|
| `.github/copilot-instructions.md` | Global guardrails and critical rules | **HOT** (Always Read) |
|
|
146
|
+
| `FUTURE-ENHANCEMENTS.md` | Living backlog (not current sprint) | **PLANNING** |
|
|
59
147
|
| `docs/core/ARCHITECTURE.md` | System design & tech stack | **WARM** (Read on Demand) |
|
|
60
148
|
| `docs/core/PATTERNS.md` | Canonical code examples (Do/Don't) | **WARM** (Read on Demand) |
|
|
61
149
|
| `docs/core/DOMAIN-LOGIC.md` | Immutable project rules | **WARM** (Read on Demand) |
|
|
@@ -65,98 +153,82 @@ Traditional repos drown AI agents in thousands of lines of historical tasks and
|
|
|
65
153
|
| `docs/core/SCHEMA.md` | Data models (optional) | **WARM** (Read on Demand) |
|
|
66
154
|
| `docs/core/TROUBLESHOOTING.md` | Framework gotchas (optional) | **WARM** (Read on Demand) |
|
|
67
155
|
| `docs/archive/` | Historical changelogs | **COLD** (Ignore) |
|
|
68
|
-
| `templates/` | Boilerplate files for user projects | N/A (Toolkit) |
|
|
69
156
|
|
|
70
157
|
---
|
|
71
158
|
|
|
72
|
-
##
|
|
159
|
+
## π What's New in v2.4.0
|
|
73
160
|
|
|
74
|
-
###
|
|
75
|
-
- **
|
|
76
|
-
-
|
|
77
|
-
-
|
|
161
|
+
### Migration Auditor (Repository Scaling)
|
|
162
|
+
- **Version Tracking**: All templates include `@cortex-tms-version` metadata
|
|
163
|
+
- **Customization Detection**: Compares your files against original templates
|
|
164
|
+
- **Safe Upgrades**: Never lose custom changes during template evolution
|
|
165
|
+
- **Status Reports**: Clear categorization of file states (LATEST, OUTDATED, CUSTOMIZED)
|
|
78
166
|
|
|
79
|
-
###
|
|
80
|
-
- **
|
|
81
|
-
-
|
|
82
|
-
-
|
|
167
|
+
### Prompt Engine (Interaction Scaling)
|
|
168
|
+
- **Essential 7 Library**: Curated prompts for the entire development lifecycle
|
|
169
|
+
- **Clipboard Integration**: One command, instant activation
|
|
170
|
+
- **Project-Aware**: Prompts reference YOUR architecture, patterns, and domain logic
|
|
171
|
+
- **Customizable**: Edit `PROMPTS.md` to match team vocabulary
|
|
83
172
|
|
|
84
|
-
###
|
|
85
|
-
- **
|
|
86
|
-
- **
|
|
87
|
-
- **
|
|
173
|
+
### Enhanced Developer Experience
|
|
174
|
+
- **Status Dashboard**: Visual progress bars and health metrics
|
|
175
|
+
- **Self-Healing Validation**: `--fix` flag auto-repairs common issues
|
|
176
|
+
- **Dry-Run Mode**: Preview all changes before applying
|
|
177
|
+
- **VS Code Snippets**: 12 productivity snippets for rapid documentation
|
|
88
178
|
|
|
89
179
|
---
|
|
90
180
|
|
|
91
|
-
## π€ How to Work with AI Agents
|
|
92
|
-
|
|
93
|
-
This repo is a **"Machine-Legible Project Constitution."** To get the best results from your AI pair programmer:
|
|
94
|
-
|
|
95
|
-
1. **The Context Trigger**: Start a session by saying:
|
|
96
|
-
> _"Review NEXT-TASKS.md and docs/core. Suggest a plan for Task 1 using the Propose, Justify, Recommend framework."_
|
|
181
|
+
## π€ How to Work with AI Agents
|
|
97
182
|
|
|
98
|
-
|
|
99
|
-
> _"Follow the patterns in docs/core/PATTERNS.md."_
|
|
100
|
-
|
|
101
|
-
3. **Truth Anchoring**: If the AI hallucinates logic, point it to `DOMAIN-LOGIC.md`:
|
|
102
|
-
> _"Your calculation is wrong. Refer to the rules in docs/core/DOMAIN-LOGIC.md."_
|
|
103
|
-
|
|
104
|
-
4. **Check Current Sprint**: Always ask:
|
|
105
|
-
> _"What's in NEXT-TASKS.md? What should I work on?"_
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## π Setup (For Cortex TMS Development)
|
|
110
|
-
|
|
111
|
-
**Prerequisites**:
|
|
112
|
-
- Node.js (managed via FN - Fast Node Manager)
|
|
113
|
-
- pnpm (package manager)
|
|
183
|
+
This repo is a **"Machine-Legible Project Constitution."** To get the best results:
|
|
114
184
|
|
|
185
|
+
### 1. The Context Trigger
|
|
115
186
|
```bash
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
187
|
+
cortex-tms prompt init-session
|
|
188
|
+
# Copies: "Review NEXT-TASKS.md, docs/core/ARCHITECTURE.md, and CLAUDE.md.
|
|
189
|
+
# Summarize current priorities and propose a step-by-step plan..."
|
|
190
|
+
```
|
|
119
191
|
|
|
120
|
-
|
|
121
|
-
|
|
192
|
+
### 2. Pattern Enforcement
|
|
193
|
+
```bash
|
|
194
|
+
cortex-tms prompt review
|
|
195
|
+
# Copies: "Review the current changes against PATTERNS.md.
|
|
196
|
+
# Flag any violations and suggest specific fixes."
|
|
197
|
+
```
|
|
122
198
|
|
|
123
|
-
|
|
124
|
-
|
|
199
|
+
### 3. Truth Anchoring
|
|
200
|
+
If the AI hallucinates logic:
|
|
201
|
+
> _"Your calculation is wrong. Refer to the rules in docs/core/DOMAIN-LOGIC.md."_
|
|
125
202
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
#
|
|
129
|
-
# - docs/core/PATTERNS.md - Template patterns
|
|
203
|
+
### 4. Check Current Sprint
|
|
204
|
+
```bash
|
|
205
|
+
cortex-tms status # Visual dashboard with current tasks
|
|
130
206
|
```
|
|
131
207
|
|
|
132
208
|
---
|
|
133
209
|
|
|
134
210
|
## π Development Roadmap
|
|
135
211
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
**
|
|
139
|
-
- [x] **Phase
|
|
140
|
-
- [x] **Phase
|
|
141
|
-
- [x] **Phase
|
|
142
|
-
- [x] **Phase
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
**
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
|
|
155
|
-
-
|
|
156
|
-
|
|
157
|
-
**Future Phases**:
|
|
158
|
-
- Phase 5: Write documentation guides (Quick Start, Migration, Best Practices)
|
|
159
|
-
- Phase 6: Publish to npm + GitHub Template
|
|
212
|
+
**Completed Phases** (All β
):
|
|
213
|
+
- [x] **Phase 1**: Dogfood the System - Applied TMS to Cortex itself
|
|
214
|
+
- [x] **Phase 2**: Complete Template Library - All templates built and validated
|
|
215
|
+
- [x] **Phase 3**: Build Example App - Gold Standard Next.js 15 Todo App
|
|
216
|
+
- [x] **Phase 4**: Create CLI Tool - Full-featured CLI with 5 commands
|
|
217
|
+
- [x] **Phase 5**: Documentation & Guides - Status dashboard, snippets, validation
|
|
218
|
+
- [x] **Phase 6**: Publish & Scale - npm package + GitHub releases
|
|
219
|
+
|
|
220
|
+
**Current Version**: v2.4.0 "Scaling Intelligence"
|
|
221
|
+
- β
Migration Auditor with version tracking
|
|
222
|
+
- β
Prompt Engine with Essential 7 library
|
|
223
|
+
- β
Clipboard integration for frictionless workflows
|
|
224
|
+
- β
Project-local prompt customization
|
|
225
|
+
|
|
226
|
+
**Next Phase (v2.5)**: "Guidance & Growth"
|
|
227
|
+
- Auto-upgrade logic with `migrate --apply`
|
|
228
|
+
- Interactive CLI tutorial for onboarding
|
|
229
|
+
- Custom template directory support
|
|
230
|
+
|
|
231
|
+
See `NEXT-TASKS.md` for current sprint details and `CHANGELOG.md` for full version history.
|
|
160
232
|
|
|
161
233
|
---
|
|
162
234
|
|
|
@@ -165,41 +237,42 @@ See `NEXT-TASKS.md` for current sprint and `FUTURE-ENHANCEMENTS.md` for backlog.
|
|
|
165
237
|
```
|
|
166
238
|
cortex-tms/
|
|
167
239
|
βββ NEXT-TASKS.md # HOT: Current sprint
|
|
240
|
+
βββ PROMPTS.md # HOT: AI interaction templates
|
|
168
241
|
βββ FUTURE-ENHANCEMENTS.md # PLANNING: Backlog
|
|
169
242
|
βββ CLAUDE.md # HOT: Workflow config
|
|
170
243
|
βββ README.md # This file
|
|
171
244
|
βββ .github/
|
|
172
245
|
β βββ copilot-instructions.md # HOT: AI guardrails
|
|
246
|
+
βββ bin/ # CLI executable
|
|
247
|
+
βββ src/ # CLI source code
|
|
248
|
+
β βββ commands/ # CLI commands (init, validate, status, migrate, prompt)
|
|
249
|
+
β βββ utils/ # Template processing, validation, prompt parsing
|
|
250
|
+
β βββ types/ # TypeScript definitions
|
|
173
251
|
βββ templates/ # User-facing boilerplate
|
|
174
252
|
β βββ NEXT-TASKS.md
|
|
253
|
+
β βββ PROMPTS.md # Essential 7 prompt library
|
|
175
254
|
β βββ CLAUDE.md
|
|
176
255
|
β βββ .github/
|
|
177
256
|
β β βββ copilot-instructions.md
|
|
257
|
+
β βββ vscode/
|
|
258
|
+
β β βββ tms.code-snippets # VS Code productivity snippets
|
|
178
259
|
β βββ docs/
|
|
179
260
|
β βββ core/
|
|
180
261
|
β β βββ ARCHITECTURE.md
|
|
181
262
|
β β βββ PATTERNS.md
|
|
182
263
|
β β βββ DOMAIN-LOGIC.md
|
|
264
|
+
β β βββ GIT-STANDARDS.md
|
|
183
265
|
β β βββ DECISIONS.md
|
|
184
266
|
β β βββ GLOSSARY.md
|
|
185
267
|
β β βββ SCHEMA.md
|
|
186
268
|
β β βββ TROUBLESHOOTING.md
|
|
187
269
|
β βββ archive/
|
|
188
270
|
β βββ v1.0-CHANGELOG.md
|
|
189
|
-
βββ docs/ # Cortex TMS documentation
|
|
271
|
+
βββ docs/ # Cortex TMS project documentation
|
|
190
272
|
β βββ core/
|
|
191
|
-
β β βββ ARCHITECTURE.md
|
|
192
|
-
β β βββ PATTERNS.md
|
|
193
|
-
β β βββ DOMAIN-LOGIC.md
|
|
194
|
-
β β βββ DECISIONS.md
|
|
195
|
-
β β βββ GLOSSARY.md
|
|
196
|
-
β β βββ PHILOSOPHY.md
|
|
197
273
|
β βββ archive/
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
β βββ todo-app/ # β
Gold Standard Next.js 15 Todo App
|
|
201
|
-
βββ bin/ # CLI tool entry point
|
|
202
|
-
βββ src/ # CLI tool source code
|
|
274
|
+
βββ examples/ # Reference implementations
|
|
275
|
+
βββ todo-app/ # β
Gold Standard Next.js 15 App
|
|
203
276
|
```
|
|
204
277
|
|
|
205
278
|
---
|
|
@@ -210,15 +283,15 @@ cortex-tms/
|
|
|
210
283
|
|
|
211
284
|
- Cortex's own `NEXT-TASKS.md` tracks Cortex development
|
|
212
285
|
- Cortex's own `docs/core/PATTERNS.md` documents template patterns
|
|
213
|
-
-
|
|
286
|
+
- Cortex's own `PROMPTS.md` guides AI collaboration on Cortex
|
|
214
287
|
|
|
215
|
-
**Validation Test**: "Can an AI agent working on Cortex find what it needs in < 3 file reads?"
|
|
288
|
+
**Validation Test**: "Can an AI agent working on Cortex find what it needs in < 3 file reads?" β
|
|
216
289
|
|
|
217
290
|
---
|
|
218
291
|
|
|
219
292
|
## π Key Documentation
|
|
220
293
|
|
|
221
|
-
- **For AI Agents**: Read `.github/copilot-instructions.md` first
|
|
294
|
+
- **For AI Agents**: Read `.github/copilot-instructions.md` and `PROMPTS.md` first
|
|
222
295
|
- **For Developers**: Read `docs/core/ARCHITECTURE.md` for system design
|
|
223
296
|
- **For Contributors**: Read `docs/core/PATTERNS.md` for template patterns
|
|
224
297
|
- **For Understanding**: Read `docs/core/DOMAIN-LOGIC.md` for TMS principles
|
|
@@ -229,18 +302,38 @@ cortex-tms/
|
|
|
229
302
|
|
|
230
303
|
1. Read `NEXT-TASKS.md` to see what's being worked on
|
|
231
304
|
2. Check `FUTURE-ENHANCEMENTS.md` for backlog items
|
|
232
|
-
3.
|
|
233
|
-
4.
|
|
234
|
-
5.
|
|
305
|
+
3. Use `cortex-tms prompt` to get project-aware guidance
|
|
306
|
+
4. Follow patterns in `docs/core/PATTERNS.md`
|
|
307
|
+
5. Verify changes against `docs/core/DOMAIN-LOGIC.md`
|
|
308
|
+
6. Test templates with AI agents before submitting
|
|
235
309
|
|
|
236
310
|
---
|
|
237
311
|
|
|
238
312
|
## π Learn More
|
|
239
313
|
|
|
240
|
-
- **
|
|
241
|
-
- **Architecture**: See `docs/core/ARCHITECTURE.md`
|
|
314
|
+
- **Release Notes**: See `CHANGELOG.md` for version history
|
|
315
|
+
- **Architecture**: See `docs/core/ARCHITECTURE.md` for system design
|
|
242
316
|
- **Decisions**: See `docs/core/DECISIONS.md` for ADRs
|
|
243
317
|
- **Glossary**: See `docs/core/GLOSSARY.md` for terminology
|
|
318
|
+
- **Patterns**: See `docs/core/PATTERNS.md` for implementation examples
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## π― Why Cortex TMS?
|
|
323
|
+
|
|
324
|
+
**Before TMS**:
|
|
325
|
+
- AI agents waste time reading historical noise
|
|
326
|
+
- Documentation drifts from reality
|
|
327
|
+
- No standard way to constrain AI attention
|
|
328
|
+
- Manual prompt writing for every interaction
|
|
329
|
+
|
|
330
|
+
**After TMS**:
|
|
331
|
+
- Tiered structure (HOT/WARM/COLD) maximizes signal
|
|
332
|
+
- Version metadata keeps templates synchronized
|
|
333
|
+
- Essential 7 prompts provide instant AI activation
|
|
334
|
+
- Project-aware guidance scales across team size
|
|
335
|
+
|
|
336
|
+
**Result**: 3-5x faster AI collaboration with fewer hallucinations.
|
|
244
337
|
|
|
245
338
|
---
|
|
246
339
|
|
|
@@ -252,9 +345,9 @@ MIT
|
|
|
252
345
|
|
|
253
346
|
## Status
|
|
254
347
|
|
|
255
|
-
**Version**: 2.
|
|
256
|
-
**Last Updated**: 2026-01-
|
|
257
|
-
**Current Sprint**:
|
|
258
|
-
**Completed Sprints**:
|
|
348
|
+
**Version**: 2.5.0 (Stable / Production Ready)
|
|
349
|
+
**Last Updated**: 2026-01-14
|
|
350
|
+
**Current Sprint**: v2.5 Planning - "Guidance & Growth"
|
|
351
|
+
**Completed Sprints**: v2.1, v2.2, v2.3, v2.4 (see `docs/archive/`)
|
|
259
352
|
|
|
260
|
-
<!-- @cortex-tms-version 2.
|
|
353
|
+
<!-- @cortex-tms-version 2.5.0 -->
|
package/dist/cli.js
CHANGED
|
@@ -21,11 +21,13 @@ import { validateCommand } from './commands/validate.js';
|
|
|
21
21
|
import { statusCommand } from './commands/status.js';
|
|
22
22
|
import { migrateCommand } from './commands/migrate.js';
|
|
23
23
|
import { promptCommand } from './commands/prompt.js';
|
|
24
|
+
import { tutorialCommand } from './commands/tutorial.js';
|
|
24
25
|
program.addCommand(initCommand);
|
|
25
26
|
program.addCommand(validateCommand);
|
|
26
27
|
program.addCommand(statusCommand);
|
|
27
28
|
program.addCommand(migrateCommand);
|
|
28
29
|
program.addCommand(promptCommand);
|
|
30
|
+
program.addCommand(tutorialCommand);
|
|
29
31
|
program.on('command:*', () => {
|
|
30
32
|
console.error(chalk.red('\nβ Invalid command:'), chalk.bold(program.args.join(' ')));
|
|
31
33
|
console.log(chalk.gray('\nRun'), chalk.cyan('cortex-tms --help'), chalk.gray('to see available commands.'));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAGtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAG9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACV,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IACzB,IAAI;IACJ,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CACzE;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC;KAC3E,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAGtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAG9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACV,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IACzB,IAAI;IACJ,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CACzE;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC;KAC3E,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAGpC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACnC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAGH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAG5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAK/E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,oBAAoB,IAAI,OAAO,CAe9C;AAKD,eAAO,MAAM,cAAc,SAAyB,CAAC"}
|
package/dist/commands/migrate.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import ora from 'ora';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
4
5
|
import { join } from 'path';
|
|
5
6
|
import { existsSync } from 'fs';
|
|
6
7
|
import { loadConfig, getScopePreset } from '../utils/config.js';
|
|
7
8
|
import { getPackageVersion, extractVersion, getTemplatesDir } from '../utils/templates.js';
|
|
9
|
+
import { createBackup, listBackups, restoreBackup, formatBackupSize, getBackupSize } from '../utils/backup.js';
|
|
8
10
|
import fs from 'fs-extra';
|
|
9
11
|
export function createMigrateCommand() {
|
|
10
12
|
const migrateCommand = new Command('migrate');
|
|
11
13
|
migrateCommand
|
|
12
14
|
.description('Upgrade TMS files to the current template version')
|
|
13
|
-
.option('-
|
|
15
|
+
.option('-a, --apply', 'Apply automatic upgrades (creates backup first)')
|
|
16
|
+
.option('-r, --rollback', 'Restore files from a previous backup')
|
|
17
|
+
.option('-f, --force', 'Force upgrade even for customized files (requires --apply)')
|
|
14
18
|
.option('-v, --verbose', 'Show detailed output')
|
|
15
19
|
.option('-d, --dry-run', 'Preview changes without applying them')
|
|
16
20
|
.action(async (options) => {
|
|
@@ -21,7 +25,11 @@ export function createMigrateCommand() {
|
|
|
21
25
|
export const migrateCommand = createMigrateCommand();
|
|
22
26
|
async function runMigrate(options) {
|
|
23
27
|
const cwd = process.cwd();
|
|
24
|
-
const {
|
|
28
|
+
const { apply = false, rollback = false, force = false, verbose: _verbose = false, dryRun = false } = options;
|
|
29
|
+
if (rollback) {
|
|
30
|
+
await runRollback(cwd);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
25
33
|
console.log(chalk.bold.cyan('\nπ Cortex TMS Migration\n'));
|
|
26
34
|
if (dryRun) {
|
|
27
35
|
console.log(chalk.yellow('π DRY RUN MODE: No files will be modified.\n'));
|
|
@@ -72,12 +80,150 @@ async function runMigrate(options) {
|
|
|
72
80
|
console.log(chalk.gray(` βΉ ${missing.length} file(s) not installed (optional)`));
|
|
73
81
|
}
|
|
74
82
|
if (dryRun) {
|
|
75
|
-
printNextSteps(outdated.length, customized.length);
|
|
83
|
+
printNextSteps(outdated.length, customized.length, apply);
|
|
76
84
|
return;
|
|
77
85
|
}
|
|
78
|
-
|
|
86
|
+
if (apply) {
|
|
87
|
+
await applyMigration(cwd, migrations, targetVersion, force);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
printNextSteps(outdated.length, customized.length, apply);
|
|
91
|
+
}
|
|
79
92
|
}
|
|
80
|
-
function
|
|
93
|
+
async function applyMigration(projectRoot, migrations, targetVersion, force) {
|
|
94
|
+
const outdated = migrations.filter((m) => m.status === 'OUTDATED');
|
|
95
|
+
const customized = migrations.filter((m) => m.status === 'CUSTOMIZED');
|
|
96
|
+
const filesToUpgrade = force ? [...outdated, ...customized] : outdated;
|
|
97
|
+
if (filesToUpgrade.length === 0) {
|
|
98
|
+
console.log(chalk.yellow('\nβ οΈ No files to upgrade.\n'));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
console.log(chalk.bold('\nπ Files to be upgraded:\n'));
|
|
102
|
+
filesToUpgrade.forEach((file) => {
|
|
103
|
+
const icon = file.status === 'CUSTOMIZED' ? 'β οΈ ' : 'β';
|
|
104
|
+
console.log(chalk.blue(` ${icon} ${file.path}`));
|
|
105
|
+
});
|
|
106
|
+
if (!force && customized.length > 0) {
|
|
107
|
+
console.log(chalk.yellow(`\nβ οΈ ${customized.length} CUSTOMIZED file(s) skipped. Use --force to upgrade them.\n`));
|
|
108
|
+
}
|
|
109
|
+
console.log(chalk.bold('\nπΎ Creating backup...\n'));
|
|
110
|
+
const spinner = ora('Backing up files...').start();
|
|
111
|
+
const filePaths = filesToUpgrade.map((m) => join(projectRoot, m.path));
|
|
112
|
+
const backupResult = await createBackup(projectRoot, filePaths, `migrate to v${targetVersion}`, targetVersion);
|
|
113
|
+
if (!backupResult.success) {
|
|
114
|
+
spinner.fail('Backup failed');
|
|
115
|
+
console.log(chalk.red('\nβ Error:'), backupResult.error);
|
|
116
|
+
console.log(chalk.gray('Migration aborted to prevent data loss.\n'));
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
spinner.succeed(`Backup created: ${chalk.cyan(backupResult.backupPath)}`);
|
|
120
|
+
console.log(chalk.gray(` ${backupResult.filesBackedUp} file(s) backed up safely\n`));
|
|
121
|
+
console.log(chalk.bold('π Applying upgrades...\n'));
|
|
122
|
+
const upgradeSpinner = ora('Updating files...').start();
|
|
123
|
+
let upgradedCount = 0;
|
|
124
|
+
const templatesDir = getTemplatesDir();
|
|
125
|
+
for (const migration of filesToUpgrade) {
|
|
126
|
+
const filePath = join(projectRoot, migration.path);
|
|
127
|
+
const templatePath = join(templatesDir, migration.path);
|
|
128
|
+
if (!existsSync(templatePath)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
await fs.copyFile(templatePath, filePath);
|
|
133
|
+
upgradedCount++;
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
upgradeSpinner.warn(`Failed to upgrade ${migration.path}`);
|
|
137
|
+
console.log(chalk.yellow(` ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
upgradeSpinner.succeed(`Upgraded ${upgradedCount} file(s) to v${targetVersion}`);
|
|
141
|
+
console.log(chalk.green.bold('\n⨠Migration complete!\n'));
|
|
142
|
+
console.log(chalk.gray('π‘ Tip: Review changes with:'));
|
|
143
|
+
console.log(chalk.cyan(' git diff\n'));
|
|
144
|
+
console.log(chalk.gray('π‘ To rollback, run:'));
|
|
145
|
+
console.log(chalk.cyan(' cortex-tms migrate --rollback\n'));
|
|
146
|
+
}
|
|
147
|
+
async function runRollback(projectRoot) {
|
|
148
|
+
console.log(chalk.bold.cyan('\nβͺ Cortex TMS Rollback\n'));
|
|
149
|
+
const spinner = ora('Searching for backups...').start();
|
|
150
|
+
const backups = await listBackups(projectRoot);
|
|
151
|
+
if (backups.length === 0) {
|
|
152
|
+
spinner.fail('No backups found');
|
|
153
|
+
console.log(chalk.yellow('\nβ οΈ No backup snapshots available.'));
|
|
154
|
+
console.log(chalk.gray('Backups are created automatically when using:'));
|
|
155
|
+
console.log(chalk.cyan(' cortex-tms migrate --apply\n'));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
spinner.succeed(`Found ${backups.length} backup(s)`);
|
|
159
|
+
const choices = await Promise.all(backups.slice(0, 5).map(async (backup) => {
|
|
160
|
+
const backupPath = join(projectRoot, '.cortex', 'backups', backup.timestamp);
|
|
161
|
+
const size = await getBackupSize(backupPath);
|
|
162
|
+
const formattedSize = formatBackupSize(size);
|
|
163
|
+
const fileCount = backup.files.length;
|
|
164
|
+
return {
|
|
165
|
+
name: `${chalk.cyan(backup.timestamp)} - ${chalk.gray(`v${backup.version}`)} - ${chalk.blue(`${fileCount} file(s)`)} - ${chalk.gray(formattedSize)}`,
|
|
166
|
+
value: backup.timestamp,
|
|
167
|
+
short: backup.timestamp,
|
|
168
|
+
};
|
|
169
|
+
}));
|
|
170
|
+
choices.push({
|
|
171
|
+
name: chalk.gray('Cancel'),
|
|
172
|
+
value: 'cancel',
|
|
173
|
+
short: 'Cancel',
|
|
174
|
+
});
|
|
175
|
+
const { selectedBackup } = await inquirer.prompt([
|
|
176
|
+
{
|
|
177
|
+
type: 'list',
|
|
178
|
+
name: 'selectedBackup',
|
|
179
|
+
message: 'Select a backup to restore:',
|
|
180
|
+
choices,
|
|
181
|
+
pageSize: 10,
|
|
182
|
+
},
|
|
183
|
+
]);
|
|
184
|
+
if (selectedBackup === 'cancel') {
|
|
185
|
+
console.log(chalk.gray('\nβ Rollback cancelled.\n'));
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const selectedManifest = backups.find((b) => b.timestamp === selectedBackup);
|
|
189
|
+
if (!selectedManifest) {
|
|
190
|
+
console.log(chalk.red('\nβ Error:'), 'Backup not found.\n');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
console.log(chalk.bold('\nπ Files to be restored:\n'));
|
|
194
|
+
selectedManifest.files.forEach((file) => {
|
|
195
|
+
console.log(chalk.blue(` β ${file.relativePath}`));
|
|
196
|
+
});
|
|
197
|
+
const { confirmed } = await inquirer.prompt([
|
|
198
|
+
{
|
|
199
|
+
type: 'confirm',
|
|
200
|
+
name: 'confirmed',
|
|
201
|
+
message: chalk.yellow('This will overwrite current files. Continue?'),
|
|
202
|
+
default: false,
|
|
203
|
+
},
|
|
204
|
+
]);
|
|
205
|
+
if (!confirmed) {
|
|
206
|
+
console.log(chalk.gray('\nβ Rollback cancelled.\n'));
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
console.log(chalk.bold('\nβͺ Restoring backup...\n'));
|
|
210
|
+
const restoreSpinner = ora('Restoring files...').start();
|
|
211
|
+
try {
|
|
212
|
+
const backupPath = join(projectRoot, '.cortex', 'backups', selectedBackup);
|
|
213
|
+
const restoredCount = await restoreBackup(backupPath);
|
|
214
|
+
restoreSpinner.succeed(`Restored ${restoredCount} file(s) from backup`);
|
|
215
|
+
console.log(chalk.green.bold('\n⨠Rollback complete!\n'));
|
|
216
|
+
console.log(chalk.gray('π‘ Tip: Review restored files with:'));
|
|
217
|
+
console.log(chalk.cyan(' git diff\n'));
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
restoreSpinner.fail('Rollback failed');
|
|
221
|
+
console.log(chalk.red('\nβ Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
222
|
+
console.log(chalk.gray('Files may be partially restored.\n'));
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function printNextSteps(outdatedCount, customizedCount, applyAvailable) {
|
|
81
227
|
console.log(chalk.bold('\nπ Next Steps:\n'));
|
|
82
228
|
if (outdatedCount > 0) {
|
|
83
229
|
console.log(chalk.blue(' 1. Review OUTDATED files marked above'));
|
|
@@ -89,8 +235,20 @@ function printNextSteps(outdatedCount, customizedCount) {
|
|
|
89
235
|
}
|
|
90
236
|
console.log(chalk.gray(` ${outdatedCount > 0 || customizedCount > 0 ? (outdatedCount > 0 && customizedCount > 0 ? '3' : '2') : '1'}. Check the latest templates at:`));
|
|
91
237
|
console.log(chalk.cyan(' https://github.com/cortex-tms/cortex-tms/tree/main/templates'));
|
|
92
|
-
|
|
93
|
-
|
|
238
|
+
if (applyAvailable && (outdatedCount > 0 || customizedCount > 0)) {
|
|
239
|
+
console.log(chalk.bold.cyan('\nπ Automatic Upgrade Available:\n'));
|
|
240
|
+
if (outdatedCount > 0) {
|
|
241
|
+
console.log(chalk.blue(' cortex-tms migrate --apply'));
|
|
242
|
+
console.log(chalk.gray(' β Safely upgrade OUTDATED files (creates backup)\n'));
|
|
243
|
+
}
|
|
244
|
+
if (customizedCount > 0) {
|
|
245
|
+
console.log(chalk.yellow(' cortex-tms migrate --apply --force'));
|
|
246
|
+
console.log(chalk.gray(' β Upgrade ALL files including customized (use with caution)\n'));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
console.log(chalk.gray(' Or manually review and update files as needed.\n'));
|
|
251
|
+
}
|
|
94
252
|
}
|
|
95
253
|
async function analyzeFile(filePath, targetVersion) {
|
|
96
254
|
const fileName = filePath.split('/').pop() || filePath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,EAAE,MAAM,UAAU,CAAC;AAqB1B,MAAM,UAAU,oBAAoB;IAClC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAE9C,cAAc;SACX,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,aAAa,EAAE,iDAAiD,CAAC;SACxE,MAAM,CAAC,gBAAgB,EAAE,sCAAsC,CAAC;SAChE,MAAM,CAAC,aAAa,EAAE,4DAA4D,CAAC;SACnF,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;SAC/C,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,OAAO,cAAc,CAAC;AACxB,CAAC;AAKD,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;AAKrD,KAAK,UAAU,UAAU,CAAC,OAMzB;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAG9G,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAE5D,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;IAC7E,CAAC;IAGD,MAAM,OAAO,GAAG,GAAG,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EACvB,6CAA6C,CAC9C,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAGxC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,kBAAkB,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GACZ,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW;QACvD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW;QAC7B,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAG1D,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACpC,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC1D,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,YAAY,UAAU,CAAC,MAAM,QAAQ,CAAC,CAAC;IAGvD,oBAAoB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAGhD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAEjE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CACzE,CAAC;QACF,OAAO;IACT,CAAC;IAGD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAErD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,iCAAiC,CAAC,CACpE,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,OAAO,UAAU,CAAC,MAAM,qDAAqD,CAAC,CAC5F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,mCAAmC,CAAC,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAGD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAKD,KAAK,UAAU,cAAc,CAC3B,WAAmB,EACnB,UAA2B,EAC3B,aAAqB,EACrB,KAAc;IAEd,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC;IAGvE,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEvE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAGD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,SAAS,UAAU,CAAC,MAAM,6DAA6D,CACxF,CACF,CAAC;IACJ,CAAC;IAGD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnD,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,MAAM,YAAY,CACrC,WAAW,EACX,SAAS,EACT,eAAe,aAAa,EAAE,EAC9B,aAAa,CACd,CAAC;IAEF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,MAAM,YAAY,CAAC,aAAa,6BAA6B,CAC9D,CACF,CAAC;IAGF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAGxD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YAEH,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC1C,aAAa,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,IAAI,CAAC,qBAAqB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACjE,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,cAAc,CAAC,OAAO,CACpB,YAAY,aAAa,gBAAgB,aAAa,EAAE,CACzD,CAAC;IAGF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;AAChE,CAAC;AAKD,KAAK,UAAU,WAAW,CAAC,WAAmB;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAG1D,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;IAGrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAEtC,OAAO;YACL,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YACpJ,KAAK,EAAE,MAAM,CAAC,SAAS;YACvB,KAAK,EAAE,MAAM,CAAC,SAAS;SACxB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAGF,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1B,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IAGH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC/C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,6BAA6B;YACtC,OAAO;YACP,QAAQ,EAAE,EAAE;SACb;KACF,CAAC,CAAC;IAEH,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAGD,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC;IAC7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAGD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAGH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC1C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC;YACrE,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAGD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAC3E,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;QAEtD,cAAc,CAAC,OAAO,CAAC,YAAY,aAAa,sBAAsB,CAAC,CAAC;QAGxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAKD,SAAS,cAAc,CAAC,aAAqB,EAAE,eAAuB,EAAE,cAAuB;IAC7F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE9C,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CACtD,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAC7E,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,KAAK,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,wCAAwC,CAAC,CACzF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,kCAAkC,CAAC,CAC3J,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAChF,CAAC;IAEF,IAAI,cAAc,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAEpE,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAClE,CAAC;IACJ,CAAC;AACH,CAAC;AAKD,KAAK,UAAU,WAAW,CACxB,QAAgB,EAChB,aAAqB;IAErB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;IAGvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,SAAS;YACjB,cAAc,EAAE,IAAI;YACpB,aAAa;YACb,MAAM,EAAE,oBAAoB;SAC7B,CAAC;IACJ,CAAC;IAGD,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAGtD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,YAAY;YACpB,cAAc,EAAE,IAAI;YACpB,aAAa;YACb,MAAM,EAAE,0CAA0C;SACnD,CAAC;IACJ,CAAC;IAGD,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,QAAQ;YAChB,cAAc;YACd,aAAa;SACd,CAAC;IACJ,CAAC;IAGD,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEvD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU;QAChD,cAAc;QACd,aAAa;QACb,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,2BAA2B;KAC/E,CAAC;AACJ,CAAC;AAKD,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACjD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAGlD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAGjE,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,EAAE,CACvC,OAAO,CAAC,OAAO,CAAC,yCAAyC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAExE,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,gBAAgB,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAGvD,OAAO,YAAY,KAAK,gBAAgB,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAKD,SAAS,oBAAoB,CAC3B,UAA2B,EAC3B,aAAqB;IAErB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,aAAa,MAAM,CAAC,CAAC,CAAC;IAGhF,MAAM,QAAQ,GAA6C;QACzD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAGtD,MAAM,YAAY,GAGd;QACF,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE;QAC9D,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE;QAC9D,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;QACrE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE;KACpE,CAAC;IAGF,KAAK,MAAM,MAAM,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,CAAsB,EAAE,CAAC;QAC1F,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEjC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAEpF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc;gBACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,cAAc,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjE,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,UAAU,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorial.d.ts","sourceRoot":"","sources":["../../src/commands/tutorial.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,qBAAqB,IAAI,OAAO,CAU/C;AAKD,eAAO,MAAM,eAAe,SAA0B,CAAC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
export function createTutorialCommand() {
|
|
5
|
+
const tutorialCommand = new Command('tutorial');
|
|
6
|
+
tutorialCommand
|
|
7
|
+
.description('Interactive walkthrough of Cortex TMS features')
|
|
8
|
+
.action(async () => {
|
|
9
|
+
await runTutorial();
|
|
10
|
+
});
|
|
11
|
+
return tutorialCommand;
|
|
12
|
+
}
|
|
13
|
+
export const tutorialCommand = createTutorialCommand();
|
|
14
|
+
async function runTutorial() {
|
|
15
|
+
console.log(chalk.bold.cyan('\nπ Welcome to Cortex TMS Tutorial\n'));
|
|
16
|
+
console.log(chalk.gray('This interactive guide will teach you the "Cortex Way"'));
|
|
17
|
+
console.log(chalk.gray('Press Enter to continue through lessons, or select Exit to quit.\n'));
|
|
18
|
+
const lessons = [
|
|
19
|
+
{
|
|
20
|
+
title: 'π Lesson 1: The Project Dashboard',
|
|
21
|
+
content: [
|
|
22
|
+
'Every Cortex TMS project has a visual dashboard showing:',
|
|
23
|
+
' β’ Current scope (Nano/Standard/Enterprise)',
|
|
24
|
+
' β’ Active tasks from NEXT-TASKS.md',
|
|
25
|
+
' β’ Validation health status',
|
|
26
|
+
' β’ Quick statistics at a glance',
|
|
27
|
+
'',
|
|
28
|
+
'Think of this as your "Project Cockpit" - everything you need to know in one command.',
|
|
29
|
+
],
|
|
30
|
+
command: 'cortex-tms status',
|
|
31
|
+
tip: 'Run this command whenever you return to a project to get oriented.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
title: 'π€ Lesson 2: AI Agent Activation',
|
|
35
|
+
content: [
|
|
36
|
+
'Cortex TMS includes the "Essential 7" prompt library:',
|
|
37
|
+
' β’ init-session - Start with context',
|
|
38
|
+
' β’ feature - Implement with architectural anchors',
|
|
39
|
+
' β’ debug - Troubleshoot systematically',
|
|
40
|
+
' β’ review - Code review against patterns',
|
|
41
|
+
' β’ refactor - Structural improvements',
|
|
42
|
+
' β’ decision - Architecture decision records',
|
|
43
|
+
' β’ finish - Execute maintenance protocol',
|
|
44
|
+
'',
|
|
45
|
+
'Each prompt is project-aware, referencing YOUR docs.',
|
|
46
|
+
'Prompts auto-copy to clipboard for instant paste!',
|
|
47
|
+
],
|
|
48
|
+
command: 'cortex-tms prompt init-session',
|
|
49
|
+
tip: 'Customize prompts by editing PROMPTS.md in your project root.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
title: 'π Lesson 3: Zero-Drift Governance',
|
|
53
|
+
content: [
|
|
54
|
+
'Version drift is the #1 cause of documentation errors.',
|
|
55
|
+
'Cortex TMS eliminates this with automated version sync.',
|
|
56
|
+
'',
|
|
57
|
+
'How it works:',
|
|
58
|
+
' 1. Update package.json version (the Single Source of Truth)',
|
|
59
|
+
' 2. Run the sync script',
|
|
60
|
+
' 3. All docs automatically updated',
|
|
61
|
+
'',
|
|
62
|
+
'CI validates sync on every PR - drift cannot merge!',
|
|
63
|
+
],
|
|
64
|
+
command: 'pnpm run docs:sync',
|
|
65
|
+
tip: 'If CI blocks your PR, run docs:sync locally and commit the changes.',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
title: 'β
Lesson 4: Project Health & The Archive Protocol',
|
|
69
|
+
content: [
|
|
70
|
+
'The validate command checks project health:',
|
|
71
|
+
' β’ Mandatory files exist',
|
|
72
|
+
' β’ No placeholder text (e.g., [YOUR_PROJECT])',
|
|
73
|
+
' β’ Configuration is valid',
|
|
74
|
+
' β’ Archive status is healthy',
|
|
75
|
+
'',
|
|
76
|
+
'The Archive Protocol (you just experienced this!):',
|
|
77
|
+
' β’ CI blocks PRs if >10 completed tasks in NEXT-TASKS.md',
|
|
78
|
+
' β’ This forces regular archival to docs/archive/',
|
|
79
|
+
' β’ Keeps NEXT-TASKS.md focused on current work',
|
|
80
|
+
' β’ Prevents technical debt accumulation',
|
|
81
|
+
'',
|
|
82
|
+
'This is governance that enforces itself!',
|
|
83
|
+
],
|
|
84
|
+
command: 'cortex-tms validate --strict',
|
|
85
|
+
tip: 'Run validate before commits to catch issues early.',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
title: 'π Lesson 5: Safe Template Evolution',
|
|
89
|
+
content: [
|
|
90
|
+
'Templates evolve, but your customizations matter.',
|
|
91
|
+
'The Safe-Fail Migration Engine has 3 components:',
|
|
92
|
+
'',
|
|
93
|
+
'1. Backup Engine (automatic snapshots)',
|
|
94
|
+
' β’ Timestamped backups in .cortex/backups/',
|
|
95
|
+
' β’ Created BEFORE any changes',
|
|
96
|
+
' β’ Manifest tracks what/why',
|
|
97
|
+
'',
|
|
98
|
+
'2. Apply Logic (smart upgrades)',
|
|
99
|
+
' β’ Auto-upgrades OUTDATED files',
|
|
100
|
+
' β’ Skips CUSTOMIZED files (unless --force)',
|
|
101
|
+
' β’ Clear status reporting',
|
|
102
|
+
'',
|
|
103
|
+
'3. Rollback Command (one-click recovery)',
|
|
104
|
+
' β’ Interactive backup selection',
|
|
105
|
+
' β’ Preview before restore',
|
|
106
|
+
' β’ Confirmation required',
|
|
107
|
+
'',
|
|
108
|
+
'Upgrade fearlessly - recovery is one command away!',
|
|
109
|
+
],
|
|
110
|
+
command: 'cortex-tms migrate',
|
|
111
|
+
tip: 'Always run migrate (no flags) first to see what needs updating.',
|
|
112
|
+
},
|
|
113
|
+
];
|
|
114
|
+
let currentLesson = 0;
|
|
115
|
+
while (currentLesson < lessons.length) {
|
|
116
|
+
const lesson = lessons[currentLesson];
|
|
117
|
+
if (!lesson) {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
console.clear();
|
|
121
|
+
console.log(chalk.bold.cyan(`\n${lesson.title}\n`));
|
|
122
|
+
console.log(chalk.gray(`Lesson ${currentLesson + 1} of ${lessons.length}\n`));
|
|
123
|
+
lesson.content.forEach((line) => {
|
|
124
|
+
if (line === '') {
|
|
125
|
+
console.log();
|
|
126
|
+
}
|
|
127
|
+
else if (line.startsWith(' β’')) {
|
|
128
|
+
console.log(chalk.blue(line));
|
|
129
|
+
}
|
|
130
|
+
else if (line.startsWith(' ')) {
|
|
131
|
+
console.log(chalk.gray(line));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
console.log(chalk.white(line));
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
if (lesson.command) {
|
|
138
|
+
console.log(chalk.bold.yellow('\nπ» Try this command:\n'));
|
|
139
|
+
console.log(chalk.cyan(` ${lesson.command}\n`));
|
|
140
|
+
}
|
|
141
|
+
if (lesson.tip) {
|
|
142
|
+
console.log(chalk.gray(`π‘ Pro Tip: ${lesson.tip}\n`));
|
|
143
|
+
}
|
|
144
|
+
const isLast = currentLesson === lessons.length - 1;
|
|
145
|
+
const choices = isLast
|
|
146
|
+
? [
|
|
147
|
+
{ name: chalk.green('β Finish Tutorial'), value: 'next' },
|
|
148
|
+
{ name: chalk.gray('β Previous Lesson'), value: 'prev' },
|
|
149
|
+
{ name: chalk.red('Exit Tutorial'), value: 'exit' },
|
|
150
|
+
]
|
|
151
|
+
: [
|
|
152
|
+
{ name: chalk.green('β Next Lesson'), value: 'next' },
|
|
153
|
+
...(currentLesson > 0
|
|
154
|
+
? [{ name: chalk.gray('β Previous Lesson'), value: 'prev' }]
|
|
155
|
+
: []),
|
|
156
|
+
{ name: chalk.red('Exit Tutorial'), value: 'exit' },
|
|
157
|
+
];
|
|
158
|
+
const { action } = await inquirer.prompt([
|
|
159
|
+
{
|
|
160
|
+
type: 'list',
|
|
161
|
+
name: 'action',
|
|
162
|
+
message: 'What would you like to do?',
|
|
163
|
+
choices,
|
|
164
|
+
},
|
|
165
|
+
]);
|
|
166
|
+
if (action === 'exit') {
|
|
167
|
+
console.log(chalk.gray('\nβ Tutorial exited. Run "cortex-tms tutorial" anytime to continue.\n'));
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
else if (action === 'prev') {
|
|
171
|
+
currentLesson = Math.max(0, currentLesson - 1);
|
|
172
|
+
}
|
|
173
|
+
else if (action === 'next') {
|
|
174
|
+
if (isLast) {
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
currentLesson++;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
console.clear();
|
|
183
|
+
console.log(chalk.bold.green('\nπ Tutorial Complete!\n'));
|
|
184
|
+
console.log(chalk.white('You now know the Cortex Way:'));
|
|
185
|
+
console.log(chalk.blue(' β’ Dashboard: cortex-tms status'));
|
|
186
|
+
console.log(chalk.blue(' β’ AI Activation: cortex-tms prompt'));
|
|
187
|
+
console.log(chalk.blue(' β’ Version Sync: pnpm run docs:sync'));
|
|
188
|
+
console.log(chalk.blue(' β’ Health Check: cortex-tms validate'));
|
|
189
|
+
console.log(chalk.blue(' β’ Migration: cortex-tms migrate'));
|
|
190
|
+
console.log();
|
|
191
|
+
console.log(chalk.gray('π‘ Next Steps:'));
|
|
192
|
+
console.log(chalk.cyan(' 1. Run "cortex-tms status" to see your project dashboard'));
|
|
193
|
+
console.log(chalk.cyan(' 2. Run "cortex-tms prompt init-session" to start coding'));
|
|
194
|
+
console.log(chalk.cyan(' 3. Read NEXT-TASKS.md to see what to work on next'));
|
|
195
|
+
console.log();
|
|
196
|
+
console.log(chalk.gray('π For more details, see:'));
|
|
197
|
+
console.log(chalk.gray(' β’ CLAUDE.md (agent workflow)'));
|
|
198
|
+
console.log(chalk.gray(' β’ docs/core/ARCHITECTURE.md (technical design)'));
|
|
199
|
+
console.log(chalk.gray(' β’ docs/core/PATTERNS.md (coding standards)'));
|
|
200
|
+
console.log();
|
|
201
|
+
console.log(chalk.bold.cyan('Happy coding! π\n'));
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=tutorial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorial.js","sourceRoot":"","sources":["../../src/commands/tutorial.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface BackupFileInfo {
|
|
2
|
+
relativePath: string;
|
|
3
|
+
originalPath: string;
|
|
4
|
+
size: number;
|
|
5
|
+
reason: string;
|
|
6
|
+
}
|
|
7
|
+
export interface BackupManifest {
|
|
8
|
+
timestamp: string;
|
|
9
|
+
version: string;
|
|
10
|
+
reason: string;
|
|
11
|
+
files: BackupFileInfo[];
|
|
12
|
+
projectRoot: string;
|
|
13
|
+
}
|
|
14
|
+
export interface BackupResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
backupPath: string;
|
|
17
|
+
filesBackedUp: number;
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function createBackup(projectRoot: string, filesToBackup: string[], reason: string, version: string): Promise<BackupResult>;
|
|
21
|
+
export declare function restoreBackup(backupPath: string): Promise<number>;
|
|
22
|
+
export declare function listBackups(projectRoot: string): Promise<BackupManifest[]>;
|
|
23
|
+
export declare function pruneBackups(projectRoot: string, keepCount?: number): Promise<number>;
|
|
24
|
+
export declare function getBackupSize(backupPath: string): Promise<number>;
|
|
25
|
+
export declare function formatBackupSize(bytes: number): string;
|
|
26
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/utils/backup.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAwEvB;AAQD,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCvE;AAQD,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA0BhF;AASD,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAyBD,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUvE;AAQD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWtD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { join, dirname, relative } from 'path';
|
|
2
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
export async function createBackup(projectRoot, filesToBackup, reason, version) {
|
|
5
|
+
try {
|
|
6
|
+
const timestamp = generateTimestamp();
|
|
7
|
+
const backupDir = join(projectRoot, '.cortex', 'backups', timestamp);
|
|
8
|
+
if (!existsSync(backupDir)) {
|
|
9
|
+
mkdirSync(backupDir, { recursive: true });
|
|
10
|
+
}
|
|
11
|
+
const backedUpFiles = [];
|
|
12
|
+
for (const filePath of filesToBackup) {
|
|
13
|
+
if (!existsSync(filePath)) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const relativePath = relative(projectRoot, filePath);
|
|
17
|
+
const destPath = join(backupDir, relativePath);
|
|
18
|
+
const destDir = dirname(destPath);
|
|
19
|
+
if (!existsSync(destDir)) {
|
|
20
|
+
mkdirSync(destDir, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
await fs.copyFile(filePath, destPath);
|
|
23
|
+
const stats = await fs.stat(filePath);
|
|
24
|
+
backedUpFiles.push({
|
|
25
|
+
relativePath,
|
|
26
|
+
originalPath: filePath,
|
|
27
|
+
size: stats.size,
|
|
28
|
+
reason: `Backup before ${reason}`,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const manifest = {
|
|
32
|
+
timestamp,
|
|
33
|
+
version,
|
|
34
|
+
reason,
|
|
35
|
+
files: backedUpFiles,
|
|
36
|
+
projectRoot,
|
|
37
|
+
};
|
|
38
|
+
const manifestPath = join(backupDir, 'manifest.json');
|
|
39
|
+
await fs.writeJson(manifestPath, manifest, { spaces: 2 });
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
backupPath: backupDir,
|
|
43
|
+
filesBackedUp: backedUpFiles.length,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
backupPath: '',
|
|
50
|
+
filesBackedUp: 0,
|
|
51
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export async function restoreBackup(backupPath) {
|
|
56
|
+
const manifestPath = join(backupPath, 'manifest.json');
|
|
57
|
+
if (!existsSync(manifestPath)) {
|
|
58
|
+
throw new Error('Backup manifest not found');
|
|
59
|
+
}
|
|
60
|
+
const manifest = await fs.readJson(manifestPath);
|
|
61
|
+
let restoredCount = 0;
|
|
62
|
+
for (const fileInfo of manifest.files) {
|
|
63
|
+
const sourcePath = join(backupPath, fileInfo.relativePath);
|
|
64
|
+
const destPath = fileInfo.originalPath;
|
|
65
|
+
if (!existsSync(sourcePath)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const destDir = dirname(destPath);
|
|
69
|
+
if (!existsSync(destDir)) {
|
|
70
|
+
mkdirSync(destDir, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
await fs.copyFile(sourcePath, destPath);
|
|
73
|
+
restoredCount++;
|
|
74
|
+
}
|
|
75
|
+
return restoredCount;
|
|
76
|
+
}
|
|
77
|
+
export async function listBackups(projectRoot) {
|
|
78
|
+
const backupsDir = join(projectRoot, '.cortex', 'backups');
|
|
79
|
+
if (!existsSync(backupsDir)) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
const backupDirs = await fs.readdir(backupsDir);
|
|
83
|
+
const manifests = [];
|
|
84
|
+
for (const dir of backupDirs) {
|
|
85
|
+
const manifestPath = join(backupsDir, dir, 'manifest.json');
|
|
86
|
+
if (existsSync(manifestPath)) {
|
|
87
|
+
try {
|
|
88
|
+
const manifest = await fs.readJson(manifestPath);
|
|
89
|
+
manifests.push(manifest);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return manifests.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
|
|
97
|
+
}
|
|
98
|
+
export async function pruneBackups(projectRoot, keepCount = 10) {
|
|
99
|
+
const backups = await listBackups(projectRoot);
|
|
100
|
+
if (backups.length <= keepCount) {
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
const backupsDir = join(projectRoot, '.cortex', 'backups');
|
|
104
|
+
const toDelete = backups.slice(keepCount);
|
|
105
|
+
let deletedCount = 0;
|
|
106
|
+
for (const backup of toDelete) {
|
|
107
|
+
const backupDir = join(backupsDir, backup.timestamp);
|
|
108
|
+
if (existsSync(backupDir)) {
|
|
109
|
+
await fs.remove(backupDir);
|
|
110
|
+
deletedCount++;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return deletedCount;
|
|
114
|
+
}
|
|
115
|
+
function generateTimestamp() {
|
|
116
|
+
const now = new Date();
|
|
117
|
+
const year = now.getFullYear();
|
|
118
|
+
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
119
|
+
const day = String(now.getDate()).padStart(2, '0');
|
|
120
|
+
const hours = String(now.getHours()).padStart(2, '0');
|
|
121
|
+
const minutes = String(now.getMinutes()).padStart(2, '0');
|
|
122
|
+
const seconds = String(now.getSeconds()).padStart(2, '0');
|
|
123
|
+
return `${year}-${month}-${day}_${hours}${minutes}${seconds}`;
|
|
124
|
+
}
|
|
125
|
+
export async function getBackupSize(backupPath) {
|
|
126
|
+
const manifestPath = join(backupPath, 'manifest.json');
|
|
127
|
+
if (!existsSync(manifestPath)) {
|
|
128
|
+
return 0;
|
|
129
|
+
}
|
|
130
|
+
const manifest = await fs.readJson(manifestPath);
|
|
131
|
+
return manifest.files.reduce((total, file) => total + file.size, 0);
|
|
132
|
+
}
|
|
133
|
+
export function formatBackupSize(bytes) {
|
|
134
|
+
const units = ['B', 'KB', 'MB', 'GB'];
|
|
135
|
+
let size = bytes;
|
|
136
|
+
let unitIndex = 0;
|
|
137
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
138
|
+
size /= 1024;
|
|
139
|
+
unitIndex++;
|
|
140
|
+
}
|
|
141
|
+
return `${size.toFixed(1)} ${units[unitIndex]}`;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/utils/backup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cortex-tms",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "The Universal AI-Optimized Project Boilerplate - CLI tool for bootstrapping TMS-structured projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
"cli:dev": "tsx src/cli.ts",
|
|
23
23
|
"cli:build": "tsc -p tsconfig.cli.json",
|
|
24
24
|
"cli:test": "node bin/cortex-tms.js --help",
|
|
25
|
+
"docs:sync": "node scripts/sync-project.js",
|
|
26
|
+
"docs:check": "node scripts/sync-project.js --check",
|
|
25
27
|
"test": "vitest run",
|
|
26
28
|
"test:watch": "vitest",
|
|
27
29
|
"test:coverage": "vitest run --coverage",
|
package/templates/PROMPTS.md
CHANGED
|
@@ -42,7 +42,13 @@ We need to decide on `[TOPIC]`. Draft a new Architecture Decision Record in `doc
|
|
|
42
42
|
|
|
43
43
|
## finish
|
|
44
44
|
|
|
45
|
-
Task complete. Execute the Maintenance Protocol:
|
|
45
|
+
Task complete. Execute the Maintenance Protocol:
|
|
46
|
+
|
|
47
|
+
1. Run `pnpm run docs:sync` to ensure version integrity across documentation
|
|
48
|
+
2. Update `NEXT-TASKS.md` with task status and next priorities
|
|
49
|
+
3. Run `node bin/cortex-tms.js validate --strict` to verify project health
|
|
50
|
+
4. Follow Git Protocol: commit with conventional format and co-authorship
|
|
51
|
+
5. Suggest next priority from backlog
|
|
46
52
|
|
|
47
53
|
---
|
|
48
54
|
|
|
@@ -52,4 +58,4 @@ Task complete. Execute the Maintenance Protocol: update `NEXT-TASKS.md`, sync tr
|
|
|
52
58
|
- Customize these prompts to match your team's vocabulary and workflow
|
|
53
59
|
- Run `cortex-tms prompt --list` to see all available prompts
|
|
54
60
|
|
|
55
|
-
<!-- @cortex-tms-version 2.
|
|
61
|
+
<!-- @cortex-tms-version 2.4.1 -->
|