@mindfoldhq/trellis 0.6.8 → 0.6.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/channel/agent-loader.d.ts +2 -2
- package/dist/commands/channel/agent-loader.d.ts.map +1 -1
- package/dist/commands/channel/agent-loader.js +9 -5
- package/dist/commands/channel/agent-loader.js.map +1 -1
- package/dist/commands/channel/context-loader.d.ts +1 -1
- package/dist/commands/channel/context-loader.d.ts.map +1 -1
- package/dist/commands/channel/context-loader.js +36 -15
- package/dist/commands/channel/context-loader.js.map +1 -1
- package/dist/commands/channel/context-trust.d.ts +31 -0
- package/dist/commands/channel/context-trust.d.ts.map +1 -0
- package/dist/commands/channel/context-trust.js +139 -0
- package/dist/commands/channel/context-trust.js.map +1 -0
- package/dist/commands/channel/spawn.d.ts.map +1 -1
- package/dist/commands/channel/spawn.js +4 -2
- package/dist/commands/channel/spawn.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +17 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/codex.d.ts +36 -0
- package/dist/configurators/codex.d.ts.map +1 -1
- package/dist/configurators/codex.js +100 -1
- package/dist/configurators/codex.js.map +1 -1
- package/dist/configurators/index.d.ts.map +1 -1
- package/dist/configurators/index.js +5 -0
- package/dist/configurators/index.js.map +1 -1
- package/dist/configurators/shared.d.ts.map +1 -1
- package/dist/configurators/shared.js +1 -0
- package/dist/configurators/shared.js.map +1 -1
- package/dist/configurators/snow.d.ts +31 -0
- package/dist/configurators/snow.d.ts.map +1 -0
- package/dist/configurators/snow.js +95 -0
- package/dist/configurators/snow.js.map +1 -0
- package/dist/configurators/workflow.d.ts +14 -0
- package/dist/configurators/workflow.d.ts.map +1 -1
- package/dist/configurators/workflow.js +37 -1
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/migrations/manifests/0.6.10.json +9 -0
- package/dist/migrations/manifests/0.6.9.json +9 -0
- package/dist/templates/codex/agents/trellis-check.toml +7 -3
- package/dist/templates/codex/agents/trellis-implement.toml +7 -3
- package/dist/templates/codex/agents/trellis-research.toml +13 -6
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +4 -2
- package/dist/templates/kimi/agents/trellis-research.md +7 -3
- package/dist/templates/omp/extensions/trellis/index.ts.txt +114 -4
- package/dist/templates/opencode/lib/trellis-context.js +263 -43
- package/dist/templates/opencode/plugins/inject-subagent-context.js +89 -35
- package/dist/templates/opencode/plugins/inject-workflow-state.js +90 -5
- package/dist/templates/pi/extensions/trellis/index.ts.txt +270 -22
- package/dist/templates/shared-hooks/inject-subagent-context.py +311 -83
- package/dist/templates/shared-hooks/inject-workflow-state.py +36 -1
- package/dist/templates/snow/SNOW.md +86 -0
- package/dist/templates/snow/agents/trellis-check.md +135 -0
- package/dist/templates/snow/agents/trellis-implement.md +153 -0
- package/dist/templates/snow/agents/trellis-research.md +114 -0
- package/dist/templates/snow/hooks/beforeSubAgentStart.json +15 -0
- package/dist/templates/snow/hooks/onSessionStart.json +15 -0
- package/dist/templates/snow/hooks/onUserMessage.json +15 -0
- package/dist/templates/snow/hooks/write-trellis-context.py +644 -0
- package/dist/templates/snow/index.d.ts +26 -0
- package/dist/templates/snow/index.d.ts.map +1 -0
- package/dist/templates/snow/index.js +36 -0
- package/dist/templates/snow/index.js.map +1 -0
- package/dist/templates/template-utils.d.ts.map +1 -1
- package/dist/templates/template-utils.js +5 -1
- package/dist/templates/template-utils.js.map +1 -1
- package/dist/templates/trellis/config.yaml +46 -0
- package/dist/templates/trellis/gitattributes.txt +9 -0
- package/dist/templates/trellis/index.d.ts +3 -1
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +3 -1
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/add_session.py +94 -28
- package/dist/templates/trellis/scripts/common/active_task.py +9 -2
- package/dist/templates/trellis/scripts/common/config.py +89 -2
- package/dist/templates/trellis/scripts/common/task_context.py +84 -6
- package/dist/templates/trellis/scripts/common/task_store.py +63 -1
- package/dist/templates/trellis/scripts/common/trellis_config.py +2 -1
- package/dist/templates/trellis/scripts/task.py +21 -2
- package/dist/templates/trellis/workflow.md +14 -14
- package/dist/types/ai-tools.d.ts +3 -3
- package/dist/types/ai-tools.d.ts.map +1 -1
- package/dist/types/ai-tools.js +38 -0
- package/dist/types/ai-tools.js.map +1 -1
- package/package.json +2 -2
|
@@ -21,12 +21,36 @@ import argparse
|
|
|
21
21
|
import json
|
|
22
22
|
from pathlib import Path
|
|
23
23
|
|
|
24
|
+
from .config import get_context_injection_limits
|
|
24
25
|
from .git import branch_exists_locally
|
|
25
26
|
from .io import read_json
|
|
26
27
|
from .log import Colors, colored
|
|
27
28
|
from .paths import FILE_TASK_JSON, get_repo_root
|
|
28
29
|
from .task_utils import resolve_task_dir
|
|
29
30
|
|
|
31
|
+
# Extensions that look like code rather than spec/research docs. Entries with
|
|
32
|
+
# one of these extensions outside .trellis/spec/, docs/docs-site, or the
|
|
33
|
+
# task's own directory get a hygiene warning in `task.py validate` — the
|
|
34
|
+
# reader is a sub-agent, not a human, so code paths belong in the diff the
|
|
35
|
+
# agent reads itself, not in implement.jsonl / check.jsonl.
|
|
36
|
+
_CODE_FILE_EXTENSIONS = {
|
|
37
|
+
".ts",
|
|
38
|
+
".tsx",
|
|
39
|
+
".js",
|
|
40
|
+
".jsx",
|
|
41
|
+
".mjs",
|
|
42
|
+
".cjs",
|
|
43
|
+
".py",
|
|
44
|
+
".go",
|
|
45
|
+
".rs",
|
|
46
|
+
".java",
|
|
47
|
+
".rb",
|
|
48
|
+
".c",
|
|
49
|
+
".cc",
|
|
50
|
+
".cpp",
|
|
51
|
+
".h",
|
|
52
|
+
}
|
|
53
|
+
|
|
30
54
|
|
|
31
55
|
# =============================================================================
|
|
32
56
|
# Command: add-context
|
|
@@ -118,7 +142,7 @@ def cmd_validate(args: argparse.Namespace) -> int:
|
|
|
118
142
|
total_errors = 0
|
|
119
143
|
for jsonl_name in ["implement.jsonl", "check.jsonl"]:
|
|
120
144
|
jsonl_file = target_dir / jsonl_name
|
|
121
|
-
errors = _validate_jsonl(jsonl_file, repo_root)
|
|
145
|
+
errors = _validate_jsonl(jsonl_file, repo_root, target_dir)
|
|
122
146
|
total_errors += errors
|
|
123
147
|
|
|
124
148
|
print()
|
|
@@ -130,11 +154,33 @@ def cmd_validate(args: argparse.Namespace) -> int:
|
|
|
130
154
|
return 1
|
|
131
155
|
|
|
132
156
|
|
|
133
|
-
def
|
|
157
|
+
def _is_exempt_from_code_file_warning(file_path: str, task_rel: str) -> bool:
|
|
158
|
+
"""Whether a jsonl entry path is exempt from the code-file hygiene warning.
|
|
159
|
+
|
|
160
|
+
Exempt: spec docs (``.trellis/spec/``), documentation (``docs``,
|
|
161
|
+
``docs-site``), and the task's own directory (execution plans, generated
|
|
162
|
+
artifacts, etc. legitimately live there).
|
|
163
|
+
"""
|
|
164
|
+
posix_path = file_path.replace("\\", "/").lstrip("/")
|
|
165
|
+
exempt_prefixes = (".trellis/spec/", "docs/", "docs-site/")
|
|
166
|
+
if posix_path.startswith(exempt_prefixes):
|
|
167
|
+
return True
|
|
168
|
+
if task_rel and (posix_path == task_rel or posix_path.startswith(f"{task_rel}/")):
|
|
169
|
+
return True
|
|
170
|
+
return False
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def _validate_jsonl(jsonl_file: Path, repo_root: Path, task_dir: Path | None = None) -> int:
|
|
134
174
|
"""Validate a single JSONL file.
|
|
135
175
|
|
|
136
176
|
Seed rows (no ``file`` field — typically ``{"_example": "..."}``) are
|
|
137
177
|
skipped silently; they are self-describing comments, not real entries.
|
|
178
|
+
|
|
179
|
+
Beyond hard errors (missing file/dir, invalid JSON), this also prints
|
|
180
|
+
non-blocking hygiene warnings (never counted in ``errors``, never change
|
|
181
|
+
the exit code): entries that look like code files rather than
|
|
182
|
+
spec/research docs, and entries whose file size exceeds the configured
|
|
183
|
+
sub-agent context injection cap (``context_injection.max_file_bytes``).
|
|
138
184
|
"""
|
|
139
185
|
file_name = jsonl_file.name
|
|
140
186
|
errors = 0
|
|
@@ -143,6 +189,15 @@ def _validate_jsonl(jsonl_file: Path, repo_root: Path) -> int:
|
|
|
143
189
|
print(f" {colored(f'{file_name}: not found (skipped)', Colors.YELLOW)}")
|
|
144
190
|
return 0
|
|
145
191
|
|
|
192
|
+
task_rel = ""
|
|
193
|
+
if task_dir is not None:
|
|
194
|
+
try:
|
|
195
|
+
task_rel = task_dir.resolve().relative_to(repo_root.resolve()).as_posix()
|
|
196
|
+
except ValueError:
|
|
197
|
+
task_rel = ""
|
|
198
|
+
|
|
199
|
+
max_file_bytes = get_context_injection_limits(repo_root).get("max_file_bytes", 0)
|
|
200
|
+
|
|
146
201
|
line_num = 0
|
|
147
202
|
real_entries = 0
|
|
148
203
|
for line in jsonl_file.read_text(encoding="utf-8").splitlines():
|
|
@@ -170,10 +225,33 @@ def _validate_jsonl(jsonl_file: Path, repo_root: Path) -> int:
|
|
|
170
225
|
if not full_path.is_dir():
|
|
171
226
|
print(f" {colored(f'{file_name}:{line_num}: Directory not found: {file_path}', Colors.RED)}")
|
|
172
227
|
errors += 1
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
228
|
+
continue
|
|
229
|
+
|
|
230
|
+
if not full_path.is_file():
|
|
231
|
+
print(f" {colored(f'{file_name}:{line_num}: File not found: {file_path}', Colors.RED)}")
|
|
232
|
+
errors += 1
|
|
233
|
+
continue
|
|
234
|
+
|
|
235
|
+
extension = Path(file_path).suffix.lower()
|
|
236
|
+
if extension in _CODE_FILE_EXTENSIONS and not _is_exempt_from_code_file_warning(
|
|
237
|
+
file_path, task_rel
|
|
238
|
+
):
|
|
239
|
+
warning_message = (
|
|
240
|
+
f"{file_name}:{line_num}: Warning: {file_path} looks like a code file — "
|
|
241
|
+
"implement/check.jsonl should reference spec/research docs; "
|
|
242
|
+
"agents read code themselves"
|
|
243
|
+
)
|
|
244
|
+
print(f" {colored(warning_message, Colors.YELLOW)}")
|
|
245
|
+
|
|
246
|
+
if max_file_bytes:
|
|
247
|
+
size = full_path.stat().st_size
|
|
248
|
+
if size > max_file_bytes:
|
|
249
|
+
warning_message = (
|
|
250
|
+
f"{file_name}:{line_num}: Warning: {file_path} is {size} bytes, "
|
|
251
|
+
f"exceeds context_injection.max_file_bytes ({max_file_bytes}); "
|
|
252
|
+
"injection will truncate it"
|
|
253
|
+
)
|
|
254
|
+
print(f" {colored(warning_message, Colors.YELLOW)}")
|
|
177
255
|
|
|
178
256
|
if errors == 0:
|
|
179
257
|
print(f" {colored(f'{file_name}: ✓ ({real_entries} entries)', Colors.GREEN)}")
|
|
@@ -9,6 +9,7 @@ Provides:
|
|
|
9
9
|
cmd_set_branch - Set git branch for task
|
|
10
10
|
cmd_set_base_branch - Set PR target branch
|
|
11
11
|
cmd_set_scope - Set scope for PR title
|
|
12
|
+
cmd_set_meta - Set/overwrite a task metadata key
|
|
12
13
|
cmd_add_subtask - Link child task to parent
|
|
13
14
|
cmd_remove_subtask - Unlink child task from parent
|
|
14
15
|
"""
|
|
@@ -173,6 +174,26 @@ def _write_seed_jsonl(path: Path) -> None:
|
|
|
173
174
|
path.write_text(json.dumps(seed, ensure_ascii=False) + "\n", encoding="utf-8")
|
|
174
175
|
|
|
175
176
|
|
|
177
|
+
def _parse_meta_pairs(pairs: list[str] | None) -> dict[str, str] | None:
|
|
178
|
+
"""Parse repeatable ``--meta key=value`` pairs into a dict.
|
|
179
|
+
|
|
180
|
+
Returns ``None`` (after printing an error naming the bad value) on the
|
|
181
|
+
first malformed pair: missing ``=`` or an empty key. Values are stored
|
|
182
|
+
as-is (strings, no nesting, no type coercion).
|
|
183
|
+
"""
|
|
184
|
+
meta: dict[str, str] = {}
|
|
185
|
+
for pair in pairs or []:
|
|
186
|
+
key, sep, value = pair.partition("=")
|
|
187
|
+
if not sep or not key:
|
|
188
|
+
print(
|
|
189
|
+
colored(f"Error: malformed --meta value '{pair}' (expected key=value)", Colors.RED),
|
|
190
|
+
file=sys.stderr,
|
|
191
|
+
)
|
|
192
|
+
return None
|
|
193
|
+
meta[key] = value
|
|
194
|
+
return meta
|
|
195
|
+
|
|
196
|
+
|
|
176
197
|
def _default_prd_content(title: str, description: str | None = None) -> str:
|
|
177
198
|
"""Return the default PRD skeleton created with every task."""
|
|
178
199
|
goal = (description or "").strip() or "TBD."
|
|
@@ -211,6 +232,11 @@ def cmd_create(args: argparse.Namespace) -> int:
|
|
|
211
232
|
print(colored("Error: title is required", Colors.RED), file=sys.stderr)
|
|
212
233
|
return 1
|
|
213
234
|
|
|
235
|
+
# Validate --meta (CLI source: fail-fast, before any directory is created)
|
|
236
|
+
meta = _parse_meta_pairs(getattr(args, "meta", None))
|
|
237
|
+
if meta is None:
|
|
238
|
+
return 1
|
|
239
|
+
|
|
214
240
|
# Validate --package (CLI source: fail-fast)
|
|
215
241
|
package: str | None = getattr(args, "package", None)
|
|
216
242
|
if not is_monorepo(repo_root):
|
|
@@ -357,7 +383,7 @@ def cmd_create(args: argparse.Namespace) -> int:
|
|
|
357
383
|
"parent": None,
|
|
358
384
|
"relatedFiles": [],
|
|
359
385
|
"notes": "",
|
|
360
|
-
"meta":
|
|
386
|
+
"meta": meta,
|
|
361
387
|
}
|
|
362
388
|
|
|
363
389
|
write_json(task_json_path, task_data)
|
|
@@ -881,3 +907,39 @@ def cmd_set_scope(args: argparse.Namespace) -> int:
|
|
|
881
907
|
|
|
882
908
|
print(colored(f"✓ Scope set to: {scope}", Colors.GREEN))
|
|
883
909
|
return 0
|
|
910
|
+
|
|
911
|
+
|
|
912
|
+
# =============================================================================
|
|
913
|
+
# Command: set-meta
|
|
914
|
+
# =============================================================================
|
|
915
|
+
|
|
916
|
+
def cmd_set_meta(args: argparse.Namespace) -> int:
|
|
917
|
+
"""Set/overwrite one metadata key on an existing task."""
|
|
918
|
+
repo_root = get_repo_root()
|
|
919
|
+
target_dir = resolve_task_dir(args.dir, repo_root)
|
|
920
|
+
key = args.key
|
|
921
|
+
value = args.value
|
|
922
|
+
|
|
923
|
+
if not key:
|
|
924
|
+
print(colored("Error: Missing arguments", Colors.RED))
|
|
925
|
+
print("Usage: python3 task.py set-meta <task-dir> <key> <value>")
|
|
926
|
+
return 1
|
|
927
|
+
|
|
928
|
+
task_json = target_dir / FILE_TASK_JSON
|
|
929
|
+
if not task_json.is_file():
|
|
930
|
+
print(colored(f"Error: task.json not found at {target_dir}", Colors.RED))
|
|
931
|
+
return 1
|
|
932
|
+
|
|
933
|
+
data = read_json(task_json)
|
|
934
|
+
if not data:
|
|
935
|
+
return 1
|
|
936
|
+
|
|
937
|
+
meta = data.get("meta")
|
|
938
|
+
if not isinstance(meta, dict):
|
|
939
|
+
meta = {}
|
|
940
|
+
meta[key] = value
|
|
941
|
+
data["meta"] = meta
|
|
942
|
+
write_json(task_json, data)
|
|
943
|
+
|
|
944
|
+
print(colored(f"✓ Meta set: {key} = {value}", Colors.GREEN))
|
|
945
|
+
return 0
|
|
@@ -78,10 +78,11 @@ def _parse_yaml_block(
|
|
|
78
78
|
key, _, value = stripped.partition(":")
|
|
79
79
|
key = key.strip()
|
|
80
80
|
value = _strip_inline_comment(value).strip()
|
|
81
|
+
was_quoted = len(value) >= 2 and value[0] == value[-1] and value[0] in ('"', "'")
|
|
81
82
|
value = _unquote(value)
|
|
82
83
|
current_list = None
|
|
83
84
|
|
|
84
|
-
if value:
|
|
85
|
+
if value or was_quoted:
|
|
85
86
|
target[key] = value
|
|
86
87
|
i += 1
|
|
87
88
|
else:
|
|
@@ -14,6 +14,7 @@ Usage:
|
|
|
14
14
|
python3 task.py set-branch <dir> <branch> # Set git branch
|
|
15
15
|
python3 task.py set-base-branch <dir> <branch> # Set PR target branch
|
|
16
16
|
python3 task.py set-scope <dir> <scope> # Set scope for PR title
|
|
17
|
+
python3 task.py set-meta <dir> <key> <value> # Set a task metadata key
|
|
17
18
|
python3 task.py archive <task-dir> # Archive completed task
|
|
18
19
|
python3 task.py list # List active tasks
|
|
19
20
|
python3 task.py list-archive [month] # List archived tasks
|
|
@@ -54,6 +55,7 @@ from common.task_store import (
|
|
|
54
55
|
cmd_set_branch,
|
|
55
56
|
cmd_set_base_branch,
|
|
56
57
|
cmd_set_scope,
|
|
58
|
+
cmd_set_meta,
|
|
57
59
|
cmd_add_subtask,
|
|
58
60
|
cmd_remove_subtask,
|
|
59
61
|
)
|
|
@@ -314,9 +316,12 @@ def cmd_list(args: argparse.Namespace) -> int:
|
|
|
314
316
|
if child_name in all_tasks:
|
|
315
317
|
_print_task(child_name, indent + 1)
|
|
316
318
|
|
|
317
|
-
# Display only top-level tasks
|
|
319
|
+
# Display only top-level tasks: those without a parent, plus orphans
|
|
320
|
+
# whose recorded parent is not (or no longer) in the active set — a
|
|
321
|
+
# dangling parent ref must still render flat instead of disappearing.
|
|
318
322
|
for dir_name in sorted(all_tasks.keys()):
|
|
319
|
-
|
|
323
|
+
parent = all_tasks[dir_name].parent
|
|
324
|
+
if not parent or parent not in all_tasks:
|
|
320
325
|
_print_task(dir_name)
|
|
321
326
|
|
|
322
327
|
if count == 0:
|
|
@@ -386,6 +391,7 @@ Usage:
|
|
|
386
391
|
python3 task.py set-branch <dir> <branch> Set git branch
|
|
387
392
|
python3 task.py set-base-branch <dir> <branch> Set PR target branch
|
|
388
393
|
python3 task.py set-scope <dir> <scope> Set scope for PR title
|
|
394
|
+
python3 task.py set-meta <dir> <key> <value> Set/overwrite a task metadata key
|
|
389
395
|
python3 task.py archive <task-dir> Archive completed task
|
|
390
396
|
python3 task.py add-subtask <parent> <child> Link child task to parent
|
|
391
397
|
python3 task.py remove-subtask <parent> <child> Unlink child from parent
|
|
@@ -403,6 +409,7 @@ List options:
|
|
|
403
409
|
Examples:
|
|
404
410
|
python3 task.py create "Add login feature" --slug add-login
|
|
405
411
|
python3 task.py create "Add login feature" --slug add-login --package cli
|
|
412
|
+
python3 task.py create "Add login feature" --meta linear=ENG-123 --meta epic=auth
|
|
406
413
|
python3 task.py create "Child task" --slug child --parent .trellis/tasks/01-21-parent
|
|
407
414
|
python3 task.py add-context <dir> implement .trellis/spec/cli/backend/auth.md "Auth guidelines"
|
|
408
415
|
python3 task.py set-branch <dir> task/add-login
|
|
@@ -473,6 +480,11 @@ def main() -> int:
|
|
|
473
480
|
"--base-branch",
|
|
474
481
|
help="PR target branch (overrides origin/HEAD detection and the checked-out-branch fallback)",
|
|
475
482
|
)
|
|
483
|
+
p_create.add_argument(
|
|
484
|
+
"--meta",
|
|
485
|
+
action="append",
|
|
486
|
+
help="Task metadata key=value (repeatable)",
|
|
487
|
+
)
|
|
476
488
|
p_create.add_argument(
|
|
477
489
|
"--no-start",
|
|
478
490
|
action="store_true",
|
|
@@ -523,6 +535,12 @@ def main() -> int:
|
|
|
523
535
|
p_scope.add_argument("dir", help="Task directory")
|
|
524
536
|
p_scope.add_argument("scope", help="Scope name")
|
|
525
537
|
|
|
538
|
+
# set-meta
|
|
539
|
+
p_setmeta = subparsers.add_parser("set-meta", help="Set/overwrite a task metadata key")
|
|
540
|
+
p_setmeta.add_argument("dir", help="Task directory")
|
|
541
|
+
p_setmeta.add_argument("key", help="Metadata key")
|
|
542
|
+
p_setmeta.add_argument("value", help="Metadata value")
|
|
543
|
+
|
|
526
544
|
# archive
|
|
527
545
|
p_archive = subparsers.add_parser("archive", help="Archive task")
|
|
528
546
|
p_archive.add_argument("name", help="Task directory or name")
|
|
@@ -565,6 +583,7 @@ def main() -> int:
|
|
|
565
583
|
"set-branch": cmd_set_branch,
|
|
566
584
|
"set-base-branch": cmd_set_base_branch,
|
|
567
585
|
"set-scope": cmd_set_scope,
|
|
586
|
+
"set-meta": cmd_set_meta,
|
|
568
587
|
"archive": cmd_archive,
|
|
569
588
|
"add-subtask": cmd_add_subtask,
|
|
570
589
|
"remove-subtask": cmd_remove_subtask,
|
|
@@ -183,7 +183,7 @@ Complex task: ask the user if you can create a Trellis task and enter the planni
|
|
|
183
183
|
- 1.0 Create task `[required · once]` (only after task-creation consent)
|
|
184
184
|
- 1.1 Requirement exploration `[required · repeatable]` (`prd.md`; complex tasks also need `design.md` + `implement.md`)
|
|
185
185
|
- 1.2 Research `[optional · repeatable]`
|
|
186
|
-
- 1.3 Configure context `[required · once]` — Claude Code, Cursor, OpenCode, Codex, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Grok, Kimi Code (sub-agent-dispatch platforms only; inline platforms skip)
|
|
186
|
+
- 1.3 Configure context `[required · once]` — Claude Code, Cursor, OpenCode, Codex, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Grok, Kimi Code (sub-agent-dispatch platforms only; inline platforms skip)
|
|
187
187
|
- 1.4 Activate task `[required · once]` (review gate, then `task.py start`; status → in_progress)
|
|
188
188
|
- 1.5 Completion criteria
|
|
189
189
|
|
|
@@ -220,7 +220,7 @@ Inline mode: skip jsonl curation; Phase 2 reads artifacts/specs via `trellis-bef
|
|
|
220
220
|
therefore must cover every required step from implementation through
|
|
221
221
|
commit, including Phase 3.3 spec update and Phase 3.4 commit. -->
|
|
222
222
|
|
|
223
|
-
Sub-agent dispatch protocol applies to all platforms and all sub-agents, including native Codex `SubagentStart` context injection with child-side pull fallback, class-2 Gemini/Qoder/Copilot/Reasonix/Trae/Grok/Kimi Code, hook-backed ZCode, and `trellis-research`: every dispatch prompt starts with `Active task: <task path from task.py current>` before role-specific instructions. On Grok Build, use `spawn_subagent` with `subagent_type` set to the Trellis agent name (e.g. `trellis-implement`). On Kimi Code, dispatch the built-in `coder` / `explore` sub-agent with the matching `.kimi-code/skills/trellis-<role>/SKILL.md` instructions.
|
|
223
|
+
Sub-agent dispatch protocol applies to all platforms and all sub-agents, including native Codex `SubagentStart` context injection with child-side pull fallback, class-2 Gemini/Qoder/Copilot/Reasonix/Trae/Grok/Kimi Code, hook-backed ZCode/Snow, and `trellis-research`: every dispatch prompt starts with `Active task: <task path from task.py current>` before role-specific instructions. On Grok Build, use `spawn_subagent` with `subagent_type` set to the Trellis agent name (e.g. `trellis-implement`). On Kimi Code, dispatch the built-in `coder` / `explore` sub-agent with the matching `.kimi-code/skills/trellis-<role>/SKILL.md` instructions.
|
|
224
224
|
|
|
225
225
|
[workflow-state:in_progress]
|
|
226
226
|
Tools: `trellis-implement` / `trellis-research` are sub-agent types only (Task/Agent tool, NOT Skill; there is no skill by these names). `trellis-update-spec` is a skill. `trellis-check` exists as both; prefer the Agent form when verifying after code changes.
|
|
@@ -272,13 +272,13 @@ Code committed. Run `/trellis:finish-work`; if dirty, return to Phase 3.4 first.
|
|
|
272
272
|
|
|
273
273
|
When a user request matches one of these intents inside an active task, route first, then load the detailed phase step if needed.
|
|
274
274
|
|
|
275
|
-
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
275
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
276
276
|
|
|
277
277
|
- Planning or unclear requirements -> `trellis-brainstorm`.
|
|
278
278
|
- `in_progress` implementation/check -> dispatch `trellis-implement` / `trellis-check`.
|
|
279
279
|
- Repeated debugging -> `trellis-break-loop`; spec updates -> `trellis-update-spec`.
|
|
280
280
|
|
|
281
|
-
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
281
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
282
282
|
|
|
283
283
|
[codex-inline, Kilo, Antigravity, Devin]
|
|
284
284
|
|
|
@@ -353,7 +353,7 @@ Return to this step whenever requirements change and revise the relevant artifac
|
|
|
353
353
|
|
|
354
354
|
Research can happen at any time during requirement exploration. It isn't limited to local code — you can use any available tool (MCP servers, skills, web search, etc.) to look up external information, including third-party library docs, industry practices, API references, etc.
|
|
355
355
|
|
|
356
|
-
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
356
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
357
357
|
|
|
358
358
|
Spawn the research sub-agent:
|
|
359
359
|
|
|
@@ -361,7 +361,7 @@ Spawn the research sub-agent:
|
|
|
361
361
|
- **Task description**: Research <specific question>
|
|
362
362
|
- **Key requirement**: Research output MUST be persisted to `{TASK_DIR}/research/`
|
|
363
363
|
|
|
364
|
-
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
364
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
365
365
|
|
|
366
366
|
[codex-inline, Kilo, Antigravity, Devin]
|
|
367
367
|
|
|
@@ -380,7 +380,7 @@ Brainstorm and research can interleave freely — pause to research a technical
|
|
|
380
380
|
|
|
381
381
|
#### 1.3 Configure context `[required · once]`
|
|
382
382
|
|
|
383
|
-
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
383
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
384
384
|
|
|
385
385
|
Curate `implement.jsonl` and `check.jsonl` so the Phase 2 sub-agents get the right spec/research context. These files were seeded on `task create` with a single self-describing `_example` line; your job here is to fill in real entries.
|
|
386
386
|
|
|
@@ -425,7 +425,7 @@ Ready gate: both `implement.jsonl` and `check.jsonl` must contain at least one r
|
|
|
425
425
|
|
|
426
426
|
Skip this step only when both files already have real curated entries.
|
|
427
427
|
|
|
428
|
-
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
428
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
429
429
|
|
|
430
430
|
[codex-inline, Kilo, Antigravity, Devin]
|
|
431
431
|
|
|
@@ -458,11 +458,11 @@ If `task.py start` errors with a session-identity message (no context key from h
|
|
|
458
458
|
| `design.md` exists (complex tasks) | ✅ |
|
|
459
459
|
| `implement.md` exists (complex tasks) | ✅ |
|
|
460
460
|
|
|
461
|
-
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
461
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
462
462
|
|
|
463
463
|
| `implement.jsonl` and `check.jsonl` each contain at least one real curated entry (seed row does not count) | ✅ |
|
|
464
464
|
|
|
465
|
-
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
465
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
466
466
|
|
|
467
467
|
---
|
|
468
468
|
|
|
@@ -472,7 +472,7 @@ Goal: turn reviewed planning artifacts into code that passes quality checks.
|
|
|
472
472
|
|
|
473
473
|
#### 2.1 Implement `[required · repeatable]`
|
|
474
474
|
|
|
475
|
-
[Claude Code, Cursor, OpenCode, codex-sub-agent, CodeBuddy, Droid, Pi, ZCode, Oh My Pi]
|
|
475
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, CodeBuddy, Droid, Pi, ZCode, Snow, Oh My Pi]
|
|
476
476
|
|
|
477
477
|
Spawn the implement sub-agent:
|
|
478
478
|
|
|
@@ -485,7 +485,7 @@ The platform hook/plugin auto-handles:
|
|
|
485
485
|
- Injects `prd.md`, `design.md` if present, and `implement.md` if present
|
|
486
486
|
- For Codex, `SubagentStart` supplies native context injection; the agent profile keeps child-side loading as the fallback
|
|
487
487
|
|
|
488
|
-
[/Claude Code, Cursor, OpenCode, codex-sub-agent, CodeBuddy, Droid, Pi, ZCode, Oh My Pi]
|
|
488
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, CodeBuddy, Droid, Pi, ZCode, Snow, Oh My Pi]
|
|
489
489
|
|
|
490
490
|
[Gemini, Qoder, Copilot, Reasonix, Trae, Grok, Kimi Code]
|
|
491
491
|
|
|
@@ -527,7 +527,7 @@ The platform prelude auto-handles the context load requirement:
|
|
|
527
527
|
|
|
528
528
|
#### 2.2 Quality check `[required · repeatable]`
|
|
529
529
|
|
|
530
|
-
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
530
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
531
531
|
|
|
532
532
|
Spawn the check sub-agent:
|
|
533
533
|
|
|
@@ -541,7 +541,7 @@ The check agent's job:
|
|
|
541
541
|
- Auto-fix issues it finds
|
|
542
542
|
- Run lint and typecheck to verify
|
|
543
543
|
|
|
544
|
-
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae, Grok, Kimi Code]
|
|
544
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Snow, Reasonix, Trae, Grok, Kimi Code]
|
|
545
545
|
|
|
546
546
|
[codex-inline, Kilo, Antigravity, Devin]
|
|
547
547
|
|
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" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp" | "grok" | "kimi";
|
|
9
|
+
export type AITool = "claude-code" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp" | "grok" | "kimi" | "snow";
|
|
10
10
|
/**
|
|
11
11
|
* Template directory categories
|
|
12
12
|
*/
|
|
13
|
-
export type TemplateDir = "common" | "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp" | "grok" | "kimi";
|
|
13
|
+
export type TemplateDir = "common" | "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp" | "grok" | "kimi" | "snow";
|
|
14
14
|
/**
|
|
15
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" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp" | "grok" | "kimi";
|
|
18
|
+
export type CliFlag = "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp" | "grok" | "kimi" | "snow";
|
|
19
19
|
/**
|
|
20
20
|
* Template context for placeholder resolution.
|
|
21
21
|
* Controls how common templates are rendered per platform.
|
|
@@ -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,GACd,aAAa,GACb,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,CAAC;AAEX;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,YAAY,EACR,WAAW,GACX,WAAW,GACX,GAAG,GACH,GAAG,GACH,iBAAiB,GACjB,iBAAiB,CAAC;IACtB,8DAA8D;IAC9D,UAAU,EACN,4BAA4B,GAC5B,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,CAAC;IACjC,uCAAuC;IACvC,eAAe,EACX,gBAAgB,GAChB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,UAAU,CAAC;IACf,kEAAkE;IAClE,YAAY,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;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;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,cAAc,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,
|
|
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,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,IAAI,GACJ,UAAU,GACV,OAAO,GACP,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,YAAY,EACR,WAAW,GACX,WAAW,GACX,GAAG,GACH,GAAG,GACH,iBAAiB,GACjB,iBAAiB,CAAC;IACtB,8DAA8D;IAC9D,UAAU,EACN,4BAA4B,GAC5B,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,CAAC;IACjC,uCAAuC;IACvC,eAAe,EACX,gBAAgB,GAChB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,UAAU,CAAC;IACf,kEAAkE;IAClE,YAAY,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;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;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,cAAc,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAyajD,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAE3D"}
|
package/dist/types/ai-tools.js
CHANGED
|
@@ -401,6 +401,44 @@ export const AI_TOOLS = {
|
|
|
401
401
|
cliFlag: "kimi",
|
|
402
402
|
},
|
|
403
403
|
},
|
|
404
|
+
/**
|
|
405
|
+
* Snow CLI - class-1 platform.
|
|
406
|
+
*
|
|
407
|
+
* Skills: `.snow/skills/` (Claude Code Skills compatible)
|
|
408
|
+
* Commands: `.snow/commands/trellis-*.json` (type: prompt)
|
|
409
|
+
* Agents: `.snow/agents/` (project discovery; no class-2 pull prelude)
|
|
410
|
+
* Hooks: `.snow/hooks/` emit additionalContext JSON (session/user/sub-agent)
|
|
411
|
+
*
|
|
412
|
+
* hasHooks=true: SessionStart injects context -> trellis-start is filtered out.
|
|
413
|
+
* hasPythonHooks=true: ships write-trellis-context.py under .snow/hooks/.
|
|
414
|
+
* Primary agent path is `.snow/agents/*.md` only (no legacy JSON fragment).
|
|
415
|
+
*
|
|
416
|
+
* CLI flag: `--snow`.
|
|
417
|
+
* Detection uses configDir `.snow/skills` so bare `.snow/settings.json` is not
|
|
418
|
+
* a false-positive "configured" project.
|
|
419
|
+
*/
|
|
420
|
+
snow: {
|
|
421
|
+
name: "Snow CLI",
|
|
422
|
+
templateDirs: ["common", "snow"],
|
|
423
|
+
configDir: ".snow/skills",
|
|
424
|
+
extraManagedPaths: [
|
|
425
|
+
".snow/commands",
|
|
426
|
+
".snow/agents",
|
|
427
|
+
".snow/hooks",
|
|
428
|
+
".snow/SNOW.md",
|
|
429
|
+
],
|
|
430
|
+
cliFlag: "snow",
|
|
431
|
+
defaultChecked: false,
|
|
432
|
+
hasPythonHooks: true,
|
|
433
|
+
templateContext: {
|
|
434
|
+
cmdRefPrefix: "/trellis-",
|
|
435
|
+
executorAI: "Bash scripts or Agent calls",
|
|
436
|
+
userActionLabel: "Skills",
|
|
437
|
+
agentCapable: true,
|
|
438
|
+
hasHooks: true,
|
|
439
|
+
cliFlag: "snow",
|
|
440
|
+
},
|
|
441
|
+
},
|
|
404
442
|
};
|
|
405
443
|
/**
|
|
406
444
|
* 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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mindfoldhq/trellis",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.10",
|
|
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",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"inquirer": "^9.3.7",
|
|
35
35
|
"undici": "^6.21.0",
|
|
36
36
|
"zod": "^4.4.2",
|
|
37
|
-
"@mindfoldhq/trellis-core": "0.6.
|
|
37
|
+
"@mindfoldhq/trellis-core": "0.6.10"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@eslint/js": "^9.18.0",
|