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,95 @@
|
|
|
1
|
+
// Generated by BoneScript compiler. DO NOT EDIT.
|
|
2
|
+
// System: RAGDomain
|
|
3
|
+
require("dotenv").config();
|
|
4
|
+
import express from "express";
|
|
5
|
+
import { createServer } from "http";
|
|
6
|
+
import cors from "cors";
|
|
7
|
+
import helmet from "helmet";
|
|
8
|
+
import rateLimit from "express-rate-limit";
|
|
9
|
+
import { authMiddleware } from "./auth";
|
|
10
|
+
import { healthRouter } from "./health";
|
|
11
|
+
import { logger } from "./logger";
|
|
12
|
+
import { eventBus } from "./events";
|
|
13
|
+
import { pool } from "./db";
|
|
14
|
+
|
|
15
|
+
import { knowledgeBasesRouter } from "./routes/knowledge_base";
|
|
16
|
+
import { codeFilesRouter } from "./routes/code_file";
|
|
17
|
+
import { codeChunksRouter } from "./routes/code_chunk";
|
|
18
|
+
import { memoryEntrysRouter } from "./routes/memory_entry";
|
|
19
|
+
import { indexingJobsRouter } from "./routes/indexing_job";
|
|
20
|
+
|
|
21
|
+
const app = express();
|
|
22
|
+
const httpServer = createServer(app);
|
|
23
|
+
const PORT = parseInt(process.env.PORT || "3000");
|
|
24
|
+
|
|
25
|
+
// Middleware
|
|
26
|
+
app.use(helmet());
|
|
27
|
+
// CORS: restrict to ALLOWED_ORIGINS env var (comma-separated). Defaults to same-origin only.
|
|
28
|
+
const __allowedOrigins = (process.env.ALLOWED_ORIGINS || "").split(",").map(s => s.trim()).filter(Boolean);
|
|
29
|
+
app.use(cors({
|
|
30
|
+
origin: __allowedOrigins.length > 0
|
|
31
|
+
? (origin, cb) => { if (!origin || __allowedOrigins.includes(origin)) cb(null, true); else cb(new Error("Not allowed by CORS")); }
|
|
32
|
+
: false,
|
|
33
|
+
credentials: true,
|
|
34
|
+
}));
|
|
35
|
+
app.use(express.json({ limit: "1mb" }));
|
|
36
|
+
app.use(express.urlencoded({ extended: false, limit: "1mb" }));
|
|
37
|
+
app.use(authMiddleware);
|
|
38
|
+
app.use(rateLimit({ windowMs: 60000, max: 1000 }));
|
|
39
|
+
|
|
40
|
+
// Request timeout (default 30s, override per-route)
|
|
41
|
+
app.use((req: any, res: any, next: any) => {
|
|
42
|
+
const timeout = parseInt(process.env.REQUEST_TIMEOUT_MS || "30000");
|
|
43
|
+
const timer = setTimeout(() => {
|
|
44
|
+
if (!res.headersSent) {
|
|
45
|
+
res.status(503).json({ error: { code: "REQUEST_TIMEOUT", message: "Request timed out" } });
|
|
46
|
+
}
|
|
47
|
+
}, timeout);
|
|
48
|
+
res.on("finish", () => clearTimeout(timer));
|
|
49
|
+
next();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// Health & metrics
|
|
53
|
+
app.use("/health", healthRouter);
|
|
54
|
+
|
|
55
|
+
// Routes
|
|
56
|
+
app.use("/knowledge_bases", knowledgeBasesRouter);
|
|
57
|
+
app.use("/code_files", codeFilesRouter);
|
|
58
|
+
app.use("/code_chunks", codeChunksRouter);
|
|
59
|
+
app.use("/memory_entrys", memoryEntrysRouter);
|
|
60
|
+
app.use("/indexing_jobs", indexingJobsRouter);
|
|
61
|
+
|
|
62
|
+
// Start
|
|
63
|
+
httpServer.listen(PORT, () => {
|
|
64
|
+
logger.info("server_started", { event: "startup", metadata: { port: PORT } });
|
|
65
|
+
// Start durable event worker (no-op in in_process mode)
|
|
66
|
+
eventBus.startWorker(parseInt(process.env.EVENT_WORKER_INTERVAL_MS || "1000"));
|
|
67
|
+
console.log(`[RAGDomain] Running on port ${PORT}`);
|
|
68
|
+
console.log(` HTTP routes:`);
|
|
69
|
+
console.log(` /knowledge_bases`);
|
|
70
|
+
console.log(` /code_files`);
|
|
71
|
+
console.log(` /code_chunks`);
|
|
72
|
+
console.log(` /memory_entrys`);
|
|
73
|
+
console.log(` /indexing_jobs`);
|
|
74
|
+
console.log(` Health: /health/live, /health/ready, /health/metrics`);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Graceful shutdown
|
|
78
|
+
const shutdown = async (signal: string) => {
|
|
79
|
+
logger.info("server_stopping", { event: "shutdown", metadata: { signal } });
|
|
80
|
+
httpServer.close(async () => {
|
|
81
|
+
try {
|
|
82
|
+
await pool.end();
|
|
83
|
+
logger.info("server_stopped", { event: "shutdown", status: "success" });
|
|
84
|
+
} catch (e: any) {
|
|
85
|
+
logger.error("shutdown_error", { event: "shutdown", metadata: { error: e.message } });
|
|
86
|
+
}
|
|
87
|
+
process.exit(0);
|
|
88
|
+
});
|
|
89
|
+
// Force exit after 10s if connections don't drain
|
|
90
|
+
setTimeout(() => { logger.error("shutdown_timeout", { event: "shutdown" }); process.exit(1); }, 10000);
|
|
91
|
+
};
|
|
92
|
+
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
93
|
+
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
94
|
+
|
|
95
|
+
export { app, httpServer };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Generated by BoneScript compiler. DO NOT EDIT.
|
|
2
|
+
// Implements spec/10 §3 (Logging Schema)
|
|
3
|
+
|
|
4
|
+
import { v4 as uuid } from "uuid";
|
|
5
|
+
|
|
6
|
+
export type LogLevel = "debug" | "info" | "warn" | "error" | "fatal";
|
|
7
|
+
export type LogStatus = "success" | "failure" | "timeout" | "rejected";
|
|
8
|
+
|
|
9
|
+
export interface LogEntry {
|
|
10
|
+
timestamp: string;
|
|
11
|
+
level: LogLevel;
|
|
12
|
+
service: string;
|
|
13
|
+
trace_id: string;
|
|
14
|
+
span_id: string;
|
|
15
|
+
event: string;
|
|
16
|
+
duration_ms?: number;
|
|
17
|
+
status: LogStatus;
|
|
18
|
+
entity_id?: string;
|
|
19
|
+
actor_id?: string | null;
|
|
20
|
+
error_code?: string | null;
|
|
21
|
+
metadata?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
class Logger {
|
|
25
|
+
private service: string;
|
|
26
|
+
|
|
27
|
+
constructor(service: string) {
|
|
28
|
+
this.service = service;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
emit(entry: Omit<LogEntry, "timestamp" | "service" | "span_id">): void {
|
|
32
|
+
const full: LogEntry = {
|
|
33
|
+
timestamp: new Date().toISOString(),
|
|
34
|
+
service: this.service,
|
|
35
|
+
span_id: uuid(),
|
|
36
|
+
...entry,
|
|
37
|
+
};
|
|
38
|
+
// In production: send to log aggregator. In dev: console.
|
|
39
|
+
const fn = entry.level === "error" || entry.level === "fatal" ? console.error : console.log;
|
|
40
|
+
fn(JSON.stringify(full));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
info(event: string, fields: Partial<LogEntry> = {}): void {
|
|
44
|
+
this.emit({ level: "info", event, status: "success", trace_id: fields.trace_id || "", ...fields });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
warn(event: string, fields: Partial<LogEntry> = {}): void {
|
|
48
|
+
this.emit({ level: "warn", event, status: "rejected", trace_id: fields.trace_id || "", ...fields });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
error(event: string, fields: Partial<LogEntry> = {}): void {
|
|
52
|
+
this.emit({ level: "error", event, status: "failure", trace_id: fields.trace_id || "", ...fields });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
debug(event: string, fields: Partial<LogEntry> = {}): void {
|
|
56
|
+
if (process.env.LOG_LEVEL === "debug") {
|
|
57
|
+
this.emit({ level: "debug", event, status: "success", trace_id: fields.trace_id || "", ...fields });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function createLogger(service: string): Logger {
|
|
63
|
+
return new Logger(service);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export const logger = createLogger("RAGDomain");
|
|
@@ -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,364 @@
|
|
|
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: 1f72617e51bc07fb
|
|
11
|
+
-- Module: KnowledgeBaseStore
|
|
12
|
+
|
|
13
|
+
CREATE TABLE IF NOT EXISTS knowledge_bases (
|
|
14
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
15
|
+
project_id UUID NOT NULL,
|
|
16
|
+
name VARCHAR NOT NULL,
|
|
17
|
+
description VARCHAR NOT NULL,
|
|
18
|
+
embedding_model VARCHAR NOT NULL,
|
|
19
|
+
embedding_dimensions BIGINT NOT NULL,
|
|
20
|
+
chunk_strategy VARCHAR NOT NULL,
|
|
21
|
+
chunk_size BIGINT NOT NULL,
|
|
22
|
+
chunk_overlap BIGINT NOT NULL,
|
|
23
|
+
total_files BIGINT NOT NULL,
|
|
24
|
+
total_chunks BIGINT NOT NULL,
|
|
25
|
+
last_indexed_at TIMESTAMPTZ NOT NULL,
|
|
26
|
+
state VARCHAR NOT NULL,
|
|
27
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
28
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
CREATE OR REPLACE FUNCTION update_knowledge_bases_updated_at()
|
|
33
|
+
RETURNS TRIGGER AS \$\$
|
|
34
|
+
BEGIN
|
|
35
|
+
NEW.updated_at = NOW();
|
|
36
|
+
RETURN NEW;
|
|
37
|
+
END;
|
|
38
|
+
\$\$ LANGUAGE plpgsql;
|
|
39
|
+
|
|
40
|
+
CREATE TRIGGER trg_knowledge_bases_updated_at
|
|
41
|
+
BEFORE UPDATE ON knowledge_bases
|
|
42
|
+
FOR EACH ROW
|
|
43
|
+
EXECUTE FUNCTION update_knowledge_bases_updated_at();
|
|
44
|
+
`);
|
|
45
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
46
|
+
-- Source: 1f72617e51bc07fb
|
|
47
|
+
-- Module: CodeFileStore
|
|
48
|
+
|
|
49
|
+
CREATE TABLE IF NOT EXISTS code_files (
|
|
50
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
51
|
+
knowledge_base_id UUID NOT NULL,
|
|
52
|
+
project_id UUID NOT NULL,
|
|
53
|
+
file_path VARCHAR NOT NULL,
|
|
54
|
+
language VARCHAR NOT NULL,
|
|
55
|
+
file_hash VARCHAR NOT NULL,
|
|
56
|
+
file_size_bytes BIGINT NOT NULL,
|
|
57
|
+
total_chunks BIGINT NOT NULL,
|
|
58
|
+
last_modified_at TIMESTAMPTZ NOT NULL,
|
|
59
|
+
metadata JSONB NOT NULL,
|
|
60
|
+
state VARCHAR NOT NULL,
|
|
61
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
62
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
CREATE OR REPLACE FUNCTION update_code_files_updated_at()
|
|
67
|
+
RETURNS TRIGGER AS \$\$
|
|
68
|
+
BEGIN
|
|
69
|
+
NEW.updated_at = NOW();
|
|
70
|
+
RETURN NEW;
|
|
71
|
+
END;
|
|
72
|
+
\$\$ LANGUAGE plpgsql;
|
|
73
|
+
|
|
74
|
+
CREATE TRIGGER trg_code_files_updated_at
|
|
75
|
+
BEFORE UPDATE ON code_files
|
|
76
|
+
FOR EACH ROW
|
|
77
|
+
EXECUTE FUNCTION update_code_files_updated_at();
|
|
78
|
+
`);
|
|
79
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
80
|
+
-- Source: 1f72617e51bc07fb
|
|
81
|
+
-- Module: CodeChunkStore
|
|
82
|
+
|
|
83
|
+
CREATE TABLE IF NOT EXISTS code_chunks (
|
|
84
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
85
|
+
code_file_id UUID NOT NULL,
|
|
86
|
+
knowledge_base_id UUID NOT NULL,
|
|
87
|
+
project_id UUID NOT NULL,
|
|
88
|
+
content VARCHAR NOT NULL,
|
|
89
|
+
start_line BIGINT NOT NULL,
|
|
90
|
+
end_line BIGINT NOT NULL,
|
|
91
|
+
chunk_index BIGINT NOT NULL,
|
|
92
|
+
language VARCHAR NOT NULL,
|
|
93
|
+
symbol_name VARCHAR NOT NULL,
|
|
94
|
+
symbol_type VARCHAR NOT NULL,
|
|
95
|
+
metadata JSONB NOT NULL,
|
|
96
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
97
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
CREATE OR REPLACE FUNCTION update_code_chunks_updated_at()
|
|
102
|
+
RETURNS TRIGGER AS \$\$
|
|
103
|
+
BEGIN
|
|
104
|
+
NEW.updated_at = NOW();
|
|
105
|
+
RETURN NEW;
|
|
106
|
+
END;
|
|
107
|
+
\$\$ LANGUAGE plpgsql;
|
|
108
|
+
|
|
109
|
+
CREATE TRIGGER trg_code_chunks_updated_at
|
|
110
|
+
BEFORE UPDATE ON code_chunks
|
|
111
|
+
FOR EACH ROW
|
|
112
|
+
EXECUTE FUNCTION update_code_chunks_updated_at();
|
|
113
|
+
`);
|
|
114
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
115
|
+
-- Source: 1f72617e51bc07fb
|
|
116
|
+
-- Module: MemoryEntryStore
|
|
117
|
+
|
|
118
|
+
CREATE TABLE IF NOT EXISTS memory_entrys (
|
|
119
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
120
|
+
session_id UUID NOT NULL,
|
|
121
|
+
project_id UUID NOT NULL,
|
|
122
|
+
agent_id UUID NOT NULL,
|
|
123
|
+
memory_type VARCHAR NOT NULL,
|
|
124
|
+
content VARCHAR NOT NULL,
|
|
125
|
+
importance DOUBLE PRECISION NOT NULL,
|
|
126
|
+
access_count BIGINT NOT NULL,
|
|
127
|
+
last_accessed_at TIMESTAMPTZ NOT NULL,
|
|
128
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
129
|
+
metadata JSONB NOT NULL,
|
|
130
|
+
state VARCHAR NOT NULL,
|
|
131
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
132
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
CREATE OR REPLACE FUNCTION update_memory_entrys_updated_at()
|
|
137
|
+
RETURNS TRIGGER AS \$\$
|
|
138
|
+
BEGIN
|
|
139
|
+
NEW.updated_at = NOW();
|
|
140
|
+
RETURN NEW;
|
|
141
|
+
END;
|
|
142
|
+
\$\$ LANGUAGE plpgsql;
|
|
143
|
+
|
|
144
|
+
CREATE TRIGGER trg_memory_entrys_updated_at
|
|
145
|
+
BEFORE UPDATE ON memory_entrys
|
|
146
|
+
FOR EACH ROW
|
|
147
|
+
EXECUTE FUNCTION update_memory_entrys_updated_at();
|
|
148
|
+
`);
|
|
149
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
150
|
+
-- Source: 1f72617e51bc07fb
|
|
151
|
+
-- Module: IndexingJobStore
|
|
152
|
+
|
|
153
|
+
CREATE TABLE IF NOT EXISTS indexing_jobs (
|
|
154
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
155
|
+
knowledge_base_id UUID NOT NULL,
|
|
156
|
+
project_id UUID NOT NULL,
|
|
157
|
+
job_type VARCHAR NOT NULL,
|
|
158
|
+
file_paths JSONB NOT NULL,
|
|
159
|
+
files_total BIGINT NOT NULL,
|
|
160
|
+
files_processed BIGINT NOT NULL,
|
|
161
|
+
chunks_total BIGINT NOT NULL,
|
|
162
|
+
chunks_embedded BIGINT NOT NULL,
|
|
163
|
+
error VARCHAR NOT NULL,
|
|
164
|
+
state VARCHAR NOT NULL,
|
|
165
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
166
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
CREATE OR REPLACE FUNCTION update_indexing_jobs_updated_at()
|
|
171
|
+
RETURNS TRIGGER AS \$\$
|
|
172
|
+
BEGIN
|
|
173
|
+
NEW.updated_at = NOW();
|
|
174
|
+
RETURN NEW;
|
|
175
|
+
END;
|
|
176
|
+
\$\$ LANGUAGE plpgsql;
|
|
177
|
+
|
|
178
|
+
CREATE TRIGGER trg_indexing_jobs_updated_at
|
|
179
|
+
BEFORE UPDATE ON indexing_jobs
|
|
180
|
+
FOR EACH ROW
|
|
181
|
+
EXECUTE FUNCTION update_indexing_jobs_updated_at();
|
|
182
|
+
`);
|
|
183
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
184
|
+
-- Source: 1f72617e51bc07fb
|
|
185
|
+
-- Module: KnowledgeBaseStore
|
|
186
|
+
|
|
187
|
+
CREATE TABLE IF NOT EXISTS knowledge_bases (
|
|
188
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
189
|
+
project_id UUID NOT NULL,
|
|
190
|
+
name VARCHAR NOT NULL,
|
|
191
|
+
description VARCHAR NOT NULL,
|
|
192
|
+
embedding_model VARCHAR NOT NULL,
|
|
193
|
+
embedding_dimensions BIGINT NOT NULL,
|
|
194
|
+
chunk_strategy VARCHAR NOT NULL,
|
|
195
|
+
chunk_size BIGINT NOT NULL,
|
|
196
|
+
chunk_overlap BIGINT NOT NULL,
|
|
197
|
+
total_files BIGINT NOT NULL,
|
|
198
|
+
total_chunks BIGINT NOT NULL,
|
|
199
|
+
last_indexed_at TIMESTAMPTZ NOT NULL,
|
|
200
|
+
state VARCHAR NOT NULL,
|
|
201
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
202
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
CREATE OR REPLACE FUNCTION update_knowledge_bases_updated_at()
|
|
207
|
+
RETURNS TRIGGER AS \$\$
|
|
208
|
+
BEGIN
|
|
209
|
+
NEW.updated_at = NOW();
|
|
210
|
+
RETURN NEW;
|
|
211
|
+
END;
|
|
212
|
+
\$\$ LANGUAGE plpgsql;
|
|
213
|
+
|
|
214
|
+
CREATE TRIGGER trg_knowledge_bases_updated_at
|
|
215
|
+
BEFORE UPDATE ON knowledge_bases
|
|
216
|
+
FOR EACH ROW
|
|
217
|
+
EXECUTE FUNCTION update_knowledge_bases_updated_at();
|
|
218
|
+
`);
|
|
219
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
220
|
+
-- Source: 1f72617e51bc07fb
|
|
221
|
+
-- Module: CodeFileStore
|
|
222
|
+
|
|
223
|
+
CREATE TABLE IF NOT EXISTS code_files (
|
|
224
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
225
|
+
knowledge_base_id UUID NOT NULL,
|
|
226
|
+
project_id UUID NOT NULL,
|
|
227
|
+
file_path VARCHAR NOT NULL,
|
|
228
|
+
language VARCHAR NOT NULL,
|
|
229
|
+
file_hash VARCHAR NOT NULL,
|
|
230
|
+
file_size_bytes BIGINT NOT NULL,
|
|
231
|
+
total_chunks BIGINT NOT NULL,
|
|
232
|
+
last_modified_at TIMESTAMPTZ NOT NULL,
|
|
233
|
+
metadata JSONB NOT NULL,
|
|
234
|
+
state VARCHAR NOT NULL,
|
|
235
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
236
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
CREATE OR REPLACE FUNCTION update_code_files_updated_at()
|
|
241
|
+
RETURNS TRIGGER AS \$\$
|
|
242
|
+
BEGIN
|
|
243
|
+
NEW.updated_at = NOW();
|
|
244
|
+
RETURN NEW;
|
|
245
|
+
END;
|
|
246
|
+
\$\$ LANGUAGE plpgsql;
|
|
247
|
+
|
|
248
|
+
CREATE TRIGGER trg_code_files_updated_at
|
|
249
|
+
BEFORE UPDATE ON code_files
|
|
250
|
+
FOR EACH ROW
|
|
251
|
+
EXECUTE FUNCTION update_code_files_updated_at();
|
|
252
|
+
`);
|
|
253
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
254
|
+
-- Source: 1f72617e51bc07fb
|
|
255
|
+
-- Module: CodeChunkStore
|
|
256
|
+
|
|
257
|
+
CREATE TABLE IF NOT EXISTS code_chunks (
|
|
258
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
259
|
+
code_file_id UUID NOT NULL,
|
|
260
|
+
knowledge_base_id UUID NOT NULL,
|
|
261
|
+
project_id UUID NOT NULL,
|
|
262
|
+
content VARCHAR NOT NULL,
|
|
263
|
+
start_line BIGINT NOT NULL,
|
|
264
|
+
end_line BIGINT NOT NULL,
|
|
265
|
+
chunk_index BIGINT NOT NULL,
|
|
266
|
+
language VARCHAR NOT NULL,
|
|
267
|
+
symbol_name VARCHAR NOT NULL,
|
|
268
|
+
symbol_type VARCHAR NOT NULL,
|
|
269
|
+
metadata JSONB NOT NULL,
|
|
270
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
271
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
CREATE OR REPLACE FUNCTION update_code_chunks_updated_at()
|
|
276
|
+
RETURNS TRIGGER AS \$\$
|
|
277
|
+
BEGIN
|
|
278
|
+
NEW.updated_at = NOW();
|
|
279
|
+
RETURN NEW;
|
|
280
|
+
END;
|
|
281
|
+
\$\$ LANGUAGE plpgsql;
|
|
282
|
+
|
|
283
|
+
CREATE TRIGGER trg_code_chunks_updated_at
|
|
284
|
+
BEFORE UPDATE ON code_chunks
|
|
285
|
+
FOR EACH ROW
|
|
286
|
+
EXECUTE FUNCTION update_code_chunks_updated_at();
|
|
287
|
+
`);
|
|
288
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
289
|
+
-- Source: 1f72617e51bc07fb
|
|
290
|
+
-- Module: MemoryEntryStore
|
|
291
|
+
|
|
292
|
+
CREATE TABLE IF NOT EXISTS memory_entrys (
|
|
293
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
294
|
+
session_id UUID NOT NULL,
|
|
295
|
+
project_id UUID NOT NULL,
|
|
296
|
+
agent_id UUID NOT NULL,
|
|
297
|
+
memory_type VARCHAR NOT NULL,
|
|
298
|
+
content VARCHAR NOT NULL,
|
|
299
|
+
importance DOUBLE PRECISION NOT NULL,
|
|
300
|
+
access_count BIGINT NOT NULL,
|
|
301
|
+
last_accessed_at TIMESTAMPTZ NOT NULL,
|
|
302
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
303
|
+
metadata JSONB NOT NULL,
|
|
304
|
+
state VARCHAR NOT NULL,
|
|
305
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
306
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
CREATE OR REPLACE FUNCTION update_memory_entrys_updated_at()
|
|
311
|
+
RETURNS TRIGGER AS \$\$
|
|
312
|
+
BEGIN
|
|
313
|
+
NEW.updated_at = NOW();
|
|
314
|
+
RETURN NEW;
|
|
315
|
+
END;
|
|
316
|
+
\$\$ LANGUAGE plpgsql;
|
|
317
|
+
|
|
318
|
+
CREATE TRIGGER trg_memory_entrys_updated_at
|
|
319
|
+
BEFORE UPDATE ON memory_entrys
|
|
320
|
+
FOR EACH ROW
|
|
321
|
+
EXECUTE FUNCTION update_memory_entrys_updated_at();
|
|
322
|
+
`);
|
|
323
|
+
await client.query(`-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
324
|
+
-- Source: 1f72617e51bc07fb
|
|
325
|
+
-- Module: IndexingJobStore
|
|
326
|
+
|
|
327
|
+
CREATE TABLE IF NOT EXISTS indexing_jobs (
|
|
328
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
329
|
+
knowledge_base_id UUID NOT NULL,
|
|
330
|
+
project_id UUID NOT NULL,
|
|
331
|
+
job_type VARCHAR NOT NULL,
|
|
332
|
+
file_paths JSONB NOT NULL,
|
|
333
|
+
files_total BIGINT NOT NULL,
|
|
334
|
+
files_processed BIGINT NOT NULL,
|
|
335
|
+
chunks_total BIGINT NOT NULL,
|
|
336
|
+
chunks_embedded BIGINT NOT NULL,
|
|
337
|
+
error VARCHAR NOT NULL,
|
|
338
|
+
state VARCHAR NOT NULL,
|
|
339
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
340
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
CREATE OR REPLACE FUNCTION update_indexing_jobs_updated_at()
|
|
345
|
+
RETURNS TRIGGER AS \$\$
|
|
346
|
+
BEGIN
|
|
347
|
+
NEW.updated_at = NOW();
|
|
348
|
+
RETURN NEW;
|
|
349
|
+
END;
|
|
350
|
+
\$\$ LANGUAGE plpgsql;
|
|
351
|
+
|
|
352
|
+
CREATE TRIGGER trg_indexing_jobs_updated_at
|
|
353
|
+
BEFORE UPDATE ON indexing_jobs
|
|
354
|
+
FOR EACH ROW
|
|
355
|
+
EXECUTE FUNCTION update_indexing_jobs_updated_at();
|
|
356
|
+
`);
|
|
357
|
+
console.log("Migrations complete.");
|
|
358
|
+
} finally {
|
|
359
|
+
client.release();
|
|
360
|
+
await pool.end();
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
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
|
+
}
|