@blxzer/cursor-trellis 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (687) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE +235 -0
  3. package/README.md +9 -0
  4. package/bin/smart-search.js +79 -0
  5. package/bin/trellis.js +3 -0
  6. package/dist/cli/index.d.ts +3 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +258 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/commands/channel/adapters/claude.d.ts +29 -0
  11. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  12. package/dist/commands/channel/adapters/claude.js +203 -0
  13. package/dist/commands/channel/adapters/claude.js.map +1 -0
  14. package/dist/commands/channel/adapters/codex.d.ts +85 -0
  15. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  16. package/dist/commands/channel/adapters/codex.js +505 -0
  17. package/dist/commands/channel/adapters/codex.js.map +1 -0
  18. package/dist/commands/channel/adapters/index.d.ts +84 -0
  19. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  20. package/dist/commands/channel/adapters/index.js +115 -0
  21. package/dist/commands/channel/adapters/index.js.map +1 -0
  22. package/dist/commands/channel/adapters/types.d.ts +33 -0
  23. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  24. package/dist/commands/channel/adapters/types.js +2 -0
  25. package/dist/commands/channel/adapters/types.js.map +1 -0
  26. package/dist/commands/channel/agent-loader.d.ts +32 -0
  27. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  28. package/dist/commands/channel/agent-loader.js +154 -0
  29. package/dist/commands/channel/agent-loader.js.map +1 -0
  30. package/dist/commands/channel/context-loader.d.ts +26 -0
  31. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  32. package/dist/commands/channel/context-loader.js +290 -0
  33. package/dist/commands/channel/context-loader.js.map +1 -0
  34. package/dist/commands/channel/context.d.ts +16 -0
  35. package/dist/commands/channel/context.d.ts.map +1 -0
  36. package/dist/commands/channel/context.js +83 -0
  37. package/dist/commands/channel/context.js.map +1 -0
  38. package/dist/commands/channel/create.d.ts +27 -0
  39. package/dist/commands/channel/create.d.ts.map +1 -0
  40. package/dist/commands/channel/create.js +39 -0
  41. package/dist/commands/channel/create.js.map +1 -0
  42. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  43. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  44. package/dist/commands/channel/dev-parse-trace.js +70 -0
  45. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  46. package/dist/commands/channel/guard.d.ts +150 -0
  47. package/dist/commands/channel/guard.d.ts.map +1 -0
  48. package/dist/commands/channel/guard.js +474 -0
  49. package/dist/commands/channel/guard.js.map +1 -0
  50. package/dist/commands/channel/index.d.ts +3 -0
  51. package/dist/commands/channel/index.d.ts.map +1 -0
  52. package/dist/commands/channel/index.js +531 -0
  53. package/dist/commands/channel/index.js.map +1 -0
  54. package/dist/commands/channel/interrupt.d.ts +10 -0
  55. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  56. package/dist/commands/channel/interrupt.js +22 -0
  57. package/dist/commands/channel/interrupt.js.map +1 -0
  58. package/dist/commands/channel/kill.d.ts +7 -0
  59. package/dist/commands/channel/kill.d.ts.map +1 -0
  60. package/dist/commands/channel/kill.js +121 -0
  61. package/dist/commands/channel/kill.js.map +1 -0
  62. package/dist/commands/channel/list.d.ts +17 -0
  63. package/dist/commands/channel/list.d.ts.map +1 -0
  64. package/dist/commands/channel/list.js +233 -0
  65. package/dist/commands/channel/list.js.map +1 -0
  66. package/dist/commands/channel/messages.d.ts +15 -0
  67. package/dist/commands/channel/messages.d.ts.map +1 -0
  68. package/dist/commands/channel/messages.js +245 -0
  69. package/dist/commands/channel/messages.js.map +1 -0
  70. package/dist/commands/channel/rm.d.ts +27 -0
  71. package/dist/commands/channel/rm.d.ts.map +1 -0
  72. package/dist/commands/channel/rm.js +216 -0
  73. package/dist/commands/channel/rm.js.map +1 -0
  74. package/dist/commands/channel/run.d.ts +30 -0
  75. package/dist/commands/channel/run.d.ts.map +1 -0
  76. package/dist/commands/channel/run.js +130 -0
  77. package/dist/commands/channel/run.js.map +1 -0
  78. package/dist/commands/channel/send.d.ts +11 -0
  79. package/dist/commands/channel/send.d.ts.map +1 -0
  80. package/dist/commands/channel/send.js +24 -0
  81. package/dist/commands/channel/send.js.map +1 -0
  82. package/dist/commands/channel/spawn.d.ts +40 -0
  83. package/dist/commands/channel/spawn.d.ts.map +1 -0
  84. package/dist/commands/channel/spawn.js +244 -0
  85. package/dist/commands/channel/spawn.js.map +1 -0
  86. package/dist/commands/channel/store/events.d.ts +39 -0
  87. package/dist/commands/channel/store/events.d.ts.map +1 -0
  88. package/dist/commands/channel/store/events.js +87 -0
  89. package/dist/commands/channel/store/events.js.map +1 -0
  90. package/dist/commands/channel/store/filter.d.ts +3 -0
  91. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  92. package/dist/commands/channel/store/filter.js +2 -0
  93. package/dist/commands/channel/store/filter.js.map +1 -0
  94. package/dist/commands/channel/store/lock.d.ts +23 -0
  95. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  96. package/dist/commands/channel/store/lock.js +99 -0
  97. package/dist/commands/channel/store/lock.js.map +1 -0
  98. package/dist/commands/channel/store/paths.d.ts +63 -0
  99. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  100. package/dist/commands/channel/store/paths.js +246 -0
  101. package/dist/commands/channel/store/paths.js.map +1 -0
  102. package/dist/commands/channel/store/schema.d.ts +27 -0
  103. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  104. package/dist/commands/channel/store/schema.js +34 -0
  105. package/dist/commands/channel/store/schema.js.map +1 -0
  106. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  107. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  108. package/dist/commands/channel/store/thread-state.js +16 -0
  109. package/dist/commands/channel/store/thread-state.js.map +1 -0
  110. package/dist/commands/channel/store/watch.d.ts +19 -0
  111. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  112. package/dist/commands/channel/store/watch.js +146 -0
  113. package/dist/commands/channel/store/watch.js.map +1 -0
  114. package/dist/commands/channel/supervisor/idle.d.ts +46 -0
  115. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  116. package/dist/commands/channel/supervisor/idle.js +72 -0
  117. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  118. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  119. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  120. package/dist/commands/channel/supervisor/inbox.js +160 -0
  121. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  122. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  123. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  124. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  125. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  126. package/dist/commands/channel/supervisor/stdout.d.ts +51 -0
  127. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  128. package/dist/commands/channel/supervisor/stdout.js +121 -0
  129. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  130. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  131. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  132. package/dist/commands/channel/supervisor/turns.js +45 -0
  133. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  134. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  135. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  136. package/dist/commands/channel/supervisor/warning.js +77 -0
  137. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  138. package/dist/commands/channel/supervisor.d.ts +59 -0
  139. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  140. package/dist/commands/channel/supervisor.js +344 -0
  141. package/dist/commands/channel/supervisor.js.map +1 -0
  142. package/dist/commands/channel/text-body.d.ts +13 -0
  143. package/dist/commands/channel/text-body.d.ts.map +1 -0
  144. package/dist/commands/channel/text-body.js +47 -0
  145. package/dist/commands/channel/text-body.js.map +1 -0
  146. package/dist/commands/channel/threads.d.ts +39 -0
  147. package/dist/commands/channel/threads.d.ts.map +1 -0
  148. package/dist/commands/channel/threads.js +106 -0
  149. package/dist/commands/channel/threads.js.map +1 -0
  150. package/dist/commands/channel/title.d.ts +12 -0
  151. package/dist/commands/channel/title.d.ts.map +1 -0
  152. package/dist/commands/channel/title.js +24 -0
  153. package/dist/commands/channel/title.js.map +1 -0
  154. package/dist/commands/channel/wait.d.ts +17 -0
  155. package/dist/commands/channel/wait.d.ts.map +1 -0
  156. package/dist/commands/channel/wait.js +75 -0
  157. package/dist/commands/channel/wait.js.map +1 -0
  158. package/dist/commands/init.d.ts +62 -0
  159. package/dist/commands/init.d.ts.map +1 -0
  160. package/dist/commands/init.js +1656 -0
  161. package/dist/commands/init.js.map +1 -0
  162. package/dist/commands/mem.d.ts +30 -0
  163. package/dist/commands/mem.d.ts.map +1 -0
  164. package/dist/commands/mem.js +424 -0
  165. package/dist/commands/mem.js.map +1 -0
  166. package/dist/commands/rollout.d.ts +34 -0
  167. package/dist/commands/rollout.d.ts.map +1 -0
  168. package/dist/commands/rollout.js +102 -0
  169. package/dist/commands/rollout.js.map +1 -0
  170. package/dist/commands/uninstall.d.ts +27 -0
  171. package/dist/commands/uninstall.d.ts.map +1 -0
  172. package/dist/commands/uninstall.js +339 -0
  173. package/dist/commands/uninstall.js.map +1 -0
  174. package/dist/commands/update.d.ts +80 -0
  175. package/dist/commands/update.d.ts.map +1 -0
  176. package/dist/commands/update.js +2185 -0
  177. package/dist/commands/update.js.map +1 -0
  178. package/dist/commands/upgrade.d.ts +28 -0
  179. package/dist/commands/upgrade.d.ts.map +1 -0
  180. package/dist/commands/upgrade.js +84 -0
  181. package/dist/commands/upgrade.js.map +1 -0
  182. package/dist/commands/workflow.d.ts +35 -0
  183. package/dist/commands/workflow.d.ts.map +1 -0
  184. package/dist/commands/workflow.js +219 -0
  185. package/dist/commands/workflow.js.map +1 -0
  186. package/dist/configurators/antigravity.d.ts +7 -0
  187. package/dist/configurators/antigravity.d.ts.map +1 -0
  188. package/dist/configurators/antigravity.js +19 -0
  189. package/dist/configurators/antigravity.js.map +1 -0
  190. package/dist/configurators/claude.d.ts +9 -0
  191. package/dist/configurators/claude.d.ts.map +1 -0
  192. package/dist/configurators/claude.js +72 -0
  193. package/dist/configurators/claude.js.map +1 -0
  194. package/dist/configurators/codebuddy.d.ts +10 -0
  195. package/dist/configurators/codebuddy.d.ts.map +1 -0
  196. package/dist/configurators/codebuddy.js +30 -0
  197. package/dist/configurators/codebuddy.js.map +1 -0
  198. package/dist/configurators/codex.d.ts +8 -0
  199. package/dist/configurators/codex.d.ts.map +1 -0
  200. package/dist/configurators/codex.js +87 -0
  201. package/dist/configurators/codex.js.map +1 -0
  202. package/dist/configurators/copilot.d.ts +10 -0
  203. package/dist/configurators/copilot.d.ts.map +1 -0
  204. package/dist/configurators/copilot.js +51 -0
  205. package/dist/configurators/copilot.js.map +1 -0
  206. package/dist/configurators/cursor.d.ts +20 -0
  207. package/dist/configurators/cursor.d.ts.map +1 -0
  208. package/dist/configurators/cursor.js +49 -0
  209. package/dist/configurators/cursor.js.map +1 -0
  210. package/dist/configurators/cursor2plus-local.d.ts +6 -0
  211. package/dist/configurators/cursor2plus-local.d.ts.map +1 -0
  212. package/dist/configurators/cursor2plus-local.js +20 -0
  213. package/dist/configurators/cursor2plus-local.js.map +1 -0
  214. package/dist/configurators/droid.d.ts +10 -0
  215. package/dist/configurators/droid.d.ts.map +1 -0
  216. package/dist/configurators/droid.js +30 -0
  217. package/dist/configurators/droid.js.map +1 -0
  218. package/dist/configurators/gemini.d.ts +16 -0
  219. package/dist/configurators/gemini.d.ts.map +1 -0
  220. package/dist/configurators/gemini.js +38 -0
  221. package/dist/configurators/gemini.js.map +1 -0
  222. package/dist/configurators/index.d.ts +69 -0
  223. package/dist/configurators/index.d.ts.map +1 -0
  224. package/dist/configurators/index.js +395 -0
  225. package/dist/configurators/index.js.map +1 -0
  226. package/dist/configurators/kilo.d.ts +7 -0
  227. package/dist/configurators/kilo.d.ts.map +1 -0
  228. package/dist/configurators/kilo.js +19 -0
  229. package/dist/configurators/kilo.js.map +1 -0
  230. package/dist/configurators/kiro.d.ts +8 -0
  231. package/dist/configurators/kiro.d.ts.map +1 -0
  232. package/dist/configurators/kiro.js +24 -0
  233. package/dist/configurators/kiro.js.map +1 -0
  234. package/dist/configurators/opencode.d.ts +14 -0
  235. package/dist/configurators/opencode.d.ts.map +1 -0
  236. package/dist/configurators/opencode.js +96 -0
  237. package/dist/configurators/opencode.js.map +1 -0
  238. package/dist/configurators/pi.d.ts +3 -0
  239. package/dist/configurators/pi.d.ts.map +1 -0
  240. package/dist/configurators/pi.js +45 -0
  241. package/dist/configurators/pi.js.map +1 -0
  242. package/dist/configurators/qoder.d.ts +11 -0
  243. package/dist/configurators/qoder.d.ts.map +1 -0
  244. package/dist/configurators/qoder.js +31 -0
  245. package/dist/configurators/qoder.js.map +1 -0
  246. package/dist/configurators/shared.d.ts +183 -0
  247. package/dist/configurators/shared.d.ts.map +1 -0
  248. package/dist/configurators/shared.js +557 -0
  249. package/dist/configurators/shared.js.map +1 -0
  250. package/dist/configurators/windsurf.d.ts +7 -0
  251. package/dist/configurators/windsurf.d.ts.map +1 -0
  252. package/dist/configurators/windsurf.js +19 -0
  253. package/dist/configurators/windsurf.js.map +1 -0
  254. package/dist/configurators/workflow.d.ts +46 -0
  255. package/dist/configurators/workflow.d.ts.map +1 -0
  256. package/dist/configurators/workflow.js +180 -0
  257. package/dist/configurators/workflow.js.map +1 -0
  258. package/dist/constants/paths.d.ts +70 -0
  259. package/dist/constants/paths.d.ts.map +1 -0
  260. package/dist/constants/paths.js +79 -0
  261. package/dist/constants/paths.js.map +1 -0
  262. package/dist/constants/version.d.ts +9 -0
  263. package/dist/constants/version.d.ts.map +1 -0
  264. package/dist/constants/version.js +15 -0
  265. package/dist/constants/version.js.map +1 -0
  266. package/dist/index.d.ts +9 -0
  267. package/dist/index.d.ts.map +1 -0
  268. package/dist/index.js +9 -0
  269. package/dist/index.js.map +1 -0
  270. package/dist/migrations/index.d.ts +62 -0
  271. package/dist/migrations/index.d.ts.map +1 -0
  272. package/dist/migrations/index.js +187 -0
  273. package/dist/migrations/index.js.map +1 -0
  274. package/dist/migrations/manifests/0.1.0.json +9 -0
  275. package/dist/templates/claude/agents/trellis-check.md +124 -0
  276. package/dist/templates/claude/agents/trellis-implement.md +110 -0
  277. package/dist/templates/claude/agents/trellis-research.md +137 -0
  278. package/dist/templates/claude/index.d.ts +22 -0
  279. package/dist/templates/claude/index.d.ts.map +1 -0
  280. package/dist/templates/claude/index.js +46 -0
  281. package/dist/templates/claude/index.js.map +1 -0
  282. package/dist/templates/claude/settings.json +84 -0
  283. package/dist/templates/codebuddy/agents/trellis-check.md +115 -0
  284. package/dist/templates/codebuddy/agents/trellis-implement.md +110 -0
  285. package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
  286. package/dist/templates/codebuddy/index.d.ts +15 -0
  287. package/dist/templates/codebuddy/index.d.ts.map +1 -0
  288. package/dist/templates/codebuddy/index.js +15 -0
  289. package/dist/templates/codebuddy/index.js.map +1 -0
  290. package/dist/templates/codebuddy/settings.json +70 -0
  291. package/dist/templates/codex/agents/trellis-check.toml +67 -0
  292. package/dist/templates/codex/agents/trellis-implement.toml +40 -0
  293. package/dist/templates/codex/agents/trellis-research.toml +73 -0
  294. package/dist/templates/codex/config.toml +28 -0
  295. package/dist/templates/codex/hooks/session-start.py +575 -0
  296. package/dist/templates/codex/hooks.json +15 -0
  297. package/dist/templates/codex/index.d.ts +39 -0
  298. package/dist/templates/codex/index.d.ts.map +1 -0
  299. package/dist/templates/codex/index.js +85 -0
  300. package/dist/templates/codex/index.js.map +1 -0
  301. package/dist/templates/codex/skills/before-dev/SKILL.md +40 -0
  302. package/dist/templates/codex/skills/brainstorm/SKILL.md +112 -0
  303. package/dist/templates/codex/skills/break-loop/SKILL.md +130 -0
  304. package/dist/templates/codex/skills/check/SKILL.md +98 -0
  305. package/dist/templates/codex/skills/check-cross-layer/SKILL.md +158 -0
  306. package/dist/templates/codex/skills/create-command/SKILL.md +101 -0
  307. package/dist/templates/codex/skills/finish-work/SKILL.md +90 -0
  308. package/dist/templates/codex/skills/improve-ut/SKILL.md +69 -0
  309. package/dist/templates/codex/skills/integrate-skill/SKILL.md +221 -0
  310. package/dist/templates/codex/skills/onboard/SKILL.md +363 -0
  311. package/dist/templates/codex/skills/record-session/SKILL.md +67 -0
  312. package/dist/templates/codex/skills/start/SKILL.md +66 -0
  313. package/dist/templates/codex/skills/update-spec/SKILL.md +335 -0
  314. package/dist/templates/common/bundled-skills/smart-search-cli/SKILL.md +388 -0
  315. package/dist/templates/common/bundled-skills/smart-search-cli/agents/openai.yaml +3 -0
  316. package/dist/templates/common/bundled-skills/smart-search-cli/examples/batch-search.md +98 -0
  317. package/dist/templates/common/bundled-skills/smart-search-cli/examples/evidence-gathering.md +89 -0
  318. package/dist/templates/common/bundled-skills/smart-search-cli/references/cli-contract.md +337 -0
  319. package/dist/templates/common/bundled-skills/trellis-cursor2plus-setup/SKILL.md +62 -0
  320. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +73 -0
  321. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +83 -0
  322. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +54 -0
  323. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +84 -0
  324. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +57 -0
  325. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +80 -0
  326. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +83 -0
  327. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +88 -0
  328. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +65 -0
  329. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +55 -0
  330. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +68 -0
  331. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +80 -0
  332. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +51 -0
  333. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +102 -0
  334. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +133 -0
  335. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +75 -0
  336. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workspace-memory.md +71 -0
  337. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +80 -0
  338. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +69 -0
  339. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +61 -0
  340. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +76 -0
  341. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +128 -0
  342. package/dist/templates/common/bundled-skills/trellis-micro-grill/SKILL.md +47 -0
  343. package/dist/templates/common/bundled-skills/trellis-skill-creator/SKILL.md +44 -0
  344. package/dist/templates/common/bundled-skills/trellis-skill-creator/references/authoring-rules.md +97 -0
  345. package/dist/templates/common/bundled-skills/trellis-skill-creator/references/review-checklist.md +47 -0
  346. package/dist/templates/common/bundled-skills/trellis-skill-creator/references/trellis-skill-locations.md +52 -0
  347. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/SKILL.md +41 -0
  348. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/mcp-setup.md +90 -0
  349. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/repository-analysis.md +59 -0
  350. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-task-planning.md +61 -0
  351. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-writing.md +70 -0
  352. package/dist/templates/common/commands/continue.md +63 -0
  353. package/dist/templates/common/commands/finish-work.md +68 -0
  354. package/dist/templates/common/commands/start.md +69 -0
  355. package/dist/templates/common/index.d.ts +48 -0
  356. package/dist/templates/common/index.d.ts.map +1 -0
  357. package/dist/templates/common/index.js +104 -0
  358. package/dist/templates/common/index.js.map +1 -0
  359. package/dist/templates/common/skills/before-dev.md +35 -0
  360. package/dist/templates/common/skills/brainstorm.md +164 -0
  361. package/dist/templates/common/skills/break-loop.md +125 -0
  362. package/dist/templates/common/skills/check.md +106 -0
  363. package/dist/templates/common/skills/update-spec.md +364 -0
  364. package/dist/templates/copilot/hooks/session-start.py +557 -0
  365. package/dist/templates/copilot/hooks.json +19 -0
  366. package/dist/templates/copilot/index.d.ts +23 -0
  367. package/dist/templates/copilot/index.d.ts.map +1 -0
  368. package/dist/templates/copilot/index.js +54 -0
  369. package/dist/templates/copilot/index.js.map +1 -0
  370. package/dist/templates/copilot/prompts/before-dev.prompt.md +39 -0
  371. package/dist/templates/copilot/prompts/brainstorm.prompt.md +111 -0
  372. package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
  373. package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +157 -0
  374. package/dist/templates/copilot/prompts/check.prompt.md +97 -0
  375. package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
  376. package/dist/templates/copilot/prompts/finish-work.prompt.md +99 -0
  377. package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
  378. package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
  379. package/dist/templates/copilot/prompts/parallel.prompt.md +204 -0
  380. package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
  381. package/dist/templates/copilot/prompts/start.prompt.md +63 -0
  382. package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
  383. package/dist/templates/cursor/agents/trellis-check.md +139 -0
  384. package/dist/templates/cursor/agents/trellis-implement.md +119 -0
  385. package/dist/templates/cursor/agents/trellis-research.md +147 -0
  386. package/dist/templates/cursor/commands/cursor2plus-setup.md +82 -0
  387. package/dist/templates/cursor/hooks.json +30 -0
  388. package/dist/templates/cursor/index.d.ts +19 -0
  389. package/dist/templates/cursor/index.d.ts.map +1 -0
  390. package/dist/templates/cursor/index.js +19 -0
  391. package/dist/templates/cursor/index.js.map +1 -0
  392. package/dist/templates/cursor/rules/trellis-triage.mdc +38 -0
  393. package/dist/templates/cursor/worktrees.json +11 -0
  394. package/dist/templates/droid/droids/trellis-check.md +107 -0
  395. package/dist/templates/droid/droids/trellis-implement.md +102 -0
  396. package/dist/templates/droid/droids/trellis-research.md +137 -0
  397. package/dist/templates/droid/index.d.ts +15 -0
  398. package/dist/templates/droid/index.d.ts.map +1 -0
  399. package/dist/templates/droid/index.js +15 -0
  400. package/dist/templates/droid/index.js.map +1 -0
  401. package/dist/templates/droid/settings.json +70 -0
  402. package/dist/templates/extract.d.ts +40 -0
  403. package/dist/templates/extract.d.ts.map +1 -0
  404. package/dist/templates/extract.js +106 -0
  405. package/dist/templates/extract.js.map +1 -0
  406. package/dist/templates/gemini/agents/trellis-check.md +107 -0
  407. package/dist/templates/gemini/agents/trellis-implement.md +102 -0
  408. package/dist/templates/gemini/agents/trellis-research.md +136 -0
  409. package/dist/templates/gemini/index.d.ts +13 -0
  410. package/dist/templates/gemini/index.d.ts.map +1 -0
  411. package/dist/templates/gemini/index.js +13 -0
  412. package/dist/templates/gemini/index.js.map +1 -0
  413. package/dist/templates/gemini/settings.json +28 -0
  414. package/dist/templates/kiro/agents/trellis-check.json +26 -0
  415. package/dist/templates/kiro/agents/trellis-implement.json +26 -0
  416. package/dist/templates/kiro/agents/trellis-research.json +30 -0
  417. package/dist/templates/kiro/index.d.ts +18 -0
  418. package/dist/templates/kiro/index.d.ts.map +1 -0
  419. package/dist/templates/kiro/index.js +18 -0
  420. package/dist/templates/kiro/index.js.map +1 -0
  421. package/dist/templates/markdown/agents.md +32 -0
  422. package/dist/templates/markdown/gitignore.txt +15 -0
  423. package/dist/templates/markdown/index.d.ts +30 -0
  424. package/dist/templates/markdown/index.d.ts.map +1 -0
  425. package/dist/templates/markdown/index.js +55 -0
  426. package/dist/templates/markdown/index.js.map +1 -0
  427. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  428. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  429. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  430. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  431. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  432. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  433. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  434. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  435. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  436. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  437. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  438. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  439. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  440. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +223 -0
  441. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +259 -0
  442. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +633 -0
  443. package/dist/templates/markdown/spec/guides/cursor-context-injection-guide.md.txt +65 -0
  444. package/dist/templates/markdown/spec/guides/cursor-subagent-policy.md.txt +382 -0
  445. package/dist/templates/markdown/spec/guides/durable-learning-decision-guide.md.txt +76 -0
  446. package/dist/templates/markdown/spec/guides/index.md.txt +101 -0
  447. package/dist/templates/markdown/spec/guides/retrieval-daily-guide.md.txt +92 -0
  448. package/dist/templates/markdown/workspace-index.md +125 -0
  449. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  450. package/dist/templates/opencode/agents/trellis-check.md +122 -0
  451. package/dist/templates/opencode/agents/trellis-implement.md +118 -0
  452. package/dist/templates/opencode/agents/trellis-research.md +145 -0
  453. package/dist/templates/opencode/lib/session-utils.js +667 -0
  454. package/dist/templates/opencode/lib/trellis-context.js +336 -0
  455. package/dist/templates/opencode/package.json +5 -0
  456. package/dist/templates/opencode/plugins/inject-subagent-context.js +495 -0
  457. package/dist/templates/opencode/plugins/inject-workflow-state.js +159 -0
  458. package/dist/templates/opencode/plugins/session-start.js +101 -0
  459. package/dist/templates/pi/agents/trellis-check.md +37 -0
  460. package/dist/templates/pi/agents/trellis-implement.md +42 -0
  461. package/dist/templates/pi/agents/trellis-research.md +25 -0
  462. package/dist/templates/pi/extensions/trellis/index.ts.txt +1600 -0
  463. package/dist/templates/pi/index.d.ts +5 -0
  464. package/dist/templates/pi/index.d.ts.map +1 -0
  465. package/dist/templates/pi/index.js +12 -0
  466. package/dist/templates/pi/index.js.map +1 -0
  467. package/dist/templates/pi/settings.json +12 -0
  468. package/dist/templates/qoder/agents/trellis-check.md +108 -0
  469. package/dist/templates/qoder/agents/trellis-implement.md +103 -0
  470. package/dist/templates/qoder/agents/trellis-research.md +137 -0
  471. package/dist/templates/qoder/index.d.ts +15 -0
  472. package/dist/templates/qoder/index.d.ts.map +1 -0
  473. package/dist/templates/qoder/index.js +15 -0
  474. package/dist/templates/qoder/index.js.map +1 -0
  475. package/dist/templates/qoder/settings.json +47 -0
  476. package/dist/templates/shared-hooks/index.d.ts +50 -0
  477. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  478. package/dist/templates/shared-hooks/index.js +92 -0
  479. package/dist/templates/shared-hooks/index.js.map +1 -0
  480. package/dist/templates/shared-hooks/inject-shell-session-context.py +183 -0
  481. package/dist/templates/shared-hooks/inject-subagent-context.py +774 -0
  482. package/dist/templates/shared-hooks/inject-workflow-state.py +366 -0
  483. package/dist/templates/shared-hooks/research-end-retrieval-pack.py +220 -0
  484. package/dist/templates/shared-hooks/session-start.py +873 -0
  485. package/dist/templates/template-utils.d.ts +28 -0
  486. package/dist/templates/template-utils.d.ts.map +1 -0
  487. package/dist/templates/template-utils.js +83 -0
  488. package/dist/templates/template-utils.js.map +1 -0
  489. package/dist/templates/trellis/config.yaml +132 -0
  490. package/dist/templates/trellis/gitignore.txt +39 -0
  491. package/dist/templates/trellis/index.d.ts +80 -0
  492. package/dist/templates/trellis/index.d.ts.map +1 -0
  493. package/dist/templates/trellis/index.js +171 -0
  494. package/dist/templates/trellis/index.js.map +1 -0
  495. package/dist/templates/trellis/local/README.md +59 -0
  496. package/dist/templates/trellis/local/config.local.json.example +6 -0
  497. package/dist/templates/trellis/local/index.d.ts +7 -0
  498. package/dist/templates/trellis/local/index.d.ts.map +1 -0
  499. package/dist/templates/trellis/local/index.js +14 -0
  500. package/dist/templates/trellis/local/index.js.map +1 -0
  501. package/dist/templates/trellis/local/patch_wpelc8.py +297 -0
  502. package/dist/templates/trellis/local/subagent-models.json.example +4 -0
  503. package/dist/templates/trellis/local/trellis-task-models.json.example +10 -0
  504. package/dist/templates/trellis/local/trellis-task-models.json5.example +45 -0
  505. package/dist/templates/trellis/local/trellis_task_models_config.py +200 -0
  506. package/dist/templates/trellis/scripts/__init__.py +5 -0
  507. package/dist/templates/trellis/scripts/add_session.py +547 -0
  508. package/dist/templates/trellis/scripts/build_context_pack.py +12 -0
  509. package/dist/templates/trellis/scripts/build_retrieval_pack.py +12 -0
  510. package/dist/templates/trellis/scripts/common/__init__.py +103 -0
  511. package/dist/templates/trellis/scripts/common/active_task.py +607 -0
  512. package/dist/templates/trellis/scripts/common/artifact_search.py +587 -0
  513. package/dist/templates/trellis/scripts/common/cli_adapter.py +811 -0
  514. package/dist/templates/trellis/scripts/common/cli_environment.py +155 -0
  515. package/dist/templates/trellis/scripts/common/codebase_retrieval_router.py +902 -0
  516. package/dist/templates/trellis/scripts/common/config.py +458 -0
  517. package/dist/templates/trellis/scripts/common/context_pack.py +371 -0
  518. package/dist/templates/trellis/scripts/common/developer.py +190 -0
  519. package/dist/templates/trellis/scripts/common/git.py +31 -0
  520. package/dist/templates/trellis/scripts/common/git_context.py +149 -0
  521. package/dist/templates/trellis/scripts/common/io.py +37 -0
  522. package/dist/templates/trellis/scripts/common/log.py +45 -0
  523. package/dist/templates/trellis/scripts/common/packages_context.py +239 -0
  524. package/dist/templates/trellis/scripts/common/parent_orchestration.py +691 -0
  525. package/dist/templates/trellis/scripts/common/paths.py +457 -0
  526. package/dist/templates/trellis/scripts/common/retrieval_adapter_metadata.py +889 -0
  527. package/dist/templates/trellis/scripts/common/retrieval_evidence.py +917 -0
  528. package/dist/templates/trellis/scripts/common/retrieval_pack.py +425 -0
  529. package/dist/templates/trellis/scripts/common/retrieval_pack_context.py +126 -0
  530. package/dist/templates/trellis/scripts/common/safe_commit.py +285 -0
  531. package/dist/templates/trellis/scripts/common/session_context.py +1159 -0
  532. package/dist/templates/trellis/scripts/common/session_memory.py +360 -0
  533. package/dist/templates/trellis/scripts/common/smart_search_evidence.py +479 -0
  534. package/dist/templates/trellis/scripts/common/smart_search_resolve.py +125 -0
  535. package/dist/templates/trellis/scripts/common/task_context.py +223 -0
  536. package/dist/templates/trellis/scripts/common/task_dashboard.py +140 -0
  537. package/dist/templates/trellis/scripts/common/task_gates.py +1735 -0
  538. package/dist/templates/trellis/scripts/common/task_map.py +586 -0
  539. package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
  540. package/dist/templates/trellis/scripts/common/task_store.py +1533 -0
  541. package/dist/templates/trellis/scripts/common/task_utils.py +274 -0
  542. package/dist/templates/trellis/scripts/common/tasks.py +231 -0
  543. package/dist/templates/trellis/scripts/common/test_retrieval_arbitration.py +333 -0
  544. package/dist/templates/trellis/scripts/common/trellis_config.py +131 -0
  545. package/dist/templates/trellis/scripts/common/types.py +110 -0
  546. package/dist/templates/trellis/scripts/common/workflow_phase.py +212 -0
  547. package/dist/templates/trellis/scripts/get_context.py +17 -0
  548. package/dist/templates/trellis/scripts/get_developer.py +26 -0
  549. package/dist/templates/trellis/scripts/hooks/linear_sync.py +243 -0
  550. package/dist/templates/trellis/scripts/init_developer.py +51 -0
  551. package/dist/templates/trellis/scripts/route_codebase_retrieval.py +77 -0
  552. package/dist/templates/trellis/scripts/run_smart_search.py +12 -0
  553. package/dist/templates/trellis/scripts/search_artifacts.py +13 -0
  554. package/dist/templates/trellis/scripts/search_memory.py +12 -0
  555. package/dist/templates/trellis/scripts/task.py +851 -0
  556. package/dist/templates/trellis/tasks/.gitkeep +0 -0
  557. package/dist/templates/trellis/tasks/templates/release-execution/design.md +61 -0
  558. package/dist/templates/trellis/tasks/templates/release-execution/handoff-template.md +29 -0
  559. package/dist/templates/trellis/tasks/templates/release-execution/implement.md +29 -0
  560. package/dist/templates/trellis/tasks/templates/release-execution/prd.md +31 -0
  561. package/dist/templates/trellis/tasks/templates/release-readiness/design.md +50 -0
  562. package/dist/templates/trellis/tasks/templates/release-readiness/handoff-template.md +39 -0
  563. package/dist/templates/trellis/tasks/templates/release-readiness/implement.md +29 -0
  564. package/dist/templates/trellis/tasks/templates/release-readiness/prd.md +31 -0
  565. package/dist/templates/trellis/workflow.md +960 -0
  566. package/dist/types/ai-tools.d.ts +106 -0
  567. package/dist/types/ai-tools.d.ts.map +1 -0
  568. package/dist/types/ai-tools.js +294 -0
  569. package/dist/types/ai-tools.js.map +1 -0
  570. package/dist/types/migration.d.ts +125 -0
  571. package/dist/types/migration.d.ts.map +1 -0
  572. package/dist/types/migration.js +8 -0
  573. package/dist/types/migration.js.map +1 -0
  574. package/dist/utils/codebase-retrieval-router.d.ts +77 -0
  575. package/dist/utils/codebase-retrieval-router.d.ts.map +1 -0
  576. package/dist/utils/codebase-retrieval-router.js +767 -0
  577. package/dist/utils/codebase-retrieval-router.js.map +1 -0
  578. package/dist/utils/compare-versions.d.ts +12 -0
  579. package/dist/utils/compare-versions.d.ts.map +1 -0
  580. package/dist/utils/compare-versions.js +86 -0
  581. package/dist/utils/compare-versions.js.map +1 -0
  582. package/dist/utils/cwd-guard.d.ts +38 -0
  583. package/dist/utils/cwd-guard.d.ts.map +1 -0
  584. package/dist/utils/cwd-guard.js +62 -0
  585. package/dist/utils/cwd-guard.js.map +1 -0
  586. package/dist/utils/file-writer.d.ts +36 -0
  587. package/dist/utils/file-writer.d.ts.map +1 -0
  588. package/dist/utils/file-writer.js +203 -0
  589. package/dist/utils/file-writer.js.map +1 -0
  590. package/dist/utils/manifest-prune.d.ts +61 -0
  591. package/dist/utils/manifest-prune.d.ts.map +1 -0
  592. package/dist/utils/manifest-prune.js +136 -0
  593. package/dist/utils/manifest-prune.js.map +1 -0
  594. package/dist/utils/posix.d.ts +13 -0
  595. package/dist/utils/posix.d.ts.map +1 -0
  596. package/dist/utils/posix.js +15 -0
  597. package/dist/utils/posix.js.map +1 -0
  598. package/dist/utils/post-update-smoke.d.ts +7 -0
  599. package/dist/utils/post-update-smoke.d.ts.map +1 -0
  600. package/dist/utils/post-update-smoke.js +40 -0
  601. package/dist/utils/post-update-smoke.js.map +1 -0
  602. package/dist/utils/project-capabilities.d.ts +54 -0
  603. package/dist/utils/project-capabilities.d.ts.map +1 -0
  604. package/dist/utils/project-capabilities.js +515 -0
  605. package/dist/utils/project-capabilities.js.map +1 -0
  606. package/dist/utils/project-detector.d.ts +46 -0
  607. package/dist/utils/project-detector.d.ts.map +1 -0
  608. package/dist/utils/project-detector.js +666 -0
  609. package/dist/utils/project-detector.js.map +1 -0
  610. package/dist/utils/proxy.d.ts +25 -0
  611. package/dist/utils/proxy.d.ts.map +1 -0
  612. package/dist/utils/proxy.js +60 -0
  613. package/dist/utils/proxy.js.map +1 -0
  614. package/dist/utils/readiness.d.ts +20 -0
  615. package/dist/utils/readiness.d.ts.map +1 -0
  616. package/dist/utils/readiness.js +430 -0
  617. package/dist/utils/readiness.js.map +1 -0
  618. package/dist/utils/retrieval-execution-telemetry.d.ts +162 -0
  619. package/dist/utils/retrieval-execution-telemetry.d.ts.map +1 -0
  620. package/dist/utils/retrieval-execution-telemetry.js +288 -0
  621. package/dist/utils/retrieval-execution-telemetry.js.map +1 -0
  622. package/dist/utils/retrieval-result-ranking.d.ts +40 -0
  623. package/dist/utils/retrieval-result-ranking.d.ts.map +1 -0
  624. package/dist/utils/retrieval-result-ranking.js +162 -0
  625. package/dist/utils/retrieval-result-ranking.js.map +1 -0
  626. package/dist/utils/task-json.d.ts +13 -0
  627. package/dist/utils/task-json.d.ts.map +1 -0
  628. package/dist/utils/task-json.js +12 -0
  629. package/dist/utils/task-json.js.map +1 -0
  630. package/dist/utils/template-fetcher.d.ts +150 -0
  631. package/dist/utils/template-fetcher.d.ts.map +1 -0
  632. package/dist/utils/template-fetcher.js +907 -0
  633. package/dist/utils/template-fetcher.js.map +1 -0
  634. package/dist/utils/template-hash.d.ts +123 -0
  635. package/dist/utils/template-hash.d.ts.map +1 -0
  636. package/dist/utils/template-hash.js +334 -0
  637. package/dist/utils/template-hash.js.map +1 -0
  638. package/dist/utils/uninstall-scrubbers.d.ts +66 -0
  639. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
  640. package/dist/utils/uninstall-scrubbers.js +342 -0
  641. package/dist/utils/uninstall-scrubbers.js.map +1 -0
  642. package/dist/utils/update-rollout-report.d.ts +137 -0
  643. package/dist/utils/update-rollout-report.d.ts.map +1 -0
  644. package/dist/utils/update-rollout-report.js +108 -0
  645. package/dist/utils/update-rollout-report.js.map +1 -0
  646. package/dist/utils/workflow-resolver.d.ts +86 -0
  647. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  648. package/dist/utils/workflow-resolver.js +265 -0
  649. package/dist/utils/workflow-resolver.js.map +1 -0
  650. package/package.json +137 -0
  651. package/scripts/postinstall.js +45 -0
  652. package/vendor/smart-search/LICENSE +21 -0
  653. package/vendor/smart-search/README.md +412 -0
  654. package/vendor/smart-search/README.zh-CN.md +430 -0
  655. package/vendor/smart-search/npm/bin/smart-search.js +63 -0
  656. package/vendor/smart-search/npm/scripts/postinstall.js +87 -0
  657. package/vendor/smart-search/npm/scripts/resolve-prerelease-version.js +108 -0
  658. package/vendor/smart-search/npm/scripts/set-package-version.js +35 -0
  659. package/vendor/smart-search/npm/scripts/sync-python-version.js +22 -0
  660. package/vendor/smart-search/npm/scripts/test-wrapper-repair.js +99 -0
  661. package/vendor/smart-search/npm/scripts/test.js +85 -0
  662. package/vendor/smart-search/package.json +42 -0
  663. package/vendor/smart-search/pyproject.toml +37 -0
  664. package/vendor/smart-search/skills/smart-search-cli/SKILL.md +387 -0
  665. package/vendor/smart-search/skills/smart-search-cli/agents/openai.yaml +3 -0
  666. package/vendor/smart-search/skills/smart-search-cli/examples/batch-search.md +98 -0
  667. package/vendor/smart-search/skills/smart-search-cli/examples/evidence-gathering.md +89 -0
  668. package/vendor/smart-search/skills/smart-search-cli/references/cli-contract.md +337 -0
  669. package/vendor/smart-search/src/smart_search/__init__.py +1 -0
  670. package/vendor/smart-search/src/smart_search/assets/skills/smart-search-cli/SKILL.md +387 -0
  671. package/vendor/smart-search/src/smart_search/assets/skills/smart-search-cli/agents/openai.yaml +3 -0
  672. package/vendor/smart-search/src/smart_search/assets/skills/smart-search-cli/examples/batch-search.md +98 -0
  673. package/vendor/smart-search/src/smart_search/assets/skills/smart-search-cli/examples/evidence-gathering.md +89 -0
  674. package/vendor/smart-search/src/smart_search/assets/skills/smart-search-cli/references/cli-contract.md +337 -0
  675. package/vendor/smart-search/src/smart_search/cli.py +2003 -0
  676. package/vendor/smart-search/src/smart_search/config.py +580 -0
  677. package/vendor/smart-search/src/smart_search/logger.py +43 -0
  678. package/vendor/smart-search/src/smart_search/providers/__init__.py +16 -0
  679. package/vendor/smart-search/src/smart_search/providers/base.py +41 -0
  680. package/vendor/smart-search/src/smart_search/providers/context7.py +141 -0
  681. package/vendor/smart-search/src/smart_search/providers/exa.py +206 -0
  682. package/vendor/smart-search/src/smart_search/providers/jina.py +136 -0
  683. package/vendor/smart-search/src/smart_search/providers/openai_compatible.py +370 -0
  684. package/vendor/smart-search/src/smart_search/providers/zhipu.py +143 -0
  685. package/vendor/smart-search/src/smart_search/service.py +2865 -0
  686. package/vendor/smart-search/src/smart_search/sources.py +429 -0
  687. package/vendor/smart-search/src/smart_search/utils.py +220 -0
@@ -0,0 +1,851 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Task Management Script.
5
+
6
+ Usage:
7
+ python task.py create "<title>" [--slug <name>] [--assignee <dev>] [--priority P0|P1|P2|P3] [--parent <dir>] [--package <pkg>]
8
+ python task.py add-context <dir> <file> <path> [reason] # Add jsonl entry
9
+ python task.py validate <dir> # Validate jsonl files
10
+ python task.py list-context <dir> # List jsonl entries
11
+ python task.py dashboard # Show Task Dashboard
12
+ python task.py select <dir> # Select task for this live session
13
+ python task.py selected [--source] # Show selected task
14
+ python task.py start-execution <dir> --approved # Start approved execution
15
+ python task.py record-gate <dir> --transition <key> --gate <gate> --result PASS|FAIL|SKIPPED --reviewer <id> --evidence <ref> [--root-cause <cause>]
16
+ python task.py exit # Clear selected task
17
+ python task.py set-branch <dir> <branch> # Set git branch
18
+ python task.py set-base-branch <dir> <branch> # Set PR target branch
19
+ python task.py set-scope <dir> <scope> # Set scope for PR title
20
+ python task.py archive <task-dir> [--check] [--archive-integrated-children] # Check or archive completed task
21
+ python task.py prepare-archive-evidence <task-dir> [--dry-run] # Draft missing verify.md archive evidence
22
+ python task.py prepare-learning-scaffold <task-dir> [--trigger <text>] # Print spec-capture checklist (stdout only)
23
+ python task.py list # List active tasks
24
+ python task.py list-archive [month] # List archived tasks
25
+ python task.py add-subtask <parent-dir> <child-dir> # Link child to parent
26
+ python task.py remove-subtask <parent-dir> <child-dir> # Unlink child from parent
27
+ python task.py prepare-child-worktree <parent-dir> <child-dir> --branch <branch>
28
+ python task.py set-child-state <parent-dir> <child-dir> <state> --evidence <ref>
29
+ python task.py integrate-child <parent-dir> <child-dir> <state> --evidence <ref>
30
+ python task.py generate-child-prompt <parent-dir> <child-dir> [--mode inline|subagent]
31
+ python task.py parent-status <parent-dir>
32
+ python task.py review-child <parent-dir> <child-dir> [--check] [--decision accept|changes|cancel|integrate-through]
33
+ """
34
+
35
+ from __future__ import annotations
36
+
37
+ import argparse
38
+ import sys
39
+ from datetime import datetime, timezone
40
+ from pathlib import Path
41
+
42
+ from common.log import Colors, colored
43
+ from common.paths import (
44
+ DIR_WORKFLOW,
45
+ DIR_TASKS,
46
+ FILE_TASK_JSON,
47
+ get_repo_root,
48
+ get_developer,
49
+ get_tasks_dir,
50
+ )
51
+ from common.active_task import (
52
+ clear_selected_task,
53
+ resolve_context_key,
54
+ resolve_selected_task,
55
+ set_selected_task,
56
+ )
57
+ from common.io import read_json, write_json
58
+ from common.task_dashboard import render_task_dashboard
59
+ from common.cli_environment import optional_capability_note
60
+ from common.task_gates import (
61
+ BASELINE_GATE,
62
+ build_reviewer_gate_record,
63
+ read_strategy_contract,
64
+ start_execution_repair_hints,
65
+ validate_start_execution,
66
+ validate_start_execution_check,
67
+ write_gate_record,
68
+ )
69
+ from common.task_utils import resolve_task_dir, run_task_hooks
70
+ from common.tasks import (
71
+ children_progress,
72
+ format_child_task_display,
73
+ iter_active_tasks,
74
+ load_parent_child_integration_states,
75
+ )
76
+ from common.task_map import get_child_state
77
+
78
+ # Import command handlers from split modules (also re-exports for plan.py compatibility)
79
+ from common.task_store import (
80
+ cmd_create,
81
+ cmd_archive,
82
+ cmd_prepare_archive_evidence,
83
+ cmd_prepare_learning_scaffold,
84
+ cmd_set_branch,
85
+ cmd_set_base_branch,
86
+ cmd_set_scope,
87
+ cmd_add_subtask,
88
+ cmd_remove_subtask,
89
+ cmd_prepare_child_worktree,
90
+ cmd_set_child_state,
91
+ cmd_integrate_child,
92
+ cmd_generate_child_prompt,
93
+ cmd_parent_status,
94
+ cmd_review_child,
95
+ )
96
+ from common.task_context import (
97
+ cmd_add_context,
98
+ cmd_validate,
99
+ cmd_list_context,
100
+ )
101
+
102
+
103
+ # =============================================================================
104
+ # Command: dashboard / select / selected / start-execution / record-gate / exit
105
+ # =============================================================================
106
+
107
+ def _repo_relative(path, repo_root) -> str:
108
+ try:
109
+ return path.relative_to(repo_root).as_posix()
110
+ except ValueError:
111
+ return str(path)
112
+
113
+
114
+ def _resolve_existing_task(task_input: str, repo_root):
115
+ full_path = resolve_task_dir(task_input, repo_root)
116
+ if not full_path.is_dir():
117
+ print(colored(f"Error: Task not found: {task_input}", Colors.RED), file=sys.stderr)
118
+ print("Hint: Use task name (e.g., 'my-task') or full path (e.g., '.trellis/tasks/01-31-my-task')", file=sys.stderr)
119
+ return None
120
+ return full_path
121
+
122
+
123
+ def cmd_dashboard(args: argparse.Namespace) -> int:
124
+ """Show Task Dashboard without mutating selection or status."""
125
+ _ = args
126
+ print(render_task_dashboard(get_repo_root()))
127
+ return 0
128
+
129
+
130
+ def cmd_select(args: argparse.Namespace) -> int:
131
+ """Select a task for this live session without changing task.status."""
132
+ repo_root = get_repo_root()
133
+ task_input = args.dir
134
+ full_path = _resolve_existing_task(task_input, repo_root)
135
+ if full_path is None:
136
+ return 1
137
+
138
+ if not resolve_context_key():
139
+ print(
140
+ colored("Error: session identity not available; selected_task was not persisted.", Colors.RED),
141
+ file=sys.stderr,
142
+ )
143
+ print(
144
+ "Hint: run inside an AI session that exposes session identity, or set TRELLIS_CONTEXT_ID before running task.py select.",
145
+ file=sys.stderr,
146
+ )
147
+ return 1
148
+
149
+ selected = set_selected_task(_repo_relative(full_path, repo_root), repo_root)
150
+ if not selected:
151
+ print(colored("Error: failed to select task", Colors.RED), file=sys.stderr)
152
+ return 1
153
+
154
+ print(colored(f"✓ Selected task: {selected.task_path}", Colors.GREEN))
155
+ print(f"Source: {selected.source}")
156
+ print("Task status unchanged.")
157
+ return 0
158
+
159
+
160
+ def _print_no_selected_task_guidance() -> None:
161
+ """Explain why no task is selected and what to run next."""
162
+ print(colored("No task selected for this live session.", Colors.YELLOW), file=sys.stderr)
163
+ print("Next actions:", file=sys.stderr)
164
+ print(
165
+ " - Route work: python ./.trellis/scripts/task.py dashboard",
166
+ file=sys.stderr,
167
+ )
168
+ print(
169
+ " - Select a task: python ./.trellis/scripts/task.py select <task-dir>",
170
+ file=sys.stderr,
171
+ )
172
+ print(
173
+ " - List active tasks: python ./.trellis/scripts/task.py list",
174
+ file=sys.stderr,
175
+ )
176
+ print(
177
+ " - Persist selection in shells: set TRELLIS_CONTEXT_ID (or use your platform session hook)",
178
+ file=sys.stderr,
179
+ )
180
+
181
+
182
+ def cmd_selected(args: argparse.Namespace) -> int:
183
+ """Show selected task."""
184
+ repo_root = get_repo_root()
185
+ selected = resolve_selected_task(repo_root)
186
+
187
+ if args.source:
188
+ print(f"Selected task: {selected.task_path or '(none)'}")
189
+ print(f"Source: {selected.source}")
190
+ if selected.stale:
191
+ print("State: stale")
192
+ if not selected.task_path:
193
+ _print_no_selected_task_guidance()
194
+ return 0 if selected.task_path else 1
195
+
196
+ if selected.task_path:
197
+ print(selected.task_path)
198
+ return 0
199
+
200
+ _print_no_selected_task_guidance()
201
+ return 1
202
+
203
+
204
+ def cmd_exit(args: argparse.Namespace) -> int:
205
+ """Clear selected task for this live session without changing task.status."""
206
+ _ = args
207
+ repo_root = get_repo_root()
208
+ selected = clear_selected_task(repo_root)
209
+ if not selected.task_path:
210
+ print(colored("No selected task set", Colors.YELLOW))
211
+ return 0
212
+
213
+ print(colored(f"✓ Cleared selected task (was: {selected.task_path})", Colors.GREEN))
214
+ print(f"Source: {selected.source}")
215
+ print("Task status unchanged.")
216
+ return 0
217
+
218
+
219
+ def _print_guard_errors(items: list[str], stream=None) -> None:
220
+ if stream is None:
221
+ stream = sys.stdout
222
+ for item in items:
223
+ print(f" - {item}", file=stream)
224
+
225
+
226
+ def cmd_start_execution(args: argparse.Namespace) -> int:
227
+ """Start approved task execution after a non-mutating readiness check."""
228
+ repo_root = get_repo_root()
229
+ task_dir = _resolve_existing_task(args.dir, repo_root)
230
+ if task_dir is None:
231
+ return 1
232
+
233
+ task_json_path = task_dir / FILE_TASK_JSON
234
+ task_data = read_json(task_json_path) if task_json_path.is_file() else None
235
+
236
+ if args.check:
237
+ guard = validate_start_execution_check(task_dir, task_data)
238
+ if not guard.ok:
239
+ print(colored("Start-execution check: FAIL", Colors.RED))
240
+ _print_guard_errors(guard.errors)
241
+ for hint in start_execution_repair_hints(guard.errors, task_dir):
242
+ print(f" Hint: {hint}")
243
+ return 1
244
+ print(colored("Start-execution check: PASS", Colors.GREEN))
245
+ print(f"Contract fingerprint: {guard.contract_fingerprint}")
246
+ baseline_fingerprint = guard.artifact_fingerprints.get(BASELINE_GATE)
247
+ if baseline_fingerprint:
248
+ print(f"Artifact fingerprint: {baseline_fingerprint}")
249
+ if guard.required_gates:
250
+ print(f"Required reviewer gates: {', '.join(guard.required_gates)}")
251
+ if task_dir is not None:
252
+ contract, _ = read_strategy_contract(task_dir)
253
+ cap_note = optional_capability_note(contract.get("optional_capabilities"))
254
+ if cap_note:
255
+ print(colored(f"Note: {cap_note}", Colors.YELLOW))
256
+ print("Artifact gates are ready. Ask the user for explicit execution approval before running `task.py start-execution <task> --approved`.")
257
+ return 0
258
+
259
+ if not args.approved:
260
+ print(colored("Error: no action selected for start-execution.", Colors.RED), file=sys.stderr)
261
+ print("Run with --check for non-mutating preflight or --approved after explicit user approval.", file=sys.stderr)
262
+ return 1
263
+
264
+ guard = validate_start_execution(task_dir, task_data, approved=True)
265
+ if not guard.ok:
266
+ print(colored("Error: cannot start execution; readiness check failed.", Colors.RED), file=sys.stderr)
267
+ _print_guard_errors(guard.errors, stream=sys.stderr)
268
+ return 1
269
+
270
+ assert task_data is not None
271
+ if guard.baseline_record:
272
+ write_gate_record(task_data, "start-execution", BASELINE_GATE, guard.baseline_record)
273
+ for gate, record in guard.auto_gate_records.items():
274
+ write_gate_record(task_data, "start-execution", gate, record)
275
+ task_data["execution_approval"] = {
276
+ "schema_version": 1,
277
+ "transition": "start-execution",
278
+ "approved_at": datetime.now(timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z"),
279
+ "approved_by": "user",
280
+ "approval_source": "task.py start-execution --approved",
281
+ "contract_fingerprint": guard.contract_fingerprint,
282
+ "artifact_fingerprint": guard.artifact_fingerprints.get(BASELINE_GATE),
283
+ }
284
+ if task_data.get("status") == "planning":
285
+ task_data["status"] = "in_progress"
286
+ if not write_json(task_json_path, task_data):
287
+ print(colored("Error: failed to write task.json", Colors.RED), file=sys.stderr)
288
+ return 1
289
+
290
+ print(colored(f"✓ Execution approved for: {_repo_relative(task_dir, repo_root)}", Colors.GREEN))
291
+ print(f"Status: {task_data.get('status')}")
292
+ run_task_hooks("after_start", task_json_path, repo_root)
293
+ return 0
294
+
295
+
296
+ def cmd_record_gate(args: argparse.Namespace) -> int:
297
+ """Record a non-baseline reviewer gate result."""
298
+ repo_root = get_repo_root()
299
+ task_dir = _resolve_existing_task(args.dir, repo_root)
300
+ if task_dir is None:
301
+ return 1
302
+
303
+ task_json_path = task_dir / FILE_TASK_JSON
304
+ task_data = read_json(task_json_path) if task_json_path.is_file() else None
305
+ if task_data is None:
306
+ print(colored("Error: task.json not found or invalid", Colors.RED), file=sys.stderr)
307
+ return 1
308
+
309
+ record, errors, warnings = build_reviewer_gate_record(
310
+ task_dir=task_dir,
311
+ task_data=task_data,
312
+ transition=args.transition,
313
+ gate=args.gate,
314
+ result=args.result,
315
+ reviewer=args.reviewer,
316
+ evidence=args.evidence,
317
+ issue_fingerprint=args.issue_fingerprint,
318
+ issue_summary=args.issue_summary,
319
+ root_cause=args.root_cause,
320
+ skip_approved_by=args.skip_approved_by,
321
+ skip_reason=args.skip_reason,
322
+ contract_fingerprint=args.contract_fingerprint,
323
+ artifact_fingerprint=args.artifact_fingerprint,
324
+ )
325
+ if errors:
326
+ print(colored("Error: cannot record quality gate.", Colors.RED), file=sys.stderr)
327
+ _print_guard_errors(errors, stream=sys.stderr)
328
+ return 1
329
+
330
+ assert record is not None
331
+ write_gate_record(task_data, args.transition, args.gate, record)
332
+ if not write_json(task_json_path, task_data):
333
+ print(colored("Error: failed to write task.json", Colors.RED), file=sys.stderr)
334
+ return 1
335
+
336
+ print(colored(f"✓ Recorded gate: {args.transition}/{args.gate} = {record['result']}", Colors.GREEN))
337
+ print(f"Evidence: {record['evidence']}")
338
+ print(f"Contract fingerprint: {record['contract_fingerprint']}")
339
+ print(f"Artifact fingerprint: {record['artifact_fingerprint']}")
340
+ if record.get("route"):
341
+ print(f"Route: {record['route']}")
342
+ for warning in warnings:
343
+ print(colored(f"Warning: {warning}", Colors.YELLOW), file=sys.stderr)
344
+ return 0
345
+
346
+
347
+ # =============================================================================
348
+ # Command: list
349
+ # =============================================================================
350
+
351
+ def cmd_list(args: argparse.Namespace) -> int:
352
+ """List active tasks."""
353
+ repo_root = get_repo_root()
354
+ tasks_dir = get_tasks_dir(repo_root)
355
+ selected_task = resolve_selected_task(repo_root).task_path
356
+ developer = get_developer(repo_root)
357
+ filter_mine = args.mine
358
+ filter_status = args.status
359
+
360
+ if filter_mine:
361
+ if not developer:
362
+ print(colored("Error: No developer set. Run init_developer.py first", Colors.RED), file=sys.stderr)
363
+ return 1
364
+ print(colored(f"My tasks (assignee: {developer}):", Colors.BLUE))
365
+ else:
366
+ print(colored("All active tasks:", Colors.BLUE))
367
+ print()
368
+
369
+ # Single pass: collect all tasks via shared iterator
370
+ all_tasks = {t.dir_name: t for t in iter_active_tasks(tasks_dir)}
371
+ all_statuses = {name: t.status for name, t in all_tasks.items()}
372
+
373
+ # Display tasks hierarchically
374
+ count = 0
375
+
376
+ def _print_task(
377
+ dir_name: str,
378
+ indent: int = 0,
379
+ parent_dir: Path | None = None,
380
+ ) -> None:
381
+ nonlocal count
382
+ t = all_tasks[dir_name]
383
+
384
+ # Apply --mine filter
385
+ if filter_mine and (t.assignee or "-") != developer:
386
+ return
387
+
388
+ # Apply --status filter
389
+ if filter_status and t.status != filter_status:
390
+ return
391
+
392
+ relative_path = f"{DIR_WORKFLOW}/{DIR_TASKS}/{dir_name}"
393
+ marker = ""
394
+ if relative_path == selected_task:
395
+ marker = f" {colored('<- selected', Colors.GREEN)}"
396
+
397
+ integration_states = None
398
+ if t.children:
399
+ integration_states = load_parent_child_integration_states(
400
+ t.directory, t.children
401
+ )
402
+ progress = children_progress(
403
+ t.children, all_statuses, integration_states
404
+ )
405
+
406
+ integration_state = None
407
+ if parent_dir is not None:
408
+ integration_state = get_child_state(parent_dir, dir_name)
409
+ status_display = format_child_task_display(t.status, integration_state)
410
+
411
+ # Package tag
412
+ pkg_tag = f" @{t.package}" if t.package else ""
413
+
414
+ prefix = " " * indent + " - "
415
+
416
+ if filter_mine:
417
+ print(
418
+ f"{prefix}{dir_name}/ ({status_display}){pkg_tag}{progress}{marker}"
419
+ )
420
+ else:
421
+ print(
422
+ f"{prefix}{dir_name}/ ({status_display}){pkg_tag}{progress} "
423
+ f"[{colored(t.assignee or '-', Colors.CYAN)}]{marker}"
424
+ )
425
+ count += 1
426
+
427
+ # Print children indented
428
+ for child_name in t.children:
429
+ if child_name in all_tasks:
430
+ _print_task(child_name, indent + 1, parent_dir=t.directory)
431
+
432
+ # Display only top-level tasks (those without a parent)
433
+ for dir_name in sorted(all_tasks.keys()):
434
+ if not all_tasks[dir_name].parent:
435
+ _print_task(dir_name)
436
+
437
+ if count == 0:
438
+ if filter_mine:
439
+ print(" (no tasks assigned to you)")
440
+ else:
441
+ print(" (no active tasks)")
442
+
443
+ print()
444
+ print(f"Total: {count} task(s)")
445
+ return 0
446
+
447
+
448
+ # =============================================================================
449
+ # Command: list-archive
450
+ # =============================================================================
451
+
452
+ def cmd_list_archive(args: argparse.Namespace) -> int:
453
+ """List archived tasks."""
454
+ repo_root = get_repo_root()
455
+ tasks_dir = get_tasks_dir(repo_root)
456
+ archive_dir = tasks_dir / "archive"
457
+ month = args.month
458
+
459
+ print(colored("Archived tasks:", Colors.BLUE))
460
+ print()
461
+
462
+ if month:
463
+ month_dir = archive_dir / month
464
+ if month_dir.is_dir():
465
+ print(f"[{month}]")
466
+ for d in sorted(month_dir.iterdir()):
467
+ if d.is_dir():
468
+ print(f" - {d.name}/")
469
+ else:
470
+ print(f" No archives for {month}")
471
+ else:
472
+ if archive_dir.is_dir():
473
+ for month_dir in sorted(archive_dir.iterdir()):
474
+ if month_dir.is_dir():
475
+ month_name = month_dir.name
476
+ count = sum(1 for d in month_dir.iterdir() if d.is_dir())
477
+ print(f"[{month_name}] - {count} task(s)")
478
+
479
+ return 0
480
+
481
+
482
+ # =============================================================================
483
+ # Help
484
+ # =============================================================================
485
+
486
+ def show_usage() -> None:
487
+ """Show usage help."""
488
+ print("""Task Management Script
489
+
490
+ Usage:
491
+ python task.py create <title> Create new task directory
492
+ python task.py create <title> --package <pkg> Create task for a specific package
493
+ python task.py create <title> --parent <dir> Create task as child of parent
494
+ python task.py add-context <dir> <jsonl> <path> [reason] Add entry to jsonl
495
+ python task.py validate <dir> Validate jsonl files
496
+ python task.py list-context <dir> List jsonl entries
497
+ python task.py dashboard Show Task Dashboard
498
+ python task.py select <dir> Select task for this live session
499
+ python task.py selected [--source] Show selected task
500
+ python task.py start-execution <dir> --check Check execution readiness
501
+ python task.py start-execution <dir> --approved Start approved execution
502
+ python task.py record-gate <dir> --transition <key> --gate <gate> --result PASS|FAIL|SKIPPED --reviewer <id> --evidence <ref> [--root-cause <cause>]
503
+ python task.py exit Clear selected task
504
+ python task.py set-branch <dir> <branch> Set git branch
505
+ python task.py set-base-branch <dir> <branch> Set PR target branch
506
+ python task.py set-scope <dir> <scope> Set scope for PR title
507
+ python task.py archive <task-dir> [--check] Check or archive completed task
508
+ python task.py add-subtask <parent> <child> Link child task to parent
509
+ python task.py remove-subtask <parent> <child> Unlink child from parent
510
+ python task.py prepare-child-worktree <parent> <child> --branch <branch>
511
+ python task.py set-child-state <parent> <child> <state> --evidence <ref>
512
+ python task.py integrate-child <parent> <child> <state> --evidence <ref>
513
+ python task.py list [--mine] [--status <status>] List tasks
514
+ python task.py list-archive [YYYY-MM] List archived tasks
515
+
516
+ Monorepo options:
517
+ --package <pkg> Package name (validated against config.yaml packages)
518
+
519
+ List options:
520
+ --mine, -m Show only tasks assigned to current developer
521
+ --status, -s <s> Filter by status (planning, in_progress, review, completed)
522
+
523
+ Examples:
524
+ python task.py create "Add login feature" --slug add-login
525
+ python task.py create "Add login feature" --slug add-login --package cli
526
+ python task.py create "Child task" --slug child --parent .trellis/tasks/01-21-parent
527
+ python task.py add-context <dir> implement .trellis/spec/cli/backend/auth.md "Auth guidelines"
528
+ python task.py set-branch <dir> task/add-login
529
+ python task.py dashboard
530
+ python task.py select .trellis/tasks/01-21-add-login
531
+ python task.py selected --source
532
+ python task.py start-execution .trellis/tasks/01-21-add-login --check
533
+ python task.py start-execution .trellis/tasks/01-21-add-login --approved
534
+ python task.py record-gate .trellis/tasks/01-21-add-login --transition full-task-complete --gate code-review --result FAIL --reviewer codex --evidence verify.md --issue-fingerprint auth-branch-1 --root-cause implementation-defect
535
+ python task.py exit
536
+ python task.py archive add-login --check
537
+ python task.py archive add-login
538
+ python task.py add-subtask parent-task child-task # Link existing tasks
539
+ python task.py remove-subtask parent-task child-task
540
+ python task.py prepare-child-worktree parent-task child-task --branch child-task
541
+ python task.py set-child-state parent-task child-task review --evidence verify.md
542
+ python task.py integrate-child parent-task child-task accepted --evidence handoff.md --ref child-branch
543
+ python task.py integrate-child parent-task child-task integrated --evidence task-map.md --ref child-branch --execute-merge
544
+ python task.py generate-child-prompt parent-task child-task --mode inline
545
+ python task.py parent-status parent-task
546
+ python task.py review-child parent-task child-task --check
547
+ python task.py review-child parent-task child-task --decision accept --ref child-branch
548
+ python task.py list # List all active tasks
549
+ python task.py list --mine # List my tasks only
550
+ python task.py list --mine --status in_progress # List my in-progress tasks
551
+ """)
552
+
553
+
554
+ # =============================================================================
555
+ # Main Entry
556
+ # =============================================================================
557
+
558
+ def main() -> int:
559
+ """CLI entry point."""
560
+ # Deprecation guard: `init-context` was removed in v0.5.0-beta.12.
561
+ # Detect early so argparse doesn't mask the real reason with a generic
562
+ # "invalid choice" error.
563
+ if len(sys.argv) >= 2 and sys.argv[1] == "init-context":
564
+ print(
565
+ colored(
566
+ "Error: `task.py init-context` was removed in v0.5.0-beta.12.",
567
+ Colors.RED,
568
+ ),
569
+ file=sys.stderr,
570
+ )
571
+ print(
572
+ "implement.jsonl / check.jsonl are now seeded on `task.py create` for",
573
+ file=sys.stderr,
574
+ )
575
+ print(
576
+ "sub-agent-capable platforms and curated by the AI during planning when needed.",
577
+ file=sys.stderr,
578
+ )
579
+ print("See .trellis/workflow.md planning artifact guidance or run:", file=sys.stderr)
580
+ print(
581
+ " python ./.trellis/scripts/get_context.py --mode phase --step 1",
582
+ file=sys.stderr,
583
+ )
584
+ print(
585
+ "Use `task.py add-context <dir> implement|check <path> <reason>` to append entries.",
586
+ file=sys.stderr,
587
+ )
588
+ return 2
589
+
590
+ parser = argparse.ArgumentParser(
591
+ description="Task Management Script",
592
+ formatter_class=argparse.RawDescriptionHelpFormatter,
593
+ )
594
+ subparsers = parser.add_subparsers(dest="command", help="Commands")
595
+
596
+ # create
597
+ p_create = subparsers.add_parser("create", help="Create new task")
598
+ p_create.add_argument("title", help="Task title")
599
+ p_create.add_argument("--slug", "-s", help="Task slug")
600
+ p_create.add_argument("--assignee", "-a", help="Assignee developer")
601
+ p_create.add_argument("--priority", "-p", default="P2", help="Priority (P0-P3)")
602
+ p_create.add_argument("--description", "-d", help="Task description")
603
+ p_create.add_argument("--parent", help="Parent task directory (establishes subtask link)")
604
+ p_create.add_argument("--package", help="Package name for monorepo projects")
605
+
606
+ # add-context
607
+ p_add = subparsers.add_parser("add-context", help="Add context entry")
608
+ p_add.add_argument("dir", help="Task directory")
609
+ p_add.add_argument("file", help="JSONL file (implement|check)")
610
+ p_add.add_argument("path", help="File path to add")
611
+ p_add.add_argument("reason", nargs="?", help="Reason for adding")
612
+
613
+ # validate
614
+ p_validate = subparsers.add_parser("validate", help="Validate context files")
615
+ p_validate.add_argument("dir", help="Task directory")
616
+
617
+ # list-context
618
+ p_listctx = subparsers.add_parser("list-context", help="List context entries")
619
+ p_listctx.add_argument("dir", help="Task directory")
620
+
621
+ # dashboard
622
+ subparsers.add_parser("dashboard", help="Show Task Dashboard")
623
+
624
+ # select
625
+ p_select = subparsers.add_parser("select", help="Select task for this live session")
626
+ p_select.add_argument("dir", help="Task directory")
627
+
628
+ # selected
629
+ p_selected = subparsers.add_parser("selected", help="Show selected task")
630
+ p_selected.add_argument("--source", action="store_true",
631
+ help="Show selected task source")
632
+
633
+ # start-execution
634
+ p_start_execution = subparsers.add_parser("start-execution", help="Start approved task execution")
635
+ p_start_execution.add_argument("dir", help="Task directory")
636
+ p_start_execution.add_argument("--check", action="store_true",
637
+ help="Run non-mutating execution readiness check")
638
+ p_start_execution.add_argument("--approved", action="store_true",
639
+ help="Record explicit approval and start execution")
640
+
641
+ # record-gate
642
+ p_record_gate = subparsers.add_parser("record-gate", help="Record reviewer quality gate")
643
+ p_record_gate.add_argument("dir", help="Task directory")
644
+ p_record_gate.add_argument("--transition", required=True, help="Transition key")
645
+ p_record_gate.add_argument("--gate", required=True, help="Gate name")
646
+ p_record_gate.add_argument("--result", required=True, help="PASS, FAIL, or SKIPPED")
647
+ p_record_gate.add_argument("--reviewer", required=True, help="Reviewer identifier")
648
+ p_record_gate.add_argument("--evidence", required=True, help="Short evidence reference")
649
+ p_record_gate.add_argument("--issue-fingerprint", help="Required for FAIL")
650
+ p_record_gate.add_argument("--issue-summary", help="Optional short issue summary for FAIL")
651
+ p_record_gate.add_argument("--root-cause",
652
+ help="Required for FAIL: implementation-defect, contract-changing-defect, or validation-environment-blocker")
653
+ p_record_gate.add_argument("--skip-approved-by", help="Must be 'user' for SKIPPED")
654
+ p_record_gate.add_argument("--skip-reason", help="Required reason for SKIPPED")
655
+ p_record_gate.add_argument("--contract-fingerprint", help="Optional current contract fingerprint assertion")
656
+ p_record_gate.add_argument("--artifact-fingerprint", help="Optional current artifact fingerprint assertion")
657
+
658
+ # exit
659
+ subparsers.add_parser("exit", help="Clear selected task")
660
+
661
+ # set-branch
662
+ p_branch = subparsers.add_parser("set-branch", help="Set git branch")
663
+ p_branch.add_argument("dir", help="Task directory")
664
+ p_branch.add_argument("branch", help="Branch name")
665
+
666
+ # set-base-branch
667
+ p_base = subparsers.add_parser("set-base-branch", help="Set PR target branch")
668
+ p_base.add_argument("dir", help="Task directory")
669
+ p_base.add_argument("base_branch", help="Base branch name (PR target)")
670
+
671
+ # set-scope
672
+ p_scope = subparsers.add_parser("set-scope", help="Set scope")
673
+ p_scope.add_argument("dir", help="Task directory")
674
+ p_scope.add_argument("scope", help="Scope name")
675
+
676
+ # archive
677
+ p_archive = subparsers.add_parser("archive", help="Archive task")
678
+ p_archive.add_argument("name", help="Task directory or name")
679
+ p_archive.add_argument("--check", action="store_true", help="Run non-mutating archive readiness check")
680
+ p_archive.add_argument("--no-commit", action="store_true", help="Skip auto git commit after archive")
681
+ p_archive.add_argument(
682
+ "--archive-integrated-children",
683
+ action="store_true",
684
+ help="When archiving a parent, also archive integrated children that pass archive --check",
685
+ )
686
+
687
+ # prepare-archive-evidence
688
+ p_prepare_archive = subparsers.add_parser(
689
+ "prepare-archive-evidence",
690
+ help="Append missing archive evidence sections to verify.md",
691
+ )
692
+ p_prepare_archive.add_argument("name", help="Task directory or name")
693
+ p_prepare_archive.add_argument(
694
+ "--dry-run",
695
+ action="store_true",
696
+ help="Show what would be appended without writing verify.md",
697
+ )
698
+
699
+ # prepare-learning-scaffold
700
+ p_learning_scaffold = subparsers.add_parser(
701
+ "prepare-learning-scaffold",
702
+ help="Print durable-learning / spec-update checklist (does not edit specs)",
703
+ )
704
+ p_learning_scaffold.add_argument("name", help="Task directory or name")
705
+ p_learning_scaffold.add_argument(
706
+ "--trigger",
707
+ help="Optional reason (e.g. parent review changes, repeated workflow bug)",
708
+ )
709
+
710
+ # list
711
+ p_list = subparsers.add_parser("list", help="List tasks")
712
+ p_list.add_argument("--mine", "-m", action="store_true", help="My tasks only")
713
+ p_list.add_argument("--status", "-s", help="Filter by status")
714
+
715
+ # add-subtask
716
+ p_addsub = subparsers.add_parser("add-subtask", help="Link child task to parent")
717
+ p_addsub.add_argument("parent_dir", help="Parent task directory")
718
+ p_addsub.add_argument("child_dir", help="Child task directory")
719
+
720
+ # remove-subtask
721
+ p_rmsub = subparsers.add_parser("remove-subtask", help="Unlink child task from parent")
722
+ p_rmsub.add_argument("parent_dir", help="Parent task directory")
723
+ p_rmsub.add_argument("child_dir", help="Child task directory")
724
+
725
+ # prepare-child-worktree
726
+ p_prepare_worktree = subparsers.add_parser("prepare-child-worktree", help="Create/register a Child git worktree")
727
+ p_prepare_worktree.add_argument("parent_dir", help="Parent task directory")
728
+ p_prepare_worktree.add_argument("child_dir", help="Child task directory")
729
+ p_prepare_worktree.add_argument("--branch", required=True, help="Child git branch to create or checkout")
730
+ p_prepare_worktree.add_argument("--base", help="Base ref for a new Child branch")
731
+ p_prepare_worktree.add_argument("--path", help="Worktree path under .trellis/worktrees/")
732
+ p_prepare_worktree.add_argument("--check", action="store_true", help="Run non-mutating worktree readiness check")
733
+
734
+ # set-child-state
735
+ p_child_state = subparsers.add_parser("set-child-state", help="Set Child Worker state in Parent task-map.md")
736
+ p_child_state.add_argument("parent_dir", help="Parent task directory")
737
+ p_child_state.add_argument("child_dir", help="Child task directory")
738
+ p_child_state.add_argument("state", help="Child state")
739
+ p_child_state.add_argument("--evidence", required=True, help="Short evidence reference")
740
+ p_child_state.add_argument("--reason", help="Optional short reason")
741
+
742
+ # integrate-child
743
+ p_integrate_child = subparsers.add_parser("integrate-child", help="Set Parent-controlled Child integration state")
744
+ p_integrate_child.add_argument("parent_dir", help="Parent task directory")
745
+ p_integrate_child.add_argument("child_dir", help="Child task directory")
746
+ p_integrate_child.add_argument("state", help="Parent-controlled Child state")
747
+ p_integrate_child.add_argument("--evidence", required=True, help="Short evidence reference")
748
+ p_integrate_child.add_argument("--ref", help="Child git ref or reviewed diff reference")
749
+ p_integrate_child.add_argument("--reason", help="Optional short reason")
750
+ p_integrate_child.add_argument("--execute-merge", action="store_true", help="Execute git merge --no-ff --no-commit for an integrated Child")
751
+ p_integrate_child.add_argument("--check", action="store_true", help="Run non-mutating integration readiness check")
752
+
753
+ # generate-child-prompt
754
+ p_gen_prompt = subparsers.add_parser(
755
+ "generate-child-prompt",
756
+ help="Generate child implementation prompt for parent orchestration",
757
+ )
758
+ p_gen_prompt.add_argument("parent_dir", help="Parent task directory")
759
+ p_gen_prompt.add_argument("child_dir", help="Child task directory")
760
+ p_gen_prompt.add_argument(
761
+ "--mode",
762
+ choices=["inline", "subagent"],
763
+ default="inline",
764
+ help="Delivery mode hint (inline manual handoff vs optional subagent)",
765
+ )
766
+ p_gen_prompt.add_argument(
767
+ "--include-artifacts",
768
+ action="store_true",
769
+ help="Embed child artifact bodies in the generated prompt",
770
+ )
771
+ p_gen_prompt.add_argument("--output", "-o", help="Write prompt to file instead of stdout")
772
+
773
+ # parent-status
774
+ p_parent_status = subparsers.add_parser("parent-status", help="Show parent task-map orchestration status")
775
+ p_parent_status.add_argument("parent_dir", help="Parent task directory")
776
+
777
+ # review-child
778
+ p_review_child = subparsers.add_parser(
779
+ "review-child",
780
+ help="Review child handoff and optionally advance integration states",
781
+ )
782
+ p_review_child.add_argument("parent_dir", help="Parent task directory")
783
+ p_review_child.add_argument("child_dir", help="Child task directory")
784
+ p_review_child.add_argument("--check", action="store_true", help="Non-mutating review readiness check")
785
+ p_review_child.add_argument(
786
+ "--decision",
787
+ choices=["accept", "changes", "cancel", "integrate-through"],
788
+ help="Parent review decision (runs integrate-child steps when valid)",
789
+ )
790
+ p_review_child.add_argument("--ref", help="Child git ref for accept / integrate-through")
791
+ p_review_child.add_argument("--reason", help="Required for changes or cancel decisions")
792
+ p_review_child.add_argument("--notes", help="Short parent review notes included in the report")
793
+ p_review_child.add_argument(
794
+ "--write-artifact",
795
+ action="store_true",
796
+ help="Also write review-<child>.md under the parent task directory",
797
+ )
798
+ p_review_child.add_argument(
799
+ "--no-append-parent-verify",
800
+ action="store_true",
801
+ help="Do not append review notes to parent verify.md",
802
+ )
803
+
804
+ # list-archive
805
+ p_listarch = subparsers.add_parser("list-archive", help="List archived tasks")
806
+ p_listarch.add_argument("month", nargs="?", help="Month (YYYY-MM)")
807
+
808
+ args = parser.parse_args()
809
+
810
+ if not args.command:
811
+ show_usage()
812
+ return 1
813
+
814
+ commands = {
815
+ "create": cmd_create,
816
+ "add-context": cmd_add_context,
817
+ "validate": cmd_validate,
818
+ "list-context": cmd_list_context,
819
+ "dashboard": cmd_dashboard,
820
+ "select": cmd_select,
821
+ "selected": cmd_selected,
822
+ "start-execution": cmd_start_execution,
823
+ "record-gate": cmd_record_gate,
824
+ "exit": cmd_exit,
825
+ "set-branch": cmd_set_branch,
826
+ "set-base-branch": cmd_set_base_branch,
827
+ "set-scope": cmd_set_scope,
828
+ "archive": cmd_archive,
829
+ "prepare-archive-evidence": cmd_prepare_archive_evidence,
830
+ "prepare-learning-scaffold": cmd_prepare_learning_scaffold,
831
+ "add-subtask": cmd_add_subtask,
832
+ "remove-subtask": cmd_remove_subtask,
833
+ "prepare-child-worktree": cmd_prepare_child_worktree,
834
+ "set-child-state": cmd_set_child_state,
835
+ "integrate-child": cmd_integrate_child,
836
+ "generate-child-prompt": cmd_generate_child_prompt,
837
+ "parent-status": cmd_parent_status,
838
+ "review-child": cmd_review_child,
839
+ "list": cmd_list,
840
+ "list-archive": cmd_list_archive,
841
+ }
842
+
843
+ if args.command in commands:
844
+ return commands[args.command](args)
845
+ else:
846
+ show_usage()
847
+ return 1
848
+
849
+
850
+ if __name__ == "__main__":
851
+ sys.exit(main())