bonecode 1.0.0 → 1.1.0
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/LICENSE +21 -0
- package/README.md +64 -50
- package/bone/output/agent/.dockerignore +7 -7
- package/bone/output/agent/.env.example +36 -36
- package/bone/output/agent/.github/workflows/ci.yaml +58 -58
- package/bone/output/agent/AgentDomain.bone.map +349 -349
- package/bone/output/agent/AgentDomain.postman_collection.json +957 -957
- package/bone/output/agent/Dockerfile +22 -22
- package/bone/output/agent/README.md +47 -47
- package/bone/output/agent/admin/index.html +739 -739
- package/bone/output/agent/docker-compose.yaml +22 -22
- package/bone/output/agent/k8s/deployment.yaml +75 -75
- package/bone/output/agent/migrations/agent.sql +36 -36
- package/bone/output/agent/migrations/agent_instance.sql +36 -36
- package/bone/output/agent/migrations/audit_log.sql +18 -18
- package/bone/output/agent/migrations/build_step.sql +34 -34
- package/bone/output/agent/migrations/event_outbox.sql +31 -31
- package/bone/output/agent/migrations/plan.sql +30 -30
- package/bone/output/agent/migrations/task.sql +30 -30
- package/bone/output/agent/migrations/tool_call.sql +33 -33
- package/bone/output/agent/openapi.yaml +1116 -1116
- package/bone/output/agent/package.json +35 -35
- package/bone/output/agent/schema.graphql +233 -233
- package/bone/output/agent/sdk/client.ts +231 -231
- package/bone/output/agent/src/algorithms.ts +2 -2
- package/bone/output/agent/src/audit.ts +44 -44
- package/bone/output/agent/src/auth.ts +57 -57
- package/bone/output/agent/src/cron.ts +12 -12
- package/bone/output/agent/src/db.ts +31 -31
- package/bone/output/agent/src/debug.ts +66 -66
- package/bone/output/agent/src/events.ts +243 -243
- package/bone/output/agent/src/extensions.ts +54 -54
- package/bone/output/agent/src/failure_rules.ts +322 -322
- package/bone/output/agent/src/flows.ts +168 -168
- package/bone/output/agent/src/health.ts +43 -43
- package/bone/output/agent/src/index.ts +99 -99
- package/bone/output/agent/src/logger.ts +69 -66
- package/bone/output/agent/src/metrics.ts +75 -75
- package/bone/output/agent/src/migrate.ts +351 -351
- package/bone/output/agent/src/migration_diff.ts +108 -108
- package/bone/output/agent/src/notify.ts +125 -125
- package/bone/output/agent/src/routes/plan.ts +91 -91
- package/bone/output/agent/src/routes/task.ts +105 -105
- package/bone/output/agent/src/routes/tool_call.ts +166 -166
- package/bone/output/agent/src/schemas.ts +384 -384
- package/bone/output/agent/src/state_machines/agent_instance.ts +24 -24
- package/bone/output/agent/src/state_machines/build_step.ts +22 -22
- package/bone/output/agent/src/state_machines/plan.ts +22 -22
- package/bone/output/agent/src/state_machines/task.ts +22 -22
- package/bone/output/agent/src/state_machines/tool_call.ts +22 -22
- package/bone/output/agent/src/tests.ts +361 -361
- package/bone/output/agent/src/websocket.ts +200 -200
- package/bone/output/agent/tsconfig.json +24 -24
- package/bone/output/rag/.dockerignore +7 -7
- package/bone/output/rag/.env.example +36 -36
- package/bone/output/rag/.github/workflows/ci.yaml +58 -58
- package/bone/output/rag/Dockerfile +22 -22
- package/bone/output/rag/RAGDomain.bone.map +286 -286
- package/bone/output/rag/RAGDomain.postman_collection.json +922 -922
- package/bone/output/rag/README.md +47 -47
- package/bone/output/rag/admin/index.html +817 -817
- package/bone/output/rag/docker-compose.yaml +22 -22
- package/bone/output/rag/k8s/deployment.yaml +75 -75
- package/bone/output/rag/migrations/audit_log.sql +18 -18
- package/bone/output/rag/migrations/code_chunk.sql +34 -34
- package/bone/output/rag/migrations/code_file.sql +33 -33
- package/bone/output/rag/migrations/event_outbox.sql +31 -31
- package/bone/output/rag/migrations/indexing_job.sql +33 -33
- package/bone/output/rag/migrations/knowledge_base.sql +35 -35
- package/bone/output/rag/migrations/memory_entry.sql +34 -34
- package/bone/output/rag/openapi.yaml +1097 -1097
- package/bone/output/rag/package.json +35 -35
- package/bone/output/rag/schema.graphql +245 -245
- package/bone/output/rag/sdk/client.ts +234 -234
- package/bone/output/rag/src/algorithms.ts +2 -2
- package/bone/output/rag/src/audit.ts +37 -37
- package/bone/output/rag/src/auth.ts +57 -57
- package/bone/output/rag/src/cron.ts +12 -12
- package/bone/output/rag/src/db.ts +31 -31
- package/bone/output/rag/src/debug.ts +66 -66
- package/bone/output/rag/src/events.ts +243 -243
- package/bone/output/rag/src/extensions.ts +350 -350
- package/bone/output/rag/src/failure_rules.ts +314 -314
- package/bone/output/rag/src/flows.ts +239 -239
- package/bone/output/rag/src/health.ts +43 -43
- package/bone/output/rag/src/index.ts +94 -94
- package/bone/output/rag/src/logger.ts +69 -66
- package/bone/output/rag/src/metrics.ts +75 -75
- package/bone/output/rag/src/migrate.ts +363 -363
- package/bone/output/rag/src/migration_diff.ts +108 -108
- package/bone/output/rag/src/notify.ts +99 -99
- package/bone/output/rag/src/routes/code_chunk.ts +75 -75
- package/bone/output/rag/src/routes/code_file.ts +101 -101
- package/bone/output/rag/src/routes/indexing_job.ts +87 -87
- package/bone/output/rag/src/routes/knowledge_base.ts +230 -230
- package/bone/output/rag/src/routes/memory_entry.ts +87 -87
- package/bone/output/rag/src/schemas.ts +394 -394
- package/bone/output/rag/src/state_machines/code_file.ts +23 -23
- package/bone/output/rag/src/state_machines/indexing_job.ts +22 -22
- package/bone/output/rag/src/state_machines/knowledge_base.ts +23 -23
- package/bone/output/rag/src/state_machines/memory_entry.ts +20 -20
- package/bone/output/rag/src/tests.ts +339 -339
- package/bone/output/rag/tsconfig.json +24 -24
- package/bone/output/session/.dockerignore +7 -7
- package/bone/output/session/.env.example +36 -36
- package/bone/output/session/.github/workflows/ci.yaml +58 -58
- package/bone/output/session/Dockerfile +22 -22
- package/bone/output/session/README.md +47 -47
- package/bone/output/session/SessionDomain.bone.map +349 -349
- package/bone/output/session/SessionDomain.postman_collection.json +957 -957
- package/bone/output/session/admin/index.html +666 -666
- package/bone/output/session/docker-compose.yaml +22 -22
- package/bone/output/session/k8s/deployment.yaml +75 -75
- package/bone/output/session/migrations/audit_log.sql +18 -18
- package/bone/output/session/migrations/event_outbox.sql +31 -31
- package/bone/output/session/migrations/message.sql +31 -31
- package/bone/output/session/migrations/part.sql +28 -28
- package/bone/output/session/migrations/permission.sql +28 -28
- package/bone/output/session/migrations/project.sql +28 -28
- package/bone/output/session/migrations/session.sql +38 -38
- package/bone/output/session/openapi.yaml +1101 -1101
- package/bone/output/session/package.json +35 -35
- package/bone/output/session/schema.graphql +222 -222
- package/bone/output/session/sdk/client.ts +225 -225
- package/bone/output/session/src/algorithms.ts +2 -2
- package/bone/output/session/src/audit.ts +44 -44
- package/bone/output/session/src/auth.ts +57 -57
- package/bone/output/session/src/cron.ts +12 -12
- package/bone/output/session/src/db.ts +31 -31
- package/bone/output/session/src/debug.ts +66 -66
- package/bone/output/session/src/events.ts +270 -270
- package/bone/output/session/src/extensions.ts +215 -215
- package/bone/output/session/src/failure_rules.ts +283 -283
- package/bone/output/session/src/flows.ts +168 -168
- package/bone/output/session/src/health.ts +43 -43
- package/bone/output/session/src/index.ts +99 -99
- package/bone/output/session/src/logger.ts +67 -66
- package/bone/output/session/src/metrics.ts +75 -75
- package/bone/output/session/src/migrate.ts +331 -331
- package/bone/output/session/src/migration_diff.ts +108 -108
- package/bone/output/session/src/notify.ts +112 -112
- package/bone/output/session/src/routes/message.ts +93 -93
- package/bone/output/session/src/routes/part.ts +79 -79
- package/bone/output/session/src/routes/permission.ts +79 -79
- package/bone/output/session/src/routes/project.ts +79 -79
- package/bone/output/session/src/routes/session.ts +294 -294
- package/bone/output/session/src/schemas.ts +357 -357
- package/bone/output/session/src/state_machines/session.ts +23 -23
- package/bone/output/session/src/tests.ts +325 -325
- package/bone/output/session/src/websocket.ts +223 -200
- package/bone/output/session/tsconfig.json +24 -24
- package/bone/output/workspace/.dockerignore +7 -7
- package/bone/output/workspace/.env.example +36 -36
- package/bone/output/workspace/.github/workflows/ci.yaml +58 -58
- package/bone/output/workspace/Dockerfile +22 -22
- package/bone/output/workspace/README.md +45 -45
- package/bone/output/workspace/WorkspaceDomain.bone.map +188 -188
- package/bone/output/workspace/WorkspaceDomain.postman_collection.json +620 -620
- package/bone/output/workspace/admin/index.html +484 -484
- package/bone/output/workspace/docker-compose.yaml +22 -22
- package/bone/output/workspace/k8s/deployment.yaml +75 -75
- package/bone/output/workspace/migrations/audit_log.sql +18 -18
- package/bone/output/workspace/migrations/codebase.sql +34 -34
- package/bone/output/workspace/migrations/event_outbox.sql +31 -31
- package/bone/output/workspace/migrations/snapshot.sql +32 -32
- package/bone/output/workspace/migrations/workspace.sql +33 -33
- package/bone/output/workspace/openapi.yaml +721 -721
- package/bone/output/workspace/package.json +35 -35
- package/bone/output/workspace/schema.graphql +153 -153
- package/bone/output/workspace/sdk/client.ts +155 -155
- package/bone/output/workspace/src/algorithms.ts +2 -2
- package/bone/output/workspace/src/audit.ts +37 -37
- package/bone/output/workspace/src/auth.ts +57 -57
- package/bone/output/workspace/src/cron.ts +12 -12
- package/bone/output/workspace/src/db.ts +31 -31
- package/bone/output/workspace/src/debug.ts +66 -66
- package/bone/output/workspace/src/events.ts +243 -243
- package/bone/output/workspace/src/extensions.ts +44 -44
- package/bone/output/workspace/src/failure_rules.ts +152 -152
- package/bone/output/workspace/src/health.ts +43 -43
- package/bone/output/workspace/src/index.ts +88 -88
- package/bone/output/workspace/src/logger.ts +69 -66
- package/bone/output/workspace/src/metrics.ts +75 -75
- package/bone/output/workspace/src/migrate.ts +219 -219
- package/bone/output/workspace/src/migration_diff.ts +108 -108
- package/bone/output/workspace/src/notify.ts +73 -73
- package/bone/output/workspace/src/routes/codebase.ts +87 -87
- package/bone/output/workspace/src/routes/snapshot.ts +127 -127
- package/bone/output/workspace/src/routes/workspace.ts +190 -190
- package/bone/output/workspace/src/schemas.ts +231 -231
- package/bone/output/workspace/src/state_machines/codebase.ts +21 -21
- package/bone/output/workspace/src/state_machines/snapshot.ts +20 -20
- package/bone/output/workspace/src/state_machines/workspace.ts +21 -21
- package/bone/output/workspace/src/tests.ts +248 -248
- package/bone/output/workspace/tsconfig.json +24 -24
- package/compat/opencode_adapter.ts +94 -17
- package/package.json +15 -2
- package/src/cli.ts +66 -107
- package/src/db_adapter.ts +354 -0
- package/src/engine/account/account.sql.ts +39 -39
- package/src/engine/account/account.ts +456 -456
- package/src/engine/account/repo.ts +166 -166
- package/src/engine/account/schema.ts +99 -99
- package/src/engine/account/url.ts +8 -8
- package/src/engine/acp/README.md +174 -174
- package/src/engine/acp/agent.ts +1968 -1968
- package/src/engine/acp/runtime.ts +22 -22
- package/src/engine/acp/session.ts +122 -122
- package/src/engine/acp/types.ts +24 -24
- package/src/engine/agent/agent.ts +463 -463
- package/src/engine/agent/generate.txt +75 -75
- package/src/engine/agent/prompt/compaction.txt +9 -9
- package/src/engine/agent/prompt/explore.txt +18 -18
- package/src/engine/agent/prompt/scout.txt +36 -36
- package/src/engine/agent/prompt/summary.txt +11 -11
- package/src/engine/agent/prompt/title.txt +44 -44
- package/src/engine/agent/subagent-permissions.ts +34 -34
- package/src/engine/auth/index.ts +96 -96
- package/src/engine/background/background/job.ts +200 -200
- package/src/engine/background/job.ts +200 -200
- package/src/engine/bus/bus-event.ts +45 -45
- package/src/engine/bus/global.ts +22 -22
- package/src/engine/bus/index.ts +203 -203
- package/src/engine/command/command/index.ts +181 -181
- package/src/engine/command/command/template/initialize.txt +66 -66
- package/src/engine/command/command/template/review.txt +101 -101
- package/src/engine/command/index.ts +181 -181
- package/src/engine/command/template/initialize.txt +66 -66
- package/src/engine/command/template/review.txt +101 -101
- package/src/engine/config/agent.ts +172 -172
- package/src/engine/config/attachment.ts +25 -25
- package/src/engine/config/command.ts +62 -62
- package/src/engine/config/config.ts +833 -833
- package/src/engine/config/console-state.ts +14 -14
- package/src/engine/config/entry-name.ts +16 -16
- package/src/engine/config/error.ts +23 -23
- package/src/engine/config/formatter.ts +13 -13
- package/src/engine/config/layout.ts +6 -6
- package/src/engine/config/lsp.ts +43 -43
- package/src/engine/config/managed.ts +71 -71
- package/src/engine/config/markdown.ts +96 -96
- package/src/engine/config/mcp.ts +56 -56
- package/src/engine/config/model-id.ts +5 -5
- package/src/engine/config/parse.ts +79 -79
- package/src/engine/config/paths.ts +45 -45
- package/src/engine/config/permission.ts +58 -58
- package/src/engine/config/plugin.ts +84 -84
- package/src/engine/config/provider.ts +111 -111
- package/src/engine/config/reference.ts +23 -23
- package/src/engine/config/server.ts +19 -19
- package/src/engine/config/skills.ts +14 -14
- package/src/engine/config/variable.ts +90 -90
- package/src/engine/control-plane/adapters/index.ts +41 -41
- package/src/engine/control-plane/adapters/worktree.ts +96 -96
- package/src/engine/control-plane/dev/README.md +19 -19
- package/src/engine/control-plane/dev/debug-workspace-plugin.ts +73 -73
- package/src/engine/control-plane/schema.ts +14 -14
- package/src/engine/control-plane/types.ts +59 -59
- package/src/engine/control-plane/util.ts +39 -39
- package/src/engine/control-plane/workspace-adapter-runtime.ts +51 -51
- package/src/engine/control-plane/workspace-context.ts +26 -26
- package/src/engine/control-plane/workspace.sql.ts +20 -20
- package/src/engine/control-plane/workspace.ts +1072 -1072
- package/src/engine/data-migration.ts +161 -161
- package/src/engine/effect/app-runtime.ts +143 -143
- package/src/engine/effect/bootstrap-runtime.ts +29 -29
- package/src/engine/effect/bridge.ts +84 -84
- package/src/engine/effect/config-service.ts +67 -67
- package/src/engine/effect/instance-ref.ts +11 -11
- package/src/engine/effect/instance-registry.ts +12 -12
- package/src/engine/effect/instance-state.ts +72 -72
- package/src/engine/effect/promise.ts +17 -17
- package/src/engine/effect/run-service.ts +47 -47
- package/src/engine/effect/runner.ts +217 -217
- package/src/engine/effect/runtime-flags.ts +74 -74
- package/src/engine/effect/service-use.ts +38 -38
- package/src/engine/env/index.ts +37 -37
- package/src/engine/event-v2-bridge.ts +89 -89
- package/src/engine/file/file/ignore.ts +81 -81
- package/src/engine/file/file/index.ts +651 -651
- package/src/engine/file/file/protected.ts +59 -59
- package/src/engine/file/file/ripgrep.ts +481 -481
- package/src/engine/file/file/watcher.ts +167 -167
- package/src/engine/file/ignore.ts +81 -81
- package/src/engine/file/index.ts +651 -651
- package/src/engine/file/protected.ts +59 -59
- package/src/engine/file/ripgrep.ts +481 -481
- package/src/engine/file/watcher.ts +167 -167
- package/src/engine/format/format/formatter.ts +404 -404
- package/src/engine/format/format/index.ts +209 -209
- package/src/engine/format/formatter.ts +404 -404
- package/src/engine/format/index.ts +209 -209
- package/src/engine/git/git/index.ts +347 -347
- package/src/engine/git/index.ts +347 -347
- package/src/engine/id/id.ts +80 -80
- package/src/engine/ide/index.ts +70 -70
- package/src/engine/image/image/image.ts +176 -176
- package/src/engine/image/image.ts +176 -176
- package/src/engine/index.ts +251 -251
- package/src/engine/installation/index.ts +327 -327
- package/src/engine/lsp/client.ts +707 -707
- package/src/engine/lsp/diagnostic.ts +29 -29
- package/src/engine/lsp/language.ts +121 -121
- package/src/engine/lsp/launch.ts +21 -21
- package/src/engine/lsp/lsp/client.ts +707 -707
- package/src/engine/lsp/lsp/diagnostic.ts +29 -29
- package/src/engine/lsp/lsp/language.ts +121 -121
- package/src/engine/lsp/lsp/launch.ts +21 -21
- package/src/engine/lsp/lsp/lsp.ts +507 -507
- package/src/engine/lsp/lsp/server.ts +2064 -2064
- package/src/engine/lsp/lsp.ts +507 -507
- package/src/engine/lsp/server.ts +2064 -2064
- package/src/engine/mcp/auth.ts +146 -146
- package/src/engine/mcp/index.ts +958 -958
- package/src/engine/mcp/mcp/auth.ts +146 -146
- package/src/engine/mcp/mcp/index.ts +958 -958
- package/src/engine/mcp/mcp/oauth-callback.ts +232 -232
- package/src/engine/mcp/mcp/oauth-provider.ts +214 -214
- package/src/engine/mcp/oauth-callback.ts +232 -232
- package/src/engine/mcp/oauth-provider.ts +214 -214
- package/src/engine/node.ts +6 -6
- package/src/engine/patch/index.ts +689 -689
- package/src/engine/patch/patch/index.ts +689 -689
- package/src/engine/permission/arity.ts +163 -163
- package/src/engine/permission/evaluate.ts +15 -15
- package/src/engine/permission/index.ts +306 -306
- package/src/engine/permission/permission/arity.ts +163 -163
- package/src/engine/permission/permission/evaluate.ts +15 -15
- package/src/engine/permission/permission/index.ts +306 -306
- package/src/engine/permission/permission/schema.ts +13 -13
- package/src/engine/permission/schema.ts +13 -13
- package/src/engine/plugin/azure.ts +26 -26
- package/src/engine/plugin/cloudflare.ts +76 -76
- package/src/engine/plugin/codex.ts +622 -622
- package/src/engine/plugin/digitalocean.ts +411 -411
- package/src/engine/plugin/github-copilot/copilot.ts +394 -394
- package/src/engine/plugin/github-copilot/models.ts +196 -196
- package/src/engine/plugin/index.ts +295 -295
- package/src/engine/plugin/install.ts +439 -439
- package/src/engine/plugin/loader.ts +216 -216
- package/src/engine/plugin/meta.ts +188 -188
- package/src/engine/plugin/shared.ts +323 -323
- package/src/engine/project/bootstrap-service.ts +9 -9
- package/src/engine/project/bootstrap.ts +75 -75
- package/src/engine/project/instance-context.ts +24 -24
- package/src/engine/project/instance-layer.ts +11 -11
- package/src/engine/project/instance-runtime.ts +16 -16
- package/src/engine/project/instance-store.ts +193 -193
- package/src/engine/project/project.sql.ts +17 -17
- package/src/engine/project/project.ts +537 -537
- package/src/engine/project/schema.ts +13 -13
- package/src/engine/project/vcs.ts +405 -405
- package/src/engine/provider/auth.ts +225 -225
- package/src/engine/provider/error.ts +204 -204
- package/src/engine/provider/model-status.ts +8 -8
- package/src/engine/provider/provider.ts +1843 -1843
- package/src/engine/provider/schema.ts +30 -30
- package/src/engine/provider/transform.ts +1376 -1376
- package/src/engine/pty/index.ts +365 -365
- package/src/engine/pty/input.ts +24 -24
- package/src/engine/pty/pty/index.ts +365 -365
- package/src/engine/pty/pty/input.ts +24 -24
- package/src/engine/pty/pty/pty.bun.ts +26 -26
- package/src/engine/pty/pty/pty.node.ts +27 -27
- package/src/engine/pty/pty/pty.ts +25 -25
- package/src/engine/pty/pty/schema.ts +14 -14
- package/src/engine/pty/pty/ticket.ts +68 -68
- package/src/engine/pty/pty.bun.ts +26 -26
- package/src/engine/pty/pty.node.ts +27 -27
- package/src/engine/pty/pty.ts +25 -25
- package/src/engine/pty/schema.ts +14 -14
- package/src/engine/pty/ticket.ts +68 -68
- package/src/engine/question/index.ts +213 -213
- package/src/engine/question/question/index.ts +213 -213
- package/src/engine/question/question/schema.ts +10 -10
- package/src/engine/question/schema.ts +10 -10
- package/src/engine/reference/reference/reference.ts +241 -241
- package/src/engine/reference/reference/repository-cache.ts +147 -147
- package/src/engine/reference/reference.ts +241 -241
- package/src/engine/reference/repository-cache.ts +147 -147
- package/src/engine/session/compaction.ts +651 -651
- package/src/engine/session/instruction.ts +238 -238
- package/src/engine/session/llm.ts +459 -459
- package/src/engine/session/message-error.ts +14 -14
- package/src/engine/session/message-v2.ts +1202 -1202
- package/src/engine/session/message.ts +146 -146
- package/src/engine/session/overflow.ts +32 -32
- package/src/engine/session/processor.ts +823 -823
- package/src/engine/session/prompt/anthropic.txt +105 -105
- package/src/engine/session/prompt/beast.txt +147 -147
- package/src/engine/session/prompt/build-switch.txt +5 -5
- package/src/engine/session/prompt/codex.txt +79 -79
- package/src/engine/session/prompt/copilot-gpt-5.txt +143 -143
- package/src/engine/session/prompt/default.txt +105 -105
- package/src/engine/session/prompt/gemini.txt +155 -155
- package/src/engine/session/prompt/gpt.txt +107 -107
- package/src/engine/session/prompt/kimi.txt +95 -95
- package/src/engine/session/prompt/max-steps.txt +15 -15
- package/src/engine/session/prompt/plan-reminder-anthropic.txt +67 -67
- package/src/engine/session/prompt/plan.txt +26 -26
- package/src/engine/session/prompt/trinity.txt +97 -97
- package/src/engine/session/prompt.ts +66 -9
- package/src/engine/session/retry.ts +200 -200
- package/src/engine/session/revert.ts +162 -162
- package/src/engine/session/run-state.ts +153 -153
- package/src/engine/session/schema.ts +26 -26
- package/src/engine/session/session.sql.ts +137 -137
- package/src/engine/session/session.ts +1011 -1011
- package/src/engine/session/status.ts +94 -94
- package/src/engine/session/summary.ts +164 -164
- package/src/engine/session/system.ts +84 -84
- package/src/engine/session/todo.ts +81 -81
- package/src/engine/share/session.ts +61 -61
- package/src/engine/share/share-next.ts +376 -376
- package/src/engine/share/share.sql.ts +13 -13
- package/src/engine/shell/shell/shell.ts +215 -215
- package/src/engine/shell/shell.ts +215 -215
- package/src/engine/skill/discovery.ts +116 -116
- package/src/engine/skill/index.ts +336 -336
- package/src/engine/skill/prompt/customize-opencode.md +377 -377
- package/src/engine/skill/skill/discovery.ts +116 -116
- package/src/engine/skill/skill/index.ts +336 -336
- package/src/engine/skill/skill/prompt/customize-opencode.md +377 -377
- package/src/engine/snapshot/index.ts +762 -762
- package/src/engine/snapshot/snapshot/index.ts +762 -762
- package/src/engine/sync/README.md +179 -179
- package/src/engine/sync/event.sql.ts +17 -17
- package/src/engine/sync/index.ts +410 -410
- package/src/engine/sync/schema.ts +11 -11
- package/src/engine/temporary.ts +33 -33
- package/src/engine/tool/apply_patch.ts +313 -313
- package/src/engine/tool/apply_patch.txt +33 -33
- package/src/engine/tool/edit.ts +711 -711
- package/src/engine/tool/edit.txt +10 -10
- package/src/engine/tool/external-directory.ts +49 -49
- package/src/engine/tool/glob.ts +103 -103
- package/src/engine/tool/glob.txt +6 -6
- package/src/engine/tool/grep.ts +156 -156
- package/src/engine/tool/grep.txt +8 -8
- package/src/engine/tool/invalid.ts +21 -21
- package/src/engine/tool/json-schema.ts +164 -164
- package/src/engine/tool/lsp.ts +113 -113
- package/src/engine/tool/lsp.txt +24 -24
- package/src/engine/tool/mcp-websearch.ts +96 -96
- package/src/engine/tool/plan-enter.txt +14 -14
- package/src/engine/tool/plan-exit.txt +13 -13
- package/src/engine/tool/plan.ts +78 -78
- package/src/engine/tool/question.ts +44 -44
- package/src/engine/tool/question.txt +10 -10
- package/src/engine/tool/read.ts +337 -337
- package/src/engine/tool/read.txt +14 -14
- package/src/engine/tool/registry.ts +472 -472
- package/src/engine/tool/repo_clone.ts +80 -80
- package/src/engine/tool/repo_clone.txt +5 -5
- package/src/engine/tool/repo_overview.ts +279 -279
- package/src/engine/tool/repo_overview.txt +4 -4
- package/src/engine/tool/schema.ts +14 -14
- package/src/engine/tool/shell/id.ts +19 -19
- package/src/engine/tool/shell/prompt.ts +295 -295
- package/src/engine/tool/shell/shell.txt +77 -77
- package/src/engine/tool/shell.ts +647 -647
- package/src/engine/tool/skill.ts +75 -75
- package/src/engine/tool/skill.txt +5 -5
- package/src/engine/tool/task.ts +337 -337
- package/src/engine/tool/task.txt +58 -58
- package/src/engine/tool/task_status.ts +179 -179
- package/src/engine/tool/task_status.txt +13 -13
- package/src/engine/tool/todo.ts +57 -57
- package/src/engine/tool/todowrite.txt +167 -167
- package/src/engine/tool/tool/apply_patch.ts +313 -313
- package/src/engine/tool/tool/apply_patch.txt +33 -33
- package/src/engine/tool/tool/edit.ts +711 -711
- package/src/engine/tool/tool/edit.txt +10 -10
- package/src/engine/tool/tool/external-directory.ts +49 -49
- package/src/engine/tool/tool/glob.ts +103 -103
- package/src/engine/tool/tool/glob.txt +6 -6
- package/src/engine/tool/tool/grep.ts +156 -156
- package/src/engine/tool/tool/grep.txt +8 -8
- package/src/engine/tool/tool/invalid.ts +21 -21
- package/src/engine/tool/tool/json-schema.ts +164 -164
- package/src/engine/tool/tool/lsp.ts +113 -113
- package/src/engine/tool/tool/lsp.txt +24 -24
- package/src/engine/tool/tool/mcp-websearch.ts +96 -96
- package/src/engine/tool/tool/plan-enter.txt +14 -14
- package/src/engine/tool/tool/plan-exit.txt +13 -13
- package/src/engine/tool/tool/plan.ts +78 -78
- package/src/engine/tool/tool/question.ts +44 -44
- package/src/engine/tool/tool/question.txt +10 -10
- package/src/engine/tool/tool/read.ts +337 -337
- package/src/engine/tool/tool/read.txt +14 -14
- package/src/engine/tool/tool/registry.ts +472 -472
- package/src/engine/tool/tool/repo_clone.ts +80 -80
- package/src/engine/tool/tool/repo_clone.txt +5 -5
- package/src/engine/tool/tool/repo_overview.ts +279 -279
- package/src/engine/tool/tool/repo_overview.txt +4 -4
- package/src/engine/tool/tool/schema.ts +14 -14
- package/src/engine/tool/tool/shell/id.ts +19 -19
- package/src/engine/tool/tool/shell/prompt.ts +295 -295
- package/src/engine/tool/tool/shell/shell.txt +77 -77
- package/src/engine/tool/tool/shell.ts +647 -647
- package/src/engine/tool/tool/skill.ts +75 -75
- package/src/engine/tool/tool/skill.txt +5 -5
- package/src/engine/tool/tool/task.ts +337 -337
- package/src/engine/tool/tool/task.txt +58 -58
- package/src/engine/tool/tool/task_status.ts +179 -179
- package/src/engine/tool/tool/task_status.txt +13 -13
- package/src/engine/tool/tool/todo.ts +57 -57
- package/src/engine/tool/tool/todowrite.txt +167 -167
- package/src/engine/tool/tool/tool.ts +164 -164
- package/src/engine/tool/tool/truncate.ts +160 -160
- package/src/engine/tool/tool/truncation-dir.ts +4 -4
- package/src/engine/tool/tool/webfetch.ts +192 -192
- package/src/engine/tool/tool/webfetch.txt +13 -13
- package/src/engine/tool/tool/websearch.ts +143 -143
- package/src/engine/tool/tool/websearch.txt +14 -14
- package/src/engine/tool/tool/write.ts +104 -104
- package/src/engine/tool/tool/write.txt +8 -8
- package/src/engine/tool/tool.ts +164 -164
- package/src/engine/tool/truncate.ts +160 -160
- package/src/engine/tool/truncation-dir.ts +4 -4
- package/src/engine/tool/webfetch.ts +192 -192
- package/src/engine/tool/webfetch.txt +13 -13
- package/src/engine/tool/websearch.ts +143 -143
- package/src/engine/tool/websearch.txt +14 -14
- package/src/engine/tool/write.ts +104 -104
- package/src/engine/tool/write.txt +8 -8
- package/src/engine/util/archive.ts +17 -17
- package/src/engine/util/bom.ts +31 -31
- package/src/engine/util/data-url.ts +9 -9
- package/src/engine/util/defer.ts +10 -10
- package/src/engine/util/effect-http-client.ts +11 -11
- package/src/engine/util/error.ts +88 -88
- package/src/engine/util/filesystem.ts +252 -252
- package/src/engine/util/format.ts +20 -20
- package/src/engine/util/iife.ts +3 -3
- package/src/engine/util/lazy.ts +20 -20
- package/src/engine/util/local-context.ts +25 -25
- package/src/engine/util/locale.ts +86 -86
- package/src/engine/util/media.ts +26 -26
- package/src/engine/util/process.ts +176 -176
- package/src/engine/util/queue.ts +32 -32
- package/src/engine/util/record.ts +3 -3
- package/src/engine/util/repository.ts +158 -158
- package/src/engine/util/rpc.ts +66 -66
- package/src/engine/util/signal.ts +12 -12
- package/src/engine/util/timeout.ts +13 -13
- package/src/engine/util/token.ts +7 -7
- package/src/engine/util/util/archive.ts +17 -17
- package/src/engine/util/util/bom.ts +31 -31
- package/src/engine/util/util/data-url.ts +9 -9
- package/src/engine/util/util/defer.ts +10 -10
- package/src/engine/util/util/effect-http-client.ts +11 -11
- package/src/engine/util/util/error.ts +88 -88
- package/src/engine/util/util/filesystem.ts +252 -252
- package/src/engine/util/util/format.ts +20 -20
- package/src/engine/util/util/iife.ts +3 -3
- package/src/engine/util/util/lazy.ts +20 -20
- package/src/engine/util/util/local-context.ts +25 -25
- package/src/engine/util/util/locale.ts +86 -86
- package/src/engine/util/util/media.ts +26 -26
- package/src/engine/util/util/process.ts +176 -176
- package/src/engine/util/util/queue.ts +32 -32
- package/src/engine/util/util/record.ts +3 -3
- package/src/engine/util/util/repository.ts +158 -158
- package/src/engine/util/util/rpc.ts +66 -66
- package/src/engine/util/util/signal.ts +12 -12
- package/src/engine/util/util/timeout.ts +13 -13
- package/src/engine/util/util/token.ts +7 -7
- package/src/engine/util/util/which.ts +14 -14
- package/src/engine/util/util/wildcard.ts +59 -59
- package/src/engine/util/which.ts +14 -14
- package/src/engine/util/wildcard.ts +59 -59
- package/src/engine/worktree/index.ts +621 -621
- package/src/server.ts +121 -158
- package/src/tui.ts +485 -502
|
@@ -1,204 +1,204 @@
|
|
|
1
|
-
import { APICallError } from "ai"
|
|
2
|
-
import { STATUS_CODES } from "http"
|
|
3
|
-
import { iife } from "@/util/iife"
|
|
4
|
-
import type { ProviderID } from "./schema"
|
|
5
|
-
|
|
6
|
-
// Adapted from overflow detection patterns in:
|
|
7
|
-
// https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/utils/overflow.ts
|
|
8
|
-
const OVERFLOW_PATTERNS = [
|
|
9
|
-
/prompt is too long/i, // Anthropic
|
|
10
|
-
/input is too long for requested model/i, // Amazon Bedrock
|
|
11
|
-
/exceeds the context window/i, // OpenAI (Completions + Responses API message text)
|
|
12
|
-
/input token count.*exceeds the maximum/i, // Google (Gemini)
|
|
13
|
-
/maximum prompt length is \d+/i, // xAI (Grok)
|
|
14
|
-
/reduce the length of the messages/i, // Groq
|
|
15
|
-
/maximum context length is \d+ tokens/i, // OpenRouter, DeepSeek, vLLM
|
|
16
|
-
/exceeds the limit of \d+/i, // GitHub Copilot
|
|
17
|
-
/exceeds the available context size/i, // llama.cpp server
|
|
18
|
-
/greater than the context length/i, // LM Studio
|
|
19
|
-
/context window exceeds limit/i, // MiniMax
|
|
20
|
-
/exceeded model token limit/i, // Kimi For Coding, Moonshot
|
|
21
|
-
/context[_ ]length[_ ]exceeded/i, // Generic fallback
|
|
22
|
-
/request entity too large/i, // HTTP 413
|
|
23
|
-
/context length is only \d+ tokens/i, // vLLM
|
|
24
|
-
/input length.*exceeds.*context length/i, // vLLM
|
|
25
|
-
/prompt too long; exceeded (?:max )?context length/i, // Ollama explicit overflow error
|
|
26
|
-
/too large for model with \d+ maximum context length/i, // Mistral
|
|
27
|
-
/model_context_window_exceeded/i, // z.ai non-standard finish_reason surfaced as error text
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
function isOpenAiErrorRetryable(e: APICallError) {
|
|
31
|
-
const status = e.statusCode
|
|
32
|
-
if (!status) return e.isRetryable
|
|
33
|
-
// openai sometimes returns 404 for models that are actually available
|
|
34
|
-
return status === 404 || e.isRetryable
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Providers not reliably handled in this function:
|
|
38
|
-
// - z.ai: can accept overflow silently (needs token-count/context-window checks)
|
|
39
|
-
function isOverflow(message: string) {
|
|
40
|
-
if (OVERFLOW_PATTERNS.some((p) => p.test(message))) return true
|
|
41
|
-
|
|
42
|
-
// Providers/status patterns handled outside of regex list:
|
|
43
|
-
// - Cerebras: often returns "400 (no body)" / "413 (no body)"
|
|
44
|
-
// - Mistral: often returns "400 (no body)" / "413 (no body)"
|
|
45
|
-
return /^4(00|13)\s*(status code)?\s*\(no body\)/i.test(message)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function message(providerID: ProviderID, e: APICallError) {
|
|
49
|
-
return iife(() => {
|
|
50
|
-
const msg = e.message
|
|
51
|
-
if (msg === "") {
|
|
52
|
-
if (e.responseBody) return e.responseBody
|
|
53
|
-
if (e.statusCode) {
|
|
54
|
-
const err = STATUS_CODES[e.statusCode]
|
|
55
|
-
if (err) return err
|
|
56
|
-
}
|
|
57
|
-
return "Unknown error"
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (!e.responseBody || (e.statusCode && msg !== STATUS_CODES[e.statusCode])) {
|
|
61
|
-
return msg
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
try {
|
|
65
|
-
const body = JSON.parse(e.responseBody)
|
|
66
|
-
// try to extract common error message fields
|
|
67
|
-
const errMsg = body.message || body.error || body.error?.message
|
|
68
|
-
if (errMsg && typeof errMsg === "string") {
|
|
69
|
-
return `${msg}: ${errMsg}`
|
|
70
|
-
}
|
|
71
|
-
} catch {}
|
|
72
|
-
|
|
73
|
-
// If responseBody is HTML (e.g. from a gateway or proxy error page),
|
|
74
|
-
// provide a human-readable message instead of dumping raw markup
|
|
75
|
-
if (/^\s*<!doctype|^\s*<html/i.test(e.responseBody)) {
|
|
76
|
-
if (e.statusCode === 401) {
|
|
77
|
-
return "Unauthorized: request was blocked by a gateway or proxy. Your authentication token may be missing or expired — try running `opencode auth login <your provider URL>` to re-authenticate."
|
|
78
|
-
}
|
|
79
|
-
if (e.statusCode === 403) {
|
|
80
|
-
return "Forbidden: request was blocked by a gateway or proxy. You may not have permission to access this resource — check your account and provider settings."
|
|
81
|
-
}
|
|
82
|
-
return msg
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return `${msg}: ${e.responseBody}`
|
|
86
|
-
}).trim()
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function json(input: unknown) {
|
|
90
|
-
if (typeof input === "string") {
|
|
91
|
-
try {
|
|
92
|
-
const result = JSON.parse(input)
|
|
93
|
-
if (result && typeof result === "object") return result
|
|
94
|
-
return undefined
|
|
95
|
-
} catch {
|
|
96
|
-
return undefined
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (typeof input === "object" && input !== null) {
|
|
100
|
-
return input
|
|
101
|
-
}
|
|
102
|
-
return undefined
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export type ParsedStreamError =
|
|
106
|
-
| {
|
|
107
|
-
type: "context_overflow"
|
|
108
|
-
message: string
|
|
109
|
-
responseBody: string
|
|
110
|
-
}
|
|
111
|
-
| {
|
|
112
|
-
type: "api_error"
|
|
113
|
-
message: string
|
|
114
|
-
isRetryable: boolean
|
|
115
|
-
responseBody: string
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export function parseStreamError(input: unknown): ParsedStreamError | undefined {
|
|
119
|
-
const raw = json(input)
|
|
120
|
-
const body = typeof raw?.message === "string" ? (json(raw.message) ?? raw) : raw
|
|
121
|
-
if (!body) return
|
|
122
|
-
|
|
123
|
-
const responseBody = JSON.stringify(body)
|
|
124
|
-
if (body.type !== "error") return
|
|
125
|
-
|
|
126
|
-
switch (body?.error?.code) {
|
|
127
|
-
case "context_length_exceeded":
|
|
128
|
-
return {
|
|
129
|
-
type: "context_overflow",
|
|
130
|
-
message: "Input exceeds context window of this model",
|
|
131
|
-
responseBody,
|
|
132
|
-
}
|
|
133
|
-
case "insufficient_quota":
|
|
134
|
-
return {
|
|
135
|
-
type: "api_error",
|
|
136
|
-
message: "Quota exceeded. Check your plan and billing details.",
|
|
137
|
-
isRetryable: false,
|
|
138
|
-
responseBody,
|
|
139
|
-
}
|
|
140
|
-
case "usage_not_included":
|
|
141
|
-
return {
|
|
142
|
-
type: "api_error",
|
|
143
|
-
message: "To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",
|
|
144
|
-
isRetryable: false,
|
|
145
|
-
responseBody,
|
|
146
|
-
}
|
|
147
|
-
case "invalid_prompt":
|
|
148
|
-
return {
|
|
149
|
-
type: "api_error",
|
|
150
|
-
message: typeof body?.error?.message === "string" ? body?.error?.message : "Invalid prompt.",
|
|
151
|
-
isRetryable: false,
|
|
152
|
-
responseBody,
|
|
153
|
-
}
|
|
154
|
-
case "server_is_overloaded":
|
|
155
|
-
case "server_error":
|
|
156
|
-
return {
|
|
157
|
-
type: "api_error",
|
|
158
|
-
message: typeof body?.error?.message === "string" ? body?.error?.message : "Server error.",
|
|
159
|
-
isRetryable: true,
|
|
160
|
-
responseBody,
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export type ParsedAPICallError =
|
|
166
|
-
| {
|
|
167
|
-
type: "context_overflow"
|
|
168
|
-
message: string
|
|
169
|
-
responseBody?: string
|
|
170
|
-
}
|
|
171
|
-
| {
|
|
172
|
-
type: "api_error"
|
|
173
|
-
message: string
|
|
174
|
-
statusCode?: number
|
|
175
|
-
isRetryable: boolean
|
|
176
|
-
responseHeaders?: Record<string, string>
|
|
177
|
-
responseBody?: string
|
|
178
|
-
metadata?: Record<string, string>
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export function parseAPICallError(input: { providerID: ProviderID; error: APICallError }): ParsedAPICallError {
|
|
182
|
-
const m = message(input.providerID, input.error)
|
|
183
|
-
const body = json(input.error.responseBody)
|
|
184
|
-
if (isOverflow(m) || input.error.statusCode === 413 || body?.error?.code === "context_length_exceeded") {
|
|
185
|
-
return {
|
|
186
|
-
type: "context_overflow",
|
|
187
|
-
message: m,
|
|
188
|
-
responseBody: input.error.responseBody,
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
const metadata = input.error.url ? { url: input.error.url } : undefined
|
|
193
|
-
return {
|
|
194
|
-
type: "api_error",
|
|
195
|
-
message: m,
|
|
196
|
-
statusCode: input.error.statusCode,
|
|
197
|
-
isRetryable: input.providerID.startsWith("openai") ? isOpenAiErrorRetryable(input.error) : input.error.isRetryable,
|
|
198
|
-
responseHeaders: input.error.responseHeaders,
|
|
199
|
-
responseBody: input.error.responseBody,
|
|
200
|
-
metadata,
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
export * as ProviderError from "./error"
|
|
1
|
+
import { APICallError } from "ai"
|
|
2
|
+
import { STATUS_CODES } from "http"
|
|
3
|
+
import { iife } from "@/util/iife"
|
|
4
|
+
import type { ProviderID } from "./schema"
|
|
5
|
+
|
|
6
|
+
// Adapted from overflow detection patterns in:
|
|
7
|
+
// https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/utils/overflow.ts
|
|
8
|
+
const OVERFLOW_PATTERNS = [
|
|
9
|
+
/prompt is too long/i, // Anthropic
|
|
10
|
+
/input is too long for requested model/i, // Amazon Bedrock
|
|
11
|
+
/exceeds the context window/i, // OpenAI (Completions + Responses API message text)
|
|
12
|
+
/input token count.*exceeds the maximum/i, // Google (Gemini)
|
|
13
|
+
/maximum prompt length is \d+/i, // xAI (Grok)
|
|
14
|
+
/reduce the length of the messages/i, // Groq
|
|
15
|
+
/maximum context length is \d+ tokens/i, // OpenRouter, DeepSeek, vLLM
|
|
16
|
+
/exceeds the limit of \d+/i, // GitHub Copilot
|
|
17
|
+
/exceeds the available context size/i, // llama.cpp server
|
|
18
|
+
/greater than the context length/i, // LM Studio
|
|
19
|
+
/context window exceeds limit/i, // MiniMax
|
|
20
|
+
/exceeded model token limit/i, // Kimi For Coding, Moonshot
|
|
21
|
+
/context[_ ]length[_ ]exceeded/i, // Generic fallback
|
|
22
|
+
/request entity too large/i, // HTTP 413
|
|
23
|
+
/context length is only \d+ tokens/i, // vLLM
|
|
24
|
+
/input length.*exceeds.*context length/i, // vLLM
|
|
25
|
+
/prompt too long; exceeded (?:max )?context length/i, // Ollama explicit overflow error
|
|
26
|
+
/too large for model with \d+ maximum context length/i, // Mistral
|
|
27
|
+
/model_context_window_exceeded/i, // z.ai non-standard finish_reason surfaced as error text
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
function isOpenAiErrorRetryable(e: APICallError) {
|
|
31
|
+
const status = e.statusCode
|
|
32
|
+
if (!status) return e.isRetryable
|
|
33
|
+
// openai sometimes returns 404 for models that are actually available
|
|
34
|
+
return status === 404 || e.isRetryable
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Providers not reliably handled in this function:
|
|
38
|
+
// - z.ai: can accept overflow silently (needs token-count/context-window checks)
|
|
39
|
+
function isOverflow(message: string) {
|
|
40
|
+
if (OVERFLOW_PATTERNS.some((p) => p.test(message))) return true
|
|
41
|
+
|
|
42
|
+
// Providers/status patterns handled outside of regex list:
|
|
43
|
+
// - Cerebras: often returns "400 (no body)" / "413 (no body)"
|
|
44
|
+
// - Mistral: often returns "400 (no body)" / "413 (no body)"
|
|
45
|
+
return /^4(00|13)\s*(status code)?\s*\(no body\)/i.test(message)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function message(providerID: ProviderID, e: APICallError) {
|
|
49
|
+
return iife(() => {
|
|
50
|
+
const msg = e.message
|
|
51
|
+
if (msg === "") {
|
|
52
|
+
if (e.responseBody) return e.responseBody
|
|
53
|
+
if (e.statusCode) {
|
|
54
|
+
const err = STATUS_CODES[e.statusCode]
|
|
55
|
+
if (err) return err
|
|
56
|
+
}
|
|
57
|
+
return "Unknown error"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (!e.responseBody || (e.statusCode && msg !== STATUS_CODES[e.statusCode])) {
|
|
61
|
+
return msg
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
const body = JSON.parse(e.responseBody)
|
|
66
|
+
// try to extract common error message fields
|
|
67
|
+
const errMsg = body.message || body.error || body.error?.message
|
|
68
|
+
if (errMsg && typeof errMsg === "string") {
|
|
69
|
+
return `${msg}: ${errMsg}`
|
|
70
|
+
}
|
|
71
|
+
} catch {}
|
|
72
|
+
|
|
73
|
+
// If responseBody is HTML (e.g. from a gateway or proxy error page),
|
|
74
|
+
// provide a human-readable message instead of dumping raw markup
|
|
75
|
+
if (/^\s*<!doctype|^\s*<html/i.test(e.responseBody)) {
|
|
76
|
+
if (e.statusCode === 401) {
|
|
77
|
+
return "Unauthorized: request was blocked by a gateway or proxy. Your authentication token may be missing or expired — try running `opencode auth login <your provider URL>` to re-authenticate."
|
|
78
|
+
}
|
|
79
|
+
if (e.statusCode === 403) {
|
|
80
|
+
return "Forbidden: request was blocked by a gateway or proxy. You may not have permission to access this resource — check your account and provider settings."
|
|
81
|
+
}
|
|
82
|
+
return msg
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return `${msg}: ${e.responseBody}`
|
|
86
|
+
}).trim()
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function json(input: unknown) {
|
|
90
|
+
if (typeof input === "string") {
|
|
91
|
+
try {
|
|
92
|
+
const result = JSON.parse(input)
|
|
93
|
+
if (result && typeof result === "object") return result
|
|
94
|
+
return undefined
|
|
95
|
+
} catch {
|
|
96
|
+
return undefined
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (typeof input === "object" && input !== null) {
|
|
100
|
+
return input
|
|
101
|
+
}
|
|
102
|
+
return undefined
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export type ParsedStreamError =
|
|
106
|
+
| {
|
|
107
|
+
type: "context_overflow"
|
|
108
|
+
message: string
|
|
109
|
+
responseBody: string
|
|
110
|
+
}
|
|
111
|
+
| {
|
|
112
|
+
type: "api_error"
|
|
113
|
+
message: string
|
|
114
|
+
isRetryable: boolean
|
|
115
|
+
responseBody: string
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function parseStreamError(input: unknown): ParsedStreamError | undefined {
|
|
119
|
+
const raw = json(input)
|
|
120
|
+
const body = typeof raw?.message === "string" ? (json(raw.message) ?? raw) : raw
|
|
121
|
+
if (!body) return
|
|
122
|
+
|
|
123
|
+
const responseBody = JSON.stringify(body)
|
|
124
|
+
if (body.type !== "error") return
|
|
125
|
+
|
|
126
|
+
switch (body?.error?.code) {
|
|
127
|
+
case "context_length_exceeded":
|
|
128
|
+
return {
|
|
129
|
+
type: "context_overflow",
|
|
130
|
+
message: "Input exceeds context window of this model",
|
|
131
|
+
responseBody,
|
|
132
|
+
}
|
|
133
|
+
case "insufficient_quota":
|
|
134
|
+
return {
|
|
135
|
+
type: "api_error",
|
|
136
|
+
message: "Quota exceeded. Check your plan and billing details.",
|
|
137
|
+
isRetryable: false,
|
|
138
|
+
responseBody,
|
|
139
|
+
}
|
|
140
|
+
case "usage_not_included":
|
|
141
|
+
return {
|
|
142
|
+
type: "api_error",
|
|
143
|
+
message: "To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",
|
|
144
|
+
isRetryable: false,
|
|
145
|
+
responseBody,
|
|
146
|
+
}
|
|
147
|
+
case "invalid_prompt":
|
|
148
|
+
return {
|
|
149
|
+
type: "api_error",
|
|
150
|
+
message: typeof body?.error?.message === "string" ? body?.error?.message : "Invalid prompt.",
|
|
151
|
+
isRetryable: false,
|
|
152
|
+
responseBody,
|
|
153
|
+
}
|
|
154
|
+
case "server_is_overloaded":
|
|
155
|
+
case "server_error":
|
|
156
|
+
return {
|
|
157
|
+
type: "api_error",
|
|
158
|
+
message: typeof body?.error?.message === "string" ? body?.error?.message : "Server error.",
|
|
159
|
+
isRetryable: true,
|
|
160
|
+
responseBody,
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export type ParsedAPICallError =
|
|
166
|
+
| {
|
|
167
|
+
type: "context_overflow"
|
|
168
|
+
message: string
|
|
169
|
+
responseBody?: string
|
|
170
|
+
}
|
|
171
|
+
| {
|
|
172
|
+
type: "api_error"
|
|
173
|
+
message: string
|
|
174
|
+
statusCode?: number
|
|
175
|
+
isRetryable: boolean
|
|
176
|
+
responseHeaders?: Record<string, string>
|
|
177
|
+
responseBody?: string
|
|
178
|
+
metadata?: Record<string, string>
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function parseAPICallError(input: { providerID: ProviderID; error: APICallError }): ParsedAPICallError {
|
|
182
|
+
const m = message(input.providerID, input.error)
|
|
183
|
+
const body = json(input.error.responseBody)
|
|
184
|
+
if (isOverflow(m) || input.error.statusCode === 413 || body?.error?.code === "context_length_exceeded") {
|
|
185
|
+
return {
|
|
186
|
+
type: "context_overflow",
|
|
187
|
+
message: m,
|
|
188
|
+
responseBody: input.error.responseBody,
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const metadata = input.error.url ? { url: input.error.url } : undefined
|
|
193
|
+
return {
|
|
194
|
+
type: "api_error",
|
|
195
|
+
message: m,
|
|
196
|
+
statusCode: input.error.statusCode,
|
|
197
|
+
isRetryable: input.providerID.startsWith("openai") ? isOpenAiErrorRetryable(input.error) : input.error.isRetryable,
|
|
198
|
+
responseHeaders: input.error.responseHeaders,
|
|
199
|
+
responseBody: input.error.responseBody,
|
|
200
|
+
metadata,
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export * as ProviderError from "./error"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Schema } from "effect"
|
|
2
|
-
|
|
3
|
-
export { CatalogModelStatus } from "@opencode-ai/core/models"
|
|
4
|
-
|
|
5
|
-
export const ModelStatus = Schema.Literals(["alpha", "beta", "deprecated", "active"])
|
|
6
|
-
export type ModelStatus = typeof ModelStatus.Type
|
|
7
|
-
|
|
8
|
-
export * as ProviderModelStatus from "./model-status"
|
|
1
|
+
import { Schema } from "effect"
|
|
2
|
+
|
|
3
|
+
export { CatalogModelStatus } from "@opencode-ai/core/models"
|
|
4
|
+
|
|
5
|
+
export const ModelStatus = Schema.Literals(["alpha", "beta", "deprecated", "active"])
|
|
6
|
+
export type ModelStatus = typeof ModelStatus.Type
|
|
7
|
+
|
|
8
|
+
export * as ProviderModelStatus from "./model-status"
|