bonecode 1.0.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/ARCHITECTURE.md +183 -0
- package/README.md +71 -0
- package/bin/bonecode +62 -0
- package/bone/migrations/rag_vectors.sql +258 -0
- package/bone/output/agent/.dockerignore +7 -0
- package/bone/output/agent/.env.example +36 -0
- package/bone/output/agent/.github/workflows/ci.yaml +58 -0
- package/bone/output/agent/AgentDomain.bone.map +350 -0
- package/bone/output/agent/AgentDomain.postman_collection.json +958 -0
- package/bone/output/agent/Dockerfile +22 -0
- package/bone/output/agent/README.md +47 -0
- package/bone/output/agent/admin/index.html +740 -0
- package/bone/output/agent/docker-compose.yaml +22 -0
- package/bone/output/agent/k8s/deployment.yaml +75 -0
- package/bone/output/agent/migrations/agent.sql +36 -0
- package/bone/output/agent/migrations/agent_instance.sql +36 -0
- package/bone/output/agent/migrations/audit_log.sql +18 -0
- package/bone/output/agent/migrations/build_step.sql +34 -0
- package/bone/output/agent/migrations/event_outbox.sql +31 -0
- package/bone/output/agent/migrations/plan.sql +30 -0
- package/bone/output/agent/migrations/task.sql +30 -0
- package/bone/output/agent/migrations/tool_call.sql +33 -0
- package/bone/output/agent/openapi.yaml +1116 -0
- package/bone/output/agent/package.json +36 -0
- package/bone/output/agent/schema.graphql +233 -0
- package/bone/output/agent/sdk/client.ts +231 -0
- package/bone/output/agent/src/algorithms.ts +2 -0
- package/bone/output/agent/src/audit.ts +44 -0
- package/bone/output/agent/src/auth.ts +57 -0
- package/bone/output/agent/src/cron.ts +12 -0
- package/bone/output/agent/src/db.ts +32 -0
- package/bone/output/agent/src/debug.ts +66 -0
- package/bone/output/agent/src/events.ts +243 -0
- package/bone/output/agent/src/extensions.ts +54 -0
- package/bone/output/agent/src/failure_rules.ts +323 -0
- package/bone/output/agent/src/flows.ts +168 -0
- package/bone/output/agent/src/health.ts +43 -0
- package/bone/output/agent/src/index.ts +100 -0
- package/bone/output/agent/src/logger.ts +66 -0
- package/bone/output/agent/src/metrics.ts +75 -0
- package/bone/output/agent/src/migrate.ts +352 -0
- package/bone/output/agent/src/migration_diff.ts +108 -0
- package/bone/output/agent/src/notify.ts +125 -0
- package/bone/output/agent/src/routes/agent_instance.ts +234 -0
- package/bone/output/agent/src/routes/build_step.ts +105 -0
- package/bone/output/agent/src/routes/plan.ts +91 -0
- package/bone/output/agent/src/routes/task.ts +105 -0
- package/bone/output/agent/src/routes/tool_call.ts +166 -0
- package/bone/output/agent/src/schemas.ts +384 -0
- package/bone/output/agent/src/state_machines/agent_instance.ts +24 -0
- package/bone/output/agent/src/state_machines/build_step.ts +22 -0
- package/bone/output/agent/src/state_machines/plan.ts +22 -0
- package/bone/output/agent/src/state_machines/task.ts +22 -0
- package/bone/output/agent/src/state_machines/tool_call.ts +22 -0
- package/bone/output/agent/src/tests.ts +362 -0
- package/bone/output/agent/src/websocket.ts +201 -0
- package/bone/output/agent/tsconfig.json +25 -0
- package/bone/output/rag/.dockerignore +7 -0
- package/bone/output/rag/.env.example +36 -0
- package/bone/output/rag/.github/workflows/ci.yaml +58 -0
- package/bone/output/rag/Dockerfile +22 -0
- package/bone/output/rag/RAGDomain.bone.map +287 -0
- package/bone/output/rag/RAGDomain.postman_collection.json +923 -0
- package/bone/output/rag/README.md +47 -0
- package/bone/output/rag/admin/index.html +818 -0
- package/bone/output/rag/docker-compose.yaml +22 -0
- package/bone/output/rag/k8s/deployment.yaml +75 -0
- package/bone/output/rag/migrations/audit_log.sql +18 -0
- package/bone/output/rag/migrations/code_chunk.sql +34 -0
- package/bone/output/rag/migrations/code_file.sql +33 -0
- package/bone/output/rag/migrations/event_outbox.sql +31 -0
- package/bone/output/rag/migrations/indexing_job.sql +33 -0
- package/bone/output/rag/migrations/knowledge_base.sql +35 -0
- package/bone/output/rag/migrations/memory_entry.sql +34 -0
- package/bone/output/rag/openapi.yaml +1097 -0
- package/bone/output/rag/package.json +36 -0
- package/bone/output/rag/schema.graphql +245 -0
- package/bone/output/rag/sdk/client.ts +234 -0
- package/bone/output/rag/src/algorithms.ts +2 -0
- package/bone/output/rag/src/audit.ts +37 -0
- package/bone/output/rag/src/auth.ts +57 -0
- package/bone/output/rag/src/cron.ts +12 -0
- package/bone/output/rag/src/db.ts +32 -0
- package/bone/output/rag/src/debug.ts +66 -0
- package/bone/output/rag/src/events.ts +243 -0
- package/bone/output/rag/src/extensions.ts +350 -0
- package/bone/output/rag/src/failure_rules.ts +315 -0
- package/bone/output/rag/src/flows.ts +239 -0
- package/bone/output/rag/src/health.ts +43 -0
- package/bone/output/rag/src/index.ts +95 -0
- package/bone/output/rag/src/logger.ts +66 -0
- package/bone/output/rag/src/metrics.ts +75 -0
- package/bone/output/rag/src/migrate.ts +364 -0
- package/bone/output/rag/src/migration_diff.ts +108 -0
- package/bone/output/rag/src/notify.ts +99 -0
- package/bone/output/rag/src/routes/code_chunk.ts +75 -0
- package/bone/output/rag/src/routes/code_file.ts +101 -0
- package/bone/output/rag/src/routes/indexing_job.ts +87 -0
- package/bone/output/rag/src/routes/knowledge_base.ts +230 -0
- package/bone/output/rag/src/routes/memory_entry.ts +87 -0
- package/bone/output/rag/src/schemas.ts +394 -0
- package/bone/output/rag/src/state_machines/code_file.ts +23 -0
- package/bone/output/rag/src/state_machines/indexing_job.ts +22 -0
- package/bone/output/rag/src/state_machines/knowledge_base.ts +23 -0
- package/bone/output/rag/src/state_machines/memory_entry.ts +20 -0
- package/bone/output/rag/src/tests.ts +340 -0
- package/bone/output/rag/tsconfig.json +25 -0
- package/bone/output/session/.dockerignore +7 -0
- package/bone/output/session/.env.example +36 -0
- package/bone/output/session/.github/workflows/ci.yaml +58 -0
- package/bone/output/session/Dockerfile +22 -0
- package/bone/output/session/README.md +47 -0
- package/bone/output/session/SessionDomain.bone.map +350 -0
- package/bone/output/session/SessionDomain.postman_collection.json +958 -0
- package/bone/output/session/admin/index.html +667 -0
- package/bone/output/session/docker-compose.yaml +22 -0
- package/bone/output/session/k8s/deployment.yaml +75 -0
- package/bone/output/session/migrations/audit_log.sql +18 -0
- package/bone/output/session/migrations/event_outbox.sql +31 -0
- package/bone/output/session/migrations/message.sql +31 -0
- package/bone/output/session/migrations/part.sql +28 -0
- package/bone/output/session/migrations/permission.sql +28 -0
- package/bone/output/session/migrations/project.sql +28 -0
- package/bone/output/session/migrations/session.sql +38 -0
- package/bone/output/session/openapi.yaml +1101 -0
- package/bone/output/session/package.json +36 -0
- package/bone/output/session/schema.graphql +222 -0
- package/bone/output/session/sdk/client.ts +225 -0
- package/bone/output/session/src/algorithms.ts +2 -0
- package/bone/output/session/src/audit.ts +44 -0
- package/bone/output/session/src/auth.ts +57 -0
- package/bone/output/session/src/cron.ts +12 -0
- package/bone/output/session/src/db.ts +32 -0
- package/bone/output/session/src/debug.ts +66 -0
- package/bone/output/session/src/events.ts +270 -0
- package/bone/output/session/src/extensions.ts +215 -0
- package/bone/output/session/src/failure_rules.ts +284 -0
- package/bone/output/session/src/flows.ts +168 -0
- package/bone/output/session/src/health.ts +43 -0
- package/bone/output/session/src/index.ts +100 -0
- package/bone/output/session/src/logger.ts +66 -0
- package/bone/output/session/src/metrics.ts +75 -0
- package/bone/output/session/src/migrate.ts +332 -0
- package/bone/output/session/src/migration_diff.ts +108 -0
- package/bone/output/session/src/notify.ts +112 -0
- package/bone/output/session/src/routes/message.ts +93 -0
- package/bone/output/session/src/routes/part.ts +79 -0
- package/bone/output/session/src/routes/permission.ts +79 -0
- package/bone/output/session/src/routes/project.ts +79 -0
- package/bone/output/session/src/routes/session.ts +294 -0
- package/bone/output/session/src/schemas.ts +357 -0
- package/bone/output/session/src/state_machines/session.ts +23 -0
- package/bone/output/session/src/tests.ts +326 -0
- package/bone/output/session/src/websocket.ts +201 -0
- package/bone/output/session/tsconfig.json +25 -0
- package/bone/output/workspace/.dockerignore +7 -0
- package/bone/output/workspace/.env.example +36 -0
- package/bone/output/workspace/.github/workflows/ci.yaml +58 -0
- package/bone/output/workspace/Dockerfile +22 -0
- package/bone/output/workspace/README.md +45 -0
- package/bone/output/workspace/WorkspaceDomain.bone.map +189 -0
- package/bone/output/workspace/WorkspaceDomain.postman_collection.json +621 -0
- package/bone/output/workspace/admin/index.html +485 -0
- package/bone/output/workspace/docker-compose.yaml +22 -0
- package/bone/output/workspace/k8s/deployment.yaml +75 -0
- package/bone/output/workspace/migrations/audit_log.sql +18 -0
- package/bone/output/workspace/migrations/codebase.sql +34 -0
- package/bone/output/workspace/migrations/event_outbox.sql +31 -0
- package/bone/output/workspace/migrations/snapshot.sql +32 -0
- package/bone/output/workspace/migrations/workspace.sql +33 -0
- package/bone/output/workspace/openapi.yaml +721 -0
- package/bone/output/workspace/package.json +36 -0
- package/bone/output/workspace/schema.graphql +153 -0
- package/bone/output/workspace/sdk/client.ts +155 -0
- package/bone/output/workspace/src/algorithms.ts +2 -0
- package/bone/output/workspace/src/audit.ts +37 -0
- package/bone/output/workspace/src/auth.ts +57 -0
- package/bone/output/workspace/src/cron.ts +12 -0
- package/bone/output/workspace/src/db.ts +32 -0
- package/bone/output/workspace/src/debug.ts +66 -0
- package/bone/output/workspace/src/events.ts +243 -0
- package/bone/output/workspace/src/extensions.ts +44 -0
- package/bone/output/workspace/src/failure_rules.ts +153 -0
- package/bone/output/workspace/src/health.ts +43 -0
- package/bone/output/workspace/src/index.ts +89 -0
- package/bone/output/workspace/src/logger.ts +66 -0
- package/bone/output/workspace/src/metrics.ts +75 -0
- package/bone/output/workspace/src/migrate.ts +220 -0
- package/bone/output/workspace/src/migration_diff.ts +108 -0
- package/bone/output/workspace/src/notify.ts +73 -0
- package/bone/output/workspace/src/routes/codebase.ts +87 -0
- package/bone/output/workspace/src/routes/snapshot.ts +127 -0
- package/bone/output/workspace/src/routes/workspace.ts +190 -0
- package/bone/output/workspace/src/schemas.ts +231 -0
- package/bone/output/workspace/src/state_machines/codebase.ts +21 -0
- package/bone/output/workspace/src/state_machines/snapshot.ts +20 -0
- package/bone/output/workspace/src/state_machines/workspace.ts +21 -0
- package/bone/output/workspace/src/tests.ts +249 -0
- package/bone/output/workspace/tsconfig.json +25 -0
- package/compat/opencode_adapter.ts +410 -0
- package/package.json +69 -0
- package/scripts/check_benchmark_session.js +34 -0
- package/scripts/check_finish_event.js +24 -0
- package/scripts/check_parts.js +15 -0
- package/scripts/compile.js +79 -0
- package/scripts/copy_opencode.ps1 +53 -0
- package/scripts/create_functions.sql +129 -0
- package/scripts/migrate.js +85 -0
- package/scripts/migrate_from_opencode.ts +218 -0
- package/scripts/test_agent_loop.js +101 -0
- package/scripts/test_api.ps1 +116 -0
- package/scripts/test_context_builder.js +136 -0
- package/scripts/test_context_builder.ts +97 -0
- package/scripts/test_rag.js +189 -0
- package/scripts/test_stream_events.js +36 -0
- package/scripts/test_websocket_and_saga.js +216 -0
- package/src/cli.ts +475 -0
- package/src/config.ts +162 -0
- package/src/context_builder.ts +598 -0
- package/src/engine/account/account.sql.ts +39 -0
- package/src/engine/account/account.ts +456 -0
- package/src/engine/account/repo.ts +166 -0
- package/src/engine/account/schema.ts +99 -0
- package/src/engine/account/url.ts +8 -0
- package/src/engine/acp/README.md +174 -0
- package/src/engine/acp/agent.ts +1968 -0
- package/src/engine/acp/runtime.ts +22 -0
- package/src/engine/acp/session.ts +122 -0
- package/src/engine/acp/types.ts +24 -0
- package/src/engine/agent/agent.ts +463 -0
- package/src/engine/agent/generate.txt +75 -0
- package/src/engine/agent/prompt/compaction.txt +9 -0
- package/src/engine/agent/prompt/explore.txt +18 -0
- package/src/engine/agent/prompt/scout.txt +36 -0
- package/src/engine/agent/prompt/summary.txt +11 -0
- package/src/engine/agent/prompt/title.txt +44 -0
- package/src/engine/agent/subagent-permissions.ts +34 -0
- package/src/engine/auth/index.ts +96 -0
- package/src/engine/background/background/job.ts +200 -0
- package/src/engine/background/job.ts +200 -0
- package/src/engine/bus/bus-event.ts +45 -0
- package/src/engine/bus/global.ts +22 -0
- package/src/engine/bus/index.ts +203 -0
- package/src/engine/command/command/index.ts +181 -0
- package/src/engine/command/command/template/initialize.txt +66 -0
- package/src/engine/command/command/template/review.txt +101 -0
- package/src/engine/command/index.ts +181 -0
- package/src/engine/command/template/initialize.txt +66 -0
- package/src/engine/command/template/review.txt +101 -0
- package/src/engine/config/agent.ts +172 -0
- package/src/engine/config/attachment.ts +25 -0
- package/src/engine/config/command.ts +62 -0
- package/src/engine/config/config.ts +833 -0
- package/src/engine/config/console-state.ts +14 -0
- package/src/engine/config/entry-name.ts +16 -0
- package/src/engine/config/error.ts +23 -0
- package/src/engine/config/formatter.ts +13 -0
- package/src/engine/config/layout.ts +6 -0
- package/src/engine/config/lsp.ts +43 -0
- package/src/engine/config/managed.ts +71 -0
- package/src/engine/config/markdown.ts +96 -0
- package/src/engine/config/mcp.ts +56 -0
- package/src/engine/config/model-id.ts +5 -0
- package/src/engine/config/parse.ts +79 -0
- package/src/engine/config/paths.ts +45 -0
- package/src/engine/config/permission.ts +58 -0
- package/src/engine/config/plugin.ts +84 -0
- package/src/engine/config/provider.ts +111 -0
- package/src/engine/config/reference.ts +23 -0
- package/src/engine/config/server.ts +19 -0
- package/src/engine/config/skills.ts +14 -0
- package/src/engine/config/variable.ts +90 -0
- package/src/engine/control-plane/adapters/index.ts +41 -0
- package/src/engine/control-plane/adapters/worktree.ts +96 -0
- package/src/engine/control-plane/dev/README.md +19 -0
- package/src/engine/control-plane/dev/debug-workspace-plugin.ts +73 -0
- package/src/engine/control-plane/schema.ts +14 -0
- package/src/engine/control-plane/types.ts +59 -0
- package/src/engine/control-plane/util.ts +39 -0
- package/src/engine/control-plane/workspace-adapter-runtime.ts +51 -0
- package/src/engine/control-plane/workspace-context.ts +26 -0
- package/src/engine/control-plane/workspace.sql.ts +20 -0
- package/src/engine/control-plane/workspace.ts +1072 -0
- package/src/engine/data-migration.ts +161 -0
- package/src/engine/effect/app-runtime.ts +143 -0
- package/src/engine/effect/bootstrap-runtime.ts +29 -0
- package/src/engine/effect/bridge.ts +84 -0
- package/src/engine/effect/config-service.ts +67 -0
- package/src/engine/effect/instance-ref.ts +11 -0
- package/src/engine/effect/instance-registry.ts +12 -0
- package/src/engine/effect/instance-state.ts +72 -0
- package/src/engine/effect/promise.ts +17 -0
- package/src/engine/effect/run-service.ts +47 -0
- package/src/engine/effect/runner.ts +217 -0
- package/src/engine/effect/runtime-flags.ts +74 -0
- package/src/engine/effect/service-use.ts +38 -0
- package/src/engine/env/index.ts +37 -0
- package/src/engine/event-v2-bridge.ts +89 -0
- package/src/engine/file/file/ignore.ts +81 -0
- package/src/engine/file/file/index.ts +651 -0
- package/src/engine/file/file/protected.ts +59 -0
- package/src/engine/file/file/ripgrep.ts +481 -0
- package/src/engine/file/file/watcher.ts +167 -0
- package/src/engine/file/ignore.ts +81 -0
- package/src/engine/file/index.ts +651 -0
- package/src/engine/file/protected.ts +59 -0
- package/src/engine/file/ripgrep.ts +481 -0
- package/src/engine/file/watcher.ts +167 -0
- package/src/engine/format/format/formatter.ts +404 -0
- package/src/engine/format/format/index.ts +209 -0
- package/src/engine/format/formatter.ts +404 -0
- package/src/engine/format/index.ts +209 -0
- package/src/engine/git/git/index.ts +347 -0
- package/src/engine/git/index.ts +347 -0
- package/src/engine/id/id.ts +80 -0
- package/src/engine/ide/index.ts +70 -0
- package/src/engine/image/image/image.ts +176 -0
- package/src/engine/image/image.ts +176 -0
- package/src/engine/index.ts +251 -0
- package/src/engine/installation/index.ts +327 -0
- package/src/engine/lsp/client.ts +707 -0
- package/src/engine/lsp/diagnostic.ts +29 -0
- package/src/engine/lsp/language.ts +121 -0
- package/src/engine/lsp/launch.ts +21 -0
- package/src/engine/lsp/lsp/client.ts +707 -0
- package/src/engine/lsp/lsp/diagnostic.ts +29 -0
- package/src/engine/lsp/lsp/language.ts +121 -0
- package/src/engine/lsp/lsp/launch.ts +21 -0
- package/src/engine/lsp/lsp/lsp.ts +507 -0
- package/src/engine/lsp/lsp/server.ts +2064 -0
- package/src/engine/lsp/lsp.ts +507 -0
- package/src/engine/lsp/server.ts +2064 -0
- package/src/engine/mcp/auth.ts +146 -0
- package/src/engine/mcp/index.ts +958 -0
- package/src/engine/mcp/mcp/auth.ts +146 -0
- package/src/engine/mcp/mcp/index.ts +958 -0
- package/src/engine/mcp/mcp/oauth-callback.ts +232 -0
- package/src/engine/mcp/mcp/oauth-provider.ts +214 -0
- package/src/engine/mcp/oauth-callback.ts +232 -0
- package/src/engine/mcp/oauth-provider.ts +214 -0
- package/src/engine/node.ts +6 -0
- package/src/engine/patch/index.ts +689 -0
- package/src/engine/patch/patch/index.ts +689 -0
- package/src/engine/permission/arity.ts +163 -0
- package/src/engine/permission/evaluate.ts +15 -0
- package/src/engine/permission/index.ts +306 -0
- package/src/engine/permission/permission/arity.ts +163 -0
- package/src/engine/permission/permission/evaluate.ts +15 -0
- package/src/engine/permission/permission/index.ts +306 -0
- package/src/engine/permission/permission/schema.ts +13 -0
- package/src/engine/permission/schema.ts +13 -0
- package/src/engine/plugin/azure.ts +26 -0
- package/src/engine/plugin/cloudflare.ts +76 -0
- package/src/engine/plugin/codex.ts +622 -0
- package/src/engine/plugin/digitalocean.ts +411 -0
- package/src/engine/plugin/github-copilot/copilot.ts +394 -0
- package/src/engine/plugin/github-copilot/models.ts +196 -0
- package/src/engine/plugin/index.ts +295 -0
- package/src/engine/plugin/install.ts +439 -0
- package/src/engine/plugin/loader.ts +216 -0
- package/src/engine/plugin/meta.ts +188 -0
- package/src/engine/plugin/shared.ts +323 -0
- package/src/engine/project/bootstrap-service.ts +9 -0
- package/src/engine/project/bootstrap.ts +75 -0
- package/src/engine/project/instance-context.ts +24 -0
- package/src/engine/project/instance-layer.ts +11 -0
- package/src/engine/project/instance-runtime.ts +16 -0
- package/src/engine/project/instance-store.ts +193 -0
- package/src/engine/project/project.sql.ts +17 -0
- package/src/engine/project/project.ts +537 -0
- package/src/engine/project/schema.ts +13 -0
- package/src/engine/project/vcs.ts +405 -0
- package/src/engine/provider/auth.ts +225 -0
- package/src/engine/provider/error.ts +204 -0
- package/src/engine/provider/model-status.ts +8 -0
- package/src/engine/provider/provider.ts +1843 -0
- package/src/engine/provider/schema.ts +30 -0
- package/src/engine/provider/sdk/copilot/AGENTS.md +1 -0
- package/src/engine/provider/transform.ts +1376 -0
- package/src/engine/pty/index.ts +365 -0
- package/src/engine/pty/input.ts +24 -0
- package/src/engine/pty/pty/index.ts +365 -0
- package/src/engine/pty/pty/input.ts +24 -0
- package/src/engine/pty/pty/pty.bun.ts +26 -0
- package/src/engine/pty/pty/pty.node.ts +27 -0
- package/src/engine/pty/pty/pty.ts +25 -0
- package/src/engine/pty/pty/schema.ts +14 -0
- package/src/engine/pty/pty/ticket.ts +68 -0
- package/src/engine/pty/pty.bun.ts +26 -0
- package/src/engine/pty/pty.node.ts +27 -0
- package/src/engine/pty/pty.ts +25 -0
- package/src/engine/pty/schema.ts +14 -0
- package/src/engine/pty/ticket.ts +68 -0
- package/src/engine/question/index.ts +213 -0
- package/src/engine/question/question/index.ts +213 -0
- package/src/engine/question/question/schema.ts +10 -0
- package/src/engine/question/schema.ts +10 -0
- package/src/engine/reference/reference/reference.ts +241 -0
- package/src/engine/reference/reference/repository-cache.ts +147 -0
- package/src/engine/reference/reference.ts +241 -0
- package/src/engine/reference/repository-cache.ts +147 -0
- package/src/engine/session/compaction.ts +651 -0
- package/src/engine/session/compaction_logic.ts +120 -0
- package/src/engine/session/instruction.ts +238 -0
- package/src/engine/session/instruction_loader.ts +54 -0
- package/src/engine/session/llm.ts +459 -0
- package/src/engine/session/message-error.ts +14 -0
- package/src/engine/session/message-v2.ts +1202 -0
- package/src/engine/session/message.ts +146 -0
- package/src/engine/session/overflow.ts +32 -0
- package/src/engine/session/overflow_check.ts +46 -0
- package/src/engine/session/processor.ts +823 -0
- package/src/engine/session/prompt/anthropic.txt +105 -0
- package/src/engine/session/prompt/beast.txt +147 -0
- package/src/engine/session/prompt/build-switch.txt +5 -0
- package/src/engine/session/prompt/codex.txt +79 -0
- package/src/engine/session/prompt/copilot-gpt-5.txt +143 -0
- package/src/engine/session/prompt/default.txt +105 -0
- package/src/engine/session/prompt/gemini.txt +155 -0
- package/src/engine/session/prompt/gpt.txt +107 -0
- package/src/engine/session/prompt/kimi.txt +95 -0
- package/src/engine/session/prompt/max-steps.txt +16 -0
- package/src/engine/session/prompt/plan-reminder-anthropic.txt +67 -0
- package/src/engine/session/prompt/plan.txt +26 -0
- package/src/engine/session/prompt/trinity.txt +97 -0
- package/src/engine/session/prompt.ts +671 -0
- package/src/engine/session/provider_transform.ts +187 -0
- package/src/engine/session/retry.ts +200 -0
- package/src/engine/session/retry_logic.ts +65 -0
- package/src/engine/session/revert.ts +162 -0
- package/src/engine/session/run-state.ts +153 -0
- package/src/engine/session/schema.ts +26 -0
- package/src/engine/session/session.sql.ts +137 -0
- package/src/engine/session/session.ts +1011 -0
- package/src/engine/session/status.ts +94 -0
- package/src/engine/session/summary.ts +164 -0
- package/src/engine/session/system.ts +84 -0
- package/src/engine/session/system_prompt.ts +65 -0
- package/src/engine/session/todo.ts +81 -0
- package/src/engine/session/tool_registry.ts +162 -0
- package/src/engine/share/session.ts +61 -0
- package/src/engine/share/share-next.ts +376 -0
- package/src/engine/share/share.sql.ts +13 -0
- package/src/engine/shell/shell/shell.ts +215 -0
- package/src/engine/shell/shell.ts +215 -0
- package/src/engine/skill/discovery.ts +116 -0
- package/src/engine/skill/index.ts +336 -0
- package/src/engine/skill/prompt/customize-opencode.md +377 -0
- package/src/engine/skill/skill/discovery.ts +116 -0
- package/src/engine/skill/skill/index.ts +336 -0
- package/src/engine/skill/skill/prompt/customize-opencode.md +377 -0
- package/src/engine/snapshot/index.ts +762 -0
- package/src/engine/snapshot/snapshot/index.ts +762 -0
- package/src/engine/sync/README.md +179 -0
- package/src/engine/sync/event.sql.ts +17 -0
- package/src/engine/sync/index.ts +410 -0
- package/src/engine/sync/schema.ts +11 -0
- package/src/engine/temporary.ts +33 -0
- package/src/engine/tool/apply_patch.ts +313 -0
- package/src/engine/tool/apply_patch.txt +33 -0
- package/src/engine/tool/edit.ts +711 -0
- package/src/engine/tool/edit.txt +10 -0
- package/src/engine/tool/external-directory.ts +49 -0
- package/src/engine/tool/glob.ts +103 -0
- package/src/engine/tool/glob.txt +6 -0
- package/src/engine/tool/grep.ts +156 -0
- package/src/engine/tool/grep.txt +8 -0
- package/src/engine/tool/invalid.ts +21 -0
- package/src/engine/tool/json-schema.ts +164 -0
- package/src/engine/tool/lsp.ts +113 -0
- package/src/engine/tool/lsp.txt +24 -0
- package/src/engine/tool/mcp-websearch.ts +96 -0
- package/src/engine/tool/plan-enter.txt +14 -0
- package/src/engine/tool/plan-exit.txt +13 -0
- package/src/engine/tool/plan.ts +78 -0
- package/src/engine/tool/question.ts +44 -0
- package/src/engine/tool/question.txt +10 -0
- package/src/engine/tool/read.ts +337 -0
- package/src/engine/tool/read.txt +14 -0
- package/src/engine/tool/registry.ts +472 -0
- package/src/engine/tool/repo_clone.ts +80 -0
- package/src/engine/tool/repo_clone.txt +5 -0
- package/src/engine/tool/repo_overview.ts +279 -0
- package/src/engine/tool/repo_overview.txt +4 -0
- package/src/engine/tool/schema.ts +14 -0
- package/src/engine/tool/shell/id.ts +19 -0
- package/src/engine/tool/shell/prompt.ts +295 -0
- package/src/engine/tool/shell/shell.txt +77 -0
- package/src/engine/tool/shell.ts +647 -0
- package/src/engine/tool/skill.ts +75 -0
- package/src/engine/tool/skill.txt +5 -0
- package/src/engine/tool/task.ts +337 -0
- package/src/engine/tool/task.txt +58 -0
- package/src/engine/tool/task_status.ts +179 -0
- package/src/engine/tool/task_status.txt +13 -0
- package/src/engine/tool/todo.ts +57 -0
- package/src/engine/tool/todowrite.txt +167 -0
- package/src/engine/tool/tool/apply_patch.ts +313 -0
- package/src/engine/tool/tool/apply_patch.txt +33 -0
- package/src/engine/tool/tool/edit.ts +711 -0
- package/src/engine/tool/tool/edit.txt +10 -0
- package/src/engine/tool/tool/external-directory.ts +49 -0
- package/src/engine/tool/tool/glob.ts +103 -0
- package/src/engine/tool/tool/glob.txt +6 -0
- package/src/engine/tool/tool/grep.ts +156 -0
- package/src/engine/tool/tool/grep.txt +8 -0
- package/src/engine/tool/tool/invalid.ts +21 -0
- package/src/engine/tool/tool/json-schema.ts +164 -0
- package/src/engine/tool/tool/lsp.ts +113 -0
- package/src/engine/tool/tool/lsp.txt +24 -0
- package/src/engine/tool/tool/mcp-websearch.ts +96 -0
- package/src/engine/tool/tool/plan-enter.txt +14 -0
- package/src/engine/tool/tool/plan-exit.txt +13 -0
- package/src/engine/tool/tool/plan.ts +78 -0
- package/src/engine/tool/tool/question.ts +44 -0
- package/src/engine/tool/tool/question.txt +10 -0
- package/src/engine/tool/tool/read.ts +337 -0
- package/src/engine/tool/tool/read.txt +14 -0
- package/src/engine/tool/tool/registry.ts +472 -0
- package/src/engine/tool/tool/repo_clone.ts +80 -0
- package/src/engine/tool/tool/repo_clone.txt +5 -0
- package/src/engine/tool/tool/repo_overview.ts +279 -0
- package/src/engine/tool/tool/repo_overview.txt +4 -0
- package/src/engine/tool/tool/schema.ts +14 -0
- package/src/engine/tool/tool/shell/id.ts +19 -0
- package/src/engine/tool/tool/shell/prompt.ts +295 -0
- package/src/engine/tool/tool/shell/shell.txt +77 -0
- package/src/engine/tool/tool/shell.ts +647 -0
- package/src/engine/tool/tool/skill.ts +75 -0
- package/src/engine/tool/tool/skill.txt +5 -0
- package/src/engine/tool/tool/task.ts +337 -0
- package/src/engine/tool/tool/task.txt +58 -0
- package/src/engine/tool/tool/task_status.ts +179 -0
- package/src/engine/tool/tool/task_status.txt +13 -0
- package/src/engine/tool/tool/todo.ts +57 -0
- package/src/engine/tool/tool/todowrite.txt +167 -0
- package/src/engine/tool/tool/tool.ts +164 -0
- package/src/engine/tool/tool/truncate.ts +160 -0
- package/src/engine/tool/tool/truncation-dir.ts +4 -0
- package/src/engine/tool/tool/webfetch.ts +192 -0
- package/src/engine/tool/tool/webfetch.txt +13 -0
- package/src/engine/tool/tool/websearch.ts +143 -0
- package/src/engine/tool/tool/websearch.txt +14 -0
- package/src/engine/tool/tool/write.ts +104 -0
- package/src/engine/tool/tool/write.txt +8 -0
- package/src/engine/tool/tool.ts +164 -0
- package/src/engine/tool/truncate.ts +160 -0
- package/src/engine/tool/truncation-dir.ts +4 -0
- package/src/engine/tool/webfetch.ts +192 -0
- package/src/engine/tool/webfetch.txt +13 -0
- package/src/engine/tool/websearch.ts +143 -0
- package/src/engine/tool/websearch.txt +14 -0
- package/src/engine/tool/write.ts +104 -0
- package/src/engine/tool/write.txt +8 -0
- package/src/engine/util/archive.ts +17 -0
- package/src/engine/util/bom.ts +31 -0
- package/src/engine/util/data-url.ts +9 -0
- package/src/engine/util/defer.ts +10 -0
- package/src/engine/util/effect-http-client.ts +11 -0
- package/src/engine/util/error.ts +88 -0
- package/src/engine/util/filesystem.ts +252 -0
- package/src/engine/util/format.ts +20 -0
- package/src/engine/util/iife.ts +3 -0
- package/src/engine/util/lazy.ts +20 -0
- package/src/engine/util/local-context.ts +25 -0
- package/src/engine/util/locale.ts +86 -0
- package/src/engine/util/media.ts +26 -0
- package/src/engine/util/process.ts +176 -0
- package/src/engine/util/queue.ts +32 -0
- package/src/engine/util/record.ts +3 -0
- package/src/engine/util/repository.ts +158 -0
- package/src/engine/util/rpc.ts +66 -0
- package/src/engine/util/signal.ts +12 -0
- package/src/engine/util/timeout.ts +13 -0
- package/src/engine/util/token.ts +7 -0
- package/src/engine/util/util/archive.ts +17 -0
- package/src/engine/util/util/bom.ts +31 -0
- package/src/engine/util/util/data-url.ts +9 -0
- package/src/engine/util/util/defer.ts +10 -0
- package/src/engine/util/util/effect-http-client.ts +11 -0
- package/src/engine/util/util/error.ts +88 -0
- package/src/engine/util/util/filesystem.ts +252 -0
- package/src/engine/util/util/format.ts +20 -0
- package/src/engine/util/util/iife.ts +3 -0
- package/src/engine/util/util/lazy.ts +20 -0
- package/src/engine/util/util/local-context.ts +25 -0
- package/src/engine/util/util/locale.ts +86 -0
- package/src/engine/util/util/media.ts +26 -0
- package/src/engine/util/util/process.ts +176 -0
- package/src/engine/util/util/queue.ts +32 -0
- package/src/engine/util/util/record.ts +3 -0
- package/src/engine/util/util/repository.ts +158 -0
- package/src/engine/util/util/rpc.ts +66 -0
- package/src/engine/util/util/signal.ts +12 -0
- package/src/engine/util/util/timeout.ts +13 -0
- package/src/engine/util/util/token.ts +7 -0
- package/src/engine/util/util/which.ts +14 -0
- package/src/engine/util/util/wildcard.ts +59 -0
- package/src/engine/util/which.ts +14 -0
- package/src/engine/util/wildcard.ts +59 -0
- package/src/engine/worktree/index.ts +621 -0
- package/src/rag_worker.ts +519 -0
- package/src/server.ts +201 -0
- package/src/tui.ts +637 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Generated by BoneScript compiler. DO NOT EDIT.
|
|
2
|
+
// Implements spec/10 §4 (Telemetry Hooks)
|
|
3
|
+
|
|
4
|
+
interface Counter {
|
|
5
|
+
type: "counter";
|
|
6
|
+
value: number;
|
|
7
|
+
labels: Record<string, string>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface Histogram {
|
|
11
|
+
type: "histogram";
|
|
12
|
+
values: number[];
|
|
13
|
+
labels: Record<string, string>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface Gauge {
|
|
17
|
+
type: "gauge";
|
|
18
|
+
value: number;
|
|
19
|
+
labels: Record<string, string>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
type Metric = Counter | Histogram | Gauge;
|
|
23
|
+
|
|
24
|
+
const metrics: Map<string, Metric> = new Map();
|
|
25
|
+
|
|
26
|
+
function key(name: string, labels: Record<string, string>): string {
|
|
27
|
+
const parts = Object.keys(labels).sort().map(k => `${k}="${labels[k]}"`);
|
|
28
|
+
return parts.length > 0 ? `${name}{${parts.join(",")}}` : name;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function counter(name: string, labels: Record<string, string> = {}): void {
|
|
32
|
+
const k = key(name, labels);
|
|
33
|
+
const existing = metrics.get(k);
|
|
34
|
+
if (existing && existing.type === "counter") {
|
|
35
|
+
existing.value++;
|
|
36
|
+
} else {
|
|
37
|
+
metrics.set(k, { type: "counter", value: 1, labels });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function histogram(name: string, value: number, labels: Record<string, string> = {}): void {
|
|
42
|
+
const k = key(name, labels);
|
|
43
|
+
const existing = metrics.get(k);
|
|
44
|
+
if (existing && existing.type === "histogram") {
|
|
45
|
+
existing.values.push(value);
|
|
46
|
+
} else {
|
|
47
|
+
metrics.set(k, { type: "histogram", values: [value], labels });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function gauge(name: string, value: number, labels: Record<string, string> = {}): void {
|
|
52
|
+
const k = key(name, labels);
|
|
53
|
+
metrics.set(k, { type: "gauge", value, labels });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function dump(): string {
|
|
57
|
+
const lines: string[] = [];
|
|
58
|
+
for (const [k, m] of metrics.entries()) {
|
|
59
|
+
if (m.type === "counter" || m.type === "gauge") {
|
|
60
|
+
lines.push(`${k} ${m.value}`);
|
|
61
|
+
} else {
|
|
62
|
+
const sum = m.values.reduce((a, b) => a + b, 0);
|
|
63
|
+
const count = m.values.length;
|
|
64
|
+
const avg = count > 0 ? sum / count : 0;
|
|
65
|
+
lines.push(`${k}_count ${count}`);
|
|
66
|
+
lines.push(`${k}_sum ${sum}`);
|
|
67
|
+
lines.push(`${k}_avg ${avg.toFixed(2)}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return lines.join("\n");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function reset(): void {
|
|
74
|
+
metrics.clear();
|
|
75
|
+
}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
// Generated by BoneScript compiler. DO NOT EDIT.
|
|
2
|
+
require("dotenv").config();
|
|
3
|
+
import { pool } from "./db";
|
|
4
|
+
|
|
5
|
+
async function migrate() {
|
|
6
|
+
console.log("Running migrations...");
|
|
7
|
+
const client = await pool.connect();
|
|
8
|
+
try {
|
|
9
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
10
|
+
-- Source: 40fdc4c964bb2a50
|
|
11
|
+
-- Module: ProjectStore
|
|
12
|
+
|
|
13
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
14
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
15
|
+
root_commit_hash VARCHAR NOT NULL,
|
|
16
|
+
worktree VARCHAR NOT NULL,
|
|
17
|
+
vcs VARCHAR NOT NULL,
|
|
18
|
+
name VARCHAR NOT NULL,
|
|
19
|
+
sandboxes JSONB NOT NULL,
|
|
20
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
21
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
CREATE OR REPLACE FUNCTION update_projects_updated_at()
|
|
26
|
+
RETURNS TRIGGER AS \$\$
|
|
27
|
+
BEGIN
|
|
28
|
+
NEW.updated_at = NOW();
|
|
29
|
+
RETURN NEW;
|
|
30
|
+
END;
|
|
31
|
+
\$\$ LANGUAGE plpgsql;
|
|
32
|
+
|
|
33
|
+
CREATE TRIGGER trg_projects_updated_at
|
|
34
|
+
BEFORE UPDATE ON projects
|
|
35
|
+
FOR EACH ROW
|
|
36
|
+
EXECUTE FUNCTION update_projects_updated_at();
|
|
37
|
+
`);
|
|
38
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
39
|
+
-- Source: 40fdc4c964bb2a50
|
|
40
|
+
-- Module: SessionStore
|
|
41
|
+
|
|
42
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
43
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
44
|
+
slug VARCHAR NOT NULL,
|
|
45
|
+
project_id UUID NOT NULL,
|
|
46
|
+
workspace_id UUID NOT NULL,
|
|
47
|
+
parent_id UUID NOT NULL,
|
|
48
|
+
directory VARCHAR NOT NULL,
|
|
49
|
+
title VARCHAR NOT NULL,
|
|
50
|
+
version VARCHAR NOT NULL,
|
|
51
|
+
state VARCHAR NOT NULL,
|
|
52
|
+
share_url VARCHAR NOT NULL,
|
|
53
|
+
summary_additions BIGINT NOT NULL,
|
|
54
|
+
summary_deletions BIGINT NOT NULL,
|
|
55
|
+
summary_files BIGINT NOT NULL,
|
|
56
|
+
summary_diffs JSONB NOT NULL,
|
|
57
|
+
revert_data JSONB NOT NULL,
|
|
58
|
+
permission_ruleset JSONB NOT NULL,
|
|
59
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
60
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
CREATE OR REPLACE FUNCTION update_sessions_updated_at()
|
|
65
|
+
RETURNS TRIGGER AS \$\$
|
|
66
|
+
BEGIN
|
|
67
|
+
NEW.updated_at = NOW();
|
|
68
|
+
RETURN NEW;
|
|
69
|
+
END;
|
|
70
|
+
\$\$ LANGUAGE plpgsql;
|
|
71
|
+
|
|
72
|
+
CREATE TRIGGER trg_sessions_updated_at
|
|
73
|
+
BEFORE UPDATE ON sessions
|
|
74
|
+
FOR EACH ROW
|
|
75
|
+
EXECUTE FUNCTION update_sessions_updated_at();
|
|
76
|
+
`);
|
|
77
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
78
|
+
-- Source: 40fdc4c964bb2a50
|
|
79
|
+
-- Module: MessageStore
|
|
80
|
+
|
|
81
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
82
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
83
|
+
session_id UUID NOT NULL,
|
|
84
|
+
role VARCHAR NOT NULL,
|
|
85
|
+
model_id VARCHAR NOT NULL,
|
|
86
|
+
provider_id VARCHAR NOT NULL,
|
|
87
|
+
tokens_input BIGINT NOT NULL,
|
|
88
|
+
tokens_output BIGINT NOT NULL,
|
|
89
|
+
cost_usd DOUBLE PRECISION NOT NULL,
|
|
90
|
+
error JSONB NOT NULL,
|
|
91
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
92
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
CREATE OR REPLACE FUNCTION update_messages_updated_at()
|
|
97
|
+
RETURNS TRIGGER AS \$\$
|
|
98
|
+
BEGIN
|
|
99
|
+
NEW.updated_at = NOW();
|
|
100
|
+
RETURN NEW;
|
|
101
|
+
END;
|
|
102
|
+
\$\$ LANGUAGE plpgsql;
|
|
103
|
+
|
|
104
|
+
CREATE TRIGGER trg_messages_updated_at
|
|
105
|
+
BEFORE UPDATE ON messages
|
|
106
|
+
FOR EACH ROW
|
|
107
|
+
EXECUTE FUNCTION update_messages_updated_at();
|
|
108
|
+
`);
|
|
109
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
110
|
+
-- Source: 40fdc4c964bb2a50
|
|
111
|
+
-- Module: PartStore
|
|
112
|
+
|
|
113
|
+
CREATE TABLE IF NOT EXISTS parts (
|
|
114
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
115
|
+
message_id UUID NOT NULL,
|
|
116
|
+
session_id UUID NOT NULL,
|
|
117
|
+
part_type VARCHAR NOT NULL,
|
|
118
|
+
data JSONB NOT NULL,
|
|
119
|
+
order_index BIGINT NOT NULL,
|
|
120
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
121
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
CREATE OR REPLACE FUNCTION update_parts_updated_at()
|
|
126
|
+
RETURNS TRIGGER AS \$\$
|
|
127
|
+
BEGIN
|
|
128
|
+
NEW.updated_at = NOW();
|
|
129
|
+
RETURN NEW;
|
|
130
|
+
END;
|
|
131
|
+
\$\$ LANGUAGE plpgsql;
|
|
132
|
+
|
|
133
|
+
CREATE TRIGGER trg_parts_updated_at
|
|
134
|
+
BEFORE UPDATE ON parts
|
|
135
|
+
FOR EACH ROW
|
|
136
|
+
EXECUTE FUNCTION update_parts_updated_at();
|
|
137
|
+
`);
|
|
138
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
139
|
+
-- Source: 40fdc4c964bb2a50
|
|
140
|
+
-- Module: PermissionStore
|
|
141
|
+
|
|
142
|
+
CREATE TABLE IF NOT EXISTS permissions (
|
|
143
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
144
|
+
session_id UUID NOT NULL,
|
|
145
|
+
tool_name VARCHAR NOT NULL,
|
|
146
|
+
pattern VARCHAR NOT NULL,
|
|
147
|
+
decision VARCHAR NOT NULL,
|
|
148
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
149
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
150
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
CREATE OR REPLACE FUNCTION update_permissions_updated_at()
|
|
155
|
+
RETURNS TRIGGER AS \$\$
|
|
156
|
+
BEGIN
|
|
157
|
+
NEW.updated_at = NOW();
|
|
158
|
+
RETURN NEW;
|
|
159
|
+
END;
|
|
160
|
+
\$\$ LANGUAGE plpgsql;
|
|
161
|
+
|
|
162
|
+
CREATE TRIGGER trg_permissions_updated_at
|
|
163
|
+
BEFORE UPDATE ON permissions
|
|
164
|
+
FOR EACH ROW
|
|
165
|
+
EXECUTE FUNCTION update_permissions_updated_at();
|
|
166
|
+
`);
|
|
167
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
168
|
+
-- Source: 40fdc4c964bb2a50
|
|
169
|
+
-- Module: ProjectStore
|
|
170
|
+
|
|
171
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
172
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
173
|
+
root_commit_hash VARCHAR NOT NULL,
|
|
174
|
+
worktree VARCHAR NOT NULL,
|
|
175
|
+
vcs VARCHAR NOT NULL,
|
|
176
|
+
name VARCHAR NOT NULL,
|
|
177
|
+
sandboxes JSONB NOT NULL,
|
|
178
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
179
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
CREATE OR REPLACE FUNCTION update_projects_updated_at()
|
|
184
|
+
RETURNS TRIGGER AS \$\$
|
|
185
|
+
BEGIN
|
|
186
|
+
NEW.updated_at = NOW();
|
|
187
|
+
RETURN NEW;
|
|
188
|
+
END;
|
|
189
|
+
\$\$ LANGUAGE plpgsql;
|
|
190
|
+
|
|
191
|
+
CREATE TRIGGER trg_projects_updated_at
|
|
192
|
+
BEFORE UPDATE ON projects
|
|
193
|
+
FOR EACH ROW
|
|
194
|
+
EXECUTE FUNCTION update_projects_updated_at();
|
|
195
|
+
`);
|
|
196
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
197
|
+
-- Source: 40fdc4c964bb2a50
|
|
198
|
+
-- Module: SessionStore
|
|
199
|
+
|
|
200
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
201
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
202
|
+
slug VARCHAR NOT NULL,
|
|
203
|
+
project_id UUID NOT NULL,
|
|
204
|
+
workspace_id UUID NOT NULL,
|
|
205
|
+
parent_id UUID NOT NULL,
|
|
206
|
+
directory VARCHAR NOT NULL,
|
|
207
|
+
title VARCHAR NOT NULL,
|
|
208
|
+
version VARCHAR NOT NULL,
|
|
209
|
+
state VARCHAR NOT NULL,
|
|
210
|
+
share_url VARCHAR NOT NULL,
|
|
211
|
+
summary_additions BIGINT NOT NULL,
|
|
212
|
+
summary_deletions BIGINT NOT NULL,
|
|
213
|
+
summary_files BIGINT NOT NULL,
|
|
214
|
+
summary_diffs JSONB NOT NULL,
|
|
215
|
+
revert_data JSONB NOT NULL,
|
|
216
|
+
permission_ruleset JSONB NOT NULL,
|
|
217
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
218
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
CREATE OR REPLACE FUNCTION update_sessions_updated_at()
|
|
223
|
+
RETURNS TRIGGER AS \$\$
|
|
224
|
+
BEGIN
|
|
225
|
+
NEW.updated_at = NOW();
|
|
226
|
+
RETURN NEW;
|
|
227
|
+
END;
|
|
228
|
+
\$\$ LANGUAGE plpgsql;
|
|
229
|
+
|
|
230
|
+
CREATE TRIGGER trg_sessions_updated_at
|
|
231
|
+
BEFORE UPDATE ON sessions
|
|
232
|
+
FOR EACH ROW
|
|
233
|
+
EXECUTE FUNCTION update_sessions_updated_at();
|
|
234
|
+
`);
|
|
235
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
236
|
+
-- Source: 40fdc4c964bb2a50
|
|
237
|
+
-- Module: MessageStore
|
|
238
|
+
|
|
239
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
240
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
241
|
+
session_id UUID NOT NULL,
|
|
242
|
+
role VARCHAR NOT NULL,
|
|
243
|
+
model_id VARCHAR NOT NULL,
|
|
244
|
+
provider_id VARCHAR NOT NULL,
|
|
245
|
+
tokens_input BIGINT NOT NULL,
|
|
246
|
+
tokens_output BIGINT NOT NULL,
|
|
247
|
+
cost_usd DOUBLE PRECISION NOT NULL,
|
|
248
|
+
error JSONB NOT NULL,
|
|
249
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
250
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
251
|
+
);
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
CREATE OR REPLACE FUNCTION update_messages_updated_at()
|
|
255
|
+
RETURNS TRIGGER AS \$\$
|
|
256
|
+
BEGIN
|
|
257
|
+
NEW.updated_at = NOW();
|
|
258
|
+
RETURN NEW;
|
|
259
|
+
END;
|
|
260
|
+
\$\$ LANGUAGE plpgsql;
|
|
261
|
+
|
|
262
|
+
CREATE TRIGGER trg_messages_updated_at
|
|
263
|
+
BEFORE UPDATE ON messages
|
|
264
|
+
FOR EACH ROW
|
|
265
|
+
EXECUTE FUNCTION update_messages_updated_at();
|
|
266
|
+
`);
|
|
267
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
268
|
+
-- Source: 40fdc4c964bb2a50
|
|
269
|
+
-- Module: PartStore
|
|
270
|
+
|
|
271
|
+
CREATE TABLE IF NOT EXISTS parts (
|
|
272
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
273
|
+
message_id UUID NOT NULL,
|
|
274
|
+
session_id UUID NOT NULL,
|
|
275
|
+
part_type VARCHAR NOT NULL,
|
|
276
|
+
data JSONB NOT NULL,
|
|
277
|
+
order_index BIGINT NOT NULL,
|
|
278
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
279
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
CREATE OR REPLACE FUNCTION update_parts_updated_at()
|
|
284
|
+
RETURNS TRIGGER AS \$\$
|
|
285
|
+
BEGIN
|
|
286
|
+
NEW.updated_at = NOW();
|
|
287
|
+
RETURN NEW;
|
|
288
|
+
END;
|
|
289
|
+
\$\$ LANGUAGE plpgsql;
|
|
290
|
+
|
|
291
|
+
CREATE TRIGGER trg_parts_updated_at
|
|
292
|
+
BEFORE UPDATE ON parts
|
|
293
|
+
FOR EACH ROW
|
|
294
|
+
EXECUTE FUNCTION update_parts_updated_at();
|
|
295
|
+
`);
|
|
296
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
297
|
+
-- Source: 40fdc4c964bb2a50
|
|
298
|
+
-- Module: PermissionStore
|
|
299
|
+
|
|
300
|
+
CREATE TABLE IF NOT EXISTS permissions (
|
|
301
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
302
|
+
session_id UUID NOT NULL,
|
|
303
|
+
tool_name VARCHAR NOT NULL,
|
|
304
|
+
pattern VARCHAR NOT NULL,
|
|
305
|
+
decision VARCHAR NOT NULL,
|
|
306
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
307
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
308
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
309
|
+
);
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
CREATE OR REPLACE FUNCTION update_permissions_updated_at()
|
|
313
|
+
RETURNS TRIGGER AS \$\$
|
|
314
|
+
BEGIN
|
|
315
|
+
NEW.updated_at = NOW();
|
|
316
|
+
RETURN NEW;
|
|
317
|
+
END;
|
|
318
|
+
\$\$ LANGUAGE plpgsql;
|
|
319
|
+
|
|
320
|
+
CREATE TRIGGER trg_permissions_updated_at
|
|
321
|
+
BEFORE UPDATE ON permissions
|
|
322
|
+
FOR EACH ROW
|
|
323
|
+
EXECUTE FUNCTION update_permissions_updated_at();
|
|
324
|
+
`);
|
|
325
|
+
console.log("Migrations complete.");
|
|
326
|
+
} finally {
|
|
327
|
+
client.release();
|
|
328
|
+
await pool.end();
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
migrate().catch(e => { console.error(e); process.exit(1); });
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Generated by BoneScript compiler. DO NOT EDIT.
|
|
2
|
+
// Migration diff utility — compares two IR snapshots and produces ALTER statements.
|
|
3
|
+
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
|
|
6
|
+
interface Field {
|
|
7
|
+
name: string;
|
|
8
|
+
type: string;
|
|
9
|
+
nullable: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface Model {
|
|
13
|
+
name: string;
|
|
14
|
+
fields: Field[];
|
|
15
|
+
primary_key: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function diffModels(oldModels: Model[], newModels: Model[]): string[] {
|
|
19
|
+
const statements: string[] = [];
|
|
20
|
+
const oldByName = new Map(oldModels.map(m => [m.name, m]));
|
|
21
|
+
const newByName = new Map(newModels.map(m => [m.name, m]));
|
|
22
|
+
|
|
23
|
+
// New tables
|
|
24
|
+
for (const [name, model] of newByName) {
|
|
25
|
+
if (!oldByName.has(name)) {
|
|
26
|
+
const tableName = toSnake(name) + "s";
|
|
27
|
+
statements.push(`-- New table: ${tableName}`);
|
|
28
|
+
statements.push(`-- (Generated by previous migration)`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Removed tables (warn but don't auto-drop)
|
|
33
|
+
for (const [name] of oldByName) {
|
|
34
|
+
if (!newByName.has(name)) {
|
|
35
|
+
const tableName = toSnake(name) + "s";
|
|
36
|
+
statements.push(`-- WARNING: Table ${tableName} no longer in schema. Manual DROP required.`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Modified tables
|
|
41
|
+
for (const [name, newModel] of newByName) {
|
|
42
|
+
const oldModel = oldByName.get(name);
|
|
43
|
+
if (!oldModel) continue;
|
|
44
|
+
|
|
45
|
+
const tableName = toSnake(name) + "s";
|
|
46
|
+
const oldFields = new Map(oldModel.fields.map(f => [f.name, f]));
|
|
47
|
+
const newFields = new Map(newModel.fields.map(f => [f.name, f]));
|
|
48
|
+
|
|
49
|
+
// New columns (backward-compatible)
|
|
50
|
+
for (const [fname, field] of newFields) {
|
|
51
|
+
if (!oldFields.has(fname)) {
|
|
52
|
+
const sqlType = mapType(field.type);
|
|
53
|
+
const nullability = field.nullable ? "" : " NOT NULL DEFAULT (CASE WHEN false THEN NULL ELSE NULL END)";
|
|
54
|
+
statements.push(`ALTER TABLE ${tableName} ADD COLUMN ${fname} ${sqlType}${nullability};`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Removed columns (NOT auto-dropped — backward compat)
|
|
59
|
+
for (const [fname] of oldFields) {
|
|
60
|
+
if (!newFields.has(fname)) {
|
|
61
|
+
statements.push(`-- WARNING: Column ${tableName}.${fname} removed from schema. Run manually: ALTER TABLE ${tableName} DROP COLUMN ${fname};`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Type changes
|
|
66
|
+
for (const [fname, newField] of newFields) {
|
|
67
|
+
const oldField = oldFields.get(fname);
|
|
68
|
+
if (!oldField) continue;
|
|
69
|
+
if (oldField.type !== newField.type) {
|
|
70
|
+
const sqlType = mapType(newField.type);
|
|
71
|
+
statements.push(`ALTER TABLE ${tableName} ALTER COLUMN ${fname} TYPE ${sqlType};`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return statements;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function toSnake(s: string): string {
|
|
80
|
+
return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function mapType(t: string): string {
|
|
84
|
+
const map: Record<string, string> = {
|
|
85
|
+
string: "VARCHAR", uint: "BIGINT", int: "BIGINT", float: "DOUBLE PRECISION",
|
|
86
|
+
bool: "BOOLEAN", timestamp: "TIMESTAMPTZ", uuid: "UUID", bytes: "BYTEA", json: "JSONB",
|
|
87
|
+
};
|
|
88
|
+
return map[t] || "JSONB";
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (require.main === module) {
|
|
92
|
+
const oldFile = process.argv[2];
|
|
93
|
+
const newFile = process.argv[3];
|
|
94
|
+
if (!oldFile || !newFile) {
|
|
95
|
+
console.error("Usage: node migration-diff.js <old-ir.json> <new-ir.json>");
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
const oldIR = JSON.parse(fs.readFileSync(oldFile, "utf-8"));
|
|
99
|
+
const newIR = JSON.parse(fs.readFileSync(newFile, "utf-8"));
|
|
100
|
+
|
|
101
|
+
const oldModels: Model[] = [];
|
|
102
|
+
const newModels: Model[] = [];
|
|
103
|
+
for (const sys of oldIR) for (const mod of sys.modules) for (const m of mod.models) oldModels.push(m);
|
|
104
|
+
for (const sys of newIR) for (const mod of sys.modules) for (const m of mod.models) newModels.push(m);
|
|
105
|
+
|
|
106
|
+
const diff = diffModels(oldModels, newModels);
|
|
107
|
+
console.log(diff.join("\n"));
|
|
108
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Generated by BoneScript compiler.
|
|
2
|
+
// Notification service — fires on event emissions.
|
|
3
|
+
// Configure NOTIFY_PROVIDER=resend|sendgrid|log (default: log)
|
|
4
|
+
// Set NOTIFY_API_KEY and NOTIFY_FROM_EMAIL in .env
|
|
5
|
+
|
|
6
|
+
import { SystemEvent } from "./events";
|
|
7
|
+
|
|
8
|
+
export type NotifyProvider = "resend" | "sendgrid" | "log";
|
|
9
|
+
|
|
10
|
+
const PROVIDER = (process.env.NOTIFY_PROVIDER || "log") as NotifyProvider;
|
|
11
|
+
const API_KEY = process.env.NOTIFY_API_KEY || "";
|
|
12
|
+
const FROM_EMAIL = process.env.NOTIFY_FROM_EMAIL || "noreply@example.com";
|
|
13
|
+
|
|
14
|
+
export interface NotifyMessage {
|
|
15
|
+
to: string;
|
|
16
|
+
subject: string;
|
|
17
|
+
body: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function sendEmail(msg: NotifyMessage): Promise<void> {
|
|
21
|
+
if (PROVIDER === "log") {
|
|
22
|
+
console.log(`[notify] ${msg.subject} → ${msg.to}`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (PROVIDER === "resend") {
|
|
26
|
+
const res = await fetch("https://api.resend.com/emails", {
|
|
27
|
+
method: "POST",
|
|
28
|
+
headers: { "Authorization": `Bearer ${API_KEY}`, "Content-Type": "application/json" },
|
|
29
|
+
body: JSON.stringify({ from: FROM_EMAIL, to: msg.to, subject: msg.subject, html: msg.body }),
|
|
30
|
+
});
|
|
31
|
+
if (!res.ok) throw new Error(`Resend error: ${res.status}`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (PROVIDER === "sendgrid") {
|
|
35
|
+
const res = await fetch("https://api.sendgrid.com/v3/mail/send", {
|
|
36
|
+
method: "POST",
|
|
37
|
+
headers: { "Authorization": `Bearer ${API_KEY}`, "Content-Type": "application/json" },
|
|
38
|
+
body: JSON.stringify({ personalizations: [{ to: [{ email: msg.to }] }], from: { email: FROM_EMAIL }, subject: msg.subject, content: [{ type: "text/html", value: msg.body }] }),
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok) throw new Error(`SendGrid error: ${res.status}`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Handler for SessionCreated
|
|
46
|
+
export async function notifySessionCreated(event: SystemEvent, recipientEmail: string): Promise<void> {
|
|
47
|
+
await sendEmail({
|
|
48
|
+
to: recipientEmail,
|
|
49
|
+
subject: "SessionCreated notification",
|
|
50
|
+
body: `<p>Event <strong>SessionCreated</strong> occurred.</p><pre>${JSON.stringify(event.payload, null, 2)}</pre>`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Handler for SessionStateChanged
|
|
55
|
+
export async function notifySessionStateChanged(event: SystemEvent, recipientEmail: string): Promise<void> {
|
|
56
|
+
await sendEmail({
|
|
57
|
+
to: recipientEmail,
|
|
58
|
+
subject: "SessionStateChanged notification",
|
|
59
|
+
body: `<p>Event <strong>SessionStateChanged</strong> occurred.</p><pre>${JSON.stringify(event.payload, null, 2)}</pre>`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Handler for MessageAdded
|
|
64
|
+
export async function notifyMessageAdded(event: SystemEvent, recipientEmail: string): Promise<void> {
|
|
65
|
+
await sendEmail({
|
|
66
|
+
to: recipientEmail,
|
|
67
|
+
subject: "MessageAdded notification",
|
|
68
|
+
body: `<p>Event <strong>MessageAdded</strong> occurred.</p><pre>${JSON.stringify(event.payload, null, 2)}</pre>`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Handler for PartUpdated
|
|
73
|
+
export async function notifyPartUpdated(event: SystemEvent, recipientEmail: string): Promise<void> {
|
|
74
|
+
await sendEmail({
|
|
75
|
+
to: recipientEmail,
|
|
76
|
+
subject: "PartUpdated notification",
|
|
77
|
+
body: `<p>Event <strong>PartUpdated</strong> occurred.</p><pre>${JSON.stringify(event.payload, null, 2)}</pre>`,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Handler for SessionCompacted
|
|
82
|
+
export async function notifySessionCompacted(event: SystemEvent, recipientEmail: string): Promise<void> {
|
|
83
|
+
await sendEmail({
|
|
84
|
+
to: recipientEmail,
|
|
85
|
+
subject: "SessionCompacted notification",
|
|
86
|
+
body: `<p>Event <strong>SessionCompacted</strong> occurred.</p><pre>${JSON.stringify(event.payload, null, 2)}</pre>`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function registerNotificationHandlers(eventBus: any): void {
|
|
91
|
+
// TODO: implement recipient lookup per event type
|
|
92
|
+
// eventBus.subscribe("SessionCreated", async (event: SystemEvent) => {
|
|
93
|
+
// const recipientEmail = await lookupRecipient(event);
|
|
94
|
+
// await notifySessionCreated(event, recipientEmail);
|
|
95
|
+
// });
|
|
96
|
+
// eventBus.subscribe("SessionStateChanged", async (event: SystemEvent) => {
|
|
97
|
+
// const recipientEmail = await lookupRecipient(event);
|
|
98
|
+
// await notifySessionStateChanged(event, recipientEmail);
|
|
99
|
+
// });
|
|
100
|
+
// eventBus.subscribe("MessageAdded", async (event: SystemEvent) => {
|
|
101
|
+
// const recipientEmail = await lookupRecipient(event);
|
|
102
|
+
// await notifyMessageAdded(event, recipientEmail);
|
|
103
|
+
// });
|
|
104
|
+
// eventBus.subscribe("PartUpdated", async (event: SystemEvent) => {
|
|
105
|
+
// const recipientEmail = await lookupRecipient(event);
|
|
106
|
+
// await notifyPartUpdated(event, recipientEmail);
|
|
107
|
+
// });
|
|
108
|
+
// eventBus.subscribe("SessionCompacted", async (event: SystemEvent) => {
|
|
109
|
+
// const recipientEmail = await lookupRecipient(event);
|
|
110
|
+
// await notifySessionCompacted(event, recipientEmail);
|
|
111
|
+
// });
|
|
112
|
+
}
|