repoburg 1.3.201 → 1.3.204
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.
- package/agent-pane/backend/dist/index.js +2714 -32395
- package/agent-pane/backend/dist/server.js +45304 -0
- package/askuser-after-step5-postgres-selected.png +0 -0
- package/askuser-after-step7-answer-sent.png +0 -0
- package/askuser-card-visible.png +0 -0
- package/backend/dist/src/agent-runtime/agent-runtime-event-emitter.d.ts +16 -0
- package/backend/dist/src/agent-runtime/agent-runtime-event-emitter.js +87 -0
- package/backend/dist/src/agent-runtime/agent-runtime-event-emitter.js.map +1 -1
- package/backend/dist/src/agent-runtime/agent-runtime.types.d.ts +16 -1
- package/backend/dist/src/app.controller.d.ts +1 -0
- package/backend/dist/src/app.service.d.ts +1 -0
- package/backend/dist/src/app.service.js +4 -1
- package/backend/dist/src/app.service.js.map +1 -1
- package/backend/dist/src/interactive-chat/chat.service.d.ts +4 -0
- package/backend/dist/src/interactive-chat/chat.service.js +21 -1
- package/backend/dist/src/interactive-chat/chat.service.js.map +1 -1
- package/backend/dist/src/llm-orchestration/action-handlers/invoke-subagent.handler.js +12 -1
- package/backend/dist/src/llm-orchestration/action-handlers/invoke-subagent.handler.js.map +1 -1
- package/backend/dist/src/llm-orchestration/llm-orchestration.interfaces.d.ts +1 -0
- package/backend/dist/src/llm-orchestration/llm-orchestration.interfaces.js +1 -0
- package/backend/dist/src/llm-orchestration/llm-orchestration.interfaces.js.map +1 -1
- package/backend/dist/src/llm-orchestration/llm-turn-processor.service.js +2 -0
- package/backend/dist/src/llm-orchestration/llm-turn-processor.service.js.map +1 -1
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/daemon/dist/agentPane.js +128 -0
- package/daemon/dist/agentPane.spec.js +183 -0
- package/daemon/dist/api/services.js +4 -0
- package/daemon/dist/index.js +28 -8
- package/daemon/dist/serviceManager.js +30 -11
- package/daemon/dist/serviceManager.spec.js +26 -0
- package/daemon/dist/workspace-validation.js +63 -0
- package/daemon/dist/workspace-validation.spec.js +63 -0
- package/daemon/package.json +1 -1
- package/package.json +15 -2
- package/r2-step4-apple-banana.png +0 -0
- package/r2-step5-after-rewind-apple-last.png +0 -0
- package/r2-step7-apple-cherry.png +0 -0
- package/r2-step8-cherry-menu-no-restore.png +0 -0
- package/r3-step3-live-task-card-running.png +0 -0
- package/r3-step4-after-completion.png +0 -0
- package/r3-step5-persistence-after-reload.png +0 -0
- package/r3-step6-tasks-tab-card.png +0 -0
- package/reverify-answered-state-answer-sent.png +0 -0
- package/reverify-card-visible-after-completion.png +0 -0
- package/rewind-step3-apple-banana-turns.png +0 -0
- package/rewind-step5-ui-unchanged-after-confirmed-rewind.png +0 -0
- package/rewind-step6-apple-menu-no-restore.png +0 -0
- package/rewind-step7-final-turnlist-unchanged.png +0 -0
- package/rewind-step7-negative-error-toast.png +0 -0
- package/rewind-step7-negative-error-toast2.png +0 -0
- package/subagent-r2-step5-turn-after-reload-no-card.png +0 -0
- package/subagent-r2-step6-tasks-panel-card.png +0 -0
- package/subagent-step3-tasks-tab-done-card.png +0 -0
- package/subagent-step4-turn-stuck-no-cards.png +0 -0
- package/agent-pane/.prettierignore +0 -5
- package/agent-pane/.prettierrc +0 -8
- package/agent-pane/backend/coverage/base.css +0 -224
- package/agent-pane/backend/coverage/block-navigation.js +0 -87
- package/agent-pane/backend/coverage/clover.xml +0 -887
- package/agent-pane/backend/coverage/coverage-final.json +0 -10
- package/agent-pane/backend/coverage/favicon.png +0 -0
- package/agent-pane/backend/coverage/index.html +0 -176
- package/agent-pane/backend/coverage/prettify.css +0 -1
- package/agent-pane/backend/coverage/prettify.js +0 -2
- package/agent-pane/backend/coverage/sort-arrow-sprite.png +0 -0
- package/agent-pane/backend/coverage/sorter.js +0 -210
- package/agent-pane/backend/coverage/src/codex/codex-provider.ts.html +0 -1402
- package/agent-pane/backend/coverage/src/codex/index.html +0 -131
- package/agent-pane/backend/coverage/src/codex/item-mapper.ts.html +0 -331
- package/agent-pane/backend/coverage/src/db/index.html +0 -131
- package/agent-pane/backend/coverage/src/db/index.ts.html +0 -436
- package/agent-pane/backend/coverage/src/db/schema.ts.html +0 -175
- package/agent-pane/backend/coverage/src/index.html +0 -116
- package/agent-pane/backend/coverage/src/index.ts.html +0 -262
- package/agent-pane/backend/coverage/src/routes/index.html +0 -146
- package/agent-pane/backend/coverage/src/routes/sessions.ts.html +0 -991
- package/agent-pane/backend/coverage/src/routes/turns.ts.html +0 -256
- package/agent-pane/backend/coverage/src/routes/workspaces.ts.html +0 -406
- package/agent-pane/backend/coverage/src/ws/index.html +0 -116
- package/agent-pane/backend/coverage/src/ws/index.ts.html +0 -238
- package/agent-pane/backend/data.db +0 -0
- package/agent-pane/backend/data.db-shm +0 -0
- package/agent-pane/backend/data.db-wal +0 -0
- package/agent-pane/backend/package-lock.json +0 -5945
- package/agent-pane/backend/package.json +0 -33
- package/agent-pane/backend/scripts/backfill-from-jsonl.ts +0 -206
- package/agent-pane/backend/scripts/import-session-from-jsonl.ts +0 -264
- package/agent-pane/backend/src/claude/claude-message-mapper.test.ts +0 -271
- package/agent-pane/backend/src/claude/claude-message-mapper.ts +0 -259
- package/agent-pane/backend/src/claude/claude-provider.test.ts +0 -455
- package/agent-pane/backend/src/claude/claude-provider.ts +0 -1319
- package/agent-pane/backend/src/claude/claude-types.ts +0 -45
- package/agent-pane/backend/src/codex/app-server-client.test.ts +0 -183
- package/agent-pane/backend/src/codex/app-server-client.ts +0 -247
- package/agent-pane/backend/src/codex/app-server-types.ts +0 -259
- package/agent-pane/backend/src/codex/codex-provider-runtime-config.test.ts +0 -56
- package/agent-pane/backend/src/codex/codex-provider.test.ts +0 -60
- package/agent-pane/backend/src/codex/codex-provider.ts +0 -619
- package/agent-pane/backend/src/codex/item-mapper.test.ts +0 -221
- package/agent-pane/backend/src/codex/item-mapper.ts +0 -86
- package/agent-pane/backend/src/codex/shared-app-server.ts +0 -25
- package/agent-pane/backend/src/db/index.test.ts +0 -125
- package/agent-pane/backend/src/db/index.ts +0 -230
- package/agent-pane/backend/src/db/schema.ts +0 -34
- package/agent-pane/backend/src/index.ts +0 -89
- package/agent-pane/backend/src/integration/__fixtures__/cancel-turn.json +0 -29
- package/agent-pane/backend/src/integration/__fixtures__/delta-streaming.json +0 -40
- package/agent-pane/backend/src/integration/__fixtures__/failed-turn.json +0 -16
- package/agent-pane/backend/src/integration/__fixtures__/mcp-tool-call.json +0 -60
- package/agent-pane/backend/src/integration/__fixtures__/missing-item-started.json +0 -34
- package/agent-pane/backend/src/integration/__fixtures__/multi-item-turn.json +0 -85
- package/agent-pane/backend/src/integration/__fixtures__/multi-turn.json +0 -48
- package/agent-pane/backend/src/integration/__fixtures__/simple-turn.json +0 -35
- package/agent-pane/backend/src/integration/delta-streaming.test.ts +0 -130
- package/agent-pane/backend/src/integration/helpers/app-server-mock.ts +0 -272
- package/agent-pane/backend/src/integration/helpers/test-app.ts +0 -110
- package/agent-pane/backend/src/integration/helpers/ws-capture.ts +0 -64
- package/agent-pane/backend/src/integration/item-lifecycle.test.ts +0 -133
- package/agent-pane/backend/src/integration/mcp-tool-call.test.ts +0 -102
- package/agent-pane/backend/src/integration/missing-item-started.test.ts +0 -91
- package/agent-pane/backend/src/integration/multi-turn.test.ts +0 -121
- package/agent-pane/backend/src/integration/session-operations.test.ts +0 -175
- package/agent-pane/backend/src/integration/threads-claude-fork.test.ts +0 -241
- package/agent-pane/backend/src/integration/threads.test.ts +0 -309
- package/agent-pane/backend/src/integration/title-generation.test.ts +0 -109
- package/agent-pane/backend/src/integration/turn-cancel.test.ts +0 -111
- package/agent-pane/backend/src/integration/turn-failure.test.ts +0 -97
- package/agent-pane/backend/src/integration/turn-lifecycle.test.ts +0 -141
- package/agent-pane/backend/src/providers/index.ts +0 -16
- package/agent-pane/backend/src/providers/registry.test.ts +0 -92
- package/agent-pane/backend/src/providers/registry.ts +0 -43
- package/agent-pane/backend/src/providers/runtime-provider.ts +0 -43
- package/agent-pane/backend/src/repoburg/action-mapping.ts +0 -216
- package/agent-pane/backend/src/repoburg/agent-runtime-client.test.ts +0 -271
- package/agent-pane/backend/src/repoburg/agent-runtime-client.ts +0 -262
- package/agent-pane/backend/src/repoburg/backend-resolver.test.ts +0 -271
- package/agent-pane/backend/src/repoburg/backend-resolver.ts +0 -246
- package/agent-pane/backend/src/repoburg/repoburg-client.test.ts +0 -159
- package/agent-pane/backend/src/repoburg/repoburg-client.ts +0 -181
- package/agent-pane/backend/src/repoburg/repoburg-provider.test.ts +0 -723
- package/agent-pane/backend/src/repoburg/repoburg-provider.ts +0 -422
- package/agent-pane/backend/src/repoburg/turn-projector.test.ts +0 -475
- package/agent-pane/backend/src/repoburg/turn-projector.ts +0 -537
- package/agent-pane/backend/src/routes/files.ts +0 -31
- package/agent-pane/backend/src/routes/mcp.ts +0 -33
- package/agent-pane/backend/src/routes/models.test.ts +0 -92
- package/agent-pane/backend/src/routes/models.ts +0 -16
- package/agent-pane/backend/src/routes/plugins.ts +0 -40
- package/agent-pane/backend/src/routes/providers.test.ts +0 -86
- package/agent-pane/backend/src/routes/providers.ts +0 -86
- package/agent-pane/backend/src/routes/sessions.test.ts +0 -558
- package/agent-pane/backend/src/routes/sessions.ts +0 -504
- package/agent-pane/backend/src/routes/skills.test.ts +0 -114
- package/agent-pane/backend/src/routes/skills.ts +0 -70
- package/agent-pane/backend/src/routes/threads.ts +0 -323
- package/agent-pane/backend/src/routes/turns.test.ts +0 -196
- package/agent-pane/backend/src/routes/turns.ts +0 -103
- package/agent-pane/backend/src/routes/workspaces.test.ts +0 -197
- package/agent-pane/backend/src/routes/workspaces.ts +0 -128
- package/agent-pane/backend/src/ws/index.test.ts +0 -107
- package/agent-pane/backend/src/ws/index.ts +0 -51
- package/agent-pane/backend/tsconfig.json +0 -25
- package/agent-pane/backend/vitest.config.ts +0 -20
- package/agent-pane/eslint.config.js +0 -33
- package/agent-pane/frontend/coverage/base.css +0 -224
- package/agent-pane/frontend/coverage/block-navigation.js +0 -87
- package/agent-pane/frontend/coverage/clover.xml +0 -2962
- package/agent-pane/frontend/coverage/coverage-final.json +0 -37
- package/agent-pane/frontend/coverage/favicon.png +0 -0
- package/agent-pane/frontend/coverage/index.html +0 -251
- package/agent-pane/frontend/coverage/prettify.css +0 -1
- package/agent-pane/frontend/coverage/prettify.js +0 -2
- package/agent-pane/frontend/coverage/sort-arrow-sprite.png +0 -0
- package/agent-pane/frontend/coverage/sorter.js +0 -210
- package/agent-pane/frontend/coverage/src/App.tsx.html +0 -217
- package/agent-pane/frontend/coverage/src/AppInitializer.tsx.html +0 -223
- package/agent-pane/frontend/coverage/src/api/client.ts.html +0 -187
- package/agent-pane/frontend/coverage/src/api/index.html +0 -161
- package/agent-pane/frontend/coverage/src/api/sessions.ts.html +0 -316
- package/agent-pane/frontend/coverage/src/api/websocket.ts.html +0 -544
- package/agent-pane/frontend/coverage/src/api/workspaces.ts.html +0 -199
- package/agent-pane/frontend/coverage/src/components/CollapsibleToolCalls.tsx.html +0 -226
- package/agent-pane/frontend/coverage/src/components/CommandInputBar.tsx.html +0 -382
- package/agent-pane/frontend/coverage/src/components/CommandPalette.tsx.html +0 -715
- package/agent-pane/frontend/coverage/src/components/IdeWorkspace.tsx.html +0 -160
- package/agent-pane/frontend/coverage/src/components/ModelSelector.tsx.html +0 -478
- package/agent-pane/frontend/coverage/src/components/NewSessionDialog.tsx.html +0 -472
- package/agent-pane/frontend/coverage/src/components/RenderArea.tsx.html +0 -574
- package/agent-pane/frontend/coverage/src/components/RightPanel.tsx.html +0 -205
- package/agent-pane/frontend/coverage/src/components/RuntimeIcon.tsx.html +0 -133
- package/agent-pane/frontend/coverage/src/components/SessionTabs.tsx.html +0 -217
- package/agent-pane/frontend/coverage/src/components/StatusBar.tsx.html +0 -271
- package/agent-pane/frontend/coverage/src/components/StatusDot.tsx.html +0 -109
- package/agent-pane/frontend/coverage/src/components/Toast.tsx.html +0 -313
- package/agent-pane/frontend/coverage/src/components/TurnContent.tsx.html +0 -1216
- package/agent-pane/frontend/coverage/src/components/WorkspaceSidebar.tsx.html +0 -1138
- package/agent-pane/frontend/coverage/src/components/index.html +0 -326
- package/agent-pane/frontend/coverage/src/components/panels/ChangesPanel.tsx.html +0 -247
- package/agent-pane/frontend/coverage/src/components/panels/LogsPanel.tsx.html +0 -160
- package/agent-pane/frontend/coverage/src/components/panels/MetricsPanel.tsx.html +0 -427
- package/agent-pane/frontend/coverage/src/components/panels/TurnsPanel.tsx.html +0 -397
- package/agent-pane/frontend/coverage/src/components/panels/index.html +0 -161
- package/agent-pane/frontend/coverage/src/constants/index.html +0 -116
- package/agent-pane/frontend/coverage/src/constants/models.ts.html +0 -406
- package/agent-pane/frontend/coverage/src/hooks/index.html +0 -146
- package/agent-pane/frontend/coverage/src/hooks/useEscapeKey.ts.html +0 -124
- package/agent-pane/frontend/coverage/src/hooks/useOutsideClick.ts.html +0 -142
- package/agent-pane/frontend/coverage/src/hooks/useSessionStatus.ts.html +0 -187
- package/agent-pane/frontend/coverage/src/index.html +0 -146
- package/agent-pane/frontend/coverage/src/main.tsx.html +0 -115
- package/agent-pane/frontend/coverage/src/store/index.html +0 -116
- package/agent-pane/frontend/coverage/src/store/store.ts.html +0 -2404
- package/agent-pane/frontend/coverage/src/test/component-helpers.ts.html +0 -190
- package/agent-pane/frontend/coverage/src/test/fixtures.ts.html +0 -367
- package/agent-pane/frontend/coverage/src/test/index.html +0 -131
- package/agent-pane/frontend/coverage/src/types/index.html +0 -116
- package/agent-pane/frontend/coverage/src/types/index.ts.html +0 -466
- package/agent-pane/frontend/coverage/src/utils/changes.ts.html +0 -202
- package/agent-pane/frontend/coverage/src/utils/duration.ts.html +0 -127
- package/agent-pane/frontend/coverage/src/utils/index.html +0 -131
- package/agent-pane/frontend/dist/assets/index-34WaZYsW.css +0 -1
- package/agent-pane/frontend/dist/assets/index-y7xlT86e.js +0 -362
- package/agent-pane/frontend/dist/index.html +0 -19
- package/agent-pane/frontend/index.html +0 -18
- package/agent-pane/frontend/package-lock.json +0 -4211
- package/agent-pane/frontend/package.json +0 -35
- package/agent-pane/frontend/src/App.test.tsx +0 -74
- package/agent-pane/frontend/src/App.tsx +0 -44
- package/agent-pane/frontend/src/AppInitializer.test.tsx +0 -142
- package/agent-pane/frontend/src/AppInitializer.tsx +0 -46
- package/agent-pane/frontend/src/__tests__/ThreadsPanel.test.tsx +0 -192
- package/agent-pane/frontend/src/api/client.test.ts +0 -126
- package/agent-pane/frontend/src/api/client.ts +0 -34
- package/agent-pane/frontend/src/api/models.ts +0 -7
- package/agent-pane/frontend/src/api/providers.ts +0 -17
- package/agent-pane/frontend/src/api/sessions.test.ts +0 -245
- package/agent-pane/frontend/src/api/sessions.ts +0 -97
- package/agent-pane/frontend/src/api/skills.ts +0 -12
- package/agent-pane/frontend/src/api/websocket.test.ts +0 -288
- package/agent-pane/frontend/src/api/websocket.ts +0 -238
- package/agent-pane/frontend/src/api/workspaces.test.ts +0 -112
- package/agent-pane/frontend/src/api/workspaces.ts +0 -38
- package/agent-pane/frontend/src/components/CollapsibleToolCalls.test.tsx +0 -49
- package/agent-pane/frontend/src/components/CollapsibleToolCalls.tsx +0 -56
- package/agent-pane/frontend/src/components/CommandInputBar.test.tsx +0 -133
- package/agent-pane/frontend/src/components/CommandInputBar.tsx +0 -584
- package/agent-pane/frontend/src/components/CommandPalette.test.tsx +0 -226
- package/agent-pane/frontend/src/components/CommandPalette.tsx +0 -194
- package/agent-pane/frontend/src/components/CommentableText.test.tsx +0 -196
- package/agent-pane/frontend/src/components/CommentableText.tsx +0 -379
- package/agent-pane/frontend/src/components/IdeWorkspace.test.tsx +0 -39
- package/agent-pane/frontend/src/components/IdeWorkspace.tsx +0 -51
- package/agent-pane/frontend/src/components/ModelSelector.test.tsx +0 -129
- package/agent-pane/frontend/src/components/ModelSelector.tsx +0 -191
- package/agent-pane/frontend/src/components/NewSessionDialog.test.tsx +0 -95
- package/agent-pane/frontend/src/components/NewSessionDialog.tsx +0 -129
- package/agent-pane/frontend/src/components/RenderArea.test.tsx +0 -160
- package/agent-pane/frontend/src/components/RenderArea.tsx +0 -170
- package/agent-pane/frontend/src/components/ResizeHandle.tsx +0 -29
- package/agent-pane/frontend/src/components/RightPanel.test.tsx +0 -43
- package/agent-pane/frontend/src/components/RightPanel.tsx +0 -46
- package/agent-pane/frontend/src/components/RuntimeIcon.test.tsx +0 -32
- package/agent-pane/frontend/src/components/RuntimeIcon.tsx +0 -16
- package/agent-pane/frontend/src/components/SessionTabs.test.tsx +0 -72
- package/agent-pane/frontend/src/components/SessionTabs.tsx +0 -49
- package/agent-pane/frontend/src/components/StatusBar.test.tsx +0 -56
- package/agent-pane/frontend/src/components/StatusBar.tsx +0 -129
- package/agent-pane/frontend/src/components/StatusDot.test.tsx +0 -25
- package/agent-pane/frontend/src/components/StatusDot.tsx +0 -8
- package/agent-pane/frontend/src/components/Toast.test.tsx +0 -79
- package/agent-pane/frontend/src/components/Toast.tsx +0 -76
- package/agent-pane/frontend/src/components/TurnContent.test.tsx +0 -298
- package/agent-pane/frontend/src/components/TurnContent.tsx +0 -548
- package/agent-pane/frontend/src/components/WorkspaceSidebar.test.tsx +0 -297
- package/agent-pane/frontend/src/components/WorkspaceSidebar.tsx +0 -351
- package/agent-pane/frontend/src/components/input/OptionSubPopup.tsx +0 -32
- package/agent-pane/frontend/src/components/input/SkillMentionPopup.test.tsx +0 -63
- package/agent-pane/frontend/src/components/input/SkillMentionPopup.tsx +0 -78
- package/agent-pane/frontend/src/components/input/SlashPopup.test.tsx +0 -96
- package/agent-pane/frontend/src/components/input/SlashPopup.tsx +0 -82
- package/agent-pane/frontend/src/components/panels/ChangesPanel.test.tsx +0 -61
- package/agent-pane/frontend/src/components/panels/ChangesPanel.tsx +0 -54
- package/agent-pane/frontend/src/components/panels/TasksPanel.test.tsx +0 -97
- package/agent-pane/frontend/src/components/panels/TasksPanel.tsx +0 -208
- package/agent-pane/frontend/src/components/panels/ThreadsPanel.tsx +0 -382
- package/agent-pane/frontend/src/components/panels/TurnsPanel.test.tsx +0 -83
- package/agent-pane/frontend/src/components/panels/TurnsPanel.tsx +0 -126
- package/agent-pane/frontend/src/constants/models.test.ts +0 -97
- package/agent-pane/frontend/src/constants/models.ts +0 -166
- package/agent-pane/frontend/src/hooks/useEscapeKey.test.ts +0 -42
- package/agent-pane/frontend/src/hooks/useEscapeKey.ts +0 -13
- package/agent-pane/frontend/src/hooks/useOutsideClick.test.ts +0 -92
- package/agent-pane/frontend/src/hooks/useOutsideClick.ts +0 -19
- package/agent-pane/frontend/src/hooks/useProvider.ts +0 -44
- package/agent-pane/frontend/src/hooks/useResizable.test.ts +0 -97
- package/agent-pane/frontend/src/hooks/useResizable.ts +0 -75
- package/agent-pane/frontend/src/hooks/useSessionStatus.test.ts +0 -116
- package/agent-pane/frontend/src/hooks/useSessionStatus.ts +0 -34
- package/agent-pane/frontend/src/main.test.tsx +0 -37
- package/agent-pane/frontend/src/main.tsx +0 -10
- package/agent-pane/frontend/src/store/sessionSlice.ts +0 -440
- package/agent-pane/frontend/src/store/store.test.ts +0 -1319
- package/agent-pane/frontend/src/store/store.ts +0 -37
- package/agent-pane/frontend/src/store/threadSlice.ts +0 -136
- package/agent-pane/frontend/src/store/uiSlice.ts +0 -133
- package/agent-pane/frontend/src/store/workspaceSlice.ts +0 -77
- package/agent-pane/frontend/src/store/wsSlice.ts +0 -361
- package/agent-pane/frontend/src/styles/app.css +0 -611
- package/agent-pane/frontend/src/styles/tokens.css +0 -62
- package/agent-pane/frontend/src/test/component-helpers.ts +0 -38
- package/agent-pane/frontend/src/test/fixtures.ts +0 -100
- package/agent-pane/frontend/src/test-setup.ts +0 -5
- package/agent-pane/frontend/src/types/index.test.ts +0 -128
- package/agent-pane/frontend/src/types/index.ts +0 -132
- package/agent-pane/frontend/src/utils/changes.test.ts +0 -81
- package/agent-pane/frontend/src/utils/changes.ts +0 -39
- package/agent-pane/frontend/src/utils/duration.test.ts +0 -75
- package/agent-pane/frontend/src/utils/duration.ts +0 -14
- package/agent-pane/frontend/tsconfig.json +0 -25
- package/agent-pane/frontend/vite.config.ts +0 -22
- package/agent-pane/frontend/vitest.config.ts +0 -29
- package/agent-pane/package-lock.json +0 -1527
- package/agent-pane/package.json +0 -19
- package/agent-pane/shared/provider-types.ts +0 -67
- package/agent-pane/shared/types.ts +0 -167
|
@@ -1,1402 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for src/codex/codex-provider.ts</title>
|
|
7
|
-
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
-
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
-
<style type='text/css'>
|
|
13
|
-
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
-
}
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
|
|
19
|
-
<body>
|
|
20
|
-
<div class='wrapper'>
|
|
21
|
-
<div class='pad1'>
|
|
22
|
-
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/codex</a> codex-provider.ts</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">0% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>0/349</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">0% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>0/1</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">0% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>0/1</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">0% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>0/349</span>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</div>
|
|
54
|
-
<p class="quiet">
|
|
55
|
-
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
-
</p>
|
|
57
|
-
<template id="filterTemplate">
|
|
58
|
-
<div class="quiet">
|
|
59
|
-
Filter:
|
|
60
|
-
<input type="search" id="fileSearch">
|
|
61
|
-
</div>
|
|
62
|
-
</template>
|
|
63
|
-
</div>
|
|
64
|
-
<div class='status-line low'></div>
|
|
65
|
-
<pre><table class="coverage">
|
|
66
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
-
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
-
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
-
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
-
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
-
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
-
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
-
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
-
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
-
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
-
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
-
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
-
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
-
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
-
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
-
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
-
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
-
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
-
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
-
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
-
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
-
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
-
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
-
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
-
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
-
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
-
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
-
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
-
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
-
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
-
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
-
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
-
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
-
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
-
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
-
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
-
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
-
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
-
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
-
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
-
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
-
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
-
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
-
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
-
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
-
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
-
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
-
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
-
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
-
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
-
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
-
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
-
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
-
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
-
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
-
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
-
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
-
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
-
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
-
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
-
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
-
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
-
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
-
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
-
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
-
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
-
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
-
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
-
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
-
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
-
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
-
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
-
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
-
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
-
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
-
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
-
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
-
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
-
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
-
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
-
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
-
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
-
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
-
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
-
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
-
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
-
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
-
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
-
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
-
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
-
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
-
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
-
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
-
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
-
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
-
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
-
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
-
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
-
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
-
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
-
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
-
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
-
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
-
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
-
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
-
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
-
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
-
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
-
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
-
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
-
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
-
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
-
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
-
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
-
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
-
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
-
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
-
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
-
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
-
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
-
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
-
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
-
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
-
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
-
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
-
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
-
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
-
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
-
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
-
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
-
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
-
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
-
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
-
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
-
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
-
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
-
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
-
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
-
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
-
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
-
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
-
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
-
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
-
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
-
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
-
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
-
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
-
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
-
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
-
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
-
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
-
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
-
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
-
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
-
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
-
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
-
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
-
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
-
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
-
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
-
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
-
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
-
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
-
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
-
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
-
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
-
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
-
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
-
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
-
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
-
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
-
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
-
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
-
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
-
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
-
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
-
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
-
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
-
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
-
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
-
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
-
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
-
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
-
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
-
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
-
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
-
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
-
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
-
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
-
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
-
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
-
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
-
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
-
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
-
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
-
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
-
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
-
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
-
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
-
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
-
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
-
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
-
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
-
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
-
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
-
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
-
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
-
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
-
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
-
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
-
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
-
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
-
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
-
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
-
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
-
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
-
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
-
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
-
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
-
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
-
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
-
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
-
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
-
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
-
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
-
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
-
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
-
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
-
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
-
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
-
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
-
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
-
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
-
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
-
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
-
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
-
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
-
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
-
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
-
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
-
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
-
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
-
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
-
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
-
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
-
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
-
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
-
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
-
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
-
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
-
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
-
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
-
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
-
<a name='L440'></a><a href='#L440'>440</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
506
|
-
<span class="cline-any cline-no"> </span>
|
|
507
|
-
<span class="cline-any cline-no"> </span>
|
|
508
|
-
<span class="cline-any cline-no"> </span>
|
|
509
|
-
<span class="cline-any cline-no"> </span>
|
|
510
|
-
<span class="cline-any cline-no"> </span>
|
|
511
|
-
<span class="cline-any cline-no"> </span>
|
|
512
|
-
<span class="cline-any cline-neutral"> </span>
|
|
513
|
-
<span class="cline-any cline-neutral"> </span>
|
|
514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
515
|
-
<span class="cline-any cline-neutral"> </span>
|
|
516
|
-
<span class="cline-any cline-neutral"> </span>
|
|
517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
518
|
-
<span class="cline-any cline-neutral"> </span>
|
|
519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
520
|
-
<span class="cline-any cline-no"> </span>
|
|
521
|
-
<span class="cline-any cline-neutral"> </span>
|
|
522
|
-
<span class="cline-any cline-neutral"> </span>
|
|
523
|
-
<span class="cline-any cline-no"> </span>
|
|
524
|
-
<span class="cline-any cline-no"> </span>
|
|
525
|
-
<span class="cline-any cline-no"> </span>
|
|
526
|
-
<span class="cline-any cline-no"> </span>
|
|
527
|
-
<span class="cline-any cline-no"> </span>
|
|
528
|
-
<span class="cline-any cline-no"> </span>
|
|
529
|
-
<span class="cline-any cline-no"> </span>
|
|
530
|
-
<span class="cline-any cline-no"> </span>
|
|
531
|
-
<span class="cline-any cline-no"> </span>
|
|
532
|
-
<span class="cline-any cline-no"> </span>
|
|
533
|
-
<span class="cline-any cline-no"> </span>
|
|
534
|
-
<span class="cline-any cline-no"> </span>
|
|
535
|
-
<span class="cline-any cline-no"> </span>
|
|
536
|
-
<span class="cline-any cline-neutral"> </span>
|
|
537
|
-
<span class="cline-any cline-neutral"> </span>
|
|
538
|
-
<span class="cline-any cline-no"> </span>
|
|
539
|
-
<span class="cline-any cline-no"> </span>
|
|
540
|
-
<span class="cline-any cline-no"> </span>
|
|
541
|
-
<span class="cline-any cline-no"> </span>
|
|
542
|
-
<span class="cline-any cline-no"> </span>
|
|
543
|
-
<span class="cline-any cline-no"> </span>
|
|
544
|
-
<span class="cline-any cline-no"> </span>
|
|
545
|
-
<span class="cline-any cline-no"> </span>
|
|
546
|
-
<span class="cline-any cline-no"> </span>
|
|
547
|
-
<span class="cline-any cline-no"> </span>
|
|
548
|
-
<span class="cline-any cline-no"> </span>
|
|
549
|
-
<span class="cline-any cline-no"> </span>
|
|
550
|
-
<span class="cline-any cline-no"> </span>
|
|
551
|
-
<span class="cline-any cline-no"> </span>
|
|
552
|
-
<span class="cline-any cline-no"> </span>
|
|
553
|
-
<span class="cline-any cline-no"> </span>
|
|
554
|
-
<span class="cline-any cline-no"> </span>
|
|
555
|
-
<span class="cline-any cline-no"> </span>
|
|
556
|
-
<span class="cline-any cline-no"> </span>
|
|
557
|
-
<span class="cline-any cline-no"> </span>
|
|
558
|
-
<span class="cline-any cline-no"> </span>
|
|
559
|
-
<span class="cline-any cline-no"> </span>
|
|
560
|
-
<span class="cline-any cline-no"> </span>
|
|
561
|
-
<span class="cline-any cline-no"> </span>
|
|
562
|
-
<span class="cline-any cline-neutral"> </span>
|
|
563
|
-
<span class="cline-any cline-no"> </span>
|
|
564
|
-
<span class="cline-any cline-no"> </span>
|
|
565
|
-
<span class="cline-any cline-no"> </span>
|
|
566
|
-
<span class="cline-any cline-neutral"> </span>
|
|
567
|
-
<span class="cline-any cline-no"> </span>
|
|
568
|
-
<span class="cline-any cline-no"> </span>
|
|
569
|
-
<span class="cline-any cline-no"> </span>
|
|
570
|
-
<span class="cline-any cline-no"> </span>
|
|
571
|
-
<span class="cline-any cline-no"> </span>
|
|
572
|
-
<span class="cline-any cline-no"> </span>
|
|
573
|
-
<span class="cline-any cline-no"> </span>
|
|
574
|
-
<span class="cline-any cline-neutral"> </span>
|
|
575
|
-
<span class="cline-any cline-no"> </span>
|
|
576
|
-
<span class="cline-any cline-no"> </span>
|
|
577
|
-
<span class="cline-any cline-no"> </span>
|
|
578
|
-
<span class="cline-any cline-no"> </span>
|
|
579
|
-
<span class="cline-any cline-no"> </span>
|
|
580
|
-
<span class="cline-any cline-neutral"> </span>
|
|
581
|
-
<span class="cline-any cline-no"> </span>
|
|
582
|
-
<span class="cline-any cline-no"> </span>
|
|
583
|
-
<span class="cline-any cline-neutral"> </span>
|
|
584
|
-
<span class="cline-any cline-no"> </span>
|
|
585
|
-
<span class="cline-any cline-no"> </span>
|
|
586
|
-
<span class="cline-any cline-no"> </span>
|
|
587
|
-
<span class="cline-any cline-no"> </span>
|
|
588
|
-
<span class="cline-any cline-no"> </span>
|
|
589
|
-
<span class="cline-any cline-neutral"> </span>
|
|
590
|
-
<span class="cline-any cline-no"> </span>
|
|
591
|
-
<span class="cline-any cline-no"> </span>
|
|
592
|
-
<span class="cline-any cline-neutral"> </span>
|
|
593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
594
|
-
<span class="cline-any cline-no"> </span>
|
|
595
|
-
<span class="cline-any cline-no"> </span>
|
|
596
|
-
<span class="cline-any cline-neutral"> </span>
|
|
597
|
-
<span class="cline-any cline-neutral"> </span>
|
|
598
|
-
<span class="cline-any cline-no"> </span>
|
|
599
|
-
<span class="cline-any cline-no"> </span>
|
|
600
|
-
<span class="cline-any cline-neutral"> </span>
|
|
601
|
-
<span class="cline-any cline-no"> </span>
|
|
602
|
-
<span class="cline-any cline-no"> </span>
|
|
603
|
-
<span class="cline-any cline-no"> </span>
|
|
604
|
-
<span class="cline-any cline-no"> </span>
|
|
605
|
-
<span class="cline-any cline-no"> </span>
|
|
606
|
-
<span class="cline-any cline-no"> </span>
|
|
607
|
-
<span class="cline-any cline-no"> </span>
|
|
608
|
-
<span class="cline-any cline-no"> </span>
|
|
609
|
-
<span class="cline-any cline-no"> </span>
|
|
610
|
-
<span class="cline-any cline-no"> </span>
|
|
611
|
-
<span class="cline-any cline-no"> </span>
|
|
612
|
-
<span class="cline-any cline-no"> </span>
|
|
613
|
-
<span class="cline-any cline-no"> </span>
|
|
614
|
-
<span class="cline-any cline-no"> </span>
|
|
615
|
-
<span class="cline-any cline-no"> </span>
|
|
616
|
-
<span class="cline-any cline-no"> </span>
|
|
617
|
-
<span class="cline-any cline-no"> </span>
|
|
618
|
-
<span class="cline-any cline-neutral"> </span>
|
|
619
|
-
<span class="cline-any cline-neutral"> </span>
|
|
620
|
-
<span class="cline-any cline-no"> </span>
|
|
621
|
-
<span class="cline-any cline-no"> </span>
|
|
622
|
-
<span class="cline-any cline-neutral"> </span>
|
|
623
|
-
<span class="cline-any cline-no"> </span>
|
|
624
|
-
<span class="cline-any cline-no"> </span>
|
|
625
|
-
<span class="cline-any cline-no"> </span>
|
|
626
|
-
<span class="cline-any cline-neutral"> </span>
|
|
627
|
-
<span class="cline-any cline-no"> </span>
|
|
628
|
-
<span class="cline-any cline-neutral"> </span>
|
|
629
|
-
<span class="cline-any cline-neutral"> </span>
|
|
630
|
-
<span class="cline-any cline-no"> </span>
|
|
631
|
-
<span class="cline-any cline-no"> </span>
|
|
632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
633
|
-
<span class="cline-any cline-no"> </span>
|
|
634
|
-
<span class="cline-any cline-no"> </span>
|
|
635
|
-
<span class="cline-any cline-no"> </span>
|
|
636
|
-
<span class="cline-any cline-no"> </span>
|
|
637
|
-
<span class="cline-any cline-no"> </span>
|
|
638
|
-
<span class="cline-any cline-no"> </span>
|
|
639
|
-
<span class="cline-any cline-no"> </span>
|
|
640
|
-
<span class="cline-any cline-neutral"> </span>
|
|
641
|
-
<span class="cline-any cline-no"> </span>
|
|
642
|
-
<span class="cline-any cline-no"> </span>
|
|
643
|
-
<span class="cline-any cline-no"> </span>
|
|
644
|
-
<span class="cline-any cline-no"> </span>
|
|
645
|
-
<span class="cline-any cline-no"> </span>
|
|
646
|
-
<span class="cline-any cline-no"> </span>
|
|
647
|
-
<span class="cline-any cline-no"> </span>
|
|
648
|
-
<span class="cline-any cline-no"> </span>
|
|
649
|
-
<span class="cline-any cline-no"> </span>
|
|
650
|
-
<span class="cline-any cline-no"> </span>
|
|
651
|
-
<span class="cline-any cline-no"> </span>
|
|
652
|
-
<span class="cline-any cline-no"> </span>
|
|
653
|
-
<span class="cline-any cline-no"> </span>
|
|
654
|
-
<span class="cline-any cline-no"> </span>
|
|
655
|
-
<span class="cline-any cline-no"> </span>
|
|
656
|
-
<span class="cline-any cline-no"> </span>
|
|
657
|
-
<span class="cline-any cline-no"> </span>
|
|
658
|
-
<span class="cline-any cline-no"> </span>
|
|
659
|
-
<span class="cline-any cline-no"> </span>
|
|
660
|
-
<span class="cline-any cline-no"> </span>
|
|
661
|
-
<span class="cline-any cline-no"> </span>
|
|
662
|
-
<span class="cline-any cline-neutral"> </span>
|
|
663
|
-
<span class="cline-any cline-neutral"> </span>
|
|
664
|
-
<span class="cline-any cline-no"> </span>
|
|
665
|
-
<span class="cline-any cline-no"> </span>
|
|
666
|
-
<span class="cline-any cline-no"> </span>
|
|
667
|
-
<span class="cline-any cline-no"> </span>
|
|
668
|
-
<span class="cline-any cline-no"> </span>
|
|
669
|
-
<span class="cline-any cline-no"> </span>
|
|
670
|
-
<span class="cline-any cline-no"> </span>
|
|
671
|
-
<span class="cline-any cline-no"> </span>
|
|
672
|
-
<span class="cline-any cline-neutral"> </span>
|
|
673
|
-
<span class="cline-any cline-neutral"> </span>
|
|
674
|
-
<span class="cline-any cline-no"> </span>
|
|
675
|
-
<span class="cline-any cline-no"> </span>
|
|
676
|
-
<span class="cline-any cline-no"> </span>
|
|
677
|
-
<span class="cline-any cline-neutral"> </span>
|
|
678
|
-
<span class="cline-any cline-no"> </span>
|
|
679
|
-
<span class="cline-any cline-no"> </span>
|
|
680
|
-
<span class="cline-any cline-no"> </span>
|
|
681
|
-
<span class="cline-any cline-neutral"> </span>
|
|
682
|
-
<span class="cline-any cline-no"> </span>
|
|
683
|
-
<span class="cline-any cline-no"> </span>
|
|
684
|
-
<span class="cline-any cline-no"> </span>
|
|
685
|
-
<span class="cline-any cline-no"> </span>
|
|
686
|
-
<span class="cline-any cline-no"> </span>
|
|
687
|
-
<span class="cline-any cline-no"> </span>
|
|
688
|
-
<span class="cline-any cline-no"> </span>
|
|
689
|
-
<span class="cline-any cline-no"> </span>
|
|
690
|
-
<span class="cline-any cline-no"> </span>
|
|
691
|
-
<span class="cline-any cline-neutral"> </span>
|
|
692
|
-
<span class="cline-any cline-no"> </span>
|
|
693
|
-
<span class="cline-any cline-neutral"> </span>
|
|
694
|
-
<span class="cline-any cline-no"> </span>
|
|
695
|
-
<span class="cline-any cline-no"> </span>
|
|
696
|
-
<span class="cline-any cline-neutral"> </span>
|
|
697
|
-
<span class="cline-any cline-no"> </span>
|
|
698
|
-
<span class="cline-any cline-no"> </span>
|
|
699
|
-
<span class="cline-any cline-no"> </span>
|
|
700
|
-
<span class="cline-any cline-no"> </span>
|
|
701
|
-
<span class="cline-any cline-no"> </span>
|
|
702
|
-
<span class="cline-any cline-no"> </span>
|
|
703
|
-
<span class="cline-any cline-no"> </span>
|
|
704
|
-
<span class="cline-any cline-no"> </span>
|
|
705
|
-
<span class="cline-any cline-neutral"> </span>
|
|
706
|
-
<span class="cline-any cline-no"> </span>
|
|
707
|
-
<span class="cline-any cline-no"> </span>
|
|
708
|
-
<span class="cline-any cline-no"> </span>
|
|
709
|
-
<span class="cline-any cline-no"> </span>
|
|
710
|
-
<span class="cline-any cline-no"> </span>
|
|
711
|
-
<span class="cline-any cline-no"> </span>
|
|
712
|
-
<span class="cline-any cline-neutral"> </span>
|
|
713
|
-
<span class="cline-any cline-neutral"> </span>
|
|
714
|
-
<span class="cline-any cline-no"> </span>
|
|
715
|
-
<span class="cline-any cline-no"> </span>
|
|
716
|
-
<span class="cline-any cline-no"> </span>
|
|
717
|
-
<span class="cline-any cline-no"> </span>
|
|
718
|
-
<span class="cline-any cline-no"> </span>
|
|
719
|
-
<span class="cline-any cline-no"> </span>
|
|
720
|
-
<span class="cline-any cline-no"> </span>
|
|
721
|
-
<span class="cline-any cline-no"> </span>
|
|
722
|
-
<span class="cline-any cline-no"> </span>
|
|
723
|
-
<span class="cline-any cline-no"> </span>
|
|
724
|
-
<span class="cline-any cline-no"> </span>
|
|
725
|
-
<span class="cline-any cline-no"> </span>
|
|
726
|
-
<span class="cline-any cline-no"> </span>
|
|
727
|
-
<span class="cline-any cline-no"> </span>
|
|
728
|
-
<span class="cline-any cline-no"> </span>
|
|
729
|
-
<span class="cline-any cline-no"> </span>
|
|
730
|
-
<span class="cline-any cline-no"> </span>
|
|
731
|
-
<span class="cline-any cline-no"> </span>
|
|
732
|
-
<span class="cline-any cline-neutral"> </span>
|
|
733
|
-
<span class="cline-any cline-no"> </span>
|
|
734
|
-
<span class="cline-any cline-no"> </span>
|
|
735
|
-
<span class="cline-any cline-no"> </span>
|
|
736
|
-
<span class="cline-any cline-no"> </span>
|
|
737
|
-
<span class="cline-any cline-no"> </span>
|
|
738
|
-
<span class="cline-any cline-no"> </span>
|
|
739
|
-
<span class="cline-any cline-no"> </span>
|
|
740
|
-
<span class="cline-any cline-neutral"> </span>
|
|
741
|
-
<span class="cline-any cline-neutral"> </span>
|
|
742
|
-
<span class="cline-any cline-no"> </span>
|
|
743
|
-
<span class="cline-any cline-no"> </span>
|
|
744
|
-
<span class="cline-any cline-no"> </span>
|
|
745
|
-
<span class="cline-any cline-no"> </span>
|
|
746
|
-
<span class="cline-any cline-no"> </span>
|
|
747
|
-
<span class="cline-any cline-no"> </span>
|
|
748
|
-
<span class="cline-any cline-no"> </span>
|
|
749
|
-
<span class="cline-any cline-no"> </span>
|
|
750
|
-
<span class="cline-any cline-no"> </span>
|
|
751
|
-
<span class="cline-any cline-no"> </span>
|
|
752
|
-
<span class="cline-any cline-no"> </span>
|
|
753
|
-
<span class="cline-any cline-no"> </span>
|
|
754
|
-
<span class="cline-any cline-no"> </span>
|
|
755
|
-
<span class="cline-any cline-neutral"> </span>
|
|
756
|
-
<span class="cline-any cline-neutral"> </span>
|
|
757
|
-
<span class="cline-any cline-no"> </span>
|
|
758
|
-
<span class="cline-any cline-no"> </span>
|
|
759
|
-
<span class="cline-any cline-no"> </span>
|
|
760
|
-
<span class="cline-any cline-no"> </span>
|
|
761
|
-
<span class="cline-any cline-no"> </span>
|
|
762
|
-
<span class="cline-any cline-neutral"> </span>
|
|
763
|
-
<span class="cline-any cline-neutral"> </span>
|
|
764
|
-
<span class="cline-any cline-no"> </span>
|
|
765
|
-
<span class="cline-any cline-no"> </span>
|
|
766
|
-
<span class="cline-any cline-no"> </span>
|
|
767
|
-
<span class="cline-any cline-neutral"> </span>
|
|
768
|
-
<span class="cline-any cline-no"> </span>
|
|
769
|
-
<span class="cline-any cline-no"> </span>
|
|
770
|
-
<span class="cline-any cline-no"> </span>
|
|
771
|
-
<span class="cline-any cline-neutral"> </span>
|
|
772
|
-
<span class="cline-any cline-no"> </span>
|
|
773
|
-
<span class="cline-any cline-no"> </span>
|
|
774
|
-
<span class="cline-any cline-no"> </span>
|
|
775
|
-
<span class="cline-any cline-no"> </span>
|
|
776
|
-
<span class="cline-any cline-no"> </span>
|
|
777
|
-
<span class="cline-any cline-no"> </span>
|
|
778
|
-
<span class="cline-any cline-no"> </span>
|
|
779
|
-
<span class="cline-any cline-no"> </span>
|
|
780
|
-
<span class="cline-any cline-no"> </span>
|
|
781
|
-
<span class="cline-any cline-no"> </span>
|
|
782
|
-
<span class="cline-any cline-neutral"> </span>
|
|
783
|
-
<span class="cline-any cline-neutral"> </span>
|
|
784
|
-
<span class="cline-any cline-no"> </span>
|
|
785
|
-
<span class="cline-any cline-no"> </span>
|
|
786
|
-
<span class="cline-any cline-no"> </span>
|
|
787
|
-
<span class="cline-any cline-neutral"> </span>
|
|
788
|
-
<span class="cline-any cline-no"> </span>
|
|
789
|
-
<span class="cline-any cline-no"> </span>
|
|
790
|
-
<span class="cline-any cline-no"> </span>
|
|
791
|
-
<span class="cline-any cline-no"> </span>
|
|
792
|
-
<span class="cline-any cline-no"> </span>
|
|
793
|
-
<span class="cline-any cline-no"> </span>
|
|
794
|
-
<span class="cline-any cline-no"> </span>
|
|
795
|
-
<span class="cline-any cline-no"> </span>
|
|
796
|
-
<span class="cline-any cline-no"> </span>
|
|
797
|
-
<span class="cline-any cline-no"> </span>
|
|
798
|
-
<span class="cline-any cline-no"> </span>
|
|
799
|
-
<span class="cline-any cline-neutral"> </span>
|
|
800
|
-
<span class="cline-any cline-no"> </span>
|
|
801
|
-
<span class="cline-any cline-no"> </span>
|
|
802
|
-
<span class="cline-any cline-no"> </span>
|
|
803
|
-
<span class="cline-any cline-no"> </span>
|
|
804
|
-
<span class="cline-any cline-no"> </span>
|
|
805
|
-
<span class="cline-any cline-no"> </span>
|
|
806
|
-
<span class="cline-any cline-no"> </span>
|
|
807
|
-
<span class="cline-any cline-no"> </span>
|
|
808
|
-
<span class="cline-any cline-no"> </span>
|
|
809
|
-
<span class="cline-any cline-no"> </span>
|
|
810
|
-
<span class="cline-any cline-no"> </span>
|
|
811
|
-
<span class="cline-any cline-no"> </span>
|
|
812
|
-
<span class="cline-any cline-no"> </span>
|
|
813
|
-
<span class="cline-any cline-neutral"> </span>
|
|
814
|
-
<span class="cline-any cline-no"> </span>
|
|
815
|
-
<span class="cline-any cline-no"> </span>
|
|
816
|
-
<span class="cline-any cline-no"> </span>
|
|
817
|
-
<span class="cline-any cline-no"> </span>
|
|
818
|
-
<span class="cline-any cline-no"> </span>
|
|
819
|
-
<span class="cline-any cline-no"> </span>
|
|
820
|
-
<span class="cline-any cline-no"> </span>
|
|
821
|
-
<span class="cline-any cline-no"> </span>
|
|
822
|
-
<span class="cline-any cline-no"> </span>
|
|
823
|
-
<span class="cline-any cline-no"> </span>
|
|
824
|
-
<span class="cline-any cline-no"> </span>
|
|
825
|
-
<span class="cline-any cline-no"> </span>
|
|
826
|
-
<span class="cline-any cline-no"> </span>
|
|
827
|
-
<span class="cline-any cline-no"> </span>
|
|
828
|
-
<span class="cline-any cline-no"> </span>
|
|
829
|
-
<span class="cline-any cline-no"> </span>
|
|
830
|
-
<span class="cline-any cline-no"> </span>
|
|
831
|
-
<span class="cline-any cline-no"> </span>
|
|
832
|
-
<span class="cline-any cline-no"> </span>
|
|
833
|
-
<span class="cline-any cline-neutral"> </span>
|
|
834
|
-
<span class="cline-any cline-neutral"> </span>
|
|
835
|
-
<span class="cline-any cline-no"> </span>
|
|
836
|
-
<span class="cline-any cline-neutral"> </span>
|
|
837
|
-
<span class="cline-any cline-neutral"> </span>
|
|
838
|
-
<span class="cline-any cline-neutral"> </span>
|
|
839
|
-
<span class="cline-any cline-no"> </span>
|
|
840
|
-
<span class="cline-any cline-no"> </span>
|
|
841
|
-
<span class="cline-any cline-no"> </span>
|
|
842
|
-
<span class="cline-any cline-neutral"> </span>
|
|
843
|
-
<span class="cline-any cline-no"> </span>
|
|
844
|
-
<span class="cline-any cline-no"> </span>
|
|
845
|
-
<span class="cline-any cline-neutral"> </span>
|
|
846
|
-
<span class="cline-any cline-neutral"> </span>
|
|
847
|
-
<span class="cline-any cline-no"> </span>
|
|
848
|
-
<span class="cline-any cline-no"> </span>
|
|
849
|
-
<span class="cline-any cline-no"> </span>
|
|
850
|
-
<span class="cline-any cline-no"> </span>
|
|
851
|
-
<span class="cline-any cline-neutral"> </span>
|
|
852
|
-
<span class="cline-any cline-neutral"> </span>
|
|
853
|
-
<span class="cline-any cline-no"> </span>
|
|
854
|
-
<span class="cline-any cline-neutral"> </span>
|
|
855
|
-
<span class="cline-any cline-neutral"> </span>
|
|
856
|
-
<span class="cline-any cline-no"> </span>
|
|
857
|
-
<span class="cline-any cline-no"> </span>
|
|
858
|
-
<span class="cline-any cline-no"> </span>
|
|
859
|
-
<span class="cline-any cline-no"> </span>
|
|
860
|
-
<span class="cline-any cline-neutral"> </span>
|
|
861
|
-
<span class="cline-any cline-neutral"> </span>
|
|
862
|
-
<span class="cline-any cline-no"> </span>
|
|
863
|
-
<span class="cline-any cline-no"> </span>
|
|
864
|
-
<span class="cline-any cline-no"> </span>
|
|
865
|
-
<span class="cline-any cline-no"> </span>
|
|
866
|
-
<span class="cline-any cline-no"> </span>
|
|
867
|
-
<span class="cline-any cline-no"> </span>
|
|
868
|
-
<span class="cline-any cline-neutral"> </span>
|
|
869
|
-
<span class="cline-any cline-no"> </span>
|
|
870
|
-
<span class="cline-any cline-no"> </span>
|
|
871
|
-
<span class="cline-any cline-neutral"> </span>
|
|
872
|
-
<span class="cline-any cline-no"> </span>
|
|
873
|
-
<span class="cline-any cline-neutral"> </span>
|
|
874
|
-
<span class="cline-any cline-no"> </span>
|
|
875
|
-
<span class="cline-any cline-no"> </span>
|
|
876
|
-
<span class="cline-any cline-no"> </span>
|
|
877
|
-
<span class="cline-any cline-no"> </span>
|
|
878
|
-
<span class="cline-any cline-no"> </span>
|
|
879
|
-
<span class="cline-any cline-neutral"> </span>
|
|
880
|
-
<span class="cline-any cline-no"> </span>
|
|
881
|
-
<span class="cline-any cline-no"> </span>
|
|
882
|
-
<span class="cline-any cline-no"> </span>
|
|
883
|
-
<span class="cline-any cline-no"> </span>
|
|
884
|
-
<span class="cline-any cline-no"> </span>
|
|
885
|
-
<span class="cline-any cline-no"> </span>
|
|
886
|
-
<span class="cline-any cline-no"> </span>
|
|
887
|
-
<span class="cline-any cline-neutral"> </span>
|
|
888
|
-
<span class="cline-any cline-no"> </span>
|
|
889
|
-
<span class="cline-any cline-neutral"> </span>
|
|
890
|
-
<span class="cline-any cline-no"> </span>
|
|
891
|
-
<span class="cline-any cline-no"> </span>
|
|
892
|
-
<span class="cline-any cline-no"> </span>
|
|
893
|
-
<span class="cline-any cline-no"> </span>
|
|
894
|
-
<span class="cline-any cline-no"> </span>
|
|
895
|
-
<span class="cline-any cline-neutral"> </span>
|
|
896
|
-
<span class="cline-any cline-neutral"> </span>
|
|
897
|
-
<span class="cline-any cline-no"> </span>
|
|
898
|
-
<span class="cline-any cline-no"> </span>
|
|
899
|
-
<span class="cline-any cline-neutral"> </span>
|
|
900
|
-
<span class="cline-any cline-neutral"> </span>
|
|
901
|
-
<span class="cline-any cline-no"> </span>
|
|
902
|
-
<span class="cline-any cline-no"> </span>
|
|
903
|
-
<span class="cline-any cline-no"> </span>
|
|
904
|
-
<span class="cline-any cline-neutral"> </span>
|
|
905
|
-
<span class="cline-any cline-neutral"> </span>
|
|
906
|
-
<span class="cline-any cline-no"> </span>
|
|
907
|
-
<span class="cline-any cline-no"> </span>
|
|
908
|
-
<span class="cline-any cline-no"> </span>
|
|
909
|
-
<span class="cline-any cline-no"> </span>
|
|
910
|
-
<span class="cline-any cline-no"> </span>
|
|
911
|
-
<span class="cline-any cline-neutral"> </span>
|
|
912
|
-
<span class="cline-any cline-neutral"> </span>
|
|
913
|
-
<span class="cline-any cline-no"> </span>
|
|
914
|
-
<span class="cline-any cline-no"> </span>
|
|
915
|
-
<span class="cline-any cline-no"> </span>
|
|
916
|
-
<span class="cline-any cline-no"> </span>
|
|
917
|
-
<span class="cline-any cline-neutral"> </span>
|
|
918
|
-
<span class="cline-any cline-no"> </span>
|
|
919
|
-
<span class="cline-any cline-no"> </span>
|
|
920
|
-
<span class="cline-any cline-no"> </span>
|
|
921
|
-
<span class="cline-any cline-neutral"> </span>
|
|
922
|
-
<span class="cline-any cline-no"> </span>
|
|
923
|
-
<span class="cline-any cline-neutral"> </span>
|
|
924
|
-
<span class="cline-any cline-neutral"> </span>
|
|
925
|
-
<span class="cline-any cline-no"> </span>
|
|
926
|
-
<span class="cline-any cline-no"> </span>
|
|
927
|
-
<span class="cline-any cline-no"> </span>
|
|
928
|
-
<span class="cline-any cline-no"> </span>
|
|
929
|
-
<span class="cline-any cline-no"> </span>
|
|
930
|
-
<span class="cline-any cline-no"> </span>
|
|
931
|
-
<span class="cline-any cline-no"> </span>
|
|
932
|
-
<span class="cline-any cline-no"> </span>
|
|
933
|
-
<span class="cline-any cline-no"> </span>
|
|
934
|
-
<span class="cline-any cline-no"> </span>
|
|
935
|
-
<span class="cline-any cline-no"> </span>
|
|
936
|
-
<span class="cline-any cline-no"> </span>
|
|
937
|
-
<span class="cline-any cline-no"> </span>
|
|
938
|
-
<span class="cline-any cline-no"> </span>
|
|
939
|
-
<span class="cline-any cline-no"> </span>
|
|
940
|
-
<span class="cline-any cline-no"> </span>
|
|
941
|
-
<span class="cline-any cline-neutral"> </span>
|
|
942
|
-
<span class="cline-any cline-no"> </span>
|
|
943
|
-
<span class="cline-any cline-no"> </span>
|
|
944
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { Codex, type Thread, type ThreadEvent, type ThreadItem, type ThreadOptions } from '@openai/codex-sdk';<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
|
|
945
|
-
<span class="cstat-no" title="statement not covered" >import { v4 as uuidv4 } from 'uuid';</span>
|
|
946
|
-
<span class="cstat-no" title="statement not covered" >import Database from 'better-sqlite3';</span>
|
|
947
|
-
<span class="cstat-no" title="statement not covered" >import { readFileSync, writeFileSync, unlinkSync } from 'node:fs';</span>
|
|
948
|
-
<span class="cstat-no" title="statement not covered" >import { getDb } from '../db/index.ts';</span>
|
|
949
|
-
<span class="cstat-no" title="statement not covered" >import { broadcast } from '../ws/index.ts';</span>
|
|
950
|
-
<span class="cstat-no" title="statement not covered" >import { mapItemData, getItemStatus } from './item-mapper.ts';</span>
|
|
951
|
-
import type { Session, Turn, Item, ItemStatus } from '../db/schema.ts';
|
|
952
|
-
|
|
953
|
-
interface ThreadEntry {
|
|
954
|
-
codex: Codex;
|
|
955
|
-
thread: Thread;
|
|
956
|
-
abortController: AbortController | null;
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
<span class="cstat-no" title="statement not covered" >const threadMap = new Map<string, ThreadEntry>();</span>
|
|
960
|
-
|
|
961
|
-
/** Insert a new item row into the items table. */
|
|
962
|
-
<span class="cstat-no" title="statement not covered" >function insertItem(</span>
|
|
963
|
-
<span class="cstat-no" title="statement not covered" > db: Database.Database,</span>
|
|
964
|
-
<span class="cstat-no" title="statement not covered" > itemId: string,</span>
|
|
965
|
-
<span class="cstat-no" title="statement not covered" > turnId: string,</span>
|
|
966
|
-
<span class="cstat-no" title="statement not covered" > sdkItem: ThreadItem,</span>
|
|
967
|
-
<span class="cstat-no" title="statement not covered" > data: Record<string, unknown>,</span>
|
|
968
|
-
<span class="cstat-no" title="statement not covered" > status: ItemStatus,</span>
|
|
969
|
-
<span class="cstat-no" title="statement not covered" > now: string,</span>
|
|
970
|
-
<span class="cstat-no" title="statement not covered" >): void {</span>
|
|
971
|
-
<span class="cstat-no" title="statement not covered" > db.prepare(</span>
|
|
972
|
-
<span class="cstat-no" title="statement not covered" > 'INSERT INTO items (id, turn_id, external_item_id, type, data, status, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)',</span>
|
|
973
|
-
<span class="cstat-no" title="statement not covered" > ).run(itemId, turnId, sdkItem.id, sdkItem.type, JSON.stringify(data), status, now, now);</span>
|
|
974
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
975
|
-
|
|
976
|
-
/** Update the running state and status of a session. */
|
|
977
|
-
<span class="cstat-no" title="statement not covered" >function setSessionStatus(</span>
|
|
978
|
-
<span class="cstat-no" title="statement not covered" > db: Database.Database,</span>
|
|
979
|
-
<span class="cstat-no" title="statement not covered" > sessionId: string,</span>
|
|
980
|
-
<span class="cstat-no" title="statement not covered" > isRunning: 0 | 1,</span>
|
|
981
|
-
<span class="cstat-no" title="statement not covered" > status: string,</span>
|
|
982
|
-
<span class="cstat-no" title="statement not covered" > now: string,</span>
|
|
983
|
-
<span class="cstat-no" title="statement not covered" > hasUnreviewed = false,</span>
|
|
984
|
-
<span class="cstat-no" title="statement not covered" >): void {</span>
|
|
985
|
-
<span class="cstat-no" title="statement not covered" > if (hasUnreviewed) {</span>
|
|
986
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE sessions SET is_running = ?, status = ?, has_unreviewed = 1, updated_at = ? WHERE id = ?').run(</span>
|
|
987
|
-
<span class="cstat-no" title="statement not covered" > isRunning,</span>
|
|
988
|
-
<span class="cstat-no" title="statement not covered" > status,</span>
|
|
989
|
-
<span class="cstat-no" title="statement not covered" > now,</span>
|
|
990
|
-
<span class="cstat-no" title="statement not covered" > sessionId,</span>
|
|
991
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
992
|
-
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
993
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE sessions SET is_running = ?, status = ?, updated_at = ? WHERE id = ?').run(</span>
|
|
994
|
-
<span class="cstat-no" title="statement not covered" > isRunning,</span>
|
|
995
|
-
<span class="cstat-no" title="statement not covered" > status,</span>
|
|
996
|
-
<span class="cstat-no" title="statement not covered" > now,</span>
|
|
997
|
-
<span class="cstat-no" title="statement not covered" > sessionId,</span>
|
|
998
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
999
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1000
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1001
|
-
|
|
1002
|
-
<span class="cstat-no" title="statement not covered" >function getThreadOptions(session: Session): ThreadOptions {</span>
|
|
1003
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1004
|
-
<span class="cstat-no" title="statement not covered" > model: session.model ?? undefined,</span>
|
|
1005
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- SDK type omits "max" and "ultra" but the Codex CLI accepts them
|
|
1006
|
-
<span class="cstat-no" title="statement not covered" > modelReasoningEffort: (session.model_reasoning_effort as any) ?? undefined,</span>
|
|
1007
|
-
<span class="cstat-no" title="statement not covered" > workingDirectory: session.cwd ?? undefined,</span>
|
|
1008
|
-
<span class="cstat-no" title="statement not covered" > sandboxMode: 'workspace-write',</span>
|
|
1009
|
-
<span class="cstat-no" title="statement not covered" > approvalPolicy: 'never',</span>
|
|
1010
|
-
<span class="cstat-no" title="statement not covered" > skipGitRepoCheck: true,</span>
|
|
1011
|
-
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1012
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1013
|
-
|
|
1014
|
-
<span class="cstat-no" title="statement not covered" >function getOrCreateThread(session: Session): { codex: Codex; thread: Thread } {</span>
|
|
1015
|
-
<span class="cstat-no" title="statement not covered" > const existing = threadMap.get(session.id);</span>
|
|
1016
|
-
<span class="cstat-no" title="statement not covered" > if (existing) {</span>
|
|
1017
|
-
<span class="cstat-no" title="statement not covered" > return { codex: existing.codex, thread: existing.thread };</span>
|
|
1018
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1019
|
-
|
|
1020
|
-
<span class="cstat-no" title="statement not covered" > const codex = new Codex();</span>
|
|
1021
|
-
<span class="cstat-no" title="statement not covered" > let thread: Thread;</span>
|
|
1022
|
-
|
|
1023
|
-
<span class="cstat-no" title="statement not covered" > if (session.external_thread_id) {</span>
|
|
1024
|
-
<span class="cstat-no" title="statement not covered" > thread = codex.resumeThread(session.external_thread_id, getThreadOptions(session));</span>
|
|
1025
|
-
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
1026
|
-
<span class="cstat-no" title="statement not covered" > thread = codex.startThread(getThreadOptions(session));</span>
|
|
1027
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1028
|
-
|
|
1029
|
-
<span class="cstat-no" title="statement not covered" > return { codex, thread };</span>
|
|
1030
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1031
|
-
|
|
1032
|
-
/** Start a Codex turn. Fire-and-forget — streams events via WS. */
|
|
1033
|
-
<span class="cstat-no" title="statement not covered" >export async function startTurn(session: Session, turn: Turn): Promise<void> {</span>
|
|
1034
|
-
<span class="cstat-no" title="statement not covered" > const db = getDb();</span>
|
|
1035
|
-
|
|
1036
|
-
// Phase 1: create or resume thread
|
|
1037
|
-
<span class="cstat-no" title="statement not covered" > let codex: Codex;</span>
|
|
1038
|
-
<span class="cstat-no" title="statement not covered" > let thread: Thread;</span>
|
|
1039
|
-
|
|
1040
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1041
|
-
<span class="cstat-no" title="statement not covered" > const result = getOrCreateThread(session);</span>
|
|
1042
|
-
<span class="cstat-no" title="statement not covered" > codex = result.codex;</span>
|
|
1043
|
-
<span class="cstat-no" title="statement not covered" > thread = result.thread;</span>
|
|
1044
|
-
<span class="cstat-no" title="statement not covered" > } catch (err) {</span>
|
|
1045
|
-
<span class="cstat-no" title="statement not covered" > const errMsg = `Failed to create Codex thread: ${(err as Error).message}`;</span>
|
|
1046
|
-
<span class="cstat-no" title="statement not covered" > const now = new Date().toISOString();</span>
|
|
1047
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET status = ?, error = ?, updated_at = ? WHERE id = ?').run(</span>
|
|
1048
|
-
<span class="cstat-no" title="statement not covered" > 'failed',</span>
|
|
1049
|
-
<span class="cstat-no" title="statement not covered" > errMsg,</span>
|
|
1050
|
-
<span class="cstat-no" title="statement not covered" > now,</span>
|
|
1051
|
-
<span class="cstat-no" title="statement not covered" > turn.id,</span>
|
|
1052
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1053
|
-
<span class="cstat-no" title="statement not covered" > setSessionStatus(db, session.id, 0, 'failed', now);</span>
|
|
1054
|
-
<span class="cstat-no" title="statement not covered" > broadcast('turn:failed', { sessionId: session.id, turnId: turn.id, error: errMsg });</span>
|
|
1055
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1056
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1057
|
-
|
|
1058
|
-
// Phase 2: set up abort controller and update status
|
|
1059
|
-
<span class="cstat-no" title="statement not covered" > const abortController = new AbortController();</span>
|
|
1060
|
-
<span class="cstat-no" title="statement not covered" > threadMap.set(session.id, { codex, thread, abortController });</span>
|
|
1061
|
-
|
|
1062
|
-
<span class="cstat-no" title="statement not covered" > const now = new Date().toISOString();</span>
|
|
1063
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET status = ?, updated_at = ? WHERE id = ?').run('running', now, turn.id);</span>
|
|
1064
|
-
<span class="cstat-no" title="statement not covered" > setSessionStatus(db, session.id, 1, 'running', now);</span>
|
|
1065
|
-
|
|
1066
|
-
<span class="cstat-no" title="statement not covered" > broadcast('turn:started', { sessionId: session.id, turnId: turn.id });</span>
|
|
1067
|
-
|
|
1068
|
-
// Phase 3: run the turn and handle events
|
|
1069
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1070
|
-
<span class="cstat-no" title="statement not covered" > const { events } = await thread.runStreamed(turn.user_prompt, { signal: abortController.signal });</span>
|
|
1071
|
-
|
|
1072
|
-
<span class="cstat-no" title="statement not covered" > for await (const event of events) {</span>
|
|
1073
|
-
<span class="cstat-no" title="statement not covered" > handleEvent(event, session.id, turn.id);</span>
|
|
1074
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1075
|
-
<span class="cstat-no" title="statement not covered" > } catch (err) {</span>
|
|
1076
|
-
<span class="cstat-no" title="statement not covered" > const isAbort = abortController.signal.aborted || (err as Error).name === 'AbortError';</span>
|
|
1077
|
-
<span class="cstat-no" title="statement not covered" > const errMsg = (err as Error).message;</span>
|
|
1078
|
-
<span class="cstat-no" title="statement not covered" > const now2 = new Date().toISOString();</span>
|
|
1079
|
-
|
|
1080
|
-
<span class="cstat-no" title="statement not covered" > if (isAbort) {</span>
|
|
1081
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET status = ?, updated_at = ? WHERE id = ?').run('aborted', now2, turn.id);</span>
|
|
1082
|
-
<span class="cstat-no" title="statement not covered" > setSessionStatus(db, session.id, 0, 'active', now2);</span>
|
|
1083
|
-
<span class="cstat-no" title="statement not covered" > broadcast('turn:cancelled', { sessionId: session.id, turnId: turn.id });</span>
|
|
1084
|
-
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
1085
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET status = ?, error = ?, updated_at = ? WHERE id = ?').run(</span>
|
|
1086
|
-
<span class="cstat-no" title="statement not covered" > 'failed',</span>
|
|
1087
|
-
<span class="cstat-no" title="statement not covered" > errMsg,</span>
|
|
1088
|
-
<span class="cstat-no" title="statement not covered" > now2,</span>
|
|
1089
|
-
<span class="cstat-no" title="statement not covered" > turn.id,</span>
|
|
1090
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1091
|
-
<span class="cstat-no" title="statement not covered" > setSessionStatus(db, session.id, 0, 'failed', now2);</span>
|
|
1092
|
-
<span class="cstat-no" title="statement not covered" > broadcast('turn:failed', { sessionId: session.id, turnId: turn.id, error: errMsg });</span>
|
|
1093
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1094
|
-
<span class="cstat-no" title="statement not covered" > } finally {</span>
|
|
1095
|
-
<span class="cstat-no" title="statement not covered" > const entry = threadMap.get(session.id);</span>
|
|
1096
|
-
<span class="cstat-no" title="statement not covered" > if (entry) {</span>
|
|
1097
|
-
<span class="cstat-no" title="statement not covered" > threadMap.set(session.id, { ...entry, abortController: null });</span>
|
|
1098
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1099
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1100
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1101
|
-
|
|
1102
|
-
/** Cancel a running turn by session ID. Returns true if a turn was cancelled. */
|
|
1103
|
-
<span class="cstat-no" title="statement not covered" >export function interruptTurn(sessionId: string): boolean {</span>
|
|
1104
|
-
<span class="cstat-no" title="statement not covered" > const entry = threadMap.get(sessionId);</span>
|
|
1105
|
-
<span class="cstat-no" title="statement not covered" > if (entry?.abortController) {</span>
|
|
1106
|
-
<span class="cstat-no" title="statement not covered" > entry.abortController.abort();</span>
|
|
1107
|
-
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1108
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1109
|
-
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1110
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1111
|
-
|
|
1112
|
-
/** Remove a session's thread from the in-memory map. Used after rewind/branch. */
|
|
1113
|
-
<span class="cstat-no" title="statement not covered" >export function clearThread(sessionId: string): void {</span>
|
|
1114
|
-
<span class="cstat-no" title="statement not covered" > threadMap.delete(sessionId);</span>
|
|
1115
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1116
|
-
|
|
1117
|
-
<span class="cstat-no" title="statement not covered" >function handleEvent(event: ThreadEvent, sessionId: string, turnId: string): void {</span>
|
|
1118
|
-
<span class="cstat-no" title="statement not covered" > const db = getDb();</span>
|
|
1119
|
-
<span class="cstat-no" title="statement not covered" > const now = new Date().toISOString();</span>
|
|
1120
|
-
|
|
1121
|
-
<span class="cstat-no" title="statement not covered" > switch (event.type) {</span>
|
|
1122
|
-
<span class="cstat-no" title="statement not covered" > case 'thread.started': {</span>
|
|
1123
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE sessions SET external_thread_id = ?, updated_at = ? WHERE id = ?').run(</span>
|
|
1124
|
-
<span class="cstat-no" title="statement not covered" > event.thread_id,</span>
|
|
1125
|
-
<span class="cstat-no" title="statement not covered" > now,</span>
|
|
1126
|
-
<span class="cstat-no" title="statement not covered" > sessionId,</span>
|
|
1127
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1128
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1129
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1130
|
-
|
|
1131
|
-
<span class="cstat-no" title="statement not covered" > case 'turn.started': {</span>
|
|
1132
|
-
// Already broadcasted turn:started before the stream started.
|
|
1133
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1134
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1135
|
-
|
|
1136
|
-
<span class="cstat-no" title="statement not covered" > case 'item.started': {</span>
|
|
1137
|
-
<span class="cstat-no" title="statement not covered" > const item = event.item;</span>
|
|
1138
|
-
<span class="cstat-no" title="statement not covered" > const itemId = uuidv4();</span>
|
|
1139
|
-
<span class="cstat-no" title="statement not covered" > const data = mapItemData(item);</span>
|
|
1140
|
-
<span class="cstat-no" title="statement not covered" > insertItem(db, itemId, turnId, item, data, 'in_progress', now);</span>
|
|
1141
|
-
<span class="cstat-no" title="statement not covered" > broadcast('item:started', { sessionId, turnId, item: makeItem(itemId, turnId, item, 'in_progress', now, now) });</span>
|
|
1142
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1143
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1144
|
-
|
|
1145
|
-
<span class="cstat-no" title="statement not covered" > case 'item.updated': {</span>
|
|
1146
|
-
<span class="cstat-no" title="statement not covered" > const item = event.item;</span>
|
|
1147
|
-
<span class="cstat-no" title="statement not covered" > const data = mapItemData(item);</span>
|
|
1148
|
-
<span class="cstat-no" title="statement not covered" > const result = db</span>
|
|
1149
|
-
<span class="cstat-no" title="statement not covered" > .prepare('UPDATE items SET data = ?, updated_at = ? WHERE external_item_id = ? AND turn_id = ?')</span>
|
|
1150
|
-
<span class="cstat-no" title="statement not covered" > .run(JSON.stringify(data), now, item.id, turnId);</span>
|
|
1151
|
-
|
|
1152
|
-
// SDK may skip item.started — insert if missing
|
|
1153
|
-
<span class="cstat-no" title="statement not covered" > if (result.changes === 0) {</span>
|
|
1154
|
-
<span class="cstat-no" title="statement not covered" > const itemId = uuidv4();</span>
|
|
1155
|
-
<span class="cstat-no" title="statement not covered" > insertItem(db, itemId, turnId, item, data, 'in_progress', now);</span>
|
|
1156
|
-
<span class="cstat-no" title="statement not covered" > broadcast('item:updated', { sessionId, turnId, item: makeItem(itemId, turnId, item, 'in_progress', now, now) });</span>
|
|
1157
|
-
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
1158
|
-
<span class="cstat-no" title="statement not covered" > const row = db</span>
|
|
1159
|
-
<span class="cstat-no" title="statement not covered" > .prepare('SELECT id, status, created_at FROM items WHERE external_item_id = ? AND turn_id = ?')</span>
|
|
1160
|
-
<span class="cstat-no" title="statement not covered" > .get(item.id, turnId) as { id: string; status: ItemStatus; created_at: string } | undefined;</span>
|
|
1161
|
-
<span class="cstat-no" title="statement not covered" > if (row) {</span>
|
|
1162
|
-
<span class="cstat-no" title="statement not covered" > broadcast('item:updated', {</span>
|
|
1163
|
-
<span class="cstat-no" title="statement not covered" > sessionId,</span>
|
|
1164
|
-
<span class="cstat-no" title="statement not covered" > turnId,</span>
|
|
1165
|
-
<span class="cstat-no" title="statement not covered" > item: makeItem(row.id, turnId, item, row.status, row.created_at, now),</span>
|
|
1166
|
-
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1167
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1168
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1169
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1170
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1171
|
-
|
|
1172
|
-
<span class="cstat-no" title="statement not covered" > case 'item.completed': {</span>
|
|
1173
|
-
<span class="cstat-no" title="statement not covered" > const item = event.item;</span>
|
|
1174
|
-
<span class="cstat-no" title="statement not covered" > const status = getItemStatus(item);</span>
|
|
1175
|
-
<span class="cstat-no" title="statement not covered" > const data = mapItemData(item);</span>
|
|
1176
|
-
<span class="cstat-no" title="statement not covered" > const result = db</span>
|
|
1177
|
-
<span class="cstat-no" title="statement not covered" > .prepare('UPDATE items SET data = ?, status = ?, updated_at = ? WHERE external_item_id = ? AND turn_id = ?')</span>
|
|
1178
|
-
<span class="cstat-no" title="statement not covered" > .run(JSON.stringify(data), status, now, item.id, turnId);</span>
|
|
1179
|
-
|
|
1180
|
-
// SDK may skip item.started — insert if missing
|
|
1181
|
-
<span class="cstat-no" title="statement not covered" > let itemId: string;</span>
|
|
1182
|
-
<span class="cstat-no" title="statement not covered" > let createdAt: string;</span>
|
|
1183
|
-
<span class="cstat-no" title="statement not covered" > if (result.changes === 0) {</span>
|
|
1184
|
-
<span class="cstat-no" title="statement not covered" > itemId = uuidv4();</span>
|
|
1185
|
-
<span class="cstat-no" title="statement not covered" > createdAt = now;</span>
|
|
1186
|
-
<span class="cstat-no" title="statement not covered" > insertItem(db, itemId, turnId, item, data, status, now);</span>
|
|
1187
|
-
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
1188
|
-
<span class="cstat-no" title="statement not covered" > const row = db</span>
|
|
1189
|
-
<span class="cstat-no" title="statement not covered" > .prepare('SELECT id, created_at FROM items WHERE external_item_id = ? AND turn_id = ?')</span>
|
|
1190
|
-
<span class="cstat-no" title="statement not covered" > .get(item.id, turnId) as { id: string; created_at: string };</span>
|
|
1191
|
-
<span class="cstat-no" title="statement not covered" > itemId = row.id;</span>
|
|
1192
|
-
<span class="cstat-no" title="statement not covered" > createdAt = row.created_at;</span>
|
|
1193
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1194
|
-
|
|
1195
|
-
// Update turn-level fields
|
|
1196
|
-
<span class="cstat-no" title="statement not covered" > if (item.type === 'agent_message') {</span>
|
|
1197
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET agent_response = ?, updated_at = ? WHERE id = ?').run(item.text, now, turnId);</span>
|
|
1198
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1199
|
-
<span class="cstat-no" title="statement not covered" > if (item.type === 'reasoning') {</span>
|
|
1200
|
-
<span class="cstat-no" title="statement not covered" > const existing = db.prepare('SELECT thoughts FROM turns WHERE id = ?').get(turnId) as {</span>
|
|
1201
|
-
thoughts: string | null;
|
|
1202
|
-
};
|
|
1203
|
-
<span class="cstat-no" title="statement not covered" > const thoughts = existing.thoughts ? existing.thoughts + '\n' + item.text : item.text;</span>
|
|
1204
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET thoughts = ?, updated_at = ? WHERE id = ?').run(thoughts, now, turnId);</span>
|
|
1205
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1206
|
-
|
|
1207
|
-
<span class="cstat-no" title="statement not covered" > broadcast('item:completed', { sessionId, turnId, item: makeItem(itemId, turnId, item, status, createdAt, now) });</span>
|
|
1208
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1209
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1210
|
-
|
|
1211
|
-
<span class="cstat-no" title="statement not covered" > case 'turn.completed': {</span>
|
|
1212
|
-
<span class="cstat-no" title="statement not covered" > const usage = event.usage;</span>
|
|
1213
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET status = ?, token_usage = ?, updated_at = ? WHERE id = ?').run(</span>
|
|
1214
|
-
<span class="cstat-no" title="statement not covered" > 'completed',</span>
|
|
1215
|
-
<span class="cstat-no" title="statement not covered" > JSON.stringify(usage),</span>
|
|
1216
|
-
<span class="cstat-no" title="statement not covered" > now,</span>
|
|
1217
|
-
<span class="cstat-no" title="statement not covered" > turnId,</span>
|
|
1218
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1219
|
-
<span class="cstat-no" title="statement not covered" > setSessionStatus(db, sessionId, 0, 'active', now, true);</span>
|
|
1220
|
-
<span class="cstat-no" title="statement not covered" > broadcast('turn:completed', { sessionId, turnId, usage, hasUnreviewed: true });</span>
|
|
1221
|
-
|
|
1222
|
-
// Auto-generate session title from first turn (if title is still null)
|
|
1223
|
-
<span class="cstat-no" title="statement not covered" > syncThreadTitle(sessionId);</span>
|
|
1224
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1225
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1226
|
-
|
|
1227
|
-
<span class="cstat-no" title="statement not covered" > case 'turn.failed': {</span>
|
|
1228
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET status = ?, error = ?, updated_at = ? WHERE id = ?').run(</span>
|
|
1229
|
-
<span class="cstat-no" title="statement not covered" > 'failed',</span>
|
|
1230
|
-
<span class="cstat-no" title="statement not covered" > event.error.message,</span>
|
|
1231
|
-
<span class="cstat-no" title="statement not covered" > now,</span>
|
|
1232
|
-
<span class="cstat-no" title="statement not covered" > turnId,</span>
|
|
1233
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1234
|
-
<span class="cstat-no" title="statement not covered" > setSessionStatus(db, sessionId, 0, 'failed', now);</span>
|
|
1235
|
-
<span class="cstat-no" title="statement not covered" > broadcast('turn:failed', { sessionId, turnId, error: event.error.message });</span>
|
|
1236
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1237
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1238
|
-
|
|
1239
|
-
<span class="cstat-no" title="statement not covered" > case 'error': {</span>
|
|
1240
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE turns SET status = ?, error = ?, updated_at = ? WHERE id = ?').run(</span>
|
|
1241
|
-
<span class="cstat-no" title="statement not covered" > 'failed',</span>
|
|
1242
|
-
<span class="cstat-no" title="statement not covered" > event.message,</span>
|
|
1243
|
-
<span class="cstat-no" title="statement not covered" > now,</span>
|
|
1244
|
-
<span class="cstat-no" title="statement not covered" > turnId,</span>
|
|
1245
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1246
|
-
<span class="cstat-no" title="statement not covered" > setSessionStatus(db, sessionId, 0, 'failed', now);</span>
|
|
1247
|
-
<span class="cstat-no" title="statement not covered" > broadcast('turn:failed', { sessionId, turnId, error: event.message });</span>
|
|
1248
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1249
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1250
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1251
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1252
|
-
|
|
1253
|
-
<span class="cstat-no" title="statement not covered" >function makeItem(</span>
|
|
1254
|
-
<span class="cstat-no" title="statement not covered" > id: string,</span>
|
|
1255
|
-
<span class="cstat-no" title="statement not covered" > turnId: string,</span>
|
|
1256
|
-
<span class="cstat-no" title="statement not covered" > sdkItem: ThreadItem,</span>
|
|
1257
|
-
<span class="cstat-no" title="statement not covered" > status: ItemStatus,</span>
|
|
1258
|
-
<span class="cstat-no" title="statement not covered" > createdAt: string,</span>
|
|
1259
|
-
<span class="cstat-no" title="statement not covered" > updatedAt: string,</span>
|
|
1260
|
-
<span class="cstat-no" title="statement not covered" >): Item {</span>
|
|
1261
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1262
|
-
<span class="cstat-no" title="statement not covered" > id,</span>
|
|
1263
|
-
<span class="cstat-no" title="statement not covered" > turn_id: turnId,</span>
|
|
1264
|
-
<span class="cstat-no" title="statement not covered" > external_item_id: sdkItem.id,</span>
|
|
1265
|
-
<span class="cstat-no" title="statement not covered" > type: sdkItem.type,</span>
|
|
1266
|
-
<span class="cstat-no" title="statement not covered" > data: mapItemData(sdkItem),</span>
|
|
1267
|
-
<span class="cstat-no" title="statement not covered" > status,</span>
|
|
1268
|
-
<span class="cstat-no" title="statement not covered" > created_at: createdAt,</span>
|
|
1269
|
-
<span class="cstat-no" title="statement not covered" > updated_at: updatedAt,</span>
|
|
1270
|
-
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1271
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1272
|
-
|
|
1273
|
-
/** Tracks sessions currently generating titles — prevents duplicate throwaway threads. */
|
|
1274
|
-
<span class="cstat-no" title="statement not covered" >const titleGenerating = new Set<string>();</span>
|
|
1275
|
-
|
|
1276
|
-
/** Generate a title for the session using a throwaway Codex thread.
|
|
1277
|
-
* Only runs once per session — guarded by title === null AND titleGenerating set. */
|
|
1278
|
-
<span class="cstat-no" title="statement not covered" >function syncThreadTitle(sessionId: string): void {</span>
|
|
1279
|
-
<span class="cstat-no" title="statement not covered" > const db = getDb();</span>
|
|
1280
|
-
<span class="cstat-no" title="statement not covered" > const session = db.prepare('SELECT title FROM sessions WHERE id = ?').get(sessionId) as</span>
|
|
1281
|
-
{ title: string | null } | undefined;
|
|
1282
|
-
<span class="cstat-no" title="statement not covered" > if (!session || session.title !== null) return; // Already has a title</span>
|
|
1283
|
-
<span class="cstat-no" title="statement not covered" > if (titleGenerating.has(sessionId)) return; // Already generating</span>
|
|
1284
|
-
|
|
1285
|
-
// Get the first turn's user_prompt and agent_response
|
|
1286
|
-
<span class="cstat-no" title="statement not covered" > const turn = db</span>
|
|
1287
|
-
<span class="cstat-no" title="statement not covered" > .prepare('SELECT user_prompt, agent_response FROM turns WHERE session_id = ? ORDER BY created_at ASC LIMIT 1')</span>
|
|
1288
|
-
<span class="cstat-no" title="statement not covered" > .get(sessionId) as { user_prompt: string; agent_response: string | null } | undefined;</span>
|
|
1289
|
-
<span class="cstat-no" title="statement not covered" > if (!turn) return;</span>
|
|
1290
|
-
|
|
1291
|
-
// Mark as generating — prevents concurrent title generation for same session
|
|
1292
|
-
<span class="cstat-no" title="statement not covered" > titleGenerating.add(sessionId);</span>
|
|
1293
|
-
|
|
1294
|
-
// Fire-and-forget — don't block the turn:completed handler
|
|
1295
|
-
<span class="cstat-no" title="statement not covered" > generateTitleAsync(sessionId, turn.user_prompt, turn.agent_response).finally(() => {</span>
|
|
1296
|
-
<span class="cstat-no" title="statement not covered" > titleGenerating.delete(sessionId);</span>
|
|
1297
|
-
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1298
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1299
|
-
|
|
1300
|
-
/** Create a throwaway Codex thread, ask for a title, update the session, then clean up. */
|
|
1301
|
-
<span class="cstat-no" title="statement not covered" >async function generateTitleAsync(sessionId: string, userPrompt: string, agentResponse: string | null): Promise<void> {</span>
|
|
1302
|
-
<span class="cstat-no" title="statement not covered" > let throwawayThreadId: string | null = null;</span>
|
|
1303
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1304
|
-
<span class="cstat-no" title="statement not covered" > const codex = new Codex();</span>
|
|
1305
|
-
<span class="cstat-no" title="statement not covered" > const thread = codex.startThread({ skipGitRepoCheck: true });</span>
|
|
1306
|
-
<span class="cstat-no" title="statement not covered" > throwawayThreadId = thread.id;</span>
|
|
1307
|
-
|
|
1308
|
-
<span class="cstat-no" title="statement not covered" > const truncatedPrompt = userPrompt.slice(0, 500);</span>
|
|
1309
|
-
<span class="cstat-no" title="statement not covered" > const truncatedResponse = (agentResponse || '').slice(0, 500);</span>
|
|
1310
|
-
|
|
1311
|
-
<span class="cstat-no" title="statement not covered" > const titlePrompt = `Generate a concise 3-5 word title for this conversation. Reply with only the title, nothing else.\n\nUser asked: "${truncatedPrompt}"\n\nAgent responded: "${truncatedResponse}"`;</span>
|
|
1312
|
-
|
|
1313
|
-
<span class="cstat-no" title="statement not covered" > const result = await thread.run(titlePrompt);</span>
|
|
1314
|
-
<span class="cstat-no" title="statement not covered" > const title = result.finalResponse</span>
|
|
1315
|
-
<span class="cstat-no" title="statement not covered" > .trim()</span>
|
|
1316
|
-
<span class="cstat-no" title="statement not covered" > .replace(/^["']|["']$/g, '')</span>
|
|
1317
|
-
<span class="cstat-no" title="statement not covered" > .slice(0, 100);</span>
|
|
1318
|
-
|
|
1319
|
-
<span class="cstat-no" title="statement not covered" > if (title) {</span>
|
|
1320
|
-
<span class="cstat-no" title="statement not covered" > const db = getDb();</span>
|
|
1321
|
-
<span class="cstat-no" title="statement not covered" > const now = new Date().toISOString();</span>
|
|
1322
|
-
<span class="cstat-no" title="statement not covered" > db.prepare('UPDATE sessions SET title = ?, updated_at = ? WHERE id = ?').run(title, now, sessionId);</span>
|
|
1323
|
-
<span class="cstat-no" title="statement not covered" > broadcast('session:title', { sessionId, title });</span>
|
|
1324
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1325
|
-
<span class="cstat-no" title="statement not covered" > } catch {</span>
|
|
1326
|
-
// Silently skip on error — session keeps null title
|
|
1327
|
-
<span class="cstat-no" title="statement not covered" > } finally {</span>
|
|
1328
|
-
// Clean up the throwaway thread
|
|
1329
|
-
<span class="cstat-no" title="statement not covered" > if (throwawayThreadId) {</span>
|
|
1330
|
-
<span class="cstat-no" title="statement not covered" > cleanupThrowawayThread(throwawayThreadId);</span>
|
|
1331
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1332
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1333
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1334
|
-
|
|
1335
|
-
/** Delete throwaway thread from Codex state DB, rollout file, and session_index.jsonl. */
|
|
1336
|
-
<span class="cstat-no" title="statement not covered" >function cleanupThrowawayThread(threadId: string): void {</span>
|
|
1337
|
-
<span class="cstat-no" title="statement not covered" > const home = process.env.HOME || process.env.USERPROFILE || '';</span>
|
|
1338
|
-
|
|
1339
|
-
// 1. Delete from state DB and get rollout path
|
|
1340
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1341
|
-
<span class="cstat-no" title="statement not covered" > const codexDb = new Database(`${home}/.codex/state_5.sqlite`);</span>
|
|
1342
|
-
<span class="cstat-no" title="statement not covered" > const row = codexDb.prepare('SELECT rollout_path FROM threads WHERE id = ?').get(threadId) as</span>
|
|
1343
|
-
{ rollout_path: string } | undefined;
|
|
1344
|
-
|
|
1345
|
-
<span class="cstat-no" title="statement not covered" > codexDb</span>
|
|
1346
|
-
<span class="cstat-no" title="statement not covered" > .prepare('DELETE FROM thread_spawn_edges WHERE child_thread_id = ? OR parent_thread_id = ?')</span>
|
|
1347
|
-
<span class="cstat-no" title="statement not covered" > .run(threadId, threadId);</span>
|
|
1348
|
-
<span class="cstat-no" title="statement not covered" > codexDb.prepare('DELETE FROM threads WHERE id = ?').run(threadId);</span>
|
|
1349
|
-
<span class="cstat-no" title="statement not covered" > codexDb.close();</span>
|
|
1350
|
-
|
|
1351
|
-
// 2. Delete rollout file
|
|
1352
|
-
<span class="cstat-no" title="statement not covered" > if (row?.rollout_path) {</span>
|
|
1353
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1354
|
-
<span class="cstat-no" title="statement not covered" > unlinkSync(row.rollout_path);</span>
|
|
1355
|
-
<span class="cstat-no" title="statement not covered" > } catch {</span>
|
|
1356
|
-
/* file may not exist */
|
|
1357
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1358
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1359
|
-
<span class="cstat-no" title="statement not covered" > } catch {</span>
|
|
1360
|
-
// DB not found — skip
|
|
1361
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1362
|
-
|
|
1363
|
-
// 3. Remove from session_index.jsonl
|
|
1364
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1365
|
-
<span class="cstat-no" title="statement not covered" > const indexPath = `${home}/.codex/session_index.jsonl`;</span>
|
|
1366
|
-
<span class="cstat-no" title="statement not covered" > const content = readFileSync(indexPath, 'utf-8');</span>
|
|
1367
|
-
<span class="cstat-no" title="statement not covered" > const lines = content</span>
|
|
1368
|
-
<span class="cstat-no" title="statement not covered" > .trim()</span>
|
|
1369
|
-
<span class="cstat-no" title="statement not covered" > .split('\n')</span>
|
|
1370
|
-
<span class="cstat-no" title="statement not covered" > .filter((line) => {</span>
|
|
1371
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1372
|
-
<span class="cstat-no" title="statement not covered" > const entry = JSON.parse(line) as { id: string };</span>
|
|
1373
|
-
<span class="cstat-no" title="statement not covered" > return entry.id !== threadId;</span>
|
|
1374
|
-
<span class="cstat-no" title="statement not covered" > } catch {</span>
|
|
1375
|
-
<span class="cstat-no" title="statement not covered" > return true; // keep unparseable lines</span>
|
|
1376
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1377
|
-
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1378
|
-
<span class="cstat-no" title="statement not covered" > writeFileSync(indexPath, lines.join('\n') + '\n');</span>
|
|
1379
|
-
<span class="cstat-no" title="statement not covered" > } catch {</span>
|
|
1380
|
-
// File not found — skip
|
|
1381
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1382
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1383
|
-
</pre></td></tr></table></pre>
|
|
1384
|
-
|
|
1385
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
1386
|
-
</div><!-- /wrapper -->
|
|
1387
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
1388
|
-
Code coverage generated by
|
|
1389
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1390
|
-
at 2026-08-15T06:50:35.719Z
|
|
1391
|
-
</div>
|
|
1392
|
-
<script src="../../prettify.js"></script>
|
|
1393
|
-
<script>
|
|
1394
|
-
window.onload = function () {
|
|
1395
|
-
prettyPrint();
|
|
1396
|
-
};
|
|
1397
|
-
</script>
|
|
1398
|
-
<script src="../../sorter.js"></script>
|
|
1399
|
-
<script src="../../block-navigation.js"></script>
|
|
1400
|
-
</body>
|
|
1401
|
-
</html>
|
|
1402
|
-
|