@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qoder.js","sourceRoot":"","sources":["../../src/configurators/qoder.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"qoder.js","sourceRoot":"","sources":["../../src/configurators/qoder.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEhF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtD,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,KAAK,CAAC,EACpC,0BAA0B,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAC9C,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,WAAW,CACf,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAC/B,6BAA6B,CAAC,YAAY,EAAE,CAAC,CAC9C,CAAC;IACF,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE;QACrD,OAAO,EAAE,CAAC,4BAA4B,CAAC;KACxC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC1C,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CACtC,CAAC;AACJ,CAAC"}
|
|
@@ -11,6 +11,8 @@ export declare function resolvePlaceholders(content: string, context?: TemplateC
|
|
|
11
11
|
* Used by platforms that use SKILL.md (Codex, Kiro, Qoder, etc.).
|
|
12
12
|
*/
|
|
13
13
|
export declare function wrapWithSkillFrontmatter(name: string, content: string): string;
|
|
14
|
+
/** Wrap resolved command content with YAML frontmatter (name + description). */
|
|
15
|
+
export declare function wrapWithCommandFrontmatter(name: string, content: string): string;
|
|
14
16
|
/** A resolved template ready to be written to disk. */
|
|
15
17
|
export interface ResolvedTemplate {
|
|
16
18
|
name: string;
|
|
@@ -57,7 +59,7 @@ export declare function buildPullBasedPrelude(agentType: SubAgentType): string;
|
|
|
57
59
|
export declare function injectPullBasedPreludeMarkdown(content: string, agentType: SubAgentType): string;
|
|
58
60
|
/** Insert prelude into a TOML agent (codex `developer_instructions`). */
|
|
59
61
|
export declare function injectPullBasedPreludeToml(content: string, agentType: SubAgentType): string;
|
|
60
|
-
/** Best-effort detect agent type from filename ("implement.md" → "implement").
|
|
62
|
+
/** Best-effort detect agent type from filename ("trellis-implement.md" → "implement").
|
|
61
63
|
* Returns null for research and unknown names — they skip the prelude.
|
|
62
64
|
*/
|
|
63
65
|
export declare function detectSubAgentType(name: string): SubAgentType | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/configurators/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/configurators/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAmD5D,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,MAAM,CAkCR;AA0BD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,CAUR;AAaD,gFAAgF;AAChF,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,CASR;AAcD,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAoBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAY3E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAKxE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAQtE;AAMD,sDAAsD;AACtD,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,yCAAyC;AACzC,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAC3C,GAAG,SAAQ,GACV,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,qDAAqD;AACrD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAC5C,OAAO,CAAC,IAAI,CAAC,CASf;AAYD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjD,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,CAmBrE;AAED,gFAAgF;AAChF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,YAAY,GACtB,MAAM,CAuBR;AAED,yEAAyE;AACzE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,YAAY,GACtB,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAMpE;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,YAAY,EAAE,GAC9B,YAAY,EAAE,CAShB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,YAAY,EAAE,GAC9B,YAAY,EAAE,CAShB"}
|
|
@@ -21,6 +21,7 @@ function getPythonCommand() {
|
|
|
21
21
|
* - {{CMD_REF:name}} → platform-specific command reference
|
|
22
22
|
* - {{EXECUTOR_AI}} → AI executor description
|
|
23
23
|
* - {{USER_ACTION_LABEL}} → user action label
|
|
24
|
+
* - {{CLI_FLAG}} → platform cli flag (e.g. "claude", "codex")
|
|
24
25
|
* - {{#FLAG}}...{{/FLAG}} → conditional include (when FLAG is true)
|
|
25
26
|
* - {{^FLAG}}...{{/FLAG}} → negated conditional (when FLAG is false)
|
|
26
27
|
*
|
|
@@ -31,6 +32,7 @@ const RE_PYTHON_CMD = /\{\{PYTHON_CMD\}\}/g;
|
|
|
31
32
|
const RE_CMD_REF = /\{\{CMD_REF:([\w][\w-]*)\}\}/g;
|
|
32
33
|
const RE_EXECUTOR_AI = /\{\{EXECUTOR_AI\}\}/g;
|
|
33
34
|
const RE_USER_ACTION_LABEL = /\{\{USER_ACTION_LABEL\}\}/g;
|
|
35
|
+
const RE_CLI_FLAG = /\{\{CLI_FLAG\}\}/g;
|
|
34
36
|
const RE_BLANK_LINES = /\n{3,}/g;
|
|
35
37
|
const CONDITIONAL_FLAGS = ["AGENT_CAPABLE", "HAS_HOOKS"];
|
|
36
38
|
const CONDITIONAL_REGEXES = Object.fromEntries(CONDITIONAL_FLAGS.map((flag) => [
|
|
@@ -48,6 +50,7 @@ export function resolvePlaceholders(content, context) {
|
|
|
48
50
|
result = result.replace(RE_CMD_REF, (_match, name) => `${context.cmdRefPrefix}${name}`);
|
|
49
51
|
result = result.replace(RE_EXECUTOR_AI, context.executorAI);
|
|
50
52
|
result = result.replace(RE_USER_ACTION_LABEL, context.userActionLabel);
|
|
53
|
+
result = result.replace(RE_CLI_FLAG, context.cliFlag);
|
|
51
54
|
// Conditional blocks
|
|
52
55
|
const flagValues = {
|
|
53
56
|
AGENT_CAPABLE: context.agentCapable,
|
|
@@ -93,6 +96,24 @@ export function wrapWithSkillFrontmatter(name, content) {
|
|
|
93
96
|
}
|
|
94
97
|
return `---\nname: ${name}\ndescription: "${description}"\n---\n\n${content}`;
|
|
95
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* One-line blurbs shown in a `/` command palette — kept separate from
|
|
101
|
+
* SKILL_DESCRIPTIONS, which is long prose aimed at the skill matcher.
|
|
102
|
+
*/
|
|
103
|
+
const COMMAND_DESCRIPTIONS = {
|
|
104
|
+
start: "Initialize a Trellis development session.",
|
|
105
|
+
continue: "Resume work on the current task at the correct phase.",
|
|
106
|
+
"finish-work": "Wrap up the current session: quality gate, commit reminder, archive, journal.",
|
|
107
|
+
};
|
|
108
|
+
/** Wrap resolved command content with YAML frontmatter (name + description). */
|
|
109
|
+
export function wrapWithCommandFrontmatter(name, content) {
|
|
110
|
+
const baseName = name.replace(/^trellis-/, "");
|
|
111
|
+
const description = COMMAND_DESCRIPTIONS[baseName];
|
|
112
|
+
if (!description) {
|
|
113
|
+
throw new Error(`Missing command description for "${baseName}". Add it to COMMAND_DESCRIPTIONS in shared.ts.`);
|
|
114
|
+
}
|
|
115
|
+
return `---\nname: ${name}\ndescription: ${description}\n---\n\n${content}`;
|
|
116
|
+
}
|
|
96
117
|
// ---------------------------------------------------------------------------
|
|
97
118
|
// Shared configurator helpers
|
|
98
119
|
// ---------------------------------------------------------------------------
|
|
@@ -184,6 +205,8 @@ export async function writeSharedHooks(hooksDir, options = {}) {
|
|
|
184
205
|
}
|
|
185
206
|
/** Build the standard "load Trellis context first" prelude block. */
|
|
186
207
|
export function buildPullBasedPrelude(agentType) {
|
|
208
|
+
// JSONL filenames stay as implement.jsonl / check.jsonl — they are internal
|
|
209
|
+
// context buckets keyed by role (not by platform-visible agent name).
|
|
187
210
|
const jsonl = agentType === "check" ? "check.jsonl" : "implement.jsonl";
|
|
188
211
|
return `## Required: Load Trellis Context First
|
|
189
212
|
|
|
@@ -234,13 +257,13 @@ export function injectPullBasedPreludeToml(content, agentType) {
|
|
|
234
257
|
}
|
|
235
258
|
return content.replace(re, `$1$2${prelude}`);
|
|
236
259
|
}
|
|
237
|
-
/** Best-effort detect agent type from filename ("implement.md" → "implement").
|
|
260
|
+
/** Best-effort detect agent type from filename ("trellis-implement.md" → "implement").
|
|
238
261
|
* Returns null for research and unknown names — they skip the prelude.
|
|
239
262
|
*/
|
|
240
263
|
export function detectSubAgentType(name) {
|
|
241
264
|
const base = name.replace(/\.(md|toml|prompt\.md)$/, "");
|
|
242
|
-
if (base === "implement" || base === "check") {
|
|
243
|
-
return base;
|
|
265
|
+
if (base === "trellis-implement" || base === "trellis-check") {
|
|
266
|
+
return base === "trellis-implement" ? "implement" : "check";
|
|
244
267
|
}
|
|
245
268
|
return null;
|
|
246
269
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/configurators/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/configurators/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
"breaking": true,
|
|
5
5
|
"recommendMigrate": true,
|
|
6
6
|
"changelog": "**Skill-first template architecture.** Commands and skills now live under `packages/cli/src/templates/common/` as a single source of truth (3 commands + 5 skills). All 13 platforms resolve from common/ + per-platform adapters. Eliminates the prior N-copies-of-same-content drift that caused stale commands to linger on some platforms but not others.\n\n## Hooks + agents for 7 new platforms\n\nQoder, CodeBuddy, Factory Droid, Cursor, Gemini CLI, Kiro, and GitHub Copilot go from commands-only to fully agent-capable. Each ships:\n- Sub-agent definitions (implement / check / research) in the platform's native format (Claude-like Markdown, Kiro JSON, Gemini settings.json, Copilot agent.md, Droid droids/, CodeBuddy nested commands)\n- Hook configuration wired via `shared-hooks/` Python scripts (session-start, inject-subagent-context, statusline) — single implementation, cross-platform output adapters\n- Claude Code hooks migrated from its own 1,435-line set to the shared-hooks implementation (dead fallback code removed — `AGENT_DEBUG`, `spec.jsonl`/`research.jsonl` reads, hardcoded `check-cross-layer.md` reference)\n\n## Sub-agent context injection: class-1 hook vs class-2 pull-based\n\nCodex, Copilot, Gemini, and Qoder (class-2) can't reliably receive hook-modified sub-agent prompts (platform bugs or architectural limits: Codex PreToolUse only fires for Bash; Copilot #2392/#2540; Gemini #18128; Qoder has no Task tool). These 4 platforms now use a **pull-based prelude**: sub-agent definitions include an up-front instruction block that makes the sub-agent Read `.current-task` + `prd.md` + `implement.jsonl`/`check.jsonl` themselves on first turn. Class-1 platforms (Claude / Cursor / OpenCode / Kiro / CodeBuddy / Droid) continue with hook-based push injection. Both paths implemented in shared infrastructure so future platforms only pick one.\n\n## Workflow enforcement v2: per-turn breadcrumb hook\n\nNew `inject-workflow-state.py` shared hook fires on every user prompt (UserPromptSubmit equivalent on 8 platforms; `chat.message` on OpenCode Bun plugin). Injects a <200-byte `<workflow-state>` block nudging AI toward the next workflow step based on current `task.json.status`. Tag-block content is pulled from `workflow.md` `[workflow-state:STATUS]` blocks — users who fork the workflow edit one markdown file, not Python. Covers four states: `no_task` / `planning` / `in_progress` / `completed`; recognizes hyphenated custom statuses (`in-review`, etc.). Three-tier fallback (workflow.md missing → partial tag → unknown status) so the hook never breaks a conversation. Kiro downgraded — no per-turn main-session hook available upstream.\n\n## SessionStart payload restructure\n\nThe SessionStart `<workflow>` block grew from 2.7 KB (TOC + Phase Index) to 9.5 KB by inlining Phase 1/2/3 step bodies — AI now has step-level how-to up front instead of lazy-loading via `get_context.py --mode phase --step X.Y`. Funded by shrinking `<guidelines>` from 10.9 KB to 4.6 KB: the cross-package `guides/index.md` stays inlined, but other `spec/<pkg>/<layer>/index.md` files are listed as paths only (sub-agents get their specific specs via jsonl injection, main agent doesn't need index content in context). Total session-start payload: 16.7 KB (under Claude Code's ~20 KB truncate threshold). `workflow.md` itself slimmed 17 KB → 14 KB: English-only (was bilingual), removed `What is Trellis` intro + File Structure tree + redundant Best Practices section, task.py command table expanded from 5 → 16 subcommands per PR #169's structure.\n\n## Legacy cleanup (126-entry safe-file-delete migration)\n\nThis release removes four categories of primitives whose replacement is now the default:\n\n- **iFlow platform** — CLI unmaintained; entire `.iflow/` tree + template source removed\n- **Multi-agent pipeline** (`.trellis/scripts/multi_agent/` + `worktree.yaml`) — all major CLIs now ship their own worktree support; Trellis doesn't need to reimplement\n- **Ralph Loop hook** (`ralph-loop.py`) — SubagentStop + exit-code-2 enforcement not portable across platforms; check agent's self-fix loop is sufficient\n- **Six commands + three sub-agents** — `parallel` (superseded by native worktrees), `onboard`/`create-command`/`integrate-skill` (low usage), `check-cross-layer` (merged into `check`), `record-session` (subsumed by `/finish-work`); `dispatch`/`debug`/`plan` agents (replaced by skill routing)\n\nAll cleanup is hash-verified: if you modified any of these files locally they stay put with a warning; only pristine Trellis-written copies get removed. 126 safe-file-delete entries cover the full surface across all 13 platforms.\n\n## Other improvements\n\n- `task.py create` stops writing legacy `current_phase` / `next_action` fields (FP-analysis outcome: workflow.md's Phase N.M is documentation layering, not runtime state; `task.json.status` is the sole task-level state)\n- `inject-subagent-context.py` `update_current_phase()` function deleted (was re-writing legacy `current_phase` on every Task spawn, undoing the deprecation)\n- Codex hooks integration: `configureCodex` now auto-writes shared-hooks (was skipping them); stderr warning on `trellis init --codex` about `features.codex_hooks = true` requirement in user's `~/.codex/config.toml`\n- `get_context.py --mode phase` (no `--step`) returns Phase Index + Phase 1/2/3 bodies (was Phase Index only) — agent-less platforms running `/start` manually get the same content as hook-based platforms\n- Workflow.md `[workflow-state:STATUS]` tag convention: supports hyphens in custom statuses (`in-review`, `blocked-by-team`); unknown statuses emit a generic fallback instead of silent-exit\n- Hook-path CWD robustness (partial): `inject-workflow-state.py` walks up from CWD to find `.trellis/` — fixes subdirectory / submodule CWD drift for this hook. Full coverage across all hooks is a post-beta task.\n\n## Deferred to post-beta\n\n- Kiro `agentSpawn` hook output-format validation in real environment\n- Cursor / CodeBuddy / Droid sub-agent hook injection real-env testing\n- Full hook-path CWD-robustness across all platforms (Windows cmd/PowerShell)\n- Parent-child Trellis config (issue #172 — submodule inheriting root spec)\n\n## Spec docs updated\n\n- `platform-integration.md` — new sections: Workflow State Injection (per-turn breadcrumb), Subagent Context Injection: Hook-based vs Pull-based, Guidelines: Paths-only vs Inline, Per-Turn Hook design principle (no silent-exit on \"nothing to say\")\n- `quality-guidelines.md` — new section: Schema Deprecation: Audit ALL Writers, Not Just the Creator (based on a Codex cross-review finding where `cmd_create` dropped a field but a hook kept re-writing it)\n- `workflow.md` — full English translation; slim structure; task.py 16-subcommand reference table\n- `directory-structure.md` + `script-conventions.md` — multi-agent references removed",
|
|
7
|
+
"migrationGuide": "## 0.4.x → 0.5.x: What This Release Actually Changes\n\n0.5.0-beta.0 is a **breaking** release. Pre-existing 0.4.x projects need `trellis update --migrate` to sync. The update runs **206 migration entries** (renames + hash-verified safe-file-deletes); the patch is non-destructive but large, so expect a handful of confirm prompts.\n\n### 1. Skills got renamed: `skills/<name>/` → `skills/trellis-<name>/`\n\nAll Trellis skill directories gained a `trellis-` prefix. 60+ rename migrations cover every platform (`.claude/`, `.cursor/`, `.agents/`, `.kiro/`, `.qoder/`, etc.).\n\n- **Unmodified skills**: renamed silently.\n- **Skills you customized**: confirm prompt. Pressing Enter (default = backup-rename) is always safe — your edits land at the new `trellis-<name>/` path intact.\n\n### 2. Six commands + three sub-agents retired\n\n| Old (removed) | Replacement |\n|---|---|\n| `/record-session` | merged into `/trellis:finish-work` Step 3 |\n| `/check-cross-layer` | merged into `/trellis:check` |\n| `/parallel` | use your CLI's native worktree/parallel support |\n| `/onboard` | superseded by auto-generated onboarding tasks |\n| `/create-command` | low-usage, unshipped |\n| `/integrate-skill` | low-usage, unshipped |\n| `dispatch` / `debug` / `plan` sub-agents | replaced by skill routing (`trellis-brainstorm`, `trellis-check`, `trellis-break-loop`) |\n\nIf any of these you relied on: replace the invocation with the right column. `/record-session` → `/trellis:finish-work` is the most common fix.\n\n### 3. Multi-Agent Pipeline gone\n\n`.trellis/scripts/multi_agent/`, `worktree.yaml`, and the Ralph Loop hook have been removed (138-entry safe-file-delete). Native worktree support in Claude / Cursor / etc. covers this space now. If you built automation around these, you'll need to port it to the platform's native primitives.\n\n### 4. iFlow dropped\n\nThe `.iflow/` platform adapter was unmaintained upstream and has been removed. Existing `.iflow/` installs keep working on 0.4.x; switch to a supported platform (`--claude` / `--cursor` / `--codex` / etc.) to stay on 0.5.x.\n\n### 5. task.py schema cleanup\n\n`task.py create` stops writing legacy `current_phase` / `next_action` fields. Existing task.json files keep working (Python readers treat missing fields as null). New tasks from 0.5.x produce the canonical 24-field shape.\n\n### 6. New runtime: per-turn workflow breadcrumb + sub-agent context injection\n\nNo user action needed — these are internal flow improvements. But if you hand-edit `.claude/settings.json` / `.codex/hooks.json` / etc., `trellis update` will want to overwrite the hooks block; your custom hooks land on the `Modified by you` prompt so you can review the merge.\n\n## How to upgrade\n\n```bash\ntrellis update --migrate\n```\n\n- `--migrate` is REQUIRED for breaking releases — without it, `trellis update` exits 1 telling you to add it.\n- Hash-verified migrations mean your local customizations stay; unmodified Trellis templates get updated silently.\n- The confirm prompts inline a `reason` explaining each prompt; Enter (default) is safe.\n- Codex users: enable `features.codex_hooks = true` in `~/.codex/config.toml` to activate SessionStart + UserPromptSubmit hook injection (feature-flagged by Codex itself).",
|
|
8
|
+
"aiInstructions": "When helping a user migrate from 0.4.x to 0.5.x:\n\n1. **Check for retired commands first**. Grep the user's codebase / shell history / aliases for `/record-session`, `/check-cross-layer`, `/parallel`, `/onboard`, `/create-command`, `/integrate-skill`. For each match, help them replace per the table in the guide — most common case is `/record-session` → `/trellis:finish-work`.\n\n2. **Run `trellis update --migrate`**. Walk them through the prompts if any fire — 0.4 didn't hash-track certain SKILL.md files, so pristine copies may show as modified. The per-prompt `reason` explains this; pressing Enter (backup-rename) is always safe.\n\n3. **Don't try to preserve Multi-Agent Pipeline state**. If the user has `.trellis/scripts/multi_agent/`, `worktree.yaml`, or Ralph Loop hooks in local edits, explicitly tell them the feature has no replacement in 0.5 beyond the platform's native worktree support. Help them identify which of their automation still needs porting.\n\n4. **If they're on `.iflow/`**: the platform is gone. Help them pick a supported platform (`--claude` / `--cursor` / `--codex` / etc.) and run `trellis init --<platform>` on the project to add it. `.iflow/` can be manually deleted after.\n\n5. **After migrate**, run `trellis update` a second time and confirm it says \"Already up to date!\" — any remaining diff indicates an incomplete migration (usually a skill that the user customized and that needs a manual decision).\n\n6. **Skill paths in existing task jsonl files**: if the user has active tasks with `implement.jsonl` / `check.jsonl` referencing old paths (e.g. `.kiro/skills/check/SKILL.md` without `trellis-`), those paths now 404. Re-run `task.py init-context <task-dir> <type> --platform <platform>` to regenerate with correct paths.\n\n7. **Codex feature flag**: remind them to set `features.codex_hooks = true` in `~/.codex/config.toml`, otherwise SessionStart injection is silently skipped and they'll wonder why workflow breadcrumbs don't show up.",
|
|
7
9
|
"notes": "**Breaking release — run `trellis update` to sync.**\n\nExisting projects on 0.4.x:\n1. Run `trellis update --migrate` (the `--migrate` flag is REQUIRED — 68 rename entries don't auto-execute without it, and the new breaking-change gate will exit 1 telling you to add it)\n2. The 138-entry safe-file-delete runs next (hash-verified — locally modified files are preserved with a warning, only pristine Trellis-written files are removed)\n3. New templates are written for the 7 newly-agent-capable platforms and the shared-hooks set\n4. iFlow users: the .iflow/ directory will be removed. Copy it out first if you want to keep it.\n\n**A few confirmation prompts are expected** and safe to accept. Trellis 0.4.0 failed to track certain skill-only `finish-work` and `update-spec` SKILL.md hashes in `.template-hashes.json`, so pristine copies show as modified. The prompt's per-entry `reason` field explains this inline; pressing Enter (default = backup-rename) is always safe.\n\nIf you had customized the removed commands (parallel / onboard / check-cross-layer / record-session / create-command / integrate-skill) or the dispatch/debug/plan sub-agents, the safe-file-delete hash check will skip them and log a warning. Remove manually after reviewing whether the new skill routing (trellis-brainstorm / before-dev / check / break-loop / update-spec) covers your use case.\n\n`/trellis:record-session` is gone — its one job (writing the session journal via add_session.py) is now Step 3 of `/trellis:finish-work`. Replace any aliases / scripts that call `record-session` with `finish-work`.\n\nCodex users: enable `features.codex_hooks = true` in `~/.codex/config.toml` to get SessionStart + UserPromptSubmit breadcrumb injection (the feature-flag is gated by Codex; without it hooks.json is silently ignored).\n\nInstall: `npm install -g @mindfoldhq/trellis@beta`",
|
|
8
10
|
"migrations": [
|
|
9
11
|
{
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.1",
|
|
3
|
+
"description": "First published 0.5 beta — same code as the beta.0 dev cut, bumped at release time",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Release:**\n- First @beta-tagged release of the 0.5 skill-first architecture. Code is identical to the 0.5.0-beta.0 dev cut; the bump happens automatically via `pnpm version prerelease --preid beta` inside `pnpm release:beta`, so beta.0 was never published to npm.\n\nAll migration work (command→skill for 5 skills, safe-file-delete for 6 legacy commands + multi-agent + iFlow + Ralph Loop, breaking-change gate, worktree backup exclusion) is defined in the 0.5.0-beta.0 manifest and applies when upgrading from 0.4.x.",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "If upgrading from 0.4.x: run `trellis update --migrate` — the gate in the 0.5.0-beta.0 manifest requires the flag. See the 0.5.0-beta.0 changelog for the full migration story."
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.11",
|
|
3
|
+
"description": "Hotfix: SessionStart hook crashed on PEP 604 annotations when the AI CLI spawned python3 as system 3.9 even though the user's shell had 3.11. Also relaxes declared Python floor from 3.10 to 3.9. Not breaking; no --migrate required.",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Bug Fixes:**\n- fix(hooks): `shared-hooks/session-start.py` and `shared-hooks/inject-subagent-context.py` now declare `from __future__ import annotations`. Without it, PEP 604 union annotations (`str | None`, `dict | None`) were evaluated at function-def time and crashed on `python3` < 3.10 with `TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'`. Observed in the field on macOS where the user's shell `python3` was 3.11 (homebrew) but the AI CLI host resolved the hook subprocess `python3` via a minimal PATH, falling back to `/usr/bin/python3` → system 3.9. `statusline.py` and the copilot/codex copies of session-start already had the future import; the two canonical `shared-hooks/*.py` files were the outliers.\n\n**Improvements:**\n- feat(cli): Python version floor relaxed from 3.10 to 3.9. `packages/cli/src/commands/init.ts` now sets `MIN_MINOR = 9` — matches macOS Ventura/Sonoma/Sequoia system `python3` (3.9.6). Trellis-distributed Python templates were verified via full package-import matrix on CPython 3.8–3.13 (30/30 pass). Python 3.8 is not supported (EOL 2024-10; declaring support would incur CVE backport obligations).\n- docs: `README.md`, `docs-site/quickstart.mdx` (+ zh), `docs-site/start/install-and-first-task.mdx` (+ zh), `docs-site/advanced/multi-platform.mdx` (+ zh), and `docs-site/advanced/appendix-f.mdx` (+ zh) all updated to `Python 3.9+`. New Prerequisites table on the Quickstart page lists Node / Python / git floors up front (previously undocumented on the docs site).",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Existing projects: run `trellis update` to pick up the two patched hook files. Hashes match pristine installs; locally-modified copies land on the standard confirm prompt. If you're on Python 3.9 and saw the `Python ≥ 3.10` warning during past `trellis init` runs, the warning is gone — no action needed."
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.2",
|
|
3
|
+
"description": "Bug fix: [b] Backup-rename in the migration confirm prompt now writes an inline .backup copy instead of silently behaving identically to [r] Rename anyway",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Bug Fixes:**\n- fix(update): `backup-rename` actually writes inline `.backup` copy (25a3337) — previously `[b] Backup original, then proceed` and `[r] Rename anyway` executed the exact same code path. Both relied on the full project snapshot at `.trellis/.backup-<timestamp>/`, making the prompt's promise of \"keeps a .backup copy\" misleading. Now `backup-rename` writes `<new-path>.backup` (for rename) or `<from>.backup` (for delete) alongside the normal operation so users can diff/merge their customizations against the new template without digging through the full snapshot. Prompt labels updated to state the concrete artifact path.",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Pure CLI-side bug fix — no project file migrations. Run `trellis update` to sync to the new CLI behavior."
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.3",
|
|
3
|
+
"description": "Bug fix: update.skip no longer leaves breaking-release upgrades half-migrated — skip is bypassed for safe-file-delete and template writes when manifest is breaking + recommendMigrate + user passed --migrate",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Bug Fixes:**\n- fix(update): bypass `update.skip` across safe-file-delete + template writes for breaking releases. Previously, projects with paths under `update.skip` in `.trellis/config.yaml` would upgrade inconsistently when crossing a breaking release: `rename` migrations already ignored skip, but `safe-file-delete` and template writes honored it. Result: users ended up half-migrated — old deprecated files persisted under skip-protected paths, new commands like `continue.md` never landed, and every future update re-flagged the same mess.\n\n Now when the current upgrade spans a manifest with `breaking: true + recommendMigrate: true` and the user passed `--migrate`, `update.skip` is bypassed for all three operations: rename / safe-file-delete / template writes. User customizations are still guarded by the per-file `Modified by you` confirm prompt at write time, and the hash check in `allowed_hashes` is still the ultimate safety net for safe-file-delete (user-modified files stay put with a `skip-modified` warning regardless).\n\n Non-breaking updates continue to respect `update.skip` as before — only breaking releases trigger the bypass.\n\n A new yellow `⚠ update.skip BYPASSED` notice appears in the breaking-change warning block so users aren't surprised when skip-protected files get cleaned up during the migration.",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Pure CLI-side bug fix — no project file migrations. If upgrading from 0.4.x with an `update.skip` in config.yaml, this release finally lets the 0.5.0-beta.0 breaking migration complete cleanly: run `trellis update --migrate` to finish any half-migrated state from prior 0.5 beta upgrades."
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.4",
|
|
3
|
+
"description": "Critical bug fix: workflow.md is now included in update's template set — previously excluded, causing 0.4.x → 0.5 upgrades to silently leave workflow.md at the old structure that 0.5's get_context.py / hooks can't parse",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Bug Fixes:**\n- fix(update): include workflow.md in `collectTemplateFiles` — `.trellis/workflow.md` was explicitly excluded from `trellis update`'s template set on the assumption that it's \"user-customizable documentation, written once at init\". That assumption broke in 0.5.0 because workflow.md started carrying **script-parsed structure**: `## Phase Index` (read by `get_context.py --mode phase`), `## Phase 1/2/3` headings (inlined into SessionStart payload), and `[workflow-state:STATUS]` tag blocks (consumed by the per-turn breadcrumb hook). Users upgrading from 0.4.x → 0.5 ended up with `get_context.py` reporting `Phase Index section not found in workflow.md` and the `/continue` command unable to route. workflow.md is now included in the normal update flow — unmodified copies auto-update, user-modified copies go through the existing \"Modified by you\" confirm prompt with diff. `workspace/index.md` stays excluded (it's runtime-appended by `add_session.py`, no script-parsed structure).",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Pure CLI-side bug fix — no project file migrations. If you upgraded to any 0.5.0-beta.0..beta.3 and see `Phase Index section not found in workflow.md` from `get_context.py`, this release fixes it: run `trellis update --migrate`. Unmodified workflow.md auto-updates; if you customized it, you'll see the \"Modified by you\" confirm prompt with a diff — pick `Overwrite` to get the new 0.5.0 structure, or merge your edits manually into the new template."
|
|
9
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.5",
|
|
3
|
+
"description": "Sub-agent rename + remove model: opus from all agent templates. Prefixes implement/check/research with trellis- to prevent accidental invocation by user's own agents or the main agent's description heuristics. Drops hardcoded model: opus from agent frontmatter across all 10 platforms — this caused Cursor users real cost pain because Cursor mapped opus to Claude Opus (~5x Sonnet pricing).",
|
|
4
|
+
"breaking": true,
|
|
5
|
+
"recommendMigrate": true,
|
|
6
|
+
"changelog": "**Breaking Changes:**\n- rename(agents): `implement` / `check` / `research` sub-agents are now `trellis-implement` / `trellis-check` / `trellis-research` across all 10 platforms (claude, cursor, opencode, codex, kiro, gemini, qoder, codebuddy, copilot, droid). Generic names were colliding with user-defined agents and being matched by the main agent's description heuristics on some platforms. Prefixing with `trellis-` makes them unambiguously Trellis sub-agents. `workflow.md`, copilot start prompt, `shared-hooks/inject-subagent-context.py`, and configurator detection all updated to use the new names.\n\n**Bug Fixes:**\n- fix(agents): drop `model: opus` from all 18 markdown agent frontmatters + the example `Task()` calls in `copilot/prompts/start.prompt.md`. On Claude Code this merely hardcoded Opus for all sub-agent runs (ignoring user preference); on Cursor it actively mapped to Claude Opus billing at ~5x Sonnet cost and surprised users; on Gemini/Droid/Codebuddy/Qoder `opus` isn't even a valid model identifier. Agents now inherit whatever model the user configured for their platform.",
|
|
7
|
+
"migrationGuide": "## Sub-Agent Rename: `implement` / `check` / `research` → `trellis-*`\n\nbeta.5 renames the three core sub-agents to add a `trellis-` prefix across all 10 agent-capable platforms (Claude, Cursor, OpenCode, Codex, Kiro, Gemini, Qoder, CodeBuddy, Copilot, Droid). The generic names (`implement`, `check`, `research`) were colliding with user-defined agents in some setups.\n\n### What changes\n\n| Old name | New name |\n|---|---|\n| `implement` | `trellis-implement` |\n| `check` | `trellis-check` |\n| `research` | `trellis-research` |\n\nPaths per platform:\n\n- **Claude / OpenCode / Cursor / etc.**: `.<platform>/agents/implement.md` → `.<platform>/agents/trellis-implement.md`\n- **Codex**: `.codex/agents/implement.toml` → `.codex/agents/trellis-implement.toml`\n- **Kiro**: `.kiro/agents/implement.json` → `.kiro/agents/trellis-implement.json`\n\n### Side-effect: removed `model: opus` from agent templates\n\nAgent YAML frontmatter no longer hardcodes a model. Falls back to whatever the platform default is. If you pinned opus explicitly for a reason (budget, performance), re-add `model: opus` to your local agent files after migrate.\n\n### How to upgrade\n\n```bash\ntrellis update --migrate\n```\n\n30 rename entries run. Unmodified agent files are renamed silently; customized ones (e.g. you tweaked the agent prompt) land on the standard `Modified by you` confirm prompt — pressing Enter (backup-rename) is safe.\n\n### What to check after migrate\n\n1. **Any code that spawns agents by name** — shell scripts, CI jobs, or other automation calling `Task(subagent_type=\"implement\")` must update to `Task(subagent_type=\"trellis-implement\")`.\n2. **Aliases / hot keys** — if you had a keyboard shortcut or prompt alias that referenced `implement` / `check` / `research`, update it.\n3. **Model pin** — if you customized `model: opus` in agent frontmatter, re-add it. Trellis no longer pins a model by default.",
|
|
8
|
+
"aiInstructions": "When helping a user migrate to 0.5.0-beta.5:\n\n1. **Grep for bare agent names in user code**: look for `Task(subagent_type=\"implement\"|\"check\"|\"research\")` in any .md / .ts / .py / shell files. Rename each to the `trellis-` prefixed version.\n\n2. **Check agent customizations**: diff the user's `.<platform>/agents/{implement,check,research}.*` against the new `trellis-*` templates. If they had custom content, help merge it into the new file.\n\n3. **Model pinning**: if their agent frontmatter had `model: opus` and they still want it pinned, re-add it after migrate. beta.5 removes the default pin in favor of platform-default.\n\n4. **Run migrate**: `trellis update --migrate`. Hash-verified renames — pristine files renamed silently, customized files land on the confirm prompt (Enter = backup-rename is safe).\n\n5. **Verify clean second run**: after migrate, running `trellis update` again should report \"Already up to date!\". Any diff indicates a rename that didn't complete (user chose skip on a modified file).",
|
|
9
|
+
"migrations": [
|
|
10
|
+
{
|
|
11
|
+
"type": "rename",
|
|
12
|
+
"from": ".claude/agents/implement.md",
|
|
13
|
+
"to": ".claude/agents/trellis-implement.md",
|
|
14
|
+
"description": "v0.5.0-beta.5: prefix claude sub-agent with trellis- to prevent accidental invocation",
|
|
15
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"type": "rename",
|
|
19
|
+
"from": ".claude/agents/check.md",
|
|
20
|
+
"to": ".claude/agents/trellis-check.md",
|
|
21
|
+
"description": "v0.5.0-beta.5: prefix claude sub-agent with trellis- to prevent accidental invocation",
|
|
22
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"type": "rename",
|
|
26
|
+
"from": ".claude/agents/research.md",
|
|
27
|
+
"to": ".claude/agents/trellis-research.md",
|
|
28
|
+
"description": "v0.5.0-beta.5: prefix claude sub-agent with trellis- to prevent accidental invocation",
|
|
29
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "rename",
|
|
33
|
+
"from": ".cursor/agents/implement.md",
|
|
34
|
+
"to": ".cursor/agents/trellis-implement.md",
|
|
35
|
+
"description": "v0.5.0-beta.5: prefix cursor sub-agent with trellis- to prevent accidental invocation",
|
|
36
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"type": "rename",
|
|
40
|
+
"from": ".cursor/agents/check.md",
|
|
41
|
+
"to": ".cursor/agents/trellis-check.md",
|
|
42
|
+
"description": "v0.5.0-beta.5: prefix cursor sub-agent with trellis- to prevent accidental invocation",
|
|
43
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "rename",
|
|
47
|
+
"from": ".cursor/agents/research.md",
|
|
48
|
+
"to": ".cursor/agents/trellis-research.md",
|
|
49
|
+
"description": "v0.5.0-beta.5: prefix cursor sub-agent with trellis- to prevent accidental invocation",
|
|
50
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"type": "rename",
|
|
54
|
+
"from": ".opencode/agents/implement.md",
|
|
55
|
+
"to": ".opencode/agents/trellis-implement.md",
|
|
56
|
+
"description": "v0.5.0-beta.5: prefix opencode sub-agent with trellis- to prevent accidental invocation",
|
|
57
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"type": "rename",
|
|
61
|
+
"from": ".opencode/agents/check.md",
|
|
62
|
+
"to": ".opencode/agents/trellis-check.md",
|
|
63
|
+
"description": "v0.5.0-beta.5: prefix opencode sub-agent with trellis- to prevent accidental invocation",
|
|
64
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"type": "rename",
|
|
68
|
+
"from": ".opencode/agents/research.md",
|
|
69
|
+
"to": ".opencode/agents/trellis-research.md",
|
|
70
|
+
"description": "v0.5.0-beta.5: prefix opencode sub-agent with trellis- to prevent accidental invocation",
|
|
71
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"type": "rename",
|
|
75
|
+
"from": ".codex/agents/implement.toml",
|
|
76
|
+
"to": ".codex/agents/trellis-implement.toml",
|
|
77
|
+
"description": "v0.5.0-beta.5: prefix codex sub-agent with trellis- to prevent accidental invocation",
|
|
78
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"type": "rename",
|
|
82
|
+
"from": ".codex/agents/check.toml",
|
|
83
|
+
"to": ".codex/agents/trellis-check.toml",
|
|
84
|
+
"description": "v0.5.0-beta.5: prefix codex sub-agent with trellis- to prevent accidental invocation",
|
|
85
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "rename",
|
|
89
|
+
"from": ".codex/agents/research.toml",
|
|
90
|
+
"to": ".codex/agents/trellis-research.toml",
|
|
91
|
+
"description": "v0.5.0-beta.5: prefix codex sub-agent with trellis- to prevent accidental invocation",
|
|
92
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"type": "rename",
|
|
96
|
+
"from": ".kiro/agents/implement.json",
|
|
97
|
+
"to": ".kiro/agents/trellis-implement.json",
|
|
98
|
+
"description": "v0.5.0-beta.5: prefix kiro sub-agent with trellis- to prevent accidental invocation",
|
|
99
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"type": "rename",
|
|
103
|
+
"from": ".kiro/agents/check.json",
|
|
104
|
+
"to": ".kiro/agents/trellis-check.json",
|
|
105
|
+
"description": "v0.5.0-beta.5: prefix kiro sub-agent with trellis- to prevent accidental invocation",
|
|
106
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"type": "rename",
|
|
110
|
+
"from": ".kiro/agents/research.json",
|
|
111
|
+
"to": ".kiro/agents/trellis-research.json",
|
|
112
|
+
"description": "v0.5.0-beta.5: prefix kiro sub-agent with trellis- to prevent accidental invocation",
|
|
113
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"type": "rename",
|
|
117
|
+
"from": ".gemini/agents/implement.md",
|
|
118
|
+
"to": ".gemini/agents/trellis-implement.md",
|
|
119
|
+
"description": "v0.5.0-beta.5: prefix gemini sub-agent with trellis- to prevent accidental invocation",
|
|
120
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"type": "rename",
|
|
124
|
+
"from": ".gemini/agents/check.md",
|
|
125
|
+
"to": ".gemini/agents/trellis-check.md",
|
|
126
|
+
"description": "v0.5.0-beta.5: prefix gemini sub-agent with trellis- to prevent accidental invocation",
|
|
127
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"type": "rename",
|
|
131
|
+
"from": ".gemini/agents/research.md",
|
|
132
|
+
"to": ".gemini/agents/trellis-research.md",
|
|
133
|
+
"description": "v0.5.0-beta.5: prefix gemini sub-agent with trellis- to prevent accidental invocation",
|
|
134
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"type": "rename",
|
|
138
|
+
"from": ".qoder/agents/implement.md",
|
|
139
|
+
"to": ".qoder/agents/trellis-implement.md",
|
|
140
|
+
"description": "v0.5.0-beta.5: prefix qoder sub-agent with trellis- to prevent accidental invocation",
|
|
141
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"type": "rename",
|
|
145
|
+
"from": ".qoder/agents/check.md",
|
|
146
|
+
"to": ".qoder/agents/trellis-check.md",
|
|
147
|
+
"description": "v0.5.0-beta.5: prefix qoder sub-agent with trellis- to prevent accidental invocation",
|
|
148
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"type": "rename",
|
|
152
|
+
"from": ".qoder/agents/research.md",
|
|
153
|
+
"to": ".qoder/agents/trellis-research.md",
|
|
154
|
+
"description": "v0.5.0-beta.5: prefix qoder sub-agent with trellis- to prevent accidental invocation",
|
|
155
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"type": "rename",
|
|
159
|
+
"from": ".codebuddy/agents/implement.md",
|
|
160
|
+
"to": ".codebuddy/agents/trellis-implement.md",
|
|
161
|
+
"description": "v0.5.0-beta.5: prefix codebuddy sub-agent with trellis- to prevent accidental invocation",
|
|
162
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"type": "rename",
|
|
166
|
+
"from": ".codebuddy/agents/check.md",
|
|
167
|
+
"to": ".codebuddy/agents/trellis-check.md",
|
|
168
|
+
"description": "v0.5.0-beta.5: prefix codebuddy sub-agent with trellis- to prevent accidental invocation",
|
|
169
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"type": "rename",
|
|
173
|
+
"from": ".codebuddy/agents/research.md",
|
|
174
|
+
"to": ".codebuddy/agents/trellis-research.md",
|
|
175
|
+
"description": "v0.5.0-beta.5: prefix codebuddy sub-agent with trellis- to prevent accidental invocation",
|
|
176
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"type": "rename",
|
|
180
|
+
"from": ".github/agents/implement.agent.md",
|
|
181
|
+
"to": ".github/agents/trellis-implement.agent.md",
|
|
182
|
+
"description": "v0.5.0-beta.5: prefix copilot sub-agent with trellis- to prevent accidental invocation",
|
|
183
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"type": "rename",
|
|
187
|
+
"from": ".github/agents/check.agent.md",
|
|
188
|
+
"to": ".github/agents/trellis-check.agent.md",
|
|
189
|
+
"description": "v0.5.0-beta.5: prefix copilot sub-agent with trellis- to prevent accidental invocation",
|
|
190
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"type": "rename",
|
|
194
|
+
"from": ".github/agents/research.agent.md",
|
|
195
|
+
"to": ".github/agents/trellis-research.agent.md",
|
|
196
|
+
"description": "v0.5.0-beta.5: prefix copilot sub-agent with trellis- to prevent accidental invocation",
|
|
197
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"type": "rename",
|
|
201
|
+
"from": ".factory/droids/implement.md",
|
|
202
|
+
"to": ".factory/droids/trellis-implement.md",
|
|
203
|
+
"description": "v0.5.0-beta.5: prefix droid sub-agent with trellis- to prevent accidental invocation",
|
|
204
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"type": "rename",
|
|
208
|
+
"from": ".factory/droids/check.md",
|
|
209
|
+
"to": ".factory/droids/trellis-check.md",
|
|
210
|
+
"description": "v0.5.0-beta.5: prefix droid sub-agent with trellis- to prevent accidental invocation",
|
|
211
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"type": "rename",
|
|
215
|
+
"from": ".factory/droids/research.md",
|
|
216
|
+
"to": ".factory/droids/trellis-research.md",
|
|
217
|
+
"description": "v0.5.0-beta.5: prefix droid sub-agent with trellis- to prevent accidental invocation",
|
|
218
|
+
"reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
|
|
219
|
+
}
|
|
220
|
+
],
|
|
221
|
+
"notes": "This is a breaking rename for sub-agent invocation. The migration is automatic for unmodified agent files (hash-matched via .trellis/.template-hashes.json). If you customized an agent, you'll see the usual `Modified by you` confirm prompt with diff — pick `[1] Overwrite` to adopt the new name, or `[3] Skip` if you've built your own workflow on the old names (in which case you must update `workflow.md`, any skill prompts, and hook constants yourself).\n\n`update.skip` is BYPASSED for this release (breaking + recommendMigrate both true, invoked with `--migrate`) to prevent a half-migrated state where workflow.md points to `trellis-implement` but your `.claude/agents/` still has `implement.md`.\n\nAction required: run `trellis update --migrate`."
|
|
222
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.6",
|
|
3
|
+
"description": "Fix codex trellis-check agent: change from read-only to workspace-write, rewrite developer_instructions to match other platforms' self-fix behavior per workflow.md contract.",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Bug Fixes:**\n- fix(codex): `trellis-check.toml` was shipped with `sandbox_mode = \"read-only\"` and 'Read-only Trellis reviewer' framing, which directly contradicted `workflow.md` (the check agent is supposed to auto-fix issues it finds — all other platforms' check agents have Write+Edit tools). Codex users running `trellis-check` could report findings but not fix them, forcing a manual roundtrip through the main agent. Changed to `sandbox_mode = \"workspace-write\"` and rewrote developer_instructions to instruct self-fix + re-run lint/type-check until green, matching the behavior contract of every other platform.",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Pure template-content fix for codex users. No path migrations — `trellis update` will flag `.codex/agents/trellis-check.toml` as a template update and either auto-update (if unmodified) or prompt for confirm (if you customized it)."
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.7",
|
|
3
|
+
"description": "Fix opencode plugin loader incompatibility with OpenCode 1.2.x. Plugins shipped `export default { id, server: async (...) => hooks }` object shape; OpenCode iterates `Object.entries(mod)` and calls each export as a function (`packages/opencode/src/plugin/index.ts:90 — for ([_, fn] of Object.entries(mod)) await fn(input)`), which crashes with `TypeError: fn is not a function`. Fixed by changing all 3 plugins to the current factory-function shape: `export default async (input) => hooks`.",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Bug Fixes:**\n- fix(opencode): plugins now use the factory-function export shape (`export default async ({ directory, client }) => hooks`) that OpenCode 1.2.x requires. The previous `{ id, server }` object shape crashed OpenCode on startup with `TypeError: fn3 is not a function. (In 'fn3(input)', 'fn3' is an instance of Object)` at `src/plugin/index.ts:90:28`, because OpenCode 1.2.x iterates every module export with `Object.entries(mod)` and calls each one as a function (`for ([_, fn] of Object.entries(mod)) await fn(input)`). The `server:` field was never unwrapped by the runtime. Affects all 3 plugins: `inject-subagent-context.js`, `inject-workflow-state.js`, `session-start.js`.\n Users on any trellis version that configured opencode — including 0.4.x stable — were affected as soon as they updated opencode to 1.2.x. Upgrade to this version to restore opencode startup.",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Pure template-content fix for opencode users. No path migrations. `trellis update` auto-updates the 3 plugin files (unmodified copies) or prompts for confirm with diff (if you customized them)."
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.8",
|
|
3
|
+
"description": "Two Windows/opencode-user bug fixes: (1) add collectTemplates for opencode so `trellis update` actually delivers opencode plugin/agent/lib changes (was the only platform with no update tracking); (2) pin CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1 in .claude/settings.json so Bash tool cwd changes don't leak into hook invocations (fixes Windows ENOENT on hook paths after cd).",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Bug Fixes:**\n- fix(update): opencode templates now participate in `trellis update` hash tracking. Before this, `packages/cli/src/configurators/index.ts:184` had `opencode: { configure: configureOpenCode }` with no `collectTemplates` — every other configured platform (claude, cursor, codex, kiro, gemini, qoder, codebuddy, copilot, droid) had one. Result: when beta.7 fixed the opencode plugin factory-function shape, upgraders running `trellis update` would see every other platform update but `.opencode/plugins/*.js` remain untouched — still crashing with `TypeError: fn3 is not a function`. Any future opencode-side change had the same fate. Fixed by adding `collectOpenCodeTemplates()` that walks the opencode template directory and enumerates agents, plugins, lib, package.json plus common commands/skills. `configureOpenCode` was refactored to use the same enumeration, guaranteeing init and update produce byte-identical file sets.\n- fix(claude): `.claude/settings.json` now pins `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1` in its `env` block. Without this, a user who runs `cd frontend/` via Bash tool leaves cwd stuck in `frontend/`, and the next UserPromptSubmit hook (which resolves `python .claude/hooks/inject-workflow-state.py` relative to cwd) crashes on Windows with `[Errno 2] No such file or directory` because `.claude/` is at the real project root one level up. The env-var approach is read by Claude Code internally — works identically on Windows / macOS / Linux, doesn't depend on shell variable expansion (the alternative `$CLAUDE_PROJECT_DIR` approach is broken on Windows cmd/PowerShell per CC issue #6023).",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "If you're on any beta < 0.5.0-beta.7 with opencode configured, upgrading auto-updates the 3 plugin files + agents + lib + package.json to current templates (hash-matched). If you customized `.claude/settings.json`, you'll get the standard 'Modified by you' confirm prompt — pick `[1] Overwrite` to adopt the new env block, or `[3] Skip` and manually add `\"env\": { \"CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR\": \"1\" }` to your settings to get the Windows hook-path fix."
|
|
9
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.0-beta.9",
|
|
3
|
+
"description": "Five coordinated improvements accumulated since beta.8: (1) task.json schema unified across all writers + phase.py/create_bootstrap.py orphan cleanup, (2) workflow tightening — task-creation triggers + research sub-agent delegation, (3) Qoder session-boundary commands split out of the skill matcher into native /trellis-{continue,finish-work}, (4) polyrepo layout detection via sibling .git scan, (5) joiner onboarding task auto-generated for new developers on existing Trellis projects + both bootstrap / joiner PRDs rewritten as AI-facing instructions.",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Internal cleanup (no user-facing behavior change):**\n- chore(schema): `task.json` shape unified across all three writers. `packages/cli/src/utils/task-json.ts` introduces a shared `TaskJson` type + `emptyTaskJson(overrides)` factory mirroring the 24-field canonical shape produced by `.trellis/scripts/common/task_store.py cmd_create`. `init.ts getBootstrapTaskJson` and `update.ts` migration-task block now route through the factory. Follows the `quality-guidelines.md` spec lesson 'Schema Deprecation: Audit ALL Writers, Not Just the Creator' captured in 0.5.0-beta.0 — `cmd_create` was cleaned up at the time, but the two TS writers were missed.\n- chore(schema): migration tasks no longer write legacy `current_phase: 0` / `next_action: [...]` fields. These reference the removed Multi-Agent Pipeline and no active reader consumes them in 0.5.\n- chore(bootstrap): bootstrap task's project-type checklist moves from structured `subtasks: [{name, status}]` in task.json to markdown `- [ ]` items in prd.md. Task.json `subtasks` is now canonical `string[]` (child task dir names) across all tasks.\n- chore(cleanup): `.trellis/scripts/common/phase.py` removed. Orphan code (no importers in 0.5); was kept around from the Multi-Agent Pipeline era and not captured by 0.5.0-beta.0's 138-entry safe-file-delete (which only targeted `multi_agent/*`). Hash-verified delete — pristine copies auto-removed, locally modified copies preserved with a warning.\n- chore(cleanup): `.trellis/scripts/create_bootstrap.py` removed. Legacy 4th task.json writer with its own 13-field divergent shape; replaced by `init.ts getBootstrapTaskJson` in 0.4 but the Python file was never deleted. Never invoked by any command. Same hash-verified delete mechanism; three historical hashes included to cover 0.3+ users.\n- chore(cleanup): `TaskData` TypedDict (`common/types.py`) no longer declares `current_phase: int` / `next_action: list[dict]` — dead schema fields.\n- docs: spec directory-trees in `script-conventions.md` (template + local) drop `phase.py` / `create_bootstrap.py` / the full `multi_agent/` block (which was actually removed in 0.5.0-beta.0 but kept appearing in shipped spec docs).\n- chore(pkg): remove 5 orphan `.md` files from `packages/cli/src/templates/markdown/spec/` (`spec/backend/{index,directory-structure,script-conventions}.md` + `spec/guides/{code-reuse,cross-platform}-thinking-guide.md`). These were accidentally added in early 0.1.x releases alongside the proper `.md.txt` stub templates but never imported by `markdown/index.ts` — they shipped in dist/ as dead weight (~35 KB) but never landed on user disks, so no migration entry is needed. Fixes a ~2-year-old duplication bug.\n\n**Workflow tightening (all platforms):**\n- feat(workflow): `workflow.md [workflow-state:no_task]` block + `shared-hooks/inject-workflow-state.py` + OpenCode plugin now enumerate explicit trigger words (`重构` / `抽成` / `独立` / `分发` / `拆出来` / `搞一个` / `做成` / `接入` / `集成` / `refactor` / `rewrite` / `extract` / `productize` / `publish` / `build X` / `design Y`) that REQUIRE task creation, plus a strict three-condition exemption rule (zero file writes + one-reply answer + no external research). Default stance: when in doubt, create a task.\n- feat(workflow): `common/skills/brainstorm.md` gains a 'Delegate to trellis-research sub-agent' section with explicit anti-pattern guidance — 10+ inline WebFetch/WebSearch calls in the main conversation burn tokens and leak raw tool output into context. Correct pattern: spawn trellis-research via Task tool; the sub-agent persists findings to `{TASK_DIR}/research/<topic>.md` and returns only path + one-line summary.\n- feat(workflow): `workflow.md [workflow-state:in_progress]` flow names the actual agent types (`trellis-implement → trellis-check → trellis-update-spec → finish`) instead of generic verbs.\n\n**Qoder UX fix:**\n- feat(qoder): deliver session-boundary commands as native Qoder Custom Commands (`.qoder/commands/trellis-{finish-work,continue}.md`) with YAML frontmatter (`name` + `description`), per docs.qoder.com/en/cli/user-guide/command. Previously these were buried in the skill matcher alongside the 5 auto-trigger workflows, so users had no deterministic way to invoke them — they had to hope their chat wording matched the skill's description. Now they type `/trellis-finish-work` or `/trellis-continue` explicitly.\n- chore(qoder): the 5 auto-trigger workflows (brainstorm, before-dev, check, update-spec, break-loop) stay as `.qoder/skills/trellis-{name}/SKILL.md`. `start` is filtered out because Qoder is agent-capable and its SessionStart hook already injects the workflow overview (same rule that applies to every other agent-capable platform).\n- chore(shared): new `wrapWithCommandFrontmatter` + `COMMAND_DESCRIPTIONS` registry in `configurators/shared.ts` — short, human-facing, imperative one-liners for the `/` palette, distinct from the long auto-trigger prose in `SKILL_DESCRIPTIONS` (written for the skill matcher, not a command list).\n- chore(migration): upgraders have their old `.qoder/skills/trellis-{finish-work,continue}/SKILL.md` hash-verified and auto-deleted on `trellis update` (pristine copies removed silently, locally-modified copies land on the standard confirm prompt).\n\n**New features:**\n- feat(cli): polyrepo detection via sibling `.git` scan. `detectMonorepo()` now has a 7th parser that scans up to 2 levels deep for sibling `.git` directories or worktree gitlinks, firing only when all 6 workspace parsers miss and no submodules are declared (workspace configs always win). `DetectedPackage` gains `isGitRepo` (mutually exclusive with `isSubmodule`); `writeMonorepoConfig` emits `git: true` to bridge to the runtime schema already consumed by `get_git_packages()` in `config.py`. `--monorepo` failure now prints a 7-marker checklist and a manual `config.yaml` example. Init confirm prompt labels polyrepo packages with `(git repo)`.\n- feat(cli): joiner onboarding task auto-generated when a new developer runs `trellis init` on an existing Trellis project (fresh clone / new machine). Three-branch dispatch on `.trellis/` × `.trellis/.developer`: no `.trellis/` = creator bootstrap (unchanged), `.trellis/` + no `.developer` = **joiner** (`00-join-<slug>`), both = no-op. The `.developer` file is gitignored, so it's a clean per-checkout signal; `workspace/<name>/` cannot be used because it's committed. Wired in both the main dispatch AND `handleReinit`'s `doAddDeveloper` branch (the latter is the default path for `trellis init --user <name>` on existing checkouts). Failures surface as `console.warn` instead of being silently swallowed.\n- feat(cli): `trellis init` bootstrap + joiner PRDs rewritten as AI-facing instructions. Previously framed as user-facing docs (`Welcome, do X, ask AI Y`); now framed as instructions TO the AI agent that runs the onboarding task (`You (the AI) are running this task; here's how to onboard them`). Includes runtime-mechanics explainer (SessionStart hook, workflow-state tag, implement/check sub-agents, jsonl manifests) and a suggested opening line. Same content reach, much better first-session UX.",
|
|
7
|
+
"migrations": [
|
|
8
|
+
{
|
|
9
|
+
"type": "safe-file-delete",
|
|
10
|
+
"from": ".trellis/scripts/common/phase.py",
|
|
11
|
+
"description": "Remove orphan phase.py — no importers; legacy from Multi-Agent Pipeline",
|
|
12
|
+
"allowed_hashes": [
|
|
13
|
+
"412b7096ef0e48b8a95a79060121a586e0d9d44f1b350d6ed818c6f84330bb01"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "safe-file-delete",
|
|
18
|
+
"from": ".trellis/scripts/create_bootstrap.py",
|
|
19
|
+
"description": "Remove dead create_bootstrap.py — replaced by TS init.ts getBootstrapTaskJson in 0.4; never invoked by any command",
|
|
20
|
+
"allowed_hashes": [
|
|
21
|
+
"33b40df671ba7828fd8d3ba8c019823a8b03e938797b1cae218c55d6c7ebe57a",
|
|
22
|
+
"ce1503c052dadf2470ddb1cade42f331c0fd70d34e895d8d07044ba27548e17e",
|
|
23
|
+
"aa5dd1f39a77b2f4bb827fd14ce7a83fb51870e77f556fe508afce3f8eac0b4e"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"type": "safe-file-delete",
|
|
28
|
+
"from": ".qoder/skills/trellis-finish-work/SKILL.md",
|
|
29
|
+
"description": "Qoder session-boundary skill → moved to .qoder/commands/trellis-finish-work.md",
|
|
30
|
+
"reason": "In 0.5.0-beta.9, Qoder session-boundary commands move out of the skill matcher into native Custom Commands so users can invoke them deterministically as `/trellis-finish-work`.",
|
|
31
|
+
"allowed_hashes": [
|
|
32
|
+
"c0f3ffa74e1e9990f93e5d44d03bd088c8698da1db4750b74d3eee4809a84aea",
|
|
33
|
+
"2027d8ea610e0a929a7ce147b29045406db8a8c9c2a767f98d779e5d53162f0c"
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "safe-file-delete",
|
|
38
|
+
"from": ".qoder/skills/trellis-continue/SKILL.md",
|
|
39
|
+
"description": "Qoder session-boundary skill → moved to .qoder/commands/trellis-continue.md",
|
|
40
|
+
"reason": "In 0.5.0-beta.9, Qoder session-boundary commands move out of the skill matcher into native Custom Commands so users can invoke them deterministically as `/trellis-continue`.",
|
|
41
|
+
"allowed_hashes": [
|
|
42
|
+
"914545dab290e508a4c6b84d0a9f8debe68bcf9117cebe0fa85be0ef709d8fc1",
|
|
43
|
+
"3d2c83ad710b3b667851e28a473fb259a1330475e6b7417c769432f4a55a76f9"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"notes": "Code cleanup + additive features; no user task.json mutations. Python readers (`task.py`, `get_context.py`) treat missing canonical fields as null, so legacy tasks keep working. Newly-created bootstrap / migration tasks from this version onward produce the canonical shape. Qoder users who had the two session-boundary skills installed will see them auto-removed (pristine) or prompted for confirm (modified); the new `.qoder/commands/*.md` are written by the standard configure step on `trellis update`."
|
|
48
|
+
}
|