@openchambery/web 2.0.0-beta.26 → 2.0.0-beta.29

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 (194) hide show
  1. package/README.md +14 -0
  2. package/dist/assets/{AgentAvatar-FyTdEOMr.js → AgentAvatar-O2x_1cFU.js} +1 -1
  3. package/dist/assets/{AssistantView-DvOO2Kf5.js → AssistantView-Bphg-QIn.js} +3 -3
  4. package/dist/assets/{DiagramView-BqjeSOIg.js → DiagramView-CRD_GFch.js} +1 -1
  5. package/dist/assets/{FadeInOnReveal-DHDffzHs.js → FadeInOnReveal-CMBd5BTd.js} +1 -1
  6. package/dist/assets/{Icon-D7NdMmbi.js → Icon-BN87CyS4.js} +1 -1
  7. package/dist/assets/{MarkdownRenderer-kpkRqS42.js → MarkdownRenderer-D5KEGdBn.js} +2 -2
  8. package/dist/assets/{MarkdownRendererImpl-CzBos-Gt.js → MarkdownRendererImpl-C143YQsV.js} +2 -2
  9. package/dist/assets/{MarkstreamRendererImpl-RY_rAgKD.js → MarkstreamRendererImpl-C4rgOuOP.js} +1 -1
  10. package/dist/assets/{MobileDetailNavigation-DgtRh0zu.js → MobileDetailNavigation-D5tcF2Kg.js} +1 -1
  11. package/dist/assets/{MobileShareBridge-BM3cN-gG.js → MobileShareBridge-Bm0JZKHc.js} +3 -3
  12. package/dist/assets/MobileSurface-BzzBCVkG.js +2 -0
  13. package/dist/assets/{MultiRunWindow-Bq4gz78C.js → MultiRunWindow-B6Sb3aEG.js} +1 -1
  14. package/dist/assets/{OnboardingScreen-DMbPMwlp.js → OnboardingScreen-BLjZIBOs.js} +1 -1
  15. package/dist/assets/{OverlayScrollbar-mI9WVa7E.js → OverlayScrollbar-BOqRklf0.js} +1 -1
  16. package/dist/assets/SettingsView-Ds6x2z0F.js +25 -0
  17. package/dist/assets/{SettingsWindow-CHPjbEnI.js → SettingsWindow-D6CN5ahJ.js} +1 -1
  18. package/dist/assets/{TerminalView-DCJuL2nP.js → TerminalView-DkzaJJfh.js} +1 -1
  19. package/dist/assets/{ToolOutputDialog-Cg_Q1t3X.js → ToolOutputDialog-BegFpg1h.js} +1 -1
  20. package/dist/assets/{appThemeRegistry-BxuflaQt.js → appThemeRegistry-BMzuqD8_.js} +1 -1
  21. package/dist/assets/{button-e8fYWIMM.js → button-Ck8ipzBm.js} +1 -1
  22. package/dist/assets/{collapsible-B6wLXHi3.js → collapsible-nU99prkD.js} +1 -1
  23. package/dist/assets/{context-menu-Bq7W1d7y.js → context-menu-DMzZN1oi.js} +1 -1
  24. package/dist/assets/{desktopHosts-C8vf9vRY.js → desktopHosts-DuftEj8B.js} +1 -1
  25. package/dist/assets/{desktopRelayRestore-DDJtljeu.js → desktopRelayRestore-g378BdZf.js} +1 -1
  26. package/dist/assets/{diagram-BBL-LfsC.js → diagram-CvO4P8ds.js} +1 -1
  27. package/dist/assets/{dialog-MRsJpHzu.js → dialog-ByGUkS3c.js} +1 -1
  28. package/dist/assets/{es-DvPwAj0y.js → es-DCjl24dV.js} +3 -3
  29. package/dist/assets/fileMentionTouchSelection-Cuk9C_jN.js +2 -0
  30. package/dist/assets/{fileQueries-CBu-ytXS.js → fileQueries-DuF89nFO.js} +1 -1
  31. package/dist/assets/{fr-XQsoaNKY.js → fr-DfJ5j0t5.js} +3 -3
  32. package/dist/assets/{gitApi-CuIUGt04.js → gitApi-BlWYyRdx.js} +3 -3
  33. package/dist/assets/{input-DbOe1mdT.js → input-CXhFmHcq.js} +1 -1
  34. package/dist/assets/insertionBoundaries-lAwXo-R-.js +1 -0
  35. package/dist/assets/{ja-DslzO96s.js → ja-B_9_w2Xf.js} +3 -3
  36. package/dist/assets/{ko-C_9XOAL0.js → ko-DlGbo3kV.js} +3 -3
  37. package/dist/assets/{main-Sd4Auh_x.js → main-BmiKRvkB.js} +2 -2
  38. package/dist/assets/main-D5SdJE5d.js +169 -0
  39. package/dist/assets/main-qSeeJRW1.css +1 -0
  40. package/dist/assets/{markdownHeightCache-B5VSLl79.js → markdownHeightCache-g_UsWzbA.js} +1 -1
  41. package/dist/assets/{mcpQueries-BYNrkehM.js → mcpQueries-0Oe-8vHC.js} +1 -1
  42. package/dist/assets/{miniChat-Hp9bNmS0.js → miniChat-CSwFHa9K.js} +2 -2
  43. package/dist/assets/mobile-DzJO7usb.js +2 -0
  44. package/dist/assets/multirun-Bdd0yE3M.js +3 -0
  45. package/dist/assets/persistence-Dnj1QOdX.js +3 -0
  46. package/dist/assets/{pl-Dst9Wk53.js → pl-DjUsS8Ei.js} +3 -3
  47. package/dist/assets/platform-pfYy32vr.js +6 -0
  48. package/dist/assets/projectMeta-2dbON46t.js +1 -0
  49. package/dist/assets/{pt-BR-Dq394BPb.js → pt-BR-B8sV7qo1.js} +3 -3
  50. package/dist/assets/renderElectronMiniChatApp-Bjf5yS-2.js +2 -0
  51. package/dist/assets/renderMobileApp-Bv0VxQo1.js +28 -0
  52. package/dist/assets/{runtimeConfig-pTYamMLy.js → runtimeConfig-BOk04YEP.js} +1 -1
  53. package/dist/assets/runtimeEndpointReset-DsuP5FPT.css +1 -0
  54. package/dist/assets/runtimeEndpointReset-Oo4f7T5P.js +148 -0
  55. package/dist/assets/{sessionChangeSummary-DcnZyuWt.js → sessionChangeSummary-Bf5wJLSv.js} +2 -2
  56. package/dist/assets/{sessionLookup-B3t-FerN.js → sessionLookup-pga3-Etf.js} +1 -1
  57. package/dist/assets/{sortable-tabs-strip-B0sZ7mm6.js → sortable-tabs-strip-CHqMkTI3.js} +1 -1
  58. package/dist/assets/{store-D8fmTWK3.js → store-Cuktref-.js} +3 -3
  59. package/dist/assets/{terminalApi-CJyWCuc8.js → terminalApi-BgGraKxs.js} +1 -1
  60. package/dist/assets/{textarea-B5GMntHk.js → textarea-B0Od84ZM.js} +1 -1
  61. package/dist/assets/{tooltip-C64SdRvR.js → tooltip-BKL7J5hx.js} +1 -1
  62. package/dist/assets/{uk-8XAR75Qh.js → uk-Bh7HXyLp.js} +3 -3
  63. package/dist/assets/{url-DF1NFwt_.js → url-DNRMq_0R.js} +1 -1
  64. package/dist/assets/{useAppFontEffects-BQklk6XB.js → useAppFontEffects-gMl7z7An.js} +53 -53
  65. package/dist/assets/{useAssistantUIStore-B75cQm_z.js → useAssistantUIStore-DBwfg9nX.js} +1 -1
  66. package/dist/assets/useDesktopWindowControlsLayout-GOgauAay.js +1 -0
  67. package/dist/assets/{useEffectiveDirectory-Ddx7sZ5A.js → useEffectiveDirectory-DgAB7HWq.js} +1 -1
  68. package/dist/assets/{useFontPreferences-CrteQiAp.js → useFontPreferences-Djxu_uRy.js} +1 -1
  69. package/dist/assets/useMobileNavigationStore-D7uAoBXe.js +415 -0
  70. package/dist/assets/useSessionAutoCleanup-Cg7KJFGa.js +2 -0
  71. package/dist/assets/{useUIStore-Brsa2mKs.js → useUIStore-Dfx6TKvi.js} +1 -1
  72. package/dist/assets/{useWorkerHighlightedLines-VOtVUGkO.js → useWorkerHighlightedLines-DKa2EWBH.js} +1 -1
  73. package/dist/assets/vendor-opencode-client-MF2GBrFx.js +12 -0
  74. package/dist/assets/{vendor-zustand-B4dlGEM2.js → vendor-zustand-DzRqcymP.js} +1 -1
  75. package/dist/assets/{zh-CN-B-ILfrqC.js → zh-CN-Uzia0gk4.js} +3 -3
  76. package/dist/assets/{zh-TW-5HeTVP4z.js → zh-TW-CiI7DLdB.js} +3 -3
  77. package/dist/index.html +10 -10
  78. package/dist/mini-chat.html +10 -10
  79. package/dist/mobile.html +10 -10
  80. package/package.json +3 -3
  81. package/server/index.js +8 -20
  82. package/server/lib/git/DOCUMENTATION.md +1 -0
  83. package/server/lib/git/routes.js +7 -4
  84. package/server/lib/git/routes.test.js +34 -0
  85. package/server/lib/git/service.js +3 -1
  86. package/server/lib/llm/DOCUMENTATION.md +6 -4
  87. package/server/lib/llm/generate.js +8 -9
  88. package/server/lib/llm/generate.test.js +33 -6
  89. package/server/lib/opencode/DOCUMENTATION.md +24 -20
  90. package/server/lib/opencode/agents.js +13 -22
  91. package/server/lib/opencode/auth-state-runtime.js +3 -3
  92. package/server/lib/opencode/auth-state-runtime.test.js +59 -0
  93. package/server/lib/opencode/auth.d.ts +13 -0
  94. package/server/lib/opencode/auth.js +74 -64
  95. package/server/lib/opencode/auth.test.js +57 -0
  96. package/server/lib/opencode/commands.js +1 -1
  97. package/server/lib/opencode/config-entities-layering.test.js +72 -0
  98. package/server/lib/opencode/config-entity-routes.js +9 -122
  99. package/server/lib/opencode/config-entity-routes.test.js +7 -11
  100. package/server/lib/opencode/config-files.d.ts +17 -0
  101. package/server/lib/opencode/config-files.js +187 -0
  102. package/server/lib/opencode/config-files.test.js +201 -0
  103. package/server/lib/opencode/core-routes.js +0 -1
  104. package/server/lib/opencode/core-routes.test.js +0 -15
  105. package/server/lib/opencode/credential-boundary.d.ts +1 -0
  106. package/server/lib/opencode/credential-boundary.js +11 -0
  107. package/server/lib/opencode/ensure-cli.js +4 -1
  108. package/server/lib/opencode/env-config.js +4 -1
  109. package/server/lib/opencode/env-config.test.js +28 -0
  110. package/server/lib/opencode/env-runtime.test.js +2 -1
  111. package/server/lib/opencode/feature-routes-runtime.js +9 -7
  112. package/server/lib/opencode/hmr-state-runtime.js +4 -4
  113. package/server/lib/opencode/lifecycle.js +1 -49
  114. package/server/lib/opencode/lifecycle.test.js +30 -4
  115. package/server/lib/opencode/location-release.d.ts +8 -0
  116. package/server/lib/opencode/location-release.js +32 -0
  117. package/server/lib/opencode/location-release.test.js +43 -0
  118. package/server/lib/opencode/mcp.js +1 -1
  119. package/server/lib/opencode/opencode2-pin.js +2 -1
  120. package/server/lib/opencode/owned-runtime-upgrade.test.js +5 -5
  121. package/server/lib/opencode/plugin-routes.test.js +4 -2
  122. package/server/lib/opencode/plugins.js +12 -60
  123. package/server/lib/opencode/plugins.test.js +5 -3
  124. package/server/lib/opencode/providers.js +6 -3
  125. package/server/lib/opencode/proxy.js +7 -0
  126. package/server/lib/opencode/proxy.test.js +13 -0
  127. package/server/lib/opencode/routes.js +5 -5
  128. package/server/lib/opencode/routes.test.js +18 -18
  129. package/server/lib/opencode/runtime-contract.js +3 -2
  130. package/server/lib/opencode/runtime-contract.test.js +12 -12
  131. package/server/lib/opencode/shared.js +6 -175
  132. package/server/lib/opencode/upgrade-screen.js +4 -11
  133. package/server/lib/opencode/upgrade-screen.test.js +25 -25
  134. package/server/lib/opencode/version-alignment.test.js +40 -0
  135. package/server/lib/quota/DOCUMENTATION.md +9 -0
  136. package/server/lib/quota/provider-credentials.test.js +29 -0
  137. package/server/lib/quota/providers/claude.js +4 -4
  138. package/server/lib/quota/providers/codex.js +4 -4
  139. package/server/lib/quota/providers/codex.test.js +1 -1
  140. package/server/lib/quota/providers/copilot.js +5 -5
  141. package/server/lib/quota/providers/google/auth.js +3 -3
  142. package/server/lib/quota/providers/google/index.js +2 -2
  143. package/server/lib/quota/providers/index.js +3 -7
  144. package/server/lib/quota/providers/index.test.js +2 -2
  145. package/server/lib/quota/providers/kimi.js +4 -4
  146. package/server/lib/quota/providers/minimax-shared.js +4 -4
  147. package/server/lib/quota/providers/nanogpt.js +4 -4
  148. package/server/lib/quota/providers/openai.js +4 -4
  149. package/server/lib/quota/providers/openrouter.js +4 -4
  150. package/server/lib/quota/providers/wafer.js +4 -4
  151. package/server/lib/quota/providers/zai.js +4 -4
  152. package/server/lib/quota/providers/zhipuai-coding-plan.js +6 -20
  153. package/server/lib/quota/routes.js +1 -1
  154. package/server/lib/scheduled-tasks/DOCUMENTATION.md +1 -0
  155. package/server/lib/scheduled-tasks/runtime.js +2 -3
  156. package/server/lib/session-index/DOCUMENTATION.md +7 -0
  157. package/server/lib/session-index/event-ingest.js +13 -0
  158. package/server/lib/session-index/event-ingest.test.js +7 -0
  159. package/server/lib/session-index/service.js +45 -0
  160. package/server/lib/session-index/service.test.js +47 -0
  161. package/server/lib/session-metadata/DOCUMENTATION.md +6 -0
  162. package/server/lib/session-metadata/session-metadata-store.test.js +23 -0
  163. package/server/lib/session-metadata/session-projection.d.ts +1 -0
  164. package/server/lib/session-metadata/session-projection.js +23 -0
  165. package/server/lib/session-metadata/session-projection.test.js +35 -0
  166. package/server/lib/session-title/DOCUMENTATION.md +36 -8
  167. package/server/lib/session-title/native-runtime.test.js +42 -0
  168. package/server/lib/session-title/runtime.js +18 -8
  169. package/server/lib/session-title/session-access.js +108 -3
  170. package/server/lib/session-title/session-access.test.js +125 -7
  171. package/server/lib/tts/DOCUMENTATION.md +7 -5
  172. package/server/lib/tts/credential-source.test.js +23 -0
  173. package/server/lib/tts/routes.js +2 -2
  174. package/server/lib/tts/service.js +16 -37
  175. package/dist/assets/MobileSurface-ocVWenHA.js +0 -2
  176. package/dist/assets/SettingsView-CIZz40Jg.js +0 -25
  177. package/dist/assets/fileMentionTouchSelection-Bj67pPo7.js +0 -3
  178. package/dist/assets/insertionBoundaries-nzs1Q3YR.js +0 -1
  179. package/dist/assets/main-D2BzpnUt.css +0 -1
  180. package/dist/assets/main-DjilfYN7.js +0 -169
  181. package/dist/assets/mobile-fBLEOx9_.js +0 -2
  182. package/dist/assets/multirun-D7W7oCj4.js +0 -4
  183. package/dist/assets/persistence-CMWO3jFo.js +0 -3
  184. package/dist/assets/platform-B0p43squ.js +0 -6
  185. package/dist/assets/projectMeta-DrUKrYt0.js +0 -3
  186. package/dist/assets/renderElectronMiniChatApp-D1xipCO5.js +0 -2
  187. package/dist/assets/renderMobileApp-DSk7Qs-_.js +0 -28
  188. package/dist/assets/runtimeEndpointReset-B5HEMuiB.js +0 -149
  189. package/dist/assets/useDesktopWindowControlsLayout-CrzYwZDQ.js +0 -1
  190. package/dist/assets/useMobileNavigationStore-i4cXNoOf.js +0 -414
  191. package/dist/assets/useSessionAutoCleanup-Dzd0fGSe.js +0 -2
  192. package/dist/assets/vendor-opencode-client-C12gfjag.js +0 -12
  193. package/server/lib/opencode/snippets.js +0 -242
  194. 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
- });