timsquad 2.1.0 → 3.4.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 (438) hide show
  1. package/README.ko.md +288 -0
  2. package/README.md +170 -763
  3. package/dist/commands/compile.d.ts +3 -0
  4. package/dist/commands/compile.d.ts.map +1 -0
  5. package/dist/commands/compile.js +170 -0
  6. package/dist/commands/compile.js.map +1 -0
  7. package/dist/commands/daemon.d.ts +7 -0
  8. package/dist/commands/daemon.d.ts.map +1 -0
  9. package/dist/commands/daemon.js +229 -0
  10. package/dist/commands/daemon.js.map +1 -0
  11. package/dist/commands/feedback.d.ts +9 -0
  12. package/dist/commands/feedback.d.ts.map +1 -1
  13. package/dist/commands/feedback.js +235 -14
  14. package/dist/commands/feedback.js.map +1 -1
  15. package/dist/commands/full.js +2 -2
  16. package/dist/commands/full.js.map +1 -1
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +118 -22
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/knowledge.d.ts +3 -0
  21. package/dist/commands/knowledge.d.ts.map +1 -0
  22. package/dist/commands/knowledge.js +316 -0
  23. package/dist/commands/knowledge.js.map +1 -0
  24. package/dist/commands/log.d.ts +27 -0
  25. package/dist/commands/log.d.ts.map +1 -1
  26. package/dist/commands/log.js +965 -0
  27. package/dist/commands/log.js.map +1 -1
  28. package/dist/commands/meta-index.d.ts +3 -0
  29. package/dist/commands/meta-index.d.ts.map +1 -0
  30. package/dist/commands/meta-index.js +401 -0
  31. package/dist/commands/meta-index.js.map +1 -0
  32. package/dist/commands/metrics.d.ts.map +1 -1
  33. package/dist/commands/metrics.js +239 -4
  34. package/dist/commands/metrics.js.map +1 -1
  35. package/dist/commands/retro.js +154 -6
  36. package/dist/commands/retro.js.map +1 -1
  37. package/dist/commands/skills.d.ts +12 -0
  38. package/dist/commands/skills.d.ts.map +1 -0
  39. package/dist/commands/skills.js +231 -0
  40. package/dist/commands/skills.js.map +1 -0
  41. package/dist/commands/upgrade.d.ts +8 -0
  42. package/dist/commands/upgrade.d.ts.map +1 -0
  43. package/dist/commands/upgrade.js +292 -0
  44. package/dist/commands/upgrade.js.map +1 -0
  45. package/dist/commands/workflow.d.ts +3 -0
  46. package/dist/commands/workflow.d.ts.map +1 -0
  47. package/dist/commands/workflow.js +607 -0
  48. package/dist/commands/workflow.js.map +1 -0
  49. package/dist/daemon/context-writer.d.ts +16 -0
  50. package/dist/daemon/context-writer.d.ts.map +1 -0
  51. package/dist/daemon/context-writer.js +35 -0
  52. package/dist/daemon/context-writer.js.map +1 -0
  53. package/dist/daemon/entry.d.ts +7 -0
  54. package/dist/daemon/entry.d.ts.map +1 -0
  55. package/dist/daemon/entry.js +17 -0
  56. package/dist/daemon/entry.js.map +1 -0
  57. package/dist/daemon/event-queue.d.ts +52 -0
  58. package/dist/daemon/event-queue.d.ts.map +1 -0
  59. package/dist/daemon/event-queue.js +255 -0
  60. package/dist/daemon/event-queue.js.map +1 -0
  61. package/dist/daemon/file-watcher.d.ts +19 -0
  62. package/dist/daemon/file-watcher.d.ts.map +1 -0
  63. package/dist/daemon/file-watcher.js +87 -0
  64. package/dist/daemon/file-watcher.js.map +1 -0
  65. package/dist/daemon/index.d.ts +29 -0
  66. package/dist/daemon/index.d.ts.map +1 -0
  67. package/dist/daemon/index.js +296 -0
  68. package/dist/daemon/index.js.map +1 -0
  69. package/dist/daemon/jsonl-watcher.d.ts +49 -0
  70. package/dist/daemon/jsonl-watcher.d.ts.map +1 -0
  71. package/dist/daemon/jsonl-watcher.js +258 -0
  72. package/dist/daemon/jsonl-watcher.js.map +1 -0
  73. package/dist/daemon/meta-cache.d.ts +63 -0
  74. package/dist/daemon/meta-cache.d.ts.map +1 -0
  75. package/dist/daemon/meta-cache.js +249 -0
  76. package/dist/daemon/meta-cache.js.map +1 -0
  77. package/dist/daemon/session-state.d.ts +19 -0
  78. package/dist/daemon/session-state.d.ts.map +1 -0
  79. package/dist/daemon/session-state.js +132 -0
  80. package/dist/daemon/session-state.js.map +1 -0
  81. package/dist/daemon/shutdown.d.ts +21 -0
  82. package/dist/daemon/shutdown.d.ts.map +1 -0
  83. package/dist/daemon/shutdown.js +164 -0
  84. package/dist/daemon/shutdown.js.map +1 -0
  85. package/dist/index.js +24 -3
  86. package/dist/index.js.map +1 -1
  87. package/dist/lib/agent-composer.d.ts +38 -0
  88. package/dist/lib/agent-composer.d.ts.map +1 -0
  89. package/dist/lib/agent-composer.js +128 -0
  90. package/dist/lib/agent-composer.js.map +1 -0
  91. package/dist/lib/agent-generator.d.ts +22 -0
  92. package/dist/lib/agent-generator.d.ts.map +1 -0
  93. package/dist/lib/agent-generator.js +150 -0
  94. package/dist/lib/agent-generator.js.map +1 -0
  95. package/dist/lib/ast-parser.d.ts +11 -0
  96. package/dist/lib/ast-parser.d.ts.map +1 -0
  97. package/dist/lib/ast-parser.js +282 -0
  98. package/dist/lib/ast-parser.js.map +1 -0
  99. package/dist/lib/compile-rules.d.ts +66 -0
  100. package/dist/lib/compile-rules.d.ts.map +1 -0
  101. package/dist/lib/compile-rules.js +114 -0
  102. package/dist/lib/compile-rules.js.map +1 -0
  103. package/dist/lib/compiler.d.ts +105 -0
  104. package/dist/lib/compiler.d.ts.map +1 -0
  105. package/dist/lib/compiler.js +368 -0
  106. package/dist/lib/compiler.js.map +1 -0
  107. package/dist/lib/config.d.ts +7 -2
  108. package/dist/lib/config.d.ts.map +1 -1
  109. package/dist/lib/config.js +34 -3
  110. package/dist/lib/config.js.map +1 -1
  111. package/dist/lib/meta-index.d.ts +19 -0
  112. package/dist/lib/meta-index.d.ts.map +1 -0
  113. package/dist/lib/meta-index.js +573 -0
  114. package/dist/lib/meta-index.js.map +1 -0
  115. package/dist/lib/project.js +1 -1
  116. package/dist/lib/project.js.map +1 -1
  117. package/dist/lib/skill-generator.d.ts +32 -0
  118. package/dist/lib/skill-generator.d.ts.map +1 -0
  119. package/dist/lib/skill-generator.js +187 -0
  120. package/dist/lib/skill-generator.js.map +1 -0
  121. package/dist/lib/template.d.ts +16 -2
  122. package/dist/lib/template.d.ts.map +1 -1
  123. package/dist/lib/template.js +115 -20
  124. package/dist/lib/template.js.map +1 -1
  125. package/dist/lib/ui-index.d.ts +12 -0
  126. package/dist/lib/ui-index.d.ts.map +1 -0
  127. package/dist/lib/ui-index.js +239 -0
  128. package/dist/lib/ui-index.js.map +1 -0
  129. package/dist/lib/ui-parser.d.ts +12 -0
  130. package/dist/lib/ui-parser.d.ts.map +1 -0
  131. package/dist/lib/ui-parser.js +472 -0
  132. package/dist/lib/ui-parser.js.map +1 -0
  133. package/dist/lib/update-check.d.ts +6 -0
  134. package/dist/lib/update-check.d.ts.map +1 -0
  135. package/dist/lib/update-check.js +121 -0
  136. package/dist/lib/update-check.js.map +1 -0
  137. package/dist/lib/upgrade-backup.d.ts +33 -0
  138. package/dist/lib/upgrade-backup.d.ts.map +1 -0
  139. package/dist/lib/upgrade-backup.js +101 -0
  140. package/dist/lib/upgrade-backup.js.map +1 -0
  141. package/dist/lib/version.d.ts +19 -0
  142. package/dist/lib/version.d.ts.map +1 -0
  143. package/dist/lib/version.js +35 -0
  144. package/dist/lib/version.js.map +1 -0
  145. package/dist/lib/workflow-state.d.ts +48 -0
  146. package/dist/lib/workflow-state.d.ts.map +1 -0
  147. package/dist/lib/workflow-state.js +67 -0
  148. package/dist/lib/workflow-state.js.map +1 -0
  149. package/dist/types/config.d.ts +103 -2
  150. package/dist/types/config.d.ts.map +1 -1
  151. package/dist/types/config.js +184 -9
  152. package/dist/types/config.js.map +1 -1
  153. package/dist/types/feedback.d.ts +7 -0
  154. package/dist/types/feedback.d.ts.map +1 -1
  155. package/dist/types/feedback.js +1 -1
  156. package/dist/types/feedback.js.map +1 -1
  157. package/dist/types/index.d.ts +3 -0
  158. package/dist/types/index.d.ts.map +1 -1
  159. package/dist/types/index.js +3 -0
  160. package/dist/types/index.js.map +1 -1
  161. package/dist/types/meta-index.d.ts +146 -0
  162. package/dist/types/meta-index.d.ts.map +1 -0
  163. package/dist/types/meta-index.js +7 -0
  164. package/dist/types/meta-index.js.map +1 -0
  165. package/dist/types/project.d.ts +19 -3
  166. package/dist/types/project.d.ts.map +1 -1
  167. package/dist/types/project.js +23 -0
  168. package/dist/types/project.js.map +1 -1
  169. package/dist/types/task-log.d.ts +208 -0
  170. package/dist/types/task-log.d.ts.map +1 -0
  171. package/dist/types/task-log.js +6 -0
  172. package/dist/types/task-log.js.map +1 -0
  173. package/dist/types/ui-meta.d.ts +118 -0
  174. package/dist/types/ui-meta.d.ts.map +1 -0
  175. package/dist/types/ui-meta.js +7 -0
  176. package/dist/types/ui-meta.js.map +1 -0
  177. package/package.json +12 -4
  178. package/templates/base/agents/base/tsq-architect.md +68 -0
  179. package/templates/base/agents/base/tsq-dba.md +56 -0
  180. package/templates/base/agents/base/tsq-designer.md +72 -0
  181. package/templates/base/agents/base/tsq-developer.md +67 -0
  182. package/templates/base/agents/base/tsq-qa.md +55 -0
  183. package/templates/base/agents/base/tsq-security.md +65 -0
  184. package/templates/base/agents/overlays/domain/general-web/_common.md +11 -0
  185. package/templates/base/agents/overlays/domain/mobile/_common.md +13 -0
  186. package/templates/base/agents/overlays/platform/claude-code.md +12 -0
  187. package/templates/base/config.template.yaml +213 -0
  188. package/templates/base/knowledge/checklists/accessibility.md +37 -0
  189. package/templates/base/knowledge/checklists/architecture-review.md +28 -0
  190. package/templates/base/knowledge/checklists/database-standards.md +84 -0
  191. package/templates/base/knowledge/checklists/design-reference.md +97 -0
  192. package/templates/base/knowledge/checklists/security.md +50 -0
  193. package/templates/base/knowledge/checklists/ssot-validation.md +19 -0
  194. package/templates/base/knowledge/domains/_template.md +16 -0
  195. package/templates/base/knowledge/platforms/_template.md +16 -0
  196. package/templates/base/knowledge/templates/sequence-report.md +44 -0
  197. package/templates/base/knowledge/templates/task-result.md +105 -0
  198. package/templates/base/skills/_template/SKILL.md +59 -0
  199. package/templates/base/skills/_template/references/_template.md +35 -0
  200. package/templates/base/skills/_template/rules/_sections.md +34 -0
  201. package/templates/base/skills/_template/rules/_template.md +32 -0
  202. package/templates/base/skills/_template/scripts/_template.sh +31 -0
  203. package/templates/base/skills/architecture/SKILL.md +54 -0
  204. package/templates/base/skills/architecture/references/adr-template.md +50 -0
  205. package/templates/base/skills/architecture/references/api-design.md +64 -0
  206. package/templates/base/skills/backend/node/SKILL.md +81 -0
  207. package/templates/base/skills/backend/node/rules/async-patterns.md +81 -0
  208. package/templates/base/skills/backend/node/rules/deployment.md +33 -0
  209. package/templates/base/skills/backend/node/rules/env-config.md +41 -0
  210. package/templates/base/skills/backend/node/rules/error-handling.md +83 -0
  211. package/templates/base/skills/backend/node/rules/hono-app-setup.md +98 -0
  212. package/templates/base/skills/backend/node/rules/jwt-auth.md +76 -0
  213. package/templates/base/skills/backend/node/rules/middleware.md +56 -0
  214. package/templates/base/skills/backend/node/rules/testing.md +82 -0
  215. package/templates/base/skills/coding/SKILL.md +47 -0
  216. package/templates/base/skills/coding/rules/patterns.md +81 -0
  217. package/templates/base/skills/controller/SKILL.md +111 -0
  218. package/templates/base/skills/controller/references/README.md +35 -0
  219. package/templates/base/skills/controller/rules/README.md +18 -0
  220. package/templates/base/skills/database/SKILL.md +98 -0
  221. package/templates/base/skills/database/prisma/SKILL.md +57 -0
  222. package/templates/base/skills/database/prisma/rules/queries.md +133 -0
  223. package/templates/base/skills/database/prisma/rules/schema-design.md +80 -0
  224. package/templates/base/skills/frontend/nextjs/SKILL.md +59 -0
  225. package/templates/base/skills/frontend/nextjs/rules/app-router.md +138 -0
  226. package/templates/base/skills/frontend/react/SKILL.md +86 -0
  227. package/templates/base/skills/frontend/react/rules/_sections.md +88 -0
  228. package/templates/base/skills/frontend/react/rules/anti-patterns.md +67 -0
  229. package/templates/base/skills/frontend/react/rules/async-api-routes.md +38 -0
  230. package/templates/base/skills/frontend/react/rules/async-defer-await.md +80 -0
  231. package/templates/base/skills/frontend/react/rules/async-dependencies.md +36 -0
  232. package/templates/base/skills/frontend/react/rules/async-parallel.md +28 -0
  233. package/templates/base/skills/frontend/react/rules/async-suspense-boundaries.md +99 -0
  234. package/templates/base/skills/frontend/react/rules/bundle-barrel-imports.md +59 -0
  235. package/templates/base/skills/frontend/react/rules/bundle-defer-third-party.md +49 -0
  236. package/templates/base/skills/frontend/react/rules/bundle-dynamic-imports.md +35 -0
  237. package/templates/base/skills/frontend/react/rules/component-conventions.md +74 -0
  238. package/templates/base/skills/frontend/react/rules/js-combine-iterations.md +32 -0
  239. package/templates/base/skills/frontend/react/rules/js-early-exit.md +50 -0
  240. package/templates/base/skills/frontend/react/rules/js-index-maps.md +37 -0
  241. package/templates/base/skills/frontend/react/rules/js-set-map-lookups.md +24 -0
  242. package/templates/base/skills/frontend/react/rules/rendering-conditional-render.md +40 -0
  243. package/templates/base/skills/frontend/react/rules/rendering-content-visibility.md +38 -0
  244. package/templates/base/skills/frontend/react/rules/rendering-hoist-jsx.md +46 -0
  245. package/templates/base/skills/frontend/react/rules/rerender-defer-reads.md +39 -0
  246. package/templates/base/skills/frontend/react/rules/rerender-derived-state.md +29 -0
  247. package/templates/base/skills/frontend/react/rules/rerender-memo.md +44 -0
  248. package/templates/base/skills/frontend/react/rules/rerender-transitions.md +40 -0
  249. package/templates/base/skills/frontend/react/rules/server-after-nonblocking.md +73 -0
  250. package/templates/base/skills/frontend/react/rules/server-cache-react.md +26 -0
  251. package/templates/base/skills/frontend/react/rules/server-parallel-fetching.md +79 -0
  252. package/templates/base/skills/frontend/react/rules/state-location.md +55 -0
  253. package/templates/base/skills/methodology/bdd/SKILL.md +69 -0
  254. package/templates/base/skills/methodology/bdd/rules/gherkin-patterns.md +113 -0
  255. package/templates/base/skills/methodology/ddd/SKILL.md +74 -0
  256. package/templates/base/skills/methodology/ddd/rules/strategic-patterns.md +98 -0
  257. package/templates/base/skills/methodology/debugging/SKILL.md +60 -0
  258. package/templates/base/skills/methodology/debugging/references/root-cause-tracing.md +84 -0
  259. package/templates/base/skills/methodology/tdd/SKILL.md +66 -0
  260. package/templates/base/skills/methodology/tdd/rules/real-world-example.md +88 -0
  261. package/templates/base/skills/methodology/tdd/rules/techniques.md +185 -0
  262. package/templates/base/skills/mobile/dart/SKILL.md +69 -0
  263. package/templates/base/skills/mobile/dart/rules/async-patterns.md +112 -0
  264. package/templates/base/skills/mobile/dart/rules/code-style.md +96 -0
  265. package/templates/base/skills/mobile/dart/rules/null-safety.md +84 -0
  266. package/templates/base/skills/mobile/dart/rules/type-system.md +111 -0
  267. package/templates/base/skills/mobile/flutter/SKILL.md +89 -0
  268. package/templates/base/skills/mobile/flutter/ci-cd/SKILL.md +82 -0
  269. package/templates/base/skills/mobile/flutter/ci-cd/references/ci-cd-pipeline.md +314 -0
  270. package/templates/base/skills/mobile/flutter/ci-cd/rules/code-signing.md +106 -0
  271. package/templates/base/skills/mobile/flutter/ci-cd/rules/codemagic-setup.md +116 -0
  272. package/templates/base/skills/mobile/flutter/ci-cd/rules/fastlane-setup.md +105 -0
  273. package/templates/base/skills/mobile/flutter/ci-cd/rules/github-actions.md +112 -0
  274. package/templates/base/skills/mobile/flutter/ci-cd/rules/store-deployment.md +106 -0
  275. package/templates/base/skills/mobile/flutter/ci-cd/rules/versioning.md +107 -0
  276. package/templates/base/skills/mobile/flutter/i18n/SKILL.md +78 -0
  277. package/templates/base/skills/mobile/flutter/i18n/references/i18n-architecture.md +225 -0
  278. package/templates/base/skills/mobile/flutter/i18n/rules/arb-files.md +182 -0
  279. package/templates/base/skills/mobile/flutter/i18n/rules/locale-switching.md +226 -0
  280. package/templates/base/skills/mobile/flutter/i18n/rules/localization-setup.md +137 -0
  281. package/templates/base/skills/mobile/flutter/i18n/rules/plural-gender.md +159 -0
  282. package/templates/base/skills/mobile/flutter/i18n/rules/text-direction.md +199 -0
  283. package/templates/base/skills/mobile/flutter/monitoring/SKILL.md +81 -0
  284. package/templates/base/skills/mobile/flutter/monitoring/references/monitoring-architecture.md +269 -0
  285. package/templates/base/skills/mobile/flutter/monitoring/rules/analytics.md +227 -0
  286. package/templates/base/skills/mobile/flutter/monitoring/rules/crashlytics-setup.md +195 -0
  287. package/templates/base/skills/mobile/flutter/monitoring/rules/logging.md +258 -0
  288. package/templates/base/skills/mobile/flutter/monitoring/rules/performance-monitoring.md +248 -0
  289. package/templates/base/skills/mobile/flutter/monitoring/rules/sentry-integration.md +249 -0
  290. package/templates/base/skills/mobile/flutter/networking/SKILL.md +88 -0
  291. package/templates/base/skills/mobile/flutter/networking/references/api-client-architecture.md +305 -0
  292. package/templates/base/skills/mobile/flutter/networking/rules/caching.md +212 -0
  293. package/templates/base/skills/mobile/flutter/networking/rules/connectivity.md +213 -0
  294. package/templates/base/skills/mobile/flutter/networking/rules/dio-setup.md +159 -0
  295. package/templates/base/skills/mobile/flutter/networking/rules/error-handling.md +209 -0
  296. package/templates/base/skills/mobile/flutter/networking/rules/interceptors.md +205 -0
  297. package/templates/base/skills/mobile/flutter/networking/rules/retrofit-patterns.md +194 -0
  298. package/templates/base/skills/mobile/flutter/push-notifications/SKILL.md +87 -0
  299. package/templates/base/skills/mobile/flutter/push-notifications/references/notification-architecture.md +340 -0
  300. package/templates/base/skills/mobile/flutter/push-notifications/references/platform-setup.md +286 -0
  301. package/templates/base/skills/mobile/flutter/push-notifications/rules/background-processing.md +308 -0
  302. package/templates/base/skills/mobile/flutter/push-notifications/rules/deep-linking.md +217 -0
  303. package/templates/base/skills/mobile/flutter/push-notifications/rules/fcm-setup.md +164 -0
  304. package/templates/base/skills/mobile/flutter/push-notifications/rules/local-notifications.md +262 -0
  305. package/templates/base/skills/mobile/flutter/push-notifications/rules/notification-handling.md +210 -0
  306. package/templates/base/skills/mobile/flutter/push-notifications/rules/notification-permissions.md +246 -0
  307. package/templates/base/skills/mobile/flutter/push-notifications/rules/rich-notifications.md +320 -0
  308. package/templates/base/skills/mobile/flutter/references/freezed-patterns.md +162 -0
  309. package/templates/base/skills/mobile/flutter/references/project-structure.md +170 -0
  310. package/templates/base/skills/mobile/flutter/rules/animations.md +112 -0
  311. package/templates/base/skills/mobile/flutter/rules/architecture.md +121 -0
  312. package/templates/base/skills/mobile/flutter/rules/navigation-routing.md +117 -0
  313. package/templates/base/skills/mobile/flutter/rules/performance.md +112 -0
  314. package/templates/base/skills/mobile/flutter/rules/platform-adaptive.md +126 -0
  315. package/templates/base/skills/mobile/flutter/rules/state-management.md +110 -0
  316. package/templates/base/skills/mobile/flutter/rules/testing.md +131 -0
  317. package/templates/base/skills/mobile/flutter/rules/widget-conventions.md +122 -0
  318. package/templates/base/skills/mobile/flutter/security/SKILL.md +86 -0
  319. package/templates/base/skills/mobile/flutter/security/references/mobile-security-checklist.md +168 -0
  320. package/templates/base/skills/mobile/flutter/security/rules/api-key-protection.md +206 -0
  321. package/templates/base/skills/mobile/flutter/security/rules/authentication.md +248 -0
  322. package/templates/base/skills/mobile/flutter/security/rules/data-protection.md +271 -0
  323. package/templates/base/skills/mobile/flutter/security/rules/obfuscation.md +213 -0
  324. package/templates/base/skills/mobile/flutter/security/rules/secure-storage.md +171 -0
  325. package/templates/base/skills/mobile/flutter/security/rules/ssl-pinning.md +197 -0
  326. package/templates/base/skills/planning/SKILL.md +58 -0
  327. package/templates/base/skills/planning/references/prd-guide.md +47 -0
  328. package/templates/base/skills/planning/references/requirements-guide.md +46 -0
  329. package/templates/base/skills/prompt-engineering/SKILL.md +103 -0
  330. package/templates/base/skills/retrospective/SKILL.md +102 -0
  331. package/templates/base/skills/security/SKILL.md +55 -0
  332. package/templates/base/skills/security/rules/owasp-examples.md +119 -0
  333. package/templates/base/skills/security/scripts/check-secrets.sh +55 -0
  334. package/templates/base/skills/testing/SKILL.md +63 -0
  335. package/templates/base/skills/testing/references/testing-patterns.md +103 -0
  336. package/templates/base/skills/tsq-protocol/SKILL.md +51 -0
  337. package/templates/base/skills/typescript/SKILL.md +67 -0
  338. package/templates/base/skills/typescript/rules/type-patterns.md +135 -0
  339. package/templates/base/skills/typescript/rules/utility-types.md +76 -0
  340. package/templates/base/skills/ui-design/SKILL.md +70 -0
  341. package/templates/{common → base}/timsquad/feedback/routing-rules.yaml +1 -1
  342. package/templates/{common → base}/timsquad/retrospective/metrics/metrics-schema.json +46 -1
  343. package/templates/platforms/claude-code/CLAUDE.md.template +89 -0
  344. package/templates/platforms/claude-code/rules/adr-rules.md +32 -0
  345. package/templates/platforms/claude-code/rules/feedback-routing.md +18 -0
  346. package/templates/platforms/claude-code/rules/phase-management.md +23 -0
  347. package/templates/platforms/claude-code/rules/reporting-format.md +26 -0
  348. package/templates/platforms/claude-code/rules/sequence-management.md +72 -0
  349. package/templates/platforms/claude-code/rules/workspace-sync.md +33 -0
  350. package/templates/platforms/claude-code/scripts/completion-guard.sh +57 -0
  351. package/templates/platforms/claude-code/scripts/phase-guard.sh +79 -0
  352. package/templates/platforms/claude-code/settings.json +98 -0
  353. package/templates/project-types/api-backend/config.yaml +227 -0
  354. package/templates/project-types/api-backend/process/workflow.xml +214 -0
  355. package/templates/project-types/fintech/config.yaml +151 -0
  356. package/templates/project-types/fintech/process/workflow.xml +316 -0
  357. package/templates/project-types/infra/config.yaml +327 -0
  358. package/templates/project-types/infra/process/workflow.xml +296 -0
  359. package/templates/project-types/mobile-app/config.yaml +123 -0
  360. package/templates/project-types/mobile-app/process/workflow.xml +191 -0
  361. package/templates/project-types/platform/config.yaml +254 -0
  362. package/templates/project-types/platform/process/workflow.xml +254 -0
  363. package/templates/project-types/web-app/config.yaml +198 -0
  364. package/templates/project-types/web-app/process/workflow.xml +210 -0
  365. package/templates/project-types/web-service/config.yaml +136 -0
  366. package/templates/project-types/web-service/process/workflow.xml +184 -0
  367. package/templates/common/CLAUDE.md.template +0 -254
  368. package/templates/common/claude/agents/tsq-dba.md +0 -311
  369. package/templates/common/claude/agents/tsq-designer.md +0 -323
  370. package/templates/common/claude/agents/tsq-developer.md +0 -177
  371. package/templates/common/claude/agents/tsq-planner.md +0 -190
  372. package/templates/common/claude/agents/tsq-prompter.md +0 -356
  373. package/templates/common/claude/agents/tsq-qa.md +0 -168
  374. package/templates/common/claude/agents/tsq-retro.md +0 -193
  375. package/templates/common/claude/agents/tsq-security.md +0 -221
  376. package/templates/common/claude/hooks/auto-metrics.sh +0 -165
  377. package/templates/common/claude/hooks/auto-worklog.sh +0 -245
  378. package/templates/common/claude/hooks/event-logger.sh +0 -208
  379. package/templates/common/claude/settings.json +0 -86
  380. package/templates/common/claude/skills/architecture/SKILL.md +0 -123
  381. package/templates/common/claude/skills/backend/node/SKILL.md +0 -1015
  382. package/templates/common/claude/skills/coding/SKILL.md +0 -171
  383. package/templates/common/claude/skills/database/prisma/SKILL.md +0 -357
  384. package/templates/common/claude/skills/frontend/nextjs/SKILL.md +0 -279
  385. package/templates/common/claude/skills/frontend/react/SKILL.md +0 -1729
  386. package/templates/common/claude/skills/methodology/bdd/SKILL.md +0 -234
  387. package/templates/common/claude/skills/methodology/ddd/SKILL.md +0 -311
  388. package/templates/common/claude/skills/methodology/tdd/SKILL.md +0 -512
  389. package/templates/common/claude/skills/planning/SKILL.md +0 -90
  390. package/templates/common/claude/skills/security/SKILL.md +0 -234
  391. package/templates/common/claude/skills/testing/SKILL.md +0 -146
  392. package/templates/common/claude/skills/typescript/SKILL.md +0 -435
  393. package/templates/common/config.template.yaml +0 -132
  394. /package/templates/{common → base}/timsquad/architectures/clean/ARCHITECTURE.md +0 -0
  395. /package/templates/{common → base}/timsquad/architectures/clean/backend.xml +0 -0
  396. /package/templates/{common → base}/timsquad/architectures/clean/frontend.xml +0 -0
  397. /package/templates/{common → base}/timsquad/architectures/fsd/ARCHITECTURE.md +0 -0
  398. /package/templates/{common → base}/timsquad/architectures/fsd/frontend.xml +0 -0
  399. /package/templates/{common → base}/timsquad/architectures/hexagonal/ARCHITECTURE.md +0 -0
  400. /package/templates/{common → base}/timsquad/architectures/hexagonal/backend.xml +0 -0
  401. /package/templates/{common → base}/timsquad/constraints/competency-framework.xml +0 -0
  402. /package/templates/{common → base}/timsquad/constraints/ssot-schema.xml +0 -0
  403. /package/templates/{common → base}/timsquad/feedback/feedback-router.sh +0 -0
  404. /package/templates/{common → base}/timsquad/generators/data-design.xml +0 -0
  405. /package/templates/{common → base}/timsquad/generators/prd.xml +0 -0
  406. /package/templates/{common → base}/timsquad/generators/requirements.xml +0 -0
  407. /package/templates/{common → base}/timsquad/generators/service-spec.xml +0 -0
  408. /package/templates/{common → base}/timsquad/logs/_example.md +0 -0
  409. /package/templates/{common → base}/timsquad/logs/_template.md +0 -0
  410. /package/templates/{common → base}/timsquad/patterns/cqrs.xml +0 -0
  411. /package/templates/{common → base}/timsquad/patterns/event-sourcing.xml +0 -0
  412. /package/templates/{common → base}/timsquad/patterns/repository.xml +0 -0
  413. /package/templates/{common → base}/timsquad/process/phase-checklist.yaml +0 -0
  414. /package/templates/{common → base}/timsquad/process/state-machine.xml +0 -0
  415. /package/templates/{common → base}/timsquad/process/validation-rules.xml +0 -0
  416. /package/templates/{common → base}/timsquad/process/workflow-base.xml +0 -0
  417. /package/templates/{common → base}/timsquad/retrospective/cycle-report.template.md +0 -0
  418. /package/templates/{common → base}/timsquad/retrospective/patterns/failure-patterns.md +0 -0
  419. /package/templates/{common → base}/timsquad/retrospective/patterns/success-patterns.md +0 -0
  420. /package/templates/{common → base}/timsquad/retrospective/retrospective-config.xml +0 -0
  421. /package/templates/{common → base}/timsquad/retrospective/retrospective-state.xml +0 -0
  422. /package/templates/{common → base}/timsquad/ssot/adr/ADR-000-template.md +0 -0
  423. /package/templates/{common → base}/timsquad/ssot/adr/ADR-001-example.md +0 -0
  424. /package/templates/{common → base}/timsquad/ssot/data-design.template.md +0 -0
  425. /package/templates/{common → base}/timsquad/ssot/deployment-spec.template.md +0 -0
  426. /package/templates/{common → base}/timsquad/ssot/env-config.template.md +0 -0
  427. /package/templates/{common → base}/timsquad/ssot/error-codes.template.md +0 -0
  428. /package/templates/{common → base}/timsquad/ssot/functional-spec.template.md +0 -0
  429. /package/templates/{common → base}/timsquad/ssot/glossary.template.md +0 -0
  430. /package/templates/{common → base}/timsquad/ssot/integration-spec.template.md +0 -0
  431. /package/templates/{common → base}/timsquad/ssot/planning.template.md +0 -0
  432. /package/templates/{common → base}/timsquad/ssot/prd.template.md +0 -0
  433. /package/templates/{common → base}/timsquad/ssot/requirements.template.md +0 -0
  434. /package/templates/{common → base}/timsquad/ssot/security-spec.template.md +0 -0
  435. /package/templates/{common → base}/timsquad/ssot/service-spec.template.md +0 -0
  436. /package/templates/{common → base}/timsquad/ssot/test-spec.template.md +0 -0
  437. /package/templates/{common → base}/timsquad/ssot/ui-ux-spec.template.md +0 -0
  438. /package/templates/{common → base}/timsquad/state/workspace.xml +0 -0
@@ -1,221 +0,0 @@
1
- ---
2
- name: tsq-security
3
- description: |
4
- TimSquad Security 에이전트.
5
- 보안 취약점 분석, 보안 설계 검토, 컴플라이언스 체크 담당.
6
- Use when: "보안 검토", "취약점 분석", "보안 설계", "컴플라이언스"
7
- model: sonnet
8
- tools: [Read, Bash, Grep, Glob]
9
- ---
10
-
11
- <agent role="security">
12
- <mandatory-skills>
13
- <instruction priority="critical">
14
- 작업 시작 전 반드시 아래 스킬 파일을 읽고 해당 가이드라인을 준수하세요.
15
- 스킬을 읽지 않고 작업하는 것은 금지됩니다.
16
- </instruction>
17
- <skill path="skills/security/SKILL.md">보안 가이드라인</skill>
18
- </mandatory-skills>
19
-
20
- <persona>
21
- 12년 경력의 시니어 보안 엔지니어.
22
- OWASP, SANS Top 25 전문가.
23
- 펜테스팅 및 보안 감사 경험 다수.
24
- 금융, 의료 등 규제 산업 보안 컨설팅 경험.
25
- "보안은 기능이 아니라 속성이다" 철학.
26
- </persona>
27
-
28
- <responsibilities>
29
- <role>취약점 분석: OWASP Top 10, SANS Top 25 기반 코드 분석</role>
30
- <role>보안 설계 검토: 인증/인가, 암호화, 데이터 보호 설계 검토</role>
31
- <role>컴플라이언스 체크: GDPR, PCI-DSS 등 규제 준수 확인</role>
32
- <role>시크릿 관리: 하드코딩된 시크릿, 키 노출 탐지</role>
33
- <role>보안 가이드: 안전한 코딩 패턴 제안</role>
34
- </responsibilities>
35
-
36
- <prerequisites>
37
- <check priority="critical">`.timsquad/ssot/security-spec.md` - 보안 명세 (있는 경우)</check>
38
- <check priority="critical">`.timsquad/ssot/service-spec.md` - API 명세</check>
39
- <check>인증/인가 흐름 파악</check>
40
- <check>민감 데이터 식별</check>
41
- </prerequisites>
42
-
43
- <security-checklists>
44
- <checklist name="OWASP Top 10 (2021)">
45
- <item id="A01">Broken Access Control - 접근 제어 우회</item>
46
- <item id="A02">Cryptographic Failures - 암호화 실패</item>
47
- <item id="A03">Injection - SQL, NoSQL, OS, LDAP 인젝션</item>
48
- <item id="A04">Insecure Design - 보안 설계 결함</item>
49
- <item id="A05">Security Misconfiguration - 보안 설정 오류</item>
50
- <item id="A06">Vulnerable Components - 취약한 컴포넌트</item>
51
- <item id="A07">Auth Failures - 인증/세션 관리 실패</item>
52
- <item id="A08">Data Integrity Failures - 데이터 무결성 실패</item>
53
- <item id="A09">Logging Failures - 로깅/모니터링 실패</item>
54
- <item id="A10">SSRF - 서버 사이드 요청 위조</item>
55
- </checklist>
56
-
57
- <checklist name="인증/인가">
58
- <item>JWT 토큰 검증 적절성</item>
59
- <item>세션 만료 정책</item>
60
- <item>비밀번호 정책 (복잡도, 해싱)</item>
61
- <item>다중 인증(MFA) 지원 여부</item>
62
- <item>권한 검사 누락 없음</item>
63
- <item>수평/수직 권한 상승 방지</item>
64
- </checklist>
65
-
66
- <checklist name="데이터 보호">
67
- <item>민감 데이터 암호화 (저장 시)</item>
68
- <item>전송 시 TLS/HTTPS 사용</item>
69
- <item>PII(개인정보) 마스킹</item>
70
- <item>로그에 민감 정보 미포함</item>
71
- <item>백업 데이터 암호화</item>
72
- </checklist>
73
-
74
- <checklist name="입력 검증">
75
- <item>모든 입력 검증 (화이트리스트)</item>
76
- <item>SQL Injection 방지 (파라미터화)</item>
77
- <item>XSS 방지 (출력 인코딩)</item>
78
- <item>CSRF 토큰 사용</item>
79
- <item>파일 업로드 검증</item>
80
- <item>경로 조작(Path Traversal) 방지</item>
81
- </checklist>
82
-
83
- <checklist name="시크릿 관리">
84
- <item>하드코딩된 시크릿 없음</item>
85
- <item>환경변수 또는 시크릿 매니저 사용</item>
86
- <item>.env 파일 .gitignore 포함</item>
87
- <item>API 키 노출 없음</item>
88
- <item>시크릿 로테이션 정책</item>
89
- </checklist>
90
-
91
- <checklist name="의존성 보안">
92
- <item>알려진 취약점 없는 버전 사용</item>
93
- <item>npm audit / yarn audit 통과</item>
94
- <item>불필요한 의존성 제거</item>
95
- <item>의존성 버전 고정 (lock 파일)</item>
96
- </checklist>
97
-
98
- <checklist name="API 보안">
99
- <item>Rate Limiting 적용</item>
100
- <item>CORS 설정 적절성</item>
101
- <item>API 버저닝</item>
102
- <item>에러 메시지에 내부 정보 미노출</item>
103
- <item>요청 크기 제한</item>
104
- </checklist>
105
- </security-checklists>
106
-
107
- <rules>
108
- <must>모든 발견 사항에 심각도 분류 (Critical/High/Medium/Low)</must>
109
- <must>구체적인 파일:라인 위치와 취약점 유형 명시</must>
110
- <must>수정 방법 또는 안전한 대안 제시</must>
111
- <must>OWASP/CWE 참조 번호 포함</must>
112
- <must-not>직접 코드 수정 (Developer 역할)</must-not>
113
- <must-not>취약점 없이 "안전함" 결론 (반드시 근거 제시)</must-not>
114
- <must-not>보안 이슈 경시 (Minor로 하향 금지)</must-not>
115
- </rules>
116
-
117
- <severity-levels>
118
- <level name="Critical" action="즉시 수정">
119
- <description>즉각적인 익스플로잇 가능, 데이터 유출/시스템 장악 위험</description>
120
- <examples>SQL Injection, 인증 우회, RCE, 하드코딩된 시크릿</examples>
121
- </level>
122
- <level name="High" action="배포 전 수정">
123
- <description>익스플로잇 가능, 상당한 피해 예상</description>
124
- <examples>XSS (Stored), CSRF, 권한 상승, 민감정보 노출</examples>
125
- </level>
126
- <level name="Medium" action="다음 릴리즈 전 수정">
127
- <description>제한된 조건에서 익스플로잇 가능</description>
128
- <examples>XSS (Reflected), 정보 누출, 약한 암호화</examples>
129
- </level>
130
- <level name="Low" action="백로그">
131
- <description>이론적 위험 또는 심층 방어 권장</description>
132
- <examples>정보성 헤더 노출, 베스트 프랙티스 미준수</examples>
133
- </level>
134
- </severity-levels>
135
-
136
- <tsq-cli priority="critical">
137
- <instruction>
138
- 로그 기록, 피드백 등 TSQ CLI가 제공하는 기능은
139
- 반드시 CLI 커맨드를 사용하세요. 직접 파일을 조작하지 마세요.
140
- CLI를 사용해야 구조화된 데이터가 자동 저장되어 회고 시스템에 집계됩니다.
141
- </instruction>
142
-
143
- <on-review-start>
144
- tsq status --ssot # SSOT 확인 (보안 명세 포함)
145
- tsq log add security work "보안 검토 시작: {대상 설명}"
146
- </on-review-start>
147
-
148
- <on-vuln-found>
149
- tsq feedback "보안 취약점: {severity} - {설명}" # Level 자동 분류 + JSON 저장
150
- tsq log add security feedback "{severity}: {취약점 요약}"
151
- </on-vuln-found>
152
-
153
- <on-review-complete>
154
- tsq log add security work "보안 검토 완료: {결과 요약}"
155
- </on-review-complete>
156
-
157
- <on-phase-complete>
158
- tsq retro phase security # Phase 회고 (KPT)
159
- </on-phase-complete>
160
-
161
- <forbidden>
162
- 직접 .timsquad/logs/ 파일 생성/수정 금지 (tsq log 사용)
163
- 직접 .timsquad/feedback/ 파일 생성 금지 (tsq feedback 사용)
164
- </forbidden>
165
- </tsq-cli>
166
-
167
- <feedback-routing>
168
- <level id="1" severity="Low/Medium">
169
- <triggers>코드 수준 보안 이슈 (입력 검증, 인코딩 등)</triggers>
170
- <route>@tsq-developer</route>
171
- <description>Developer가 코드 수정</description>
172
- </level>
173
- <level id="2" severity="High">
174
- <triggers>설계 수준 보안 이슈 (인증 구조, 데이터 흐름)</triggers>
175
- <route>@tsq-planner</route>
176
- <description>SSOT 보안 설계 수정 필요</description>
177
- </level>
178
- <level id="3" severity="Critical">
179
- <triggers>아키텍처 수준 보안 이슈, 컴플라이언스 위반</triggers>
180
- <route>@tsq-planner → 사용자 승인</route>
181
- <requires-approval>true</requires-approval>
182
- <description>긴급 대응 필요, 비즈니스 결정 필요</description>
183
- </level>
184
- </feedback-routing>
185
-
186
- <report-format>
187
- <![CDATA[
188
- ## 보안 검토 리포트
189
-
190
- ### 요약
191
- - 검토 범위: {scope}
192
- - 검토 일시: {date}
193
- - 발견 취약점: Critical {n}, High {n}, Medium {n}, Low {n}
194
-
195
- ### Critical 취약점
196
- 1. **[A03:Injection] SQL Injection**
197
- - 위치: `src/routes/user.ts:45`
198
- - 설명: 사용자 입력이 직접 쿼리에 삽입됨
199
- - 영향: 데이터베이스 전체 접근 가능
200
- - 수정 방법: 파라미터화된 쿼리 사용
201
- - 참조: CWE-89, OWASP A03:2021
202
-
203
- ### High 취약점
204
- ...
205
-
206
- ### Medium 취약점
207
- ...
208
-
209
- ### Low 취약점
210
- ...
211
-
212
- ### 권장 사항
213
- 1. {보안 강화 권장 사항}
214
- 2. {추가 검토 필요 영역}
215
-
216
- ### 다음 단계
217
- - [ ] @tsq-developer Critical 취약점 즉시 수정
218
- - [ ] @tsq-planner 인증 구조 재검토
219
- ]]>
220
- </report-format>
221
- </agent>
@@ -1,165 +0,0 @@
1
- #!/bin/bash
2
- # TimSquad Auto Metrics Collector
3
- # SessionEnd 이벤트 시 호출되어 세션 JSONL을 분석하고
4
- # .timsquad/retrospective/metrics/latest.json 에 누적 메트릭 갱신
5
- #
6
- # 토큰 비용: 0 (순수 파일 I/O)
7
- # 사용법: auto-metrics.sh <jsonl_file> <session_id_short>
8
-
9
- set -euo pipefail
10
-
11
- JSONL_FILE="${1:-}"
12
- SESSION_SHORT="${2:-unknown}"
13
-
14
- if [ -z "$JSONL_FILE" ] || [ ! -f "$JSONL_FILE" ]; then
15
- exit 0
16
- fi
17
-
18
- PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
19
- METRICS_DIR="$PROJECT_DIR/.timsquad/retrospective/metrics"
20
- mkdir -p "$METRICS_DIR"
21
-
22
- LATEST_FILE="$METRICS_DIR/latest.json"
23
- TODAY=$(date +"%Y-%m-%d")
24
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
25
-
26
- # ============================================================
27
- # JSONL에서 세션 통계 추출
28
- # ============================================================
29
-
30
- TOTAL_EVENTS=$(wc -l < "$JSONL_FILE" | tr -d ' ')
31
-
32
- if [ "$TOTAL_EVENTS" -lt 3 ]; then
33
- exit 0
34
- fi
35
-
36
- # 도구 사용
37
- TOOL_USES=$(jq -r 'select(.event == "PostToolUse")' "$JSONL_FILE" 2>/dev/null | wc -l | tr -d ' ')
38
- TOOL_FAILURES=$(jq -r 'select(.event == "PostToolUseFailure")' "$JSONL_FILE" 2>/dev/null | wc -l | tr -d ' ')
39
- SUBAGENTS=$(jq -r 'select(.event == "SubagentStart")' "$JSONL_FILE" 2>/dev/null | wc -l | tr -d ' ')
40
-
41
- # 토큰 (SessionEnd에서 추출)
42
- TOKEN_DATA=$(jq -c 'select(.event == "SessionEnd") | .total_usage // {}' "$JSONL_FILE" 2>/dev/null | head -1)
43
- if [ -z "$TOKEN_DATA" ] || [ "$TOKEN_DATA" = "{}" ]; then
44
- TOKEN_INPUT=0
45
- TOKEN_OUTPUT=0
46
- TOKEN_CACHE_CREATE=0
47
- TOKEN_CACHE_READ=0
48
- else
49
- TOKEN_INPUT=$(echo "$TOKEN_DATA" | jq -r '.total_input // 0')
50
- TOKEN_OUTPUT=$(echo "$TOKEN_DATA" | jq -r '.total_output // 0')
51
- TOKEN_CACHE_CREATE=$(echo "$TOKEN_DATA" | jq -r '.total_cache_create // 0')
52
- TOKEN_CACHE_READ=$(echo "$TOKEN_DATA" | jq -r '.total_cache_read // 0')
53
- fi
54
-
55
- # CLI 채택률
56
- TOTAL_BASH=$(jq -r 'select(.event == "PostToolUse" and .tool == "Bash") | .detail.command // ""' "$JSONL_FILE" 2>/dev/null | wc -l | tr -d ' ')
57
- TSQ_BASH=$(jq -r 'select(.event == "PostToolUse" and .tool == "Bash") | .detail.command // ""' "$JSONL_FILE" 2>/dev/null | grep -c '^\(tsq\|npx tsq\)' || echo "0")
58
-
59
- # ============================================================
60
- # latest.json 읽기 또는 초기화
61
- # ============================================================
62
-
63
- if [ -f "$LATEST_FILE" ]; then
64
- EXISTING=$(cat "$LATEST_FILE")
65
- else
66
- EXISTING='{}'
67
- fi
68
-
69
- # 기존 값 추출 (없으면 0)
70
- PREV_SESSIONS=$(echo "$EXISTING" | jq -r '.totalSessions // 0')
71
- PREV_EVENTS=$(echo "$EXISTING" | jq -r '.totalEvents // 0')
72
- PREV_TOOL_USES=$(echo "$EXISTING" | jq -r '.totalToolUses // 0')
73
- PREV_FAILURES=$(echo "$EXISTING" | jq -r '.totalFailures // 0')
74
- PREV_SUBAGENTS=$(echo "$EXISTING" | jq -r '.subagentCount // 0')
75
- PREV_INPUT=$(echo "$EXISTING" | jq -r '.tokens.totalInput // 0')
76
- PREV_OUTPUT=$(echo "$EXISTING" | jq -r '.tokens.totalOutput // 0')
77
- PREV_CACHE_CREATE=$(echo "$EXISTING" | jq -r '.tokens.totalCacheCreate // 0')
78
- PREV_CACHE_READ=$(echo "$EXISTING" | jq -r '.tokens.totalCacheRead // 0')
79
- PREV_BASH=$(echo "$EXISTING" | jq -r '.cliAdoption.totalBashCommands // 0')
80
- PREV_TSQ=$(echo "$EXISTING" | jq -r '.cliAdoption.tsqCommands // 0')
81
-
82
- # ============================================================
83
- # 누적 갱신
84
- # ============================================================
85
-
86
- NEW_SESSIONS=$((PREV_SESSIONS + 1))
87
- NEW_EVENTS=$((PREV_EVENTS + TOTAL_EVENTS))
88
- NEW_TOOL_USES=$((PREV_TOOL_USES + TOOL_USES))
89
- NEW_FAILURES=$((PREV_FAILURES + TOOL_FAILURES))
90
- NEW_SUBAGENTS=$((PREV_SUBAGENTS + SUBAGENTS))
91
- NEW_INPUT=$((PREV_INPUT + TOKEN_INPUT))
92
- NEW_OUTPUT=$((PREV_OUTPUT + TOKEN_OUTPUT))
93
- NEW_CACHE_CREATE=$((PREV_CACHE_CREATE + TOKEN_CACHE_CREATE))
94
- NEW_CACHE_READ=$((PREV_CACHE_READ + TOKEN_CACHE_READ))
95
- NEW_BASH=$((PREV_BASH + TOTAL_BASH))
96
- NEW_TSQ=$((PREV_TSQ + TSQ_BASH))
97
-
98
- # 파생 지표
99
- TOTAL_ATTEMPTS=$((NEW_TOOL_USES + NEW_FAILURES))
100
- if [ "$TOTAL_ATTEMPTS" -gt 0 ]; then
101
- TOOL_EFFICIENCY=$((NEW_TOOL_USES * 100 / TOTAL_ATTEMPTS))
102
- else
103
- TOOL_EFFICIENCY=0
104
- fi
105
-
106
- ALL_INPUT=$((NEW_INPUT + NEW_CACHE_CREATE + NEW_CACHE_READ))
107
- if [ "$ALL_INPUT" -gt 0 ]; then
108
- CACHE_HIT_RATE=$((NEW_CACHE_READ * 100 / ALL_INPUT))
109
- else
110
- CACHE_HIT_RATE=0
111
- fi
112
-
113
- if [ "$NEW_BASH" -gt 0 ]; then
114
- CLI_ADOPTION=$((NEW_TSQ * 100 / NEW_BASH))
115
- else
116
- CLI_ADOPTION=0
117
- fi
118
-
119
- # ============================================================
120
- # latest.json 갱신
121
- # ============================================================
122
-
123
- jq -n -c \
124
- --arg ts "$TIMESTAMP" \
125
- --arg date "$TODAY" \
126
- --arg last_session "$SESSION_SHORT" \
127
- --argjson sessions "$NEW_SESSIONS" \
128
- --argjson events "$NEW_EVENTS" \
129
- --argjson tool_uses "$NEW_TOOL_USES" \
130
- --argjson failures "$NEW_FAILURES" \
131
- --argjson efficiency "$TOOL_EFFICIENCY" \
132
- --argjson subagents "$NEW_SUBAGENTS" \
133
- --argjson input "$NEW_INPUT" \
134
- --argjson output "$NEW_OUTPUT" \
135
- --argjson cache_create "$NEW_CACHE_CREATE" \
136
- --argjson cache_read "$NEW_CACHE_READ" \
137
- --argjson cache_rate "$CACHE_HIT_RATE" \
138
- --argjson bash_total "$NEW_BASH" \
139
- --argjson tsq_total "$NEW_TSQ" \
140
- --argjson cli_rate "$CLI_ADOPTION" \
141
- '{
142
- updatedAt: $ts,
143
- lastDate: $date,
144
- lastSession: $last_session,
145
- totalSessions: $sessions,
146
- totalEvents: $events,
147
- totalToolUses: $tool_uses,
148
- totalFailures: $failures,
149
- toolEfficiency: $efficiency,
150
- subagentCount: $subagents,
151
- tokens: {
152
- totalInput: $input,
153
- totalOutput: $output,
154
- totalCacheCreate: $cache_create,
155
- totalCacheRead: $cache_read,
156
- cacheHitRate: $cache_rate
157
- },
158
- cliAdoption: {
159
- totalBashCommands: $bash_total,
160
- tsqCommands: $tsq_total,
161
- adoptionRate: $cli_rate
162
- }
163
- }' | jq '.' > "$LATEST_FILE"
164
-
165
- exit 0
@@ -1,245 +0,0 @@
1
- #!/bin/bash
2
- # TimSquad Auto Work Log Generator
3
- # SessionEnd 이벤트 시 호출되어 세션 JSONL을 분석하고
4
- # .timsquad/logs/{date}-session.md 작업 로그를 자동 생성
5
- #
6
- # 사용법: auto-worklog.sh <jsonl_file> <session_id_short>
7
-
8
- set -euo pipefail
9
-
10
- JSONL_FILE="${1:-}"
11
- SESSION_SHORT="${2:-unknown}"
12
-
13
- if [ -z "$JSONL_FILE" ] || [ ! -f "$JSONL_FILE" ]; then
14
- exit 0
15
- fi
16
-
17
- PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
18
- LOGS_DIR="$PROJECT_DIR/.timsquad/logs"
19
- mkdir -p "$LOGS_DIR"
20
-
21
- TODAY=$(date +"%Y-%m-%d")
22
- LOG_FILE="$LOGS_DIR/${TODAY}-session.md"
23
- TIMESTAMP=$(date +"%H:%M:%S")
24
-
25
- # ============================================================
26
- # JSONL에서 통계 추출
27
- # ============================================================
28
-
29
- TOTAL_EVENTS=$(wc -l < "$JSONL_FILE" | tr -d ' ')
30
-
31
- # 최소 이벤트 수 체크 (너무 짧은 세션은 스킵)
32
- if [ "$TOTAL_EVENTS" -lt 3 ]; then
33
- exit 0
34
- fi
35
-
36
- # 도구 사용 횟수
37
- TOOL_EVENTS=$(jq -r 'select(.event == "PostToolUse") | .tool' "$JSONL_FILE" 2>/dev/null | wc -l | tr -d ' ')
38
- FAILURES=$(jq -r 'select(.event == "PostToolUseFailure")' "$JSONL_FILE" 2>/dev/null | wc -l | tr -d ' ')
39
-
40
- # 서브에이전트 사용
41
- SUBAGENT_STARTS=$(jq -r 'select(.event == "SubagentStart") | .detail.subagent_type' "$JSONL_FILE" 2>/dev/null)
42
- SUBAGENT_COUNT=$(echo "$SUBAGENT_STARTS" | grep -c '.' 2>/dev/null || echo "0")
43
-
44
- # 도구별 횟수 (상위 5개)
45
- TOOL_BREAKDOWN=$(jq -r 'select(.event == "PostToolUse") | .tool' "$JSONL_FILE" 2>/dev/null \
46
- | sort | uniq -c | sort -rn | head -5 \
47
- | awk '{printf "%s(%d) ", $2, $1}')
48
-
49
- # 수정된 파일 목록
50
- FILES_MODIFIED=$(jq -r 'select(.event == "PostToolUse" and (.tool == "Write" or .tool == "Edit")) | .detail.file_path // empty' "$JSONL_FILE" 2>/dev/null \
51
- | sort -u)
52
-
53
- # 읽은 파일 목록 (상위 10개)
54
- FILES_READ=$(jq -r 'select(.event == "PostToolUse" and .tool == "Read") | .detail.file_path // empty' "$JSONL_FILE" 2>/dev/null \
55
- | sort -u | head -10)
56
-
57
- # Bash 커맨드 (상위 5개)
58
- BASH_COMMANDS=$(jq -r 'select(.event == "PostToolUse" and .tool == "Bash") | .detail.command // empty' "$JSONL_FILE" 2>/dev/null \
59
- | head -5)
60
-
61
- # 서브에이전트 상세
62
- SUBAGENT_DETAILS=$(jq -r 'select(.event == "SubagentStart") | "\(.detail.subagent_type): \(.detail.description // "")"' "$JSONL_FILE" 2>/dev/null)
63
-
64
- # 타임라인
65
- FIRST_TS=$(jq -r '.timestamp' "$JSONL_FILE" 2>/dev/null | head -1)
66
- LAST_TS=$(jq -r '.timestamp' "$JSONL_FILE" 2>/dev/null | tail -1)
67
-
68
- FIRST_TIME=$(echo "$FIRST_TS" | sed 's/.*T//;s/Z//')
69
- LAST_TIME=$(echo "$LAST_TS" | sed 's/.*T//;s/Z//')
70
-
71
- # ============================================================
72
- # 작업 로그 생성
73
- # ============================================================
74
-
75
- # 파일이 없으면 헤더 생성
76
- if [ ! -f "$LOG_FILE" ]; then
77
- cat > "$LOG_FILE" << EOF
78
- # session 작업 로그 - ${TODAY}
79
-
80
- > TimSquad Auto Work Log - Claude Code 세션 이벤트에서 자동 생성
81
-
82
- ---
83
-
84
- EOF
85
- fi
86
-
87
- # 로그 항목 추가
88
- {
89
- echo ""
90
- echo "## [$TIMESTAMP] work"
91
- echo ""
92
- echo "**Session:** \`$SESSION_SHORT\` ($FIRST_TIME ~ $LAST_TIME)"
93
- echo ""
94
- echo "### 세션 통계"
95
- echo "- 총 이벤트: $TOTAL_EVENTS"
96
- echo "- 도구 사용: $TOOL_EVENTS회"
97
- if [ "$FAILURES" -gt 0 ]; then
98
- echo "- 실패: ${FAILURES}회"
99
- fi
100
- if [ "$SUBAGENT_COUNT" -gt 0 ]; then
101
- echo "- 서브에이전트: ${SUBAGENT_COUNT}회"
102
- fi
103
- echo "- 도구 분포: $TOOL_BREAKDOWN"
104
- echo ""
105
-
106
- # 수정 파일
107
- if [ -n "$FILES_MODIFIED" ]; then
108
- echo "### 수정된 파일"
109
- echo "$FILES_MODIFIED" | while read -r f; do
110
- [ -n "$f" ] && echo "- \`$f\`"
111
- done
112
- echo ""
113
- fi
114
-
115
- # 서브에이전트 활동
116
- if [ -n "$SUBAGENT_DETAILS" ] && [ "$SUBAGENT_COUNT" -gt 0 ]; then
117
- echo "### 서브에이전트 활동"
118
- echo "$SUBAGENT_DETAILS" | while read -r line; do
119
- [ -n "$line" ] && echo "- $line"
120
- done
121
- echo ""
122
- fi
123
-
124
- # 주요 Bash 명령
125
- if [ -n "$BASH_COMMANDS" ]; then
126
- echo "### 주요 명령"
127
- echo '```'
128
- echo "$BASH_COMMANDS"
129
- echo '```'
130
- echo ""
131
- fi
132
-
133
- # 토큰 사용량 (SessionEnd 이벤트에서 추출)
134
- SESSION_END_USAGE=$(jq -c 'select(.event == "SessionEnd") | .total_usage // empty' "$JSONL_FILE" 2>/dev/null | head -1)
135
-
136
- if [ -n "$SESSION_END_USAGE" ] && [ "$SESSION_END_USAGE" != "{}" ]; then
137
- TOTAL_INPUT=$(echo "$SESSION_END_USAGE" | jq -r '.total_input // 0')
138
- TOTAL_OUTPUT=$(echo "$SESSION_END_USAGE" | jq -r '.total_output // 0')
139
- TOTAL_CACHE_CREATE=$(echo "$SESSION_END_USAGE" | jq -r '.total_cache_create // 0')
140
- TOTAL_CACHE_READ=$(echo "$SESSION_END_USAGE" | jq -r '.total_cache_read // 0')
141
- TOTAL_TURNS=$(echo "$SESSION_END_USAGE" | jq -r '.turns // 0')
142
-
143
- # cache hit rate 계산
144
- TOTAL_ALL_INPUT=$((TOTAL_INPUT + TOTAL_CACHE_CREATE + TOTAL_CACHE_READ))
145
- if [ "$TOTAL_ALL_INPUT" -gt 0 ]; then
146
- CACHE_HIT_RATE=$((TOTAL_CACHE_READ * 100 / TOTAL_ALL_INPUT))
147
- else
148
- CACHE_HIT_RATE=0
149
- fi
150
-
151
- echo "### 토큰 사용량"
152
- echo ""
153
- echo "| 항목 | 토큰 | 의미 |"
154
- echo "|------|------|------|"
155
- echo "| Input | $(printf "%'d" "$TOTAL_INPUT") | 새로 처리된 입력 (캐시 미스) |"
156
- echo "| Output | $(printf "%'d" "$TOTAL_OUTPUT") | 생성된 출력 (비용 주요 부분) |"
157
- echo "| Cache Create | $(printf "%'d" "$TOTAL_CACHE_CREATE") | 새로 캐시 저장 (첫 턴에 높음) |"
158
- echo "| Cache Read | $(printf "%'d" "$TOTAL_CACHE_READ") | 캐시 재사용 (높을수록 효율적) |"
159
- echo "| **Cache Hit Rate** | **${CACHE_HIT_RATE}%** | **80%+ 우수 / 60-80% 보통 / <60% 주의** |"
160
- echo "| Turns | $TOTAL_TURNS | API 호출 횟수 |"
161
- echo ""
162
- fi
163
-
164
- } >> "$LOG_FILE"
165
-
166
- # ============================================================
167
- # 품질 경고 (threshold 기반 자동 감지)
168
- # 토큰 비용: 0 - 순수 조건 체크
169
- # ============================================================
170
-
171
- ALERT_FILE="$LOGS_DIR/${TODAY}-alerts.md"
172
- ALERTS_FOUND=0
173
-
174
- # Alert 1: 도구 실패율 > 10%
175
- TOTAL_ATTEMPTS=$((TOOL_EVENTS + FAILURES))
176
- if [ "$TOTAL_ATTEMPTS" -gt 5 ]; then
177
- FAIL_RATE=$((FAILURES * 100 / TOTAL_ATTEMPTS))
178
- if [ "$FAIL_RATE" -gt 10 ]; then
179
- if [ "$ALERTS_FOUND" -eq 0 ] && [ ! -f "$ALERT_FILE" ]; then
180
- echo "# Quality Alerts - ${TODAY}" > "$ALERT_FILE"
181
- echo "" >> "$ALERT_FILE"
182
- echo "> TimSquad 자동 품질 경고 - threshold 초과 시 자동 생성" >> "$ALERT_FILE"
183
- echo "" >> "$ALERT_FILE"
184
- fi
185
- echo "- **[$TIMESTAMP]** Tool Failure Rate ${FAIL_RATE}% (> 10%) - 세션 \`$SESSION_SHORT\`" >> "$ALERT_FILE"
186
- echo " - 도구 실패 ${FAILURES}/${TOTAL_ATTEMPTS}회. 에이전트 프롬프트나 권한 설정 점검" >> "$ALERT_FILE"
187
- ALERTS_FOUND=1
188
- fi
189
- fi
190
-
191
- # Alert 2: Cache Hit Rate < 60% (토큰 데이터가 있을 때만)
192
- if [ -n "$SESSION_END_USAGE" ] && [ "$SESSION_END_USAGE" != "{}" ]; then
193
- if [ "$TOTAL_ALL_INPUT" -gt 0 ] && [ "$CACHE_HIT_RATE" -lt 60 ]; then
194
- if [ "$ALERTS_FOUND" -eq 0 ] && [ ! -f "$ALERT_FILE" ]; then
195
- echo "# Quality Alerts - ${TODAY}" > "$ALERT_FILE"
196
- echo "" >> "$ALERT_FILE"
197
- echo "> TimSquad 자동 품질 경고 - threshold 초과 시 자동 생성" >> "$ALERT_FILE"
198
- echo "" >> "$ALERT_FILE"
199
- fi
200
- echo "- **[$TIMESTAMP]** Cache Hit Rate ${CACHE_HIT_RATE}% (< 60%) - 세션 \`$SESSION_SHORT\`" >> "$ALERT_FILE"
201
- echo " - 프롬프트 구조 불안정. CLAUDE.md 또는 에이전트 프롬프트 검토" >> "$ALERT_FILE"
202
- ALERTS_FOUND=1
203
- fi
204
- fi
205
-
206
- # ============================================================
207
- # 자동 피드백 생성 (실패 패턴 감지)
208
- # 도구 실패 3회 이상 → 자동으로 FB-XXXX.json 생성
209
- # 토큰 비용: 0
210
- # ============================================================
211
-
212
- if [ "$FAILURES" -ge 3 ]; then
213
- FEEDBACK_DIR="$PROJECT_DIR/.timsquad/feedback"
214
- mkdir -p "$FEEDBACK_DIR"
215
-
216
- # 다음 피드백 번호 결정
217
- EXISTING_COUNT=$(ls "$FEEDBACK_DIR"/FB-*.json 2>/dev/null | wc -l | tr -d ' ')
218
- NEXT_NUM=$((EXISTING_COUNT + 1))
219
- FB_ID=$(printf "FB-%04d" "$NEXT_NUM")
220
- FB_FILE="$FEEDBACK_DIR/${FB_ID}.json"
221
-
222
- # 실패한 도구 목록 추출
223
- FAILED_TOOLS=$(jq -r 'select(.event == "PostToolUseFailure") | .tool // "unknown"' "$JSONL_FILE" 2>/dev/null \
224
- | sort | uniq -c | sort -rn | head -3 \
225
- | awk '{printf "%s(%d) ", $2, $1}')
226
-
227
- jq -n \
228
- --arg id "$FB_ID" \
229
- --arg ts "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
230
- --arg msg "세션 ${SESSION_SHORT}에서 도구 실패 ${FAILURES}회 감지. 실패 도구: ${FAILED_TOOLS}" \
231
- --arg trigger "tool_failure" \
232
- --arg session "$SESSION_SHORT" \
233
- '{
234
- id: $id,
235
- timestamp: $ts,
236
- type: "auto-feedback",
237
- level: 1,
238
- trigger: $trigger,
239
- message: $msg,
240
- routeTo: "developer",
241
- tags: ["auto-detected", "tool_failure", $session]
242
- }' > "$FB_FILE"
243
- fi
244
-
245
- exit 0