hammoc 1.5.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 (197) hide show
  1. package/README.md +8 -2
  2. package/package.json +2 -2
  3. package/packages/client/dist/assets/{agentExampleHighlight-BgwTm15v.js → agentExampleHighlight-ltj9ce0U.js} +1 -1
  4. package/packages/client/dist/assets/{commandTokenHighlight-BljHwnrK.js → commandTokenHighlight-ji_ViMb4.js} +1 -1
  5. package/packages/client/dist/assets/{index-D3LxqW3f.js → index-B-DiRGuz.js} +1 -1
  6. package/packages/client/dist/assets/index-B09doO8H.js +139 -0
  7. package/packages/client/dist/assets/{index-NqJdhlek.js → index-BT4RIi0U.js} +535 -510
  8. package/packages/client/dist/assets/index-DyNJ5jEW.css +32 -0
  9. package/packages/client/dist/assets/{snippetTokenHighlight-DWsaQXX0.js → snippetTokenHighlight-CP3v4o2g.js} +1 -1
  10. package/packages/client/dist/index.html +2 -2
  11. package/packages/client/dist/sw.js +1 -1
  12. package/packages/server/dist/controllers/bmadCoreConfigController.d.ts +41 -0
  13. package/packages/server/dist/controllers/bmadCoreConfigController.d.ts.map +1 -0
  14. package/packages/server/dist/controllers/bmadCoreConfigController.js +172 -0
  15. package/packages/server/dist/controllers/bmadCoreConfigController.js.map +1 -0
  16. package/packages/server/dist/controllers/contextBuilderController.d.ts +43 -0
  17. package/packages/server/dist/controllers/contextBuilderController.d.ts.map +1 -0
  18. package/packages/server/dist/controllers/contextBuilderController.js +159 -0
  19. package/packages/server/dist/controllers/contextBuilderController.js.map +1 -0
  20. package/packages/server/dist/controllers/harnessAgentController.d.ts +7 -0
  21. package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -1
  22. package/packages/server/dist/controllers/harnessAgentController.js +33 -0
  23. package/packages/server/dist/controllers/harnessAgentController.js.map +1 -1
  24. package/packages/server/dist/controllers/harnessBundleController.d.ts +37 -0
  25. package/packages/server/dist/controllers/harnessBundleController.d.ts.map +1 -0
  26. package/packages/server/dist/controllers/harnessBundleController.js +312 -0
  27. package/packages/server/dist/controllers/harnessBundleController.js.map +1 -0
  28. package/packages/server/dist/controllers/harnessCommandController.d.ts +7 -0
  29. package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -1
  30. package/packages/server/dist/controllers/harnessCommandController.js +33 -0
  31. package/packages/server/dist/controllers/harnessCommandController.js.map +1 -1
  32. package/packages/server/dist/controllers/harnessHookController.d.ts.map +1 -1
  33. package/packages/server/dist/controllers/harnessHookController.js +44 -1
  34. package/packages/server/dist/controllers/harnessHookController.js.map +1 -1
  35. package/packages/server/dist/controllers/harnessMcpController.d.ts.map +1 -1
  36. package/packages/server/dist/controllers/harnessMcpController.js +62 -1
  37. package/packages/server/dist/controllers/harnessMcpController.js.map +1 -1
  38. package/packages/server/dist/controllers/harnessShareScopeController.d.ts +9 -0
  39. package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -1
  40. package/packages/server/dist/controllers/harnessShareScopeController.js +48 -1
  41. package/packages/server/dist/controllers/harnessShareScopeController.js.map +1 -1
  42. package/packages/server/dist/controllers/marketplaceController.d.ts +19 -0
  43. package/packages/server/dist/controllers/marketplaceController.d.ts.map +1 -0
  44. package/packages/server/dist/controllers/marketplaceController.js +74 -0
  45. package/packages/server/dist/controllers/marketplaceController.js.map +1 -0
  46. package/packages/server/dist/controllers/observabilityController.d.ts +32 -0
  47. package/packages/server/dist/controllers/observabilityController.d.ts.map +1 -0
  48. package/packages/server/dist/controllers/observabilityController.js +148 -0
  49. package/packages/server/dist/controllers/observabilityController.js.map +1 -0
  50. package/packages/server/dist/handlers/streamCallbacks.d.ts +8 -0
  51. package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
  52. package/packages/server/dist/handlers/streamCallbacks.js +8 -0
  53. package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
  54. package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
  55. package/packages/server/dist/handlers/websocket.js +24 -2
  56. package/packages/server/dist/handlers/websocket.js.map +1 -1
  57. package/packages/server/dist/routes/harness.d.ts.map +1 -1
  58. package/packages/server/dist/routes/harness.js +58 -0
  59. package/packages/server/dist/routes/harness.js.map +1 -1
  60. package/packages/server/dist/services/bmadCoreConfigService.d.ts +86 -0
  61. package/packages/server/dist/services/bmadCoreConfigService.d.ts.map +1 -0
  62. package/packages/server/dist/services/bmadCoreConfigService.js +175 -0
  63. package/packages/server/dist/services/bmadCoreConfigService.js.map +1 -0
  64. package/packages/server/dist/services/bmadStatusService.d.ts +9 -0
  65. package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
  66. package/packages/server/dist/services/bmadStatusService.js +59 -6
  67. package/packages/server/dist/services/bmadStatusService.js.map +1 -1
  68. package/packages/server/dist/services/chatService.js +1 -1
  69. package/packages/server/dist/services/chatService.js.map +1 -1
  70. package/packages/server/dist/services/contextBuilderScriptTemplate.d.ts +24 -0
  71. package/packages/server/dist/services/contextBuilderScriptTemplate.d.ts.map +1 -0
  72. package/packages/server/dist/services/contextBuilderScriptTemplate.js +181 -0
  73. package/packages/server/dist/services/contextBuilderScriptTemplate.js.map +1 -0
  74. package/packages/server/dist/services/contextBuilderService.d.ts +68 -0
  75. package/packages/server/dist/services/contextBuilderService.d.ts.map +1 -0
  76. package/packages/server/dist/services/contextBuilderService.js +345 -0
  77. package/packages/server/dist/services/contextBuilderService.js.map +1 -0
  78. package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -1
  79. package/packages/server/dist/services/fileWatcherService.js +40 -0
  80. package/packages/server/dist/services/fileWatcherService.js.map +1 -1
  81. package/packages/server/dist/services/harnessAgentService.d.ts +18 -0
  82. package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -1
  83. package/packages/server/dist/services/harnessAgentService.js +55 -0
  84. package/packages/server/dist/services/harnessAgentService.js.map +1 -1
  85. package/packages/server/dist/services/harnessBundleService.d.ts +145 -0
  86. package/packages/server/dist/services/harnessBundleService.d.ts.map +1 -0
  87. package/packages/server/dist/services/harnessBundleService.js +1318 -0
  88. package/packages/server/dist/services/harnessBundleService.js.map +1 -0
  89. package/packages/server/dist/services/harnessCommandService.d.ts +21 -0
  90. package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -1
  91. package/packages/server/dist/services/harnessCommandService.js +64 -0
  92. package/packages/server/dist/services/harnessCommandService.js.map +1 -1
  93. package/packages/server/dist/services/harnessHookService.d.ts +27 -0
  94. package/packages/server/dist/services/harnessHookService.d.ts.map +1 -1
  95. package/packages/server/dist/services/harnessHookService.js +52 -0
  96. package/packages/server/dist/services/harnessHookService.js.map +1 -1
  97. package/packages/server/dist/services/harnessMcpService.d.ts +24 -1
  98. package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -1
  99. package/packages/server/dist/services/harnessMcpService.js +70 -0
  100. package/packages/server/dist/services/harnessMcpService.js.map +1 -1
  101. package/packages/server/dist/services/harnessShareScopeService.d.ts +19 -0
  102. package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -1
  103. package/packages/server/dist/services/harnessShareScopeService.js +65 -0
  104. package/packages/server/dist/services/harnessShareScopeService.js.map +1 -1
  105. package/packages/server/dist/services/issueService.d.ts.map +1 -1
  106. package/packages/server/dist/services/issueService.js +1 -0
  107. package/packages/server/dist/services/issueService.js.map +1 -1
  108. package/packages/server/dist/services/marketplaceService.d.ts +50 -0
  109. package/packages/server/dist/services/marketplaceService.d.ts.map +1 -0
  110. package/packages/server/dist/services/marketplaceService.js +326 -0
  111. package/packages/server/dist/services/marketplaceService.js.map +1 -0
  112. package/packages/server/dist/services/observabilityService.d.ts +87 -0
  113. package/packages/server/dist/services/observabilityService.d.ts.map +1 -0
  114. package/packages/server/dist/services/observabilityService.js +0 -0
  115. package/packages/server/dist/services/observabilityService.js.map +1 -0
  116. package/packages/server/dist/services/queueService.d.ts.map +1 -1
  117. package/packages/server/dist/services/queueService.js +3 -0
  118. package/packages/server/dist/services/queueService.js.map +1 -1
  119. package/packages/server/dist/services/sessionService.d.ts +16 -0
  120. package/packages/server/dist/services/sessionService.d.ts.map +1 -1
  121. package/packages/server/dist/services/sessionService.js +125 -0
  122. package/packages/server/dist/services/sessionService.js.map +1 -1
  123. package/packages/server/dist/services/tokenCountService.d.ts +71 -0
  124. package/packages/server/dist/services/tokenCountService.d.ts.map +1 -0
  125. package/packages/server/dist/services/tokenCountService.js +313 -0
  126. package/packages/server/dist/services/tokenCountService.js.map +1 -0
  127. package/packages/server/dist/snippets/apply-qa-fixes +7 -5
  128. package/packages/server/dist/snippets/qa-review +5 -1
  129. package/packages/server/dist/utils/assertSafeBundlePath.d.ts +29 -0
  130. package/packages/server/dist/utils/assertSafeBundlePath.d.ts.map +1 -0
  131. package/packages/server/dist/utils/assertSafeBundlePath.js +53 -0
  132. package/packages/server/dist/utils/assertSafeBundlePath.js.map +1 -0
  133. package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts +7 -0
  134. package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts.map +1 -0
  135. package/packages/server/dist/utils/bundledBinaryModelSupport.js +107 -0
  136. package/packages/server/dist/utils/bundledBinaryModelSupport.js.map +1 -0
  137. package/packages/server/dist/utils/effortUtils.d.ts +2 -2
  138. package/packages/server/dist/utils/effortUtils.js +5 -5
  139. package/packages/server/dist/utils/effortUtils.js.map +1 -1
  140. package/packages/server/dist/utils/errors.d.ts +1 -0
  141. package/packages/server/dist/utils/errors.d.ts.map +1 -1
  142. package/packages/server/dist/utils/errors.js +17 -0
  143. package/packages/server/dist/utils/errors.js.map +1 -1
  144. package/packages/server/dist/utils/harnessBundleSchema.d.ts +14 -12
  145. package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -1
  146. package/packages/server/dist/utils/harnessBundleSchema.js +11 -1
  147. package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -1
  148. package/packages/server/dist/utils/harnessPaths.d.ts +40 -0
  149. package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -1
  150. package/packages/server/dist/utils/harnessPaths.js +123 -0
  151. package/packages/server/dist/utils/harnessPaths.js.map +1 -1
  152. package/packages/server/package.json +2 -1
  153. package/packages/server/resources/internals/INDEX.md +3 -1
  154. package/packages/server/resources/internals/bmad-qa-fix-marker.md +32 -0
  155. package/packages/server/resources/internals/harness-files.md +22 -0
  156. package/packages/server/resources/internals/observability-storage.md +23 -0
  157. package/packages/server/resources/manual/02-chat.md +2 -2
  158. package/packages/server/resources/manual/05-projects.md +3 -1
  159. package/packages/server/resources/manual/10-project-board.md +4 -3
  160. package/packages/server/resources/manual/11-bmad-method-integration.md +10 -8
  161. package/packages/server/resources/manual/12-harness-workbench.md +82 -1
  162. package/packages/server/resources/manual/13-settings.md +4 -4
  163. package/packages/shared/dist/index.d.ts +4 -0
  164. package/packages/shared/dist/index.d.ts.map +1 -1
  165. package/packages/shared/dist/index.js +8 -0
  166. package/packages/shared/dist/index.js.map +1 -1
  167. package/packages/shared/dist/types/bmadCoreConfig.d.ts +71 -0
  168. package/packages/shared/dist/types/bmadCoreConfig.d.ts.map +1 -0
  169. package/packages/shared/dist/types/bmadCoreConfig.js +30 -0
  170. package/packages/shared/dist/types/bmadCoreConfig.js.map +1 -0
  171. package/packages/shared/dist/types/bmadStatus.d.ts +10 -0
  172. package/packages/shared/dist/types/bmadStatus.d.ts.map +1 -1
  173. package/packages/shared/dist/types/bmadStatus.js.map +1 -1
  174. package/packages/shared/dist/types/board.d.ts +6 -0
  175. package/packages/shared/dist/types/board.d.ts.map +1 -1
  176. package/packages/shared/dist/types/contextBuilder.d.ts +102 -0
  177. package/packages/shared/dist/types/contextBuilder.d.ts.map +1 -0
  178. package/packages/shared/dist/types/contextBuilder.js +55 -0
  179. package/packages/shared/dist/types/contextBuilder.js.map +1 -0
  180. package/packages/shared/dist/types/harnessBundle.d.ts +35 -0
  181. package/packages/shared/dist/types/harnessBundle.d.ts.map +1 -1
  182. package/packages/shared/dist/types/marketplace.d.ts +83 -0
  183. package/packages/shared/dist/types/marketplace.d.ts.map +1 -0
  184. package/packages/shared/dist/types/marketplace.js +18 -0
  185. package/packages/shared/dist/types/marketplace.js.map +1 -0
  186. package/packages/shared/dist/types/observability.d.ts +148 -0
  187. package/packages/shared/dist/types/observability.d.ts.map +1 -0
  188. package/packages/shared/dist/types/observability.js +24 -0
  189. package/packages/shared/dist/types/observability.js.map +1 -0
  190. package/packages/shared/dist/types/preferences.d.ts +2 -0
  191. package/packages/shared/dist/types/preferences.d.ts.map +1 -1
  192. package/packages/shared/dist/types/preferences.js.map +1 -1
  193. package/packages/shared/dist/types/sdk.d.ts +1 -1
  194. package/packages/shared/dist/types/sdk.d.ts.map +1 -1
  195. package/packages/shared/dist/types/sdk.js +1 -1
  196. package/packages/shared/dist/types/sdk.js.map +1 -1
  197. package/packages/client/dist/assets/index-CjyjnXB8.css +0 -32
@@ -6,13 +6,13 @@ import type { ThinkingEffort } from '@hammoc/shared';
6
6
  /**
7
7
  * Clamp unsupported effort levels:
8
8
  * · 'max' → 'high' unless model supports it (Opus 4.6+, Sonnet 4.6)
9
- * · 'xhigh' → 'high' unless model supports it (Opus 4.7 only)
9
+ * · 'xhigh' → 'high' unless model supports it (Opus 4.7+)
10
10
  * Other levels pass through unchanged.
11
11
  */
12
12
  export declare function clampEffortForModel(effort: ThinkingEffort | undefined, model: string | undefined): ThinkingEffort | undefined;
13
13
  /**
14
14
  * Whether the model supports Anthropic's adaptive thinking mode
15
- * (`thinking: { type: 'adaptive' }`). Opus 4.7 requires adaptive;
15
+ * (`thinking: { type: 'adaptive' }`). Opus 4.7+ requires adaptive;
16
16
  * Opus 4.6 and Sonnet 4.6 accept adaptive as the recommended mode.
17
17
  * Older models (Sonnet 4.5, Opus 4.5, Haiku, Sonnet 4, etc.) do NOT
18
18
  * support adaptive and must stay on the legacy `maxThinkingTokens` path.
@@ -5,15 +5,15 @@
5
5
  /**
6
6
  * Clamp unsupported effort levels:
7
7
  * · 'max' → 'high' unless model supports it (Opus 4.6+, Sonnet 4.6)
8
- * · 'xhigh' → 'high' unless model supports it (Opus 4.7 only)
8
+ * · 'xhigh' → 'high' unless model supports it (Opus 4.7+)
9
9
  * Other levels pass through unchanged.
10
10
  */
11
11
  export function clampEffortForModel(effort, model) {
12
12
  if (!effort)
13
13
  return effort;
14
14
  const supportsMax = !!model && (model === 'opus' || model === 'sonnet' ||
15
- model.includes('opus-4-6') || model.includes('opus-4-7') || model.includes('sonnet-4-6'));
16
- const supportsXHigh = !!model && (model === 'opus' || model.includes('opus-4-7'));
15
+ model.includes('opus-4-6') || model.includes('opus-4-7') || model.includes('opus-4-8') || model.includes('sonnet-4-6'));
16
+ const supportsXHigh = !!model && (model === 'opus' || model.includes('opus-4-7') || model.includes('opus-4-8'));
17
17
  if (effort === 'max' && !supportsMax)
18
18
  return 'high';
19
19
  if (effort === 'xhigh' && !supportsXHigh)
@@ -22,7 +22,7 @@ export function clampEffortForModel(effort, model) {
22
22
  }
23
23
  /**
24
24
  * Whether the model supports Anthropic's adaptive thinking mode
25
- * (`thinking: { type: 'adaptive' }`). Opus 4.7 requires adaptive;
25
+ * (`thinking: { type: 'adaptive' }`). Opus 4.7+ requires adaptive;
26
26
  * Opus 4.6 and Sonnet 4.6 accept adaptive as the recommended mode.
27
27
  * Older models (Sonnet 4.5, Opus 4.5, Haiku, Sonnet 4, etc.) do NOT
28
28
  * support adaptive and must stay on the legacy `maxThinkingTokens` path.
@@ -31,6 +31,6 @@ export function supportsAdaptiveThinking(model) {
31
31
  if (!model)
32
32
  return false;
33
33
  return (model === 'opus' || model === 'sonnet' ||
34
- model.includes('opus-4-6') || model.includes('opus-4-7') || model.includes('sonnet-4-6'));
34
+ model.includes('opus-4-6') || model.includes('opus-4-7') || model.includes('opus-4-8') || model.includes('sonnet-4-6'));
35
35
  }
36
36
  //# sourceMappingURL=effortUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"effortUtils.js","sourceRoot":"","sources":["../../src/utils/effortUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAkC,EAAE,KAAyB;IAC/F,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,IAAI,CAC7B,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QACtC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CACzF,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAClF,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IACpD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa;QAAE,OAAO,MAAM,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAyB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CACL,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QACtC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CACzF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"effortUtils.js","sourceRoot":"","sources":["../../src/utils/effortUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAkC,EAAE,KAAyB;IAC/F,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,IAAI,CAC7B,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QACtC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CACvH,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAChH,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IACpD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa;QAAE,OAAO,MAAM,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAyB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CACL,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QACtC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CACvH,CAAC;AACJ,CAAC"}
@@ -12,6 +12,7 @@ export declare enum SDKErrorCode {
12
12
  NETWORK_ERROR = "NETWORK_ERROR",
13
13
  INVALID_REQUEST = "INVALID_REQUEST",
14
14
  CONTEXT_OVERFLOW = "CONTEXT_OVERFLOW",
15
+ RESUME_THINKING_INVALID = "RESUME_THINKING_INVALID",
15
16
  SERVICE_UNAVAILABLE = "SERVICE_UNAVAILABLE",
16
17
  PERMISSION_DENIED = "PERMISSION_DENIED",
17
18
  INVALID_PATH = "INVALID_PATH",
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;IAC7C,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAWzD,CAAC;AAEF;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;gBAG7B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,YAAmC,EACzC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;IAeH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASlC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,UAAU,GAAE,MAAW,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQ7E;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CASlE;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;gBACvC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAsErE"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;IAC7C,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IAIrC,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAYzD,CAAC;AAEF;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;gBAG7B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,YAAmC,EACzC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;IAeH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASlC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,UAAU,GAAE,MAAW,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQ7E;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CASlE;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;gBACvC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAqFrE"}
@@ -14,6 +14,10 @@ export var SDKErrorCode;
14
14
  SDKErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
15
15
  SDKErrorCode["INVALID_REQUEST"] = "INVALID_REQUEST";
16
16
  SDKErrorCode["CONTEXT_OVERFLOW"] = "CONTEXT_OVERFLOW";
17
+ // Resume rejected because thinking blocks in the latest assistant turn no
18
+ // longer match their original signatures (typically after the CLI restructures
19
+ // a long conversation on resume). Recoverable by stripping thinking blocks.
20
+ SDKErrorCode["RESUME_THINKING_INVALID"] = "RESUME_THINKING_INVALID";
17
21
  SDKErrorCode["SERVICE_UNAVAILABLE"] = "SERVICE_UNAVAILABLE";
18
22
  SDKErrorCode["PERMISSION_DENIED"] = "PERMISSION_DENIED";
19
23
  SDKErrorCode["INVALID_PATH"] = "INVALID_PATH";
@@ -29,6 +33,7 @@ export const SDK_ERROR_STATUS = {
29
33
  [SDKErrorCode.NETWORK_ERROR]: 503,
30
34
  [SDKErrorCode.INVALID_REQUEST]: 400,
31
35
  [SDKErrorCode.CONTEXT_OVERFLOW]: 400,
36
+ [SDKErrorCode.RESUME_THINKING_INVALID]: 400,
32
37
  [SDKErrorCode.SERVICE_UNAVAILABLE]: 503,
33
38
  [SDKErrorCode.PERMISSION_DENIED]: 403,
34
39
  [SDKErrorCode.INVALID_PATH]: 400,
@@ -154,6 +159,18 @@ export function parseSDKError(error, lang) {
154
159
  if (message.includes('abort') || error.name === 'AbortError') {
155
160
  return new AbortedError(error, t?.('error.aborted'));
156
161
  }
162
+ // Check for resume-time thinking-block signature rejection.
163
+ // The API rejects a resumed conversation whose latest assistant turn carries
164
+ // thinking blocks that no longer match their original signatures, e.g. after
165
+ // the CLI compacts/restructures a long conversation on resume. The message is:
166
+ // "`thinking` or `redacted_thinking` blocks in the latest assistant message
167
+ // cannot be modified. These blocks must remain as they were..."
168
+ if (message.includes('thinking') &&
169
+ (message.includes('cannot be modified') || message.includes('must remain as they were'))) {
170
+ return new SDKError(error.message, SDKErrorCode.RESUME_THINKING_INVALID, {
171
+ originalError: error,
172
+ });
173
+ }
157
174
  // Check for context overflow / token limit errors
158
175
  if (message.includes('context window') ||
159
176
  message.includes('context length') ||
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,16 @@ import { z } from 'zod';
18
18
  * future-version bundles fall through to the AC5.a "futureBundle" branch
19
19
  * before this schema is even consulted (the import service inspects the raw
20
20
  * JSON's version field first, then runs full Zod validation).
21
+ *
22
+ * `includes` is intentionally LOOSE (`z.array(z.string())`) rather than
23
+ * `z.array(sectionSchema)` so a `bundleVersion === 1` manifest carrying a
24
+ * future-domain stranger section (e.g. `['claude-md', 'future-section']`)
25
+ * still parses. The import service's `computePreview` then surfaces unknown
26
+ * sections via `preview.unknownSections` per AC5.b instead of bailing with
27
+ * `compatibility: 'malformed'`. Export-request validation
28
+ * (`exportBundleRequestSchema`) keeps `sectionSchema` strict — we never
29
+ * accept unknown sections from outbound callers, only tolerate them
30
+ * inbound.
21
31
  */
22
32
  export declare const bundleManifestSchema: z.ZodObject<{
23
33
  bundleVersion: z.ZodLiteral<1>;
@@ -25,15 +35,7 @@ export declare const bundleManifestSchema: z.ZodObject<{
25
35
  claudeCodeSpecVersion: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
26
36
  createdAt: z.ZodString;
27
37
  sourceProjectSlug: z.ZodString;
28
- includes: z.ZodArray<z.ZodEnum<{
29
- agents: "agents";
30
- hooks: "hooks";
31
- commands: "commands";
32
- skills: "skills";
33
- mcp: "mcp";
34
- "claude-md": "claude-md";
35
- bmad: "bmad";
36
- }>>;
38
+ includes: z.ZodArray<z.ZodString>;
37
39
  secretsPolicy: z.ZodEnum<{
38
40
  excluded: "excluded";
39
41
  placeholder: "placeholder";
@@ -49,9 +51,9 @@ export declare const bundleManifestSchema: z.ZodObject<{
49
51
  agent: "agent";
50
52
  command: "command";
51
53
  skill: "skill";
54
+ "claude-md": "claude-md";
52
55
  mcp: "mcp";
53
56
  hook: "hook";
54
- "claude-md": "claude-md";
55
57
  bmad: "bmad";
56
58
  }>;
57
59
  identity: z.ZodString;
@@ -78,10 +80,10 @@ export declare const exportBundleRequestSchema: z.ZodObject<{
78
80
  includes: z.ZodArray<z.ZodEnum<{
79
81
  agents: "agents";
80
82
  hooks: "hooks";
81
- commands: "commands";
82
83
  skills: "skills";
83
- mcp: "mcp";
84
+ commands: "commands";
84
85
  "claude-md": "claude-md";
86
+ mcp: "mcp";
85
87
  bmad: "bmad";
86
88
  }>>;
87
89
  secretsPolicy: z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"harnessBundleSchema.d.ts","sourceRoot":"","sources":["../../src/utils/harnessBundleSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0CxB;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;iBAEjC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;iBAIpC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;iBAGnC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC"}
1
+ {"version":3,"file":"harnessBundleSchema.d.ts","sourceRoot":"","sources":["../../src/utils/harnessBundleSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0CxB;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;iBAEjC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;iBAIpC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;iBAGnC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC"}
@@ -43,6 +43,16 @@ const bundleItemSchema = z.object({
43
43
  * future-version bundles fall through to the AC5.a "futureBundle" branch
44
44
  * before this schema is even consulted (the import service inspects the raw
45
45
  * JSON's version field first, then runs full Zod validation).
46
+ *
47
+ * `includes` is intentionally LOOSE (`z.array(z.string())`) rather than
48
+ * `z.array(sectionSchema)` so a `bundleVersion === 1` manifest carrying a
49
+ * future-domain stranger section (e.g. `['claude-md', 'future-section']`)
50
+ * still parses. The import service's `computePreview` then surfaces unknown
51
+ * sections via `preview.unknownSections` per AC5.b instead of bailing with
52
+ * `compatibility: 'malformed'`. Export-request validation
53
+ * (`exportBundleRequestSchema`) keeps `sectionSchema` strict — we never
54
+ * accept unknown sections from outbound callers, only tolerate them
55
+ * inbound.
46
56
  */
47
57
  export const bundleManifestSchema = z.object({
48
58
  bundleVersion: z.literal(HARNESS_BUNDLE_VERSION),
@@ -50,7 +60,7 @@ export const bundleManifestSchema = z.object({
50
60
  claudeCodeSpecVersion: z.union([z.string().min(1), z.null()]),
51
61
  createdAt: z.string().min(1),
52
62
  sourceProjectSlug: z.string().min(1),
53
- includes: z.array(sectionSchema),
63
+ includes: z.array(z.string().min(1)),
54
64
  secretsPolicy: secretsPolicySchema,
55
65
  pluginDependencies: z.array(pluginRefSchema),
56
66
  items: z.array(bundleItemSchema),
@@ -1 +1 @@
1
- {"version":3,"file":"harnessBundleSchema.js","sourceRoot":"","sources":["../../src/utils/harnessBundleSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harnessBundleSchema.js","sourceRoot":"","sources":["../../src/utils/harnessBundleSchema.ts"],"names":[],"mappings":"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"}
@@ -31,4 +31,44 @@ export declare function resolveHarnessPath(ref: HarnessPathRef): Promise<Resolve
31
31
  * project root, so traversal is impossible by construction.
32
32
  */
33
33
  export declare function resolveProjectClaudeMdPath(projectSlug: string): Promise<ResolvedHarnessPath>;
34
+ /**
35
+ * Story 30.7 (Task A.5): resolve the project-root `<projectRoot>/.gitignore`
36
+ * path. Like `resolveProjectClaudeMdPath`, `.gitignore` sits outside the
37
+ * `.claude/` subtree, so `resolveHarnessPath` cannot reach it. This helper
38
+ * accepts only `projectSlug` (no caller-supplied relative path), so traversal
39
+ * is impossible by construction. Used by
40
+ * `harnessShareScopeService.appendGitignorePattern()` to safely append
41
+ * patterns like `**\/.claude/**\/*.local.*` when the sibling-save flow detects
42
+ * the pattern is missing.
43
+ */
44
+ export declare function resolveProjectGitignorePath(projectSlug: string): Promise<ResolvedHarnessPath>;
45
+ /**
46
+ * Story 31.1 (Task A.1): resolve the project-root
47
+ * `<projectRoot>/.bmad-core/core-config.yaml` path. Like
48
+ * `resolveProjectClaudeMdPath` / `resolveProjectGitignorePath`, the
49
+ * `.bmad-core/` tree sits OUTSIDE the project's `.claude/` subtree, so
50
+ * `resolveHarnessPath` would reject it as a traversal. This helper accepts
51
+ * only `projectSlug` (no caller-supplied relative path), so traversal is
52
+ * impossible by construction. Used by `bmadCoreConfigService` to read/patch
53
+ * the single config file the BMad config form edits.
54
+ */
55
+ export declare function resolveBmadCoreConfigPath(projectSlug: string): Promise<ResolvedHarnessPath>;
56
+ /**
57
+ * Story 31.2 (Task A.1): resolve the context-builder manifest path
58
+ * `<projectRoot>/.hammoc/context-builder.json`. Like the `.bmad-core/`
59
+ * resolver, the `.hammoc/` tree sits OUTSIDE the project's `.claude/` subtree,
60
+ * so `resolveHarnessPath` would reject it as a traversal. Accepts only
61
+ * `projectSlug` (no caller-supplied relative path), so traversal is impossible
62
+ * by construction. Used by `contextBuilderService` as the single manifest R/W
63
+ * chokepoint (no other module touches this path via `fs`).
64
+ */
65
+ export declare function resolveContextBuilderManifestPath(projectSlug: string): Promise<ResolvedHarnessPath>;
66
+ /**
67
+ * Story 31.2 (Task A.1): resolve the generated script path
68
+ * `<projectRoot>/.hammoc/hooks/context-builder.mjs`. Same traversal-proof
69
+ * construction as `resolveContextBuilderManifestPath`. The generated `.mjs`
70
+ * runs standalone at every session start, assembling the `additionalContext`
71
+ * JSON the SessionStart hook emits.
72
+ */
73
+ export declare function resolveContextBuilderScriptPath(projectSlug: string): Promise<ResolvedHarnessPath>;
34
74
  //# sourceMappingURL=harnessPaths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harnessPaths.d.ts","sourceRoot":"","sources":["../../src/utils/harnessPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAWrE,6EAA6E;AAC7E,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,wFAAwF;AACxF,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBhF;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwC1F;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyBlG"}
1
+ {"version":3,"file":"harnessPaths.d.ts","sourceRoot":"","sources":["../../src/utils/harnessPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAWrE,6EAA6E;AAC7E,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,wFAAwF;AACxF,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBhF;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwC1F;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyBlG;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwBnG;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwBjG;AAED;;;;;;;;GAQG;AACH,wBAAsB,iCAAiC,CACrD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAI9B;AAED;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CACnD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAI9B"}
@@ -121,4 +121,127 @@ export async function resolveProjectClaudeMdPath(projectSlug) {
121
121
  const absolutePath = path.join(resolvedRoot, 'CLAUDE.md');
122
122
  return { resolvedRoot, absolutePath };
123
123
  }
124
+ /**
125
+ * Story 30.7 (Task A.5): resolve the project-root `<projectRoot>/.gitignore`
126
+ * path. Like `resolveProjectClaudeMdPath`, `.gitignore` sits outside the
127
+ * `.claude/` subtree, so `resolveHarnessPath` cannot reach it. This helper
128
+ * accepts only `projectSlug` (no caller-supplied relative path), so traversal
129
+ * is impossible by construction. Used by
130
+ * `harnessShareScopeService.appendGitignorePattern()` to safely append
131
+ * patterns like `**\/.claude/**\/*.local.*` when the sibling-save flow detects
132
+ * the pattern is missing.
133
+ */
134
+ export async function resolveProjectGitignorePath(projectSlug) {
135
+ if (!projectSlug || projectSlug.includes('\0')) {
136
+ const err = new Error('invalid projectSlug');
137
+ err.code = HARNESS_ERRORS.HARNESS_PATH_DENIED.code;
138
+ throw err;
139
+ }
140
+ if (projectSlug.includes('..') || projectSlug.includes('/') || projectSlug.includes('\\')) {
141
+ const err = new Error('projectSlug must not contain path separators');
142
+ err.code = HARNESS_ERRORS.HARNESS_PATH_DENIED.code;
143
+ throw err;
144
+ }
145
+ let projectRoot;
146
+ try {
147
+ projectRoot = await projectService.resolveOriginalPath(projectSlug);
148
+ }
149
+ catch (error) {
150
+ const wrapped = new Error(`Unable to resolve project root for "${projectSlug}": ${error.message}`);
151
+ wrapped.code = HARNESS_ERRORS.HARNESS_ROOT_MISSING.code;
152
+ throw wrapped;
153
+ }
154
+ const resolvedRoot = path.resolve(projectRoot);
155
+ const absolutePath = path.join(resolvedRoot, '.gitignore');
156
+ return { resolvedRoot, absolutePath };
157
+ }
158
+ /**
159
+ * Story 31.1 (Task A.1): resolve the project-root
160
+ * `<projectRoot>/.bmad-core/core-config.yaml` path. Like
161
+ * `resolveProjectClaudeMdPath` / `resolveProjectGitignorePath`, the
162
+ * `.bmad-core/` tree sits OUTSIDE the project's `.claude/` subtree, so
163
+ * `resolveHarnessPath` would reject it as a traversal. This helper accepts
164
+ * only `projectSlug` (no caller-supplied relative path), so traversal is
165
+ * impossible by construction. Used by `bmadCoreConfigService` to read/patch
166
+ * the single config file the BMad config form edits.
167
+ */
168
+ export async function resolveBmadCoreConfigPath(projectSlug) {
169
+ if (!projectSlug || projectSlug.includes('\0')) {
170
+ const err = new Error('invalid projectSlug');
171
+ err.code = HARNESS_ERRORS.HARNESS_PATH_DENIED.code;
172
+ throw err;
173
+ }
174
+ if (projectSlug.includes('..') || projectSlug.includes('/') || projectSlug.includes('\\')) {
175
+ const err = new Error('projectSlug must not contain path separators');
176
+ err.code = HARNESS_ERRORS.HARNESS_PATH_DENIED.code;
177
+ throw err;
178
+ }
179
+ let projectRoot;
180
+ try {
181
+ projectRoot = await projectService.resolveOriginalPath(projectSlug);
182
+ }
183
+ catch (error) {
184
+ const wrapped = new Error(`Unable to resolve project root for "${projectSlug}": ${error.message}`);
185
+ wrapped.code = HARNESS_ERRORS.HARNESS_ROOT_MISSING.code;
186
+ throw wrapped;
187
+ }
188
+ const resolvedRoot = path.resolve(projectRoot);
189
+ const absolutePath = path.join(resolvedRoot, '.bmad-core', 'core-config.yaml');
190
+ return { resolvedRoot, absolutePath };
191
+ }
192
+ /**
193
+ * Story 31.2 (Task A.1): resolve the context-builder manifest path
194
+ * `<projectRoot>/.hammoc/context-builder.json`. Like the `.bmad-core/`
195
+ * resolver, the `.hammoc/` tree sits OUTSIDE the project's `.claude/` subtree,
196
+ * so `resolveHarnessPath` would reject it as a traversal. Accepts only
197
+ * `projectSlug` (no caller-supplied relative path), so traversal is impossible
198
+ * by construction. Used by `contextBuilderService` as the single manifest R/W
199
+ * chokepoint (no other module touches this path via `fs`).
200
+ */
201
+ export async function resolveContextBuilderManifestPath(projectSlug) {
202
+ const { resolvedRoot } = await resolveHammocRootForProject(projectSlug);
203
+ const absolutePath = path.join(resolvedRoot, '.hammoc', 'context-builder.json');
204
+ return { resolvedRoot, absolutePath };
205
+ }
206
+ /**
207
+ * Story 31.2 (Task A.1): resolve the generated script path
208
+ * `<projectRoot>/.hammoc/hooks/context-builder.mjs`. Same traversal-proof
209
+ * construction as `resolveContextBuilderManifestPath`. The generated `.mjs`
210
+ * runs standalone at every session start, assembling the `additionalContext`
211
+ * JSON the SessionStart hook emits.
212
+ */
213
+ export async function resolveContextBuilderScriptPath(projectSlug) {
214
+ const { resolvedRoot } = await resolveHammocRootForProject(projectSlug);
215
+ const absolutePath = path.join(resolvedRoot, '.hammoc', 'hooks', 'context-builder.mjs');
216
+ return { resolvedRoot, absolutePath };
217
+ }
218
+ /**
219
+ * Shared resolver tail for the two `.hammoc/` helpers above — validates the
220
+ * slug (no null byte / path separators) and resolves the project root. Returns
221
+ * `resolvedRoot` = the project root (NOT `.hammoc/`), so each caller appends its
222
+ * own suffix; this keeps the traversal guard in one place.
223
+ */
224
+ async function resolveHammocRootForProject(projectSlug) {
225
+ if (!projectSlug || projectSlug.includes('\0')) {
226
+ const err = new Error('invalid projectSlug');
227
+ err.code = HARNESS_ERRORS.HARNESS_PATH_DENIED.code;
228
+ throw err;
229
+ }
230
+ if (projectSlug.includes('..') || projectSlug.includes('/') || projectSlug.includes('\\')) {
231
+ const err = new Error('projectSlug must not contain path separators');
232
+ err.code = HARNESS_ERRORS.HARNESS_PATH_DENIED.code;
233
+ throw err;
234
+ }
235
+ let projectRoot;
236
+ try {
237
+ projectRoot = await projectService.resolveOriginalPath(projectSlug);
238
+ }
239
+ catch (error) {
240
+ const wrapped = new Error(`Unable to resolve project root for "${projectSlug}": ${error.message}`);
241
+ wrapped.code = HARNESS_ERRORS.HARNESS_ROOT_MISSING.code;
242
+ throw wrapped;
243
+ }
244
+ const resolvedRoot = path.resolve(projectRoot);
245
+ return { resolvedRoot, absolutePath: resolvedRoot };
246
+ }
124
247
  //# sourceMappingURL=harnessPaths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"harnessPaths.js","sourceRoot":"","sources":["../../src/utils/harnessPaths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harnessPaths.js","sourceRoot":"","sources":["../../src/utils/harnessPaths.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,8 @@
15
15
  "test:all": "vitest run"
16
16
  },
17
17
  "dependencies": {
18
- "@anthropic-ai/claude-agent-sdk": "^0.2.114",
18
+ "@anthropic-ai/claude-agent-sdk": "^0.3.158",
19
+ "@anthropic-ai/sdk": "^0.100.1",
19
20
  "@hammoc/shared": "*",
20
21
  "bcrypt": "^6.0.0",
21
22
  "chokidar": "^5.0.0",
@@ -9,7 +9,9 @@ Read individual entries **on demand** when the user's request involves the under
9
9
  ## Entries
10
10
 
11
11
  - [Image Storage](./image-storage.md) — On-disk path and filename scheme for chat-attached images
12
- - [Harness File Layout](./harness-files.md) — Where `.claude/` items (skills, commands, agents, hooks, MCP servers, `CLAUDE.md`) live on disk, when changes take effect, and how the Secret-on-Shared guard relates to direct file writes
12
+ - [Harness File Layout](./harness-files.md) — Where `.claude/` items (skills, commands, agents, hooks, MCP servers, `CLAUDE.md`) live on disk, when changes take effect, the Context Builder's Hammoc-managed SessionStart files, plugin install-state paths, and how the Secret-on-Shared guard relates to direct file writes
13
+ - [Observability Storage](./observability-storage.md) — Where the MCP call log and exact-token-count cache live, their JSONL/JSON format, body-stripping, and 30-day retention
14
+ - [BMad QA-Fix Marker](./bmad-qa-fix-marker.md) — The `<!-- hammoc:qa-fix -->` story-file convention that drives QA re-review recommendations and the board's "QA Fixed" badge
13
15
 
14
16
  ## Maintenance
15
17
 
@@ -0,0 +1,32 @@
1
+ # BMad QA-Fix Marker
2
+
3
+ A Hammoc-specific convention layered on top of standard BMad story files. It lets the project-overview Next Step Recommender (manual §11.5) and the board's "QA Fixed" badge (§10.7) know whether a developer has already addressed the **current** QA gate — without guessing from file modification times (the old, unreliable approach: `review-story` rewrites the story after the gate, which made a freshly-reviewed story look "stale").
4
+
5
+ ## The marker
6
+
7
+ A single HTML comment inside the story markdown file:
8
+
9
+ ```
10
+ <!-- hammoc:qa-fix gate="<the gate's `updated` value>" applied="true|false" -->
11
+ ```
12
+
13
+ - It is an HTML comment, so standard BMad tooling ignores it and it never changes the story's Status or the gate file.
14
+ - `gate` is the QA gate's `updated:` value — it ties the marker to one specific gate. When QA later re-reviews, the gate's `updated` changes and any marker pointing at the old value becomes stale automatically.
15
+ - `applied="false"` → "QA flagged this gate; a fix is still needed." `applied="true"` → "Dev addressed this gate."
16
+
17
+ ## Who writes it
18
+
19
+ - **QA review** (Hammoc's bundled `qa-review` snippet) appends `applied="false"` in the story's **QA Results** section when it issues a CONCERNS or FAIL gate.
20
+ - **Apply QA fixes** (the bundled `apply-qa-fixes` snippet) appends `applied="true"` in the story's **Completion Notes** after the fixes are made — without touching Status or the gate file.
21
+
22
+ If you perform a QA review or apply QA fixes **manually** (not through these snippets), append the matching marker yourself so the recommender and badge stay accurate.
23
+
24
+ ## How it is read
25
+
26
+ The server (BMad status service) collects all markers in a story and matches them against the **current** gate's `updated` value to derive a per-story `gateFixState`:
27
+
28
+ - an `applied="true"` marker for the current gate → **`applied`** (Dev done; QA re-review is the next step)
29
+ - only an `applied="false"` marker for the current gate → **`needed`** (Dev must apply fixes)
30
+ - no marker for the current gate → **`undefined`** → the UI offers **both** actions (Apply QA fixes / Request QA review) and lets the user choose, because it can't tell whether fixes were applied (legacy story, external BMad project, or manually-edited gate)
31
+
32
+ An `applied` marker wins over a `needed` marker for the same gate. The board shows the sky-blue **QA Fixed** badge only when `gateFixState='applied'` for a FAIL/CONCERNS gate.
@@ -29,6 +29,28 @@ When the same name (skill, command, agent, hook, MCP server, snippet) exists in
29
29
 
30
30
  Hammoc-native `%snippets` are a separate layer (see manual §4.6); they live under `<projectRoot>/.hammoc/snippets/` and `<homeDir>/.hammoc/snippets/`, **not** the `.claude/` tree.
31
31
 
32
+ ## Context Builder generated files (Hammoc-managed)
33
+
34
+ The Context Builder (manual §12.17) writes two Hammoc-owned files plus one `settings.json` entry:
35
+
36
+ | File | Role |
37
+ |------|------|
38
+ | `<projectRoot>/.hammoc/context-builder.json` | Manifest — the single source of truth: `enabled` flag, reference-file list, dynamic-variable toggles, recent-commit count, custom-command list |
39
+ | `<projectRoot>/.hammoc/hooks/context-builder.mjs` | Generated Node.js SessionStart hook. Regenerated from the manifest on every change; reads the reference files fresh, recomputes the variables, runs acknowledged custom commands, and prints `{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":"…"}}` |
40
+ | `<projectRoot>/.claude/settings.json` → `hooks.SessionStart[]` | Auto-registered entry whose `command` is `node "<absPath>/.hammoc/hooks/context-builder.mjs"` (forward-slash normalized) |
41
+
42
+ Hammoc recognizes its own SessionStart entry by the `.hammoc/hooks/context-builder.` substring in the command — there is no metadata key. **Do not hand-edit that entry or the `.mjs` script directly**: the Context Builder panel owns them and regenerates the script (overwriting manual edits) on the next save. To change the injected context, edit `context-builder.json` (or use the panel). User-authored SessionStart entries that do not contain the marker substring are left untouched.
43
+
44
+ ## Plugin install state (read-only)
45
+
46
+ The Marketplace panel (manual §12.19) and the Plugins panel read Claude Code's own plugin bookkeeping under `<homeDir>/.claude/plugins/`:
47
+
48
+ - `known_marketplaces.json` — registered marketplace repos
49
+ - `marketplaces/<name>/.claude-plugin/marketplace.json` — each marketplace's catalog manifest (`plugins[]`)
50
+ - `installed_plugins.json` — which plugins are installed (used to mark catalog cards "Installed")
51
+
52
+ Hammoc only **reads** these; installs/uninstalls happen through the interactive `/plugin …` slash commands in a Claude CLI session, after which a file watcher refreshes the cards.
53
+
32
54
  ## Sharing scope
33
55
 
34
56
  Each file's "share" status is computed from the project's `.gitignore`:
@@ -0,0 +1,23 @@
1
+ # Observability Storage
2
+
3
+ Hammoc's Observability panel (user-facing, manual §12.18) persists two kinds of data under the user's home `.hammoc` directory. These are **not** under `.claude/` and are reached with direct file reads, not through the harness file service.
4
+
5
+ `<homeDir>` must be resolved before use — Read does not expand `~`. On Windows that is `C:\Users\<user>\`.
6
+
7
+ ## MCP / tool call log
8
+
9
+ - **Path:** `<homeDir>/.hammoc/observability/<projectSlug>.jsonl`
10
+ - **Format:** JSON Lines — one tool-call record per line. Each record holds: tool-use id, project slug, session id, server name (parsed from the `mcp__<server>__<tool>` prefix; `null` for built-in tools like Read/Edit/Bash), tool name, start timestamp (epoch ms), duration in ms (`null` if the call never returned), argument byte size, result byte size (`null` if no response), and a success flag (`null` if no response).
11
+ - **Bodies are never written** — only sizes. The log therefore cannot leak file contents or secrets.
12
+ - **Retention:** records older than 30 days (override with the `OBSERVABILITY_RETENTION_DAYS` env var) are pruned on append (throttled to ~30 min) and at server startup.
13
+ - **Written by:** the chat service hooks the existing SDK message stream and appends one record per tool result. "Orphan" calls (started, never returned) are flushed once at turn end with `null` duration / result / success.
14
+
15
+ ## Exact token-count cache
16
+
17
+ - **Path:** `<homeDir>/.hammoc/observability/token-count-cache.json`
18
+ - **Format:** a JSON object mapping a SHA-256 hash of the input text → official token count.
19
+ - The **Exact count** button calls Anthropic's count-tokens API; the result is cached here keyed by content hash, so re-counting an unchanged file is free and the cache is shared across projects (identical files hash the same).
20
+
21
+ ## Tokenizer preference
22
+
23
+ - The inline `~` hint is always a byte-size heuristic (size ÷ 4); a tokenizer-grade tier was evaluated but not adopted (it drifted 25–45% from the official count on Claude 4.x). The preference lives in `<homeDir>/.hammoc/preferences.json` under `observabilityTokenizer` and is global (all projects), though its toggle UI sits inside the Observability panel.
@@ -175,13 +175,13 @@ Control how much Claude "thinks" before responding. The intensity bar appears in
175
175
 
176
176
  - **Low / Medium / High** — 3 levels, available for all models
177
177
  - **Max** — 4th level, added for Opus 4.6 / Sonnet 4.6
178
- - **XHigh** — 5th level, added only for **Opus 4.7** (the default effort for this model is XHigh)
178
+ - **XHigh** — 5th level, added for **Opus 4.7+** (the default effort for these models is XHigh)
179
179
 
180
180
  Behavior:
181
181
 
182
182
  - Click the currently active level again to reset to default
183
183
  - Cannot be changed while Claude is responding
184
- - If you switch to a model that doesn't support the current level (e.g., XHigh → non-Opus-4.7, or Max → model without Max), the effort automatically resets to the highest supported level
184
+ - If you switch to a model that doesn't support the current level (e.g., XHigh → model without XHigh, or Max → model without Max), the effort automatically resets to the highest supported level
185
185
  - When the active model is temporarily unknown (e.g., right after switching projects before the resolved model arrives), the dropdown keeps your saved choice instead of resetting it. As soon as the model is known, the effort is reclamped if necessary
186
186
 
187
187
  The default thinking effort for new sessions can be configured in Settings > Global.
@@ -21,6 +21,8 @@ Each card has a **kebab menu** (⋮) with:
21
21
 
22
22
  **Dashboard summary bar** appears at the top when projects exist, showing aggregate stats: Projects, Sessions, Active, Queue, Terminals.
23
23
 
24
+ **Header brand logo (Hammoc)** — The Hammoc logo on the left of every header is clickable and always returns you to the project list from any page (project Overview, Board, Sessions, Queue, Files, Git, Terminal, project Settings, chat session). Use it as a one-tap "Home" without going through the back button.
25
+
24
26
  ### 5.2 Creating a New Project
25
27
 
26
28
  1. Click **"New Project"** on the project list page
@@ -36,7 +38,7 @@ Per-project settings live in their own tab inside each project (Overview / Queue
36
38
 
37
39
  The Settings tab has a two-pane layout:
38
40
 
39
- - **Left nav** — Two top-level groups: **General** and **Harness Workbench** (see §12)
41
+ - **Left nav** — Top-level groups: **General**, **Harness Workbench** (see §12), **Context Builder** (§12.17), **Observability** (§12.18), and **Marketplace** (§12.19). BMad projects also get a **BMad Settings** group (§12.16)
40
42
  - **Right panel** — Form contents for the selected group
41
43
 
42
44
  **General group** (per-project override fields):