@mindfoldhq/trellis 0.6.0-beta.9 → 0.6.0-rc.0

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 (316) hide show
  1. package/README.md +49 -49
  2. package/dist/cli/index.d.ts.map +1 -1
  3. package/dist/cli/index.js +36 -0
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/commands/channel/adapters/claude.d.ts +29 -0
  6. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  7. package/dist/commands/channel/adapters/claude.js +203 -0
  8. package/dist/commands/channel/adapters/claude.js.map +1 -0
  9. package/dist/commands/channel/adapters/codex.d.ts +85 -0
  10. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  11. package/dist/commands/channel/adapters/codex.js +505 -0
  12. package/dist/commands/channel/adapters/codex.js.map +1 -0
  13. package/dist/commands/channel/adapters/index.d.ts +84 -0
  14. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  15. package/dist/commands/channel/adapters/index.js +115 -0
  16. package/dist/commands/channel/adapters/index.js.map +1 -0
  17. package/dist/commands/channel/adapters/types.d.ts +33 -0
  18. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  19. package/dist/commands/channel/adapters/types.js +2 -0
  20. package/dist/commands/channel/adapters/types.js.map +1 -0
  21. package/dist/commands/channel/agent-loader.d.ts +32 -0
  22. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  23. package/dist/commands/channel/agent-loader.js +154 -0
  24. package/dist/commands/channel/agent-loader.js.map +1 -0
  25. package/dist/commands/channel/context-loader.d.ts +26 -0
  26. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  27. package/dist/commands/channel/context-loader.js +290 -0
  28. package/dist/commands/channel/context-loader.js.map +1 -0
  29. package/dist/commands/channel/context.d.ts +16 -0
  30. package/dist/commands/channel/context.d.ts.map +1 -0
  31. package/dist/commands/channel/context.js +83 -0
  32. package/dist/commands/channel/context.js.map +1 -0
  33. package/dist/commands/channel/create.d.ts +27 -0
  34. package/dist/commands/channel/create.d.ts.map +1 -0
  35. package/dist/commands/channel/create.js +39 -0
  36. package/dist/commands/channel/create.js.map +1 -0
  37. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  38. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  39. package/dist/commands/channel/dev-parse-trace.js +70 -0
  40. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  41. package/dist/commands/channel/guard.d.ts +150 -0
  42. package/dist/commands/channel/guard.d.ts.map +1 -0
  43. package/dist/commands/channel/guard.js +474 -0
  44. package/dist/commands/channel/guard.js.map +1 -0
  45. package/dist/commands/channel/index.d.ts +3 -0
  46. package/dist/commands/channel/index.d.ts.map +1 -0
  47. package/dist/commands/channel/index.js +531 -0
  48. package/dist/commands/channel/index.js.map +1 -0
  49. package/dist/commands/channel/interrupt.d.ts +10 -0
  50. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  51. package/dist/commands/channel/interrupt.js +22 -0
  52. package/dist/commands/channel/interrupt.js.map +1 -0
  53. package/dist/commands/channel/kill.d.ts +7 -0
  54. package/dist/commands/channel/kill.d.ts.map +1 -0
  55. package/dist/commands/channel/kill.js +121 -0
  56. package/dist/commands/channel/kill.js.map +1 -0
  57. package/dist/commands/channel/list.d.ts +17 -0
  58. package/dist/commands/channel/list.d.ts.map +1 -0
  59. package/dist/commands/channel/list.js +233 -0
  60. package/dist/commands/channel/list.js.map +1 -0
  61. package/dist/commands/channel/messages.d.ts +15 -0
  62. package/dist/commands/channel/messages.d.ts.map +1 -0
  63. package/dist/commands/channel/messages.js +245 -0
  64. package/dist/commands/channel/messages.js.map +1 -0
  65. package/dist/commands/channel/rm.d.ts +27 -0
  66. package/dist/commands/channel/rm.d.ts.map +1 -0
  67. package/dist/commands/channel/rm.js +216 -0
  68. package/dist/commands/channel/rm.js.map +1 -0
  69. package/dist/commands/channel/run.d.ts +30 -0
  70. package/dist/commands/channel/run.d.ts.map +1 -0
  71. package/dist/commands/channel/run.js +130 -0
  72. package/dist/commands/channel/run.js.map +1 -0
  73. package/dist/commands/channel/send.d.ts +11 -0
  74. package/dist/commands/channel/send.d.ts.map +1 -0
  75. package/dist/commands/channel/send.js +24 -0
  76. package/dist/commands/channel/send.js.map +1 -0
  77. package/dist/commands/channel/spawn.d.ts +40 -0
  78. package/dist/commands/channel/spawn.d.ts.map +1 -0
  79. package/dist/commands/channel/spawn.js +244 -0
  80. package/dist/commands/channel/spawn.js.map +1 -0
  81. package/dist/commands/channel/store/events.d.ts +39 -0
  82. package/dist/commands/channel/store/events.d.ts.map +1 -0
  83. package/dist/commands/channel/store/events.js +87 -0
  84. package/dist/commands/channel/store/events.js.map +1 -0
  85. package/dist/commands/channel/store/filter.d.ts +3 -0
  86. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  87. package/dist/commands/channel/store/filter.js +2 -0
  88. package/dist/commands/channel/store/filter.js.map +1 -0
  89. package/dist/commands/channel/store/lock.d.ts +23 -0
  90. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  91. package/dist/commands/channel/store/lock.js +99 -0
  92. package/dist/commands/channel/store/lock.js.map +1 -0
  93. package/dist/commands/channel/store/paths.d.ts +63 -0
  94. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  95. package/dist/commands/channel/store/paths.js +246 -0
  96. package/dist/commands/channel/store/paths.js.map +1 -0
  97. package/dist/commands/channel/store/schema.d.ts +27 -0
  98. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  99. package/dist/commands/channel/store/schema.js +34 -0
  100. package/dist/commands/channel/store/schema.js.map +1 -0
  101. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  102. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  103. package/dist/commands/channel/store/thread-state.js +16 -0
  104. package/dist/commands/channel/store/thread-state.js.map +1 -0
  105. package/dist/commands/channel/store/watch.d.ts +19 -0
  106. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  107. package/dist/commands/channel/store/watch.js +146 -0
  108. package/dist/commands/channel/store/watch.js.map +1 -0
  109. package/dist/commands/channel/supervisor/idle.d.ts +46 -0
  110. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  111. package/dist/commands/channel/supervisor/idle.js +72 -0
  112. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  113. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  114. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  115. package/dist/commands/channel/supervisor/inbox.js +160 -0
  116. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  117. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  118. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  119. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  120. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  121. package/dist/commands/channel/supervisor/stdout.d.ts +51 -0
  122. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  123. package/dist/commands/channel/supervisor/stdout.js +121 -0
  124. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  125. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  126. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  127. package/dist/commands/channel/supervisor/turns.js +45 -0
  128. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  129. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  130. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  131. package/dist/commands/channel/supervisor/warning.js +77 -0
  132. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  133. package/dist/commands/channel/supervisor.d.ts +59 -0
  134. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  135. package/dist/commands/channel/supervisor.js +344 -0
  136. package/dist/commands/channel/supervisor.js.map +1 -0
  137. package/dist/commands/channel/text-body.d.ts +13 -0
  138. package/dist/commands/channel/text-body.d.ts.map +1 -0
  139. package/dist/commands/channel/text-body.js +47 -0
  140. package/dist/commands/channel/text-body.js.map +1 -0
  141. package/dist/commands/channel/threads.d.ts +39 -0
  142. package/dist/commands/channel/threads.d.ts.map +1 -0
  143. package/dist/commands/channel/threads.js +106 -0
  144. package/dist/commands/channel/threads.js.map +1 -0
  145. package/dist/commands/channel/title.d.ts +12 -0
  146. package/dist/commands/channel/title.d.ts.map +1 -0
  147. package/dist/commands/channel/title.js +24 -0
  148. package/dist/commands/channel/title.js.map +1 -0
  149. package/dist/commands/channel/wait.d.ts +17 -0
  150. package/dist/commands/channel/wait.d.ts.map +1 -0
  151. package/dist/commands/channel/wait.js +75 -0
  152. package/dist/commands/channel/wait.js.map +1 -0
  153. package/dist/commands/init.d.ts +3 -0
  154. package/dist/commands/init.d.ts.map +1 -1
  155. package/dist/commands/init.js +162 -43
  156. package/dist/commands/init.js.map +1 -1
  157. package/dist/commands/mem.d.ts +13 -217
  158. package/dist/commands/mem.d.ts.map +1 -1
  159. package/dist/commands/mem.js +142 -1587
  160. package/dist/commands/mem.js.map +1 -1
  161. package/dist/commands/uninstall.d.ts.map +1 -1
  162. package/dist/commands/uninstall.js +28 -2
  163. package/dist/commands/uninstall.js.map +1 -1
  164. package/dist/commands/update.d.ts.map +1 -1
  165. package/dist/commands/update.js +102 -5
  166. package/dist/commands/update.js.map +1 -1
  167. package/dist/commands/workflow.d.ts +35 -0
  168. package/dist/commands/workflow.d.ts.map +1 -0
  169. package/dist/commands/workflow.js +232 -0
  170. package/dist/commands/workflow.js.map +1 -0
  171. package/dist/configurators/claude.d.ts.map +1 -1
  172. package/dist/configurators/claude.js +1 -0
  173. package/dist/configurators/claude.js.map +1 -1
  174. package/dist/configurators/index.d.ts.map +1 -1
  175. package/dist/configurators/index.js +5 -0
  176. package/dist/configurators/index.js.map +1 -1
  177. package/dist/configurators/reasonix.d.ts +23 -0
  178. package/dist/configurators/reasonix.d.ts.map +1 -0
  179. package/dist/configurators/reasonix.js +60 -0
  180. package/dist/configurators/reasonix.js.map +1 -0
  181. package/dist/configurators/shared.d.ts.map +1 -1
  182. package/dist/configurators/shared.js +8 -0
  183. package/dist/configurators/shared.js.map +1 -1
  184. package/dist/configurators/workflow.d.ts +8 -0
  185. package/dist/configurators/workflow.d.ts.map +1 -1
  186. package/dist/configurators/workflow.js +14 -3
  187. package/dist/configurators/workflow.js.map +1 -1
  188. package/dist/constants/paths.d.ts +4 -0
  189. package/dist/constants/paths.d.ts.map +1 -1
  190. package/dist/constants/paths.js +4 -0
  191. package/dist/constants/paths.js.map +1 -1
  192. package/dist/migrations/manifests/0.5.14.json +9 -0
  193. package/dist/migrations/manifests/0.5.15.json +9 -0
  194. package/dist/migrations/manifests/0.5.16.json +9 -0
  195. package/dist/migrations/manifests/0.5.17.json +9 -0
  196. package/dist/migrations/manifests/0.5.18.json +9 -0
  197. package/dist/migrations/manifests/0.5.19.json +9 -0
  198. package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
  199. package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
  200. package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
  201. package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
  202. package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
  203. package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
  204. package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
  205. package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
  206. package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
  207. package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
  208. package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
  209. package/dist/migrations/manifests/0.6.0-beta.21.json +9 -0
  210. package/dist/migrations/manifests/0.6.0-beta.22.json +9 -0
  211. package/dist/migrations/manifests/0.6.0-beta.23.json +88 -0
  212. package/dist/migrations/manifests/0.6.0-rc.0.json +9 -0
  213. package/dist/templates/claude/agents/trellis-check.md +12 -6
  214. package/dist/templates/claude/agents/trellis-implement.md +1 -1
  215. package/dist/templates/claude/agents/trellis-research.md +1 -1
  216. package/dist/templates/codebuddy/agents/trellis-check.md +12 -6
  217. package/dist/templates/codebuddy/agents/trellis-implement.md +1 -1
  218. package/dist/templates/codebuddy/agents/trellis-research.md +1 -1
  219. package/dist/templates/codex/agents/trellis-check.toml +0 -25
  220. package/dist/templates/codex/agents/trellis-implement.toml +0 -25
  221. package/dist/templates/codex/config.toml +9 -16
  222. package/dist/templates/codex/hooks/session-start.py +22 -0
  223. package/dist/templates/codex/hooks.json +1 -1
  224. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +27 -0
  225. package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +81 -0
  226. package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +66 -0
  227. package/dist/templates/common/bundled-skills/trellis-session-insight/references/triggering-patterns.md +93 -0
  228. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/SKILL.md +41 -0
  229. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/mcp-setup.md +90 -0
  230. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/repository-analysis.md +59 -0
  231. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-task-planning.md +61 -0
  232. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-writing.md +70 -0
  233. package/dist/templates/copilot/hooks/session-start.py +24 -0
  234. package/dist/templates/cursor/agents/trellis-check.md +12 -6
  235. package/dist/templates/cursor/agents/trellis-implement.md +1 -1
  236. package/dist/templates/cursor/agents/trellis-research.md +1 -1
  237. package/dist/templates/cursor/hooks.json +0 -6
  238. package/dist/templates/droid/droids/trellis-check.md +12 -6
  239. package/dist/templates/droid/droids/trellis-implement.md +1 -1
  240. package/dist/templates/droid/droids/trellis-research.md +1 -1
  241. package/dist/templates/gemini/agents/trellis-check.md +11 -5
  242. package/dist/templates/kiro/agents/trellis-check.json +1 -1
  243. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +127 -9
  244. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +130 -0
  245. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +38 -0
  246. package/dist/templates/markdown/spec/guides/index.md.txt +18 -0
  247. package/dist/templates/opencode/agents/trellis-check.md +11 -5
  248. package/dist/templates/pi/agents/trellis-check.md +5 -4
  249. package/dist/templates/pi/agents/trellis-implement.md +5 -4
  250. package/dist/templates/pi/extensions/trellis/index.ts.txt +1339 -913
  251. package/dist/templates/pi/settings.json +0 -9
  252. package/dist/templates/qoder/agents/trellis-check.md +12 -6
  253. package/dist/templates/qoder/agents/trellis-implement.md +1 -1
  254. package/dist/templates/qoder/agents/trellis-research.md +1 -1
  255. package/dist/templates/reasonix/agents/trellis-check.md +36 -0
  256. package/dist/templates/reasonix/agents/trellis-implement.md +41 -0
  257. package/dist/templates/reasonix/index.d.ts +13 -0
  258. package/dist/templates/reasonix/index.d.ts.map +1 -0
  259. package/dist/templates/reasonix/index.js +16 -0
  260. package/dist/templates/reasonix/index.js.map +1 -0
  261. package/dist/templates/shared-hooks/index.d.ts.map +1 -1
  262. package/dist/templates/shared-hooks/index.js +0 -1
  263. package/dist/templates/shared-hooks/index.js.map +1 -1
  264. package/dist/templates/shared-hooks/inject-workflow-state.py +22 -0
  265. package/dist/templates/shared-hooks/session-start.py +25 -8
  266. package/dist/templates/trellis/agents/check.md +70 -0
  267. package/dist/templates/trellis/agents/implement.md +71 -0
  268. package/dist/templates/trellis/config.yaml +20 -0
  269. package/dist/templates/trellis/index.d.ts +13 -0
  270. package/dist/templates/trellis/index.d.ts.map +1 -1
  271. package/dist/templates/trellis/index.js +22 -0
  272. package/dist/templates/trellis/index.js.map +1 -1
  273. package/dist/templates/trellis/scripts/common/safe_commit.py +49 -19
  274. package/dist/templates/trellis/scripts/common/task_store.py +94 -16
  275. package/dist/templates/trellis/workflow.md +21 -0
  276. package/dist/types/ai-tools.d.ts +4 -4
  277. package/dist/types/ai-tools.d.ts.map +1 -1
  278. package/dist/types/ai-tools.js +16 -0
  279. package/dist/types/ai-tools.js.map +1 -1
  280. package/dist/utils/agent-refs.d.ts +31 -0
  281. package/dist/utils/agent-refs.d.ts.map +1 -0
  282. package/dist/utils/agent-refs.js +63 -0
  283. package/dist/utils/agent-refs.js.map +1 -0
  284. package/dist/utils/cwd-guard.d.ts +38 -0
  285. package/dist/utils/cwd-guard.d.ts.map +1 -0
  286. package/dist/utils/cwd-guard.js +62 -0
  287. package/dist/utils/cwd-guard.js.map +1 -0
  288. package/dist/utils/file-writer.d.ts +13 -0
  289. package/dist/utils/file-writer.d.ts.map +1 -1
  290. package/dist/utils/file-writer.js +59 -1
  291. package/dist/utils/file-writer.js.map +1 -1
  292. package/dist/utils/manifest-prune.d.ts +61 -0
  293. package/dist/utils/manifest-prune.d.ts.map +1 -0
  294. package/dist/utils/manifest-prune.js +136 -0
  295. package/dist/utils/manifest-prune.js.map +1 -0
  296. package/dist/utils/registry-config.d.ts +7 -0
  297. package/dist/utils/registry-config.d.ts.map +1 -0
  298. package/dist/utils/registry-config.js +171 -0
  299. package/dist/utils/registry-config.js.map +1 -0
  300. package/dist/utils/task-json.d.ts +9 -42
  301. package/dist/utils/task-json.d.ts.map +1 -1
  302. package/dist/utils/task-json.js +8 -45
  303. package/dist/utils/task-json.js.map +1 -1
  304. package/dist/utils/template-fetcher.d.ts +11 -0
  305. package/dist/utils/template-fetcher.d.ts.map +1 -1
  306. package/dist/utils/template-fetcher.js +51 -2
  307. package/dist/utils/template-fetcher.js.map +1 -1
  308. package/dist/utils/template-hash.d.ts +32 -6
  309. package/dist/utils/template-hash.d.ts.map +1 -1
  310. package/dist/utils/template-hash.js +53 -31
  311. package/dist/utils/template-hash.js.map +1 -1
  312. package/dist/utils/workflow-resolver.d.ts +86 -0
  313. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  314. package/dist/utils/workflow-resolver.js +265 -0
  315. package/dist/utils/workflow-resolver.js.map +1 -0
  316. package/package.json +9 -8
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Workflow template resolver.
3
+ *
4
+ * Centralizes how `trellis init --workflow` and `trellis workflow` discover and
5
+ * fetch workflow.md content. Reuses `template-fetcher` helpers for registry
6
+ * parsing, index probing, and git/http transport. The `native` workflow is a
7
+ * virtual entry resolved directly from the bundled `workflowMdTemplate` to
8
+ * avoid a duplicate file on disk that could drift out of sync.
9
+ *
10
+ * Boundary: command-layer callers (init.ts, commands/workflow.ts) should NOT
11
+ * touch raw marketplace structures. They go through `resolveWorkflowTemplate`
12
+ * and `listWorkflowTemplates` only.
13
+ */
14
+ /**
15
+ * The id used to refer to the bundled native workflow.
16
+ *
17
+ * Treated as Trellis-managed for hash-tracking: when this id is selected by
18
+ * `init --workflow` or `trellis workflow`, `.trellis/workflow.md` stays in
19
+ * `.template-hashes.json`. Any other id is user-managed local workflow and
20
+ * must be removed from the hash file (the durable-state contract in
21
+ * design.md "Durable-state contract").
22
+ */
23
+ export declare const NATIVE_WORKFLOW_ID = "native";
24
+ /**
25
+ * Resolved workflow template entry.
26
+ *
27
+ * `content` is the workflow.md body bytes (LF-normalized in storage).
28
+ * `path` is the marketplace-relative path for remote entries, or
29
+ * `bundled:trellis/workflow.md` for the native virtual entry.
30
+ */
31
+ export interface ResolvedWorkflowTemplate {
32
+ id: string;
33
+ type: "workflow";
34
+ name: string;
35
+ description?: string;
36
+ path: string;
37
+ content: string;
38
+ /** Where the content came from (for error messages). */
39
+ source: "bundled" | "marketplace";
40
+ }
41
+ /**
42
+ * Workflow template listing (metadata only, no content).
43
+ */
44
+ export interface WorkflowTemplateListing {
45
+ id: string;
46
+ type: "workflow";
47
+ name: string;
48
+ description?: string;
49
+ path: string;
50
+ source: "bundled" | "marketplace";
51
+ }
52
+ export interface WorkflowResolveOptions {
53
+ /**
54
+ * Optional marketplace source (giget-style or HTTPS URL).
55
+ * Omitted = use the default marketplace via TEMPLATE_INDEX_URL.
56
+ */
57
+ source?: string;
58
+ }
59
+ export declare class WorkflowResolveError extends Error {
60
+ constructor(message: string);
61
+ }
62
+ /**
63
+ * List available workflow templates from the default marketplace (or a
64
+ * user-supplied source). The bundled native entry is always included first.
65
+ *
66
+ * Returns metadata only — no content is fetched. Use `resolveWorkflowTemplate`
67
+ * to fetch the actual workflow.md bytes for a chosen id.
68
+ *
69
+ * Network errors are surfaced as `errorMessage`. The native entry is still
70
+ * returned so callers can fall back to it offline.
71
+ */
72
+ export declare function listWorkflowTemplates(options?: WorkflowResolveOptions): Promise<{
73
+ templates: WorkflowTemplateListing[];
74
+ errorMessage?: string;
75
+ }>;
76
+ /**
77
+ * Resolve a workflow id to its content.
78
+ *
79
+ * - `native` → bundled `workflowMdTemplate` (offline, never errors).
80
+ * - other id → fetch index via `template-fetcher`, find the matching
81
+ * `type: "workflow"` entry, then fetch its single file content.
82
+ *
83
+ * Errors are workflow-specific (do NOT reuse "spec template not found" copy).
84
+ */
85
+ export declare function resolveWorkflowTemplate(id: string, options?: WorkflowResolveOptions): Promise<ResolvedWorkflowTemplate>;
86
+ //# sourceMappingURL=workflow-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/workflow-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAkBH;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AA+DD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC;IACT,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,CA6BD;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,wBAAwB,CAAC,CAoDnC"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Workflow template resolver.
3
+ *
4
+ * Centralizes how `trellis init --workflow` and `trellis workflow` discover and
5
+ * fetch workflow.md content. Reuses `template-fetcher` helpers for registry
6
+ * parsing, index probing, and git/http transport. The `native` workflow is a
7
+ * virtual entry resolved directly from the bundled `workflowMdTemplate` to
8
+ * avoid a duplicate file on disk that could drift out of sync.
9
+ *
10
+ * Boundary: command-layer callers (init.ts, commands/workflow.ts) should NOT
11
+ * touch raw marketplace structures. They go through `resolveWorkflowTemplate`
12
+ * and `listWorkflowTemplates` only.
13
+ */
14
+ import fs from "node:fs";
15
+ import os from "node:os";
16
+ import path from "node:path";
17
+ import { workflowMdTemplate } from "../templates/trellis/index.js";
18
+ import { TIMEOUTS, TEMPLATE_INDEX_URL, RegistryBackendError, parseRegistrySource, probeRegistryIndex, } from "./template-fetcher.js";
19
+ /**
20
+ * The id used to refer to the bundled native workflow.
21
+ *
22
+ * Treated as Trellis-managed for hash-tracking: when this id is selected by
23
+ * `init --workflow` or `trellis workflow`, `.trellis/workflow.md` stays in
24
+ * `.template-hashes.json`. Any other id is user-managed local workflow and
25
+ * must be removed from the hash file (the durable-state contract in
26
+ * design.md "Durable-state contract").
27
+ */
28
+ export const NATIVE_WORKFLOW_ID = "native";
29
+ export class WorkflowResolveError extends Error {
30
+ constructor(message) {
31
+ super(message);
32
+ this.name = "WorkflowResolveError";
33
+ }
34
+ }
35
+ /**
36
+ * Bundled native workflow entry — virtual, resolved without network access.
37
+ */
38
+ function nativeListingEntry() {
39
+ return {
40
+ id: NATIVE_WORKFLOW_ID,
41
+ type: "workflow",
42
+ name: "Native Trellis Workflow",
43
+ description: "Default Trellis Plan / Execute / Finish workflow bundled with the CLI",
44
+ path: "bundled:trellis/workflow.md",
45
+ source: "bundled",
46
+ };
47
+ }
48
+ function nativeResolvedEntry() {
49
+ return {
50
+ ...nativeListingEntry(),
51
+ content: workflowMdTemplate,
52
+ };
53
+ }
54
+ function parseSourceOrThrow(source) {
55
+ try {
56
+ return parseRegistrySource(source);
57
+ }
58
+ catch (err) {
59
+ throw new WorkflowResolveError(`Invalid workflow marketplace source "${source}": ${err instanceof Error ? err.message : String(err)}`);
60
+ }
61
+ }
62
+ async function fetchWorkflowEntries(registry, indexUrl) {
63
+ const probe = await probeRegistryIndex(indexUrl, registry);
64
+ if (probe.error) {
65
+ return {
66
+ templates: [],
67
+ backend: probe.backend,
68
+ errorMessage: probe.error.message,
69
+ };
70
+ }
71
+ if (probe.isNotFound) {
72
+ return {
73
+ templates: [],
74
+ backend: probe.backend,
75
+ errorMessage: "No marketplace index.json found at the configured source. Workflow templates require an index.json.",
76
+ };
77
+ }
78
+ return { templates: probe.templates, backend: probe.backend };
79
+ }
80
+ /**
81
+ * List available workflow templates from the default marketplace (or a
82
+ * user-supplied source). The bundled native entry is always included first.
83
+ *
84
+ * Returns metadata only — no content is fetched. Use `resolveWorkflowTemplate`
85
+ * to fetch the actual workflow.md bytes for a chosen id.
86
+ *
87
+ * Network errors are surfaced as `errorMessage`. The native entry is still
88
+ * returned so callers can fall back to it offline.
89
+ */
90
+ export async function listWorkflowTemplates(options = {}) {
91
+ const result = [nativeListingEntry()];
92
+ let registry;
93
+ let indexUrl = TEMPLATE_INDEX_URL;
94
+ if (options.source) {
95
+ registry = parseSourceOrThrow(options.source);
96
+ indexUrl = `${registry.rawBaseUrl}/index.json`;
97
+ }
98
+ const fetched = await fetchWorkflowEntries(registry, indexUrl);
99
+ if (fetched.errorMessage) {
100
+ return { templates: result, errorMessage: fetched.errorMessage };
101
+ }
102
+ for (const t of fetched.templates) {
103
+ if (t.type !== "workflow")
104
+ continue;
105
+ if (t.id === NATIVE_WORKFLOW_ID)
106
+ continue;
107
+ result.push({
108
+ id: t.id,
109
+ type: "workflow",
110
+ name: t.name,
111
+ ...(t.description ? { description: t.description } : {}),
112
+ path: t.path,
113
+ source: "marketplace",
114
+ });
115
+ }
116
+ return { templates: result };
117
+ }
118
+ /**
119
+ * Resolve a workflow id to its content.
120
+ *
121
+ * - `native` → bundled `workflowMdTemplate` (offline, never errors).
122
+ * - other id → fetch index via `template-fetcher`, find the matching
123
+ * `type: "workflow"` entry, then fetch its single file content.
124
+ *
125
+ * Errors are workflow-specific (do NOT reuse "spec template not found" copy).
126
+ */
127
+ export async function resolveWorkflowTemplate(id, options = {}) {
128
+ if (id === NATIVE_WORKFLOW_ID) {
129
+ return nativeResolvedEntry();
130
+ }
131
+ let registry;
132
+ let indexUrl = TEMPLATE_INDEX_URL;
133
+ if (options.source) {
134
+ registry = parseSourceOrThrow(options.source);
135
+ indexUrl = `${registry.rawBaseUrl}/index.json`;
136
+ }
137
+ const fetched = await fetchWorkflowEntries(registry, indexUrl);
138
+ if (fetched.errorMessage) {
139
+ throw new WorkflowResolveError(`Could not fetch workflow template index: ${fetched.errorMessage}`);
140
+ }
141
+ const entry = fetched.templates.find((t) => t.id === id && t.type === "workflow");
142
+ if (!entry) {
143
+ const available = fetched.templates
144
+ .filter((t) => t.type === "workflow")
145
+ .map((t) => t.id);
146
+ const hint = available.length > 0
147
+ ? ` Available workflow templates: ${available.join(", ")}`
148
+ : "";
149
+ throw new WorkflowResolveError(`Workflow template "${id}" not found in marketplace index.${hint}`);
150
+ }
151
+ if (!entry.path?.endsWith(".md")) {
152
+ throw new WorkflowResolveError(`Workflow template "${id}" has invalid path "${entry.path}" — must point to a workflow.md file.`);
153
+ }
154
+ const backend = fetched.backend;
155
+ const content = await fetchWorkflowFile(entry.path, registry, backend);
156
+ return {
157
+ id: entry.id,
158
+ type: "workflow",
159
+ name: entry.name,
160
+ ...(entry.description ? { description: entry.description } : {}),
161
+ path: entry.path,
162
+ content,
163
+ source: "marketplace",
164
+ };
165
+ }
166
+ async function fetchWorkflowFile(relativePath, registry, backend) {
167
+ validateWorkflowPath(relativePath);
168
+ const useGit = registry?.preferGit ?? backend === "git";
169
+ if (registry && useGit) {
170
+ return fetchWorkflowFileGit(registry, relativePath);
171
+ }
172
+ const rawBase = registry
173
+ ? registry.rawBaseUrl
174
+ : TEMPLATE_INDEX_URL.replace(/\/index\.json$/, "");
175
+ return fetchWorkflowFileHttp(rawBase, relativePath);
176
+ }
177
+ async function fetchWorkflowFileHttp(rawBaseUrl, relativePath) {
178
+ const url = `${rawBaseUrl.replace(/\/$/, "")}/${relativePath}`;
179
+ try {
180
+ const res = await fetch(url, {
181
+ signal: AbortSignal.timeout(TIMEOUTS.DOWNLOAD_MS),
182
+ });
183
+ if (res.status === 404) {
184
+ throw new WorkflowResolveError(`Workflow template file not found at ${url}.`);
185
+ }
186
+ if (!res.ok) {
187
+ throw new WorkflowResolveError(`Could not fetch workflow template (HTTP ${res.status}) from ${url}.`);
188
+ }
189
+ return await res.text();
190
+ }
191
+ catch (err) {
192
+ if (err instanceof WorkflowResolveError)
193
+ throw err;
194
+ throw new WorkflowResolveError(`Workflow template download failed: ${err instanceof Error ? err.message : String(err)}`);
195
+ }
196
+ }
197
+ function validateWorkflowPath(relativePath) {
198
+ const normalized = relativePath.replace(/\\/g, "/");
199
+ if (normalized.startsWith("/") ||
200
+ normalized.split("/").some((part) => part === "..")) {
201
+ throw new WorkflowResolveError(`Workflow template path "${relativePath}" must stay inside the marketplace root.`);
202
+ }
203
+ }
204
+ async function fetchWorkflowFileGit(registry, relativePath) {
205
+ // Single shallow clone of the registry ref, then read one file. We don't
206
+ // share clone state with template-fetcher's downloadGitRegistryPath because
207
+ // workflow resolution is a single-file fetch (not a directory copy).
208
+ const { execFile } = await import("node:child_process");
209
+ const dir = await fs.promises.mkdtemp(path.join(os.tmpdir(), "trellis-workflow-"));
210
+ function run(args) {
211
+ return new Promise((resolve, reject) => {
212
+ execFile("git", args, {
213
+ encoding: "utf-8",
214
+ maxBuffer: 10 * 1024 * 1024,
215
+ timeout: TIMEOUTS.DOWNLOAD_MS,
216
+ }, (error) => {
217
+ if (error)
218
+ reject(error);
219
+ else
220
+ resolve();
221
+ });
222
+ });
223
+ }
224
+ try {
225
+ try {
226
+ await run([
227
+ "clone",
228
+ "--filter=blob:none",
229
+ "--no-checkout",
230
+ registry.gitUrl,
231
+ dir,
232
+ ]);
233
+ await run(["-C", dir, "fetch", "--depth", "1", "origin", registry.ref]);
234
+ await run(["-C", dir, "checkout", "--detach", "FETCH_HEAD"]);
235
+ }
236
+ catch (err) {
237
+ throw new RegistryBackendError("network", `Could not clone registry ${registry.gitUrl}#${registry.ref}: ${err instanceof Error ? err.message : String(err)}`);
238
+ }
239
+ const subdir = registry.subdir.length > 0 ? registry.subdir : ".";
240
+ const sourceRoot = path.resolve(dir, subdir);
241
+ const candidatePath = path.resolve(sourceRoot, relativePath);
242
+ const rel = path.relative(sourceRoot, candidatePath);
243
+ if (rel.startsWith("..") || path.isAbsolute(rel)) {
244
+ throw new WorkflowResolveError(`Workflow template path "${relativePath}" escapes the marketplace root.`);
245
+ }
246
+ if (!fs.existsSync(candidatePath)) {
247
+ throw new WorkflowResolveError(`Workflow template file "${relativePath}" not found in ${registry.gitUrl}#${registry.ref}.`);
248
+ }
249
+ return await fs.promises.readFile(candidatePath, "utf-8");
250
+ }
251
+ catch (err) {
252
+ if (err instanceof WorkflowResolveError)
253
+ throw err;
254
+ if (err instanceof RegistryBackendError) {
255
+ throw new WorkflowResolveError(err.message);
256
+ }
257
+ throw new WorkflowResolveError(`Workflow template download failed: ${err instanceof Error ? err.message : String(err)}`);
258
+ }
259
+ finally {
260
+ await fs.promises.rm(dir, { recursive: true, force: true }).catch(() => {
261
+ // best-effort cleanup; the OS will reap tmp dirs eventually
262
+ });
263
+ }
264
+ }
265
+ //# sourceMappingURL=workflow-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-resolver.js","sourceRoot":"","sources":["../../src/utils/workflow-resolver.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindfoldhq/trellis",
3
- "version": "0.6.0-beta.9",
3
+ "version": "0.6.0-rc.0",
4
4
  "description": "AI capabilities grow like ivy — Trellis provides the structure to guide them along a disciplined path",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,7 +33,8 @@
33
33
  "giget": "^3.1.1",
34
34
  "inquirer": "^9.3.7",
35
35
  "undici": "^6.21.0",
36
- "zod": "^4.4.2"
36
+ "zod": "^4.4.2",
37
+ "@mindfoldhq/trellis-core": "0.6.0-rc.0"
37
38
  },
38
39
  "devDependencies": {
39
40
  "@eslint/js": "^9.18.0",
@@ -77,12 +78,12 @@
77
78
  "typecheck": "tsc --noEmit",
78
79
  "lint:py": "basedpyright",
79
80
  "lint:all": "pnpm lint && pnpm lint:py",
80
- "release": "node scripts/check-manifest-continuity.js && pnpm test && git add -A -- ':!docs-site' && (git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates') && pnpm version --no-git-tag-version patch && V=$(node -p \"require('./package.json').version\") && git add package.json && git commit -m \"$V\" && git tag \"v$V\" && git push origin main --tags",
81
- "release:minor": "node scripts/check-manifest-continuity.js && pnpm test && git add -A -- ':!docs-site' && (git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates') && pnpm version --no-git-tag-version minor && V=$(node -p \"require('./package.json').version\") && git add package.json && git commit -m \"$V\" && git tag \"v$V\" && git push origin main --tags",
82
- "release:major": "node scripts/check-manifest-continuity.js && pnpm test && git add -A -- ':!docs-site' && (git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates') && pnpm version --no-git-tag-version major && V=$(node -p \"require('./package.json').version\") && git add package.json && git commit -m \"$V\" && git tag \"v$V\" && git push origin main --tags",
83
- "release:beta": "node scripts/check-manifest-continuity.js && node scripts/check-docs-changelog.js --type beta && pnpm test && git add -A -- ':!docs-site' && (git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates') && pnpm version --no-git-tag-version prerelease --preid beta && V=$(node -p \"require('./package.json').version\") && git add package.json && git commit -m \"$V\" && git tag \"v$V\" && git push origin HEAD --tags",
84
- "release:rc": "node scripts/check-manifest-continuity.js && node scripts/check-docs-changelog.js --type rc && pnpm test && git add -A -- ':!docs-site' && (git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates') && pnpm version --no-git-tag-version prerelease --preid rc && V=$(node -p \"require('./package.json').version\") && git add package.json && git commit -m \"$V\" && git tag \"v$V\" && git push origin HEAD --tags",
85
- "release:promote": "node scripts/check-manifest-continuity.js && node scripts/check-docs-changelog.js --type promote && pnpm test && git add -A -- ':!docs-site' && (git diff-index --quiet HEAD || git commit -m 'chore: pre-release updates') && pnpm version --no-git-tag-version \"$(node -p \"require('./package.json').version.replace(/-.*/, '')\")\" && V=$(node -p \"require('./package.json').version\") && git add package.json && git commit -m \"$V\" && git tag \"v$V\" && git push origin main --tags",
81
+ "release": "node scripts/release.js patch",
82
+ "release:minor": "node scripts/release.js minor",
83
+ "release:major": "node scripts/release.js major",
84
+ "release:beta": "node scripts/release.js beta",
85
+ "release:rc": "node scripts/release.js rc",
86
+ "release:promote": "node scripts/release.js promote",
86
87
  "manifest": "node scripts/create-manifest.js"
87
88
  }
88
89
  }