timsquad 3.5.0 → 3.7.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 (454) hide show
  1. package/README.ko.md +103 -107
  2. package/README.md +100 -104
  3. package/dist/commands/daemon.d.ts.map +1 -1
  4. package/dist/commands/daemon.js +48 -2
  5. package/dist/commands/daemon.js.map +1 -1
  6. package/dist/commands/init.js +46 -14
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/{upgrade.d.ts → update.d.ts} +3 -3
  9. package/dist/commands/update.d.ts.map +1 -0
  10. package/dist/commands/{upgrade.js → update.js} +12 -17
  11. package/dist/commands/update.js.map +1 -0
  12. package/dist/daemon/context-writer.d.ts +14 -0
  13. package/dist/daemon/context-writer.d.ts.map +1 -1
  14. package/dist/daemon/context-writer.js +29 -0
  15. package/dist/daemon/context-writer.js.map +1 -1
  16. package/dist/daemon/event-queue.d.ts +7 -11
  17. package/dist/daemon/event-queue.d.ts.map +1 -1
  18. package/dist/daemon/event-queue.js +78 -118
  19. package/dist/daemon/event-queue.js.map +1 -1
  20. package/dist/daemon/file-watcher.d.ts +14 -8
  21. package/dist/daemon/file-watcher.d.ts.map +1 -1
  22. package/dist/daemon/file-watcher.js +78 -41
  23. package/dist/daemon/file-watcher.js.map +1 -1
  24. package/dist/daemon/index.d.ts +1 -1
  25. package/dist/daemon/index.d.ts.map +1 -1
  26. package/dist/daemon/index.js +54 -47
  27. package/dist/daemon/index.js.map +1 -1
  28. package/dist/index.js +3 -41
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/agent-generator.d.ts.map +1 -1
  31. package/dist/lib/agent-generator.js +21 -10
  32. package/dist/lib/agent-generator.js.map +1 -1
  33. package/dist/lib/compile-rules.d.ts +2 -0
  34. package/dist/lib/compile-rules.d.ts.map +1 -1
  35. package/dist/lib/compile-rules.js +39 -4
  36. package/dist/lib/compile-rules.js.map +1 -1
  37. package/dist/lib/compiler.d.ts +22 -1
  38. package/dist/lib/compiler.d.ts.map +1 -1
  39. package/dist/lib/compiler.js +178 -12
  40. package/dist/lib/compiler.js.map +1 -1
  41. package/dist/lib/config.d.ts +3 -0
  42. package/dist/lib/config.d.ts.map +1 -1
  43. package/dist/lib/config.js +17 -2
  44. package/dist/lib/config.js.map +1 -1
  45. package/dist/{commands/log.d.ts → lib/log-utils.d.ts} +7 -15
  46. package/dist/lib/log-utils.d.ts.map +1 -0
  47. package/dist/lib/log-utils.js +347 -0
  48. package/dist/lib/log-utils.js.map +1 -0
  49. package/dist/lib/skill-generator.d.ts +1 -1
  50. package/dist/lib/skill-generator.d.ts.map +1 -1
  51. package/dist/lib/skill-generator.js +19 -44
  52. package/dist/lib/skill-generator.js.map +1 -1
  53. package/dist/lib/ssot-map.d.ts +31 -0
  54. package/dist/lib/ssot-map.d.ts.map +1 -0
  55. package/dist/lib/ssot-map.js +79 -0
  56. package/dist/lib/ssot-map.js.map +1 -0
  57. package/dist/lib/template.d.ts +10 -3
  58. package/dist/lib/template.d.ts.map +1 -1
  59. package/dist/lib/template.js +137 -22
  60. package/dist/lib/template.js.map +1 -1
  61. package/dist/lib/upgrade-backup.js +1 -1
  62. package/dist/lib/upgrade-backup.js.map +1 -1
  63. package/dist/lib/workflow-state.d.ts +1 -1
  64. package/dist/lib/workflow-state.d.ts.map +1 -1
  65. package/dist/lib/workflow-state.js +1 -1
  66. package/dist/lib/workflow-state.js.map +1 -1
  67. package/dist/types/config.d.ts +10 -1
  68. package/dist/types/config.d.ts.map +1 -1
  69. package/dist/types/config.js +46 -41
  70. package/dist/types/config.js.map +1 -1
  71. package/dist/types/feedback.d.ts +1 -54
  72. package/dist/types/feedback.d.ts.map +1 -1
  73. package/dist/types/feedback.js +1 -22
  74. package/dist/types/feedback.js.map +1 -1
  75. package/dist/types/index.d.ts +1 -0
  76. package/dist/types/index.d.ts.map +1 -1
  77. package/dist/types/index.js +1 -0
  78. package/dist/types/index.js.map +1 -1
  79. package/dist/types/meta-index.d.ts +8 -0
  80. package/dist/types/meta-index.d.ts.map +1 -1
  81. package/dist/types/project.d.ts +6 -1
  82. package/dist/types/project.d.ts.map +1 -1
  83. package/dist/types/project.js +15 -0
  84. package/dist/types/project.js.map +1 -1
  85. package/dist/types/ssot-map.d.ts +30 -0
  86. package/dist/types/ssot-map.d.ts.map +1 -0
  87. package/dist/types/ssot-map.js +6 -0
  88. package/dist/types/ssot-map.js.map +1 -0
  89. package/package.json +1 -1
  90. package/templates/base/agents/base/tsq-architect.md +1 -1
  91. package/templates/base/agents/base/tsq-dba.md +3 -1
  92. package/templates/base/agents/base/tsq-designer.md +3 -1
  93. package/templates/base/agents/base/tsq-developer.md +3 -1
  94. package/templates/base/agents/base/tsq-librarian.md +45 -0
  95. package/templates/base/agents/base/tsq-qa.md +3 -1
  96. package/templates/base/agents/base/tsq-security.md +3 -1
  97. package/templates/base/agents/overlays/platform/claude-code.md +2 -2
  98. package/templates/base/config.template.yaml +17 -28
  99. package/templates/base/knowledge/templates/task-result.md +5 -10
  100. package/templates/base/skills/_shared/naming-conventions.md +49 -0
  101. package/templates/base/skills/_template/SKILL.md +31 -17
  102. package/templates/base/skills/{architecture → tsq-architecture}/SKILL.md +2 -2
  103. package/templates/base/skills/tsq-audit/SKILL.md +74 -0
  104. package/templates/base/skills/{methodology/bdd → tsq-bdd}/SKILL.md +14 -9
  105. package/templates/base/skills/tsq-coding/SKILL.md +65 -0
  106. package/templates/base/skills/tsq-coding/rules/async-patterns.md +81 -0
  107. package/templates/base/skills/tsq-coding/rules/code-organization.md +80 -0
  108. package/templates/base/skills/tsq-coding/rules/error-handling.md +76 -0
  109. package/templates/base/skills/tsq-coding/rules/type-safety.md +85 -0
  110. package/templates/base/skills/tsq-controller/SKILL.md +81 -0
  111. package/templates/base/skills/tsq-controller/memory/.gitkeep +0 -0
  112. package/templates/base/skills/{mobile/dart → tsq-dart}/SKILL.md +5 -3
  113. package/templates/base/skills/{database → tsq-database}/SKILL.md +13 -27
  114. package/templates/base/skills/tsq-database/rules/query-optimization.md +32 -0
  115. package/templates/base/skills/tsq-database/rules/supabase-patterns.md +94 -0
  116. package/templates/base/skills/{methodology/ddd → tsq-ddd}/SKILL.md +15 -10
  117. package/templates/base/skills/{methodology/debugging → tsq-debugging}/SKILL.md +2 -2
  118. package/templates/base/skills/tsq-decompose/SKILL.md +117 -0
  119. package/templates/base/skills/tsq-delete/SKILL.md +72 -0
  120. package/templates/base/skills/{mobile/flutter → tsq-flutter}/SKILL.md +6 -3
  121. package/templates/base/skills/tsq-grill/SKILL.md +86 -0
  122. package/templates/base/skills/{backend/node → tsq-hono}/SKILL.md +6 -4
  123. package/templates/base/skills/tsq-librarian/SKILL.md +78 -0
  124. package/templates/base/skills/tsq-log/SKILL.md +30 -0
  125. package/templates/base/skills/{frontend/nextjs → tsq-nextjs}/SKILL.md +14 -9
  126. package/templates/base/skills/{planning → tsq-planning}/SKILL.md +2 -2
  127. package/templates/base/skills/{database/prisma → tsq-prisma}/SKILL.md +15 -9
  128. package/templates/base/skills/tsq-product-audit/SKILL.md +113 -0
  129. package/templates/base/skills/tsq-product-audit/checklists/01-security.md +86 -0
  130. package/templates/base/skills/tsq-product-audit/checklists/02-performance.md +67 -0
  131. package/templates/base/skills/tsq-product-audit/checklists/03-seo.md +46 -0
  132. package/templates/base/skills/tsq-product-audit/checklists/04-accessibility.md +66 -0
  133. package/templates/base/skills/tsq-product-audit/checklists/05-ui-ux.md +50 -0
  134. package/templates/base/skills/tsq-product-audit/checklists/06-architecture.md +53 -0
  135. package/templates/base/skills/tsq-product-audit/checklists/07-functional-requirements.md +55 -0
  136. package/templates/base/skills/tsq-product-audit/rules/audit-protocol.md +136 -0
  137. package/templates/base/skills/tsq-product-audit/rules/false-positive-guard.md +81 -0
  138. package/templates/base/skills/tsq-product-audit/rules/scoring-criteria.md +113 -0
  139. package/templates/base/skills/tsq-product-audit/templates/improvement-plan-template.md +60 -0
  140. package/templates/base/skills/tsq-product-audit/templates/report-template.md +88 -0
  141. package/templates/base/skills/tsq-prompt/SKILL.md +86 -0
  142. package/templates/base/skills/tsq-protocol/SKILL.md +101 -33
  143. package/templates/base/skills/{frontend/react → tsq-react}/SKILL.md +6 -3
  144. package/templates/base/skills/tsq-retro/SKILL.md +86 -0
  145. package/templates/base/skills/tsq-retro/references/feedback-guide.md +58 -0
  146. package/templates/base/skills/tsq-retro/references/improve-protocol.md +87 -0
  147. package/templates/base/skills/tsq-retro/references/improvement-template.md +26 -0
  148. package/templates/base/skills/tsq-security/SKILL.md +66 -0
  149. package/templates/base/skills/tsq-security/rules/auth-patterns.md +62 -0
  150. package/templates/base/skills/tsq-security/rules/dependency-security.md +69 -0
  151. package/templates/base/skills/tsq-security/rules/input-validation.md +68 -0
  152. package/templates/base/skills/tsq-security/rules/secrets-management.md +65 -0
  153. package/templates/base/skills/tsq-spec/SKILL.md +58 -0
  154. package/templates/base/skills/{stability-verification → tsq-stability}/SKILL.md +3 -3
  155. package/templates/base/skills/tsq-start/SKILL.md +90 -0
  156. package/templates/base/skills/tsq-start/references/onboarding-questions.md +177 -0
  157. package/templates/base/skills/tsq-status/SKILL.md +32 -0
  158. package/templates/base/skills/{methodology/tdd → tsq-tdd}/SKILL.md +12 -3
  159. package/templates/base/skills/tsq-testing/SKILL.md +69 -0
  160. package/templates/base/skills/tsq-testing/references/e2e-stability.md +33 -0
  161. package/templates/base/skills/{typescript → tsq-typescript}/SKILL.md +5 -11
  162. package/templates/base/skills/{ui-design → tsq-ui}/SKILL.md +2 -2
  163. package/templates/base/skills/tsq-update/SKILL.md +48 -0
  164. package/templates/base/timsquad/constraints/competency-framework.xml +2 -2
  165. package/templates/base/timsquad/constraints/ssot-schema.xml +2 -2
  166. package/templates/base/timsquad/process/phase-checklist.yaml +1 -1
  167. package/templates/base/timsquad/process/state-machine.xml +2 -2
  168. package/templates/base/timsquad/process/validation-rules.xml +8 -8
  169. package/templates/base/timsquad/process/workflow-base.xml +8 -8
  170. package/templates/base/timsquad/retrospective/cycle-report.template.md +2 -2
  171. package/templates/base/timsquad/retrospective/patterns/failure-patterns.md +1 -1
  172. package/templates/base/timsquad/retrospective/patterns/success-patterns.md +2 -2
  173. package/templates/base/timsquad/retrospective/retrospective-state.xml +2 -2
  174. package/templates/base/timsquad/ssot/audit-trail-spec.template.md +155 -0
  175. package/templates/base/timsquad/ssot/compliance-matrix.template.md +105 -0
  176. package/templates/base/timsquad/ssot/component-map.template.md +181 -0
  177. package/templates/base/timsquad/ssot/data-design.template.md +4 -4
  178. package/templates/base/timsquad/ssot/deployment-spec.template.md +29 -22
  179. package/templates/base/timsquad/ssot/env-config.template.md +4 -2
  180. package/templates/base/timsquad/ssot/error-codes.template.md +3 -3
  181. package/templates/base/timsquad/ssot/functional-spec.template.md +40 -3
  182. package/templates/base/timsquad/ssot/glossary.template.md +2 -2
  183. package/templates/base/timsquad/ssot/infra-topology.template.md +191 -0
  184. package/templates/base/timsquad/ssot/integration-spec.template.md +2 -2
  185. package/templates/base/timsquad/ssot/monitoring-spec.template.md +185 -0
  186. package/templates/base/timsquad/ssot/navigation-map.template.md +154 -0
  187. package/templates/base/timsquad/ssot/performance-budget.template.md +132 -0
  188. package/templates/base/timsquad/ssot/planning.template.md +3 -3
  189. package/templates/base/timsquad/ssot/prd/_template.md +73 -0
  190. package/templates/base/timsquad/ssot/prd.template.md +10 -21
  191. package/templates/base/timsquad/ssot/requirements.template.md +3 -3
  192. package/templates/base/timsquad/ssot/sdk-spec.template.md +223 -0
  193. package/templates/base/timsquad/ssot/service-spec.template.md +3 -3
  194. package/templates/base/timsquad/ssot/state-machine.template.md +127 -0
  195. package/templates/base/timsquad/ssot/test-spec.template.md +11 -1
  196. package/templates/base/timsquad/ssot/ui-ux-spec.template.md +43 -3
  197. package/templates/base/timsquad/ssot-map.template.yaml +69 -0
  198. package/templates/base/timsquad/state/workspace.xml +11 -11
  199. package/templates/platforms/claude-code/rules/adr-rules.md +1 -1
  200. package/templates/platforms/claude-code/rules/api-conventions.md +12 -0
  201. package/templates/platforms/claude-code/rules/build-gate.md +1 -1
  202. package/templates/platforms/claude-code/rules/completion-verification.md +0 -2
  203. package/templates/platforms/claude-code/rules/context-monitor.md +1 -1
  204. package/templates/platforms/claude-code/rules/feedback-routing.md +2 -2
  205. package/templates/platforms/claude-code/rules/librarian-constraints.md +11 -0
  206. package/templates/platforms/claude-code/rules/phase-management.md +2 -2
  207. package/templates/platforms/claude-code/rules/plan-review.md +2 -2
  208. package/templates/platforms/claude-code/rules/quality-guards.md +0 -2
  209. package/templates/platforms/claude-code/rules/sequence-management.md +15 -15
  210. package/templates/platforms/claude-code/rules/session-notes.md +1 -1
  211. package/templates/platforms/claude-code/rules/test-conventions.md +13 -0
  212. package/templates/platforms/claude-code/rules/workspace-sync.md +1 -1
  213. package/templates/platforms/claude-code/scripts/build-gate.sh +6 -1
  214. package/templates/platforms/claude-code/scripts/change-scope-guard.sh +110 -0
  215. package/templates/platforms/claude-code/scripts/check-capability.sh +68 -0
  216. package/templates/platforms/claude-code/scripts/completion-guard.sh +134 -14
  217. package/templates/platforms/claude-code/scripts/context-restore.sh +95 -0
  218. package/templates/platforms/claude-code/scripts/e2e-commit-gate.sh +70 -0
  219. package/templates/platforms/claude-code/scripts/e2e-marker.sh +51 -0
  220. package/templates/platforms/claude-code/scripts/phase-guard.sh +3 -6
  221. package/templates/platforms/claude-code/scripts/pre-compact.sh +70 -0
  222. package/templates/platforms/claude-code/scripts/safe-guard.sh +2 -5
  223. package/templates/platforms/claude-code/scripts/subagent-start.sh +11 -0
  224. package/templates/platforms/claude-code/scripts/subagent-stop.sh +11 -0
  225. package/templates/platforms/claude-code/settings.json +28 -56
  226. package/templates/project-types/api-backend/config.yaml +9 -5
  227. package/templates/project-types/api-backend/process/workflow.xml +2 -2
  228. package/templates/project-types/fintech/config.yaml +13 -19
  229. package/templates/project-types/fintech/ssot/audit-trail-spec.template.md +207 -0
  230. package/templates/project-types/fintech/ssot/compliance-matrix.template.md +187 -0
  231. package/templates/project-types/infra/config.yaml +7 -4
  232. package/templates/project-types/infra/process/workflow.xml +3 -3
  233. package/templates/project-types/mobile-app/config.yaml +8 -14
  234. package/templates/project-types/mobile-app/process/workflow.xml +4 -4
  235. package/templates/project-types/platform/config.yaml +8 -5
  236. package/templates/project-types/platform/process/workflow.xml +3 -3
  237. package/templates/project-types/web-app/config.yaml +9 -15
  238. package/templates/project-types/web-app/process/workflow.xml +6 -6
  239. package/templates/project-types/web-service/config.yaml +10 -19
  240. package/templates/project-types/web-service/process/workflow.xml +6 -6
  241. package/dist/commands/compile.d.ts +0 -3
  242. package/dist/commands/compile.d.ts.map +0 -1
  243. package/dist/commands/compile.js +0 -170
  244. package/dist/commands/compile.js.map +0 -1
  245. package/dist/commands/feedback.d.ts +0 -12
  246. package/dist/commands/feedback.d.ts.map +0 -1
  247. package/dist/commands/feedback.js +0 -382
  248. package/dist/commands/feedback.js.map +0 -1
  249. package/dist/commands/full.d.ts +0 -3
  250. package/dist/commands/full.d.ts.map +0 -1
  251. package/dist/commands/full.js +0 -88
  252. package/dist/commands/full.js.map +0 -1
  253. package/dist/commands/git/commit.d.ts +0 -3
  254. package/dist/commands/git/commit.d.ts.map +0 -1
  255. package/dist/commands/git/commit.js +0 -85
  256. package/dist/commands/git/commit.js.map +0 -1
  257. package/dist/commands/git/index.d.ts +0 -5
  258. package/dist/commands/git/index.d.ts.map +0 -1
  259. package/dist/commands/git/index.js +0 -5
  260. package/dist/commands/git/index.js.map +0 -1
  261. package/dist/commands/git/pr.d.ts +0 -3
  262. package/dist/commands/git/pr.d.ts.map +0 -1
  263. package/dist/commands/git/pr.js +0 -139
  264. package/dist/commands/git/pr.js.map +0 -1
  265. package/dist/commands/git/release.d.ts +0 -3
  266. package/dist/commands/git/release.d.ts.map +0 -1
  267. package/dist/commands/git/release.js +0 -153
  268. package/dist/commands/git/release.js.map +0 -1
  269. package/dist/commands/git/sync.d.ts +0 -3
  270. package/dist/commands/git/sync.d.ts.map +0 -1
  271. package/dist/commands/git/sync.js +0 -132
  272. package/dist/commands/git/sync.js.map +0 -1
  273. package/dist/commands/improve.d.ts +0 -3
  274. package/dist/commands/improve.d.ts.map +0 -1
  275. package/dist/commands/improve.js +0 -286
  276. package/dist/commands/improve.js.map +0 -1
  277. package/dist/commands/knowledge.d.ts +0 -3
  278. package/dist/commands/knowledge.d.ts.map +0 -1
  279. package/dist/commands/knowledge.js +0 -316
  280. package/dist/commands/knowledge.js.map +0 -1
  281. package/dist/commands/log.d.ts.map +0 -1
  282. package/dist/commands/log.js +0 -1436
  283. package/dist/commands/log.js.map +0 -1
  284. package/dist/commands/meta-index.d.ts +0 -3
  285. package/dist/commands/meta-index.d.ts.map +0 -1
  286. package/dist/commands/meta-index.js +0 -401
  287. package/dist/commands/meta-index.js.map +0 -1
  288. package/dist/commands/metrics.d.ts +0 -3
  289. package/dist/commands/metrics.d.ts.map +0 -1
  290. package/dist/commands/metrics.js +0 -843
  291. package/dist/commands/metrics.js.map +0 -1
  292. package/dist/commands/quick.d.ts +0 -3
  293. package/dist/commands/quick.d.ts.map +0 -1
  294. package/dist/commands/quick.js +0 -136
  295. package/dist/commands/quick.js.map +0 -1
  296. package/dist/commands/retro.d.ts +0 -3
  297. package/dist/commands/retro.d.ts.map +0 -1
  298. package/dist/commands/retro.js +0 -828
  299. package/dist/commands/retro.js.map +0 -1
  300. package/dist/commands/session.d.ts +0 -3
  301. package/dist/commands/session.d.ts.map +0 -1
  302. package/dist/commands/session.js +0 -346
  303. package/dist/commands/session.js.map +0 -1
  304. package/dist/commands/skills.d.ts +0 -12
  305. package/dist/commands/skills.d.ts.map +0 -1
  306. package/dist/commands/skills.js +0 -228
  307. package/dist/commands/skills.js.map +0 -1
  308. package/dist/commands/status.d.ts +0 -3
  309. package/dist/commands/status.d.ts.map +0 -1
  310. package/dist/commands/status.js +0 -127
  311. package/dist/commands/status.js.map +0 -1
  312. package/dist/commands/upgrade.d.ts.map +0 -1
  313. package/dist/commands/upgrade.js.map +0 -1
  314. package/dist/commands/watch.d.ts +0 -3
  315. package/dist/commands/watch.d.ts.map +0 -1
  316. package/dist/commands/watch.js +0 -213
  317. package/dist/commands/watch.js.map +0 -1
  318. package/dist/commands/workflow.d.ts +0 -3
  319. package/dist/commands/workflow.d.ts.map +0 -1
  320. package/dist/commands/workflow.js +0 -607
  321. package/dist/commands/workflow.js.map +0 -1
  322. package/templates/base/skills/coding/SKILL.md +0 -47
  323. package/templates/base/skills/controller/SKILL.md +0 -111
  324. package/templates/base/skills/prompt-engineering/SKILL.md +0 -103
  325. package/templates/base/skills/retrospective/SKILL.md +0 -102
  326. package/templates/base/skills/security/SKILL.md +0 -55
  327. package/templates/base/skills/testing/SKILL.md +0 -63
  328. package/templates/base/timsquad/feedback/feedback-router.sh +0 -341
  329. package/templates/base/timsquad/feedback/routing-rules.yaml +0 -352
  330. package/templates/platforms/claude-code/CLAUDE.md.template +0 -89
  331. package/templates/platforms/claude-code/rules/skill-suggest.md +0 -27
  332. package/templates/platforms/claude-code/scripts/skill-rules.json +0 -85
  333. package/templates/platforms/claude-code/scripts/skill-suggest.sh +0 -105
  334. /package/templates/base/skills/{architecture → tsq-architecture}/references/adr-template.md +0 -0
  335. /package/templates/base/skills/{architecture → tsq-architecture}/references/api-design.md +0 -0
  336. /package/templates/base/skills/{methodology/bdd → tsq-bdd}/rules/gherkin-patterns.md +0 -0
  337. /package/templates/base/skills/{coding → tsq-coding}/rules/patterns.md +0 -0
  338. /package/templates/base/skills/{controller → tsq-controller}/references/README.md +0 -0
  339. /package/templates/base/skills/{controller → tsq-controller}/rules/README.md +0 -0
  340. /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/async-patterns.md +0 -0
  341. /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/code-style.md +0 -0
  342. /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/null-safety.md +0 -0
  343. /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/type-system.md +0 -0
  344. /package/templates/base/skills/{methodology/ddd → tsq-ddd}/rules/strategic-patterns.md +0 -0
  345. /package/templates/base/skills/{methodology/debugging → tsq-debugging}/references/root-cause-tracing.md +0 -0
  346. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/SKILL.md +0 -0
  347. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/references/ci-cd-pipeline.md +0 -0
  348. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/code-signing.md +0 -0
  349. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/codemagic-setup.md +0 -0
  350. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/fastlane-setup.md +0 -0
  351. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/github-actions.md +0 -0
  352. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/store-deployment.md +0 -0
  353. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/versioning.md +0 -0
  354. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/SKILL.md +0 -0
  355. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/references/i18n-architecture.md +0 -0
  356. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/arb-files.md +0 -0
  357. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/locale-switching.md +0 -0
  358. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/localization-setup.md +0 -0
  359. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/plural-gender.md +0 -0
  360. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/text-direction.md +0 -0
  361. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/SKILL.md +0 -0
  362. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/references/monitoring-architecture.md +0 -0
  363. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/analytics.md +0 -0
  364. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/crashlytics-setup.md +0 -0
  365. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/logging.md +0 -0
  366. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/performance-monitoring.md +0 -0
  367. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/sentry-integration.md +0 -0
  368. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/SKILL.md +0 -0
  369. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/references/api-client-architecture.md +0 -0
  370. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/caching.md +0 -0
  371. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/connectivity.md +0 -0
  372. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/dio-setup.md +0 -0
  373. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/error-handling.md +0 -0
  374. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/interceptors.md +0 -0
  375. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/retrofit-patterns.md +0 -0
  376. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/SKILL.md +0 -0
  377. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/references/notification-architecture.md +0 -0
  378. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/references/platform-setup.md +0 -0
  379. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/background-processing.md +0 -0
  380. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/deep-linking.md +0 -0
  381. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/fcm-setup.md +0 -0
  382. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/local-notifications.md +0 -0
  383. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/notification-handling.md +0 -0
  384. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/notification-permissions.md +0 -0
  385. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/rich-notifications.md +0 -0
  386. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/references/freezed-patterns.md +0 -0
  387. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/references/project-structure.md +0 -0
  388. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/animations.md +0 -0
  389. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/architecture.md +0 -0
  390. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/navigation-routing.md +0 -0
  391. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/performance.md +0 -0
  392. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/platform-adaptive.md +0 -0
  393. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/state-management.md +0 -0
  394. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/testing.md +0 -0
  395. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/widget-conventions.md +0 -0
  396. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/SKILL.md +0 -0
  397. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/references/mobile-security-checklist.md +0 -0
  398. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/api-key-protection.md +0 -0
  399. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/authentication.md +0 -0
  400. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/data-protection.md +0 -0
  401. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/obfuscation.md +0 -0
  402. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/secure-storage.md +0 -0
  403. /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/ssl-pinning.md +0 -0
  404. /package/templates/base/skills/{backend/node → tsq-hono}/rules/async-patterns.md +0 -0
  405. /package/templates/base/skills/{backend/node → tsq-hono}/rules/deployment.md +0 -0
  406. /package/templates/base/skills/{backend/node → tsq-hono}/rules/env-config.md +0 -0
  407. /package/templates/base/skills/{backend/node → tsq-hono}/rules/error-handling.md +0 -0
  408. /package/templates/base/skills/{backend/node → tsq-hono}/rules/hono-app-setup.md +0 -0
  409. /package/templates/base/skills/{backend/node → tsq-hono}/rules/jwt-auth.md +0 -0
  410. /package/templates/base/skills/{backend/node → tsq-hono}/rules/middleware.md +0 -0
  411. /package/templates/base/skills/{backend/node → tsq-hono}/rules/testing.md +0 -0
  412. /package/templates/base/skills/{frontend/nextjs → tsq-nextjs}/rules/app-router.md +0 -0
  413. /package/templates/base/skills/{planning → tsq-planning}/references/prd-guide.md +0 -0
  414. /package/templates/base/skills/{planning → tsq-planning}/references/requirements-guide.md +0 -0
  415. /package/templates/base/skills/{database/prisma → tsq-prisma}/rules/queries.md +0 -0
  416. /package/templates/base/skills/{database/prisma → tsq-prisma}/rules/schema-design.md +0 -0
  417. /package/templates/base/skills/{frontend/react → tsq-react}/rules/_sections.md +0 -0
  418. /package/templates/base/skills/{frontend/react → tsq-react}/rules/anti-patterns.md +0 -0
  419. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-api-routes.md +0 -0
  420. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-defer-await.md +0 -0
  421. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-dependencies.md +0 -0
  422. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-parallel.md +0 -0
  423. /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-suspense-boundaries.md +0 -0
  424. /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-barrel-imports.md +0 -0
  425. /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-defer-third-party.md +0 -0
  426. /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-dynamic-imports.md +0 -0
  427. /package/templates/base/skills/{frontend/react → tsq-react}/rules/component-conventions.md +0 -0
  428. /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-combine-iterations.md +0 -0
  429. /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-early-exit.md +0 -0
  430. /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-index-maps.md +0 -0
  431. /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-set-map-lookups.md +0 -0
  432. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-conditional-render.md +0 -0
  433. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-content-visibility.md +0 -0
  434. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-hoist-jsx.md +0 -0
  435. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-defer-reads.md +0 -0
  436. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-derived-state.md +0 -0
  437. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-memo.md +0 -0
  438. /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-transitions.md +0 -0
  439. /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-after-nonblocking.md +0 -0
  440. /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-cache-react.md +0 -0
  441. /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-parallel-fetching.md +0 -0
  442. /package/templates/base/skills/{frontend/react → tsq-react}/rules/state-location.md +0 -0
  443. /package/templates/base/skills/{security → tsq-security}/rules/owasp-examples.md +0 -0
  444. /package/templates/base/skills/{security → tsq-security}/scripts/check-secrets.sh +0 -0
  445. /package/templates/base/skills/{stability-verification → tsq-stability}/references/release-checklist.md +0 -0
  446. /package/templates/base/skills/{stability-verification → tsq-stability}/references/security-fix-patterns.md +0 -0
  447. /package/templates/base/skills/{stability-verification → tsq-stability}/rules/verification-layers.md +0 -0
  448. /package/templates/base/skills/{stability-verification → tsq-stability}/rules/verification-workflow.md +0 -0
  449. /package/templates/base/skills/{stability-verification → tsq-stability}/scripts/verify.sh +0 -0
  450. /package/templates/base/skills/{methodology/tdd → tsq-tdd}/rules/real-world-example.md +0 -0
  451. /package/templates/base/skills/{methodology/tdd → tsq-tdd}/rules/techniques.md +0 -0
  452. /package/templates/base/skills/{testing → tsq-testing}/references/testing-patterns.md +0 -0
  453. /package/templates/base/skills/{typescript → tsq-typescript}/rules/type-patterns.md +0 -0
  454. /package/templates/base/skills/{typescript → tsq-typescript}/rules/utility-types.md +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerWorkflowCommand(program: Command): void;
3
- //# sourceMappingURL=workflow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiH9D"}
@@ -1,607 +0,0 @@
1
- import path from 'path';
2
- import fs from 'fs-extra';
3
- import { colors, printHeader, printError, printSuccess, printKeyValue } from '../utils/colors.js';
4
- import { findProjectRoot } from '../lib/project.js';
5
- import { getTimestamp } from '../utils/date.js';
6
- import { loadWorkflowState, saveWorkflowState, isSequenceComplete, findSequenceForAgent, } from '../lib/workflow-state.js';
7
- import { getSequencesDir, getPhasesDir, buildSequenceLogData, buildPhaseGateData, loadSequenceTaskLogs, hasSemantic, } from './log.js';
8
- import { queryDaemon } from '../daemon/meta-cache.js';
9
- import { writeContext } from '../daemon/context-writer.js';
10
- const LOG_SCHEMA_VERSION = '1.0.0';
11
- export function registerWorkflowCommand(program) {
12
- const wfCmd = program
13
- .command('workflow')
14
- .alias('wf')
15
- .description('Manage automated workflow (sequences, phases, automation toggles)');
16
- // tsq workflow set-phase <phase-id>
17
- wfCmd
18
- .command('set-phase <phase-id>')
19
- .description('Set the current active phase')
20
- .action(async (phaseId) => {
21
- try {
22
- await setPhase(phaseId);
23
- }
24
- catch (error) {
25
- printError(error.message);
26
- process.exit(1);
27
- }
28
- });
29
- // tsq workflow add-sequence <seq-id>
30
- wfCmd
31
- .command('add-sequence <seq-id>')
32
- .description('Register a sequence for workflow tracking')
33
- .requiredOption('--agents <list>', 'Comma-separated expected agent types (e.g. developer,dba)')
34
- .option('--phase <id>', 'Phase ID (defaults to current phase)')
35
- .action(async (seqId, options) => {
36
- try {
37
- await addSequence(seqId, options);
38
- }
39
- catch (error) {
40
- printError(error.message);
41
- process.exit(1);
42
- }
43
- });
44
- // tsq workflow remove-sequence <seq-id>
45
- wfCmd
46
- .command('remove-sequence <seq-id>')
47
- .description('Remove a sequence from tracking')
48
- .action(async (seqId) => {
49
- try {
50
- await removeSequence(seqId);
51
- }
52
- catch (error) {
53
- printError(error.message);
54
- process.exit(1);
55
- }
56
- });
57
- // tsq workflow status
58
- wfCmd
59
- .command('status')
60
- .description('Show workflow state and automation status')
61
- .action(async () => {
62
- try {
63
- await showStatus();
64
- }
65
- catch (error) {
66
- printError(error.message);
67
- process.exit(1);
68
- }
69
- });
70
- // tsq workflow config <key> <value>
71
- wfCmd
72
- .command('config <key> <value>')
73
- .description('Toggle automation settings (e.g. sequence_log on/off)')
74
- .action(async (key, value) => {
75
- try {
76
- await setConfig(key, value);
77
- }
78
- catch (error) {
79
- printError(error.message);
80
- process.exit(1);
81
- }
82
- });
83
- // tsq task start --agent <agent> --scope <paths>
84
- wfCmd
85
- .command('task-start')
86
- .description('Prepare task context for a sub-agent (creates task-context.json)')
87
- .requiredOption('--agent <type>', 'Agent type (developer, qa, dba, etc.)')
88
- .option('--scope <paths>', 'Comma-separated scope paths (e.g. "src/auth,src/models")')
89
- .action(async (options) => {
90
- try {
91
- await taskStart(options);
92
- }
93
- catch (error) {
94
- printError(error.message);
95
- process.exit(1);
96
- }
97
- });
98
- // tsq workflow track-task <agent> <task-log-path> (internal — called by hook)
99
- wfCmd
100
- .command('track-task <agent> <task-log-path>')
101
- .description('(internal) Track a completed task in workflow state')
102
- .action(async (agent, taskLogPath) => {
103
- try {
104
- await trackTask(agent, taskLogPath);
105
- }
106
- catch {
107
- // Silent fail for hook usage — don't break the hook chain
108
- process.exit(0);
109
- }
110
- });
111
- // tsq workflow check (internal — called by hook on SessionEnd)
112
- wfCmd
113
- .command('check')
114
- .description('(internal) Check workflow state and auto-create L2/L3/gate/retro')
115
- .action(async () => {
116
- try {
117
- await checkAndAutomate();
118
- }
119
- catch {
120
- // Silent fail for hook usage
121
- process.exit(0);
122
- }
123
- });
124
- }
125
- // ============================================================
126
- // Commands
127
- // ============================================================
128
- async function setPhase(phaseId) {
129
- const projectRoot = await findProjectRoot();
130
- if (!projectRoot)
131
- throw new Error('Not a TimSquad project');
132
- const state = await loadWorkflowState(projectRoot);
133
- // Archive current phase if exists
134
- if (state.current_phase && state.current_phase.id !== phaseId) {
135
- state.completed_phases.push(state.current_phase.id);
136
- }
137
- state.current_phase = {
138
- id: phaseId,
139
- started_at: getTimestamp(),
140
- sequences: [],
141
- };
142
- await saveWorkflowState(projectRoot, state);
143
- printSuccess(`Phase set: ${phaseId}`);
144
- printKeyValue('Automation', formatAutomation(state.automation));
145
- }
146
- async function addSequence(seqId, options) {
147
- const projectRoot = await findProjectRoot();
148
- if (!projectRoot)
149
- throw new Error('Not a TimSquad project');
150
- const state = await loadWorkflowState(projectRoot);
151
- const phaseId = options.phase || state.current_phase?.id;
152
- if (!phaseId) {
153
- throw new Error('No active phase. Run `tsq workflow set-phase <phase-id>` first.');
154
- }
155
- if (state.sequences[seqId]) {
156
- throw new Error(`Sequence ${seqId} already exists. Remove it first to re-add.`);
157
- }
158
- const agents = options.agents.split(',').map(a => a.trim());
159
- state.sequences[seqId] = {
160
- status: 'pending',
161
- phase: phaseId,
162
- expected_agents: agents,
163
- completed_tasks: [],
164
- report_path: null,
165
- l2_created: false,
166
- };
167
- // Add to current phase's sequence list
168
- if (state.current_phase && !state.current_phase.sequences.includes(seqId)) {
169
- state.current_phase.sequences.push(seqId);
170
- }
171
- await saveWorkflowState(projectRoot, state);
172
- printSuccess(`Sequence added: ${seqId}`);
173
- printKeyValue('Phase', phaseId);
174
- printKeyValue('Expected agents', agents.join(', '));
175
- }
176
- async function removeSequence(seqId) {
177
- const projectRoot = await findProjectRoot();
178
- if (!projectRoot)
179
- throw new Error('Not a TimSquad project');
180
- const state = await loadWorkflowState(projectRoot);
181
- if (!state.sequences[seqId]) {
182
- throw new Error(`Sequence ${seqId} not found`);
183
- }
184
- delete state.sequences[seqId];
185
- if (state.current_phase) {
186
- state.current_phase.sequences = state.current_phase.sequences.filter(s => s !== seqId);
187
- }
188
- await saveWorkflowState(projectRoot, state);
189
- printSuccess(`Sequence removed: ${seqId}`);
190
- }
191
- async function showStatus() {
192
- const projectRoot = await findProjectRoot();
193
- if (!projectRoot)
194
- throw new Error('Not a TimSquad project');
195
- const state = await loadWorkflowState(projectRoot);
196
- printHeader('Workflow Status');
197
- // Automation toggles
198
- console.log(colors.subheader(' Automation'));
199
- for (const [key, val] of Object.entries(state.automation)) {
200
- const icon = val ? colors.success('ON') : colors.dim('OFF');
201
- console.log(` ${key.padEnd(16)} ${icon}`);
202
- }
203
- // Current phase
204
- console.log(colors.subheader('\n Phase'));
205
- if (state.current_phase) {
206
- printKeyValue(' Current', state.current_phase.id);
207
- printKeyValue(' Started', state.current_phase.started_at);
208
- printKeyValue(' Sequences', state.current_phase.sequences.join(', ') || '(none)');
209
- }
210
- else {
211
- console.log(colors.dim(' No active phase. Run `tsq wf set-phase <id>`'));
212
- }
213
- // Sequences
214
- const seqEntries = Object.entries(state.sequences);
215
- if (seqEntries.length > 0) {
216
- console.log(colors.subheader('\n Sequences'));
217
- for (const [seqId, seq] of seqEntries) {
218
- const statusIcon = seq.status === 'completed'
219
- ? colors.success('✓')
220
- : seq.status === 'in_progress'
221
- ? colors.warning('▸')
222
- : colors.dim('○');
223
- const l2Icon = seq.l2_created ? colors.success('[L2]') : colors.dim('[--]');
224
- const completedAgents = seq.completed_tasks.map(t => t.agent);
225
- const remaining = seq.expected_agents.filter(a => !completedAgents.includes(a));
226
- console.log(` ${statusIcon} ${colors.agent(seqId)} ${l2Icon} ${colors.dim(`[${seq.phase}]`)}`);
227
- console.log(` agents: ${seq.expected_agents.map(a => completedAgents.includes(a) ? colors.success(a) : colors.dim(a)).join(', ')}`);
228
- if (remaining.length > 0 && seq.status !== 'completed') {
229
- console.log(` ${colors.dim(`waiting: ${remaining.join(', ')}`)}`);
230
- }
231
- }
232
- }
233
- // Completed phases
234
- if (state.completed_phases.length > 0) {
235
- console.log(colors.subheader('\n Completed Phases'));
236
- console.log(` ${state.completed_phases.join(', ')}`);
237
- }
238
- }
239
- async function setConfig(key, value) {
240
- const projectRoot = await findProjectRoot();
241
- if (!projectRoot)
242
- throw new Error('Not a TimSquad project');
243
- const state = await loadWorkflowState(projectRoot);
244
- const validKeys = Object.keys(state.automation);
245
- if (!validKeys.includes(key)) {
246
- throw new Error(`Invalid key: ${key}. Valid: ${validKeys.join(', ')}`);
247
- }
248
- const boolVal = value === 'on' || value === 'true' || value === '1';
249
- state.automation[key] = boolVal;
250
- await saveWorkflowState(projectRoot, state);
251
- printSuccess(`${key} = ${boolVal ? 'ON' : 'OFF'}`);
252
- }
253
- // ============================================================
254
- // Internal: Called by hooks
255
- // ============================================================
256
- /**
257
- * Prepare task context for a sub-agent.
258
- * Queries daemon IPC (or disk fallback) for scope data and writes task-context.json.
259
- */
260
- async function taskStart(options) {
261
- const projectRoot = await findProjectRoot();
262
- if (!projectRoot)
263
- throw new Error('Not a TimSquad project');
264
- const scopePaths = options.scope?.split(',').map(s => s.trim()) || [];
265
- if (scopePaths.length === 0) {
266
- printSuccess(`Task started for ${options.agent} (no scope filter)`);
267
- return;
268
- }
269
- // 데몬 IPC로 scope 쿼리
270
- let scopedData = null;
271
- try {
272
- const response = await queryDaemon(projectRoot, 'scope', { paths: scopePaths });
273
- scopedData = response.context;
274
- }
275
- catch {
276
- // 데몬 미실행 — fallback으로 MetaCache 사용
277
- const { MetaCache } = await import('../daemon/meta-cache.js');
278
- const cache = new MetaCache(projectRoot);
279
- await cache.load();
280
- scopedData = cache.filterByScope(scopePaths);
281
- }
282
- if (scopedData && Object.keys(scopedData.files).length > 0) {
283
- const ctxPath = await writeContext(projectRoot, options.agent, scopedData);
284
- printSuccess(`Task context created for ${options.agent}`);
285
- printKeyValue(' Context', ctxPath);
286
- printKeyValue(' Files', String(Object.keys(scopedData.files).length));
287
- }
288
- else {
289
- console.log(colors.dim(` No files matched scope: ${scopePaths.join(', ')}`));
290
- }
291
- }
292
- /**
293
- * Track a completed task in workflow state.
294
- * Called by SubagentStop hook: tsq workflow track-task <agent> <task-log-path>
295
- */
296
- async function trackTask(agent, taskLogPath) {
297
- const projectRoot = await findProjectRoot();
298
- if (!projectRoot)
299
- return;
300
- const state = await loadWorkflowState(projectRoot);
301
- // Find matching sequence
302
- const seqId = findSequenceForAgent(state, agent);
303
- if (!seqId)
304
- return; // No match or ambiguous — skip silently
305
- const seq = state.sequences[seqId];
306
- seq.completed_tasks.push({
307
- agent,
308
- task_log: taskLogPath,
309
- completed_at: getTimestamp(),
310
- });
311
- // Update status
312
- if (seq.status === 'pending') {
313
- seq.status = 'in_progress';
314
- }
315
- if (isSequenceComplete(seq)) {
316
- seq.status = 'completed';
317
- }
318
- await saveWorkflowState(projectRoot, state);
319
- }
320
- /**
321
- * Check workflow state and auto-create L2/L3/gate/retro.
322
- * Called by SessionEnd hook: tsq workflow check
323
- */
324
- async function checkAndAutomate() {
325
- const projectRoot = await findProjectRoot();
326
- if (!projectRoot)
327
- return;
328
- const state = await loadWorkflowState(projectRoot);
329
- let stateChanged = false;
330
- // 1. Auto-create L2 for completed sequences
331
- if (state.automation.sequence_log) {
332
- for (const [seqId, seq] of Object.entries(state.sequences)) {
333
- if (seq.status === 'completed' && !seq.l2_created) {
334
- try {
335
- const entry = await buildSequenceLogData(projectRoot, seqId, {
336
- phase: seq.phase,
337
- report: seq.report_path || `(auto) no report`,
338
- verdict: 'proceed',
339
- });
340
- const seqDir = getSequencesDir(projectRoot);
341
- await fs.ensureDir(seqDir);
342
- await fs.writeJson(path.join(seqDir, `${seqId}.json`), entry, { spaces: 2 });
343
- seq.l2_created = true;
344
- stateChanged = true;
345
- // Log the automation
346
- await appendWorkflowLog(projectRoot, `[AUTO] L2 sequence log created: ${seqId}`);
347
- }
348
- catch { /* skip on error */ }
349
- }
350
- }
351
- }
352
- // 2. Check if all sequences in current phase are completed
353
- if (state.current_phase && (state.automation.phase_log || state.automation.phase_gate)) {
354
- const phaseSeqs = state.current_phase.sequences;
355
- const allCompleted = phaseSeqs.length > 0 && phaseSeqs.every(id => {
356
- const seq = state.sequences[id];
357
- return seq && seq.status === 'completed' && seq.l2_created;
358
- });
359
- if (allCompleted) {
360
- const phaseId = state.current_phase.id;
361
- // 2a. Auto phase gate
362
- if (state.automation.phase_gate) {
363
- try {
364
- const gateResult = await buildPhaseGateData(projectRoot, phaseId);
365
- await appendWorkflowLog(projectRoot, `[AUTO] Phase gate ${phaseId}: ${gateResult.can_transition ? 'PASSED' : 'BLOCKED'}`);
366
- }
367
- catch { /* skip */ }
368
- }
369
- // 2b. Auto create L3 phase log
370
- if (state.automation.phase_log) {
371
- const phaseDir = getPhasesDir(projectRoot);
372
- const phaseLogPath = path.join(phaseDir, `${phaseId}.json`);
373
- if (!await fs.pathExists(phaseLogPath)) {
374
- try {
375
- const phaseLog = await buildPhaseLogData(projectRoot, phaseId, phaseSeqs);
376
- await fs.ensureDir(phaseDir);
377
- await fs.writeJson(phaseLogPath, phaseLog, { spaces: 2 });
378
- await appendWorkflowLog(projectRoot, `[AUTO] L3 phase log created: ${phaseId}`);
379
- stateChanged = true;
380
- }
381
- catch { /* skip */ }
382
- }
383
- }
384
- // 2c. Auto retro (basic KPT collection)
385
- if (state.automation.retro) {
386
- try {
387
- await autoRetro(projectRoot, phaseId, phaseSeqs, state);
388
- await appendWorkflowLog(projectRoot, `[AUTO] Retro generated: ${phaseId}`);
389
- }
390
- catch { /* skip */ }
391
- }
392
- }
393
- }
394
- // 3. Auto metrics (already handled by auto-metrics.sh, but log)
395
- if (state.automation.metrics) {
396
- // auto-metrics.sh handles this — no-op here
397
- }
398
- // 4. Pending feedback cleanup
399
- if (state.automation.feedback) {
400
- const feedbackDir = path.join(projectRoot, '.timsquad', 'feedback');
401
- const cleanedPending = [];
402
- for (const fbId of state.pending_feedback || []) {
403
- const fbPath = path.join(feedbackDir, `${fbId}.json`);
404
- if (await fs.pathExists(fbPath)) {
405
- try {
406
- const fb = await fs.readJson(fbPath);
407
- if (fb.status === 'open' || fb.status === 'in_review') {
408
- cleanedPending.push(fbId);
409
- }
410
- }
411
- catch { /* skip */ }
412
- }
413
- }
414
- if (cleanedPending.length !== (state.pending_feedback || []).length) {
415
- state.pending_feedback = cleanedPending;
416
- stateChanged = true;
417
- }
418
- if (cleanedPending.length > 0) {
419
- await appendWorkflowLog(projectRoot, `[AUTO] ${cleanedPending.length} pending feedback(s) blocking phase gate`);
420
- }
421
- }
422
- if (stateChanged) {
423
- await saveWorkflowState(projectRoot, state);
424
- }
425
- }
426
- // ============================================================
427
- // Internal helpers
428
- // ============================================================
429
- async function buildPhaseLogData(projectRoot, phaseId, seqIds) {
430
- const seqDir = getSequencesDir(projectRoot);
431
- const now = getTimestamp();
432
- const seqLogs = [];
433
- let completed = 0, blocked = 0;
434
- for (const id of seqIds) {
435
- const seqPath = path.join(seqDir, `${id}.json`);
436
- if (await fs.pathExists(seqPath)) {
437
- const data = await fs.readJson(seqPath);
438
- seqLogs.push(data);
439
- if (data.execution.status === 'completed')
440
- completed++;
441
- else
442
- blocked++;
443
- }
444
- else {
445
- blocked++;
446
- }
447
- }
448
- let totalTasks = 0, totalSuccess = 0, totalRework = 0, totalFiles = 0;
449
- let totalIssues1 = 0, totalIssues2 = 0, totalIssues3 = 0;
450
- const durations = [];
451
- for (const seq of seqLogs) {
452
- totalTasks += seq.tasks.total;
453
- totalSuccess += seq.tasks.success;
454
- totalRework += seq.tasks.rework;
455
- durations.push(seq.execution.duration_ms);
456
- for (const axis of Object.values(seq.analysis)) {
457
- const r = axis;
458
- for (const issue of r.issues || []) {
459
- if (issue.level === 1)
460
- totalIssues1++;
461
- else if (issue.level === 2)
462
- totalIssues2++;
463
- else
464
- totalIssues3++;
465
- }
466
- }
467
- }
468
- for (const seqId of seqIds) {
469
- const taskLogs = await loadSequenceTaskLogs(projectRoot, seqId);
470
- for (const { data } of taskLogs) {
471
- totalFiles += data.mechanical?.files?.length || 0;
472
- }
473
- }
474
- const timestamps = seqLogs
475
- .map(s => [new Date(s.execution.started_at).getTime(), new Date(s.execution.completed_at).getTime()])
476
- .flat()
477
- .filter(t => t > 0);
478
- const leadTime = timestamps.length >= 2 ? Math.max(...timestamps) - Math.min(...timestamps) : 0;
479
- return {
480
- schema_version: LOG_SCHEMA_VERSION,
481
- trace: { phase_id: phaseId },
482
- execution: {
483
- status: blocked > 0 ? 'aborted' : 'completed',
484
- started_at: seqLogs[0]?.execution.started_at || now,
485
- completed_at: now,
486
- duration_ms: leadTime,
487
- sessions_count: seqLogs.length,
488
- },
489
- sequences: { total: seqIds.length, completed, blocked, ids: seqIds },
490
- aggregate_metrics: {
491
- total_tasks: totalTasks,
492
- task_success_rate: totalTasks > 0 ? totalSuccess / totalTasks : 0,
493
- task_rework_rate: totalTasks > 0 ? totalRework / totalTasks : 0,
494
- total_files_changed: totalFiles,
495
- total_issues: { level_1: totalIssues1, level_2: totalIssues2, level_3: totalIssues3 },
496
- ssot_conformance_rate: 0,
497
- mean_sequence_duration_ms: durations.length > 0 ? durations.reduce((a, b) => a + b, 0) / durations.length : 0,
498
- },
499
- dora_derived: {
500
- lead_time_ms: leadTime,
501
- change_failure_rate: totalTasks > 0 ? (totalTasks - totalSuccess) / totalTasks : 0,
502
- mean_recovery_time_ms: null,
503
- },
504
- planning: {
505
- original_sequences: seqIds,
506
- added_sequences: [],
507
- removed_sequences: [],
508
- scope_changes: [],
509
- plan_adherence_rate: 1,
510
- },
511
- retrospective: { keep: [], problem: [], try: [] },
512
- knowledge_extracted: [],
513
- };
514
- }
515
- /**
516
- * Auto-generate a basic retrospective from task/sequence data
517
- */
518
- async function autoRetro(projectRoot, phaseId, seqIds, state) {
519
- const retroDir = path.join(projectRoot, '.timsquad', 'retrospective', 'cycles');
520
- await fs.ensureDir(retroDir);
521
- const retroPath = path.join(retroDir, `${phaseId}-auto.md`);
522
- if (await fs.pathExists(retroPath))
523
- return; // Already exists
524
- const keep = [];
525
- const problem = [];
526
- const tryItems = [];
527
- // Analyze task logs for patterns
528
- let totalTasks = 0, tasksWithSemantic = 0, totalRework = 0;
529
- for (const seqId of seqIds) {
530
- const taskLogs = await loadSequenceTaskLogs(projectRoot, seqId);
531
- for (const { data } of taskLogs) {
532
- totalTasks++;
533
- if (hasSemantic(data.semantic))
534
- tasksWithSemantic++;
535
- if (data.semantic?.issues?.length) {
536
- for (const issue of data.semantic.issues) {
537
- if (issue.level >= 2) {
538
- problem.push(`[${seqId}] ${issue.description}`);
539
- }
540
- }
541
- }
542
- }
543
- const seq = state.sequences[seqId];
544
- if (seq) {
545
- const reworkCount = seq.completed_tasks.length - seq.expected_agents.length;
546
- if (reworkCount > 0)
547
- totalRework += reworkCount;
548
- }
549
- }
550
- // Generate observations
551
- const semanticCoverage = totalTasks > 0 ? Math.round((tasksWithSemantic / totalTasks) * 100) : 0;
552
- if (semanticCoverage >= 80) {
553
- keep.push(`Semantic coverage ${semanticCoverage}% — good documentation discipline`);
554
- }
555
- else if (semanticCoverage < 50) {
556
- problem.push(`Semantic coverage ${semanticCoverage}% — agents not consistently enriching logs`);
557
- tryItems.push('Enforce tsq log enrich in agent protocols');
558
- }
559
- if (totalRework === 0) {
560
- keep.push('No rework detected — first-pass quality was high');
561
- }
562
- else {
563
- problem.push(`${totalRework} rework tasks detected`);
564
- tryItems.push('Review SSOT alignment before implementation starts');
565
- }
566
- if (seqIds.length > 0) {
567
- keep.push(`${seqIds.length} sequences completed in phase ${phaseId}`);
568
- }
569
- // Write retro markdown
570
- const content = `# Retrospective: ${phaseId} (Auto-generated)
571
-
572
- > Generated at ${getTimestamp()} by tsq workflow check
573
-
574
- ## Keep
575
- ${keep.map(k => `- ${k}`).join('\n') || '- (none detected)'}
576
-
577
- ## Problem
578
- ${problem.map(p => `- ${p}`).join('\n') || '- (none detected)'}
579
-
580
- ## Try
581
- ${tryItems.map(t => `- ${t}`).join('\n') || '- (no suggestions)'}
582
-
583
- ---
584
-
585
- ## Metrics
586
- - Total tasks: ${totalTasks}
587
- - Semantic coverage: ${semanticCoverage}%
588
- - Rework tasks: ${totalRework}
589
- - Sequences: ${seqIds.join(', ')}
590
- `;
591
- await fs.writeFile(retroPath, content, 'utf-8');
592
- }
593
- /**
594
- * Append to workflow automation log (for debugging/auditing)
595
- */
596
- async function appendWorkflowLog(projectRoot, message) {
597
- const logDir = path.join(projectRoot, '.timsquad', 'logs');
598
- const logFile = path.join(logDir, 'workflow-automation.log');
599
- await fs.ensureDir(logDir);
600
- const line = `${getTimestamp()} ${message}\n`;
601
- await fs.appendFile(logFile, line, 'utf-8');
602
- }
603
- function formatAutomation(auto) {
604
- const enabled = Object.entries(auto).filter(([, v]) => v).map(([k]) => k);
605
- return enabled.length > 0 ? enabled.join(', ') : 'all OFF';
606
- }
607
- //# sourceMappingURL=workflow.js.map