@openchambery/web 2.0.0-beta.9 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/README.md +14 -0
  2. package/dist/assets/{AgentAvatar-CzTtVMnI.js → AgentAvatar-DGyF86jy.js} +1 -1
  3. package/dist/assets/AssistantView-ByGdaGiF.js +3 -0
  4. package/dist/assets/{DiagramView-oeXj4YHn.js → DiagramView-PB0pBILb.js} +1 -1
  5. package/dist/assets/{FadeInOnReveal-DCqrQkkz.js → FadeInOnReveal-B_a083XJ.js} +1 -1
  6. package/dist/assets/Icon-BE2hkaYc.js +1 -0
  7. package/dist/assets/MarkdownRenderer-H1MIHXzt.js +2 -0
  8. package/dist/assets/{MarkdownRendererImpl-CahUctxC.js → MarkdownRendererImpl-CZ8GeckU.js} +3 -3
  9. package/dist/assets/{MarkstreamRendererImpl-5JUaTSdl.js → MarkstreamRendererImpl-BKE6YZ2N.js} +1 -1
  10. package/dist/assets/MobileDetailNavigation-D9KkIrWy.js +1 -0
  11. package/dist/assets/{MobileShareBridge-yCN95dYg.js → MobileShareBridge-1yCjq-60.js} +3 -3
  12. package/dist/assets/MobileSurface-Dqn3OPVX.js +2 -0
  13. package/dist/assets/{MultiRunWindow-C0HqMFpp.js → MultiRunWindow-YCFM6or1.js} +1 -1
  14. package/dist/assets/{OnboardingScreen-O4cGdz5p.js → OnboardingScreen-CTmsNR65.js} +1 -1
  15. package/dist/assets/{OverlayScrollbar-CRfGtcmG.js → OverlayScrollbar-CVgW_Z9B.js} +1 -1
  16. package/dist/assets/SettingsView-CbiuXtYG.js +25 -0
  17. package/dist/assets/{SettingsWindow-B_d5Aqq3.js → SettingsWindow-jOZ7L6K8.js} +1 -1
  18. package/dist/assets/{TerminalView-DdNQQb8W.js → TerminalView-CI-KsDdH.js} +1 -1
  19. package/dist/assets/{ToolOutputDialog-4DC5OE1J.js → ToolOutputDialog-izZjgkkg.js} +1 -1
  20. package/dist/assets/appThemeRegistry-MiWlVk4e.js +1 -0
  21. package/dist/assets/{assistant-attachment-cache-DphJleHr.js → assistant-attachment-cache-sG8YQsVs.js} +1 -1
  22. package/dist/assets/{button-DIIrsMjW.js → button-CcOoDLE1.js} +1 -1
  23. package/dist/assets/{collapsible-CnvUeYst.js → collapsible-CSa0Ndgm.js} +1 -1
  24. package/dist/assets/{context-menu-BGBUpZEQ.js → context-menu-DoTwmMb5.js} +1 -1
  25. package/dist/assets/{desktopHosts-JGFqhlaM.js → desktopHosts-BsbquPqS.js} +1 -1
  26. package/dist/assets/desktopRelayRestore-yyvjztgj.js +1 -0
  27. package/dist/assets/{diagram-rvn7_qBM.js → diagram-CZKDkADZ.js} +1 -1
  28. package/dist/assets/dialog-Csvrld51.js +1 -0
  29. package/dist/assets/dropdown-menu.styles-ayLWk2gf.js +1 -0
  30. package/dist/assets/{es-Dsmc0A_3.js → es-BBbon7SL.js} +4 -4
  31. package/dist/assets/fileMentionTouchSelection-Bn0f83D3.js +2 -0
  32. package/dist/assets/{fileQueries-DN6gbLhM.js → fileQueries-B0hhXD86.js} +1 -1
  33. package/dist/assets/{fr-C_ZlZDI2.js → fr-BsKj2CTi.js} +4 -4
  34. package/dist/assets/{gitApi-da8etTTe.js → gitApi-DpwH7xTg.js} +4 -4
  35. package/dist/assets/{imageSource-BMztRu0c.js → imageSource-BpUsiwFd.js} +1 -1
  36. package/dist/assets/{input-BVu-iykl.js → input-C6Y7mytw.js} +1 -1
  37. package/dist/assets/insertionBoundaries-Cst5Z6Cd.js +1 -0
  38. package/dist/assets/{ja-BqqTaWTi.js → ja-1mgxunoM.js} +4 -4
  39. package/dist/assets/{ko-DP2XPM37.js → ko-Ra9znPcL.js} +4 -4
  40. package/dist/assets/{main-KwlAomA8.js → main-CEs8ipuu.js} +2 -2
  41. package/dist/assets/main-Dkzuy7EG.js +169 -0
  42. package/dist/assets/main-qSeeJRW1.css +1 -0
  43. package/dist/assets/{markdownHeightCache-D9-B1wdY.js → markdownHeightCache-DhLhFBWX.js} +1 -1
  44. package/dist/assets/{mcpQueries-3GTWeMU-.js → mcpQueries-BBpCJgvK.js} +1 -1
  45. package/dist/assets/miniChat-CR7k42bZ.js +2 -0
  46. package/dist/assets/mobile-rvypjUpd.js +2 -0
  47. package/dist/assets/multirun-DqmJk0mh.js +3 -0
  48. package/dist/assets/persistence-CwHY3fDg.js +3 -0
  49. package/dist/assets/pl-B714sdql.js +15 -0
  50. package/dist/assets/platform-Bxaalnc8.js +6 -0
  51. package/dist/assets/projectMeta-BhKfv5cj.js +1 -0
  52. package/dist/assets/{pt-BR-W09Q2pvn.js → pt-BR-DVoT_I7_.js} +4 -4
  53. package/dist/assets/{relay-image-stream-DrdVj99c.js → relay-image-stream-D2XooXKZ.js} +1 -1
  54. package/dist/assets/renderElectronMiniChatApp-BLay6f9j.js +2 -0
  55. package/dist/assets/renderMobileApp-BrikirqO.js +28 -0
  56. package/dist/assets/{runtime-fetch-Fs9ZV2V8.js → runtime-fetch-CiqQd__Y.js} +1 -1
  57. package/dist/assets/runtime-switch-BJM2k_uH.js +1 -0
  58. package/dist/assets/runtimeConfig-DjKsteH0.js +2 -0
  59. package/dist/assets/runtimeEndpointReset-D_vfNOQz.css +1 -0
  60. package/dist/assets/runtimeEndpointReset-DbfaE3dL.js +148 -0
  61. package/dist/assets/sessionChangeSummary-Cgq9RPUq.js +2 -0
  62. package/dist/assets/{sessionLookup-0Z4e-J1g.js → sessionLookup-BiE36BTy.js} +1 -1
  63. package/dist/assets/{sortable-tabs-strip-CE7W7lJ9.js → sortable-tabs-strip-CKKp4p3Y.js} +1 -1
  64. package/dist/assets/src-BZ0tISrf.css +2 -0
  65. package/dist/assets/{store-jaP79mqI.js → store-l_X_jQNz.js} +4 -4
  66. package/dist/assets/{terminalApi-mDR2jXTo.js → terminalApi-DSJOXNRQ.js} +1 -1
  67. package/dist/assets/{textarea-XD2oX_Ee.js → textarea-DUjc3iDJ.js} +1 -1
  68. package/dist/assets/{tooltip-DYeQ_Hvy.js → tooltip-CBHR50fA.js} +1 -1
  69. package/dist/assets/{uk-BgFzz8m2.js → uk-ChNnTgKP.js} +4 -4
  70. package/dist/assets/{url-CGbJbiJq.js → url-CEnO45_n.js} +1 -1
  71. package/dist/assets/{useAppFontEffects-y_GTVXhJ.js → useAppFontEffects-CWzjhjXr.js} +55 -55
  72. package/dist/assets/{useAssistantUIStore-Bz4tRflF.js → useAssistantUIStore-CXj8c_tt.js} +1 -1
  73. package/dist/assets/useDesktopWindowControlsLayout-Dtqco-Um.js +1 -0
  74. package/dist/assets/{useEffectiveDirectory-BW9jNyuK.js → useEffectiveDirectory-DNbDaaNV.js} +1 -1
  75. package/dist/assets/{useFontPreferences-Bjx8zkGM.js → useFontPreferences-DGbTdGy3.js} +1 -1
  76. package/dist/assets/useMobileNavigationStore-DYKC2swj.js +415 -0
  77. package/dist/assets/useSessionAutoCleanup-BI0xQcio.js +2 -0
  78. package/dist/assets/{useUIStore-syVmbuDA.js → useUIStore-DNkuudYO.js} +1 -1
  79. package/dist/assets/{useWorkerHighlightedLines-BUcSLKlL.js → useWorkerHighlightedLines-BoyYALWC.js} +1 -1
  80. package/dist/assets/vendor-opencode-client-MF2GBrFx.js +12 -0
  81. package/dist/assets/{vendor-zustand-B4dlGEM2.js → vendor-zustand-DzRqcymP.js} +1 -1
  82. package/dist/assets/{zh-CN-BhqSLgUY.js → zh-CN-DHEFf4u1.js} +4 -4
  83. package/dist/assets/{zh-TW-BsaBgY-p.js → zh-TW-rdSa8atW.js} +4 -4
  84. package/dist/index.html +13 -13
  85. package/dist/mini-chat.html +13 -13
  86. package/dist/mobile.html +13 -13
  87. package/package.json +3 -3
  88. package/server/index.js +8 -20
  89. package/server/lib/client-auth/remote-clients.js +15 -0
  90. package/server/lib/client-auth/remote-clients.test.js +42 -1
  91. package/server/lib/git/DOCUMENTATION.md +1 -0
  92. package/server/lib/git/routes.js +7 -4
  93. package/server/lib/git/routes.test.js +34 -0
  94. package/server/lib/git/service.js +3 -1
  95. package/server/lib/llm/DOCUMENTATION.md +6 -4
  96. package/server/lib/llm/generate.js +8 -9
  97. package/server/lib/llm/generate.test.js +33 -6
  98. package/server/lib/message-queue/service.js +1 -1
  99. package/server/lib/opencode/DOCUMENTATION.md +33 -22
  100. package/server/lib/opencode/agents.js +13 -22
  101. package/server/lib/opencode/auth-state-runtime.js +3 -3
  102. package/server/lib/opencode/auth-state-runtime.test.js +59 -0
  103. package/server/lib/opencode/auth.d.ts +13 -0
  104. package/server/lib/opencode/auth.js +74 -64
  105. package/server/lib/opencode/auth.test.js +57 -0
  106. package/server/lib/opencode/commands.js +1 -1
  107. package/server/lib/opencode/config-entities-layering.test.js +72 -0
  108. package/server/lib/opencode/config-entity-routes.js +10 -123
  109. package/server/lib/opencode/config-entity-routes.test.js +23 -11
  110. package/server/lib/opencode/config-files.d.ts +17 -0
  111. package/server/lib/opencode/config-files.js +187 -0
  112. package/server/lib/opencode/config-files.test.js +201 -0
  113. package/server/lib/opencode/core-routes.js +17 -1
  114. package/server/lib/opencode/core-routes.test.js +43 -15
  115. package/server/lib/opencode/credential-boundary.d.ts +1 -0
  116. package/server/lib/opencode/credential-boundary.js +11 -0
  117. package/server/lib/opencode/ensure-cli.js +4 -1
  118. package/server/lib/opencode/env-config.js +4 -1
  119. package/server/lib/opencode/env-config.test.js +28 -0
  120. package/server/lib/opencode/env-runtime.test.js +18 -1
  121. package/server/lib/opencode/feature-routes-runtime.js +9 -7
  122. package/server/lib/opencode/hmr-state-runtime.js +4 -4
  123. package/server/lib/opencode/lifecycle.js +1 -49
  124. package/server/lib/opencode/lifecycle.test.js +30 -4
  125. package/server/lib/opencode/location-release.d.ts +8 -0
  126. package/server/lib/opencode/location-release.js +32 -0
  127. package/server/lib/opencode/location-release.test.js +43 -0
  128. package/server/lib/opencode/mcp.js +1 -1
  129. package/server/lib/opencode/opencode2-pin.js +2 -1
  130. package/server/lib/opencode/owned-runtime-upgrade.test.js +5 -5
  131. package/server/lib/opencode/plugin-routes.test.js +4 -2
  132. package/server/lib/opencode/plugins.js +12 -60
  133. package/server/lib/opencode/plugins.test.js +5 -3
  134. package/server/lib/opencode/providers.js +6 -3
  135. package/server/lib/opencode/proxy.js +7 -0
  136. package/server/lib/opencode/proxy.test.js +13 -0
  137. package/server/lib/opencode/remote-upgrade.integration.test.js +66 -0
  138. package/server/lib/opencode/routes.js +10 -8
  139. package/server/lib/opencode/routes.test.js +51 -10
  140. package/server/lib/opencode/runtime-contract.js +3 -2
  141. package/server/lib/opencode/runtime-contract.test.js +12 -12
  142. package/server/lib/opencode/settings-normalization-runtime.js +3 -1
  143. package/server/lib/opencode/settings-normalization-runtime.test.js +36 -0
  144. package/server/lib/opencode/settings-runtime.test.js +58 -1
  145. package/server/lib/opencode/shared.js +6 -175
  146. package/server/lib/opencode/update-discovery.js +39 -0
  147. package/server/lib/opencode/update-discovery.test.js +39 -0
  148. package/server/lib/opencode/upgrade-screen.js +4 -11
  149. package/server/lib/opencode/upgrade-screen.test.js +25 -25
  150. package/server/lib/opencode/version-alignment.test.js +40 -0
  151. package/server/lib/question-auto-delegate/DOCUMENTATION.md +21 -6
  152. package/server/lib/question-auto-delegate/core.d.ts +5 -1
  153. package/server/lib/question-auto-delegate/core.js +21 -13
  154. package/server/lib/question-auto-delegate/form-io.d.ts +6 -0
  155. package/server/lib/question-auto-delegate/form-io.js +39 -0
  156. package/server/lib/question-auto-delegate/runtime.js +4 -24
  157. package/server/lib/question-auto-delegate/runtime.test.js +138 -0
  158. package/server/lib/quota/DOCUMENTATION.md +9 -0
  159. package/server/lib/quota/provider-credentials.test.js +29 -0
  160. package/server/lib/quota/providers/claude.js +4 -4
  161. package/server/lib/quota/providers/codex.js +4 -4
  162. package/server/lib/quota/providers/codex.test.js +1 -1
  163. package/server/lib/quota/providers/copilot.js +5 -5
  164. package/server/lib/quota/providers/google/auth.js +3 -3
  165. package/server/lib/quota/providers/google/index.js +2 -2
  166. package/server/lib/quota/providers/index.js +3 -7
  167. package/server/lib/quota/providers/index.test.js +2 -2
  168. package/server/lib/quota/providers/kimi.js +4 -4
  169. package/server/lib/quota/providers/minimax-shared.js +4 -4
  170. package/server/lib/quota/providers/nanogpt.js +4 -4
  171. package/server/lib/quota/providers/openai.js +4 -4
  172. package/server/lib/quota/providers/openrouter.js +4 -4
  173. package/server/lib/quota/providers/wafer.js +4 -4
  174. package/server/lib/quota/providers/zai.js +4 -4
  175. package/server/lib/quota/providers/zhipuai-coding-plan.js +6 -20
  176. package/server/lib/quota/routes.js +1 -1
  177. package/server/lib/relay/DOCUMENTATION.md +3 -1
  178. package/server/lib/relay/service.js +1 -0
  179. package/server/lib/relay/service.test.js +13 -0
  180. package/server/lib/scheduled-tasks/DOCUMENTATION.md +8 -1
  181. package/server/lib/scheduled-tasks/runtime.js +12 -4
  182. package/server/lib/scheduled-tasks/runtime.test.js +81 -6
  183. package/server/lib/session-goal/DOCUMENTATION.md +11 -0
  184. package/server/lib/session-goal/runtime.js +4 -4
  185. package/server/lib/session-goal/runtime.test.js +32 -3
  186. package/server/lib/session-index/DOCUMENTATION.md +7 -0
  187. package/server/lib/session-index/event-ingest.js +13 -0
  188. package/server/lib/session-index/event-ingest.test.js +7 -0
  189. package/server/lib/session-index/service.js +45 -0
  190. package/server/lib/session-index/service.test.js +47 -0
  191. package/server/lib/session-metadata/DOCUMENTATION.md +6 -0
  192. package/server/lib/session-metadata/session-metadata-store.test.js +23 -0
  193. package/server/lib/session-metadata/session-projection.d.ts +1 -0
  194. package/server/lib/session-metadata/session-projection.js +23 -0
  195. package/server/lib/session-metadata/session-projection.test.js +35 -0
  196. package/server/lib/session-title/DOCUMENTATION.md +52 -14
  197. package/server/lib/session-title/native-runtime.test.js +59 -5
  198. package/server/lib/session-title/runtime.js +63 -17
  199. package/server/lib/session-title/session-access.js +108 -3
  200. package/server/lib/session-title/session-access.test.js +125 -7
  201. package/server/lib/tts/DOCUMENTATION.md +7 -5
  202. package/server/lib/tts/credential-source.test.js +23 -0
  203. package/server/lib/tts/routes.js +2 -2
  204. package/server/lib/tts/service.js +16 -37
  205. package/dist/assets/AssistantView-CLFPj5Ki.js +0 -3
  206. package/dist/assets/Icon-B8fSTLdP.js +0 -1
  207. package/dist/assets/MarkdownRenderer-BK69MEHQ.js +0 -2
  208. package/dist/assets/MobileDetailNavigation-agQ-Yhpd.js +0 -1
  209. package/dist/assets/MobileSurface-D0HP_lTS.js +0 -2
  210. package/dist/assets/SettingsView-xLYb22wV.js +0 -25
  211. package/dist/assets/appThemeRegistry-LkVH62uF.js +0 -1
  212. package/dist/assets/desktopRelayRestore-CHEwrI93.js +0 -1
  213. package/dist/assets/dialog-CQ63sc9E.js +0 -1
  214. package/dist/assets/dropdown-menu.styles-Bzo6L3FH.js +0 -1
  215. package/dist/assets/fileMentionTouchSelection-CBzDuQxP.js +0 -3
  216. package/dist/assets/insertionBoundaries-DQrE5qG2.js +0 -1
  217. package/dist/assets/main-D2BzpnUt.css +0 -1
  218. package/dist/assets/main-DYISNvWY.js +0 -169
  219. package/dist/assets/miniChat-DYIqdWi7.js +0 -2
  220. package/dist/assets/mobile-CwiCcmWt.js +0 -2
  221. package/dist/assets/multirun-C3snjTFs.js +0 -4
  222. package/dist/assets/persistence-D0y7226-.js +0 -3
  223. package/dist/assets/pl-BCf5uLlK.js +0 -15
  224. package/dist/assets/platform-CurqO28D.js +0 -6
  225. package/dist/assets/projectMeta-BkhYFMaM.js +0 -3
  226. package/dist/assets/renderElectronMiniChatApp-7iyh_419.js +0 -2
  227. package/dist/assets/renderMobileApp-y0_NeckR.js +0 -28
  228. package/dist/assets/runtime-switch-LvWDU-SL.js +0 -1
  229. package/dist/assets/runtimeConfig-12C5j02f.js +0 -2
  230. package/dist/assets/runtimeEndpointReset-DTY2ZXXb.js +0 -149
  231. package/dist/assets/sessionChangeSummary-CwPBIb3Z.js +0 -2
  232. package/dist/assets/src-lS1keDVV.css +0 -2
  233. package/dist/assets/useDesktopWindowControlsLayout-CR_DcY77.js +0 -1
  234. package/dist/assets/useMobileNavigationStore-DwupvLSA.js +0 -414
  235. package/dist/assets/useSessionAutoCleanup-DkGO_usj.js +0 -2
  236. package/dist/assets/vendor-opencode-client-C12gfjag.js +0 -12
  237. package/server/lib/opencode/snippets.js +0 -242
  238. package/server/lib/opencode/snippets.test.js +0 -97
@@ -1,97 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
2
- import fs from 'fs';
3
- import os from 'os';
4
- import path from 'path';
5
- import {
6
- createSnippet,
7
- deleteSnippet,
8
- expandSnippets,
9
- getSnippet,
10
- listSnippets,
11
- updateSnippet,
12
- } from './snippets.js';
13
-
14
- let projectDir;
15
-
16
- function writeSnippet(relativePath, content) {
17
- const filePath = path.join(projectDir, relativePath);
18
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
19
- fs.writeFileSync(filePath, content, 'utf8');
20
- }
21
-
22
- describe('snippets', () => {
23
- beforeEach(() => {
24
- projectDir = fs.mkdtempSync(path.join(os.tmpdir(), 'openchamber-snippets-'));
25
- });
26
-
27
- afterEach(() => {
28
- fs.rmSync(projectDir, { recursive: true, force: true });
29
- });
30
-
31
- test('loads project snippets with aliases and description', () => {
32
- writeSnippet('.opencode/snippet/review.md', '---\naliases: [rev]\ndescription: Review helper\n---\nReview carefully.');
33
-
34
- expect(listSnippets(projectDir)).toContainEqual(
35
- expect.objectContaining({ name: 'review', aliases: ['rev'], description: 'Review helper', source: 'project' }),
36
- );
37
- expect(getSnippet('rev', projectDir)).toEqual(expect.objectContaining({ name: 'review' }));
38
- });
39
-
40
- test('snippet directory wins over snippets directory', () => {
41
- writeSnippet('.opencode/snippets/same.md', 'Old');
42
- writeSnippet('.opencode/snippet/same.md', 'New');
43
-
44
- expect(getSnippet('same', projectDir)?.content).toBe('New');
45
- });
46
-
47
- test('canonical snippet names take precedence over colliding aliases', () => {
48
- writeSnippet('.opencode/snippets/review.md', 'Review by name');
49
- writeSnippet('.opencode/snippet/helper.md', '---\naliases: [review, help]\n---\nReview by alias');
50
-
51
- expect(getSnippet('review', projectDir)).toEqual(expect.objectContaining({ name: 'review', content: 'Review by name' }));
52
- expect(getSnippet('help', projectDir)).toEqual(expect.objectContaining({ name: 'helper', content: 'Review by alias' }));
53
- expect(expandSnippets('Use #review and #help', projectDir)).toBe('Use Review by name and Review by alias');
54
- });
55
-
56
- test('canonical snippet names override earlier same-directory aliases', () => {
57
- writeSnippet('.opencode/snippet/alias-first.md', '---\naliases: [review, assist]\n---\nReview by alias');
58
- writeSnippet('.opencode/snippet/review.md', 'Review by name');
59
-
60
- const snippetDir = path.join(projectDir, '.opencode', 'snippet');
61
- const originalReaddirSync = fs.readdirSync;
62
- fs.readdirSync = function readdirSync(dir, ...args) {
63
- if (dir === snippetDir) return ['alias-first.md', 'review.md'];
64
- return originalReaddirSync.call(fs, dir, ...args);
65
- };
66
-
67
- try {
68
- expect(getSnippet('review', projectDir)).toEqual(expect.objectContaining({ name: 'review', content: 'Review by name' }));
69
- expect(getSnippet('assist', projectDir)).toEqual(expect.objectContaining({ name: 'alias-first', content: 'Review by alias' }));
70
- expect(expandSnippets('Use #review and #assist', projectDir)).toBe('Use Review by name and Review by alias');
71
- } finally {
72
- fs.readdirSync = originalReaddirSync;
73
- }
74
- });
75
-
76
- test('creates updates and deletes snippets', () => {
77
- expect(createSnippet('custom-one', { content: 'Body', aliases: ['co'] }, projectDir, 'project')).toEqual(
78
- expect.objectContaining({ name: 'custom-one', content: 'Body', aliases: ['co'] }),
79
- );
80
- expect(updateSnippet('custom-one', { content: 'Updated' }, projectDir)).toEqual(
81
- expect.objectContaining({ name: 'custom-one', content: 'Updated', aliases: ['co'] }),
82
- );
83
- deleteSnippet('custom-one', projectDir);
84
- expect(getSnippet('custom-one', projectDir)).toBeNull();
85
- });
86
-
87
- test('expands snippets recursively with prepend and append blocks', () => {
88
- writeSnippet('.opencode/snippet/base.md', 'Base text');
89
- writeSnippet('.opencode/snippet/review.md', '<prepend>Before</prepend>Review #base<append>After</append>');
90
-
91
- expect(expandSnippets('Please #review', projectDir)).toBe('Before\n\nPlease Review Base text\n\nAfter');
92
- });
93
-
94
- test('rejects invalid snippet names', () => {
95
- expect(() => createSnippet('../bad', { content: '' }, projectDir, 'project')).toThrow('Snippet name');
96
- });
97
- });