@mindfoldhq/trellis 0.6.0-beta.2 → 0.6.0-beta.20

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 (330) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/index.d.ts +1 -1
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +58 -2
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/commands/channel/adapters/claude.d.ts +29 -0
  7. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  8. package/dist/commands/channel/adapters/claude.js +203 -0
  9. package/dist/commands/channel/adapters/claude.js.map +1 -0
  10. package/dist/commands/channel/adapters/codex.d.ts +85 -0
  11. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  12. package/dist/commands/channel/adapters/codex.js +505 -0
  13. package/dist/commands/channel/adapters/codex.js.map +1 -0
  14. package/dist/commands/channel/adapters/index.d.ts +84 -0
  15. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  16. package/dist/commands/channel/adapters/index.js +115 -0
  17. package/dist/commands/channel/adapters/index.js.map +1 -0
  18. package/dist/commands/channel/adapters/types.d.ts +33 -0
  19. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  20. package/dist/commands/channel/adapters/types.js +2 -0
  21. package/dist/commands/channel/adapters/types.js.map +1 -0
  22. package/dist/commands/channel/agent-loader.d.ts +32 -0
  23. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  24. package/dist/commands/channel/agent-loader.js +154 -0
  25. package/dist/commands/channel/agent-loader.js.map +1 -0
  26. package/dist/commands/channel/context-loader.d.ts +26 -0
  27. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  28. package/dist/commands/channel/context-loader.js +290 -0
  29. package/dist/commands/channel/context-loader.js.map +1 -0
  30. package/dist/commands/channel/context.d.ts +16 -0
  31. package/dist/commands/channel/context.d.ts.map +1 -0
  32. package/dist/commands/channel/context.js +83 -0
  33. package/dist/commands/channel/context.js.map +1 -0
  34. package/dist/commands/channel/create.d.ts +27 -0
  35. package/dist/commands/channel/create.d.ts.map +1 -0
  36. package/dist/commands/channel/create.js +39 -0
  37. package/dist/commands/channel/create.js.map +1 -0
  38. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  39. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  40. package/dist/commands/channel/dev-parse-trace.js +70 -0
  41. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  42. package/dist/commands/channel/guard.d.ts +150 -0
  43. package/dist/commands/channel/guard.d.ts.map +1 -0
  44. package/dist/commands/channel/guard.js +474 -0
  45. package/dist/commands/channel/guard.js.map +1 -0
  46. package/dist/commands/channel/index.d.ts +3 -0
  47. package/dist/commands/channel/index.d.ts.map +1 -0
  48. package/dist/commands/channel/index.js +531 -0
  49. package/dist/commands/channel/index.js.map +1 -0
  50. package/dist/commands/channel/interrupt.d.ts +10 -0
  51. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  52. package/dist/commands/channel/interrupt.js +22 -0
  53. package/dist/commands/channel/interrupt.js.map +1 -0
  54. package/dist/commands/channel/kill.d.ts +7 -0
  55. package/dist/commands/channel/kill.d.ts.map +1 -0
  56. package/dist/commands/channel/kill.js +121 -0
  57. package/dist/commands/channel/kill.js.map +1 -0
  58. package/dist/commands/channel/list.d.ts +17 -0
  59. package/dist/commands/channel/list.d.ts.map +1 -0
  60. package/dist/commands/channel/list.js +233 -0
  61. package/dist/commands/channel/list.js.map +1 -0
  62. package/dist/commands/channel/messages.d.ts +15 -0
  63. package/dist/commands/channel/messages.d.ts.map +1 -0
  64. package/dist/commands/channel/messages.js +245 -0
  65. package/dist/commands/channel/messages.js.map +1 -0
  66. package/dist/commands/channel/rm.d.ts +27 -0
  67. package/dist/commands/channel/rm.d.ts.map +1 -0
  68. package/dist/commands/channel/rm.js +216 -0
  69. package/dist/commands/channel/rm.js.map +1 -0
  70. package/dist/commands/channel/run.d.ts +30 -0
  71. package/dist/commands/channel/run.d.ts.map +1 -0
  72. package/dist/commands/channel/run.js +130 -0
  73. package/dist/commands/channel/run.js.map +1 -0
  74. package/dist/commands/channel/send.d.ts +11 -0
  75. package/dist/commands/channel/send.d.ts.map +1 -0
  76. package/dist/commands/channel/send.js +24 -0
  77. package/dist/commands/channel/send.js.map +1 -0
  78. package/dist/commands/channel/spawn.d.ts +40 -0
  79. package/dist/commands/channel/spawn.d.ts.map +1 -0
  80. package/dist/commands/channel/spawn.js +244 -0
  81. package/dist/commands/channel/spawn.js.map +1 -0
  82. package/dist/commands/channel/store/events.d.ts +39 -0
  83. package/dist/commands/channel/store/events.d.ts.map +1 -0
  84. package/dist/commands/channel/store/events.js +87 -0
  85. package/dist/commands/channel/store/events.js.map +1 -0
  86. package/dist/commands/channel/store/filter.d.ts +3 -0
  87. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  88. package/dist/commands/channel/store/filter.js +2 -0
  89. package/dist/commands/channel/store/filter.js.map +1 -0
  90. package/dist/commands/channel/store/lock.d.ts +23 -0
  91. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  92. package/dist/commands/channel/store/lock.js +99 -0
  93. package/dist/commands/channel/store/lock.js.map +1 -0
  94. package/dist/commands/channel/store/paths.d.ts +63 -0
  95. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  96. package/dist/commands/channel/store/paths.js +246 -0
  97. package/dist/commands/channel/store/paths.js.map +1 -0
  98. package/dist/commands/channel/store/schema.d.ts +27 -0
  99. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  100. package/dist/commands/channel/store/schema.js +34 -0
  101. package/dist/commands/channel/store/schema.js.map +1 -0
  102. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  103. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  104. package/dist/commands/channel/store/thread-state.js +16 -0
  105. package/dist/commands/channel/store/thread-state.js.map +1 -0
  106. package/dist/commands/channel/store/watch.d.ts +19 -0
  107. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  108. package/dist/commands/channel/store/watch.js +146 -0
  109. package/dist/commands/channel/store/watch.js.map +1 -0
  110. package/dist/commands/channel/supervisor/idle.d.ts +46 -0
  111. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  112. package/dist/commands/channel/supervisor/idle.js +72 -0
  113. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  114. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  115. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  116. package/dist/commands/channel/supervisor/inbox.js +160 -0
  117. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  118. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  119. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  120. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  121. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  122. package/dist/commands/channel/supervisor/stdout.d.ts +51 -0
  123. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  124. package/dist/commands/channel/supervisor/stdout.js +121 -0
  125. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  126. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  127. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  128. package/dist/commands/channel/supervisor/turns.js +45 -0
  129. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  130. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  131. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  132. package/dist/commands/channel/supervisor/warning.js +77 -0
  133. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  134. package/dist/commands/channel/supervisor.d.ts +59 -0
  135. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  136. package/dist/commands/channel/supervisor.js +344 -0
  137. package/dist/commands/channel/supervisor.js.map +1 -0
  138. package/dist/commands/channel/text-body.d.ts +13 -0
  139. package/dist/commands/channel/text-body.d.ts.map +1 -0
  140. package/dist/commands/channel/text-body.js +47 -0
  141. package/dist/commands/channel/text-body.js.map +1 -0
  142. package/dist/commands/channel/threads.d.ts +39 -0
  143. package/dist/commands/channel/threads.d.ts.map +1 -0
  144. package/dist/commands/channel/threads.js +106 -0
  145. package/dist/commands/channel/threads.js.map +1 -0
  146. package/dist/commands/channel/title.d.ts +12 -0
  147. package/dist/commands/channel/title.d.ts.map +1 -0
  148. package/dist/commands/channel/title.js +24 -0
  149. package/dist/commands/channel/title.js.map +1 -0
  150. package/dist/commands/channel/wait.d.ts +17 -0
  151. package/dist/commands/channel/wait.d.ts.map +1 -0
  152. package/dist/commands/channel/wait.js +75 -0
  153. package/dist/commands/channel/wait.js.map +1 -0
  154. package/dist/commands/init.d.ts +2 -0
  155. package/dist/commands/init.d.ts.map +1 -1
  156. package/dist/commands/init.js +97 -42
  157. package/dist/commands/init.js.map +1 -1
  158. package/dist/commands/mem.d.ts +13 -117
  159. package/dist/commands/mem.d.ts.map +1 -1
  160. package/dist/commands/mem.js +168 -1074
  161. package/dist/commands/mem.js.map +1 -1
  162. package/dist/commands/uninstall.d.ts.map +1 -1
  163. package/dist/commands/uninstall.js +28 -2
  164. package/dist/commands/uninstall.js.map +1 -1
  165. package/dist/commands/update.d.ts.map +1 -1
  166. package/dist/commands/update.js +31 -111
  167. package/dist/commands/update.js.map +1 -1
  168. package/dist/commands/upgrade.d.ts +28 -0
  169. package/dist/commands/upgrade.d.ts.map +1 -0
  170. package/dist/commands/upgrade.js +84 -0
  171. package/dist/commands/upgrade.js.map +1 -0
  172. package/dist/commands/workflow.d.ts +35 -0
  173. package/dist/commands/workflow.d.ts.map +1 -0
  174. package/dist/commands/workflow.js +219 -0
  175. package/dist/commands/workflow.js.map +1 -0
  176. package/dist/configurators/claude.d.ts.map +1 -1
  177. package/dist/configurators/claude.js +1 -0
  178. package/dist/configurators/claude.js.map +1 -1
  179. package/dist/configurators/codex.d.ts.map +1 -1
  180. package/dist/configurators/codex.js +5 -3
  181. package/dist/configurators/codex.js.map +1 -1
  182. package/dist/configurators/shared.js +4 -4
  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 +3 -2
  187. package/dist/configurators/workflow.js.map +1 -1
  188. package/dist/migrations/manifests/0.5.10.json +9 -0
  189. package/dist/migrations/manifests/0.5.11.json +16 -0
  190. package/dist/migrations/manifests/0.5.12.json +9 -0
  191. package/dist/migrations/manifests/0.5.13.json +9 -0
  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.6.0-beta.10.json +9 -0
  198. package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
  199. package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
  200. package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
  201. package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
  202. package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
  203. package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
  204. package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
  205. package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
  206. package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
  207. package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
  208. package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
  209. package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
  210. package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
  211. package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
  212. package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
  213. package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
  214. package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
  215. package/dist/templates/claude/agents/trellis-check.md +13 -7
  216. package/dist/templates/claude/agents/trellis-implement.md +8 -7
  217. package/dist/templates/claude/settings.json +4 -4
  218. package/dist/templates/codebuddy/agents/trellis-check.md +13 -7
  219. package/dist/templates/codebuddy/agents/trellis-implement.md +8 -7
  220. package/dist/templates/codebuddy/settings.json +4 -4
  221. package/dist/templates/codex/agents/trellis-check.toml +4 -4
  222. package/dist/templates/codex/agents/trellis-implement.toml +4 -4
  223. package/dist/templates/codex/config.toml +5 -3
  224. package/dist/templates/codex/hooks/session-start.py +205 -119
  225. package/dist/templates/codex/hooks.json +2 -2
  226. package/dist/templates/codex/skills/before-dev/SKILL.md +12 -6
  227. package/dist/templates/codex/skills/brainstorm/SKILL.md +69 -457
  228. package/dist/templates/codex/skills/check/SKILL.md +86 -18
  229. package/dist/templates/codex/skills/start/SKILL.md +33 -323
  230. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +7 -4
  231. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +1 -1
  232. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +3 -2
  233. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +5 -5
  234. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +1 -1
  235. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +35 -6
  236. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +5 -4
  237. package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/SKILL.md +41 -0
  238. package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/mcp-setup.md +90 -0
  239. package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/repository-analysis.md +59 -0
  240. package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/spec-task-planning.md +61 -0
  241. package/dist/templates/common/bundled-skills/trellis-spec-bootstarp/references/spec-writing.md +70 -0
  242. package/dist/templates/common/commands/continue.md +6 -5
  243. package/dist/templates/common/commands/start.md +9 -6
  244. package/dist/templates/common/skills/before-dev.md +12 -6
  245. package/dist/templates/common/skills/brainstorm.md +68 -504
  246. package/dist/templates/common/skills/check.md +7 -1
  247. package/dist/templates/copilot/hooks/session-start.py +219 -101
  248. package/dist/templates/copilot/hooks.json +2 -2
  249. package/dist/templates/copilot/prompts/before-dev.prompt.md +12 -6
  250. package/dist/templates/copilot/prompts/brainstorm.prompt.md +69 -457
  251. package/dist/templates/copilot/prompts/check.prompt.md +86 -18
  252. package/dist/templates/copilot/prompts/parallel.prompt.md +16 -8
  253. package/dist/templates/copilot/prompts/start.prompt.md +33 -367
  254. package/dist/templates/cursor/agents/trellis-check.md +13 -7
  255. package/dist/templates/cursor/agents/trellis-implement.md +8 -7
  256. package/dist/templates/cursor/hooks.json +1 -7
  257. package/dist/templates/droid/droids/trellis-check.md +13 -7
  258. package/dist/templates/droid/droids/trellis-implement.md +8 -7
  259. package/dist/templates/droid/settings.json +4 -4
  260. package/dist/templates/gemini/agents/trellis-check.md +11 -5
  261. package/dist/templates/gemini/agents/trellis-implement.md +7 -6
  262. package/dist/templates/gemini/settings.json +2 -2
  263. package/dist/templates/kiro/agents/trellis-check.json +1 -1
  264. package/dist/templates/kiro/agents/trellis-implement.json +1 -1
  265. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +127 -9
  266. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +171 -6
  267. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +333 -43
  268. package/dist/templates/markdown/spec/guides/index.md.txt +18 -0
  269. package/dist/templates/opencode/agents/trellis-check.md +13 -7
  270. package/dist/templates/opencode/agents/trellis-implement.md +9 -8
  271. package/dist/templates/opencode/lib/session-utils.js +212 -123
  272. package/dist/templates/opencode/lib/trellis-context.js +73 -11
  273. package/dist/templates/opencode/plugins/inject-subagent-context.js +131 -29
  274. package/dist/templates/opencode/plugins/inject-workflow-state.js +9 -5
  275. package/dist/templates/opencode/plugins/session-start.js +9 -1
  276. package/dist/templates/pi/agents/trellis-check.md +5 -4
  277. package/dist/templates/pi/agents/trellis-implement.md +5 -4
  278. package/dist/templates/pi/extensions/trellis/index.ts.txt +1357 -754
  279. package/dist/templates/qoder/agents/trellis-check.md +11 -5
  280. package/dist/templates/qoder/agents/trellis-implement.md +7 -6
  281. package/dist/templates/qoder/settings.json +4 -4
  282. package/dist/templates/shared-hooks/index.d.ts.map +1 -1
  283. package/dist/templates/shared-hooks/index.js +0 -1
  284. package/dist/templates/shared-hooks/index.js.map +1 -1
  285. package/dist/templates/shared-hooks/inject-subagent-context.py +36 -14
  286. package/dist/templates/shared-hooks/inject-workflow-state.py +40 -42
  287. package/dist/templates/shared-hooks/session-start.py +222 -171
  288. package/dist/templates/trellis/config.yaml +38 -0
  289. package/dist/templates/trellis/index.d.ts +1 -0
  290. package/dist/templates/trellis/index.d.ts.map +1 -1
  291. package/dist/templates/trellis/index.js +2 -0
  292. package/dist/templates/trellis/index.js.map +1 -1
  293. package/dist/templates/trellis/scripts/add_session.py +50 -24
  294. package/dist/templates/trellis/scripts/common/config.py +57 -1
  295. package/dist/templates/trellis/scripts/common/safe_commit.py +285 -0
  296. package/dist/templates/trellis/scripts/common/session_context.py +384 -137
  297. package/dist/templates/trellis/scripts/common/task_context.py +3 -3
  298. package/dist/templates/trellis/scripts/common/task_store.py +161 -15
  299. package/dist/templates/trellis/scripts/common/workflow_phase.py +7 -10
  300. package/dist/templates/trellis/scripts/task.py +3 -3
  301. package/dist/templates/trellis/workflow.md +119 -98
  302. package/dist/utils/cwd-guard.d.ts +38 -0
  303. package/dist/utils/cwd-guard.d.ts.map +1 -0
  304. package/dist/utils/cwd-guard.js +62 -0
  305. package/dist/utils/cwd-guard.js.map +1 -0
  306. package/dist/utils/file-writer.d.ts +13 -0
  307. package/dist/utils/file-writer.d.ts.map +1 -1
  308. package/dist/utils/file-writer.js +59 -1
  309. package/dist/utils/file-writer.js.map +1 -1
  310. package/dist/utils/manifest-prune.d.ts +61 -0
  311. package/dist/utils/manifest-prune.d.ts.map +1 -0
  312. package/dist/utils/manifest-prune.js +136 -0
  313. package/dist/utils/manifest-prune.js.map +1 -0
  314. package/dist/utils/task-json.d.ts +9 -42
  315. package/dist/utils/task-json.d.ts.map +1 -1
  316. package/dist/utils/task-json.js +8 -45
  317. package/dist/utils/task-json.js.map +1 -1
  318. package/dist/utils/template-hash.d.ts +32 -6
  319. package/dist/utils/template-hash.d.ts.map +1 -1
  320. package/dist/utils/template-hash.js +53 -31
  321. package/dist/utils/template-hash.js.map +1 -1
  322. package/dist/utils/uninstall-scrubbers.d.ts +1 -0
  323. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
  324. package/dist/utils/uninstall-scrubbers.js +21 -0
  325. package/dist/utils/uninstall-scrubbers.js.map +1 -1
  326. package/dist/utils/workflow-resolver.d.ts +86 -0
  327. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  328. package/dist/utils/workflow-resolver.js +265 -0
  329. package/dist/utils/workflow-resolver.js.map +1 -0
  330. package/package.json +9 -8
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Worker adapter factory.
3
+ *
4
+ * Each provider (claude, codex, future: opencode, gemini, …) implements a
5
+ * `WorkerAdapter` describing how to:
6
+ *
7
+ * - launch the worker CLI (`buildArgs`)
8
+ * - create a per-worker mutable context (`createCtx`)
9
+ * - optionally run a handshake before user messages flow (`handshake`)
10
+ * - report readiness for user input (`isReady`)
11
+ * - parse a line of stdout into channel events (`parseLine`)
12
+ * - encode a channel user message for stdin (`encodeUserMessage`)
13
+ *
14
+ * `getAdapter(name)` returns the right adapter. supervisor.ts and spawn.ts
15
+ * stay provider-agnostic — adding a new provider means writing a new
16
+ * `<name>.ts` adapter and registering it here.
17
+ */
18
+ import { buildClaudeArgs, encodeClaudeInterruptMessage, encodeClaudeUserMessage, parseClaudeLine, } from "./claude.js";
19
+ import { buildCodexArgs, buildCodexThreadStartParams, createCodexCtx, encodeCodexInterruptMessage, encodeCodexRequest, encodeCodexUserMessage, parseCodexLine, } from "./codex.js";
20
+ /** Claude adapter — stream-json over stdio, no handshake. */
21
+ const claudeAdapter = {
22
+ provider: "claude",
23
+ buildArgs(view) {
24
+ return buildClaudeArgs({
25
+ resumeSessionId: view.resume,
26
+ model: view.model,
27
+ systemPrompt: view.systemPrompt,
28
+ });
29
+ },
30
+ createCtx() {
31
+ return undefined;
32
+ },
33
+ isReady() {
34
+ return true;
35
+ },
36
+ parseLine(line) {
37
+ return parseClaudeLine(line);
38
+ },
39
+ encodeUserMessage(text) {
40
+ return encodeClaudeUserMessage(text);
41
+ },
42
+ encodeInterruptMessage(text) {
43
+ return encodeClaudeInterruptMessage(text);
44
+ },
45
+ };
46
+ /** Codex adapter — JSON-RPC 2.0 via `app-server`, requires handshake. */
47
+ const codexAdapter = {
48
+ provider: "codex",
49
+ buildArgs(view) {
50
+ return buildCodexArgs({ model: view.model });
51
+ },
52
+ createCtx() {
53
+ return createCodexCtx();
54
+ },
55
+ async handshake({ child, ctx, view }) {
56
+ // 1. initialize
57
+ const init = encodeCodexRequest(ctx, "initialize", {
58
+ clientInfo: { name: "trellis-channel", version: "0.1" },
59
+ capabilities: {},
60
+ }, "initialize");
61
+ child.stdin.write(init.line);
62
+ // 2. wait briefly so initialize lands first
63
+ await sleep(150);
64
+ const ts = encodeCodexRequest(ctx, "thread/start", buildCodexThreadStartParams(view.cwd, view.systemPrompt), "thread/start");
65
+ child.stdin.write(ts.line);
66
+ // 3. wait for thread/start response to populate threadId
67
+ const deadline = Date.now() + 30_000;
68
+ while (!ctx.threadId && Date.now() < deadline) {
69
+ await sleep(50);
70
+ }
71
+ if (!ctx.threadId) {
72
+ throw new Error("Codex thread/start did not produce a threadId within 30s");
73
+ }
74
+ },
75
+ isReady(ctx) {
76
+ return Boolean(ctx.threadId);
77
+ },
78
+ parseLine(line, ctx) {
79
+ return parseCodexLine(line, ctx);
80
+ },
81
+ encodeUserMessage(text, ctx) {
82
+ return encodeCodexUserMessage(ctx, text).line;
83
+ },
84
+ encodeInterruptMessage(text, ctx) {
85
+ return encodeCodexInterruptMessage(ctx, text).line;
86
+ },
87
+ };
88
+ /**
89
+ * Single source of truth for known providers. Adding a new adapter:
90
+ * 1. write `adapters/<name>.ts`
91
+ * 2. add `<name>: <name>Adapter` here
92
+ * No other file in the runtime needs to change.
93
+ */
94
+ const REGISTRY = {
95
+ claude: claudeAdapter,
96
+ codex: codexAdapter,
97
+ };
98
+ /** Runtime list of registered providers — used by CLI validation. */
99
+ export function listProviders() {
100
+ return Object.keys(REGISTRY);
101
+ }
102
+ export function isProvider(value) {
103
+ return value in REGISTRY;
104
+ }
105
+ export function getAdapter(provider) {
106
+ const a = REGISTRY[provider];
107
+ if (!a) {
108
+ throw new Error(`Unknown provider '${provider}' (registered: ${listProviders().join(", ")})`);
109
+ }
110
+ return a;
111
+ }
112
+ function sleep(ms) {
113
+ return new Promise((r) => setTimeout(r, ms));
114
+ }
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/channel/adapters/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ChannelEventKind } from "../store/events.js";
2
+ /**
3
+ * Event emitted by an adapter from a single line of worker stdout.
4
+ *
5
+ * The adapter never assigns `seq` / `ts` / `by` — supervisor adds those before
6
+ * appending to events.jsonl. Adapter only decides `kind` + payload.
7
+ */
8
+ export interface AdapterEvent {
9
+ kind: ChannelEventKind;
10
+ /** Free-form payload merged into the event. */
11
+ payload?: Record<string, unknown>;
12
+ }
13
+ /**
14
+ * Side effects the adapter requested while parsing this line.
15
+ * Supervisor performs them after appending the events.
16
+ */
17
+ export interface AdapterSideEffect {
18
+ persistSessionId?: string;
19
+ persistThreadId?: string;
20
+ /** Lines (already newline-terminated) the adapter wants written to worker stdin. */
21
+ reply?: string[];
22
+ /** Resolutions to pending outgoing requests, keyed by id. */
23
+ resolved?: {
24
+ id: number;
25
+ result?: unknown;
26
+ error?: unknown;
27
+ }[];
28
+ }
29
+ export interface ParseResult {
30
+ events: AdapterEvent[];
31
+ side?: AdapterSideEffect;
32
+ }
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAChE;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/commands/channel/adapters/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Load a Trellis agent definition from `.trellis/agents/<name>.md`.
3
+ *
4
+ * Format: YAML frontmatter (between `---` fences) + markdown body.
5
+ * The body becomes the system prompt injected into the worker.
6
+ *
7
+ * ---
8
+ * name: architect
9
+ * description: System architect ...
10
+ * provider: claude # claude | codex; used as default --provider
11
+ * model: claude-opus-4-7 # CLI-specific model id; optional
12
+ * labels: [design] # optional metadata
13
+ * ---
14
+ *
15
+ * You are a senior system architect ...
16
+ *
17
+ * Unknown frontmatter fields are preserved as metadata but ignored by
18
+ * channel runtime (they may be consumed by other Trellis layers).
19
+ */
20
+ export interface AgentDefinition {
21
+ name: string;
22
+ description?: string;
23
+ provider?: "claude" | "codex";
24
+ model?: string;
25
+ labels?: string[];
26
+ systemPrompt: string;
27
+ raw: Record<string, string>;
28
+ filePath: string;
29
+ }
30
+ export declare function findAgentFile(name: string, cwd: string): string | null;
31
+ export declare function loadAgent(name: string, cwd?: string): AgentDefinition;
32
+ //# sourceMappingURL=agent-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/agent-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBtE;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAsB,GAC1B,eAAe,CAyCjB"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Load a Trellis agent definition from `.trellis/agents/<name>.md`.
3
+ *
4
+ * Format: YAML frontmatter (between `---` fences) + markdown body.
5
+ * The body becomes the system prompt injected into the worker.
6
+ *
7
+ * ---
8
+ * name: architect
9
+ * description: System architect ...
10
+ * provider: claude # claude | codex; used as default --provider
11
+ * model: claude-opus-4-7 # CLI-specific model id; optional
12
+ * labels: [design] # optional metadata
13
+ * ---
14
+ *
15
+ * You are a senior system architect ...
16
+ *
17
+ * Unknown frontmatter fields are preserved as metadata but ignored by
18
+ * channel runtime (they may be consumed by other Trellis layers).
19
+ */
20
+ import fs from "node:fs";
21
+ import path from "node:path";
22
+ const FRONTMATTER_FENCE = /^---\s*\n([\s\S]*?)\n---\s*\n?([\s\S]*)$/;
23
+ const SAFE_AGENT_NAME = /^[A-Za-z0-9._-]+$/;
24
+ export function findAgentFile(name, cwd) {
25
+ // Reject path-traversal attempts (`..`, `/`, etc.) — agent names must be
26
+ // a single safe identifier. Without this, `--agent ../../etc/passwd`
27
+ // would read arbitrary host files into the worker system prompt.
28
+ if (!SAFE_AGENT_NAME.test(name)) {
29
+ throw new Error(`Agent name '${name}' is not allowed (must match ${SAFE_AGENT_NAME.source})`);
30
+ }
31
+ const agentsRoot = path.resolve(cwd, ".trellis", "agents");
32
+ const candidates = [
33
+ path.join(agentsRoot, `${name}.md`),
34
+ path.join(agentsRoot, name, "AGENT.md"),
35
+ ];
36
+ for (const p of candidates) {
37
+ // Defense in depth: confirm the resolved path stays under agentsRoot.
38
+ const real = fs.existsSync(p) ? fs.realpathSync(p) : p;
39
+ if (real !== agentsRoot && !real.startsWith(agentsRoot + path.sep)) {
40
+ continue;
41
+ }
42
+ if (fs.existsSync(p))
43
+ return p;
44
+ }
45
+ return null;
46
+ }
47
+ export function loadAgent(name, cwd = process.cwd()) {
48
+ const file = findAgentFile(name, cwd);
49
+ if (!file) {
50
+ throw new Error(`Agent '${name}' not found. Looked in:\n ${[
51
+ path.join(cwd, ".trellis", "agents", `${name}.md`),
52
+ path.join(cwd, ".trellis", "agents", name, "AGENT.md"),
53
+ ].join("\n ")}`);
54
+ }
55
+ const raw = fs.readFileSync(file, "utf-8");
56
+ const m = FRONTMATTER_FENCE.exec(raw);
57
+ if (!m) {
58
+ throw new Error(`Agent '${name}' at ${file} has no YAML frontmatter (expected --- ... --- block at top)`);
59
+ }
60
+ const fm = parseFrontmatter(m[1] ?? "");
61
+ const body = (m[2] ?? "").trim();
62
+ const provider = normalizeProvider(fm.provider);
63
+ const labels = fm.labels
64
+ ? fm.labels
65
+ .replace(/[[\]]/g, "")
66
+ .split(",")
67
+ .map((s) => s.trim())
68
+ .filter(Boolean)
69
+ : undefined;
70
+ return {
71
+ name: fm.name?.trim() || name,
72
+ description: fm.description?.trim() || undefined,
73
+ provider,
74
+ model: fm.model?.trim() || undefined,
75
+ labels,
76
+ systemPrompt: body,
77
+ raw: fm,
78
+ filePath: file,
79
+ };
80
+ }
81
+ function normalizeProvider(v) {
82
+ if (!v)
83
+ return undefined;
84
+ const t = v.trim().toLowerCase();
85
+ if (t === "claude" || t === "codex")
86
+ return t;
87
+ return undefined;
88
+ }
89
+ /**
90
+ * Very small flat-YAML parser for the frontmatter dialect we expect:
91
+ * key: value
92
+ * multiline_key: |
93
+ * line one
94
+ * line two
95
+ *
96
+ * Lists / nested objects beyond this are returned as their raw string form.
97
+ */
98
+ // Dangerous keys that would corrupt Object.prototype if assigned naïvely.
99
+ // We use Object.create(null) as the bag, but also reject these to keep
100
+ // callers safe when they iterate / spread the result.
101
+ const FORBIDDEN_KEYS = new Set(["__proto__", "prototype", "constructor"]);
102
+ function parseFrontmatter(text) {
103
+ // Prototype-less object: assignment to `__proto__` etc. won't traverse
104
+ // up to Object.prototype.
105
+ const out = Object.create(null);
106
+ const lines = text.split("\n");
107
+ let i = 0;
108
+ while (i < lines.length) {
109
+ const line = lines[i];
110
+ if (!line.trim() || line.trim().startsWith("#")) {
111
+ i++;
112
+ continue;
113
+ }
114
+ const m = /^([A-Za-z0-9_-]+)\s*:\s*(.*)$/.exec(line);
115
+ if (!m) {
116
+ i++;
117
+ continue;
118
+ }
119
+ const key = m[1];
120
+ const inline = m[2];
121
+ if (FORBIDDEN_KEYS.has(key)) {
122
+ process.stderr.write(`[channel agent-loader] refusing dangerous frontmatter key '${key}'\n`);
123
+ // Still need to consume any block scalar continuation lines.
124
+ if (inline === "|" || inline === ">") {
125
+ i++;
126
+ while (i < lines.length && !lines[i].match(/^\S/))
127
+ i++;
128
+ }
129
+ else {
130
+ i++;
131
+ }
132
+ continue;
133
+ }
134
+ if (inline === "|" || inline === ">") {
135
+ // Block scalar — collect indented continuation lines
136
+ const block = [];
137
+ i++;
138
+ while (i < lines.length) {
139
+ const cont = lines[i];
140
+ if (cont.match(/^\S/))
141
+ break;
142
+ block.push(cont.replace(/^ {2}/, ""));
143
+ i++;
144
+ }
145
+ out[key] = block.join("\n").trim();
146
+ }
147
+ else {
148
+ out[key] = inline.trim();
149
+ i++;
150
+ }
151
+ }
152
+ return out;
153
+ }
154
+ //# sourceMappingURL=agent-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../../src/commands/channel/agent-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B,MAAM,iBAAiB,GAAG,0CAA0C,CAAC;AAErE,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAE5C,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,GAAW;IACrD,yEAAyE;IACzE,qEAAqE;IACrE,iEAAiE;IACjE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,gCAAgC,eAAe,CAAC,MAAM,GAAG,CAC7E,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,KAAK,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC;KACxC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,sEAAsE;QACtE,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnE,SAAS;QACX,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,8BAA8B;YAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,KAAK,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;SACvD,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,QAAQ,IAAI,8DAA8D,CACzF,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM;QACtB,CAAC,CAAC,EAAE,CAAC,MAAM;aACN,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI;QAC7B,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,SAAS;QAChD,QAAQ;QACR,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;QACpC,MAAM;QACN,YAAY,EAAE,IAAI;QAClB,GAAG,EAAE,EAAE;QACP,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,CAAqB;IAErB,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,0EAA0E;AAC1E,uEAAuE;AACvE,sDAAsD;AACtD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AAE1E,SAAS,gBAAgB,CAAC,IAAY;IACpC,uEAAuE;IACvE,0BAA0B;IAC1B,MAAM,GAAG,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAGrD,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8DAA8D,GAAG,KAAK,CACvE,CAAC;YACF,6DAA6D;YAC7D,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrC,CAAC,EAAE,CAAC;gBACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;oBAAE,CAAC,EAAE,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACrC,qDAAqD;YACrD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;oBAAE,MAAM;gBAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBACtC,CAAC,EAAE,CAAC;YACN,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Resolve a list of `--file` / `--jsonl` specs into the concatenated context
3
+ * string to be embedded in the worker's system prompt.
4
+ *
5
+ * --file <path-or-glob> direct file inclusion (glob expanded via fs.globSync)
6
+ * --jsonl <path> parse a Trellis jsonl manifest where each line is
7
+ * {"file": "<path>", "reason": "<why>"} and include
8
+ * each referenced file (reason becomes part of header)
9
+ *
10
+ * All paths are resolved relative to `cwd` (the spawn caller's cwd).
11
+ * Missing files are skipped with a stderr warning, not fatal.
12
+ * Each block is delimited with a header so the model can attribute content
13
+ * to its source file.
14
+ */
15
+ export interface AssembledContext {
16
+ /** Composed prompt body for `# CONTEXT FILES` (or "" if nothing loaded). */
17
+ prompt: string;
18
+ /** Relative paths of every file actually injected — surfaced on `spawned`. */
19
+ paths: string[];
20
+ /** Relative paths of every `--jsonl` manifest processed (regardless of
21
+ * whether the manifest yielded any entries) — surfaced on `spawned`
22
+ * so users can see "I passed --jsonl X but the manifest was empty". */
23
+ manifests: string[];
24
+ }
25
+ export declare function assembleContext(cwd: string, files?: string[], jsonls?: string[]): AssembledContext;
26
+ //# sourceMappingURL=context-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-loader.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/context-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiDH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;4EAEwE;IACxE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,MAAM,EAAO,EACpB,MAAM,GAAE,MAAM,EAAO,GACpB,gBAAgB,CAsElB"}