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,194 @@
1
+ ## 10. Project Board
2
+
3
+ Visual task and issue management for your projects. The board displays three card types: Issues, Stories, and Epics.
4
+
5
+ ### 10.1 Kanban Board
6
+
7
+ The default view is a scrollable Kanban board:
8
+
9
+ - **Columns** represent statuses — each with a colored top border, label, and item count badge
10
+ - **Cards** display issues, stories, and epics with type badges: **[I]** (amber), **[S]** (blue), **[E]** (purple)
11
+ - **Horizontal scroll** — overflow columns peek from the edge (no drag-and-drop between columns). On desktop, vertical mouse wheel scrolling in empty column areas is automatically converted to horizontal scroll
12
+ - Status changes are made via the card **context menu** (⋮), not by dragging
13
+ - Columns are fully customizable (see §10.11)
14
+
15
+ ### 10.2 List View
16
+
17
+ Switch to an accordion-style list view:
18
+
19
+ - Items grouped by status column with chevron toggle
20
+ - **Item count** displayed next to each group header
21
+ - Only **non-empty columns** are shown (empty ones are hidden)
22
+ - On mobile, the last column auto-collapses to save space
23
+ - Compact card layout for browsing many items at once
24
+
25
+ ### 10.3 Creating Issues
26
+
27
+ Click **"New Issue"** to create:
28
+
29
+ | Field | Details |
30
+ |-------|---------|
31
+ | **Title** | Required, max 200 characters |
32
+ | **Description** | Optional, supports markdown |
33
+ | **Type** | Bug, Improvement |
34
+ | **Severity** | Low, Medium, High, Critical |
35
+ | **Attachments** | Optional — drag-and-drop, click to browse, or paste from clipboard |
36
+
37
+ Status is automatically set to **Open** (not a user-editable field). Each issue is assigned a sequential ID in the **ISSUE-N** format (e.g., ISSUE-1, ISSUE-2) automatically.
38
+
39
+ ### 10.4 Editing Issues
40
+
41
+ Click the context menu (⋮) → **Edit** on any issue card:
42
+
43
+ - Same fields as the create dialog (title, description, type, severity)
44
+ - **Existing attachments** are shown with a delete button to remove each one
45
+ - **Add new attachments** via drag-and-drop, click, or paste
46
+
47
+ ### 10.5 Issue Types
48
+
49
+ - **Bug** — Something is broken and needs fixing
50
+ - **Improvement** — Enhancement to existing functionality
51
+
52
+ ### 10.6 Severity Levels
53
+
54
+ Severity badges are color-coded on cards:
55
+
56
+ - **Critical** — Red badge, urgent, needs immediate attention
57
+ - **High** — Orange badge, important, prioritize soon
58
+ - **Medium** — Yellow badge, should be addressed in normal workflow
59
+ - **Low** — Gray badge, minor issue, no urgency
60
+
61
+ ### 10.7 Status Workflow
62
+
63
+ Items follow this lifecycle. Issues and stories use overlapping but distinct subsets of these statuses:
64
+
65
+ **Issue statuses:**
66
+ ```
67
+ Open → In Progress → Ready for Done → Done → Closed
68
+
69
+ Promoted
70
+ ```
71
+
72
+ **Story statuses (with QA gate):**
73
+ ```
74
+ Draft → Approved → In Progress → Ready for Review → Done
75
+
76
+ ┌────────┴────────┐
77
+ QA Passed QA Failed
78
+ QA Waived QA Concerns
79
+ ↓ ↓
80
+ Ready for Done QA Fixed → (re-review)
81
+ ```
82
+
83
+ **QA gate badges** — When a story reaches "Ready for Review", the QA gate result determines the compound badge:
84
+ - **QA Passed** — Quality review passed
85
+ - **QA Waived** — Quality review waived/skipped
86
+ - **QA Failed** — Quality review failed, fixes needed
87
+ - **QA Concerns** — Quality review raised concerns
88
+ - **QA Fixed** — The developer has recorded a fix for the current gate; ready for re-review
89
+
90
+ Not all statuses are required. Use the context menu to change status directly. **Promoted** indicates an issue that has been escalated to a story or epic.
91
+
92
+ ### 10.8 File Attachments
93
+
94
+ Attach image files to issues:
95
+
96
+ - Up to **10 files** per issue
97
+ - Maximum **10MB** per file
98
+ - Supported formats: PNG, JPEG, GIF, WebP
99
+ - Upload methods: **drag-and-drop** onto the attachment zone, **click** to browse, or **paste** from clipboard
100
+ - Attachments are managed in the issue create/edit dialogs — they are not shown inline on board cards
101
+ - Preview thumbnails are shown in a grid with a remove button (×) for each
102
+
103
+ ### 10.9 Card Context Menu
104
+
105
+ Click the **⋮** button on any card to open the context menu. Actions vary by card type:
106
+
107
+ **Issue actions (by status):**
108
+ - **Open:**
109
+ - **Quick Fix** — Marks the issue as Done and opens a dev session with the issue context
110
+ - **Promote to Story** — Convert an issue into a development story (disabled if already linked)
111
+ - **Promote to Epic** — Elevate an issue into an epic (disabled if already linked)
112
+ - **Edit** — Open the issue edit dialog
113
+ - **Close** — Close the issue
114
+ - **In Progress:**
115
+ - **Resume Dev** — Resume development session for this issue
116
+ - **Ready for Done:**
117
+ - **Commit and Mark Done** — Commit related changes and mark as Done
118
+ - **Mark Done** — Mark as Done without committing
119
+ - **Closed / Done / Promoted:**
120
+ - **Reopen** — Reopen the issue
121
+ - **Delete** — Permanently remove the issue (available in all states)
122
+
123
+ **Story actions (by status):**
124
+ - **Draft:**
125
+ - **Validate and Fix** — Validate the story draft and fix issues
126
+ - **Validate Only** — Validate the story draft without fix
127
+ - **Approved:**
128
+ - **Start Development** — Begin implementing the story
129
+ - **Validate and Fix** / **Validate Only** — Re-validate if needed
130
+ - **In Progress:**
131
+ - **Resume Development** — Continue implementing the story
132
+ - **QA Passed / QA Waived:**
133
+ - **Commit and Complete Story** — Commit related changes and mark as Done
134
+ - **Complete Story** — Mark as Done without committing
135
+ - **Request QA Review** — Re-request quality review
136
+ - **QA Failed / QA Concerns:**
137
+ - **Apply QA Fix** — Apply fixes for QA issues (always offered)
138
+ - **Review Story** — Re-request QA review; also offered unless Hammoc has confirmed fixes are still pending for the current gate (e.g., legacy stories or external BMad projects)
139
+ - **QA Fixed:**
140
+ - **Apply QA Fix** / **Review Story** — Apply further fixes, or request re-review
141
+ - **Ready for Review / Ready for Done (no QA gate):**
142
+ - **Review Story** — Request quality review
143
+
144
+ **Epic actions:**
145
+ - **View Sub-Stories** — Open a dialog showing all stories under the epic
146
+ - **Create Next Story** — Draft the next story for this epic with the SM agent (hidden when the epic is Done)
147
+
148
+ The menu supports keyboard navigation (Arrow Up/Down, Enter, Escape).
149
+
150
+ ### 10.10 Card Behavior
151
+
152
+ Cards display information based on their type:
153
+
154
+ - **Type badge** — [I], [S], or [E] with color coding
155
+ - **Severity badge** — For issues only, color-coded by level
156
+ - **Status badge** — Color-coded status indicator (stories also show QA gate badges such as QA Passed, QA Failed, etc.)
157
+ - **Issue number prefix** — Issues now show a short `#N` prefix (e.g., `#1`, `#42`) in monospace gray immediately before the title, so a board card and a chat mention or filename like `ISSUE-42.md` can be matched at a glance. Legacy issues without an `ISSUE-N` ID do not get a prefix
158
+ - **Epic progress bar** — On epic cards, shows completion percentage with done/total count
159
+ - **Story epic number** — Shows the parent epic reference
160
+ - **Unmapped status warning** — ⚠ triangle icon when a card's status doesn't map to any column
161
+
162
+ **Click behavior:** Clicking a card navigates to its associated file in the development session.
163
+
164
+ ### 10.11 Board Configuration
165
+
166
+ Customize the board layout via the gear icon:
167
+
168
+ **Columns:**
169
+ - Add, remove, and **reorder** columns (Arrow Up/Down buttons)
170
+ - Maximum **10 columns** allowed
171
+ - **Required columns** (mapped to essential statuses) cannot be deleted
172
+ - Each column has a name and an optional color
173
+
174
+ **Colors:**
175
+ - Pick from a preset **color palette** (swatches) or leave as default
176
+ - Colors appear as the column's top border
177
+
178
+ **Status Mapping:**
179
+ - Map statuses and QA gate badges (Open, Draft, Approved, In Progress, Blocked, Ready for Review, QA Passed, QA Waived, QA Failed, QA Concerns, QA Fixed, Ready for Done, Done, Closed, Promoted) to columns
180
+ - **Custom status mapping** — Define additional custom status strings and assign them to columns
181
+
182
+ **Reset:**
183
+ - **Reset to defaults** button restores the original column layout (with confirmation dialog)
184
+
185
+ ### 10.12 Mobile Kanban
186
+
187
+ On small screens, the board uses a swipe carousel:
188
+
189
+ - **Swipe left/right** to navigate between columns
190
+ - **Rubber-band resistance** at the first and last columns (cannot swipe past edges)
191
+ - **Indicator dots** at the bottom show current position
192
+ - Smooth transition animation between columns
193
+ - Touch-optimized card layout
194
+
@@ -0,0 +1,130 @@
1
+ ## 11. BMAD-METHOD Integration
2
+
3
+ Hammoc provides first-class support for the [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD) (Breakthrough Method for Agile AI-Driven Development).
4
+
5
+ ### 11.1 What is BMAD-METHOD?
6
+
7
+ BMAD-METHOD is an open-source framework that structures AI-driven software development. It defines:
8
+
9
+ - **Agents** — Specialized AI roles organized by workflow phase
10
+ - **Documents** — PRD, Architecture spec, Frontend spec, Stories, QA plans, and supplementary docs (brainstorming, market research, competitor analysis, project brief)
11
+ - **Workflows** — Phase-based processes from research through implementation to completion
12
+
13
+ ### 11.2 Setting Up BMad in a Project
14
+
15
+ BMad can be set up in two ways:
16
+
17
+ **During project creation:**
18
+ 1. In the **New Project** dialog, the **"Setup BMad"** checkbox is enabled by default
19
+ 2. Select the BMAD-METHOD version from the dropdown (defaults to latest)
20
+ 3. The `.bmad-core` folder is automatically created when the project is registered
21
+
22
+ **For existing projects:**
23
+ 1. Open the project card's **kebab menu** (⋮) on the project list page
24
+ 2. Click **"Setup BMad"** (only shown for non-BMad projects)
25
+ 3. Confirm the version to install
26
+ 4. The `.bmad-core` folder is created with the required files
27
+
28
+ The `.bmad-core` folder contains agents, tasks, templates, workflows, and configuration files including `core-config.yaml`.
29
+
30
+ ### 11.3 BMad Agents
31
+
32
+ Click the **Agent Button** (Users icon, in the chat bottom bar right of the model selector) to open the agent dropdown:
33
+
34
+ **Planning group:**
35
+
36
+ | Agent | Role |
37
+ |-------|------|
38
+ | **Analyst** | Brainstorming, market research, competitor analysis, project brief |
39
+ | **PM** (Product Manager) | Defines PRD with epics and stories |
40
+ | **UX Expert** | Creates frontend specifications |
41
+ | **Architect** | Designs system architecture (backend, frontend, full-stack) |
42
+
43
+ **Implementation group:**
44
+
45
+ | Agent | Role |
46
+ |-------|------|
47
+ | **SM** (Scrum Master) | Drafts stories, orchestrates development |
48
+ | **PO** (Product Owner) | Validates story drafts against PRD |
49
+ | **Dev** (Developer) | Implements features, applies QA fixes |
50
+ | **QA** | Reviews and validates implementation quality |
51
+
52
+ **Agent dropdown features:**
53
+ - **Categorized groups** — Planning, Implementation, Other (with section labels)
54
+ - **Active agent checkmark** — Blue check icon next to the currently active agent
55
+ - **Agent icon & description** — Emoji icon and hover tooltip with role description
56
+ - **Keyboard navigation** — Arrow Up/Down to move, Enter to select, Escape to close
57
+ - Selecting an agent sends the agent command (e.g., `/BMad:agents:pm`) as the first prompt in the session
58
+
59
+ ### 11.4 Project Overview Dashboard
60
+
61
+ For BMad projects, the overview page displays additional sections above the standard project overview (see §5.5):
62
+
63
+ **BMad Summary Card:**
64
+ - Overall **completion percentage** with a progress bar
65
+ - **Done/total epics** and **done/total stories** counts
66
+ - Background refresh indicator
67
+
68
+ **Next Step Recommender:**
69
+ - Detects the current **workflow phase** (Pre-PRD, Pre-Architecture, Implementation, Completed)
70
+ - Shows context-aware **action buttons** (primary/secondary) that navigate to the right agent + task command
71
+ - Quick links: New Session, Queue Runner, File Explorer
72
+ - See §11.5 for phase details
73
+
74
+ **Document Status Card:**
75
+ - Core documents: **PRD** and **Architecture** with exists/missing indicators
76
+ - Supplementary documents: Brainstorming, Market Research, Competitor Analysis, Project Brief, Frontend Spec, UI Architecture
77
+ - **"작성 필요"** (Required) badge for missing core documents; **"작성 권장"** (Recommended) for optional documents
78
+ - **Agent shortcut buttons** (→) to create missing documents with the appropriate agent
79
+ - **Sharded document support** — PRD and Architecture can be split into multiple files; expandable file tree view
80
+ - **Auxiliary documents** section — Stories and QA files with counts and expandable file trees
81
+
82
+ **Epic Progress Card:**
83
+ - Each epic shows a **color-coded progress bar** that reflects completion level
84
+ - **Done/planned** story count per epic
85
+ - Click to **expand** and see individual story statuses with color-coded badges
86
+ - Story file links to navigate directly to the story file
87
+ - Unwritten story count shown when planned > written
88
+
89
+ **Recent Issues Card** (replaces Quick Start for BMad projects):
90
+ - Last 5 issues with severity dot, title, and status badge
91
+ - Click to navigate to the project board
92
+ - Link to "View Board"
93
+
94
+ ### 11.5 Workflow Phases & Recommendations
95
+
96
+ The Next Step Recommender analyzes the project state and suggests actions based on four phases:
97
+
98
+ **Phase 1: Pre-PRD** (PRD does not exist)
99
+ - **Primary:** Create PRD → PM agent
100
+ - **Secondary:** Brainstorming, Market Research, Competitor Analysis, Project Brief → Analyst agent
101
+ - Once a Project Brief already exists, the **Brainstorming** suggestion is hidden — the recommender treats the Brief as the brainstorm output and stops nagging
102
+
103
+ **Phase 2: Pre-Architecture** (PRD exists, Architecture does not)
104
+ - **Primary:** Create Backend / Frontend / Full-stack Architecture → Architect agent
105
+ - **Secondary:** Create Frontend Spec → UX Expert agent (if not exists)
106
+
107
+ **Phase 3: Implementation** (both PRD and Architecture exist)
108
+
109
+ Recommendations follow reverse workflow order (finish what's closest to done first):
110
+
111
+ - **Priority 1:** QA Passed/Waived stories → Commit and mark Done, mark Done without committing, or re-request QA review → Dev/QA agent
112
+ - **Priority 2:** QA Failed/Concerns stories → the next step depends on whether the developer has already recorded a fix for the *current* gate:
113
+ - Fix already applied for this gate → Request QA re-review → QA agent
114
+ - Fix still needed → Apply QA fixes → Dev agent
115
+ - State unknown (a story from before this tracking existed, an external BMad project, or a manually-edited gate) → **both** "Apply QA fixes" and "Request QA review" are offered (apply-fixes leading) so you choose
116
+ - **Priority 3:** Ready for Review stories (no QA gate) → Request QA review → QA agent
117
+ - **Priority 4:** In Progress stories → Continue development → Dev agent
118
+ - **Priority 5:** Approved stories → Start development (Dev), or re-validate with Validate and Fix / Validate Only → PO agent
119
+ - **Priority 6:** Draft stories → Validate and Fix / Validate Only → PO agent
120
+ - **Priority 7:** Create next story → SM agent (when no actionable stories)
121
+
122
+ **Phase 4: Completed** (all planned stories are Done)
123
+ - Brainstorm new features → Analyst agent
124
+ - Add new epic → PM agent
125
+ - Add story to existing epic → SM agent
126
+
127
+ ### 11.6 Queue Templates from PRD
128
+
129
+ Queue templates automate story development in batch. For details, see §9.9 (Queue Templates).
130
+
@@ -0,0 +1,256 @@
1
+ ## 12. Harness Workbench
2
+
3
+ The **Harness Workbench** is the unified surface for managing everything Claude Code reads from the `.claude/` configuration tree — plugins, skills, MCP servers, hooks, slash commands, sub-agents, `CLAUDE.md`, and Hammoc-native `%snippets`. It lives inside each project's **Settings** tab (see §5.3) under the "Harness Workbench" group, so the workbench is always scoped to the project you're working on but can also reach the global (`~/.claude/`) versions of each item.
4
+
5
+ The same Settings tab also hosts four sibling harness-engineering panels next to the Workbench (each a top-level nav item, not one of the Workbench's own sections): **BMad Settings** (§12.16, BMad projects only), **Context Builder** (§12.17), **Observability** (§12.18), and **Plugin Marketplace** (§12.19).
6
+
7
+ ### 12.1 Layout
8
+
9
+ The workbench has two stacked headers above an eight-section navigator:
10
+
11
+ - **Mode banner** — Workbench-wide; explains whether the project's `.claude/` is git-tracked or ignored (see §12.2)
12
+ - **Lint preferences button** — Top-right; opens a dialog to toggle the seven static-lint rules (see §12.12)
13
+
14
+ The section navigator is a vertical sidebar on desktop and a horizontally-scrolling pill row on mobile. Sections, in order:
15
+
16
+ 1. **Plugins** — Installed Claude Code plugins (see §12.4)
17
+ 2. **Skills** — `SKILL.md` skill bundles (see §12.5)
18
+ 3. **MCP** — MCP server entries from `.mcp.json` / `~/.claude/.mcp.json` (see §12.6)
19
+ 4. **Hooks** — Lifecycle hooks declared in `settings.json` (see §12.7)
20
+ 5. **Commands** — Slash command files (see §12.8)
21
+ 6. **Agents** — Sub-agent definitions (see §12.9)
22
+ 7. **CLAUDE.md** — Project and global instruction documents (see §12.10)
23
+ 8. **Snippets** — Hammoc `%snippet` library + Claude Code slash-command favorites (see §12.11)
24
+
25
+ When the workbench loads, every section's data is fetched in parallel and cached, so switching between sections feels instant. Each section's data also stays in sync with disk: any external change (made outside Hammoc) updates the corresponding card without a reload.
26
+
27
+ ### 12.2 Share Mode Banner
28
+
29
+ A workbench-wide banner just above the navigator tells you how the project shares its `.claude/` configuration:
30
+
31
+ - **Team-shared** (gray banner) — `.claude/` is **not** ignored by git. Files committed here (skills, hook definitions, the project `CLAUDE.md`, etc.) ship with the repo and reach every teammate.
32
+ - **Private** (amber banner) — `.claude/` (or a parent path) is excluded by `.gitignore`. Files here stay on your machine, so a teammate cloning the repo gets none of them.
33
+
34
+ The banner is derived from the project root's `.gitignore`. Edit the rules and the banner updates the next time the workbench refreshes.
35
+
36
+ > The Private mode banner surfaces an **Export** action on its right edge (in addition to the workbench-wide Bundle menu) so you can ship the current harness state to a teammate as a single `.zip` bundle. See §12.15 for the full export/import flow.
37
+
38
+ ### 12.3 Share Badges
39
+
40
+ Every editable card (skill, MCP, hook, command, agent, `CLAUDE.md`, snippet) shows a small **share badge** indicating that specific file's git scope:
41
+
42
+ - **Shared** (blue) — File tracked by git; team will see your edits after a commit
43
+ - **Local** (gray) — File exists but is not tracked
44
+ - **Ignored** (amber) — `.claude/` is fully git-excluded; this file will not be committed
45
+
46
+ The badge is computed per-file so a single project can mix shared and local items.
47
+
48
+ ### 12.4 Plugins Panel
49
+
50
+ Lists every Claude Code plugin discovered under the project and global plugin roots:
51
+
52
+ - One card per plugin with name, version, and small component counts (skills, commands, agents, hooks, MCP servers it ships)
53
+ - A toggle switch enables or disables the plugin without uninstalling it
54
+ - Plugin-provided items appear (read-only) in the other workbench sections too, with a **"Plugin: <key>"** scope badge
55
+
56
+ ### 12.5 Skills Panel
57
+
58
+ Card grid for skill bundles (a `SKILL.md` plus optional supporting files):
59
+
60
+ - **Scope filter** — All / Project / Global / Plugin
61
+ - **Card front** — Name, description, scope badge, share badge, lint marker (if the skill has lint issues), and a kebab menu for copy actions
62
+ - **Open** — Click the card to open the **Skill Editor**, a modal with two modes:
63
+ - **Form mode** — Separate fields for the YAML frontmatter (Name, Description, Version) and a Markdown body with edit/preview toggle
64
+ - **Raw mode** — Edit the raw `SKILL.md` text directly when the frontmatter cannot be parsed
65
+ - **Bundle resources** — A nested tree of supporting files (references, examples, scripts, assets) with file counts. Binary files are marked read-only; files over 1 MB are truncated
66
+ - **Copy actions** — Copy a skill between Project / Global / Plugin scopes. If the destination already has a skill with the same name, a **conflict dialog** offers Overwrite / Skip / Rename
67
+ - **Auto-save** — Edits debounce-save every ~300 ms; no manual save button
68
+ - **External-change banner** — If another tool overwrites the skill while you are editing, the editor reloads with a banner explaining the change
69
+
70
+ Bundled skills (from a plugin's `skills/`) can only be opened read-only — copy them to Project or Global scope first to customize.
71
+
72
+ ### 12.6 MCP Panel
73
+
74
+ Card grid for MCP server entries (from `.mcp.json` or `~/.claude/.mcp.json`):
75
+
76
+ - **Type badges** — `stdio`, `sse`, `http`, `ws`
77
+ - **Toggle** — Enable / Disable a server. Disabling moves the entry to a backup section of the JSON file rather than deleting it, so you can re-enable later
78
+ - **Editor** — Form fields for the server type, command, arguments (one per line), URL, headers (key/value rows), and environment variables (key/value rows). A mask toggle hides secret-looking values
79
+ - **Secret detection** — Values that look like API keys are marked inline. When you copy a server between scopes, a warning dialog lists detected secrets and requires explicit acknowledgement before copying
80
+ - **Fresh-spawn banner** — After enabling/disabling or editing a server, a banner reminds you that MCP changes only take effect on your **next** message in a new chat turn. A **Start new session** button is available
81
+
82
+ ### 12.7 Hooks Panel
83
+
84
+ Hooks are grouped by lifecycle event (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification):
85
+
86
+ - **Per-event sections** — Each event shows its hook cards and an inline "+ Add" button
87
+ - **Type badges** — `command` (shell command) and `prompt` (LLM-invoking)
88
+ - **Toggle** — Enable / Disable individual hooks
89
+ - **Matcher field** — Regex pattern that filters which tool calls (or events) the hook applies to; empty matcher means "all"
90
+ - **Parallel-execution badge** — Indicates when the hook runs alongside hooks from other sources for the same event
91
+ - **Cost warning** — `prompt`-type hooks invoke the LLM each time and show a cost/latency warning banner
92
+ - **Copy actions** — Same Project ↔ Global ↔ Plugin copy matrix as skills, with a review dialog that surfaces secret-looking values and command bodies before copying
93
+
94
+ ### 12.8 Commands Panel
95
+
96
+ Slash command files (the `.md` files behind `/your-command`):
97
+
98
+ - One card per command with name, description, scope badge, share badge, and lint marker
99
+ - **Editor** — Markdown body with edit/preview toggle and frontmatter fields (description, argument hints)
100
+ - **Copy / Override-clone** — Copy to the other scope, or clone a plugin-provided command into Project / Global so you can customize it without losing the upstream copy
101
+
102
+ ### 12.9 Agents Panel
103
+
104
+ Sub-agent definitions (`AGENT.md`-style files used by the `Agent` tool):
105
+
106
+ - One card per agent with name, role description, scope badge, share badge, lint marker
107
+ - **Editor** — Frontmatter fields (Name, Description, Tools), Markdown system prompt body, edit/preview toggle
108
+ - **Non-standard tools warning** — Lint rule flags tools that aren't part of the standard Claude Code toolset
109
+
110
+ ### 12.10 CLAUDE.md Editor
111
+
112
+ Two-column editor for the instruction documents Claude Code loads at session start:
113
+
114
+ - **Left column** — Global `~/.claude/CLAUDE.md`
115
+ - **Right column** — Project `<root>/.claude/CLAUDE.md` with its own share badge
116
+ - **Mobile** — Columns collapse to a User / Project toggle above a single editor pane
117
+
118
+ Each column is a CodeMirror Markdown editor with edit/preview toggle and the same 300 ms debounce auto-save as the other panels. Copy buttons (← / →) move content between columns; if both files have content, a confirmation dialog warns before overwriting.
119
+
120
+ Both files load into every Claude Code session in this project; the project version takes precedence when an instruction is defined in both.
121
+
122
+ ### 12.11 Snippets & Favorites Panel
123
+
124
+ A single panel manages both Hammoc-native snippets and Claude Code slash-command favorites.
125
+
126
+ **Snippets section** (top):
127
+
128
+ - Manages `%name` snippets from `<project-root>/.hammoc/snippets/`, `~/.hammoc/snippets/`, and the bundled set shipped with Hammoc (see §4.6)
129
+ - **Scope filter** — All / Project / Global / Bundled
130
+ - **+ New snippet** — Choose scope (Project or Global) and a name; an empty file is created and the editor opens
131
+ - **Editor** — CodeMirror with syntax highlighting for `%name%`, `{arg1}`, `{context}` tokens and an inline warning when a snippet references itself or forms a reference cycle (heuristic only — saves are not blocked)
132
+ - **Kebab menu** — Copy to the other scope, delete (with confirmation)
133
+ - **Bundled snippets** are read-only — copy to Project or Global scope first to customize
134
+
135
+ **Command Favorites section** (bottom):
136
+
137
+ - Drag-reorder list of slash command favorites (the same favorites shown in the chat input's favorites bar, see §4.3)
138
+ - Each entry shows the command name, scope, and a star toggle that moves it between regular and star favorites
139
+ - **Invalid chip** marker on favorites whose underlying command no longer exists on disk
140
+ - Up to 20 regular + 10 star favorites per scope
141
+
142
+ ### 12.12 Static Lint
143
+
144
+ Every harness panel (skills, MCP, hooks, commands, agents) runs a background static-lint pass against its files. Lint output surfaces in three places:
145
+
146
+ - **Count badges on section nav** — A red dot with the error count and an amber dot with the warning count appear on the section tab when issues exist
147
+ - **Inline marker on cards** — The card header shows a small red or amber pill with the issue count; clicking jumps to the card detail or opens the editor
148
+ - **Issues list at the top of each panel** — Expandable list of every issue with file path, severity, message, and a "Open" link
149
+
150
+ **Rule preferences:** The **Lint preferences** button at the top-right of the workbench opens a dialog listing all seven rules. Each rule has an on/off toggle plus a description, and a **Restore defaults** button reverts the preferences. Preferences are stored globally (not per-project).
151
+
152
+ **Available rules:**
153
+
154
+ | Rule | Default | Catches |
155
+ |------|---------|---------|
156
+ | `naming/duplicate-across-sources` | on | The same name exists in two scopes (project + global, etc.) — surfaces which copy will actually load |
157
+ | `hook/matcher-regex-invalid` | on | Hook `matcher` regex won't compile |
158
+ | `parse/yaml-json-error` | on | Frontmatter or JSON config can't be parsed |
159
+ | `mcp/command-not-on-path` | off | MCP `stdio` command is not on the server's `PATH` |
160
+ | `mcp/url-invalid` | on | MCP `url` field is malformed for the chosen transport |
161
+ | `agent/tools-non-standard` | on | Agent declares a tool name Claude Code does not recognize |
162
+ | `hook/env-var-undefined` | on | Hook body references `${VAR}` that is not set on the server |
163
+
164
+ ### 12.13 Secret-on-Shared Guard
165
+
166
+ When you save (or copy) a harness file whose share badge is **Shared**, Hammoc scans the content for plaintext secrets — long base64-looking values, AWS-style keys, bearer tokens — using both pattern and Shannon-entropy checks. If a likely secret is detected, the save is blocked and a dialog appears with three options:
167
+
168
+ - **Move to local file** — Auto-create a sibling file (e.g., `settings.local.json` next to `settings.json`), move the value there, and re-save the original with a reference. This keeps the secret out of git
169
+ - **Mark this value as not a secret** — One-shot opt-out for this save only; the heuristic does not persist the decision
170
+ - **Cancel** — Close the dialog without saving
171
+
172
+ The dialog lists exactly which values were flagged (line numbers for text files, dot-paths for JSON/YAML) so you can verify before deciding. The entropy gate avoids tripping on ordinary base64-looking strings (image tokens, integration test fixtures) that fall below the threshold.
173
+
174
+ ### 12.14 Fullscreen Editor
175
+
176
+ Every Markdown body in the workbench — skill body and raw view, skill bundle files, command body and raw view, agent system prompt and raw view, `CLAUDE.md` (both columns), snippet body — shows a small **Expand** button (⤢ icon) above the editor area. Clicking it opens a fullscreen overlay with the same CodeMirror instance, line wrapping, and a Markdown edit / preview toggle, so you can write long content without scrolling inside a narrow modal. Edits in the overlay sync back to the host panel through the same 300 ms debounce auto-save — there is no separate save button. Close the overlay with **X** or `Escape`. Read-only buffers (a plugin-scope file, a bundled snippet) show a small "read-only" chip in the overlay header.
177
+
178
+ ### 12.15 Bundle Export / Import (Team Sharing)
179
+
180
+ When your project's `.claude/` tree is **fully git-ignored** (Mode B — typical when you use Hammoc itself to develop on Hammoc, or when your team intentionally keeps the harness out of source control), you can still share the entire workbench configuration with a teammate by exporting it as a single `.zip` bundle and importing on the other side. The workbench shows a **Bundle** menu (top-right of the workbench header, also surfaced as an **Export** button on the Mode B banner), with two actions:
181
+
182
+ - **Export bundle** — Opens a dialog summarizing what will be packed (the five domain cards + `CLAUDE.md` + snippets) and lets you choose how secrets are handled:
183
+ - **Exclude (default)** — Secrets detected by the heuristic are stripped before packing; the recipient sees a *"N secrets removed"* toast after import. Use this when you want your teammate to fill in their own credentials.
184
+ - **Include as `${ENV_REF}` placeholders** — Detected secrets are replaced with named environment-variable references and a hint table lists which keys the recipient needs to set. Good for sharing a config skeleton without leaking real values.
185
+ - **Include explicit (with secrets)** — Plain-text secrets are packed as-is. This is the *"send it over secure DM and delete after use"* mode: you must check a second confirmation box before the dialog enables the download button, the resulting filename contains a visible `WITH-SECRETS` token, and a 5-second warning toast appears after the download starts.
186
+ - **Import bundle** — Drop a `.zip` (or browse for one). Before anything is applied, Hammoc shows a preview of every incoming item alongside what already exists, with three per-item actions (Overwrite / Skip / Add only if missing) and three bulk-action shortcuts. Bundles tagged *"with secrets"* require the recipient to acknowledge a separate *"this bundle contains plaintext secrets"* checkbox before the apply button activates, and bundles produced by a newer Hammoc version (`bundleVersion` greater than what the local server supports) are rejected outright with an upgrade hint.
187
+
188
+ The export/import flow only touches the workbench items themselves — `package.json`, repository code, and tracked files outside `.claude/` are never bundled. Bundles produced and consumed by the same Hammoc version are round-trip identical: re-importing your own export into an empty project reproduces the workbench cards byte-for-byte (handy for backups or for setting up a new dev machine).
189
+
190
+ ### 12.16 BMad Settings (core-config Editor)
191
+
192
+ > Shown only for BMad projects (those with a `.bmad-core/` folder). For non-BMad projects this nav item is hidden entirely — no empty placeholder.
193
+
194
+ A form-based editor for BMad's `core-config.yaml`, so you can change BMad's paths and flags without opening a terminal or text editor. It is a top-level item in the project Settings left nav (a sibling of the Harness Workbench, not one of its sections).
195
+
196
+ Keys are organized into collapsible groups — **General**, **QA**, **PRD**, **Architecture**, and **Brownfield Epic** — and each value uses a widget matched to its type:
197
+
198
+ - **Toggle** for boolean flags (e.g., Markdown Exploder, PRD Sharded)
199
+ - **Path picker** for file/folder paths — a **Browse** button opens a file-tree dialog; paths are relative to the project root (e.g., Dev Story Location, QA Location)
200
+ - **Text** for plain strings (e.g., PRD Version, Slash Prefix)
201
+ - **Glob** with a live match preview that counts the files matching the pattern (e.g., Epic File Pattern)
202
+ - **Drag-sortable list** for path arrays (e.g., Dev Load Always Files, Custom Technical Documents)
203
+
204
+ Other behaviors:
205
+
206
+ - **Auto-save** — Text/path/glob edits debounce-save (~300 ms); toggles and list changes save immediately. Saves write `.bmad-core/core-config.yaml` while preserving comments and key order.
207
+ - **Raw YAML toggle** — A **Form / Raw** switch in the top-right lets you edit the file as raw YAML; switching back to Form preserves comments and ordering. A parse error keeps you in Raw mode until it is fixed.
208
+ - **Unknown Keys** — Keys the form doesn't recognize (for example, a newer BMad schema) are preserved and listed read-only in an "Unknown Keys" section at the bottom; edit them in Raw mode.
209
+ - **External-change banner** — If the file changes outside Hammoc while the panel is open, a banner with a **Reload** button appears.
210
+
211
+ After you change a path such as **Dev Story Location**, the BMad agents (e.g., `/dev`) pick up the new value on their next run.
212
+
213
+ ### 12.17 Context Builder
214
+
215
+ The **Context Builder** automatically injects a block of context into every new chat session, so you don't have to re-explain "what was I working on" each time. It does this by generating a Claude Code **SessionStart hook** for you. Available on all projects.
216
+
217
+ You declare three kinds of content in the panel:
218
+
219
+ - **Reference files** — Project files that are read fresh and injected at each session start. Each file shows its byte size and an approximate token count. If the combined size nears the SessionStart output cap an amber warning appears; past the hard cap (red), the content spills to a file plus a preview instead of being injected inline, so trim the list when warned.
220
+ - **Dynamic variables** — Built-in values recomputed every session, each with an on/off toggle:
221
+ - **Current branch** — the active git branch
222
+ - **Active BMad story** — title and status of the most recently modified story file
223
+ - **Recent commits** — the most recent commit subjects (count configurable)
224
+ - **Today** — today's date
225
+ - **Uncommitted files** — count of files with uncommitted changes
226
+ - **Custom commands** (advanced) — Arbitrary shell commands whose output is appended. Because these run automatically at every session start, each requires you to tick a confirmation checkbox ("I understand this command runs automatically at every session start"). Hammoc also flags commands that look like they contain a secret.
227
+
228
+ When you save, Hammoc generates a hook script under the project's `.hammoc/` folder and registers a SessionStart entry in `.claude/settings.json`. In the **Hooks** panel (§12.7) that entry is marked **"Hammoc Context Builder"**; editing it by hand there raises a sync-loss warning, since the Context Builder owns it — change it from this panel instead. The token-size hints reuse the same approximation as Observability (§12.18).
229
+
230
+ ### 12.18 Observability
231
+
232
+ The **Observability** panel is the feedback loop for harness tuning: it shows which tools get called and how much of the context window each harness element consumes. Available on all projects.
233
+
234
+ **MCP / tool calls:**
235
+
236
+ - A **timeline** of recent tool calls (server, tool, response time, and success / failed / no-response status) and an **aggregate chart** of calls per server and per tool with average response time and error counts.
237
+ - **Filters** by server, tool, and time window (default: last 30 days).
238
+ - Only call **metadata** is recorded — server, tool, timestamp, argument and response **sizes**, and duration. Argument and response **bodies are never stored**, so file contents and secrets don't leak into the log.
239
+
240
+ **Token attribution:**
241
+
242
+ - A bar chart of how many tokens each harness element contributes — project and global `CLAUDE.md`, each skill's `SKILL.md`, and the Context Builder's injected block — with an overlay showing the total against the current model's context window.
243
+ - Inline hints show an **approximate** token count prefixed with `~` (a fast byte-based estimate), expressed two ways at once: as a percentage of the context window and as a share of the total harness prompt.
244
+ - An **Exact count** button calls Anthropic's official token-count API and caches the result by file content; if the call fails, the approximation is kept.
245
+
246
+ ### 12.19 Plugin Marketplace
247
+
248
+ The **Marketplace** panel lets you discover Claude Code plugins from the marketplaces registered on your machine, complementing the install/toggle view in the Plugins panel (§12.4). Available on all projects.
249
+
250
+ - **Catalog** — One card per plugin parsed from each registered marketplace, showing name, description, version, author, category, a type badge (**Plugin** or **External MCP**), bundled-component counts, and an **Installed** badge when applicable.
251
+ - **Filter & search** — By name, category, type, and installed state.
252
+ - **Install / Uninstall guide** — Because Claude Code's plugin commands are interactive slash commands (not shell subcommands), the **Install** and **Uninstall** buttons open a dialog containing the exact command — e.g. `/plugin install <name>@<marketplace>` — with a **Copy** button. Paste it into your Claude CLI session to run it; plugin commands can't be executed from the Hammoc chat.
253
+ - **Add marketplace** — A form takes a marketplace URL and produces the matching `/plugin marketplace add <url>` command to copy.
254
+ - **Auto-refresh** — After you install or remove a plugin in your CLI session, Hammoc detects the on-disk change and updates both this catalog's **Installed** badges and the Plugins panel cards automatically.
255
+ - **Resilience** — If one marketplace's catalog file can't be read, only that marketplace shows an error badge and the rest still load. If the installed-plugins file is in an unrecognized format, a warning banner notes that installed state may be incomplete.
256
+