@blxzer/cursor-trellis 0.1.0 → 0.1.2

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.
Files changed (285) hide show
  1. package/README.md +124 -5
  2. package/README.zh-CN.md +170 -0
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +1 -33
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/commands/init.d.ts +0 -13
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +7 -14
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/uninstall.d.ts.map +1 -1
  11. package/dist/commands/uninstall.js +3 -32
  12. package/dist/commands/uninstall.js.map +1 -1
  13. package/dist/commands/update.d.ts.map +1 -1
  14. package/dist/commands/update.js +7 -84
  15. package/dist/commands/update.js.map +1 -1
  16. package/dist/configurators/index.d.ts +7 -8
  17. package/dist/configurators/index.d.ts.map +1 -1
  18. package/dist/configurators/index.js +11 -236
  19. package/dist/configurators/index.js.map +1 -1
  20. package/dist/configurators/workflow.d.ts.map +1 -1
  21. package/dist/configurators/workflow.js +5 -1
  22. package/dist/configurators/workflow.js.map +1 -1
  23. package/dist/migrations/manifests/0.1.1.json +9 -0
  24. package/dist/migrations/manifests/0.1.2.json +9 -0
  25. package/dist/templates/common/bundled-skills/smart-search-cli/SKILL.md +3 -3
  26. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +4 -2
  27. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +8 -15
  28. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +7 -7
  29. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +18 -21
  30. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +2 -2
  31. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +10 -7
  32. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +4 -4
  33. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +20 -31
  34. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +20 -31
  35. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +24 -40
  36. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +28 -59
  37. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +12 -28
  38. package/dist/templates/common/bundled-skills/trellis-skill-creator/references/trellis-skill-locations.md +2 -2
  39. package/dist/templates/cursor/hooks.json +6 -0
  40. package/dist/templates/cursor/rules/retrieval-routing.mdc +57 -0
  41. package/dist/templates/extract.d.ts +0 -14
  42. package/dist/templates/extract.d.ts.map +1 -1
  43. package/dist/templates/extract.js +0 -34
  44. package/dist/templates/extract.js.map +1 -1
  45. package/dist/templates/markdown/agents.md +2 -6
  46. package/dist/templates/markdown/index.d.ts +1 -0
  47. package/dist/templates/markdown/index.d.ts.map +1 -1
  48. package/dist/templates/markdown/index.js +1 -0
  49. package/dist/templates/markdown/index.js.map +1 -1
  50. package/dist/templates/markdown/prompts/run-semantic-slice-12.md.txt +41 -0
  51. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +14 -14
  52. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +8 -20
  53. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +15 -14
  54. package/dist/templates/markdown/spec/guides/cursor-context-injection-guide.md.txt +4 -2
  55. package/dist/templates/markdown/spec/guides/cursor-semantic-compliance.md.txt +49 -0
  56. package/dist/templates/markdown/spec/guides/cursor-subagent-policy.md.txt +18 -5
  57. package/dist/templates/markdown/spec/guides/retrieval-daily-guide.md.txt +68 -20
  58. package/dist/templates/shared-hooks/index.d.ts +1 -1
  59. package/dist/templates/shared-hooks/index.d.ts.map +1 -1
  60. package/dist/templates/shared-hooks/index.js +1 -0
  61. package/dist/templates/shared-hooks/index.js.map +1 -1
  62. package/dist/templates/shared-hooks/inject-retrieval-plan.py +163 -0
  63. package/dist/templates/shared-hooks/inject-subagent-context.py +31 -567
  64. package/dist/templates/shared-hooks/research-end-retrieval-pack.py +2 -11
  65. package/dist/templates/trellis/index.d.ts +12 -0
  66. package/dist/templates/trellis/index.d.ts.map +1 -1
  67. package/dist/templates/trellis/index.js +24 -0
  68. package/dist/templates/trellis/index.js.map +1 -1
  69. package/dist/templates/trellis/scripts/aggregate_retrieval_telemetry.py +342 -0
  70. package/dist/templates/trellis/scripts/batch_plan_envelope.py +105 -0
  71. package/dist/templates/trellis/scripts/codegraph_session_smoke.py +76 -0
  72. package/dist/templates/trellis/scripts/common/active_task.py +116 -147
  73. package/dist/templates/trellis/scripts/common/cli_adapter.py +34 -710
  74. package/dist/templates/trellis/scripts/common/codebase_retrieval_router.py +49 -106
  75. package/dist/templates/trellis/scripts/common/git_context.py +17 -2
  76. package/dist/templates/trellis/scripts/common/project_file_stats.py +91 -0
  77. package/dist/templates/trellis/scripts/common/retrieval_adapter_metadata.py +9 -11
  78. package/dist/templates/trellis/scripts/common/retrieval_agent_instructions.py +313 -0
  79. package/dist/templates/trellis/scripts/common/retrieval_pack.py +0 -6
  80. package/dist/templates/trellis/scripts/common/retrieval_pack_context.py +0 -4
  81. package/dist/templates/trellis/scripts/common/retrieval_plan_gate.py +76 -0
  82. package/dist/templates/trellis/scripts/common/retrieval_result_ranking.py +253 -0
  83. package/dist/templates/trellis/scripts/common/retrieval_tool_classification.py +157 -0
  84. package/dist/templates/trellis/scripts/common/semantic_plan_gate.py +52 -0
  85. package/dist/templates/trellis/scripts/common/subagent_dispatch.py +527 -0
  86. package/dist/templates/trellis/scripts/common/task_store.py +32 -0
  87. package/dist/templates/trellis/scripts/common/workflow_phase.py +3 -24
  88. package/dist/templates/trellis/scripts/rank_retrieval_candidates.py +80 -0
  89. package/dist/templates/trellis/scripts/route_codebase_retrieval.py +38 -11
  90. package/dist/templates/trellis/scripts/score_evidence.py +112 -0
  91. package/dist/templates/trellis/scripts/task.py +26 -0
  92. package/dist/templates/trellis/workflow.md +844 -960
  93. package/dist/types/ai-tools.d.ts +13 -16
  94. package/dist/types/ai-tools.d.ts.map +1 -1
  95. package/dist/types/ai-tools.js +5 -238
  96. package/dist/types/ai-tools.js.map +1 -1
  97. package/dist/utils/codebase-retrieval-router.d.ts +1 -8
  98. package/dist/utils/codebase-retrieval-router.d.ts.map +1 -1
  99. package/dist/utils/codebase-retrieval-router.js +39 -180
  100. package/dist/utils/codebase-retrieval-router.js.map +1 -1
  101. package/dist/utils/project-capabilities.d.ts.map +1 -1
  102. package/dist/utils/project-capabilities.js +10 -24
  103. package/dist/utils/project-capabilities.js.map +1 -1
  104. package/dist/utils/retrieval-agent-instructions.d.ts +14 -0
  105. package/dist/utils/retrieval-agent-instructions.d.ts.map +1 -0
  106. package/dist/utils/retrieval-agent-instructions.js +221 -0
  107. package/dist/utils/retrieval-agent-instructions.js.map +1 -0
  108. package/dist/utils/retrieval-execution-telemetry.d.ts +43 -85
  109. package/dist/utils/retrieval-execution-telemetry.d.ts.map +1 -1
  110. package/dist/utils/retrieval-execution-telemetry.js +289 -22
  111. package/dist/utils/retrieval-execution-telemetry.js.map +1 -1
  112. package/dist/utils/retrieval-result-ranking.js +1 -1
  113. package/dist/utils/retrieval-result-ranking.js.map +1 -1
  114. package/dist/utils/retrieval-tool-classification.d.ts +32 -0
  115. package/dist/utils/retrieval-tool-classification.d.ts.map +1 -0
  116. package/dist/utils/retrieval-tool-classification.js +113 -0
  117. package/dist/utils/retrieval-tool-classification.js.map +1 -0
  118. package/dist/utils/uninstall-scrubbers.d.ts +0 -36
  119. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
  120. package/dist/utils/uninstall-scrubbers.js +0 -184
  121. package/dist/utils/uninstall-scrubbers.js.map +1 -1
  122. package/package.json +4 -2
  123. package/dist/commands/mem.d.ts +0 -30
  124. package/dist/commands/mem.d.ts.map +0 -1
  125. package/dist/commands/mem.js +0 -424
  126. package/dist/commands/mem.js.map +0 -1
  127. package/dist/configurators/antigravity.d.ts +0 -7
  128. package/dist/configurators/antigravity.d.ts.map +0 -1
  129. package/dist/configurators/antigravity.js +0 -19
  130. package/dist/configurators/antigravity.js.map +0 -1
  131. package/dist/configurators/claude.d.ts +0 -9
  132. package/dist/configurators/claude.d.ts.map +0 -1
  133. package/dist/configurators/claude.js +0 -72
  134. package/dist/configurators/claude.js.map +0 -1
  135. package/dist/configurators/codebuddy.d.ts +0 -10
  136. package/dist/configurators/codebuddy.d.ts.map +0 -1
  137. package/dist/configurators/codebuddy.js +0 -30
  138. package/dist/configurators/codebuddy.js.map +0 -1
  139. package/dist/configurators/codex.d.ts +0 -8
  140. package/dist/configurators/codex.d.ts.map +0 -1
  141. package/dist/configurators/codex.js +0 -87
  142. package/dist/configurators/codex.js.map +0 -1
  143. package/dist/configurators/copilot.d.ts +0 -10
  144. package/dist/configurators/copilot.d.ts.map +0 -1
  145. package/dist/configurators/copilot.js +0 -51
  146. package/dist/configurators/copilot.js.map +0 -1
  147. package/dist/configurators/droid.d.ts +0 -10
  148. package/dist/configurators/droid.d.ts.map +0 -1
  149. package/dist/configurators/droid.js +0 -30
  150. package/dist/configurators/droid.js.map +0 -1
  151. package/dist/configurators/gemini.d.ts +0 -16
  152. package/dist/configurators/gemini.d.ts.map +0 -1
  153. package/dist/configurators/gemini.js +0 -38
  154. package/dist/configurators/gemini.js.map +0 -1
  155. package/dist/configurators/kilo.d.ts +0 -7
  156. package/dist/configurators/kilo.d.ts.map +0 -1
  157. package/dist/configurators/kilo.js +0 -19
  158. package/dist/configurators/kilo.js.map +0 -1
  159. package/dist/configurators/kiro.d.ts +0 -8
  160. package/dist/configurators/kiro.d.ts.map +0 -1
  161. package/dist/configurators/kiro.js +0 -24
  162. package/dist/configurators/kiro.js.map +0 -1
  163. package/dist/configurators/opencode.d.ts +0 -14
  164. package/dist/configurators/opencode.d.ts.map +0 -1
  165. package/dist/configurators/opencode.js +0 -96
  166. package/dist/configurators/opencode.js.map +0 -1
  167. package/dist/configurators/pi.d.ts +0 -3
  168. package/dist/configurators/pi.d.ts.map +0 -1
  169. package/dist/configurators/pi.js +0 -45
  170. package/dist/configurators/pi.js.map +0 -1
  171. package/dist/configurators/qoder.d.ts +0 -11
  172. package/dist/configurators/qoder.d.ts.map +0 -1
  173. package/dist/configurators/qoder.js +0 -31
  174. package/dist/configurators/qoder.js.map +0 -1
  175. package/dist/configurators/windsurf.d.ts +0 -7
  176. package/dist/configurators/windsurf.d.ts.map +0 -1
  177. package/dist/configurators/windsurf.js +0 -19
  178. package/dist/configurators/windsurf.js.map +0 -1
  179. package/dist/templates/claude/agents/trellis-check.md +0 -124
  180. package/dist/templates/claude/agents/trellis-implement.md +0 -110
  181. package/dist/templates/claude/agents/trellis-research.md +0 -137
  182. package/dist/templates/claude/index.d.ts +0 -22
  183. package/dist/templates/claude/index.d.ts.map +0 -1
  184. package/dist/templates/claude/index.js +0 -46
  185. package/dist/templates/claude/index.js.map +0 -1
  186. package/dist/templates/claude/settings.json +0 -84
  187. package/dist/templates/codebuddy/agents/trellis-check.md +0 -115
  188. package/dist/templates/codebuddy/agents/trellis-implement.md +0 -110
  189. package/dist/templates/codebuddy/agents/trellis-research.md +0 -137
  190. package/dist/templates/codebuddy/index.d.ts +0 -15
  191. package/dist/templates/codebuddy/index.d.ts.map +0 -1
  192. package/dist/templates/codebuddy/index.js +0 -15
  193. package/dist/templates/codebuddy/index.js.map +0 -1
  194. package/dist/templates/codebuddy/settings.json +0 -70
  195. package/dist/templates/codex/agents/trellis-check.toml +0 -67
  196. package/dist/templates/codex/agents/trellis-implement.toml +0 -40
  197. package/dist/templates/codex/agents/trellis-research.toml +0 -73
  198. package/dist/templates/codex/config.toml +0 -28
  199. package/dist/templates/codex/hooks/session-start.py +0 -575
  200. package/dist/templates/codex/hooks.json +0 -15
  201. package/dist/templates/codex/index.d.ts +0 -39
  202. package/dist/templates/codex/index.d.ts.map +0 -1
  203. package/dist/templates/codex/index.js +0 -85
  204. package/dist/templates/codex/index.js.map +0 -1
  205. package/dist/templates/codex/skills/before-dev/SKILL.md +0 -40
  206. package/dist/templates/codex/skills/brainstorm/SKILL.md +0 -112
  207. package/dist/templates/codex/skills/break-loop/SKILL.md +0 -130
  208. package/dist/templates/codex/skills/check/SKILL.md +0 -98
  209. package/dist/templates/codex/skills/check-cross-layer/SKILL.md +0 -158
  210. package/dist/templates/codex/skills/create-command/SKILL.md +0 -101
  211. package/dist/templates/codex/skills/finish-work/SKILL.md +0 -90
  212. package/dist/templates/codex/skills/improve-ut/SKILL.md +0 -69
  213. package/dist/templates/codex/skills/integrate-skill/SKILL.md +0 -221
  214. package/dist/templates/codex/skills/onboard/SKILL.md +0 -363
  215. package/dist/templates/codex/skills/record-session/SKILL.md +0 -67
  216. package/dist/templates/codex/skills/start/SKILL.md +0 -66
  217. package/dist/templates/codex/skills/update-spec/SKILL.md +0 -335
  218. package/dist/templates/copilot/hooks/session-start.py +0 -557
  219. package/dist/templates/copilot/hooks.json +0 -19
  220. package/dist/templates/copilot/index.d.ts +0 -23
  221. package/dist/templates/copilot/index.d.ts.map +0 -1
  222. package/dist/templates/copilot/index.js +0 -54
  223. package/dist/templates/copilot/index.js.map +0 -1
  224. package/dist/templates/copilot/prompts/before-dev.prompt.md +0 -39
  225. package/dist/templates/copilot/prompts/brainstorm.prompt.md +0 -111
  226. package/dist/templates/copilot/prompts/break-loop.prompt.md +0 -129
  227. package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +0 -157
  228. package/dist/templates/copilot/prompts/check.prompt.md +0 -97
  229. package/dist/templates/copilot/prompts/create-command.prompt.md +0 -116
  230. package/dist/templates/copilot/prompts/finish-work.prompt.md +0 -99
  231. package/dist/templates/copilot/prompts/integrate-skill.prompt.md +0 -223
  232. package/dist/templates/copilot/prompts/onboard.prompt.md +0 -362
  233. package/dist/templates/copilot/prompts/parallel.prompt.md +0 -204
  234. package/dist/templates/copilot/prompts/record-session.prompt.md +0 -66
  235. package/dist/templates/copilot/prompts/start.prompt.md +0 -63
  236. package/dist/templates/copilot/prompts/update-spec.prompt.md +0 -358
  237. package/dist/templates/droid/droids/trellis-check.md +0 -107
  238. package/dist/templates/droid/droids/trellis-implement.md +0 -102
  239. package/dist/templates/droid/droids/trellis-research.md +0 -137
  240. package/dist/templates/droid/index.d.ts +0 -15
  241. package/dist/templates/droid/index.d.ts.map +0 -1
  242. package/dist/templates/droid/index.js +0 -15
  243. package/dist/templates/droid/index.js.map +0 -1
  244. package/dist/templates/droid/settings.json +0 -70
  245. package/dist/templates/gemini/agents/trellis-check.md +0 -107
  246. package/dist/templates/gemini/agents/trellis-implement.md +0 -102
  247. package/dist/templates/gemini/agents/trellis-research.md +0 -136
  248. package/dist/templates/gemini/index.d.ts +0 -13
  249. package/dist/templates/gemini/index.d.ts.map +0 -1
  250. package/dist/templates/gemini/index.js +0 -13
  251. package/dist/templates/gemini/index.js.map +0 -1
  252. package/dist/templates/gemini/settings.json +0 -28
  253. package/dist/templates/kiro/agents/trellis-check.json +0 -26
  254. package/dist/templates/kiro/agents/trellis-implement.json +0 -26
  255. package/dist/templates/kiro/agents/trellis-research.json +0 -30
  256. package/dist/templates/kiro/index.d.ts +0 -18
  257. package/dist/templates/kiro/index.d.ts.map +0 -1
  258. package/dist/templates/kiro/index.js +0 -18
  259. package/dist/templates/kiro/index.js.map +0 -1
  260. package/dist/templates/opencode/agents/trellis-check.md +0 -122
  261. package/dist/templates/opencode/agents/trellis-implement.md +0 -118
  262. package/dist/templates/opencode/agents/trellis-research.md +0 -145
  263. package/dist/templates/opencode/lib/session-utils.js +0 -667
  264. package/dist/templates/opencode/lib/trellis-context.js +0 -336
  265. package/dist/templates/opencode/package.json +0 -5
  266. package/dist/templates/opencode/plugins/inject-subagent-context.js +0 -495
  267. package/dist/templates/opencode/plugins/inject-workflow-state.js +0 -159
  268. package/dist/templates/opencode/plugins/session-start.js +0 -101
  269. package/dist/templates/pi/agents/trellis-check.md +0 -37
  270. package/dist/templates/pi/agents/trellis-implement.md +0 -42
  271. package/dist/templates/pi/agents/trellis-research.md +0 -25
  272. package/dist/templates/pi/extensions/trellis/index.ts.txt +0 -1600
  273. package/dist/templates/pi/index.d.ts +0 -5
  274. package/dist/templates/pi/index.d.ts.map +0 -1
  275. package/dist/templates/pi/index.js +0 -12
  276. package/dist/templates/pi/index.js.map +0 -1
  277. package/dist/templates/pi/settings.json +0 -12
  278. package/dist/templates/qoder/agents/trellis-check.md +0 -108
  279. package/dist/templates/qoder/agents/trellis-implement.md +0 -103
  280. package/dist/templates/qoder/agents/trellis-research.md +0 -137
  281. package/dist/templates/qoder/index.d.ts +0 -15
  282. package/dist/templates/qoder/index.d.ts.map +0 -1
  283. package/dist/templates/qoder/index.js +0 -15
  284. package/dist/templates/qoder/index.js.map +0 -1
  285. package/dist/templates/qoder/settings.json +0 -47
@@ -1,424 +0,0 @@
1
- /**
2
- * mem.ts — CLI wrapper over `@blxzer/cursor-trellis-core/mem`.
3
- *
4
- * The reusable retrieval / context-extraction logic lives in core; this file
5
- * owns only CLI concerns: argument parsing, terminal rendering, the OpenCode
6
- * "reader unavailable" notice, and process exit behavior.
7
- *
8
- * Commands:
9
- * list list sessions (default if no command)
10
- * search <keyword> find sessions whose contents match keyword
11
- * context <session-id> drill-down: top-N hit turns + surrounding context
12
- * extract <session-id> dump cleaned dialogue (use --grep KW to filter turns)
13
- * projects list active project cwds (AI-routing entry point)
14
- *
15
- * Run `trellis mem help` for the full flag reference.
16
- */
17
- import * as os from "node:os";
18
- import * as path from "node:path";
19
- import { extractMemDialogue, listMemProjects, listMemSessions, MemSessionNotFoundError, readMemContext, searchMemSessions, } from "@blxzer/cursor-trellis-core/mem";
20
- export function parseArgv(argv) {
21
- const cmd = argv[0] ?? "list";
22
- const positional = [];
23
- const flags = {};
24
- for (let i = 1; i < argv.length; i++) {
25
- const a = argv[i];
26
- if (a === undefined)
27
- continue;
28
- if (a.startsWith("--")) {
29
- const key = a.slice(2);
30
- const next = argv[i + 1];
31
- if (next !== undefined && !next.startsWith("--")) {
32
- flags[key] = next;
33
- i++;
34
- }
35
- else {
36
- flags[key] = true;
37
- }
38
- }
39
- else {
40
- positional.push(a);
41
- }
42
- }
43
- return { cmd, positional, flags };
44
- }
45
- const VALID_PLATFORMS = [
46
- "claude",
47
- "codex",
48
- "opencode",
49
- "all",
50
- ];
51
- /** Translate parsed CLI flags into a core `MemFilter`. Validation failures
52
- * exit the process — core never sees raw CLI flags. */
53
- export function buildFilter(flags) {
54
- const platformRaw = typeof flags.platform === "string" ? flags.platform : "all";
55
- if (!VALID_PLATFORMS.includes(platformRaw))
56
- die(`unknown platform: ${platformRaw}`);
57
- const platform = platformRaw;
58
- const sinceRaw = flags.since;
59
- const since = typeof sinceRaw === "string" ? new Date(sinceRaw) : undefined;
60
- if (since && Number.isNaN(+since))
61
- die(`bad --since: ${String(sinceRaw)}`);
62
- const untilRaw = flags.until;
63
- const until = typeof untilRaw === "string"
64
- ? new Date(`${untilRaw}T23:59:59.999Z`)
65
- : undefined;
66
- if (until && Number.isNaN(+until))
67
- die(`bad --until: ${String(untilRaw)}`);
68
- const cwd = flags.global
69
- ? undefined
70
- : path.resolve(typeof flags.cwd === "string" ? flags.cwd : process.cwd());
71
- const limit = parseOptionalNumberFlag(flags.limit, "--limit", 50);
72
- return { platform, since, until, cwd, limit };
73
- }
74
- function parseOptionalNumberFlag(raw, name, fallback) {
75
- if (raw === undefined || raw === false)
76
- return fallback;
77
- if (typeof raw !== "string")
78
- die(`${name} requires a number`);
79
- const value = Number(raw);
80
- if (!Number.isFinite(value))
81
- die(`bad ${name}: ${raw}`);
82
- return value;
83
- }
84
- function die(msg) {
85
- console.error(`error: ${msg}`);
86
- process.exit(2);
87
- }
88
- // ---------- OpenCode reader notice ----------
89
- //
90
- // OpenCode 1.2+ moved to a SQLite store; the native dependency was reverted in
91
- // 0.6.0-beta.4 due to install failures. Core's OpenCode adapter is a silent
92
- // no-op — surfacing the degraded state is a CLI presentation concern, emitted
93
- // once per process whenever the OpenCode source is in scope.
94
- let opencodeWarned = false;
95
- function warnOpencodeUnavailable() {
96
- if (opencodeWarned)
97
- return;
98
- opencodeWarned = true;
99
- process.stderr.write("⚠️ tl mem: OpenCode platform reader is temporarily unavailable in this build.\n" +
100
- " OpenCode 1.2+ moved to SQLite; the native dependency was reverted in\n" +
101
- " 0.6.0-beta.4 due to install failures. Re-enabled in a future release.\n");
102
- }
103
- function maybeWarnOpencode(f) {
104
- if (f.platform === "all" || f.platform === "opencode")
105
- warnOpencodeUnavailable();
106
- }
107
- // ---------- formatting ----------
108
- const HOME = os.homedir();
109
- export function shortDate(iso) {
110
- if (!iso)
111
- return " ";
112
- return iso.slice(0, 16).replace("T", " ");
113
- }
114
- export function shortPath(p) {
115
- if (!p)
116
- return "(no cwd)";
117
- return p.replace(HOME, "~");
118
- }
119
- function printSessions(rows) {
120
- if (rows.length === 0) {
121
- console.log("(no sessions)");
122
- return;
123
- }
124
- for (const s of rows) {
125
- const id = s.id.length > 12 ? s.id.slice(0, 12) : s.id.padEnd(12);
126
- const parentTag = s.parent_id
127
- ? ` ↳ child of ${s.parent_id.slice(0, 12)}`
128
- : "";
129
- console.log(`[${s.platform.padEnd(8)}] ${shortDate(s.updated ?? s.created)} ${id} ${shortPath(s.cwd)}` +
130
- (s.title ? ` — ${s.title}` : "") +
131
- parentTag);
132
- }
133
- }
134
- // ---------- commands ----------
135
- function cmdList(argv) {
136
- const f = buildFilter(argv.flags);
137
- maybeWarnOpencode(f);
138
- const rows = listMemSessions({ filter: f });
139
- if (argv.flags.json) {
140
- console.log(JSON.stringify(rows, null, 2));
141
- return;
142
- }
143
- console.log(`scope: ${f.cwd ? `project=${shortPath(f.cwd)}` : "global"} platform=${f.platform}` +
144
- (f.since ? ` since=${f.since.toISOString().slice(0, 10)}` : "") +
145
- (f.until ? ` until=${f.until.toISOString().slice(0, 10)}` : ""));
146
- printSessions(rows);
147
- console.log(`\n${rows.length} session(s)`);
148
- }
149
- function cmdSearch(argv) {
150
- const kw = argv.positional[0];
151
- if (!kw)
152
- die("usage: search <keyword>");
153
- const f = buildFilter(argv.flags);
154
- maybeWarnOpencode(f);
155
- const includeChildren = argv.flags["include-children"] === true;
156
- const result = searchMemSessions({
157
- keyword: kw,
158
- filter: f,
159
- includeChildren,
160
- });
161
- const top = result.matches;
162
- if (argv.flags.json) {
163
- console.log(JSON.stringify(top.map((m) => ({
164
- session: m.session,
165
- score: Number(m.score.toFixed(4)),
166
- hit_count: m.hit.count,
167
- user_count: m.hit.userCount,
168
- asst_count: m.hit.asstCount,
169
- total_turns: m.hit.totalTurns,
170
- descendants_merged: includeChildren ? m.descendantsMerged : 0,
171
- excerpts: m.hit.excerpts,
172
- })), null, 2));
173
- return;
174
- }
175
- console.log(`scope: ${f.cwd ? `project=${shortPath(f.cwd)}` : "global"} keyword="${kw}" platform=${f.platform}` +
176
- (includeChildren ? ` include-children=on` : ""));
177
- if (top.length === 0) {
178
- console.log("(no matches)");
179
- return;
180
- }
181
- for (const m of top) {
182
- const s = m.session;
183
- const idShort = s.id.slice(0, 12);
184
- const score = m.score.toFixed(3);
185
- const childTag = includeChildren && m.descendantsMerged > 0
186
- ? ` +${m.descendantsMerged} child`
187
- : "";
188
- console.log(`\n[${s.platform.padEnd(8)}] ${shortDate(s.updated ?? s.created)} ${idShort} ${shortPath(s.cwd)}` +
189
- ` score=${score} hits=${m.hit.count} (u=${m.hit.userCount},a=${m.hit.asstCount}) turns=${m.hit.totalTurns}${childTag}` +
190
- (s.title ? ` — ${s.title}` : ""));
191
- for (const ex of m.hit.excerpts) {
192
- console.log(` [${ex.role}] ${ex.snippet}`);
193
- }
194
- }
195
- console.log(`\n${top.length} session(s)${result.totalMatches > top.length ? ` (of ${result.totalMatches})` : ""}`);
196
- }
197
- function cmdProjects(argv) {
198
- // Distinct cwds across all platforms with last-active timestamp + per-platform
199
- // session counts. AI calls this first to learn which project paths have
200
- // recent activity, then picks one for `--cwd` in a follow-up `search`.
201
- const f = buildFilter({ ...argv.flags, global: true });
202
- maybeWarnOpencode(f);
203
- const rows = listMemProjects({ filter: f });
204
- const limit = parseOptionalNumberFlag(argv.flags.limit, "--limit", 30);
205
- const top = rows.slice(0, limit);
206
- if (argv.flags.json) {
207
- console.log(JSON.stringify(top, null, 2));
208
- return;
209
- }
210
- console.log(`active projects` +
211
- (f.since ? ` since=${f.since.toISOString().slice(0, 10)}` : "") +
212
- (f.until ? ` until=${f.until.toISOString().slice(0, 10)}` : ""));
213
- if (top.length === 0) {
214
- console.log("(none)");
215
- return;
216
- }
217
- for (const r of top) {
218
- const parts = Object.entries(r.by_platform)
219
- .filter(([, n]) => n > 0)
220
- .map(([p, n]) => `${p}:${n}`)
221
- .join(" ");
222
- console.log(`${shortDate(r.last_active)} sessions=${r.sessions.toString().padStart(3)} (${parts}) ${shortPath(r.cwd)}`);
223
- }
224
- console.log(`\n${top.length} project(s)${rows.length > top.length ? ` (of ${rows.length})` : ""}`);
225
- }
226
- function cmdContext(argv) {
227
- // Drill-down step 2 in the search workflow: `search <kw>` picks a session,
228
- // then `context <id> --grep <kw>` returns top-N hit turns with surrounding
229
- // context, token-budgeted for AI consumption. Without --grep: first N turns.
230
- const id = argv.positional[0];
231
- if (!id)
232
- die("usage: context <session-id> [--grep KW] [--turns N] [--around M]");
233
- const f = buildFilter(argv.flags);
234
- maybeWarnOpencode(f);
235
- const grepRaw = argv.flags.grep;
236
- const grep = typeof grepRaw === "string" ? grepRaw : undefined;
237
- if (grep?.split(/\s+/).filter(Boolean).length === 0)
238
- die("--grep requires non-empty value");
239
- const nTurns = parseOptionalNumberFlag(argv.flags.turns, "--turns", 3);
240
- const around = parseOptionalNumberFlag(argv.flags.around, "--around", 1);
241
- const maxChars = parseOptionalNumberFlag(argv.flags["max-chars"], "--max-chars", 6000);
242
- const includeChildren = argv.flags["include-children"] === true;
243
- let result;
244
- try {
245
- result = readMemContext({
246
- sessionId: id,
247
- filter: f,
248
- grep,
249
- turns: nTurns,
250
- around,
251
- maxChars,
252
- includeChildren,
253
- });
254
- }
255
- catch (error) {
256
- if (error instanceof MemSessionNotFoundError)
257
- die(`session not found: ${id}`);
258
- throw error;
259
- }
260
- const s = result.session;
261
- if (argv.flags.json) {
262
- console.log(JSON.stringify({
263
- session: s,
264
- query: result.query,
265
- total_turns: result.totalTurns,
266
- total_hit_turns: result.totalHitTurns,
267
- merged_children: result.mergedChildren,
268
- turns: result.turns.map((t) => ({
269
- idx: t.idx,
270
- role: t.role,
271
- text: t.text,
272
- is_hit: t.isHit,
273
- })),
274
- }, null, 2));
275
- return;
276
- }
277
- // `hitIndices.length` from the legacy implementation — recomputed here for
278
- // the human-readable header only.
279
- const shown = grep
280
- ? Math.min(result.totalHitTurns, nTurns)
281
- : Math.min(nTurns, result.totalTurns);
282
- console.log(`# context: [${s.platform}] ${s.id}`);
283
- if (s.title)
284
- console.log(`# title: ${s.title}`);
285
- if (s.cwd)
286
- console.log(`# cwd: ${shortPath(s.cwd)}`);
287
- if (grep)
288
- console.log(`# query: "${grep}" hit_turns=${result.totalHitTurns} showing top ${shown}`);
289
- else
290
- console.log(`# no grep — showing first ${shown} turns of ${result.totalTurns}`);
291
- if (result.mergedChildren > 0)
292
- console.log(`# merged_children: ${result.mergedChildren}`);
293
- console.log(`# turns shown: ${result.turns.length} budget_used: ${result.budgetUsed}/${result.maxChars} chars`);
294
- console.log("");
295
- for (const t of result.turns) {
296
- const marker = t.isHit ? " ← hit" : "";
297
- console.log(`## turn ${t.idx} (${t.role})${marker}\n`);
298
- console.log(t.text);
299
- console.log("\n---\n");
300
- }
301
- }
302
- function parsePhaseFlag(raw) {
303
- if (raw === undefined || raw === false)
304
- return "all";
305
- if (raw === "brainstorm" || raw === "implement" || raw === "all")
306
- return raw;
307
- die(`unknown --phase: ${String(raw)} (expected brainstorm|implement|all)`);
308
- }
309
- function cmdExtract(argv) {
310
- const id = argv.positional[0];
311
- if (!id)
312
- die("usage: extract <session-id>");
313
- const f = buildFilter(argv.flags);
314
- maybeWarnOpencode(f);
315
- const phase = parsePhaseFlag(argv.flags.phase);
316
- const grepRaw = argv.flags.grep;
317
- const grep = typeof grepRaw === "string" ? grepRaw.toLowerCase() : undefined;
318
- let result;
319
- try {
320
- result = extractMemDialogue({ sessionId: id, filter: f, phase, grep });
321
- }
322
- catch (error) {
323
- if (error instanceof MemSessionNotFoundError)
324
- die(`session not found: ${id}`);
325
- throw error;
326
- }
327
- for (const w of result.warnings)
328
- console.error(`warning: ${w.message}`);
329
- const s = result.session;
330
- if (argv.flags.json) {
331
- console.log(JSON.stringify({
332
- session: s,
333
- phase: result.phase,
334
- windows: result.windows,
335
- total_turns: result.totalTurns,
336
- groups: result.groups,
337
- turns: result.turns,
338
- }, null, 2));
339
- return;
340
- }
341
- console.log(`# session: [${s.platform}] ${s.id}`);
342
- if (s.title)
343
- console.log(`# title: ${s.title}`);
344
- if (s.cwd)
345
- console.log(`# cwd: ${shortPath(s.cwd)}`);
346
- if (s.created)
347
- console.log(`# date: ${shortDate(s.created)}`);
348
- console.log(`# phase: ${result.phase} turns: ${result.turns.length}/${result.totalTurns}` +
349
- (grep ? ` (filtered by /${grep}/)` : "") +
350
- (result.windows.length > 0 ? ` windows: ${result.windows.length}` : ""));
351
- console.log("");
352
- for (const g of result.groups) {
353
- if (g.label !== null)
354
- console.log(`--- task: ${g.label} ---\n`);
355
- for (const t of g.turns) {
356
- console.log(`## ${t.role === "user" ? "Human" : "Assistant"}\n`);
357
- console.log(t.text);
358
- console.log("\n---\n");
359
- }
360
- }
361
- }
362
- function cmdHelp() {
363
- console.log(`trellis mem — list/search Claude/Codex/OpenCode sessions
364
-
365
- commands:
366
- list list sessions (default if no command)
367
- search <keyword> find sessions whose contents match keyword
368
- context <session-id> drill-down: top-N hit turns + surrounding context
369
- (paired with search; use --grep KW to anchor)
370
- extract <session-id> dump cleaned dialogue (use --grep KW to filter turns)
371
- projects list active projects (cwds) with session counts —
372
- use this to discover which --cwd to pass to search
373
-
374
- flags:
375
- --platform claude|codex|opencode|all default all
376
- --since YYYY-MM-DD inclusive lower bound
377
- --until YYYY-MM-DD inclusive upper bound
378
- --global include all projects (default: cwd-scoped)
379
- --cwd <path> override the project cwd
380
- --limit N cap output (default 50)
381
- --grep KW extract / context: filter turns by keyword (multi-token AND)
382
- --phase brainstorm|implement|all extract: slice by Trellis brainstorm windows
383
- (default all; brainstorm = [task.py create, task.py start-execution --approved);
384
- Claude/Codex supported; OpenCode warns + returns all)
385
- --turns N context: number of hit turns to return (default 3)
386
- --around N context: turns of surrounding context per hit (default 1)
387
- --max-chars N context: total char budget (default 6000, ~1500 tokens)
388
- --include-children search / context: merge OpenCode sub-agent sessions into parent
389
- --json emit JSON
390
- --help, -h show this help
391
-
392
- examples:
393
- trellis mem list
394
- trellis mem list --global --platform claude --since 2026-04-01
395
- trellis mem search "session insight" --global
396
- trellis mem extract 5842592d --grep memory
397
- trellis mem extract 5842592d --phase brainstorm
398
- `);
399
- }
400
- // ---------- entry ----------
401
- export function runMem(args) {
402
- const argv = parseArgv(args);
403
- if (argv.flags.help ||
404
- argv.flags.h ||
405
- argv.cmd === "help" ||
406
- argv.cmd === "--help") {
407
- return cmdHelp();
408
- }
409
- switch (argv.cmd) {
410
- case "list":
411
- return cmdList(argv);
412
- case "search":
413
- return cmdSearch(argv);
414
- case "extract":
415
- return cmdExtract(argv);
416
- case "context":
417
- return cmdContext(argv);
418
- case "projects":
419
- return cmdProjects(argv);
420
- default:
421
- die(`unknown command: ${argv.cmd} (try 'help')`);
422
- }
423
- }
424
- //# sourceMappingURL=mem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mem.js","sourceRoot":"","sources":["../../src/commands/mem.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Configure Antigravity:
3
- * - workflows/ — start + finish-work as slash commands
4
- * - skills/trellis-{name}/SKILL.md — other 5 as auto-triggered skills
5
- */
6
- export declare function configureAntigravity(cwd: string): Promise<void>;
7
- //# sourceMappingURL=antigravity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../src/configurators/antigravity.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE"}
@@ -1,19 +0,0 @@
1
- import path from "node:path";
2
- import { AI_TOOLS } from "../types/ai-tools.js";
3
- import { ensureDir, writeFile } from "../utils/file-writer.js";
4
- import { resolveBundledSkills, resolveCommands, resolveSkills, writeSkills, } from "./shared.js";
5
- /**
6
- * Configure Antigravity:
7
- * - workflows/ — start + finish-work as slash commands
8
- * - skills/trellis-{name}/SKILL.md — other 5 as auto-triggered skills
9
- */
10
- export async function configureAntigravity(cwd) {
11
- const ctx = AI_TOOLS.antigravity.templateContext;
12
- const workflowsDir = path.join(cwd, ".agent", "workflows");
13
- ensureDir(workflowsDir);
14
- for (const cmd of resolveCommands(ctx)) {
15
- await writeFile(path.join(workflowsDir, `${cmd.name}.md`), cmd.content);
16
- }
17
- await writeSkills(path.join(cwd, ".agent", "skills"), resolveSkills(ctx), resolveBundledSkills(ctx));
18
- }
19
- //# sourceMappingURL=antigravity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/configurators/antigravity.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,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;IAEjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC3D,SAAS,CAAC,YAAY,CAAC,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,WAAW,CACf,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAClC,aAAa,CAAC,GAAG,CAAC,EAClB,oBAAoB,CAAC,GAAG,CAAC,CAC1B,CAAC;AACJ,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Configure Claude Code:
3
- * - agents/, settings.json from platform-specific templates
4
- * - hooks/ from shared-hooks/ (unified with other platforms)
5
- * - commands/trellis/ — start + finish-work as slash commands
6
- * - skills/trellis-{name}/SKILL.md — other 5 as auto-triggered skills
7
- */
8
- export declare function configureClaude(cwd: string): Promise<void>;
9
- //# sourceMappingURL=claude.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/configurators/claude.ts"],"names":[],"mappings":"AAiEA;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhE"}
@@ -1,72 +0,0 @@
1
- import { readFileSync, readdirSync, statSync } from "node:fs";
2
- import path from "node:path";
3
- import { AI_TOOLS } from "../types/ai-tools.js";
4
- import { getClaudeTemplatePath } from "../templates/extract.js";
5
- import { ensureDir, writeFile } from "../utils/file-writer.js";
6
- import { resolvePlaceholders, resolveCommands, resolveSkills, resolveBundledSkills, writeSkills, writeSharedHooks, replacePythonCommandLiterals, } from "./shared.js";
7
- const EXCLUDE_PATTERNS = [
8
- ".d.ts",
9
- ".d.ts.map",
10
- ".js",
11
- ".js.map",
12
- ".ts", // TypeScript source — dev-only; not part of user-shipped templates
13
- "__pycache__",
14
- ];
15
- function shouldExclude(filename) {
16
- for (const pattern of EXCLUDE_PATTERNS) {
17
- if (filename.endsWith(pattern) || filename === pattern) {
18
- return true;
19
- }
20
- }
21
- return false;
22
- }
23
- /**
24
- * Recursively copy directory, excluding build artifacts and the commands/ dir
25
- * (commands are now written from common templates).
26
- */
27
- async function copyDirFiltered(src, dest, skipDirs = []) {
28
- ensureDir(dest);
29
- for (const entry of readdirSync(src)) {
30
- if (shouldExclude(entry) || skipDirs.includes(entry)) {
31
- continue;
32
- }
33
- const srcPath = path.join(src, entry);
34
- const destPath = path.join(dest, entry);
35
- const stat = statSync(srcPath);
36
- if (stat.isDirectory()) {
37
- await copyDirFiltered(srcPath, destPath);
38
- }
39
- else {
40
- let content = readFileSync(srcPath, "utf-8");
41
- if (entry === "settings.json") {
42
- content = resolvePlaceholders(content);
43
- }
44
- await writeFile(destPath, replacePythonCommandLiterals(content));
45
- }
46
- }
47
- }
48
- /**
49
- * Configure Claude Code:
50
- * - agents/, settings.json from platform-specific templates
51
- * - hooks/ from shared-hooks/ (unified with other platforms)
52
- * - commands/trellis/ — start + finish-work as slash commands
53
- * - skills/trellis-{name}/SKILL.md — other 5 as auto-triggered skills
54
- */
55
- export async function configureClaude(cwd) {
56
- const sourcePath = getClaudeTemplatePath();
57
- const destPath = path.join(cwd, ".claude");
58
- const ctx = AI_TOOLS["claude-code"].templateContext;
59
- // Copy platform-specific files (agents, settings) — hooks come from shared-hooks
60
- await copyDirFiltered(sourcePath, destPath, ["commands", "hooks"]);
61
- // Shared hook scripts (same source as 7 other platforms)
62
- await writeSharedHooks(path.join(destPath, "hooks"), "claude");
63
- // start + finish-work as slash commands
64
- const commandsDir = path.join(destPath, "commands", "trellis");
65
- ensureDir(commandsDir);
66
- for (const cmd of resolveCommands(ctx)) {
67
- await writeFile(path.join(commandsDir, `${cmd.name}.md`), cmd.content);
68
- }
69
- // Auto-trigger workflow skills + multi-file built-in skills.
70
- await writeSkills(path.join(destPath, "skills"), resolveSkills(ctx), resolveBundledSkills(ctx));
71
- }
72
- //# sourceMappingURL=claude.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/configurators/claude.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Configure CodeBuddy:
3
- * - commands/trellis/ — start + finish-work as slash commands
4
- * - skills/trellis-{name}/SKILL.md — other 5 as auto-triggered skills
5
- * - agents/{name}.md — sub-agent definitions
6
- * - hooks/*.py — shared hook scripts
7
- * - settings.json — hook configuration
8
- */
9
- export declare function configureCodebuddy(cwd: string): Promise<void>;
10
- //# sourceMappingURL=codebuddy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codebuddy.d.ts","sourceRoot":"","sources":["../../src/configurators/codebuddy.ts"],"names":[],"mappings":"AAiBA;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBnE"}
@@ -1,30 +0,0 @@
1
- import path from "node:path";
2
- import { AI_TOOLS } from "../types/ai-tools.js";
3
- import { ensureDir, writeFile } from "../utils/file-writer.js";
4
- import { resolvePlaceholders, resolveCommands, resolveSkills, resolveBundledSkills, writeSkills, writeAgents, writeSharedHooks, } from "./shared.js";
5
- import { getAllAgents, getSettingsTemplate, } from "../templates/codebuddy/index.js";
6
- /**
7
- * Configure CodeBuddy:
8
- * - commands/trellis/ — start + finish-work as slash commands
9
- * - skills/trellis-{name}/SKILL.md — other 5 as auto-triggered skills
10
- * - agents/{name}.md — sub-agent definitions
11
- * - hooks/*.py — shared hook scripts
12
- * - settings.json — hook configuration
13
- */
14
- export async function configureCodebuddy(cwd) {
15
- const config = AI_TOOLS.codebuddy;
16
- const ctx = config.templateContext;
17
- const configRoot = path.join(cwd, config.configDir);
18
- // Commands
19
- const commandsDir = path.join(configRoot, "commands", "trellis");
20
- ensureDir(commandsDir);
21
- for (const cmd of resolveCommands(ctx)) {
22
- await writeFile(path.join(commandsDir, `${cmd.name}.md`), cmd.content);
23
- }
24
- await writeSkills(path.join(configRoot, "skills"), resolveSkills(ctx), resolveBundledSkills(ctx));
25
- await writeAgents(path.join(configRoot, "agents"), getAllAgents());
26
- await writeSharedHooks(path.join(configRoot, "hooks"), "codebuddy");
27
- const settings = getSettingsTemplate();
28
- await writeFile(path.join(configRoot, settings.targetPath), resolvePlaceholders(settings.content));
29
- }
30
- //# sourceMappingURL=codebuddy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codebuddy.js","sourceRoot":"","sources":["../../src/configurators/codebuddy.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,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpD,WAAW;IACX,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACjE,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,WAAW,CACf,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAC/B,aAAa,CAAC,GAAG,CAAC,EAClB,oBAAoB,CAAC,GAAG,CAAC,CAC1B,CAAC;IACF,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;IACnE,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAEpE,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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Configure Codex by writing:
3
- * - .agents/skills/ — shared skills from common source
4
- * - .codex/skills/ — Codex-specific skills (platform-specific templates)
5
- * - .codex/agents/, hooks/, hooks.json, config.toml — platform-specific
6
- */
7
- export declare function configureCodex(cwd: string): Promise<void>;
8
- //# sourceMappingURL=codex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/configurators/codex.ts"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgH/D"}