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
package/src/engine/config/mcp.ts
CHANGED
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import { Schema } from "effect"
|
|
2
|
-
import { PositiveInt } from "@opencode-ai/core/schema"
|
|
3
|
-
|
|
4
|
-
export const Local = Schema.Struct({
|
|
5
|
-
type: Schema.Literal("local").annotate({ description: "Type of MCP server connection" }),
|
|
6
|
-
command: Schema.mutable(Schema.Array(Schema.String)).annotate({
|
|
7
|
-
description: "Command and arguments to run the MCP server",
|
|
8
|
-
}),
|
|
9
|
-
environment: Schema.optional(Schema.Record(Schema.String, Schema.String)).annotate({
|
|
10
|
-
description: "Environment variables to set when running the MCP server",
|
|
11
|
-
}),
|
|
12
|
-
enabled: Schema.optional(Schema.Boolean).annotate({
|
|
13
|
-
description: "Enable or disable the MCP server on startup",
|
|
14
|
-
}),
|
|
15
|
-
timeout: Schema.optional(PositiveInt).annotate({
|
|
16
|
-
description: "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
|
|
17
|
-
}),
|
|
18
|
-
}).annotate({ identifier: "McpLocalConfig" })
|
|
19
|
-
export type Local = Schema.Schema.Type<typeof Local>
|
|
20
|
-
|
|
21
|
-
export const OAuth = Schema.Struct({
|
|
22
|
-
clientId: Schema.optional(Schema.String).annotate({
|
|
23
|
-
description: "OAuth client ID. If not provided, dynamic client registration (RFC 7591) will be attempted.",
|
|
24
|
-
}),
|
|
25
|
-
clientSecret: Schema.optional(Schema.String).annotate({
|
|
26
|
-
description: "OAuth client secret (if required by the authorization server)",
|
|
27
|
-
}),
|
|
28
|
-
scope: Schema.optional(Schema.String).annotate({ description: "OAuth scopes to request during authorization" }),
|
|
29
|
-
redirectUri: Schema.optional(Schema.String).annotate({
|
|
30
|
-
description: "OAuth redirect URI (default: http://127.0.0.1:19876/mcp/oauth/callback).",
|
|
31
|
-
}),
|
|
32
|
-
}).annotate({ identifier: "McpOAuthConfig" })
|
|
33
|
-
export type OAuth = Schema.Schema.Type<typeof OAuth>
|
|
34
|
-
|
|
35
|
-
export const Remote = Schema.Struct({
|
|
36
|
-
type: Schema.Literal("remote").annotate({ description: "Type of MCP server connection" }),
|
|
37
|
-
url: Schema.String.annotate({ description: "URL of the remote MCP server" }),
|
|
38
|
-
enabled: Schema.optional(Schema.Boolean).annotate({
|
|
39
|
-
description: "Enable or disable the MCP server on startup",
|
|
40
|
-
}),
|
|
41
|
-
headers: Schema.optional(Schema.Record(Schema.String, Schema.String)).annotate({
|
|
42
|
-
description: "Headers to send with the request",
|
|
43
|
-
}),
|
|
44
|
-
oauth: Schema.optional(Schema.Union([OAuth, Schema.Literal(false)])).annotate({
|
|
45
|
-
description: "OAuth authentication configuration for the MCP server. Set to false to disable OAuth auto-detection.",
|
|
46
|
-
}),
|
|
47
|
-
timeout: Schema.optional(PositiveInt).annotate({
|
|
48
|
-
description: "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
|
|
49
|
-
}),
|
|
50
|
-
}).annotate({ identifier: "McpRemoteConfig" })
|
|
51
|
-
export type Remote = Schema.Schema.Type<typeof Remote>
|
|
52
|
-
|
|
53
|
-
export const Info = Schema.Union([Local, Remote]).annotate({ discriminator: "type" })
|
|
54
|
-
export type Info = Schema.Schema.Type<typeof Info>
|
|
55
|
-
|
|
56
|
-
export * as ConfigMCP from "./mcp"
|
|
1
|
+
import { Schema } from "effect"
|
|
2
|
+
import { PositiveInt } from "@opencode-ai/core/schema"
|
|
3
|
+
|
|
4
|
+
export const Local = Schema.Struct({
|
|
5
|
+
type: Schema.Literal("local").annotate({ description: "Type of MCP server connection" }),
|
|
6
|
+
command: Schema.mutable(Schema.Array(Schema.String)).annotate({
|
|
7
|
+
description: "Command and arguments to run the MCP server",
|
|
8
|
+
}),
|
|
9
|
+
environment: Schema.optional(Schema.Record(Schema.String, Schema.String)).annotate({
|
|
10
|
+
description: "Environment variables to set when running the MCP server",
|
|
11
|
+
}),
|
|
12
|
+
enabled: Schema.optional(Schema.Boolean).annotate({
|
|
13
|
+
description: "Enable or disable the MCP server on startup",
|
|
14
|
+
}),
|
|
15
|
+
timeout: Schema.optional(PositiveInt).annotate({
|
|
16
|
+
description: "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
|
|
17
|
+
}),
|
|
18
|
+
}).annotate({ identifier: "McpLocalConfig" })
|
|
19
|
+
export type Local = Schema.Schema.Type<typeof Local>
|
|
20
|
+
|
|
21
|
+
export const OAuth = Schema.Struct({
|
|
22
|
+
clientId: Schema.optional(Schema.String).annotate({
|
|
23
|
+
description: "OAuth client ID. If not provided, dynamic client registration (RFC 7591) will be attempted.",
|
|
24
|
+
}),
|
|
25
|
+
clientSecret: Schema.optional(Schema.String).annotate({
|
|
26
|
+
description: "OAuth client secret (if required by the authorization server)",
|
|
27
|
+
}),
|
|
28
|
+
scope: Schema.optional(Schema.String).annotate({ description: "OAuth scopes to request during authorization" }),
|
|
29
|
+
redirectUri: Schema.optional(Schema.String).annotate({
|
|
30
|
+
description: "OAuth redirect URI (default: http://127.0.0.1:19876/mcp/oauth/callback).",
|
|
31
|
+
}),
|
|
32
|
+
}).annotate({ identifier: "McpOAuthConfig" })
|
|
33
|
+
export type OAuth = Schema.Schema.Type<typeof OAuth>
|
|
34
|
+
|
|
35
|
+
export const Remote = Schema.Struct({
|
|
36
|
+
type: Schema.Literal("remote").annotate({ description: "Type of MCP server connection" }),
|
|
37
|
+
url: Schema.String.annotate({ description: "URL of the remote MCP server" }),
|
|
38
|
+
enabled: Schema.optional(Schema.Boolean).annotate({
|
|
39
|
+
description: "Enable or disable the MCP server on startup",
|
|
40
|
+
}),
|
|
41
|
+
headers: Schema.optional(Schema.Record(Schema.String, Schema.String)).annotate({
|
|
42
|
+
description: "Headers to send with the request",
|
|
43
|
+
}),
|
|
44
|
+
oauth: Schema.optional(Schema.Union([OAuth, Schema.Literal(false)])).annotate({
|
|
45
|
+
description: "OAuth authentication configuration for the MCP server. Set to false to disable OAuth auto-detection.",
|
|
46
|
+
}),
|
|
47
|
+
timeout: Schema.optional(PositiveInt).annotate({
|
|
48
|
+
description: "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
|
|
49
|
+
}),
|
|
50
|
+
}).annotate({ identifier: "McpRemoteConfig" })
|
|
51
|
+
export type Remote = Schema.Schema.Type<typeof Remote>
|
|
52
|
+
|
|
53
|
+
export const Info = Schema.Union([Local, Remote]).annotate({ discriminator: "type" })
|
|
54
|
+
export type Info = Schema.Schema.Type<typeof Info>
|
|
55
|
+
|
|
56
|
+
export * as ConfigMCP from "./mcp"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Schema } from "effect"
|
|
2
|
-
|
|
3
|
-
export const ConfigModelID = Schema.String
|
|
4
|
-
|
|
5
|
-
export type ConfigModelID = Schema.Schema.Type<typeof ConfigModelID>
|
|
1
|
+
import { Schema } from "effect"
|
|
2
|
+
|
|
3
|
+
export const ConfigModelID = Schema.String
|
|
4
|
+
|
|
5
|
+
export type ConfigModelID = Schema.Schema.Type<typeof ConfigModelID>
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
export * as ConfigParse from "./parse"
|
|
2
|
-
|
|
3
|
-
import { type ParseError as JsoncParseError, parse as parseJsoncImpl, printParseErrorCode } from "jsonc-parser"
|
|
4
|
-
import { Cause, Exit, Schema as EffectSchema, SchemaIssue } from "effect"
|
|
5
|
-
import type { DeepMutable } from "@opencode-ai/core/schema"
|
|
6
|
-
import { InvalidError, JsonError } from "./error"
|
|
7
|
-
|
|
8
|
-
export function jsonc(text: string, filepath: string): unknown {
|
|
9
|
-
const errors: JsoncParseError[] = []
|
|
10
|
-
const data = parseJsoncImpl(text, errors, { allowTrailingComma: true })
|
|
11
|
-
if (errors.length) {
|
|
12
|
-
const lines = text.split("\n")
|
|
13
|
-
const issues = errors
|
|
14
|
-
.map((e) => {
|
|
15
|
-
const beforeOffset = text.substring(0, e.offset).split("\n")
|
|
16
|
-
const line = beforeOffset.length
|
|
17
|
-
const column = beforeOffset[beforeOffset.length - 1].length + 1
|
|
18
|
-
const problemLine = lines[line - 1]
|
|
19
|
-
|
|
20
|
-
const error = `${printParseErrorCode(e.error)} at line ${line}, column ${column}`
|
|
21
|
-
if (!problemLine) return error
|
|
22
|
-
|
|
23
|
-
return `${error}\n Line ${line}: ${problemLine}\n${"".padStart(column + 9)}^`
|
|
24
|
-
})
|
|
25
|
-
.join("\n")
|
|
26
|
-
throw new JsonError({
|
|
27
|
-
path: filepath,
|
|
28
|
-
message: `\n--- JSONC Input ---\n${text}\n--- Errors ---\n${issues}\n--- End ---`,
|
|
29
|
-
})
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return data
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function schema<S extends EffectSchema.Decoder<unknown, never>>(
|
|
36
|
-
schema: S,
|
|
37
|
-
data: unknown,
|
|
38
|
-
source: string,
|
|
39
|
-
): DeepMutable<S["Type"]> {
|
|
40
|
-
const extra = topLevelExtraKeys(schema, data)
|
|
41
|
-
if (extra.length) {
|
|
42
|
-
throw new InvalidError({
|
|
43
|
-
path: source,
|
|
44
|
-
issues: [
|
|
45
|
-
{
|
|
46
|
-
code: "unrecognized_keys",
|
|
47
|
-
keys: extra,
|
|
48
|
-
path: [],
|
|
49
|
-
message: `Unrecognized key${extra.length === 1 ? "" : "s"}: ${extra.join(", ")}`,
|
|
50
|
-
},
|
|
51
|
-
],
|
|
52
|
-
})
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const decoded = EffectSchema.decodeUnknownExit(schema)(data, { errors: "all", propertyOrder: "original" })
|
|
56
|
-
if (Exit.isSuccess(decoded)) return decoded.value as DeepMutable<S["Type"]>
|
|
57
|
-
const error = Cause.squash(decoded.cause)
|
|
58
|
-
|
|
59
|
-
throw new InvalidError(
|
|
60
|
-
{
|
|
61
|
-
path: source,
|
|
62
|
-
issues: EffectSchema.isSchemaError(error)
|
|
63
|
-
? SchemaIssue.makeFormatterStandardSchemaV1()(error.issue).issues.map((issue) => ({
|
|
64
|
-
...issue,
|
|
65
|
-
message: issue.message,
|
|
66
|
-
path: issue.path?.map(String) ?? [],
|
|
67
|
-
}))
|
|
68
|
-
: [{ message: String(error), path: [] }],
|
|
69
|
-
},
|
|
70
|
-
{ cause: error },
|
|
71
|
-
)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function topLevelExtraKeys(schema: EffectSchema.Top, data: unknown) {
|
|
75
|
-
if (typeof data !== "object" || data === null || Array.isArray(data)) return []
|
|
76
|
-
if (schema.ast._tag !== "Objects" || schema.ast.indexSignatures.length > 0) return []
|
|
77
|
-
const known = new Set(schema.ast.propertySignatures.map((item) => String(item.name)))
|
|
78
|
-
return Object.keys(data).filter((key) => !known.has(key))
|
|
79
|
-
}
|
|
1
|
+
export * as ConfigParse from "./parse"
|
|
2
|
+
|
|
3
|
+
import { type ParseError as JsoncParseError, parse as parseJsoncImpl, printParseErrorCode } from "jsonc-parser"
|
|
4
|
+
import { Cause, Exit, Schema as EffectSchema, SchemaIssue } from "effect"
|
|
5
|
+
import type { DeepMutable } from "@opencode-ai/core/schema"
|
|
6
|
+
import { InvalidError, JsonError } from "./error"
|
|
7
|
+
|
|
8
|
+
export function jsonc(text: string, filepath: string): unknown {
|
|
9
|
+
const errors: JsoncParseError[] = []
|
|
10
|
+
const data = parseJsoncImpl(text, errors, { allowTrailingComma: true })
|
|
11
|
+
if (errors.length) {
|
|
12
|
+
const lines = text.split("\n")
|
|
13
|
+
const issues = errors
|
|
14
|
+
.map((e) => {
|
|
15
|
+
const beforeOffset = text.substring(0, e.offset).split("\n")
|
|
16
|
+
const line = beforeOffset.length
|
|
17
|
+
const column = beforeOffset[beforeOffset.length - 1].length + 1
|
|
18
|
+
const problemLine = lines[line - 1]
|
|
19
|
+
|
|
20
|
+
const error = `${printParseErrorCode(e.error)} at line ${line}, column ${column}`
|
|
21
|
+
if (!problemLine) return error
|
|
22
|
+
|
|
23
|
+
return `${error}\n Line ${line}: ${problemLine}\n${"".padStart(column + 9)}^`
|
|
24
|
+
})
|
|
25
|
+
.join("\n")
|
|
26
|
+
throw new JsonError({
|
|
27
|
+
path: filepath,
|
|
28
|
+
message: `\n--- JSONC Input ---\n${text}\n--- Errors ---\n${issues}\n--- End ---`,
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return data
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function schema<S extends EffectSchema.Decoder<unknown, never>>(
|
|
36
|
+
schema: S,
|
|
37
|
+
data: unknown,
|
|
38
|
+
source: string,
|
|
39
|
+
): DeepMutable<S["Type"]> {
|
|
40
|
+
const extra = topLevelExtraKeys(schema, data)
|
|
41
|
+
if (extra.length) {
|
|
42
|
+
throw new InvalidError({
|
|
43
|
+
path: source,
|
|
44
|
+
issues: [
|
|
45
|
+
{
|
|
46
|
+
code: "unrecognized_keys",
|
|
47
|
+
keys: extra,
|
|
48
|
+
path: [],
|
|
49
|
+
message: `Unrecognized key${extra.length === 1 ? "" : "s"}: ${extra.join(", ")}`,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const decoded = EffectSchema.decodeUnknownExit(schema)(data, { errors: "all", propertyOrder: "original" })
|
|
56
|
+
if (Exit.isSuccess(decoded)) return decoded.value as DeepMutable<S["Type"]>
|
|
57
|
+
const error = Cause.squash(decoded.cause)
|
|
58
|
+
|
|
59
|
+
throw new InvalidError(
|
|
60
|
+
{
|
|
61
|
+
path: source,
|
|
62
|
+
issues: EffectSchema.isSchemaError(error)
|
|
63
|
+
? SchemaIssue.makeFormatterStandardSchemaV1()(error.issue).issues.map((issue) => ({
|
|
64
|
+
...issue,
|
|
65
|
+
message: issue.message,
|
|
66
|
+
path: issue.path?.map(String) ?? [],
|
|
67
|
+
}))
|
|
68
|
+
: [{ message: String(error), path: [] }],
|
|
69
|
+
},
|
|
70
|
+
{ cause: error },
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function topLevelExtraKeys(schema: EffectSchema.Top, data: unknown) {
|
|
75
|
+
if (typeof data !== "object" || data === null || Array.isArray(data)) return []
|
|
76
|
+
if (schema.ast._tag !== "Objects" || schema.ast.indexSignatures.length > 0) return []
|
|
77
|
+
const known = new Set(schema.ast.propertySignatures.map((item) => String(item.name)))
|
|
78
|
+
return Object.keys(data).filter((key) => !known.has(key))
|
|
79
|
+
}
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
export * as ConfigPaths from "./paths"
|
|
2
|
-
|
|
3
|
-
import path from "path"
|
|
4
|
-
import { Flag } from "@opencode-ai/core/flag/flag"
|
|
5
|
-
import { Global } from "@opencode-ai/core/global"
|
|
6
|
-
import { unique } from "remeda"
|
|
7
|
-
import * as Effect from "effect/Effect"
|
|
8
|
-
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
|
9
|
-
|
|
10
|
-
export const files = Effect.fn("ConfigPaths.projectFiles")(function* (
|
|
11
|
-
name: string,
|
|
12
|
-
directory: string,
|
|
13
|
-
worktree?: string,
|
|
14
|
-
) {
|
|
15
|
-
const afs = yield* AppFileSystem.Service
|
|
16
|
-
return (yield* afs.up({
|
|
17
|
-
targets: [`${name}.jsonc`, `${name}.json`],
|
|
18
|
-
start: directory,
|
|
19
|
-
stop: worktree,
|
|
20
|
-
})).toReversed()
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
export const directories = Effect.fn("ConfigPaths.directories")(function* (directory: string, worktree?: string) {
|
|
24
|
-
const afs = yield* AppFileSystem.Service
|
|
25
|
-
return unique([
|
|
26
|
-
Global.Path.config,
|
|
27
|
-
...(!Flag.OPENCODE_DISABLE_PROJECT_CONFIG
|
|
28
|
-
? yield* afs.up({
|
|
29
|
-
targets: [".opencode"],
|
|
30
|
-
start: directory,
|
|
31
|
-
stop: worktree,
|
|
32
|
-
})
|
|
33
|
-
: []),
|
|
34
|
-
...(yield* afs.up({
|
|
35
|
-
targets: [".opencode"],
|
|
36
|
-
start: Global.Path.home,
|
|
37
|
-
stop: Global.Path.home,
|
|
38
|
-
})),
|
|
39
|
-
...(Flag.OPENCODE_CONFIG_DIR ? [Flag.OPENCODE_CONFIG_DIR] : []),
|
|
40
|
-
])
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
export function fileInDirectory(dir: string, name: string) {
|
|
44
|
-
return [path.join(dir, `${name}.json`), path.join(dir, `${name}.jsonc`)]
|
|
45
|
-
}
|
|
1
|
+
export * as ConfigPaths from "./paths"
|
|
2
|
+
|
|
3
|
+
import path from "path"
|
|
4
|
+
import { Flag } from "@opencode-ai/core/flag/flag"
|
|
5
|
+
import { Global } from "@opencode-ai/core/global"
|
|
6
|
+
import { unique } from "remeda"
|
|
7
|
+
import * as Effect from "effect/Effect"
|
|
8
|
+
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
|
9
|
+
|
|
10
|
+
export const files = Effect.fn("ConfigPaths.projectFiles")(function* (
|
|
11
|
+
name: string,
|
|
12
|
+
directory: string,
|
|
13
|
+
worktree?: string,
|
|
14
|
+
) {
|
|
15
|
+
const afs = yield* AppFileSystem.Service
|
|
16
|
+
return (yield* afs.up({
|
|
17
|
+
targets: [`${name}.jsonc`, `${name}.json`],
|
|
18
|
+
start: directory,
|
|
19
|
+
stop: worktree,
|
|
20
|
+
})).toReversed()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
export const directories = Effect.fn("ConfigPaths.directories")(function* (directory: string, worktree?: string) {
|
|
24
|
+
const afs = yield* AppFileSystem.Service
|
|
25
|
+
return unique([
|
|
26
|
+
Global.Path.config,
|
|
27
|
+
...(!Flag.OPENCODE_DISABLE_PROJECT_CONFIG
|
|
28
|
+
? yield* afs.up({
|
|
29
|
+
targets: [".opencode"],
|
|
30
|
+
start: directory,
|
|
31
|
+
stop: worktree,
|
|
32
|
+
})
|
|
33
|
+
: []),
|
|
34
|
+
...(yield* afs.up({
|
|
35
|
+
targets: [".opencode"],
|
|
36
|
+
start: Global.Path.home,
|
|
37
|
+
stop: Global.Path.home,
|
|
38
|
+
})),
|
|
39
|
+
...(Flag.OPENCODE_CONFIG_DIR ? [Flag.OPENCODE_CONFIG_DIR] : []),
|
|
40
|
+
])
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
export function fileInDirectory(dir: string, name: string) {
|
|
44
|
+
return [path.join(dir, `${name}.json`), path.join(dir, `${name}.jsonc`)]
|
|
45
|
+
}
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
export * as ConfigPermission from "./permission"
|
|
2
|
-
import { Schema, SchemaGetter } from "effect"
|
|
3
|
-
|
|
4
|
-
export const Action = Schema.Literals(["ask", "allow", "deny"]).annotate({ identifier: "PermissionActionConfig" })
|
|
5
|
-
export type Action = Schema.Schema.Type<typeof Action>
|
|
6
|
-
|
|
7
|
-
export const Object = Schema.Record(Schema.String, Action).annotate({ identifier: "PermissionObjectConfig" })
|
|
8
|
-
export type Object = Schema.Schema.Type<typeof Object>
|
|
9
|
-
|
|
10
|
-
export const Rule = Schema.Union([Action, Object]).annotate({ identifier: "PermissionRuleConfig" })
|
|
11
|
-
export type Rule = Schema.Schema.Type<typeof Rule>
|
|
12
|
-
|
|
13
|
-
// Known permission keys get explicit types in the Effect schema for generated
|
|
14
|
-
// docs/types. Runtime config parsing uses Effect's `propertyOrder: "original"`
|
|
15
|
-
// parse option so user key order is preserved for permission precedence.
|
|
16
|
-
const InputObject = Schema.StructWithRest(
|
|
17
|
-
Schema.Struct({
|
|
18
|
-
read: Schema.optional(Rule),
|
|
19
|
-
edit: Schema.optional(Rule),
|
|
20
|
-
glob: Schema.optional(Rule),
|
|
21
|
-
grep: Schema.optional(Rule),
|
|
22
|
-
list: Schema.optional(Rule),
|
|
23
|
-
bash: Schema.optional(Rule),
|
|
24
|
-
task: Schema.optional(Rule),
|
|
25
|
-
external_directory: Schema.optional(Rule),
|
|
26
|
-
todowrite: Schema.optional(Action),
|
|
27
|
-
question: Schema.optional(Action),
|
|
28
|
-
webfetch: Schema.optional(Action),
|
|
29
|
-
websearch: Schema.optional(Action),
|
|
30
|
-
repo_clone: Schema.optional(Rule),
|
|
31
|
-
repo_overview: Schema.optional(Rule),
|
|
32
|
-
lsp: Schema.optional(Rule),
|
|
33
|
-
doom_loop: Schema.optional(Action),
|
|
34
|
-
skill: Schema.optional(Rule),
|
|
35
|
-
}),
|
|
36
|
-
[Schema.Record(Schema.String, Rule)],
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
// Input the user writes in config: either a single Action (shorthand for "*")
|
|
40
|
-
// or an object of per-target rules.
|
|
41
|
-
const InputSchema = Schema.Union([Action, InputObject])
|
|
42
|
-
|
|
43
|
-
// Normalise the Action shorthand into `{ "*": action }`. Object inputs pass
|
|
44
|
-
// through untouched.
|
|
45
|
-
const normalizeInput = (input: Schema.Schema.Type<typeof InputSchema>): Schema.Schema.Type<typeof InputObject> =>
|
|
46
|
-
typeof input === "string" ? { "*": input } : input
|
|
47
|
-
|
|
48
|
-
export const Info = InputSchema.pipe(
|
|
49
|
-
Schema.decodeTo(InputObject, {
|
|
50
|
-
decode: SchemaGetter.transform(normalizeInput),
|
|
51
|
-
// Not perfectly invertible (we lose whether the user originally typed an
|
|
52
|
-
// Action shorthand), but the object form is always a valid representation
|
|
53
|
-
// of the same rules.
|
|
54
|
-
encode: SchemaGetter.passthrough({ strict: false }),
|
|
55
|
-
}),
|
|
56
|
-
).annotate({ identifier: "PermissionConfig" })
|
|
57
|
-
type _Info = Schema.Schema.Type<typeof InputObject>
|
|
58
|
-
export type Info = { -readonly [K in keyof _Info]: _Info[K] }
|
|
1
|
+
export * as ConfigPermission from "./permission"
|
|
2
|
+
import { Schema, SchemaGetter } from "effect"
|
|
3
|
+
|
|
4
|
+
export const Action = Schema.Literals(["ask", "allow", "deny"]).annotate({ identifier: "PermissionActionConfig" })
|
|
5
|
+
export type Action = Schema.Schema.Type<typeof Action>
|
|
6
|
+
|
|
7
|
+
export const Object = Schema.Record(Schema.String, Action).annotate({ identifier: "PermissionObjectConfig" })
|
|
8
|
+
export type Object = Schema.Schema.Type<typeof Object>
|
|
9
|
+
|
|
10
|
+
export const Rule = Schema.Union([Action, Object]).annotate({ identifier: "PermissionRuleConfig" })
|
|
11
|
+
export type Rule = Schema.Schema.Type<typeof Rule>
|
|
12
|
+
|
|
13
|
+
// Known permission keys get explicit types in the Effect schema for generated
|
|
14
|
+
// docs/types. Runtime config parsing uses Effect's `propertyOrder: "original"`
|
|
15
|
+
// parse option so user key order is preserved for permission precedence.
|
|
16
|
+
const InputObject = Schema.StructWithRest(
|
|
17
|
+
Schema.Struct({
|
|
18
|
+
read: Schema.optional(Rule),
|
|
19
|
+
edit: Schema.optional(Rule),
|
|
20
|
+
glob: Schema.optional(Rule),
|
|
21
|
+
grep: Schema.optional(Rule),
|
|
22
|
+
list: Schema.optional(Rule),
|
|
23
|
+
bash: Schema.optional(Rule),
|
|
24
|
+
task: Schema.optional(Rule),
|
|
25
|
+
external_directory: Schema.optional(Rule),
|
|
26
|
+
todowrite: Schema.optional(Action),
|
|
27
|
+
question: Schema.optional(Action),
|
|
28
|
+
webfetch: Schema.optional(Action),
|
|
29
|
+
websearch: Schema.optional(Action),
|
|
30
|
+
repo_clone: Schema.optional(Rule),
|
|
31
|
+
repo_overview: Schema.optional(Rule),
|
|
32
|
+
lsp: Schema.optional(Rule),
|
|
33
|
+
doom_loop: Schema.optional(Action),
|
|
34
|
+
skill: Schema.optional(Rule),
|
|
35
|
+
}),
|
|
36
|
+
[Schema.Record(Schema.String, Rule)],
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
// Input the user writes in config: either a single Action (shorthand for "*")
|
|
40
|
+
// or an object of per-target rules.
|
|
41
|
+
const InputSchema = Schema.Union([Action, InputObject])
|
|
42
|
+
|
|
43
|
+
// Normalise the Action shorthand into `{ "*": action }`. Object inputs pass
|
|
44
|
+
// through untouched.
|
|
45
|
+
const normalizeInput = (input: Schema.Schema.Type<typeof InputSchema>): Schema.Schema.Type<typeof InputObject> =>
|
|
46
|
+
typeof input === "string" ? { "*": input } : input
|
|
47
|
+
|
|
48
|
+
export const Info = InputSchema.pipe(
|
|
49
|
+
Schema.decodeTo(InputObject, {
|
|
50
|
+
decode: SchemaGetter.transform(normalizeInput),
|
|
51
|
+
// Not perfectly invertible (we lose whether the user originally typed an
|
|
52
|
+
// Action shorthand), but the object form is always a valid representation
|
|
53
|
+
// of the same rules.
|
|
54
|
+
encode: SchemaGetter.passthrough({ strict: false }),
|
|
55
|
+
}),
|
|
56
|
+
).annotate({ identifier: "PermissionConfig" })
|
|
57
|
+
type _Info = Schema.Schema.Type<typeof InputObject>
|
|
58
|
+
export type Info = { -readonly [K in keyof _Info]: _Info[K] }
|