@mindfoldhq/trellis 0.4.0 → 0.5.0-beta.10

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 (427) hide show
  1. package/dist/cli/index.js +0 -1
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/commands/init.d.ts +10 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +382 -120
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/update.d.ts +5 -0
  8. package/dist/commands/update.d.ts.map +1 -1
  9. package/dist/commands/update.js +178 -61
  10. package/dist/commands/update.js.map +1 -1
  11. package/dist/configurators/antigravity.d.ts +3 -4
  12. package/dist/configurators/antigravity.d.ts.map +1 -1
  13. package/dist/configurators/antigravity.js +17 -10
  14. package/dist/configurators/antigravity.js.map +1 -1
  15. package/dist/configurators/claude.d.ts +5 -28
  16. package/dist/configurators/claude.d.ts.map +1 -1
  17. package/dist/configurators/claude.js +30 -51
  18. package/dist/configurators/claude.js.map +1 -1
  19. package/dist/configurators/codebuddy.d.ts +6 -7
  20. package/dist/configurators/codebuddy.d.ts.map +1 -1
  21. package/dist/configurators/codebuddy.js +23 -51
  22. package/dist/configurators/codebuddy.js.map +1 -1
  23. package/dist/configurators/codex.d.ts +3 -6
  24. package/dist/configurators/codex.d.ts.map +1 -1
  25. package/dist/configurators/codex.js +29 -12
  26. package/dist/configurators/codex.js.map +1 -1
  27. package/dist/configurators/copilot.d.ts +6 -5
  28. package/dist/configurators/copilot.d.ts.map +1 -1
  29. package/dist/configurators/copilot.js +42 -13
  30. package/dist/configurators/copilot.js.map +1 -1
  31. package/dist/configurators/cursor.d.ts +6 -1
  32. package/dist/configurators/cursor.d.ts.map +1 -1
  33. package/dist/configurators/cursor.js +22 -45
  34. package/dist/configurators/cursor.js.map +1 -1
  35. package/dist/configurators/droid.d.ts +6 -1
  36. package/dist/configurators/droid.d.ts.map +1 -1
  37. package/dist/configurators/droid.js +23 -41
  38. package/dist/configurators/droid.js.map +1 -1
  39. package/dist/configurators/gemini.d.ts +8 -4
  40. package/dist/configurators/gemini.d.ts.map +1 -1
  41. package/dist/configurators/gemini.js +28 -47
  42. package/dist/configurators/gemini.js.map +1 -1
  43. package/dist/configurators/index.d.ts +1 -1
  44. package/dist/configurators/index.d.ts.map +1 -1
  45. package/dist/configurators/index.js +146 -100
  46. package/dist/configurators/index.js.map +1 -1
  47. package/dist/configurators/kilo.d.ts +3 -4
  48. package/dist/configurators/kilo.d.ts.map +1 -1
  49. package/dist/configurators/kilo.js +19 -46
  50. package/dist/configurators/kilo.js.map +1 -1
  51. package/dist/configurators/kiro.d.ts +4 -4
  52. package/dist/configurators/kiro.d.ts.map +1 -1
  53. package/dist/configurators/kiro.js +18 -14
  54. package/dist/configurators/kiro.js.map +1 -1
  55. package/dist/configurators/opencode.d.ts +7 -25
  56. package/dist/configurators/opencode.d.ts.map +1 -1
  57. package/dist/configurators/opencode.js +57 -56
  58. package/dist/configurators/opencode.js.map +1 -1
  59. package/dist/configurators/qoder.d.ts +6 -3
  60. package/dist/configurators/qoder.d.ts.map +1 -1
  61. package/dist/configurators/qoder.js +27 -46
  62. package/dist/configurators/qoder.js.map +1 -1
  63. package/dist/configurators/shared.d.ts +68 -3
  64. package/dist/configurators/shared.d.ts.map +1 -1
  65. package/dist/configurators/shared.js +274 -3
  66. package/dist/configurators/shared.js.map +1 -1
  67. package/dist/configurators/windsurf.d.ts +3 -4
  68. package/dist/configurators/windsurf.d.ts.map +1 -1
  69. package/dist/configurators/windsurf.js +17 -10
  70. package/dist/configurators/windsurf.js.map +1 -1
  71. package/dist/configurators/workflow.d.ts +0 -3
  72. package/dist/configurators/workflow.d.ts.map +1 -1
  73. package/dist/configurators/workflow.js +1 -7
  74. package/dist/configurators/workflow.js.map +1 -1
  75. package/dist/migrations/manifests/0.4.0.json +1 -1
  76. package/dist/migrations/manifests/0.5.0-beta.0.json +1646 -0
  77. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
  78. package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
  79. package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
  80. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
  81. package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
  82. package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
  83. package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
  84. package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
  85. package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
  86. package/dist/templates/claude/agents/{check.md → trellis-check.md} +3 -31
  87. package/dist/templates/claude/agents/{implement.md → trellis-implement.md} +1 -2
  88. package/dist/templates/claude/agents/trellis-research.md +137 -0
  89. package/dist/templates/claude/index.d.ts +5 -37
  90. package/dist/templates/claude/index.d.ts.map +1 -1
  91. package/dist/templates/claude/index.js +3 -42
  92. package/dist/templates/claude/index.js.map +1 -1
  93. package/dist/templates/claude/settings.json +6 -4
  94. package/dist/templates/{iflow/agents/check.md → codebuddy/agents/trellis-check.md} +3 -31
  95. package/dist/templates/{iflow/agents/implement.md → codebuddy/agents/trellis-implement.md} +1 -2
  96. package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
  97. package/dist/templates/codebuddy/index.d.ts +6 -16
  98. package/dist/templates/codebuddy/index.d.ts.map +1 -1
  99. package/dist/templates/codebuddy/index.js +6 -36
  100. package/dist/templates/codebuddy/index.js.map +1 -1
  101. package/dist/templates/codebuddy/settings.json +59 -0
  102. package/dist/templates/codex/agents/trellis-check.toml +38 -0
  103. package/dist/templates/codex/agents/{implement.toml → trellis-implement.toml} +1 -1
  104. package/dist/templates/codex/agents/trellis-research.toml +60 -0
  105. package/dist/templates/codex/config.toml +10 -0
  106. package/dist/templates/codex/hooks/session-start.py +65 -29
  107. package/dist/templates/codex/hooks.json +11 -0
  108. package/dist/templates/codex/index.d.ts +0 -1
  109. package/dist/templates/codex/index.d.ts.map +1 -1
  110. package/dist/templates/codex/index.js +1 -8
  111. package/dist/templates/codex/index.js.map +1 -1
  112. package/dist/templates/codex/skills/start/SKILL.md +1 -1
  113. package/dist/templates/common/commands/continue.md +51 -0
  114. package/dist/templates/common/commands/finish-work.md +32 -0
  115. package/dist/templates/common/commands/start.md +56 -0
  116. package/dist/templates/common/index.d.ts +28 -0
  117. package/dist/templates/common/index.d.ts.map +1 -0
  118. package/dist/templates/common/index.js +55 -0
  119. package/dist/templates/common/index.js.map +1 -0
  120. package/dist/templates/{droid/commands/trellis → common/skills}/brainstorm.md +51 -12
  121. package/dist/templates/{iflow/commands/trellis → common/skills}/break-loop.md +4 -4
  122. package/dist/templates/common/skills/check.md +87 -0
  123. package/dist/templates/{codebuddy/commands/trellis → common/skills}/update-spec.md +18 -21
  124. package/dist/templates/copilot/hooks/session-start.py +65 -29
  125. package/dist/templates/copilot/hooks.json +8 -0
  126. package/dist/templates/copilot/prompts/start.prompt.md +13 -16
  127. package/dist/templates/cursor/agents/trellis-check.md +94 -0
  128. package/dist/templates/cursor/agents/trellis-implement.md +94 -0
  129. package/dist/templates/cursor/agents/trellis-research.md +137 -0
  130. package/dist/templates/cursor/hooks.json +24 -0
  131. package/dist/templates/cursor/index.d.ts +6 -17
  132. package/dist/templates/cursor/index.d.ts.map +1 -1
  133. package/dist/templates/cursor/index.js +6 -37
  134. package/dist/templates/cursor/index.js.map +1 -1
  135. package/dist/templates/droid/droids/trellis-check.md +94 -0
  136. package/dist/templates/droid/droids/trellis-implement.md +94 -0
  137. package/dist/templates/droid/droids/trellis-research.md +137 -0
  138. package/dist/templates/droid/index.d.ts +7 -19
  139. package/dist/templates/droid/index.d.ts.map +1 -1
  140. package/dist/templates/droid/index.js +7 -39
  141. package/dist/templates/droid/index.js.map +1 -1
  142. package/dist/templates/droid/settings.json +59 -0
  143. package/dist/templates/extract.d.ts +7 -193
  144. package/dist/templates/extract.d.ts.map +1 -1
  145. package/dist/templates/extract.js +7 -310
  146. package/dist/templates/extract.js.map +1 -1
  147. package/dist/templates/gemini/agents/trellis-check.md +94 -0
  148. package/dist/templates/gemini/agents/trellis-implement.md +94 -0
  149. package/dist/templates/gemini/agents/trellis-research.md +137 -0
  150. package/dist/templates/gemini/index.d.ts +6 -14
  151. package/dist/templates/gemini/index.d.ts.map +1 -1
  152. package/dist/templates/gemini/index.js +6 -37
  153. package/dist/templates/gemini/index.js.map +1 -1
  154. package/dist/templates/gemini/settings.json +28 -0
  155. package/dist/templates/kiro/agents/trellis-check.json +13 -0
  156. package/dist/templates/kiro/agents/trellis-implement.json +13 -0
  157. package/dist/templates/kiro/agents/trellis-research.json +21 -0
  158. package/dist/templates/kiro/index.d.ts +11 -11
  159. package/dist/templates/kiro/index.d.ts.map +1 -1
  160. package/dist/templates/kiro/index.js +11 -33
  161. package/dist/templates/kiro/index.js.map +1 -1
  162. package/dist/templates/opencode/agents/{check.md → trellis-check.md} +3 -30
  163. package/dist/templates/opencode/agents/{implement.md → trellis-implement.md} +1 -1
  164. package/dist/templates/opencode/agents/{research.md → trellis-research.md} +1 -2
  165. package/dist/templates/opencode/plugins/inject-subagent-context.js +18 -190
  166. package/dist/templates/opencode/plugins/inject-workflow-state.js +172 -0
  167. package/dist/templates/opencode/plugins/session-start.js +76 -39
  168. package/dist/templates/qoder/agents/trellis-check.md +94 -0
  169. package/dist/templates/qoder/agents/trellis-implement.md +94 -0
  170. package/dist/templates/qoder/agents/trellis-research.md +137 -0
  171. package/dist/templates/qoder/index.d.ts +7 -10
  172. package/dist/templates/qoder/index.d.ts.map +1 -1
  173. package/dist/templates/qoder/index.js +7 -32
  174. package/dist/templates/qoder/index.js.map +1 -1
  175. package/dist/templates/qoder/settings.json +47 -0
  176. package/dist/templates/shared-hooks/index.d.ts +19 -0
  177. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  178. package/dist/templates/shared-hooks/index.js +30 -0
  179. package/dist/templates/shared-hooks/index.js.map +1 -0
  180. package/dist/templates/{iflow/hooks → shared-hooks}/inject-subagent-context.py +77 -266
  181. package/dist/templates/shared-hooks/inject-workflow-state.py +244 -0
  182. package/dist/templates/{claude/hooks → shared-hooks}/session-start.py +172 -55
  183. package/dist/templates/template-utils.d.ts +26 -0
  184. package/dist/templates/template-utils.d.ts.map +1 -0
  185. package/dist/templates/template-utils.js +60 -0
  186. package/dist/templates/template-utils.js.map +1 -0
  187. package/dist/templates/trellis/config.yaml +6 -0
  188. package/dist/templates/trellis/index.d.ts +1 -15
  189. package/dist/templates/trellis/index.d.ts.map +1 -1
  190. package/dist/templates/trellis/index.js +2 -29
  191. package/dist/templates/trellis/index.js.map +1 -1
  192. package/dist/templates/trellis/scripts/common/cli_adapter.py +31 -8
  193. package/dist/templates/trellis/scripts/common/config.py +126 -1
  194. package/dist/templates/trellis/scripts/common/git_context.py +25 -2
  195. package/dist/templates/trellis/scripts/common/task_context.py +23 -28
  196. package/dist/templates/trellis/scripts/common/task_store.py +0 -12
  197. package/dist/templates/trellis/scripts/common/types.py +0 -2
  198. package/dist/templates/trellis/scripts/common/workflow_phase.py +176 -0
  199. package/dist/templates/trellis/scripts/task.py +13 -35
  200. package/dist/templates/trellis/workflow.md +283 -298
  201. package/dist/types/ai-tools.d.ts +30 -3
  202. package/dist/types/ai-tools.d.ts.map +1 -1
  203. package/dist/types/ai-tools.js +119 -15
  204. package/dist/types/ai-tools.js.map +1 -1
  205. package/dist/types/migration.d.ts +8 -1
  206. package/dist/types/migration.d.ts.map +1 -1
  207. package/dist/utils/project-detector.d.ts +2 -0
  208. package/dist/utils/project-detector.d.ts.map +1 -1
  209. package/dist/utils/project-detector.js +120 -11
  210. package/dist/utils/project-detector.js.map +1 -1
  211. package/dist/utils/task-json.d.ts +46 -0
  212. package/dist/utils/task-json.d.ts.map +1 -0
  213. package/dist/utils/task-json.js +49 -0
  214. package/dist/utils/task-json.js.map +1 -0
  215. package/package.json +3 -2
  216. package/dist/configurators/iflow.d.ts +0 -33
  217. package/dist/configurators/iflow.d.ts.map +0 -1
  218. package/dist/configurators/iflow.js +0 -99
  219. package/dist/configurators/iflow.js.map +0 -1
  220. package/dist/templates/antigravity/index.d.ts +0 -12
  221. package/dist/templates/antigravity/index.d.ts.map +0 -1
  222. package/dist/templates/antigravity/index.js +0 -29
  223. package/dist/templates/antigravity/index.js.map +0 -1
  224. package/dist/templates/claude/agents/debug.md +0 -106
  225. package/dist/templates/claude/agents/dispatch.md +0 -213
  226. package/dist/templates/claude/agents/plan.md +0 -396
  227. package/dist/templates/claude/agents/research.md +0 -120
  228. package/dist/templates/claude/commands/trellis/brainstorm.md +0 -487
  229. package/dist/templates/claude/commands/trellis/break-loop.md +0 -125
  230. package/dist/templates/claude/commands/trellis/check-cross-layer.md +0 -153
  231. package/dist/templates/claude/commands/trellis/check.md +0 -25
  232. package/dist/templates/claude/commands/trellis/create-command.md +0 -154
  233. package/dist/templates/claude/commands/trellis/finish-work.md +0 -153
  234. package/dist/templates/claude/commands/trellis/integrate-skill.md +0 -219
  235. package/dist/templates/claude/commands/trellis/onboard.md +0 -358
  236. package/dist/templates/claude/commands/trellis/parallel.md +0 -192
  237. package/dist/templates/claude/commands/trellis/record-session.md +0 -62
  238. package/dist/templates/claude/commands/trellis/start.md +0 -393
  239. package/dist/templates/claude/commands/trellis/update-spec.md +0 -354
  240. package/dist/templates/claude/hooks/inject-subagent-context.py +0 -803
  241. package/dist/templates/claude/hooks/ralph-loop.py +0 -396
  242. package/dist/templates/codebuddy/commands/trellis/before-dev.md +0 -29
  243. package/dist/templates/codebuddy/commands/trellis/brainstorm.md +0 -487
  244. package/dist/templates/codebuddy/commands/trellis/break-loop.md +0 -107
  245. package/dist/templates/codebuddy/commands/trellis/check-cross-layer.md +0 -153
  246. package/dist/templates/codebuddy/commands/trellis/check.md +0 -25
  247. package/dist/templates/codebuddy/commands/trellis/create-command.md +0 -154
  248. package/dist/templates/codebuddy/commands/trellis/finish-work.md +0 -143
  249. package/dist/templates/codebuddy/commands/trellis/integrate-skill.md +0 -219
  250. package/dist/templates/codebuddy/commands/trellis/onboard.md +0 -358
  251. package/dist/templates/codebuddy/commands/trellis/record-session.md +0 -61
  252. package/dist/templates/codebuddy/commands/trellis/start.md +0 -373
  253. package/dist/templates/codex/agents/check.toml +0 -23
  254. package/dist/templates/codex/agents/research.toml +0 -26
  255. package/dist/templates/codex/codex-skills/parallel/SKILL.md +0 -194
  256. package/dist/templates/cursor/commands/trellis-before-dev.md +0 -29
  257. package/dist/templates/cursor/commands/trellis-brainstorm.md +0 -487
  258. package/dist/templates/cursor/commands/trellis-break-loop.md +0 -107
  259. package/dist/templates/cursor/commands/trellis-check-cross-layer.md +0 -153
  260. package/dist/templates/cursor/commands/trellis-check.md +0 -25
  261. package/dist/templates/cursor/commands/trellis-create-command.md +0 -154
  262. package/dist/templates/cursor/commands/trellis-finish-work.md +0 -143
  263. package/dist/templates/cursor/commands/trellis-integrate-skill.md +0 -219
  264. package/dist/templates/cursor/commands/trellis-onboard.md +0 -358
  265. package/dist/templates/cursor/commands/trellis-record-session.md +0 -62
  266. package/dist/templates/cursor/commands/trellis-start.md +0 -373
  267. package/dist/templates/cursor/commands/trellis-update-spec.md +0 -354
  268. package/dist/templates/droid/commands/trellis/before-dev.md +0 -33
  269. package/dist/templates/droid/commands/trellis/break-loop.md +0 -111
  270. package/dist/templates/droid/commands/trellis/check-cross-layer.md +0 -157
  271. package/dist/templates/droid/commands/trellis/check.md +0 -29
  272. package/dist/templates/droid/commands/trellis/create-command.md +0 -158
  273. package/dist/templates/droid/commands/trellis/finish-work.md +0 -147
  274. package/dist/templates/droid/commands/trellis/integrate-skill.md +0 -223
  275. package/dist/templates/droid/commands/trellis/onboard.md +0 -362
  276. package/dist/templates/droid/commands/trellis/record-session.md +0 -66
  277. package/dist/templates/droid/commands/trellis/start.md +0 -377
  278. package/dist/templates/droid/commands/trellis/update-spec.md +0 -358
  279. package/dist/templates/gemini/commands/trellis/before-dev.toml +0 -33
  280. package/dist/templates/gemini/commands/trellis/brainstorm.toml +0 -435
  281. package/dist/templates/gemini/commands/trellis/break-loop.toml +0 -129
  282. package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +0 -147
  283. package/dist/templates/gemini/commands/trellis/check.toml +0 -29
  284. package/dist/templates/gemini/commands/trellis/create-command.toml +0 -119
  285. package/dist/templates/gemini/commands/trellis/finish-work.toml +0 -133
  286. package/dist/templates/gemini/commands/trellis/integrate-skill.toml +0 -104
  287. package/dist/templates/gemini/commands/trellis/onboard.toml +0 -111
  288. package/dist/templates/gemini/commands/trellis/record-session.toml +0 -66
  289. package/dist/templates/gemini/commands/trellis/start.toml +0 -354
  290. package/dist/templates/gemini/commands/trellis/update-spec.toml +0 -132
  291. package/dist/templates/iflow/agents/debug.md +0 -106
  292. package/dist/templates/iflow/agents/dispatch.md +0 -213
  293. package/dist/templates/iflow/agents/plan.md +0 -396
  294. package/dist/templates/iflow/agents/research.md +0 -120
  295. package/dist/templates/iflow/commands/trellis/before-dev.md +0 -29
  296. package/dist/templates/iflow/commands/trellis/brainstorm.md +0 -487
  297. package/dist/templates/iflow/commands/trellis/check-cross-layer.md +0 -153
  298. package/dist/templates/iflow/commands/trellis/check.md +0 -25
  299. package/dist/templates/iflow/commands/trellis/create-command.md +0 -152
  300. package/dist/templates/iflow/commands/trellis/finish-work.md +0 -153
  301. package/dist/templates/iflow/commands/trellis/integrate-skill.md +0 -219
  302. package/dist/templates/iflow/commands/trellis/onboard.md +0 -358
  303. package/dist/templates/iflow/commands/trellis/parallel.md +0 -192
  304. package/dist/templates/iflow/commands/trellis/record-session.md +0 -62
  305. package/dist/templates/iflow/commands/trellis/start.md +0 -393
  306. package/dist/templates/iflow/commands/trellis/update-spec.md +0 -354
  307. package/dist/templates/iflow/hooks/ralph-loop.py +0 -395
  308. package/dist/templates/iflow/hooks/session-start.py +0 -403
  309. package/dist/templates/iflow/index.d.ts +0 -54
  310. package/dist/templates/iflow/index.d.ts.map +0 -1
  311. package/dist/templates/iflow/index.js +0 -85
  312. package/dist/templates/iflow/index.js.map +0 -1
  313. package/dist/templates/iflow/settings.json +0 -60
  314. package/dist/templates/kilo/index.d.ts +0 -16
  315. package/dist/templates/kilo/index.d.ts.map +0 -1
  316. package/dist/templates/kilo/index.js +0 -39
  317. package/dist/templates/kilo/index.js.map +0 -1
  318. package/dist/templates/kilo/workflows/before-dev.md +0 -29
  319. package/dist/templates/kilo/workflows/brainstorm.md +0 -487
  320. package/dist/templates/kilo/workflows/break-loop.md +0 -125
  321. package/dist/templates/kilo/workflows/check-cross-layer.md +0 -153
  322. package/dist/templates/kilo/workflows/check.md +0 -25
  323. package/dist/templates/kilo/workflows/create-command.md +0 -152
  324. package/dist/templates/kilo/workflows/finish-work.md +0 -129
  325. package/dist/templates/kilo/workflows/integrate-skill.md +0 -219
  326. package/dist/templates/kilo/workflows/onboard.md +0 -358
  327. package/dist/templates/kilo/workflows/parallel.md +0 -193
  328. package/dist/templates/kilo/workflows/record-session.md +0 -62
  329. package/dist/templates/kilo/workflows/start.md +0 -387
  330. package/dist/templates/kilo/workflows/update-spec.md +0 -285
  331. package/dist/templates/kiro/skills/before-dev/SKILL.md +0 -34
  332. package/dist/templates/kiro/skills/brainstorm/SKILL.md +0 -492
  333. package/dist/templates/kiro/skills/break-loop/SKILL.md +0 -130
  334. package/dist/templates/kiro/skills/check/SKILL.md +0 -30
  335. package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +0 -158
  336. package/dist/templates/kiro/skills/create-command/SKILL.md +0 -101
  337. package/dist/templates/kiro/skills/finish-work/SKILL.md +0 -148
  338. package/dist/templates/kiro/skills/integrate-skill/SKILL.md +0 -221
  339. package/dist/templates/kiro/skills/onboard/SKILL.md +0 -363
  340. package/dist/templates/kiro/skills/record-session/SKILL.md +0 -67
  341. package/dist/templates/kiro/skills/start/SKILL.md +0 -351
  342. package/dist/templates/kiro/skills/update-spec/SKILL.md +0 -335
  343. package/dist/templates/markdown/spec/backend/directory-structure.md +0 -292
  344. package/dist/templates/markdown/spec/backend/index.md +0 -40
  345. package/dist/templates/markdown/spec/backend/script-conventions.md +0 -742
  346. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md +0 -118
  347. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md +0 -394
  348. package/dist/templates/opencode/agents/debug.md +0 -129
  349. package/dist/templates/opencode/agents/dispatch.md +0 -223
  350. package/dist/templates/opencode/agents/trellis-plan.md +0 -427
  351. package/dist/templates/opencode/commands/trellis/before-dev.md +0 -29
  352. package/dist/templates/opencode/commands/trellis/brainstorm.md +0 -487
  353. package/dist/templates/opencode/commands/trellis/break-loop.md +0 -125
  354. package/dist/templates/opencode/commands/trellis/check-cross-layer.md +0 -153
  355. package/dist/templates/opencode/commands/trellis/check.md +0 -25
  356. package/dist/templates/opencode/commands/trellis/create-command.md +0 -154
  357. package/dist/templates/opencode/commands/trellis/finish-work.md +0 -144
  358. package/dist/templates/opencode/commands/trellis/integrate-skill.md +0 -219
  359. package/dist/templates/opencode/commands/trellis/migrate-specs.md +0 -0
  360. package/dist/templates/opencode/commands/trellis/onboard.md +0 -358
  361. package/dist/templates/opencode/commands/trellis/parallel.md +0 -193
  362. package/dist/templates/opencode/commands/trellis/record-session.md +0 -62
  363. package/dist/templates/opencode/commands/trellis/start.md +0 -351
  364. package/dist/templates/opencode/commands/trellis/update-spec.md +0 -354
  365. package/dist/templates/qoder/skills/before-dev/SKILL.md +0 -34
  366. package/dist/templates/qoder/skills/brainstorm/SKILL.md +0 -492
  367. package/dist/templates/qoder/skills/break-loop/SKILL.md +0 -130
  368. package/dist/templates/qoder/skills/check/SKILL.md +0 -30
  369. package/dist/templates/qoder/skills/check-cross-layer/SKILL.md +0 -158
  370. package/dist/templates/qoder/skills/create-command/SKILL.md +0 -101
  371. package/dist/templates/qoder/skills/finish-work/SKILL.md +0 -134
  372. package/dist/templates/qoder/skills/integrate-skill/SKILL.md +0 -221
  373. package/dist/templates/qoder/skills/onboard/SKILL.md +0 -363
  374. package/dist/templates/qoder/skills/record-session/SKILL.md +0 -67
  375. package/dist/templates/qoder/skills/start/SKILL.md +0 -388
  376. package/dist/templates/qoder/skills/update-spec/SKILL.md +0 -290
  377. package/dist/templates/trellis/scripts/common/phase.py +0 -254
  378. package/dist/templates/trellis/scripts/common/registry.py +0 -335
  379. package/dist/templates/trellis/scripts/common/worktree.py +0 -305
  380. package/dist/templates/trellis/scripts/create_bootstrap.py +0 -298
  381. package/dist/templates/trellis/scripts/multi_agent/__init__.py +0 -5
  382. package/dist/templates/trellis/scripts/multi_agent/_bootstrap.py +0 -17
  383. package/dist/templates/trellis/scripts/multi_agent/cleanup.py +0 -398
  384. package/dist/templates/trellis/scripts/multi_agent/create_pr.py +0 -620
  385. package/dist/templates/trellis/scripts/multi_agent/plan.py +0 -213
  386. package/dist/templates/trellis/scripts/multi_agent/start.py +0 -539
  387. package/dist/templates/trellis/scripts/multi_agent/status.py +0 -76
  388. package/dist/templates/trellis/scripts/multi_agent/status_display.py +0 -542
  389. package/dist/templates/trellis/scripts/multi_agent/status_monitor.py +0 -225
  390. package/dist/templates/trellis/scripts-shell-archive/add-session.sh +0 -384
  391. package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +0 -129
  392. package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +0 -263
  393. package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +0 -208
  394. package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +0 -150
  395. package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +0 -247
  396. package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +0 -142
  397. package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +0 -151
  398. package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +0 -128
  399. package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +0 -299
  400. package/dist/templates/trellis/scripts-shell-archive/get-context.sh +0 -7
  401. package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +0 -15
  402. package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +0 -34
  403. package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +0 -396
  404. package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +0 -241
  405. package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +0 -207
  406. package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +0 -317
  407. package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +0 -828
  408. package/dist/templates/trellis/scripts-shell-archive/task.sh +0 -1204
  409. package/dist/templates/trellis/worktree.yaml +0 -47
  410. package/dist/templates/windsurf/index.d.ts +0 -21
  411. package/dist/templates/windsurf/index.d.ts.map +0 -1
  412. package/dist/templates/windsurf/index.js +0 -44
  413. package/dist/templates/windsurf/index.js.map +0 -1
  414. package/dist/templates/windsurf/workflows/trellis-before-dev.md +0 -31
  415. package/dist/templates/windsurf/workflows/trellis-brainstorm.md +0 -491
  416. package/dist/templates/windsurf/workflows/trellis-break-loop.md +0 -111
  417. package/dist/templates/windsurf/workflows/trellis-check-cross-layer.md +0 -157
  418. package/dist/templates/windsurf/workflows/trellis-check.md +0 -27
  419. package/dist/templates/windsurf/workflows/trellis-create-command.md +0 -154
  420. package/dist/templates/windsurf/workflows/trellis-finish-work.md +0 -147
  421. package/dist/templates/windsurf/workflows/trellis-integrate-skill.md +0 -220
  422. package/dist/templates/windsurf/workflows/trellis-onboard.md +0 -362
  423. package/dist/templates/windsurf/workflows/trellis-record-session.md +0 -66
  424. package/dist/templates/windsurf/workflows/trellis-start.md +0 -373
  425. package/dist/templates/windsurf/workflows/trellis-update-spec.md +0 -358
  426. /package/dist/templates/{claude/commands/trellis → common/skills}/before-dev.md +0 -0
  427. /package/dist/templates/{claude/hooks → shared-hooks}/statusline.py +0 -0
@@ -1,225 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Multi-Agent Pipeline: Process monitoring and log parsing.
4
-
5
- Provides:
6
- tail_follow - Follow a file like 'tail -f'
7
- get_last_tool - Get last tool call from agent log
8
- get_last_message - Get last assistant text from agent log
9
- cmd_watch - Watch agent log in real-time
10
- cmd_log - Show recent log entries
11
- """
12
-
13
- from __future__ import annotations
14
-
15
- import json
16
- import time
17
- from pathlib import Path
18
-
19
- from common.log import Colors
20
-
21
- from .status_display import find_agent
22
-
23
-
24
- # =============================================================================
25
- # Log Parsing
26
- # =============================================================================
27
-
28
- def tail_follow(file_path: Path) -> None:
29
- """Follow a file like 'tail -f', cross-platform compatible."""
30
- with open(file_path, "r", encoding="utf-8", errors="replace") as f:
31
- # Seek to end of file
32
- f.seek(0, 2)
33
-
34
- while True:
35
- line = f.readline()
36
- if line:
37
- print(line, end="", flush=True)
38
- else:
39
- time.sleep(0.1)
40
-
41
-
42
- def get_last_tool(log_file: Path, platform: str = "claude") -> str | None:
43
- """Get the last tool call from agent log.
44
-
45
- Supports both Claude Code and OpenCode log formats.
46
-
47
- Claude Code format:
48
- {"type": "assistant", "message": {"content": [{"type": "tool_use", "name": "Read"}]}}
49
-
50
- OpenCode format:
51
- {"type": "tool_use", "tool": "bash", "state": {"status": "completed"}}
52
- """
53
- if not log_file.is_file():
54
- return None
55
-
56
- try:
57
- lines = log_file.read_text(encoding="utf-8").splitlines()
58
- for line in reversed(lines[-100:]):
59
- try:
60
- data = json.loads(line)
61
-
62
- if platform == "opencode":
63
- # OpenCode format: {"type": "tool_use", "tool": "bash", ...}
64
- if data.get("type") == "tool_use":
65
- return data.get("tool")
66
- else:
67
- # Claude Code format: {"type": "assistant", "message": {"content": [...]}}
68
- if data.get("type") == "assistant":
69
- content = data.get("message", {}).get("content", [])
70
- for item in content:
71
- if item.get("type") == "tool_use":
72
- return item.get("name")
73
- except json.JSONDecodeError:
74
- continue
75
- except Exception:
76
- pass
77
- return None
78
-
79
-
80
- def get_last_message(log_file: Path, max_len: int = 100, platform: str = "claude") -> str | None:
81
- """Get the last assistant text from agent log.
82
-
83
- Supports both Claude Code and OpenCode log formats.
84
-
85
- Claude Code format:
86
- {"type": "assistant", "message": {"content": [{"type": "text", "text": "..."}]}}
87
-
88
- OpenCode format:
89
- {"type": "text", "text": "..."}
90
- """
91
- if not log_file.is_file():
92
- return None
93
-
94
- try:
95
- lines = log_file.read_text(encoding="utf-8").splitlines()
96
- for line in reversed(lines[-100:]):
97
- try:
98
- data = json.loads(line)
99
-
100
- if platform == "opencode":
101
- # OpenCode format: {"type": "text", "text": "..."}
102
- if data.get("type") == "text":
103
- text = data.get("text", "")
104
- if text:
105
- return text[:max_len]
106
- else:
107
- # Claude Code format: {"type": "assistant", "message": {"content": [...]}}
108
- if data.get("type") == "assistant":
109
- content = data.get("message", {}).get("content", [])
110
- for item in content:
111
- if item.get("type") == "text":
112
- text = item.get("text", "")
113
- if text:
114
- return text[:max_len]
115
- except json.JSONDecodeError:
116
- continue
117
- except Exception:
118
- pass
119
- return None
120
-
121
-
122
- # =============================================================================
123
- # Commands
124
- # =============================================================================
125
-
126
- def cmd_watch(target: str, repo_root: Path) -> int:
127
- """Watch agent log in real-time."""
128
- agent = find_agent(target, repo_root)
129
- if not agent:
130
- print(f"Agent not found: {target}")
131
- return 1
132
-
133
- worktree = agent.get("worktree_path", "")
134
- log_file = Path(worktree) / ".agent-log"
135
-
136
- if not log_file.is_file():
137
- print(f"Log file not found: {log_file}")
138
- return 1
139
-
140
- print(f"{Colors.BLUE}Watching:{Colors.NC} {log_file}")
141
- print(f"{Colors.DIM}Press Ctrl+C to stop{Colors.NC}")
142
- print()
143
-
144
- try:
145
- tail_follow(log_file)
146
- except KeyboardInterrupt:
147
- print() # Clean newline after Ctrl+C
148
- return 0
149
-
150
-
151
- def cmd_log(target: str, repo_root: Path) -> int:
152
- """Show recent log entries."""
153
- agent = find_agent(target, repo_root)
154
- if not agent:
155
- print(f"Agent not found: {target}")
156
- return 1
157
-
158
- worktree = agent.get("worktree_path", "")
159
- platform = agent.get("platform", "claude")
160
- log_file = Path(worktree) / ".agent-log"
161
-
162
- if not log_file.is_file():
163
- print(f"Log file not found: {log_file}")
164
- return 1
165
-
166
- print(f"{Colors.BLUE}=== Recent Log: {target} ==={Colors.NC}")
167
- print(f"{Colors.DIM}Platform: {platform}{Colors.NC}")
168
- print()
169
-
170
- lines = log_file.read_text(encoding="utf-8").splitlines()
171
- for line in lines[-50:]:
172
- try:
173
- data = json.loads(line)
174
- msg_type = data.get("type", "")
175
-
176
- if platform == "opencode":
177
- # OpenCode format
178
- if msg_type == "text":
179
- text = data.get("text", "")
180
- if text:
181
- display = text[:300]
182
- if len(text) > 300:
183
- display += "..."
184
- print(f"{Colors.BLUE}[TEXT]{Colors.NC} {display}")
185
- elif msg_type == "tool_use":
186
- tool_name = data.get("tool", "unknown")
187
- status = data.get("state", {}).get("status", "")
188
- print(f"{Colors.YELLOW}[TOOL]{Colors.NC} {tool_name} ({status})")
189
- elif msg_type == "step_start":
190
- print(f"{Colors.CYAN}[STEP]{Colors.NC} Start")
191
- elif msg_type == "step_finish":
192
- reason = data.get("reason", "")
193
- print(f"{Colors.CYAN}[STEP]{Colors.NC} Finish ({reason})")
194
- elif msg_type == "error":
195
- error_msg = data.get("message", "")
196
- print(f"{Colors.RED}[ERROR]{Colors.NC} {error_msg}")
197
- else:
198
- # Claude Code format
199
- if msg_type == "system":
200
- subtype = data.get("subtype", "")
201
- print(f"{Colors.CYAN}[SYSTEM]{Colors.NC} {subtype}")
202
- elif msg_type == "user":
203
- content = data.get("message", {}).get("content", "")
204
- if content:
205
- print(f"{Colors.GREEN}[USER]{Colors.NC} {content[:200]}")
206
- elif msg_type == "assistant":
207
- content = data.get("message", {}).get("content", [])
208
- if content:
209
- item = content[0]
210
- text = item.get("text")
211
- tool = item.get("name")
212
- if text:
213
- display = text[:300]
214
- if len(text) > 300:
215
- display += "..."
216
- print(f"{Colors.BLUE}[ASSISTANT]{Colors.NC} {display}")
217
- elif tool:
218
- print(f"{Colors.YELLOW}[TOOL]{Colors.NC} {tool}")
219
- elif msg_type == "result":
220
- tool_name = data.get("tool", "unknown")
221
- print(f"{Colors.DIM}[RESULT]{Colors.NC} {tool_name} completed")
222
- except json.JSONDecodeError:
223
- continue
224
-
225
- return 0
@@ -1,384 +0,0 @@
1
- #!/bin/bash
2
- # Add a new session to journal file and update index.md
3
- #
4
- # Usage:
5
- # ./.trellis/scripts/add-session.sh --title "Title" --commit "hash" --summary "Summary"
6
- # echo "content" | ./.trellis/scripts/add-session.sh --title "Title" --commit "hash"
7
-
8
- set -e
9
-
10
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
- source "$SCRIPT_DIR/common/paths.sh"
12
- source "$SCRIPT_DIR/common/developer.sh"
13
-
14
- MAX_LINES=2000
15
- TODAY=$(date +%Y-%m-%d)
16
-
17
- # Ensure developer is initialized
18
- ensure_developer
19
-
20
- DEVELOPER=$(get_developer)
21
- REPO_ROOT=$(get_repo_root)
22
- DEV_DIR="$REPO_ROOT/$DIR_WORKFLOW/$DIR_WORKSPACE/$DEVELOPER"
23
- INDEX_FILE="$DEV_DIR/index.md"
24
-
25
- # =============================================================================
26
- # Helper Functions
27
- # =============================================================================
28
-
29
- get_latest_journal_info() {
30
- local latest_file=""
31
- local latest_num=-1 # Start at -1 so journal-0.md can be detected (0 > -1)
32
-
33
- for f in "$DEV_DIR"/${FILE_JOURNAL_PREFIX}*.md; do
34
- if [[ -f "$f" ]]; then
35
- local num=$(basename "$f" | sed "s/${FILE_JOURNAL_PREFIX}\([0-9]*\)\.md/\1/")
36
- if [[ "$num" -gt "$latest_num" ]]; then
37
- latest_num=$num
38
- latest_file="$f"
39
- fi
40
- fi
41
- done
42
-
43
- if [[ -n "$latest_file" ]]; then
44
- local lines=$(wc -l < "$latest_file" | tr -d ' ')
45
- echo "$latest_file:$latest_num:$lines"
46
- else
47
- echo ":0:0"
48
- fi
49
- }
50
-
51
- get_current_session() {
52
- local line=$(grep "Total Sessions" "$INDEX_FILE" 2>/dev/null | head -1)
53
- echo "$line" | sed 's/.*: //' | tr -d ' '
54
- }
55
-
56
- count_journal_files() {
57
- local result=""
58
- local journal_info=$(get_latest_journal_info)
59
- local active_num=$(echo "$journal_info" | cut -d: -f2)
60
- local active_file="${FILE_JOURNAL_PREFIX}$active_num.md"
61
-
62
- for f in $(ls -v "$DEV_DIR"/${FILE_JOURNAL_PREFIX}*.md 2>/dev/null | sort -t- -k2 -n -r); do
63
- if [[ -f "$f" ]]; then
64
- local filename=$(basename "$f")
65
- local lines=$(wc -l < "$f" | tr -d ' ')
66
-
67
- local status="Archived"
68
- if [[ "$filename" == "$active_file" ]]; then
69
- status="Active"
70
- fi
71
-
72
- result="${result}| \`$filename\` | ~$lines | $status |
73
- "
74
- fi
75
- done
76
- echo "$result" | sed '/^$/d'
77
- }
78
-
79
- create_new_journal_file() {
80
- local num=$1
81
- local prev_num=$((num - 1))
82
- local new_file="$DEV_DIR/${FILE_JOURNAL_PREFIX}$num.md"
83
-
84
- cat > "$new_file" << EOF
85
- # Journal - $DEVELOPER (Part $num)
86
-
87
- > Continuation from \`${FILE_JOURNAL_PREFIX}$prev_num.md\` (archived at ~$MAX_LINES lines)
88
- > Started: $TODAY
89
-
90
- ---
91
-
92
- EOF
93
- echo "$new_file"
94
- }
95
-
96
- generate_session_content() {
97
- local session_num=$1
98
- local title=$2
99
- local commit=$3
100
- local summary=$4
101
- local extra_content=$5
102
-
103
- local commit_table=""
104
- if [[ -n "$commit" && "$commit" != "-" ]]; then
105
- commit_table="| Hash | Message |
106
- |------|---------|"
107
- IFS=',' read -ra COMMITS <<< "$commit"
108
- for c in "${COMMITS[@]}"; do
109
- c=$(echo "$c" | tr -d ' ')
110
- commit_table="$commit_table
111
- | \`$c\` | (see git log) |"
112
- done
113
- else
114
- commit_table="(No commits - planning session)"
115
- fi
116
-
117
- cat << EOF
118
-
119
- ## Session $session_num: $title
120
-
121
- **Date**: $TODAY
122
- **Task**: $title
123
-
124
- ### Summary
125
-
126
- $summary
127
-
128
- ### Main Changes
129
-
130
- $extra_content
131
-
132
- ### Git Commits
133
-
134
- $commit_table
135
-
136
- ### Testing
137
-
138
- - [OK] (Add test results)
139
-
140
- ### Status
141
-
142
- [OK] **Completed**
143
-
144
- ### Next Steps
145
-
146
- - None - task complete
147
- EOF
148
- }
149
-
150
- # =============================================================================
151
- # Update Index.md
152
- # =============================================================================
153
-
154
- update_index() {
155
- local title="$1"
156
- local commit="$2"
157
- local new_session="$3"
158
- local active_file="$4"
159
-
160
- # Format commit for display
161
- local commit_display="-"
162
- if [[ -n "$commit" && "$commit" != "-" ]]; then
163
- commit_display=$(echo "$commit" | sed 's/,/, /g' | sed 's/\([a-f0-9]\{7,\}\)/`\1`/g')
164
- fi
165
-
166
- local files_table=$(count_journal_files)
167
-
168
- echo "Updating index.md for session $new_session..."
169
- echo " Title: $title"
170
- echo " Commit: $commit_display"
171
- echo " Active File: $active_file"
172
- echo ""
173
-
174
- if ! grep -q "@@@auto:current-status" "$INDEX_FILE"; then
175
- echo "Error: Markers not found in index.md. Please ensure markers exist." >&2
176
- exit 1
177
- fi
178
-
179
- local tmp_file=$(mktemp)
180
-
181
- local in_current_status=false
182
- local in_active_documents=false
183
- local in_session_history=false
184
- local header_written=false
185
-
186
- while IFS= read -r line || [[ -n "$line" ]]; do
187
- if [[ "$line" == *"@@@auto:current-status"* ]]; then
188
- echo "$line" >> "$tmp_file"
189
- in_current_status=true
190
- echo "- **Active File**: \`$active_file\`" >> "$tmp_file"
191
- echo "- **Total Sessions**: $new_session" >> "$tmp_file"
192
- echo "- **Last Active**: $TODAY" >> "$tmp_file"
193
- continue
194
- fi
195
-
196
- if [[ "$line" == *"@@@/auto:current-status"* ]]; then
197
- in_current_status=false
198
- echo "$line" >> "$tmp_file"
199
- continue
200
- fi
201
-
202
- if [[ "$line" == *"@@@auto:active-documents"* ]]; then
203
- echo "$line" >> "$tmp_file"
204
- in_active_documents=true
205
- echo "| File | Lines | Status |" >> "$tmp_file"
206
- echo "|------|-------|--------|" >> "$tmp_file"
207
- echo "$files_table" >> "$tmp_file"
208
- continue
209
- fi
210
-
211
- if [[ "$line" == *"@@@/auto:active-documents"* ]]; then
212
- in_active_documents=false
213
- echo "$line" >> "$tmp_file"
214
- continue
215
- fi
216
-
217
- if [[ "$line" == *"@@@auto:session-history"* ]]; then
218
- echo "$line" >> "$tmp_file"
219
- in_session_history=true
220
- header_written=false
221
- continue
222
- fi
223
-
224
- if [[ "$line" == *"@@@/auto:session-history"* ]]; then
225
- in_session_history=false
226
- echo "$line" >> "$tmp_file"
227
- continue
228
- fi
229
-
230
- if $in_current_status; then
231
- continue
232
- fi
233
-
234
- if $in_active_documents; then
235
- continue
236
- fi
237
-
238
- if $in_session_history; then
239
- echo "$line" >> "$tmp_file"
240
- if [[ "$line" == "|---"* ]] && ! $header_written; then
241
- echo "| $new_session | $TODAY | $title | $commit_display |" >> "$tmp_file"
242
- header_written=true
243
- fi
244
- continue
245
- fi
246
-
247
- echo "$line" >> "$tmp_file"
248
- done < "$INDEX_FILE"
249
-
250
- mv "$tmp_file" "$INDEX_FILE"
251
-
252
- echo "[OK] Updated index.md successfully!"
253
- }
254
-
255
- # =============================================================================
256
- # Main Function
257
- # =============================================================================
258
-
259
- add_session() {
260
- local title=""
261
- local commit="-"
262
- local summary="(Add summary)"
263
- local content_file=""
264
- local extra_content="(Add details)"
265
-
266
- while [[ $# -gt 0 ]]; do
267
- case $1 in
268
- --title)
269
- title="$2"
270
- shift 2
271
- ;;
272
- --commit)
273
- commit="$2"
274
- shift 2
275
- ;;
276
- --summary)
277
- summary="$2"
278
- shift 2
279
- ;;
280
- --content-file)
281
- content_file="$2"
282
- shift 2
283
- ;;
284
- *)
285
- shift
286
- ;;
287
- esac
288
- done
289
-
290
- if [[ -z "$title" ]]; then
291
- echo "Error: --title is required" >&2
292
- echo "Usage: $0 --title \"Session Title\" [--commit \"hash1,hash2\"] [--summary \"Brief summary\"]" >&2
293
- exit 1
294
- fi
295
-
296
- if [[ -n "$content_file" && -f "$content_file" ]]; then
297
- extra_content=$(cat "$content_file")
298
- elif [[ ! -t 0 ]]; then
299
- extra_content=$(cat)
300
- fi
301
-
302
- local journal_info=$(get_latest_journal_info)
303
- local current_file=$(echo "$journal_info" | cut -d: -f1)
304
- local current_num=$(echo "$journal_info" | cut -d: -f2)
305
- local current_lines=$(echo "$journal_info" | cut -d: -f3)
306
- local current_session=$(get_current_session)
307
- local new_session=$((current_session + 1))
308
-
309
- local session_content=$(generate_session_content "$new_session" "$title" "$commit" "$summary" "$extra_content")
310
- local content_lines=$(echo "$session_content" | wc -l | tr -d ' ')
311
-
312
- echo "========================================" >&2
313
- echo "ADD SESSION" >&2
314
- echo "========================================" >&2
315
- echo "" >&2
316
- echo "Session: $new_session" >&2
317
- echo "Title: $title" >&2
318
- echo "Commit: $commit" >&2
319
- echo "" >&2
320
- echo "Current journal file: ${FILE_JOURNAL_PREFIX}$current_num.md" >&2
321
- echo "Current lines: $current_lines" >&2
322
- echo "New content lines: $content_lines" >&2
323
- echo "Total after append: $((current_lines + content_lines))" >&2
324
- echo "" >&2
325
-
326
- local target_file="$current_file"
327
- local target_num=$current_num
328
-
329
- if [[ $((current_lines + content_lines)) -gt $MAX_LINES ]]; then
330
- target_num=$((current_num + 1))
331
- echo "[!] Exceeds $MAX_LINES lines, creating ${FILE_JOURNAL_PREFIX}$target_num.md" >&2
332
- target_file=$(create_new_journal_file "$target_num")
333
- echo "Created: $target_file" >&2
334
- fi
335
-
336
- echo "$session_content" >> "$target_file"
337
- echo "[OK] Appended session to $(basename "$target_file")" >&2
338
-
339
- echo "" >&2
340
-
341
- # Update index.md directly
342
- local active_file="${FILE_JOURNAL_PREFIX}$target_num.md"
343
- update_index "$title" "$commit" "$new_session" "$active_file"
344
-
345
- echo "" >&2
346
- echo "========================================" >&2
347
- echo "[OK] Session $new_session added successfully!" >&2
348
- echo "========================================" >&2
349
- echo "" >&2
350
- echo "Files updated:" >&2
351
- echo " - $(basename "$target_file")" >&2
352
- echo " - index.md" >&2
353
- }
354
-
355
- show_help() {
356
- echo "Usage: $0 --title \"Title\" [options]"
357
- echo ""
358
- echo "Add a new session to journal file and update index.md automatically."
359
- echo ""
360
- echo "Options:"
361
- echo " --title TEXT Session title (required)"
362
- echo " --commit HASHES Comma-separated commit hashes (optional)"
363
- echo " --summary TEXT Brief summary of the session (optional)"
364
- echo " --content-file Path to file with detailed content (optional)"
365
- echo ""
366
- echo "You can also pipe content via stdin:"
367
- echo " echo \"Details\" | $0 --title \"Title\" --commit \"abc123\""
368
- echo ""
369
- echo "Examples:"
370
- echo " $0 --title \"Fix login bug\" --commit \"abc1234\" --summary \"Fixed auth issue\""
371
- }
372
-
373
- # =============================================================================
374
- # Main Entry
375
- # =============================================================================
376
-
377
- case "${1:-}" in
378
- --help|-h|help)
379
- show_help
380
- ;;
381
- *)
382
- add_session "$@"
383
- ;;
384
- esac