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,24 +1,24 @@
|
|
|
1
|
-
Interact with Language Server Protocol (LSP) servers to get code intelligence features.
|
|
2
|
-
|
|
3
|
-
Supported operations:
|
|
4
|
-
- goToDefinition: Find where a symbol is defined
|
|
5
|
-
- findReferences: Find all references to a symbol
|
|
6
|
-
- hover: Get hover information (documentation, type info) for a symbol
|
|
7
|
-
- documentSymbol: Get all symbols (functions, classes, variables) in a document
|
|
8
|
-
- workspaceSymbol: List project-wide symbols matching a query string
|
|
9
|
-
- goToImplementation: Find implementations of an interface or abstract method
|
|
10
|
-
- prepareCallHierarchy: Get call hierarchy item at a position (functions/methods)
|
|
11
|
-
- incomingCalls: Find all functions/methods that call the function at a position
|
|
12
|
-
- outgoingCalls: Find all functions/methods called by the function at a position
|
|
13
|
-
|
|
14
|
-
All operations require:
|
|
15
|
-
- filePath: The file to operate on
|
|
16
|
-
- line: The line number (1-based, as shown in editors)
|
|
17
|
-
- character: The character offset (1-based, as shown in editors)
|
|
18
|
-
|
|
19
|
-
workspaceSymbol also accepts:
|
|
20
|
-
- query: A query string to filter symbols by. Empty string requests all symbols.
|
|
21
|
-
|
|
22
|
-
For workspaceSymbol, filePath is not sent in the LSP workspace/symbol request. It is used by opencode to select and start the matching LSP server.
|
|
23
|
-
|
|
24
|
-
Note: LSP servers must be configured for the file type. If no server is available, an error will be returned.
|
|
1
|
+
Interact with Language Server Protocol (LSP) servers to get code intelligence features.
|
|
2
|
+
|
|
3
|
+
Supported operations:
|
|
4
|
+
- goToDefinition: Find where a symbol is defined
|
|
5
|
+
- findReferences: Find all references to a symbol
|
|
6
|
+
- hover: Get hover information (documentation, type info) for a symbol
|
|
7
|
+
- documentSymbol: Get all symbols (functions, classes, variables) in a document
|
|
8
|
+
- workspaceSymbol: List project-wide symbols matching a query string
|
|
9
|
+
- goToImplementation: Find implementations of an interface or abstract method
|
|
10
|
+
- prepareCallHierarchy: Get call hierarchy item at a position (functions/methods)
|
|
11
|
+
- incomingCalls: Find all functions/methods that call the function at a position
|
|
12
|
+
- outgoingCalls: Find all functions/methods called by the function at a position
|
|
13
|
+
|
|
14
|
+
All operations require:
|
|
15
|
+
- filePath: The file to operate on
|
|
16
|
+
- line: The line number (1-based, as shown in editors)
|
|
17
|
+
- character: The character offset (1-based, as shown in editors)
|
|
18
|
+
|
|
19
|
+
workspaceSymbol also accepts:
|
|
20
|
+
- query: A query string to filter symbols by. Empty string requests all symbols.
|
|
21
|
+
|
|
22
|
+
For workspaceSymbol, filePath is not sent in the LSP workspace/symbol request. It is used by opencode to select and start the matching LSP server.
|
|
23
|
+
|
|
24
|
+
Note: LSP servers must be configured for the file type. If no server is available, an error will be returned.
|
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
import { Duration, Effect, Schema } from "effect"
|
|
2
|
-
import { HttpClient, HttpClientRequest } from "effect/unstable/http"
|
|
3
|
-
|
|
4
|
-
export const EXA_URL = process.env.EXA_API_KEY
|
|
5
|
-
? `https://mcp.exa.ai/mcp?exaApiKey=${encodeURIComponent(process.env.EXA_API_KEY)}`
|
|
6
|
-
: "https://mcp.exa.ai/mcp"
|
|
7
|
-
export const PARALLEL_URL = "https://search.parallel.ai/mcp"
|
|
8
|
-
|
|
9
|
-
const McpResult = Schema.Struct({
|
|
10
|
-
result: Schema.Struct({
|
|
11
|
-
content: Schema.Array(
|
|
12
|
-
Schema.Struct({
|
|
13
|
-
type: Schema.String,
|
|
14
|
-
text: Schema.String,
|
|
15
|
-
}),
|
|
16
|
-
),
|
|
17
|
-
}),
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
const decode = Schema.decodeUnknownEffect(Schema.fromJsonString(McpResult))
|
|
21
|
-
|
|
22
|
-
const parsePayload = (payload: string) =>
|
|
23
|
-
Effect.gen(function* () {
|
|
24
|
-
const trimmed = payload.trim()
|
|
25
|
-
if (!trimmed.startsWith("{")) return undefined
|
|
26
|
-
const data = yield* decode(trimmed)
|
|
27
|
-
return data.result.content.find((item) => item.text)?.text
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
export const parseResponse = Effect.fn("McpWebSearch.parseResponse")(function* (body: string) {
|
|
31
|
-
const trimmed = body.trim()
|
|
32
|
-
const direct = trimmed ? yield* parsePayload(trimmed) : undefined
|
|
33
|
-
if (direct) return direct
|
|
34
|
-
|
|
35
|
-
for (const line of body.split("\n")) {
|
|
36
|
-
if (!line.startsWith("data: ")) continue
|
|
37
|
-
const data = yield* parsePayload(line.substring(6))
|
|
38
|
-
if (data) return data
|
|
39
|
-
}
|
|
40
|
-
return undefined
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
export const SearchArgs = Schema.Struct({
|
|
44
|
-
query: Schema.String,
|
|
45
|
-
type: Schema.String,
|
|
46
|
-
numResults: Schema.Number,
|
|
47
|
-
livecrawl: Schema.String,
|
|
48
|
-
contextMaxCharacters: Schema.optional(Schema.Number),
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
export const ParallelSearchArgs = Schema.Struct({
|
|
52
|
-
objective: Schema.String,
|
|
53
|
-
search_queries: Schema.Array(Schema.String),
|
|
54
|
-
session_id: Schema.optional(Schema.String),
|
|
55
|
-
model_name: Schema.optional(Schema.String),
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
const McpRequest = <F extends Schema.Struct.Fields>(args: Schema.Struct<F>) =>
|
|
59
|
-
Schema.Struct({
|
|
60
|
-
jsonrpc: Schema.Literal("2.0"),
|
|
61
|
-
id: Schema.Literal(1),
|
|
62
|
-
method: Schema.Literal("tools/call"),
|
|
63
|
-
params: Schema.Struct({
|
|
64
|
-
name: Schema.String,
|
|
65
|
-
arguments: args,
|
|
66
|
-
}),
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
export const call = <F extends Schema.Struct.Fields>(
|
|
70
|
-
http: HttpClient.HttpClient,
|
|
71
|
-
url: string,
|
|
72
|
-
tool: string,
|
|
73
|
-
args: Schema.Struct<F>,
|
|
74
|
-
value: Schema.Struct.Type<F>,
|
|
75
|
-
timeout: Duration.Input,
|
|
76
|
-
headers?: Record<string, string>,
|
|
77
|
-
) =>
|
|
78
|
-
Effect.gen(function* () {
|
|
79
|
-
const request = yield* HttpClientRequest.post(url).pipe(
|
|
80
|
-
HttpClientRequest.accept("application/json, text/event-stream"),
|
|
81
|
-
HttpClientRequest.setHeaders(headers ?? {}),
|
|
82
|
-
HttpClientRequest.schemaBodyJson(McpRequest(args))({
|
|
83
|
-
jsonrpc: "2.0" as const,
|
|
84
|
-
id: 1 as const,
|
|
85
|
-
method: "tools/call" as const,
|
|
86
|
-
params: { name: tool, arguments: value },
|
|
87
|
-
}),
|
|
88
|
-
)
|
|
89
|
-
const response = yield* HttpClient.filterStatusOk(http)
|
|
90
|
-
.execute(request)
|
|
91
|
-
.pipe(
|
|
92
|
-
Effect.timeoutOrElse({ duration: timeout, orElse: () => Effect.die(new Error(`${tool} request timed out`)) }),
|
|
93
|
-
)
|
|
94
|
-
const body = yield* response.text
|
|
95
|
-
return yield* parseResponse(body)
|
|
96
|
-
})
|
|
1
|
+
import { Duration, Effect, Schema } from "effect"
|
|
2
|
+
import { HttpClient, HttpClientRequest } from "effect/unstable/http"
|
|
3
|
+
|
|
4
|
+
export const EXA_URL = process.env.EXA_API_KEY
|
|
5
|
+
? `https://mcp.exa.ai/mcp?exaApiKey=${encodeURIComponent(process.env.EXA_API_KEY)}`
|
|
6
|
+
: "https://mcp.exa.ai/mcp"
|
|
7
|
+
export const PARALLEL_URL = "https://search.parallel.ai/mcp"
|
|
8
|
+
|
|
9
|
+
const McpResult = Schema.Struct({
|
|
10
|
+
result: Schema.Struct({
|
|
11
|
+
content: Schema.Array(
|
|
12
|
+
Schema.Struct({
|
|
13
|
+
type: Schema.String,
|
|
14
|
+
text: Schema.String,
|
|
15
|
+
}),
|
|
16
|
+
),
|
|
17
|
+
}),
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const decode = Schema.decodeUnknownEffect(Schema.fromJsonString(McpResult))
|
|
21
|
+
|
|
22
|
+
const parsePayload = (payload: string) =>
|
|
23
|
+
Effect.gen(function* () {
|
|
24
|
+
const trimmed = payload.trim()
|
|
25
|
+
if (!trimmed.startsWith("{")) return undefined
|
|
26
|
+
const data = yield* decode(trimmed)
|
|
27
|
+
return data.result.content.find((item) => item.text)?.text
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
export const parseResponse = Effect.fn("McpWebSearch.parseResponse")(function* (body: string) {
|
|
31
|
+
const trimmed = body.trim()
|
|
32
|
+
const direct = trimmed ? yield* parsePayload(trimmed) : undefined
|
|
33
|
+
if (direct) return direct
|
|
34
|
+
|
|
35
|
+
for (const line of body.split("\n")) {
|
|
36
|
+
if (!line.startsWith("data: ")) continue
|
|
37
|
+
const data = yield* parsePayload(line.substring(6))
|
|
38
|
+
if (data) return data
|
|
39
|
+
}
|
|
40
|
+
return undefined
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
export const SearchArgs = Schema.Struct({
|
|
44
|
+
query: Schema.String,
|
|
45
|
+
type: Schema.String,
|
|
46
|
+
numResults: Schema.Number,
|
|
47
|
+
livecrawl: Schema.String,
|
|
48
|
+
contextMaxCharacters: Schema.optional(Schema.Number),
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
export const ParallelSearchArgs = Schema.Struct({
|
|
52
|
+
objective: Schema.String,
|
|
53
|
+
search_queries: Schema.Array(Schema.String),
|
|
54
|
+
session_id: Schema.optional(Schema.String),
|
|
55
|
+
model_name: Schema.optional(Schema.String),
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
const McpRequest = <F extends Schema.Struct.Fields>(args: Schema.Struct<F>) =>
|
|
59
|
+
Schema.Struct({
|
|
60
|
+
jsonrpc: Schema.Literal("2.0"),
|
|
61
|
+
id: Schema.Literal(1),
|
|
62
|
+
method: Schema.Literal("tools/call"),
|
|
63
|
+
params: Schema.Struct({
|
|
64
|
+
name: Schema.String,
|
|
65
|
+
arguments: args,
|
|
66
|
+
}),
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
export const call = <F extends Schema.Struct.Fields>(
|
|
70
|
+
http: HttpClient.HttpClient,
|
|
71
|
+
url: string,
|
|
72
|
+
tool: string,
|
|
73
|
+
args: Schema.Struct<F>,
|
|
74
|
+
value: Schema.Struct.Type<F>,
|
|
75
|
+
timeout: Duration.Input,
|
|
76
|
+
headers?: Record<string, string>,
|
|
77
|
+
) =>
|
|
78
|
+
Effect.gen(function* () {
|
|
79
|
+
const request = yield* HttpClientRequest.post(url).pipe(
|
|
80
|
+
HttpClientRequest.accept("application/json, text/event-stream"),
|
|
81
|
+
HttpClientRequest.setHeaders(headers ?? {}),
|
|
82
|
+
HttpClientRequest.schemaBodyJson(McpRequest(args))({
|
|
83
|
+
jsonrpc: "2.0" as const,
|
|
84
|
+
id: 1 as const,
|
|
85
|
+
method: "tools/call" as const,
|
|
86
|
+
params: { name: tool, arguments: value },
|
|
87
|
+
}),
|
|
88
|
+
)
|
|
89
|
+
const response = yield* HttpClient.filterStatusOk(http)
|
|
90
|
+
.execute(request)
|
|
91
|
+
.pipe(
|
|
92
|
+
Effect.timeoutOrElse({ duration: timeout, orElse: () => Effect.die(new Error(`${tool} request timed out`)) }),
|
|
93
|
+
)
|
|
94
|
+
const body = yield* response.text
|
|
95
|
+
return yield* parseResponse(body)
|
|
96
|
+
})
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
Use this tool to suggest switching to plan agent when the user's request would benefit from planning before implementation.
|
|
2
|
-
|
|
3
|
-
If they explicitly mention wanting to create a plan ALWAYS call this tool first.
|
|
4
|
-
|
|
5
|
-
This tool will ask the user if they want to switch to plan agent.
|
|
6
|
-
|
|
7
|
-
Call this tool when:
|
|
8
|
-
- The user's request is complex and would benefit from planning first
|
|
9
|
-
- You want to research and design before making changes
|
|
10
|
-
- The task involves multiple files or significant architectural decisions
|
|
11
|
-
|
|
12
|
-
Do NOT call this tool:
|
|
13
|
-
- For simple, straightforward tasks
|
|
14
|
-
- When the user explicitly wants immediate implementation
|
|
1
|
+
Use this tool to suggest switching to plan agent when the user's request would benefit from planning before implementation.
|
|
2
|
+
|
|
3
|
+
If they explicitly mention wanting to create a plan ALWAYS call this tool first.
|
|
4
|
+
|
|
5
|
+
This tool will ask the user if they want to switch to plan agent.
|
|
6
|
+
|
|
7
|
+
Call this tool when:
|
|
8
|
+
- The user's request is complex and would benefit from planning first
|
|
9
|
+
- You want to research and design before making changes
|
|
10
|
+
- The task involves multiple files or significant architectural decisions
|
|
11
|
+
|
|
12
|
+
Do NOT call this tool:
|
|
13
|
+
- For simple, straightforward tasks
|
|
14
|
+
- When the user explicitly wants immediate implementation
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
Use this tool when you have completed the planning phase and are ready to exit plan agent.
|
|
2
|
-
|
|
3
|
-
This tool will ask the user if they want to switch to build agent to start implementing the plan.
|
|
4
|
-
|
|
5
|
-
Call this tool:
|
|
6
|
-
- After you have written a complete plan to the plan file
|
|
7
|
-
- After you have clarified any questions with the user
|
|
8
|
-
- When you are confident the plan is ready for implementation
|
|
9
|
-
|
|
10
|
-
Do NOT call this tool:
|
|
11
|
-
- Before you have created or finalized the plan
|
|
12
|
-
- If you still have unanswered questions about the implementation
|
|
13
|
-
- If the user has indicated they want to continue planning
|
|
1
|
+
Use this tool when you have completed the planning phase and are ready to exit plan agent.
|
|
2
|
+
|
|
3
|
+
This tool will ask the user if they want to switch to build agent to start implementing the plan.
|
|
4
|
+
|
|
5
|
+
Call this tool:
|
|
6
|
+
- After you have written a complete plan to the plan file
|
|
7
|
+
- After you have clarified any questions with the user
|
|
8
|
+
- When you are confident the plan is ready for implementation
|
|
9
|
+
|
|
10
|
+
Do NOT call this tool:
|
|
11
|
+
- Before you have created or finalized the plan
|
|
12
|
+
- If you still have unanswered questions about the implementation
|
|
13
|
+
- If the user has indicated they want to continue planning
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import path from "path"
|
|
2
|
-
import { Effect, Schema } from "effect"
|
|
3
|
-
import * as Tool from "./tool"
|
|
4
|
-
import { Question } from "../question"
|
|
5
|
-
import { Session } from "@/session/session"
|
|
6
|
-
import { MessageV2 } from "../session/message-v2"
|
|
7
|
-
import { Provider } from "@/provider/provider"
|
|
8
|
-
import { InstanceState } from "@/effect/instance-state"
|
|
9
|
-
import { MessageID, PartID } from "../session/schema"
|
|
10
|
-
import EXIT_DESCRIPTION from "./plan-exit.txt"
|
|
11
|
-
|
|
12
|
-
export const Parameters = Schema.Struct({})
|
|
13
|
-
|
|
14
|
-
export const PlanExitTool = Tool.define(
|
|
15
|
-
"plan_exit",
|
|
16
|
-
Effect.gen(function* () {
|
|
17
|
-
const session = yield* Session.Service
|
|
18
|
-
const question = yield* Question.Service
|
|
19
|
-
const provider = yield* Provider.Service
|
|
20
|
-
|
|
21
|
-
return {
|
|
22
|
-
description: EXIT_DESCRIPTION,
|
|
23
|
-
parameters: Parameters,
|
|
24
|
-
execute: (_params: {}, ctx: Tool.Context) =>
|
|
25
|
-
Effect.gen(function* () {
|
|
26
|
-
const instance = yield* InstanceState.context
|
|
27
|
-
const info = yield* session.get(ctx.sessionID)
|
|
28
|
-
const plan = path.relative(instance.worktree, Session.plan(info, instance))
|
|
29
|
-
const answers = yield* question.ask({
|
|
30
|
-
sessionID: ctx.sessionID,
|
|
31
|
-
questions: [
|
|
32
|
-
{
|
|
33
|
-
question: `Plan at ${plan} is complete. Would you like to switch to the build agent and start implementing?`,
|
|
34
|
-
header: "Build Agent",
|
|
35
|
-
custom: false,
|
|
36
|
-
options: [
|
|
37
|
-
{ label: "Yes", description: "Switch to build agent and start implementing the plan" },
|
|
38
|
-
{ label: "No", description: "Stay with plan agent to continue refining the plan" },
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
|
-
],
|
|
42
|
-
tool: ctx.callID ? { messageID: ctx.messageID, callID: ctx.callID } : undefined,
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
if (answers[0]?.[0] === "No") yield* new Question.RejectedError()
|
|
46
|
-
|
|
47
|
-
const messages = yield* session.messages({ sessionID: ctx.sessionID }).pipe(Effect.orDie)
|
|
48
|
-
const lastUser = messages.findLast((item) => item.info.role === "user" && item.info.model)
|
|
49
|
-
const model =
|
|
50
|
-
lastUser?.info.role === "user" && lastUser.info.model ? lastUser.info.model : yield* provider.defaultModel()
|
|
51
|
-
|
|
52
|
-
const msg: MessageV2.User = {
|
|
53
|
-
id: MessageID.ascending(),
|
|
54
|
-
sessionID: ctx.sessionID,
|
|
55
|
-
role: "user",
|
|
56
|
-
time: { created: Date.now() },
|
|
57
|
-
agent: "build",
|
|
58
|
-
model,
|
|
59
|
-
}
|
|
60
|
-
yield* session.updateMessage(msg)
|
|
61
|
-
yield* session.updatePart({
|
|
62
|
-
id: PartID.ascending(),
|
|
63
|
-
messageID: msg.id,
|
|
64
|
-
sessionID: ctx.sessionID,
|
|
65
|
-
type: "text",
|
|
66
|
-
text: `The plan at ${plan} has been approved, you can now edit files. Execute the plan`,
|
|
67
|
-
synthetic: true,
|
|
68
|
-
} satisfies MessageV2.TextPart)
|
|
69
|
-
|
|
70
|
-
return {
|
|
71
|
-
title: "Switching to build agent",
|
|
72
|
-
output: "User approved switching to build agent. Wait for further instructions.",
|
|
73
|
-
metadata: {},
|
|
74
|
-
}
|
|
75
|
-
}).pipe(Effect.orDie),
|
|
76
|
-
}
|
|
77
|
-
}),
|
|
78
|
-
)
|
|
1
|
+
import path from "path"
|
|
2
|
+
import { Effect, Schema } from "effect"
|
|
3
|
+
import * as Tool from "./tool"
|
|
4
|
+
import { Question } from "../question"
|
|
5
|
+
import { Session } from "@/session/session"
|
|
6
|
+
import { MessageV2 } from "../session/message-v2"
|
|
7
|
+
import { Provider } from "@/provider/provider"
|
|
8
|
+
import { InstanceState } from "@/effect/instance-state"
|
|
9
|
+
import { MessageID, PartID } from "../session/schema"
|
|
10
|
+
import EXIT_DESCRIPTION from "./plan-exit.txt"
|
|
11
|
+
|
|
12
|
+
export const Parameters = Schema.Struct({})
|
|
13
|
+
|
|
14
|
+
export const PlanExitTool = Tool.define(
|
|
15
|
+
"plan_exit",
|
|
16
|
+
Effect.gen(function* () {
|
|
17
|
+
const session = yield* Session.Service
|
|
18
|
+
const question = yield* Question.Service
|
|
19
|
+
const provider = yield* Provider.Service
|
|
20
|
+
|
|
21
|
+
return {
|
|
22
|
+
description: EXIT_DESCRIPTION,
|
|
23
|
+
parameters: Parameters,
|
|
24
|
+
execute: (_params: {}, ctx: Tool.Context) =>
|
|
25
|
+
Effect.gen(function* () {
|
|
26
|
+
const instance = yield* InstanceState.context
|
|
27
|
+
const info = yield* session.get(ctx.sessionID)
|
|
28
|
+
const plan = path.relative(instance.worktree, Session.plan(info, instance))
|
|
29
|
+
const answers = yield* question.ask({
|
|
30
|
+
sessionID: ctx.sessionID,
|
|
31
|
+
questions: [
|
|
32
|
+
{
|
|
33
|
+
question: `Plan at ${plan} is complete. Would you like to switch to the build agent and start implementing?`,
|
|
34
|
+
header: "Build Agent",
|
|
35
|
+
custom: false,
|
|
36
|
+
options: [
|
|
37
|
+
{ label: "Yes", description: "Switch to build agent and start implementing the plan" },
|
|
38
|
+
{ label: "No", description: "Stay with plan agent to continue refining the plan" },
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
tool: ctx.callID ? { messageID: ctx.messageID, callID: ctx.callID } : undefined,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
if (answers[0]?.[0] === "No") yield* new Question.RejectedError()
|
|
46
|
+
|
|
47
|
+
const messages = yield* session.messages({ sessionID: ctx.sessionID }).pipe(Effect.orDie)
|
|
48
|
+
const lastUser = messages.findLast((item) => item.info.role === "user" && item.info.model)
|
|
49
|
+
const model =
|
|
50
|
+
lastUser?.info.role === "user" && lastUser.info.model ? lastUser.info.model : yield* provider.defaultModel()
|
|
51
|
+
|
|
52
|
+
const msg: MessageV2.User = {
|
|
53
|
+
id: MessageID.ascending(),
|
|
54
|
+
sessionID: ctx.sessionID,
|
|
55
|
+
role: "user",
|
|
56
|
+
time: { created: Date.now() },
|
|
57
|
+
agent: "build",
|
|
58
|
+
model,
|
|
59
|
+
}
|
|
60
|
+
yield* session.updateMessage(msg)
|
|
61
|
+
yield* session.updatePart({
|
|
62
|
+
id: PartID.ascending(),
|
|
63
|
+
messageID: msg.id,
|
|
64
|
+
sessionID: ctx.sessionID,
|
|
65
|
+
type: "text",
|
|
66
|
+
text: `The plan at ${plan} has been approved, you can now edit files. Execute the plan`,
|
|
67
|
+
synthetic: true,
|
|
68
|
+
} satisfies MessageV2.TextPart)
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
title: "Switching to build agent",
|
|
72
|
+
output: "User approved switching to build agent. Wait for further instructions.",
|
|
73
|
+
metadata: {},
|
|
74
|
+
}
|
|
75
|
+
}).pipe(Effect.orDie),
|
|
76
|
+
}
|
|
77
|
+
}),
|
|
78
|
+
)
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { Effect, Schema } from "effect"
|
|
2
|
-
import * as Tool from "./tool"
|
|
3
|
-
import { Question } from "../question"
|
|
4
|
-
import DESCRIPTION from "./question.txt"
|
|
5
|
-
|
|
6
|
-
export const Parameters = Schema.Struct({
|
|
7
|
-
questions: Schema.mutable(Schema.Array(Question.Prompt)).annotate({ description: "Questions to ask" }),
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
type Metadata = {
|
|
11
|
-
answers: ReadonlyArray<Question.Answer>
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export const QuestionTool = Tool.define<typeof Parameters, Metadata, Question.Service>(
|
|
15
|
-
"question",
|
|
16
|
-
Effect.gen(function* () {
|
|
17
|
-
const question = yield* Question.Service
|
|
18
|
-
|
|
19
|
-
return {
|
|
20
|
-
description: DESCRIPTION,
|
|
21
|
-
parameters: Parameters,
|
|
22
|
-
execute: (params: Schema.Schema.Type<typeof Parameters>, ctx: Tool.Context<Metadata>) =>
|
|
23
|
-
Effect.gen(function* () {
|
|
24
|
-
const answers = yield* question.ask({
|
|
25
|
-
sessionID: ctx.sessionID,
|
|
26
|
-
questions: params.questions,
|
|
27
|
-
tool: ctx.callID ? { messageID: ctx.messageID, callID: ctx.callID } : undefined,
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
const formatted = params.questions
|
|
31
|
-
.map((q, i) => `"${q.question}"="${answers[i]?.length ? answers[i].join(", ") : "Unanswered"}"`)
|
|
32
|
-
.join(", ")
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
title: `Asked ${params.questions.length} question${params.questions.length > 1 ? "s" : ""}`,
|
|
36
|
-
output: `User has answered your questions: ${formatted}. You can now continue with the user's answers in mind.`,
|
|
37
|
-
metadata: {
|
|
38
|
-
answers,
|
|
39
|
-
},
|
|
40
|
-
}
|
|
41
|
-
}).pipe(Effect.orDie),
|
|
42
|
-
}
|
|
43
|
-
}),
|
|
44
|
-
)
|
|
1
|
+
import { Effect, Schema } from "effect"
|
|
2
|
+
import * as Tool from "./tool"
|
|
3
|
+
import { Question } from "../question"
|
|
4
|
+
import DESCRIPTION from "./question.txt"
|
|
5
|
+
|
|
6
|
+
export const Parameters = Schema.Struct({
|
|
7
|
+
questions: Schema.mutable(Schema.Array(Question.Prompt)).annotate({ description: "Questions to ask" }),
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
type Metadata = {
|
|
11
|
+
answers: ReadonlyArray<Question.Answer>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const QuestionTool = Tool.define<typeof Parameters, Metadata, Question.Service>(
|
|
15
|
+
"question",
|
|
16
|
+
Effect.gen(function* () {
|
|
17
|
+
const question = yield* Question.Service
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
description: DESCRIPTION,
|
|
21
|
+
parameters: Parameters,
|
|
22
|
+
execute: (params: Schema.Schema.Type<typeof Parameters>, ctx: Tool.Context<Metadata>) =>
|
|
23
|
+
Effect.gen(function* () {
|
|
24
|
+
const answers = yield* question.ask({
|
|
25
|
+
sessionID: ctx.sessionID,
|
|
26
|
+
questions: params.questions,
|
|
27
|
+
tool: ctx.callID ? { messageID: ctx.messageID, callID: ctx.callID } : undefined,
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
const formatted = params.questions
|
|
31
|
+
.map((q, i) => `"${q.question}"="${answers[i]?.length ? answers[i].join(", ") : "Unanswered"}"`)
|
|
32
|
+
.join(", ")
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
title: `Asked ${params.questions.length} question${params.questions.length > 1 ? "s" : ""}`,
|
|
36
|
+
output: `User has answered your questions: ${formatted}. You can now continue with the user's answers in mind.`,
|
|
37
|
+
metadata: {
|
|
38
|
+
answers,
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
}).pipe(Effect.orDie),
|
|
42
|
+
}
|
|
43
|
+
}),
|
|
44
|
+
)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
Use this tool when you need to ask the user questions during execution. This allows you to:
|
|
2
|
-
1. Gather user preferences or requirements
|
|
3
|
-
2. Clarify ambiguous instructions
|
|
4
|
-
3. Get decisions on implementation choices as you work
|
|
5
|
-
4. Offer choices to the user about what direction to take.
|
|
6
|
-
|
|
7
|
-
Usage notes:
|
|
8
|
-
- When `custom` is enabled (default), a "Type your own answer" option is added automatically; don't include "Other" or catch-all options
|
|
9
|
-
- Answers are returned as arrays of labels; set `multiple: true` to allow selecting more than one
|
|
10
|
-
- If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label
|
|
1
|
+
Use this tool when you need to ask the user questions during execution. This allows you to:
|
|
2
|
+
1. Gather user preferences or requirements
|
|
3
|
+
2. Clarify ambiguous instructions
|
|
4
|
+
3. Get decisions on implementation choices as you work
|
|
5
|
+
4. Offer choices to the user about what direction to take.
|
|
6
|
+
|
|
7
|
+
Usage notes:
|
|
8
|
+
- When `custom` is enabled (default), a "Type your own answer" option is added automatically; don't include "Other" or catch-all options
|
|
9
|
+
- Answers are returned as arrays of labels; set `multiple: true` to allow selecting more than one
|
|
10
|
+
- If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label
|