@pasko70/pibo 1.9.2 → 1.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 (120) hide show
  1. package/README.md +183 -183
  2. package/context/codex-base-prompt.md +148 -148
  3. package/context/compute-worker.md +23 -23
  4. package/context/pibo-compaction-prompt.md +100 -100
  5. package/context/pibo-native-tooling.md +18 -18
  6. package/context/pibo-system-prompt.md +77 -77
  7. package/dist/apps/chat/agent-store.js +248 -248
  8. package/dist/apps/chat/data/project-service.js +168 -168
  9. package/dist/apps/chat/data/read-state-service.js +18 -18
  10. package/dist/apps/chat/data/session-query-service.js +25 -25
  11. package/dist/apps/chat/data/timeline-query-service.js +14 -14
  12. package/dist/apps/chat/static-assets.js +854 -854
  13. package/dist/apps/chat/workflow-persistence.js +255 -255
  14. package/dist/apps/chat-ui/assets/{dist-5GM30SQK.js → dist-5WHjqNrY.js} +1 -1
  15. package/dist/apps/chat-ui/assets/{dist-Cge8JklW.js → dist-BJBNSAIH.js} +1 -1
  16. package/dist/apps/chat-ui/assets/{dist-C-5u2QIS.js → dist-C3liNPZJ.js} +1 -1
  17. package/dist/apps/chat-ui/assets/{dist-BWbWIOcD.js → dist-CW6FHEaw.js} +1 -1
  18. package/dist/apps/chat-ui/assets/{dist-CjYtD7ZT.js → dist-CaNlj6v6.js} +1 -1
  19. package/dist/apps/chat-ui/assets/{dist-BYKMZlI0.js → dist-Cne74s6i.js} +1 -1
  20. package/dist/apps/chat-ui/assets/{dist-9lsp1UpA.js → dist-DvKZv20v.js} +1 -1
  21. package/dist/apps/chat-ui/assets/{dist-DFhhiR8M.js → dist-FYH7vzrh.js} +1 -1
  22. package/dist/apps/chat-ui/assets/{dist-Etxmpyxg.js → dist-f5KioIwL.js} +1 -1
  23. package/dist/apps/chat-ui/assets/{dist-2KdPXbMT.js → dist-hWrpj7SE.js} +1 -1
  24. package/dist/apps/chat-ui/assets/{dist-Idz5kzy8.js → dist-jAuO8_bV.js} +1 -1
  25. package/dist/apps/chat-ui/assets/{index-BqD_bm7z.js → index-Bf29pJph.js} +29 -29
  26. package/dist/apps/chat-ui/index.html +17 -17
  27. package/dist/apps/chat-ui/manifest.webmanifest +25 -25
  28. package/dist/apps/chat-ui/sw.js +47 -47
  29. package/dist/apps/chat-vscode-web/assets/index-BAMxIaI_.js +41 -0
  30. package/dist/apps/chat-vscode-web/index.html +13 -13
  31. package/dist/apps/cli-ui/cliSessionsCommand.js +23 -23
  32. package/dist/apps/context-files-ui/index.html +11 -11
  33. package/dist/cli.js +39 -39
  34. package/dist/compute/cli.js +54 -54
  35. package/dist/core/session-router.js +5 -2
  36. package/dist/cron/cli.js +15 -15
  37. package/dist/cron/store.js +49 -49
  38. package/dist/data/cli.js +23 -23
  39. package/dist/data/event-log.js +23 -23
  40. package/dist/data/message-store.js +20 -20
  41. package/dist/data/navigation-store.js +9 -9
  42. package/dist/data/observation-store.js +4 -4
  43. package/dist/data/payload-store.js +17 -17
  44. package/dist/data/schema.js +431 -431
  45. package/dist/data/session-store.js +4 -4
  46. package/dist/data/telemetry-queries.js +54 -54
  47. package/dist/data/telemetry.js +197 -197
  48. package/dist/debug/events.js +12 -12
  49. package/dist/debug/failures.js +6 -6
  50. package/dist/debug/index.js +227 -227
  51. package/dist/debug/messages.js +6 -6
  52. package/dist/debug/pty.js +124 -124
  53. package/dist/debug/session.js +29 -29
  54. package/dist/debug/tools.js +5 -5
  55. package/dist/debug/web-snapshot-browser-scripts.js +294 -294
  56. package/dist/debug/web-streaming-browser-library.js +925 -925
  57. package/dist/debug/web-streaming-browser-scripts.js +232 -232
  58. package/dist/debug/web-streaming-provider-telemetry.js +4 -4
  59. package/dist/debug/web.js +93 -93
  60. package/dist/gateway/cli.js +19 -19
  61. package/dist/mcp/config-command.js +53 -53
  62. package/dist/mcp/index.js +21 -21
  63. package/dist/mcp/registry.js +11 -11
  64. package/dist/pi-packages/cli.js +11 -11
  65. package/dist/plugins/context-files-store.js +110 -110
  66. package/dist/plugins/context-files.js +4 -4
  67. package/dist/ralph/cli.js +18 -18
  68. package/dist/ralph/templates.js +140 -140
  69. package/dist/reliability/store.js +226 -226
  70. package/dist/session-ui/sessionActivity.js +30 -0
  71. package/dist/sessions/pibo-data-store.js +16 -16
  72. package/dist/sessions/sqlite-store.js +53 -53
  73. package/dist/setup/cli.js +58 -58
  74. package/dist/signals/projector.js +26 -11
  75. package/dist/signals/registry.js +41 -0
  76. package/dist/tools/agent-browser-wrapper.js +80 -80
  77. package/dist/tools/browser-use-cdp.js +12 -12
  78. package/dist/tools/browser-use-wrapper.js +762 -762
  79. package/dist/tools/guides.js +538 -538
  80. package/dist/tools/index.js +99 -99
  81. package/dist/tools/runtime/node-worker-source.js +205 -205
  82. package/dist/tools/runtime/python-worker-source.js +177 -177
  83. package/dist/vscode/cli.js +9 -9
  84. package/dist/web-annotations/cdp.js +900 -900
  85. package/dist/web-annotations/store.js +96 -96
  86. package/docs/README.md +23 -23
  87. package/docs/ops/install-developer-host.md +112 -112
  88. package/docs/ops/install-user-host.md +96 -96
  89. package/docs/ops/upgrade-user-to-developer-host.md +69 -69
  90. package/docs/ops/vscode-extension-release.md +160 -160
  91. package/package.json +95 -95
  92. package/skills/builtin/graphify/SKILL.md +52 -52
  93. package/skills/builtin/pi-agent-harness/SKILL.md +319 -319
  94. package/skills/builtin/pi-agent-harness/agents/openai.yaml +4 -4
  95. package/skills/builtin/pibo-docker-system/SKILL.md +170 -170
  96. package/skills/builtin/pibo-spec-writing/SKILL.md +330 -330
  97. package/skills/builtin/prd/SKILL.md +143 -143
  98. package/skills/builtin/ralph-loop/SKILL.md +359 -359
  99. package/skills/builtin/ralph-prd-json/SKILL.md +123 -123
  100. package/skills/builtin/skill-creator/LICENSE.txt +201 -201
  101. package/skills/builtin/skill-creator/SKILL.md +513 -513
  102. package/skills/builtin/skill-creator/agents/analyzer.md +274 -274
  103. package/skills/builtin/skill-creator/agents/comparator.md +202 -202
  104. package/skills/builtin/skill-creator/agents/grader.md +223 -223
  105. package/skills/builtin/skill-creator/assets/eval_review.html +146 -146
  106. package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -471
  107. package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -1325
  108. package/skills/builtin/skill-creator/references/schemas.md +430 -430
  109. package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -401
  110. package/skills/builtin/skill-creator/scripts/generate_report.py +326 -326
  111. package/skills/builtin/skill-creator/scripts/improve_description.py +247 -247
  112. package/skills/builtin/skill-creator/scripts/package_skill.py +136 -136
  113. package/skills/builtin/skill-creator/scripts/quick_validate.py +102 -102
  114. package/skills/builtin/skill-creator/scripts/run_eval.py +310 -310
  115. package/skills/builtin/skill-creator/scripts/run_loop.py +328 -328
  116. package/skills/builtin/skill-creator/scripts/utils.py +47 -47
  117. package/skills/builtin/web-annotations/SKILL.md +93 -93
  118. package/src/mcp/LICENSE.mcp-cli +21 -21
  119. package/dist/apps/chat-vscode-web/assets/index-Cst9OUkC.js +0 -41
  120. package/dist/session-ui/activeTurn.js +0 -126
@@ -1,436 +1,436 @@
1
1
  export const PIBO_DATA_SCHEMA_VERSION = 3;
2
2
  export function applyPiboDataSchema(db) {
3
- db.exec(`
4
- CREATE TABLE IF NOT EXISTS sessions (
5
- id TEXT PRIMARY KEY,
6
- pi_session_id TEXT UNIQUE,
7
- room_id TEXT,
8
- root_session_id TEXT,
9
- parent_id TEXT,
10
- origin_id TEXT,
11
- channel TEXT NOT NULL,
12
- kind TEXT NOT NULL,
13
- profile TEXT NOT NULL,
14
- active_model_json TEXT,
15
- workspace TEXT,
16
- title TEXT NOT NULL DEFAULT 'Untitled Session',
17
- first_message_preview TEXT,
18
- status TEXT NOT NULL DEFAULT 'idle',
19
- archived_at TEXT,
20
- deleted_at TEXT,
21
- metadata_json TEXT NOT NULL DEFAULT '{}',
22
- created_at TEXT NOT NULL,
23
- updated_at TEXT NOT NULL,
24
- last_activity_at TEXT NOT NULL
25
- );
26
-
27
- CREATE TABLE IF NOT EXISTS rooms (
28
- id TEXT PRIMARY KEY,
29
- name TEXT NOT NULL,
30
- topic TEXT,
31
- type TEXT NOT NULL,
32
- parent_room_id TEXT,
33
- workspace TEXT,
34
- archived_at TEXT,
35
- retention_policy_id TEXT,
36
- metadata_json TEXT NOT NULL DEFAULT '{}',
37
- created_at TEXT NOT NULL,
38
- updated_at TEXT NOT NULL
39
- );
40
-
41
-
42
- CREATE TABLE IF NOT EXISTS payloads (
43
- id TEXT PRIMARY KEY,
44
- sha256 TEXT NOT NULL UNIQUE,
45
- storage_kind TEXT NOT NULL,
46
- storage_path TEXT,
47
- content_type TEXT NOT NULL,
48
- encoding TEXT NOT NULL DEFAULT 'gzip',
49
- byte_size INTEGER NOT NULL,
50
- compressed_byte_size INTEGER,
51
- preview_text TEXT,
52
- retention_class TEXT NOT NULL,
53
- ref_count INTEGER NOT NULL DEFAULT 0,
54
- status TEXT NOT NULL DEFAULT 'committed',
55
- created_at TEXT NOT NULL,
56
- last_verified_at TEXT
57
- );
58
-
59
- CREATE TABLE IF NOT EXISTS event_log (
60
- stream_id INTEGER PRIMARY KEY,
61
- session_id TEXT,
62
- session_sequence INTEGER,
63
- room_id TEXT,
64
- topic TEXT NOT NULL,
65
- type TEXT NOT NULL,
66
- source TEXT NOT NULL,
67
- actor_type TEXT,
68
- actor_id TEXT,
69
- turn_id TEXT,
70
- event_id TEXT,
71
- tool_call_id TEXT,
72
- run_id TEXT,
73
- workflow_run_id TEXT,
74
- idempotency_key TEXT,
75
- retention_class TEXT NOT NULL,
76
- payload_ref TEXT,
77
- preview_text TEXT,
78
- attributes_json TEXT NOT NULL DEFAULT '{}',
79
- created_at TEXT NOT NULL,
80
- indexed_at TEXT
81
- );
82
-
83
- CREATE TABLE IF NOT EXISTS chat_messages (
84
- id TEXT PRIMARY KEY,
85
- session_id TEXT NOT NULL,
86
- room_id TEXT,
87
- sequence INTEGER NOT NULL,
88
- turn_id TEXT,
89
- role TEXT NOT NULL,
90
- actor_id TEXT,
91
- status TEXT NOT NULL,
92
- created_at TEXT NOT NULL,
93
- completed_at TEXT,
94
- content_preview TEXT,
95
- content_payload_ref TEXT,
96
- source_stream_id INTEGER,
97
- input_tokens INTEGER,
98
- output_tokens INTEGER,
99
- cost_usd REAL,
100
- attributes_json TEXT NOT NULL DEFAULT '{}',
101
- UNIQUE(session_id, sequence)
102
- );
103
-
104
- CREATE TABLE IF NOT EXISTS observations (
105
- id TEXT PRIMARY KEY,
106
- session_id TEXT NOT NULL,
107
- sequence INTEGER NOT NULL,
108
- trace_id TEXT,
109
- span_id TEXT,
110
- parent_span_id TEXT,
111
- parent_observation_id TEXT,
112
- turn_id TEXT,
113
- event_stream_id INTEGER,
114
- kind TEXT NOT NULL,
115
- role TEXT,
116
- name TEXT,
117
- status TEXT NOT NULL,
118
- started_at TEXT NOT NULL,
119
- ended_at TEXT,
120
- latency_ms INTEGER,
121
- model_provider TEXT,
122
- model_id TEXT,
123
- input_tokens INTEGER,
124
- output_tokens INTEGER,
125
- cost_usd REAL,
126
- preview_text TEXT,
127
- payload_ref TEXT,
128
- attributes_json TEXT NOT NULL DEFAULT '{}',
129
- UNIQUE(session_id, sequence)
130
- );
131
-
132
- CREATE TABLE IF NOT EXISTS session_stats (
133
- session_id TEXT PRIMARY KEY,
134
- message_count INTEGER NOT NULL DEFAULT 0,
135
- tool_call_count INTEGER NOT NULL DEFAULT 0,
136
- error_count INTEGER NOT NULL DEFAULT 0,
137
- last_event_stream_id INTEGER,
138
- last_message_sequence INTEGER,
139
- last_observation_sequence INTEGER,
140
- last_message_preview TEXT,
141
- last_activity_at TEXT NOT NULL,
142
- status TEXT NOT NULL DEFAULT 'idle',
143
- total_latency_ms INTEGER NOT NULL DEFAULT 0,
144
- total_input_tokens INTEGER NOT NULL DEFAULT 0,
145
- total_output_tokens INTEGER NOT NULL DEFAULT 0,
146
- total_cost_usd REAL NOT NULL DEFAULT 0,
147
- updated_at TEXT NOT NULL
148
- );
149
-
150
- CREATE TABLE IF NOT EXISTS app_session_read_state (
151
- session_id TEXT PRIMARY KEY,
152
- unread_count INTEGER NOT NULL DEFAULT 0,
153
- last_read_stream_id INTEGER NOT NULL DEFAULT 0,
154
- last_read_message_sequence INTEGER NOT NULL DEFAULT 0,
155
- last_read_at TEXT,
156
- updated_at TEXT NOT NULL
157
- );
158
-
159
- CREATE TABLE IF NOT EXISTS app_room_read_state (
160
- room_id TEXT PRIMARY KEY,
161
- unread_count INTEGER NOT NULL DEFAULT 0,
162
- last_read_stream_id INTEGER NOT NULL DEFAULT 0,
163
- last_read_at TEXT,
164
- updated_at TEXT NOT NULL
165
- );
166
-
167
- CREATE TABLE IF NOT EXISTS session_navigation (
168
- room_id TEXT,
169
- session_id TEXT PRIMARY KEY,
170
- root_session_id TEXT,
171
- parent_id TEXT,
172
- origin_id TEXT,
173
- title TEXT NOT NULL,
174
- profile TEXT NOT NULL,
175
- status TEXT NOT NULL,
176
- archived_at TEXT,
177
- last_activity_at TEXT NOT NULL,
178
- last_message_preview TEXT,
179
- child_count INTEGER NOT NULL DEFAULT 0,
180
- sort_key TEXT NOT NULL,
181
- updated_at TEXT NOT NULL
182
- );
183
-
184
- CREATE TABLE IF NOT EXISTS indexer_offsets (
185
- indexer_name TEXT PRIMARY KEY,
186
- source_name TEXT NOT NULL,
187
- last_stream_id INTEGER NOT NULL,
188
- updated_at TEXT NOT NULL
189
- );
190
-
191
- CREATE TABLE IF NOT EXISTS migration_import_map (
192
- source_store TEXT NOT NULL,
193
- source_table TEXT NOT NULL,
194
- source_key TEXT NOT NULL,
195
- target_kind TEXT NOT NULL,
196
- target_id TEXT NOT NULL,
197
- imported_at TEXT NOT NULL,
198
- PRIMARY KEY(source_store, source_table, source_key)
199
- );
200
-
201
- CREATE TABLE IF NOT EXISTS telemetry_turns (
202
- turn_id TEXT PRIMARY KEY,
203
- pibo_session_id TEXT NOT NULL,
204
- root_session_id TEXT,
205
- room_id TEXT,
206
- input_event_id TEXT,
207
- event_id TEXT,
208
- event_stream_id INTEGER,
209
- payload_ref TEXT,
210
- run_id TEXT,
211
- source TEXT NOT NULL,
212
- status TEXT NOT NULL,
213
- current_phase TEXT,
214
- queued_at TEXT NOT NULL,
215
- started_at TEXT,
216
- completed_at TEXT,
217
- last_progress_at TEXT,
218
- queued_behind INTEGER,
219
- queue_depth INTEGER,
220
- summary TEXT,
221
- retention_class TEXT NOT NULL,
222
- created_at TEXT NOT NULL,
223
- updated_at TEXT NOT NULL,
224
- metadata_json TEXT NOT NULL DEFAULT '{}'
225
- );
226
-
227
- CREATE TABLE IF NOT EXISTS telemetry_phases (
228
- phase_id TEXT PRIMARY KEY,
229
- turn_id TEXT NOT NULL,
230
- pibo_session_id TEXT NOT NULL,
231
- root_session_id TEXT,
232
- room_id TEXT,
233
- name TEXT NOT NULL,
234
- status TEXT NOT NULL,
235
- started_at TEXT NOT NULL,
236
- ended_at TEXT,
237
- last_progress_at TEXT,
238
- duration_ms INTEGER,
239
- provider_request_id TEXT,
240
- tool_call_id TEXT,
241
- event_stream_id INTEGER,
242
- event_id TEXT,
243
- payload_ref TEXT,
244
- run_id TEXT,
245
- counters_json TEXT NOT NULL DEFAULT '{}',
246
- summary TEXT,
247
- retention_class TEXT NOT NULL,
248
- created_at TEXT NOT NULL,
249
- updated_at TEXT NOT NULL
250
- );
251
-
252
- CREATE TABLE IF NOT EXISTS telemetry_provider_requests (
253
- provider_request_id TEXT PRIMARY KEY,
254
- pibo_session_id TEXT NOT NULL,
255
- root_session_id TEXT,
256
- room_id TEXT,
257
- turn_id TEXT NOT NULL,
258
- phase_id TEXT,
259
- provider TEXT NOT NULL,
260
- api TEXT NOT NULL,
261
- model TEXT NOT NULL,
262
- transport TEXT NOT NULL,
263
- service_tier TEXT,
264
- status TEXT NOT NULL,
265
- started_at TEXT NOT NULL,
266
- response_headers_at TEXT,
267
- first_byte_at TEXT,
268
- last_raw_event_at TEXT,
269
- last_normalized_event_at TEXT,
270
- completed_at TEXT,
271
- http_status INTEGER,
272
- upstream_response_id TEXT,
273
- raw_event_count INTEGER NOT NULL DEFAULT 0,
274
- normalized_event_count INTEGER NOT NULL DEFAULT 0,
275
- parse_error_count INTEGER NOT NULL DEFAULT 0,
276
- unknown_event_count INTEGER NOT NULL DEFAULT 0,
277
- bytes_received INTEGER,
278
- event_type_counts_json TEXT NOT NULL DEFAULT '{}',
279
- event_stream_id INTEGER,
280
- event_id TEXT,
281
- payload_ref TEXT,
282
- error_category TEXT,
283
- error_message TEXT,
284
- capture_mode TEXT NOT NULL,
285
- retention_class TEXT NOT NULL,
286
- created_at TEXT NOT NULL,
287
- updated_at TEXT NOT NULL
288
- );
289
-
290
- CREATE TABLE IF NOT EXISTS telemetry_provider_events (
291
- raw_event_id TEXT PRIMARY KEY,
292
- provider_request_id TEXT NOT NULL,
293
- pibo_session_id TEXT,
294
- turn_id TEXT,
295
- phase_id TEXT,
296
- sequence INTEGER NOT NULL,
297
- received_at TEXT NOT NULL,
298
- event_type TEXT NOT NULL,
299
- byte_size INTEGER NOT NULL DEFAULT 0,
300
- parse_status TEXT NOT NULL,
301
- normalized_type TEXT,
302
- event_stream_id INTEGER,
303
- event_id TEXT,
304
- item_id TEXT,
305
- tool_call_id TEXT,
306
- payload_ref TEXT,
307
- payload_preview_ref TEXT,
308
- safe_fields_json TEXT NOT NULL DEFAULT '{}',
309
- retention_class TEXT NOT NULL,
310
- created_at TEXT NOT NULL,
311
- updated_at TEXT NOT NULL,
312
- UNIQUE(provider_request_id, sequence)
313
- );
314
-
315
- CREATE TABLE IF NOT EXISTS telemetry_tool_calls (
316
- tool_call_id TEXT PRIMARY KEY,
317
- pibo_session_id TEXT NOT NULL,
318
- root_session_id TEXT,
319
- room_id TEXT,
320
- turn_id TEXT NOT NULL,
321
- provider_request_id TEXT,
322
- provider_item_id TEXT,
323
- output_index INTEGER,
324
- tool_name TEXT NOT NULL,
325
- status TEXT NOT NULL,
326
- args_started_at TEXT,
327
- first_delta_at TEXT,
328
- last_delta_at TEXT,
329
- args_completed_at TEXT,
330
- execution_started_at TEXT,
331
- execution_ended_at TEXT,
332
- duration_ms INTEGER,
333
- args_bytes INTEGER NOT NULL DEFAULT 0,
334
- parse_status TEXT NOT NULL,
335
- safe_arg_keys_json TEXT NOT NULL DEFAULT '[]',
336
- event_stream_id INTEGER,
337
- event_id TEXT,
338
- payload_ref TEXT,
339
- run_id TEXT,
340
- error_category TEXT,
341
- error_message TEXT,
342
- retention_class TEXT NOT NULL,
343
- created_at TEXT NOT NULL,
344
- updated_at TEXT NOT NULL
345
- );
346
-
347
- CREATE INDEX IF NOT EXISTS idx_sessions_room_activity
348
- ON sessions(room_id, archived_at, last_activity_at DESC);
349
- CREATE INDEX IF NOT EXISTS idx_sessions_parent_activity
350
- ON sessions(parent_id, updated_at DESC);
351
- CREATE INDEX IF NOT EXISTS idx_sessions_origin_activity
352
- ON sessions(origin_id, updated_at DESC);
353
- CREATE INDEX IF NOT EXISTS idx_sessions_channel_kind_activity
354
- ON sessions(channel, kind, updated_at DESC);
355
- CREATE INDEX IF NOT EXISTS idx_event_log_session_stream
356
- ON event_log(session_id, stream_id);
357
- CREATE INDEX IF NOT EXISTS idx_event_log_session_sequence_stream
358
- ON event_log(session_id, session_sequence DESC, stream_id DESC);
359
- CREATE INDEX IF NOT EXISTS idx_event_log_room_stream
360
- ON event_log(room_id, stream_id);
361
- CREATE INDEX IF NOT EXISTS idx_event_log_topic_stream
362
- ON event_log(topic, stream_id);
363
- CREATE UNIQUE INDEX IF NOT EXISTS idx_event_log_idempotency
364
- ON event_log(idempotency_key)
365
- WHERE idempotency_key IS NOT NULL;
366
- CREATE INDEX IF NOT EXISTS idx_chat_messages_session_sequence
367
- ON chat_messages(session_id, sequence);
368
- CREATE INDEX IF NOT EXISTS idx_observations_session_sequence
369
- ON observations(session_id, sequence);
370
- CREATE INDEX IF NOT EXISTS idx_session_navigation_room_sort
371
- ON session_navigation(room_id, archived_at, sort_key DESC);
372
- CREATE INDEX IF NOT EXISTS idx_session_navigation_root
373
- ON session_navigation(root_session_id, parent_id);
374
- CREATE INDEX IF NOT EXISTS idx_telemetry_turns_session_updated
375
- ON telemetry_turns(pibo_session_id, updated_at DESC);
376
- CREATE INDEX IF NOT EXISTS idx_telemetry_turns_room_updated
377
- ON telemetry_turns(room_id, updated_at DESC);
378
- CREATE INDEX IF NOT EXISTS idx_telemetry_turns_event
379
- ON telemetry_turns(event_id, event_stream_id);
380
- CREATE INDEX IF NOT EXISTS idx_telemetry_turns_payload
381
- ON telemetry_turns(payload_ref);
382
- CREATE INDEX IF NOT EXISTS idx_telemetry_turns_retention_updated
383
- ON telemetry_turns(retention_class, updated_at);
384
- CREATE INDEX IF NOT EXISTS idx_telemetry_phases_turn_started
385
- ON telemetry_phases(turn_id, started_at ASC);
386
- CREATE INDEX IF NOT EXISTS idx_telemetry_phases_session_status
387
- ON telemetry_phases(pibo_session_id, status, last_progress_at);
388
- CREATE INDEX IF NOT EXISTS idx_telemetry_phases_provider_request
389
- ON telemetry_phases(provider_request_id);
390
- CREATE INDEX IF NOT EXISTS idx_telemetry_phases_tool_call
391
- ON telemetry_phases(tool_call_id);
392
- CREATE INDEX IF NOT EXISTS idx_telemetry_phases_event
393
- ON telemetry_phases(event_id, event_stream_id);
394
- CREATE INDEX IF NOT EXISTS idx_telemetry_phases_payload
395
- ON telemetry_phases(payload_ref);
396
- CREATE INDEX IF NOT EXISTS idx_telemetry_phases_retention_updated
397
- ON telemetry_phases(retention_class, updated_at);
398
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_session_updated
399
- ON telemetry_provider_requests(pibo_session_id, updated_at DESC);
400
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_turn
401
- ON telemetry_provider_requests(turn_id, started_at ASC);
402
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_upstream
403
- ON telemetry_provider_requests(upstream_response_id);
404
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_event
405
- ON telemetry_provider_requests(event_id, event_stream_id);
406
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_payload
407
- ON telemetry_provider_requests(payload_ref);
408
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_retention_updated
409
- ON telemetry_provider_requests(retention_class, updated_at);
410
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_request_sequence
411
- ON telemetry_provider_events(provider_request_id, sequence ASC);
412
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_session_received
413
- ON telemetry_provider_events(pibo_session_id, received_at DESC);
414
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_event
415
- ON telemetry_provider_events(event_id, event_stream_id);
416
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_payload
417
- ON telemetry_provider_events(payload_ref, payload_preview_ref);
418
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_tool_call
419
- ON telemetry_provider_events(tool_call_id);
420
- CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_retention_received
421
- ON telemetry_provider_events(retention_class, received_at);
422
- CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_session_updated
423
- ON telemetry_tool_calls(pibo_session_id, updated_at DESC);
424
- CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_turn
425
- ON telemetry_tool_calls(turn_id);
426
- CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_provider_request
427
- ON telemetry_tool_calls(provider_request_id);
428
- CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_event
429
- ON telemetry_tool_calls(event_id, event_stream_id);
430
- CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_payload
431
- ON telemetry_tool_calls(payload_ref);
432
- CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_retention_updated
433
- ON telemetry_tool_calls(retention_class, updated_at);
3
+ db.exec(`
4
+ CREATE TABLE IF NOT EXISTS sessions (
5
+ id TEXT PRIMARY KEY,
6
+ pi_session_id TEXT UNIQUE,
7
+ room_id TEXT,
8
+ root_session_id TEXT,
9
+ parent_id TEXT,
10
+ origin_id TEXT,
11
+ channel TEXT NOT NULL,
12
+ kind TEXT NOT NULL,
13
+ profile TEXT NOT NULL,
14
+ active_model_json TEXT,
15
+ workspace TEXT,
16
+ title TEXT NOT NULL DEFAULT 'Untitled Session',
17
+ first_message_preview TEXT,
18
+ status TEXT NOT NULL DEFAULT 'idle',
19
+ archived_at TEXT,
20
+ deleted_at TEXT,
21
+ metadata_json TEXT NOT NULL DEFAULT '{}',
22
+ created_at TEXT NOT NULL,
23
+ updated_at TEXT NOT NULL,
24
+ last_activity_at TEXT NOT NULL
25
+ );
26
+
27
+ CREATE TABLE IF NOT EXISTS rooms (
28
+ id TEXT PRIMARY KEY,
29
+ name TEXT NOT NULL,
30
+ topic TEXT,
31
+ type TEXT NOT NULL,
32
+ parent_room_id TEXT,
33
+ workspace TEXT,
34
+ archived_at TEXT,
35
+ retention_policy_id TEXT,
36
+ metadata_json TEXT NOT NULL DEFAULT '{}',
37
+ created_at TEXT NOT NULL,
38
+ updated_at TEXT NOT NULL
39
+ );
40
+
41
+
42
+ CREATE TABLE IF NOT EXISTS payloads (
43
+ id TEXT PRIMARY KEY,
44
+ sha256 TEXT NOT NULL UNIQUE,
45
+ storage_kind TEXT NOT NULL,
46
+ storage_path TEXT,
47
+ content_type TEXT NOT NULL,
48
+ encoding TEXT NOT NULL DEFAULT 'gzip',
49
+ byte_size INTEGER NOT NULL,
50
+ compressed_byte_size INTEGER,
51
+ preview_text TEXT,
52
+ retention_class TEXT NOT NULL,
53
+ ref_count INTEGER NOT NULL DEFAULT 0,
54
+ status TEXT NOT NULL DEFAULT 'committed',
55
+ created_at TEXT NOT NULL,
56
+ last_verified_at TEXT
57
+ );
58
+
59
+ CREATE TABLE IF NOT EXISTS event_log (
60
+ stream_id INTEGER PRIMARY KEY,
61
+ session_id TEXT,
62
+ session_sequence INTEGER,
63
+ room_id TEXT,
64
+ topic TEXT NOT NULL,
65
+ type TEXT NOT NULL,
66
+ source TEXT NOT NULL,
67
+ actor_type TEXT,
68
+ actor_id TEXT,
69
+ turn_id TEXT,
70
+ event_id TEXT,
71
+ tool_call_id TEXT,
72
+ run_id TEXT,
73
+ workflow_run_id TEXT,
74
+ idempotency_key TEXT,
75
+ retention_class TEXT NOT NULL,
76
+ payload_ref TEXT,
77
+ preview_text TEXT,
78
+ attributes_json TEXT NOT NULL DEFAULT '{}',
79
+ created_at TEXT NOT NULL,
80
+ indexed_at TEXT
81
+ );
82
+
83
+ CREATE TABLE IF NOT EXISTS chat_messages (
84
+ id TEXT PRIMARY KEY,
85
+ session_id TEXT NOT NULL,
86
+ room_id TEXT,
87
+ sequence INTEGER NOT NULL,
88
+ turn_id TEXT,
89
+ role TEXT NOT NULL,
90
+ actor_id TEXT,
91
+ status TEXT NOT NULL,
92
+ created_at TEXT NOT NULL,
93
+ completed_at TEXT,
94
+ content_preview TEXT,
95
+ content_payload_ref TEXT,
96
+ source_stream_id INTEGER,
97
+ input_tokens INTEGER,
98
+ output_tokens INTEGER,
99
+ cost_usd REAL,
100
+ attributes_json TEXT NOT NULL DEFAULT '{}',
101
+ UNIQUE(session_id, sequence)
102
+ );
103
+
104
+ CREATE TABLE IF NOT EXISTS observations (
105
+ id TEXT PRIMARY KEY,
106
+ session_id TEXT NOT NULL,
107
+ sequence INTEGER NOT NULL,
108
+ trace_id TEXT,
109
+ span_id TEXT,
110
+ parent_span_id TEXT,
111
+ parent_observation_id TEXT,
112
+ turn_id TEXT,
113
+ event_stream_id INTEGER,
114
+ kind TEXT NOT NULL,
115
+ role TEXT,
116
+ name TEXT,
117
+ status TEXT NOT NULL,
118
+ started_at TEXT NOT NULL,
119
+ ended_at TEXT,
120
+ latency_ms INTEGER,
121
+ model_provider TEXT,
122
+ model_id TEXT,
123
+ input_tokens INTEGER,
124
+ output_tokens INTEGER,
125
+ cost_usd REAL,
126
+ preview_text TEXT,
127
+ payload_ref TEXT,
128
+ attributes_json TEXT NOT NULL DEFAULT '{}',
129
+ UNIQUE(session_id, sequence)
130
+ );
131
+
132
+ CREATE TABLE IF NOT EXISTS session_stats (
133
+ session_id TEXT PRIMARY KEY,
134
+ message_count INTEGER NOT NULL DEFAULT 0,
135
+ tool_call_count INTEGER NOT NULL DEFAULT 0,
136
+ error_count INTEGER NOT NULL DEFAULT 0,
137
+ last_event_stream_id INTEGER,
138
+ last_message_sequence INTEGER,
139
+ last_observation_sequence INTEGER,
140
+ last_message_preview TEXT,
141
+ last_activity_at TEXT NOT NULL,
142
+ status TEXT NOT NULL DEFAULT 'idle',
143
+ total_latency_ms INTEGER NOT NULL DEFAULT 0,
144
+ total_input_tokens INTEGER NOT NULL DEFAULT 0,
145
+ total_output_tokens INTEGER NOT NULL DEFAULT 0,
146
+ total_cost_usd REAL NOT NULL DEFAULT 0,
147
+ updated_at TEXT NOT NULL
148
+ );
149
+
150
+ CREATE TABLE IF NOT EXISTS app_session_read_state (
151
+ session_id TEXT PRIMARY KEY,
152
+ unread_count INTEGER NOT NULL DEFAULT 0,
153
+ last_read_stream_id INTEGER NOT NULL DEFAULT 0,
154
+ last_read_message_sequence INTEGER NOT NULL DEFAULT 0,
155
+ last_read_at TEXT,
156
+ updated_at TEXT NOT NULL
157
+ );
158
+
159
+ CREATE TABLE IF NOT EXISTS app_room_read_state (
160
+ room_id TEXT PRIMARY KEY,
161
+ unread_count INTEGER NOT NULL DEFAULT 0,
162
+ last_read_stream_id INTEGER NOT NULL DEFAULT 0,
163
+ last_read_at TEXT,
164
+ updated_at TEXT NOT NULL
165
+ );
166
+
167
+ CREATE TABLE IF NOT EXISTS session_navigation (
168
+ room_id TEXT,
169
+ session_id TEXT PRIMARY KEY,
170
+ root_session_id TEXT,
171
+ parent_id TEXT,
172
+ origin_id TEXT,
173
+ title TEXT NOT NULL,
174
+ profile TEXT NOT NULL,
175
+ status TEXT NOT NULL,
176
+ archived_at TEXT,
177
+ last_activity_at TEXT NOT NULL,
178
+ last_message_preview TEXT,
179
+ child_count INTEGER NOT NULL DEFAULT 0,
180
+ sort_key TEXT NOT NULL,
181
+ updated_at TEXT NOT NULL
182
+ );
183
+
184
+ CREATE TABLE IF NOT EXISTS indexer_offsets (
185
+ indexer_name TEXT PRIMARY KEY,
186
+ source_name TEXT NOT NULL,
187
+ last_stream_id INTEGER NOT NULL,
188
+ updated_at TEXT NOT NULL
189
+ );
190
+
191
+ CREATE TABLE IF NOT EXISTS migration_import_map (
192
+ source_store TEXT NOT NULL,
193
+ source_table TEXT NOT NULL,
194
+ source_key TEXT NOT NULL,
195
+ target_kind TEXT NOT NULL,
196
+ target_id TEXT NOT NULL,
197
+ imported_at TEXT NOT NULL,
198
+ PRIMARY KEY(source_store, source_table, source_key)
199
+ );
200
+
201
+ CREATE TABLE IF NOT EXISTS telemetry_turns (
202
+ turn_id TEXT PRIMARY KEY,
203
+ pibo_session_id TEXT NOT NULL,
204
+ root_session_id TEXT,
205
+ room_id TEXT,
206
+ input_event_id TEXT,
207
+ event_id TEXT,
208
+ event_stream_id INTEGER,
209
+ payload_ref TEXT,
210
+ run_id TEXT,
211
+ source TEXT NOT NULL,
212
+ status TEXT NOT NULL,
213
+ current_phase TEXT,
214
+ queued_at TEXT NOT NULL,
215
+ started_at TEXT,
216
+ completed_at TEXT,
217
+ last_progress_at TEXT,
218
+ queued_behind INTEGER,
219
+ queue_depth INTEGER,
220
+ summary TEXT,
221
+ retention_class TEXT NOT NULL,
222
+ created_at TEXT NOT NULL,
223
+ updated_at TEXT NOT NULL,
224
+ metadata_json TEXT NOT NULL DEFAULT '{}'
225
+ );
226
+
227
+ CREATE TABLE IF NOT EXISTS telemetry_phases (
228
+ phase_id TEXT PRIMARY KEY,
229
+ turn_id TEXT NOT NULL,
230
+ pibo_session_id TEXT NOT NULL,
231
+ root_session_id TEXT,
232
+ room_id TEXT,
233
+ name TEXT NOT NULL,
234
+ status TEXT NOT NULL,
235
+ started_at TEXT NOT NULL,
236
+ ended_at TEXT,
237
+ last_progress_at TEXT,
238
+ duration_ms INTEGER,
239
+ provider_request_id TEXT,
240
+ tool_call_id TEXT,
241
+ event_stream_id INTEGER,
242
+ event_id TEXT,
243
+ payload_ref TEXT,
244
+ run_id TEXT,
245
+ counters_json TEXT NOT NULL DEFAULT '{}',
246
+ summary TEXT,
247
+ retention_class TEXT NOT NULL,
248
+ created_at TEXT NOT NULL,
249
+ updated_at TEXT NOT NULL
250
+ );
251
+
252
+ CREATE TABLE IF NOT EXISTS telemetry_provider_requests (
253
+ provider_request_id TEXT PRIMARY KEY,
254
+ pibo_session_id TEXT NOT NULL,
255
+ root_session_id TEXT,
256
+ room_id TEXT,
257
+ turn_id TEXT NOT NULL,
258
+ phase_id TEXT,
259
+ provider TEXT NOT NULL,
260
+ api TEXT NOT NULL,
261
+ model TEXT NOT NULL,
262
+ transport TEXT NOT NULL,
263
+ service_tier TEXT,
264
+ status TEXT NOT NULL,
265
+ started_at TEXT NOT NULL,
266
+ response_headers_at TEXT,
267
+ first_byte_at TEXT,
268
+ last_raw_event_at TEXT,
269
+ last_normalized_event_at TEXT,
270
+ completed_at TEXT,
271
+ http_status INTEGER,
272
+ upstream_response_id TEXT,
273
+ raw_event_count INTEGER NOT NULL DEFAULT 0,
274
+ normalized_event_count INTEGER NOT NULL DEFAULT 0,
275
+ parse_error_count INTEGER NOT NULL DEFAULT 0,
276
+ unknown_event_count INTEGER NOT NULL DEFAULT 0,
277
+ bytes_received INTEGER,
278
+ event_type_counts_json TEXT NOT NULL DEFAULT '{}',
279
+ event_stream_id INTEGER,
280
+ event_id TEXT,
281
+ payload_ref TEXT,
282
+ error_category TEXT,
283
+ error_message TEXT,
284
+ capture_mode TEXT NOT NULL,
285
+ retention_class TEXT NOT NULL,
286
+ created_at TEXT NOT NULL,
287
+ updated_at TEXT NOT NULL
288
+ );
289
+
290
+ CREATE TABLE IF NOT EXISTS telemetry_provider_events (
291
+ raw_event_id TEXT PRIMARY KEY,
292
+ provider_request_id TEXT NOT NULL,
293
+ pibo_session_id TEXT,
294
+ turn_id TEXT,
295
+ phase_id TEXT,
296
+ sequence INTEGER NOT NULL,
297
+ received_at TEXT NOT NULL,
298
+ event_type TEXT NOT NULL,
299
+ byte_size INTEGER NOT NULL DEFAULT 0,
300
+ parse_status TEXT NOT NULL,
301
+ normalized_type TEXT,
302
+ event_stream_id INTEGER,
303
+ event_id TEXT,
304
+ item_id TEXT,
305
+ tool_call_id TEXT,
306
+ payload_ref TEXT,
307
+ payload_preview_ref TEXT,
308
+ safe_fields_json TEXT NOT NULL DEFAULT '{}',
309
+ retention_class TEXT NOT NULL,
310
+ created_at TEXT NOT NULL,
311
+ updated_at TEXT NOT NULL,
312
+ UNIQUE(provider_request_id, sequence)
313
+ );
314
+
315
+ CREATE TABLE IF NOT EXISTS telemetry_tool_calls (
316
+ tool_call_id TEXT PRIMARY KEY,
317
+ pibo_session_id TEXT NOT NULL,
318
+ root_session_id TEXT,
319
+ room_id TEXT,
320
+ turn_id TEXT NOT NULL,
321
+ provider_request_id TEXT,
322
+ provider_item_id TEXT,
323
+ output_index INTEGER,
324
+ tool_name TEXT NOT NULL,
325
+ status TEXT NOT NULL,
326
+ args_started_at TEXT,
327
+ first_delta_at TEXT,
328
+ last_delta_at TEXT,
329
+ args_completed_at TEXT,
330
+ execution_started_at TEXT,
331
+ execution_ended_at TEXT,
332
+ duration_ms INTEGER,
333
+ args_bytes INTEGER NOT NULL DEFAULT 0,
334
+ parse_status TEXT NOT NULL,
335
+ safe_arg_keys_json TEXT NOT NULL DEFAULT '[]',
336
+ event_stream_id INTEGER,
337
+ event_id TEXT,
338
+ payload_ref TEXT,
339
+ run_id TEXT,
340
+ error_category TEXT,
341
+ error_message TEXT,
342
+ retention_class TEXT NOT NULL,
343
+ created_at TEXT NOT NULL,
344
+ updated_at TEXT NOT NULL
345
+ );
346
+
347
+ CREATE INDEX IF NOT EXISTS idx_sessions_room_activity
348
+ ON sessions(room_id, archived_at, last_activity_at DESC);
349
+ CREATE INDEX IF NOT EXISTS idx_sessions_parent_activity
350
+ ON sessions(parent_id, updated_at DESC);
351
+ CREATE INDEX IF NOT EXISTS idx_sessions_origin_activity
352
+ ON sessions(origin_id, updated_at DESC);
353
+ CREATE INDEX IF NOT EXISTS idx_sessions_channel_kind_activity
354
+ ON sessions(channel, kind, updated_at DESC);
355
+ CREATE INDEX IF NOT EXISTS idx_event_log_session_stream
356
+ ON event_log(session_id, stream_id);
357
+ CREATE INDEX IF NOT EXISTS idx_event_log_session_sequence_stream
358
+ ON event_log(session_id, session_sequence DESC, stream_id DESC);
359
+ CREATE INDEX IF NOT EXISTS idx_event_log_room_stream
360
+ ON event_log(room_id, stream_id);
361
+ CREATE INDEX IF NOT EXISTS idx_event_log_topic_stream
362
+ ON event_log(topic, stream_id);
363
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_event_log_idempotency
364
+ ON event_log(idempotency_key)
365
+ WHERE idempotency_key IS NOT NULL;
366
+ CREATE INDEX IF NOT EXISTS idx_chat_messages_session_sequence
367
+ ON chat_messages(session_id, sequence);
368
+ CREATE INDEX IF NOT EXISTS idx_observations_session_sequence
369
+ ON observations(session_id, sequence);
370
+ CREATE INDEX IF NOT EXISTS idx_session_navigation_room_sort
371
+ ON session_navigation(room_id, archived_at, sort_key DESC);
372
+ CREATE INDEX IF NOT EXISTS idx_session_navigation_root
373
+ ON session_navigation(root_session_id, parent_id);
374
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_session_updated
375
+ ON telemetry_turns(pibo_session_id, updated_at DESC);
376
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_room_updated
377
+ ON telemetry_turns(room_id, updated_at DESC);
378
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_event
379
+ ON telemetry_turns(event_id, event_stream_id);
380
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_payload
381
+ ON telemetry_turns(payload_ref);
382
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_retention_updated
383
+ ON telemetry_turns(retention_class, updated_at);
384
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_turn_started
385
+ ON telemetry_phases(turn_id, started_at ASC);
386
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_session_status
387
+ ON telemetry_phases(pibo_session_id, status, last_progress_at);
388
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_provider_request
389
+ ON telemetry_phases(provider_request_id);
390
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_tool_call
391
+ ON telemetry_phases(tool_call_id);
392
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_event
393
+ ON telemetry_phases(event_id, event_stream_id);
394
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_payload
395
+ ON telemetry_phases(payload_ref);
396
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_retention_updated
397
+ ON telemetry_phases(retention_class, updated_at);
398
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_session_updated
399
+ ON telemetry_provider_requests(pibo_session_id, updated_at DESC);
400
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_turn
401
+ ON telemetry_provider_requests(turn_id, started_at ASC);
402
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_upstream
403
+ ON telemetry_provider_requests(upstream_response_id);
404
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_event
405
+ ON telemetry_provider_requests(event_id, event_stream_id);
406
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_payload
407
+ ON telemetry_provider_requests(payload_ref);
408
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_retention_updated
409
+ ON telemetry_provider_requests(retention_class, updated_at);
410
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_request_sequence
411
+ ON telemetry_provider_events(provider_request_id, sequence ASC);
412
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_session_received
413
+ ON telemetry_provider_events(pibo_session_id, received_at DESC);
414
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_event
415
+ ON telemetry_provider_events(event_id, event_stream_id);
416
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_payload
417
+ ON telemetry_provider_events(payload_ref, payload_preview_ref);
418
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_tool_call
419
+ ON telemetry_provider_events(tool_call_id);
420
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_retention_received
421
+ ON telemetry_provider_events(retention_class, received_at);
422
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_session_updated
423
+ ON telemetry_tool_calls(pibo_session_id, updated_at DESC);
424
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_turn
425
+ ON telemetry_tool_calls(turn_id);
426
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_provider_request
427
+ ON telemetry_tool_calls(provider_request_id);
428
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_event
429
+ ON telemetry_tool_calls(event_id, event_stream_id);
430
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_payload
431
+ ON telemetry_tool_calls(payload_ref);
432
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_retention_updated
433
+ ON telemetry_tool_calls(retention_class, updated_at);
434
434
  `);
435
435
  db.exec(`PRAGMA user_version = ${PIBO_DATA_SCHEMA_VERSION}`);
436
436
  }