hammoc 1.4.0 → 1.6.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 (353) hide show
  1. package/README.md +428 -405
  2. package/bin/hammoc.js +0 -6
  3. package/package.json +100 -94
  4. package/packages/client/dist/assets/agentExampleHighlight-ltj9ce0U.js +1 -0
  5. package/packages/client/dist/assets/commandTokenHighlight-ji_ViMb4.js +1 -0
  6. package/packages/client/dist/assets/index-B-DiRGuz.js +2 -0
  7. package/packages/client/dist/assets/index-B09doO8H.js +139 -0
  8. package/packages/client/dist/assets/index-BT4RIi0U.js +1523 -0
  9. package/packages/client/dist/assets/index-DyNJ5jEW.css +32 -0
  10. package/packages/client/dist/assets/snippetTokenHighlight-CP3v4o2g.js +1 -0
  11. package/packages/client/dist/index.html +2 -2
  12. package/packages/client/dist/sw.js +1 -1
  13. package/packages/server/dist/app.d.ts.map +1 -1
  14. package/packages/server/dist/app.js +13 -21
  15. package/packages/server/dist/app.js.map +1 -1
  16. package/packages/server/dist/controllers/bmadCoreConfigController.d.ts +41 -0
  17. package/packages/server/dist/controllers/bmadCoreConfigController.d.ts.map +1 -0
  18. package/packages/server/dist/controllers/bmadCoreConfigController.js +172 -0
  19. package/packages/server/dist/controllers/bmadCoreConfigController.js.map +1 -0
  20. package/packages/server/dist/controllers/claudeMdController.d.ts +26 -0
  21. package/packages/server/dist/controllers/claudeMdController.d.ts.map +1 -0
  22. package/packages/server/dist/controllers/claudeMdController.js +158 -0
  23. package/packages/server/dist/controllers/claudeMdController.js.map +1 -0
  24. package/packages/server/dist/controllers/contextBuilderController.d.ts +43 -0
  25. package/packages/server/dist/controllers/contextBuilderController.d.ts.map +1 -0
  26. package/packages/server/dist/controllers/contextBuilderController.js +159 -0
  27. package/packages/server/dist/controllers/contextBuilderController.js.map +1 -0
  28. package/packages/server/dist/controllers/harnessAgentController.d.ts +35 -0
  29. package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -0
  30. package/packages/server/dist/controllers/harnessAgentController.js +372 -0
  31. package/packages/server/dist/controllers/harnessAgentController.js.map +1 -0
  32. package/packages/server/dist/controllers/harnessBundleController.d.ts +37 -0
  33. package/packages/server/dist/controllers/harnessBundleController.d.ts.map +1 -0
  34. package/packages/server/dist/controllers/harnessBundleController.js +312 -0
  35. package/packages/server/dist/controllers/harnessBundleController.js.map +1 -0
  36. package/packages/server/dist/controllers/harnessCommandController.d.ts +35 -0
  37. package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -0
  38. package/packages/server/dist/controllers/harnessCommandController.js +415 -0
  39. package/packages/server/dist/controllers/harnessCommandController.js.map +1 -0
  40. package/packages/server/dist/controllers/harnessController.d.ts +21 -0
  41. package/packages/server/dist/controllers/harnessController.d.ts.map +1 -0
  42. package/packages/server/dist/controllers/harnessController.js +176 -0
  43. package/packages/server/dist/controllers/harnessController.js.map +1 -0
  44. package/packages/server/dist/controllers/harnessHookController.d.ts +32 -0
  45. package/packages/server/dist/controllers/harnessHookController.d.ts.map +1 -0
  46. package/packages/server/dist/controllers/harnessHookController.js +406 -0
  47. package/packages/server/dist/controllers/harnessHookController.js.map +1 -0
  48. package/packages/server/dist/controllers/harnessLintController.d.ts +18 -0
  49. package/packages/server/dist/controllers/harnessLintController.d.ts.map +1 -0
  50. package/packages/server/dist/controllers/harnessLintController.js +72 -0
  51. package/packages/server/dist/controllers/harnessLintController.js.map +1 -0
  52. package/packages/server/dist/controllers/harnessMcpController.d.ts +28 -0
  53. package/packages/server/dist/controllers/harnessMcpController.d.ts.map +1 -0
  54. package/packages/server/dist/controllers/harnessMcpController.js +371 -0
  55. package/packages/server/dist/controllers/harnessMcpController.js.map +1 -0
  56. package/packages/server/dist/controllers/harnessPluginController.d.ts +17 -0
  57. package/packages/server/dist/controllers/harnessPluginController.d.ts.map +1 -0
  58. package/packages/server/dist/controllers/harnessPluginController.js +115 -0
  59. package/packages/server/dist/controllers/harnessPluginController.js.map +1 -0
  60. package/packages/server/dist/controllers/harnessShareScopeController.d.ts +24 -0
  61. package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -0
  62. package/packages/server/dist/controllers/harnessShareScopeController.js +120 -0
  63. package/packages/server/dist/controllers/harnessShareScopeController.js.map +1 -0
  64. package/packages/server/dist/controllers/harnessSkillController.d.ts +32 -0
  65. package/packages/server/dist/controllers/harnessSkillController.d.ts.map +1 -0
  66. package/packages/server/dist/controllers/harnessSkillController.js +453 -0
  67. package/packages/server/dist/controllers/harnessSkillController.js.map +1 -0
  68. package/packages/server/dist/controllers/marketplaceController.d.ts +19 -0
  69. package/packages/server/dist/controllers/marketplaceController.d.ts.map +1 -0
  70. package/packages/server/dist/controllers/marketplaceController.js +74 -0
  71. package/packages/server/dist/controllers/marketplaceController.js.map +1 -0
  72. package/packages/server/dist/controllers/observabilityController.d.ts +32 -0
  73. package/packages/server/dist/controllers/observabilityController.d.ts.map +1 -0
  74. package/packages/server/dist/controllers/observabilityController.js +148 -0
  75. package/packages/server/dist/controllers/observabilityController.js.map +1 -0
  76. package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
  77. package/packages/server/dist/controllers/projectController.js +11 -0
  78. package/packages/server/dist/controllers/projectController.js.map +1 -1
  79. package/packages/server/dist/controllers/snippetController.d.ts +35 -0
  80. package/packages/server/dist/controllers/snippetController.d.ts.map +1 -0
  81. package/packages/server/dist/controllers/snippetController.js +294 -0
  82. package/packages/server/dist/controllers/snippetController.js.map +1 -0
  83. package/packages/server/dist/handlers/streamCallbacks.d.ts +8 -0
  84. package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
  85. package/packages/server/dist/handlers/streamCallbacks.js +8 -0
  86. package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
  87. package/packages/server/dist/handlers/websocket.d.ts +15 -0
  88. package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
  89. package/packages/server/dist/handlers/websocket.js +103 -2
  90. package/packages/server/dist/handlers/websocket.js.map +1 -1
  91. package/packages/server/dist/index.js +5 -0
  92. package/packages/server/dist/index.js.map +1 -1
  93. package/packages/server/dist/locales/en/server.json +37 -4
  94. package/packages/server/dist/locales/es/server.json +0 -4
  95. package/packages/server/dist/locales/ja/server.json +0 -4
  96. package/packages/server/dist/locales/ko/server.json +0 -4
  97. package/packages/server/dist/locales/pt/server.json +0 -4
  98. package/packages/server/dist/locales/zh-CN/server.json +0 -4
  99. package/packages/server/dist/routes/harness.d.ts +8 -0
  100. package/packages/server/dist/routes/harness.d.ts.map +1 -0
  101. package/packages/server/dist/routes/harness.js +150 -0
  102. package/packages/server/dist/routes/harness.js.map +1 -0
  103. package/packages/server/dist/routes/projects.d.ts.map +1 -1
  104. package/packages/server/dist/routes/projects.js +5 -60
  105. package/packages/server/dist/routes/projects.js.map +1 -1
  106. package/packages/server/dist/routes/snippets.d.ts +14 -0
  107. package/packages/server/dist/routes/snippets.d.ts.map +1 -0
  108. package/packages/server/dist/routes/snippets.js +27 -0
  109. package/packages/server/dist/routes/snippets.js.map +1 -0
  110. package/packages/server/dist/services/bmadCoreConfigService.d.ts +86 -0
  111. package/packages/server/dist/services/bmadCoreConfigService.d.ts.map +1 -0
  112. package/packages/server/dist/services/bmadCoreConfigService.js +175 -0
  113. package/packages/server/dist/services/bmadCoreConfigService.js.map +1 -0
  114. package/packages/server/dist/services/bmadStatusService.d.ts +15 -2
  115. package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
  116. package/packages/server/dist/services/bmadStatusService.js +146 -37
  117. package/packages/server/dist/services/bmadStatusService.js.map +1 -1
  118. package/packages/server/dist/services/chatService.d.ts +3 -0
  119. package/packages/server/dist/services/chatService.d.ts.map +1 -1
  120. package/packages/server/dist/services/chatService.js +28 -7
  121. package/packages/server/dist/services/chatService.js.map +1 -1
  122. package/packages/server/dist/services/claudeMdService.d.ts +48 -0
  123. package/packages/server/dist/services/claudeMdService.d.ts.map +1 -0
  124. package/packages/server/dist/services/claudeMdService.js +240 -0
  125. package/packages/server/dist/services/claudeMdService.js.map +1 -0
  126. package/packages/server/dist/services/commandService.d.ts +10 -0
  127. package/packages/server/dist/services/commandService.d.ts.map +1 -1
  128. package/packages/server/dist/services/commandService.js +129 -4
  129. package/packages/server/dist/services/commandService.js.map +1 -1
  130. package/packages/server/dist/services/contextBuilderScriptTemplate.d.ts +24 -0
  131. package/packages/server/dist/services/contextBuilderScriptTemplate.d.ts.map +1 -0
  132. package/packages/server/dist/services/contextBuilderScriptTemplate.js +181 -0
  133. package/packages/server/dist/services/contextBuilderScriptTemplate.js.map +1 -0
  134. package/packages/server/dist/services/contextBuilderService.d.ts +68 -0
  135. package/packages/server/dist/services/contextBuilderService.d.ts.map +1 -0
  136. package/packages/server/dist/services/contextBuilderService.js +345 -0
  137. package/packages/server/dist/services/contextBuilderService.js.map +1 -0
  138. package/packages/server/dist/services/fileWatcherService.d.ts +24 -0
  139. package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -1
  140. package/packages/server/dist/services/fileWatcherService.js +232 -1
  141. package/packages/server/dist/services/fileWatcherService.js.map +1 -1
  142. package/packages/server/dist/services/harnessAgentService.d.ts +97 -0
  143. package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -0
  144. package/packages/server/dist/services/harnessAgentService.js +988 -0
  145. package/packages/server/dist/services/harnessAgentService.js.map +1 -0
  146. package/packages/server/dist/services/harnessBundleService.d.ts +145 -0
  147. package/packages/server/dist/services/harnessBundleService.d.ts.map +1 -0
  148. package/packages/server/dist/services/harnessBundleService.js +1318 -0
  149. package/packages/server/dist/services/harnessBundleService.js.map +1 -0
  150. package/packages/server/dist/services/harnessCommandService.d.ts +81 -0
  151. package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -0
  152. package/packages/server/dist/services/harnessCommandService.js +917 -0
  153. package/packages/server/dist/services/harnessCommandService.js.map +1 -0
  154. package/packages/server/dist/services/harnessHookService.d.ts +82 -0
  155. package/packages/server/dist/services/harnessHookService.d.ts.map +1 -0
  156. package/packages/server/dist/services/harnessHookService.js +1112 -0
  157. package/packages/server/dist/services/harnessHookService.js.map +1 -0
  158. package/packages/server/dist/services/harnessLintService.d.ts +49 -0
  159. package/packages/server/dist/services/harnessLintService.d.ts.map +1 -0
  160. package/packages/server/dist/services/harnessLintService.js +628 -0
  161. package/packages/server/dist/services/harnessLintService.js.map +1 -0
  162. package/packages/server/dist/services/harnessMcpService.d.ts +100 -0
  163. package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -0
  164. package/packages/server/dist/services/harnessMcpService.js +884 -0
  165. package/packages/server/dist/services/harnessMcpService.js.map +1 -0
  166. package/packages/server/dist/services/harnessPluginService.d.ts +66 -0
  167. package/packages/server/dist/services/harnessPluginService.d.ts.map +1 -0
  168. package/packages/server/dist/services/harnessPluginService.js +559 -0
  169. package/packages/server/dist/services/harnessPluginService.js.map +1 -0
  170. package/packages/server/dist/services/harnessService.d.ts +40 -0
  171. package/packages/server/dist/services/harnessService.d.ts.map +1 -0
  172. package/packages/server/dist/services/harnessService.js +222 -0
  173. package/packages/server/dist/services/harnessService.js.map +1 -0
  174. package/packages/server/dist/services/harnessShareScopeService.d.ts +50 -0
  175. package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -0
  176. package/packages/server/dist/services/harnessShareScopeService.js +158 -0
  177. package/packages/server/dist/services/harnessShareScopeService.js.map +1 -0
  178. package/packages/server/dist/services/harnessSkillService.d.ts +70 -0
  179. package/packages/server/dist/services/harnessSkillService.d.ts.map +1 -0
  180. package/packages/server/dist/services/harnessSkillService.js +636 -0
  181. package/packages/server/dist/services/harnessSkillService.js.map +1 -0
  182. package/packages/server/dist/services/issueService.d.ts.map +1 -1
  183. package/packages/server/dist/services/issueService.js +3 -1
  184. package/packages/server/dist/services/issueService.js.map +1 -1
  185. package/packages/server/dist/services/manualSyncService.d.ts +19 -0
  186. package/packages/server/dist/services/manualSyncService.d.ts.map +1 -0
  187. package/packages/server/dist/services/manualSyncService.js +110 -0
  188. package/packages/server/dist/services/manualSyncService.js.map +1 -0
  189. package/packages/server/dist/services/marketplaceService.d.ts +50 -0
  190. package/packages/server/dist/services/marketplaceService.d.ts.map +1 -0
  191. package/packages/server/dist/services/marketplaceService.js +326 -0
  192. package/packages/server/dist/services/marketplaceService.js.map +1 -0
  193. package/packages/server/dist/services/observabilityService.d.ts +87 -0
  194. package/packages/server/dist/services/observabilityService.d.ts.map +1 -0
  195. package/packages/server/dist/services/observabilityService.js +0 -0
  196. package/packages/server/dist/services/observabilityService.js.map +1 -0
  197. package/packages/server/dist/services/queueService.d.ts.map +1 -1
  198. package/packages/server/dist/services/queueService.js +48 -2
  199. package/packages/server/dist/services/queueService.js.map +1 -1
  200. package/packages/server/dist/services/sessionService.d.ts +16 -0
  201. package/packages/server/dist/services/sessionService.d.ts.map +1 -1
  202. package/packages/server/dist/services/sessionService.js +125 -0
  203. package/packages/server/dist/services/sessionService.js.map +1 -1
  204. package/packages/server/dist/services/snippetService.d.ts +54 -0
  205. package/packages/server/dist/services/snippetService.d.ts.map +1 -0
  206. package/packages/server/dist/services/snippetService.js +371 -0
  207. package/packages/server/dist/services/snippetService.js.map +1 -0
  208. package/packages/server/dist/services/tokenCountService.d.ts +71 -0
  209. package/packages/server/dist/services/tokenCountService.d.ts.map +1 -0
  210. package/packages/server/dist/services/tokenCountService.js +313 -0
  211. package/packages/server/dist/services/tokenCountService.js.map +1 -0
  212. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts +46 -0
  213. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts.map +1 -0
  214. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js +125 -0
  215. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js.map +1 -0
  216. package/packages/server/dist/snippets/apply-qa-fixes +7 -5
  217. package/packages/server/dist/snippets/qa-review +5 -1
  218. package/packages/server/dist/snippets/split-commit +9 -0
  219. package/packages/server/dist/utils/applySecretsPolicy.d.ts +53 -0
  220. package/packages/server/dist/utils/applySecretsPolicy.d.ts.map +1 -0
  221. package/packages/server/dist/utils/applySecretsPolicy.js +204 -0
  222. package/packages/server/dist/utils/applySecretsPolicy.js.map +1 -0
  223. package/packages/server/dist/utils/assertNoSecretOnShared.d.ts +40 -0
  224. package/packages/server/dist/utils/assertNoSecretOnShared.d.ts.map +1 -0
  225. package/packages/server/dist/utils/assertNoSecretOnShared.js +47 -0
  226. package/packages/server/dist/utils/assertNoSecretOnShared.js.map +1 -0
  227. package/packages/server/dist/utils/assertSafeBundlePath.d.ts +29 -0
  228. package/packages/server/dist/utils/assertSafeBundlePath.d.ts.map +1 -0
  229. package/packages/server/dist/utils/assertSafeBundlePath.js +53 -0
  230. package/packages/server/dist/utils/assertSafeBundlePath.js.map +1 -0
  231. package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts +7 -0
  232. package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts.map +1 -0
  233. package/packages/server/dist/utils/bundledBinaryModelSupport.js +107 -0
  234. package/packages/server/dist/utils/bundledBinaryModelSupport.js.map +1 -0
  235. package/packages/server/dist/utils/effortUtils.d.ts +2 -2
  236. package/packages/server/dist/utils/effortUtils.js +5 -5
  237. package/packages/server/dist/utils/effortUtils.js.map +1 -1
  238. package/packages/server/dist/utils/errors.d.ts +1 -0
  239. package/packages/server/dist/utils/errors.d.ts.map +1 -1
  240. package/packages/server/dist/utils/errors.js +17 -0
  241. package/packages/server/dist/utils/errors.js.map +1 -1
  242. package/packages/server/dist/utils/gitignoreFilter.d.ts +23 -0
  243. package/packages/server/dist/utils/gitignoreFilter.d.ts.map +1 -0
  244. package/packages/server/dist/utils/gitignoreFilter.js +42 -0
  245. package/packages/server/dist/utils/gitignoreFilter.js.map +1 -0
  246. package/packages/server/dist/utils/harnessBundleSchema.d.ts +107 -0
  247. package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -0
  248. package/packages/server/dist/utils/harnessBundleSchema.js +89 -0
  249. package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -0
  250. package/packages/server/dist/utils/harnessPaths.d.ts +74 -0
  251. package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -0
  252. package/packages/server/dist/utils/harnessPaths.js +247 -0
  253. package/packages/server/dist/utils/harnessPaths.js.map +1 -0
  254. package/packages/server/dist/utils/secretHeuristic.d.ts +72 -0
  255. package/packages/server/dist/utils/secretHeuristic.d.ts.map +1 -0
  256. package/packages/server/dist/utils/secretHeuristic.js +163 -0
  257. package/packages/server/dist/utils/secretHeuristic.js.map +1 -0
  258. package/packages/server/dist/utils/secretPlaceholderNamer.d.ts +41 -0
  259. package/packages/server/dist/utils/secretPlaceholderNamer.d.ts.map +1 -0
  260. package/packages/server/dist/utils/secretPlaceholderNamer.js +81 -0
  261. package/packages/server/dist/utils/secretPlaceholderNamer.js.map +1 -0
  262. package/packages/server/dist/utils/serverPathResolver.d.ts +29 -0
  263. package/packages/server/dist/utils/serverPathResolver.d.ts.map +1 -0
  264. package/packages/server/dist/utils/serverPathResolver.js +59 -0
  265. package/packages/server/dist/utils/serverPathResolver.js.map +1 -0
  266. package/packages/server/dist/utils/snippetPaths.d.ts +61 -0
  267. package/packages/server/dist/utils/snippetPaths.d.ts.map +1 -0
  268. package/packages/server/dist/utils/snippetPaths.js +123 -0
  269. package/packages/server/dist/utils/snippetPaths.js.map +1 -0
  270. package/packages/server/dist/utils/structuredEditor.d.ts +34 -0
  271. package/packages/server/dist/utils/structuredEditor.d.ts.map +1 -0
  272. package/packages/server/dist/utils/structuredEditor.js +111 -0
  273. package/packages/server/dist/utils/structuredEditor.js.map +1 -0
  274. package/packages/server/package.json +6 -2
  275. package/packages/server/resources/internals/INDEX.md +25 -0
  276. package/packages/server/resources/internals/bmad-qa-fix-marker.md +32 -0
  277. package/packages/server/resources/internals/harness-files.md +85 -0
  278. package/packages/server/resources/internals/image-storage.md +43 -0
  279. package/packages/server/resources/internals/observability-storage.md +23 -0
  280. package/packages/server/resources/manual/01-getting-started.md +104 -0
  281. package/packages/server/resources/manual/02-chat.md +285 -0
  282. package/packages/server/resources/manual/03-sessions.md +48 -0
  283. package/packages/server/resources/manual/04-slash-commands-favorites.md +152 -0
  284. package/packages/server/resources/manual/05-projects.md +76 -0
  285. package/packages/server/resources/manual/06-file-explorer-editor.md +90 -0
  286. package/packages/server/resources/manual/07-git.md +94 -0
  287. package/packages/server/resources/manual/08-terminal.md +59 -0
  288. package/packages/server/resources/manual/09-queue-runner.md +262 -0
  289. package/packages/server/resources/manual/10-project-board.md +194 -0
  290. package/packages/server/resources/manual/11-bmad-method-integration.md +130 -0
  291. package/packages/server/resources/manual/12-harness-workbench.md +256 -0
  292. package/packages/server/resources/manual/13-settings.md +241 -0
  293. package/packages/server/resources/manual/14-keyboard-shortcuts.md +68 -0
  294. package/packages/server/resources/manual/15-environment-variables.md +28 -0
  295. package/packages/server/resources/manual/16-troubleshooting.md +110 -0
  296. package/packages/server/resources/manual/INDEX.md +60 -0
  297. package/packages/shared/dist/index.d.ts +7 -0
  298. package/packages/shared/dist/index.d.ts.map +1 -1
  299. package/packages/shared/dist/index.js +14 -0
  300. package/packages/shared/dist/index.js.map +1 -1
  301. package/packages/shared/dist/types/bmadCoreConfig.d.ts +71 -0
  302. package/packages/shared/dist/types/bmadCoreConfig.d.ts.map +1 -0
  303. package/packages/shared/dist/types/bmadCoreConfig.js +30 -0
  304. package/packages/shared/dist/types/bmadCoreConfig.js.map +1 -0
  305. package/packages/shared/dist/types/bmadStatus.d.ts +10 -0
  306. package/packages/shared/dist/types/bmadStatus.d.ts.map +1 -1
  307. package/packages/shared/dist/types/bmadStatus.js.map +1 -1
  308. package/packages/shared/dist/types/board.d.ts +6 -0
  309. package/packages/shared/dist/types/board.d.ts.map +1 -1
  310. package/packages/shared/dist/types/command.d.ts +3 -3
  311. package/packages/shared/dist/types/command.d.ts.map +1 -1
  312. package/packages/shared/dist/types/contextBuilder.d.ts +102 -0
  313. package/packages/shared/dist/types/contextBuilder.d.ts.map +1 -0
  314. package/packages/shared/dist/types/contextBuilder.js +55 -0
  315. package/packages/shared/dist/types/contextBuilder.js.map +1 -0
  316. package/packages/shared/dist/types/harness.d.ts +1211 -0
  317. package/packages/shared/dist/types/harness.d.ts.map +1 -0
  318. package/packages/shared/dist/types/harness.js +107 -0
  319. package/packages/shared/dist/types/harness.js.map +1 -0
  320. package/packages/shared/dist/types/harnessBundle.d.ts +205 -0
  321. package/packages/shared/dist/types/harnessBundle.d.ts.map +1 -0
  322. package/packages/shared/dist/types/harnessBundle.js +18 -0
  323. package/packages/shared/dist/types/harnessBundle.js.map +1 -0
  324. package/packages/shared/dist/types/marketplace.d.ts +83 -0
  325. package/packages/shared/dist/types/marketplace.d.ts.map +1 -0
  326. package/packages/shared/dist/types/marketplace.js +18 -0
  327. package/packages/shared/dist/types/marketplace.js.map +1 -0
  328. package/packages/shared/dist/types/observability.d.ts +148 -0
  329. package/packages/shared/dist/types/observability.d.ts.map +1 -0
  330. package/packages/shared/dist/types/observability.js +24 -0
  331. package/packages/shared/dist/types/observability.js.map +1 -0
  332. package/packages/shared/dist/types/preferences.d.ts +4 -0
  333. package/packages/shared/dist/types/preferences.d.ts.map +1 -1
  334. package/packages/shared/dist/types/preferences.js.map +1 -1
  335. package/packages/shared/dist/types/queue.d.ts +9 -0
  336. package/packages/shared/dist/types/queue.d.ts.map +1 -1
  337. package/packages/shared/dist/types/sdk.d.ts +1 -1
  338. package/packages/shared/dist/types/sdk.d.ts.map +1 -1
  339. package/packages/shared/dist/types/sdk.js +1 -1
  340. package/packages/shared/dist/types/sdk.js.map +1 -1
  341. package/packages/shared/dist/types/websocket.d.ts +10 -0
  342. package/packages/shared/dist/types/websocket.d.ts.map +1 -1
  343. package/packages/shared/dist/utils/markdownSections.d.ts +50 -0
  344. package/packages/shared/dist/utils/markdownSections.d.ts.map +1 -0
  345. package/packages/shared/dist/utils/markdownSections.js +111 -0
  346. package/packages/shared/dist/utils/markdownSections.js.map +1 -0
  347. package/packages/shared/dist/utils/queueParser.d.ts.map +1 -1
  348. package/packages/shared/dist/utils/queueParser.js +104 -0
  349. package/packages/shared/dist/utils/queueParser.js.map +1 -1
  350. package/scripts/build-manual-shards.mjs +100 -0
  351. package/packages/client/dist/assets/index-6jREnVYd.js +0 -2
  352. package/packages/client/dist/assets/index-BFF0iqyW.css +0 -32
  353. package/packages/client/dist/assets/index-BcI4y-fU.js +0 -1454
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Story 31.4: Plugin marketplace catalog service (read-only).
3
+ *
4
+ * Surfaces the *full* `plugins[]` catalog from each registered marketplace —
5
+ * the entries Story 28.1 `harnessPluginService.listCards` deliberately discards
6
+ * (it keeps only installed cards). Builds a unified catalog by reading:
7
+ * - `plugins/known_marketplaces.json` → registered market names
8
+ * - `plugins/marketplaces/<name>/.claude-plugin/marketplace.json` → plugins[]
9
+ * - `plugins/installed_plugins.json` → installed flag join (AC1.d)
10
+ *
11
+ * Design constraints (Story 31.4):
12
+ * - 28.1 `harnessPluginService` is NOT modified — this is a separate
13
+ * read-only service so the stable toggle/list path cannot regress.
14
+ * - Per-market parse failures are isolated into `errors[]` instead of
15
+ * aborting the whole catalog (AC5) — unlike 28.1 which re-throws.
16
+ * - Plugin type is decided by the `source` path prefix (AC1.c), not by
17
+ * component counts, because unbuilt catalog entries have no installPath.
18
+ * - Component counts are reimplemented here (not extracted from 28.1) so the
19
+ * stable service is untouched and because the input is a *market repo
20
+ * source dir*, not an installPath. De-dup is an optional later cleanup.
21
+ * - All catalog file reads go through `harnessService.read` (traversal
22
+ * guard). Only the market repo source-dir enumeration uses direct `fs`,
23
+ * and refuses any path outside `~/.claude`.
24
+ */
25
+ import path from 'path';
26
+ import fs from 'fs/promises';
27
+ import { HARNESS_ERRORS, } from '@hammoc/shared';
28
+ import { harnessService } from './harnessService.js';
29
+ import { projectService } from './projectService.js';
30
+ import { getUserHarnessRoot } from '../utils/harnessPaths.js';
31
+ /** installed_plugins.json `version` values this service understands (AC6). */
32
+ const KNOWN_INSTALLED_VERSIONS = new Set([1, 2]);
33
+ // --- helpers ---------------------------------------------------------------
34
+ function isFileNotFound(err) {
35
+ return err?.code === HARNESS_ERRORS.HARNESS_FILE_NOT_FOUND.code;
36
+ }
37
+ /**
38
+ * AC1.c: type from `source` path prefix. `./external_plugins/...` → external
39
+ * MCP wrapper; everything else (`./plugins/...`) → standard.
40
+ */
41
+ function decideTypeFromSource(source) {
42
+ const s = (source ?? '').replace(/^\.\//, '');
43
+ return s.startsWith('external_plugins/') ? 'external-mcp' : 'standard';
44
+ }
45
+ function samePath(a, b) {
46
+ const na = path.resolve(a);
47
+ const nb = path.resolve(b);
48
+ return process.platform === 'win32' ? na.toLowerCase() === nb.toLowerCase() : na === nb;
49
+ }
50
+ function isLikelyMcpServerEntry(value) {
51
+ if (!value || typeof value !== 'object' || Array.isArray(value))
52
+ return false;
53
+ const rec = value;
54
+ return (typeof rec.command === 'string'
55
+ || typeof rec.url === 'string'
56
+ || typeof rec.type === 'string'
57
+ || typeof rec.transport === 'string');
58
+ }
59
+ // Component counters — reimplemented from 28.1 `countComponents` + 4 helpers.
60
+ // Kept private to this module (not shared util) per Story 31.4 A.1 rationale.
61
+ async function countSkillsDir(dir) {
62
+ try {
63
+ const entries = await fs.readdir(dir, { withFileTypes: true });
64
+ let n = 0;
65
+ for (const ent of entries) {
66
+ if (!ent.isDirectory())
67
+ continue;
68
+ try {
69
+ await fs.access(path.join(dir, ent.name, 'SKILL.md'));
70
+ n += 1;
71
+ }
72
+ catch {
73
+ // no SKILL.md → skip
74
+ }
75
+ }
76
+ return n;
77
+ }
78
+ catch {
79
+ return 0;
80
+ }
81
+ }
82
+ async function countMarkdownFiles(dir) {
83
+ try {
84
+ const entries = await fs.readdir(dir, { withFileTypes: true });
85
+ let n = 0;
86
+ for (const ent of entries) {
87
+ if (ent.isFile() && ent.name.toLowerCase().endsWith('.md'))
88
+ n += 1;
89
+ }
90
+ return n;
91
+ }
92
+ catch {
93
+ return 0;
94
+ }
95
+ }
96
+ async function countHooksJson(file) {
97
+ try {
98
+ const content = await fs.readFile(file, 'utf-8');
99
+ const parsed = JSON.parse(content);
100
+ const hooks = parsed?.hooks;
101
+ if (!hooks || typeof hooks !== 'object')
102
+ return 0;
103
+ return Object.values(hooks)
104
+ .filter(Array.isArray)
105
+ .reduce((sum, arr) => sum + arr.length, 0);
106
+ }
107
+ catch {
108
+ return 0;
109
+ }
110
+ }
111
+ async function countMcpServers(file) {
112
+ try {
113
+ const content = await fs.readFile(file, 'utf-8');
114
+ const parsed = JSON.parse(content);
115
+ if (!parsed || typeof parsed !== 'object')
116
+ return 0;
117
+ const wrapper = parsed.mcpServers;
118
+ if (wrapper && typeof wrapper === 'object' && !Array.isArray(wrapper)) {
119
+ return Object.keys(wrapper).length;
120
+ }
121
+ let n = 0;
122
+ for (const value of Object.values(parsed)) {
123
+ if (isLikelyMcpServerEntry(value))
124
+ n += 1;
125
+ }
126
+ return n;
127
+ }
128
+ catch {
129
+ return 0;
130
+ }
131
+ }
132
+ class MarketplaceService {
133
+ /**
134
+ * Build the unified catalog. Never throws on per-market or installed-file
135
+ * problems — they degrade into `errors[]` / `formatWarning` (AC5/AC6).
136
+ */
137
+ async listCatalog(currentProjectSlug) {
138
+ const currentProjectPath = await this.resolveCurrentProjectPath(currentProjectSlug);
139
+ const userRoot = path.resolve(getUserHarnessRoot());
140
+ // Step 1: known_marketplaces.json (absent or malformed → empty catalog).
141
+ let known = {};
142
+ try {
143
+ const res = await harnessService.read({
144
+ scope: 'user',
145
+ relativePath: 'plugins/known_marketplaces.json',
146
+ });
147
+ known = this.safeParse(res.content ?? '', {});
148
+ }
149
+ catch (err) {
150
+ if (!isFileNotFound(err))
151
+ throw err;
152
+ return { marketplaces: [], entries: [], errors: [] };
153
+ }
154
+ const marketplaces = Object.keys(known).filter((k) => k && typeof k === 'string');
155
+ // Step 2+3: per-market marketplace.json → catalog entries; isolate failures.
156
+ const entries = [];
157
+ const errors = [];
158
+ for (const marketName of marketplaces) {
159
+ let raw;
160
+ try {
161
+ const res = await harnessService.read({
162
+ scope: 'user',
163
+ relativePath: `plugins/marketplaces/${marketName}/.claude-plugin/marketplace.json`,
164
+ });
165
+ raw = res.content ?? '';
166
+ }
167
+ catch (err) {
168
+ errors.push({
169
+ marketplace: marketName,
170
+ code: isFileNotFound(err)
171
+ ? HARNESS_ERRORS.HARNESS_FILE_NOT_FOUND.code
172
+ : HARNESS_ERRORS.HARNESS_PARSE_ERROR.code,
173
+ });
174
+ continue;
175
+ }
176
+ let meta;
177
+ try {
178
+ meta = JSON.parse(raw);
179
+ }
180
+ catch {
181
+ errors.push({ marketplace: marketName, code: HARNESS_ERRORS.HARNESS_PARSE_ERROR.code });
182
+ continue;
183
+ }
184
+ for (const plugin of meta.plugins ?? []) {
185
+ if (!plugin?.name)
186
+ continue;
187
+ const entry = {
188
+ key: `${plugin.name}@${marketName}`,
189
+ name: plugin.name,
190
+ marketplace: marketName,
191
+ description: plugin.description,
192
+ version: plugin.version,
193
+ author: plugin.author,
194
+ category: plugin.category,
195
+ pluginType: decideTypeFromSource(plugin.source),
196
+ source: plugin.source,
197
+ installed: false, // filled in step 4
198
+ };
199
+ const counts = await this.countComponentsForSource(userRoot, marketName, plugin.source);
200
+ if (counts)
201
+ entry.componentCounts = counts;
202
+ entries.push(entry);
203
+ }
204
+ }
205
+ // Step 4: installed_plugins.json join + format warning (AC1.d / AC6).
206
+ const { installedKeys, formatWarning } = await this.readInstalledState(currentProjectPath);
207
+ for (const entry of entries) {
208
+ entry.installed = installedKeys.has(entry.key);
209
+ }
210
+ return {
211
+ marketplaces,
212
+ entries,
213
+ errors,
214
+ ...(formatWarning ? { formatWarning } : {}),
215
+ };
216
+ }
217
+ /**
218
+ * Read installed_plugins.json into a set of installed keys + an optional
219
+ * format warning. Absent file → no installs, no warning (normal). Unknown
220
+ * version / wrong shape / parse error → degrade with a warning (AC6).
221
+ */
222
+ async readInstalledState(currentProjectPath) {
223
+ const installedKeys = new Set();
224
+ let content;
225
+ try {
226
+ const res = await harnessService.read({
227
+ scope: 'user',
228
+ relativePath: 'plugins/installed_plugins.json',
229
+ });
230
+ content = res.content ?? '';
231
+ }
232
+ catch (err) {
233
+ if (isFileNotFound(err))
234
+ return { installedKeys };
235
+ throw err;
236
+ }
237
+ let parsed;
238
+ try {
239
+ parsed = JSON.parse(content);
240
+ }
241
+ catch {
242
+ return { installedKeys, formatWarning: { reason: 'parseError' } };
243
+ }
244
+ let formatWarning;
245
+ if (typeof parsed.version === 'number' && !KNOWN_INSTALLED_VERSIONS.has(parsed.version)) {
246
+ formatWarning = { detectedVersion: parsed.version, reason: 'unrecognizedVersion' };
247
+ }
248
+ const plugins = parsed.plugins;
249
+ if (plugins && typeof plugins === 'object' && !Array.isArray(plugins)) {
250
+ for (const [key, value] of Object.entries(plugins)) {
251
+ const arr = Array.isArray(value) ? value : [value];
252
+ const installed = arr.some((e) => {
253
+ if (!e || typeof e !== 'object')
254
+ return false;
255
+ if (e.scope === 'project') {
256
+ return (!!currentProjectPath
257
+ && typeof e.projectPath === 'string'
258
+ && samePath(e.projectPath, currentProjectPath));
259
+ }
260
+ // user scope (or unspecified) → globally installed
261
+ return true;
262
+ });
263
+ if (installed)
264
+ installedKeys.add(key);
265
+ }
266
+ }
267
+ else if (plugins !== undefined) {
268
+ formatWarning = formatWarning ?? {
269
+ detectedVersion: typeof parsed.version === 'number' ? parsed.version : undefined,
270
+ reason: 'unexpectedShape',
271
+ };
272
+ }
273
+ return { installedKeys, formatWarning };
274
+ }
275
+ /**
276
+ * Best-effort component tally from the cloned market repo source dir
277
+ * (`<userRoot>/plugins/marketplaces/<market>/<source>/`). Returns undefined
278
+ * when the dir is missing or resolves outside `~/.claude` (type badge still
279
+ * renders without counts).
280
+ */
281
+ async countComponentsForSource(userRoot, marketName, source) {
282
+ if (!source || typeof source !== 'string')
283
+ return undefined;
284
+ const rel = source.replace(/^\.\//, '');
285
+ const abs = path.resolve(userRoot, 'plugins', 'marketplaces', marketName, rel);
286
+ // Refuse anything outside ~/.claude (defends against `..` in source).
287
+ if (abs !== userRoot && !abs.startsWith(userRoot + path.sep))
288
+ return undefined;
289
+ try {
290
+ const stat = await fs.stat(abs);
291
+ if (!stat.isDirectory())
292
+ return undefined;
293
+ }
294
+ catch {
295
+ return undefined;
296
+ }
297
+ const [skills, commands, agents, hooks, mcpServers] = await Promise.all([
298
+ countSkillsDir(path.join(abs, 'skills')),
299
+ countMarkdownFiles(path.join(abs, 'commands')),
300
+ countMarkdownFiles(path.join(abs, 'agents')),
301
+ countHooksJson(path.join(abs, 'hooks', 'hooks.json')),
302
+ countMcpServers(path.join(abs, '.mcp.json')),
303
+ ]);
304
+ return { skills, commands, agents, hooks, mcpServers };
305
+ }
306
+ async resolveCurrentProjectPath(slug) {
307
+ if (!slug)
308
+ return undefined;
309
+ try {
310
+ return await projectService.resolveOriginalPath(slug);
311
+ }
312
+ catch {
313
+ return undefined;
314
+ }
315
+ }
316
+ safeParse(content, fallback) {
317
+ try {
318
+ return JSON.parse(content);
319
+ }
320
+ catch {
321
+ return fallback;
322
+ }
323
+ }
324
+ }
325
+ export const marketplaceService = new MarketplaceService();
326
+ //# sourceMappingURL=marketplaceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplaceService.js","sourceRoot":"","sources":["../../src/services/marketplaceService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Story 31.3 (Task A.1 / A.2): Observability MCP-call persistence + collection.
3
+ *
4
+ * Backend = JSONL rolling log under `~/.hammoc/observability/<projectSlug>.jsonl`
5
+ * (spike #3, §16 — 30k records query in ~34ms; SQLite not needed; consistent
6
+ * with architecture §9 "file-based storage, no external DB" and the existing
7
+ * `~/.hammoc/` plaintext files). `~/.hammoc/` is a SIBLING of `.claude/` and
8
+ * therefore outside the harness whitelist, so we use direct `fs` here — exactly
9
+ * like `preferencesService` does for `~/.hammoc/preferences.json` (the
10
+ * `storageService` named in the epic does not exist; `fileSystemService` /
11
+ * direct fs is the real pattern, S-B).
12
+ *
13
+ * Records are append-only. Argument/result BODIES are never stored — only their
14
+ * UTF-8 byte sizes — so secrets/file contents cannot leak (AC-A1.c).
15
+ *
16
+ * Collection seam: `createMcpCallRecorder` returns a small per-stream stateful
17
+ * object that the shared callback builder (`buildStreamCallbacks`) drives via
18
+ * onToolUse / onToolResult / onTurnEnd. A record is appended EXACTLY ONCE per
19
+ * call at onToolResult; orphans (no result) are flushed once at turn end with
20
+ * null fields (S-A / N-A).
21
+ */
22
+ import { type McpCallRecord, type McpCallAggregate, type ObservabilityQuery, type ObservabilityMcpCallsResponse, type ToolResult } from '@hammoc/shared';
23
+ /** Parse `mcp__<server>__<tool>` → `<server>`; built-ins → null (AC-A1.d). */
24
+ export declare function parseServerName(toolName: string): string | null;
25
+ /** UTF-8 byte length of an arbitrary value's JSON (args) — body discarded. */
26
+ export declare function argByteSize(input: unknown): number;
27
+ /** UTF-8 byte length of a tool result body (output ?? error ?? ''). */
28
+ export declare function resultByteSize(result: ToolResult): number;
29
+ declare class ObservabilityService {
30
+ /** Serializes appends so concurrent streams never interleave partial lines. */
31
+ private appendChain;
32
+ /** Last prune time per project (epoch ms) — throttles append-time prune. */
33
+ private lastPruneAt;
34
+ private dir;
35
+ private filePath;
36
+ /**
37
+ * Append one record (AC-A1.c). Serialized via an internal promise chain.
38
+ * Triggers a throttled prune so the retention window is enforced without
39
+ * startup wiring (AC-A3.b — "append 시점 또는 서버 기동 시 prune").
40
+ */
41
+ recordCall(record: McpCallRecord): Promise<void>;
42
+ /** Throttled prune triggered from the append path. Fire-and-forget. */
43
+ private maybePrune;
44
+ /** Read + parse all records for a project (skips malformed lines). */
45
+ private readAll;
46
+ /**
47
+ * Query the log with filters + aggregation (AC-A1.b / AC-A2). Always applies
48
+ * the retention cutoff on read so expired records never surface even before a
49
+ * compaction runs.
50
+ */
51
+ query(projectSlug: string, filter?: ObservabilityQuery): Promise<ObservabilityMcpCallsResponse>;
52
+ /**
53
+ * Drop records older than `retentionDays` and rewrite the file (AC-A3.b).
54
+ * Returns the number of records removed. Routed through the append chain so a
55
+ * rewrite never races a concurrent append.
56
+ */
57
+ prune(projectSlug: string, retentionDays?: number): Promise<number>;
58
+ }
59
+ /** Aggregate by (serverName, toolName). Exported for unit tests. */
60
+ export declare function aggregate(records: McpCallRecord[]): McpCallAggregate[];
61
+ export declare const observabilityService: ObservabilityService;
62
+ /**
63
+ * Drives MCP-call collection from the shared callback builder. One instance per
64
+ * stream. Maintains an in-memory `toolUseId → start info` map so the two
65
+ * separately-fired callbacks (`onToolUse` has no result, `onToolResult` has no
66
+ * start time) can be joined into a single complete record with `durationMs`.
67
+ *
68
+ * Lifecycle (S-A / N-A):
69
+ * - onToolUse → buffer start info (no append).
70
+ * - onToolResult → append ONE complete record, delete the map entry.
71
+ * - onTurnEnd → flush remaining (orphan) entries as null-field records, clear.
72
+ * The map is therefore bounded to a single turn's lifetime (no leak).
73
+ */
74
+ export interface McpCallRecorder {
75
+ onToolUse(toolUseId: string, toolName: string, input: unknown): void;
76
+ onToolResult(toolUseId: string, result: ToolResult, sessionId: string | undefined): void;
77
+ onTurnEnd(sessionId: string | undefined): void;
78
+ }
79
+ /**
80
+ * Create a recorder. `resolveProjectSlug` is a thunk (sync for the queue path
81
+ * where `this.projectSlug` is known; async for the browser path where the slug
82
+ * is resolved from the working directory). The resolved slug is memoized; until
83
+ * it resolves (or if it is null — no project context) appends are skipped.
84
+ */
85
+ export declare function createMcpCallRecorder(resolveProjectSlug: () => string | null | undefined | Promise<string | null | undefined>): McpCallRecorder;
86
+ export {};
87
+ //# sourceMappingURL=observabilityService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observabilityService.d.ts","sourceRoot":"","sources":["../../src/services/observabilityService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,6BAA6B,EAClC,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AASxB,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK/D;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMlD;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAEzD;AAOD,cAAM,oBAAoB;IACxB,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAAoC;IACvD,4EAA4E;IAC5E,OAAO,CAAC,WAAW,CAA6B;IAEhD,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAetD,uEAAuE;YACzD,UAAU;IAYxB,sEAAsE;YACxD,OAAO;IAoBrB;;;;OAIG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAsBzG;;;;OAIG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,SAA+B,GAAG,OAAO,CAAC,MAAM,CAAC;CAehG;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CA4BtE;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC;AAM/D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACrE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACzF,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAChD;AASD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,kBAAkB,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GACvF,eAAe,CAmEjB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observabilityService.js","sourceRoot":"","sources":["../../src/services/observabilityService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queueService.d.ts","sourceRoot":"","sources":["../../src/services/queueService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queueService.d.ts","sourceRoot":"","sources":["../../src/services/queueService.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ const log = createLogger('queueService');
14
14
  import { formatAskQuestionPrompt } from './notificationService.js';
15
15
  import { createHeadlessStream, isSessionStreaming, rekeyStream, finalizeStream, broadcastStreamChange, } from '../handlers/websocket.js';
16
16
  import { buildStreamCallbacks } from '../handlers/streamCallbacks.js';
17
+ import { createMcpCallRecorder } from './observabilityService.js';
17
18
  export class QueueService {
18
19
  projectService;
19
20
  notificationService;
@@ -265,6 +266,8 @@ export class QueueService {
265
266
  return false;
266
267
  if (item.loop)
267
268
  return false; // Block directives cannot be added via addItem
269
+ if (item.label != null || item.jumpIf != null)
270
+ return false; // Jump-related directives must be added via script edit
268
271
  this.items.push(item);
269
272
  this.emitItemsUpdated();
270
273
  this.emitProgress(this.isPaused ? 'paused' : 'running');
@@ -372,7 +375,15 @@ export class QueueService {
372
375
  // Process advancement FIRST, then check pause.
373
376
  // @pause: shouldAdvance=true (advance past breakpoint), isPaused=true (break after)
374
377
  // @pauseword/error/@load failure: shouldAdvance=false (stay for retry), isPaused=true (break)
375
- if (result.shouldAdvance) {
378
+ // @jumpif (matched): jumpTo set, advance currentIndex to the label position instead of incrementing
379
+ if (result.jumpTo !== undefined) {
380
+ this.emitItemComplete(this.currentIndex);
381
+ this.currentIndex = result.jumpTo;
382
+ if (!this.isPaused && this._isRunning && this.currentIndex < this.items.length) {
383
+ this.emitProgress('running');
384
+ }
385
+ }
386
+ else if (result.shouldAdvance) {
376
387
  this.emitItemComplete(this.currentIndex);
377
388
  this.currentIndex++;
378
389
  // Emit progress after advancing so clients update currentIndex and sessionId in real-time
@@ -591,6 +602,30 @@ export class QueueService {
591
602
  this.emitProgress('paused');
592
603
  return { shouldAdvance: true };
593
604
  }
605
+ // Step 2.1: Label — pure marker, advance past it without affecting state
606
+ if (item.label) {
607
+ log.debug(`executeItem: LABEL "${item.label}"`);
608
+ return { shouldAdvance: true };
609
+ }
610
+ // Step 2.2: Conditional jump — if the previous prompt response contains the token, jump to the target label
611
+ if (item.jumpIf) {
612
+ const { token, target } = item.jumpIf;
613
+ if (this.lastPromptResponse.includes(token)) {
614
+ const targetIdx = this.items.findIndex((it) => it.label === target);
615
+ if (targetIdx === -1) {
616
+ log.warn(`JUMPIF: target label "${target}" not found in current items — skipping jump`);
617
+ return { shouldAdvance: true };
618
+ }
619
+ if (targetIdx <= this.currentIndex) {
620
+ log.warn(`JUMPIF: target "${target}" at index ${targetIdx} is not forward of current ${this.currentIndex} — skipping jump`);
621
+ return { shouldAdvance: true };
622
+ }
623
+ log.info(`JUMPIF: token "${token}" matched, jumping from ${this.currentIndex} to ${targetIdx} (label "${target}")`);
624
+ return { shouldAdvance: false, jumpTo: targetIdx };
625
+ }
626
+ log.debug(`executeItem: JUMPIF token "${token}" not found in last response — falling through`);
627
+ return { shouldAdvance: true };
628
+ }
594
629
  // Step 2.5: Snippet resolution (skip already-expanded items to prevent recursion)
595
630
  if (item.prompt && isSnippetRef(item.prompt) && !this.snippetExpandedItems.has(item)) {
596
631
  try {
@@ -603,7 +638,16 @@ export class QueueService {
603
638
  this.snippetExpandedItems.add(qi);
604
639
  return qi;
605
640
  });
606
- this.items.splice(this.currentIndex + 1, 0, ...newItems);
641
+ // Splice into the correct items array depending on context:
642
+ // inside a @loop block the inner items live on loopState.items, not this.items.
643
+ // Without this branch, expanded prompts would leak out of the loop and skip
644
+ // execution within the current iteration.
645
+ if (this.loopState) {
646
+ this.loopState.items.splice(this.loopState.innerIndex + 1, 0, ...newItems);
647
+ }
648
+ else {
649
+ this.items.splice(this.currentIndex + 1, 0, ...newItems);
650
+ }
607
651
  this.emitItemsUpdated();
608
652
  }
609
653
  }
@@ -734,6 +778,8 @@ export class QueueService {
734
778
  current: this.currentIndex + 1,
735
779
  total: this.items.length,
736
780
  }),
781
+ // Story 31.3 — projectSlug is known synchronously on the queue path.
782
+ mcpRecorder: createMcpCallRecorder(() => this.projectSlug || undefined),
737
783
  }, {
738
784
  onSessionIdResolved: (sid) => { this.currentSessionId = sid; },
739
785
  onTextChunkReceived: (chunk) => { chunks.push(chunk.content); },