@ginkoai/cli 1.0.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/README.md +19 -0
  2. package/dist/analysis/project-analyzer.d.ts.map +1 -1
  3. package/dist/analysis/project-analyzer.js +68 -4
  4. package/dist/analysis/project-analyzer.js.map +1 -1
  5. package/dist/commands/architecture/architecture-pipeline-enhanced.d.ts.map +1 -1
  6. package/dist/commands/architecture/architecture-pipeline-enhanced.js +10 -6
  7. package/dist/commands/architecture/architecture-pipeline-enhanced.js.map +1 -1
  8. package/dist/commands/backlog/base.d.ts.map +1 -1
  9. package/dist/commands/backlog/base.js +3 -0
  10. package/dist/commands/backlog/base.js.map +1 -1
  11. package/dist/commands/backlog/create.js +20 -20
  12. package/dist/commands/backlog/create.js.map +1 -1
  13. package/dist/commands/backlog/index.d.ts.map +1 -1
  14. package/dist/commands/backlog/index.js +6 -1
  15. package/dist/commands/backlog/index.js.map +1 -1
  16. package/dist/commands/changelog/changelog-reflection.d.ts.map +1 -1
  17. package/dist/commands/changelog/changelog-reflection.js +7 -3
  18. package/dist/commands/changelog/changelog-reflection.js.map +1 -1
  19. package/dist/commands/charter.d.ts +28 -0
  20. package/dist/commands/charter.d.ts.map +1 -0
  21. package/dist/commands/charter.js +434 -0
  22. package/dist/commands/charter.js.map +1 -0
  23. package/dist/commands/documentation/documentation-pipeline.d.ts.map +1 -1
  24. package/dist/commands/documentation/documentation-pipeline.js +15 -7
  25. package/dist/commands/documentation/documentation-pipeline.js.map +1 -1
  26. package/dist/commands/git/git-pipeline.d.ts.map +1 -1
  27. package/dist/commands/git/git-pipeline.js +3 -2
  28. package/dist/commands/git/git-pipeline.js.map +1 -1
  29. package/dist/commands/graph/api-client.d.ts +212 -0
  30. package/dist/commands/graph/api-client.d.ts.map +1 -0
  31. package/dist/commands/graph/api-client.js +143 -0
  32. package/dist/commands/graph/api-client.js.map +1 -0
  33. package/dist/commands/graph/config.d.ts +82 -0
  34. package/dist/commands/graph/config.d.ts.map +1 -0
  35. package/dist/commands/graph/config.js +113 -0
  36. package/dist/commands/graph/config.js.map +1 -0
  37. package/dist/commands/graph/explore.d.ts +19 -0
  38. package/dist/commands/graph/explore.d.ts.map +1 -0
  39. package/dist/commands/graph/explore.js +117 -0
  40. package/dist/commands/graph/explore.js.map +1 -0
  41. package/dist/commands/graph/index.d.ts +17 -0
  42. package/dist/commands/graph/index.d.ts.map +1 -0
  43. package/dist/commands/graph/index.js +104 -0
  44. package/dist/commands/graph/index.js.map +1 -0
  45. package/dist/commands/graph/init.d.ts +21 -0
  46. package/dist/commands/graph/init.d.ts.map +1 -0
  47. package/dist/commands/graph/init.js +173 -0
  48. package/dist/commands/graph/init.js.map +1 -0
  49. package/dist/commands/graph/load.d.ts +21 -0
  50. package/dist/commands/graph/load.d.ts.map +1 -0
  51. package/dist/commands/graph/load.js +224 -0
  52. package/dist/commands/graph/load.js.map +1 -0
  53. package/dist/commands/graph/query.d.ts +23 -0
  54. package/dist/commands/graph/query.d.ts.map +1 -0
  55. package/dist/commands/graph/query.js +145 -0
  56. package/dist/commands/graph/query.js.map +1 -0
  57. package/dist/commands/graph/status.d.ts +15 -0
  58. package/dist/commands/graph/status.d.ts.map +1 -0
  59. package/dist/commands/graph/status.js +88 -0
  60. package/dist/commands/graph/status.js.map +1 -0
  61. package/dist/commands/handoff.d.ts +14 -5
  62. package/dist/commands/handoff.d.ts.map +1 -1
  63. package/dist/commands/handoff.js +84 -142
  64. package/dist/commands/handoff.js.map +1 -1
  65. package/dist/commands/init.d.ts.map +1 -1
  66. package/dist/commands/init.js +88 -41
  67. package/dist/commands/init.js.map +1 -1
  68. package/dist/commands/knowledge/create.d.ts +24 -0
  69. package/dist/commands/knowledge/create.d.ts.map +1 -0
  70. package/dist/commands/knowledge/create.js +180 -0
  71. package/dist/commands/knowledge/create.js.map +1 -0
  72. package/dist/commands/knowledge/graph.d.ts +21 -0
  73. package/dist/commands/knowledge/graph.d.ts.map +1 -0
  74. package/dist/commands/knowledge/graph.js +199 -0
  75. package/dist/commands/knowledge/graph.js.map +1 -0
  76. package/dist/commands/knowledge/index.d.ts +25 -0
  77. package/dist/commands/knowledge/index.d.ts.map +1 -0
  78. package/dist/commands/knowledge/index.js +121 -0
  79. package/dist/commands/knowledge/index.js.map +1 -0
  80. package/dist/commands/knowledge/search.d.ts +23 -0
  81. package/dist/commands/knowledge/search.d.ts.map +1 -0
  82. package/dist/commands/knowledge/search.js +157 -0
  83. package/dist/commands/knowledge/search.js.map +1 -0
  84. package/dist/commands/knowledge/sync.d.ts +28 -0
  85. package/dist/commands/knowledge/sync.d.ts.map +1 -0
  86. package/dist/commands/knowledge/sync.js +251 -0
  87. package/dist/commands/knowledge/sync.js.map +1 -0
  88. package/dist/commands/log.d.ts +32 -0
  89. package/dist/commands/log.d.ts.map +1 -0
  90. package/dist/commands/log.js +632 -0
  91. package/dist/commands/log.js.map +1 -0
  92. package/dist/commands/login.d.ts +27 -0
  93. package/dist/commands/login.d.ts.map +1 -0
  94. package/dist/commands/login.js +177 -0
  95. package/dist/commands/login.js.map +1 -0
  96. package/dist/commands/logout.d.ts +15 -0
  97. package/dist/commands/logout.d.ts.map +1 -0
  98. package/dist/commands/logout.js +31 -0
  99. package/dist/commands/logout.js.map +1 -0
  100. package/dist/commands/project/create.d.ts +22 -0
  101. package/dist/commands/project/create.d.ts.map +1 -0
  102. package/dist/commands/project/create.js +69 -0
  103. package/dist/commands/project/create.js.map +1 -0
  104. package/dist/commands/project/delete.d.ts +19 -0
  105. package/dist/commands/project/delete.d.ts.map +1 -0
  106. package/dist/commands/project/delete.js +73 -0
  107. package/dist/commands/project/delete.js.map +1 -0
  108. package/dist/commands/project/index.d.ts +22 -0
  109. package/dist/commands/project/index.d.ts.map +1 -0
  110. package/dist/commands/project/index.js +134 -0
  111. package/dist/commands/project/index.js.map +1 -0
  112. package/dist/commands/project/info.d.ts +15 -0
  113. package/dist/commands/project/info.d.ts.map +1 -0
  114. package/dist/commands/project/info.js +92 -0
  115. package/dist/commands/project/info.js.map +1 -0
  116. package/dist/commands/project/list.d.ts +20 -0
  117. package/dist/commands/project/list.d.ts.map +1 -0
  118. package/dist/commands/project/list.js +82 -0
  119. package/dist/commands/project/list.js.map +1 -0
  120. package/dist/commands/project/members.d.ts +27 -0
  121. package/dist/commands/project/members.d.ts.map +1 -0
  122. package/dist/commands/project/members.js +140 -0
  123. package/dist/commands/project/members.js.map +1 -0
  124. package/dist/commands/project/update.d.ts +24 -0
  125. package/dist/commands/project/update.d.ts.map +1 -0
  126. package/dist/commands/project/update.js +83 -0
  127. package/dist/commands/project/update.js.map +1 -0
  128. package/dist/commands/reflect.js +0 -3
  129. package/dist/commands/reflect.js.map +1 -1
  130. package/dist/commands/ship.d.ts +3 -1
  131. package/dist/commands/ship.d.ts.map +1 -1
  132. package/dist/commands/ship.js +100 -9
  133. package/dist/commands/ship.js.map +1 -1
  134. package/dist/commands/start/index.d.ts.map +1 -1
  135. package/dist/commands/start/index.js +5 -3
  136. package/dist/commands/start/index.js.map +1 -1
  137. package/dist/commands/start/start-reflection.d.ts +2 -1
  138. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  139. package/dist/commands/start/start-reflection.js +265 -43
  140. package/dist/commands/start/start-reflection.js.map +1 -1
  141. package/dist/commands/status.d.ts +1 -1
  142. package/dist/commands/status.d.ts.map +1 -1
  143. package/dist/commands/status.js +41 -1
  144. package/dist/commands/status.js.map +1 -1
  145. package/dist/commands/team/create.d.ts +15 -0
  146. package/dist/commands/team/create.d.ts.map +1 -0
  147. package/dist/commands/team/create.js +48 -0
  148. package/dist/commands/team/create.js.map +1 -0
  149. package/dist/commands/team/index.d.ts +22 -0
  150. package/dist/commands/team/index.d.ts.map +1 -0
  151. package/dist/commands/team/index.js +109 -0
  152. package/dist/commands/team/index.js.map +1 -0
  153. package/dist/commands/team/list.d.ts +15 -0
  154. package/dist/commands/team/list.d.ts.map +1 -0
  155. package/dist/commands/team/list.js +67 -0
  156. package/dist/commands/team/list.js.map +1 -0
  157. package/dist/commands/team/members.d.ts +27 -0
  158. package/dist/commands/team/members.d.ts.map +1 -0
  159. package/dist/commands/team/members.js +135 -0
  160. package/dist/commands/team/members.js.map +1 -0
  161. package/dist/commands/team/projects.d.ts +19 -0
  162. package/dist/commands/team/projects.d.ts.map +1 -0
  163. package/dist/commands/team/projects.js +107 -0
  164. package/dist/commands/team/projects.js.map +1 -0
  165. package/dist/commands/team.d.ts +22 -0
  166. package/dist/commands/team.d.ts.map +1 -0
  167. package/dist/commands/team.js +238 -0
  168. package/dist/commands/team.js.map +1 -0
  169. package/dist/commands/testing/testing-pipeline-enhanced.d.ts.map +1 -1
  170. package/dist/commands/testing/testing-pipeline-enhanced.js +5 -3
  171. package/dist/commands/testing/testing-pipeline-enhanced.js.map +1 -1
  172. package/dist/commands/testing/testing-pipeline.d.ts.map +1 -1
  173. package/dist/commands/testing/testing-pipeline.js +5 -3
  174. package/dist/commands/testing/testing-pipeline.js.map +1 -1
  175. package/dist/commands/whoami.d.ts +15 -0
  176. package/dist/commands/whoami.d.ts.map +1 -0
  177. package/dist/commands/whoami.js +38 -0
  178. package/dist/commands/whoami.js.map +1 -0
  179. package/dist/core/reflection-pattern.d.ts +1 -1
  180. package/dist/core/reflection-pattern.d.ts.map +1 -1
  181. package/dist/core/reflection-pattern.js +2 -12
  182. package/dist/core/reflection-pattern.js.map +1 -1
  183. package/dist/core/session-log-manager.d.ts +44 -4
  184. package/dist/core/session-log-manager.d.ts.map +1 -1
  185. package/dist/core/session-log-manager.js +132 -31
  186. package/dist/core/session-log-manager.js.map +1 -1
  187. package/dist/index.d.ts +1 -1
  188. package/dist/index.js +116 -17
  189. package/dist/index.js.map +1 -1
  190. package/dist/lib/api/projects-client.d.ts +119 -0
  191. package/dist/lib/api/projects-client.d.ts.map +1 -0
  192. package/dist/lib/api/projects-client.js +125 -0
  193. package/dist/lib/api/projects-client.js.map +1 -0
  194. package/dist/lib/api/teams-client.d.ts +73 -0
  195. package/dist/lib/api/teams-client.d.ts.map +1 -0
  196. package/dist/lib/api/teams-client.js +68 -0
  197. package/dist/lib/api/teams-client.js.map +1 -0
  198. package/dist/lib/charter/charter-editor.d.ts +60 -0
  199. package/dist/lib/charter/charter-editor.d.ts.map +1 -0
  200. package/dist/lib/charter/charter-editor.js +559 -0
  201. package/dist/lib/charter/charter-editor.js.map +1 -0
  202. package/dist/lib/charter/charter-storage.d.ts +92 -0
  203. package/dist/lib/charter/charter-storage.d.ts.map +1 -0
  204. package/dist/lib/charter/charter-storage.js +501 -0
  205. package/dist/lib/charter/charter-storage.js.map +1 -0
  206. package/dist/lib/charter/charter-synthesizer.d.ts +94 -0
  207. package/dist/lib/charter/charter-synthesizer.d.ts.map +1 -0
  208. package/dist/lib/charter/charter-synthesizer.js +521 -0
  209. package/dist/lib/charter/charter-synthesizer.js.map +1 -0
  210. package/dist/lib/charter/charter-versioning.d.ts +57 -0
  211. package/dist/lib/charter/charter-versioning.d.ts.map +1 -0
  212. package/dist/lib/charter/charter-versioning.js +283 -0
  213. package/dist/lib/charter/charter-versioning.js.map +1 -0
  214. package/dist/lib/charter/confidence-scorer.d.ts +263 -0
  215. package/dist/lib/charter/confidence-scorer.d.ts.map +1 -0
  216. package/dist/lib/charter/confidence-scorer.js +737 -0
  217. package/dist/lib/charter/confidence-scorer.js.map +1 -0
  218. package/dist/lib/charter/conversation-context.d.ts +99 -0
  219. package/dist/lib/charter/conversation-context.d.ts.map +1 -0
  220. package/dist/lib/charter/conversation-context.js +297 -0
  221. package/dist/lib/charter/conversation-context.js.map +1 -0
  222. package/dist/lib/charter/conversation-facilitator.d.ts +117 -0
  223. package/dist/lib/charter/conversation-facilitator.d.ts.map +1 -0
  224. package/dist/lib/charter/conversation-facilitator.js +360 -0
  225. package/dist/lib/charter/conversation-facilitator.js.map +1 -0
  226. package/dist/lib/charter/question-templates.d.ts +82 -0
  227. package/dist/lib/charter/question-templates.d.ts.map +1 -0
  228. package/dist/lib/charter/question-templates.js +355 -0
  229. package/dist/lib/charter/question-templates.js.map +1 -0
  230. package/dist/lib/charter/signal-detection.d.ts +49 -0
  231. package/dist/lib/charter/signal-detection.d.ts.map +1 -0
  232. package/dist/lib/charter/signal-detection.js +338 -0
  233. package/dist/lib/charter/signal-detection.js.map +1 -0
  234. package/dist/lib/context-loader-events.d.ts +111 -0
  235. package/dist/lib/context-loader-events.d.ts.map +1 -0
  236. package/dist/lib/context-loader-events.js +475 -0
  237. package/dist/lib/context-loader-events.js.map +1 -0
  238. package/dist/lib/event-logger.d.ts +64 -0
  239. package/dist/lib/event-logger.d.ts.map +1 -0
  240. package/dist/lib/event-logger.js +197 -0
  241. package/dist/lib/event-logger.js.map +1 -0
  242. package/dist/lib/event-queue.d.ts +104 -0
  243. package/dist/lib/event-queue.d.ts.map +1 -0
  244. package/dist/lib/event-queue.js +274 -0
  245. package/dist/lib/event-queue.js.map +1 -0
  246. package/dist/lib/session-cursor.d.ts +80 -0
  247. package/dist/lib/session-cursor.d.ts.map +1 -0
  248. package/dist/lib/session-cursor.js +250 -0
  249. package/dist/lib/session-cursor.js.map +1 -0
  250. package/dist/lib/sync/conflict-detector.d.ts +41 -0
  251. package/dist/lib/sync/conflict-detector.d.ts.map +1 -0
  252. package/dist/lib/sync/conflict-detector.js +124 -0
  253. package/dist/lib/sync/conflict-detector.js.map +1 -0
  254. package/dist/lib/sync/logger.d.ts +89 -0
  255. package/dist/lib/sync/logger.d.ts.map +1 -0
  256. package/dist/lib/sync/logger.js +202 -0
  257. package/dist/lib/sync/logger.js.map +1 -0
  258. package/dist/lib/sync/parser.d.ts +32 -0
  259. package/dist/lib/sync/parser.d.ts.map +1 -0
  260. package/dist/lib/sync/parser.js +180 -0
  261. package/dist/lib/sync/parser.js.map +1 -0
  262. package/dist/lib/sync/scanner.d.ts +34 -0
  263. package/dist/lib/sync/scanner.d.ts.map +1 -0
  264. package/dist/lib/sync/scanner.js +97 -0
  265. package/dist/lib/sync/scanner.js.map +1 -0
  266. package/dist/lib/sync/uploader.d.ts +33 -0
  267. package/dist/lib/sync/uploader.d.ts.map +1 -0
  268. package/dist/lib/sync/uploader.js +188 -0
  269. package/dist/lib/sync/uploader.js.map +1 -0
  270. package/dist/lib/write-dispatcher/adapters/graph-adapter.d.ts +77 -0
  271. package/dist/lib/write-dispatcher/adapters/graph-adapter.d.ts.map +1 -0
  272. package/dist/lib/write-dispatcher/adapters/graph-adapter.js +178 -0
  273. package/dist/lib/write-dispatcher/adapters/graph-adapter.js.map +1 -0
  274. package/dist/lib/write-dispatcher/adapters/local-adapter.d.ts +133 -0
  275. package/dist/lib/write-dispatcher/adapters/local-adapter.d.ts.map +1 -0
  276. package/dist/lib/write-dispatcher/adapters/local-adapter.js +324 -0
  277. package/dist/lib/write-dispatcher/adapters/local-adapter.js.map +1 -0
  278. package/dist/lib/write-dispatcher/write-dispatcher.d.ts +151 -0
  279. package/dist/lib/write-dispatcher/write-dispatcher.d.ts.map +1 -0
  280. package/dist/lib/write-dispatcher/write-dispatcher.js +197 -0
  281. package/dist/lib/write-dispatcher/write-dispatcher.js.map +1 -0
  282. package/dist/types/charter.d.ts +330 -0
  283. package/dist/types/charter.d.ts.map +1 -0
  284. package/dist/types/charter.js +76 -0
  285. package/dist/types/charter.js.map +1 -0
  286. package/dist/types/config.d.ts +65 -17
  287. package/dist/types/config.d.ts.map +1 -1
  288. package/dist/types/config.js +50 -21
  289. package/dist/types/config.js.map +1 -1
  290. package/dist/utils/api-client.d.ts +36 -0
  291. package/dist/utils/api-client.d.ts.map +1 -0
  292. package/dist/utils/api-client.js +97 -0
  293. package/dist/utils/api-client.js.map +1 -0
  294. package/dist/utils/auth-storage.d.ts +56 -0
  295. package/dist/utils/auth-storage.d.ts.map +1 -0
  296. package/dist/utils/auth-storage.js +133 -0
  297. package/dist/utils/auth-storage.js.map +1 -0
  298. package/dist/utils/cleanup.d.ts +21 -0
  299. package/dist/utils/cleanup.d.ts.map +1 -0
  300. package/dist/utils/cleanup.js +122 -0
  301. package/dist/utils/cleanup.js.map +1 -0
  302. package/dist/utils/config-loader.d.ts +76 -0
  303. package/dist/utils/config-loader.d.ts.map +1 -0
  304. package/dist/utils/config-loader.js +269 -0
  305. package/dist/utils/config-loader.js.map +1 -0
  306. package/dist/utils/context-loader.d.ts +154 -0
  307. package/dist/utils/context-loader.d.ts.map +1 -0
  308. package/dist/utils/context-loader.js +411 -0
  309. package/dist/utils/context-loader.js.map +1 -0
  310. package/dist/utils/dispatcher-logger.d.ts +30 -0
  311. package/dist/utils/dispatcher-logger.d.ts.map +1 -0
  312. package/dist/utils/dispatcher-logger.js +128 -0
  313. package/dist/utils/dispatcher-logger.js.map +1 -0
  314. package/dist/utils/ginko-root.d.ts +3 -2
  315. package/dist/utils/ginko-root.d.ts.map +1 -1
  316. package/dist/utils/ginko-root.js +35 -2
  317. package/dist/utils/ginko-root.js.map +1 -1
  318. package/dist/utils/helpers.d.ts +1 -0
  319. package/dist/utils/helpers.d.ts.map +1 -1
  320. package/dist/utils/helpers.js +3 -0
  321. package/dist/utils/helpers.js.map +1 -1
  322. package/dist/utils/log-quality.d.ts +55 -0
  323. package/dist/utils/log-quality.d.ts.map +1 -0
  324. package/dist/utils/log-quality.js +297 -0
  325. package/dist/utils/log-quality.js.map +1 -0
  326. package/dist/utils/reference-parser.d.ts +164 -0
  327. package/dist/utils/reference-parser.d.ts.map +1 -0
  328. package/dist/utils/reference-parser.js +363 -0
  329. package/dist/utils/reference-parser.js.map +1 -0
  330. package/dist/utils/synthesis.d.ts +180 -0
  331. package/dist/utils/synthesis.d.ts.map +1 -0
  332. package/dist/utils/synthesis.js +724 -0
  333. package/dist/utils/synthesis.js.map +1 -0
  334. package/dist/utils/team-awareness.d.ts +127 -0
  335. package/dist/utils/team-awareness.d.ts.map +1 -0
  336. package/dist/utils/team-awareness.js +385 -0
  337. package/dist/utils/team-awareness.js.map +1 -0
  338. package/package.json +6 -4
  339. package/dist/commands/handoff/handoff-reflection-pipeline.d.ts +0 -106
  340. package/dist/commands/handoff/handoff-reflection-pipeline.d.ts.map +0 -1
  341. package/dist/commands/handoff/handoff-reflection-pipeline.js +0 -534
  342. package/dist/commands/handoff/handoff-reflection-pipeline.js.map +0 -1
  343. package/dist/commands/handoff/handoff-save.d.ts +0 -16
  344. package/dist/commands/handoff/handoff-save.d.ts.map +0 -1
  345. package/dist/commands/handoff/handoff-save.js +0 -72
  346. package/dist/commands/handoff/handoff-save.js.map +0 -1
  347. package/dist/commands/handoff/index.d.ts +0 -19
  348. package/dist/commands/handoff/index.d.ts.map +0 -1
  349. package/dist/commands/handoff/index.js +0 -55
  350. package/dist/commands/handoff/index.js.map +0 -1
  351. package/dist/commands/handoff-ai-orig.d.ts +0 -27
  352. package/dist/commands/handoff-ai-orig.d.ts.map +0 -1
  353. package/dist/commands/handoff-ai-orig.js +0 -405
  354. package/dist/commands/handoff-ai-orig.js.map +0 -1
  355. package/dist/commands/handoff-ai.d.ts +0 -27
  356. package/dist/commands/handoff-ai.d.ts.map +0 -1
  357. package/dist/commands/handoff-ai.js +0 -405
  358. package/dist/commands/handoff-ai.js.map +0 -1
  359. package/dist/commands/handoff-enhanced-orig.d.ts +0 -25
  360. package/dist/commands/handoff-enhanced-orig.d.ts.map +0 -1
  361. package/dist/commands/handoff-enhanced-orig.js +0 -349
  362. package/dist/commands/handoff-enhanced-orig.js.map +0 -1
  363. package/dist/commands/handoff-enhanced.d.ts +0 -25
  364. package/dist/commands/handoff-enhanced.d.ts.map +0 -1
  365. package/dist/commands/handoff-enhanced.js +0 -349
  366. package/dist/commands/handoff-enhanced.js.map +0 -1
  367. package/dist/commands/handoff-orig.d.ts +0 -10
  368. package/dist/commands/handoff-orig.d.ts.map +0 -1
  369. package/dist/commands/handoff-orig.js +0 -167
  370. package/dist/commands/handoff-orig.js.map +0 -1
  371. package/dist/commands/init-enhanced.d.ts +0 -20
  372. package/dist/commands/init-enhanced.d.ts.map +0 -1
  373. package/dist/commands/init-enhanced.js +0 -430
  374. package/dist/commands/init-enhanced.js.map +0 -1
  375. package/dist/commands/prd/prd-reflection-enhanced.d.ts +0 -63
  376. package/dist/commands/prd/prd-reflection-enhanced.d.ts.map +0 -1
  377. package/dist/commands/prd/prd-reflection-enhanced.js +0 -310
  378. package/dist/commands/prd/prd-reflection-enhanced.js.map +0 -1
  379. package/dist/commands/start-enhanced.d.ts +0 -19
  380. package/dist/commands/start-enhanced.d.ts.map +0 -1
  381. package/dist/commands/start-enhanced.js +0 -434
  382. package/dist/commands/start-enhanced.js.map +0 -1
  383. package/dist/commands/start.d.ts +0 -10
  384. package/dist/commands/start.d.ts.map +0 -1
  385. package/dist/commands/start.js +0 -119
  386. package/dist/commands/start.js.map +0 -1
  387. package/dist/core/config/config-aware-reflection.d.ts +0 -37
  388. package/dist/core/config/config-aware-reflection.d.ts.map +0 -1
  389. package/dist/core/config/config-aware-reflection.js +0 -97
  390. package/dist/core/config/config-aware-reflection.js.map +0 -1
  391. package/dist/core/config/config-loader.d.ts +0 -154
  392. package/dist/core/config/config-loader.d.ts.map +0 -1
  393. package/dist/core/config/config-loader.js +0 -424
  394. package/dist/core/config/config-loader.js.map +0 -1
  395. package/dist/core/config/config-migrator.d.ts +0 -150
  396. package/dist/core/config/config-migrator.d.ts.map +0 -1
  397. package/dist/core/config/config-migrator.js +0 -423
  398. package/dist/core/config/config-migrator.js.map +0 -1
  399. package/dist/core/config/config-schema.d.ts +0 -276
  400. package/dist/core/config/config-schema.d.ts.map +0 -1
  401. package/dist/core/config/config-schema.js +0 -277
  402. package/dist/core/config/config-schema.js.map +0 -1
  403. package/dist/core/config/index.d.ts +0 -260
  404. package/dist/core/config/index.d.ts.map +0 -1
  405. package/dist/core/config/index.js +0 -283
  406. package/dist/core/config/index.js.map +0 -1
  407. package/dist/core/config/interactive-config.d.ts +0 -76
  408. package/dist/core/config/interactive-config.d.ts.map +0 -1
  409. package/dist/core/config/interactive-config.js +0 -315
  410. package/dist/core/config/interactive-config.js.map +0 -1
  411. package/dist/core/config/path-config.d.ts +0 -121
  412. package/dist/core/config/path-config.d.ts.map +0 -1
  413. package/dist/core/config/path-config.js +0 -210
  414. package/dist/core/config/path-config.js.map +0 -1
  415. package/dist/core/config/path-resolver.d.ts +0 -151
  416. package/dist/core/config/path-resolver.d.ts.map +0 -1
  417. package/dist/core/config/path-resolver.js +0 -343
  418. package/dist/core/config/path-resolver.js.map +0 -1
  419. package/dist/core/config/project-detector.d.ts +0 -58
  420. package/dist/core/config/project-detector.d.ts.map +0 -1
  421. package/dist/core/config/project-detector.js +0 -310
  422. package/dist/core/config/project-detector.js.map +0 -1
  423. package/dist/core/config-backup/config-aware-reflection.d.ts +0 -37
  424. package/dist/core/config-backup/config-aware-reflection.d.ts.map +0 -1
  425. package/dist/core/config-backup/config-aware-reflection.js +0 -97
  426. package/dist/core/config-backup/config-aware-reflection.js.map +0 -1
  427. package/dist/core/config-backup/config-loader.d.ts +0 -71
  428. package/dist/core/config-backup/config-loader.d.ts.map +0 -1
  429. package/dist/core/config-backup/config-loader.js +0 -288
  430. package/dist/core/config-backup/config-loader.js.map +0 -1
  431. package/dist/core/config-backup/interactive-config.d.ts +0 -76
  432. package/dist/core/config-backup/interactive-config.d.ts.map +0 -1
  433. package/dist/core/config-backup/interactive-config.js +0 -315
  434. package/dist/core/config-backup/interactive-config.js.map +0 -1
  435. package/dist/core/config-backup/path-config.d.ts +0 -121
  436. package/dist/core/config-backup/path-config.d.ts.map +0 -1
  437. package/dist/core/config-backup/path-config.js +0 -210
  438. package/dist/core/config-backup/path-config.js.map +0 -1
  439. package/dist/core/config-backup/project-detector.d.ts +0 -58
  440. package/dist/core/config-backup/project-detector.d.ts.map +0 -1
  441. package/dist/core/config-backup/project-detector.js +0 -310
  442. package/dist/core/config-backup/project-detector.js.map +0 -1
  443. package/dist/core/documents/document-manager.d.ts +0 -97
  444. package/dist/core/documents/document-manager.d.ts.map +0 -1
  445. package/dist/core/documents/document-manager.js +0 -441
  446. package/dist/core/documents/document-manager.js.map +0 -1
  447. package/dist/core/documents/document-migrator.d.ts +0 -138
  448. package/dist/core/documents/document-migrator.d.ts.map +0 -1
  449. package/dist/core/documents/document-migrator.js +0 -349
  450. package/dist/core/documents/document-migrator.js.map +0 -1
  451. package/dist/core/documents/document-namer.d.ts +0 -111
  452. package/dist/core/documents/document-namer.d.ts.map +0 -1
  453. package/dist/core/documents/document-namer.js +0 -225
  454. package/dist/core/documents/document-namer.js.map +0 -1
  455. package/dist/core/documents/examples.d.ts +0 -74
  456. package/dist/core/documents/examples.d.ts.map +0 -1
  457. package/dist/core/documents/examples.js +0 -273
  458. package/dist/core/documents/examples.js.map +0 -1
  459. package/dist/core/documents/file-system.d.ts +0 -93
  460. package/dist/core/documents/file-system.d.ts.map +0 -1
  461. package/dist/core/documents/file-system.js +0 -432
  462. package/dist/core/documents/file-system.js.map +0 -1
  463. package/dist/core/documents/index.d.ts +0 -97
  464. package/dist/core/documents/index.d.ts.map +0 -1
  465. package/dist/core/documents/index.js +0 -119
  466. package/dist/core/documents/index.js.map +0 -1
  467. package/dist/core/documents/markdown-processor.d.ts +0 -84
  468. package/dist/core/documents/markdown-processor.d.ts.map +0 -1
  469. package/dist/core/documents/markdown-processor.js +0 -302
  470. package/dist/core/documents/markdown-processor.js.map +0 -1
  471. package/dist/core/documents/sequence-manager.d.ts +0 -107
  472. package/dist/core/documents/sequence-manager.d.ts.map +0 -1
  473. package/dist/core/documents/sequence-manager.js +0 -246
  474. package/dist/core/documents/sequence-manager.js.map +0 -1
  475. package/dist/core/documents/template-engine.d.ts +0 -101
  476. package/dist/core/documents/template-engine.d.ts.map +0 -1
  477. package/dist/core/documents/template-engine.js +0 -440
  478. package/dist/core/documents/template-engine.js.map +0 -1
  479. package/dist/core/platform/hook-migration.d.ts +0 -73
  480. package/dist/core/platform/hook-migration.d.ts.map +0 -1
  481. package/dist/core/platform/hook-migration.js +0 -339
  482. package/dist/core/platform/hook-migration.js.map +0 -1
  483. package/dist/core/platform/hook-migrator.d.ts +0 -49
  484. package/dist/core/platform/hook-migrator.d.ts.map +0 -1
  485. package/dist/core/platform/hook-migrator.js +0 -305
  486. package/dist/core/platform/hook-migrator.js.map +0 -1
  487. package/dist/core/platform/path-resolver.d.ts +0 -120
  488. package/dist/core/platform/path-resolver.d.ts.map +0 -1
  489. package/dist/core/platform/path-resolver.js +0 -339
  490. package/dist/core/platform/path-resolver.js.map +0 -1
  491. package/dist/core/platform/platform-templates.d.ts +0 -62
  492. package/dist/core/platform/platform-templates.d.ts.map +0 -1
  493. package/dist/core/platform/platform-templates.js +0 -364
  494. package/dist/core/platform/platform-templates.js.map +0 -1
  495. package/dist/core/pressure-monitor.d.ts +0 -76
  496. package/dist/core/pressure-monitor.d.ts.map +0 -1
  497. package/dist/core/pressure-monitor.js +0 -156
  498. package/dist/core/pressure-monitor.js.map +0 -1
  499. package/dist/core/validators/git-validator.test.d.ts +0 -12
  500. package/dist/core/validators/git-validator.test.d.ts.map +0 -1
  501. package/dist/core/validators/git-validator.test.js +0 -40
  502. package/dist/core/validators/git-validator.test.js.map +0 -1
  503. package/dist/core/validators/temp_index.d.ts +0 -56
  504. package/dist/core/validators/temp_index.d.ts.map +0 -1
  505. package/dist/core/validators/temp_index.js +0 -94
  506. package/dist/core/validators/temp_index.js.map +0 -1
@@ -0,0 +1,632 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-10-22
5
+ * @tags: [session-logging, defensive-logging, adr-033, references, task-010]
6
+ * @related: [../core/session-log-manager.ts, start/start-reflection.ts, ../utils/reference-parser.ts]
7
+ * @priority: critical
8
+ * @complexity: low
9
+ * @dependencies: [chalk, commander, session-log-manager, reference-parser]
10
+ */
11
+ import chalk from 'chalk';
12
+ import prompts from 'prompts';
13
+ import { v4 as uuidv4 } from 'uuid';
14
+ import { SessionLogManager } from '../core/session-log-manager.js';
15
+ import { getGinkoDir, getUserEmail } from '../utils/helpers.js';
16
+ import { detectGitContext, autoDetectFiles, validateEntry, scoreSessionLog, suggestInsights } from '../utils/log-quality.js';
17
+ import { extractReferences, validateReferences, formatReferenceChain, getReferenceChain } from '../utils/reference-parser.js';
18
+ import { ModuleGenerator } from '../services/module-generator.js';
19
+ import { initializeWriteDispatcher, appendLogEntry } from '../utils/dispatcher-logger.js';
20
+ import { logEvent as logEventToStream } from '../lib/event-logger.js';
21
+ import * as path from 'path';
22
+ import { requireAuth } from '../utils/auth-storage.js';
23
+ /**
24
+ * Log an event to the current session
25
+ * Part of ADR-033 defensive logging strategy
26
+ */
27
+ export async function logCommand(description, options) {
28
+ try {
29
+ // Require authentication
30
+ await requireAuth('log');
31
+ // Get session directory
32
+ const ginkoDir = await getGinkoDir();
33
+ const userEmail = await getUserEmail();
34
+ const userSlug = userEmail.replace('@', '-at-').replace(/\./g, '-');
35
+ const sessionDir = path.join(ginkoDir, 'sessions', userSlug);
36
+ // Check if session log exists
37
+ const hasLog = await SessionLogManager.hasSessionLog(sessionDir);
38
+ if (!hasLog) {
39
+ console.error(chalk.red('āŒ No active session log found.'));
40
+ console.error(chalk.dim(' Run `ginko start` first to create a session.'));
41
+ process.exit(1);
42
+ }
43
+ // Initialize WriteDispatcher for graph writes (if enabled)
44
+ await initializeWriteDispatcher(ginkoDir);
45
+ // Handle --validate flag: check log quality
46
+ if (options.validate) {
47
+ await validateSessionLog(sessionDir);
48
+ return;
49
+ }
50
+ // Handle --show flag: display current session log
51
+ if (options.show) {
52
+ await showSessionLog(sessionDir);
53
+ return;
54
+ }
55
+ // Handle --refs flag: show all references in session
56
+ if (options.refs) {
57
+ await showSessionReferences(sessionDir);
58
+ return;
59
+ }
60
+ // Parse and validate category
61
+ let category = (options.category || 'feature');
62
+ const validCategories = ['fix', 'feature', 'decision', 'insight', 'git', 'achievement'];
63
+ if (!validCategories.includes(category)) {
64
+ console.error(chalk.red(`āŒ Invalid category: ${category}`));
65
+ console.error(chalk.dim(` Valid categories: ${validCategories.join(', ')}`));
66
+ process.exit(1);
67
+ }
68
+ // Parse and validate impact
69
+ let impact = (options.impact || 'medium');
70
+ const validImpacts = ['high', 'medium', 'low'];
71
+ if (!validImpacts.includes(impact)) {
72
+ console.error(chalk.red(`āŒ Invalid impact: ${impact}`));
73
+ console.error(chalk.dim(` Valid impacts: ${validImpacts.join(', ')}`));
74
+ process.exit(1);
75
+ }
76
+ // Enhanced description with interactive prompts (unless --quick mode)
77
+ let enhancedDescription = description;
78
+ if (!options.quick) {
79
+ // Prompt for WHY on features
80
+ if (category === 'feature' && options.why !== false) {
81
+ console.log(chalk.cyan('\nšŸ’” Quality Tip: Feature entries should explain WHY (what problem it solves)\n'));
82
+ const answer = await prompts({
83
+ type: 'text',
84
+ name: 'why',
85
+ message: 'What problem does this feature solve?',
86
+ initial: ''
87
+ });
88
+ if (answer.why && answer.why.trim()) {
89
+ enhancedDescription += `\nProblem: ${answer.why.trim()}`;
90
+ }
91
+ }
92
+ // Prompt for alternatives on decisions
93
+ if (category === 'decision') {
94
+ console.log(chalk.cyan('\nšŸ’” Quality Tip: Decision entries should mention alternatives considered\n'));
95
+ const answer = await prompts({
96
+ type: 'text',
97
+ name: 'alternatives',
98
+ message: 'What alternatives were considered?',
99
+ initial: ''
100
+ });
101
+ if (answer.alternatives && answer.alternatives.trim()) {
102
+ enhancedDescription += `\nAlternatives: ${answer.alternatives.trim()}`;
103
+ }
104
+ }
105
+ // Prompt for root cause on fixes
106
+ if (category === 'fix') {
107
+ console.log(chalk.cyan('\nšŸ’” Quality Tip: Fix entries should include root cause\n'));
108
+ const answer = await prompts({
109
+ type: 'text',
110
+ name: 'rootCause',
111
+ message: 'What was the root cause?',
112
+ initial: ''
113
+ });
114
+ if (answer.rootCause && answer.rootCause.trim()) {
115
+ enhancedDescription += `\nRoot cause: ${answer.rootCause.trim()}`;
116
+ }
117
+ }
118
+ }
119
+ // Auto-detect files from git if not provided
120
+ let files = options.files
121
+ ? options.files.split(',').map(f => f.trim())
122
+ : undefined;
123
+ if (!files || files.length === 0) {
124
+ const detectedFiles = await autoDetectFiles();
125
+ if (detectedFiles.length > 0 && !options.quick) {
126
+ console.log(chalk.cyan(`\nšŸ“ Detected ${detectedFiles.length} modified files from git\n`));
127
+ const answer = await prompts({
128
+ type: 'confirm',
129
+ name: 'useDetected',
130
+ message: 'Include these files in the log entry?',
131
+ initial: true
132
+ });
133
+ if (answer.useDetected) {
134
+ files = detectedFiles.slice(0, 5); // Limit to 5 most relevant
135
+ }
136
+ }
137
+ }
138
+ // Auto-detect references from description (TASK-010)
139
+ const references = extractReferences(enhancedDescription);
140
+ if (references.length > 0 && !options.quick) {
141
+ console.log(chalk.cyan(`\nšŸ”— Detected ${references.length} reference(s): ${references.map(r => r.rawText).join(', ')}\n`));
142
+ // Validate references asynchronously (non-blocking)
143
+ const refValidation = await validateReferences(references);
144
+ if (refValidation.broken.length > 0) {
145
+ console.log(chalk.yellow('āš ļø Some references could not be resolved:'));
146
+ for (const brokenRef of refValidation.broken) {
147
+ console.log(chalk.dim(` - ${brokenRef.rawText} (target not found)`));
148
+ }
149
+ console.log(chalk.dim('\n This is just a warning - logging will continue.\n'));
150
+ }
151
+ }
152
+ // Create log entry
153
+ const entry = {
154
+ timestamp: new Date().toISOString(),
155
+ category,
156
+ description: enhancedDescription,
157
+ files,
158
+ impact
159
+ };
160
+ // Validate entry quality
161
+ const validation = validateEntry(entry);
162
+ if (validation.warnings.length > 0 && !options.quick) {
163
+ console.log(chalk.yellow('\nāš ļø Quality Warnings:'));
164
+ for (const warning of validation.warnings) {
165
+ console.log(chalk.dim(` - ${warning}`));
166
+ }
167
+ const answer = await prompts({
168
+ type: 'confirm',
169
+ name: 'continue',
170
+ message: 'Continue with this entry?',
171
+ initial: true
172
+ });
173
+ if (!answer.continue) {
174
+ console.log(chalk.yellow('Entry cancelled.'));
175
+ return;
176
+ }
177
+ }
178
+ // Append to session log (via dispatcher if enabled, local fallback)
179
+ await appendLogEntry(sessionDir, entry, userEmail);
180
+ // ALSO log to event stream (ADR-043 dual-write)
181
+ try {
182
+ const eventEntry = {
183
+ category,
184
+ description: enhancedDescription,
185
+ files,
186
+ impact,
187
+ shared: options.shared || false
188
+ };
189
+ await logEventToStream(eventEntry);
190
+ }
191
+ catch (error) {
192
+ // Event stream logging is non-critical, don't block on failure
193
+ console.warn(chalk.yellow('⚠ Event stream logging failed (session log preserved)'));
194
+ console.warn(chalk.dim(` ${error instanceof Error ? error.message : String(error)}`));
195
+ }
196
+ console.log(chalk.green(`\nāœ“ Logged ${category} event`));
197
+ if (files && files.length > 0) {
198
+ console.log(chalk.dim(` Files: ${files.join(', ')}`));
199
+ }
200
+ console.log(chalk.dim(` Impact: ${impact}`));
201
+ // Show reference chains if detected
202
+ if (references.length > 0) {
203
+ console.log(chalk.dim(` References: ${references.map(r => r.rawText).join(', ')}`));
204
+ }
205
+ // Check if this entry should be promoted to a context module
206
+ if (!options.quick) {
207
+ await promptForContextModule(entry, ginkoDir, sessionDir);
208
+ }
209
+ }
210
+ catch (error) {
211
+ console.error(chalk.red('Error logging event:'), error instanceof Error ? error.message : String(error));
212
+ process.exit(1);
213
+ }
214
+ }
215
+ /**
216
+ * Prompt user to create a context module from high-value log entry
217
+ */
218
+ async function promptForContextModule(entry, ginkoDir, sessionDir) {
219
+ // Step 1: Detect if entry qualifies for promotion
220
+ const shouldPrompt = detectInsightPromotion(entry);
221
+ if (!shouldPrompt) {
222
+ return;
223
+ }
224
+ console.log(chalk.cyan('\nšŸ“¦ This looks like valuable team knowledge!'));
225
+ const confirmAnswer = await prompts({
226
+ type: 'confirm',
227
+ name: 'create',
228
+ message: 'Create context module?',
229
+ initial: true
230
+ });
231
+ if (!confirmAnswer.create) {
232
+ return;
233
+ }
234
+ // Step 2: Gather additional context from user
235
+ const answers = await prompts([
236
+ {
237
+ type: 'text',
238
+ name: 'title',
239
+ message: 'Module title (brief, descriptive):',
240
+ initial: extractTitle(entry.description),
241
+ validate: (input) => input.length > 0 || 'Title is required'
242
+ },
243
+ {
244
+ type: 'text',
245
+ name: 'problem',
246
+ message: 'What problem does this solve?',
247
+ validate: (input) => input.length > 0 || 'Problem description is required'
248
+ },
249
+ {
250
+ type: 'text',
251
+ name: 'solution',
252
+ message: 'What is the solution/approach?',
253
+ validate: (input) => input.length > 0 || 'Solution description is required'
254
+ },
255
+ {
256
+ type: 'number',
257
+ name: 'timeSaving',
258
+ message: 'Estimated time saving for future use (minutes):',
259
+ initial: 60,
260
+ validate: (input) => input > 0 || 'Time saving must be positive'
261
+ },
262
+ {
263
+ type: 'text',
264
+ name: 'tags',
265
+ message: 'Tags (comma-separated):',
266
+ initial: extractTags(entry)
267
+ }
268
+ ]);
269
+ // Process tags manually since prompts doesn't have a filter option
270
+ const tags = typeof answers.tags === 'string'
271
+ ? answers.tags.split(',').map(t => t.trim()).filter(t => t.length > 0)
272
+ : answers.tags;
273
+ // Step 3: Convert LogEntry to SessionInsight
274
+ const insight = {
275
+ id: uuidv4(),
276
+ type: mapCategoryToInsightType(entry.category),
277
+ title: answers.title,
278
+ problem: answers.problem,
279
+ solution: answers.solution,
280
+ impact: entry.description,
281
+ reusabilityScore: entry.impact === 'high' ? 0.85 : 0.75,
282
+ timeSavingPotential: answers.timeSaving,
283
+ relevanceScore: 0.9,
284
+ tags: tags,
285
+ relatedFiles: entry.files,
286
+ sessionId: await getSessionId(sessionDir),
287
+ timestamp: new Date(entry.timestamp)
288
+ };
289
+ // Step 4: Generate module using ModuleGenerator
290
+ try {
291
+ const generator = new ModuleGenerator(ginkoDir);
292
+ await generator.initialize();
293
+ const result = await generator.generateModules([insight]);
294
+ if (result.created.length > 0) {
295
+ const module = result.created[0];
296
+ console.log(chalk.green(`\nāœ“ Context module created: ${module.filename}`));
297
+ console.log(chalk.dim('šŸ“š Available to all team members in next session\n'));
298
+ }
299
+ else if (result.skipped.length > 0) {
300
+ const skip = result.skipped[0];
301
+ console.log(chalk.yellow(`\nāš ļø Module creation skipped: ${skip.reason}`));
302
+ if (skip.existingModule) {
303
+ console.log(chalk.dim(` Similar module exists: ${skip.existingModule}\n`));
304
+ }
305
+ }
306
+ }
307
+ catch (error) {
308
+ console.error(chalk.red('Error creating context module:'), error instanceof Error ? error.message : String(error));
309
+ }
310
+ }
311
+ /**
312
+ * Detect if log entry should trigger context module promotion
313
+ */
314
+ function detectInsightPromotion(entry) {
315
+ // Detect by category
316
+ const promotionCategories = ['insight', 'decision'];
317
+ if (promotionCategories.includes(entry.category)) {
318
+ return true;
319
+ }
320
+ // Detect by impact level
321
+ if (entry.impact === 'high') {
322
+ return true;
323
+ }
324
+ // Detect by keywords in description
325
+ const keywords = [
326
+ 'discovered',
327
+ 'pattern',
328
+ 'breakthrough',
329
+ 'game changer',
330
+ 'significant',
331
+ 'profound',
332
+ 'brilliant',
333
+ 'critical insight',
334
+ 'key learning',
335
+ 'important finding'
336
+ ];
337
+ const lowerDesc = entry.description.toLowerCase();
338
+ return keywords.some(keyword => lowerDesc.includes(keyword));
339
+ }
340
+ /**
341
+ * Extract a title from description (first sentence or key phrase)
342
+ */
343
+ function extractTitle(description) {
344
+ // Try to extract first sentence
345
+ const firstSentence = description.split(/[.!?]/)[0];
346
+ // Truncate if too long
347
+ if (firstSentence.length > 60) {
348
+ return firstSentence.substring(0, 57) + '...';
349
+ }
350
+ return firstSentence;
351
+ }
352
+ /**
353
+ * Extract tags from log entry context
354
+ */
355
+ function extractTags(entry) {
356
+ const tags = [entry.category];
357
+ // Add impact as tag
358
+ if (entry.impact !== 'medium') {
359
+ tags.push(entry.impact);
360
+ }
361
+ // Extract technology keywords from description
362
+ const techKeywords = [
363
+ 'typescript', 'javascript', 'react', 'nextjs', 'vercel',
364
+ 'supabase', 'postgres', 'api', 'cli', 'git', 'auth',
365
+ 'testing', 'performance', 'security', 'database'
366
+ ];
367
+ const lowerDesc = entry.description.toLowerCase();
368
+ for (const keyword of techKeywords) {
369
+ if (lowerDesc.includes(keyword)) {
370
+ tags.push(keyword);
371
+ }
372
+ }
373
+ return tags.slice(0, 5).join(', '); // Limit to 5 tags
374
+ }
375
+ /**
376
+ * Map log category to insight type
377
+ */
378
+ function mapCategoryToInsightType(category) {
379
+ const mapping = {
380
+ insight: 'discovery',
381
+ decision: 'decision',
382
+ fix: 'gotcha',
383
+ feature: 'pattern',
384
+ git: 'configuration',
385
+ achievement: 'discovery'
386
+ };
387
+ return mapping[category] || 'discovery';
388
+ }
389
+ /**
390
+ * Get current session ID from session directory
391
+ */
392
+ async function getSessionId(sessionDir) {
393
+ try {
394
+ const logContent = await SessionLogManager.loadSessionLog(sessionDir);
395
+ const sessionIdMatch = logContent.match(/Session ID: `([^`]+)`/);
396
+ if (sessionIdMatch) {
397
+ return sessionIdMatch[1];
398
+ }
399
+ }
400
+ catch {
401
+ // Fall back to generating from directory
402
+ }
403
+ // Generate from directory path
404
+ const sessionName = path.basename(sessionDir);
405
+ return `session-${sessionName}-${Date.now()}`;
406
+ }
407
+ /**
408
+ * Show current session log with quality score
409
+ */
410
+ async function showSessionLog(sessionDir) {
411
+ const logContent = await SessionLogManager.loadSessionLog(sessionDir);
412
+ if (!logContent || logContent.length < 100) {
413
+ console.log(chalk.yellow('āš ļø Session log is empty'));
414
+ console.log(chalk.dim(' No events logged yet in this session.'));
415
+ return;
416
+ }
417
+ console.log(chalk.cyan('\nšŸ“‹ Current Session Log:\n'));
418
+ console.log(logContent);
419
+ console.log('');
420
+ // Show summary statistics
421
+ const summary = SessionLogManager.getSummary(logContent);
422
+ console.log(chalk.cyan('šŸ“Š Summary:'));
423
+ console.log(chalk.dim(` Total entries: ${summary.totalEntries}`));
424
+ console.log(chalk.dim(` Files affected: ${summary.filesAffected}`));
425
+ if (Object.keys(summary.byCategory).length > 0) {
426
+ console.log(chalk.dim(' By category:'));
427
+ for (const [cat, count] of Object.entries(summary.byCategory)) {
428
+ console.log(chalk.dim(` - ${cat}: ${count}`));
429
+ }
430
+ }
431
+ // Show quality score
432
+ const quality = scoreSessionLog(logContent);
433
+ const scoreColor = quality.score >= 9 ? chalk.green : quality.score >= 7 ? chalk.yellow : chalk.red;
434
+ console.log(chalk.cyan('\nšŸŽÆ Quality Score:'));
435
+ console.log(scoreColor(` ${quality.score.toFixed(1)}/10`));
436
+ // Show quality breakdown
437
+ console.log(chalk.dim('\n Quality Checks:'));
438
+ console.log(quality.hasRootCauses ? chalk.green(' āœ“ Fix entries have root causes') : chalk.yellow(' āœ— Some fixes missing root causes'));
439
+ console.log(quality.hasWhyForFeatures ? chalk.green(' āœ“ Features explain WHY') : chalk.yellow(' āœ— Some features missing WHY'));
440
+ console.log(quality.hasAlternatives ? chalk.green(' āœ“ Decisions include alternatives') : chalk.yellow(' āœ— Some decisions missing alternatives'));
441
+ console.log(quality.hasInsights ? chalk.green(' āœ“ Insights documented') : chalk.dim(' - No insights yet (optional)'));
442
+ console.log(quality.hasGitOps ? chalk.green(' āœ“ Git operations logged') : chalk.dim(' - No git operations yet (optional)'));
443
+ if (quality.terseEntries > 0) {
444
+ console.log(chalk.yellow(` ⚠ ${quality.terseEntries} terse entries (<15 words)`));
445
+ }
446
+ // Show suggestions
447
+ const insights = suggestInsights(logContent);
448
+ if (insights.length > 0) {
449
+ console.log(chalk.cyan('\nšŸ’” Suggestions:'));
450
+ for (const insight of insights) {
451
+ console.log(chalk.dim(` • ${insight}`));
452
+ }
453
+ }
454
+ console.log('');
455
+ }
456
+ /**
457
+ * Validate current session log quality
458
+ */
459
+ async function validateSessionLog(sessionDir) {
460
+ const logContent = await SessionLogManager.loadSessionLog(sessionDir);
461
+ if (!logContent || logContent.length < 100) {
462
+ console.log(chalk.yellow('āš ļø Session log is empty'));
463
+ console.log(chalk.dim(' No events logged yet in this session.'));
464
+ return;
465
+ }
466
+ console.log(chalk.cyan('\nšŸ” Validating Session Log Quality...\n'));
467
+ const quality = scoreSessionLog(logContent);
468
+ const scoreColor = quality.score >= 9 ? chalk.green : quality.score >= 7 ? chalk.yellow : chalk.red;
469
+ console.log(chalk.cyan('Quality Score:'));
470
+ console.log(scoreColor(` ${quality.score.toFixed(1)}/10\n`));
471
+ // Show detailed breakdown
472
+ console.log(chalk.cyan('Quality Breakdown:'));
473
+ const summary = SessionLogManager.getSummary(logContent);
474
+ console.log(quality.hasRootCauses ? chalk.green(' āœ“ Fix entries have root causes') : chalk.red(' āœ— Some fixes missing root causes'));
475
+ console.log(quality.hasWhyForFeatures ? chalk.green(' āœ“ Features explain WHY (problem solved)') : chalk.red(' āœ— Some features missing WHY'));
476
+ console.log(quality.hasAlternatives ? chalk.green(' āœ“ Decisions include alternatives') : chalk.red(' āœ— Some decisions missing alternatives'));
477
+ console.log(quality.hasInsights ? chalk.green(' āœ“ Insights documented') : chalk.yellow(' - No insights captured (consider documenting learnings)'));
478
+ console.log(quality.hasGitOps ? chalk.green(' āœ“ Git operations logged') : chalk.yellow(' - No git operations logged (optional)'));
479
+ if (quality.terseEntries > 0) {
480
+ console.log(chalk.yellow(` ⚠ ${quality.terseEntries} terse entries (<15 words)`));
481
+ }
482
+ // Show suggestions
483
+ if (quality.suggestions.length > 0) {
484
+ console.log(chalk.cyan('\nšŸ“ Recommendations:'));
485
+ for (const suggestion of quality.suggestions) {
486
+ console.log(chalk.dim(` • ${suggestion}`));
487
+ }
488
+ }
489
+ // Suggest insights from patterns
490
+ const insightSuggestions = suggestInsights(logContent);
491
+ if (insightSuggestions.length > 0) {
492
+ console.log(chalk.cyan('\nšŸ’” Insight Opportunities:'));
493
+ for (const insight of insightSuggestions) {
494
+ console.log(chalk.dim(` • ${insight}`));
495
+ }
496
+ }
497
+ // Show git context
498
+ const gitContext = await detectGitContext();
499
+ if (gitContext.recentCommits.length > 0) {
500
+ console.log(chalk.cyan('\nšŸ”„ Recent Git Activity (not yet logged):'));
501
+ for (const commit of gitContext.recentCommits.slice(0, 3)) {
502
+ console.log(chalk.dim(` • ${commit}`));
503
+ }
504
+ console.log(chalk.dim('\n Tip: Log significant commits with --category=git'));
505
+ }
506
+ console.log('');
507
+ }
508
+ /**
509
+ * Show all references in current session log (TASK-010)
510
+ */
511
+ async function showSessionReferences(sessionDir) {
512
+ const logContent = await SessionLogManager.loadSessionLog(sessionDir);
513
+ if (!logContent || logContent.length < 100) {
514
+ console.log(chalk.yellow('āš ļø Session log is empty'));
515
+ console.log(chalk.dim(' No events logged yet in this session.'));
516
+ return;
517
+ }
518
+ console.log(chalk.cyan('\nšŸ”— Session References:\n'));
519
+ // Extract all references from session log
520
+ const references = extractReferences(logContent);
521
+ if (references.length === 0) {
522
+ console.log(chalk.dim(' No references found in this session.'));
523
+ console.log(chalk.dim('\n Tip: Use reference syntax like TASK-006, PRD-009, ADR-033 in log descriptions\n'));
524
+ return;
525
+ }
526
+ console.log(chalk.dim(` Found ${references.length} reference(s):\n`));
527
+ // Group by type
528
+ const byType = {};
529
+ for (const ref of references) {
530
+ if (!byType[ref.type])
531
+ byType[ref.type] = [];
532
+ if (!byType[ref.type].includes(ref.rawText)) {
533
+ byType[ref.type].push(ref.rawText);
534
+ }
535
+ }
536
+ // Display grouped references
537
+ for (const [type, refs] of Object.entries(byType)) {
538
+ console.log(chalk.cyan(` ${type.toUpperCase()}:`));
539
+ for (const ref of refs) {
540
+ console.log(chalk.dim(` - ${ref}`));
541
+ }
542
+ console.log('');
543
+ }
544
+ // Validate all references
545
+ console.log(chalk.cyan(' Validating references...\n'));
546
+ const validation = await validateReferences(references);
547
+ if (validation.valid.length > 0) {
548
+ console.log(chalk.green(` āœ“ ${validation.valid.length} valid reference(s)`));
549
+ }
550
+ if (validation.broken.length > 0) {
551
+ console.log(chalk.yellow(` ⚠ ${validation.broken.length} broken reference(s):`));
552
+ for (const brokenRef of validation.broken) {
553
+ console.log(chalk.dim(` - ${brokenRef.rawText} (target not found)`));
554
+ }
555
+ }
556
+ // Show reference chains for key references
557
+ if (validation.valid.length > 0) {
558
+ console.log(chalk.cyan('\n Reference Chains:\n'));
559
+ // Show chains for first 3 valid references
560
+ for (const validRef of validation.valid.slice(0, 3)) {
561
+ try {
562
+ const chain = await getReferenceChain(validRef, 2);
563
+ const formatted = formatReferenceChain(chain);
564
+ console.log(chalk.dim(` ${formatted}`));
565
+ }
566
+ catch {
567
+ // Skip if chain extraction fails
568
+ continue;
569
+ }
570
+ }
571
+ if (validation.valid.length > 3) {
572
+ console.log(chalk.dim(` ... and ${validation.valid.length - 3} more`));
573
+ }
574
+ }
575
+ console.log('');
576
+ }
577
+ /**
578
+ * Show examples of logging events
579
+ */
580
+ export function logExamples() {
581
+ console.log(chalk.cyan('\nSession Logging Examples:\n'));
582
+ console.log(chalk.white('# Interactive mode (prompts for WHY, alternatives, etc.)'));
583
+ console.log(chalk.dim(' ginko log "Implemented --show flag" --category=feature\n'));
584
+ console.log(chalk.white('# Quick mode (skip prompts for speed)'));
585
+ console.log(chalk.dim(' ginko log "Fixed timeout" --category=fix --quick\n'));
586
+ console.log(chalk.white('# Validate session log quality'));
587
+ console.log(chalk.dim(' ginko log --validate\n'));
588
+ console.log(chalk.white('# Show current log with quality score'));
589
+ console.log(chalk.dim(' ginko log --show\n'));
590
+ console.log(chalk.white('# Show all references in session'));
591
+ console.log(chalk.dim(' ginko log --refs\n'));
592
+ console.log(chalk.cyan('Quality-Focused Examples:\n'));
593
+ console.log(chalk.green('GOOD') + chalk.white(' - Fix with root cause:'));
594
+ console.log(chalk.dim(' ginko log "Fixed auth timeout. Root cause: bcrypt rounds too high" --category=fix\n'));
595
+ console.log(chalk.red('BAD') + chalk.white(' - Fix without root cause:'));
596
+ console.log(chalk.dim(' ginko log "Fixed auth timeout" --category=fix\n'));
597
+ console.log(chalk.green('GOOD') + chalk.white(' - Feature with WHY:'));
598
+ console.log(chalk.dim(' ginko log "Added --validate flag to check log quality for better handoffs" --category=feature\n'));
599
+ console.log(chalk.red('BAD') + chalk.white(' - Feature without WHY:'));
600
+ console.log(chalk.dim(' ginko log "Added --validate flag" --category=feature\n'));
601
+ console.log(chalk.green('GOOD') + chalk.white(' - Decision with alternatives:'));
602
+ console.log(chalk.dim(' ginko log "Chose JWT over sessions. Alternatives: server sessions (harder to scale), OAuth (vendor lock-in)" --category=decision\n'));
603
+ console.log(chalk.red('BAD') + chalk.white(' - Decision without alternatives:'));
604
+ console.log(chalk.dim(' ginko log "Chose JWT for auth" --category=decision\n'));
605
+ console.log(chalk.cyan('Categories:'));
606
+ console.log(chalk.dim(' fix - Bug fixes and error resolution (include root cause)'));
607
+ console.log(chalk.dim(' feature - New functionality (explain WHY/problem solved)'));
608
+ console.log(chalk.dim(' decision - Key decisions (mention alternatives considered)'));
609
+ console.log(chalk.dim(' insight - Patterns, gotchas, learnings discovered'));
610
+ console.log(chalk.dim(' git - Git operations and version control'));
611
+ console.log(chalk.dim(' achievement - Milestones and completions\n'));
612
+ console.log(chalk.cyan('Flags:'));
613
+ console.log(chalk.dim(' --category - Entry category (default: feature)'));
614
+ console.log(chalk.dim(' --impact - Impact level: high, medium, low (default: medium)'));
615
+ console.log(chalk.dim(' --files - Comma-separated file paths (or auto-detected)'));
616
+ console.log(chalk.dim(' --quick - Skip interactive prompts for speed'));
617
+ console.log(chalk.dim(' --why - Force WHY prompt (useful for features)'));
618
+ console.log(chalk.dim(' --shared - Mark event for team visibility (synced to graph)'));
619
+ console.log(chalk.dim(' --show - Display current log with quality score'));
620
+ console.log(chalk.dim(' --validate - Check log quality and get suggestions'));
621
+ console.log(chalk.dim(' --refs - Show all references in session with validation\n'));
622
+ console.log(chalk.cyan('Reference Linking (TASK-010):\n'));
623
+ console.log(chalk.dim(' Use reference syntax in descriptions to link to other documents:'));
624
+ console.log(chalk.dim(' - TASK-XXX → backlog/items/TASK-XXX.md'));
625
+ console.log(chalk.dim(' - PRD-YYY → docs/PRD/PRD-YYY-*.md'));
626
+ console.log(chalk.dim(' - ADR-ZZZ → docs/adr/ADR-ZZZ-*.md'));
627
+ console.log(chalk.dim(' - FEATURE-NNN → backlog/items/FEATURE-NNN-*.md'));
628
+ console.log(chalk.dim(' - SPRINT-* → docs/sprints/SPRINT-*.md\n'));
629
+ console.log(chalk.green(' Example with references:'));
630
+ console.log(chalk.dim(' ginko log "Fixed TASK-006 per PRD-009 and ADR-033" --category=fix\n'));
631
+ }
632
+ //# sourceMappingURL=log.js.map