@openchambery/web 1.19.17-beta.2 → 1.19.17-beta.3

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 (128) hide show
  1. package/dist/assets/AgentAvatar-CUDJ3_nZ.js +1 -0
  2. package/dist/assets/AssistantView-CDXE0eTS.js +3 -0
  3. package/dist/assets/DiagramView-BrRV4o5T.js +1 -0
  4. package/dist/assets/FadeInOnReveal-BLSnyG2Z.js +1 -0
  5. package/dist/assets/Icon-C9ZHbwqp.js +1 -0
  6. package/dist/assets/MarkdownRenderer-CAdfUgV1.js +2 -0
  7. package/dist/assets/{MarkdownRendererImpl-BJd1Vjsc.js → MarkdownRendererImpl-D2dIlX0h.js} +2 -2
  8. package/dist/assets/MarkstreamRendererImpl-Drb2Tpv-.js +3 -0
  9. package/dist/assets/MobileDetailNavigation-BgCoDqtp.js +1 -0
  10. package/dist/assets/MobileShareBridge-ZlVURYWR.js +4 -0
  11. package/dist/assets/MobileSurface-DhLOTW0-.js +2 -0
  12. package/dist/assets/MultiRunWindow-BCvcwItK.js +1 -0
  13. package/dist/assets/OnboardingScreen-DSyZtiFS.js +1 -0
  14. package/dist/assets/OverlayScrollbar-C7fAOAKT.js +2 -0
  15. package/dist/assets/SettingsView-D57amZJb.js +25 -0
  16. package/dist/assets/SettingsWindow-B5DqLCkD.js +1 -0
  17. package/dist/assets/TerminalView-2_RFPaVs.js +8 -0
  18. package/dist/assets/{ToolOutputDialog-BQ_oXyS_.js → ToolOutputDialog-CQs_7KYT.js} +4 -4
  19. package/dist/assets/{appThemeRegistry-BDrIDWKH.js → appThemeRegistry-DpLe_jnW.js} +1 -1
  20. package/dist/assets/button-bhVnVYB_.js +1 -0
  21. package/dist/assets/collapsible-CoWJB_Zl.js +1 -0
  22. package/dist/assets/context-menu-gSO0b3sQ.js +1 -0
  23. package/dist/assets/diagram-Dx4UOZUn.js +1 -0
  24. package/dist/assets/dialog-C2Dw0yqA.js +1 -0
  25. package/dist/assets/{es-BQb6I8gl.js → es-Bxd4Lyu9.js} +2 -2
  26. package/dist/assets/{fileMentionTouchSelection-DzdgAvGS.js → fileMentionTouchSelection-CmQthb6Q.js} +2 -2
  27. package/dist/assets/{fr-BjGouC_l.js → fr-DiLDwVZs.js} +2 -2
  28. package/dist/assets/{gitApi-pLkl_IyQ.js → gitApi-8HxdR1zx.js} +3 -3
  29. package/dist/assets/input-8Te_vPwB.js +1 -0
  30. package/dist/assets/insertionBoundaries-Cdv9-1Bg.js +1 -0
  31. package/dist/assets/{ja-Cw9zliYY.js → ja-CWRlmEJM.js} +2 -2
  32. package/dist/assets/{ko-Dyz0Dk9b.js → ko-DmIugkgj.js} +2 -2
  33. package/dist/assets/main-CQY7JUX4.js +169 -0
  34. package/dist/assets/main-Cfru2-qr.js +2 -0
  35. package/dist/assets/{markdownHeightCache-BL8CUQ0M.js → markdownHeightCache-CT2d4yTV.js} +1 -1
  36. package/dist/assets/miniChat-BphFgAb_.js +2 -0
  37. package/dist/assets/mobile-BVRPTuLT.js +2 -0
  38. package/dist/assets/multirun-CYdieVzW.js +4 -0
  39. package/dist/assets/{pl-C7EY-dTH.js → pl-BU9AmdUM.js} +2 -2
  40. package/dist/assets/projectMeta-D8hiy3Dk.js +3 -0
  41. package/dist/assets/{pt-BR-B1uHpjFW.js → pt-BR-DQmEF9QB.js} +2 -2
  42. package/dist/assets/renderElectronMiniChatApp-CVqd3Nmc.js +2 -0
  43. package/dist/assets/renderMobileApp-DgtCGRKP.js +28 -0
  44. package/dist/assets/{runtimeConfig-BD1Fo5N5.js → runtimeConfig-DXXOBrK_.js} +1 -1
  45. package/dist/assets/runtimeEndpointReset-bSVOt7pi.js +147 -0
  46. package/dist/assets/sessionChangeSummary-CfnRZ0gS.js +2 -0
  47. package/dist/assets/sessionLookup-BZuujM6l.js +1 -0
  48. package/dist/assets/sortable-tabs-strip-BmvLnn6O.js +1 -0
  49. package/dist/assets/src-C_Yn9Ylz.css +2 -0
  50. package/dist/assets/{store-ClnJdJSj.js → store-BoixGrYS.js} +3 -3
  51. package/dist/assets/textarea-DRL916s6.js +1 -0
  52. package/dist/assets/tooltip-BLznq5KR.js +1 -0
  53. package/dist/assets/{uk-DgG8v2md.js → uk-Dax66sAC.js} +2 -2
  54. package/dist/assets/{useAppFontEffects-CN_3Jty7.js → useAppFontEffects-DhEfjuPp.js} +43 -43
  55. package/dist/assets/useDesktopWindowControlsLayout-BhNFU2Wd.js +1 -0
  56. package/dist/assets/{useEffectiveDirectory-C5Gg7EvP.js → useEffectiveDirectory-BhhzFJgX.js} +1 -1
  57. package/dist/assets/useMobileNavigationStore-1jdHeA49.js +413 -0
  58. package/dist/assets/useSessionAutoCleanup-C8u2-jrO.js +2 -0
  59. package/dist/assets/{useWorkerHighlightedLines-BSQQkZaO.js → useWorkerHighlightedLines-DFXK66lA.js} +2 -2
  60. package/dist/assets/vendor-zod-Dzk5kdUU.js +39 -0
  61. package/dist/assets/{zh-CN-C6OFKjeT.js → zh-CN-Du4VC8Z0.js} +2 -2
  62. package/dist/assets/{zh-TW-BVP99aMr.js → zh-TW-C0bY-Dso.js} +2 -2
  63. package/dist/index.html +3 -3
  64. package/dist/mini-chat.html +3 -3
  65. package/dist/mobile.html +3 -3
  66. package/package.json +1 -1
  67. package/server/index.js +51 -0
  68. package/server/lib/opencode/DOCUMENTATION.md +1 -0
  69. package/server/lib/opencode/core-routes.js +2 -0
  70. package/server/lib/opencode/feature-routes-runtime.js +20 -0
  71. package/server/lib/opencode/feature-routes-runtime.test.js +10 -0
  72. package/server/lib/opencode/routes.js +14 -1
  73. package/server/lib/opencode/settings-helpers.js +3 -0
  74. package/server/lib/opencode/settings-helpers.test.js +12 -0
  75. package/server/lib/opencode/shutdown-runtime.js +2 -0
  76. package/server/lib/question-auto-delegate/DOCUMENTATION.md +124 -0
  77. package/server/lib/question-auto-delegate/core.d.ts +255 -0
  78. package/server/lib/question-auto-delegate/core.js +1372 -0
  79. package/server/lib/question-auto-delegate/core.test.js +672 -0
  80. package/server/lib/question-auto-delegate/routes.js +223 -0
  81. package/server/lib/question-auto-delegate/routes.test.js +180 -0
  82. package/server/lib/question-auto-delegate/runtime.js +243 -0
  83. package/server/lib/session-goal/DOCUMENTATION.md +12 -2
  84. package/server/lib/session-goal/runtime.js +138 -35
  85. package/server/lib/session-goal/runtime.test.js +192 -0
  86. package/dist/assets/AgentAvatar-m1jNq4bX.js +0 -1
  87. package/dist/assets/AssistantView-DZMTfY1i.js +0 -3
  88. package/dist/assets/DiagramView-Byf2evGV.js +0 -1
  89. package/dist/assets/FadeInOnReveal-UGwClbL_.js +0 -1
  90. package/dist/assets/Icon-D1BcR8Tz.js +0 -1
  91. package/dist/assets/MarkdownRenderer-YMePGw0Z.js +0 -2
  92. package/dist/assets/MarkstreamRendererImpl-2oZKPfgd.js +0 -3
  93. package/dist/assets/MobileDetailNavigation-BeNUCxzK.js +0 -1
  94. package/dist/assets/MobileShareBridge-3tBtXXJJ.js +0 -4
  95. package/dist/assets/MobileSurface-ppn0zIpb.js +0 -2
  96. package/dist/assets/MultiRunWindow-CItY5bZ2.js +0 -1
  97. package/dist/assets/OnboardingScreen-bIWeMLVx.js +0 -1
  98. package/dist/assets/OverlayScrollbar-Bahg_P3r.js +0 -2
  99. package/dist/assets/SettingsView-0-Yqdzh-.js +0 -25
  100. package/dist/assets/SettingsWindow-1jOWzU2A.js +0 -1
  101. package/dist/assets/TerminalView-BLOCPFz9.js +0 -8
  102. package/dist/assets/button-9R-WgVMl.js +0 -1
  103. package/dist/assets/clipboard-GUUNlWIv.js +0 -1
  104. package/dist/assets/collapsible-Bbz9KiJf.js +0 -1
  105. package/dist/assets/context-menu-CSyOhRz8.js +0 -1
  106. package/dist/assets/diagram-NdsZih8P.js +0 -1
  107. package/dist/assets/dialog-DhMGbF_B.js +0 -1
  108. package/dist/assets/input-Cd_1HyQv.js +0 -1
  109. package/dist/assets/insertionBoundaries-DJvMDCJJ.js +0 -1
  110. package/dist/assets/main-B8fZfA3K.js +0 -169
  111. package/dist/assets/main-BGpPyUV2.js +0 -2
  112. package/dist/assets/miniChat-DHjphqgR.js +0 -2
  113. package/dist/assets/mobile-DNMX4u7x.js +0 -2
  114. package/dist/assets/multirun-BINJ2LCE.js +0 -4
  115. package/dist/assets/projectMeta-BMkGWqtz.js +0 -3
  116. package/dist/assets/renderElectronMiniChatApp-BonR3p7C.js +0 -2
  117. package/dist/assets/renderMobileApp-CZqNs2zK.js +0 -28
  118. package/dist/assets/runtimeEndpointReset-Dpx6GB_U.js +0 -147
  119. package/dist/assets/sessionChangeSummary-BG7l2heP.js +0 -2
  120. package/dist/assets/sessionLookup-BZuvc3Aa.js +0 -1
  121. package/dist/assets/sortable-tabs-strip-dYW6SH62.js +0 -1
  122. package/dist/assets/src-CO9q_82J.css +0 -2
  123. package/dist/assets/textarea-B9CmN13Z.js +0 -1
  124. package/dist/assets/tooltip-DSjr26A_.js +0 -1
  125. package/dist/assets/useDesktopWindowControlsLayout-C6kAkizT.js +0 -1
  126. package/dist/assets/useMobileNavigationStore-DDgESrzu.js +0 -413
  127. package/dist/assets/useSessionAutoCleanup-q2lauc7x.js +0 -2
  128. package/dist/assets/utils-2ZK8yboQ.js +0 -1
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Platform-agnostic question auto-delegate core contracts.
3
+ * Shared by the web runtime adapter and VS Code host integration.
4
+ * API tip event: `openchamber:question-auto-delegate-changed` with `{ epoch, revision }` only —
5
+ * consumers must GET `/api/question-auto-delegate` for the authoritative snapshot.
6
+ */
7
+
8
+ export const QUESTION_AUTO_DELEGATE_DELAY_MS: 30000;
9
+
10
+ /** Fixed auto-reply text used for every question slot. */
11
+ export const QUESTION_AUTO_DELEGATE_ANSWER: string;
12
+
13
+ /** HTTP/API error code when another authority already claimed upstream submission. */
14
+ export const QUESTION_SUBMISSION_CLAIMED_CODE: 'question_submission_claimed';
15
+
16
+ export type QuestionAutoDelegateRequestState =
17
+ | 'counting'
18
+ | 'paused'
19
+ | 'disabled'
20
+ | 'submitting'
21
+ | 'uncertain'
22
+ | 'settled';
23
+
24
+ export type QuestionAutoDelegatePauseReason = 'interaction' | 'user' | 'goal' | null;
25
+
26
+ export type QuestionAutoDelegateSubmittedBy = 'manual' | 'auto' | null;
27
+
28
+ export type QuestionAutoDelegateResolution = 'replied' | 'rejected' | 'external' | null;
29
+
30
+ export type QuestionAutoDelegateCoverageState = 'ready' | 'reconciling' | 'partial';
31
+
32
+ export type QuestionAutoDelegateSubmitAuthority = 'manual' | 'auto' | 'delegate';
33
+
34
+ export type QuestionAutoDelegateSubmitKind = 'reply' | 'reject';
35
+
36
+ export interface QuestionAutoDelegateRequestSnapshot {
37
+ requestID: string;
38
+ sessionID: string;
39
+ directory: string;
40
+ questionCount: number;
41
+ state: QuestionAutoDelegateRequestState;
42
+ deadlineAt: number | null;
43
+ pauseReason: QuestionAutoDelegatePauseReason;
44
+ submittedBy: QuestionAutoDelegateSubmittedBy;
45
+ resolution: QuestionAutoDelegateResolution;
46
+ }
47
+
48
+ export interface QuestionAutoDelegateSnapshot {
49
+ epoch: string;
50
+ revision: number;
51
+ serverNow: number;
52
+ enabled: boolean;
53
+ delayMs: 30000;
54
+ coverage: {
55
+ state: QuestionAutoDelegateCoverageState;
56
+ failedDirectories: string[];
57
+ };
58
+ requests: QuestionAutoDelegateRequestSnapshot[];
59
+ }
60
+
61
+ export interface QuestionAutoDelegatePauseInput {
62
+ requestID: string;
63
+ sessionID: string;
64
+ directory?: string | null;
65
+ /** HTTP accepts interaction|user; goal is the reverse path from session-goal pause/abort. */
66
+ reason: 'interaction' | 'user' | 'goal';
67
+ }
68
+
69
+ export interface QuestionAutoDelegateDelegateInput {
70
+ requestID: string;
71
+ sessionID: string;
72
+ directory?: string | null;
73
+ }
74
+
75
+ export interface QuestionAutoDelegateSubmitInput {
76
+ requestID: string;
77
+ sessionID?: string | null;
78
+ directory?: string | null;
79
+ kind: QuestionAutoDelegateSubmitKind;
80
+ authority: QuestionAutoDelegateSubmitAuthority;
81
+ /** Required for reply; ignored for reject. */
82
+ answers?: string[][] | null;
83
+ /** Optional opaque body forwarded on manual reject/reply when answers are already shaped. */
84
+ body?: unknown;
85
+ }
86
+
87
+ export type QuestionAutoDelegateMutationOutcome =
88
+ | 'ok'
89
+ | 'paused'
90
+ | 'delegated'
91
+ | 'submitted'
92
+ | 'claimed'
93
+ | 'uncertain'
94
+ | 'settled'
95
+ | 'not_found'
96
+ | 'disabled'
97
+ | 'error';
98
+
99
+ export interface QuestionAutoDelegateMutationResult {
100
+ outcome: QuestionAutoDelegateMutationOutcome;
101
+ snapshot: QuestionAutoDelegateSnapshot;
102
+ /** Present when outcome is `claimed`. */
103
+ code?: typeof QUESTION_SUBMISSION_CLAIMED_CODE;
104
+ /** Upstream HTTP status when a submission was attempted or forwarded. */
105
+ upstreamStatus?: number;
106
+ /** Upstream JSON/text body (preserve SDK shape for manual intercepts). */
107
+ upstreamBody?: unknown;
108
+ error?: string;
109
+ status?: number;
110
+ }
111
+
112
+ export interface QuestionAutoDelegatePendingQuestion {
113
+ id: string;
114
+ sessionID: string;
115
+ directory?: string | null;
116
+ questions?: unknown[] | null;
117
+ }
118
+
119
+ export interface QuestionAutoDelegateSessionInfo {
120
+ id: string;
121
+ parentID?: string | null;
122
+ directory?: string | null;
123
+ }
124
+
125
+ /**
126
+ * Result of one upstream mutation.
127
+ * - `uncertain` stops retries and keeps a tombstone (may have been sent).
128
+ * - `notSent: true` is a compatible extension: the request never left the process;
129
+ * core releases the claim and pauses for human retry. Bare `status: 0` without
130
+ * `notSent` remains uncertain.
131
+ */
132
+ export interface QuestionAutoDelegateUpstreamResult {
133
+ ok: boolean;
134
+ /** True when the transport finished without a definitive success/failure (timeout, empty 5xx, aborted). */
135
+ uncertain?: boolean;
136
+ /**
137
+ * Compatible extension for VS Code / web adapters: only `true` means the POST
138
+ * body was never transmitted. Must not be set when the send may have reached upstream.
139
+ */
140
+ notSent?: boolean;
141
+ status: number;
142
+ body: unknown;
143
+ }
144
+
145
+ export interface QuestionAutoDelegateTimerHandle {
146
+ clear(): void;
147
+ }
148
+
149
+ /**
150
+ * Injected IO — no platform imports inside core.
151
+ * Web adapter implements via direct OpenCode upstream fetch (never loopback through Host routes).
152
+ */
153
+ export interface QuestionAutoDelegateIO {
154
+ now(): number;
155
+ createTimer(callback: () => void, delayMs: number): QuestionAutoDelegateTimerHandle;
156
+ /** Random opaque epoch seed (called once on create). */
157
+ createEpoch(): string;
158
+ /**
159
+ * List pending questions for a directory scope.
160
+ * Return `null` exclusively for fetch failure (never treat failure as empty success).
161
+ * Return `[]` only for authoritative empty.
162
+ */
163
+ listQuestions(directory: string | undefined): Promise<QuestionAutoDelegatePendingQuestion[] | null>;
164
+ /** Session info for lineage / directory binding. Failure → null. */
165
+ getSession(sessionID: string, directory?: string | null): Promise<QuestionAutoDelegateSessionInfo | null>;
166
+ postReply(
167
+ requestID: string,
168
+ directory: string | undefined,
169
+ answers: string[][],
170
+ ): Promise<QuestionAutoDelegateUpstreamResult>;
171
+ postReject(
172
+ requestID: string,
173
+ directory: string | undefined,
174
+ body?: unknown,
175
+ ): Promise<QuestionAutoDelegateUpstreamResult>;
176
+ /** Project directories used for reconnect/start reconcile. */
177
+ listDirectories(): Promise<string[]>;
178
+ /**
179
+ * Persist-backed enabled flag.
180
+ * - `true` / `false` when readable (absent key ⇒ default true)
181
+ * - `null` when settings cannot be read (core enters unavailable; no auto timers)
182
+ */
183
+ readEnabled(): Promise<boolean | null>;
184
+ /** Tip-only SSE/broadcast: `{ epoch, revision }`. */
185
+ onChanged?(tip: { epoch: string; revision: number }): void;
186
+ /**
187
+ * Fired on user pause, manual claim, or feature-disable so goal can apply its
188
+ * existing pause path. Does not fire for successful auto-reply or goal-reason pauses.
189
+ */
190
+ onUserTakeover?(info: {
191
+ requestID: string;
192
+ sessionID: string;
193
+ directory: string;
194
+ reason: 'interaction' | 'user' | 'disabled';
195
+ }): void;
196
+ }
197
+
198
+ export interface QuestionAutoDelegateCoreOptions {
199
+ io: QuestionAutoDelegateIO;
200
+ delayMs?: number;
201
+ autoAnswer?: string;
202
+ }
203
+
204
+ export interface QuestionAutoDelegateCore {
205
+ start(): () => void;
206
+ dispose(): void;
207
+ snapshot(): QuestionAutoDelegateSnapshot;
208
+ /**
209
+ * Apply enabled flag after successful settings persist.
210
+ * Only accepts a real boolean; invalid values are ignored (state unchanged).
211
+ * Generation-guarded against racing start() settings reads.
212
+ */
213
+ applyEnabled(enabled: boolean): QuestionAutoDelegateSnapshot;
214
+ pause(input: QuestionAutoDelegatePauseInput): Promise<QuestionAutoDelegateMutationResult>;
215
+ /**
216
+ * Immediate auto-delegate for one request (same claim path as timer).
217
+ * Allowed even when the feature toggle is off (explicit single-shot).
218
+ * Recovers identity via scoped list — never invents questionCount=1.
219
+ */
220
+ delegate(input: QuestionAutoDelegateDelegateInput): Promise<QuestionAutoDelegateMutationResult>;
221
+ /**
222
+ * Shared synchronous claim + upstream POST for timer, manual reply/reject, and delegate.
223
+ * Concurrent losers receive outcome `claimed` + code `question_submission_claimed` (HTTP 409).
224
+ * Manual reply forwards answers as-is (including []); fixed text is auto/delegate only.
225
+ */
226
+ submit(input: QuestionAutoDelegateSubmitInput): Promise<QuestionAutoDelegateMutationResult>;
227
+ /**
228
+ * Per-directory pending reconcile. Only successfully listed directories may settle
229
+ * missing requests. Failed directories keep prior state (`coverage.partial`).
230
+ * Single-flight with trailing scope merge.
231
+ */
232
+ reconcile(options?: { directories?: string[] }): Promise<QuestionAutoDelegateSnapshot>;
233
+ /** Ingest a global OpenCode SSE payload (+ authoritative directory). */
234
+ processEvent(payload: unknown, directoryHint?: string | null): void;
235
+ /**
236
+ * True while this session or a known descendant has a blocking request
237
+ * (counting|paused|disabled|submitting|uncertain).
238
+ */
239
+ isBlockingSession(sessionID: string): boolean;
240
+ /** True when settings-ready+enabled and the request would be auto-handled. */
241
+ isAutoHandling(sessionID: string, requestID?: string): boolean;
242
+ /** Goal pause/abort reverse path — pause related question timers for the session tree. */
243
+ pauseForSessionTree(sessionID: string, directory?: string | null): Promise<QuestionAutoDelegateSnapshot>;
244
+ /** Resolve root owner session from cached lineage. */
245
+ resolveRootSession(sessionID: string): { sessionID: string; directory: string };
246
+ }
247
+
248
+ export function createQuestionAutoDelegateCore(
249
+ options: QuestionAutoDelegateCoreOptions,
250
+ ): QuestionAutoDelegateCore;
251
+
252
+ export function buildAutoDelegateAnswers(
253
+ questionCount: number,
254
+ answerText?: string,
255
+ ): string[][];