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,485 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<meta name="bonescript-api-url" content="http://localhost:3000" />
|
|
7
|
+
<title>WorkspaceDomain Admin</title>
|
|
8
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
9
|
+
<style>.loading{opacity:.5;pointer-events:none}.toast{animation:fadeout 3s forwards}@keyframes fadeout{0%,70%{opacity:1}100%{opacity:0}}</style>
|
|
10
|
+
</head>
|
|
11
|
+
<body class="bg-gray-50 min-h-screen">
|
|
12
|
+
<div class="flex h-screen overflow-hidden">
|
|
13
|
+
<aside class="w-64 bg-gray-900 text-white flex flex-col">
|
|
14
|
+
<div class="p-4 border-b border-gray-700"><h1 class="text-lg font-bold">WorkspaceDomain</h1><p class="text-xs text-gray-400 mt-1">Admin Panel</p></div>
|
|
15
|
+
<nav class="flex-1 overflow-y-auto p-2" id="nav"><button onclick="loadEntity('workspaces')" id="nav-workspaces" class="w-full text-left px-3 py-2 rounded text-sm text-gray-300 hover:bg-gray-700 hover:text-white transition-colors mb-1">Workspace</button>
|
|
16
|
+
<button onclick="loadEntity('codebases')" id="nav-codebases" class="w-full text-left px-3 py-2 rounded text-sm text-gray-300 hover:bg-gray-700 hover:text-white transition-colors mb-1">Codebase</button>
|
|
17
|
+
<button onclick="loadEntity('snapshots')" id="nav-snapshots" class="w-full text-left px-3 py-2 rounded text-sm text-gray-300 hover:bg-gray-700 hover:text-white transition-colors mb-1">Snapshot</button></nav>
|
|
18
|
+
<div class="p-4 border-t border-gray-700"><div class="text-xs text-gray-500"><div id="auth-status">Not authenticated</div>
|
|
19
|
+
<input id="token-input" type="password" placeholder="Bearer token" class="mt-2 w-full bg-gray-800 text-white text-xs px-2 py-1 rounded border border-gray-600" onchange="setToken(this.value)" /></div></div>
|
|
20
|
+
</aside>
|
|
21
|
+
<main class="flex-1 overflow-y-auto">
|
|
22
|
+
<div class="bg-white border-b px-6 py-4 flex items-center justify-between sticky top-0 z-10">
|
|
23
|
+
<div><h2 class="text-xl font-semibold text-gray-800" id="page-title">Select an entity</h2><p class="text-sm text-gray-500" id="page-subtitle"></p></div>
|
|
24
|
+
<div class="flex gap-2">
|
|
25
|
+
<button onclick="openCreateModal()" id="create-btn" class="hidden bg-blue-600 text-white px-4 py-2 rounded text-sm hover:bg-blue-700">+ Create</button>
|
|
26
|
+
<button onclick="refreshTable()" id="refresh-btn" class="hidden bg-gray-100 text-gray-700 px-3 py-2 rounded text-sm hover:bg-gray-200">↻ Refresh</button>
|
|
27
|
+
</div></div>
|
|
28
|
+
<div id="toast-container" class="fixed top-4 right-4 z-50 flex flex-col gap-2"></div>
|
|
29
|
+
<div class="p-6" id="content-area"><div class="text-center text-gray-400 mt-20"><div class="text-5xl mb-4">⚡</div><p class="text-lg">Select an entity from the sidebar</p><p class="text-sm mt-2">Generated by BoneScript compiler</p></div></div>
|
|
30
|
+
</main></div>
|
|
31
|
+
<div id="modal" class="hidden fixed inset-0 bg-black bg-opacity-50 z-40 flex items-center justify-center p-4"><div class="bg-white rounded-lg shadow-xl w-full max-w-lg max-h-screen overflow-y-auto"><div class="p-6"><div class="flex items-center justify-between mb-4"><h3 class="text-lg font-semibold" id="modal-title">Create</h3><button onclick="closeModal()" class="text-gray-400 hover:text-gray-600 text-2xl">×</button></div><form id="modal-form" onsubmit="submitForm(event)" class="space-y-4"><div id="form-fields"></div><div class="flex gap-2 pt-2"><button type="submit" class="flex-1 bg-blue-600 text-white py-2 rounded hover:bg-blue-700">Save</button><button type="button" onclick="closeModal()" class="flex-1 bg-gray-100 text-gray-700 py-2 rounded hover:bg-gray-200">Cancel</button></div></form></div></div></div>
|
|
32
|
+
<div id="cap-modal" class="hidden fixed inset-0 bg-black bg-opacity-50 z-40 flex items-center justify-center p-4"><div class="bg-white rounded-lg shadow-xl w-full max-w-md"><div class="p-6"><div class="flex items-center justify-between mb-4"><h3 class="text-lg font-semibold" id="cap-modal-title">Run Capability</h3><button onclick="closeCapModal()" class="text-gray-400 hover:text-gray-600 text-2xl">×</button></div><p class="text-sm text-gray-500 mb-4" id="cap-modal-desc"></p><div class="flex gap-2"><button onclick="confirmCapability()" class="flex-1 bg-orange-500 text-white py-2 rounded hover:bg-orange-600">Run</button><button onclick="closeCapModal()" class="flex-1 bg-gray-100 text-gray-700 py-2 rounded hover:bg-gray-200">Cancel</button></div></div></div></div>
|
|
33
|
+
<script>const BASE_URL = (document.querySelector('meta[name="bonescript-api-url"]') || {}).content || "http://localhost:3000";
|
|
34
|
+
const ENTITIES = [
|
|
35
|
+
{
|
|
36
|
+
"name": "Workspace",
|
|
37
|
+
"tableName": "workspaces",
|
|
38
|
+
"apiPath": "/workspaces",
|
|
39
|
+
"columns": [
|
|
40
|
+
{
|
|
41
|
+
"key": "id",
|
|
42
|
+
"label": "Id",
|
|
43
|
+
"type": "uuid",
|
|
44
|
+
"nullable": false
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"key": "created_at",
|
|
48
|
+
"label": "Created At",
|
|
49
|
+
"type": "datetime",
|
|
50
|
+
"nullable": false
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"key": "updated_at",
|
|
54
|
+
"label": "Updated At",
|
|
55
|
+
"type": "datetime",
|
|
56
|
+
"nullable": false
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"key": "project_id",
|
|
60
|
+
"label": "Project Id",
|
|
61
|
+
"type": "uuid",
|
|
62
|
+
"nullable": false
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"key": "root_path",
|
|
66
|
+
"label": "Root Path",
|
|
67
|
+
"type": "text",
|
|
68
|
+
"nullable": false
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"key": "git_remote",
|
|
72
|
+
"label": "Git Remote",
|
|
73
|
+
"type": "text",
|
|
74
|
+
"nullable": true
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"key": "git_branch",
|
|
78
|
+
"label": "Git Branch",
|
|
79
|
+
"type": "text",
|
|
80
|
+
"nullable": true
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"key": "git_commit",
|
|
84
|
+
"label": "Git Commit",
|
|
85
|
+
"type": "text",
|
|
86
|
+
"nullable": true
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"key": "is_dirty",
|
|
90
|
+
"label": "Is Dirty",
|
|
91
|
+
"type": "boolean",
|
|
92
|
+
"nullable": false
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"key": "file_count",
|
|
96
|
+
"label": "File Count",
|
|
97
|
+
"type": "text",
|
|
98
|
+
"nullable": true
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"key": "total_size_bytes",
|
|
102
|
+
"label": "Total Size Bytes",
|
|
103
|
+
"type": "text",
|
|
104
|
+
"nullable": true
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"key": "config",
|
|
108
|
+
"label": "Config",
|
|
109
|
+
"type": "text",
|
|
110
|
+
"nullable": true
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"formFields": [
|
|
114
|
+
{
|
|
115
|
+
"key": "project_id",
|
|
116
|
+
"label": "Project Id",
|
|
117
|
+
"type": "uuid",
|
|
118
|
+
"nullable": false
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"key": "root_path",
|
|
122
|
+
"label": "Root Path",
|
|
123
|
+
"type": "text",
|
|
124
|
+
"nullable": false
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"key": "git_remote",
|
|
128
|
+
"label": "Git Remote",
|
|
129
|
+
"type": "text",
|
|
130
|
+
"nullable": true
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"key": "git_branch",
|
|
134
|
+
"label": "Git Branch",
|
|
135
|
+
"type": "text",
|
|
136
|
+
"nullable": true
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"key": "git_commit",
|
|
140
|
+
"label": "Git Commit",
|
|
141
|
+
"type": "text",
|
|
142
|
+
"nullable": true
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"key": "is_dirty",
|
|
146
|
+
"label": "Is Dirty",
|
|
147
|
+
"type": "boolean",
|
|
148
|
+
"nullable": false
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"key": "file_count",
|
|
152
|
+
"label": "File Count",
|
|
153
|
+
"type": "text",
|
|
154
|
+
"nullable": true
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"key": "total_size_bytes",
|
|
158
|
+
"label": "Total Size Bytes",
|
|
159
|
+
"type": "text",
|
|
160
|
+
"nullable": true
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"key": "config",
|
|
164
|
+
"label": "Config",
|
|
165
|
+
"type": "text",
|
|
166
|
+
"nullable": true
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
"capabilities": [
|
|
170
|
+
{
|
|
171
|
+
"name": "create_snapshot",
|
|
172
|
+
"label": "Create Snapshot",
|
|
173
|
+
"endpoint": "/workspaces/create-snapshot"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "revert_to_snapshot",
|
|
177
|
+
"label": "Revert To Snapshot",
|
|
178
|
+
"endpoint": "/workspaces/revert-to-snapshot"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"name": "analyze_codebase",
|
|
182
|
+
"label": "Analyze Codebase",
|
|
183
|
+
"endpoint": "/workspaces/analyze-codebase"
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "Codebase",
|
|
189
|
+
"tableName": "codebases",
|
|
190
|
+
"apiPath": "/codebases",
|
|
191
|
+
"columns": [
|
|
192
|
+
{
|
|
193
|
+
"key": "id",
|
|
194
|
+
"label": "Id",
|
|
195
|
+
"type": "uuid",
|
|
196
|
+
"nullable": false
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"key": "created_at",
|
|
200
|
+
"label": "Created At",
|
|
201
|
+
"type": "datetime",
|
|
202
|
+
"nullable": false
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"key": "updated_at",
|
|
206
|
+
"label": "Updated At",
|
|
207
|
+
"type": "datetime",
|
|
208
|
+
"nullable": false
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"key": "workspace_id",
|
|
212
|
+
"label": "Workspace Id",
|
|
213
|
+
"type": "uuid",
|
|
214
|
+
"nullable": false
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"key": "project_id",
|
|
218
|
+
"label": "Project Id",
|
|
219
|
+
"type": "uuid",
|
|
220
|
+
"nullable": false
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"key": "primary_language",
|
|
224
|
+
"label": "Primary Language",
|
|
225
|
+
"type": "text",
|
|
226
|
+
"nullable": true
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"key": "languages",
|
|
230
|
+
"label": "Languages",
|
|
231
|
+
"type": "text",
|
|
232
|
+
"nullable": true
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"key": "framework",
|
|
236
|
+
"label": "Framework",
|
|
237
|
+
"type": "text",
|
|
238
|
+
"nullable": true
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"key": "build_tool",
|
|
242
|
+
"label": "Build Tool",
|
|
243
|
+
"type": "text",
|
|
244
|
+
"nullable": true
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"key": "test_framework",
|
|
248
|
+
"label": "Test Framework",
|
|
249
|
+
"type": "text",
|
|
250
|
+
"nullable": true
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"key": "entry_points",
|
|
254
|
+
"label": "Entry Points",
|
|
255
|
+
"type": "text",
|
|
256
|
+
"nullable": true
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"key": "dependencies",
|
|
260
|
+
"label": "Dependencies",
|
|
261
|
+
"type": "text",
|
|
262
|
+
"nullable": true
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"key": "analysis_version",
|
|
266
|
+
"label": "Analysis Version",
|
|
267
|
+
"type": "text",
|
|
268
|
+
"nullable": true
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
"formFields": [
|
|
272
|
+
{
|
|
273
|
+
"key": "workspace_id",
|
|
274
|
+
"label": "Workspace Id",
|
|
275
|
+
"type": "uuid",
|
|
276
|
+
"nullable": false
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"key": "project_id",
|
|
280
|
+
"label": "Project Id",
|
|
281
|
+
"type": "uuid",
|
|
282
|
+
"nullable": false
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"key": "primary_language",
|
|
286
|
+
"label": "Primary Language",
|
|
287
|
+
"type": "text",
|
|
288
|
+
"nullable": true
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"key": "languages",
|
|
292
|
+
"label": "Languages",
|
|
293
|
+
"type": "text",
|
|
294
|
+
"nullable": true
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"key": "framework",
|
|
298
|
+
"label": "Framework",
|
|
299
|
+
"type": "text",
|
|
300
|
+
"nullable": true
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"key": "build_tool",
|
|
304
|
+
"label": "Build Tool",
|
|
305
|
+
"type": "text",
|
|
306
|
+
"nullable": true
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"key": "test_framework",
|
|
310
|
+
"label": "Test Framework",
|
|
311
|
+
"type": "text",
|
|
312
|
+
"nullable": true
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"key": "entry_points",
|
|
316
|
+
"label": "Entry Points",
|
|
317
|
+
"type": "text",
|
|
318
|
+
"nullable": true
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"key": "dependencies",
|
|
322
|
+
"label": "Dependencies",
|
|
323
|
+
"type": "text",
|
|
324
|
+
"nullable": true
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"key": "analysis_version",
|
|
328
|
+
"label": "Analysis Version",
|
|
329
|
+
"type": "text",
|
|
330
|
+
"nullable": true
|
|
331
|
+
}
|
|
332
|
+
],
|
|
333
|
+
"capabilities": []
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"name": "Snapshot",
|
|
337
|
+
"tableName": "snapshots",
|
|
338
|
+
"apiPath": "/snapshots",
|
|
339
|
+
"columns": [
|
|
340
|
+
{
|
|
341
|
+
"key": "id",
|
|
342
|
+
"label": "Id",
|
|
343
|
+
"type": "uuid",
|
|
344
|
+
"nullable": false
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"key": "created_at",
|
|
348
|
+
"label": "Created At",
|
|
349
|
+
"type": "datetime",
|
|
350
|
+
"nullable": false
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"key": "updated_at",
|
|
354
|
+
"label": "Updated At",
|
|
355
|
+
"type": "datetime",
|
|
356
|
+
"nullable": false
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"key": "session_id",
|
|
360
|
+
"label": "Session Id",
|
|
361
|
+
"type": "uuid",
|
|
362
|
+
"nullable": false
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"key": "project_id",
|
|
366
|
+
"label": "Project Id",
|
|
367
|
+
"type": "uuid",
|
|
368
|
+
"nullable": false
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
"key": "workspace_id",
|
|
372
|
+
"label": "Workspace Id",
|
|
373
|
+
"type": "uuid",
|
|
374
|
+
"nullable": false
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"key": "git_hash",
|
|
378
|
+
"label": "Git Hash",
|
|
379
|
+
"type": "text",
|
|
380
|
+
"nullable": false
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"key": "message_id",
|
|
384
|
+
"label": "Message Id",
|
|
385
|
+
"type": "text",
|
|
386
|
+
"nullable": true
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"key": "part_id",
|
|
390
|
+
"label": "Part Id",
|
|
391
|
+
"type": "text",
|
|
392
|
+
"nullable": true
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"key": "diff_summary",
|
|
396
|
+
"label": "Diff Summary",
|
|
397
|
+
"type": "text",
|
|
398
|
+
"nullable": true
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"key": "files_changed",
|
|
402
|
+
"label": "Files Changed",
|
|
403
|
+
"type": "text",
|
|
404
|
+
"nullable": true
|
|
405
|
+
}
|
|
406
|
+
],
|
|
407
|
+
"formFields": [
|
|
408
|
+
{
|
|
409
|
+
"key": "session_id",
|
|
410
|
+
"label": "Session Id",
|
|
411
|
+
"type": "uuid",
|
|
412
|
+
"nullable": false
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"key": "project_id",
|
|
416
|
+
"label": "Project Id",
|
|
417
|
+
"type": "uuid",
|
|
418
|
+
"nullable": false
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"key": "workspace_id",
|
|
422
|
+
"label": "Workspace Id",
|
|
423
|
+
"type": "uuid",
|
|
424
|
+
"nullable": false
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"key": "git_hash",
|
|
428
|
+
"label": "Git Hash",
|
|
429
|
+
"type": "text",
|
|
430
|
+
"nullable": false
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"key": "message_id",
|
|
434
|
+
"label": "Message Id",
|
|
435
|
+
"type": "text",
|
|
436
|
+
"nullable": true
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"key": "part_id",
|
|
440
|
+
"label": "Part Id",
|
|
441
|
+
"type": "text",
|
|
442
|
+
"nullable": true
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"key": "diff_summary",
|
|
446
|
+
"label": "Diff Summary",
|
|
447
|
+
"type": "text",
|
|
448
|
+
"nullable": true
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"key": "files_changed",
|
|
452
|
+
"label": "Files Changed",
|
|
453
|
+
"type": "text",
|
|
454
|
+
"nullable": true
|
|
455
|
+
}
|
|
456
|
+
],
|
|
457
|
+
"capabilities": [
|
|
458
|
+
{
|
|
459
|
+
"name": "revert_to_snapshot",
|
|
460
|
+
"label": "Revert To Snapshot",
|
|
461
|
+
"endpoint": "/snapshots/revert-to-snapshot"
|
|
462
|
+
}
|
|
463
|
+
]
|
|
464
|
+
}
|
|
465
|
+
];
|
|
466
|
+
let currentEntity = null, currentPage = 1, editingId = null, pendingCapability = null;
|
|
467
|
+
let authToken = localStorage.getItem("admin_token") || "";
|
|
468
|
+
if (authToken) { document.getElementById("token-input").value = authToken; document.getElementById("auth-status").textContent = "Token set"; }
|
|
469
|
+
function setToken(v) { authToken = v; localStorage.setItem("admin_token", v); document.getElementById("auth-status").textContent = v ? "Token set" : "Not authenticated"; }
|
|
470
|
+
function headers() { const h = { "Content-Type": "application/json" }; if (authToken) h["Authorization"] = "Bearer " + authToken; return h; }
|
|
471
|
+
function toast(msg, type) { const el = document.createElement("div"); el.className = "toast px-4 py-2 rounded shadow text-sm text-white " + (type === "error" ? "bg-red-500" : "bg-green-500"); el.textContent = msg; document.getElementById("toast-container").appendChild(el); setTimeout(function() { el.remove(); }, 3500); }
|
|
472
|
+
function loadEntity(t) { currentEntity = ENTITIES.find(function(e) { return e.tableName === t; }); if (!currentEntity) return; currentPage = 1; document.querySelectorAll("[id^=nav-]").forEach(function(el) { el.classList.remove("bg-gray-700", "text-white"); el.classList.add("text-gray-300"); }); var n = document.getElementById("nav-" + t); if (n) { n.classList.add("bg-gray-700", "text-white"); n.classList.remove("text-gray-300"); } document.getElementById("page-title").textContent = currentEntity.name; document.getElementById("page-subtitle").textContent = currentEntity.apiPath; document.getElementById("create-btn").classList.remove("hidden"); document.getElementById("refresh-btn").classList.remove("hidden"); refreshTable(); }
|
|
473
|
+
async function refreshTable() { if (!currentEntity) return; var area = document.getElementById("content-area"); area.classList.add("loading"); try { var res = await fetch(BASE_URL + currentEntity.apiPath + "?page=" + currentPage + "&page_size=50", { headers: headers() }); var data = await res.json(); if (!res.ok) { area.innerHTML = "<p class=\"text-red-600\">" + (data.error && data.error.message || "Error") + "</p>"; return; } var items = data.items || []; var total = data.total || 0; var cols = currentEntity.columns; var caps = currentEntity.capabilities; var html = "<div class=\"bg-white rounded-lg shadow overflow-hidden\"><div class=\"px-4 py-3 border-b flex items-center justify-between\"><span class=\"text-sm text-gray-500\">" + total + " total</span>"; if (caps.length > 0) { html += "<div class=\"flex gap-2\">"; for (var i = 0; i < caps.length; i++) { html += "<button onclick=\"runCapability('" + caps[i].endpoint + "','" + caps[i].label + "')\" class=\"text-xs bg-orange-100 text-orange-700 px-2 py-1 rounded\">" + caps[i].label + "</button>"; } html += "</div>"; } html += "</div><div class=\"overflow-x-auto\"><table class=\"w-full text-sm\"><thead class=\"bg-gray-50 border-b\"><tr>"; for (var j = 0; j < cols.length; j++) { html += "<th class=\"text-left px-4 py-3 text-xs font-medium text-gray-500 uppercase\">" + cols[j].label + "</th>"; } html += "<th class=\"text-right px-4 py-3 text-xs\">Actions</th></tr></thead><tbody class=\"divide-y divide-gray-100\">"; if (items.length === 0) { html += "<tr><td colspan=\"" + (cols.length + 1) + "\" class=\"px-4 py-8 text-center text-gray-400\">No records</td></tr>"; } for (var k = 0; k < items.length; k++) { var item = items[k]; html += "<tr class=\"hover:bg-gray-50\">"; for (var l = 0; l < cols.length; l++) { var col = cols[l]; var val = item[col.key]; var d = ""; if (val === null || val === undefined) { d = "<span class=\"text-gray-300 italic\">null</span>"; } else if (col.type === "boolean") { d = val ? "<span class=\"text-green-600\">Yes</span>" : "<span class=\"text-red-400\">No</span>"; } else if (col.type === "datetime") { d = "<span class=\"text-gray-600\">" + new Date(val).toLocaleString() + "</span>"; } else if (col.type === "uuid") { d = "<span class=\"font-mono text-xs text-gray-500\">" + String(val).slice(0, 8) + "...</span>"; } else if (col.type === "json" || col.type === "array") { d = "<span class=\"font-mono text-xs text-gray-500\">" + JSON.stringify(val).slice(0, 40) + "</span>"; } else { d = "<span class=\"text-gray-800\">" + String(val).slice(0, 60) + "</span>"; } html += "<td class=\"px-4 py-3\">" + d + "</td>"; } html += "<td class=\"px-4 py-3 text-right\"><button onclick=\"openEditModal('" + item.id + "')\" class=\"text-blue-600 hover:text-blue-800 text-xs mr-2\">Edit</button><button onclick=\"deleteRecord('" + item.id + "')\" class=\"text-red-500 hover:text-red-700 text-xs\">Delete</button></td></tr>"; } html += "</tbody></table></div></div>"; area.innerHTML = html; } catch(e) { area.innerHTML = "<p class=\"text-red-600\">Error: " + e.message + "</p>"; } finally { area.classList.remove("loading"); } }
|
|
474
|
+
function openCreateModal() { if (!currentEntity) return; editingId = null; document.getElementById("modal-title").textContent = "Create " + currentEntity.name; renderFormFields(null); document.getElementById("modal").classList.remove("hidden"); }
|
|
475
|
+
async function openEditModal(id) { if (!currentEntity) return; editingId = id; document.getElementById("modal-title").textContent = "Edit " + currentEntity.name; try { var res = await fetch(BASE_URL + currentEntity.apiPath + "/" + id, { headers: headers() }); var data = await res.json(); renderFormFields(data); document.getElementById("modal").classList.remove("hidden"); } catch(e) { toast("Failed to load: " + e.message, "error"); } }
|
|
476
|
+
function renderFormFields(data) { var fields = currentEntity.formFields; var html = ""; for (var i = 0; i < fields.length; i++) { var f = fields[i]; var val = data ? (data[f.key] !== undefined ? data[f.key] : "") : ""; var it = f.type === "boolean" ? "checkbox" : f.type === "datetime" ? "datetime-local" : f.type === "json" || f.type === "array" ? "textarea" : "text"; html += "<div><label class=\"block text-sm font-medium text-gray-700 mb-1\">" + f.label + (f.nullable ? "" : " *") + "</label>"; if (it === "checkbox") { html += "<input type=\"checkbox\" name=\"" + f.key + "\" " + (val ? "checked" : "") + " class=\"h-4 w-4 text-blue-600 rounded border-gray-300\" />"; } else if (it === "textarea") { html += "<textarea name=\"" + f.key + "\" rows=\"3\" class=\"w-full border border-gray-300 rounded px-3 py-2 text-sm\">" + (typeof val === "object" ? JSON.stringify(val, null, 2) : val) + "</textarea>"; } else { html += "<input type=\"" + it + "\" name=\"" + f.key + "\" value=\"" + val + "\" class=\"w-full border border-gray-300 rounded px-3 py-2 text-sm\" />"; } html += "</div>"; } document.getElementById("form-fields").innerHTML = html; }
|
|
477
|
+
async function submitForm(e) { e.preventDefault(); if (!currentEntity) return; var form = document.getElementById("modal-form"); var body = {}; for (var i = 0; i < currentEntity.formFields.length; i++) { var f = currentEntity.formFields[i]; var el = form.elements[f.key]; if (!el) continue; if (f.type === "boolean") { body[f.key] = el.checked; } else if (f.type === "json" || f.type === "array") { try { body[f.key] = JSON.parse(el.value); } catch(ex) { body[f.key] = el.value; } } else { body[f.key] = el.value; } } try { var url = editingId ? BASE_URL + currentEntity.apiPath + "/" + editingId : BASE_URL + currentEntity.apiPath; var method = editingId ? "PUT" : "POST"; var res = await fetch(url, { method: method, headers: headers(), body: JSON.stringify(body) }); var data = await res.json(); if (!res.ok) throw new Error(data.error && data.error.message || "Request failed"); toast(editingId ? "Updated" : "Created"); closeModal(); refreshTable(); } catch(e) { toast(e.message, "error"); } }
|
|
478
|
+
async function deleteRecord(id) { if (!confirm("Delete this record?")) return; try { var res = await fetch(BASE_URL + currentEntity.apiPath + "/" + id, { method: "DELETE", headers: headers() }); if (!res.ok) { var d = await res.json().catch(function() { return {}; }); throw new Error(d.error && d.error.message || "Delete failed"); } toast("Deleted"); refreshTable(); } catch(e) { toast(e.message, "error"); } }
|
|
479
|
+
function runCapability(endpoint, label) { pendingCapability = { endpoint: endpoint, label: label }; document.getElementById("cap-modal-title").textContent = label; document.getElementById("cap-modal-desc").textContent = "Run this capability?"; document.getElementById("cap-modal").classList.remove("hidden"); }
|
|
480
|
+
async function confirmCapability() { if (!pendingCapability) return; closeCapModal(); try { var res = await fetch(BASE_URL + pendingCapability.endpoint, { method: "POST", headers: headers(), body: JSON.stringify({}) }); var data = await res.json().catch(function() { return {}; }); if (!res.ok) throw new Error(data.error && data.error.message || "Failed"); toast(pendingCapability.label + " completed"); refreshTable(); } catch(e) { toast(e.message, "error"); } }
|
|
481
|
+
function closeModal() { document.getElementById("modal").classList.add("hidden"); editingId = null; }
|
|
482
|
+
function closeCapModal() { document.getElementById("cap-modal").classList.add("hidden"); pendingCapability = null; }
|
|
483
|
+
document.getElementById("modal").addEventListener("click", function(e) { if (e.target === e.currentTarget) closeModal(); });
|
|
484
|
+
document.getElementById("cap-modal").addEventListener("click", function(e) { if (e.target === e.currentTarget) closeCapModal(); });</script>
|
|
485
|
+
</body></html>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated by BoneScript compiler.
|
|
2
|
+
version: "3.8"
|
|
3
|
+
|
|
4
|
+
services:
|
|
5
|
+
postgres:
|
|
6
|
+
image: postgres:16-alpine
|
|
7
|
+
environment:
|
|
8
|
+
POSTGRES_DB: workspace_domain
|
|
9
|
+
POSTGRES_USER: postgres
|
|
10
|
+
POSTGRES_PASSWORD: postgres
|
|
11
|
+
ports:
|
|
12
|
+
- "5432:5432"
|
|
13
|
+
volumes:
|
|
14
|
+
- pgdata:/var/lib/postgresql/data
|
|
15
|
+
|
|
16
|
+
redis:
|
|
17
|
+
image: redis:7-alpine
|
|
18
|
+
ports:
|
|
19
|
+
- "6379:6379"
|
|
20
|
+
|
|
21
|
+
volumes:
|
|
22
|
+
pgdata:
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Generated by BoneScript compiler.
|
|
2
|
+
apiVersion: apps/v1
|
|
3
|
+
kind: Deployment
|
|
4
|
+
metadata:
|
|
5
|
+
name: workspace-domain
|
|
6
|
+
labels:
|
|
7
|
+
app: workspace-domain
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
spec:
|
|
10
|
+
replicas: 2
|
|
11
|
+
selector:
|
|
12
|
+
matchLabels:
|
|
13
|
+
app: workspace-domain
|
|
14
|
+
template:
|
|
15
|
+
metadata:
|
|
16
|
+
labels:
|
|
17
|
+
app: workspace-domain
|
|
18
|
+
spec:
|
|
19
|
+
containers:
|
|
20
|
+
- name: workspace-domain
|
|
21
|
+
image: workspace-domain:1.0.0
|
|
22
|
+
ports:
|
|
23
|
+
- containerPort: 3000
|
|
24
|
+
env:
|
|
25
|
+
- name: NODE_ENV
|
|
26
|
+
value: production
|
|
27
|
+
- name: PORT
|
|
28
|
+
value: "3000"
|
|
29
|
+
- name: DATABASE_URL
|
|
30
|
+
valueFrom:
|
|
31
|
+
secretKeyRef:
|
|
32
|
+
name: workspace-domain-secrets
|
|
33
|
+
key: database-url
|
|
34
|
+
- name: JWT_SECRET
|
|
35
|
+
valueFrom:
|
|
36
|
+
secretKeyRef:
|
|
37
|
+
name: workspace-domain-secrets
|
|
38
|
+
key: jwt-secret
|
|
39
|
+
- name: REDIS_URL
|
|
40
|
+
valueFrom:
|
|
41
|
+
secretKeyRef:
|
|
42
|
+
name: workspace-domain-secrets
|
|
43
|
+
key: redis-url
|
|
44
|
+
optional: true
|
|
45
|
+
livenessProbe:
|
|
46
|
+
httpGet:
|
|
47
|
+
path: /health/live
|
|
48
|
+
port: 3000
|
|
49
|
+
initialDelaySeconds: 10
|
|
50
|
+
periodSeconds: 10
|
|
51
|
+
readinessProbe:
|
|
52
|
+
httpGet:
|
|
53
|
+
path: /health/ready
|
|
54
|
+
port: 3000
|
|
55
|
+
initialDelaySeconds: 5
|
|
56
|
+
periodSeconds: 5
|
|
57
|
+
resources:
|
|
58
|
+
requests:
|
|
59
|
+
memory: "128Mi"
|
|
60
|
+
cpu: "100m"
|
|
61
|
+
limits:
|
|
62
|
+
memory: "512Mi"
|
|
63
|
+
cpu: "500m"
|
|
64
|
+
---
|
|
65
|
+
apiVersion: v1
|
|
66
|
+
kind: Service
|
|
67
|
+
metadata:
|
|
68
|
+
name: workspace-domain
|
|
69
|
+
spec:
|
|
70
|
+
selector:
|
|
71
|
+
app: workspace-domain
|
|
72
|
+
ports:
|
|
73
|
+
- port: 80
|
|
74
|
+
targetPort: 3000
|
|
75
|
+
type: ClusterIP
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-- Generated by BoneScript compiler.
|
|
2
|
+
-- Audit log table for tracking all mutations.
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS audit_log (
|
|
5
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
6
|
+
actor_id VARCHAR,
|
|
7
|
+
action VARCHAR NOT NULL,
|
|
8
|
+
entity_type VARCHAR,
|
|
9
|
+
entity_id VARCHAR,
|
|
10
|
+
payload JSONB,
|
|
11
|
+
ip_address VARCHAR,
|
|
12
|
+
user_agent VARCHAR,
|
|
13
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_audit_log_actor ON audit_log (actor_id, created_at);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_audit_log_entity ON audit_log (entity_type, entity_id);
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_audit_log_action ON audit_log (action, created_at);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
2
|
+
-- Source: be6ae747864f48c9
|
|
3
|
+
-- Module: CodebaseStore
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS codebases (
|
|
6
|
+
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
7
|
+
workspace_id UUID NOT NULL,
|
|
8
|
+
project_id UUID NOT NULL,
|
|
9
|
+
primary_language VARCHAR NOT NULL,
|
|
10
|
+
languages JSONB NOT NULL,
|
|
11
|
+
framework VARCHAR NOT NULL,
|
|
12
|
+
build_tool VARCHAR NOT NULL,
|
|
13
|
+
test_framework VARCHAR NOT NULL,
|
|
14
|
+
entry_points JSONB NOT NULL,
|
|
15
|
+
dependencies JSONB NOT NULL,
|
|
16
|
+
analysis_version VARCHAR NOT NULL,
|
|
17
|
+
state VARCHAR NOT NULL,
|
|
18
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
19
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
CREATE OR REPLACE FUNCTION update_codebases_updated_at()
|
|
24
|
+
RETURNS TRIGGER AS $$
|
|
25
|
+
BEGIN
|
|
26
|
+
NEW.updated_at = NOW();
|
|
27
|
+
RETURN NEW;
|
|
28
|
+
END;
|
|
29
|
+
$$ LANGUAGE plpgsql;
|
|
30
|
+
|
|
31
|
+
CREATE TRIGGER trg_codebases_updated_at
|
|
32
|
+
BEFORE UPDATE ON codebases
|
|
33
|
+
FOR EACH ROW
|
|
34
|
+
EXECUTE FUNCTION update_codebases_updated_at();
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
-- BoneScript: Transactional Outbox Schema
|
|
2
|
+
-- Generated by BoneScript compiler. DO NOT EDIT.
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS event_outbox (
|
|
5
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
6
|
+
event_type VARCHAR NOT NULL,
|
|
7
|
+
payload JSONB NOT NULL,
|
|
8
|
+
source VARCHAR NOT NULL,
|
|
9
|
+
correlation_id UUID,
|
|
10
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
11
|
+
scheduled_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
12
|
+
delivered_at TIMESTAMPTZ,
|
|
13
|
+
attempts INT NOT NULL DEFAULT 0,
|
|
14
|
+
last_error TEXT,
|
|
15
|
+
status VARCHAR NOT NULL DEFAULT 'pending'
|
|
16
|
+
CHECK (status IN ('pending', 'delivered', 'failed', 'dead_letter'))
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_event_outbox_status ON event_outbox (status, scheduled_at)
|
|
20
|
+
WHERE status = 'pending';
|
|
21
|
+
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_event_outbox_created ON event_outbox (created_at);
|
|
23
|
+
|
|
24
|
+
-- Deduplication table for exactly_once delivery
|
|
25
|
+
CREATE TABLE IF NOT EXISTS event_processed (
|
|
26
|
+
event_id UUID PRIMARY KEY,
|
|
27
|
+
event_type VARCHAR NOT NULL,
|
|
28
|
+
processed_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_event_processed_type ON event_processed (event_type, processed_at);
|