@mindfoldhq/trellis 0.6.4 → 0.6.6
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 +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/channel/messages.js +1 -1
- package/dist/commands/channel/supervisor/stdout.d.ts +7 -5
- package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -1
- package/dist/commands/channel/supervisor/stdout.js +65 -18
- package/dist/commands/channel/supervisor/stdout.js.map +1 -1
- package/dist/commands/channel/supervisor.d.ts +13 -0
- package/dist/commands/channel/supervisor.d.ts.map +1 -1
- package/dist/commands/channel/supervisor.js +54 -2
- package/dist/commands/channel/supervisor.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +8 -1
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +83 -42
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/copilot.d.ts +1 -0
- package/dist/configurators/copilot.d.ts.map +1 -1
- package/dist/configurators/copilot.js +4 -1
- package/dist/configurators/copilot.js.map +1 -1
- package/dist/configurators/index.d.ts.map +1 -1
- package/dist/configurators/index.js +27 -1
- package/dist/configurators/index.js.map +1 -1
- package/dist/configurators/omp.d.ts +11 -0
- package/dist/configurators/omp.d.ts.map +1 -0
- package/dist/configurators/omp.js +51 -0
- package/dist/configurators/omp.js.map +1 -0
- package/dist/configurators/pi.d.ts.map +1 -1
- package/dist/configurators/pi.js +14 -4
- package/dist/configurators/pi.js.map +1 -1
- package/dist/configurators/shared.d.ts +7 -0
- package/dist/configurators/shared.d.ts.map +1 -1
- package/dist/configurators/shared.js +27 -0
- package/dist/configurators/shared.js.map +1 -1
- package/dist/configurators/trae.d.ts +17 -0
- package/dist/configurators/trae.d.ts.map +1 -0
- package/dist/configurators/trae.js +42 -0
- package/dist/configurators/trae.js.map +1 -0
- package/dist/configurators/zcode.d.ts +3 -3
- package/dist/configurators/zcode.js +12 -12
- package/dist/configurators/zcode.js.map +1 -1
- package/dist/migrations/manifests/0.6.5.json +9 -0
- package/dist/migrations/manifests/0.6.6.json +17 -0
- package/dist/templates/codex/hooks/session-start.py +6 -6
- package/dist/templates/codex/skills/brainstorm/SKILL.md +19 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +2 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +3 -3
- 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/hooks-and-settings.md +1 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +5 -5
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +21 -2
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +1 -1
- package/dist/templates/common/skills/brainstorm.md +19 -1
- package/dist/templates/copilot/copilot-instructions.md +11 -0
- package/dist/templates/copilot/hooks/session-start.py +6 -6
- package/dist/templates/copilot/index.d.ts +6 -1
- package/dist/templates/copilot/index.d.ts.map +1 -1
- package/dist/templates/copilot/index.js +8 -1
- package/dist/templates/copilot/index.js.map +1 -1
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +19 -1
- package/dist/templates/omp/agents/trellis-check.md +41 -0
- package/dist/templates/omp/agents/trellis-implement.md +45 -0
- package/dist/templates/omp/agents/trellis-research.md +30 -0
- package/dist/templates/omp/extensions/trellis/index.ts.txt +462 -0
- package/dist/templates/omp/index.d.ts +4 -0
- package/dist/templates/omp/index.d.ts.map +1 -0
- package/dist/templates/omp/index.js +9 -0
- package/dist/templates/omp/index.js.map +1 -0
- package/dist/templates/pi/agents/trellis-check.md +1 -1
- package/dist/templates/pi/agents/trellis-implement.md +1 -1
- package/dist/templates/pi/agents/trellis-research.md +1 -1
- package/dist/templates/pi/extensions/trellis/index.ts.txt +111 -9
- package/dist/templates/shared-hooks/index.d.ts +1 -1
- package/dist/templates/shared-hooks/index.d.ts.map +1 -1
- package/dist/templates/shared-hooks/index.js +1 -0
- package/dist/templates/shared-hooks/index.js.map +1 -1
- package/dist/templates/shared-hooks/inject-workflow-state.py +41 -6
- package/dist/templates/shared-hooks/session-start.py +12 -7
- package/dist/templates/trae/agents/trellis-check.md +108 -0
- package/dist/templates/trae/agents/trellis-implement.md +103 -0
- package/dist/templates/trae/agents/trellis-research.md +137 -0
- package/dist/templates/trae/hooks.json +27 -0
- package/dist/templates/trae/index.d.ts +15 -0
- package/dist/templates/trae/index.d.ts.map +1 -0
- package/dist/templates/trae/index.js +15 -0
- package/dist/templates/trae/index.js.map +1 -0
- package/dist/templates/trellis/scripts/add_session.py +65 -17
- package/dist/templates/trellis/scripts/common/active_task.py +2 -0
- package/dist/templates/trellis/scripts/common/cli_adapter.py +72 -11
- package/dist/templates/trellis/scripts/common/config.py +29 -0
- package/dist/templates/trellis/scripts/common/session_context.py +1 -1
- package/dist/templates/trellis/scripts/common/task_store.py +79 -19
- package/dist/templates/trellis/scripts/task.py +8 -2
- package/dist/templates/trellis/workflow.md +22 -20
- package/dist/templates/zcode/agents/trellis-research.md +133 -0
- package/dist/templates/zcode/index.d.ts +6 -5
- package/dist/templates/zcode/index.d.ts.map +1 -1
- package/dist/templates/zcode/index.js +6 -5
- package/dist/templates/zcode/index.js.map +1 -1
- 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 +45 -2
- package/dist/types/ai-tools.js.map +1 -1
- package/dist/utils/uninstall-scrubbers.d.ts +1 -0
- package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
- package/dist/utils/uninstall-scrubbers.js +19 -0
- package/dist/utils/uninstall-scrubbers.js.map +1 -1
- package/package.json +2 -2
|
@@ -23,6 +23,7 @@ from datetime import datetime
|
|
|
23
23
|
from pathlib import Path
|
|
24
24
|
|
|
25
25
|
from .config import (
|
|
26
|
+
get_codex_dispatch_mode,
|
|
26
27
|
get_packages,
|
|
27
28
|
get_session_auto_commit,
|
|
28
29
|
is_monorepo,
|
|
@@ -113,13 +114,13 @@ def _repo_relative_path(path: Path, repo_root: Path) -> str:
|
|
|
113
114
|
|
|
114
115
|
# Config directories of platforms that consume implement.jsonl / check.jsonl.
|
|
115
116
|
# Keep in sync with src/types/ai-tools.ts AI_TOOLS entries — these are the
|
|
116
|
-
# platforms listed in workflow.md's "agent-capable" Skill Routing block
|
|
117
|
-
#
|
|
118
|
-
# Devin are NOT in this list: they
|
|
117
|
+
# platforms listed in workflow.md's "agent-capable" Skill Routing block.
|
|
118
|
+
# Codex is checked separately because default inline mode does not consume
|
|
119
|
+
# JSONL. Kilo / Antigravity / Devin are NOT in this list either: they load
|
|
120
|
+
# specs through skills instead of JSONL.
|
|
119
121
|
_SUBAGENT_CONFIG_DIRS: tuple[str, ...] = (
|
|
120
122
|
".claude",
|
|
121
123
|
".cursor",
|
|
122
|
-
".codex",
|
|
123
124
|
".kiro",
|
|
124
125
|
".gemini",
|
|
125
126
|
".opencode",
|
|
@@ -128,7 +129,11 @@ _SUBAGENT_CONFIG_DIRS: tuple[str, ...] = (
|
|
|
128
129
|
".factory", # Factory Droid
|
|
129
130
|
".github/copilot",
|
|
130
131
|
".pi", # Pi Agent
|
|
132
|
+
".trae", # Trae IDE
|
|
133
|
+
".omp", # Oh My Pi
|
|
134
|
+
".zcode", # ZCode
|
|
131
135
|
)
|
|
136
|
+
_CODEX_CONFIG_DIR = ".codex"
|
|
132
137
|
|
|
133
138
|
_SEED_EXAMPLE = (
|
|
134
139
|
"Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. "
|
|
@@ -141,13 +146,15 @@ _SEED_EXAMPLE = (
|
|
|
141
146
|
def _has_subagent_platform(repo_root: Path) -> bool:
|
|
142
147
|
"""Return True if any sub-agent-capable platform is configured.
|
|
143
148
|
|
|
144
|
-
Detected by probing well-known config directories at the repo root.
|
|
145
|
-
only
|
|
146
|
-
``
|
|
149
|
+
Detected by probing well-known config directories at the repo root. Codex
|
|
150
|
+
only counts when ``codex.dispatch_mode`` explicitly opts into
|
|
151
|
+
``sub-agent``; inline mode loads context through skills, not JSONL.
|
|
147
152
|
"""
|
|
148
153
|
for config_dir in _SUBAGENT_CONFIG_DIRS:
|
|
149
154
|
if (repo_root / config_dir).is_dir():
|
|
150
155
|
return True
|
|
156
|
+
if (repo_root / _CODEX_CONFIG_DIR).is_dir():
|
|
157
|
+
return get_codex_dispatch_mode(repo_root) == "sub-agent"
|
|
151
158
|
return False
|
|
152
159
|
|
|
153
160
|
|
|
@@ -239,6 +246,34 @@ def cmd_create(args: argparse.Namespace) -> int:
|
|
|
239
246
|
# Create task directory with MM-DD-slug format
|
|
240
247
|
tasks_dir = get_tasks_dir(repo_root)
|
|
241
248
|
date_prefix = generate_task_date_prefix()
|
|
249
|
+
|
|
250
|
+
# Guard against date-prefixed --slug (e.g. a full task dir name pasted in),
|
|
251
|
+
# which would otherwise produce MM-DD-MM-DD-slug (issue #377). Only an
|
|
252
|
+
# explicit --slug is guarded; title-derived slugs are left untouched.
|
|
253
|
+
if args.slug:
|
|
254
|
+
m = re.match(r"^(\d{2})-(\d{2})-(.+)$", slug)
|
|
255
|
+
if m and 1 <= int(m.group(1)) <= 12 and 1 <= int(m.group(2)) <= 31:
|
|
256
|
+
slug_prefix = f"{m.group(1)}-{m.group(2)}"
|
|
257
|
+
if slug_prefix == date_prefix:
|
|
258
|
+
slug = m.group(3)
|
|
259
|
+
print(
|
|
260
|
+
colored(
|
|
261
|
+
f'warning: --slug should not include the MM-DD prefix; normalized to "{slug}"',
|
|
262
|
+
Colors.YELLOW,
|
|
263
|
+
),
|
|
264
|
+
file=sys.stderr,
|
|
265
|
+
)
|
|
266
|
+
else:
|
|
267
|
+
print(
|
|
268
|
+
colored(
|
|
269
|
+
f"Error: --slug starts with a date prefix ({slug_prefix}-), but task.py create always uses today's date ({date_prefix}).",
|
|
270
|
+
Colors.RED,
|
|
271
|
+
),
|
|
272
|
+
file=sys.stderr,
|
|
273
|
+
)
|
|
274
|
+
print(f"Pass only the slug body, e.g. --slug {m.group(3)}", file=sys.stderr)
|
|
275
|
+
return 1
|
|
276
|
+
|
|
242
277
|
dir_name = f"{date_prefix}-{slug}"
|
|
243
278
|
task_dir = tasks_dir / dir_name
|
|
244
279
|
task_json_path = task_dir / FILE_TASK_JSON
|
|
@@ -261,11 +296,21 @@ def cmd_create(args: argparse.Namespace) -> int:
|
|
|
261
296
|
_, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root)
|
|
262
297
|
current_branch = branch_out.strip() or "main"
|
|
263
298
|
|
|
299
|
+
description = (args.description or "").strip()
|
|
300
|
+
if not description.strip():
|
|
301
|
+
print(
|
|
302
|
+
colored(
|
|
303
|
+
"warning: task description is empty; pass --description to improve search and later audits.",
|
|
304
|
+
Colors.YELLOW,
|
|
305
|
+
),
|
|
306
|
+
file=sys.stderr,
|
|
307
|
+
)
|
|
308
|
+
|
|
264
309
|
task_data = {
|
|
265
310
|
"id": slug,
|
|
266
311
|
"name": slug,
|
|
267
312
|
"title": args.title,
|
|
268
|
-
"description":
|
|
313
|
+
"description": description,
|
|
269
314
|
"status": "planning",
|
|
270
315
|
"dev_type": None,
|
|
271
316
|
"scope": None,
|
|
@@ -293,7 +338,7 @@ def cmd_create(args: argparse.Namespace) -> int:
|
|
|
293
338
|
prd_path = task_dir / "prd.md"
|
|
294
339
|
if not prd_path.exists():
|
|
295
340
|
prd_path.write_text(
|
|
296
|
-
_default_prd_content(args.title,
|
|
341
|
+
_default_prd_content(args.title, description),
|
|
297
342
|
encoding="utf-8",
|
|
298
343
|
)
|
|
299
344
|
|
|
@@ -336,16 +381,31 @@ def cmd_create(args: argparse.Namespace) -> int:
|
|
|
336
381
|
# outside an AI session) — the task is still created, the user can run
|
|
337
382
|
# task.py start later. Pointer is session-scoped so this never affects
|
|
338
383
|
# other AI sessions.
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
384
|
+
if getattr(args, "no_start", False):
|
|
385
|
+
print(
|
|
386
|
+
colored(
|
|
387
|
+
"Skipped session activation (--no-start); run task.py start when ready.",
|
|
388
|
+
Colors.YELLOW,
|
|
389
|
+
),
|
|
390
|
+
file=sys.stderr,
|
|
391
|
+
)
|
|
392
|
+
else:
|
|
393
|
+
try:
|
|
394
|
+
from .active_task import resolve_context_key, set_active_task
|
|
395
|
+
if resolve_context_key():
|
|
396
|
+
try:
|
|
397
|
+
rel_dir = task_dir.relative_to(repo_root).as_posix()
|
|
398
|
+
except ValueError:
|
|
399
|
+
rel_dir = str(task_dir)
|
|
400
|
+
active = set_active_task(rel_dir, repo_root)
|
|
401
|
+
if active:
|
|
402
|
+
print(
|
|
403
|
+
colored(f"Activated task for this session: {active.task_path}", Colors.GREEN),
|
|
404
|
+
file=sys.stderr,
|
|
405
|
+
)
|
|
406
|
+
print(f"Source: {active.source}", file=sys.stderr)
|
|
407
|
+
except Exception:
|
|
408
|
+
pass
|
|
349
409
|
|
|
350
410
|
print(colored(f"Created task: {dir_name}", Colors.GREEN), file=sys.stderr)
|
|
351
411
|
print("", file=sys.stderr)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Task Management Script.
|
|
5
5
|
|
|
6
6
|
Usage:
|
|
7
|
-
python3 task.py create "<title>" [--slug <name>] [--assignee <dev>] [--priority P0|P1|P2|P3] [--parent <dir>] [--package <pkg>]
|
|
7
|
+
python3 task.py create "<title>" [--slug <name>] [--assignee <dev>] [--priority P0|P1|P2|P3] [--parent <dir>] [--package <pkg>] [--no-start]
|
|
8
8
|
python3 task.py add-context <dir> <file> <path> [reason] # Add jsonl entry
|
|
9
9
|
python3 task.py validate <dir> # Validate jsonl files
|
|
10
10
|
python3 task.py list-context <dir> # List jsonl entries
|
|
@@ -307,6 +307,7 @@ Usage:
|
|
|
307
307
|
python3 task.py create <title> Create new task directory
|
|
308
308
|
python3 task.py create <title> --package <pkg> Create task for a specific package
|
|
309
309
|
python3 task.py create <title> --parent <dir> Create task as child of parent
|
|
310
|
+
python3 task.py create <title> --no-start Create without making it active in this session
|
|
310
311
|
python3 task.py add-context <dir> <jsonl> <path> [reason] Add entry to jsonl
|
|
311
312
|
python3 task.py validate <dir> Validate jsonl files
|
|
312
313
|
python3 task.py list-context <dir> List jsonl entries
|
|
@@ -392,12 +393,17 @@ def main() -> int:
|
|
|
392
393
|
# create
|
|
393
394
|
p_create = subparsers.add_parser("create", help="Create new task")
|
|
394
395
|
p_create.add_argument("title", help="Task title")
|
|
395
|
-
p_create.add_argument("--slug", "-s", help="Task slug")
|
|
396
|
+
p_create.add_argument("--slug", "-s", help="Task slug without the MM-DD date prefix")
|
|
396
397
|
p_create.add_argument("--assignee", "-a", help="Assignee developer")
|
|
397
398
|
p_create.add_argument("--priority", "-p", default="P2", help="Priority (P0-P3)")
|
|
398
399
|
p_create.add_argument("--description", "-d", help="Task description")
|
|
399
400
|
p_create.add_argument("--parent", help="Parent task directory (establishes subtask link)")
|
|
400
401
|
p_create.add_argument("--package", help="Package name for monorepo projects")
|
|
402
|
+
p_create.add_argument(
|
|
403
|
+
"--no-start",
|
|
404
|
+
action="store_true",
|
|
405
|
+
help="Create the task without making it active in this session",
|
|
406
|
+
)
|
|
401
407
|
|
|
402
408
|
# add-context
|
|
403
409
|
p_add = subparsers.add_parser("add-context", help="Add context entry")
|
|
@@ -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, ZCode, Reasonix (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, Reasonix (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 class-2 Codex/Copilot/
|
|
223
|
+
Sub-agent dispatch protocol applies to all platforms and all sub-agents, including class-2 Codex/Gemini/Qoder/Copilot/ZCode/Reasonix/Trae and `trellis-research`: every dispatch prompt starts with `Active task: <task path from task.py current>` before role-specific 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, ZCode, Reasonix]
|
|
275
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
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, ZCode, Reasonix]
|
|
281
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
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, ZCode, Reasonix]
|
|
356
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
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, ZCode, Reasonix]
|
|
364
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
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, ZCode, Reasonix]
|
|
383
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
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
|
|
|
@@ -421,9 +421,11 @@ python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" check "<path>" "<reas
|
|
|
421
421
|
|
|
422
422
|
Delete the seed `_example` line once real entries exist (optional — it's skipped automatically by consumers).
|
|
423
423
|
|
|
424
|
-
|
|
424
|
+
Ready gate: both `implement.jsonl` and `check.jsonl` must contain at least one real `{"file": "...", "reason": "..."}` entry before `task.py start`. The seed `_example` row alone is not ready.
|
|
425
425
|
|
|
426
|
-
|
|
426
|
+
Skip this step only when both files already have real curated entries.
|
|
427
|
+
|
|
428
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
427
429
|
|
|
428
430
|
[codex-inline, Kilo, Antigravity, Devin]
|
|
429
431
|
|
|
@@ -439,7 +441,7 @@ After artifact review, flip the task status to `in_progress`:
|
|
|
439
441
|
python3 ./.trellis/scripts/task.py start <task-dir>
|
|
440
442
|
```
|
|
441
443
|
|
|
442
|
-
For lightweight tasks, `prd.md` can be enough. For complex tasks, `prd.md`, `design.md`, and `implement.md` must exist and be reviewed before start. On sub-agent-
|
|
444
|
+
For lightweight tasks, `prd.md` can be enough. For complex tasks, `prd.md`, `design.md`, and `implement.md` must exist and be reviewed before start. On sub-agent-dispatch platforms, `implement.jsonl` and `check.jsonl` must both have real curated entries before start. Runtime consumers tolerate missing or seed-only manifests for compatibility, but that tolerance is not a planning-ready state.
|
|
443
445
|
|
|
444
446
|
After this command succeeds, the breadcrumb auto-switches to `[workflow-state:in_progress]`, and the rest of Phase 2 / 3 follows.
|
|
445
447
|
|
|
@@ -456,11 +458,11 @@ If `task.py start` errors with a session-identity message (no context key from h
|
|
|
456
458
|
| `design.md` exists (complex tasks) | ✅ |
|
|
457
459
|
| `implement.md` exists (complex tasks) | ✅ |
|
|
458
460
|
|
|
459
|
-
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
|
|
461
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
460
462
|
|
|
461
|
-
| `implement.jsonl`
|
|
463
|
+
| `implement.jsonl` and `check.jsonl` each contain at least one real curated entry (seed row does not count) | ✅ |
|
|
462
464
|
|
|
463
|
-
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
|
|
465
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
464
466
|
|
|
465
467
|
---
|
|
466
468
|
|
|
@@ -470,7 +472,7 @@ Goal: turn reviewed planning artifacts into code that passes quality checks.
|
|
|
470
472
|
|
|
471
473
|
#### 2.1 Implement `[required · repeatable]`
|
|
472
474
|
|
|
473
|
-
[Claude Code, Cursor, OpenCode,
|
|
475
|
+
[Claude Code, Cursor, OpenCode, CodeBuddy, Droid, Pi, Oh My Pi]
|
|
474
476
|
|
|
475
477
|
Spawn the implement sub-agent:
|
|
476
478
|
|
|
@@ -482,9 +484,9 @@ The platform hook/plugin auto-handles:
|
|
|
482
484
|
- Reads `implement.jsonl` and injects referenced spec/research files into the agent prompt
|
|
483
485
|
- Injects `prd.md`, `design.md` if present, and `implement.md` if present
|
|
484
486
|
|
|
485
|
-
[/Claude Code, Cursor, OpenCode,
|
|
487
|
+
[/Claude Code, Cursor, OpenCode, CodeBuddy, Droid, Pi, Oh My Pi]
|
|
486
488
|
|
|
487
|
-
[codex-sub-agent, ZCode, Reasonix]
|
|
489
|
+
[codex-sub-agent, Gemini, Qoder, Copilot, ZCode, Reasonix, Trae]
|
|
488
490
|
|
|
489
491
|
Spawn the implement sub-agent:
|
|
490
492
|
|
|
@@ -492,11 +494,11 @@ Spawn the implement sub-agent:
|
|
|
492
494
|
- **Task description**: Implement the reviewed task artifacts, consulting materials under `{TASK_DIR}/research/`; finish by running project lint and type-check
|
|
493
495
|
- **Dispatch prompt guard**: The prompt MUST start with `Active task: <task path>`, then explicitly say the spawned agent is already `trellis-implement` and must implement directly without spawning another `trellis-implement` / `trellis-check`.
|
|
494
496
|
|
|
495
|
-
The
|
|
497
|
+
The pull-based sub-agent definition auto-handles the context load requirement:
|
|
496
498
|
- Resolves the active task with `task.py current --source`, then reads `prd.md`, `design.md` if present, and `implement.md` if present
|
|
497
499
|
- Reads `implement.jsonl` and requires the agent to load each referenced spec/research file before coding
|
|
498
500
|
|
|
499
|
-
[/codex-sub-agent, ZCode, Reasonix]
|
|
501
|
+
[/codex-sub-agent, Gemini, Qoder, Copilot, ZCode, Reasonix, Trae]
|
|
500
502
|
|
|
501
503
|
[Kiro]
|
|
502
504
|
|
|
@@ -524,7 +526,7 @@ The platform prelude auto-handles the context load requirement:
|
|
|
524
526
|
|
|
525
527
|
#### 2.2 Quality check `[required · repeatable]`
|
|
526
528
|
|
|
527
|
-
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
|
|
529
|
+
[Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
528
530
|
|
|
529
531
|
Spawn the check sub-agent:
|
|
530
532
|
|
|
@@ -538,7 +540,7 @@ The check agent's job:
|
|
|
538
540
|
- Auto-fix issues it finds
|
|
539
541
|
- Run lint and typecheck to verify
|
|
540
542
|
|
|
541
|
-
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, ZCode, Reasonix]
|
|
543
|
+
[/Claude Code, Cursor, OpenCode, codex-sub-agent, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid, Pi, Oh My Pi, ZCode, Reasonix, Trae]
|
|
542
544
|
|
|
543
545
|
[codex-inline, Kilo, Antigravity, Devin]
|
|
544
546
|
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trellis-research
|
|
3
|
+
description: |
|
|
4
|
+
Code and tech search expert. Finds files, patterns, and tech solutions, and PERSISTS every finding to the current task's research/ directory. No code modifications outside that directory.
|
|
5
|
+
color: "#4f46e5"
|
|
6
|
+
---
|
|
7
|
+
# Research Agent
|
|
8
|
+
|
|
9
|
+
You are the Research Agent in the Trellis workflow.
|
|
10
|
+
|
|
11
|
+
## Core Principle
|
|
12
|
+
|
|
13
|
+
**You do one thing: find, explain, and PERSIST information.**
|
|
14
|
+
|
|
15
|
+
Conversations get compacted; files don't. Every research output MUST end up as a file under `{TASK_DIR}/research/`. Returning findings only through the chat reply is a failure - the caller cannot read them next session.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Core Responsibilities
|
|
20
|
+
|
|
21
|
+
1. **Internal Search** - locate files/components, understand code logic, discover patterns
|
|
22
|
+
2. **External Search** - library docs, API references, best practices
|
|
23
|
+
3. **Persist** - write each research topic to `{TASK_DIR}/research/<topic>.md`
|
|
24
|
+
4. **Report** - return file paths + one-line summaries to the main agent, not full content
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
### Step 1: Resolve Current Task
|
|
31
|
+
|
|
32
|
+
Run `python3 ./.trellis/scripts/task.py current --source` to get the active task path. If no active task is set, ask the user where to write output; do NOT guess.
|
|
33
|
+
|
|
34
|
+
Ensure `{TASK_DIR}/research/` exists before writing findings.
|
|
35
|
+
|
|
36
|
+
### Step 2: Understand Search Request
|
|
37
|
+
|
|
38
|
+
Classify the request as internal, external, or mixed. Determine scope and expected output shape.
|
|
39
|
+
|
|
40
|
+
### Step 3: Execute Search
|
|
41
|
+
|
|
42
|
+
Run independent searches in parallel where possible. Read relevant source files, specs, and documentation before forming conclusions.
|
|
43
|
+
|
|
44
|
+
### Step 4: Persist Each Topic
|
|
45
|
+
|
|
46
|
+
For each distinct research topic, write a markdown file at `{TASK_DIR}/research/<topic-slug>.md` using the File Format below.
|
|
47
|
+
|
|
48
|
+
### Step 5: Report to Main Agent
|
|
49
|
+
|
|
50
|
+
Reply with ONLY:
|
|
51
|
+
|
|
52
|
+
- List of files written, paths relative to repo root
|
|
53
|
+
- One-line summary per file
|
|
54
|
+
- Any critical caveats that the main agent needs to know right now
|
|
55
|
+
|
|
56
|
+
Do NOT paste full research content into the reply. The files are the contract.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Scope Limits
|
|
61
|
+
|
|
62
|
+
### Write Allowed
|
|
63
|
+
|
|
64
|
+
- `{TASK_DIR}/research/*.md` - your own output
|
|
65
|
+
- Creating `{TASK_DIR}/research/` if it doesn't exist
|
|
66
|
+
|
|
67
|
+
### Write Forbidden
|
|
68
|
+
|
|
69
|
+
- Code files (`src/`, `lib/`, etc.)
|
|
70
|
+
- Spec files (`.trellis/spec/`) - main agent should use the update-spec skill instead
|
|
71
|
+
- `.trellis/scripts/`, `.trellis/workflow.md`, platform config (`.zcode/`, `.claude/`, `.cursor/`, etc.)
|
|
72
|
+
- Other task directories
|
|
73
|
+
- Any git operation
|
|
74
|
+
|
|
75
|
+
If the user asks you to edit code, decline and suggest spawning `trellis-implement` instead.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## File Format
|
|
80
|
+
|
|
81
|
+
Each `{TASK_DIR}/research/<topic>.md` should follow:
|
|
82
|
+
|
|
83
|
+
```markdown
|
|
84
|
+
# Research: <topic>
|
|
85
|
+
|
|
86
|
+
- Query: <original query>
|
|
87
|
+
- Scope: internal / external / mixed
|
|
88
|
+
- Date: YYYY-MM-DD
|
|
89
|
+
|
|
90
|
+
## Findings
|
|
91
|
+
|
|
92
|
+
### Files Found
|
|
93
|
+
|
|
94
|
+
| File Path | Description |
|
|
95
|
+
|---|---|
|
|
96
|
+
| `src/services/xxx.ts` | Main implementation |
|
|
97
|
+
| `src/types/xxx.ts` | Type definitions |
|
|
98
|
+
|
|
99
|
+
### Code Patterns
|
|
100
|
+
|
|
101
|
+
<describe patterns, cite file:line>
|
|
102
|
+
|
|
103
|
+
### External References
|
|
104
|
+
|
|
105
|
+
- [Library X docs](url) - <why relevant, version constraints>
|
|
106
|
+
|
|
107
|
+
### Related Specs
|
|
108
|
+
|
|
109
|
+
- `.trellis/spec/xxx.md` - <description>
|
|
110
|
+
|
|
111
|
+
## Caveats / Not Found
|
|
112
|
+
|
|
113
|
+
<anything incomplete or uncertain>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Guidelines
|
|
119
|
+
|
|
120
|
+
### Do
|
|
121
|
+
|
|
122
|
+
- Provide specific file paths and line numbers
|
|
123
|
+
- Quote actual code snippets only when they are relevant
|
|
124
|
+
- Persist every topic to its own file
|
|
125
|
+
- Return file paths in your reply, not the full content
|
|
126
|
+
- Mark "not found" explicitly when searches come up empty
|
|
127
|
+
|
|
128
|
+
### Don't
|
|
129
|
+
|
|
130
|
+
- Don't write code or modify files outside `{TASK_DIR}/research/`
|
|
131
|
+
- Don't guess uncertain info
|
|
132
|
+
- Don't paste full research text into the reply
|
|
133
|
+
- Don't propose implementation changes unless the main agent explicitly asked for research options
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
* ZCode template module.
|
|
3
3
|
*
|
|
4
4
|
* ZCode (智谱) is an agentic AI coding tool that supports multi-agent
|
|
5
|
-
* collaboration. It stores agents as `.zcode/
|
|
5
|
+
* collaboration. It stores agents as `.zcode/agents/<name>.md`
|
|
6
6
|
* (Markdown with YAML frontmatter: name, description, color).
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* trellis-implement and trellis-check use pull-based context injection.
|
|
9
|
+
* trellis-research is intentionally standalone: it does not receive the
|
|
10
|
+
* implement/check prelude, and persists findings under the active task's
|
|
11
|
+
* research directory instead.
|
|
11
12
|
*/
|
|
12
13
|
import { type AgentTemplate } from "../template-utils.js";
|
|
13
|
-
/** Sub-agent definitions (trellis-implement, trellis-check). */
|
|
14
|
+
/** Sub-agent definitions (trellis-implement, trellis-check, trellis-research). */
|
|
14
15
|
export declare function getAllAgents(): AgentTemplate[];
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/zcode/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/zcode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIhF,kFAAkF;AAClF,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C"}
|
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
* ZCode template module.
|
|
3
3
|
*
|
|
4
4
|
* ZCode (智谱) is an agentic AI coding tool that supports multi-agent
|
|
5
|
-
* collaboration. It stores agents as `.zcode/
|
|
5
|
+
* collaboration. It stores agents as `.zcode/agents/<name>.md`
|
|
6
6
|
* (Markdown with YAML frontmatter: name, description, color).
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* trellis-implement and trellis-check use pull-based context injection.
|
|
9
|
+
* trellis-research is intentionally standalone: it does not receive the
|
|
10
|
+
* implement/check prelude, and persists findings under the active task's
|
|
11
|
+
* research directory instead.
|
|
11
12
|
*/
|
|
12
13
|
import { createTemplateReader } from "../template-utils.js";
|
|
13
14
|
const { listMdAgents } = createTemplateReader(import.meta.url);
|
|
14
|
-
/** Sub-agent definitions (trellis-implement, trellis-check). */
|
|
15
|
+
/** Sub-agent definitions (trellis-implement, trellis-check, trellis-research). */
|
|
15
16
|
export function getAllAgents() {
|
|
16
17
|
return listMdAgents();
|
|
17
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/zcode/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/zcode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAsB,MAAM,sBAAsB,CAAC;AAEhF,MAAM,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/D,kFAAkF;AAClF,MAAM,UAAU,YAAY;IAC1B,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC"}
|
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";
|
|
9
|
+
export type AITool = "claude-code" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp";
|
|
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";
|
|
13
|
+
export type TemplateDir = "common" | "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp";
|
|
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";
|
|
18
|
+
export type CliFlag = "claude" | "cursor" | "opencode" | "codex" | "kilo" | "kiro" | "gemini" | "antigravity" | "devin" | "qoder" | "codebuddy" | "copilot" | "droid" | "pi" | "reasonix" | "zcode" | "trae" | "omp";
|
|
19
19
|
/**
|
|
20
20
|
* Template context for placeholder resolution.
|
|
21
21
|
* Controls how common templates are rendered per platform.
|
|
@@ -26,7 +26,7 @@ export interface TemplateContext {
|
|
|
26
26
|
/** Description of AI executor actions shown in role tables */
|
|
27
27
|
executorAI: "Bash scripts or Task calls" | "Bash scripts or tool calls" | "Bash scripts or Agent calls" | "Bash scripts or file reads";
|
|
28
28
|
/** Label for user-invocable actions */
|
|
29
|
-
userActionLabel: "Slash commands" | "Skills" | "Workflows" | "Prompts";
|
|
29
|
+
userActionLabel: "Slash commands" | "Skills" | "Workflows" | "Prompts" | "Commands";
|
|
30
30
|
/** Platform supports spawning sub-agents with isolated context */
|
|
31
31
|
agentCapable: boolean;
|
|
32
32
|
/** Platform has hook system (SessionStart, PreToolUse) */
|
|
@@ -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,CAAC;
|
|
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,CAAC;AAEV;;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,CAAC;AAEV;;;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,CAAC;AAEV;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,YAAY,EAAE,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,iBAAiB,CAAC;IACxE,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,CAyTjD,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
|
@@ -202,6 +202,7 @@ export const AI_TOOLS = {
|
|
|
202
202
|
configDir: ".github/copilot",
|
|
203
203
|
extraManagedPaths: [
|
|
204
204
|
".github/agents",
|
|
205
|
+
".github/copilot-instructions.md",
|
|
205
206
|
".github/hooks",
|
|
206
207
|
".github/prompts",
|
|
207
208
|
".github/skills",
|
|
@@ -270,8 +271,18 @@ export const AI_TOOLS = {
|
|
|
270
271
|
name: "ZCode",
|
|
271
272
|
templateDirs: ["common", "zcode"],
|
|
272
273
|
configDir: ".zcode",
|
|
273
|
-
|
|
274
|
-
|
|
274
|
+
// `.zcode/cli/agents` is the pre-ZCode-update discovery path. Kept managed
|
|
275
|
+
// during the transition so `trellis update --migrate` (rename-dir →
|
|
276
|
+
// `.zcode/agents/`) and `trellis uninstall` can clean up the now-empty
|
|
277
|
+
// `.zcode/cli/` parent. Drop this entry once the migration has shipped and
|
|
278
|
+
// no project still holds the legacy dir. Only empty dirs are ever removed,
|
|
279
|
+
// so user files are never touched (see cleanupEmptyDirs in update.ts).
|
|
280
|
+
extraManagedPaths: [
|
|
281
|
+
".zcode/cli/agents",
|
|
282
|
+
".zcode/agents",
|
|
283
|
+
".zcode/commands",
|
|
284
|
+
".zcode/skills",
|
|
285
|
+
],
|
|
275
286
|
cliFlag: "zcode",
|
|
276
287
|
defaultChecked: false,
|
|
277
288
|
hasPythonHooks: false,
|
|
@@ -284,6 +295,38 @@ export const AI_TOOLS = {
|
|
|
284
295
|
cliFlag: "zcode",
|
|
285
296
|
},
|
|
286
297
|
},
|
|
298
|
+
trae: {
|
|
299
|
+
name: "Trae",
|
|
300
|
+
templateDirs: ["common", "trae"],
|
|
301
|
+
configDir: ".trae",
|
|
302
|
+
cliFlag: "trae",
|
|
303
|
+
defaultChecked: false,
|
|
304
|
+
hasPythonHooks: true,
|
|
305
|
+
templateContext: {
|
|
306
|
+
cmdRefPrefix: "/trellis-",
|
|
307
|
+
executorAI: "Bash scripts or tool calls",
|
|
308
|
+
userActionLabel: "Commands",
|
|
309
|
+
agentCapable: true,
|
|
310
|
+
hasHooks: true,
|
|
311
|
+
cliFlag: "trae",
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
omp: {
|
|
315
|
+
name: "Oh My Pi",
|
|
316
|
+
templateDirs: ["common", "omp"],
|
|
317
|
+
configDir: ".omp",
|
|
318
|
+
cliFlag: "omp",
|
|
319
|
+
defaultChecked: false,
|
|
320
|
+
hasPythonHooks: false,
|
|
321
|
+
templateContext: {
|
|
322
|
+
cmdRefPrefix: "/trellis:",
|
|
323
|
+
executorAI: "Bash scripts or Task calls",
|
|
324
|
+
userActionLabel: "Slash commands",
|
|
325
|
+
agentCapable: true,
|
|
326
|
+
hasHooks: true,
|
|
327
|
+
cliFlag: "omp",
|
|
328
|
+
},
|
|
329
|
+
},
|
|
287
330
|
};
|
|
288
331
|
/**
|
|
289
332
|
* Get the configuration for a specific AI tool
|