@pennixrv/trellis 0.7.0-beta.8 → 0.7.1

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 (484) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/index.d.ts.map +1 -1
  3. package/dist/cli/index.js +14 -26
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/commands/ablate.js +1 -1
  6. package/dist/commands/ablate.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +30 -56
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/task-progress.d.ts +2 -0
  11. package/dist/commands/task-progress.d.ts.map +1 -1
  12. package/dist/commands/task-progress.js +37 -30
  13. package/dist/commands/task-progress.js.map +1 -1
  14. package/dist/commands/{channel → teamwork}/adapters/claude.d.ts +3 -3
  15. package/dist/commands/teamwork/adapters/claude.d.ts.map +1 -0
  16. package/dist/commands/{channel → teamwork}/adapters/claude.js +3 -3
  17. package/dist/commands/teamwork/adapters/claude.js.map +1 -0
  18. package/dist/commands/{channel → teamwork}/adapters/codex.d.ts +1 -15
  19. package/dist/commands/teamwork/adapters/codex.d.ts.map +1 -0
  20. package/dist/commands/{channel → teamwork}/adapters/codex.js +5 -42
  21. package/dist/commands/teamwork/adapters/codex.js.map +1 -0
  22. package/dist/commands/{channel → teamwork}/adapters/index.d.ts +6 -6
  23. package/dist/commands/teamwork/adapters/index.d.ts.map +1 -0
  24. package/dist/commands/{channel → teamwork}/adapters/index.js +16 -52
  25. package/dist/commands/teamwork/adapters/index.js.map +1 -0
  26. package/dist/commands/{channel → teamwork}/adapters/types.d.ts +2 -2
  27. package/dist/commands/teamwork/adapters/types.d.ts.map +1 -0
  28. package/dist/commands/teamwork/adapters/types.js.map +1 -0
  29. package/dist/commands/{channel → teamwork}/agent-loader.d.ts +2 -4
  30. package/dist/commands/teamwork/agent-loader.d.ts.map +1 -0
  31. package/dist/commands/{channel → teamwork}/agent-loader.js +4 -35
  32. package/dist/commands/teamwork/agent-loader.js.map +1 -0
  33. package/dist/commands/teamwork/artifact.d.ts +177 -0
  34. package/dist/commands/teamwork/artifact.d.ts.map +1 -0
  35. package/dist/commands/teamwork/artifact.js +908 -0
  36. package/dist/commands/teamwork/artifact.js.map +1 -0
  37. package/dist/commands/{channel → teamwork}/context-loader.d.ts +1 -1
  38. package/dist/commands/teamwork/context-loader.d.ts.map +1 -0
  39. package/dist/commands/{channel → teamwork}/context-loader.js +12 -12
  40. package/dist/commands/teamwork/context-loader.js.map +1 -0
  41. package/dist/commands/{channel → teamwork}/context-trust.d.ts +6 -6
  42. package/dist/commands/teamwork/context-trust.d.ts.map +1 -0
  43. package/dist/commands/{channel → teamwork}/context-trust.js +16 -16
  44. package/dist/commands/teamwork/context-trust.js.map +1 -0
  45. package/dist/commands/teamwork/context.d.ts +16 -0
  46. package/dist/commands/teamwork/context.d.ts.map +1 -0
  47. package/dist/commands/{channel → teamwork}/context.js +17 -17
  48. package/dist/commands/teamwork/context.js.map +1 -0
  49. package/dist/commands/teamwork/coordinator.d.ts +89 -0
  50. package/dist/commands/teamwork/coordinator.d.ts.map +1 -0
  51. package/dist/commands/teamwork/coordinator.js +1198 -0
  52. package/dist/commands/teamwork/coordinator.js.map +1 -0
  53. package/dist/commands/teamwork/create.d.ts +23 -0
  54. package/dist/commands/teamwork/create.d.ts.map +1 -0
  55. package/dist/commands/teamwork/create.js +39 -0
  56. package/dist/commands/teamwork/create.js.map +1 -0
  57. package/dist/commands/{channel → teamwork}/dev-parse-trace.d.ts +1 -1
  58. package/dist/commands/teamwork/dev-parse-trace.d.ts.map +1 -0
  59. package/dist/commands/{channel → teamwork}/dev-parse-trace.js +1 -1
  60. package/dist/commands/teamwork/dev-parse-trace.js.map +1 -0
  61. package/dist/commands/{channel → teamwork}/guard.d.ts +27 -46
  62. package/dist/commands/teamwork/guard.d.ts.map +1 -0
  63. package/dist/commands/{channel → teamwork}/guard.js +54 -156
  64. package/dist/commands/teamwork/guard.js.map +1 -0
  65. package/dist/commands/teamwork/index.d.ts +3 -0
  66. package/dist/commands/teamwork/index.d.ts.map +1 -0
  67. package/dist/commands/{channel → teamwork}/index.js +135 -165
  68. package/dist/commands/teamwork/index.js.map +1 -0
  69. package/dist/commands/{channel → teamwork}/interrupt.d.ts +1 -1
  70. package/dist/commands/teamwork/interrupt.d.ts.map +1 -0
  71. package/dist/commands/teamwork/interrupt.js +22 -0
  72. package/dist/commands/teamwork/interrupt.js.map +1 -0
  73. package/dist/commands/teamwork/kill.d.ts +7 -0
  74. package/dist/commands/teamwork/kill.d.ts.map +1 -0
  75. package/dist/commands/{channel → teamwork}/kill.js +21 -21
  76. package/dist/commands/teamwork/kill.js.map +1 -0
  77. package/dist/commands/teamwork/list.d.ts +17 -0
  78. package/dist/commands/teamwork/list.d.ts.map +1 -0
  79. package/dist/commands/{channel → teamwork}/list.js +18 -27
  80. package/dist/commands/teamwork/list.js.map +1 -0
  81. package/dist/commands/{channel → teamwork}/messages.d.ts +1 -1
  82. package/dist/commands/teamwork/messages.d.ts.map +1 -0
  83. package/dist/commands/{channel → teamwork}/messages.js +18 -18
  84. package/dist/commands/teamwork/messages.js.map +1 -0
  85. package/dist/commands/teamwork/profiles.d.ts +25 -0
  86. package/dist/commands/teamwork/profiles.d.ts.map +1 -0
  87. package/dist/commands/teamwork/profiles.js +125 -0
  88. package/dist/commands/teamwork/profiles.js.map +1 -0
  89. package/dist/commands/teamwork/rm.d.ts +27 -0
  90. package/dist/commands/teamwork/rm.d.ts.map +1 -0
  91. package/dist/commands/{channel → teamwork}/rm.js +21 -22
  92. package/dist/commands/teamwork/rm.js.map +1 -0
  93. package/dist/commands/teamwork/run.d.ts +29 -0
  94. package/dist/commands/{channel → teamwork}/run.d.ts.map +1 -1
  95. package/dist/commands/teamwork/run.js +129 -0
  96. package/dist/commands/teamwork/run.js.map +1 -0
  97. package/dist/commands/{channel → teamwork}/send.d.ts +1 -1
  98. package/dist/commands/teamwork/send.d.ts.map +1 -0
  99. package/dist/commands/{channel → teamwork}/send.js +7 -7
  100. package/dist/commands/teamwork/send.js.map +1 -0
  101. package/dist/commands/{channel → teamwork}/spawn.d.ts +8 -12
  102. package/dist/commands/teamwork/spawn.d.ts.map +1 -0
  103. package/dist/commands/{channel → teamwork}/spawn.js +51 -112
  104. package/dist/commands/teamwork/spawn.js.map +1 -0
  105. package/dist/commands/teamwork/store/events.d.ts +22 -0
  106. package/dist/commands/teamwork/store/events.d.ts.map +1 -0
  107. package/dist/commands/{channel → teamwork}/store/events.js +8 -8
  108. package/dist/commands/teamwork/store/events.js.map +1 -0
  109. package/dist/commands/teamwork/store/filter.d.ts +3 -0
  110. package/dist/commands/teamwork/store/filter.d.ts.map +1 -0
  111. package/dist/commands/teamwork/store/filter.js +2 -0
  112. package/dist/commands/teamwork/store/filter.js.map +1 -0
  113. package/dist/commands/{channel → teamwork}/store/lock.d.ts +1 -1
  114. package/dist/commands/teamwork/store/lock.d.ts.map +1 -0
  115. package/dist/commands/{channel → teamwork}/store/lock.js +2 -2
  116. package/dist/commands/teamwork/store/lock.js.map +1 -0
  117. package/dist/commands/{channel → teamwork}/store/paths.d.ts +18 -32
  118. package/dist/commands/teamwork/store/paths.d.ts.map +1 -0
  119. package/dist/commands/{channel → teamwork}/store/paths.js +42 -109
  120. package/dist/commands/teamwork/store/paths.js.map +1 -0
  121. package/dist/commands/teamwork/store/schema.d.ts +18 -0
  122. package/dist/commands/teamwork/store/schema.d.ts.map +1 -0
  123. package/dist/commands/teamwork/store/schema.js +23 -0
  124. package/dist/commands/teamwork/store/schema.js.map +1 -0
  125. package/dist/commands/{channel → teamwork}/store/thread-state.d.ts +3 -3
  126. package/dist/commands/teamwork/store/thread-state.d.ts.map +1 -0
  127. package/dist/commands/{channel → teamwork}/store/thread-state.js +1 -1
  128. package/dist/commands/teamwork/store/thread-state.js.map +1 -0
  129. package/dist/commands/teamwork/store/watch.d.ts +19 -0
  130. package/dist/commands/teamwork/store/watch.d.ts.map +1 -0
  131. package/dist/commands/{channel → teamwork}/store/watch.js +8 -8
  132. package/dist/commands/teamwork/store/watch.js.map +1 -0
  133. package/dist/commands/teamwork/supervisor/idle.d.ts.map +1 -0
  134. package/dist/commands/teamwork/supervisor/idle.js.map +1 -0
  135. package/dist/commands/{channel → teamwork}/supervisor/inbox.d.ts +2 -2
  136. package/dist/commands/teamwork/supervisor/inbox.d.ts.map +1 -0
  137. package/dist/commands/{channel → teamwork}/supervisor/inbox.js +14 -14
  138. package/dist/commands/teamwork/supervisor/inbox.js.map +1 -0
  139. package/dist/commands/{channel → teamwork}/supervisor/shutdown.d.ts +3 -6
  140. package/dist/commands/teamwork/supervisor/shutdown.d.ts.map +1 -0
  141. package/dist/commands/{channel → teamwork}/supervisor/shutdown.js +7 -17
  142. package/dist/commands/teamwork/supervisor/shutdown.js.map +1 -0
  143. package/dist/commands/{channel → teamwork}/supervisor/stdout.d.ts +3 -5
  144. package/dist/commands/teamwork/supervisor/stdout.d.ts.map +1 -0
  145. package/dist/commands/{channel → teamwork}/supervisor/stdout.js +12 -23
  146. package/dist/commands/teamwork/supervisor/stdout.js.map +1 -0
  147. package/dist/commands/teamwork/supervisor/turns.d.ts.map +1 -0
  148. package/dist/commands/teamwork/supervisor/turns.js.map +1 -0
  149. package/dist/commands/{channel → teamwork}/supervisor/warning.d.ts +5 -5
  150. package/dist/commands/teamwork/supervisor/warning.d.ts.map +1 -0
  151. package/dist/commands/{channel → teamwork}/supervisor/warning.js +6 -6
  152. package/dist/commands/teamwork/supervisor/warning.js.map +1 -0
  153. package/dist/commands/{channel → teamwork}/supervisor.d.ts +21 -21
  154. package/dist/commands/teamwork/supervisor.d.ts.map +1 -0
  155. package/dist/commands/{channel → teamwork}/supervisor.js +53 -63
  156. package/dist/commands/teamwork/supervisor.js.map +1 -0
  157. package/dist/commands/teamwork/teammate-adapters.d.ts +31 -0
  158. package/dist/commands/teamwork/teammate-adapters.d.ts.map +1 -0
  159. package/dist/commands/teamwork/teammate-adapters.js +96 -0
  160. package/dist/commands/teamwork/teammate-adapters.js.map +1 -0
  161. package/dist/commands/teamwork/teammate-config.d.ts +19 -0
  162. package/dist/commands/teamwork/teammate-config.d.ts.map +1 -0
  163. package/dist/commands/teamwork/teammate-config.js +97 -0
  164. package/dist/commands/teamwork/teammate-config.js.map +1 -0
  165. package/dist/commands/teamwork/teammate-launch.d.ts +58 -0
  166. package/dist/commands/teamwork/teammate-launch.d.ts.map +1 -0
  167. package/dist/commands/teamwork/teammate-launch.js +125 -0
  168. package/dist/commands/teamwork/teammate-launch.js.map +1 -0
  169. package/dist/commands/teamwork/text-body.d.ts +13 -0
  170. package/dist/commands/teamwork/text-body.d.ts.map +1 -0
  171. package/dist/commands/{channel → teamwork}/text-body.js +3 -3
  172. package/dist/commands/teamwork/text-body.js.map +1 -0
  173. package/dist/commands/teamwork/threads.d.ts +35 -0
  174. package/dist/commands/teamwork/threads.d.ts.map +1 -0
  175. package/dist/commands/{channel → teamwork}/threads.js +19 -19
  176. package/dist/commands/teamwork/threads.js.map +1 -0
  177. package/dist/commands/teamwork/title.d.ts +12 -0
  178. package/dist/commands/teamwork/title.d.ts.map +1 -0
  179. package/dist/commands/teamwork/title.js +24 -0
  180. package/dist/commands/teamwork/title.js.map +1 -0
  181. package/dist/commands/{channel → teamwork}/wait.d.ts +1 -5
  182. package/dist/commands/teamwork/wait.d.ts.map +1 -0
  183. package/dist/commands/{channel → teamwork}/wait.js +8 -21
  184. package/dist/commands/teamwork/wait.js.map +1 -0
  185. package/dist/commands/update.d.ts.map +1 -1
  186. package/dist/commands/update.js +48 -89
  187. package/dist/commands/update.js.map +1 -1
  188. package/dist/commands/workflow.d.ts +1 -1
  189. package/dist/commands/workflow.d.ts.map +1 -1
  190. package/dist/commands/workflow.js +9 -10
  191. package/dist/commands/workflow.js.map +1 -1
  192. package/dist/configurators/claude.d.ts +0 -17
  193. package/dist/configurators/claude.d.ts.map +1 -1
  194. package/dist/configurators/claude.js +2 -61
  195. package/dist/configurators/claude.js.map +1 -1
  196. package/dist/configurators/shared.d.ts.map +1 -1
  197. package/dist/configurators/shared.js +2 -2
  198. package/dist/configurators/shared.js.map +1 -1
  199. package/dist/configurators/snow.js +1 -1
  200. package/dist/configurators/snow.js.map +1 -1
  201. package/dist/configurators/workflow.d.ts +1 -1
  202. package/dist/configurators/workflow.js +5 -5
  203. package/dist/configurators/workflow.js.map +1 -1
  204. package/dist/constants/paths.d.ts +1 -1
  205. package/dist/constants/paths.d.ts.map +1 -1
  206. package/dist/constants/paths.js +1 -1
  207. package/dist/constants/paths.js.map +1 -1
  208. package/dist/migrations/manifests/0.7.0-beta.10.json +9 -0
  209. package/dist/migrations/manifests/0.7.0-beta.11.json +9 -0
  210. package/dist/migrations/manifests/0.7.0-beta.12.json +9 -0
  211. package/dist/migrations/manifests/0.7.0-beta.13.json +9 -0
  212. package/dist/migrations/manifests/0.7.0-beta.14.json +9 -0
  213. package/dist/migrations/manifests/0.7.0-beta.15.json +9 -0
  214. package/dist/migrations/manifests/0.7.0-beta.16.json +9 -0
  215. package/dist/migrations/manifests/0.7.0-beta.17.json +9 -0
  216. package/dist/migrations/manifests/0.7.0-beta.18.json +9 -0
  217. package/dist/migrations/manifests/0.7.0-beta.19.json +9 -0
  218. package/dist/migrations/manifests/0.7.0-beta.20.json +9 -0
  219. package/dist/migrations/manifests/0.7.0-beta.21.json +17 -0
  220. package/dist/migrations/manifests/0.7.0-beta.22.json +9 -0
  221. package/dist/migrations/manifests/0.7.0-beta.23.json +9 -0
  222. package/dist/migrations/manifests/0.7.0-beta.24.json +9 -0
  223. package/dist/migrations/manifests/0.7.0-beta.25.json +9 -0
  224. package/dist/migrations/manifests/0.7.0-beta.26.json +9 -0
  225. package/dist/migrations/manifests/0.7.0-beta.27.json +9 -0
  226. package/dist/migrations/manifests/0.7.0-beta.28.json +9 -0
  227. package/dist/migrations/manifests/0.7.0-beta.29.json +9 -0
  228. package/dist/migrations/manifests/0.7.0-beta.30.json +9 -0
  229. package/dist/migrations/manifests/0.7.0-beta.31.json +9 -0
  230. package/dist/migrations/manifests/0.7.0-beta.32.json +9 -0
  231. package/dist/migrations/manifests/0.7.0-beta.33.json +9 -0
  232. package/dist/migrations/manifests/0.7.0-beta.34.json +9 -0
  233. package/dist/migrations/manifests/0.7.0-beta.35.json +9 -0
  234. package/dist/migrations/manifests/0.7.0-beta.36.json +9 -0
  235. package/dist/migrations/manifests/0.7.0-beta.37.json +9 -0
  236. package/dist/migrations/manifests/0.7.0-beta.38.json +9 -0
  237. package/dist/migrations/manifests/0.7.0-beta.39.json +9 -0
  238. package/dist/migrations/manifests/0.7.0-beta.40.json +9 -0
  239. package/dist/migrations/manifests/0.7.0-beta.41.json +9 -0
  240. package/dist/migrations/manifests/0.7.0-beta.42.json +9 -0
  241. package/dist/migrations/manifests/0.7.0-beta.43.json +9 -0
  242. package/dist/migrations/manifests/0.7.0-beta.44.json +9 -0
  243. package/dist/migrations/manifests/0.7.0-beta.45.json +9 -0
  244. package/dist/migrations/manifests/0.7.0-beta.46.json +9 -0
  245. package/dist/migrations/manifests/0.7.0-beta.47.json +9 -0
  246. package/dist/migrations/manifests/0.7.0-beta.48.json +9 -0
  247. package/dist/migrations/manifests/0.7.0-beta.49.json +13 -0
  248. package/dist/migrations/manifests/0.7.0-beta.50.json +12 -0
  249. package/dist/migrations/manifests/0.7.0-beta.51.json +9 -0
  250. package/dist/migrations/manifests/0.7.0-beta.52.json +9 -0
  251. package/dist/migrations/manifests/0.7.0-beta.53.json +27 -0
  252. package/dist/migrations/manifests/0.7.0-beta.54.json +8 -0
  253. package/dist/migrations/manifests/0.7.0-beta.9.json +9 -0
  254. package/dist/migrations/manifests/0.7.1.json +9 -0
  255. package/dist/templates/claude/hooks/statusline.py +0 -7
  256. package/dist/templates/codex/hooks/session-start.py +31 -38
  257. package/dist/templates/common/bundled-skills/trellis-decision-space-construction-and-merging/SKILL.md +10 -0
  258. package/dist/templates/common/bundled-skills/trellis-decision-space-construction-and-merging/workflow.md +40 -0
  259. package/dist/templates/common/bundled-skills/trellis-delivery-review-and-closeout/SKILL.md +10 -0
  260. package/dist/templates/common/bundled-skills/trellis-delivery-review-and-closeout/workflow.md +55 -0
  261. package/dist/templates/common/bundled-skills/trellis-goal-exploration-and-requirements/SKILL.md +10 -0
  262. package/dist/templates/common/bundled-skills/trellis-goal-exploration-and-requirements/workflow.md +33 -0
  263. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +25 -25
  264. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +1 -1
  265. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +13 -19
  266. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +1 -1
  267. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +27 -75
  268. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +17 -56
  269. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +1 -1
  270. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +14 -11
  271. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +0 -33
  272. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-teamwork.md +32 -0
  273. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +1 -1
  274. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +25 -111
  275. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +19 -60
  276. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +1 -1
  277. package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +1 -1
  278. package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +1 -1
  279. package/dist/templates/common/bundled-skills/trellis-solution-design-and-convergence/SKILL.md +10 -0
  280. package/dist/templates/common/bundled-skills/trellis-solution-design-and-convergence/workflow.md +36 -0
  281. package/dist/templates/common/bundled-skills/trellis-task-implementation/SKILL.md +10 -0
  282. package/dist/templates/common/bundled-skills/trellis-task-implementation/workflow.md +29 -0
  283. package/dist/templates/common/bundled-skills/trellis-teamwork/SKILL.md +73 -0
  284. package/dist/templates/common/bundled-skills/trellis-teamwork/references/coordination-modes.md +29 -0
  285. package/dist/templates/common/bundled-skills/trellis-teamwork/references/teammate-configuration-matrix.md +31 -0
  286. package/dist/templates/common/bundled-skills/trellis-teamwork/references/teammate-processes.md +37 -0
  287. package/dist/templates/common/bundled-skills/trellis-teamwork/references/teamwork-plan-construction.md +78 -0
  288. package/dist/templates/common/commands/continue.md +9 -49
  289. package/dist/templates/common/commands/finish-work.md +10 -58
  290. package/dist/templates/common/commands/start.md +19 -49
  291. package/dist/templates/common/skills/brainstorm.md +11 -191
  292. package/dist/templates/copilot/hooks/session-start.py +30 -26
  293. package/dist/templates/copilot/prompts/brainstorm.prompt.md +7 -150
  294. package/dist/templates/copilot/prompts/finish-work.prompt.md +11 -88
  295. package/dist/templates/copilot/prompts/record-session.prompt.md +4 -12
  296. package/dist/templates/copilot/prompts/start.prompt.md +12 -10
  297. package/dist/templates/dsh/DSH.md +2 -2
  298. package/dist/templates/kiro/agents/trellis.json +2 -2
  299. package/dist/templates/markdown/agents.md +14 -3
  300. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +9 -8
  301. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +1 -1
  302. package/dist/templates/markdown/workspace-index.md +0 -1
  303. package/dist/templates/omp/extensions/trellis/index.ts.txt +28 -17
  304. package/dist/templates/opencode/lib/session-utils.js +20 -25
  305. package/dist/templates/opencode/lib/trellis-context.js +4 -76
  306. package/dist/templates/opencode/plugins/inject-subagent-context.js +5 -4
  307. package/dist/templates/opencode/plugins/inject-workflow-state.js +14 -17
  308. package/dist/templates/shared-hooks/inject-shell-session-context.py +3 -3
  309. package/dist/templates/shared-hooks/inject-subagent-context.py +445 -67
  310. package/dist/templates/shared-hooks/inject-workflow-state.py +44 -36
  311. package/dist/templates/shared-hooks/session-start.py +21 -33
  312. package/dist/templates/trellis/agents/delegated-worktree-primary-agent.md +18 -0
  313. package/dist/templates/trellis/agents/teammate-profiles.json +8 -0
  314. package/dist/templates/trellis/agents/teammate.md +63 -0
  315. package/dist/templates/trellis/config.yaml +29 -38
  316. package/dist/templates/trellis/gitignore.txt +1 -0
  317. package/dist/templates/trellis/index.d.ts +8 -12
  318. package/dist/templates/trellis/index.d.ts.map +1 -1
  319. package/dist/templates/trellis/index.js +14 -25
  320. package/dist/templates/trellis/index.js.map +1 -1
  321. package/dist/templates/trellis/scripts/add_session.py +1 -1
  322. package/dist/templates/trellis/scripts/common/__init__.py +0 -1
  323. package/dist/templates/trellis/scripts/common/active_task.py +136 -100
  324. package/dist/templates/trellis/scripts/common/config.py +7 -9
  325. package/dist/templates/trellis/scripts/common/git_context.py +1 -1
  326. package/dist/templates/trellis/scripts/common/io.py +19 -0
  327. package/dist/templates/trellis/scripts/common/paths.py +0 -1
  328. package/dist/templates/trellis/scripts/common/safe_commit.py +11 -90
  329. package/dist/templates/trellis/scripts/common/session_context.py +1 -8
  330. package/dist/templates/trellis/scripts/common/spec_match.py +1 -1
  331. package/dist/templates/trellis/scripts/common/task_context.py +152 -59
  332. package/dist/templates/trellis/scripts/common/task_continuity.py +563 -0
  333. package/dist/templates/trellis/scripts/common/task_store.py +70 -548
  334. package/dist/templates/trellis/scripts/common/task_utils.py +4 -98
  335. package/dist/templates/trellis/scripts/common/task_workflow.py +1096 -0
  336. package/dist/templates/trellis/scripts/common/tasks.py +5 -8
  337. package/dist/templates/trellis/scripts/common/workflow_phase.py +8 -7
  338. package/dist/templates/trellis/scripts/hooks/linear_sync.py +3 -3
  339. package/dist/templates/trellis/scripts/task.py +114 -377
  340. package/dist/templates/trellis/workflow.md +111 -699
  341. package/dist/utils/agent-refs.d.ts +5 -5
  342. package/dist/utils/agent-refs.js +6 -6
  343. package/dist/utils/file-writer.d.ts +3 -2
  344. package/dist/utils/file-writer.d.ts.map +1 -1
  345. package/dist/utils/file-writer.js +3 -2
  346. package/dist/utils/file-writer.js.map +1 -1
  347. package/dist/utils/managed-paths.d.ts +0 -7
  348. package/dist/utils/managed-paths.d.ts.map +1 -1
  349. package/dist/utils/managed-paths.js +0 -40
  350. package/dist/utils/managed-paths.js.map +1 -1
  351. package/dist/utils/manifest-prune.d.ts.map +1 -1
  352. package/dist/utils/manifest-prune.js +2 -11
  353. package/dist/utils/manifest-prune.js.map +1 -1
  354. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
  355. package/dist/utils/uninstall-scrubbers.js +3 -3
  356. package/dist/utils/uninstall-scrubbers.js.map +1 -1
  357. package/dist/utils/workflow-resolver.d.ts +10 -16
  358. package/dist/utils/workflow-resolver.d.ts.map +1 -1
  359. package/dist/utils/workflow-resolver.js +25 -36
  360. package/dist/utils/workflow-resolver.js.map +1 -1
  361. package/package.json +2 -2
  362. package/dist/commands/channel/adapters/claude.d.ts.map +0 -1
  363. package/dist/commands/channel/adapters/claude.js.map +0 -1
  364. package/dist/commands/channel/adapters/codex.d.ts.map +0 -1
  365. package/dist/commands/channel/adapters/codex.js.map +0 -1
  366. package/dist/commands/channel/adapters/index.d.ts.map +0 -1
  367. package/dist/commands/channel/adapters/index.js.map +0 -1
  368. package/dist/commands/channel/adapters/types.d.ts.map +0 -1
  369. package/dist/commands/channel/adapters/types.js.map +0 -1
  370. package/dist/commands/channel/agent-loader.d.ts.map +0 -1
  371. package/dist/commands/channel/agent-loader.js.map +0 -1
  372. package/dist/commands/channel/context-loader.d.ts.map +0 -1
  373. package/dist/commands/channel/context-loader.js.map +0 -1
  374. package/dist/commands/channel/context-trust.d.ts.map +0 -1
  375. package/dist/commands/channel/context-trust.js.map +0 -1
  376. package/dist/commands/channel/context.d.ts +0 -16
  377. package/dist/commands/channel/context.d.ts.map +0 -1
  378. package/dist/commands/channel/context.js.map +0 -1
  379. package/dist/commands/channel/create.d.ts +0 -29
  380. package/dist/commands/channel/create.d.ts.map +0 -1
  381. package/dist/commands/channel/create.js +0 -47
  382. package/dist/commands/channel/create.js.map +0 -1
  383. package/dist/commands/channel/dev-parse-trace.d.ts.map +0 -1
  384. package/dist/commands/channel/dev-parse-trace.js.map +0 -1
  385. package/dist/commands/channel/guard.d.ts.map +0 -1
  386. package/dist/commands/channel/guard.js.map +0 -1
  387. package/dist/commands/channel/index.d.ts +0 -3
  388. package/dist/commands/channel/index.d.ts.map +0 -1
  389. package/dist/commands/channel/index.js.map +0 -1
  390. package/dist/commands/channel/interrupt.d.ts.map +0 -1
  391. package/dist/commands/channel/interrupt.js +0 -22
  392. package/dist/commands/channel/interrupt.js.map +0 -1
  393. package/dist/commands/channel/kill.d.ts +0 -7
  394. package/dist/commands/channel/kill.d.ts.map +0 -1
  395. package/dist/commands/channel/kill.js.map +0 -1
  396. package/dist/commands/channel/list.d.ts +0 -18
  397. package/dist/commands/channel/list.d.ts.map +0 -1
  398. package/dist/commands/channel/list.js.map +0 -1
  399. package/dist/commands/channel/messages.d.ts.map +0 -1
  400. package/dist/commands/channel/messages.js.map +0 -1
  401. package/dist/commands/channel/rm.d.ts +0 -27
  402. package/dist/commands/channel/rm.d.ts.map +0 -1
  403. package/dist/commands/channel/rm.js.map +0 -1
  404. package/dist/commands/channel/run.d.ts +0 -32
  405. package/dist/commands/channel/run.js +0 -141
  406. package/dist/commands/channel/run.js.map +0 -1
  407. package/dist/commands/channel/send.d.ts.map +0 -1
  408. package/dist/commands/channel/send.js.map +0 -1
  409. package/dist/commands/channel/spawn.d.ts.map +0 -1
  410. package/dist/commands/channel/spawn.js.map +0 -1
  411. package/dist/commands/channel/store/events.d.ts +0 -22
  412. package/dist/commands/channel/store/events.d.ts.map +0 -1
  413. package/dist/commands/channel/store/events.js.map +0 -1
  414. package/dist/commands/channel/store/filter.d.ts +0 -3
  415. package/dist/commands/channel/store/filter.d.ts.map +0 -1
  416. package/dist/commands/channel/store/filter.js +0 -2
  417. package/dist/commands/channel/store/filter.js.map +0 -1
  418. package/dist/commands/channel/store/lock.d.ts.map +0 -1
  419. package/dist/commands/channel/store/lock.js.map +0 -1
  420. package/dist/commands/channel/store/paths.d.ts.map +0 -1
  421. package/dist/commands/channel/store/paths.js.map +0 -1
  422. package/dist/commands/channel/store/schema.d.ts +0 -27
  423. package/dist/commands/channel/store/schema.d.ts.map +0 -1
  424. package/dist/commands/channel/store/schema.js +0 -34
  425. package/dist/commands/channel/store/schema.js.map +0 -1
  426. package/dist/commands/channel/store/thread-state.d.ts.map +0 -1
  427. package/dist/commands/channel/store/thread-state.js.map +0 -1
  428. package/dist/commands/channel/store/watch.d.ts +0 -19
  429. package/dist/commands/channel/store/watch.d.ts.map +0 -1
  430. package/dist/commands/channel/store/watch.js.map +0 -1
  431. package/dist/commands/channel/supervisor/idle.d.ts.map +0 -1
  432. package/dist/commands/channel/supervisor/idle.js.map +0 -1
  433. package/dist/commands/channel/supervisor/inbox.d.ts.map +0 -1
  434. package/dist/commands/channel/supervisor/inbox.js.map +0 -1
  435. package/dist/commands/channel/supervisor/shutdown.d.ts.map +0 -1
  436. package/dist/commands/channel/supervisor/shutdown.js.map +0 -1
  437. package/dist/commands/channel/supervisor/stdout.d.ts.map +0 -1
  438. package/dist/commands/channel/supervisor/stdout.js.map +0 -1
  439. package/dist/commands/channel/supervisor/turns.d.ts.map +0 -1
  440. package/dist/commands/channel/supervisor/turns.js.map +0 -1
  441. package/dist/commands/channel/supervisor/warning.d.ts.map +0 -1
  442. package/dist/commands/channel/supervisor/warning.js.map +0 -1
  443. package/dist/commands/channel/supervisor.d.ts.map +0 -1
  444. package/dist/commands/channel/supervisor.js.map +0 -1
  445. package/dist/commands/channel/text-body.d.ts +0 -13
  446. package/dist/commands/channel/text-body.d.ts.map +0 -1
  447. package/dist/commands/channel/text-body.js.map +0 -1
  448. package/dist/commands/channel/threads.d.ts +0 -39
  449. package/dist/commands/channel/threads.d.ts.map +0 -1
  450. package/dist/commands/channel/threads.js.map +0 -1
  451. package/dist/commands/channel/title.d.ts +0 -12
  452. package/dist/commands/channel/title.d.ts.map +0 -1
  453. package/dist/commands/channel/title.js +0 -24
  454. package/dist/commands/channel/title.js.map +0 -1
  455. package/dist/commands/channel/wait.d.ts.map +0 -1
  456. package/dist/commands/channel/wait.js.map +0 -1
  457. package/dist/commands/channel/workers.d.ts +0 -9
  458. package/dist/commands/channel/workers.d.ts.map +0 -1
  459. package/dist/commands/channel/workers.js +0 -31
  460. package/dist/commands/channel/workers.js.map +0 -1
  461. package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +0 -69
  462. package/dist/templates/common/bundled-skills/trellis-channel/references/command-reference.md +0 -549
  463. package/dist/templates/common/bundled-skills/trellis-channel/references/forum.md +0 -233
  464. package/dist/templates/common/bundled-skills/trellis-channel/references/progress-debugging.md +0 -237
  465. package/dist/templates/common/bundled-skills/trellis-channel/references/subnode-work.md +0 -193
  466. package/dist/templates/common/bundled-skills/trellis-channel/references/workers.md +0 -295
  467. package/dist/templates/common/bundled-skills/trellis-channel/references/workflows.md +0 -131
  468. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-channel.md +0 -70
  469. package/dist/templates/common/bundled-skills/trellis-research-record/SKILL.md +0 -14
  470. package/dist/templates/copilot/prompts/parallel.prompt.md +0 -204
  471. package/dist/templates/trellis/agents/check.md +0 -70
  472. package/dist/templates/trellis/agents/implement.md +0 -71
  473. package/dist/templates/trellis/agents/subnode.env +0 -4
  474. package/dist/templates/trellis/agents/subnode.md +0 -69
  475. package/dist/templates/trellis/scripts/common/context_projection.py +0 -508
  476. package/dist/templates/trellis/scripts/common/continuation_record.py +0 -450
  477. package/dist/templates/trellis/scripts/common/ownership_record.py +0 -439
  478. package/dist/templates/trellis/scripts/subnode_artifact.py +0 -597
  479. package/dist/templates/trellis/scripts/workspace_note.py +0 -126
  480. /package/dist/commands/{channel → teamwork}/adapters/types.js +0 -0
  481. /package/dist/commands/{channel → teamwork}/supervisor/idle.d.ts +0 -0
  482. /package/dist/commands/{channel → teamwork}/supervisor/idle.js +0 -0
  483. /package/dist/commands/{channel → teamwork}/supervisor/turns.d.ts +0 -0
  484. /package/dist/commands/{channel → teamwork}/supervisor/turns.js +0 -0
@@ -1,20 +1,20 @@
1
1
  /**
2
- * Supervisor process: owns a single worker (claude or codex) and bridges
3
- * worker ↔ channel events.jsonl.
2
+ * Supervisor process: owns one teammate process (Claude Code or Codex) and
3
+ * bridges teammate messages with the TeamworkSession event log.
4
4
  *
5
- * Run as: `trellis channel __supervisor <channel> <worker> <config-path>`
5
+ * Run as: `trellis teamwork __supervisor <sessionId> <teammate> <config-path>`
6
6
  *
7
7
  * Three concurrent loops:
8
- * 1. stdout reader — parse worker stdout → adapter → append events
9
- * 2. inbox watcher — read events.jsonl for `to=<worker>` say events,
10
- * translate via adapter.encodeUserMessage → worker stdin
11
- * 3. signal handler — SIGTERM → close worker stdin → 3s → SIGTERM → 3s → SIGKILL
8
+ * 1. stdout reader — parse teammate output → adapter → append events
9
+ * 2. inbox watcher — read events.jsonl for `to=<teammate>` messages,
10
+ * translate via adapter.encodeUserMessage → process stdin
11
+ * 3. signal handler — SIGTERM → close process stdin → 3s → SIGTERM → 3s → SIGKILL
12
12
  * → write `killed` event → exit
13
13
  */
14
14
  import { spawn } from "node:child_process";
15
15
  import fs from "node:fs";
16
16
  import path from "node:path";
17
- import { DEFAULT_INBOX_POLICY, } from "@pennixrv/trellis-core/channel";
17
+ import { DEFAULT_INBOX_POLICY, } from "@pennixrv/trellis-core/teamwork";
18
18
  import { shouldUseSystemPromptFile } from "./adapters/claude.js";
19
19
  import { getAdapter } from "./adapters/index.js";
20
20
  import { appendEvent } from "./store/events.js";
@@ -27,7 +27,7 @@ import { TurnTracker } from "./supervisor/turns.js";
27
27
  import { scheduleSupervisorTimeoutWarning } from "./supervisor/warning.js";
28
28
  const SHUTDOWN_GRACE_MS = 3000;
29
29
  /**
30
- * Drain worker stdout before synthesising terminal state and removing the
30
+ * Drain teammate output before synthesising terminal state and removing the
31
31
  * supervisor's runtime files.
32
32
  */
33
33
  export async function finalizeSupervisorExit(args) {
@@ -55,7 +55,7 @@ export async function finalizeSupervisorExit(args) {
55
55
  * Resolve the real launch target for npm `.cmd` shims on Windows.
56
56
  *
57
57
  * @param provider CLI basename for the provider, such as `codex` or `claude`.
58
- * @param cwd Worker launch directory, used to check local `node_modules/.bin` first.
58
+ * @param cwd Teammate launch directory, used to check local `node_modules/.bin` first.
59
59
  * @returns Command and prefix arguments that can be passed directly to `spawn()`.
60
60
  */
61
61
  export function resolveProviderPath(provider, cwd) {
@@ -99,19 +99,19 @@ export function resolveProviderPath(provider, cwd) {
99
99
  return fallback;
100
100
  }
101
101
  /**
102
- * Entry point invoked by `trellis channel __supervisor <channel> <worker> <config>`.
102
+ * Entry point invoked by `trellis teamwork __supervisor <sessionId> <teammate> <config>`.
103
103
  */
104
- export async function runSupervisor(channelName, workerName, configPath) {
104
+ export async function runSupervisor(sessionId, workerName, configPath) {
105
105
  const config = readConfig(configPath);
106
- // Self-pid file lets `trellis channel kill` find us.
107
- const project = process.env.TRELLIS_CHANNEL_PROJECT;
108
- fs.writeFileSync(workerFile(channelName, workerName, "pid", project), String(process.pid));
106
+ // Self-pid file lets `trellis teamwork kill` find us.
107
+ const project = process.env.TRELLIS_TEAMWORK_PROJECT;
108
+ fs.writeFileSync(workerFile(sessionId, workerName, "pid", project), String(process.pid));
109
109
  // ── adapter selection ──
110
110
  const adapter = getAdapter(config.provider);
111
111
  const adapterCtx = adapter.createCtx();
112
- // Persist an oversized system prompt to the worker dir and hand adapters a
112
+ // Persist an oversized system prompt to the teammate dir and hand adapters a
113
113
  // file path. Inlining a large prompt (agent body + injected --file/--jsonl
114
- // context) on the worker command line breaks spawn(): Windows CreateProcess
114
+ // context) on the teammate command line breaks spawn(): Windows CreateProcess
115
115
  // caps the command line at 32,767 chars and fails with a silent-to-the-user
116
116
  // ENAMETOOLONG. Prompts within the inline budget stay on the argv flag so
117
117
  // Claude Code installs older than v2.0.34 (no --append-system-prompt-file)
@@ -119,7 +119,7 @@ export async function runSupervisor(channelName, workerName, configPath) {
119
119
  // prompt flag (claude: --append-system-prompt-file) prefer it.
120
120
  let systemPromptFile;
121
121
  if (shouldUseSystemPromptFile(config.systemPrompt)) {
122
- systemPromptFile = workerFile(channelName, workerName, "system-prompt.md", project);
122
+ systemPromptFile = workerFile(sessionId, workerName, "system-prompt.md", project);
123
123
  fs.writeFileSync(systemPromptFile, config.systemPrompt);
124
124
  }
125
125
  const view = {
@@ -135,10 +135,10 @@ export async function runSupervisor(channelName, workerName, configPath) {
135
135
  ...process.env,
136
136
  ...config.env,
137
137
  TRELLIS_HOOKS: "0",
138
- TRELLIS_CHANNEL: channelName,
139
- TRELLIS_CHANNEL_AS: workerName,
138
+ TRELLIS_TEAMWORK_SESSION: sessionId,
139
+ TRELLIS_TEAMWORK_AS: workerName,
140
140
  };
141
- const logPath = workerFile(channelName, workerName, "log", project);
141
+ const logPath = workerFile(sessionId, workerName, "log", project);
142
142
  const log = fs.createWriteStream(logPath);
143
143
  const resolvedProvider = resolveProviderPath(adapter.provider, config.cwd);
144
144
  const resolvedProviderDisplay = [
@@ -156,7 +156,7 @@ export async function runSupervisor(channelName, workerName, configPath) {
156
156
  // create the controller and attach listeners synchronously, with no
157
157
  // await between spawn() and child.on("error").
158
158
  const shutdown = createShutdown({
159
- channelName,
159
+ sessionId,
160
160
  workerName,
161
161
  log,
162
162
  getChild: () => child,
@@ -168,17 +168,16 @@ export async function runSupervisor(channelName, workerName, configPath) {
168
168
  });
169
169
  const stdoutDrain = createStdoutDrainControl();
170
170
  const idleTimerRef = {};
171
- const inboxAbort = new AbortController();
172
171
  const turnTracker = new TurnTracker({
173
172
  onIdleExit: () => idleTimerRef.current?.pause(),
174
173
  onIdleEnter: () => idleTimerRef.current?.reset(),
175
174
  });
176
175
  // Attach before any await. Node drains unread child stdio after `exit`, so
177
176
  // attaching only after the durable `spawned` append can silently discard a
178
- // fast worker's final output. Line processing stays gated until `spawned`
177
+ // fast teammate's final output. Line processing stays gated until `spawned`
179
178
  // is durable, preserving event-log order.
180
179
  const stdoutDrained = startStdoutPump({
181
- channelName,
180
+ sessionId,
182
181
  workerName,
183
182
  child,
184
183
  adapter,
@@ -186,16 +185,6 @@ export async function runSupervisor(channelName, workerName, configPath) {
186
185
  log,
187
186
  shutdown,
188
187
  turnTracker,
189
- project,
190
- ...(config.agent === "subnode"
191
- ? {
192
- onDone: () => {
193
- idleTimerRef.current?.cancel();
194
- inboxAbort.abort();
195
- shutdown.complete();
196
- },
197
- }
198
- : {}),
199
188
  processLines: stdoutDrain.processLines,
200
189
  signal: stdoutDrain.signal,
201
190
  });
@@ -223,9 +212,9 @@ export async function runSupervisor(channelName, workerName, configPath) {
223
212
  // during pipe teardown). The startup-failed path runs an IIFE that
224
213
  // owns process.exit; subsequent fires must be no-ops or we'd queue
225
214
  // duplicate error events.
226
- if (spawnFailed || shutdown.isShuttingDown())
215
+ if (spawnFailed)
227
216
  return;
228
- log.write(`[supervisor] worker error: ${err.message}\n`);
217
+ log.write(`[supervisor] teammate error: ${err.message}\n`);
229
218
  if (!child.pid) {
230
219
  // Pre-spawn failure (ENOENT / EACCES): emit ONE `error` event,
231
220
  // skip the misleading `spawned{pid:undefined}`, clean up, and exit
@@ -236,22 +225,22 @@ export async function runSupervisor(channelName, workerName, configPath) {
236
225
  stdoutDrain.discard();
237
226
  void (async () => {
238
227
  try {
239
- await appendEvent(channelName, {
228
+ await appendEvent(sessionId, {
240
229
  kind: "error",
241
230
  by: `supervisor:${workerName}`,
242
- message: `worker spawn failed: ${err.message}`,
231
+ message: `teammate process start failed: ${err.message}`,
243
232
  provider: config.provider,
244
233
  }, project);
245
234
  }
246
235
  catch {
247
236
  // ignore — we're exiting anyway
248
237
  }
249
- await cleanup(channelName, workerName).catch(() => undefined);
238
+ await cleanup(sessionId, workerName).catch(() => undefined);
250
239
  process.exit(1);
251
240
  })();
252
241
  return;
253
242
  }
254
- // Post-spawn error (worker already running). Claude M2 fix: await
243
+ // Post-spawn error (teammate process already running). Claude M2 fix: await
255
244
  // the `error` append BEFORE requesting shutdown so `killed` can't
256
245
  // land first in events.jsonl.
257
246
  //
@@ -262,10 +251,10 @@ export async function runSupervisor(channelName, workerName, configPath) {
262
251
  shutdown.claim("crash");
263
252
  void (async () => {
264
253
  try {
265
- await appendEvent(channelName, {
254
+ await appendEvent(sessionId, {
266
255
  kind: "error",
267
256
  by: `supervisor:${workerName}`,
268
- message: `worker process error: ${err.message}`,
257
+ message: `teammate process error: ${err.message}`,
269
258
  provider: config.provider,
270
259
  }, project);
271
260
  }
@@ -286,7 +275,7 @@ export async function runSupervisor(channelName, workerName, configPath) {
286
275
  abortStdoutDrain: stdoutDrain.abortReading,
287
276
  onDrainTimeout: () => log.write(`[supervisor] stdout did not close within ${SHUTDOWN_GRACE_MS}ms; draining buffered lines and exiting\n`),
288
277
  finalizeOnExit: () => shutdown.finalizeOnExit(code, sig),
289
- cleanup: () => cleanup(channelName, workerName),
278
+ cleanup: () => cleanup(sessionId, workerName),
290
279
  exit: () => process.exit(0),
291
280
  });
292
281
  });
@@ -295,7 +284,7 @@ export async function runSupervisor(channelName, workerName, configPath) {
295
284
  // into `shutdown.request` instead of using Node's default behaviour
296
285
  // (which would orphan the child and skip the `killed` event).
297
286
  process.on("SIGTERM", () => {
298
- void shutdown.request("SIGTERM", readExternalShutdownReason(channelName, workerName, project));
287
+ void shutdown.request("SIGTERM", readExternalShutdownReason(sessionId, workerName, project));
299
288
  });
300
289
  process.on("SIGINT", () => void shutdown.request("SIGINT", "explicit-kill"));
301
290
  // SIGHUP arrives when the parent terminal closes — without this
@@ -320,8 +309,8 @@ export async function runSupervisor(channelName, workerName, configPath) {
320
309
  return;
321
310
  }
322
311
  try {
323
- fs.writeFileSync(workerFile(channelName, workerName, "worker-pid", project), String(child.pid));
324
- await appendEvent(channelName, {
312
+ fs.writeFileSync(workerFile(sessionId, workerName, "worker-pid", project), String(child.pid));
313
+ await appendEvent(sessionId, {
325
314
  kind: "spawned",
326
315
  by: config.spawnedBy ?? "main",
327
316
  as: workerName,
@@ -356,16 +345,16 @@ export async function runSupervisor(channelName, workerName, configPath) {
356
345
  // ── timeout guard (anti-zombie) ──
357
346
  if (config.timeoutMs && config.timeoutMs > 0) {
358
347
  setTimeout(() => {
359
- log.write(`[supervisor] timeout ${config.timeoutMs}ms reached, killing worker\n`);
348
+ log.write(`[supervisor] timeout ${config.timeoutMs}ms reached, stopping teammate\n`);
360
349
  // shutdown.request emits a single `killed{reason:"timeout"}` event;
361
350
  // no need to emit a separate one here.
362
351
  void shutdown.request("SIGTERM", "timeout");
363
352
  }, config.timeoutMs).unref();
364
353
  // Fire-and-forget pre-timeout observability warning. One-shot, guarded
365
- // by shutdown/terminal/exit state so it stays quiet once the worker is
354
+ // by shutdown/terminal/exit state so it stays quiet once the teammate is
366
355
  // already on its way out.
367
356
  scheduleSupervisorTimeoutWarning({
368
- channelName,
357
+ sessionId,
369
358
  workerName,
370
359
  timeoutMs: config.timeoutMs,
371
360
  warnBeforeMs: config.warnBeforeMs,
@@ -379,14 +368,15 @@ export async function runSupervisor(channelName, workerName, configPath) {
379
368
  // Start BEFORE adapter.handshake() so messages arriving during the
380
369
  // handshake window are captured. The adapter's `isReady()` is checked
381
370
  // inside runInboxWatcher; codex blocks there until thread/start lands.
382
- process.on("exit", () => inboxAbort.abort());
371
+ const abort = new AbortController();
372
+ process.on("exit", () => abort.abort());
383
373
  void runInboxWatcher({
384
- channelName,
374
+ sessionId,
385
375
  workerName,
386
376
  adapter,
387
377
  ctx: adapterCtx,
388
378
  child,
389
- signal: inboxAbort.signal,
379
+ signal: abort.signal,
390
380
  inboxPolicy: config.inboxPolicy ?? DEFAULT_INBOX_POLICY,
391
381
  turnTracker,
392
382
  });
@@ -399,11 +389,11 @@ export async function runSupervisor(channelName, workerName, configPath) {
399
389
  const msg = err instanceof Error ? err.message : String(err);
400
390
  log.write(`[supervisor] adapter handshake failed: ${msg}\n`);
401
391
  // Codex #4 fix: emit an `error` event with the handshake message
402
- // BEFORE requesting shutdown — otherwise the channel only sees a
392
+ // BEFORE requesting shutdown — otherwise the Teamwork Session only sees a
403
393
  // `killed{reason:"crash"}` with no detail on what went wrong.
404
394
  void (async () => {
405
395
  try {
406
- await appendEvent(channelName, {
396
+ await appendEvent(sessionId, {
407
397
  kind: "error",
408
398
  by: `supervisor:${workerName}`,
409
399
  message: `handshake failed: ${msg}`,
@@ -419,14 +409,14 @@ export async function runSupervisor(channelName, workerName, configPath) {
419
409
  }
420
410
  }
421
411
  }
422
- async function cleanup(channelName, workerName) {
412
+ async function cleanup(sessionId, workerName) {
423
413
  // Remove ephemeral runtime files. Keep `log` (forensic), `session-id` /
424
414
  // `thread-id` (future resume). The .spawnlock should already be gone
425
415
  // because `withLock` released it; we delete it defensively in case the
426
416
  // CLI crashed mid-spawn and left a stale one.
427
417
  // Keep `log` (forensic), `session-id` / `thread-id` (future resume).
428
- // `inbox-cursor` is kept so a respawn (same worker name without
429
- // killing the channel) doesn't replay messages.
418
+ // `inbox-cursor` is kept so a respawn (same teammate name without
419
+ // killing the Teamwork Session) doesn't replay messages.
430
420
  // `system-prompt.md` may carry a large injected context; a respawn rewrites
431
421
  // it from config when needed, so it is removed unconditionally (also when
432
422
  // the current run inlined the prompt and would otherwise leave a stale one).
@@ -440,15 +430,15 @@ async function cleanup(channelName, workerName) {
440
430
  "reservation",
441
431
  ]) {
442
432
  try {
443
- fs.unlinkSync(workerFile(channelName, workerName, suffix, process.env.TRELLIS_CHANNEL_PROJECT));
433
+ fs.unlinkSync(workerFile(sessionId, workerName, suffix, process.env.TRELLIS_TEAMWORK_PROJECT));
444
434
  }
445
435
  catch {
446
436
  // already gone
447
437
  }
448
438
  }
449
439
  }
450
- function readExternalShutdownReason(channelName, workerName, project) {
451
- const file = workerFile(channelName, workerName, "shutdown-reason", project);
440
+ function readExternalShutdownReason(sessionId, workerName, project) {
441
+ const file = workerFile(sessionId, workerName, "shutdown-reason", project);
452
442
  try {
453
443
  const reason = fs.readFileSync(file, "utf-8").trim();
454
444
  fs.unlinkSync(file);
@@ -464,8 +454,8 @@ function readConfig(p) {
464
454
  return JSON.parse(fs.readFileSync(p, "utf-8"));
465
455
  }
466
456
  // Helper to write a fresh config file before forking the supervisor.
467
- export function writeSupervisorConfig(channelName, workerName, config, project) {
468
- const p = workerFile(channelName, workerName, "config", project);
457
+ export function writeSupervisorConfig(sessionId, workerName, config, project) {
458
+ const p = workerFile(sessionId, workerName, "config", project);
469
459
  fs.mkdirSync(path.dirname(p), { recursive: true });
470
460
  fs.writeFileSync(p, JSON.stringify(config, null, 2), "utf-8");
471
461
  return p;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/commands/teamwork/supervisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { TeammateProvider } from "./profiles.js";
2
+ export type TeammateTransport = "codex-app-server" | "acp" | "claude-cli";
3
+ export interface TeammateAdapterContract {
4
+ provider: TeammateProvider;
5
+ transport: TeammateTransport;
6
+ nativeDelegationDisabled: true;
7
+ supportsLaunch: true;
8
+ supportsPrompt: true;
9
+ supportsContinuation: boolean;
10
+ supportsInterrupt: boolean;
11
+ supportsCancel: true;
12
+ supportsTerminal: boolean;
13
+ supportsFailure: true;
14
+ }
15
+ export declare function getTeammateAdapter(provider: TeammateProvider): TeammateAdapterContract;
16
+ export declare function listTeammateProviders(): TeammateProvider[];
17
+ export interface TeammateHostCapabilities {
18
+ foregroundWait: boolean;
19
+ protectedArtifactWrites: boolean;
20
+ protectedTargetsReadOnly: boolean;
21
+ gitStateReadOnly: boolean;
22
+ attemptArtifactWrites: boolean;
23
+ nativeDelegationDisabled: boolean;
24
+ implicitMemoryDisabled: boolean;
25
+ providerTransports: TeammateTransport[];
26
+ providerOptions: Partial<Record<TeammateProvider, string[]>>;
27
+ verifiedHostCap: number;
28
+ }
29
+ export declare function assertTeammateHostCapability(provider: TeammateProvider, host: TeammateHostCapabilities, options?: Record<string, string | number | boolean>): void;
30
+ export declare function assertTeammateAdapterContract(provider: TeammateProvider): void;
31
+ //# sourceMappingURL=teammate-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teammate-adapters.d.ts","sourceRoot":"","sources":["../../../src/commands/teamwork/teammate-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,KAAK,GAAG,YAAY,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,wBAAwB,EAAE,IAAI,CAAC;IAC/B,cAAc,EAAE,IAAI,CAAC;IACrB,cAAc,EAAE,IAAI,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,IAAI,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,IAAI,CAAC;CACvB;AAqDD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,gBAAgB,GACzB,uBAAuB,CAEzB;AAED,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;IACjC,wBAAwB,EAAE,OAAO,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wBAAwB,EAAE,OAAO,CAAC;IAClC,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,wBAAwB,EAC9B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAM,GACtD,IAAI,CAuCN;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,gBAAgB,GACzB,IAAI,CAgBN"}
@@ -0,0 +1,96 @@
1
+ const ADAPTERS = {
2
+ codex: {
3
+ provider: "codex",
4
+ transport: "codex-app-server",
5
+ nativeDelegationDisabled: true,
6
+ supportsLaunch: true,
7
+ supportsPrompt: true,
8
+ supportsContinuation: true,
9
+ supportsInterrupt: true,
10
+ supportsCancel: true,
11
+ supportsTerminal: true,
12
+ supportsFailure: true,
13
+ },
14
+ dsh: {
15
+ provider: "dsh",
16
+ transport: "acp",
17
+ nativeDelegationDisabled: true,
18
+ supportsLaunch: true,
19
+ supportsPrompt: true,
20
+ supportsContinuation: true,
21
+ supportsInterrupt: true,
22
+ supportsCancel: true,
23
+ supportsTerminal: true,
24
+ supportsFailure: true,
25
+ },
26
+ copilot: {
27
+ provider: "copilot",
28
+ transport: "acp",
29
+ nativeDelegationDisabled: true,
30
+ supportsLaunch: true,
31
+ supportsPrompt: true,
32
+ supportsContinuation: true,
33
+ supportsInterrupt: true,
34
+ supportsCancel: true,
35
+ supportsTerminal: true,
36
+ supportsFailure: true,
37
+ },
38
+ claude: {
39
+ provider: "claude",
40
+ transport: "claude-cli",
41
+ nativeDelegationDisabled: true,
42
+ supportsLaunch: true,
43
+ supportsPrompt: true,
44
+ supportsContinuation: true,
45
+ supportsInterrupt: true,
46
+ supportsCancel: true,
47
+ supportsTerminal: true,
48
+ supportsFailure: true,
49
+ },
50
+ };
51
+ export function getTeammateAdapter(provider) {
52
+ return ADAPTERS[provider];
53
+ }
54
+ export function listTeammateProviders() {
55
+ return Object.keys(ADAPTERS);
56
+ }
57
+ export function assertTeammateHostCapability(provider, host, options = {}) {
58
+ const adapter = getTeammateAdapter(provider);
59
+ if (host.foregroundWait !== true ||
60
+ host.protectedArtifactWrites !== true ||
61
+ host.protectedTargetsReadOnly !== true ||
62
+ host.gitStateReadOnly !== true ||
63
+ host.attemptArtifactWrites !== true ||
64
+ host.nativeDelegationDisabled !== true ||
65
+ host.implicitMemoryDisabled !== true) {
66
+ throw new Error("teammate host capability proof is incomplete; refusing batch dispatch");
67
+ }
68
+ if (!Number.isInteger(host.verifiedHostCap) || host.verifiedHostCap <= 0) {
69
+ throw new Error("teammate host capability proof has no positive verified host cap");
70
+ }
71
+ if (!host.providerTransports.includes(adapter.transport)) {
72
+ throw new Error(`teammate provider '${provider}' transport is not verified by the host`);
73
+ }
74
+ if (!adapter.nativeDelegationDisabled) {
75
+ throw new Error(`teammate provider '${provider}' does not disable native delegation`);
76
+ }
77
+ const supportedOptions = host.providerOptions[provider] ?? [];
78
+ const unsupportedOptions = Object.keys(options).filter((key) => !supportedOptions.includes(key));
79
+ if (unsupportedOptions.length > 0) {
80
+ throw new Error(`teammate provider '${provider}' has unsupported options: ${unsupportedOptions.join(", ")}`);
81
+ }
82
+ }
83
+ export function assertTeammateAdapterContract(provider) {
84
+ const adapter = getTeammateAdapter(provider);
85
+ if (!adapter.nativeDelegationDisabled ||
86
+ !adapter.supportsLaunch ||
87
+ !adapter.supportsPrompt ||
88
+ !adapter.supportsContinuation ||
89
+ !adapter.supportsInterrupt ||
90
+ !adapter.supportsCancel ||
91
+ !adapter.supportsTerminal ||
92
+ !adapter.supportsFailure) {
93
+ throw new Error(`teammate provider '${provider}' has an incomplete lifecycle contract`);
94
+ }
95
+ }
96
+ //# sourceMappingURL=teammate-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teammate-adapters.js","sourceRoot":"","sources":["../../../src/commands/teamwork/teammate-adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface TeammateConfig {
2
+ maxConcurrency: number;
3
+ }
4
+ export interface TeammateGuardConfig {
5
+ maxLiveTeammates: number;
6
+ nonBatchReserved: number;
7
+ }
8
+ export interface TeammateRuntimeConfig {
9
+ teammate: TeammateConfig;
10
+ guard: TeammateGuardConfig;
11
+ sourceDigest?: string;
12
+ }
13
+ export declare function resolveTeammateRuntimeConfig(cwd?: string, env?: NodeJS.ProcessEnv): TeammateRuntimeConfig;
14
+ export declare function effectiveTeammateCapacity(input: {
15
+ requested?: number;
16
+ config: TeammateRuntimeConfig;
17
+ verifiedHostCap: number;
18
+ }): number;
19
+ //# sourceMappingURL=teammate-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teammate-config.d.ts","sourceRoot":"","sources":["../../../src/commands/teamwork/teammate-config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsDD,wBAAgB,4BAA4B,CAC1C,GAAG,SAAgB,EACnB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,qBAAqB,CA2CvB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAuCT"}
@@ -0,0 +1,97 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { DIR_NAMES } from "../../constants/paths.js";
5
+ const DEFAULT_CONFIG = {
6
+ teammate: { maxConcurrency: 1 },
7
+ guard: { maxLiveTeammates: 6, nonBatchReserved: 0 },
8
+ };
9
+ function integer(value, field, positive = false) {
10
+ if (value === undefined)
11
+ return undefined;
12
+ if (!Number.isInteger(value) || (positive ? value <= 0 : value < 0)) {
13
+ throw new Error(`${field} must be a ${positive ? "positive" : "non-negative"} integer`);
14
+ }
15
+ return value;
16
+ }
17
+ function yamlInteger(content, section, key) {
18
+ const lines = content.split("\n");
19
+ let inTeamwork = false;
20
+ let inSection = false;
21
+ for (const raw of lines) {
22
+ const line = raw.replace(/\r$/, "");
23
+ const trimmed = line.trimEnd();
24
+ if (/^teamwork:\s*$/.test(trimmed)) {
25
+ inTeamwork = true;
26
+ inSection = false;
27
+ continue;
28
+ }
29
+ if (inTeamwork && new RegExp(`^ ${section}:\\s*$`).test(trimmed)) {
30
+ inSection = true;
31
+ continue;
32
+ }
33
+ if (inSection) {
34
+ const match = new RegExp(`^ ${key}:\\s*(-?\\d+)\\s*$`).exec(trimmed);
35
+ if (match)
36
+ return Number(match[1]);
37
+ if (!/^ {4}\S/.test(line))
38
+ inSection = false;
39
+ }
40
+ if (inTeamwork && /^\S/.test(line) && !/^teamwork:\s*$/.test(trimmed)) {
41
+ inTeamwork = false;
42
+ inSection = false;
43
+ }
44
+ }
45
+ return undefined;
46
+ }
47
+ export function resolveTeammateRuntimeConfig(cwd = process.cwd(), env = process.env) {
48
+ const configPath = path.join(cwd, DIR_NAMES.WORKFLOW, "config.yaml");
49
+ let content = "";
50
+ try {
51
+ content = fs.readFileSync(configPath, "utf8");
52
+ }
53
+ catch {
54
+ // Built-in defaults are intentionally conservative.
55
+ }
56
+ const maxConcurrency = integer(env.TRELLIS_TEAMWORK_TEAMMATE_MAX_CONCURRENCY
57
+ ? Number(env.TRELLIS_TEAMWORK_TEAMMATE_MAX_CONCURRENCY)
58
+ : yamlInteger(content, "teammate", "max_concurrency"), "teamwork.teammate.max_concurrency", true) ?? DEFAULT_CONFIG.teammate.maxConcurrency;
59
+ const maxLiveTeammates = integer(env.TRELLIS_TEAMWORK_MAX_LIVE_TEAMMATES
60
+ ? Number(env.TRELLIS_TEAMWORK_MAX_LIVE_TEAMMATES)
61
+ : yamlInteger(content, "teammate_guard", "max_live_teammates"), "teamwork.teammate_guard.max_live_teammates", true) ?? DEFAULT_CONFIG.guard.maxLiveTeammates;
62
+ const nonBatchReserved = integer(env.TRELLIS_TEAMWORK_TEAMMATE_RESERVED
63
+ ? Number(env.TRELLIS_TEAMWORK_TEAMMATE_RESERVED)
64
+ : yamlInteger(content, "teammate_guard", "non_batch_reserved"), "teamwork.teammate_guard.non_batch_reserved") ?? DEFAULT_CONFIG.guard.nonBatchReserved;
65
+ return {
66
+ teammate: { maxConcurrency },
67
+ guard: { maxLiveTeammates, nonBatchReserved },
68
+ ...(content
69
+ ? {
70
+ sourceDigest: crypto
71
+ .createHash("sha256")
72
+ .update(content)
73
+ .digest("hex"),
74
+ }
75
+ : {}),
76
+ };
77
+ }
78
+ export function effectiveTeammateCapacity(input) {
79
+ integer(input.config.teammate.maxConcurrency, "teamwork.teammate.max_concurrency", true);
80
+ integer(input.config.guard.maxLiveTeammates, "teamwork.teammate_guard.max_live_teammates", true);
81
+ integer(input.config.guard.nonBatchReserved, "teamwork.teammate_guard.non_batch_reserved");
82
+ const requested = input.requested ?? input.config.teammate.maxConcurrency;
83
+ integer(requested, "batch.requested_capacity", true);
84
+ integer(input.verifiedHostCap, "verified_host_cap", true);
85
+ const availableGuard = input.config.guard.maxLiveTeammates - input.config.guard.nonBatchReserved;
86
+ if (availableGuard <= 0) {
87
+ throw new Error("teamwork.teammate_guard has no capacity after non-batch reservations");
88
+ }
89
+ const capacity = Math.min(requested, input.config.teammate.maxConcurrency, availableGuard, input.verifiedHostCap);
90
+ if (capacity <= 0)
91
+ throw new Error("effective teammate capacity must be positive");
92
+ if (input.requested !== undefined && input.requested > capacity) {
93
+ throw new Error(`requested teammate capacity ${input.requested} exceeds verified limit ${capacity}`);
94
+ }
95
+ return capacity;
96
+ }
97
+ //# sourceMappingURL=teammate-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teammate-config.js","sourceRoot":"","sources":["../../../src/commands/teamwork/teammate-config.ts"],"names":[],"mappings":"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"}