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,143 +1,143 @@
|
|
|
1
|
-
import { Effect, Schema } from "effect"
|
|
2
|
-
import { HttpClient } from "effect/unstable/http"
|
|
3
|
-
import * as Tool from "./tool"
|
|
4
|
-
import * as McpWebSearch from "./mcp-websearch"
|
|
5
|
-
import DESCRIPTION from "./websearch.txt"
|
|
6
|
-
import { checksum } from "@opencode-ai/core/util/encode"
|
|
7
|
-
import { InstallationVersion } from "@opencode-ai/core/installation/version"
|
|
8
|
-
import { RuntimeFlags } from "@/effect/runtime-flags"
|
|
9
|
-
|
|
10
|
-
export const Parameters = Schema.Struct({
|
|
11
|
-
query: Schema.String.annotate({ description: "Websearch query" }),
|
|
12
|
-
numResults: Schema.optional(Schema.Number).annotate({
|
|
13
|
-
description: "Number of search results to return (default: 8)",
|
|
14
|
-
}),
|
|
15
|
-
livecrawl: Schema.optional(Schema.Literals(["fallback", "preferred"])).annotate({
|
|
16
|
-
description:
|
|
17
|
-
"Live crawl mode - 'fallback': use live crawling as backup if cached content unavailable, 'preferred': prioritize live crawling (default: 'fallback')",
|
|
18
|
-
}),
|
|
19
|
-
type: Schema.optional(Schema.Literals(["auto", "fast", "deep"])).annotate({
|
|
20
|
-
description: "Search type - 'auto': balanced search (default), 'fast': quick results, 'deep': comprehensive search",
|
|
21
|
-
}),
|
|
22
|
-
contextMaxCharacters: Schema.optional(Schema.Number).annotate({
|
|
23
|
-
description: "Maximum characters for context string optimized for LLMs (default: 10000)",
|
|
24
|
-
}),
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
const WebSearchProviderSchema = Schema.Literals(["exa", "parallel"])
|
|
28
|
-
export type WebSearchProvider = Schema.Schema.Type<typeof WebSearchProviderSchema>
|
|
29
|
-
|
|
30
|
-
export function selectWebSearchProvider(sessionID: string, flags = { exa: false, parallel: false }): WebSearchProvider {
|
|
31
|
-
const override = process.env.OPENCODE_WEBSEARCH_PROVIDER
|
|
32
|
-
if (override === "exa" || override === "parallel") return override
|
|
33
|
-
if (flags.parallel) return "parallel"
|
|
34
|
-
if (flags.exa) return "exa"
|
|
35
|
-
|
|
36
|
-
return Number.parseInt(checksum(sessionID) ?? "0", 36) % 2 === 0 ? "exa" : "parallel"
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function webSearchProviderLabel(provider: unknown) {
|
|
40
|
-
if (provider === "parallel") return "Parallel Web Search"
|
|
41
|
-
if (provider === "exa") return "Exa Web Search"
|
|
42
|
-
return "Web Search"
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function webSearchModelName(extra: Tool.Context["extra"]) {
|
|
46
|
-
const model = extra?.model
|
|
47
|
-
if (!model || typeof model !== "object") return undefined
|
|
48
|
-
const api = "api" in model && model.api && typeof model.api === "object" ? model.api : undefined
|
|
49
|
-
const apiID = api && "id" in api && typeof api.id === "string" ? api.id : undefined
|
|
50
|
-
const id = "id" in model && typeof model.id === "string" ? model.id : undefined
|
|
51
|
-
return (apiID ?? id)?.slice(0, 100)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function parallelAuthHeaders() {
|
|
55
|
-
const headers = { "User-Agent": `opencode/${InstallationVersion}` }
|
|
56
|
-
if (!process.env.PARALLEL_API_KEY) return headers
|
|
57
|
-
return { ...headers, Authorization: `Bearer ${process.env.PARALLEL_API_KEY}` }
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function callProvider(
|
|
61
|
-
http: HttpClient.HttpClient,
|
|
62
|
-
provider: WebSearchProvider,
|
|
63
|
-
params: Schema.Schema.Type<typeof Parameters>,
|
|
64
|
-
ctx: Tool.Context,
|
|
65
|
-
) {
|
|
66
|
-
if (provider === "parallel") {
|
|
67
|
-
return McpWebSearch.call(
|
|
68
|
-
http,
|
|
69
|
-
McpWebSearch.PARALLEL_URL,
|
|
70
|
-
"web_search",
|
|
71
|
-
McpWebSearch.ParallelSearchArgs,
|
|
72
|
-
{
|
|
73
|
-
objective: params.query,
|
|
74
|
-
search_queries: [params.query],
|
|
75
|
-
session_id: ctx.sessionID,
|
|
76
|
-
model_name: webSearchModelName(ctx.extra),
|
|
77
|
-
},
|
|
78
|
-
"25 seconds",
|
|
79
|
-
parallelAuthHeaders(),
|
|
80
|
-
)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return McpWebSearch.call(
|
|
84
|
-
http,
|
|
85
|
-
McpWebSearch.EXA_URL,
|
|
86
|
-
"web_search_exa",
|
|
87
|
-
McpWebSearch.SearchArgs,
|
|
88
|
-
{
|
|
89
|
-
query: params.query,
|
|
90
|
-
type: params.type || "auto",
|
|
91
|
-
numResults: params.numResults || 8,
|
|
92
|
-
livecrawl: params.livecrawl || "fallback",
|
|
93
|
-
contextMaxCharacters: params.contextMaxCharacters,
|
|
94
|
-
},
|
|
95
|
-
"25 seconds",
|
|
96
|
-
)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export const WebSearchTool = Tool.define(
|
|
100
|
-
"websearch",
|
|
101
|
-
Effect.gen(function* () {
|
|
102
|
-
const http = yield* HttpClient.HttpClient
|
|
103
|
-
const flags = yield* RuntimeFlags.Service
|
|
104
|
-
|
|
105
|
-
return {
|
|
106
|
-
get description() {
|
|
107
|
-
return DESCRIPTION.replace("{{year}}", new Date().getFullYear().toString())
|
|
108
|
-
},
|
|
109
|
-
parameters: Parameters,
|
|
110
|
-
execute: (params: Schema.Schema.Type<typeof Parameters>, ctx: Tool.Context) =>
|
|
111
|
-
Effect.gen(function* () {
|
|
112
|
-
const provider = selectWebSearchProvider(ctx.sessionID, {
|
|
113
|
-
exa: flags.enableExa,
|
|
114
|
-
parallel: flags.enableParallel,
|
|
115
|
-
})
|
|
116
|
-
const title = webSearchProviderLabel(provider)
|
|
117
|
-
yield* ctx.metadata({ title: `${title} "${params.query}"`, metadata: { provider } })
|
|
118
|
-
|
|
119
|
-
yield* ctx.ask({
|
|
120
|
-
permission: "websearch",
|
|
121
|
-
patterns: [params.query],
|
|
122
|
-
always: ["*"],
|
|
123
|
-
metadata: {
|
|
124
|
-
query: params.query,
|
|
125
|
-
numResults: params.numResults,
|
|
126
|
-
livecrawl: params.livecrawl,
|
|
127
|
-
type: params.type,
|
|
128
|
-
contextMaxCharacters: params.contextMaxCharacters,
|
|
129
|
-
provider,
|
|
130
|
-
},
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
const result = yield* callProvider(http, provider, params, ctx)
|
|
134
|
-
|
|
135
|
-
return {
|
|
136
|
-
output: result ?? "No search results found. Please try a different query.",
|
|
137
|
-
title: `${title}: ${params.query}`,
|
|
138
|
-
metadata: { provider },
|
|
139
|
-
}
|
|
140
|
-
}).pipe(Effect.orDie),
|
|
141
|
-
}
|
|
142
|
-
}),
|
|
143
|
-
)
|
|
1
|
+
import { Effect, Schema } from "effect"
|
|
2
|
+
import { HttpClient } from "effect/unstable/http"
|
|
3
|
+
import * as Tool from "./tool"
|
|
4
|
+
import * as McpWebSearch from "./mcp-websearch"
|
|
5
|
+
import DESCRIPTION from "./websearch.txt"
|
|
6
|
+
import { checksum } from "@opencode-ai/core/util/encode"
|
|
7
|
+
import { InstallationVersion } from "@opencode-ai/core/installation/version"
|
|
8
|
+
import { RuntimeFlags } from "@/effect/runtime-flags"
|
|
9
|
+
|
|
10
|
+
export const Parameters = Schema.Struct({
|
|
11
|
+
query: Schema.String.annotate({ description: "Websearch query" }),
|
|
12
|
+
numResults: Schema.optional(Schema.Number).annotate({
|
|
13
|
+
description: "Number of search results to return (default: 8)",
|
|
14
|
+
}),
|
|
15
|
+
livecrawl: Schema.optional(Schema.Literals(["fallback", "preferred"])).annotate({
|
|
16
|
+
description:
|
|
17
|
+
"Live crawl mode - 'fallback': use live crawling as backup if cached content unavailable, 'preferred': prioritize live crawling (default: 'fallback')",
|
|
18
|
+
}),
|
|
19
|
+
type: Schema.optional(Schema.Literals(["auto", "fast", "deep"])).annotate({
|
|
20
|
+
description: "Search type - 'auto': balanced search (default), 'fast': quick results, 'deep': comprehensive search",
|
|
21
|
+
}),
|
|
22
|
+
contextMaxCharacters: Schema.optional(Schema.Number).annotate({
|
|
23
|
+
description: "Maximum characters for context string optimized for LLMs (default: 10000)",
|
|
24
|
+
}),
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const WebSearchProviderSchema = Schema.Literals(["exa", "parallel"])
|
|
28
|
+
export type WebSearchProvider = Schema.Schema.Type<typeof WebSearchProviderSchema>
|
|
29
|
+
|
|
30
|
+
export function selectWebSearchProvider(sessionID: string, flags = { exa: false, parallel: false }): WebSearchProvider {
|
|
31
|
+
const override = process.env.OPENCODE_WEBSEARCH_PROVIDER
|
|
32
|
+
if (override === "exa" || override === "parallel") return override
|
|
33
|
+
if (flags.parallel) return "parallel"
|
|
34
|
+
if (flags.exa) return "exa"
|
|
35
|
+
|
|
36
|
+
return Number.parseInt(checksum(sessionID) ?? "0", 36) % 2 === 0 ? "exa" : "parallel"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function webSearchProviderLabel(provider: unknown) {
|
|
40
|
+
if (provider === "parallel") return "Parallel Web Search"
|
|
41
|
+
if (provider === "exa") return "Exa Web Search"
|
|
42
|
+
return "Web Search"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function webSearchModelName(extra: Tool.Context["extra"]) {
|
|
46
|
+
const model = extra?.model
|
|
47
|
+
if (!model || typeof model !== "object") return undefined
|
|
48
|
+
const api = "api" in model && model.api && typeof model.api === "object" ? model.api : undefined
|
|
49
|
+
const apiID = api && "id" in api && typeof api.id === "string" ? api.id : undefined
|
|
50
|
+
const id = "id" in model && typeof model.id === "string" ? model.id : undefined
|
|
51
|
+
return (apiID ?? id)?.slice(0, 100)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function parallelAuthHeaders() {
|
|
55
|
+
const headers = { "User-Agent": `opencode/${InstallationVersion}` }
|
|
56
|
+
if (!process.env.PARALLEL_API_KEY) return headers
|
|
57
|
+
return { ...headers, Authorization: `Bearer ${process.env.PARALLEL_API_KEY}` }
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function callProvider(
|
|
61
|
+
http: HttpClient.HttpClient,
|
|
62
|
+
provider: WebSearchProvider,
|
|
63
|
+
params: Schema.Schema.Type<typeof Parameters>,
|
|
64
|
+
ctx: Tool.Context,
|
|
65
|
+
) {
|
|
66
|
+
if (provider === "parallel") {
|
|
67
|
+
return McpWebSearch.call(
|
|
68
|
+
http,
|
|
69
|
+
McpWebSearch.PARALLEL_URL,
|
|
70
|
+
"web_search",
|
|
71
|
+
McpWebSearch.ParallelSearchArgs,
|
|
72
|
+
{
|
|
73
|
+
objective: params.query,
|
|
74
|
+
search_queries: [params.query],
|
|
75
|
+
session_id: ctx.sessionID,
|
|
76
|
+
model_name: webSearchModelName(ctx.extra),
|
|
77
|
+
},
|
|
78
|
+
"25 seconds",
|
|
79
|
+
parallelAuthHeaders(),
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return McpWebSearch.call(
|
|
84
|
+
http,
|
|
85
|
+
McpWebSearch.EXA_URL,
|
|
86
|
+
"web_search_exa",
|
|
87
|
+
McpWebSearch.SearchArgs,
|
|
88
|
+
{
|
|
89
|
+
query: params.query,
|
|
90
|
+
type: params.type || "auto",
|
|
91
|
+
numResults: params.numResults || 8,
|
|
92
|
+
livecrawl: params.livecrawl || "fallback",
|
|
93
|
+
contextMaxCharacters: params.contextMaxCharacters,
|
|
94
|
+
},
|
|
95
|
+
"25 seconds",
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export const WebSearchTool = Tool.define(
|
|
100
|
+
"websearch",
|
|
101
|
+
Effect.gen(function* () {
|
|
102
|
+
const http = yield* HttpClient.HttpClient
|
|
103
|
+
const flags = yield* RuntimeFlags.Service
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
get description() {
|
|
107
|
+
return DESCRIPTION.replace("{{year}}", new Date().getFullYear().toString())
|
|
108
|
+
},
|
|
109
|
+
parameters: Parameters,
|
|
110
|
+
execute: (params: Schema.Schema.Type<typeof Parameters>, ctx: Tool.Context) =>
|
|
111
|
+
Effect.gen(function* () {
|
|
112
|
+
const provider = selectWebSearchProvider(ctx.sessionID, {
|
|
113
|
+
exa: flags.enableExa,
|
|
114
|
+
parallel: flags.enableParallel,
|
|
115
|
+
})
|
|
116
|
+
const title = webSearchProviderLabel(provider)
|
|
117
|
+
yield* ctx.metadata({ title: `${title} "${params.query}"`, metadata: { provider } })
|
|
118
|
+
|
|
119
|
+
yield* ctx.ask({
|
|
120
|
+
permission: "websearch",
|
|
121
|
+
patterns: [params.query],
|
|
122
|
+
always: ["*"],
|
|
123
|
+
metadata: {
|
|
124
|
+
query: params.query,
|
|
125
|
+
numResults: params.numResults,
|
|
126
|
+
livecrawl: params.livecrawl,
|
|
127
|
+
type: params.type,
|
|
128
|
+
contextMaxCharacters: params.contextMaxCharacters,
|
|
129
|
+
provider,
|
|
130
|
+
},
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
const result = yield* callProvider(http, provider, params, ctx)
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
output: result ?? "No search results found. Please try a different query.",
|
|
137
|
+
title: `${title}: ${params.query}`,
|
|
138
|
+
metadata: { provider },
|
|
139
|
+
}
|
|
140
|
+
}).pipe(Effect.orDie),
|
|
141
|
+
}
|
|
142
|
+
}),
|
|
143
|
+
)
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
- Search the web using the session's web search provider - performs real-time web searches and can scrape content from specific URLs
|
|
2
|
-
- Provides up-to-date information for current events and recent data
|
|
3
|
-
- Supports configurable result counts and returns the content from the most relevant websites
|
|
4
|
-
- Use this tool for accessing information beyond knowledge cutoff
|
|
5
|
-
- Searches are performed automatically within a single API call
|
|
6
|
-
|
|
7
|
-
Usage notes:
|
|
8
|
-
- Supports live crawling modes when available: 'fallback' (backup if cached unavailable) or 'preferred' (prioritize live crawling)
|
|
9
|
-
- Search types when available: 'auto' (balanced), 'fast' (quick results), 'deep' (comprehensive search)
|
|
10
|
-
- Configurable context length for optimal LLM integration
|
|
11
|
-
- Domain filtering and advanced search options available
|
|
12
|
-
|
|
13
|
-
The current year is {{year}}. You MUST use this year when searching for recent information or current events
|
|
14
|
-
- Example: If the current year is 2026 and the user asks for "latest AI news", search for "AI news 2026", NOT "AI news 2025"
|
|
1
|
+
- Search the web using the session's web search provider - performs real-time web searches and can scrape content from specific URLs
|
|
2
|
+
- Provides up-to-date information for current events and recent data
|
|
3
|
+
- Supports configurable result counts and returns the content from the most relevant websites
|
|
4
|
+
- Use this tool for accessing information beyond knowledge cutoff
|
|
5
|
+
- Searches are performed automatically within a single API call
|
|
6
|
+
|
|
7
|
+
Usage notes:
|
|
8
|
+
- Supports live crawling modes when available: 'fallback' (backup if cached unavailable) or 'preferred' (prioritize live crawling)
|
|
9
|
+
- Search types when available: 'auto' (balanced), 'fast' (quick results), 'deep' (comprehensive search)
|
|
10
|
+
- Configurable context length for optimal LLM integration
|
|
11
|
+
- Domain filtering and advanced search options available
|
|
12
|
+
|
|
13
|
+
The current year is {{year}}. You MUST use this year when searching for recent information or current events
|
|
14
|
+
- Example: If the current year is 2026 and the user asks for "latest AI news", search for "AI news 2026", NOT "AI news 2025"
|
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
import { Schema } from "effect"
|
|
2
|
-
import * as path from "path"
|
|
3
|
-
import { Effect } from "effect"
|
|
4
|
-
import * as Tool from "./tool"
|
|
5
|
-
import { LSP } from "@/lsp/lsp"
|
|
6
|
-
import { createTwoFilesPatch } from "diff"
|
|
7
|
-
import DESCRIPTION from "./write.txt"
|
|
8
|
-
import { Bus } from "../bus"
|
|
9
|
-
import { File } from "../file"
|
|
10
|
-
import { FileWatcher } from "../file/watcher"
|
|
11
|
-
import { Format } from "../format"
|
|
12
|
-
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
|
13
|
-
import { InstanceState } from "@/effect/instance-state"
|
|
14
|
-
import { trimDiff } from "./edit"
|
|
15
|
-
import { assertExternalDirectoryEffect } from "./external-directory"
|
|
16
|
-
import * as Bom from "@/util/bom"
|
|
17
|
-
|
|
18
|
-
const MAX_PROJECT_DIAGNOSTICS_FILES = 5
|
|
19
|
-
|
|
20
|
-
export const Parameters = Schema.Struct({
|
|
21
|
-
content: Schema.String.annotate({ description: "The content to write to the file" }),
|
|
22
|
-
filePath: Schema.String.annotate({
|
|
23
|
-
description: "The absolute path to the file to write (must be absolute, not relative)",
|
|
24
|
-
}),
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
export const WriteTool = Tool.define(
|
|
28
|
-
"write",
|
|
29
|
-
Effect.gen(function* () {
|
|
30
|
-
const lsp = yield* LSP.Service
|
|
31
|
-
const fs = yield* AppFileSystem.Service
|
|
32
|
-
const bus = yield* Bus.Service
|
|
33
|
-
const format = yield* Format.Service
|
|
34
|
-
|
|
35
|
-
return {
|
|
36
|
-
description: DESCRIPTION,
|
|
37
|
-
parameters: Parameters,
|
|
38
|
-
execute: (params: { content: string; filePath: string }, ctx: Tool.Context) =>
|
|
39
|
-
Effect.gen(function* () {
|
|
40
|
-
const instance = yield* InstanceState.context
|
|
41
|
-
const filepath = path.isAbsolute(params.filePath)
|
|
42
|
-
? params.filePath
|
|
43
|
-
: path.join(instance.directory, params.filePath)
|
|
44
|
-
yield* assertExternalDirectoryEffect(ctx, filepath)
|
|
45
|
-
|
|
46
|
-
const exists = yield* fs.existsSafe(filepath)
|
|
47
|
-
const source = exists ? yield* Bom.readFile(fs, filepath) : { bom: false, text: "" }
|
|
48
|
-
const next = Bom.split(params.content)
|
|
49
|
-
const desiredBom = source.bom || next.bom
|
|
50
|
-
const contentOld = source.text
|
|
51
|
-
const contentNew = next.text
|
|
52
|
-
|
|
53
|
-
const diff = trimDiff(createTwoFilesPatch(filepath, filepath, contentOld, contentNew))
|
|
54
|
-
yield* ctx.ask({
|
|
55
|
-
permission: "edit",
|
|
56
|
-
patterns: [path.relative(instance.worktree, filepath)],
|
|
57
|
-
always: ["*"],
|
|
58
|
-
metadata: {
|
|
59
|
-
filepath,
|
|
60
|
-
diff,
|
|
61
|
-
},
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
yield* fs.writeWithDirs(filepath, Bom.join(contentNew, desiredBom))
|
|
65
|
-
if (yield* format.file(filepath)) {
|
|
66
|
-
yield* Bom.syncFile(fs, filepath, desiredBom)
|
|
67
|
-
}
|
|
68
|
-
yield* bus.publish(File.Event.Edited, { file: filepath })
|
|
69
|
-
yield* bus.publish(FileWatcher.Event.Updated, {
|
|
70
|
-
file: filepath,
|
|
71
|
-
event: exists ? "change" : "add",
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
let output = "Wrote file successfully."
|
|
75
|
-
yield* lsp.touchFile(filepath, "document")
|
|
76
|
-
const diagnostics = yield* lsp.diagnostics()
|
|
77
|
-
const normalizedFilepath = AppFileSystem.normalizePath(filepath)
|
|
78
|
-
let projectDiagnosticsCount = 0
|
|
79
|
-
for (const [file, issues] of Object.entries(diagnostics)) {
|
|
80
|
-
const current = file === normalizedFilepath
|
|
81
|
-
if (!current && projectDiagnosticsCount >= MAX_PROJECT_DIAGNOSTICS_FILES) continue
|
|
82
|
-
const block = LSP.Diagnostic.report(current ? filepath : file, issues)
|
|
83
|
-
if (!block) continue
|
|
84
|
-
if (current) {
|
|
85
|
-
output += `\n\nLSP errors detected in this file, please fix:\n${block}`
|
|
86
|
-
continue
|
|
87
|
-
}
|
|
88
|
-
projectDiagnosticsCount++
|
|
89
|
-
output += `\n\nLSP errors detected in other files:\n${block}`
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
title: path.relative(instance.worktree, filepath),
|
|
94
|
-
metadata: {
|
|
95
|
-
diagnostics,
|
|
96
|
-
filepath,
|
|
97
|
-
exists: exists,
|
|
98
|
-
},
|
|
99
|
-
output,
|
|
100
|
-
}
|
|
101
|
-
}).pipe(Effect.orDie),
|
|
102
|
-
}
|
|
103
|
-
}),
|
|
104
|
-
)
|
|
1
|
+
import { Schema } from "effect"
|
|
2
|
+
import * as path from "path"
|
|
3
|
+
import { Effect } from "effect"
|
|
4
|
+
import * as Tool from "./tool"
|
|
5
|
+
import { LSP } from "@/lsp/lsp"
|
|
6
|
+
import { createTwoFilesPatch } from "diff"
|
|
7
|
+
import DESCRIPTION from "./write.txt"
|
|
8
|
+
import { Bus } from "../bus"
|
|
9
|
+
import { File } from "../file"
|
|
10
|
+
import { FileWatcher } from "../file/watcher"
|
|
11
|
+
import { Format } from "../format"
|
|
12
|
+
import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
|
13
|
+
import { InstanceState } from "@/effect/instance-state"
|
|
14
|
+
import { trimDiff } from "./edit"
|
|
15
|
+
import { assertExternalDirectoryEffect } from "./external-directory"
|
|
16
|
+
import * as Bom from "@/util/bom"
|
|
17
|
+
|
|
18
|
+
const MAX_PROJECT_DIAGNOSTICS_FILES = 5
|
|
19
|
+
|
|
20
|
+
export const Parameters = Schema.Struct({
|
|
21
|
+
content: Schema.String.annotate({ description: "The content to write to the file" }),
|
|
22
|
+
filePath: Schema.String.annotate({
|
|
23
|
+
description: "The absolute path to the file to write (must be absolute, not relative)",
|
|
24
|
+
}),
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
export const WriteTool = Tool.define(
|
|
28
|
+
"write",
|
|
29
|
+
Effect.gen(function* () {
|
|
30
|
+
const lsp = yield* LSP.Service
|
|
31
|
+
const fs = yield* AppFileSystem.Service
|
|
32
|
+
const bus = yield* Bus.Service
|
|
33
|
+
const format = yield* Format.Service
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
description: DESCRIPTION,
|
|
37
|
+
parameters: Parameters,
|
|
38
|
+
execute: (params: { content: string; filePath: string }, ctx: Tool.Context) =>
|
|
39
|
+
Effect.gen(function* () {
|
|
40
|
+
const instance = yield* InstanceState.context
|
|
41
|
+
const filepath = path.isAbsolute(params.filePath)
|
|
42
|
+
? params.filePath
|
|
43
|
+
: path.join(instance.directory, params.filePath)
|
|
44
|
+
yield* assertExternalDirectoryEffect(ctx, filepath)
|
|
45
|
+
|
|
46
|
+
const exists = yield* fs.existsSafe(filepath)
|
|
47
|
+
const source = exists ? yield* Bom.readFile(fs, filepath) : { bom: false, text: "" }
|
|
48
|
+
const next = Bom.split(params.content)
|
|
49
|
+
const desiredBom = source.bom || next.bom
|
|
50
|
+
const contentOld = source.text
|
|
51
|
+
const contentNew = next.text
|
|
52
|
+
|
|
53
|
+
const diff = trimDiff(createTwoFilesPatch(filepath, filepath, contentOld, contentNew))
|
|
54
|
+
yield* ctx.ask({
|
|
55
|
+
permission: "edit",
|
|
56
|
+
patterns: [path.relative(instance.worktree, filepath)],
|
|
57
|
+
always: ["*"],
|
|
58
|
+
metadata: {
|
|
59
|
+
filepath,
|
|
60
|
+
diff,
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
yield* fs.writeWithDirs(filepath, Bom.join(contentNew, desiredBom))
|
|
65
|
+
if (yield* format.file(filepath)) {
|
|
66
|
+
yield* Bom.syncFile(fs, filepath, desiredBom)
|
|
67
|
+
}
|
|
68
|
+
yield* bus.publish(File.Event.Edited, { file: filepath })
|
|
69
|
+
yield* bus.publish(FileWatcher.Event.Updated, {
|
|
70
|
+
file: filepath,
|
|
71
|
+
event: exists ? "change" : "add",
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
let output = "Wrote file successfully."
|
|
75
|
+
yield* lsp.touchFile(filepath, "document")
|
|
76
|
+
const diagnostics = yield* lsp.diagnostics()
|
|
77
|
+
const normalizedFilepath = AppFileSystem.normalizePath(filepath)
|
|
78
|
+
let projectDiagnosticsCount = 0
|
|
79
|
+
for (const [file, issues] of Object.entries(diagnostics)) {
|
|
80
|
+
const current = file === normalizedFilepath
|
|
81
|
+
if (!current && projectDiagnosticsCount >= MAX_PROJECT_DIAGNOSTICS_FILES) continue
|
|
82
|
+
const block = LSP.Diagnostic.report(current ? filepath : file, issues)
|
|
83
|
+
if (!block) continue
|
|
84
|
+
if (current) {
|
|
85
|
+
output += `\n\nLSP errors detected in this file, please fix:\n${block}`
|
|
86
|
+
continue
|
|
87
|
+
}
|
|
88
|
+
projectDiagnosticsCount++
|
|
89
|
+
output += `\n\nLSP errors detected in other files:\n${block}`
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
title: path.relative(instance.worktree, filepath),
|
|
94
|
+
metadata: {
|
|
95
|
+
diagnostics,
|
|
96
|
+
filepath,
|
|
97
|
+
exists: exists,
|
|
98
|
+
},
|
|
99
|
+
output,
|
|
100
|
+
}
|
|
101
|
+
}).pipe(Effect.orDie),
|
|
102
|
+
}
|
|
103
|
+
}),
|
|
104
|
+
)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
Writes a file to the local filesystem.
|
|
2
|
-
|
|
3
|
-
Usage:
|
|
4
|
-
- This tool will overwrite the existing file if there is one at the provided path.
|
|
5
|
-
- If this is an existing file, you MUST use the Read tool first to read the file's contents. This tool will fail if you did not read the file first.
|
|
6
|
-
- ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.
|
|
7
|
-
- NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.
|
|
8
|
-
- Only use emojis if the user explicitly requests it. Avoid writing emojis to files unless asked.
|
|
1
|
+
Writes a file to the local filesystem.
|
|
2
|
+
|
|
3
|
+
Usage:
|
|
4
|
+
- This tool will overwrite the existing file if there is one at the provided path.
|
|
5
|
+
- If this is an existing file, you MUST use the Read tool first to read the file's contents. This tool will fail if you did not read the file first.
|
|
6
|
+
- ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.
|
|
7
|
+
- NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.
|
|
8
|
+
- Only use emojis if the user explicitly requests it. Avoid writing emojis to files unless asked.
|