@mindfoldhq/trellis 0.5.0-beta.1 → 0.5.0-beta.11
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/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +384 -120
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +97 -41
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/index.d.ts.map +1 -1
- package/dist/configurators/index.js +10 -8
- package/dist/configurators/index.js.map +1 -1
- package/dist/configurators/opencode.d.ts +10 -3
- package/dist/configurators/opencode.d.ts.map +1 -1
- package/dist/configurators/opencode.js +58 -32
- package/dist/configurators/opencode.js.map +1 -1
- package/dist/configurators/qoder.d.ts +7 -6
- package/dist/configurators/qoder.d.ts.map +1 -1
- package/dist/configurators/qoder.js +17 -9
- package/dist/configurators/qoder.js.map +1 -1
- package/dist/configurators/shared.d.ts +3 -1
- package/dist/configurators/shared.d.ts.map +1 -1
- package/dist/configurators/shared.js +26 -3
- package/dist/configurators/shared.js.map +1 -1
- package/dist/migrations/manifests/0.5.0-beta.0.json +2 -0
- package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
- package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
- package/dist/templates/claude/agents/{check.md → trellis-check.md} +1 -2
- package/dist/templates/{cursor/agents/implement.md → claude/agents/trellis-implement.md} +1 -2
- package/dist/templates/{cursor/agents/research.md → claude/agents/trellis-research.md} +1 -2
- package/dist/templates/claude/settings.json +3 -0
- package/dist/templates/{cursor/agents/check.md → codebuddy/agents/trellis-check.md} +1 -2
- package/dist/templates/{claude/agents/implement.md → codebuddy/agents/trellis-implement.md} +1 -2
- package/dist/templates/{droid/droids/research.md → codebuddy/agents/trellis-research.md} +1 -2
- package/dist/templates/codex/agents/trellis-check.toml +38 -0
- package/dist/templates/codex/agents/{implement.toml → trellis-implement.toml} +1 -1
- package/dist/templates/codex/agents/{research.toml → trellis-research.toml} +1 -1
- package/dist/templates/codex/skills/start/SKILL.md +1 -1
- package/dist/templates/common/skills/brainstorm.md +47 -4
- package/dist/templates/copilot/prompts/start.prompt.md +13 -16
- package/dist/templates/{droid/droids/check.md → cursor/agents/trellis-check.md} +1 -2
- package/dist/templates/{codebuddy/agents/implement.md → cursor/agents/trellis-implement.md} +1 -2
- package/dist/templates/{claude/agents/research.md → cursor/agents/trellis-research.md} +1 -2
- package/dist/templates/{codebuddy/agents/check.md → droid/droids/trellis-check.md} +1 -2
- package/dist/templates/droid/droids/{implement.md → trellis-implement.md} +1 -2
- package/dist/templates/{codebuddy/agents/research.md → droid/droids/trellis-research.md} +1 -2
- package/dist/templates/gemini/agents/trellis-check.md +94 -0
- package/dist/templates/gemini/agents/trellis-implement.md +94 -0
- package/dist/templates/gemini/agents/trellis-research.md +137 -0
- package/dist/templates/kiro/agents/{check.json → trellis-check.json} +1 -1
- package/dist/templates/kiro/agents/{implement.json → trellis-implement.json} +1 -1
- package/dist/templates/kiro/agents/{research.json → trellis-research.json} +1 -1
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +24 -0
- package/dist/templates/opencode/plugins/inject-subagent-context.js +10 -8
- package/dist/templates/opencode/plugins/inject-workflow-state.js +27 -15
- package/dist/templates/opencode/plugins/session-start.js +5 -7
- package/dist/templates/qoder/agents/trellis-check.md +94 -0
- package/dist/templates/qoder/agents/trellis-implement.md +94 -0
- package/dist/templates/qoder/agents/trellis-research.md +137 -0
- package/dist/templates/shared-hooks/inject-subagent-context.py +4 -3
- package/dist/templates/shared-hooks/inject-workflow-state.py +21 -8
- package/dist/templates/shared-hooks/session-start.py +15 -4
- package/dist/templates/trellis/config.yaml +6 -0
- package/dist/templates/trellis/index.d.ts +0 -1
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +0 -2
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/common/cli_adapter.py +29 -6
- package/dist/templates/trellis/scripts/common/task_context.py +20 -5
- package/dist/templates/trellis/scripts/common/types.py +0 -2
- package/dist/templates/trellis/scripts/task.py +7 -0
- package/dist/templates/trellis/workflow.md +15 -7
- package/dist/types/ai-tools.d.ts +9 -0
- package/dist/types/ai-tools.d.ts.map +1 -1
- package/dist/types/ai-tools.js +13 -0
- package/dist/types/ai-tools.js.map +1 -1
- package/dist/utils/project-detector.d.ts +2 -0
- package/dist/utils/project-detector.d.ts.map +1 -1
- package/dist/utils/project-detector.js +120 -11
- package/dist/utils/project-detector.js.map +1 -1
- package/dist/utils/task-json.d.ts +46 -0
- package/dist/utils/task-json.d.ts.map +1 -0
- package/dist/utils/task-json.js +49 -0
- package/dist/utils/task-json.js.map +1 -0
- package/package.json +4 -4
- package/dist/templates/codex/agents/check.toml +0 -23
- package/dist/templates/gemini/agents/check.md +0 -95
- package/dist/templates/gemini/agents/implement.md +0 -95
- package/dist/templates/gemini/agents/research.md +0 -138
- package/dist/templates/markdown/spec/backend/directory-structure.md +0 -292
- package/dist/templates/markdown/spec/backend/index.md +0 -40
- package/dist/templates/markdown/spec/backend/script-conventions.md +0 -742
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md +0 -118
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md +0 -394
- package/dist/templates/qoder/agents/check.md +0 -95
- package/dist/templates/qoder/agents/implement.md +0 -95
- package/dist/templates/qoder/agents/research.md +0 -138
- package/dist/templates/trellis/scripts/create_bootstrap.py +0 -298
- /package/dist/templates/opencode/agents/{check.md → trellis-check.md} +0 -0
- /package/dist/templates/opencode/agents/{implement.md → trellis-implement.md} +0 -0
- /package/dist/templates/opencode/agents/{research.md → trellis-research.md} +0 -0
|
@@ -129,19 +129,32 @@ _TAG_RE = re.compile(
|
|
|
129
129
|
# the Next-Action reminder flowing per-turn even without an active task.
|
|
130
130
|
_FALLBACK_BREADCRUMBS = {
|
|
131
131
|
"no_task": (
|
|
132
|
-
"No active task
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
132
|
+
"No active task.\n"
|
|
133
|
+
"Trigger words in the user message that REQUIRE creating a task "
|
|
134
|
+
"(non-negotiable, do NOT self-exempt): 重构 / 抽成 / 独立 / 分发 / "
|
|
135
|
+
"拆出来 / 搞一个 / 做成 / 接入 / 集成 / refactor / rewrite / extract / "
|
|
136
|
+
"productize / publish / build X / design Y.\n"
|
|
137
|
+
"Task is NOT required ONLY if ALL three hold: (a) zero file writes "
|
|
138
|
+
"this turn, (b) answer fits in one reply with no multi-round plan, "
|
|
139
|
+
"(c) no research beyond reading 1-2 repo files.\n"
|
|
140
|
+
"When in doubt: create task. Over-tasking is cheap; under-tasking "
|
|
141
|
+
"leaks plans and research into main context.\n"
|
|
142
|
+
"Flow: load `trellis-brainstorm` skill → it creates the task via "
|
|
143
|
+
"`python3 ./.trellis/scripts/task.py create` and drives requirements Q&A. "
|
|
144
|
+
"For research-heavy work (tool comparison, docs, cross-platform survey), "
|
|
145
|
+
"spawn `trellis-research` sub-agents via Task tool — NEVER do 3+ inline "
|
|
146
|
+
"WebFetch/WebSearch/`gh api` calls in the main conversation."
|
|
136
147
|
),
|
|
137
148
|
"planning": (
|
|
138
|
-
"Complete prd.md via trellis-brainstorm skill; "
|
|
139
|
-
"
|
|
149
|
+
"Complete prd.md via trellis-brainstorm skill; then run task.py start.\n"
|
|
150
|
+
"Research belongs in `{task_dir}/research/*.md`, written by "
|
|
151
|
+
"`trellis-research` sub-agents. Do NOT inline WebFetch/WebSearch in "
|
|
152
|
+
"main session — PRD only links to research files."
|
|
140
153
|
),
|
|
141
154
|
"in_progress": (
|
|
142
|
-
"Flow: implement → check → update-spec → finish\n"
|
|
155
|
+
"Flow: trellis-implement → trellis-check → trellis-update-spec → finish\n"
|
|
143
156
|
"Check conversation history + git status to determine current step; "
|
|
144
|
-
"do NOT skip check."
|
|
157
|
+
"do NOT skip trellis-check."
|
|
145
158
|
),
|
|
146
159
|
"completed": (
|
|
147
160
|
"User commits changes; then run task.py archive."
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"""
|
|
4
4
|
Session Start Hook - Inject structured context
|
|
5
5
|
"""
|
|
6
|
+
from __future__ import annotations
|
|
6
7
|
|
|
7
8
|
# IMPORTANT: Suppress all warnings FIRST
|
|
8
9
|
import warnings
|
|
@@ -118,7 +119,11 @@ def _get_task_status(trellis_dir: Path) -> str:
|
|
|
118
119
|
return (
|
|
119
120
|
"Status: NO ACTIVE TASK\n"
|
|
120
121
|
"Next-Action: After the user describes their intent, load skill `trellis-brainstorm` "
|
|
121
|
-
"to clarify requirements and create a task via `python3 ./.trellis/scripts/task.py create
|
|
122
|
+
"to clarify requirements and create a task via `python3 ./.trellis/scripts/task.py create`.\n"
|
|
123
|
+
"Research reminder: for research-heavy tasks (comparing tools, reading external docs, "
|
|
124
|
+
"cross-platform surveys), spawn `trellis-research` sub-agents via the Task tool — "
|
|
125
|
+
"they persist findings to `{TASK_DIR}/research/*.md` and keep main context clean. "
|
|
126
|
+
"Do NOT do 10+ inline WebFetch/WebSearch in the main conversation."
|
|
122
127
|
)
|
|
123
128
|
|
|
124
129
|
task_ref = _normalize_task_ref(current_task_file.read_text(encoding="utf-8").strip())
|
|
@@ -159,15 +164,21 @@ def _get_task_status(trellis_dir: Path) -> str:
|
|
|
159
164
|
return (
|
|
160
165
|
f"Status: PLANNING\nTask: {task_title}\n"
|
|
161
166
|
"Next-Action: Load skill `trellis-brainstorm` to clarify requirements with the user "
|
|
162
|
-
"and produce prd.md in the task directory
|
|
167
|
+
"and produce prd.md in the task directory.\n"
|
|
168
|
+
"Research reminder: when the task needs external research (tool comparison, docs, "
|
|
169
|
+
"conventions survey), spawn `trellis-research` sub-agents — don't WebFetch/WebSearch "
|
|
170
|
+
"inline in the main session. Findings go to `{task_dir}/research/*.md`; PRD only links to them."
|
|
163
171
|
)
|
|
164
172
|
|
|
165
173
|
# Case 5: PRD ready — enter Execute phase
|
|
166
174
|
return (
|
|
167
175
|
f"Status: READY\nTask: {task_title}\n"
|
|
168
176
|
"Next-Action: Load skill `trellis-before-dev` to read relevant specs, "
|
|
169
|
-
"then spawn `implement` sub-agent via the Task tool. "
|
|
170
|
-
"After implementation, spawn `check` sub-agent for quality verification
|
|
177
|
+
"then spawn `trellis-implement` sub-agent via the Task tool. "
|
|
178
|
+
"After implementation, spawn `trellis-check` sub-agent for quality verification.\n"
|
|
179
|
+
"Sub-agent roster: `trellis-implement` (writes code), `trellis-check` (verifies + self-fixes), "
|
|
180
|
+
"`trellis-research` (persists findings to `research/*.md` — use when you'd otherwise do "
|
|
181
|
+
"multiple WebFetch/WebSearch inline)."
|
|
171
182
|
)
|
|
172
183
|
|
|
173
184
|
|
|
@@ -48,6 +48,12 @@ max_journal_lines: 2000
|
|
|
48
48
|
# docs:
|
|
49
49
|
# path: docs-site
|
|
50
50
|
# type: submodule
|
|
51
|
+
# # For polyrepo / meta-repo layouts (independent .git in each subdir),
|
|
52
|
+
# # mark the package with `git: true`. The runtime treats it as an
|
|
53
|
+
# # independent repository for things like git-context display.
|
|
54
|
+
# webapp:
|
|
55
|
+
# path: ./webapp
|
|
56
|
+
# git: true
|
|
51
57
|
|
|
52
58
|
# Default package used when --package is not specified.
|
|
53
59
|
# default_package: frontend
|
|
@@ -39,7 +39,6 @@ export declare const initDeveloperScript: string;
|
|
|
39
39
|
export declare const taskScript: string;
|
|
40
40
|
export declare const getContextScript: string;
|
|
41
41
|
export declare const addSessionScript: string;
|
|
42
|
-
export declare const createBootstrapScript: string;
|
|
43
42
|
export declare const workflowMdTemplate: string;
|
|
44
43
|
export declare const configYamlTemplate: string;
|
|
45
44
|
export declare const gitignoreTemplate: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AAGvE,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAkCnD"}
|
|
@@ -50,7 +50,6 @@ export const initDeveloperScript = readTemplate("scripts/init_developer.py");
|
|
|
50
50
|
export const taskScript = readTemplate("scripts/task.py");
|
|
51
51
|
export const getContextScript = readTemplate("scripts/get_context.py");
|
|
52
52
|
export const addSessionScript = readTemplate("scripts/add_session.py");
|
|
53
|
-
export const createBootstrapScript = readTemplate("scripts/create_bootstrap.py");
|
|
54
53
|
// Configuration files
|
|
55
54
|
export const workflowMdTemplate = readTemplate("workflow.md");
|
|
56
55
|
export const configYamlTemplate = readTemplate("config.yaml");
|
|
@@ -87,7 +86,6 @@ export function getAllScripts() {
|
|
|
87
86
|
scripts.set("task.py", taskScript);
|
|
88
87
|
scripts.set("get_context.py", getContextScript);
|
|
89
88
|
scripts.set("add_session.py", addSessionScript);
|
|
90
|
-
scripts.set("create_bootstrap.py", createBootstrapScript);
|
|
91
89
|
return scripts;
|
|
92
90
|
}
|
|
93
91
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAE/D,0BAA0B;AAC1B,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,4BAA4B,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAC9C,mCAAmC,CACpC,CAAC;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAC/C,oCAAoC,CACrC,CAAC;AACF,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAC7C,kCAAkC,CACnC,CAAC;AAEF,wBAAwB;AACxB,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC,2BAA2B,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -222,8 +222,8 @@ class CLIAdapter:
|
|
|
222
222
|
|
|
223
223
|
Note:
|
|
224
224
|
Cursor: .cursor/commands/trellis-<name>.md
|
|
225
|
-
Codex: .agents/skills
|
|
226
|
-
Kiro: .kiro/skills
|
|
225
|
+
Codex: .agents/skills/trellis-<name>/SKILL.md
|
|
226
|
+
Kiro: .kiro/skills/trellis-<name>/SKILL.md
|
|
227
227
|
Gemini: .gemini/commands/trellis/<name>.toml
|
|
228
228
|
Antigravity: .agent/workflows/<name>.md
|
|
229
229
|
Windsurf: .windsurf/workflows/trellis-<name>.md
|
|
@@ -232,9 +232,11 @@ class CLIAdapter:
|
|
|
232
232
|
if self.platform == "cursor":
|
|
233
233
|
return f".cursor/commands/trellis-{name}.md"
|
|
234
234
|
elif self.platform == "codex":
|
|
235
|
-
|
|
235
|
+
# 0.5.0-beta.0 renamed all skill dirs to add the `trellis-` prefix
|
|
236
|
+
# (see that release's manifest for the 60+ rename entries).
|
|
237
|
+
return f".agents/skills/trellis-{name}/SKILL.md"
|
|
236
238
|
elif self.platform == "kiro":
|
|
237
|
-
return f".kiro/skills/{name}/SKILL.md"
|
|
239
|
+
return f".kiro/skills/trellis-{name}/SKILL.md"
|
|
238
240
|
elif self.platform == "gemini":
|
|
239
241
|
return f".gemini/commands/trellis/{name}.toml"
|
|
240
242
|
elif self.platform == "antigravity":
|
|
@@ -601,7 +603,6 @@ _ALL_PLATFORM_CONFIG_DIRS = (
|
|
|
601
603
|
".cursor",
|
|
602
604
|
".iflow",
|
|
603
605
|
".opencode",
|
|
604
|
-
".agents",
|
|
605
606
|
".codex",
|
|
606
607
|
".kilocode",
|
|
607
608
|
".kiro",
|
|
@@ -613,7 +614,11 @@ _ALL_PLATFORM_CONFIG_DIRS = (
|
|
|
613
614
|
".github/copilot",
|
|
614
615
|
".factory",
|
|
615
616
|
)
|
|
616
|
-
"""
|
|
617
|
+
"""Platform-specific config directory names used by detect_platform exclusion
|
|
618
|
+
checks. `.agents/skills/` is NOT listed here: it is a shared cross-platform
|
|
619
|
+
layer (written by Codex, also consumed by Amp/Cline/Warp/etc. via the
|
|
620
|
+
agentskills.io standard), not a single-platform signal. Its presence must not
|
|
621
|
+
block detection of Kiro, Antigravity, Windsurf, or other platforms."""
|
|
617
622
|
|
|
618
623
|
|
|
619
624
|
def _has_other_platform_dir(project_root: Path, exclude: set[str]) -> bool:
|
|
@@ -737,6 +742,24 @@ def detect_platform(project_root: Path) -> Platform:
|
|
|
737
742
|
if (project_root / ".factory").is_dir():
|
|
738
743
|
return "droid"
|
|
739
744
|
|
|
745
|
+
# Fallback: checkout only has the Codex shared-skills layer
|
|
746
|
+
# (.agents/skills/trellis-* dirs) and no explicit platform config dir.
|
|
747
|
+
# Happens on fresh clones where .codex/ is gitignored/absent but the
|
|
748
|
+
# shared skills were committed to git. Must guard against the case
|
|
749
|
+
# where .claude/ or any other platform dir also exists — .agents/skills/
|
|
750
|
+
# can legitimately coexist with any platform as a shared consumption
|
|
751
|
+
# layer for Amp/Cline/Warp/etc.
|
|
752
|
+
agents_skills = project_root / ".agents" / "skills"
|
|
753
|
+
if agents_skills.is_dir() and not _has_other_platform_dir(
|
|
754
|
+
project_root, set()
|
|
755
|
+
):
|
|
756
|
+
try:
|
|
757
|
+
for entry in agents_skills.iterdir():
|
|
758
|
+
if entry.is_dir() and entry.name.startswith("trellis-"):
|
|
759
|
+
return "codex"
|
|
760
|
+
except OSError:
|
|
761
|
+
pass
|
|
762
|
+
|
|
740
763
|
return "claude"
|
|
741
764
|
|
|
742
765
|
|
|
@@ -16,7 +16,7 @@ import json
|
|
|
16
16
|
import sys
|
|
17
17
|
from pathlib import Path
|
|
18
18
|
|
|
19
|
-
from .cli_adapter import get_cli_adapter_auto
|
|
19
|
+
from .cli_adapter import get_cli_adapter, get_cli_adapter_auto
|
|
20
20
|
from .config import (
|
|
21
21
|
get_packages,
|
|
22
22
|
is_monorepo,
|
|
@@ -61,9 +61,23 @@ def get_implement_frontend(package: str | None = None) -> list[dict]:
|
|
|
61
61
|
]
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
def get_check_context(repo_root: Path) -> list[dict]:
|
|
65
|
-
"""Get check context entries.
|
|
66
|
-
|
|
64
|
+
def get_check_context(repo_root: Path, platform: str | None = None) -> list[dict]:
|
|
65
|
+
"""Get check context entries.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
repo_root: Project root directory.
|
|
69
|
+
platform: Explicit platform override (e.g. "codex", "kiro"). When
|
|
70
|
+
provided, skip filesystem auto-detection and use this platform
|
|
71
|
+
directly. Caller (e.g. `cmd_init_context`) passes the
|
|
72
|
+
`--platform` CLI argument, which itself is substituted from
|
|
73
|
+
`{{CLI_FLAG}}` in skill/command templates rendered per platform.
|
|
74
|
+
Falls back to `get_cli_adapter_auto` when omitted (CLI-direct
|
|
75
|
+
users).
|
|
76
|
+
"""
|
|
77
|
+
if platform:
|
|
78
|
+
adapter = get_cli_adapter(platform)
|
|
79
|
+
else:
|
|
80
|
+
adapter = get_cli_adapter_auto(repo_root)
|
|
67
81
|
|
|
68
82
|
return [
|
|
69
83
|
{"file": adapter.get_trellis_command_path("finish-work"), "reason": "Finish work checklist"},
|
|
@@ -156,8 +170,9 @@ def cmd_init_context(args: argparse.Namespace) -> int:
|
|
|
156
170
|
print(f" {colored('✓', Colors.GREEN)} {len(implement_entries)} entries")
|
|
157
171
|
|
|
158
172
|
# check.jsonl
|
|
173
|
+
platform: str | None = getattr(args, "platform", None)
|
|
159
174
|
print(colored("Creating check.jsonl...", Colors.CYAN))
|
|
160
|
-
check_entries = get_check_context(repo_root)
|
|
175
|
+
check_entries = get_check_context(repo_root, platform=platform)
|
|
161
176
|
check_file = target_dir / "check.jsonl"
|
|
162
177
|
_write_jsonl(check_file, check_entries)
|
|
163
178
|
print(f" {colored('✓', Colors.GREEN)} {len(check_entries)} entries")
|
|
@@ -319,6 +319,13 @@ def main() -> int:
|
|
|
319
319
|
p_init.add_argument("dir", help="Task directory")
|
|
320
320
|
p_init.add_argument("type", help="Dev type: backend|frontend|fullstack|test|docs")
|
|
321
321
|
p_init.add_argument("--package", help="Package name for monorepo projects")
|
|
322
|
+
p_init.add_argument(
|
|
323
|
+
"--platform",
|
|
324
|
+
help="Explicit platform (claude|codex|kiro|cursor|...). "
|
|
325
|
+
"Overrides auto-detection. Skills/commands pass this via "
|
|
326
|
+
"{{CLI_FLAG}} substitution so jsonl paths match the invoking "
|
|
327
|
+
"platform instead of filesystem guesswork.",
|
|
328
|
+
)
|
|
322
329
|
|
|
323
330
|
# add-context
|
|
324
331
|
p_add = subparsers.add_parser("add-context", help="Add context entry")
|
|
@@ -194,7 +194,7 @@ Research can happen at any time during requirement exploration. It isn't limited
|
|
|
194
194
|
|
|
195
195
|
Spawn the research sub-agent:
|
|
196
196
|
|
|
197
|
-
- **Agent type**: `research`
|
|
197
|
+
- **Agent type**: `trellis-research`
|
|
198
198
|
- **Task description**: Research <specific question>
|
|
199
199
|
- **Key requirement**: Research output MUST be persisted to `{TASK_DIR}/research/`
|
|
200
200
|
|
|
@@ -222,10 +222,13 @@ Brainstorm and research can interleave freely — pause to research a technical
|
|
|
222
222
|
Once research output is solid, initialize the agent context files:
|
|
223
223
|
|
|
224
224
|
```bash
|
|
225
|
-
python3 ./.trellis/scripts/task.py init-context "$TASK_DIR" <type>
|
|
225
|
+
python3 ./.trellis/scripts/task.py init-context "$TASK_DIR" <type> --platform <platform>
|
|
226
226
|
# type: backend | frontend | fullstack
|
|
227
|
+
# platform: claude | codex | cursor | kiro | gemini | opencode | qoder | codebuddy | copilot | droid
|
|
227
228
|
```
|
|
228
229
|
|
|
230
|
+
`--platform` is auto-filled by per-platform skills/commands (via `{{CLI_FLAG}}` substitution). Specify it explicitly only for CLI-direct invocations; otherwise the script falls back to filesystem auto-detection, which can misfire on multi-platform setups.
|
|
231
|
+
|
|
229
232
|
Skip when: `implement.jsonl` already exists.
|
|
230
233
|
|
|
231
234
|
Append any extra spec files or code patterns you find `[optional · repeatable]`:
|
|
@@ -272,7 +275,7 @@ Goal: turn the prd into code that passes quality checks.
|
|
|
272
275
|
|
|
273
276
|
Spawn the implement sub-agent:
|
|
274
277
|
|
|
275
|
-
- **Agent type**: `implement`
|
|
278
|
+
- **Agent type**: `trellis-implement`
|
|
276
279
|
- **Task description**: Implement the requirements per prd.md, consulting materials under `{TASK_DIR}/research/`; finish by running project lint and type-check
|
|
277
280
|
|
|
278
281
|
The platform hook auto-handles:
|
|
@@ -297,7 +300,7 @@ The platform hook auto-handles:
|
|
|
297
300
|
|
|
298
301
|
Spawn the check sub-agent:
|
|
299
302
|
|
|
300
|
-
- **Agent type**: `check`
|
|
303
|
+
- **Agent type**: `trellis-check`
|
|
301
304
|
- **Task description**: Review all code changes against spec and prd; fix any findings directly; ensure lint and type-check pass
|
|
302
305
|
|
|
303
306
|
The check agent's job:
|
|
@@ -376,16 +379,21 @@ After the above, remind the user they can run `/finish-work` to wrap up (archive
|
|
|
376
379
|
a status has no tag block. -->
|
|
377
380
|
|
|
378
381
|
[workflow-state:no_task]
|
|
379
|
-
No active task.
|
|
382
|
+
No active task.
|
|
383
|
+
Trigger words in the user message that REQUIRE creating a task (non-negotiable, do NOT self-exempt): 重构 / 抽成 / 独立 / 分发 / 拆出来 / 搞一个 / 做成 / 接入 / 集成 / refactor / rewrite / extract / productize / publish / build X / design Y.
|
|
384
|
+
Task is NOT required ONLY if ALL three hold: (a) zero file writes this turn, (b) answer fits in one reply with no multi-round plan, (c) no research beyond reading 1-2 repo files.
|
|
385
|
+
When in doubt: create task. Over-tasking is cheap; under-tasking leaks plans and research into main context.
|
|
386
|
+
Flow: load `trellis-brainstorm` skill → it creates the task via `python3 ./.trellis/scripts/task.py create` and drives requirements Q&A. For research-heavy work (tool comparison, docs, cross-platform survey), spawn `trellis-research` sub-agents via Task tool — NEVER do 3+ inline WebFetch/WebSearch/`gh api` calls in the main conversation.
|
|
380
387
|
[/workflow-state:no_task]
|
|
381
388
|
|
|
382
389
|
[workflow-state:planning]
|
|
383
390
|
Complete prd.md via trellis-brainstorm skill; then run task.py start.
|
|
391
|
+
Research belongs in `{task_dir}/research/*.md`, written by `trellis-research` sub-agents. Do NOT inline WebFetch/WebSearch in main session — PRD only links to research files.
|
|
384
392
|
[/workflow-state:planning]
|
|
385
393
|
|
|
386
394
|
[workflow-state:in_progress]
|
|
387
|
-
Flow: implement → check → update-spec → finish
|
|
388
|
-
Check conversation history + git status to determine current step; do NOT skip check.
|
|
395
|
+
Flow: trellis-implement → trellis-check → trellis-update-spec → finish
|
|
396
|
+
Check conversation history + git status to determine current step; do NOT skip trellis-check.
|
|
389
397
|
[/workflow-state:in_progress]
|
|
390
398
|
|
|
391
399
|
[workflow-state:completed]
|
package/dist/types/ai-tools.d.ts
CHANGED
|
@@ -31,6 +31,15 @@ export interface TemplateContext {
|
|
|
31
31
|
agentCapable: boolean;
|
|
32
32
|
/** Platform has hook system (SessionStart, PreToolUse) */
|
|
33
33
|
hasHooks: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* CLI flag value for this platform (e.g. "claude", "codex", "kiro").
|
|
36
|
+
* Substituted into template commands via {{CLI_FLAG}} so rendered skill /
|
|
37
|
+
* command files pass `--platform <flag>` to scripts like
|
|
38
|
+
* `task.py init-context`, removing the need to re-detect at runtime.
|
|
39
|
+
* Duplicates the top-level `AIToolConfig.cliFlag` for convenience — the
|
|
40
|
+
* invariant is maintained in `AI_TOOLS` config blocks.
|
|
41
|
+
*/
|
|
42
|
+
cliFlag: CliFlag;
|
|
34
43
|
}
|
|
35
44
|
/**
|
|
36
45
|
* Configuration for an AI tool
|
|
@@ -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,UAAU,GACV,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,UAAU,GACV,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,UAAU,GACV,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,YAAY,EAAE,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;IACpD,8DAA8D;IAC9D,UAAU,EACN,4BAA4B,GAC5B,4BAA4B,GAC5B,4BAA4B,CAAC;IACjC,uCAAuC;IACvC,eAAe,EAAE,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACvE,kEAAkE;IAClE,YAAY,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,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,UAAU,GACV,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,UAAU,GACV,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,UAAU,GACV,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,YAAY,EAAE,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;IACpD,8DAA8D;IAC9D,UAAU,EACN,4BAA4B,GAC5B,4BAA4B,GAC5B,4BAA4B,CAAC;IACjC,uCAAuC;IACvC,eAAe,EAAE,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACvE,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,CA2NjD,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
|
@@ -28,6 +28,7 @@ export const AI_TOOLS = {
|
|
|
28
28
|
userActionLabel: "Slash commands",
|
|
29
29
|
agentCapable: true,
|
|
30
30
|
hasHooks: true,
|
|
31
|
+
cliFlag: "claude",
|
|
31
32
|
},
|
|
32
33
|
},
|
|
33
34
|
cursor: {
|
|
@@ -43,6 +44,7 @@ export const AI_TOOLS = {
|
|
|
43
44
|
userActionLabel: "Slash commands",
|
|
44
45
|
agentCapable: true,
|
|
45
46
|
hasHooks: true,
|
|
47
|
+
cliFlag: "cursor",
|
|
46
48
|
},
|
|
47
49
|
},
|
|
48
50
|
opencode: {
|
|
@@ -58,6 +60,7 @@ export const AI_TOOLS = {
|
|
|
58
60
|
userActionLabel: "Slash commands",
|
|
59
61
|
agentCapable: true,
|
|
60
62
|
hasHooks: false,
|
|
63
|
+
cliFlag: "opencode",
|
|
61
64
|
},
|
|
62
65
|
},
|
|
63
66
|
codex: {
|
|
@@ -74,6 +77,7 @@ export const AI_TOOLS = {
|
|
|
74
77
|
userActionLabel: "Skills",
|
|
75
78
|
agentCapable: true,
|
|
76
79
|
hasHooks: false,
|
|
80
|
+
cliFlag: "codex",
|
|
77
81
|
},
|
|
78
82
|
},
|
|
79
83
|
kilo: {
|
|
@@ -89,6 +93,7 @@ export const AI_TOOLS = {
|
|
|
89
93
|
userActionLabel: "Workflows",
|
|
90
94
|
agentCapable: false,
|
|
91
95
|
hasHooks: false,
|
|
96
|
+
cliFlag: "kilo",
|
|
92
97
|
},
|
|
93
98
|
},
|
|
94
99
|
kiro: {
|
|
@@ -105,6 +110,7 @@ export const AI_TOOLS = {
|
|
|
105
110
|
userActionLabel: "Skills",
|
|
106
111
|
agentCapable: true,
|
|
107
112
|
hasHooks: true,
|
|
113
|
+
cliFlag: "kiro",
|
|
108
114
|
},
|
|
109
115
|
},
|
|
110
116
|
gemini: {
|
|
@@ -120,6 +126,7 @@ export const AI_TOOLS = {
|
|
|
120
126
|
userActionLabel: "Slash commands",
|
|
121
127
|
agentCapable: true,
|
|
122
128
|
hasHooks: true,
|
|
129
|
+
cliFlag: "gemini",
|
|
123
130
|
},
|
|
124
131
|
},
|
|
125
132
|
antigravity: {
|
|
@@ -136,6 +143,7 @@ export const AI_TOOLS = {
|
|
|
136
143
|
userActionLabel: "Workflows",
|
|
137
144
|
agentCapable: false,
|
|
138
145
|
hasHooks: false,
|
|
146
|
+
cliFlag: "antigravity",
|
|
139
147
|
},
|
|
140
148
|
},
|
|
141
149
|
windsurf: {
|
|
@@ -152,6 +160,7 @@ export const AI_TOOLS = {
|
|
|
152
160
|
userActionLabel: "Workflows",
|
|
153
161
|
agentCapable: false,
|
|
154
162
|
hasHooks: false,
|
|
163
|
+
cliFlag: "windsurf",
|
|
155
164
|
},
|
|
156
165
|
},
|
|
157
166
|
qoder: {
|
|
@@ -167,6 +176,7 @@ export const AI_TOOLS = {
|
|
|
167
176
|
userActionLabel: "Skills",
|
|
168
177
|
agentCapable: true,
|
|
169
178
|
hasHooks: true,
|
|
179
|
+
cliFlag: "qoder",
|
|
170
180
|
},
|
|
171
181
|
},
|
|
172
182
|
codebuddy: {
|
|
@@ -182,6 +192,7 @@ export const AI_TOOLS = {
|
|
|
182
192
|
userActionLabel: "Slash commands",
|
|
183
193
|
agentCapable: true,
|
|
184
194
|
hasHooks: true,
|
|
195
|
+
cliFlag: "codebuddy",
|
|
185
196
|
},
|
|
186
197
|
},
|
|
187
198
|
copilot: {
|
|
@@ -203,6 +214,7 @@ export const AI_TOOLS = {
|
|
|
203
214
|
userActionLabel: "Prompts",
|
|
204
215
|
agentCapable: true,
|
|
205
216
|
hasHooks: true,
|
|
217
|
+
cliFlag: "copilot",
|
|
206
218
|
},
|
|
207
219
|
},
|
|
208
220
|
droid: {
|
|
@@ -218,6 +230,7 @@ export const AI_TOOLS = {
|
|
|
218
230
|
userActionLabel: "Slash commands",
|
|
219
231
|
agentCapable: true,
|
|
220
232
|
hasHooks: true,
|
|
233
|
+
cliFlag: "droid",
|
|
221
234
|
},
|
|
222
235
|
},
|
|
223
236
|
};
|
|
@@ -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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"}
|
|
@@ -25,6 +25,8 @@ export interface DetectedPackage {
|
|
|
25
25
|
type: ProjectType;
|
|
26
26
|
/** Whether this package is a git submodule */
|
|
27
27
|
isSubmodule: boolean;
|
|
28
|
+
/** Whether this package has its own .git (independent repo, e.g. polyrepo sibling) */
|
|
29
|
+
isGitRepo: boolean;
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
32
|
* Sanitize a package name for use as a directory name.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-detector.d.ts","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAiK3E;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAqB1D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAWnE;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"project-detector.d.ts","sourceRoot":"","sources":["../../src/utils/project-detector.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAiK3E;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAqB1D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAWnE;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,WAAW,CAAC;IAClB,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,sFAAsF;IACtF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAsYD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,IAAI,CAyHpE"}
|