@mindfoldhq/trellis 0.4.0-beta.7 → 0.4.0-beta.9
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 +10 -5
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +34 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +33 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/codex.d.ts +7 -4
- package/dist/configurators/codex.d.ts.map +1 -1
- package/dist/configurators/codex.js +40 -10
- package/dist/configurators/codex.js.map +1 -1
- package/dist/configurators/copilot.d.ts +9 -0
- package/dist/configurators/copilot.d.ts.map +1 -0
- package/dist/configurators/copilot.js +34 -0
- package/dist/configurators/copilot.js.map +1 -0
- package/dist/configurators/index.d.ts +11 -1
- package/dist/configurators/index.d.ts.map +1 -1
- package/dist/configurators/index.js +59 -4
- package/dist/configurators/index.js.map +1 -1
- package/dist/configurators/windsurf.d.ts +8 -0
- package/dist/configurators/windsurf.d.ts.map +1 -0
- package/dist/configurators/windsurf.js +18 -0
- package/dist/configurators/windsurf.js.map +1 -0
- package/dist/migrations/manifests/0.4.0-beta.8.json +34 -0
- package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
- package/dist/templates/claude/commands/trellis/record-session.md +2 -1
- package/dist/templates/claude/hooks/inject-subagent-context.py +8 -1
- package/dist/templates/claude/hooks/ralph-loop.py +8 -1
- package/dist/templates/claude/hooks/session-start.py +31 -7
- package/dist/templates/claude/hooks/statusline.py +211 -0
- package/dist/templates/claude/settings.json +4 -0
- package/dist/templates/codex/agents/check.toml +23 -0
- package/dist/templates/codex/agents/implement.toml +19 -0
- package/dist/templates/codex/agents/research.toml +26 -0
- package/dist/templates/codex/codex-skills/parallel/SKILL.md +194 -0
- package/dist/templates/codex/config.toml +5 -0
- package/dist/templates/codex/hooks/session-start.py +228 -0
- package/dist/templates/codex/hooks.json +16 -0
- package/dist/templates/codex/index.d.ts +27 -5
- package/dist/templates/codex/index.d.ts.map +1 -1
- package/dist/templates/codex/index.js +60 -8
- package/dist/templates/codex/index.js.map +1 -1
- package/dist/templates/codex/skills/improve-ut/SKILL.md +69 -0
- package/dist/templates/codex/skills/record-session/SKILL.md +2 -1
- package/dist/templates/copilot/hooks/session-start.py +218 -0
- package/dist/templates/copilot/hooks.json +11 -0
- package/dist/templates/copilot/index.d.ts +23 -0
- package/dist/templates/copilot/index.d.ts.map +1 -0
- package/dist/templates/copilot/index.js +54 -0
- package/dist/templates/copilot/index.js.map +1 -0
- package/dist/templates/copilot/prompts/before-dev.prompt.md +33 -0
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +491 -0
- package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
- package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +157 -0
- package/dist/templates/copilot/prompts/check.prompt.md +29 -0
- package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
- package/dist/templates/copilot/prompts/finish-work.prompt.md +157 -0
- package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
- package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
- package/dist/templates/copilot/prompts/parallel.prompt.md +196 -0
- package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
- package/dist/templates/copilot/prompts/start.prompt.md +397 -0
- package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
- package/dist/templates/cursor/commands/trellis-record-session.md +2 -1
- package/dist/templates/extract.d.ts +29 -0
- package/dist/templates/extract.d.ts.map +1 -1
- package/dist/templates/extract.js +51 -0
- package/dist/templates/extract.js.map +1 -1
- package/dist/templates/gemini/commands/trellis/record-session.toml +2 -1
- package/dist/templates/iflow/commands/trellis/record-session.md +2 -1
- package/dist/templates/iflow/hooks/inject-subagent-context.py +8 -1
- package/dist/templates/iflow/hooks/ralph-loop.py +8 -1
- package/dist/templates/iflow/hooks/session-start.py +31 -7
- package/dist/templates/kilo/workflows/record-session.md +2 -1
- package/dist/templates/kiro/skills/record-session/SKILL.md +2 -1
- package/dist/templates/markdown/agents.md +4 -0
- package/dist/templates/markdown/spec/backend/directory-structure.md +1 -1
- package/dist/templates/markdown/workspace-index.md +2 -0
- package/dist/templates/opencode/agents/dispatch.md +20 -19
- package/dist/templates/opencode/commands/trellis/record-session.md +2 -1
- package/dist/templates/opencode/lib/trellis-context.js +42 -2
- package/dist/templates/opencode/plugins/session-start.js +7 -27
- package/dist/templates/qoder/skills/record-session/SKILL.md +2 -1
- package/dist/templates/trellis/scripts/add_session.py +69 -16
- package/dist/templates/trellis/scripts/common/__init__.py +2 -0
- package/dist/templates/trellis/scripts/common/cli_adapter.py +108 -16
- package/dist/templates/trellis/scripts/common/developer.py +2 -2
- package/dist/templates/trellis/scripts/common/paths.py +57 -6
- package/dist/templates/trellis/scripts/common/task_store.py +6 -4
- package/dist/templates/trellis/scripts/common/task_utils.py +14 -8
- package/dist/templates/trellis/scripts/multi_agent/plan.py +7 -6
- package/dist/templates/trellis/scripts/multi_agent/start.py +16 -11
- package/dist/templates/trellis/scripts/task.py +1 -1
- package/dist/templates/windsurf/index.d.ts +21 -0
- package/dist/templates/windsurf/index.d.ts.map +1 -0
- package/dist/templates/windsurf/index.js +44 -0
- package/dist/templates/windsurf/index.js.map +1 -0
- package/dist/templates/windsurf/workflows/trellis-before-dev.md +31 -0
- package/dist/templates/windsurf/workflows/trellis-brainstorm.md +491 -0
- package/dist/templates/windsurf/workflows/trellis-break-loop.md +111 -0
- package/dist/templates/windsurf/workflows/trellis-check-cross-layer.md +157 -0
- package/dist/templates/windsurf/workflows/trellis-check.md +27 -0
- package/dist/templates/windsurf/workflows/trellis-create-command.md +154 -0
- package/dist/templates/windsurf/workflows/trellis-finish-work.md +147 -0
- package/dist/templates/windsurf/workflows/trellis-integrate-skill.md +220 -0
- package/dist/templates/windsurf/workflows/trellis-onboard.md +362 -0
- package/dist/templates/windsurf/workflows/trellis-record-session.md +66 -0
- package/dist/templates/windsurf/workflows/trellis-start.md +373 -0
- package/dist/templates/windsurf/workflows/trellis-update-spec.md +358 -0
- package/dist/types/ai-tools.d.ts +15 -3
- package/dist/types/ai-tools.d.ts.map +1 -1
- package/dist/types/ai-tools.js +34 -2
- package/dist/types/ai-tools.js.map +1 -1
- package/dist/utils/template-fetcher.d.ts +17 -4
- package/dist/utils/template-fetcher.d.ts.map +1 -1
- package/dist/utils/template-fetcher.js +94 -12
- package/dist/utils/template-fetcher.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/configurators/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/configurators/codex.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD/D"}
|
|
@@ -1,20 +1,50 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { getAllSkills } from "../templates/codex/index.js";
|
|
2
|
+
import { getAllAgents, getAllCodexSkills, getAllHooks, getAllSkills, getConfigTemplate, getHooksConfig, } from "../templates/codex/index.js";
|
|
3
3
|
import { ensureDir, writeFile } from "../utils/file-writer.js";
|
|
4
|
+
import { resolvePlaceholders } from "./shared.js";
|
|
4
5
|
/**
|
|
5
|
-
* Configure Codex by writing
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* - .agents
|
|
6
|
+
* Configure Codex by writing:
|
|
7
|
+
* - .agents/skills/<skill-name>/SKILL.md (shared, cross-platform)
|
|
8
|
+
* - .codex/skills/<skill-name>/SKILL.md (Codex-specific)
|
|
9
|
+
* - .codex/agents/<agent-name>.toml
|
|
10
|
+
* - .codex/hooks/session-start.py
|
|
11
|
+
* - .codex/hooks.json
|
|
12
|
+
* - .codex/config.toml
|
|
9
13
|
*/
|
|
10
14
|
export async function configureCodex(cwd) {
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
// Shared skills → .agents/skills/
|
|
16
|
+
const sharedSkillsRoot = path.join(cwd, ".agents", "skills");
|
|
17
|
+
ensureDir(sharedSkillsRoot);
|
|
13
18
|
for (const skill of getAllSkills()) {
|
|
14
|
-
const skillDir = path.join(
|
|
19
|
+
const skillDir = path.join(sharedSkillsRoot, skill.name);
|
|
15
20
|
ensureDir(skillDir);
|
|
16
|
-
|
|
17
|
-
await writeFile(targetPath, skill.content);
|
|
21
|
+
await writeFile(path.join(skillDir, "SKILL.md"), skill.content);
|
|
18
22
|
}
|
|
23
|
+
const codexRoot = path.join(cwd, ".codex");
|
|
24
|
+
// Codex-specific skills → .codex/skills/
|
|
25
|
+
const codexSkillsRoot = path.join(codexRoot, "skills");
|
|
26
|
+
ensureDir(codexSkillsRoot);
|
|
27
|
+
for (const skill of getAllCodexSkills()) {
|
|
28
|
+
const skillDir = path.join(codexSkillsRoot, skill.name);
|
|
29
|
+
ensureDir(skillDir);
|
|
30
|
+
await writeFile(path.join(skillDir, "SKILL.md"), skill.content);
|
|
31
|
+
}
|
|
32
|
+
// Custom agents → .codex/agents/
|
|
33
|
+
const codexAgentsRoot = path.join(codexRoot, "agents");
|
|
34
|
+
ensureDir(codexAgentsRoot);
|
|
35
|
+
for (const agent of getAllAgents()) {
|
|
36
|
+
await writeFile(path.join(codexAgentsRoot, `${agent.name}.toml`), agent.content);
|
|
37
|
+
}
|
|
38
|
+
// Hooks → .codex/hooks/
|
|
39
|
+
const hooksDir = path.join(codexRoot, "hooks");
|
|
40
|
+
ensureDir(hooksDir);
|
|
41
|
+
for (const hook of getAllHooks()) {
|
|
42
|
+
await writeFile(path.join(hooksDir, hook.name), hook.content);
|
|
43
|
+
}
|
|
44
|
+
// Hooks config → .codex/hooks.json
|
|
45
|
+
await writeFile(path.join(codexRoot, "hooks.json"), resolvePlaceholders(getHooksConfig()));
|
|
46
|
+
// Config → .codex/config.toml
|
|
47
|
+
const config = getConfigTemplate();
|
|
48
|
+
await writeFile(path.join(codexRoot, config.targetPath), config.content);
|
|
19
49
|
}
|
|
20
50
|
//# sourceMappingURL=codex.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/configurators/codex.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/configurators/codex.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,kCAAkC;IAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7D,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE3C,yCAAyC;IACzC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvD,SAAS,CAAC,eAAe,CAAC,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,iCAAiC;IACjC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvD,SAAS,CAAC,eAAe,CAAC,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,EAAE,CAAC;QACnC,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,KAAK,CAAC,IAAI,OAAO,CAAC,EAChD,KAAK,CAAC,OAAO,CACd,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,EAAE,CAAC;QACjC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,mCAAmC;IACnC,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAClC,mBAAmB,CAAC,cAAc,EAAE,CAAC,CACtC,CAAC;IAEF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure GitHub Copilot by writing:
|
|
3
|
+
* - .github/prompts/*.prompt.md (slash command prompt files, e.g. /start)
|
|
4
|
+
* - .github/copilot/hooks/session-start.py (hook scripts)
|
|
5
|
+
* - .github/copilot/hooks.json (hooks config, tracked by trellis update)
|
|
6
|
+
* - .github/hooks/trellis.json (hooks config for VS Code Copilot discovery)
|
|
7
|
+
*/
|
|
8
|
+
export declare function configureCopilot(cwd: string): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=copilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../src/configurators/copilot.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BjE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { getAllHooks, getAllPrompts, getHooksConfig, } from "../templates/copilot/index.js";
|
|
3
|
+
import { ensureDir, writeFile } from "../utils/file-writer.js";
|
|
4
|
+
import { resolvePlaceholders } from "./shared.js";
|
|
5
|
+
/**
|
|
6
|
+
* Configure GitHub Copilot by writing:
|
|
7
|
+
* - .github/prompts/*.prompt.md (slash command prompt files, e.g. /start)
|
|
8
|
+
* - .github/copilot/hooks/session-start.py (hook scripts)
|
|
9
|
+
* - .github/copilot/hooks.json (hooks config, tracked by trellis update)
|
|
10
|
+
* - .github/hooks/trellis.json (hooks config for VS Code Copilot discovery)
|
|
11
|
+
*/
|
|
12
|
+
export async function configureCopilot(cwd) {
|
|
13
|
+
const copilotRoot = path.join(cwd, ".github", "copilot");
|
|
14
|
+
// Prompt files → .github/prompts/*.prompt.md
|
|
15
|
+
const promptsDir = path.join(cwd, ".github", "prompts");
|
|
16
|
+
ensureDir(promptsDir);
|
|
17
|
+
for (const prompt of getAllPrompts()) {
|
|
18
|
+
await writeFile(path.join(promptsDir, `${prompt.name}.prompt.md`), prompt.content);
|
|
19
|
+
}
|
|
20
|
+
// Hook scripts → .github/copilot/hooks/
|
|
21
|
+
const hooksDir = path.join(copilotRoot, "hooks");
|
|
22
|
+
ensureDir(hooksDir);
|
|
23
|
+
for (const hook of getAllHooks()) {
|
|
24
|
+
await writeFile(path.join(hooksDir, hook.name), hook.content);
|
|
25
|
+
}
|
|
26
|
+
// Hooks config → .github/copilot/hooks.json (tracked copy)
|
|
27
|
+
const resolvedConfig = resolvePlaceholders(getHooksConfig());
|
|
28
|
+
await writeFile(path.join(copilotRoot, "hooks.json"), resolvedConfig);
|
|
29
|
+
// Hooks config → .github/hooks/trellis.json (VS Code Copilot discovery)
|
|
30
|
+
const githubHooksDir = path.join(cwd, ".github", "hooks");
|
|
31
|
+
ensureDir(githubHooksDir);
|
|
32
|
+
await writeFile(path.join(githubHooksDir, "trellis.json"), resolvedConfig);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/configurators/copilot.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACxD,SAAS,CAAC,UAAU,CAAC,CAAC;IAEtB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,EAAE,CAAC;QACrC,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,YAAY,CAAC,EACjD,MAAM,CAAC,OAAO,CACf,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,EAAE,CAAC;QACjC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,MAAM,cAAc,GAAG,mBAAmB,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAEtE,wEAAwE;IACxE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1B,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -12,10 +12,16 @@ import { type AITool, type CliFlag } from "../types/ai-tools.js";
|
|
|
12
12
|
export declare const PLATFORM_IDS: AITool[];
|
|
13
13
|
/** All platform config directory names (e.g., [".claude", ".cursor", ".iflow", ".opencode"]) */
|
|
14
14
|
export declare const CONFIG_DIRS: string[];
|
|
15
|
+
/** All managed paths for every platform (primary configDir + extra managed paths). */
|
|
16
|
+
export declare const PLATFORM_MANAGED_DIRS: string[];
|
|
15
17
|
/** All directories managed by Trellis (including .trellis itself) */
|
|
16
18
|
export declare const ALL_MANAGED_DIRS: string[];
|
|
17
19
|
/**
|
|
18
|
-
* Detect which platforms are configured by checking for
|
|
20
|
+
* Detect which platforms are configured by checking for configDir existence.
|
|
21
|
+
*
|
|
22
|
+
* Note: Detection uses only `configDir` (the platform-specific directory),
|
|
23
|
+
* NOT shared layers like `.agents/skills/`. This prevents false positives
|
|
24
|
+
* where a shared directory triggers detection of a specific platform.
|
|
19
25
|
*/
|
|
20
26
|
export declare function getConfiguredPlatforms(cwd: string): Set<AITool>;
|
|
21
27
|
/**
|
|
@@ -30,6 +36,10 @@ export declare function isManagedPath(dirPath: string): boolean;
|
|
|
30
36
|
* Check if a directory name is a managed root directory (should not be deleted)
|
|
31
37
|
*/
|
|
32
38
|
export declare function isManagedRootDir(dirName: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Get all managed paths for a platform.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getPlatformManagedPaths(platformId: AITool): string[];
|
|
33
43
|
/**
|
|
34
44
|
* Get the configure function for a platform
|
|
35
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configurators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configurators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,sBAAsB,CAAC;AAqQ9B,uBAAuB;AACvB,eAAO,MAAM,YAAY,EAA4B,MAAM,EAAE,CAAC;AAE9D,gGAAgG;AAChG,eAAO,MAAM,WAAW,UAAmD,CAAC;AAE5E,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,UAEjC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,UAAkD,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAQ/D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,GACjB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAEjC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,EAAE,CAOF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/D"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import fs from "node:fs";
|
|
11
11
|
import path from "node:path";
|
|
12
|
-
import { AI_TOOLS } from "../types/ai-tools.js";
|
|
12
|
+
import { AI_TOOLS, getManagedPaths, } from "../types/ai-tools.js";
|
|
13
13
|
// Platform configurators
|
|
14
14
|
import { configureClaude } from "./claude.js";
|
|
15
15
|
import { configureCursor } from "./cursor.js";
|
|
@@ -20,21 +20,25 @@ import { configureKilo } from "./kilo.js";
|
|
|
20
20
|
import { configureKiro } from "./kiro.js";
|
|
21
21
|
import { configureGemini } from "./gemini.js";
|
|
22
22
|
import { configureAntigravity } from "./antigravity.js";
|
|
23
|
+
import { configureWindsurf } from "./windsurf.js";
|
|
23
24
|
import { configureQoder } from "./qoder.js";
|
|
24
25
|
import { configureCodebuddy } from "./codebuddy.js";
|
|
26
|
+
import { configureCopilot } from "./copilot.js";
|
|
25
27
|
// Shared utilities
|
|
26
28
|
import { resolvePlaceholders } from "./shared.js";
|
|
27
29
|
// Template content for update tracking
|
|
28
30
|
import { getAllAgents as getClaudeAgents, getAllCommands as getClaudeCommands, getAllHooks as getClaudeHooks, getSettingsTemplate as getClaudeSettings, } from "../templates/claude/index.js";
|
|
29
31
|
import { getAllCommands as getCursorCommands } from "../templates/cursor/index.js";
|
|
30
32
|
import { getAllAgents as getIflowAgents, getAllCommands as getIflowCommands, getAllHooks as getIflowHooks, getSettingsTemplate as getIflowSettings, } from "../templates/iflow/index.js";
|
|
31
|
-
import { getAllSkills as getCodexSkills } from "../templates/codex/index.js";
|
|
33
|
+
import { getAllAgents as getCodexAgents, getAllCodexSkills as getCodexPlatformSkills, getAllHooks as getCodexHooks, getAllSkills as getCodexSkills, getConfigTemplate as getCodexConfigTemplate, getHooksConfig as getCodexHooksConfig, } from "../templates/codex/index.js";
|
|
32
34
|
import { getAllWorkflows as getKiloWorkflows } from "../templates/kilo/index.js";
|
|
33
35
|
import { getAllSkills as getKiroSkills } from "../templates/kiro/index.js";
|
|
34
36
|
import { getAllCommands as getGeminiCommands } from "../templates/gemini/index.js";
|
|
35
37
|
import { getAllWorkflows as getAntigravityWorkflows } from "../templates/antigravity/index.js";
|
|
38
|
+
import { getAllWorkflows as getAllWindsurfWorkflows } from "../templates/windsurf/index.js";
|
|
36
39
|
import { getAllSkills as getQoderSkills } from "../templates/qoder/index.js";
|
|
37
40
|
import { getAllCommands as getCodebuddyCommands } from "../templates/codebuddy/index.js";
|
|
41
|
+
import { getAllHooks as getCopilotHooks, getAllPrompts as getCopilotPrompts, getHooksConfig as getCopilotHooksConfig, } from "../templates/copilot/index.js";
|
|
38
42
|
/**
|
|
39
43
|
* Platform functions registry — maps each AITool to its behavior.
|
|
40
44
|
* When adding a new platform, add an entry here.
|
|
@@ -106,6 +110,18 @@ const PLATFORM_FUNCTIONS = {
|
|
|
106
110
|
for (const skill of getCodexSkills()) {
|
|
107
111
|
files.set(`.agents/skills/${skill.name}/SKILL.md`, skill.content);
|
|
108
112
|
}
|
|
113
|
+
for (const skill of getCodexPlatformSkills()) {
|
|
114
|
+
files.set(`.codex/skills/${skill.name}/SKILL.md`, skill.content);
|
|
115
|
+
}
|
|
116
|
+
for (const agent of getCodexAgents()) {
|
|
117
|
+
files.set(`.codex/agents/${agent.name}.toml`, agent.content);
|
|
118
|
+
}
|
|
119
|
+
for (const hook of getCodexHooks()) {
|
|
120
|
+
files.set(`.codex/hooks/${hook.name}`, hook.content);
|
|
121
|
+
}
|
|
122
|
+
files.set(".codex/hooks.json", resolvePlaceholders(getCodexHooksConfig()));
|
|
123
|
+
const config = getCodexConfigTemplate();
|
|
124
|
+
files.set(`.codex/${config.targetPath}`, config.content);
|
|
109
125
|
return files;
|
|
110
126
|
},
|
|
111
127
|
},
|
|
@@ -149,6 +165,16 @@ const PLATFORM_FUNCTIONS = {
|
|
|
149
165
|
return files;
|
|
150
166
|
},
|
|
151
167
|
},
|
|
168
|
+
windsurf: {
|
|
169
|
+
configure: configureWindsurf,
|
|
170
|
+
collectTemplates: () => {
|
|
171
|
+
const files = new Map();
|
|
172
|
+
for (const workflow of getAllWindsurfWorkflows()) {
|
|
173
|
+
files.set(`.windsurf/workflows/${workflow.name}.md`, workflow.content);
|
|
174
|
+
}
|
|
175
|
+
return files;
|
|
176
|
+
},
|
|
177
|
+
},
|
|
152
178
|
qoder: {
|
|
153
179
|
configure: configureQoder,
|
|
154
180
|
collectTemplates: () => {
|
|
@@ -170,6 +196,23 @@ const PLATFORM_FUNCTIONS = {
|
|
|
170
196
|
return files;
|
|
171
197
|
},
|
|
172
198
|
},
|
|
199
|
+
copilot: {
|
|
200
|
+
configure: configureCopilot,
|
|
201
|
+
collectTemplates: () => {
|
|
202
|
+
const files = new Map();
|
|
203
|
+
for (const prompt of getCopilotPrompts()) {
|
|
204
|
+
files.set(`.github/prompts/${prompt.name}.prompt.md`, prompt.content);
|
|
205
|
+
}
|
|
206
|
+
for (const hook of getCopilotHooks()) {
|
|
207
|
+
files.set(`.github/copilot/hooks/${hook.name}`, hook.content);
|
|
208
|
+
}
|
|
209
|
+
// Tracked copy under platform config directory
|
|
210
|
+
files.set(".github/copilot/hooks.json", resolvePlaceholders(getCopilotHooksConfig()));
|
|
211
|
+
// VS Code Copilot discovery entry written by configureCopilot
|
|
212
|
+
files.set(".github/hooks/trellis.json", resolvePlaceholders(getCopilotHooksConfig()));
|
|
213
|
+
return files;
|
|
214
|
+
},
|
|
215
|
+
},
|
|
173
216
|
};
|
|
174
217
|
// =============================================================================
|
|
175
218
|
// Derived Helpers — all derived from AI_TOOLS registry
|
|
@@ -178,10 +221,16 @@ const PLATFORM_FUNCTIONS = {
|
|
|
178
221
|
export const PLATFORM_IDS = Object.keys(AI_TOOLS);
|
|
179
222
|
/** All platform config directory names (e.g., [".claude", ".cursor", ".iflow", ".opencode"]) */
|
|
180
223
|
export const CONFIG_DIRS = PLATFORM_IDS.map((id) => AI_TOOLS[id].configDir);
|
|
224
|
+
/** All managed paths for every platform (primary configDir + extra managed paths). */
|
|
225
|
+
export const PLATFORM_MANAGED_DIRS = PLATFORM_IDS.flatMap((id) => getManagedPaths(id));
|
|
181
226
|
/** All directories managed by Trellis (including .trellis itself) */
|
|
182
|
-
export const ALL_MANAGED_DIRS = [".trellis", ...
|
|
227
|
+
export const ALL_MANAGED_DIRS = [".trellis", ...new Set(PLATFORM_MANAGED_DIRS)];
|
|
183
228
|
/**
|
|
184
|
-
* Detect which platforms are configured by checking for
|
|
229
|
+
* Detect which platforms are configured by checking for configDir existence.
|
|
230
|
+
*
|
|
231
|
+
* Note: Detection uses only `configDir` (the platform-specific directory),
|
|
232
|
+
* NOT shared layers like `.agents/skills/`. This prevents false positives
|
|
233
|
+
* where a shared directory triggers detection of a specific platform.
|
|
185
234
|
*/
|
|
186
235
|
export function getConfiguredPlatforms(cwd) {
|
|
187
236
|
const platforms = new Set();
|
|
@@ -212,6 +261,12 @@ export function isManagedPath(dirPath) {
|
|
|
212
261
|
export function isManagedRootDir(dirName) {
|
|
213
262
|
return ALL_MANAGED_DIRS.includes(dirName);
|
|
214
263
|
}
|
|
264
|
+
/**
|
|
265
|
+
* Get all managed paths for a platform.
|
|
266
|
+
*/
|
|
267
|
+
export function getPlatformManagedPaths(platformId) {
|
|
268
|
+
return getManagedPaths(platformId);
|
|
269
|
+
}
|
|
215
270
|
/**
|
|
216
271
|
* Get the configure function for a platform
|
|
217
272
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/configurators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/configurators/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/configurators/windsurf.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { getAllWorkflows } from "../templates/windsurf/index.js";
|
|
3
|
+
import { ensureDir, writeFile } from "../utils/file-writer.js";
|
|
4
|
+
/**
|
|
5
|
+
* Configure Windsurf by writing workflow templates.
|
|
6
|
+
*
|
|
7
|
+
* Output:
|
|
8
|
+
* - .windsurf/workflows/<workflow-name>.md
|
|
9
|
+
*/
|
|
10
|
+
export async function configureWindsurf(cwd) {
|
|
11
|
+
const workflowRoot = path.join(cwd, ".windsurf", "workflows");
|
|
12
|
+
ensureDir(workflowRoot);
|
|
13
|
+
for (const workflow of getAllWorkflows()) {
|
|
14
|
+
const targetPath = path.join(workflowRoot, `${workflow.name}.md`);
|
|
15
|
+
await writeFile(targetPath, workflow.content);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=windsurf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/configurators/windsurf.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC9D,SAAS,CAAC,YAAY,CAAC,CAAC;IAExB,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;QAClE,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.4.0-beta.8",
|
|
3
|
+
"description": "Decouple .agents/skills/ as shared Agent Skills layer, add full .codex/ directory support",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Enhancements:**\n- feat(codex): decouple .agents/skills/ as shared Agent Skills layer (agentskills.io standard)\n- feat(codex): add .codex/ directory with config, agents, skills, and SessionStart hooks\n- feat(cli): add branch context to session journal records (#108)\n\n**Bug Fixes:**\n- fix(iflow): revert incorrect --agent flag change from PR #112\n- fix(codex): correct agent TOML format (name + description + developer_instructions)\n\n**Migration:**\n- Auto-upgrade legacy Codex installs (.agents/skills/ without .codex/) on trellis update\n- safe-file-delete for .agents/skills/parallel/ and old trellis-*.toml agents",
|
|
7
|
+
"migrations": [
|
|
8
|
+
{
|
|
9
|
+
"type": "safe-file-delete",
|
|
10
|
+
"from": ".agents/skills/parallel/SKILL.md",
|
|
11
|
+
"description": "Moved to .codex/skills/parallel/ (Codex-specific, not shared)",
|
|
12
|
+
"allowed_hashes": ["b67b30c4e4fe00e5bc6b2f0da078e6cdfc4f082d5660b00b9ce6cfd6308d7dec"]
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"type": "safe-file-delete",
|
|
16
|
+
"from": ".codex/agents/trellis-implementer.toml",
|
|
17
|
+
"description": "Renamed to implement.toml with corrected TOML format",
|
|
18
|
+
"allowed_hashes": ["e2f46f9df38485c5a0cbb562310d326a9a612dc32286bad91494a83d00c7bb3f"]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"type": "safe-file-delete",
|
|
22
|
+
"from": ".codex/agents/trellis-researcher.toml",
|
|
23
|
+
"description": "Renamed to research.toml with corrected TOML format",
|
|
24
|
+
"allowed_hashes": ["dfda47b432b653d29dbe30f07648614e6636b1120ab718b4a640a9b51da90242"]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"type": "safe-file-delete",
|
|
28
|
+
"from": ".codex/agents/trellis-reviewer.toml",
|
|
29
|
+
"description": "Renamed to check.toml with corrected TOML format",
|
|
30
|
+
"allowed_hashes": ["b7ebff2a15c73ccd6d851122a4d202fc02adb9706942acd6601aad614e09ebc9"]
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"notes": "Run `trellis update` to sync. Codex hooks require `features.codex_hooks = true` in ~/.codex/config.toml."
|
|
34
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.4.0-beta.9",
|
|
3
|
+
"description": "Copilot & Windsurf platform support, self-hosted registry, OpenCode dispatch fix, 6-phase task lifecycle",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Enhancements:**\n- feat(copilot): add GitHub Copilot platform support with standalone prompt templates and hook tracking\n- feat(windsurf): add full workflow support for Windsurf IDE — rules, workflows, and AI configuration\n- feat(cli): support self-hosted GitLab/GitHub Enterprise URLs in --registry (#131)\n- feat(cli): statusLine integration for Claude Code (#127)\n- feat(cli): CodeBuddy platform support, Codex agent improvements (#128, #116)\n- refactor(task): update next_action template to 6-phase lifecycle (brainstorm→research→implement→check→update-spec→record-session)\n- refactor: migrate marketplace to standalone repo as submodule (#117)\n\n**Bug Fixes:**\n- fix(opencode): make dispatch wait for child tasks synchronously instead of background polling (#147)\n- fix(hooks): normalize .current-task path refs across platforms (#130)\n- fix(codex): resolve {{PYTHON_CMD}} placeholder in hooks.json for Windows (#132)\n- fix(cli): add_session git-add error handling and Python 3.10 version check\n- fix(cli): support self-hosted GitLab/GHE URL parsing in template-fetcher",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Run `trellis update` to sync. New platforms: `trellis init --platform copilot` or `--platform windsurf`."
|
|
9
|
+
}
|
|
@@ -46,6 +46,7 @@ EOF
|
|
|
46
46
|
**Auto-completes**:
|
|
47
47
|
- [OK] Appends session to journal-N.md
|
|
48
48
|
- [OK] Auto-detects line count, creates new file if >2000 lines
|
|
49
|
+
- [OK] Auto-detects Branch context (`--branch` override; otherwise Branch = task.json -> current git branch; missing values are omitted gracefully)
|
|
49
50
|
- [OK] Updates index.md (Total Sessions +1, Last Active, line stats, history)
|
|
50
51
|
- [OK] Auto-commits .trellis/workspace and .trellis/tasks changes
|
|
51
52
|
|
|
@@ -56,6 +57,6 @@ EOF
|
|
|
56
57
|
| Command | Purpose |
|
|
57
58
|
|---------|---------|
|
|
58
59
|
| `python3 ./.trellis/scripts/get_context.py --mode record` | Get context for record-session |
|
|
59
|
-
| `python3 ./.trellis/scripts/add_session.py --title "..." --commit "..."` | **One-click add session (recommended)** |
|
|
60
|
+
| `python3 ./.trellis/scripts/add_session.py --title "..." --commit "..."` | **One-click add session (recommended, branch auto-complete)** |
|
|
60
61
|
| `python3 ./.trellis/scripts/task.py archive <name>` | Archive completed task (auto-commits) |
|
|
61
62
|
| `python3 ./.trellis/scripts/task.py list` | List active tasks |
|
|
@@ -99,7 +99,14 @@ def get_current_task(repo_root: str) -> str | None:
|
|
|
99
99
|
try:
|
|
100
100
|
with open(current_task_file, "r", encoding="utf-8") as f:
|
|
101
101
|
content = f.read().strip()
|
|
102
|
-
|
|
102
|
+
if not content:
|
|
103
|
+
return None
|
|
104
|
+
normalized = content.replace("\\", "/")
|
|
105
|
+
while normalized.startswith("./"):
|
|
106
|
+
normalized = normalized[2:]
|
|
107
|
+
if normalized.startswith("tasks/"):
|
|
108
|
+
normalized = f".trellis/{normalized}"
|
|
109
|
+
return normalized
|
|
103
110
|
except Exception:
|
|
104
111
|
return None
|
|
105
112
|
|
|
@@ -72,7 +72,14 @@ def get_current_task(repo_root: str) -> str | None:
|
|
|
72
72
|
try:
|
|
73
73
|
with open(current_task_file, "r", encoding="utf-8") as f:
|
|
74
74
|
content = f.read().strip()
|
|
75
|
-
|
|
75
|
+
if not content:
|
|
76
|
+
return None
|
|
77
|
+
normalized = content.replace("\\", "/")
|
|
78
|
+
while normalized.startswith("./"):
|
|
79
|
+
normalized = normalized[2:]
|
|
80
|
+
if normalized.startswith("tasks/"):
|
|
81
|
+
normalized = f".trellis/{normalized}"
|
|
82
|
+
return normalized
|
|
76
83
|
except Exception:
|
|
77
84
|
return None
|
|
78
85
|
|
|
@@ -65,23 +65,47 @@ def run_script(script_path: Path) -> str:
|
|
|
65
65
|
return "No context available"
|
|
66
66
|
|
|
67
67
|
|
|
68
|
+
def _normalize_task_ref(task_ref: str) -> str:
|
|
69
|
+
normalized = task_ref.strip()
|
|
70
|
+
if not normalized:
|
|
71
|
+
return ""
|
|
72
|
+
|
|
73
|
+
path_obj = Path(normalized)
|
|
74
|
+
if path_obj.is_absolute():
|
|
75
|
+
return str(path_obj)
|
|
76
|
+
|
|
77
|
+
normalized = normalized.replace("\\", "/")
|
|
78
|
+
while normalized.startswith("./"):
|
|
79
|
+
normalized = normalized[2:]
|
|
80
|
+
|
|
81
|
+
if normalized.startswith("tasks/"):
|
|
82
|
+
return f".trellis/{normalized}"
|
|
83
|
+
|
|
84
|
+
return normalized
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _resolve_task_dir(trellis_dir: Path, task_ref: str) -> Path:
|
|
88
|
+
normalized = _normalize_task_ref(task_ref)
|
|
89
|
+
path_obj = Path(normalized)
|
|
90
|
+
if path_obj.is_absolute():
|
|
91
|
+
return path_obj
|
|
92
|
+
if normalized.startswith(".trellis/"):
|
|
93
|
+
return trellis_dir.parent / path_obj
|
|
94
|
+
return trellis_dir / "tasks" / path_obj
|
|
95
|
+
|
|
96
|
+
|
|
68
97
|
def _get_task_status(trellis_dir: Path) -> str:
|
|
69
98
|
"""Check current task status and return structured status string."""
|
|
70
99
|
current_task_file = trellis_dir / ".current-task"
|
|
71
100
|
if not current_task_file.is_file():
|
|
72
101
|
return "Status: NO ACTIVE TASK\nNext: Describe what you want to work on"
|
|
73
102
|
|
|
74
|
-
task_ref = current_task_file.read_text(encoding="utf-8").strip()
|
|
103
|
+
task_ref = _normalize_task_ref(current_task_file.read_text(encoding="utf-8").strip())
|
|
75
104
|
if not task_ref:
|
|
76
105
|
return "Status: NO ACTIVE TASK\nNext: Describe what you want to work on"
|
|
77
106
|
|
|
78
107
|
# Resolve task directory
|
|
79
|
-
|
|
80
|
-
task_dir = Path(task_ref)
|
|
81
|
-
elif task_ref.startswith(".trellis/"):
|
|
82
|
-
task_dir = trellis_dir.parent / task_ref
|
|
83
|
-
else:
|
|
84
|
-
task_dir = trellis_dir / "tasks" / task_ref
|
|
108
|
+
task_dir = _resolve_task_dir(trellis_dir, task_ref)
|
|
85
109
|
if not task_dir.is_dir():
|
|
86
110
|
return f"Status: STALE POINTER\nTask: {task_ref}\nNext: Task directory not found. Run: python3 ./.trellis/scripts/task.py finish"
|
|
87
111
|
|