vibe64 0.1.47 → 0.1.49

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 (150) hide show
  1. package/bin/run.js +1734 -1687
  2. package/bin/server.js +75 -75
  3. package/bin/upgrade-state.js +4539 -4471
  4. package/dist/assets/GithubBrowserTabs-BwpiRS2u.js +1 -0
  5. package/dist/assets/{LocalDatabaseServer-6VzPWZxG.js → LocalDatabaseServer-u_Ky7bNS.js} +1 -1
  6. package/dist/assets/{Vibe64AuthSettingsButton-TLwqAxDo.js → Vibe64AuthSettingsButton-BCwswT1G.js} +1 -1
  7. package/dist/assets/{Vibe64DashboardShell-B4dQ-oHD.js → Vibe64DashboardShell-CWlgrR2B.js} +1 -1
  8. package/dist/assets/{Vibe64DatabaseWorkspace-Bh5WIPOj.js → Vibe64DatabaseWorkspace-Dhs8_H0P.js} +1 -1
  9. package/dist/assets/Vibe64OutputControls-Dn548CZa.js +8 -0
  10. package/dist/assets/{Vibe64RepositoryWorkspace-idDg94lc.js → Vibe64RepositoryWorkspace-C-8S4JUF.js} +1 -1
  11. package/dist/assets/{Vibe64SessionFiles-Z9zxosyl.js → Vibe64SessionFiles-Cx6J7DDN.js} +2 -3
  12. package/dist/assets/{Vibe64UiStoryboardView-CrCDWMdR.js → Vibe64UiStoryboardView-DHyhJiWS.js} +1 -1
  13. package/dist/assets/{Vibe64UnavailableSessions-TqsxvGSf.js → Vibe64UnavailableSessions-Da4RxIhA.js} +1 -1
  14. package/dist/assets/{_sessionId_-7F1VGOou.js → _sessionId_-DCpgDPSI.js} +1 -1
  15. package/dist/assets/_slug_-BbEWp01a.js +25 -0
  16. package/dist/assets/{_slug_-B16mTWjj.css → _slug_-DerKOisL.css} +1 -1
  17. package/dist/assets/{access-Cx9RH95J.js → access-D4di2sCr.js} +1 -1
  18. package/dist/assets/{app-DPx4KKOa.js → app-Adr9Iz8p.js} +1 -1
  19. package/dist/assets/asyncModuleRecovery-DJsn5NrL.js +1 -0
  20. package/dist/assets/{changes-DYsuQLFW.js → changes-3Dd1O8Lu.js} +1 -1
  21. package/dist/assets/client-BAXHGUOC.js +1 -0
  22. package/dist/assets/{client-BYsDPxR3.js → client-CCZIu6yc.js} +1 -1
  23. package/dist/assets/{conversation-3ln-WnbL.css → conversation-CSDHdGDb.css} +1 -1
  24. package/dist/assets/conversation-DG9lp25w.js +8 -0
  25. package/dist/assets/conversation-ErAO1CmH.js +13 -0
  26. package/dist/assets/{dashboard-CWswAbYP.js → dashboard-0tCzDYCX.js} +1 -1
  27. package/dist/assets/english-definitions-DeiQ-jTT.js +1 -0
  28. package/dist/assets/env-DsyQ2MFX.js +1 -0
  29. package/dist/assets/{health-C0f6s-G1.js → health-DyTXU-nb.js} +1 -1
  30. package/dist/assets/{history-BQjETNB9.js → history-BXGAdPMI.js} +1 -1
  31. package/dist/assets/{incoming-COpY201m.js → incoming-yajkdGBY.js} +1 -1
  32. package/dist/assets/{index-MWACm8Pp.css → index-B-dukXUB.css} +1 -1
  33. package/dist/assets/index-CGz4Yow6.js +136 -0
  34. package/dist/assets/{integrations-BBkvNRHu.js → integrations-BMrXET36.js} +10 -2
  35. package/dist/assets/issues-kc1XBZCK.js +1 -0
  36. package/dist/assets/{learning-B8_wHoe1.js → learning-CIE5ghYv.js} +1 -1
  37. package/dist/assets/linkPath-Ch9eft18.js +1 -0
  38. package/dist/assets/{placement-DXvgK433.js → placement-BNmlke_j.js} +1 -1
  39. package/dist/assets/placement-DYM3JJ-F.js +1 -0
  40. package/dist/assets/publish-DTh6amqi.js +3 -0
  41. package/dist/assets/pull-requests-CbfGSSIh.js +1 -0
  42. package/dist/assets/{repository-BNPt7UWc.js → repository-BstMh-bG.js} +1 -1
  43. package/dist/assets/settings-Bf8C6dls.js +1 -0
  44. package/dist/assets/{studioGateApi-BVdclhPL.js → studioGateApi-mkX1eOTX.js} +1 -1
  45. package/dist/assets/{studioUrls-CGKCbM_d.js → studioUrls-B0-GdWh8.js} +1 -1
  46. package/dist/assets/useArchivedVibe64Sessions-DIOpfUxD.js +1 -0
  47. package/dist/assets/useCommand-CVuya6vG.js +1 -0
  48. package/dist/assets/useEndpointResource-7-YDfAxX.js +1 -0
  49. package/dist/assets/usePaths-Y6UuQxmI.js +1 -0
  50. package/dist/assets/{useUiFeedback-B51xtCAK.js → useUiFeedback-Bd3rao6E.js} +1 -1
  51. package/dist/assets/useVibe64ConversationLog-ChJOU2SD.js +1 -0
  52. package/dist/assets/{useVibe64DatabaseTools-BE_yXZFn.js → useVibe64DatabaseTools-DKV-TeNJ.js} +1 -1
  53. package/dist/assets/{useVibe64ProjectScope-D7b8n1gx.js → useVibe64ProjectScope-DXjsKKhl.js} +1 -1
  54. package/dist/assets/useVibe64SessionData-BkIHUrP5.js +1 -0
  55. package/dist/assets/useVibe64SessionSelection-N8wX5oqo.js +1 -0
  56. package/dist/assets/{useVibe64SystemGraph-CDDcsye4.js → useVibe64SystemGraph-Db_eD-X8.js} +1 -1
  57. package/dist/assets/{useVibe64Terminal-Zr3Mig2L.js → useVibe64Terminal-B9EWJ9Ba.js} +2 -2
  58. package/dist/assets/vibe64ProjectScope.local-l5_-E6pq.js +1 -0
  59. package/dist/assets/vibe64RepositoryRealtime-CHT4-6VN.js +1 -0
  60. package/dist/assets/vibe64SessionFocus-CS6Ex53G.js +1 -0
  61. package/dist/assets/vibe64SessionFocus-CSm4YJQD.css +1 -0
  62. package/dist/assets/vibe64SessionRequestConfig-xIx-5jxQ.js +1 -0
  63. package/dist/index.html +26 -22
  64. package/docs/colleague-usage/ai-accounts.md +6 -2
  65. package/docs/colleague-usage/ai-balance-and-allowance.md +15 -2
  66. package/docs/colleague-usage/coding-agent-failures.md +2 -1
  67. package/docs/colleague-usage/coding-agent-goals.md +8 -3
  68. package/docs/colleague-usage/coding-agents.md +16 -0
  69. package/docs/colleague-usage/github-work.md +14 -0
  70. package/docs/colleague-usage/preview-browser-checks.md +5 -3
  71. package/docs/colleague-usage/project-setup.md +6 -3
  72. package/docs/colleague-usage/running-vibe64-on-your-computer.md +3 -1
  73. package/docs/colleague-usage/sessions.md +35 -7
  74. package/docs/colleague-usage/starter-apps.md +3 -0
  75. package/docs/colleague-usage/temporary-chat-context.md +2 -1
  76. package/docs/colleague-usage/temporary-chats.md +17 -5
  77. package/node_modules/@jskit-ai/assistant-core/CHANGELOG.md +539 -0
  78. package/node_modules/@jskit-ai/assistant-core/locales/en.json +383 -0
  79. package/node_modules/@jskit-ai/assistant-core/package.json +3 -2
  80. package/node_modules/@jskit-ai/assistant-runtime/CHANGELOG.md +138 -0
  81. package/node_modules/@jskit-ai/assistant-runtime/README.md +2 -1
  82. package/node_modules/@jskit-ai/assistant-runtime/locales/en.json +137 -0
  83. package/node_modules/@jskit-ai/assistant-runtime/package.json +3 -2
  84. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/assistantConfigRepository.js +223 -203
  85. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/conversationsRepository.js +286 -266
  86. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/messagesRepository.js +270 -250
  87. package/node_modules/@jskit-ai/assistant-voice/locales/en.json +182 -0
  88. package/node_modules/@jskit-ai/assistant-voice/package.json +3 -2
  89. package/node_modules/@jskit-ai/connector-google-calendar/CHANGELOG.md +83 -0
  90. package/node_modules/@jskit-ai/connector-google-calendar/locales/en.json +91 -0
  91. package/node_modules/@jskit-ai/connector-google-calendar/package.json +4 -3
  92. package/node_modules/@jskit-ai/connectors-catalog/CHANGELOG.md +1722 -0
  93. package/node_modules/@jskit-ai/connectors-catalog/README.md +11 -0
  94. package/node_modules/@jskit-ai/connectors-catalog/locales/en.json +3139 -0
  95. package/node_modules/@jskit-ai/connectors-catalog/package.json +5 -4
  96. package/node_modules/@jskit-ai/connectors-core/CHANGELOG.md +183 -0
  97. package/node_modules/@jskit-ai/connectors-core/locales/en.json +92 -0
  98. package/node_modules/@jskit-ai/connectors-core/package.json +3 -2
  99. package/node_modules/@jskit-ai/http-runtime/CHANGELOG.md +31 -0
  100. package/node_modules/@jskit-ai/http-runtime/locales/en.json +14 -0
  101. package/node_modules/@jskit-ai/http-runtime/package.json +3 -2
  102. package/node_modules/@jskit-ai/kernel/CHANGELOG.md +182 -0
  103. package/node_modules/@jskit-ai/kernel/locales/en.json +94 -0
  104. package/node_modules/@jskit-ai/kernel/package.json +6 -2
  105. package/node_modules/@jskit-ai/payments-core/CHANGELOG.md +128 -0
  106. package/node_modules/@jskit-ai/payments-core/locales/en.json +77 -0
  107. package/node_modules/@jskit-ai/payments-core/package.json +3 -2
  108. package/node_modules/@jskit-ai/realtime/CHANGELOG.md +20 -0
  109. package/node_modules/@jskit-ai/realtime/locales/en.json +14 -0
  110. package/node_modules/@jskit-ai/realtime/package.json +3 -2
  111. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  112. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  113. package/node_modules/@jskit-ai/uploads-runtime/CHANGELOG.md +35 -0
  114. package/node_modules/@jskit-ai/uploads-runtime/locales/en.json +15 -0
  115. package/node_modules/@jskit-ai/uploads-runtime/package.json +3 -2
  116. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +49 -48
  117. package/node_modules/@local/vibe64-execution/src/server/gitTurnCheckpointCommand.js +1327 -0
  118. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +430 -390
  119. package/node_modules/@local/vibe64-genesis/src/server/index.js +45 -45
  120. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +119 -119
  121. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +57 -57
  122. package/node_modules/@local/vibe64-sessions/package.json +2 -1
  123. package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +195 -175
  124. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1385 -1362
  125. package/package.json +15 -15
  126. package/server.bundle.mjs +44206 -42825
  127. package/dist/assets/GithubBrowserTabs-D-Z3TlA8.js +0 -1
  128. package/dist/assets/Vibe64OutputControls-DtybwgL3.js +0 -8
  129. package/dist/assets/_slug_-Bq84T_Iv.js +0 -24
  130. package/dist/assets/conversation-Bn7wpATa.js +0 -2
  131. package/dist/assets/conversation-CNcCrV-R.js +0 -16
  132. package/dist/assets/definitions-CEbi4qae.js +0 -1
  133. package/dist/assets/env-X7EOFLtl.js +0 -1
  134. package/dist/assets/index-CBo1BEk6.js +0 -138
  135. package/dist/assets/issues-BiSiUd5o.js +0 -1
  136. package/dist/assets/placement-B5T1LR7m.js +0 -1
  137. package/dist/assets/publish-CeLZE2AG.js +0 -3
  138. package/dist/assets/pull-requests-pTdQOT7i.js +0 -1
  139. package/dist/assets/settings-lecRzZ-r.js +0 -1
  140. package/dist/assets/useArchivedVibe64Sessions-DHYRnyJD.js +0 -1
  141. package/dist/assets/useCommand-Epd2yHhQ.js +0 -1
  142. package/dist/assets/useEndpointResource-DBRQISI_.js +0 -1
  143. package/dist/assets/usePaths-DdAnjVDj.js +0 -1
  144. package/dist/assets/useVibe64ConversationLog-DboM3tYN.js +0 -1
  145. package/dist/assets/useVibe64SessionData-CreWtQAO.js +0 -1
  146. package/dist/assets/useVibe64SessionSelection-CDaX4uwY.js +0 -1
  147. package/dist/assets/vibe64ProjectScope.local-BxTBYuRg.js +0 -1
  148. package/dist/assets/vibe64RepositoryRealtime-C-J0I5jY.js +0 -1
  149. package/dist/assets/vibe64SessionFocus-DSW5Irm6.css +0 -1
  150. package/dist/assets/vibe64SessionFocus-DzqbVq60.js +0 -1
@@ -0,0 +1,383 @@
1
+ {
2
+ "jskit": {
3
+ "assistant": {
4
+ "api": {
5
+ "requestFailed": "Assistant request failed."
6
+ },
7
+ "attachments": {
8
+ "announcement": {
9
+ "cancelled": "{count} attachment cancelled. | {count} attachments cancelled.",
10
+ "inProgress": "{count} attachment is in progress. | {count} attachments are in progress.",
11
+ "needAttention": "{count} attachment needs attention. | {count} attachments need attention.",
12
+ "ready": "{count} attachment ready. | {count} attachments ready."
13
+ },
14
+ "attached": "Attached files",
15
+ "bytes": "{sent} / {size}",
16
+ "bytesPercent": "{sent} / {size} · {percent}%",
17
+ "cancelItem": "Cancel {name}",
18
+ "close": "Close",
19
+ "download": "Download",
20
+ "error": {
21
+ "cleanupFailed": "Attachment cleanup failed.",
22
+ "localFilePaste": "Copied local files cannot be pasted from this browser. Drop the file or use Attach files.",
23
+ "noFile": "The prepared attachment did not produce a file.",
24
+ "preparationFailed": "Attachment preparation failed.",
25
+ "tooLarge": "{fileName} is larger than the {limit} attachment limit.",
26
+ "tooMany": "A message can keep at most {count} attachments.",
27
+ "unusable": "Uploaded attachment could not be used.",
28
+ "uploadFailed": "Attachment upload failed."
29
+ },
30
+ "limit": "{count} / {max}",
31
+ "preparingName": "Preparing attachment…",
32
+ "previewUnavailable": "Preview is unavailable for this file. You can download it below.",
33
+ "queue": "Message attachments",
34
+ "removeItem": "Remove {name}",
35
+ "retryItem": "Retry {name}",
36
+ "sizeBytes": "{size} B",
37
+ "sizeKilobytes": "{size} KB",
38
+ "sizeMebibytes": "{size} MiB",
39
+ "sizeMegabytes": "{size} MB",
40
+ "status": {
41
+ "cancelled": "Cancelled",
42
+ "delivering": "Sending to Codex",
43
+ "preparationFailed": "Preparation failed",
44
+ "preparing": "Preparing",
45
+ "queued": "Queued",
46
+ "ready": "Ready",
47
+ "sendingFailed": "Sending failed",
48
+ "uploadFailed": "Upload failed",
49
+ "uploading": "Uploading"
50
+ },
51
+ "summary": {
52
+ "cancelled": "{completed} ready · {cancelled} cancelled",
53
+ "inProgress": "{completed} of {total} ready · in progress",
54
+ "needAttention": "{completed} of {total} ready · {count} needs attention | {completed} of {total} ready · {count} need attention",
55
+ "percent": "{completed} of {total} ready · {percent}%",
56
+ "ready": "{completed} of {total} ready"
57
+ },
58
+ "unnamed": "attachment",
59
+ "uploadProgress": "Upload progress for {name}"
60
+ },
61
+ "chat": {
62
+ "attachFiles": "Attach files",
63
+ "avatar": "Conversation avatar",
64
+ "discardUnsent": "Discard unsent message",
65
+ "editUnsent": "Edit unsent message",
66
+ "label": "Assistant conversation",
67
+ "messageAssistant": "Message AI assistant",
68
+ "minimiseAvatar": "Minimise avatar",
69
+ "reviewAttachedFiles": "Please review the attached files.",
70
+ "sendingToAssistant": "Sending to assistant…",
71
+ "showAvatar": "Show avatar",
72
+ "working": "Assistant is working…"
73
+ },
74
+ "composer": {
75
+ "cannotSendYet": "Your words are in the chat box, but this conversation cannot send yet.",
76
+ "chatChanged": "The chat changed before sending. Review the draft before sending.",
77
+ "notReady": "The chat composer is not ready yet.",
78
+ "send": "Send",
79
+ "sendMessage": "Send message",
80
+ "sending": "Sending…",
81
+ "stop": "Stop",
82
+ "stopping": "Stopping…",
83
+ "suggestedPrompts": "Suggested prompts",
84
+ "suggestionsAvailable": "{count} suggested prompts are available before the message controls.",
85
+ "thinkingOfIdeas": "Thinking of a few ideas",
86
+ "thinkingOfIdeasStatus": "Thinking of a few ideas.",
87
+ "useSuggestion": "Use suggestion: {prompt}"
88
+ },
89
+ "delivery": {
90
+ "checkBeforeResend": "Check delivery before resending.",
91
+ "checkPrevious": "Check the previous message's delivery before sending again.",
92
+ "checking": "Checking…",
93
+ "notConfirmed": "Message delivery is not confirmed.",
94
+ "notSent": "Message could not be sent.",
95
+ "retry": "Retry",
96
+ "retryCheck": "Retry delivery check",
97
+ "unconfirmed": "Delivery could not be confirmed.",
98
+ "unconfirmedShort": "Delivery unconfirmed."
99
+ },
100
+ "goal": {
101
+ "blocked": "Goal blocked",
102
+ "budgetLimited": "Goal budget reached",
103
+ "cancel": "Cancel goal",
104
+ "cancelInterruptsTurn": "Cancel stops the current turn and clears the goal.",
105
+ "cancelRemovesGoal": "Cancel removes this goal. Use Stop to interrupt a turn already running.",
106
+ "cancelling": "Cancelling…",
107
+ "complete": "Goal complete",
108
+ "elapsed": "{label}: {elapsed}",
109
+ "elapsedSinceStart": "Elapsed since goal started (including pauses)",
110
+ "goal": "Goal",
111
+ "loading": "Loading goal…",
112
+ "objective": "Goal objective",
113
+ "pause": "Pause goal",
114
+ "pauseInterruptsTurn": "Pause stops the current turn and keeps the goal for later.",
115
+ "pausePreventsTurns": "Pausing prevents further automatic turns. Use Stop to interrupt the current turn.",
116
+ "paused": "Goal paused",
117
+ "pausing": "Pausing…",
118
+ "resume": "Resume goal",
119
+ "resuming": "Resuming…",
120
+ "running": "Goal running",
121
+ "runningTime": "Running time",
122
+ "set": "Set goal",
123
+ "start": "Start goal",
124
+ "starting": "Starting…",
125
+ "tokenBudget": "Token budget (optional)",
126
+ "unavailable": "Goal unavailable",
127
+ "usageLimited": "Goal waiting for allowance"
128
+ },
129
+ "longText": {
130
+ "details": "Details",
131
+ "table": "Table"
132
+ },
133
+ "model": {
134
+ "apply": "Apply",
135
+ "applying": "Applying…",
136
+ "chooseAi": "Choose AI",
137
+ "chooseModel": "Choose model",
138
+ "controls": "AI controls",
139
+ "loading": "Loading available AIs",
140
+ "model": "Model",
141
+ "noMatchingModels": "No matching models",
142
+ "noModels": "No available models.",
143
+ "noneConfigured": "No configured AIs are available for this session.",
144
+ "provider": "Provider",
145
+ "selector": "AI session selector",
146
+ "thinking": "Thinking",
147
+ "tryAgain": "Try again",
148
+ "viewOnly": "AI choices are view-only while the assistant is working.",
149
+ "waitBeforeChanging": "Wait for the active turn to finish before changing models."
150
+ },
151
+ "progress": {
152
+ "hide": "Hide progress updates",
153
+ "showAll": "Show all {count} progress update | Show all {count} progress updates",
154
+ "showLatest": "Show latest {count} progress update | Show latest {count} progress updates"
155
+ },
156
+ "questions": {
157
+ "answerNormally": "Answer normally instead",
158
+ "answerRequired": "Answer question {number}.",
159
+ "fieldLabel": "[{number}] {label}",
160
+ "label": "Assistant questions",
161
+ "suggestedAnswers": "Suggested answers"
162
+ },
163
+ "settings": {
164
+ "readOnly": "Read-only"
165
+ },
166
+ "transcript": {
167
+ "assistant": "Assistant",
168
+ "cancel": "Cancel",
169
+ "edit": "Edit",
170
+ "failed": "Failed: {error}",
171
+ "history": "Conversation history",
172
+ "loadOlder": "Load older messages",
173
+ "loading": "Loading conversation",
174
+ "loadingOlder": "Loading older messages…",
175
+ "messages": "Conversation messages",
176
+ "pending": "Pending",
177
+ "pendingReason": "Pending: {reason}",
178
+ "preparing": "Preparing conversation",
179
+ "progress": "{name} progress",
180
+ "readMore": "Read more",
181
+ "recommended": " · Recommended",
182
+ "reload": "Reload chat",
183
+ "reloading": "Reloading chat",
184
+ "reloadingShort": "Reloading…",
185
+ "reviewMessage": "Review your message",
186
+ "showLess": "Show less",
187
+ "status": "Status"
188
+ },
189
+ "turn": {
190
+ "failed": "Assistant stopped with an error.",
191
+ "stopped": "Stopped."
192
+ },
193
+ "conversation": {
194
+ "handleClosed": "This conversation handle is closed.",
195
+ "handleDisposed": "This conversation handle is disposed.",
196
+ "runtimeClosed": "This conversation runtime is closed.",
197
+ "pagedHistoryUnsupported": "This conversation does not supply paged history.",
198
+ "completedEnvelopesNeedNativeOwner": "Completed envelopes require a runtime-owned native conversation.",
199
+ "completedEnvelopesNotOwned": "This conversation does not own completed envelopes.",
200
+ "goalAttachmentContentUnsupported": "Native goals require extracted text or supported image bytes for attachments.",
201
+ "originalSendOnly": "This conversation supports its original application Send operation.",
202
+ "attachmentIdsOnly": "Supply attachmentIds; only the application's resolver can supply file content.",
203
+ "attachmentsNotConfigured": "File attachments are not configured for this conversation.",
204
+ "steeringUnsupported": "This connection does not support steering.",
205
+ "goalsUnsupported": "This connection does not support native goals.",
206
+ "goalTokenBudgetsUnsupported": "This connection does not support goal token budgets.",
207
+ "goalCommandUnsupported": "This connection does not support that goal command.",
208
+ "goalAttachmentsUnsupported": "This engine's native goal commands do not accept attachments.",
209
+ "completedEnvelopesNeedNativeEngine": "Completed envelopes require a native engine.",
210
+ "replacementPolicyRetained": "This conversation retains its original replacement policy.",
211
+ "selectedProfileRetained": "This scoped conversation retains its original selected profile.",
212
+ "hostSelectionRequired": "This host requires its authorized assistant selection operation.",
213
+ "liveSettingsUnsupported": "This provider does not support live native settings.",
214
+ "completedEnvelopesNeedStorage": "Completed envelopes require runtime-owned canonical storage.",
215
+ "originalReadOnly": "This conversation uses its original read and subscription operations.",
216
+ "authorizedSelectionRequired": "Use the conversation's authorized selection operation.",
217
+ "eventDeliveryRetained": "This scoped conversation retains its original event delivery.",
218
+ "engineChanged": "The selected native engine changed.",
219
+ "useReplaceForEngine": "Use replace() to change this conversation's engine.",
220
+ "rewindInspectionBeforeOpen": "This conversation has an unfinished Undo operation from an earlier runtime. Inspect its saved native and local history offline before opening it; no history was changed.",
221
+ "rewindInspectionBeforeReplace": "This conversation has an unfinished Undo operation from an earlier runtime. Inspect its saved native and local history offline before replacing it; no history was changed.",
222
+ "responseOwnerChanged": "The completed response owner changed.",
223
+ "newerResponseOwnsWorker": "A newer completed response owns this worker.",
224
+ "responseIdentityChanged": "The completed response identity changed.",
225
+ "applicationToolMessageStale": "This application tool's admitted message is no longer current.",
226
+ "nativeCompletionMessageStale": "This native completion's admitted message is no longer current.",
227
+ "toolObservationRetired": "The native tool observation belongs to a retired response.",
228
+ "toolObservationReceiptLost": "The native tool observation lost its exact admitted receipt.",
229
+ "waitForNativeResponse": "Wait for the native response to finish.",
230
+ "waitForAnswer": "Wait for this answer or use steer to send another instruction.",
231
+ "waitForTurnSaving": "Wait for the current turn to finish saving before starting the goal.",
232
+ "waitForInstructionAdmission": "Wait for the pending instruction to be admitted before steering again.",
233
+ "waitForGoalCommand": "Wait for the goal command to be admitted.",
234
+ "waitForSubmission": "Wait for the current submission before checking delivery.",
235
+ "stopBeforeReplace": "Stop the current turn before replacing its native conversation.",
236
+ "stopBeforeSettings": "Stop the current turn before changing its settings.",
237
+ "completedResponseNoReceipt": "The completed response has no current verified receipt.",
238
+ "completedResponseNoTurnReceipt": "The completed response has no exact native turn receipt.",
239
+ "completedClaudeNoToolEvidence": "The completed Claude response has no native tool-attempt evidence.",
240
+ "responseAssociationUnverified": "The native owner could not verify this response association.",
241
+ "responseOtherOperation": "This response already belongs to a different application operation.",
242
+ "completedResponseNoPlainReply": "This completed response does not own a plain reply.",
243
+ "completedReplyNoTarget": "The completed reply has no current plain authored target.",
244
+ "publishedReplyChanged": "The published reply target or text changed.",
245
+ "replyTargetUsed": "This plain reply target already has unassociated content or consumption.",
246
+ "operationResponseIdentity": "The operation has a different completed response identity.",
247
+ "plainReplyPublished": "This completed response already published its plain reply.",
248
+ "savedOperationChanged": "The saved response operation changed.",
249
+ "turnFinishedBeforeSend": "The native turn finished before this instruction was sent. Send it as a new message.",
250
+ "noActiveTurnToSteer": "There is no active native turn to steer. Send a new message.",
251
+ "briefingBeforeTerminal": "Send a chat message to deliver the saved continuity briefing before starting a native terminal or goal.",
252
+ "briefingBeforeGoal": "Send a message to catch this AI up before starting or resuming its goal.",
253
+ "briefingBeforeReplacement": "Deliver the previous replacement's briefing before replacing native history again.",
254
+ "historyExclusionsInvalid": "Native history exclusions require a server-owned completed application wake and exact message IDs.",
255
+ "messageContentRequired": "Bounded text or attachment IDs and a stable messageId are required.",
256
+ "steerNotBoolean": "steer must be a boolean.",
257
+ "applicationDataInvalid": "Application data must be a JSON object within the conversation input limit.",
258
+ "goalMessageIdRequired": "A stable messageId is required for this goal command.",
259
+ "goalConversationChanged": "The conversation changed before this goal command was sent.",
260
+ "goalNeedsNativeConversation": "This command requires an existing native conversation.",
261
+ "messageIdExclusionsConflict": "This messageId already belongs to different native history exclusions.",
262
+ "messageIdContentConflict": "This messageId already belongs to different content.",
263
+ "completedClaudeNotSteerable": "Completed Claude responses cannot share a native steering turn. Wait for the response or stop it.",
264
+ "replacementPendingBeforeSend": "Finish the pending native replacement before sending another message.",
265
+ "replacementPendingBeforeRecovery": "Finish the native replacement before recovering output.",
266
+ "replacementUnfinished": "Retry the unfinished native replacement before starting another one.",
267
+ "replacementPendingBeforeSettings": "Finish the pending native replacement before changing settings.",
268
+ "retainedDeliveryUncertain": "This message has uncertain delivery in a retained conversation. Select that engine and check its receipt before submitting it again.",
269
+ "previousInstructionUnchecked": "Check delivery of the previous instruction before preparing another completed response.",
270
+ "previousSubmissionUncertain": "The previous submission has uncertain delivery. It will not be resent automatically.",
271
+ "goalCommandDeliveryUncertain": "Check the uncertain command's delivery before changing the goal.",
272
+ "earlierGoalCommandUnresolved": "A goal command from an earlier runtime has unresolved delivery. Inspect its saved state before changing the goal.",
273
+ "pendingDeliveryBeforeReplace": "Resolve pending delivery before replacing native history. Another engine may be selected while its receipt stays pending.",
274
+ "deliveryUncertainBeforeSettings": "Resolve uncertain delivery before changing settings.",
275
+ "goalActionRequired": "A goal action and current conversation segment are required.",
276
+ "goalObjectiveInvalid": "A bounded objective and optional positive token budget are required.",
277
+ "goalToResumeRequired": "Select the goal to resume.",
278
+ "goalToStopRequired": "Select the goal to stop.",
279
+ "replacementRequestInvalid": "Replacement needs an operationId, exact predecessor segment, and an engine-change, model-change or renewal reason.",
280
+ "replacementBriefingRequired": "Native replacement requires a continuity briefing.",
281
+ "predecessorChanged": "The native predecessor has changed. Read the conversation before replacing it.",
282
+ "replacementOperationConflict": "This replacement operationId already belongs to another request.",
283
+ "replacementChangedBeforeWrite": "The saved replacement changed before it could be written.",
284
+ "replacementChangedBeforeRelease": "The saved replacement changed before its binding was released.",
285
+ "predecessorChangedBeforeRelease": "The native predecessor identity changed before its binding was released.",
286
+ "predecessorIncomplete": "The native predecessor identity changed or is incomplete.",
287
+ "hostScopeMismatch": "This open conversation already belongs to another host scope. Dispose its handle before reopening it on the original host.",
288
+ "cleanupNeedsOriginalConversation": "Native cleanup requires its original bound conversation.",
289
+ "deliveryUnconfirmed": "Native delivery could not be confirmed.",
290
+ "messageNotSent": "This message was not sent. Review it before sending a new message.",
291
+ "attachmentIdsInvalid": "Attachments require at most {max} distinct, nonempty attachment IDs.",
292
+ "attachmentResolverIncomplete": "The attachment resolver must return a receipt for every requested file and bounded model content.",
293
+ "attachmentLocalFilesUnsupported": "This engine cannot accept local attachment files. Supply extracted text or supported image bytes.",
294
+ "attachmentReceiptInvalid": "Attachment receipts require the requested ID, a bounded fileName and a nonnegative size.",
295
+ "attachmentLocalFileInvalid": "Local attachment files require their exact requested receipt and an authorized absolute native path.",
296
+ "attachmentFormatUnsupported": "This engine cannot accept that attachment format. Supply extracted text or a supported image.",
297
+ "attachmentTextEmpty": "Attachment text must be nonempty.",
298
+ "attachmentBytesRequired": "Attachments require authorized bytes and a supported media type; remote URLs and paths are not accepted.",
299
+ "attachmentBytesExceeded": "Attachment content exceeds the configured byte limit for this request.",
300
+ "replacementRetryMismatch": "Replacement retry does not match the saved operation.",
301
+ "previousReplacementUnfinished": "Finish the previous native conversation replacement first.",
302
+ "previousReleaseUndoUnfinished": "An unfinished conversation Undo from a previous release blocks assistant work. Complete it using the previous release before upgrading.",
303
+ "pendingDeliveryBeforeContextReplace": "Finish pending delivery before replacing native context.",
304
+ "shutdownUnconfirmed": "Native conversation shutdown was not confirmed.",
305
+ "submissionInterrupted": "The previous submission was interrupted. Check delivery before submitting it again.",
306
+ "restartInterrupted": "The application restarted before this answer completed. The request was not replayed.",
307
+ "copiedInterrupted": "Copied into a stopped development environment. This request was not replayed.",
308
+ "operationResultUnsaved": "The application operation result could not be saved. Restore storage access and retry saving.",
309
+ "progressUnsaved": "Conversation progress could not be saved. Restore access to its storage before continuing.",
310
+ "requestTimedOut": "The conversation request exceeded its time limit.",
311
+ "workStopped": "Work stopped.",
312
+ "stoppedByUser": "Stopped by user.",
313
+ "apiHistoryLimit": "This conversation exceeds the configured API history limit. Start another conversation or increase the limit.",
314
+ "outputTokenLimit": "The model reached its output token limit before completing the answer. Increase maxOutputTokens in the conversation limits.",
315
+ "toolCallsUnconfirmed": "The model stream ended without confirming its application tool calls.",
316
+ "answerUnconfirmed": "The model stream ended without confirming a completed answer.",
317
+ "toolProgressLimit": "Application tool progress text exceeds the configured API limit.",
318
+ "finalReplyLimit": "The assistant exceeded the configured final reply limit.",
319
+ "historyBudgetExceeded": "Conversation updates exceed the configured history budget. Renew the context with a continuity briefing before continuing.",
320
+ "briefingBudgetExceeded": "The continuity briefing exceeds the configured history budget."
321
+ },
322
+ "claude": {
323
+ "goalChanged": "The Claude goal changed. Refresh before trying again.",
324
+ "goalTokenBudgetUnsupported": "Claude goals do not support a token budget.",
325
+ "goalBlockerReasonRequired": "An active Claude goal needs a blocker reason of up to 1,000 characters.",
326
+ "goalConditionRequired": "Enter a goal condition of up to 4,000 characters.",
327
+ "goalAlreadySet": "Cancel the existing goal before setting another.",
328
+ "goalActionUnknown": "Unknown Claude goal action.",
329
+ "compactWhileWorking": "Claude is still working. Wait for it to finish before freeing its context.",
330
+ "noActiveTurn": "Claude has no active turn for this message.",
331
+ "steeringUnavailable": "This Claude turn cannot accept steering now.",
332
+ "notConnected": "Claude Code is not connected.",
333
+ "accountStatusInvalid": "Claude Code returned an invalid account status."
334
+ },
335
+ "codex": {
336
+ "helperThreadUnavailable": "This low-cost assistant thread is no longer available. Start the background task again instead of reusing another assistant conversation.",
337
+ "helperOwnershipBlocked": "{applicationName} could not prove ownership of a persisted low-cost assistant thread.",
338
+ "threadDeleteUnavailable": "Codex app-server thread deletion is not available.",
339
+ "goalActionInvalid": "Choose set, pause, resume, or cancel.",
340
+ "goalObjectiveInvalid": "Enter a goal objective and an optional positive whole-number token budget.",
341
+ "goalConversationChanged": "The Codex conversation changed. Refresh the goal before trying again.",
342
+ "goalConversationStopped": "Resume or send a message to restore the stopped conversation before setting a goal.",
343
+ "goalChangedBeforeSet": "The Codex goal changed. Refresh it before setting a new goal.",
344
+ "goalChanged": "The Codex goal changed. Refresh it before trying again.",
345
+ "goalAlreadyStopped": "This goal is already stopped. Refresh its details.",
346
+ "goalStopUnconfirmed": "Codex has not yet confirmed a stop. Retry after the service has stopped.",
347
+ "goalNotResumable": "This goal cannot be resumed from its current status. Refresh its details.",
348
+ "stopUnverified": "Codex's stop could not be verified. Its runtime owner is unavailable.",
349
+ "turnNotReady": "The active assistant turn is not ready to accept this message yet.",
350
+ "messageEmpty": "Codex message is empty.",
351
+ "messageInputEmpty": "Codex message input is empty.",
352
+ "operationNotSteerable": "The active assistant operation cannot accept messages yet.",
353
+ "temporaryConversationBusy": "Temporary AI is already working on this conversation."
354
+ },
355
+ "provider": {
356
+ "notConfigured": "Assistant provider is not configured.",
357
+ "requestFailed": "Assistant provider request failed.",
358
+ "requestRejected": "Request failed."
359
+ },
360
+ "stream": {
361
+ "failed": "Assistant stream failed.",
362
+ "requestFailed": "Request failed."
363
+ }
364
+ },
365
+ "errors": {
366
+ "conversation_forbidden": "This conversation is not available to this identity.",
367
+ "conversation_storage_version": "This conversation needs its offline runtime-state upgrade before it can be opened. Its saved requests were not replayed or changed.",
368
+ "conversation_configuration_mismatch": "Use configure() to change a saved conversation's settings.",
369
+ "conversation_goal_stopped": "The goal command was stopped before delivery.",
370
+ "conversation_attachment_manifest_changed": "Authorized attachment paths changed after this instruction was prepared. Restore the original files or send a new message.",
371
+ "conversation_receipt_unavailable": "The native receipt has no stored authored message.",
372
+ "conversation_goal_unavailable": "The native goal is unavailable. Try reading its status again.",
373
+ "assistant_provider_invalid_response": "Assistant provider returned an invalid response payload.",
374
+ "assistant_opencode_connection_changing": "OpenCode is changing a connection. Retry after the connection change finishes.",
375
+ "assistant_opencode_connection_in_use": "Close the other OpenCode conversations that use this connection, then retry this connection change. The saved connection has not changed.",
376
+ "assistant_opencode_conversation_busy": "This conversation is still working.",
377
+ "assistant_opencode_key_verification_failed": "OpenCode rejected the API-key verification request.",
378
+ "assistant_opencode_turn_thread_mismatch": "The OpenCode predecessor history changed before handover generation.",
379
+ "assistant_opencode_turn_fresh_thread_required": "The renewed OpenCode conversation does not own the expected fresh native history.",
380
+ "assistant_opencode_turn_unrelated_history": "The successor OpenCode history contains unrelated conversation and cannot be used for renewal."
381
+ }
382
+ }
383
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant-core",
3
- "version": "0.1.242",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": "./src/client/index.js",
@@ -31,6 +31,7 @@
31
31
  "./testing/native-codex": "./src/testing/nativeCodex.js",
32
32
  "./testing/native-opencode": "./src/testing/nativeOpenCode.js",
33
33
  "./server/codex-client": "./src/server/conversation/codexClient.js",
34
- "./client/conversation-submit": "./src/client/conversation/submitText.js"
34
+ "./client/conversation-submit": "./src/client/conversation/submitText.js",
35
+ "./locales/en.json": "./locales/en.json"
35
36
  }
36
37
  }
@@ -0,0 +1,138 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0 - 2026-10-29
4
+
5
+ - Translation ready: every user-visible text is a message key with its English in `locales/en.json`, so an app translates it by supplying translation files only. With no translations, texts and behaviour are unchanged. See the guide "Translating a JSKIT app".
6
+
7
+ ### New message keys (90)
8
+
9
+ All keys in `locales/en.json` (exported as `./locales/en.json`) are new in this version.
10
+
11
+ <details><summary>Key list</summary>
12
+
13
+ - `jskit.assistant.runtime.authenticationRequired`
14
+ - `jskit.assistant.runtime.workspace.selectionRequired`
15
+ - `jskit.assistant.runtime.route.surfaceHeaderRequired`
16
+ - `jskit.assistant.runtime.route.notFound`
17
+ - `jskit.assistant.runtime.route.surfaceForbidden`
18
+ - `jskit.assistant.runtime.route.assistantNotFound`
19
+ - `jskit.assistant.runtime.connection.unavailable`
20
+ - `jskit.assistant.runtime.connection.selectionNotAllowed`
21
+ - `jskit.assistant.runtime.connection.applicationAi`
22
+ - `jskit.assistant.runtime.connection.applicationDefault`
23
+ - `jskit.assistant.runtime.provider.notConfigured`
24
+ - `jskit.assistant.runtime.conversation.notFound`
25
+ - `jskit.assistant.runtime.conversation.idInvalid`
26
+ - `jskit.assistant.runtime.conversation.createFailed`
27
+ - `jskit.assistant.runtime.conversation.assistantLabel`
28
+ - `jskit.assistant.runtime.conversation.welcomeMessage`
29
+ - `jskit.assistant.runtime.conversation.placeholder`
30
+ - `jskit.assistant.runtime.conversation.startedAtUnknown`
31
+ - `jskit.assistant.runtime.conversation.status.active`
32
+ - `jskit.assistant.runtime.conversation.status.completed`
33
+ - `jskit.assistant.runtime.conversation.status.failed`
34
+ - `jskit.assistant.runtime.conversation.status.aborted`
35
+ - `jskit.assistant.runtime.conversation.status.unknown`
36
+ - `jskit.assistant.runtime.request.messageIdInvalid`
37
+ - `jskit.assistant.runtime.request.inputRequired`
38
+ - `jskit.assistant.runtime.request.messageIdConflict`
39
+ - `jskit.assistant.runtime.request.unconfirmed`
40
+ - `jskit.assistant.runtime.request.failed`
41
+ - `jskit.assistant.runtime.request.cancelled`
42
+ - `jskit.assistant.runtime.request.noOutput`
43
+ - `jskit.assistant.runtime.request.notConfirmed`
44
+ - `jskit.assistant.runtime.attachments.invalidIds`
45
+ - `jskit.assistant.runtime.attachments.notConfigured`
46
+ - `jskit.assistant.runtime.attachments.noLongerAccepted`
47
+ - `jskit.assistant.runtime.attachments.clearFailed`
48
+ - `jskit.assistant.runtime.subscription.idRequired`
49
+ - `jskit.assistant.runtime.subscription.failed`
50
+ - `jskit.assistant.runtime.history.refreshFailed`
51
+ - `jskit.assistant.runtime.history.loadFailed`
52
+ - `jskit.assistant.runtime.history.listFailed`
53
+ - `jskit.assistant.runtime.history.conversationLoadFailed`
54
+ - `jskit.assistant.runtime.accessDenied`
55
+ - `jskit.assistant.runtime.delivery.waitingForStep`
56
+ - `jskit.assistant.runtime.delivery.unconfirmedBeforeClose`
57
+ - `jskit.assistant.runtime.delivery.stillUnknown`
58
+ - `jskit.assistant.runtime.delivery.checkFailed`
59
+ - `jskit.assistant.runtime.delivery.notConfirmed`
60
+ - `jskit.assistant.runtime.goal.budgetsUnsupported`
61
+ - `jskit.assistant.runtime.goal.changeFailed`
62
+ - `jskit.assistant.runtime.goal.unavailable`
63
+ - `jskit.assistant.runtime.goal.resumeMessage`
64
+ - `jskit.assistant.runtime.goal.cancelMessage`
65
+ - `jskit.assistant.runtime.composer.questionsPlaceholder`
66
+ - `jskit.assistant.runtime.composer.choicesPlaceholder`
67
+ - `jskit.assistant.runtime.composer.questionsHint`
68
+ - `jskit.assistant.runtime.tool.progress`
69
+ - `jskit.assistant.runtime.tool.status.pending`
70
+ - `jskit.assistant.runtime.tool.status.done`
71
+ - `jskit.assistant.runtime.tool.status.failed`
72
+ - `jskit.assistant.runtime.tool.status.interrupted`
73
+ - `jskit.assistant.runtime.surface.newConversation`
74
+ - `jskit.assistant.runtime.surface.conversations`
75
+ - `jskit.assistant.runtime.surface.activity`
76
+ - `jskit.assistant.runtime.surface.toolActivity`
77
+ - `jskit.assistant.runtime.surface.conversation`
78
+ - `jskit.assistant.runtime.surface.responseCanceled`
79
+ - `jskit.assistant.runtime.surface.startNewConversation`
80
+ - `jskit.assistant.runtime.surface.refresh`
81
+ - `jskit.assistant.runtime.surface.close`
82
+ - `jskit.assistant.runtime.surface.loadingConversationsLabel`
83
+ - `jskit.assistant.runtime.surface.loadingConversations`
84
+ - `jskit.assistant.runtime.surface.savedConversations`
85
+ - `jskit.assistant.runtime.surface.noSavedConversations`
86
+ - `jskit.assistant.runtime.surface.untitledConversation`
87
+ - `jskit.assistant.runtime.surface.loadOlderConversations`
88
+ - `jskit.assistant.runtime.surface.messageCount`
89
+ - `jskit.assistant.runtime.viewer.you`
90
+ - `jskit.assistant.runtime.settings.title`
91
+ - `jskit.assistant.runtime.settings.noPermission`
92
+ - `jskit.assistant.runtime.settings.save`
93
+ - `jskit.assistant.runtime.settings.systemPrompt`
94
+ - `jskit.assistant.runtime.settings.subtitle`
95
+ - `jskit.assistant.runtime.settings.subtitleWorkspace`
96
+ - `jskit.assistant.runtime.settings.subtitleSurface`
97
+ - `jskit.assistant.runtime.settings.notConfigured`
98
+ - `jskit.assistant.runtime.settings.workspaceUnavailable`
99
+ - `jskit.assistant.runtime.settings.selectWorkspace`
100
+ - `jskit.assistant.runtime.settings.updateFailed`
101
+ - `jskit.errors.assistant_history_inspection_required`
102
+ - `jskit.errors.assistant_subscription_transport_failed`
103
+
104
+ </details>
105
+
106
+ ### Codes (27)
107
+
108
+ Error, field-error and message codes this package sends, with their English. Undotted codes kept their existing values and render from `jskit.errors.<code>`.
109
+
110
+ | Code | English |
111
+ | --- | --- |
112
+ | `assistant.runtime.authenticationRequired` | Authentication required. |
113
+ | `assistant.runtime.workspace.selectionRequired` | Workspace selection required. |
114
+ | `assistant.runtime.route.surfaceHeaderRequired` | Assistant surface header x-jskit-surface is required. |
115
+ | `assistant.runtime.route.notFound` | Assistant route not found. |
116
+ | `assistant.runtime.route.surfaceForbidden` | Assistant route is not available on this surface. |
117
+ | `assistant.runtime.route.assistantNotFound` | Assistant not found. |
118
+ | `assistant.runtime.connection.unavailable` | This AI connection is not available in this assistant. |
119
+ | `assistant.runtime.connection.selectionNotAllowed` | This assistant does not allow selecting an AI connection. |
120
+ | `assistant.runtime.provider.notConfigured` | Assistant provider is not configured. |
121
+ | `assistant.runtime.conversation.notFound` | Conversation not found. |
122
+ | `assistant.runtime.conversation.idInvalid` | conversationId must be a valid record id. |
123
+ | `assistant.runtime.conversation.createFailed` | Assistant failed to create conversation. |
124
+ | `assistant.runtime.request.messageIdInvalid` | messageId is required and must be at most 128 characters. |
125
+ | `assistant.runtime.request.inputRequired` | input is required. |
126
+ | `assistant.runtime.request.messageIdConflict` | This message ID belongs to a different request. |
127
+ | `assistant.runtime.request.unconfirmed` | This message was already submitted. Its completion is not confirmed; check conversation history before sending new work. |
128
+ | `assistant.runtime.request.failed` | Assistant request failed. |
129
+ | `assistant.runtime.request.cancelled` | Assistant request was cancelled. |
130
+ | `assistant.runtime.request.noOutput` | Assistant returned no output. |
131
+ | `assistant.runtime.attachments.invalidIds` | Invalid attachment identifiers. |
132
+ | `assistant.runtime.attachments.notConfigured` | File attachments are not configured for this assistant. |
133
+ | `assistant.runtime.subscription.idRequired` | A conversation subscription id is required. |
134
+ | `assistant.runtime.subscription.failed` | Conversation subscription failed. |
135
+ | `assistant.runtime.history.refreshFailed` | Older conversation history could not be refreshed. Reload chat to try again. |
136
+ | `assistant.runtime.accessDenied` | Access denied. |
137
+ | `assistant_history_inspection_required` | This conversation has ambiguous historical SQL rows. Inspect the reported rows offline before using the common runtime; no history was changed. |
138
+ | `assistant_subscription_transport_failed` | Chat updates could not reconnect. Retrying automatically; Reload chat to try now. |
@@ -34,7 +34,8 @@ modes) and `packages/agent-docs/site/guide/app-extras/assistant-conversation.md`
34
34
  With the existing realtime diagnostic option (`JSKIT_REALTIME_DEBUG=1`, or
35
35
  `config.realtime.debug=true`), conversation subscriptions emit one `pending`
36
36
  warning if admission/snapshot reading has not returned within the client's
37
- 10-second acknowledgement budget. The warning names the current stage and the
37
+ 10-second budget, after which the client shows a loading notice and keeps waiting
38
+ (it gives up only after 120 seconds). The warning names the current stage and the
38
39
  server-generated epoch; a conversation identity is included only after its
39
40
  successful authorized open. Observer release also records the current stage and
40
41
  reason. While diagnostics are enabled, every stage transition is recorded at