@mindfoldhq/trellis 0.3.0-rc.5 → 0.3.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 +16 -4
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +29 -15
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +19 -11
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/antigravity.d.ts +8 -0
- package/dist/configurators/antigravity.d.ts.map +1 -0
- package/dist/configurators/antigravity.js +18 -0
- package/dist/configurators/antigravity.js.map +1 -0
- package/dist/configurators/gemini.d.ts +8 -0
- package/dist/configurators/gemini.d.ts.map +1 -0
- package/dist/configurators/gemini.js +52 -0
- package/dist/configurators/gemini.js.map +1 -0
- package/dist/configurators/index.d.ts.map +1 -1
- package/dist/configurators/index.js +49 -1
- package/dist/configurators/index.js.map +1 -1
- package/dist/configurators/kilo.d.ts +8 -0
- package/dist/configurators/kilo.d.ts.map +1 -0
- package/dist/configurators/kilo.js +51 -0
- package/dist/configurators/kilo.js.map +1 -0
- package/dist/configurators/kiro.d.ts +8 -0
- package/dist/configurators/kiro.d.ts.map +1 -0
- package/dist/configurators/kiro.js +20 -0
- package/dist/configurators/kiro.js.map +1 -0
- package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
- package/dist/migrations/manifests/0.3.0.json +11 -0
- package/dist/templates/antigravity/index.d.ts +12 -0
- package/dist/templates/antigravity/index.d.ts.map +1 -0
- package/dist/templates/antigravity/index.js +29 -0
- package/dist/templates/antigravity/index.js.map +1 -0
- package/dist/templates/claude/agents/implement.md +1 -1
- package/dist/templates/claude/commands/trellis/brainstorm.md +16 -18
- package/dist/templates/claude/commands/trellis/start.md +73 -48
- package/dist/templates/codex/skills/brainstorm/SKILL.md +16 -18
- package/dist/templates/codex/skills/start/SKILL.md +80 -46
- package/dist/templates/cursor/commands/trellis-brainstorm.md +16 -18
- package/dist/templates/cursor/commands/trellis-start.md +191 -23
- package/dist/templates/extract.d.ts +52 -0
- package/dist/templates/extract.d.ts.map +1 -1
- package/dist/templates/extract.js +90 -0
- package/dist/templates/extract.js.map +1 -1
- package/dist/templates/gemini/commands/trellis/before-backend-dev.toml +17 -0
- package/dist/templates/gemini/commands/trellis/before-frontend-dev.toml +17 -0
- package/dist/templates/gemini/commands/trellis/brainstorm.toml +420 -0
- package/dist/templates/gemini/commands/trellis/break-loop.toml +129 -0
- package/dist/templates/gemini/commands/trellis/check-backend.toml +17 -0
- package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +147 -0
- package/dist/templates/gemini/commands/trellis/check-frontend.toml +17 -0
- package/dist/templates/gemini/commands/trellis/create-command.toml +119 -0
- package/dist/templates/gemini/commands/trellis/finish-work.toml +133 -0
- package/dist/templates/gemini/commands/trellis/integrate-skill.toml +104 -0
- package/dist/templates/gemini/commands/trellis/onboard.toml +111 -0
- package/dist/templates/gemini/commands/trellis/record-session.toml +66 -0
- package/dist/templates/gemini/commands/trellis/start.toml +292 -0
- package/dist/templates/gemini/commands/trellis/update-spec.toml +132 -0
- package/dist/templates/gemini/index.d.ts +21 -0
- package/dist/templates/gemini/index.d.ts.map +1 -0
- package/dist/templates/gemini/index.js +44 -0
- package/dist/templates/gemini/index.js.map +1 -0
- package/dist/templates/iflow/agents/implement.md +1 -1
- package/dist/templates/iflow/commands/trellis/brainstorm.md +16 -18
- package/dist/templates/iflow/commands/trellis/finish-work.md +9 -0
- package/dist/templates/iflow/commands/trellis/start.md +108 -50
- package/dist/templates/iflow/index.d.ts +3 -2
- package/dist/templates/iflow/index.d.ts.map +1 -1
- package/dist/templates/iflow/index.js +7 -9
- package/dist/templates/iflow/index.js.map +1 -1
- package/dist/templates/kilo/commands/trellis/before-backend-dev.md +13 -0
- package/dist/templates/kilo/commands/trellis/before-frontend-dev.md +13 -0
- package/dist/templates/kilo/commands/trellis/brainstorm.md +474 -0
- package/dist/templates/kilo/commands/trellis/break-loop.md +125 -0
- package/dist/templates/kilo/commands/trellis/check-backend.md +13 -0
- package/dist/templates/kilo/commands/trellis/check-cross-layer.md +153 -0
- package/dist/templates/kilo/commands/trellis/check-frontend.md +13 -0
- package/dist/templates/kilo/commands/trellis/create-command.md +152 -0
- package/dist/templates/kilo/commands/trellis/finish-work.md +129 -0
- package/dist/templates/kilo/commands/trellis/integrate-skill.md +219 -0
- package/dist/templates/kilo/commands/trellis/onboard.md +358 -0
- package/dist/templates/kilo/commands/trellis/parallel.md +194 -0
- package/dist/templates/kilo/commands/trellis/record-session.md +62 -0
- package/dist/templates/kilo/commands/trellis/start.md +321 -0
- package/dist/templates/kilo/commands/trellis/update-spec.md +285 -0
- package/dist/templates/kilo/index.d.ts +16 -0
- package/dist/templates/kilo/index.d.ts.map +1 -0
- package/dist/templates/kilo/index.js +39 -0
- package/dist/templates/kilo/index.js.map +1 -0
- package/dist/templates/kiro/index.d.ts +18 -0
- package/dist/templates/kiro/index.d.ts.map +1 -0
- package/dist/templates/kiro/index.js +40 -0
- package/dist/templates/kiro/index.js.map +1 -0
- package/dist/templates/kiro/skills/before-backend-dev/SKILL.md +18 -0
- package/dist/templates/kiro/skills/before-frontend-dev/SKILL.md +18 -0
- package/dist/templates/kiro/skills/brainstorm/SKILL.md +479 -0
- package/dist/templates/kiro/skills/break-loop/SKILL.md +130 -0
- package/dist/templates/kiro/skills/check-backend/SKILL.md +18 -0
- package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +158 -0
- package/dist/templates/kiro/skills/check-frontend/SKILL.md +18 -0
- package/dist/templates/kiro/skills/create-command/SKILL.md +101 -0
- package/dist/templates/kiro/skills/finish-work/SKILL.md +148 -0
- package/dist/templates/kiro/skills/integrate-skill/SKILL.md +221 -0
- package/dist/templates/kiro/skills/onboard/SKILL.md +363 -0
- package/dist/templates/kiro/skills/record-session/SKILL.md +67 -0
- package/dist/templates/kiro/skills/start/SKILL.md +330 -0
- package/dist/templates/kiro/skills/update-spec/SKILL.md +335 -0
- package/dist/templates/opencode/agents/implement.md +1 -1
- package/dist/templates/opencode/agents/research.md +1 -2
- package/dist/templates/opencode/commands/trellis/brainstorm.md +16 -18
- package/dist/templates/opencode/commands/trellis/start.md +71 -48
- package/dist/templates/trellis/scripts/common/cli_adapter.py +100 -12
- package/dist/templates/trellis/scripts/common/registry.py +1 -1
- package/dist/templates/trellis/scripts/task.py +1 -8
- package/dist/types/ai-tools.d.ts +4 -4
- package/dist/types/ai-tools.d.ts.map +1 -1
- package/dist/types/ai-tools.js +32 -0
- package/dist/types/ai-tools.js.map +1 -1
- package/package.json +3 -2
|
@@ -443,28 +443,26 @@ Context / Decision / Consequences
|
|
|
443
443
|
|
|
444
444
|
## Integration with Start Workflow
|
|
445
445
|
|
|
446
|
-
|
|
446
|
+
After brainstorm completes (Step 8 confirmation approved), the flow continues to the Task Workflow's **Phase 2: Prepare for Implementation**:
|
|
447
447
|
|
|
448
448
|
```text
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
Step
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
↓
|
|
463
|
-
Step 8: Final confirmation + small-PR plan
|
|
464
|
-
↓
|
|
465
|
-
Implement
|
|
449
|
+
Brainstorm
|
|
450
|
+
Step 0: Create task directory + seed PRD
|
|
451
|
+
Step 1–7: Discover requirements, research, converge
|
|
452
|
+
Step 8: Final confirmation → user approves
|
|
453
|
+
↓
|
|
454
|
+
Task Workflow Phase 2 (Prepare for Implementation)
|
|
455
|
+
Code-Spec Depth Check (if applicable)
|
|
456
|
+
→ Research codebase (based on confirmed PRD)
|
|
457
|
+
→ Configure code-spec context (jsonl files)
|
|
458
|
+
→ Activate task
|
|
459
|
+
↓
|
|
460
|
+
Task Workflow Phase 3 (Execute)
|
|
461
|
+
Implement → Check → Complete
|
|
466
462
|
```
|
|
467
463
|
|
|
464
|
+
The task directory and PRD already exist from brainstorm, so Phase 1 of the Task Workflow is skipped entirely.
|
|
465
|
+
|
|
468
466
|
---
|
|
469
467
|
|
|
470
468
|
## Related Commands
|
|
@@ -104,18 +104,70 @@ See `/trellis:brainstorm` for the full process. Summary:
|
|
|
104
104
|
- Check Agent verifies against code-spec requirements
|
|
105
105
|
- Result: Code that follows project conventions automatically
|
|
106
106
|
|
|
107
|
-
###
|
|
107
|
+
### Overview: Two Entry Points
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
```
|
|
110
|
+
From Brainstorm (Complex Task):
|
|
111
|
+
PRD confirmed → Research → Configure Context → Activate → Implement → Check → Complete
|
|
112
|
+
|
|
113
|
+
From Simple Task:
|
|
114
|
+
Confirm → Create Task → Write PRD → Research → Configure Context → Activate → Implement → Check → Complete
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Key principle: Research happens AFTER requirements are clear (PRD exists).**
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### Phase 1: Establish Requirements
|
|
122
|
+
|
|
123
|
+
#### Path A: From Brainstorm (skip to Phase 2)
|
|
124
|
+
|
|
125
|
+
PRD and task directory already exist from brainstorm. Skip directly to Phase 2.
|
|
110
126
|
|
|
111
|
-
|
|
127
|
+
#### Path B: From Simple Task
|
|
128
|
+
|
|
129
|
+
**Step 1: Confirm Understanding** `[AI]`
|
|
130
|
+
|
|
131
|
+
Quick confirm:
|
|
112
132
|
- What is the goal?
|
|
113
133
|
- What type of development? (frontend / backend / fullstack)
|
|
114
134
|
- Any specific requirements or constraints?
|
|
115
135
|
|
|
116
|
-
|
|
136
|
+
**Step 2: Create Task Directory** `[AI]`
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
TASK_DIR=$(python3 ./.trellis/scripts/task.py create "<title>" --slug <name>)
|
|
140
|
+
```
|
|
117
141
|
|
|
118
|
-
|
|
142
|
+
**Step 3: Write PRD** `[AI]`
|
|
143
|
+
|
|
144
|
+
Create `prd.md` in the task directory with:
|
|
145
|
+
|
|
146
|
+
```markdown
|
|
147
|
+
# <Task Title>
|
|
148
|
+
|
|
149
|
+
## Goal
|
|
150
|
+
<What we're trying to achieve>
|
|
151
|
+
|
|
152
|
+
## Requirements
|
|
153
|
+
- <Requirement 1>
|
|
154
|
+
- <Requirement 2>
|
|
155
|
+
|
|
156
|
+
## Acceptance Criteria
|
|
157
|
+
- [ ] <Criterion 1>
|
|
158
|
+
- [ ] <Criterion 2>
|
|
159
|
+
|
|
160
|
+
## Technical Notes
|
|
161
|
+
<Any technical decisions or constraints>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
### Phase 2: Prepare for Implementation (shared)
|
|
167
|
+
|
|
168
|
+
> Both paths converge here. PRD and task directory must exist before proceeding.
|
|
169
|
+
|
|
170
|
+
**Step 4: Code-Spec Depth Check** `[AI]`
|
|
119
171
|
|
|
120
172
|
If the task touches infra or cross-layer contracts, do not start implementation until code-spec depth is defined.
|
|
121
173
|
|
|
@@ -125,22 +177,22 @@ Trigger this requirement when the change includes any of:
|
|
|
125
177
|
- Infra integrations (storage, queue, cache, secrets, env contracts)
|
|
126
178
|
- Cross-layer payload transformations
|
|
127
179
|
|
|
128
|
-
Must-have before
|
|
180
|
+
Must-have before proceeding:
|
|
129
181
|
- [ ] Target code-spec files to update are identified
|
|
130
182
|
- [ ] Concrete contract is defined (signature, fields, env keys)
|
|
131
183
|
- [ ] Validation and error matrix is defined
|
|
132
184
|
- [ ] At least one Good/Base/Bad case is defined
|
|
133
185
|
|
|
134
|
-
|
|
186
|
+
**Step 5: Research the Codebase** `[AI]`
|
|
135
187
|
|
|
136
|
-
|
|
188
|
+
Based on the confirmed PRD, call Research Agent to find relevant specs and patterns:
|
|
137
189
|
|
|
138
190
|
```
|
|
139
191
|
Task(
|
|
140
192
|
subagent_type: "research",
|
|
141
193
|
prompt: "Analyze the codebase for this task:
|
|
142
194
|
|
|
143
|
-
Task: <
|
|
195
|
+
Task: <goal from PRD>
|
|
144
196
|
Type: <frontend/backend/fullstack>
|
|
145
197
|
|
|
146
198
|
Please find:
|
|
@@ -156,23 +208,12 @@ Task(
|
|
|
156
208
|
- <pattern>: <example file path>
|
|
157
209
|
|
|
158
210
|
## Files to Modify
|
|
159
|
-
- <path>: <what change>
|
|
160
|
-
|
|
161
|
-
## Suggested Task Name
|
|
162
|
-
- <short-slug-name>",
|
|
211
|
+
- <path>: <what change>",
|
|
163
212
|
model: "opus"
|
|
164
213
|
)
|
|
165
214
|
```
|
|
166
215
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
Based on research results:
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
TASK_DIR=$(python3 ./.trellis/scripts/task.py create "<title from research>" --slug <suggested-slug>)
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
### Step 4: Configure Context `[AI]`
|
|
216
|
+
**Step 6: Configure Context** `[AI]`
|
|
176
217
|
|
|
177
218
|
Initialize default context:
|
|
178
219
|
|
|
@@ -189,29 +230,7 @@ python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" implement "<path>" "<
|
|
|
189
230
|
python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" check "<path>" "<reason>"
|
|
190
231
|
```
|
|
191
232
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
Create `prd.md` in the task directory with:
|
|
195
|
-
|
|
196
|
-
```markdown
|
|
197
|
-
# <Task Title>
|
|
198
|
-
|
|
199
|
-
## Goal
|
|
200
|
-
<What we're trying to achieve>
|
|
201
|
-
|
|
202
|
-
## Requirements
|
|
203
|
-
- <Requirement 1>
|
|
204
|
-
- <Requirement 2>
|
|
205
|
-
|
|
206
|
-
## Acceptance Criteria
|
|
207
|
-
- [ ] <Criterion 1>
|
|
208
|
-
- [ ] <Criterion 2>
|
|
209
|
-
|
|
210
|
-
## Technical Notes
|
|
211
|
-
<Any technical decisions or constraints>
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Step 6: Activate Task `[AI]`
|
|
233
|
+
**Step 7: Activate Task** `[AI]`
|
|
215
234
|
|
|
216
235
|
```bash
|
|
217
236
|
python3 ./.trellis/scripts/task.py start "$TASK_DIR"
|
|
@@ -219,7 +238,11 @@ python3 ./.trellis/scripts/task.py start "$TASK_DIR"
|
|
|
219
238
|
|
|
220
239
|
This sets `.current-task` so hooks can inject context.
|
|
221
240
|
|
|
222
|
-
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
### Phase 3: Execute (shared)
|
|
244
|
+
|
|
245
|
+
**Step 8: Implement** `[AI]`
|
|
223
246
|
|
|
224
247
|
Call Implement Agent (code-spec context is auto-injected by hook):
|
|
225
248
|
|
|
@@ -234,7 +257,7 @@ Task(
|
|
|
234
257
|
)
|
|
235
258
|
```
|
|
236
259
|
|
|
237
|
-
|
|
260
|
+
**Step 9: Check Quality** `[AI]`
|
|
238
261
|
|
|
239
262
|
Call Check Agent (code-spec context is auto-injected by hook):
|
|
240
263
|
|
|
@@ -249,7 +272,7 @@ Task(
|
|
|
249
272
|
)
|
|
250
273
|
```
|
|
251
274
|
|
|
252
|
-
|
|
275
|
+
**Step 10: Complete** `[AI]`
|
|
253
276
|
|
|
254
277
|
1. Verify lint and typecheck pass
|
|
255
278
|
2. Report what was implemented
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
CLI Adapter for Multi-Platform Support.
|
|
3
3
|
|
|
4
|
-
Abstracts differences between Claude Code, OpenCode, Cursor, iFlow, and
|
|
4
|
+
Abstracts differences between Claude Code, OpenCode, Cursor, iFlow, Codex, Kilo, Kiro Code, Gemini CLI, and Antigravity interfaces.
|
|
5
5
|
|
|
6
6
|
Supported platforms:
|
|
7
7
|
- claude: Claude Code (default)
|
|
@@ -9,6 +9,10 @@ Supported platforms:
|
|
|
9
9
|
- cursor: Cursor IDE
|
|
10
10
|
- iflow: iFlow CLI
|
|
11
11
|
- codex: Codex CLI (skills-based)
|
|
12
|
+
- kilo: Kilo CLI
|
|
13
|
+
- kiro: Kiro Code (skills-based)
|
|
14
|
+
- gemini: Gemini CLI
|
|
15
|
+
- antigravity: Antigravity (workflow-based)
|
|
12
16
|
|
|
13
17
|
Usage:
|
|
14
18
|
from common.cli_adapter import CLIAdapter
|
|
@@ -27,7 +31,7 @@ from dataclasses import dataclass
|
|
|
27
31
|
from pathlib import Path
|
|
28
32
|
from typing import ClassVar, Literal
|
|
29
33
|
|
|
30
|
-
Platform = Literal["claude", "opencode", "cursor", "iflow", "codex"]
|
|
34
|
+
Platform = Literal["claude", "opencode", "cursor", "iflow", "codex", "kilo", "kiro", "gemini", "antigravity"]
|
|
31
35
|
|
|
32
36
|
|
|
33
37
|
@dataclass
|
|
@@ -71,7 +75,7 @@ class CLIAdapter:
|
|
|
71
75
|
"""Get platform-specific config directory name.
|
|
72
76
|
|
|
73
77
|
Returns:
|
|
74
|
-
Directory name ('.claude', '.opencode', '.cursor', '.iflow', or '.
|
|
78
|
+
Directory name ('.claude', '.opencode', '.cursor', '.iflow', '.agents', '.kilocode', '.kiro', '.gemini', or '.agent')
|
|
75
79
|
"""
|
|
76
80
|
if self.platform == "opencode":
|
|
77
81
|
return ".opencode"
|
|
@@ -81,6 +85,14 @@ class CLIAdapter:
|
|
|
81
85
|
return ".iflow"
|
|
82
86
|
elif self.platform == "codex":
|
|
83
87
|
return ".agents"
|
|
88
|
+
elif self.platform == "kilo":
|
|
89
|
+
return ".kilocode"
|
|
90
|
+
elif self.platform == "kiro":
|
|
91
|
+
return ".kiro"
|
|
92
|
+
elif self.platform == "gemini":
|
|
93
|
+
return ".gemini"
|
|
94
|
+
elif self.platform == "antigravity":
|
|
95
|
+
return ".agent"
|
|
84
96
|
else:
|
|
85
97
|
return ".claude"
|
|
86
98
|
|
|
@@ -91,7 +103,7 @@ class CLIAdapter:
|
|
|
91
103
|
project_root: Project root directory
|
|
92
104
|
|
|
93
105
|
Returns:
|
|
94
|
-
Path to config directory (.claude, .opencode, .cursor, .iflow, or .
|
|
106
|
+
Path to config directory (.claude, .opencode, .cursor, .iflow, .agents, .kilocode, .kiro, or .agent)
|
|
95
107
|
"""
|
|
96
108
|
return project_root / self.config_dir_name
|
|
97
109
|
|
|
@@ -120,8 +132,18 @@ class CLIAdapter:
|
|
|
120
132
|
|
|
121
133
|
Note:
|
|
122
134
|
Cursor uses prefix naming: .cursor/commands/trellis-<name>.md
|
|
135
|
+
Antigravity uses workflow directory: .agent/workflows/<name>.md
|
|
123
136
|
Claude/OpenCode use subdirectory: .claude/commands/trellis/<name>.md
|
|
124
137
|
"""
|
|
138
|
+
if self.platform == "antigravity":
|
|
139
|
+
workflow_dir = self.get_config_dir(project_root) / "workflows"
|
|
140
|
+
if not parts:
|
|
141
|
+
return workflow_dir
|
|
142
|
+
if len(parts) >= 2 and parts[0] == "trellis":
|
|
143
|
+
filename = parts[-1]
|
|
144
|
+
return workflow_dir / filename
|
|
145
|
+
return workflow_dir / Path(*parts)
|
|
146
|
+
|
|
125
147
|
if not parts:
|
|
126
148
|
return self.get_config_dir(project_root) / "commands"
|
|
127
149
|
|
|
@@ -145,12 +167,21 @@ class CLIAdapter:
|
|
|
145
167
|
Note:
|
|
146
168
|
Cursor: .cursor/commands/trellis-<name>.md
|
|
147
169
|
Codex: .agents/skills/<name>/SKILL.md
|
|
170
|
+
Kiro: .kiro/skills/<name>/SKILL.md
|
|
171
|
+
Gemini: .gemini/commands/trellis/<name>.toml
|
|
172
|
+
Antigravity: .agent/workflows/<name>.md
|
|
148
173
|
Others: .{platform}/commands/trellis/<name>.md
|
|
149
174
|
"""
|
|
150
175
|
if self.platform == "cursor":
|
|
151
176
|
return f".cursor/commands/trellis-{name}.md"
|
|
152
177
|
elif self.platform == "codex":
|
|
153
178
|
return f".agents/skills/{name}/SKILL.md"
|
|
179
|
+
elif self.platform == "kiro":
|
|
180
|
+
return f".kiro/skills/{name}/SKILL.md"
|
|
181
|
+
elif self.platform == "gemini":
|
|
182
|
+
return f".gemini/commands/trellis/{name}.toml"
|
|
183
|
+
elif self.platform == "antigravity":
|
|
184
|
+
return f".agent/workflows/{name}.md"
|
|
154
185
|
else:
|
|
155
186
|
return f"{self.config_dir_name}/commands/trellis/{name}.md"
|
|
156
187
|
|
|
@@ -168,6 +199,12 @@ class CLIAdapter:
|
|
|
168
199
|
return {"OPENCODE_NON_INTERACTIVE": "1"}
|
|
169
200
|
elif self.platform == "codex":
|
|
170
201
|
return {"CODEX_NON_INTERACTIVE": "1"}
|
|
202
|
+
elif self.platform == "kiro":
|
|
203
|
+
return {"KIRO_NON_INTERACTIVE": "1"}
|
|
204
|
+
elif self.platform == "gemini":
|
|
205
|
+
return {} # Gemini CLI doesn't have a non-interactive env var
|
|
206
|
+
elif self.platform == "antigravity":
|
|
207
|
+
return {}
|
|
171
208
|
else:
|
|
172
209
|
return {"CLAUDE_NON_INTERACTIVE": "1"}
|
|
173
210
|
|
|
@@ -221,6 +258,15 @@ class CLIAdapter:
|
|
|
221
258
|
elif self.platform == "codex":
|
|
222
259
|
cmd = ["codex", "exec"]
|
|
223
260
|
cmd.append(prompt)
|
|
261
|
+
elif self.platform == "kiro":
|
|
262
|
+
cmd = ["kiro", "run", prompt]
|
|
263
|
+
elif self.platform == "gemini":
|
|
264
|
+
cmd = ["gemini"]
|
|
265
|
+
cmd.append(prompt)
|
|
266
|
+
elif self.platform == "antigravity":
|
|
267
|
+
raise ValueError(
|
|
268
|
+
"Antigravity workflows are UI slash commands; CLI agent run is not supported."
|
|
269
|
+
)
|
|
224
270
|
|
|
225
271
|
else: # claude
|
|
226
272
|
cmd = ["claude", "-p"]
|
|
@@ -255,6 +301,14 @@ class CLIAdapter:
|
|
|
255
301
|
return ["opencode", "run", "--session", session_id]
|
|
256
302
|
elif self.platform == "codex":
|
|
257
303
|
return ["codex", "resume", session_id]
|
|
304
|
+
elif self.platform == "kiro":
|
|
305
|
+
return ["kiro", "resume", session_id]
|
|
306
|
+
elif self.platform == "gemini":
|
|
307
|
+
return ["gemini", "--resume", session_id]
|
|
308
|
+
elif self.platform == "antigravity":
|
|
309
|
+
raise ValueError(
|
|
310
|
+
"Antigravity workflows are UI slash commands; CLI resume is not supported."
|
|
311
|
+
)
|
|
258
312
|
else:
|
|
259
313
|
return ["claude", "--resume", session_id]
|
|
260
314
|
|
|
@@ -304,6 +358,12 @@ class CLIAdapter:
|
|
|
304
358
|
return "opencode"
|
|
305
359
|
elif self.is_cursor:
|
|
306
360
|
return "cursor" # Note: Cursor is IDE-only, no CLI
|
|
361
|
+
elif self.platform == "kiro":
|
|
362
|
+
return "kiro"
|
|
363
|
+
elif self.platform == "gemini":
|
|
364
|
+
return "gemini"
|
|
365
|
+
elif self.platform == "antigravity":
|
|
366
|
+
return "agy"
|
|
307
367
|
else:
|
|
308
368
|
return "claude"
|
|
309
369
|
|
|
@@ -358,7 +418,7 @@ def get_cli_adapter(platform: str = "claude") -> CLIAdapter:
|
|
|
358
418
|
"""Get CLI adapter for the specified platform.
|
|
359
419
|
|
|
360
420
|
Args:
|
|
361
|
-
platform: Platform name ('claude', 'opencode', 'cursor', 'iflow', or '
|
|
421
|
+
platform: Platform name ('claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', or 'antigravity')
|
|
362
422
|
|
|
363
423
|
Returns:
|
|
364
424
|
CLIAdapter instance
|
|
@@ -366,8 +426,8 @@ def get_cli_adapter(platform: str = "claude") -> CLIAdapter:
|
|
|
366
426
|
Raises:
|
|
367
427
|
ValueError: If platform is not supported
|
|
368
428
|
"""
|
|
369
|
-
if platform not in ("claude", "opencode", "cursor", "iflow", "codex"):
|
|
370
|
-
raise ValueError(f"Unsupported platform: {platform} (must be 'claude', 'opencode', 'cursor', 'iflow', or '
|
|
429
|
+
if platform not in ("claude", "opencode", "cursor", "iflow", "codex", "kilo", "kiro", "gemini", "antigravity"):
|
|
430
|
+
raise ValueError(f"Unsupported platform: {platform} (must be 'claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', 'gemini', or 'antigravity')")
|
|
371
431
|
|
|
372
432
|
return CLIAdapter(platform=platform) # type: ignore
|
|
373
433
|
|
|
@@ -381,19 +441,23 @@ def detect_platform(project_root: Path) -> Platform:
|
|
|
381
441
|
3. .iflow directory exists → iflow
|
|
382
442
|
4. .cursor directory exists (without .claude) → cursor
|
|
383
443
|
5. .agents/skills exists and no other platform dirs → codex
|
|
384
|
-
6.
|
|
444
|
+
6. .kilocode directory exists → kilo
|
|
445
|
+
7. .kiro/skills exists and no other platform dirs → kiro
|
|
446
|
+
8. .gemini directory exists → gemini
|
|
447
|
+
9. .agent/workflows exists and no other platform dirs → antigravity
|
|
448
|
+
10. Default → claude
|
|
385
449
|
|
|
386
450
|
Args:
|
|
387
451
|
project_root: Project root directory
|
|
388
452
|
|
|
389
453
|
Returns:
|
|
390
|
-
Detected platform ('claude', 'opencode', 'cursor', 'iflow', or '
|
|
454
|
+
Detected platform ('claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', 'gemini', or 'antigravity')
|
|
391
455
|
"""
|
|
392
456
|
import os
|
|
393
457
|
|
|
394
458
|
# Check environment variable first
|
|
395
459
|
env_platform = os.environ.get("TRELLIS_PLATFORM", "").lower()
|
|
396
|
-
if env_platform in ("claude", "opencode", "cursor", "iflow", "codex"):
|
|
460
|
+
if env_platform in ("claude", "opencode", "cursor", "iflow", "codex", "kilo", "kiro", "gemini", "antigravity"):
|
|
397
461
|
return env_platform # type: ignore
|
|
398
462
|
|
|
399
463
|
# Check for .opencode directory (OpenCode-specific)
|
|
@@ -411,14 +475,38 @@ def detect_platform(project_root: Path) -> Platform:
|
|
|
411
475
|
if (project_root / ".cursor").is_dir() and not (project_root / ".claude").is_dir():
|
|
412
476
|
return "cursor"
|
|
413
477
|
|
|
478
|
+
# Check for .gemini directory (Gemini CLI-specific)
|
|
479
|
+
if (project_root / ".gemini").is_dir():
|
|
480
|
+
return "gemini"
|
|
481
|
+
|
|
414
482
|
# Check for Codex skills directory only when no other platform config exists
|
|
415
|
-
|
|
483
|
+
other_platform_dirs_codex = (".claude", ".cursor", ".iflow", ".opencode", ".kilocode", ".kiro", ".gemini", ".agent")
|
|
416
484
|
has_other_platform_config = any(
|
|
417
|
-
(project_root / directory).is_dir() for directory in
|
|
485
|
+
(project_root / directory).is_dir() for directory in other_platform_dirs_codex
|
|
418
486
|
)
|
|
419
487
|
if (project_root / ".agents" / "skills").is_dir() and not has_other_platform_config:
|
|
420
488
|
return "codex"
|
|
421
489
|
|
|
490
|
+
# Check for .kilocode directory (Kilo-specific)
|
|
491
|
+
if (project_root / ".kilocode").is_dir():
|
|
492
|
+
return "kilo"
|
|
493
|
+
|
|
494
|
+
# Check for Kiro skills directory only when no other platform config exists
|
|
495
|
+
other_platform_dirs_kiro = (".claude", ".cursor", ".iflow", ".opencode", ".agents", ".kilocode", ".gemini", ".agent")
|
|
496
|
+
has_other_platform_config = any(
|
|
497
|
+
(project_root / directory).is_dir() for directory in other_platform_dirs_kiro
|
|
498
|
+
)
|
|
499
|
+
if (project_root / ".kiro" / "skills").is_dir() and not has_other_platform_config:
|
|
500
|
+
return "kiro"
|
|
501
|
+
|
|
502
|
+
# Check for Antigravity workflow directory only when no other platform config exists
|
|
503
|
+
other_platform_dirs_antigravity = (".claude", ".cursor", ".iflow", ".opencode", ".agents", ".kilocode", ".kiro")
|
|
504
|
+
has_other_platform_config = any(
|
|
505
|
+
(project_root / directory).is_dir() for directory in other_platform_dirs_antigravity
|
|
506
|
+
)
|
|
507
|
+
if (project_root / ".agent" / "workflows").is_dir() and not has_other_platform_config:
|
|
508
|
+
return "antigravity"
|
|
509
|
+
|
|
422
510
|
return "claude"
|
|
423
511
|
|
|
424
512
|
|
|
@@ -290,7 +290,7 @@ def registry_add_agent(
|
|
|
290
290
|
pid: Process ID.
|
|
291
291
|
task_dir: Task directory path.
|
|
292
292
|
repo_root: Repository root path. Defaults to auto-detected.
|
|
293
|
-
platform: Platform used (e.g., 'claude', 'opencode', 'codex'). Defaults to 'claude'.
|
|
293
|
+
platform: Platform used (e.g., 'claude', 'opencode', 'codex', 'kiro', 'antigravity'). Defaults to 'claude'.
|
|
294
294
|
|
|
295
295
|
Returns:
|
|
296
296
|
True on success.
|
|
@@ -147,7 +147,6 @@ def get_implement_base() -> list[dict]:
|
|
|
147
147
|
"""Get base implement context entries."""
|
|
148
148
|
return [
|
|
149
149
|
{"file": f"{DIR_WORKFLOW}/workflow.md", "reason": "Project workflow and conventions"},
|
|
150
|
-
{"file": f"{DIR_WORKFLOW}/{DIR_SPEC}/shared/index.md", "reason": "Shared coding standards"},
|
|
151
150
|
]
|
|
152
151
|
|
|
153
152
|
|
|
@@ -155,8 +154,6 @@ def get_implement_backend() -> list[dict]:
|
|
|
155
154
|
"""Get backend implement context entries."""
|
|
156
155
|
return [
|
|
157
156
|
{"file": f"{DIR_WORKFLOW}/{DIR_SPEC}/backend/index.md", "reason": "Backend development guide"},
|
|
158
|
-
{"file": f"{DIR_WORKFLOW}/{DIR_SPEC}/backend/api-module.md", "reason": "API module conventions"},
|
|
159
|
-
{"file": f"{DIR_WORKFLOW}/{DIR_SPEC}/backend/quality.md", "reason": "Code quality requirements"},
|
|
160
157
|
]
|
|
161
158
|
|
|
162
159
|
|
|
@@ -164,7 +161,6 @@ def get_implement_frontend() -> list[dict]:
|
|
|
164
161
|
"""Get frontend implement context entries."""
|
|
165
162
|
return [
|
|
166
163
|
{"file": f"{DIR_WORKFLOW}/{DIR_SPEC}/frontend/index.md", "reason": "Frontend development guide"},
|
|
167
|
-
{"file": f"{DIR_WORKFLOW}/{DIR_SPEC}/frontend/components.md", "reason": "Component conventions"},
|
|
168
164
|
]
|
|
169
165
|
|
|
170
166
|
|
|
@@ -174,7 +170,6 @@ def get_check_context(dev_type: str, repo_root: Path) -> list[dict]:
|
|
|
174
170
|
|
|
175
171
|
entries = [
|
|
176
172
|
{"file": adapter.get_trellis_command_path("finish-work"), "reason": "Finish work checklist"},
|
|
177
|
-
{"file": f"{DIR_WORKFLOW}/{DIR_SPEC}/shared/index.md", "reason": "Shared coding standards"},
|
|
178
173
|
]
|
|
179
174
|
|
|
180
175
|
if dev_type in ("backend", "fullstack"):
|
|
@@ -189,9 +184,7 @@ def get_debug_context(dev_type: str, repo_root: Path) -> list[dict]:
|
|
|
189
184
|
"""Get debug context entries."""
|
|
190
185
|
adapter = get_cli_adapter_auto(repo_root)
|
|
191
186
|
|
|
192
|
-
entries = [
|
|
193
|
-
{"file": f"{DIR_WORKFLOW}/{DIR_SPEC}/shared/index.md", "reason": "Shared coding standards"},
|
|
194
|
-
]
|
|
187
|
+
entries: list[dict] = []
|
|
195
188
|
|
|
196
189
|
if dev_type in ("backend", "fullstack"):
|
|
197
190
|
entries.append({"file": adapter.get_trellis_command_path("check-backend"), "reason": "Backend check spec"})
|
package/dist/types/ai-tools.d.ts
CHANGED
|
@@ -6,16 +6,16 @@
|
|
|
6
6
|
/**
|
|
7
7
|
* Supported AI coding tools
|
|
8
8
|
*/
|
|
9
|
-
export type AITool = "claude-code" | "cursor" | "opencode" | "iflow" | "codex";
|
|
9
|
+
export type AITool = "claude-code" | "cursor" | "opencode" | "iflow" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity";
|
|
10
10
|
/**
|
|
11
11
|
* Template directory categories
|
|
12
12
|
*/
|
|
13
|
-
export type TemplateDir = "common" | "claude" | "cursor" | "opencode" | "iflow" | "codex";
|
|
13
|
+
export type TemplateDir = "common" | "claude" | "cursor" | "opencode" | "iflow" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity";
|
|
14
14
|
/**
|
|
15
|
-
* CLI flag names for platform selection (e.g., --claude, --cursor)
|
|
15
|
+
* CLI flag names for platform selection (e.g., --claude, --cursor, --kilo, --kiro, --gemini, --antigravity)
|
|
16
16
|
* Must match keys in InitOptions (src/commands/init.ts)
|
|
17
17
|
*/
|
|
18
|
-
export type CliFlag = "claude" | "cursor" | "opencode" | "iflow" | "codex";
|
|
18
|
+
export type CliFlag = "claude" | "cursor" | "opencode" | "iflow" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity";
|
|
19
19
|
/**
|
|
20
20
|
* Configuration for an AI tool
|
|
21
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../../src/types/ai-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../../src/types/ai-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,GACd,aAAa,GACb,QAAQ,GACR,UAAU,GACV,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,CAAC;AAElB;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAyEjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAE3D"}
|
package/dist/types/ai-tools.js
CHANGED
|
@@ -55,6 +55,38 @@ export const AI_TOOLS = {
|
|
|
55
55
|
defaultChecked: false,
|
|
56
56
|
hasPythonHooks: false,
|
|
57
57
|
},
|
|
58
|
+
kilo: {
|
|
59
|
+
name: "Kilo CLI",
|
|
60
|
+
templateDirs: ["common", "kilo"],
|
|
61
|
+
configDir: ".kilocode",
|
|
62
|
+
cliFlag: "kilo",
|
|
63
|
+
defaultChecked: false,
|
|
64
|
+
hasPythonHooks: false,
|
|
65
|
+
},
|
|
66
|
+
kiro: {
|
|
67
|
+
name: "Kiro Code",
|
|
68
|
+
templateDirs: ["common", "kiro"],
|
|
69
|
+
configDir: ".kiro/skills",
|
|
70
|
+
cliFlag: "kiro",
|
|
71
|
+
defaultChecked: false,
|
|
72
|
+
hasPythonHooks: false,
|
|
73
|
+
},
|
|
74
|
+
gemini: {
|
|
75
|
+
name: "Gemini CLI",
|
|
76
|
+
templateDirs: ["common", "gemini"],
|
|
77
|
+
configDir: ".gemini",
|
|
78
|
+
cliFlag: "gemini",
|
|
79
|
+
defaultChecked: false,
|
|
80
|
+
hasPythonHooks: false,
|
|
81
|
+
},
|
|
82
|
+
antigravity: {
|
|
83
|
+
name: "Antigravity",
|
|
84
|
+
templateDirs: ["common", "antigravity"],
|
|
85
|
+
configDir: ".agent/workflows",
|
|
86
|
+
cliFlag: "antigravity",
|
|
87
|
+
defaultChecked: false,
|
|
88
|
+
hasPythonHooks: false,
|
|
89
|
+
},
|
|
58
90
|
};
|
|
59
91
|
/**
|
|
60
92
|
* Get the configuration for a specific AI tool
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-tools.js","sourceRoot":"","sources":["../../src/types/ai-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"ai-tools.js","sourceRoot":"","sources":["../../src/types/ai-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAClC,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,QAAQ;QACjB,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,IAAI;KACrB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAClC,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,QAAQ;QACjB,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,KAAK;KACtB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QACpC,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,UAAU;QACnB,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,KAAK;KACtB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QACjC,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,OAAO;QAChB,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,IAAI;KACrB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QACjC,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,OAAO;QAChB,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,KAAK;KACtB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;QAChC,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,KAAK;KACtB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;QAChC,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,KAAK;KACtB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAClC,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,QAAQ;QACjB,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,KAAK;KACtB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;QACvC,SAAS,EAAE,kBAAkB;QAC7B,OAAO,EAAE,aAAa;QACtB,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,KAAK;KACtB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AACrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mindfoldhq/trellis",
|
|
3
|
-
"version": "0.3.0
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "AI capabilities grow like ivy — Trellis provides the structure to guide them along a disciplined path",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"dist",
|
|
56
56
|
"bin",
|
|
57
57
|
"README.md",
|
|
58
|
-
"LICENSE
|
|
58
|
+
"LICENSE"
|
|
59
59
|
],
|
|
60
60
|
"repository": {
|
|
61
61
|
"type": "git",
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"release:major": "git add -A && git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates' && pnpm version major && git push origin main --tags",
|
|
82
82
|
"release:beta": "git add -A && git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates' && pnpm version prerelease --preid beta && git push origin HEAD --tags",
|
|
83
83
|
"release:rc": "git add -A && git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates' && pnpm version prerelease --preid rc && git push origin HEAD --tags",
|
|
84
|
+
"release:promote": "git add -A && git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates' && pnpm version \"$(node -p \"require('./package.json').version.replace(/-.*/, '')\")\" && git push origin main --tags",
|
|
84
85
|
"manifest": "node scripts/create-manifest.js"
|
|
85
86
|
}
|
|
86
87
|
}
|