hammoc 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/README.md +12 -4
  2. package/package.json +2 -2
  3. package/packages/client/dist/assets/{agentExampleHighlight-BgwTm15v.js → agentExampleHighlight-7Olvqdpf.js} +1 -1
  4. package/packages/client/dist/assets/{commandTokenHighlight-BljHwnrK.js → commandTokenHighlight-DtKwh4lx.js} +1 -1
  5. package/packages/client/dist/assets/index-B09doO8H.js +139 -0
  6. package/packages/client/dist/assets/index-Bee52CKG.js +1569 -0
  7. package/packages/client/dist/assets/index-CVy582lU.css +32 -0
  8. package/packages/client/dist/assets/{index-D3LxqW3f.js → index-DLHBUw8c.js} +1 -1
  9. package/packages/client/dist/assets/{snippetTokenHighlight-DWsaQXX0.js → snippetTokenHighlight-C8O688f4.js} +1 -1
  10. package/packages/client/dist/index.html +2 -2
  11. package/packages/client/dist/sw.js +2 -2
  12. package/packages/server/dist/_dbg_agent_rows.d.ts +2 -0
  13. package/packages/server/dist/_dbg_agent_rows.d.ts.map +1 -0
  14. package/packages/server/dist/_dbg_agent_rows.js +60 -0
  15. package/packages/server/dist/_dbg_agent_rows.js.map +1 -0
  16. package/packages/server/dist/_dbg_flicker.d.ts +2 -0
  17. package/packages/server/dist/_dbg_flicker.d.ts.map +1 -0
  18. package/packages/server/dist/_dbg_flicker.js +38 -0
  19. package/packages/server/dist/_dbg_flicker.js.map +1 -0
  20. package/packages/server/dist/_harness_cli.d.ts +2 -0
  21. package/packages/server/dist/_harness_cli.d.ts.map +1 -0
  22. package/packages/server/dist/_harness_cli.js +81 -0
  23. package/packages/server/dist/_harness_cli.js.map +1 -0
  24. package/packages/server/dist/_harness_provcard.d.ts +2 -0
  25. package/packages/server/dist/_harness_provcard.d.ts.map +1 -0
  26. package/packages/server/dist/_harness_provcard.js +67 -0
  27. package/packages/server/dist/_harness_provcard.js.map +1 -0
  28. package/packages/server/dist/_replay_dump.d.ts +2 -0
  29. package/packages/server/dist/_replay_dump.d.ts.map +1 -0
  30. package/packages/server/dist/_replay_dump.js +62 -0
  31. package/packages/server/dist/_replay_dump.js.map +1 -0
  32. package/packages/server/dist/app.d.ts.map +1 -1
  33. package/packages/server/dist/app.js +6 -0
  34. package/packages/server/dist/app.js.map +1 -1
  35. package/packages/server/dist/config/index.d.ts.map +1 -1
  36. package/packages/server/dist/config/index.js.map +1 -1
  37. package/packages/server/dist/controllers/bmadCoreConfigController.d.ts +41 -0
  38. package/packages/server/dist/controllers/bmadCoreConfigController.d.ts.map +1 -0
  39. package/packages/server/dist/controllers/bmadCoreConfigController.js +172 -0
  40. package/packages/server/dist/controllers/bmadCoreConfigController.js.map +1 -0
  41. package/packages/server/dist/controllers/contextBuilderController.d.ts +43 -0
  42. package/packages/server/dist/controllers/contextBuilderController.d.ts.map +1 -0
  43. package/packages/server/dist/controllers/contextBuilderController.js +159 -0
  44. package/packages/server/dist/controllers/contextBuilderController.js.map +1 -0
  45. package/packages/server/dist/controllers/harnessAgentController.d.ts +7 -0
  46. package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -1
  47. package/packages/server/dist/controllers/harnessAgentController.js +33 -0
  48. package/packages/server/dist/controllers/harnessAgentController.js.map +1 -1
  49. package/packages/server/dist/controllers/harnessBundleController.d.ts +37 -0
  50. package/packages/server/dist/controllers/harnessBundleController.d.ts.map +1 -0
  51. package/packages/server/dist/controllers/harnessBundleController.js +312 -0
  52. package/packages/server/dist/controllers/harnessBundleController.js.map +1 -0
  53. package/packages/server/dist/controllers/harnessCommandController.d.ts +7 -0
  54. package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -1
  55. package/packages/server/dist/controllers/harnessCommandController.js +33 -0
  56. package/packages/server/dist/controllers/harnessCommandController.js.map +1 -1
  57. package/packages/server/dist/controllers/harnessHookController.d.ts.map +1 -1
  58. package/packages/server/dist/controllers/harnessHookController.js +44 -1
  59. package/packages/server/dist/controllers/harnessHookController.js.map +1 -1
  60. package/packages/server/dist/controllers/harnessMcpController.d.ts.map +1 -1
  61. package/packages/server/dist/controllers/harnessMcpController.js +62 -1
  62. package/packages/server/dist/controllers/harnessMcpController.js.map +1 -1
  63. package/packages/server/dist/controllers/harnessShareScopeController.d.ts +9 -0
  64. package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -1
  65. package/packages/server/dist/controllers/harnessShareScopeController.js +48 -1
  66. package/packages/server/dist/controllers/harnessShareScopeController.js.map +1 -1
  67. package/packages/server/dist/controllers/marketplaceController.d.ts +19 -0
  68. package/packages/server/dist/controllers/marketplaceController.d.ts.map +1 -0
  69. package/packages/server/dist/controllers/marketplaceController.js +74 -0
  70. package/packages/server/dist/controllers/marketplaceController.js.map +1 -0
  71. package/packages/server/dist/controllers/observabilityController.d.ts +32 -0
  72. package/packages/server/dist/controllers/observabilityController.d.ts.map +1 -0
  73. package/packages/server/dist/controllers/observabilityController.js +148 -0
  74. package/packages/server/dist/controllers/observabilityController.js.map +1 -0
  75. package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
  76. package/packages/server/dist/controllers/projectController.js +7 -1
  77. package/packages/server/dist/controllers/projectController.js.map +1 -1
  78. package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
  79. package/packages/server/dist/controllers/sessionController.js +16 -4
  80. package/packages/server/dist/controllers/sessionController.js.map +1 -1
  81. package/packages/server/dist/controllers/systemBrowseController.d.ts +33 -0
  82. package/packages/server/dist/controllers/systemBrowseController.d.ts.map +1 -0
  83. package/packages/server/dist/controllers/systemBrowseController.js +105 -0
  84. package/packages/server/dist/controllers/systemBrowseController.js.map +1 -0
  85. package/packages/server/dist/handlers/streamCallbacks.d.ts +10 -0
  86. package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
  87. package/packages/server/dist/handlers/streamCallbacks.js +25 -4
  88. package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
  89. package/packages/server/dist/handlers/websocket.d.ts +43 -3
  90. package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
  91. package/packages/server/dist/handlers/websocket.js +385 -93
  92. package/packages/server/dist/handlers/websocket.js.map +1 -1
  93. package/packages/server/dist/index.js +2 -0
  94. package/packages/server/dist/index.js.map +1 -1
  95. package/packages/server/dist/locales/en/server.json +17 -0
  96. package/packages/server/dist/locales/es/server.json +17 -0
  97. package/packages/server/dist/locales/ja/server.json +17 -0
  98. package/packages/server/dist/locales/ko/server.json +17 -0
  99. package/packages/server/dist/locales/pt/server.json +17 -0
  100. package/packages/server/dist/locales/zh-CN/server.json +17 -0
  101. package/packages/server/dist/routes/harness.d.ts.map +1 -1
  102. package/packages/server/dist/routes/harness.js +58 -0
  103. package/packages/server/dist/routes/harness.js.map +1 -1
  104. package/packages/server/dist/routes/preferences.d.ts.map +1 -1
  105. package/packages/server/dist/routes/preferences.js +12 -2
  106. package/packages/server/dist/routes/preferences.js.map +1 -1
  107. package/packages/server/dist/routes/systemBrowse.d.ts +17 -0
  108. package/packages/server/dist/routes/systemBrowse.d.ts.map +1 -0
  109. package/packages/server/dist/routes/systemBrowse.js +22 -0
  110. package/packages/server/dist/routes/systemBrowse.js.map +1 -0
  111. package/packages/server/dist/services/bmadCoreConfigService.d.ts +86 -0
  112. package/packages/server/dist/services/bmadCoreConfigService.d.ts.map +1 -0
  113. package/packages/server/dist/services/bmadCoreConfigService.js +175 -0
  114. package/packages/server/dist/services/bmadCoreConfigService.js.map +1 -0
  115. package/packages/server/dist/services/bmadStatusService.d.ts +9 -0
  116. package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
  117. package/packages/server/dist/services/bmadStatusService.js +77 -13
  118. package/packages/server/dist/services/bmadStatusService.js.map +1 -1
  119. package/packages/server/dist/services/chatEngine.d.ts +81 -0
  120. package/packages/server/dist/services/chatEngine.d.ts.map +1 -0
  121. package/packages/server/dist/services/chatEngine.js +2 -0
  122. package/packages/server/dist/services/chatEngine.js.map +1 -0
  123. package/packages/server/dist/services/chatEngineFactory.d.ts +15 -0
  124. package/packages/server/dist/services/chatEngineFactory.d.ts.map +1 -0
  125. package/packages/server/dist/services/chatEngineFactory.js +28 -0
  126. package/packages/server/dist/services/chatEngineFactory.js.map +1 -0
  127. package/packages/server/dist/services/chatService.d.ts +34 -26
  128. package/packages/server/dist/services/chatService.d.ts.map +1 -1
  129. package/packages/server/dist/services/chatService.js +44 -104
  130. package/packages/server/dist/services/chatService.js.map +1 -1
  131. package/packages/server/dist/services/cliChatEngine.d.ts +198 -0
  132. package/packages/server/dist/services/cliChatEngine.d.ts.map +1 -0
  133. package/packages/server/dist/services/cliChatEngine.js +2977 -0
  134. package/packages/server/dist/services/cliChatEngine.js.map +1 -0
  135. package/packages/server/dist/services/cliGridCards.d.ts +87 -0
  136. package/packages/server/dist/services/cliGridCards.d.ts.map +1 -0
  137. package/packages/server/dist/services/cliGridCards.js +298 -0
  138. package/packages/server/dist/services/cliGridCards.js.map +1 -0
  139. package/packages/server/dist/services/cliGridRegion.d.ts +44 -0
  140. package/packages/server/dist/services/cliGridRegion.d.ts.map +1 -0
  141. package/packages/server/dist/services/cliGridRegion.js +94 -0
  142. package/packages/server/dist/services/cliGridRegion.js.map +1 -0
  143. package/packages/server/dist/services/cliModalDetect.d.ts +299 -0
  144. package/packages/server/dist/services/cliModalDetect.d.ts.map +1 -0
  145. package/packages/server/dist/services/cliModalDetect.js +583 -0
  146. package/packages/server/dist/services/cliModalDetect.js.map +1 -0
  147. package/packages/server/dist/services/cliScreenCache.d.ts +33 -0
  148. package/packages/server/dist/services/cliScreenCache.d.ts.map +1 -0
  149. package/packages/server/dist/services/cliScreenCache.js +48 -0
  150. package/packages/server/dist/services/cliScreenCache.js.map +1 -0
  151. package/packages/server/dist/services/cliScreenModel.d.ts +141 -0
  152. package/packages/server/dist/services/cliScreenModel.d.ts.map +1 -0
  153. package/packages/server/dist/services/cliScreenModel.js +196 -0
  154. package/packages/server/dist/services/cliScreenModel.js.map +1 -0
  155. package/packages/server/dist/services/cliScreenStallWatchdog.d.ts +41 -0
  156. package/packages/server/dist/services/cliScreenStallWatchdog.d.ts.map +1 -0
  157. package/packages/server/dist/services/cliScreenStallWatchdog.js +45 -0
  158. package/packages/server/dist/services/cliScreenStallWatchdog.js.map +1 -0
  159. package/packages/server/dist/services/cliSessionPool.d.ts +97 -0
  160. package/packages/server/dist/services/cliSessionPool.d.ts.map +1 -0
  161. package/packages/server/dist/services/cliSessionPool.js +278 -0
  162. package/packages/server/dist/services/cliSessionPool.js.map +1 -0
  163. package/packages/server/dist/services/cliSpinnerProgress.d.ts +41 -0
  164. package/packages/server/dist/services/cliSpinnerProgress.d.ts.map +1 -0
  165. package/packages/server/dist/services/cliSpinnerProgress.js +131 -0
  166. package/packages/server/dist/services/cliSpinnerProgress.js.map +1 -0
  167. package/packages/server/dist/services/contextBuilderScriptTemplate.d.ts +24 -0
  168. package/packages/server/dist/services/contextBuilderScriptTemplate.d.ts.map +1 -0
  169. package/packages/server/dist/services/contextBuilderScriptTemplate.js +181 -0
  170. package/packages/server/dist/services/contextBuilderScriptTemplate.js.map +1 -0
  171. package/packages/server/dist/services/contextBuilderService.d.ts +68 -0
  172. package/packages/server/dist/services/contextBuilderService.d.ts.map +1 -0
  173. package/packages/server/dist/services/contextBuilderService.js +345 -0
  174. package/packages/server/dist/services/contextBuilderService.js.map +1 -0
  175. package/packages/server/dist/services/fileRewind.d.ts +46 -0
  176. package/packages/server/dist/services/fileRewind.d.ts.map +1 -0
  177. package/packages/server/dist/services/fileRewind.js +77 -0
  178. package/packages/server/dist/services/fileRewind.js.map +1 -0
  179. package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -1
  180. package/packages/server/dist/services/fileWatcherService.js +40 -0
  181. package/packages/server/dist/services/fileWatcherService.js.map +1 -1
  182. package/packages/server/dist/services/harnessAgentService.d.ts +18 -0
  183. package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -1
  184. package/packages/server/dist/services/harnessAgentService.js +55 -0
  185. package/packages/server/dist/services/harnessAgentService.js.map +1 -1
  186. package/packages/server/dist/services/harnessBundleService.d.ts +145 -0
  187. package/packages/server/dist/services/harnessBundleService.d.ts.map +1 -0
  188. package/packages/server/dist/services/harnessBundleService.js +1318 -0
  189. package/packages/server/dist/services/harnessBundleService.js.map +1 -0
  190. package/packages/server/dist/services/harnessCommandService.d.ts +21 -0
  191. package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -1
  192. package/packages/server/dist/services/harnessCommandService.js +64 -0
  193. package/packages/server/dist/services/harnessCommandService.js.map +1 -1
  194. package/packages/server/dist/services/harnessHookService.d.ts +27 -0
  195. package/packages/server/dist/services/harnessHookService.d.ts.map +1 -1
  196. package/packages/server/dist/services/harnessHookService.js +52 -0
  197. package/packages/server/dist/services/harnessHookService.js.map +1 -1
  198. package/packages/server/dist/services/harnessMcpService.d.ts +24 -1
  199. package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -1
  200. package/packages/server/dist/services/harnessMcpService.js +70 -0
  201. package/packages/server/dist/services/harnessMcpService.js.map +1 -1
  202. package/packages/server/dist/services/harnessShareScopeService.d.ts +19 -0
  203. package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -1
  204. package/packages/server/dist/services/harnessShareScopeService.js +65 -0
  205. package/packages/server/dist/services/harnessShareScopeService.js.map +1 -1
  206. package/packages/server/dist/services/historyParser.d.ts +11 -0
  207. package/packages/server/dist/services/historyParser.d.ts.map +1 -1
  208. package/packages/server/dist/services/historyParser.js +10 -8
  209. package/packages/server/dist/services/historyParser.js.map +1 -1
  210. package/packages/server/dist/services/imageStorageService.d.ts +12 -0
  211. package/packages/server/dist/services/imageStorageService.d.ts.map +1 -1
  212. package/packages/server/dist/services/imageStorageService.js +22 -0
  213. package/packages/server/dist/services/imageStorageService.js.map +1 -1
  214. package/packages/server/dist/services/issueService.d.ts.map +1 -1
  215. package/packages/server/dist/services/issueService.js +1 -0
  216. package/packages/server/dist/services/issueService.js.map +1 -1
  217. package/packages/server/dist/services/marketplaceService.d.ts +50 -0
  218. package/packages/server/dist/services/marketplaceService.d.ts.map +1 -0
  219. package/packages/server/dist/services/marketplaceService.js +326 -0
  220. package/packages/server/dist/services/marketplaceService.js.map +1 -0
  221. package/packages/server/dist/services/observabilityService.d.ts +87 -0
  222. package/packages/server/dist/services/observabilityService.d.ts.map +1 -0
  223. package/packages/server/dist/services/observabilityService.js +0 -0
  224. package/packages/server/dist/services/observabilityService.js.map +1 -0
  225. package/packages/server/dist/services/projectService.d.ts +13 -1
  226. package/packages/server/dist/services/projectService.d.ts.map +1 -1
  227. package/packages/server/dist/services/projectService.js +32 -0
  228. package/packages/server/dist/services/projectService.js.map +1 -1
  229. package/packages/server/dist/services/queueService.d.ts.map +1 -1
  230. package/packages/server/dist/services/queueService.js +12 -3
  231. package/packages/server/dist/services/queueService.js.map +1 -1
  232. package/packages/server/dist/services/rateLimitProbeService.d.ts +15 -0
  233. package/packages/server/dist/services/rateLimitProbeService.d.ts.map +1 -1
  234. package/packages/server/dist/services/rateLimitProbeService.js +48 -19
  235. package/packages/server/dist/services/rateLimitProbeService.js.map +1 -1
  236. package/packages/server/dist/services/sessionService.d.ts +16 -0
  237. package/packages/server/dist/services/sessionService.d.ts.map +1 -1
  238. package/packages/server/dist/services/sessionService.js +125 -0
  239. package/packages/server/dist/services/sessionService.js.map +1 -1
  240. package/packages/server/dist/services/streamHandler.d.ts +8 -1
  241. package/packages/server/dist/services/streamHandler.d.ts.map +1 -1
  242. package/packages/server/dist/services/streamHandler.js +12 -5
  243. package/packages/server/dist/services/streamHandler.js.map +1 -1
  244. package/packages/server/dist/services/systemBrowseService.d.ts +91 -0
  245. package/packages/server/dist/services/systemBrowseService.d.ts.map +1 -0
  246. package/packages/server/dist/services/systemBrowseService.js +372 -0
  247. package/packages/server/dist/services/systemBrowseService.js.map +1 -0
  248. package/packages/server/dist/services/tokenCountService.d.ts +71 -0
  249. package/packages/server/dist/services/tokenCountService.d.ts.map +1 -0
  250. package/packages/server/dist/services/tokenCountService.js +313 -0
  251. package/packages/server/dist/services/tokenCountService.js.map +1 -0
  252. package/packages/server/dist/services/workspaceContext.d.ts +24 -0
  253. package/packages/server/dist/services/workspaceContext.d.ts.map +1 -0
  254. package/packages/server/dist/services/workspaceContext.js +109 -0
  255. package/packages/server/dist/services/workspaceContext.js.map +1 -0
  256. package/packages/server/dist/snippets/apply-qa-fixes +7 -5
  257. package/packages/server/dist/snippets/qa-review +7 -1
  258. package/packages/server/dist/utils/assertSafeBundlePath.d.ts +29 -0
  259. package/packages/server/dist/utils/assertSafeBundlePath.d.ts.map +1 -0
  260. package/packages/server/dist/utils/assertSafeBundlePath.js +53 -0
  261. package/packages/server/dist/utils/assertSafeBundlePath.js.map +1 -0
  262. package/packages/server/dist/utils/backgroundBlock.d.ts +29 -0
  263. package/packages/server/dist/utils/backgroundBlock.d.ts.map +1 -0
  264. package/packages/server/dist/utils/backgroundBlock.js +33 -0
  265. package/packages/server/dist/utils/backgroundBlock.js.map +1 -0
  266. package/packages/server/dist/utils/backgroundTaskTracker.d.ts +20 -0
  267. package/packages/server/dist/utils/backgroundTaskTracker.d.ts.map +1 -0
  268. package/packages/server/dist/utils/backgroundTaskTracker.js +40 -0
  269. package/packages/server/dist/utils/backgroundTaskTracker.js.map +1 -0
  270. package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts +14 -0
  271. package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts.map +1 -0
  272. package/packages/server/dist/utils/bundledBinaryModelSupport.js +112 -0
  273. package/packages/server/dist/utils/bundledBinaryModelSupport.js.map +1 -0
  274. package/packages/server/dist/utils/cliDebugLog.d.ts +38 -0
  275. package/packages/server/dist/utils/cliDebugLog.d.ts.map +1 -0
  276. package/packages/server/dist/utils/cliDebugLog.js +65 -0
  277. package/packages/server/dist/utils/cliDebugLog.js.map +1 -0
  278. package/packages/server/dist/utils/cliEngineUtils.d.ts +35 -0
  279. package/packages/server/dist/utils/cliEngineUtils.d.ts.map +1 -0
  280. package/packages/server/dist/utils/cliEngineUtils.js +38 -0
  281. package/packages/server/dist/utils/cliEngineUtils.js.map +1 -0
  282. package/packages/server/dist/utils/effortUtils.d.ts +2 -2
  283. package/packages/server/dist/utils/effortUtils.d.ts.map +1 -1
  284. package/packages/server/dist/utils/effortUtils.js +7 -5
  285. package/packages/server/dist/utils/effortUtils.js.map +1 -1
  286. package/packages/server/dist/utils/errors.d.ts +1 -0
  287. package/packages/server/dist/utils/errors.d.ts.map +1 -1
  288. package/packages/server/dist/utils/errors.js +17 -0
  289. package/packages/server/dist/utils/errors.js.map +1 -1
  290. package/packages/server/dist/utils/harnessBundleSchema.d.ts +14 -12
  291. package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -1
  292. package/packages/server/dist/utils/harnessBundleSchema.js +11 -1
  293. package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -1
  294. package/packages/server/dist/utils/harnessPaths.d.ts +40 -0
  295. package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -1
  296. package/packages/server/dist/utils/harnessPaths.js +123 -0
  297. package/packages/server/dist/utils/harnessPaths.js.map +1 -1
  298. package/packages/server/dist/utils/trailingThrottle.d.ts +21 -0
  299. package/packages/server/dist/utils/trailingThrottle.d.ts.map +1 -0
  300. package/packages/server/dist/utils/trailingThrottle.js +36 -0
  301. package/packages/server/dist/utils/trailingThrottle.js.map +1 -0
  302. package/packages/server/package.json +61 -58
  303. package/packages/server/resources/internals/INDEX.md +3 -1
  304. package/packages/server/resources/internals/bmad-qa-fix-marker.md +32 -0
  305. package/packages/server/resources/internals/harness-files.md +22 -0
  306. package/packages/server/resources/internals/image-storage.md +9 -0
  307. package/packages/server/resources/internals/observability-storage.md +23 -0
  308. package/packages/server/resources/manual/02-chat.md +23 -4
  309. package/packages/server/resources/manual/03-sessions.md +1 -0
  310. package/packages/server/resources/manual/05-projects.md +15 -2
  311. package/packages/server/resources/manual/10-project-board.md +4 -3
  312. package/packages/server/resources/manual/11-bmad-method-integration.md +12 -8
  313. package/packages/server/resources/manual/12-harness-workbench.md +82 -1
  314. package/packages/server/resources/manual/13-settings.md +61 -9
  315. package/packages/shared/dist/index.d.ts +7 -0
  316. package/packages/shared/dist/index.d.ts.map +1 -1
  317. package/packages/shared/dist/index.js +14 -0
  318. package/packages/shared/dist/index.js.map +1 -1
  319. package/packages/shared/dist/types/bmadCoreConfig.d.ts +71 -0
  320. package/packages/shared/dist/types/bmadCoreConfig.d.ts.map +1 -0
  321. package/packages/shared/dist/types/bmadCoreConfig.js +30 -0
  322. package/packages/shared/dist/types/bmadCoreConfig.js.map +1 -0
  323. package/packages/shared/dist/types/bmadStatus.d.ts +26 -0
  324. package/packages/shared/dist/types/bmadStatus.d.ts.map +1 -1
  325. package/packages/shared/dist/types/bmadStatus.js.map +1 -1
  326. package/packages/shared/dist/types/board.d.ts +6 -0
  327. package/packages/shared/dist/types/board.d.ts.map +1 -1
  328. package/packages/shared/dist/types/contextBuilder.d.ts +102 -0
  329. package/packages/shared/dist/types/contextBuilder.d.ts.map +1 -0
  330. package/packages/shared/dist/types/contextBuilder.js +55 -0
  331. package/packages/shared/dist/types/contextBuilder.js.map +1 -0
  332. package/packages/shared/dist/types/harnessBundle.d.ts +35 -0
  333. package/packages/shared/dist/types/harnessBundle.d.ts.map +1 -1
  334. package/packages/shared/dist/types/marketplace.d.ts +83 -0
  335. package/packages/shared/dist/types/marketplace.d.ts.map +1 -0
  336. package/packages/shared/dist/types/marketplace.js +18 -0
  337. package/packages/shared/dist/types/marketplace.js.map +1 -0
  338. package/packages/shared/dist/types/observability.d.ts +148 -0
  339. package/packages/shared/dist/types/observability.d.ts.map +1 -0
  340. package/packages/shared/dist/types/observability.js +24 -0
  341. package/packages/shared/dist/types/observability.js.map +1 -0
  342. package/packages/shared/dist/types/preferences.d.ts +16 -2
  343. package/packages/shared/dist/types/preferences.d.ts.map +1 -1
  344. package/packages/shared/dist/types/preferences.js +1 -0
  345. package/packages/shared/dist/types/preferences.js.map +1 -1
  346. package/packages/shared/dist/types/project.d.ts +7 -1
  347. package/packages/shared/dist/types/project.d.ts.map +1 -1
  348. package/packages/shared/dist/types/project.js.map +1 -1
  349. package/packages/shared/dist/types/sdk.d.ts +124 -12
  350. package/packages/shared/dist/types/sdk.d.ts.map +1 -1
  351. package/packages/shared/dist/types/sdk.js +64 -19
  352. package/packages/shared/dist/types/sdk.js.map +1 -1
  353. package/packages/shared/dist/types/streaming.d.ts +2 -2
  354. package/packages/shared/dist/types/streaming.d.ts.map +1 -1
  355. package/packages/shared/dist/types/streaming.js.map +1 -1
  356. package/packages/shared/dist/types/systemBrowse.d.ts +120 -0
  357. package/packages/shared/dist/types/systemBrowse.d.ts.map +1 -0
  358. package/packages/shared/dist/types/systemBrowse.js +57 -0
  359. package/packages/shared/dist/types/systemBrowse.js.map +1 -0
  360. package/packages/shared/dist/types/websocket.d.ts +38 -0
  361. package/packages/shared/dist/types/websocket.d.ts.map +1 -1
  362. package/packages/shared/dist/utils/interruptFiller.d.ts +30 -0
  363. package/packages/shared/dist/utils/interruptFiller.d.ts.map +1 -0
  364. package/packages/shared/dist/utils/interruptFiller.js +38 -0
  365. package/packages/shared/dist/utils/interruptFiller.js.map +1 -0
  366. package/packages/shared/dist/utils/toolResultContent.d.ts +22 -0
  367. package/packages/shared/dist/utils/toolResultContent.d.ts.map +1 -0
  368. package/packages/shared/dist/utils/toolResultContent.js +29 -0
  369. package/packages/shared/dist/utils/toolResultContent.js.map +1 -0
  370. package/scripts/run-integration-test.mjs +362 -362
  371. package/packages/client/dist/assets/index-CjyjnXB8.css +0 -32
  372. package/packages/client/dist/assets/index-NqJdhlek.js +0 -1498
@@ -0,0 +1,372 @@
1
+ /**
2
+ * System Browse Service
3
+ * Directory-only browsing across the whole host filesystem (Epic 34, Story 34.1).
4
+ *
5
+ * KEY DIFFERENCE from fileSystemService: there is NO project boundary. This API
6
+ * runs *before* a project is registered, so it accepts arbitrary ABSOLUTE paths
7
+ * (drive roots through any directory). It therefore does NOT use
8
+ * validateProjectPath / validateReadPath. Instead it carries its own guard
9
+ * (assertSafeAbsolutePath) that blocks null bytes / UNC-device paths and enforces
10
+ * absoluteness. The write surface is folder create/rename ONLY — there is no
11
+ * delete method (destructive actions removed from the surface entirely).
12
+ *
13
+ * The guard / realpath / EACCES-skip / errno-mapping idioms are borrowed 1:1
14
+ * from fileSystemService and pathGuard; only the boundary model differs.
15
+ * [Source: docs/prd/epic-34-directory-browser.md#Story 34.1;
16
+ * packages/server/src/services/fileSystemService.ts:162-176, 266-335, 765;
17
+ * packages/server/src/middleware/pathGuard.ts:34-58]
18
+ */
19
+ import fs from 'fs/promises';
20
+ import path from 'path';
21
+ import os from 'os';
22
+ /**
23
+ * Windows reserved device names (case-insensitive) — cannot be used as a folder
24
+ * name on Windows even with an extension (e.g. CON.txt). Rejected everywhere for
25
+ * cross-platform consistency.
26
+ */
27
+ const WINDOWS_RESERVED_NAMES = new Set([
28
+ 'CON', 'PRN', 'AUX', 'NUL',
29
+ 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
30
+ 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9',
31
+ ]);
32
+ /** Printable characters not allowed in a folder name (Windows-strict, safe for POSIX). */
33
+ const RESERVED_PRINTABLE_CHARS = new Set(['<', '>', ':', '"', '/', '\\', '|', '?', '*']);
34
+ /**
35
+ * True if a name contains a reserved printable char OR any control character
36
+ * (0x00–0x1F). Char-code scan avoids a control-char regex literal entirely.
37
+ */
38
+ function hasReservedChar(name) {
39
+ for (let i = 0; i < name.length; i++) {
40
+ const ch = name[i];
41
+ if (RESERVED_PRINTABLE_CHARS.has(ch))
42
+ return true;
43
+ if (name.charCodeAt(i) < 0x20)
44
+ return true; // control characters
45
+ }
46
+ return false;
47
+ }
48
+ /** OS errno codes that mean "write refused" → mapped to PERMISSION_DENIED (AC9). */
49
+ function isWriteDeniedErrno(error) {
50
+ const code = error.code;
51
+ return code === 'EACCES' || code === 'EPERM' || code === 'EROFS';
52
+ }
53
+ class SystemBrowseService {
54
+ /**
55
+ * Build a domain error whose `code` the controller maps to an HTTP status +
56
+ * i18n message (same idiom as fileSystemService: `(err).code = 'CODE'`).
57
+ */
58
+ makeError(code, message) {
59
+ const err = new Error(message);
60
+ err.code = code;
61
+ return err;
62
+ }
63
+ /**
64
+ * Guard an incoming absolute path. Blocks null bytes and UNC/device paths,
65
+ * enforces absoluteness, and normalizes via path.resolve. Throws INVALID_PATH.
66
+ * Mirrors the null-byte / UNC checks from pathGuard, minus the project-root
67
+ * containment (this API has no project boundary).
68
+ */
69
+ assertSafeAbsolutePath(input) {
70
+ if (typeof input !== 'string' || input.length === 0) {
71
+ throw this.makeError('INVALID_PATH', 'Path is required');
72
+ }
73
+ // Null byte
74
+ if (input.includes('\0')) {
75
+ throw this.makeError('INVALID_PATH', 'Invalid path: null byte detected');
76
+ }
77
+ // UNC / device paths (\\server\share, //server, \\?\...) — block network/device access
78
+ if (input.startsWith('\\\\') || input.startsWith('//')) {
79
+ throw this.makeError('INVALID_PATH', 'Invalid path: UNC paths are not allowed');
80
+ }
81
+ // Must be absolute (relative paths are meaningless without a project root)
82
+ if (!path.isAbsolute(input)) {
83
+ throw this.makeError('INVALID_PATH', 'Invalid path: must be absolute');
84
+ }
85
+ const resolved = path.resolve(input);
86
+ // Double-check the resolved form isn't UNC (e.g. mixed-separator input)
87
+ const normalizedForUNC = resolved.replace(/\//g, '\\');
88
+ if (normalizedForUNC.startsWith('\\\\')) {
89
+ throw this.makeError('INVALID_PATH', 'Invalid path: UNC paths are not allowed');
90
+ }
91
+ return resolved;
92
+ }
93
+ /**
94
+ * Validate and normalize a single folder name (for mkdir/rename).
95
+ * Strips directory components via basename (traversal guard), then rejects
96
+ * empty / dot names, reserved characters, and Windows reserved device names.
97
+ * If basename(name) !== name the input contained a path separator → traversal
98
+ * attempt → INVALID_NAME. (fileSystemService:765 basename idiom.)
99
+ */
100
+ sanitizeEntryName(name) {
101
+ if (typeof name !== 'string') {
102
+ throw this.makeError('INVALID_NAME', 'Name is required');
103
+ }
104
+ const base = path.basename(name);
105
+ // Any directory component (a/b, ../x) makes basename differ from the input.
106
+ if (base !== name) {
107
+ throw this.makeError('INVALID_NAME', 'Name must not contain path separators');
108
+ }
109
+ if (base === '' || base === '.' || base === '..') {
110
+ throw this.makeError('INVALID_NAME', 'Invalid name');
111
+ }
112
+ if (hasReservedChar(base)) {
113
+ throw this.makeError('INVALID_NAME', 'Name contains reserved characters');
114
+ }
115
+ // Reserved device name check uses the stem before the first dot (CON, CON.txt).
116
+ const stem = base.split('.')[0].toUpperCase();
117
+ if (WINDOWS_RESERVED_NAMES.has(stem)) {
118
+ throw this.makeError('INVALID_NAME', 'Name is a reserved device name');
119
+ }
120
+ return base;
121
+ }
122
+ /**
123
+ * Parent path for breadcrumb / up navigation. At a filesystem root (C:\, /)
124
+ * path.dirname returns the same path → return null so the client maps it to
125
+ * the "My PC" drive-roots view.
126
+ */
127
+ parentOf(abs) {
128
+ const parent = path.dirname(abs);
129
+ return parent === abs ? null : parent;
130
+ }
131
+ /**
132
+ * Whether a directory has at least one child directory (tree-chevron signal).
133
+ * depth-1 guarded readdir, short-circuits on the first directory found. There
134
+ * is NO recursion anywhere in this service, so symlink cycles can never blow
135
+ * the stack — a stronger guarantee than searchFiles' visited-set, achieved
136
+ * structurally. EACCES/EPERM (or any read failure) → false.
137
+ */
138
+ async hasChildDirectory(absDir) {
139
+ let dirents;
140
+ try {
141
+ dirents = await fs.readdir(absDir, { withFileTypes: true });
142
+ }
143
+ catch {
144
+ // EACCES/EPERM/ENOENT/etc. — treat as "no expandable children"
145
+ return false;
146
+ }
147
+ for (const dirent of dirents) {
148
+ try {
149
+ if (dirent.isDirectory())
150
+ return true;
151
+ if (dirent.isSymbolicLink()) {
152
+ // readdir() reports the link itself; resolve to see if it targets a dir.
153
+ const target = await fs.realpath(path.join(absDir, dirent.name));
154
+ const st = await fs.stat(target);
155
+ if (st.isDirectory())
156
+ return true;
157
+ }
158
+ }
159
+ catch {
160
+ // broken symlink / unreadable entry — skip
161
+ continue;
162
+ }
163
+ }
164
+ return false;
165
+ }
166
+ /**
167
+ * List the child DIRECTORIES of an absolute path (files excluded, AC1).
168
+ * - ENOENT → NOT_FOUND, non-directory → NOT_A_DIRECTORY
169
+ * - per-entry try/catch: EACCES/EPERM and broken symlinks are skipped so the
170
+ * listing returns a partial result instead of failing (AC4)
171
+ * - symlinks are resolved via realpath and evaluated as directory-or-not (AC3);
172
+ * no recursion means cycles cannot cause infinite descent
173
+ */
174
+ async listDirectory(absolutePath) {
175
+ const abs = this.assertSafeAbsolutePath(absolutePath);
176
+ let stat;
177
+ try {
178
+ stat = await fs.stat(abs);
179
+ }
180
+ catch (error) {
181
+ const code = error.code;
182
+ if (code === 'ENOENT')
183
+ throw this.makeError('NOT_FOUND', 'Path not found');
184
+ if (isWriteDeniedErrno(error))
185
+ throw this.makeError('PERMISSION_DENIED', 'Permission denied');
186
+ throw this.makeError('BROWSE_ERROR', 'Browse error');
187
+ }
188
+ if (!stat.isDirectory()) {
189
+ throw this.makeError('NOT_A_DIRECTORY', 'Path is not a directory');
190
+ }
191
+ let dirents;
192
+ try {
193
+ dirents = await fs.readdir(abs, { withFileTypes: true });
194
+ }
195
+ catch (error) {
196
+ // The whole listing failed (not a per-entry skip) → surface as a coherent code.
197
+ if (isWriteDeniedErrno(error))
198
+ throw this.makeError('PERMISSION_DENIED', 'Permission denied');
199
+ throw this.makeError('BROWSE_ERROR', 'Browse error');
200
+ }
201
+ const entries = [];
202
+ for (const dirent of dirents) {
203
+ try {
204
+ const entryPath = path.join(abs, dirent.name);
205
+ let isDir = dirent.isDirectory();
206
+ if (!isDir && dirent.isSymbolicLink()) {
207
+ // Broken symlink → realpath throws → caught below → skipped.
208
+ const target = await fs.realpath(entryPath);
209
+ const st = await fs.stat(target);
210
+ isDir = st.isDirectory();
211
+ }
212
+ if (!isDir)
213
+ continue; // files excluded (AC1)
214
+ const hasChildren = await this.hasChildDirectory(entryPath);
215
+ entries.push({ name: dirent.name, path: entryPath, hasChildren });
216
+ }
217
+ catch {
218
+ // EACCES/EPERM/broken symlink → skip (partial result, AC4/AC3)
219
+ continue;
220
+ }
221
+ }
222
+ entries.sort((a, b) => a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }));
223
+ return {
224
+ path: abs,
225
+ parent: this.parentOf(abs),
226
+ home: os.homedir(),
227
+ isDriveRoots: false,
228
+ entries,
229
+ };
230
+ }
231
+ /**
232
+ * List drive roots ("My PC" view, AC2).
233
+ * Windows: probe drive letters A–Z with fs.access — NO child_process (wmic is
234
+ * deprecated on newer Windows; PowerShell spawns are slow / shell-dependent /
235
+ * test-fragile). Drives that exist but are inaccessible (empty optical drive,
236
+ * locked BitLocker volume) make access() throw and are naturally omitted —
237
+ * this is the INTENDED meaning of AC2's "available drives", not a defect.
238
+ * POSIX: root "/" is always present; standard mount-point parents
239
+ * (/Volumes, /mnt, /media) are added best-effort only when they exist.
240
+ */
241
+ async listDriveRoots() {
242
+ const entries = [];
243
+ if (process.platform === 'win32') {
244
+ for (let i = 65; i <= 90; i++) { // 'A'..'Z'
245
+ const letter = String.fromCharCode(i);
246
+ const root = `${letter}:\\`;
247
+ try {
248
+ await fs.access(root);
249
+ // Drives are assumed expandable (avoids a probe of every drive's contents).
250
+ entries.push({ name: `${letter}:`, path: root, hasChildren: true });
251
+ }
252
+ catch {
253
+ // Non-existent OR inaccessible drive — intentionally omitted (see doc above).
254
+ continue;
255
+ }
256
+ }
257
+ }
258
+ else {
259
+ entries.push({ name: '/', path: '/', hasChildren: true });
260
+ for (const mount of ['/Volumes', '/mnt', '/media']) {
261
+ try {
262
+ const st = await fs.stat(mount);
263
+ if (st.isDirectory()) {
264
+ entries.push({ name: mount, path: mount, hasChildren: true });
265
+ }
266
+ }
267
+ catch {
268
+ continue; // best-effort: absent mount parents are skipped
269
+ }
270
+ }
271
+ }
272
+ return {
273
+ path: null,
274
+ parent: null,
275
+ home: os.homedir(),
276
+ isDriveRoots: true,
277
+ entries,
278
+ };
279
+ }
280
+ /**
281
+ * Create a new folder under an absolute parent directory (AC5).
282
+ * EEXIST → ALREADY_EXISTS (409); EACCES/EPERM/EROFS → PERMISSION_DENIED (403,
283
+ * AC9 — OS-protected areas are refused safely, never a crash/500).
284
+ */
285
+ async makeDirectory(parentAbsolute, name) {
286
+ const parent = this.assertSafeAbsolutePath(parentAbsolute);
287
+ const safe = this.sanitizeEntryName(name);
288
+ let parentStat;
289
+ try {
290
+ parentStat = await fs.stat(parent);
291
+ }
292
+ catch (error) {
293
+ if (error.code === 'ENOENT') {
294
+ throw this.makeError('NOT_FOUND', 'Parent directory not found');
295
+ }
296
+ if (isWriteDeniedErrno(error))
297
+ throw this.makeError('PERMISSION_DENIED', 'Permission denied');
298
+ throw this.makeError('BROWSE_ERROR', 'Browse error');
299
+ }
300
+ if (!parentStat.isDirectory()) {
301
+ throw this.makeError('NOT_A_DIRECTORY', 'Parent path is not a directory');
302
+ }
303
+ const target = path.join(parent, safe);
304
+ try {
305
+ await fs.mkdir(target);
306
+ return { success: true, path: target };
307
+ }
308
+ catch (error) {
309
+ const code = error.code;
310
+ if (code === 'EEXIST')
311
+ throw this.makeError('ALREADY_EXISTS', 'Directory already exists');
312
+ if (code === 'ENOENT')
313
+ throw this.makeError('NOT_FOUND', 'Parent directory not found');
314
+ if (isWriteDeniedErrno(error))
315
+ throw this.makeError('PERMISSION_DENIED', 'Permission denied');
316
+ throw this.makeError('BROWSE_ERROR', 'Browse error');
317
+ }
318
+ }
319
+ /**
320
+ * Rename an entry within its SAME parent directory (AC6).
321
+ * Target-exists → ALREADY_EXISTS (409); EACCES/EPERM/EROFS → PERMISSION_DENIED
322
+ * (AC9). The new name is sanitized and joined to dirname(source), so a rename
323
+ * can never move an entry into another directory.
324
+ */
325
+ async rename(absolute, newName) {
326
+ const src = this.assertSafeAbsolutePath(absolute);
327
+ const safe = this.sanitizeEntryName(newName);
328
+ try {
329
+ await fs.stat(src);
330
+ }
331
+ catch (error) {
332
+ if (error.code === 'ENOENT') {
333
+ throw this.makeError('NOT_FOUND', 'Source not found');
334
+ }
335
+ if (isWriteDeniedErrno(error))
336
+ throw this.makeError('PERMISSION_DENIED', 'Permission denied');
337
+ throw this.makeError('BROWSE_ERROR', 'Browse error');
338
+ }
339
+ const target = path.join(path.dirname(src), safe);
340
+ // Target must not already exist (same-parent rename, AC6).
341
+ try {
342
+ await fs.stat(target);
343
+ throw this.makeError('ALREADY_EXISTS', 'Target already exists');
344
+ }
345
+ catch (error) {
346
+ const code = error.code;
347
+ if (code === 'ALREADY_EXISTS')
348
+ throw error;
349
+ if (code !== 'ENOENT') {
350
+ if (isWriteDeniedErrno(error))
351
+ throw this.makeError('PERMISSION_DENIED', 'Permission denied');
352
+ throw this.makeError('BROWSE_ERROR', 'Browse error');
353
+ }
354
+ // ENOENT — target is free, proceed.
355
+ }
356
+ try {
357
+ await fs.rename(src, target);
358
+ return { success: true, oldPath: src, newPath: target };
359
+ }
360
+ catch (error) {
361
+ const code = error.code;
362
+ if (code === 'EEXIST' || code === 'ENOTEMPTY') {
363
+ throw this.makeError('ALREADY_EXISTS', 'Target already exists');
364
+ }
365
+ if (isWriteDeniedErrno(error))
366
+ throw this.makeError('PERMISSION_DENIED', 'Permission denied');
367
+ throw this.makeError('BROWSE_ERROR', 'Browse error');
368
+ }
369
+ }
370
+ }
371
+ export const systemBrowseService = new SystemBrowseService();
372
+ //# sourceMappingURL=systemBrowseService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemBrowseService.js","sourceRoot":"","sources":["../../src/services/systemBrowseService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Story 31.3 (Task A.3 / A.5): token attribution + exact count_tokens proxy.
3
+ *
4
+ * Two responsibilities, sharing one text-resolution path so the "exact count"
5
+ * input and the "approximation" input are always the same bytes (N-1):
6
+ *
7
+ * 1. listTokenAttribution(projectSlug) — enumerate the measured harness
8
+ * elements (project/global CLAUDE.md · each skill's SKILL.md · the
9
+ * Hammoc-managed context-builder injection) and report UTF-8 byte size +
10
+ * `approxTokens = ceil(bytes/4)` + a sha256 content hash (AC-B1 / AC-B2).
11
+ *
12
+ * 2. exactCount(projectSlug, req) — proxy the official `count_tokens` via the
13
+ * already-installed `@anthropic-ai/sdk` `messages.countTokens` (spike #2,
14
+ * §15 — no new dependency), keyed by a server-recomputed content hash
15
+ * (N-B: the request hash is only an optimistic hint). Failures are
16
+ * non-blocking (`failed: true`) so the client keeps the approximation
17
+ * (AC-B3.c).
18
+ *
19
+ * Enumeration REUSES existing controllers/services (claudeMdService,
20
+ * harnessSkillService, contextBuilderService) — no new file scanner (S-2). The
21
+ * context-builder injection is estimated from the Story 31.2 manifest WITHOUT
22
+ * executing the hook (dynamic variable / command values are placeholders).
23
+ *
24
+ * Per spike #1 (§14) the SERVER approximation tier is byte `size/4` only — the
25
+ * `@anthropic-ai/tokenizer` tier was NOT adopted (Task A.4 skipped).
26
+ */
27
+ import { type TokenAttributionItem, type ExactTokenCountRequest, type ExactTokenCountResponse } from '@hammoc/shared';
28
+ /** ceil(bytes / 4) — the size-based heuristic (§14). */
29
+ export declare function approxTokensFromBytes(bytes: number): number;
30
+ declare class TokenCountService {
31
+ /** sha256(text) → token count. In-memory; persisted best-effort to disk. */
32
+ private cache;
33
+ private cacheLoaded;
34
+ private cacheFilePath;
35
+ private loadCache;
36
+ private persistCache;
37
+ /**
38
+ * Enumerate measured harness elements (AC-B1.a). Missing CLAUDE.md files and a
39
+ * disabled/empty context builder are omitted (they contribute no tokens).
40
+ */
41
+ listTokenAttribution(projectSlug: string): Promise<TokenAttributionItem[]>;
42
+ /**
43
+ * Exact count for one element (AC-B3). The text is re-resolved server-side and
44
+ * its sha256 is the AUTHORITATIVE cache key (N-B) — the request `contentHash`
45
+ * is only an optimistic hint. count_tokens failures return `failed: true`.
46
+ */
47
+ exactCount(projectSlug: string, req: ExactTokenCountRequest): Promise<ExactTokenCountResponse>;
48
+ private makeItem;
49
+ /** Resolve the text used for BOTH attribution and exact-count (N-1). */
50
+ private resolveElementText;
51
+ private readClaudeMd;
52
+ /**
53
+ * Read a skill's SKILL.md, validating `elementPath` against the enumerated
54
+ * skills so an arbitrary client path can never be read (the path must be one
55
+ * the server itself vouched for in listTokenAttribution).
56
+ */
57
+ private readSkillTextByPath;
58
+ /**
59
+ * Assemble the context-builder `additionalContext` text WITHOUT executing the
60
+ * hook (N-1). Reference files are read (their content dominates the size);
61
+ * dynamic variables / acknowledged commands contribute only their block
62
+ * headers with a `(dynamic)` placeholder. Mirrors the block format of
63
+ * `contextBuilderScriptTemplate` for the statically-knowable parts. Returns ''
64
+ * when the builder is disabled or empty.
65
+ */
66
+ private assembleContextBuilderText;
67
+ private callCountTokens;
68
+ }
69
+ export declare const tokenCountService: TokenCountService;
70
+ export {};
71
+ //# sourceMappingURL=tokenCountService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenCountService.d.ts","sourceRoot":"","sources":["../../src/services/tokenCountService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAQH,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAC;AAwBxB,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AA6BD,cAAM,iBAAiB;IACrB,4EAA4E;IAC5E,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,aAAa;YAIP,SAAS;YAcT,YAAY;IAU1B;;;OAGG;IACG,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAkChF;;;;OAIG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAqBpG,OAAO,CAAC,QAAQ;IAiBhB,wEAAwE;YAC1D,kBAAkB;YAqBlB,YAAY;IAW1B;;;;OAIG;YACW,mBAAmB;IAkBjC;;;;;;;OAOG;YACW,0BAA0B;YAwC1B,eAAe;CAiB9B;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}