@neurocode-ai/core 1.18.8
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/bin/neurocode +199 -0
- package/bunfig.toml +2 -0
- package/drizzle.config.ts +10 -0
- package/package.json +131 -0
- package/schema.json +2071 -0
- package/script/fix-node-pty.ts +28 -0
- package/script/migration.ts +196 -0
- package/src/account/sql.ts +39 -0
- package/src/account.ts +101 -0
- package/src/agent.ts +111 -0
- package/src/aisdk.ts +235 -0
- package/src/background-job.ts +365 -0
- package/src/catalog.ts +301 -0
- package/src/command.ts +64 -0
- package/src/config/agent.ts +25 -0
- package/src/config/attachments.ts +15 -0
- package/src/config/command.ts +12 -0
- package/src/config/compaction.ts +15 -0
- package/src/config/experimental.ts +18 -0
- package/src/config/formatter.ts +12 -0
- package/src/config/lsp.ts +18 -0
- package/src/config/markdown.ts +36 -0
- package/src/config/mcp.ts +48 -0
- package/src/config/plugin/agent.ts +179 -0
- package/src/config/plugin/command.ts +83 -0
- package/src/config/plugin/external.ts +91 -0
- package/src/config/plugin/provider.ts +113 -0
- package/src/config/plugin/reference.ts +70 -0
- package/src/config/plugin/skill.ts +50 -0
- package/src/config/plugin.ts +13 -0
- package/src/config/provider.ts +71 -0
- package/src/config/reference.ts +22 -0
- package/src/config/tool-output.ts +9 -0
- package/src/config/watcher.ts +7 -0
- package/src/config.ts +227 -0
- package/src/control-plane/move-session.ts +148 -0
- package/src/control-plane/workspace.sql.ts +20 -0
- package/src/credential/sql.ts +14 -0
- package/src/credential.ts +138 -0
- package/src/cross-spawn-spawner.ts +507 -0
- package/src/data-migration.sql.ts +6 -0
- package/src/database/database.ts +57 -0
- package/src/database/migration/20260127222353_familiar_lady_ursula.ts +107 -0
- package/src/database/migration/20260211171708_add_project_commands.ts +11 -0
- package/src/database/migration/20260213144116_wakeful_the_professor.ts +23 -0
- package/src/database/migration/20260225215848_workspace.ts +19 -0
- package/src/database/migration/20260227213759_add_session_workspace_id.ts +12 -0
- package/src/database/migration/20260228203230_blue_harpoon.ts +30 -0
- package/src/database/migration/20260303231226_add_workspace_fields.ts +15 -0
- package/src/database/migration/20260309230000_move_org_to_state.ts +15 -0
- package/src/database/migration/20260312043431_session_message_cursor.ts +16 -0
- package/src/database/migration/20260323234822_events.ts +26 -0
- package/src/database/migration/20260410174513_workspace-name.ts +29 -0
- package/src/database/migration/20260413175956_chief_energizer.ts +24 -0
- package/src/database/migration/20260423070820_add_icon_url_override.ts +14 -0
- package/src/database/migration/20260427172553_slow_nightmare.ts +30 -0
- package/src/database/migration/20260428004200_add_session_path.ts +11 -0
- package/src/database/migration/20260501142318_next_venus.ts +12 -0
- package/src/database/migration/20260504145000_add_sync_owner.ts +11 -0
- package/src/database/migration/20260507164347_add_workspace_time.ts +11 -0
- package/src/database/migration/20260510033149_session_usage.ts +56 -0
- package/src/database/migration/20260511000411_data_migration_state.ts +16 -0
- package/src/database/migration/20260511173437_session-metadata.ts +16 -0
- package/src/database/migration/20260601010001_normalize_storage_paths.ts +22 -0
- package/src/database/migration/20260601202201_amazing_prowler.ts +11 -0
- package/src/database/migration/20260602002951_lowly_union_jack.ts +24 -0
- package/src/database/migration/20260602182828_add_project_directories.ts +20 -0
- package/src/database/migration/20260603001617_session_message_projection_indexes.ts +19 -0
- package/src/database/migration/20260603040000_session_message_projection_order.ts +19 -0
- package/src/database/migration/20260603141458_session_input_inbox.ts +25 -0
- package/src/database/migration/20260603160727_jittery_ezekiel_stane.ts +20 -0
- package/src/database/migration/20260604172448_event_sourced_session_input.ts +47 -0
- package/src/database/migration/20260605003541_add_session_context_snapshot.ts +21 -0
- package/src/database/migration/20260605042240_add_context_epoch_agent.ts +11 -0
- package/src/database/migration/20260611035744_credential.ts +25 -0
- package/src/database/migration/20260611192811_lush_chimera.ts +25 -0
- package/src/database/migration/20260612174303_project_dir_strategy.ts +29 -0
- package/src/database/migration/20260622142730_simplify_session_context_epoch.ts +13 -0
- package/src/database/migration/20260622170816_reset_v2_session_state.ts +17 -0
- package/src/database/migration/20260622202450_simplify_session_input.ts +17 -0
- package/src/database/migration.gen.ts +44 -0
- package/src/database/migration.ts +81 -0
- package/src/database/path.ts +91 -0
- package/src/database/schema.gen.ts +274 -0
- package/src/database/schema.sql.ts +10 -0
- package/src/database/sqlite.bun.ts +183 -0
- package/src/database/sqlite.node.ts +178 -0
- package/src/database/sqlite.ts +8 -0
- package/src/effect/app-node-builder.ts +23 -0
- package/src/effect/app-node-platform.ts +18 -0
- package/src/effect/app-node.ts +14 -0
- package/src/effect/dfdf +1 -0
- package/src/effect/keyed-mutex.ts +45 -0
- package/src/effect/layer-node.ts +333 -0
- package/src/effect/memo-map.ts +3 -0
- package/src/effect/runtime.ts +21 -0
- package/src/effect/service-use.ts +43 -0
- package/src/event/sql.ts +25 -0
- package/src/event.ts +638 -0
- package/src/file-mutation.ts +207 -0
- package/src/file.ts +6 -0
- package/src/filesystem/fff.bun.ts +140 -0
- package/src/filesystem/fff.node.ts +138 -0
- package/src/filesystem/ignore.ts +67 -0
- package/src/filesystem/protected.ts +53 -0
- package/src/filesystem/search.ts +239 -0
- package/src/filesystem/watcher.ts +140 -0
- package/src/filesystem.ts +118 -0
- package/src/flag/flag.ts +78 -0
- package/src/fs-util.ts +274 -0
- package/src/git.ts +987 -0
- package/src/github-copilot/README.md +5 -0
- package/src/github-copilot/chat/convert-to-openai-compatible-chat-messages.ts +170 -0
- package/src/github-copilot/chat/get-response-metadata.ts +15 -0
- package/src/github-copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
- package/src/github-copilot/chat/openai-compatible-api-types.ts +64 -0
- package/src/github-copilot/chat/openai-compatible-chat-language-model.ts +815 -0
- package/src/github-copilot/chat/openai-compatible-chat-options.ts +28 -0
- package/src/github-copilot/chat/openai-compatible-metadata-extractor.ts +44 -0
- package/src/github-copilot/chat/openai-compatible-prepare-tools.ts +83 -0
- package/src/github-copilot/copilot-provider.ts +100 -0
- package/src/github-copilot/openai-compatible-error.ts +27 -0
- package/src/github-copilot/responses/convert-to-openai-responses-input.ts +335 -0
- package/src/github-copilot/responses/map-openai-responses-finish-reason.ts +22 -0
- package/src/github-copilot/responses/openai-config.ts +18 -0
- package/src/github-copilot/responses/openai-error.ts +22 -0
- package/src/github-copilot/responses/openai-responses-api-types.ts +214 -0
- package/src/github-copilot/responses/openai-responses-language-model.ts +1770 -0
- package/src/github-copilot/responses/openai-responses-prepare-tools.ts +173 -0
- package/src/github-copilot/responses/openai-responses-settings.ts +1 -0
- package/src/github-copilot/responses/tool/code-interpreter.ts +87 -0
- package/src/github-copilot/responses/tool/file-search.ts +127 -0
- package/src/github-copilot/responses/tool/image-generation.ts +114 -0
- package/src/github-copilot/responses/tool/local-shell.ts +64 -0
- package/src/github-copilot/responses/tool/web-search-preview.ts +103 -0
- package/src/github-copilot/responses/tool/web-search.ts +102 -0
- package/src/global.ts +87 -0
- package/src/id/id.ts +47 -0
- package/src/image/photon.ts +94 -0
- package/src/image.ts +81 -0
- package/src/installation/version.ts +8 -0
- package/src/instruction-context.ts +101 -0
- package/src/integration/connection.ts +12 -0
- package/src/integration.ts +520 -0
- package/src/location-mutation.ts +162 -0
- package/src/location-service-map.ts +18 -0
- package/src/location-services.ts +115 -0
- package/src/location.ts +39 -0
- package/src/markdown.d.ts +4 -0
- package/src/model.ts +41 -0
- package/src/models-dev.ts +260 -0
- package/src/npm-config.ts +40 -0
- package/src/npm.ts +269 -0
- package/src/oauth/page.ts +276 -0
- package/src/observability/logging.ts +71 -0
- package/src/observability/otlp.ts +79 -0
- package/src/observability/shared.ts +1 -0
- package/src/observability.ts +24 -0
- package/src/patch.ts +197 -0
- package/src/permission/saved.ts +79 -0
- package/src/permission/sql.ts +20 -0
- package/src/permission.ts +310 -0
- package/src/plugin/agent.ts +206 -0
- package/src/plugin/command/initialize.txt +65 -0
- package/src/plugin/command/review.txt +100 -0
- package/src/plugin/command.ts +25 -0
- package/src/plugin/host.ts +219 -0
- package/src/plugin/internal.ts +153 -0
- package/src/plugin/layer-map.example.ts +94 -0
- package/src/plugin/models-dev.ts +183 -0
- package/src/plugin/promise.ts +93 -0
- package/src/plugin/provider/alibaba.ts +15 -0
- package/src/plugin/provider/amazon-bedrock.ts +126 -0
- package/src/plugin/provider/anthropic.ts +27 -0
- package/src/plugin/provider/azure.ts +82 -0
- package/src/plugin/provider/cerebras.ts +26 -0
- package/src/plugin/provider/cloudflare-ai-gateway.ts +81 -0
- package/src/plugin/provider/cloudflare-workers-ai.ts +81 -0
- package/src/plugin/provider/cohere.ts +15 -0
- package/src/plugin/provider/deepinfra.ts +15 -0
- package/src/plugin/provider/dynamic.ts +31 -0
- package/src/plugin/provider/gateway.ts +15 -0
- package/src/plugin/provider/github-copilot.ts +52 -0
- package/src/plugin/provider/gitlab.ts +65 -0
- package/src/plugin/provider/google-vertex.ts +173 -0
- package/src/plugin/provider/google.ts +15 -0
- package/src/plugin/provider/groq.ts +15 -0
- package/src/plugin/provider/kilo.ts +21 -0
- package/src/plugin/provider/llmgateway.ts +26 -0
- package/src/plugin/provider/mistral.ts +15 -0
- package/src/plugin/provider/nvidia.ts +22 -0
- package/src/plugin/provider/openai-compatible.ts +17 -0
- package/src/plugin/provider/openai.ts +292 -0
- package/src/plugin/provider/opencode.ts +311 -0
- package/src/plugin/provider/openrouter.ts +36 -0
- package/src/plugin/provider/perplexity.ts +15 -0
- package/src/plugin/provider/sap-ai-core.ts +46 -0
- package/src/plugin/provider/snowflake-cortex.ts +89 -0
- package/src/plugin/provider/togetherai.ts +15 -0
- package/src/plugin/provider/venice.ts +15 -0
- package/src/plugin/provider/vercel.ts +27 -0
- package/src/plugin/provider/xai.ts +22 -0
- package/src/plugin/provider/zenmux.ts +21 -0
- package/src/plugin/provider.ts +71 -0
- package/src/plugin/skill/customize-neurocode.md +452 -0
- package/src/plugin/skill.ts +31 -0
- package/src/plugin/variant.ts +39 -0
- package/src/plugin.ts +167 -0
- package/src/policy.ts +49 -0
- package/src/process.ts +261 -0
- package/src/project/copy-strategies.ts +35 -0
- package/src/project/copy.ts +292 -0
- package/src/project/directories.ts +158 -0
- package/src/project/schema.ts +16 -0
- package/src/project/sql.ts +35 -0
- package/src/project.ts +136 -0
- package/src/provider.ts +25 -0
- package/src/pty/protocol.ts +37 -0
- package/src/pty/pty.bun.ts +26 -0
- package/src/pty/pty.node.ts +29 -0
- package/src/pty/pty.ts +25 -0
- package/src/pty/schema.ts +1 -0
- package/src/pty/ticket.ts +56 -0
- package/src/pty.ts +318 -0
- package/src/public-event-manifest.ts +7 -0
- package/src/question.ts +153 -0
- package/src/reference/guidance.ts +69 -0
- package/src/reference.ts +125 -0
- package/src/repository-cache.ts +259 -0
- package/src/repository.ts +214 -0
- package/src/ripgrep/binary.ts +132 -0
- package/src/ripgrep.ts +281 -0
- package/src/schema.ts +79 -0
- package/src/session/compaction.ts +241 -0
- package/src/session/context-epoch.ts +174 -0
- package/src/session/error.ts +24 -0
- package/src/session/event.ts +2 -0
- package/src/session/execution/local.ts +46 -0
- package/src/session/execution.ts +34 -0
- package/src/session/history.ts +101 -0
- package/src/session/info.ts +50 -0
- package/src/session/input.ts +288 -0
- package/src/session/message-updater.ts +397 -0
- package/src/session/message.ts +2 -0
- package/src/session/projector.ts +458 -0
- package/src/session/prompt.ts +1 -0
- package/src/session/revert.ts +121 -0
- package/src/session/run-coordinator.ts +104 -0
- package/src/session/runner/index.ts +28 -0
- package/src/session/runner/llm.ts +432 -0
- package/src/session/runner/max-steps.ts +16 -0
- package/src/session/runner/model.ts +218 -0
- package/src/session/runner/publish-llm-event.ts +423 -0
- package/src/session/runner/to-llm-message.ts +171 -0
- package/src/session/schema.ts +9 -0
- package/src/session/sql.ts +176 -0
- package/src/session/store.ts +63 -0
- package/src/session/todo.ts +78 -0
- package/src/session.ts +486 -0
- package/src/share/sql.ts +13 -0
- package/src/shell.ts +226 -0
- package/src/skill/discovery.ts +213 -0
- package/src/skill/guidance.ts +76 -0
- package/src/skill.ts +132 -0
- package/src/snapshot.ts +266 -0
- package/src/state.ts +128 -0
- package/src/system-context/builtins.ts +50 -0
- package/src/system-context/index.ts +320 -0
- package/src/system-context/registry.ts +49 -0
- package/src/tool/AGENTS.md +59 -0
- package/src/tool/application-tools.ts +57 -0
- package/src/tool/apply-patch.ts +219 -0
- package/src/tool/bash.ts +207 -0
- package/src/tool/builtins.ts +48 -0
- package/src/tool/edit.ts +223 -0
- package/src/tool/glob.ts +105 -0
- package/src/tool/grep.ts +137 -0
- package/src/tool/http-body.ts +30 -0
- package/src/tool/question.ts +94 -0
- package/src/tool/read-filesystem.ts +366 -0
- package/src/tool/read.ts +117 -0
- package/src/tool/registry.ts +147 -0
- package/src/tool/skill.ts +109 -0
- package/src/tool/todowrite.ts +62 -0
- package/src/tool/tool.ts +162 -0
- package/src/tool/tools.ts +13 -0
- package/src/tool/webfetch.ts +218 -0
- package/src/tool/websearch.ts +260 -0
- package/src/tool/write.ts +101 -0
- package/src/tool-output-store.ts +211 -0
- package/src/util/array.ts +10 -0
- package/src/util/binary.ts +41 -0
- package/src/util/effect-flock.ts +284 -0
- package/src/util/encode.ts +51 -0
- package/src/util/error.ts +70 -0
- package/src/util/flock.ts +358 -0
- package/src/util/glob.ts +34 -0
- package/src/util/hash.ts +11 -0
- package/src/util/identifier.ts +1 -0
- package/src/util/iife.ts +3 -0
- package/src/util/lazy.ts +11 -0
- package/src/util/module.ts +10 -0
- package/src/util/path.ts +37 -0
- package/src/util/retry.ts +42 -0
- package/src/util/slug.ts +74 -0
- package/src/util/token.ts +5 -0
- package/src/util/which.ts +14 -0
- package/src/util/wildcard.ts +14 -0
- package/src/v1/config/agent.ts +89 -0
- package/src/v1/config/attachment.ts +25 -0
- package/src/v1/config/command.ts +13 -0
- package/src/v1/config/config.ts +192 -0
- package/src/v1/config/console-state.ts +16 -0
- package/src/v1/config/error.ts +39 -0
- package/src/v1/config/formatter.ts +13 -0
- package/src/v1/config/layout.ts +6 -0
- package/src/v1/config/lsp.ts +80 -0
- package/src/v1/config/mcp.ts +63 -0
- package/src/v1/config/migrate.ts +254 -0
- package/src/v1/config/permission.ts +50 -0
- package/src/v1/config/plugin.ts +9 -0
- package/src/v1/config/provider-options.ts +227 -0
- package/src/v1/config/provider.ts +121 -0
- package/src/v1/config/server.ts +19 -0
- package/src/v1/config/skills.ts +13 -0
- package/src/v1/permission.ts +33 -0
- package/src/v1/session.ts +68 -0
- package/src/v2-schema.ts +3 -0
- package/src/workspace.ts +6 -0
- package/sst-env.d.ts +10 -0
- package/test/agent.test.ts +131 -0
- package/test/application-tools.test.ts +287 -0
- package/test/background-job.test.ts +106 -0
- package/test/catalog.test.ts +353 -0
- package/test/command.test.ts +56 -0
- package/test/config/agent.test.ts +349 -0
- package/test/config/command.test.ts +83 -0
- package/test/config/config.test.ts +798 -0
- package/test/config/fixtures/plugin/directory-plugin.ts +13 -0
- package/test/config/plugin.test.ts +248 -0
- package/test/config/provider-options.test.ts +224 -0
- package/test/config/provider.test.ts +269 -0
- package/test/config/skill.test.ts +80 -0
- package/test/credential.test.ts +36 -0
- package/test/database-migration.test.ts +644 -0
- package/test/effect/cross-spawn-spawner.test.ts +426 -0
- package/test/effect/keyed-mutex.test.ts +73 -0
- package/test/effect/layer-node/layer-node-types.test.ts +143 -0
- package/test/effect/layer-node/layer-node.test.ts +261 -0
- package/test/effect/layer-node/node-build.test.ts +125 -0
- package/test/effect/observability.test.ts +109 -0
- package/test/event.test.ts +1124 -0
- package/test/file-mutation.test.ts +368 -0
- package/test/filesystem/filesystem.test.ts +387 -0
- package/test/filesystem/ignore.test.ts +10 -0
- package/test/filesystem/search.test.ts +44 -0
- package/test/filesystem/watcher.test.ts +266 -0
- package/test/fixture/effect-flock-worker.ts +60 -0
- package/test/fixture/flock-worker.ts +72 -0
- package/test/fixture/git.ts +49 -0
- package/test/fixture/location.ts +26 -0
- package/test/fixture/tmpdir.ts +25 -0
- package/test/fixtures/recordings/session-runner/openai-chat-streams-text.json +27 -0
- package/test/git.test.ts +164 -0
- package/test/github-copilot/convert-to-copilot-messages.test.ts +523 -0
- package/test/github-copilot/copilot-chat-model.test.ts +592 -0
- package/test/github-copilot/openai-responses-language-model.test.ts +206 -0
- package/test/global.test.ts +16 -0
- package/test/instruction-context.test.ts +323 -0
- package/test/integration.test.ts +349 -0
- package/test/legacy-event-schema.test.ts +16 -0
- package/test/lib/effect.ts +53 -0
- package/test/lib/tool.ts +20 -0
- package/test/location-filesystem.test.ts +69 -0
- package/test/location-layer.test.ts +226 -0
- package/test/location-mutation.test.ts +178 -0
- package/test/location.test.ts +42 -0
- package/test/model.test.ts +23 -0
- package/test/models.test.ts +290 -0
- package/test/move-session.test.ts +235 -0
- package/test/npm-config.test.ts +51 -0
- package/test/npm.test.ts +84 -0
- package/test/oauth-page.test.ts +15 -0
- package/test/patch.test.ts +68 -0
- package/test/permission.test.ts +315 -0
- package/test/plugin/command.test.ts +47 -0
- package/test/plugin/fixture.ts +52 -0
- package/test/plugin/fixtures/config-effect-plugin.ts +15 -0
- package/test/plugin/fixtures/config-promise-plugin.ts +13 -0
- package/test/plugin/fixtures/invalid-plugin.ts +1 -0
- package/test/plugin/fixtures/models-dev.json +14 -0
- package/test/plugin/fixtures/provider-factory.ts +9 -0
- package/test/plugin/host.ts +303 -0
- package/test/plugin/models-dev.test.ts +170 -0
- package/test/plugin/promise.test.ts +67 -0
- package/test/plugin/provider-alibaba.test.ts +92 -0
- package/test/plugin/provider-amazon-bedrock.test.ts +622 -0
- package/test/plugin/provider-anthropic.test.ts +94 -0
- package/test/plugin/provider-azure-cognitive-services.test.ts +199 -0
- package/test/plugin/provider-azure.test.ts +293 -0
- package/test/plugin/provider-cerebras.test.ts +136 -0
- package/test/plugin/provider-cloudflare-ai-gateway.test.ts +426 -0
- package/test/plugin/provider-cloudflare-workers-ai.test.ts +279 -0
- package/test/plugin/provider-cohere.test.ts +123 -0
- package/test/plugin/provider-deepinfra.test.ts +159 -0
- package/test/plugin/provider-dynamic.test.ts +184 -0
- package/test/plugin/provider-gateway.test.ts +115 -0
- package/test/plugin/provider-github-copilot.test.ts +278 -0
- package/test/plugin/provider-gitlab.test.ts +308 -0
- package/test/plugin/provider-google-vertex-anthropic.test.ts +264 -0
- package/test/plugin/provider-google-vertex.test.ts +387 -0
- package/test/plugin/provider-google.test.ts +80 -0
- package/test/plugin/provider-groq.test.ts +121 -0
- package/test/plugin/provider-kilo.test.ts +99 -0
- package/test/plugin/provider-llmgateway.test.ts +80 -0
- package/test/plugin/provider-mistral.test.ts +129 -0
- package/test/plugin/provider-nvidia.test.ts +97 -0
- package/test/plugin/provider-openai-compatible.test.ts +107 -0
- package/test/plugin/provider-openai.test.ts +176 -0
- package/test/plugin/provider-opencode.test.ts +423 -0
- package/test/plugin/provider-openrouter.test.ts +113 -0
- package/test/plugin/provider-perplexity.test.ts +122 -0
- package/test/plugin/provider-sap-ai-core.test.ts +159 -0
- package/test/plugin/provider-snowflake-cortex.test.ts +261 -0
- package/test/plugin/provider-togetherai.test.ts +129 -0
- package/test/plugin/provider-venice.test.ts +115 -0
- package/test/plugin/provider-vercel.test.ts +83 -0
- package/test/plugin/provider-xai.test.ts +125 -0
- package/test/plugin/provider-zenmux.test.ts +110 -0
- package/test/plugin/skill.test.ts +25 -0
- package/test/plugin/variant.test.ts +67 -0
- package/test/plugin.test.ts +71 -0
- package/test/policy.test.ts +85 -0
- package/test/preload.ts +5 -0
- package/test/process/process.test.ts +368 -0
- package/test/project-copy.test.ts +400 -0
- package/test/project-directories.test.ts +61 -0
- package/test/project.test.ts +221 -0
- package/test/provider-mistral.test.ts +282 -0
- package/test/provider-xai-responses.test.ts +32 -0
- package/test/pty/info-schema.test.ts +32 -0
- package/test/pty/protocol.test.ts +27 -0
- package/test/pty/pty-session.test.ts +240 -0
- package/test/pty/ticket.test.ts +62 -0
- package/test/question.test.ts +114 -0
- package/test/reference-guidance.test.ts +76 -0
- package/test/reference.test.ts +78 -0
- package/test/repository-cache.test.ts +153 -0
- package/test/repository.test.ts +71 -0
- package/test/ripgrep.test.ts +65 -0
- package/test/session-compaction.test.ts +27 -0
- package/test/session-create.test.ts +425 -0
- package/test/session-history.test.ts +165 -0
- package/test/session-projector.test.ts +533 -0
- package/test/session-prompt.test.ts +584 -0
- package/test/session-run-coordinator.test.ts +418 -0
- package/test/session-runner-message.test.ts +501 -0
- package/test/session-runner-model.test.ts +347 -0
- package/test/session-runner-recorded.test.ts +193 -0
- package/test/session-runner-tool-events.test.ts +136 -0
- package/test/session-runner-tool-registry.test.ts +452 -0
- package/test/session-runner.test.ts +3365 -0
- package/test/session-todo.test.ts +94 -0
- package/test/session-tool-progress.test.ts +158 -0
- package/test/shared-schema.test.ts +206 -0
- package/test/shell.test.ts +108 -0
- package/test/skill/guidance.test.ts +144 -0
- package/test/skill-discovery.test.ts +165 -0
- package/test/skill.test.ts +125 -0
- package/test/snapshot.test.ts +178 -0
- package/test/state.test.ts +115 -0
- package/test/system-context/builtins.test.ts +129 -0
- package/test/system-context/index.test.ts +307 -0
- package/test/system-context/registry.test.ts +114 -0
- package/test/tool-apply-patch.test.ts +436 -0
- package/test/tool-bash.test.ts +437 -0
- package/test/tool-edit.test.ts +434 -0
- package/test/tool-output-store.test.ts +247 -0
- package/test/tool-question.test.ts +162 -0
- package/test/tool-read-filesystem.test.ts +118 -0
- package/test/tool-read.test.ts +674 -0
- package/test/tool-skill.test.ts +149 -0
- package/test/tool-todowrite.test.ts +125 -0
- package/test/tool-webfetch.test.ts +281 -0
- package/test/tool-websearch.test.ts +316 -0
- package/test/tool-write.test.ts +305 -0
- package/test/util/effect-flock.test.ts +392 -0
- package/test/util/flock.test.ts +428 -0
- package/test/util/which.test.ts +100 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import type { DatabaseMigration } from "../migration"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "20260605042240_add_context_epoch_agent",
|
|
6
|
+
up(tx) {
|
|
7
|
+
return Effect.gen(function* () {
|
|
8
|
+
yield* tx.run(`ALTER TABLE \`session_context_epoch\` ADD \`agent\` text DEFAULT 'build' NOT NULL;`)
|
|
9
|
+
})
|
|
10
|
+
},
|
|
11
|
+
} satisfies DatabaseMigration.Migration
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import type { DatabaseMigration } from "../migration"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "20260611035744_credential",
|
|
6
|
+
up(tx) {
|
|
7
|
+
return Effect.gen(function* () {
|
|
8
|
+
yield* tx.run(`
|
|
9
|
+
CREATE TABLE \`credential\` (
|
|
10
|
+
\`id\` text PRIMARY KEY,
|
|
11
|
+
\`connector_id\` text NOT NULL,
|
|
12
|
+
\`method_id\` text NOT NULL,
|
|
13
|
+
\`label\` text NOT NULL,
|
|
14
|
+
\`value\` text NOT NULL,
|
|
15
|
+
\`active\` integer DEFAULT false NOT NULL,
|
|
16
|
+
\`time_created\` integer NOT NULL,
|
|
17
|
+
\`time_updated\` integer NOT NULL
|
|
18
|
+
);
|
|
19
|
+
`)
|
|
20
|
+
yield* tx.run(
|
|
21
|
+
`CREATE UNIQUE INDEX \`credential_connector_active_idx\` ON \`credential\` (\`connector_id\`) WHERE "credential"."active" = 1;`,
|
|
22
|
+
)
|
|
23
|
+
})
|
|
24
|
+
},
|
|
25
|
+
} satisfies DatabaseMigration.Migration
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import type { DatabaseMigration } from "../migration"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "20260611192811_lush_chimera",
|
|
6
|
+
up(tx) {
|
|
7
|
+
return Effect.gen(function* () {
|
|
8
|
+
yield* tx.run(`DROP INDEX IF EXISTS \`credential_connector_active_idx\`;`)
|
|
9
|
+
yield* tx.run(`DROP TABLE \`credential\`;`)
|
|
10
|
+
yield* tx.run(`
|
|
11
|
+
CREATE TABLE \`credential\` (
|
|
12
|
+
\`id\` text PRIMARY KEY,
|
|
13
|
+
\`integration_id\` text,
|
|
14
|
+
\`label\` text NOT NULL,
|
|
15
|
+
\`value\` text NOT NULL,
|
|
16
|
+
\`connector_id\` text,
|
|
17
|
+
\`method_id\` text,
|
|
18
|
+
\`active\` integer,
|
|
19
|
+
\`time_created\` integer NOT NULL,
|
|
20
|
+
\`time_updated\` integer NOT NULL
|
|
21
|
+
);
|
|
22
|
+
`)
|
|
23
|
+
})
|
|
24
|
+
},
|
|
25
|
+
} satisfies DatabaseMigration.Migration
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import type { DatabaseMigration } from "../migration"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "20260612174303_project_dir_strategy",
|
|
6
|
+
up(tx) {
|
|
7
|
+
return Effect.gen(function* () {
|
|
8
|
+
yield* tx.run(`ALTER TABLE \`project_directory\` ADD \`strategy\` text;`)
|
|
9
|
+
yield* tx.run(`PRAGMA foreign_keys=OFF;`)
|
|
10
|
+
yield* tx.run(`
|
|
11
|
+
CREATE TABLE \`__new_project_directory\` (
|
|
12
|
+
\`project_id\` text NOT NULL,
|
|
13
|
+
\`directory\` text NOT NULL,
|
|
14
|
+
\`type\` text,
|
|
15
|
+
\`strategy\` text,
|
|
16
|
+
\`time_created\` integer NOT NULL,
|
|
17
|
+
CONSTRAINT \`project_directory_pk\` PRIMARY KEY(\`project_id\`, \`directory\`),
|
|
18
|
+
CONSTRAINT \`fk_project_directory_project_id_project_id_fk\` FOREIGN KEY (\`project_id\`) REFERENCES \`project\`(\`id\`) ON DELETE CASCADE
|
|
19
|
+
);
|
|
20
|
+
`)
|
|
21
|
+
yield* tx.run(
|
|
22
|
+
`INSERT INTO \`__new_project_directory\`(\`project_id\`, \`directory\`, \`type\`, \`time_created\`) SELECT \`project_id\`, \`directory\`, \`type\`, \`time_created\` FROM \`project_directory\`;`,
|
|
23
|
+
)
|
|
24
|
+
yield* tx.run(`DROP TABLE \`project_directory\`;`)
|
|
25
|
+
yield* tx.run(`ALTER TABLE \`__new_project_directory\` RENAME TO \`project_directory\`;`)
|
|
26
|
+
yield* tx.run(`PRAGMA foreign_keys=ON;`)
|
|
27
|
+
})
|
|
28
|
+
},
|
|
29
|
+
} satisfies DatabaseMigration.Migration
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import type { DatabaseMigration } from "../migration"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "20260622142730_simplify_session_context_epoch",
|
|
6
|
+
up(tx) {
|
|
7
|
+
return Effect.gen(function* () {
|
|
8
|
+
yield* tx.run(`ALTER TABLE \`session_context_epoch\` DROP COLUMN \`agent\`;`)
|
|
9
|
+
yield* tx.run(`ALTER TABLE \`session_context_epoch\` DROP COLUMN \`replacement_seq\`;`)
|
|
10
|
+
yield* tx.run(`ALTER TABLE \`session_context_epoch\` DROP COLUMN \`revision\`;`)
|
|
11
|
+
})
|
|
12
|
+
},
|
|
13
|
+
} satisfies DatabaseMigration.Migration
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import type { DatabaseMigration } from "../migration"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "20260622170816_reset_v2_session_state",
|
|
6
|
+
up(tx) {
|
|
7
|
+
return Effect.gen(function* () {
|
|
8
|
+
yield* tx.run(`DELETE FROM \`session_context_epoch\`;`)
|
|
9
|
+
yield* tx.run(`DELETE FROM \`session_input\`;`)
|
|
10
|
+
yield* tx.run(`DELETE FROM \`session_message\`;`)
|
|
11
|
+
yield* tx.run(`DELETE FROM \`event\`;`)
|
|
12
|
+
yield* tx.run(`DELETE FROM \`event_sequence\`;`)
|
|
13
|
+
yield* tx.run(`UPDATE \`session\` SET \`workspace_id\` = NULL WHERE \`workspace_id\` IS NOT NULL;`)
|
|
14
|
+
yield* tx.run(`DELETE FROM \`workspace\`;`)
|
|
15
|
+
})
|
|
16
|
+
},
|
|
17
|
+
} satisfies DatabaseMigration.Migration
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import type { DatabaseMigration } from "../migration"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "20260622202450_simplify_session_input",
|
|
6
|
+
up(tx) {
|
|
7
|
+
return Effect.gen(function* () {
|
|
8
|
+
yield* tx.run(`DELETE FROM \`session_context_epoch\`;`)
|
|
9
|
+
yield* tx.run(`DELETE FROM \`session_input\`;`)
|
|
10
|
+
yield* tx.run(`DELETE FROM \`session_message\`;`)
|
|
11
|
+
yield* tx.run(`DELETE FROM \`event\`;`)
|
|
12
|
+
yield* tx.run(`DELETE FROM \`event_sequence\`;`)
|
|
13
|
+
yield* tx.run(`UPDATE \`session\` SET \`workspace_id\` = NULL WHERE \`workspace_id\` IS NOT NULL;`)
|
|
14
|
+
yield* tx.run(`DELETE FROM \`workspace\`;`)
|
|
15
|
+
})
|
|
16
|
+
},
|
|
17
|
+
} satisfies DatabaseMigration.Migration
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { DatabaseMigration } from "./migration"
|
|
2
|
+
|
|
3
|
+
export const migrations = (
|
|
4
|
+
await Promise.all([
|
|
5
|
+
import("./migration/20260127222353_familiar_lady_ursula"),
|
|
6
|
+
import("./migration/20260211171708_add_project_commands"),
|
|
7
|
+
import("./migration/20260213144116_wakeful_the_professor"),
|
|
8
|
+
import("./migration/20260225215848_workspace"),
|
|
9
|
+
import("./migration/20260227213759_add_session_workspace_id"),
|
|
10
|
+
import("./migration/20260228203230_blue_harpoon"),
|
|
11
|
+
import("./migration/20260303231226_add_workspace_fields"),
|
|
12
|
+
import("./migration/20260309230000_move_org_to_state"),
|
|
13
|
+
import("./migration/20260312043431_session_message_cursor"),
|
|
14
|
+
import("./migration/20260323234822_events"),
|
|
15
|
+
import("./migration/20260410174513_workspace-name"),
|
|
16
|
+
import("./migration/20260413175956_chief_energizer"),
|
|
17
|
+
import("./migration/20260423070820_add_icon_url_override"),
|
|
18
|
+
import("./migration/20260427172553_slow_nightmare"),
|
|
19
|
+
import("./migration/20260428004200_add_session_path"),
|
|
20
|
+
import("./migration/20260501142318_next_venus"),
|
|
21
|
+
import("./migration/20260504145000_add_sync_owner"),
|
|
22
|
+
import("./migration/20260507164347_add_workspace_time"),
|
|
23
|
+
import("./migration/20260510033149_session_usage"),
|
|
24
|
+
import("./migration/20260511000411_data_migration_state"),
|
|
25
|
+
import("./migration/20260511173437_session-metadata"),
|
|
26
|
+
import("./migration/20260601010001_normalize_storage_paths"),
|
|
27
|
+
import("./migration/20260601202201_amazing_prowler"),
|
|
28
|
+
import("./migration/20260602002951_lowly_union_jack"),
|
|
29
|
+
import("./migration/20260602182828_add_project_directories"),
|
|
30
|
+
import("./migration/20260603001617_session_message_projection_indexes"),
|
|
31
|
+
import("./migration/20260603040000_session_message_projection_order"),
|
|
32
|
+
import("./migration/20260603141458_session_input_inbox"),
|
|
33
|
+
import("./migration/20260603160727_jittery_ezekiel_stane"),
|
|
34
|
+
import("./migration/20260604172448_event_sourced_session_input"),
|
|
35
|
+
import("./migration/20260605003541_add_session_context_snapshot"),
|
|
36
|
+
import("./migration/20260605042240_add_context_epoch_agent"),
|
|
37
|
+
import("./migration/20260611035744_credential"),
|
|
38
|
+
import("./migration/20260611192811_lush_chimera"),
|
|
39
|
+
import("./migration/20260612174303_project_dir_strategy"),
|
|
40
|
+
import("./migration/20260622142730_simplify_session_context_epoch"),
|
|
41
|
+
import("./migration/20260622170816_reset_v2_session_state"),
|
|
42
|
+
import("./migration/20260622202450_simplify_session_input"),
|
|
43
|
+
])
|
|
44
|
+
).map((module) => module.default) satisfies DatabaseMigration.Migration[]
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export * as DatabaseMigration from "./migration"
|
|
2
|
+
|
|
3
|
+
import { sql } from "drizzle-orm"
|
|
4
|
+
import { Effect, Semaphore } from "effect"
|
|
5
|
+
import type { EffectDrizzleSqlite } from "@neurocode-ai/effect-drizzle-sqlite"
|
|
6
|
+
import { migrations } from "./migration.gen"
|
|
7
|
+
import schema from "./schema.gen"
|
|
8
|
+
|
|
9
|
+
type Database = EffectDrizzleSqlite.EffectSQLiteDatabase
|
|
10
|
+
type Transaction = Parameters<Parameters<Database["transaction"]>[0]>[0]
|
|
11
|
+
const lock = Semaphore.makeUnsafe(1)
|
|
12
|
+
|
|
13
|
+
export type Migration = {
|
|
14
|
+
id: string
|
|
15
|
+
up: (tx: Transaction) => Effect.Effect<void, unknown>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function apply(db: Database) {
|
|
19
|
+
return lock.withPermit(
|
|
20
|
+
Effect.gen(function* () {
|
|
21
|
+
const tables = yield* db.all<{ name: string }>(
|
|
22
|
+
sql`SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'`,
|
|
23
|
+
)
|
|
24
|
+
if (tables.some((table) => table.name === "session")) return yield* applyOnly(db, migrations)
|
|
25
|
+
if (tables.length > 0) return yield* Effect.die("Database is not empty and has no session table")
|
|
26
|
+
yield* db.transaction((tx) =>
|
|
27
|
+
Effect.gen(function* () {
|
|
28
|
+
yield* schema.up(tx)
|
|
29
|
+
yield* tx.run(
|
|
30
|
+
sql`CREATE TABLE ${sql.identifier("migration")} (id TEXT PRIMARY KEY, time_completed INTEGER NOT NULL)`,
|
|
31
|
+
)
|
|
32
|
+
yield* Effect.forEach(migrations, (migration) =>
|
|
33
|
+
tx.run(
|
|
34
|
+
sql`INSERT INTO ${sql.identifier("migration")} (id, time_completed) VALUES (${migration.id}, ${Date.now()})`,
|
|
35
|
+
),
|
|
36
|
+
)
|
|
37
|
+
}),
|
|
38
|
+
)
|
|
39
|
+
}),
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function applyOnly(db: Database, input: Migration[]) {
|
|
44
|
+
return Effect.gen(function* () {
|
|
45
|
+
yield* db.run(
|
|
46
|
+
sql`CREATE TABLE IF NOT EXISTS ${sql.identifier("migration")} (id TEXT PRIMARY KEY, time_completed INTEGER NOT NULL)`,
|
|
47
|
+
)
|
|
48
|
+
let completed = new Set(
|
|
49
|
+
(yield* db.all<{ id: string }>(sql`SELECT id FROM ${sql.identifier("migration")}`)).map((row) => row.id),
|
|
50
|
+
)
|
|
51
|
+
if (completed.size === 0) {
|
|
52
|
+
// Existing installs used Drizzle's migration journal. Seed the new
|
|
53
|
+
// journal once so TypeScript migrations don't replay old SQL.
|
|
54
|
+
if (
|
|
55
|
+
yield* db.get(sql`SELECT name FROM sqlite_master WHERE type = 'table' AND name = ${"__drizzle_migrations"}`)
|
|
56
|
+
) {
|
|
57
|
+
yield* db.run(sql`
|
|
58
|
+
INSERT OR IGNORE INTO ${sql.identifier("migration")} (id, time_completed)
|
|
59
|
+
SELECT name, ${Date.now()}
|
|
60
|
+
FROM ${sql.identifier("__drizzle_migrations")}
|
|
61
|
+
WHERE name IS NOT NULL
|
|
62
|
+
`)
|
|
63
|
+
completed = new Set(
|
|
64
|
+
(yield* db.all<{ id: string }>(sql`SELECT id FROM ${sql.identifier("migration")}`)).map((row) => row.id),
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
for (const migration of input) {
|
|
70
|
+
if (completed.has(migration.id)) continue
|
|
71
|
+
yield* db.transaction((tx) =>
|
|
72
|
+
Effect.gen(function* () {
|
|
73
|
+
yield* migration.up(tx)
|
|
74
|
+
yield* tx.run(
|
|
75
|
+
sql`INSERT INTO ${sql.identifier("migration")} (id, time_completed) VALUES (${migration.id}, ${Date.now()})`,
|
|
76
|
+
)
|
|
77
|
+
}),
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import nodePath from "path"
|
|
2
|
+
import { customType } from "drizzle-orm/sqlite-core"
|
|
3
|
+
import { AbsolutePath } from "../schema"
|
|
4
|
+
|
|
5
|
+
function storagePath(input: string) {
|
|
6
|
+
if (process.platform !== "win32") return input
|
|
7
|
+
return input.replaceAll("\\", "/")
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function isWindowsStoragePath(input: string) {
|
|
11
|
+
return /^[A-Za-z]:\//.test(input) || input.startsWith("//")
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function absolute(input: string) {
|
|
15
|
+
const result = storagePath(input)
|
|
16
|
+
if (!nodePath.posix.isAbsolute(result) && !(process.platform === "win32" && isWindowsStoragePath(result))) {
|
|
17
|
+
throw new Error(`Path is not absolute: ${input}`)
|
|
18
|
+
}
|
|
19
|
+
return result
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function toPlatform(input: string) {
|
|
23
|
+
if (process.platform !== "win32" || !isWindowsStoragePath(input)) return input
|
|
24
|
+
return input.replaceAll("/", "\\")
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const absoluteColumn = customType<{
|
|
28
|
+
data: AbsolutePath
|
|
29
|
+
driverData: string
|
|
30
|
+
driverOutput: string
|
|
31
|
+
}>({
|
|
32
|
+
dataType() {
|
|
33
|
+
return "text"
|
|
34
|
+
},
|
|
35
|
+
toDriver(input) {
|
|
36
|
+
return absolute(input)
|
|
37
|
+
},
|
|
38
|
+
fromDriver(input) {
|
|
39
|
+
return AbsolutePath.make(toPlatform(absolute(input)))
|
|
40
|
+
},
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
// Legacy sessions may persist an empty directory. Keep that existing value
|
|
44
|
+
// readable while normalizing and validating every real directory.
|
|
45
|
+
export const directoryColumn = customType<{
|
|
46
|
+
data: string
|
|
47
|
+
driverData: string
|
|
48
|
+
driverOutput: string
|
|
49
|
+
}>({
|
|
50
|
+
dataType() {
|
|
51
|
+
return "text"
|
|
52
|
+
},
|
|
53
|
+
toDriver(input) {
|
|
54
|
+
return input ? absolute(input) : input
|
|
55
|
+
},
|
|
56
|
+
fromDriver(input) {
|
|
57
|
+
return input ? toPlatform(absolute(input)) : input
|
|
58
|
+
},
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
export const pathColumn = customType<{
|
|
62
|
+
data: string
|
|
63
|
+
driverData: string
|
|
64
|
+
driverOutput: string
|
|
65
|
+
}>({
|
|
66
|
+
dataType() {
|
|
67
|
+
return "text"
|
|
68
|
+
},
|
|
69
|
+
toDriver(input) {
|
|
70
|
+
return storagePath(input)
|
|
71
|
+
},
|
|
72
|
+
fromDriver(input) {
|
|
73
|
+
return storagePath(input)
|
|
74
|
+
},
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
export const absoluteArrayColumn = customType<{
|
|
78
|
+
data: AbsolutePath[]
|
|
79
|
+
driverData: string
|
|
80
|
+
driverOutput: string
|
|
81
|
+
}>({
|
|
82
|
+
dataType() {
|
|
83
|
+
return "text"
|
|
84
|
+
},
|
|
85
|
+
toDriver(input) {
|
|
86
|
+
return JSON.stringify(input.map(absolute))
|
|
87
|
+
},
|
|
88
|
+
fromDriver(input) {
|
|
89
|
+
return (JSON.parse(input) as string[]).map((item) => AbsolutePath.make(toPlatform(absolute(item))))
|
|
90
|
+
},
|
|
91
|
+
})
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import type { DatabaseMigration } from "./migration"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
up(tx) {
|
|
6
|
+
return Effect.gen(function* () {
|
|
7
|
+
yield* tx.run(`
|
|
8
|
+
CREATE TABLE \`workspace\` (
|
|
9
|
+
\`id\` text PRIMARY KEY,
|
|
10
|
+
\`type\` text NOT NULL,
|
|
11
|
+
\`name\` text DEFAULT '' NOT NULL,
|
|
12
|
+
\`branch\` text,
|
|
13
|
+
\`directory\` text,
|
|
14
|
+
\`extra\` text,
|
|
15
|
+
\`project_id\` text NOT NULL,
|
|
16
|
+
\`time_used\` integer NOT NULL,
|
|
17
|
+
CONSTRAINT \`fk_workspace_project_id_project_id_fk\` FOREIGN KEY (\`project_id\`) REFERENCES \`project\`(\`id\`) ON DELETE CASCADE
|
|
18
|
+
);
|
|
19
|
+
`)
|
|
20
|
+
yield* tx.run(`
|
|
21
|
+
CREATE TABLE \`data_migration\` (
|
|
22
|
+
\`name\` text PRIMARY KEY,
|
|
23
|
+
\`time_completed\` integer NOT NULL
|
|
24
|
+
);
|
|
25
|
+
`)
|
|
26
|
+
yield* tx.run(`
|
|
27
|
+
CREATE TABLE \`account_state\` (
|
|
28
|
+
\`id\` integer PRIMARY KEY,
|
|
29
|
+
\`active_account_id\` text,
|
|
30
|
+
\`active_org_id\` text,
|
|
31
|
+
CONSTRAINT \`fk_account_state_active_account_id_account_id_fk\` FOREIGN KEY (\`active_account_id\`) REFERENCES \`account\`(\`id\`) ON DELETE SET NULL
|
|
32
|
+
);
|
|
33
|
+
`)
|
|
34
|
+
yield* tx.run(`
|
|
35
|
+
CREATE TABLE \`account\` (
|
|
36
|
+
\`id\` text PRIMARY KEY,
|
|
37
|
+
\`email\` text NOT NULL,
|
|
38
|
+
\`url\` text NOT NULL,
|
|
39
|
+
\`access_token\` text NOT NULL,
|
|
40
|
+
\`refresh_token\` text NOT NULL,
|
|
41
|
+
\`token_expiry\` integer,
|
|
42
|
+
\`time_created\` integer NOT NULL,
|
|
43
|
+
\`time_updated\` integer NOT NULL
|
|
44
|
+
);
|
|
45
|
+
`)
|
|
46
|
+
yield* tx.run(`
|
|
47
|
+
CREATE TABLE \`control_account\` (
|
|
48
|
+
\`email\` text NOT NULL,
|
|
49
|
+
\`url\` text NOT NULL,
|
|
50
|
+
\`access_token\` text NOT NULL,
|
|
51
|
+
\`refresh_token\` text NOT NULL,
|
|
52
|
+
\`token_expiry\` integer,
|
|
53
|
+
\`active\` integer NOT NULL,
|
|
54
|
+
\`time_created\` integer NOT NULL,
|
|
55
|
+
\`time_updated\` integer NOT NULL,
|
|
56
|
+
CONSTRAINT \`control_account_pk\` PRIMARY KEY(\`email\`, \`url\`)
|
|
57
|
+
);
|
|
58
|
+
`)
|
|
59
|
+
yield* tx.run(`
|
|
60
|
+
CREATE TABLE \`credential\` (
|
|
61
|
+
\`id\` text PRIMARY KEY,
|
|
62
|
+
\`integration_id\` text,
|
|
63
|
+
\`label\` text NOT NULL,
|
|
64
|
+
\`value\` text NOT NULL,
|
|
65
|
+
\`connector_id\` text,
|
|
66
|
+
\`method_id\` text,
|
|
67
|
+
\`active\` integer,
|
|
68
|
+
\`time_created\` integer NOT NULL,
|
|
69
|
+
\`time_updated\` integer NOT NULL
|
|
70
|
+
);
|
|
71
|
+
`)
|
|
72
|
+
yield* tx.run(`
|
|
73
|
+
CREATE TABLE \`event_sequence\` (
|
|
74
|
+
\`aggregate_id\` text PRIMARY KEY,
|
|
75
|
+
\`seq\` integer NOT NULL,
|
|
76
|
+
\`owner_id\` text
|
|
77
|
+
);
|
|
78
|
+
`)
|
|
79
|
+
yield* tx.run(`
|
|
80
|
+
CREATE TABLE \`event\` (
|
|
81
|
+
\`id\` text PRIMARY KEY,
|
|
82
|
+
\`aggregate_id\` text NOT NULL,
|
|
83
|
+
\`seq\` integer NOT NULL,
|
|
84
|
+
\`type\` text NOT NULL,
|
|
85
|
+
\`data\` text NOT NULL,
|
|
86
|
+
CONSTRAINT \`fk_event_aggregate_id_event_sequence_aggregate_id_fk\` FOREIGN KEY (\`aggregate_id\`) REFERENCES \`event_sequence\`(\`aggregate_id\`) ON DELETE CASCADE
|
|
87
|
+
);
|
|
88
|
+
`)
|
|
89
|
+
yield* tx.run(`
|
|
90
|
+
CREATE TABLE \`permission\` (
|
|
91
|
+
\`id\` text PRIMARY KEY,
|
|
92
|
+
\`project_id\` text NOT NULL,
|
|
93
|
+
\`action\` text NOT NULL,
|
|
94
|
+
\`resource\` text NOT NULL,
|
|
95
|
+
\`time_created\` integer NOT NULL,
|
|
96
|
+
\`time_updated\` integer NOT NULL,
|
|
97
|
+
CONSTRAINT \`fk_permission_project_id_project_id_fk\` FOREIGN KEY (\`project_id\`) REFERENCES \`project\`(\`id\`) ON DELETE CASCADE
|
|
98
|
+
);
|
|
99
|
+
`)
|
|
100
|
+
yield* tx.run(`
|
|
101
|
+
CREATE TABLE \`project_directory\` (
|
|
102
|
+
\`project_id\` text NOT NULL,
|
|
103
|
+
\`directory\` text NOT NULL,
|
|
104
|
+
\`type\` text,
|
|
105
|
+
\`strategy\` text,
|
|
106
|
+
\`time_created\` integer NOT NULL,
|
|
107
|
+
CONSTRAINT \`project_directory_pk\` PRIMARY KEY(\`project_id\`, \`directory\`),
|
|
108
|
+
CONSTRAINT \`fk_project_directory_project_id_project_id_fk\` FOREIGN KEY (\`project_id\`) REFERENCES \`project\`(\`id\`) ON DELETE CASCADE
|
|
109
|
+
);
|
|
110
|
+
`)
|
|
111
|
+
yield* tx.run(`
|
|
112
|
+
CREATE TABLE \`project\` (
|
|
113
|
+
\`id\` text PRIMARY KEY,
|
|
114
|
+
\`worktree\` text NOT NULL,
|
|
115
|
+
\`vcs\` text,
|
|
116
|
+
\`name\` text,
|
|
117
|
+
\`icon_url\` text,
|
|
118
|
+
\`icon_url_override\` text,
|
|
119
|
+
\`icon_color\` text,
|
|
120
|
+
\`time_created\` integer NOT NULL,
|
|
121
|
+
\`time_updated\` integer NOT NULL,
|
|
122
|
+
\`time_initialized\` integer,
|
|
123
|
+
\`sandboxes\` text NOT NULL,
|
|
124
|
+
\`commands\` text
|
|
125
|
+
);
|
|
126
|
+
`)
|
|
127
|
+
yield* tx.run(`
|
|
128
|
+
CREATE TABLE \`message\` (
|
|
129
|
+
\`id\` text PRIMARY KEY,
|
|
130
|
+
\`session_id\` text NOT NULL,
|
|
131
|
+
\`time_created\` integer NOT NULL,
|
|
132
|
+
\`time_updated\` integer NOT NULL,
|
|
133
|
+
\`data\` text NOT NULL,
|
|
134
|
+
CONSTRAINT \`fk_message_session_id_session_id_fk\` FOREIGN KEY (\`session_id\`) REFERENCES \`session\`(\`id\`) ON DELETE CASCADE
|
|
135
|
+
);
|
|
136
|
+
`)
|
|
137
|
+
yield* tx.run(`
|
|
138
|
+
CREATE TABLE \`part\` (
|
|
139
|
+
\`id\` text PRIMARY KEY,
|
|
140
|
+
\`message_id\` text NOT NULL,
|
|
141
|
+
\`session_id\` text NOT NULL,
|
|
142
|
+
\`time_created\` integer NOT NULL,
|
|
143
|
+
\`time_updated\` integer NOT NULL,
|
|
144
|
+
\`data\` text NOT NULL,
|
|
145
|
+
CONSTRAINT \`fk_part_message_id_message_id_fk\` FOREIGN KEY (\`message_id\`) REFERENCES \`message\`(\`id\`) ON DELETE CASCADE
|
|
146
|
+
);
|
|
147
|
+
`)
|
|
148
|
+
yield* tx.run(`
|
|
149
|
+
CREATE TABLE \`session_context_epoch\` (
|
|
150
|
+
\`session_id\` text PRIMARY KEY,
|
|
151
|
+
\`baseline\` text NOT NULL,
|
|
152
|
+
\`snapshot\` text NOT NULL,
|
|
153
|
+
\`baseline_seq\` integer NOT NULL,
|
|
154
|
+
CONSTRAINT \`fk_session_context_epoch_session_id_session_id_fk\` FOREIGN KEY (\`session_id\`) REFERENCES \`session\`(\`id\`) ON DELETE CASCADE
|
|
155
|
+
);
|
|
156
|
+
`)
|
|
157
|
+
yield* tx.run(`
|
|
158
|
+
CREATE TABLE \`session_input\` (
|
|
159
|
+
\`id\` text PRIMARY KEY,
|
|
160
|
+
\`session_id\` text NOT NULL,
|
|
161
|
+
\`prompt\` text NOT NULL,
|
|
162
|
+
\`delivery\` text NOT NULL,
|
|
163
|
+
\`admitted_seq\` integer NOT NULL,
|
|
164
|
+
\`promoted_seq\` integer,
|
|
165
|
+
\`time_created\` integer NOT NULL,
|
|
166
|
+
CONSTRAINT \`fk_session_input_session_id_session_id_fk\` FOREIGN KEY (\`session_id\`) REFERENCES \`session\`(\`id\`) ON DELETE CASCADE
|
|
167
|
+
);
|
|
168
|
+
`)
|
|
169
|
+
yield* tx.run(`
|
|
170
|
+
CREATE TABLE \`session_message\` (
|
|
171
|
+
\`id\` text PRIMARY KEY,
|
|
172
|
+
\`session_id\` text NOT NULL,
|
|
173
|
+
\`type\` text NOT NULL,
|
|
174
|
+
\`seq\` integer NOT NULL,
|
|
175
|
+
\`time_created\` integer NOT NULL,
|
|
176
|
+
\`time_updated\` integer NOT NULL,
|
|
177
|
+
\`data\` text NOT NULL,
|
|
178
|
+
CONSTRAINT \`fk_session_message_session_id_session_id_fk\` FOREIGN KEY (\`session_id\`) REFERENCES \`session\`(\`id\`) ON DELETE CASCADE
|
|
179
|
+
);
|
|
180
|
+
`)
|
|
181
|
+
yield* tx.run(`
|
|
182
|
+
CREATE TABLE \`session\` (
|
|
183
|
+
\`id\` text PRIMARY KEY,
|
|
184
|
+
\`project_id\` text NOT NULL,
|
|
185
|
+
\`workspace_id\` text,
|
|
186
|
+
\`parent_id\` text,
|
|
187
|
+
\`slug\` text NOT NULL,
|
|
188
|
+
\`directory\` text NOT NULL,
|
|
189
|
+
\`path\` text,
|
|
190
|
+
\`title\` text NOT NULL,
|
|
191
|
+
\`version\` text NOT NULL,
|
|
192
|
+
\`share_url\` text,
|
|
193
|
+
\`summary_additions\` integer,
|
|
194
|
+
\`summary_deletions\` integer,
|
|
195
|
+
\`summary_files\` integer,
|
|
196
|
+
\`summary_diffs\` text,
|
|
197
|
+
\`metadata\` text,
|
|
198
|
+
\`cost\` real DEFAULT 0 NOT NULL,
|
|
199
|
+
\`tokens_input\` integer DEFAULT 0 NOT NULL,
|
|
200
|
+
\`tokens_output\` integer DEFAULT 0 NOT NULL,
|
|
201
|
+
\`tokens_reasoning\` integer DEFAULT 0 NOT NULL,
|
|
202
|
+
\`tokens_cache_read\` integer DEFAULT 0 NOT NULL,
|
|
203
|
+
\`tokens_cache_write\` integer DEFAULT 0 NOT NULL,
|
|
204
|
+
\`revert\` text,
|
|
205
|
+
\`permission\` text,
|
|
206
|
+
\`agent\` text,
|
|
207
|
+
\`model\` text,
|
|
208
|
+
\`time_created\` integer NOT NULL,
|
|
209
|
+
\`time_updated\` integer NOT NULL,
|
|
210
|
+
\`time_compacting\` integer,
|
|
211
|
+
\`time_archived\` integer,
|
|
212
|
+
CONSTRAINT \`fk_session_project_id_project_id_fk\` FOREIGN KEY (\`project_id\`) REFERENCES \`project\`(\`id\`) ON DELETE CASCADE
|
|
213
|
+
);
|
|
214
|
+
`)
|
|
215
|
+
yield* tx.run(`
|
|
216
|
+
CREATE TABLE \`todo\` (
|
|
217
|
+
\`session_id\` text NOT NULL,
|
|
218
|
+
\`content\` text NOT NULL,
|
|
219
|
+
\`status\` text NOT NULL,
|
|
220
|
+
\`priority\` text NOT NULL,
|
|
221
|
+
\`position\` integer NOT NULL,
|
|
222
|
+
\`time_created\` integer NOT NULL,
|
|
223
|
+
\`time_updated\` integer NOT NULL,
|
|
224
|
+
CONSTRAINT \`todo_pk\` PRIMARY KEY(\`session_id\`, \`position\`),
|
|
225
|
+
CONSTRAINT \`fk_todo_session_id_session_id_fk\` FOREIGN KEY (\`session_id\`) REFERENCES \`session\`(\`id\`) ON DELETE CASCADE
|
|
226
|
+
);
|
|
227
|
+
`)
|
|
228
|
+
yield* tx.run(`
|
|
229
|
+
CREATE TABLE \`session_share\` (
|
|
230
|
+
\`session_id\` text PRIMARY KEY,
|
|
231
|
+
\`id\` text NOT NULL,
|
|
232
|
+
\`secret\` text NOT NULL,
|
|
233
|
+
\`url\` text NOT NULL,
|
|
234
|
+
\`time_created\` integer NOT NULL,
|
|
235
|
+
\`time_updated\` integer NOT NULL,
|
|
236
|
+
CONSTRAINT \`fk_session_share_session_id_session_id_fk\` FOREIGN KEY (\`session_id\`) REFERENCES \`session\`(\`id\`) ON DELETE CASCADE
|
|
237
|
+
);
|
|
238
|
+
`)
|
|
239
|
+
yield* tx.run(`CREATE UNIQUE INDEX \`event_aggregate_seq_idx\` ON \`event\` (\`aggregate_id\`,\`seq\`);`)
|
|
240
|
+
yield* tx.run(`CREATE INDEX \`event_aggregate_type_seq_idx\` ON \`event\` (\`aggregate_id\`,\`type\`,\`seq\`);`)
|
|
241
|
+
yield* tx.run(
|
|
242
|
+
`CREATE UNIQUE INDEX \`permission_project_action_resource_idx\` ON \`permission\` (\`project_id\`,\`action\`,\`resource\`);`,
|
|
243
|
+
)
|
|
244
|
+
yield* tx.run(
|
|
245
|
+
`CREATE INDEX \`message_session_time_created_id_idx\` ON \`message\` (\`session_id\`,\`time_created\`,\`id\`);`,
|
|
246
|
+
)
|
|
247
|
+
yield* tx.run(`CREATE INDEX \`part_message_id_id_idx\` ON \`part\` (\`message_id\`,\`id\`);`)
|
|
248
|
+
yield* tx.run(`CREATE INDEX \`part_session_idx\` ON \`part\` (\`session_id\`);`)
|
|
249
|
+
yield* tx.run(
|
|
250
|
+
`CREATE INDEX \`session_input_session_pending_delivery_seq_idx\` ON \`session_input\` (\`session_id\`,\`promoted_seq\`,\`delivery\`,\`admitted_seq\`);`,
|
|
251
|
+
)
|
|
252
|
+
yield* tx.run(
|
|
253
|
+
`CREATE UNIQUE INDEX \`session_input_session_admitted_seq_idx\` ON \`session_input\` (\`session_id\`,\`admitted_seq\`);`,
|
|
254
|
+
)
|
|
255
|
+
yield* tx.run(
|
|
256
|
+
`CREATE UNIQUE INDEX \`session_input_session_promoted_seq_idx\` ON \`session_input\` (\`session_id\`,\`promoted_seq\`);`,
|
|
257
|
+
)
|
|
258
|
+
yield* tx.run(
|
|
259
|
+
`CREATE UNIQUE INDEX \`session_message_session_seq_idx\` ON \`session_message\` (\`session_id\`,\`seq\`);`,
|
|
260
|
+
)
|
|
261
|
+
yield* tx.run(
|
|
262
|
+
`CREATE INDEX \`session_message_session_type_seq_idx\` ON \`session_message\` (\`session_id\`,\`type\`,\`seq\`);`,
|
|
263
|
+
)
|
|
264
|
+
yield* tx.run(
|
|
265
|
+
`CREATE INDEX \`session_message_session_time_created_id_idx\` ON \`session_message\` (\`session_id\`,\`time_created\`,\`id\`);`,
|
|
266
|
+
)
|
|
267
|
+
yield* tx.run(`CREATE INDEX \`session_message_time_created_idx\` ON \`session_message\` (\`time_created\`);`)
|
|
268
|
+
yield* tx.run(`CREATE INDEX \`session_project_idx\` ON \`session\` (\`project_id\`);`)
|
|
269
|
+
yield* tx.run(`CREATE INDEX \`session_workspace_idx\` ON \`session\` (\`workspace_id\`);`)
|
|
270
|
+
yield* tx.run(`CREATE INDEX \`session_parent_idx\` ON \`session\` (\`parent_id\`);`)
|
|
271
|
+
yield* tx.run(`CREATE INDEX \`todo_session_idx\` ON \`todo\` (\`session_id\`);`)
|
|
272
|
+
})
|
|
273
|
+
},
|
|
274
|
+
} satisfies Omit<DatabaseMigration.Migration, "id">
|