@oar-sh/oar 0.9.1 → 0.9.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 (146) hide show
  1. package/.github/extensions/web-relay/extension.mjs +0 -3
  2. package/.github/extensions/web-relay/polling/heartbeat.mjs +2 -55
  3. package/.github/extensions/web-relay/polling/polling-loop.mjs +0 -1
  4. package/.github/extensions/web-relay/runtime/api-client.mjs +2 -34
  5. package/.github/extensions/web-relay/runtime/config-loader.mjs +2 -104
  6. package/.github/extensions/web-relay/runtime/send-and-wait-errors.mjs +2 -170
  7. package/.github/extensions/web-relay/runtime/session-io.mjs +1 -71
  8. package/.github/extensions/web-relay/runtime/worker-websocket-link.mjs +2 -325
  9. package/.github/extensions/web-relay/skills/prompt-context.mjs +2 -160
  10. package/CHANGELOG.md +269 -0
  11. package/README.md +407 -424
  12. package/bin/oar.js +142 -11
  13. package/package.json +8 -4
  14. package/server/README.md +59 -22
  15. package/server/claude-worker/claude-sdk-adapter.mjs +7 -2
  16. package/server/claude-worker/claude-session-process.mjs +1013 -45
  17. package/server/claude-worker/claude-session-worker.mjs +54 -9
  18. package/server/claude-worker/claude-turn-publisher.mjs +110 -19
  19. package/server/claude-worker/claude-worker-link-wiring.mjs +9 -0
  20. package/server/copilot-sdk-runtime.mjs +12 -3
  21. package/server/copilot-worker/copilot-ask-user-tool.mjs +89 -0
  22. package/server/copilot-worker/copilot-attachments.mjs +35 -2
  23. package/server/copilot-worker/copilot-continuation-signals.mjs +55 -0
  24. package/server/copilot-worker/copilot-model-switch.mjs +425 -0
  25. package/server/copilot-worker/copilot-prompt-context.mjs +20 -8
  26. package/server/copilot-worker/copilot-question-bridge.mjs +129 -16
  27. package/server/copilot-worker/copilot-sdk-adapter.mjs +59 -11
  28. package/server/copilot-worker/copilot-sdk-event-normalizer.mjs +136 -12
  29. package/server/copilot-worker/copilot-sdk-session-process.mjs +2753 -527
  30. package/server/copilot-worker/copilot-sdk-session-worker.mjs +94 -25
  31. package/server/cursor-worker/cursor-session-worker.mjs +5 -5
  32. package/server/cursor-worker/cursor-turn-runner.mjs +50 -4
  33. package/server/db-schema.mjs +61 -1
  34. package/server/features.mjs +155 -41
  35. package/server/grok-worker/grok-session-worker.mjs +5 -5
  36. package/server/grok-worker/grok-turn-runner.mjs +45 -4
  37. package/server/migrations/0004-steer-settle-markers.mjs +119 -0
  38. package/server/public/app/annotate-core.mjs +181 -0
  39. package/server/public/app/annotate-editor.js +617 -0
  40. package/server/public/app/api-client.js +86 -5
  41. package/server/public/app/ask-user-view.js +102 -13
  42. package/server/public/app/attachments-view.js +172 -3
  43. package/server/public/app/background-task-timeout-options.mjs +9 -0
  44. package/server/public/app/background-tasks-view.mjs +34 -19
  45. package/server/public/app/bootstrap.js +153 -69
  46. package/server/public/app/composer-control-state.mjs +52 -34
  47. package/server/public/app/context-tier-options.mjs +24 -4
  48. package/server/public/app/conversation-draft-sync.mjs +187 -0
  49. package/server/public/app/conversation-list-filter.mjs +86 -0
  50. package/server/public/app/conversation-preferences.mjs +47 -10
  51. package/server/public/app/conversation-provider-indicator.mjs +8 -0
  52. package/server/public/app/conversation-view.js +1032 -218
  53. package/server/public/app/emoji-view.js +2 -0
  54. package/server/public/app/font-scaling.js +4 -37
  55. package/server/public/app/journal-view.js +190 -24
  56. package/server/public/app/model-selector-options.mjs +185 -1
  57. package/server/public/app/new-conversation-model-choice.mjs +29 -9
  58. package/server/public/app/pwa-install.js +64 -136
  59. package/server/public/app/question-multi-select.mjs +52 -0
  60. package/server/public/app/reasoning-effort-labels.mjs +13 -3
  61. package/server/public/app/relay-prompt-sanitizer.mjs +26 -3
  62. package/server/public/app/router.js +120 -11
  63. package/server/public/app/settings-modal.js +225 -20
  64. package/server/public/app/settings-tabs.js +1 -1
  65. package/server/public/app/socket-handlers.js +47 -4
  66. package/server/public/app/steered-turn-merge.mjs +100 -0
  67. package/server/public/app/store.js +159 -16
  68. package/server/public/app/sync-outbox.mjs +16 -8
  69. package/server/public/app/tool-activity-emoji.mjs +36 -0
  70. package/server/public/app/transcript-viewport-anchor.mjs +210 -0
  71. package/server/public/app/update-ui.js +194 -0
  72. package/server/public/index.html +483 -24
  73. package/server/public/sw.js +7 -0
  74. package/server/relay-tools.md +2 -0
  75. package/server/relay.mjs +23 -21
  76. package/server/repositories/message-repository.mjs +78 -21
  77. package/server/repositories/question-repository.mjs +19 -1
  78. package/server/repositories/session-repository.mjs +7 -31
  79. package/server/routes/ask-user-routes.mjs +10 -0
  80. package/server/routes/messages-routes.mjs +689 -159
  81. package/server/routes/sessions-routes.mjs +574 -80
  82. package/server/server-runtime.mjs +393 -925
  83. package/server/services/claude-auth-service.mjs +7 -1
  84. package/server/services/cli-install-service.mjs +8 -27
  85. package/server/services/cli-process-runner.mjs +30 -0
  86. package/server/services/copilot-model-discovery-service.mjs +202 -0
  87. package/server/services/data-dir-resolution.mjs +47 -0
  88. package/server/services/grok-auth-service.mjs +9 -1
  89. package/server/services/live-turn-picker.mjs +47 -0
  90. package/server/services/model-variant-catalog-service.mjs +1183 -0
  91. package/server/services/oar-cli-helpers.mjs +6 -2
  92. package/server/services/relay-prompt-sanitizer.mjs +30 -3
  93. package/server/services/relay-question-context.mjs +46 -0
  94. package/server/services/sdk-session-import-service.mjs +144 -16
  95. package/server/services/sdk-session-sync-service.mjs +84 -27
  96. package/server/services/session-worker-registry-service.mjs +116 -3
  97. package/server/services/session-worker-supervisor-service.mjs +7 -1
  98. package/server/services/session-worker-websocket-service.mjs +119 -24
  99. package/server/services/status-event-service.mjs +8 -2
  100. package/server/services/steer-resend.mjs +45 -0
  101. package/server/services/update-check-service.mjs +220 -0
  102. package/server/services/update-install-service.mjs +279 -0
  103. package/server/services/windows-autostart-service.mjs +42 -6
  104. package/server/services/windows-boot-autostart-service.mjs +487 -0
  105. package/shared/ask-user-bridge.mjs +37 -5
  106. package/shared/background-task-timeout.mjs +12 -4
  107. package/shared/claude-model-catalog.mjs +49 -0
  108. package/shared/context-window-fallbacks.mjs +1 -0
  109. package/shared/control-poller.mjs +4 -1
  110. package/shared/copilot-model-order.mjs +182 -0
  111. package/shared/media-embed-instructions.mjs +35 -0
  112. package/shared/model-descriptors.mjs +181 -30
  113. package/shared/model-id.mjs +6 -0
  114. package/shared/pwa-app-name.mjs +44 -0
  115. package/shared/question-multi-select.mjs +16 -0
  116. package/shared/relay-stop-failure.mjs +15 -0
  117. package/shared/slash-command-guard.mjs +76 -0
  118. package/shared/steer-note.mjs +66 -0
  119. package/shared/steer-settle-failure.mjs +89 -0
  120. package/shared/steer-settle-markers.mjs +18 -0
  121. package/shared/update-semver.mjs +50 -0
  122. package/shared/worker-crash-guard.mjs +40 -14
  123. package/shared/worker-runtime/api-client.mjs +34 -0
  124. package/shared/worker-runtime/config-loader.mjs +104 -0
  125. package/shared/worker-runtime/heartbeat.mjs +109 -0
  126. package/shared/worker-runtime/prompt-context.mjs +160 -0
  127. package/shared/worker-runtime/runner-link-wiring.mjs +44 -0
  128. package/shared/worker-runtime/send-and-wait-errors.mjs +170 -0
  129. package/shared/worker-runtime/worker-websocket-link.mjs +436 -0
  130. package/server/claude-worker/claude-session-test-harness.mjs +0 -236
  131. package/server/claude-worker/fixtures/workflow-run-record.json +0 -1
  132. package/server/copilot-worker/copilot-sdk-test-harness.mjs +0 -329
  133. package/server/copilot-worker/fixtures/abort-turn.json +0 -588
  134. package/server/copilot-worker/fixtures/ask-user-turn.json +0 -1154
  135. package/server/copilot-worker/fixtures/background-timer-continuation.json +0 -445
  136. package/server/copilot-worker/fixtures/background-timer-turn.json +0 -497
  137. package/server/copilot-worker/fixtures/happy-turn.json +0 -566
  138. package/server/copilot-worker/fixtures/quota-turn.json +0 -647
  139. package/server/copilot-worker/fixtures/reasoning-turn.json +0 -625
  140. package/server/copilot-worker/fixtures/resume-turn.json +0 -700
  141. package/server/copilot-worker/fixtures/subagent-turn.json +0 -1378
  142. package/server/copilot-worker/fixtures/tool-permission-turn.json +0 -1293
  143. package/server/routes/messages-routes-test-harness.mjs +0 -111
  144. package/server/services/fixtures/claude-auth-stub.sh +0 -62
  145. package/server/services/fixtures/cli-install-stub.sh +0 -75
  146. package/server/services/fixtures/grok-stub.sh +0 -86
@@ -1,647 +0,0 @@
1
- [
2
- {
3
- "type": "session.start",
4
- "data": {
5
- "sessionId": "cfbfe9c2-2bcc-4288-8732-1a7016230285",
6
- "version": 1,
7
- "producer": "copilot-agent",
8
- "copilotVersion": "0.0.0",
9
- "startTime": "2026-08-31T09:19:57.338Z",
10
- "selectedModel": "gpt-5.4-mini",
11
- "contextTier": null,
12
- "context": {
13
- "cwd": "/tmp/relay-fixture-workspace"
14
- },
15
- "remoteSteerable": false,
16
- "alreadyInUse": false
17
- },
18
- "id": "292e9a9d-151e-4cba-af51-b9765007c9ca",
19
- "timestamp": "2026-08-31T09:19:57.350Z",
20
- "parentId": null
21
- },
22
- {
23
- "type": "pending_messages.modified",
24
- "data": {},
25
- "ephemeral": true,
26
- "id": "e943fc25-2e19-43ed-be74-1aab55306ba2",
27
- "timestamp": "2026-08-31T09:19:57.924Z",
28
- "parentId": "292e9a9d-151e-4cba-af51-b9765007c9ca"
29
- },
30
- {
31
- "type": "pending_messages.modified",
32
- "data": {},
33
- "ephemeral": true,
34
- "id": "af5716f4-4753-466e-b8e1-b85efb173a1c",
35
- "timestamp": "2026-08-31T09:19:57.927Z",
36
- "parentId": "292e9a9d-151e-4cba-af51-b9765007c9ca"
37
- },
38
- {
39
- "type": "session.title_changed",
40
- "data": {
41
- "title": "Reply with exactly: SPIKE_OK"
42
- },
43
- "ephemeral": true,
44
- "id": "e0c69cd4-4c51-46be-8b5a-1133e1765e3e",
45
- "timestamp": "2026-08-31T09:19:57.929Z",
46
- "parentId": "292e9a9d-151e-4cba-af51-b9765007c9ca"
47
- },
48
- {
49
- "type": "session.mcp_server_status_changed",
50
- "data": {
51
- "serverName": "github-mcp-server",
52
- "status": "pending"
53
- },
54
- "ephemeral": true,
55
- "id": "a3409b34-2c8d-47db-953e-ceaa4b003dac",
56
- "timestamp": "2026-08-31T09:19:57.950Z",
57
- "parentId": "292e9a9d-151e-4cba-af51-b9765007c9ca"
58
- },
59
- {
60
- "type": "session.mcp_server_status_changed",
61
- "data": {
62
- "serverName": "github-mcp-server",
63
- "status": "connected"
64
- },
65
- "ephemeral": true,
66
- "id": "5f6c4bcb-06a4-4ceb-976d-560776acad64",
67
- "timestamp": "2026-08-31T09:19:58.282Z",
68
- "parentId": "292e9a9d-151e-4cba-af51-b9765007c9ca"
69
- },
70
- {
71
- "type": "session.mcp_servers_loaded",
72
- "data": {
73
- "servers": [
74
- {
75
- "name": "github-mcp-server",
76
- "status": "connected",
77
- "source": "builtin"
78
- }
79
- ]
80
- },
81
- "ephemeral": true,
82
- "id": "382d5f71-ebec-4ebd-ae93-eb9d665cc817",
83
- "timestamp": "2026-08-31T09:19:58.283Z",
84
- "parentId": "292e9a9d-151e-4cba-af51-b9765007c9ca"
85
- },
86
- {
87
- "type": "session.tools_updated",
88
- "data": {
89
- "model": "gpt-5.4-mini"
90
- },
91
- "ephemeral": true,
92
- "id": "86d388e6-983e-4f5e-9533-ce85a79d3f35",
93
- "timestamp": "2026-08-31T09:19:58.550Z",
94
- "parentId": "292e9a9d-151e-4cba-af51-b9765007c9ca"
95
- },
96
- {
97
- "type": "user.message",
98
- "data": {
99
- "content": "Reply with exactly: SPIKE_OK",
100
- "transformedContent": "<current_datetime>2026-08-31T09:19:58.551+00:00</current_datetime>\n\nReply with exactly: SPIKE_OK",
101
- "supportedNativeDocumentMimeTypes": [],
102
- "delivery": "idle",
103
- "interactionId": "60012371-4417-49c5-ba47-6acfdc1d7ef4",
104
- "turnId": "0",
105
- "parentAgentTaskId": "0b255c6c-fe4c-4f07-9125-b40d1113e50c"
106
- },
107
- "id": "e896df04-78f0-4925-8a20-9df1570217e7",
108
- "timestamp": "2026-08-31T09:19:58.551Z",
109
- "parentId": "292e9a9d-151e-4cba-af51-b9765007c9ca"
110
- },
111
- {
112
- "type": "model.turn_started",
113
- "data": {
114
- "kind": "turn_started",
115
- "model": "gpt-5.4-mini",
116
- "modelInfo": {
117
- "billing": {
118
- "auto_discount": 0.3,
119
- "restricted_to": [
120
- "pro",
121
- "pro_plus",
122
- "individual_trial",
123
- "edu",
124
- "business",
125
- "enterprise",
126
- "max"
127
- ],
128
- "token_prices": {
129
- "batch_size": 1000000,
130
- "default": {
131
- "cache_read_price": 7.5,
132
- "cache_write_price": 0,
133
- "input_price": 75,
134
- "max_prompt_tokens": 272000,
135
- "output_price": 450
136
- }
137
- }
138
- },
139
- "capabilities": {
140
- "family": "gpt-5.4-mini",
141
- "limits": {
142
- "max_context_window_tokens": 400000,
143
- "max_output_tokens": 128000,
144
- "max_prompt_tokens": 272000,
145
- "vision": {
146
- "max_prompt_image_size": 3145728,
147
- "max_prompt_images": 1,
148
- "supported_media_types": [
149
- "image/jpeg",
150
- "image/png",
151
- "image/webp",
152
- "image/gif",
153
- "application/pdf"
154
- ]
155
- }
156
- },
157
- "object": "model_capabilities",
158
- "supports": {
159
- "parallel_tool_calls": true,
160
- "reasoning_effort": [
161
- "none",
162
- "low",
163
- "medium",
164
- "high",
165
- "xhigh"
166
- ],
167
- "streaming": true,
168
- "structured_outputs": true,
169
- "tool_calls": true,
170
- "vision": true,
171
- "adaptive_thinking": "unsupported"
172
- },
173
- "tokenizer": "o200k_base",
174
- "type": "chat"
175
- },
176
- "id": "gpt-5.4-mini",
177
- "is_chat_default": false,
178
- "is_chat_fallback": false,
179
- "model_picker_category": "lightweight",
180
- "model_picker_enabled": true,
181
- "model_picker_price_category": "low",
182
- "name": "GPT-5.4 mini",
183
- "object": "model",
184
- "policy": {
185
- "state": "enabled",
186
- "terms": "Enable access to the latest GPT-5.4 mini model from OpenAI. [Learn more about how GitHub Copilot serves GPT-5.4 mini](https://gh.io/copilot-openai)."
187
- },
188
- "preview": false,
189
- "supported_endpoints": [
190
- "/responses",
191
- "ws:/responses"
192
- ],
193
- "vendor": "OpenAI",
194
- "version": "gpt-5.4-mini",
195
- "warning_messages": [
196
- {
197
- "code": "model_degraded_github",
198
- "message": "GPT-5.4 mini is currently experiencing issues. We are actively working to resolve the issue. In the meantime, you might want to use a different model."
199
- }
200
- ]
201
- },
202
- "turn": 0,
203
- "timestampMs": 1788167998555
204
- },
205
- "ephemeral": true,
206
- "id": "1745da3d-388f-4ad5-9614-7e668e9e7a66",
207
- "timestamp": "2026-08-31T09:19:58.555Z",
208
- "parentId": "b1c32be5-9368-423f-aec9-e896a1b3ef12"
209
- },
210
- {
211
- "type": "assistant.turn_start",
212
- "data": {
213
- "turnId": "0",
214
- "interactionId": "60012371-4417-49c5-ba47-6acfdc1d7ef4"
215
- },
216
- "id": "e5a21d39-3682-4d6f-af7f-355bd4f9e591",
217
- "timestamp": "2026-08-31T09:19:58.555Z",
218
- "parentId": "b1c32be5-9368-423f-aec9-e896a1b3ef12"
219
- },
220
- {
221
- "type": "session.usage_info",
222
- "ephemeral": true,
223
- "data": {
224
- "tokenLimit": 272000,
225
- "currentTokens": 14698,
226
- "messagesLength": 2,
227
- "systemTokens": 6861,
228
- "conversationTokens": 37,
229
- "toolDefinitionsTokens": 7800,
230
- "isInitial": true
231
- },
232
- "id": "6a6cf80d-1f4a-4b0f-8cde-c3cf42b6c1c2",
233
- "timestamp": "2026-08-31T09:19:58.575Z",
234
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
235
- },
236
- {
237
- "type": "model.call_start",
238
- "data": {
239
- "turnId": "0",
240
- "model": "gpt-5.4-mini"
241
- },
242
- "ephemeral": true,
243
- "id": "ea58064b-d35a-4dae-9d1b-989290f6402e",
244
- "timestamp": "2026-08-31T09:19:58.579Z",
245
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
246
- },
247
- {
248
- "type": "model.model_call_started",
249
- "data": {
250
- "kind": "model_call_started",
251
- "model": "gpt-5.4-mini",
252
- "modelInfo": {
253
- "billing": {
254
- "auto_discount": 0.3,
255
- "restricted_to": [
256
- "pro",
257
- "pro_plus",
258
- "individual_trial",
259
- "edu",
260
- "business",
261
- "enterprise",
262
- "max"
263
- ],
264
- "token_prices": {
265
- "batch_size": 1000000,
266
- "default": {
267
- "cache_read_price": 7.5,
268
- "cache_write_price": 0,
269
- "input_price": 75,
270
- "max_prompt_tokens": 272000,
271
- "output_price": 450
272
- }
273
- }
274
- },
275
- "capabilities": {
276
- "family": "gpt-5.4-mini",
277
- "limits": {
278
- "max_context_window_tokens": 400000,
279
- "max_output_tokens": 128000,
280
- "max_prompt_tokens": 272000,
281
- "vision": {
282
- "max_prompt_image_size": 3145728,
283
- "max_prompt_images": 1,
284
- "supported_media_types": [
285
- "image/jpeg",
286
- "image/png",
287
- "image/webp",
288
- "image/gif",
289
- "application/pdf"
290
- ]
291
- }
292
- },
293
- "object": "model_capabilities",
294
- "supports": {
295
- "parallel_tool_calls": true,
296
- "reasoning_effort": [
297
- "none",
298
- "low",
299
- "medium",
300
- "high",
301
- "xhigh"
302
- ],
303
- "streaming": true,
304
- "structured_outputs": true,
305
- "tool_calls": true,
306
- "vision": true,
307
- "adaptive_thinking": "unsupported"
308
- },
309
- "tokenizer": "o200k_base",
310
- "type": "chat"
311
- },
312
- "id": "gpt-5.4-mini",
313
- "is_chat_default": false,
314
- "is_chat_fallback": false,
315
- "model_picker_category": "lightweight",
316
- "model_picker_enabled": true,
317
- "model_picker_price_category": "low",
318
- "name": "GPT-5.4 mini",
319
- "object": "model",
320
- "policy": {
321
- "state": "enabled",
322
- "terms": "Enable access to the latest GPT-5.4 mini model from OpenAI. [Learn more about how GitHub Copilot serves GPT-5.4 mini](https://gh.io/copilot-openai)."
323
- },
324
- "preview": false,
325
- "supported_endpoints": [
326
- "/responses",
327
- "ws:/responses"
328
- ],
329
- "vendor": "OpenAI",
330
- "version": "gpt-5.4-mini",
331
- "warning_messages": [
332
- {
333
- "code": "model_degraded_github",
334
- "message": "GPT-5.4 mini is currently experiencing issues. We are actively working to resolve the issue. In the meantime, you might want to use a different model."
335
- }
336
- ]
337
- },
338
- "turn": 0,
339
- "timestampMs": 1788167998579
340
- },
341
- "ephemeral": true,
342
- "id": "1fab6b71-4cf2-4dd9-b89b-11ef68e09606",
343
- "timestamp": "2026-08-31T09:19:58.579Z",
344
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
345
- },
346
- {
347
- "type": "model.call_failure",
348
- "data": {
349
- "model": "gpt-5.4-mini",
350
- "apiCallId": "00000-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
351
- "providerCallId": "AAAA:BBBBBB:CCCCCCC:DDDDDDD:EEEEEEEE",
352
- "serviceRequestId": "11111111-2222-3333-4444-555555555555",
353
- "statusCode": 402,
354
- "durationMs": 990,
355
- "apiEndpoint": "/responses",
356
- "transport": "http",
357
- "failureKind": "api",
358
- "maxPromptTokens": 272000,
359
- "maxOutputTokens": 128000,
360
- "isByok": false,
361
- "isAuto": false,
362
- "reasoningEffort": "medium",
363
- "interactionType": "conversation-agent",
364
- "rte": true,
365
- "source": "top_level",
366
- "errorMessage": "{\"message\":\"You have exceeded your monthly quota\",\"code\":\"quota_exceeded\"}",
367
- "requestFingerprint": {
368
- "messageCount": 2,
369
- "toolResultMessageCount": 0,
370
- "toolCallCount": 0,
371
- "namelessToolCallCount": 0,
372
- "imagePartCount": 0,
373
- "imagePartsMissingMediaType": 0,
374
- "lastMessageRole": "user"
375
- },
376
- "quotaSnapshots": {
377
- "cfi_overage": {
378
- "isUnlimitedEntitlement": false,
379
- "entitlementRequests": 0,
380
- "usedRequests": 0,
381
- "usageAllowedWithExhaustedQuota": false,
382
- "overage": 10000,
383
- "overageAllowedWithExhaustedQuota": false,
384
- "remainingPercentage": 0,
385
- "resetDate": "2026-09-01T00:00:00Z"
386
- },
387
- "premium_interactions": {
388
- "isUnlimitedEntitlement": false,
389
- "entitlementRequests": 20000,
390
- "usedRequests": 20000,
391
- "usageAllowedWithExhaustedQuota": false,
392
- "overage": 10000,
393
- "overageAllowedWithExhaustedQuota": false,
394
- "remainingPercentage": 0,
395
- "overageEntitlement": 0,
396
- "resetDate": "2026-09-01T00:00:00Z"
397
- },
398
- "chat": {
399
- "isUnlimitedEntitlement": true,
400
- "entitlementRequests": -1,
401
- "usedRequests": 0,
402
- "usageAllowedWithExhaustedQuota": false,
403
- "overage": 0,
404
- "overageAllowedWithExhaustedQuota": false,
405
- "remainingPercentage": 100,
406
- "resetDate": "2026-09-01T00:00:00Z"
407
- },
408
- "completions": {
409
- "isUnlimitedEntitlement": true,
410
- "entitlementRequests": -1,
411
- "usedRequests": 0,
412
- "usageAllowedWithExhaustedQuota": false,
413
- "overage": 0,
414
- "overageAllowedWithExhaustedQuota": false,
415
- "remainingPercentage": 100,
416
- "resetDate": "2026-09-01T00:00:00Z"
417
- }
418
- }
419
- },
420
- "ephemeral": true,
421
- "id": "e547f25c-15aa-4123-9769-0dee7ea94ff3",
422
- "timestamp": "2026-08-31T09:19:59.571Z",
423
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
424
- },
425
- {
426
- "type": "model.model_call_failure",
427
- "data": {
428
- "kind": "model_call_failure",
429
- "turn": 0,
430
- "modelCallDurationMs": 990,
431
- "modelCall": {
432
- "model": "gpt-5.4-mini",
433
- "status": 402,
434
- "error": "{\"message\":\"You have exceeded your monthly quota\",\"code\":\"quota_exceeded\"}",
435
- "api_id": "00000-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
436
- "request_id": "AAAA:BBBBBB:CCCCCCC:DDDDDDD:EEEEEEEE",
437
- "api_endpoint": "/responses",
438
- "transport": "http",
439
- "failure_kind": "api",
440
- "service_request_id": "11111111-2222-3333-4444-555555555555",
441
- "rte": true
442
- },
443
- "rte": true,
444
- "quotaSnapshots": {
445
- "cfi_overage": {
446
- "isUnlimitedEntitlement": false,
447
- "entitlementRequests": 0,
448
- "usedRequests": 0,
449
- "usageAllowedWithExhaustedQuota": false,
450
- "overage": 10000,
451
- "overageAllowedWithExhaustedQuota": false,
452
- "remainingPercentage": 0,
453
- "resetDate": "2026-09-01T00:00:00Z"
454
- },
455
- "premium_interactions": {
456
- "isUnlimitedEntitlement": false,
457
- "entitlementRequests": 20000,
458
- "usedRequests": 20000,
459
- "usageAllowedWithExhaustedQuota": false,
460
- "overage": 10000,
461
- "overageAllowedWithExhaustedQuota": false,
462
- "remainingPercentage": 0,
463
- "resetDate": "2026-09-01T00:00:00Z",
464
- "overageEntitlement": 0
465
- },
466
- "chat": {
467
- "isUnlimitedEntitlement": true,
468
- "entitlementRequests": -1,
469
- "usedRequests": 0,
470
- "usageAllowedWithExhaustedQuota": false,
471
- "overage": 0,
472
- "overageAllowedWithExhaustedQuota": false,
473
- "remainingPercentage": 100,
474
- "resetDate": "2026-09-01T00:00:00Z"
475
- },
476
- "completions": {
477
- "isUnlimitedEntitlement": true,
478
- "entitlementRequests": -1,
479
- "usedRequests": 0,
480
- "usageAllowedWithExhaustedQuota": false,
481
- "overage": 0,
482
- "overageAllowedWithExhaustedQuota": false,
483
- "remainingPercentage": 100,
484
- "resetDate": "2026-09-01T00:00:00Z"
485
- }
486
- },
487
- "reasoningEffort": "medium"
488
- },
489
- "ephemeral": true,
490
- "id": "6ad70c7e-e933-4ab5-aa8b-8401d3b68f68",
491
- "timestamp": "2026-08-31T09:19:59.573Z",
492
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
493
- },
494
- {
495
- "type": "model.call_finished",
496
- "data": {
497
- "turnId": "0",
498
- "dispatchDurationMs": 990,
499
- "outcome": "error",
500
- "editClassifierVersion": 1,
501
- "interactionId": "60012371-4417-49c5-ba47-6acfdc1d7ef4"
502
- },
503
- "ephemeral": true,
504
- "id": "e09a9cbb-a8d5-4724-b85e-f78f705a7a37",
505
- "timestamp": "2026-08-31T09:19:59.573Z",
506
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
507
- },
508
- {
509
- "type": "model.turn_failed",
510
- "data": {
511
- "kind": "turn_failed",
512
- "model": "gpt-5.4-mini",
513
- "modelInfo": {
514
- "id": "gpt-5.4-mini"
515
- },
516
- "turn": 0,
517
- "timestampMs": 1788167999574,
518
- "error": "402 You have exceeded your monthly quota"
519
- },
520
- "ephemeral": true,
521
- "id": "ea549f0c-1cbd-4d40-b5da-8ce3ca2e2c4b",
522
- "timestamp": "2026-08-31T09:19:59.574Z",
523
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
524
- },
525
- {
526
- "type": "model.turn_ended",
527
- "data": {
528
- "kind": "turn_ended",
529
- "model": "gpt-5.4-mini",
530
- "modelInfo": {
531
- "billing": {
532
- "auto_discount": 0.3,
533
- "restricted_to": [
534
- "pro",
535
- "pro_plus",
536
- "individual_trial",
537
- "edu",
538
- "business",
539
- "enterprise",
540
- "max"
541
- ],
542
- "token_prices": {
543
- "batch_size": 1000000,
544
- "default": {
545
- "cache_read_price": 7.5,
546
- "cache_write_price": 0,
547
- "input_price": 75,
548
- "max_prompt_tokens": 272000,
549
- "output_price": 450
550
- }
551
- }
552
- },
553
- "capabilities": {
554
- "family": "gpt-5.4-mini",
555
- "limits": {
556
- "max_context_window_tokens": 400000,
557
- "max_output_tokens": 128000,
558
- "max_prompt_tokens": 272000,
559
- "vision": {
560
- "max_prompt_image_size": 3145728,
561
- "max_prompt_images": 1,
562
- "supported_media_types": [
563
- "image/jpeg",
564
- "image/png",
565
- "image/webp",
566
- "image/gif",
567
- "application/pdf"
568
- ]
569
- }
570
- },
571
- "object": "model_capabilities",
572
- "supports": {
573
- "parallel_tool_calls": true,
574
- "reasoning_effort": [
575
- "none",
576
- "low",
577
- "medium",
578
- "high",
579
- "xhigh"
580
- ],
581
- "streaming": true,
582
- "structured_outputs": true,
583
- "tool_calls": true,
584
- "vision": true,
585
- "adaptive_thinking": "unsupported"
586
- },
587
- "tokenizer": "o200k_base",
588
- "type": "chat"
589
- },
590
- "id": "gpt-5.4-mini",
591
- "is_chat_default": false,
592
- "is_chat_fallback": false,
593
- "model_picker_category": "lightweight",
594
- "model_picker_enabled": true,
595
- "model_picker_price_category": "low",
596
- "name": "GPT-5.4 mini",
597
- "object": "model",
598
- "policy": {
599
- "state": "enabled",
600
- "terms": "Enable access to the latest GPT-5.4 mini model from OpenAI. [Learn more about how GitHub Copilot serves GPT-5.4 mini](https://gh.io/copilot-openai)."
601
- },
602
- "preview": false,
603
- "supported_endpoints": [
604
- "/responses",
605
- "ws:/responses"
606
- ],
607
- "vendor": "OpenAI",
608
- "version": "gpt-5.4-mini",
609
- "warning_messages": [
610
- {
611
- "code": "model_degraded_github",
612
- "message": "GPT-5.4 mini is currently experiencing issues. We are actively working to resolve the issue. In the meantime, you might want to use a different model."
613
- }
614
- ]
615
- },
616
- "turn": 0,
617
- "timestampMs": 1788167999574
618
- },
619
- "ephemeral": true,
620
- "id": "31a73ca6-8f9c-4f91-9264-fd5c46329b4f",
621
- "timestamp": "2026-08-31T09:19:59.574Z",
622
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
623
- },
624
- {
625
- "type": "assistant.turn_end",
626
- "data": {
627
- "turnId": "0"
628
- },
629
- "id": "8d8df7f7-8ed4-423c-923d-533d60188007",
630
- "timestamp": "2026-08-31T09:19:59.575Z",
631
- "parentId": "e5a21d39-3682-4d6f-af7f-355bd4f9e591"
632
- },
633
- {
634
- "type": "session.error",
635
- "data": {
636
- "errorType": "quota",
637
- "message": "You have exceeded your monthly quota (Request ID: AAAA:BBBBBB:CCCCCCC:DDDDDDD:EEEEEEEE)",
638
- "statusCode": 402,
639
- "providerCallId": "AAAA:BBBBBB:CCCCCCC:DDDDDDD:EEEEEEEE",
640
- "serviceRequestId": "11111111-2222-3333-4444-555555555555",
641
- "errorCode": "quota_exceeded"
642
- },
643
- "id": "5be332ba-a0f1-4033-9c2f-fa59249d2a43",
644
- "timestamp": "2026-08-31T09:19:59.576Z",
645
- "parentId": "8d8df7f7-8ed4-423c-923d-533d60188007"
646
- }
647
- ]