agor-live 0.22.0 → 0.23.1
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/dist/cli/commands/admin/add-to-branch-group.d.ts +2 -13
- package/dist/cli/commands/admin/add-to-branch-group.d.ts.map +1 -1
- package/dist/cli/commands/admin/add-to-branch-group.js +133 -33
- package/dist/cli/commands/admin/create-branch-group.d.ts +2 -13
- package/dist/cli/commands/admin/create-branch-group.d.ts.map +1 -1
- package/dist/cli/commands/admin/create-branch-group.js +132 -38
- package/dist/cli/commands/admin/create-symlink.d.ts +2 -14
- package/dist/cli/commands/admin/create-symlink.d.ts.map +1 -1
- package/dist/cli/commands/admin/create-symlink.js +138 -61
- package/dist/cli/commands/admin/delete-branch-group.d.ts +2 -13
- package/dist/cli/commands/admin/delete-branch-group.d.ts.map +1 -1
- package/dist/cli/commands/admin/delete-branch-group.js +132 -28
- package/dist/cli/commands/admin/delete-user.d.ts +2 -13
- package/dist/cli/commands/admin/delete-user.d.ts.map +1 -1
- package/dist/cli/commands/admin/delete-user.js +132 -38
- package/dist/cli/commands/admin/ensure-user.d.ts +2 -14
- package/dist/cli/commands/admin/ensure-user.d.ts.map +1 -1
- package/dist/cli/commands/admin/ensure-user.js +131 -46
- package/dist/cli/commands/admin/remove-from-branch-group.d.ts +2 -13
- package/dist/cli/commands/admin/remove-from-branch-group.d.ts.map +1 -1
- package/dist/cli/commands/admin/remove-from-branch-group.js +133 -33
- package/dist/cli/commands/admin/remove-symlink.d.ts +2 -14
- package/dist/cli/commands/admin/remove-symlink.d.ts.map +1 -1
- package/dist/cli/commands/admin/remove-symlink.js +136 -49
- package/dist/cli/commands/admin/scrub-git-remotes.d.ts +2 -2
- package/dist/cli/commands/admin/scrub-git-remotes.d.ts.map +1 -1
- package/dist/cli/commands/admin/scrub-git-remotes.js +128 -86
- package/dist/cli/commands/admin/sync-user-symlinks.d.ts +2 -14
- package/dist/cli/commands/admin/sync-user-symlinks.d.ts.map +1 -1
- package/dist/cli/commands/admin/sync-user-symlinks.js +132 -43
- package/dist/cli/commands/auth/whoami.d.ts.map +1 -1
- package/dist/cli/commands/auth/whoami.js +2 -1
- package/dist/cli/commands/branch/env/request.test.d.ts +2 -0
- package/dist/cli/commands/branch/env/request.test.d.ts.map +1 -0
- package/dist/cli/commands/branch/env/request.test.js +17723 -0
- package/dist/cli/commands/branch/env/restart.d.ts.map +1 -1
- package/dist/cli/commands/branch/env/restart.js +7 -1
- package/dist/cli/commands/branch/env/start.d.ts.map +1 -1
- package/dist/cli/commands/branch/env/start.js +7 -1
- package/dist/cli/commands/branch/env/stop.d.ts.map +1 -1
- package/dist/cli/commands/branch/env/stop.js +7 -1
- package/dist/cli/commands/daemon/status.d.ts.map +1 -1
- package/dist/cli/commands/daemon/status.js +2 -1
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +140 -2
- package/dist/cli/commands/local/add-to-branch-group.d.ts +13 -0
- package/dist/cli/commands/local/add-to-branch-group.d.ts.map +1 -0
- package/dist/cli/commands/local/add-to-branch-group.js +37 -0
- package/dist/cli/commands/local/create-branch-group.d.ts +12 -0
- package/dist/cli/commands/local/create-branch-group.d.ts.map +1 -0
- package/dist/cli/commands/local/create-branch-group.js +35 -0
- package/dist/cli/commands/local/create-symlink.d.ts +14 -0
- package/dist/cli/commands/local/create-symlink.d.ts.map +1 -0
- package/dist/cli/commands/local/create-symlink.js +45 -0
- package/dist/cli/commands/{daemon → local/daemon}/sync.d.ts +1 -1
- package/dist/cli/commands/local/daemon/sync.d.ts.map +1 -0
- package/dist/cli/commands/{daemon → local/daemon}/sync.js +7 -6
- package/dist/cli/commands/local/delete-branch-group.d.ts +12 -0
- package/dist/cli/commands/local/delete-branch-group.d.ts.map +1 -0
- package/dist/cli/commands/local/delete-branch-group.js +35 -0
- package/dist/cli/commands/local/delete-user.d.ts +12 -0
- package/dist/cli/commands/local/delete-user.d.ts.map +1 -0
- package/dist/cli/commands/local/delete-user.js +36 -0
- package/dist/cli/commands/local/ensure-user.d.ts +12 -0
- package/dist/cli/commands/local/ensure-user.d.ts.map +1 -0
- package/dist/cli/commands/local/ensure-user.js +41 -0
- package/dist/cli/commands/local/remove-from-branch-group.d.ts +13 -0
- package/dist/cli/commands/local/remove-from-branch-group.d.ts.map +1 -0
- package/dist/cli/commands/local/remove-from-branch-group.js +37 -0
- package/dist/cli/commands/local/remove-symlink.d.ts +13 -0
- package/dist/cli/commands/local/remove-symlink.d.ts.map +1 -0
- package/dist/cli/commands/local/remove-symlink.js +39 -0
- package/dist/cli/commands/local/scrub-git-remotes.d.ts +9 -0
- package/dist/cli/commands/local/scrub-git-remotes.d.ts.map +1 -0
- package/dist/cli/commands/local/scrub-git-remotes.js +23 -0
- package/dist/cli/commands/{admin → local}/sync-unix.d.ts.map +1 -1
- package/dist/cli/commands/{admin → local}/sync-unix.js +3 -3
- package/dist/cli/commands/local/sync-user-symlinks.d.ts +12 -0
- package/dist/cli/commands/local/sync-user-symlinks.d.ts.map +1 -0
- package/dist/cli/commands/local/sync-user-symlinks.js +37 -0
- package/dist/cli/commands/telemetry/index.d.ts +7 -0
- package/dist/cli/commands/telemetry/index.d.ts.map +1 -0
- package/dist/cli/commands/telemetry/index.js +40 -0
- package/dist/cli/commands/telemetry/off.d.ts +6 -0
- package/dist/cli/commands/telemetry/off.d.ts.map +1 -0
- package/dist/cli/commands/telemetry/off.js +35 -0
- package/dist/cli/commands/telemetry/on.d.ts +6 -0
- package/dist/cli/commands/telemetry/on.d.ts.map +1 -0
- package/dist/cli/commands/telemetry/on.js +37 -0
- package/dist/cli/commands/telemetry/test.d.ts +6 -0
- package/dist/cli/commands/telemetry/test.d.ts.map +1 -0
- package/dist/cli/commands/telemetry/test.js +56 -0
- package/dist/cli/commands/user/create-admin.d.ts.map +1 -1
- package/dist/cli/commands/user/create-admin.js +81 -72
- package/dist/cli/commands/user/list.d.ts.map +1 -1
- package/dist/cli/commands/user/list.js +1 -0
- package/dist/cli/commands/whoami.js +2 -1
- package/dist/cli/lib/branch-environment-action.d.ts +21 -0
- package/dist/cli/lib/branch-environment-action.d.ts.map +1 -0
- package/dist/cli/lib/branch-environment-action.js +8 -0
- package/dist/core/api/index.cjs +7 -2
- package/dist/core/api/index.d.ts +13 -4
- package/dist/core/api/index.d.ts.map +1 -1
- package/dist/core/api/index.js +7 -2
- package/dist/core/claude/index.cjs +482 -77
- package/dist/core/claude/index.js +479 -76
- package/dist/core/claude-cli/index.cjs +11 -0
- package/dist/core/claude-cli/index.js +11 -0
- package/dist/core/claude-cli/pricing.d.ts.map +1 -1
- package/dist/core/client/index.cjs +35 -7
- package/dist/core/client/index.js +32 -7
- package/dist/core/config/browser.cjs +3 -5
- package/dist/core/config/browser.js +3 -5
- package/dist/core/config/config-manager.d.ts +33 -13
- package/dist/core/config/config-manager.d.ts.map +1 -1
- package/dist/core/config/index.cjs +4259 -4527
- package/dist/core/config/index.d.ts +1 -0
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/index.js +4295 -4583
- package/dist/core/config/key-resolver.d.ts.map +1 -1
- package/dist/core/config/multitenancy.d.ts +33 -0
- package/dist/core/config/multitenancy.d.ts.map +1 -0
- package/dist/core/config/security-resolver.d.ts +1 -0
- package/dist/core/config/security-resolver.d.ts.map +1 -1
- package/dist/core/config/types.d.ts +67 -4
- package/dist/core/config/types.d.ts.map +1 -1
- package/dist/core/db/client.d.ts +34 -2
- package/dist/core/db/client.d.ts.map +1 -1
- package/dist/core/db/database-wrapper.d.ts.map +1 -1
- package/dist/core/db/first-run-bootstrap.d.ts.map +1 -1
- package/dist/core/db/index.cjs +2422 -1084
- package/dist/core/db/index.d.ts +2 -1
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +2162 -852
- package/dist/core/db/migrate.d.ts.map +1 -1
- package/dist/core/db/repositories/artifacts.d.ts +27 -2
- package/dist/core/db/repositories/artifacts.d.ts.map +1 -1
- package/dist/core/db/repositories/base.d.ts +18 -0
- package/dist/core/db/repositories/base.d.ts.map +1 -1
- package/dist/core/db/repositories/board-comments.d.ts +17 -1
- package/dist/core/db/repositories/board-comments.d.ts.map +1 -1
- package/dist/core/db/repositories/board-objects.d.ts.map +1 -1
- package/dist/core/db/repositories/boards.d.ts +28 -4
- package/dist/core/db/repositories/boards.d.ts.map +1 -1
- package/dist/core/db/repositories/branch-access.d.ts +32 -0
- package/dist/core/db/repositories/branch-access.d.ts.map +1 -1
- package/dist/core/db/repositories/branches.d.ts +41 -1
- package/dist/core/db/repositories/branches.d.ts.map +1 -1
- package/dist/core/db/repositories/cards.d.ts +15 -1
- package/dist/core/db/repositories/cards.d.ts.map +1 -1
- package/dist/core/db/repositories/gateway-channels.d.ts.map +1 -1
- package/dist/core/db/repositories/gateway-outbound-messages.d.ts +19 -0
- package/dist/core/db/repositories/gateway-outbound-messages.d.ts.map +1 -0
- package/dist/core/db/repositories/index.d.ts +2 -0
- package/dist/core/db/repositories/index.d.ts.map +1 -1
- package/dist/core/db/repositories/messages.d.ts +9 -2
- package/dist/core/db/repositories/messages.d.ts.map +1 -1
- package/dist/core/db/repositories/repos.d.ts.map +1 -1
- package/dist/core/db/repositories/schedules.d.ts +12 -1
- package/dist/core/db/repositories/schedules.d.ts.map +1 -1
- package/dist/core/db/repositories/sessions.d.ts +49 -5
- package/dist/core/db/repositories/sessions.d.ts.map +1 -1
- package/dist/core/db/repositories/tasks.d.ts +7 -2
- package/dist/core/db/repositories/tasks.d.ts.map +1 -1
- package/dist/core/db/repositories/user-api-keys.d.ts +10 -1
- package/dist/core/db/repositories/user-api-keys.d.ts.map +1 -1
- package/dist/core/db/repositories/users.d.ts +8 -8
- package/dist/core/db/repositories/users.d.ts.map +1 -1
- package/dist/core/db/schema.d.ts +1460 -38
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.postgres.d.ts +1082 -37
- package/dist/core/db/schema.postgres.d.ts.map +1 -1
- package/dist/core/db/schema.sqlite.d.ts +397 -1
- package/dist/core/db/schema.sqlite.d.ts.map +1 -1
- package/dist/core/db/tenant-context.d.ts +26 -0
- package/dist/core/db/tenant-context.d.ts.map +1 -0
- package/dist/core/db/tenant-scope.d.ts +31 -0
- package/dist/core/db/tenant-scope.d.ts.map +1 -0
- package/dist/core/db/user-utils.d.ts +2 -2
- package/dist/core/db/user-utils.d.ts.map +1 -1
- package/dist/core/drizzle/postgres/0052_gateway_outbound_messages.sql +45 -0
- package/dist/core/drizzle/postgres/0053_user_token_invalidation.sql +1 -0
- package/dist/core/drizzle/postgres/0054_app_level_multitenancy.sql +219 -0
- package/dist/core/drizzle/postgres/0055_app_level_multitenancy_rls.sql +411 -0
- package/dist/core/drizzle/postgres/0056_composite_indexes.sql +15 -0
- package/dist/core/drizzle/postgres/0057_message_timestamp_indexes.sql +3 -0
- package/dist/core/drizzle/postgres/meta/_journal.json +42 -0
- package/dist/core/drizzle/sqlite/0061_gateway_outbound_messages.sql +38 -0
- package/dist/core/drizzle/sqlite/0062_user_token_invalidation.sql +1 -0
- package/dist/core/drizzle/sqlite/0063_composite_indexes.sql +10 -0
- package/dist/core/drizzle/sqlite/0064_message_timestamp_indexes.sql +2 -0
- package/dist/core/drizzle/sqlite/meta/_journal.json +28 -0
- package/dist/core/environment/render-snapshot.cjs +1 -4
- package/dist/core/environment/render-snapshot.js +1 -4
- package/dist/core/environment/webhook.cjs +1 -4
- package/dist/core/environment/webhook.js +1 -4
- package/dist/core/gateway/connector.d.ts +10 -1
- package/dist/core/gateway/connector.d.ts.map +1 -1
- package/dist/core/gateway/connectors/slack-manifest.cjs +108 -0
- package/dist/core/gateway/connectors/slack-manifest.d.ts +85 -0
- package/dist/core/gateway/connectors/slack-manifest.d.ts.map +1 -0
- package/dist/core/gateway/connectors/slack-manifest.js +81 -0
- package/dist/core/gateway/connectors/slack.d.ts +101 -4
- package/dist/core/gateway/connectors/slack.d.ts.map +1 -1
- package/dist/core/gateway/index.cjs +495 -29
- package/dist/core/gateway/index.d.ts +4 -1
- package/dist/core/gateway/index.d.ts.map +1 -1
- package/dist/core/gateway/index.js +490 -28
- package/dist/core/gateway/system-message.d.ts.map +1 -1
- package/dist/core/git/exec.cjs +24 -0
- package/dist/core/git/exec.d.ts +6 -4
- package/dist/core/git/exec.d.ts.map +1 -1
- package/dist/core/git/exec.js +2 -0
- package/dist/core/git/index.cjs +3 -1363
- package/dist/core/git/index.d.ts +4 -614
- package/dist/core/git/index.d.ts.map +1 -1
- package/dist/core/git/index.js +1 -1304
- package/dist/core/git/pure.cjs +24 -0
- package/dist/core/git/pure.d.ts +2 -27
- package/dist/core/git/pure.d.ts.map +1 -1
- package/dist/core/git/pure.js +2 -0
- package/dist/core/index.cjs +11137 -10604
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +11673 -10630
- package/dist/core/lib/feathers-validation.cjs +6 -1
- package/dist/core/lib/feathers-validation.d.ts +1 -0
- package/dist/core/lib/feathers-validation.d.ts.map +1 -1
- package/dist/core/lib/feathers-validation.js +6 -1
- package/dist/core/local-actions/git-remotes.d.ts +7 -0
- package/dist/core/local-actions/git-remotes.d.ts.map +1 -0
- package/dist/core/local-actions/index.cjs +7941 -0
- package/dist/core/local-actions/index.d.ts +6 -0
- package/dist/core/local-actions/index.d.ts.map +1 -0
- package/dist/core/local-actions/index.js +7943 -0
- package/dist/core/local-actions/symlinks.d.ts +20 -0
- package/dist/core/local-actions/symlinks.d.ts.map +1 -0
- package/dist/core/local-actions/types.d.ts +14 -0
- package/dist/core/local-actions/types.d.ts.map +1 -0
- package/dist/core/local-actions/unix-groups.d.ts +16 -0
- package/dist/core/local-actions/unix-groups.d.ts.map +1 -0
- package/dist/core/local-actions/unix-users.d.ts +12 -0
- package/dist/core/local-actions/unix-users.d.ts.map +1 -0
- package/dist/core/mcp/index.cjs +352 -25
- package/dist/core/mcp/index.js +351 -24
- package/dist/core/models/browser.cjs +148 -25
- package/dist/core/models/browser.js +144 -25
- package/dist/core/models/claude.d.ts +2 -2
- package/dist/core/models/claude.d.ts.map +1 -1
- package/dist/core/models/codex.d.ts +205 -21
- package/dist/core/models/codex.d.ts.map +1 -1
- package/dist/core/models/index.cjs +148 -25
- package/dist/core/models/index.js +144 -25
- package/dist/core/package.json +24 -0
- package/dist/core/seed/demo-fixtures.d.ts +87 -0
- package/dist/core/seed/demo-fixtures.d.ts.map +1 -0
- package/dist/core/seed/dev-fixtures.d.ts.map +1 -1
- package/dist/core/seed/index.cjs +8410 -5504
- package/dist/core/seed/index.d.ts +1 -0
- package/dist/core/seed/index.d.ts.map +1 -1
- package/dist/core/seed/index.js +8434 -5533
- package/dist/core/sessions/index.cjs +110 -24
- package/dist/core/sessions/index.js +110 -24
- package/dist/core/telemetry/index.cjs +361 -0
- package/dist/core/telemetry/index.d.ts +5 -0
- package/dist/core/telemetry/index.d.ts.map +1 -0
- package/dist/core/telemetry/index.js +315 -0
- package/dist/core/telemetry/logger.d.ts +44 -0
- package/dist/core/telemetry/logger.d.ts.map +1 -0
- package/dist/core/telemetry/model-normalization.d.ts +3 -0
- package/dist/core/telemetry/model-normalization.d.ts.map +1 -0
- package/dist/core/telemetry/types.d.ts +47 -0
- package/dist/core/telemetry/types.d.ts.map +1 -0
- package/dist/core/telemetry/version.d.ts +9 -0
- package/dist/core/telemetry/version.d.ts.map +1 -0
- package/dist/core/templates/agor-system-prompt.md +1 -0
- package/dist/core/tools/mcp/oauth-refresh.cjs +532 -102
- package/dist/core/tools/mcp/oauth-refresh.js +530 -103
- package/dist/core/types/board.d.ts +2 -0
- package/dist/core/types/board.d.ts.map +1 -1
- package/dist/core/types/branch.d.ts +13 -0
- package/dist/core/types/branch.d.ts.map +1 -1
- package/dist/core/types/config-services.d.ts.map +1 -1
- package/dist/core/types/feathers.d.ts +6 -0
- package/dist/core/types/feathers.d.ts.map +1 -1
- package/dist/core/types/gateway.d.ts +76 -1
- package/dist/core/types/gateway.d.ts.map +1 -1
- package/dist/core/types/index.cjs +25 -0
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +22 -0
- package/dist/core/types/schedule.d.ts +4 -3
- package/dist/core/types/schedule.d.ts.map +1 -1
- package/dist/core/types/session.d.ts +7 -1
- package/dist/core/types/session.d.ts.map +1 -1
- package/dist/core/types/tenant.d.ts +15 -0
- package/dist/core/types/tenant.d.ts.map +1 -0
- package/dist/core/types/user.d.ts +61 -0
- package/dist/core/types/user.d.ts.map +1 -1
- package/dist/core/unix/index.cjs +1056 -674
- package/dist/core/unix/index.js +1003 -623
- package/dist/core/utils/emoji-shortcodes.d.ts +13 -0
- package/dist/core/utils/emoji-shortcodes.d.ts.map +1 -0
- package/dist/core/yaml/index.cjs +8 -8
- package/dist/core/yaml/index.d.ts +1 -1
- package/dist/core/yaml/index.d.ts.map +1 -1
- package/dist/core/yaml/index.js +7 -7
- package/dist/daemon/adapters/drizzle.d.ts +26 -4
- package/dist/daemon/adapters/drizzle.d.ts.map +1 -1
- package/dist/daemon/adapters/drizzle.js +68 -7
- package/dist/daemon/auth/api-key-strategy.js +1 -1
- package/dist/daemon/auth/executor-runtime-scope.d.ts.map +1 -1
- package/dist/daemon/auth/executor-runtime-scope.js +19 -5
- package/dist/daemon/auth/launch-auth.d.ts +5 -4
- package/dist/daemon/auth/launch-auth.d.ts.map +1 -1
- package/dist/daemon/auth/launch-auth.js +123 -39
- package/dist/daemon/auth/refresh-token-service.d.ts +22 -0
- package/dist/daemon/auth/refresh-token-service.d.ts.map +1 -0
- package/dist/daemon/auth/refresh-token-service.js +133 -0
- package/dist/daemon/auth/runtime-tokens.d.ts +3 -1
- package/dist/daemon/auth/runtime-tokens.d.ts.map +1 -1
- package/dist/daemon/auth/runtime-tokens.js +17 -4
- package/dist/daemon/auth/service-jwt-strategy.d.ts +2 -1
- package/dist/daemon/auth/service-jwt-strategy.d.ts.map +1 -1
- package/dist/daemon/auth/service-jwt-strategy.js +127 -1
- package/dist/daemon/auth/token-invalidation.d.ts +11 -0
- package/dist/daemon/auth/token-invalidation.d.ts.map +1 -0
- package/dist/daemon/auth/token-invalidation.js +38 -0
- package/dist/daemon/auth/user-redaction.d.ts +12 -0
- package/dist/daemon/auth/user-redaction.d.ts.map +1 -0
- package/dist/daemon/auth/user-redaction.js +13 -0
- package/dist/daemon/declarations.d.ts +4 -4
- package/dist/daemon/declarations.d.ts.map +1 -1
- package/dist/daemon/hooks/gateway-route.d.ts.map +1 -1
- package/dist/daemon/hooks/gateway-route.js +23 -13
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +7234 -2866
- package/dist/daemon/knowledge/pgvector.d.ts +3 -3
- package/dist/daemon/knowledge/pgvector.d.ts.map +1 -1
- package/dist/daemon/knowledge/pgvector.js +24 -0
- package/dist/daemon/knowledge/units.d.ts +2 -2
- package/dist/daemon/knowledge/units.d.ts.map +1 -1
- package/dist/daemon/main.js +7234 -2866
- package/dist/daemon/mcp/server.d.ts +3 -3
- package/dist/daemon/mcp/server.d.ts.map +1 -1
- package/dist/daemon/mcp/server.js +1467 -71
- package/dist/daemon/mcp/tokens.d.ts +2 -2
- package/dist/daemon/mcp/tokens.d.ts.map +1 -1
- package/dist/daemon/mcp/tokens.js +5 -1
- package/dist/daemon/mcp/tool-registry.d.ts.map +1 -1
- package/dist/daemon/mcp/tool-registry.js +1 -0
- package/dist/daemon/mcp/tools/analytics.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/analytics.js +548 -23
- package/dist/daemon/mcp/tools/artifacts.js +510 -19
- package/dist/daemon/mcp/tools/boards.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/boards.js +517 -20
- package/dist/daemon/mcp/tools/branches.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/branches.js +574 -49
- package/dist/daemon/mcp/tools/card-types.js +508 -17
- package/dist/daemon/mcp/tools/cards.js +508 -17
- package/dist/daemon/mcp/tools/environment.js +516 -17
- package/dist/daemon/mcp/tools/gateway-channels.d.ts +4 -0
- package/dist/daemon/mcp/tools/gateway-channels.d.ts.map +1 -0
- package/dist/daemon/mcp/tools/gateway-channels.js +16035 -0
- package/dist/daemon/mcp/tools/knowledge.js +508 -17
- package/dist/daemon/mcp/tools/mcp-servers.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/mcp-servers.js +843 -17
- package/dist/daemon/mcp/tools/messages.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/messages.js +568 -31
- package/dist/daemon/mcp/tools/proxies.js +518 -19
- package/dist/daemon/mcp/tools/repos.js +508 -17
- package/dist/daemon/mcp/tools/schedules.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/schedules.js +511 -18
- package/dist/daemon/mcp/tools/search.js +508 -17
- package/dist/daemon/mcp/tools/sessions.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/sessions.js +521 -23
- package/dist/daemon/mcp/tools/tasks.js +508 -17
- package/dist/daemon/mcp/tools/users.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/users.js +527 -22
- package/dist/daemon/mcp/tools/widgets.d.ts.map +1 -1
- package/dist/daemon/mcp/tools/widgets.js +536 -18
- package/dist/daemon/register-hooks.d.ts +3 -2
- package/dist/daemon/register-hooks.d.ts.map +1 -1
- package/dist/daemon/register-hooks.js +894 -582
- package/dist/daemon/register-routes.d.ts +3 -2
- package/dist/daemon/register-routes.d.ts.map +1 -1
- package/dist/daemon/register-routes.js +2715 -816
- package/dist/daemon/register-services.d.ts +2 -2
- package/dist/daemon/register-services.d.ts.map +1 -1
- package/dist/daemon/register-services.js +2445 -633
- package/dist/daemon/services/artifacts.d.ts +34 -6
- package/dist/daemon/services/artifacts.d.ts.map +1 -1
- package/dist/daemon/services/artifacts.js +109 -8
- package/dist/daemon/services/assistant-knowledge.d.ts +2 -2
- package/dist/daemon/services/assistant-knowledge.d.ts.map +1 -1
- package/dist/daemon/services/board-comments.d.ts +8 -5
- package/dist/daemon/services/board-comments.d.ts.map +1 -1
- package/dist/daemon/services/board-comments.js +78 -13
- package/dist/daemon/services/board-objects.d.ts +8 -5
- package/dist/daemon/services/board-objects.d.ts.map +1 -1
- package/dist/daemon/services/board-objects.js +14 -4
- package/dist/daemon/services/boards.d.ts +34 -5
- package/dist/daemon/services/boards.d.ts.map +1 -1
- package/dist/daemon/services/boards.js +116 -8
- package/dist/daemon/services/branch-owners.d.ts +3 -1
- package/dist/daemon/services/branch-owners.d.ts.map +1 -1
- package/dist/daemon/services/branch-owners.js +31 -4
- package/dist/daemon/services/branches.d.ts +31 -8
- package/dist/daemon/services/branches.d.ts.map +1 -1
- package/dist/daemon/services/branches.js +242 -35
- package/dist/daemon/services/card-types.d.ts +3 -3
- package/dist/daemon/services/card-types.d.ts.map +1 -1
- package/dist/daemon/services/card-types.js +68 -7
- package/dist/daemon/services/cards.d.ts +19 -4
- package/dist/daemon/services/cards.d.ts.map +1 -1
- package/dist/daemon/services/cards.js +92 -8
- package/dist/daemon/services/check-auth.d.ts +2 -2
- package/dist/daemon/services/check-auth.d.ts.map +1 -1
- package/dist/daemon/services/claude-cli-integration.d.ts +4 -1
- package/dist/daemon/services/claude-cli-integration.d.ts.map +1 -1
- package/dist/daemon/services/claude-cli-integration.js +117 -65
- package/dist/daemon/services/claude-models.d.ts +3 -3
- package/dist/daemon/services/claude-models.d.ts.map +1 -1
- package/dist/daemon/services/claude-models.js +383 -272
- package/dist/daemon/services/config.d.ts +12 -4
- package/dist/daemon/services/config.d.ts.map +1 -1
- package/dist/daemon/services/config.js +39 -3
- package/dist/daemon/services/copilot-models.d.ts +3 -3
- package/dist/daemon/services/copilot-models.d.ts.map +1 -1
- package/dist/daemon/services/cursor-models.d.ts +3 -3
- package/dist/daemon/services/cursor-models.d.ts.map +1 -1
- package/dist/daemon/services/files.d.ts +3 -3
- package/dist/daemon/services/files.d.ts.map +1 -1
- package/dist/daemon/services/files.js +24 -5
- package/dist/daemon/services/gateway-channels-test.d.ts +24 -0
- package/dist/daemon/services/gateway-channels-test.d.ts.map +1 -0
- package/dist/daemon/services/gateway-channels-test.js +66 -0
- package/dist/daemon/services/gateway-channels.d.ts +3 -3
- package/dist/daemon/services/gateway-channels.d.ts.map +1 -1
- package/dist/daemon/services/gateway-channels.js +68 -7
- package/dist/daemon/services/gateway.d.ts +48 -3
- package/dist/daemon/services/gateway.d.ts.map +1 -1
- package/dist/daemon/services/gateway.js +606 -60
- package/dist/daemon/services/github-app-setup.d.ts +3 -3
- package/dist/daemon/services/github-app-setup.d.ts.map +1 -1
- package/dist/daemon/services/groups.d.ts +5 -5
- package/dist/daemon/services/groups.d.ts.map +1 -1
- package/dist/daemon/services/health-monitor.d.ts +34 -2
- package/dist/daemon/services/health-monitor.d.ts.map +1 -1
- package/dist/daemon/services/health-monitor.js +145 -23
- package/dist/daemon/services/knowledge-document-edits.d.ts +3 -3
- package/dist/daemon/services/knowledge-document-edits.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-documents.d.ts +3 -3
- package/dist/daemon/services/knowledge-documents.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-documents.js +92 -7
- package/dist/daemon/services/knowledge-embedding-indexer.d.ts +7 -2
- package/dist/daemon/services/knowledge-embedding-indexer.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-embedding-indexer.js +37 -3
- package/dist/daemon/services/knowledge-graph.d.ts +3 -3
- package/dist/daemon/services/knowledge-graph.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-indexing.d.ts +3 -3
- package/dist/daemon/services/knowledge-indexing.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-namespaces.d.ts +3 -3
- package/dist/daemon/services/knowledge-namespaces.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-namespaces.js +72 -8
- package/dist/daemon/services/knowledge-reindex.d.ts +3 -3
- package/dist/daemon/services/knowledge-reindex.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-reindex.js +28 -1
- package/dist/daemon/services/knowledge-search.d.ts +3 -3
- package/dist/daemon/services/knowledge-search.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-settings.d.ts +3 -3
- package/dist/daemon/services/knowledge-settings.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-settings.js +24 -0
- package/dist/daemon/services/knowledge-versions.d.ts +3 -3
- package/dist/daemon/services/knowledge-versions.d.ts.map +1 -1
- package/dist/daemon/services/knowledge-versions.js +68 -7
- package/dist/daemon/services/leaderboard.d.ts +14 -6
- package/dist/daemon/services/leaderboard.d.ts.map +1 -1
- package/dist/daemon/services/leaderboard.js +74 -15
- package/dist/daemon/services/local-actions.d.ts +13 -0
- package/dist/daemon/services/local-actions.d.ts.map +1 -0
- package/dist/daemon/services/local-actions.js +120 -0
- package/dist/daemon/services/mcp-servers.d.ts +3 -3
- package/dist/daemon/services/mcp-servers.d.ts.map +1 -1
- package/dist/daemon/services/mcp-servers.js +68 -7
- package/dist/daemon/services/messages.d.ts +10 -6
- package/dist/daemon/services/messages.d.ts.map +1 -1
- package/dist/daemon/services/messages.js +87 -7
- package/dist/daemon/services/repos.d.ts +6 -6
- package/dist/daemon/services/repos.d.ts.map +1 -1
- package/dist/daemon/services/repos.js +131 -32
- package/dist/daemon/services/scheduler.d.ts +23 -27
- package/dist/daemon/services/scheduler.d.ts.map +1 -1
- package/dist/daemon/services/scheduler.js +55 -28
- package/dist/daemon/services/schedules.d.ts +3 -3
- package/dist/daemon/services/schedules.d.ts.map +1 -1
- package/dist/daemon/services/schedules.js +68 -7
- package/dist/daemon/services/session-env-selections.d.ts +3 -3
- package/dist/daemon/services/session-env-selections.d.ts.map +1 -1
- package/dist/daemon/services/session-mcp-servers.d.ts +3 -3
- package/dist/daemon/services/session-mcp-servers.d.ts.map +1 -1
- package/dist/daemon/services/session-token-service.d.ts.map +1 -1
- package/dist/daemon/services/session-token-service.js +3 -0
- package/dist/daemon/services/sessions.d.ts +9 -5
- package/dist/daemon/services/sessions.d.ts.map +1 -1
- package/dist/daemon/services/sessions.js +143 -10
- package/dist/daemon/services/tasks.d.ts +11 -5
- package/dist/daemon/services/tasks.d.ts.map +1 -1
- package/dist/daemon/services/tasks.js +199 -39
- package/dist/daemon/services/terminals.d.ts +21 -3
- package/dist/daemon/services/terminals.d.ts.map +1 -1
- package/dist/daemon/services/terminals.js +81 -25
- package/dist/daemon/services/thread-session-map.d.ts +3 -3
- package/dist/daemon/services/thread-session-map.d.ts.map +1 -1
- package/dist/daemon/services/thread-session-map.js +68 -7
- package/dist/daemon/services/user-avatar-sync.d.ts +21 -0
- package/dist/daemon/services/user-avatar-sync.d.ts.map +1 -0
- package/dist/daemon/services/user-avatar-sync.js +267 -0
- package/dist/daemon/services/users.d.ts +29 -9
- package/dist/daemon/services/users.d.ts.map +1 -1
- package/dist/daemon/services/users.js +383 -30
- package/dist/daemon/services/zone-trigger.d.ts.map +1 -1
- package/dist/daemon/services/zone-trigger.js +17 -4
- package/dist/daemon/setup/build-info.d.ts +1 -1
- package/dist/daemon/setup/build-info.d.ts.map +1 -1
- package/dist/daemon/setup/build-info.js +5 -1
- package/dist/daemon/setup/database.d.ts +8 -3
- package/dist/daemon/setup/database.d.ts.map +1 -1
- package/dist/daemon/setup/database.js +26 -6
- package/dist/daemon/setup/first-run-admin.d.ts +2 -2
- package/dist/daemon/setup/first-run-admin.d.ts.map +1 -1
- package/dist/daemon/setup/index.js +97 -17
- package/dist/daemon/setup/socketio.d.ts +10 -1
- package/dist/daemon/setup/socketio.d.ts.map +1 -1
- package/dist/daemon/setup/socketio.js +68 -10
- package/dist/daemon/startup.d.ts +13 -2
- package/dist/daemon/startup.d.ts.map +1 -1
- package/dist/daemon/startup.js +348 -86
- package/dist/daemon/utils/append-system-message.d.ts +2 -2
- package/dist/daemon/utils/append-system-message.d.ts.map +1 -1
- package/dist/daemon/utils/apply-session-config-defaults.d.ts.map +1 -1
- package/dist/daemon/utils/apply-session-config-defaults.js +12 -1
- package/dist/daemon/utils/authorization.d.ts +3 -1
- package/dist/daemon/utils/authorization.d.ts.map +1 -1
- package/dist/daemon/utils/authorization.js +21 -6
- package/dist/daemon/utils/branch-authorization.d.ts +30 -0
- package/dist/daemon/utils/branch-authorization.d.ts.map +1 -1
- package/dist/daemon/utils/branch-authorization.js +63 -5
- package/dist/daemon/utils/branch-inspect.d.ts +1 -0
- package/dist/daemon/utils/branch-inspect.d.ts.map +1 -1
- package/dist/daemon/utils/branch-inspect.js +11 -3
- package/dist/daemon/utils/executor-read-impersonation.d.ts +2 -2
- package/dist/daemon/utils/executor-read-impersonation.d.ts.map +1 -1
- package/dist/daemon/utils/git-impersonation.d.ts +10 -10
- package/dist/daemon/utils/git-impersonation.d.ts.map +1 -1
- package/dist/daemon/utils/git-remote-credential-scan.d.ts +3 -3
- package/dist/daemon/utils/git-remote-credential-scan.d.ts.map +1 -1
- package/dist/daemon/utils/git-remote-credential-scan.js +6 -2
- package/dist/daemon/utils/mcp-token-authorization.d.ts +18 -13
- package/dist/daemon/utils/mcp-token-authorization.d.ts.map +1 -1
- package/dist/daemon/utils/mcp-token-authorization.js +11 -5
- package/dist/daemon/utils/open-source-telemetry-config.d.ts +6 -0
- package/dist/daemon/utils/open-source-telemetry-config.d.ts.map +1 -0
- package/dist/daemon/utils/open-source-telemetry-config.js +21 -0
- package/dist/daemon/utils/open-source-telemetry-heartbeat.d.ts +7 -0
- package/dist/daemon/utils/open-source-telemetry-heartbeat.d.ts.map +1 -0
- package/dist/daemon/utils/open-source-telemetry-heartbeat.js +15 -0
- package/dist/daemon/utils/open-source-telemetry-usage.d.ts +9 -0
- package/dist/daemon/utils/open-source-telemetry-usage.d.ts.map +1 -0
- package/dist/daemon/utils/open-source-telemetry-usage.js +121 -0
- package/dist/daemon/utils/realign-repo-origin.d.ts +3 -3
- package/dist/daemon/utils/realign-repo-origin.d.ts.map +1 -1
- package/dist/daemon/utils/realign-repo-origin.js +47 -16
- package/dist/daemon/utils/realtime-publish.d.ts +2 -0
- package/dist/daemon/utils/realtime-publish.d.ts.map +1 -1
- package/dist/daemon/utils/realtime-publish.js +51 -10
- package/dist/daemon/utils/session-state-hooks.d.ts +3 -3
- package/dist/daemon/utils/session-state-hooks.d.ts.map +1 -1
- package/dist/daemon/utils/session-turn-lock.d.ts +8 -1
- package/dist/daemon/utils/session-turn-lock.d.ts.map +1 -1
- package/dist/daemon/utils/session-turn-lock.js +25 -2
- package/dist/daemon/utils/spawn-executor.d.ts +23 -1
- package/dist/daemon/utils/spawn-executor.d.ts.map +1 -1
- package/dist/daemon/utils/spawn-executor.js +34 -4
- package/dist/daemon/utils/tenant-db-scope.d.ts +20 -0
- package/dist/daemon/utils/tenant-db-scope.d.ts.map +1 -0
- package/dist/daemon/utils/tenant-db-scope.js +114 -0
- package/dist/daemon/utils/unix-group-init.d.ts +3 -3
- package/dist/daemon/utils/unix-group-init.d.ts.map +1 -1
- package/dist/daemon/utils/upload.d.ts +6 -9
- package/dist/daemon/utils/upload.d.ts.map +1 -1
- package/dist/daemon/utils/upload.js +30 -37
- package/dist/daemon/widgets/env-vars/index.d.ts +26 -1
- package/dist/daemon/widgets/env-vars/index.d.ts.map +1 -1
- package/dist/daemon/widgets/env-vars/index.js +145 -21
- package/dist/daemon/widgets/index.js +137 -21
- package/dist/executor/commands/environment.d.ts.map +1 -1
- package/dist/executor/commands/environment.js +9 -5
- package/dist/executor/commands/git.js +1 -1
- package/dist/executor/git/index.d.ts +8 -0
- package/dist/executor/git/index.d.ts.map +1 -0
- package/dist/executor/git/index.js +7 -0
- package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/base-executor.js +4 -1
- package/dist/executor/handlers/sdk/git-safe-directory.d.ts.map +1 -1
- package/dist/executor/handlers/sdk/git-safe-directory.js +1 -1
- package/dist/executor/sdk-handlers/base/diff-enrichment.js +1 -1
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +6 -10
- package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/codex-tool.js +12 -15
- package/dist/executor/sdk-handlers/codex/normalizer.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/normalizer.js +11 -1
- package/dist/executor/sdk-handlers/codex/pricing/litellm-openai-model-prices.json +3663 -0
- package/dist/executor/sdk-handlers/codex/pricing/litellm-pricing.d.ts +31 -0
- package/dist/executor/sdk-handlers/codex/pricing/litellm-pricing.d.ts.map +1 -0
- package/dist/executor/sdk-handlers/codex/pricing/litellm-pricing.js +46 -0
- package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/prompt-service.js +61 -6
- package/dist/executor/sdk-handlers/codex/usage.d.ts +14 -23
- package/dist/executor/sdk-handlers/codex/usage.d.ts.map +1 -1
- package/dist/executor/sdk-handlers/codex/usage.js +18 -33
- package/dist/executor/services/feathers-client.js +5 -5
- package/dist/git/index.cjs +1101 -0
- package/dist/git/index.d.ts +533 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +1022 -0
- package/dist/git/package.json +21 -0
- package/dist/git/pure.cjs +185 -0
- package/dist/git/pure.d.ts +39 -0
- package/dist/git/pure.d.ts.map +1 -0
- package/dist/git/pure.js +139 -0
- package/dist/ui/assets/AgorEmojiPickerInner-DQjr8M3_.js +1 -0
- package/dist/ui/assets/App-hJtcOxHv.js +5 -0
- package/dist/ui/assets/App-hJtcOxHv.js.gz +0 -0
- package/dist/ui/assets/AppNode-BhuMpn8O.js +1 -0
- package/dist/ui/assets/AppNode-BhuMpn8O.js.gz +0 -0
- package/dist/ui/assets/ArtifactConsentModal-oMMzRn8L.js +1 -0
- package/dist/ui/assets/ArtifactConsentModal-oMMzRn8L.js.gz +0 -0
- package/dist/ui/assets/ArtifactFullscreenPage-B3wT8t8f.js +9 -0
- package/dist/ui/assets/ArtifactFullscreenPage-B3wT8t8f.js.gz +0 -0
- package/dist/ui/assets/ArtifactNode-BzQcrwFS.js +9 -0
- package/dist/ui/assets/ArtifactNode-BzQcrwFS.js.gz +0 -0
- package/dist/ui/assets/AutocompleteTextarea-Dau-V_30.js +19 -0
- package/dist/ui/assets/AutocompleteTextarea-Dau-V_30.js.gz +0 -0
- package/dist/ui/assets/BoardObjectNodes-DdKWv_ZT.js +34 -0
- package/dist/ui/assets/BoardObjectNodes-DdKWv_ZT.js.gz +0 -0
- package/dist/ui/assets/CodeEditor.inner-Cuj6RuLL.js +7 -0
- package/dist/ui/assets/CodeEditor.inner-Cuj6RuLL.js.gz +0 -0
- package/dist/ui/assets/ConversationView-9-3ma1u-.js +1 -0
- package/dist/ui/assets/ConversationView-9-3ma1u-.js.gz +0 -0
- package/dist/ui/assets/EmbeddedTerminal-Lx5I9EOJ.js +2 -0
- package/dist/ui/assets/EmbeddedTerminal-Lx5I9EOJ.js.gz +0 -0
- package/dist/ui/assets/KnowledgePage-Dz8YAMYC.js +24 -0
- package/dist/ui/assets/KnowledgePage-Dz8YAMYC.js.gz +0 -0
- package/dist/ui/assets/{MarketingScreenshotPage-zv5RUCuV.js → MarketingScreenshotPage-CmDPBHOl.js} +2 -2
- package/dist/ui/assets/MarketingScreenshotPage-CmDPBHOl.js.gz +0 -0
- package/dist/ui/assets/MobileApp-BpgSG_gz.js +1 -0
- package/dist/ui/assets/MobileApp-BpgSG_gz.js.gz +0 -0
- package/dist/ui/assets/SessionCanvas-B6_mtlxK.js +13 -0
- package/dist/ui/assets/SessionCanvas-B6_mtlxK.js.gz +0 -0
- package/dist/ui/assets/{SessionCanvas-mEmYGZhC.css → SessionCanvas-Bh7Yg5dZ.css} +1 -1
- package/dist/ui/assets/SessionCanvas-Bh7Yg5dZ.css.gz +0 -0
- package/dist/ui/assets/{StreamdownDemoPage-wzWaqWwr.js → StreamdownDemoPage-okKKR2QH.js} +2 -2
- package/dist/ui/assets/StreamdownDemoPage-okKKR2QH.js.gz +0 -0
- package/dist/ui/assets/TerminalModal-D9jMGZXv.js +2 -0
- package/dist/ui/assets/TerminalModal-D9jMGZXv.js.gz +0 -0
- package/dist/ui/assets/ThemeSwitcher-D9HgT37l.js +1 -0
- package/dist/ui/assets/ThemeSwitcher-D9HgT37l.js.gz +0 -0
- package/dist/ui/assets/ThemedSyntaxHighlighter.inner-C1FdIHn0.js +1 -0
- package/dist/ui/assets/{antd-CfbbHJOz.js → antd-DT5ackd0.js} +5 -5
- package/dist/ui/assets/{antd-CfbbHJOz.js.gz → antd-DT5ackd0.js.gz} +0 -0
- package/dist/ui/assets/architecture-U656AL7Q-DMnxkQRZ.js +1 -0
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-DwTJGGoj.js +36 -0
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-DwTJGGoj.js.gz +0 -0
- package/dist/ui/assets/{blockDiagram-VD42YOAC-BhZaEN19.js → blockDiagram-VD42YOAC-Dh1_TVW2.js} +4 -4
- package/dist/ui/assets/blockDiagram-VD42YOAC-Dh1_TVW2.js.gz +0 -0
- package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dk_UH-sY.js → c4Diagram-YG6GDRKO-B1e96AcB.js} +2 -2
- package/dist/ui/assets/c4Diagram-YG6GDRKO-B1e96AcB.js.gz +0 -0
- package/dist/ui/assets/channel-Jv4dT4S5.js +1 -0
- package/dist/ui/assets/{chunk-4BX2VUAB-XprbG2TG.js → chunk-4BX2VUAB-BODpCjJx.js} +1 -1
- package/dist/ui/assets/chunk-55IACEB6-lJXvUquf.js +1 -0
- package/dist/ui/assets/{chunk-ABZYJK2D-BJcrryHK.js → chunk-ABZYJK2D-DCTXWSzV.js} +3 -3
- package/dist/ui/assets/chunk-ABZYJK2D-DCTXWSzV.js.gz +0 -0
- package/dist/ui/assets/{chunk-AGHRB4JF-DvxmfbM0.js → chunk-AGHRB4JF-CbNphBjE.js} +1 -1
- package/dist/ui/assets/chunk-AGHRB4JF-CbNphBjE.js.gz +0 -0
- package/dist/ui/assets/{chunk-ATLVNIR6-DbeJ0OrR.js → chunk-ATLVNIR6-rWg3qxof.js} +1 -1
- package/dist/ui/assets/chunk-ATLVNIR6-rWg3qxof.js.gz +0 -0
- package/dist/ui/assets/{chunk-B4BG7PRW-C53q2ggf.js → chunk-B4BG7PRW-CgtLCbpE.js} +3 -3
- package/dist/ui/assets/chunk-B4BG7PRW-CgtLCbpE.js.gz +0 -0
- package/dist/ui/assets/{chunk-CVBHYZKI-B3EBSlb3.js → chunk-CVBHYZKI-DTL6Zgr0.js} +1 -1
- package/dist/ui/assets/{chunk-DI55MBZ5-vIyNEQN-.js → chunk-DI55MBZ5-Dwvx2Kva.js} +1 -1
- package/dist/ui/assets/chunk-DI55MBZ5-Dwvx2Kva.js.gz +0 -0
- package/dist/ui/assets/chunk-EXTU4WIE-DHyaqTsP.js +1 -0
- package/dist/ui/assets/{chunk-FMBD7UC4-rddmfK-Z.js → chunk-FMBD7UC4-BogA_9CV.js} +1 -1
- package/dist/ui/assets/{chunk-HN2XXSSU-Dttqcg3b.js → chunk-HN2XXSSU-2blQO3Gb.js} +1 -1
- package/dist/ui/assets/chunk-HN2XXSSU-2blQO3Gb.js.gz +0 -0
- package/dist/ui/assets/chunk-JA3XYJ7Z-Cr1rmOui.js +11 -0
- package/dist/ui/assets/chunk-JA3XYJ7Z-Cr1rmOui.js.gz +0 -0
- package/dist/ui/assets/{chunk-JZLCHNYA-EUmx2y4H.js → chunk-JZLCHNYA-BsgZ79Fa.js} +5 -5
- package/dist/ui/assets/chunk-JZLCHNYA-BsgZ79Fa.js.gz +0 -0
- package/dist/ui/assets/{chunk-MI3HLSF2-65n9Mkyc.js → chunk-MI3HLSF2-dwYeUy5S.js} +1 -1
- package/dist/ui/assets/chunk-MI3HLSF2-dwYeUy5S.js.gz +0 -0
- package/dist/ui/assets/chunk-N4CR4FBY-DEMgSRVe.js +2 -0
- package/dist/ui/assets/chunk-N4CR4FBY-DEMgSRVe.js.gz +0 -0
- package/dist/ui/assets/{chunk-QN33PNHL-DsRKK6NR.js → chunk-QN33PNHL-DxdIDCAa.js} +1 -1
- package/dist/ui/assets/{chunk-QXUST7PY-BCYnMiS3.js → chunk-QXUST7PY-BCK2V0i-.js} +2 -2
- package/dist/ui/assets/chunk-QXUST7PY-BCK2V0i-.js.gz +0 -0
- package/dist/ui/assets/chunk-QZHKN3VN-CALjGrEE.js +1 -0
- package/dist/ui/assets/chunk-S3R3BYOJ-GP3zIxrB.js +2 -0
- package/dist/ui/assets/chunk-S3R3BYOJ-GP3zIxrB.js.gz +0 -0
- package/dist/ui/assets/{chunk-TZMSLE5B-BuQUQcTr.js → chunk-TZMSLE5B-dX5RaM6g.js} +1 -1
- package/dist/ui/assets/chunk-TZMSLE5B-dX5RaM6g.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-C3_RVP70.js +1 -0
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-C3_RVP70.js +1 -0
- package/dist/ui/assets/constants-GjIDNVyt.js +1 -0
- package/dist/ui/assets/{cose-bilkent-S5V4N54A-CnPB3ARO.js → cose-bilkent-S5V4N54A-Dx0BJVDl.js} +1 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-Dx0BJVDl.js.gz +0 -0
- package/dist/ui/assets/{dagre-6UL2VRFP-DhS-k_Se.js → dagre-6UL2VRFP-DiQSUxqN.js} +1 -1
- package/dist/ui/assets/dagre-6UL2VRFP-DiQSUxqN.js.gz +0 -0
- package/dist/ui/assets/{dagre-KgLoHEuy.js → dagre-Bekd9Vdj.js} +1 -1
- package/dist/ui/assets/dagre-Bekd9Vdj.js.gz +0 -0
- package/dist/ui/assets/diagram-PSM6KHXK-DtJnDQjc.js +24 -0
- package/dist/ui/assets/diagram-PSM6KHXK-DtJnDQjc.js.gz +0 -0
- package/dist/ui/assets/{diagram-QEK2KX5R-BPCitvbo.js → diagram-QEK2KX5R-CobkCRdj.js} +1 -1
- package/dist/ui/assets/diagram-QEK2KX5R-CobkCRdj.js.gz +0 -0
- package/dist/ui/assets/{diagram-S2PKOQOG-NW4uK6sx.js → diagram-S2PKOQOG-DHEZYivc.js} +1 -1
- package/dist/ui/assets/diagram-S2PKOQOG-DHEZYivc.js.gz +0 -0
- package/dist/ui/assets/editor-DQIG-JYZ.js +43 -0
- package/dist/ui/assets/editor-DQIG-JYZ.js.gz +0 -0
- package/dist/ui/assets/emoji-B0hLmSLZ.js +3 -0
- package/dist/ui/assets/emoji-B0hLmSLZ.js.gz +0 -0
- package/dist/ui/assets/{erDiagram-Q2GNP2WA-me1fboaf.js → erDiagram-Q2GNP2WA-BVNeTZPQ.js} +2 -2
- package/dist/ui/assets/erDiagram-Q2GNP2WA-BVNeTZPQ.js.gz +0 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-C73VFdyk.js +162 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-C73VFdyk.js.gz +0 -0
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-B_RosuD1.js +267 -0
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-B_RosuD1.js.gz +0 -0
- package/dist/ui/assets/{gitGraph-F6HP7TQM-CfFE_uAC.js → gitGraph-F6HP7TQM-DMFIqn4h.js} +1 -1
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-hxbgwNA1.js +65 -0
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-hxbgwNA1.js.gz +0 -0
- package/dist/ui/assets/index-DTz1Dif6.js +64 -0
- package/dist/ui/assets/index-DTz1Dif6.js.gz +0 -0
- package/dist/ui/assets/{index-DxuPq13l.css → index-qkT7Qqm2.css} +1 -1
- package/dist/ui/assets/index-qkT7Qqm2.css.gz +0 -0
- package/dist/ui/assets/{info-NVLQJR56-i_xHYg3f.js → info-NVLQJR56-DZ3K-w48.js} +1 -1
- package/dist/ui/assets/{infoDiagram-ER5ION4S-2NL93b78.js → infoDiagram-ER5ION4S-CxnBJQu6.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CZF-2DHU.js → journeyDiagram-XKPGCS4Q-CHYNj-f8.js} +3 -3
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CHYNj-f8.js.gz +0 -0
- package/dist/ui/assets/{kanban-definition-3W4ZIXB7-CfvJIOny.js → kanban-definition-3W4ZIXB7-DQPCCsj2.js} +1 -1
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-DQPCCsj2.js.gz +0 -0
- package/dist/ui/assets/{line-DDv8kOJk.js → line-DBRjKmfa.js} +1 -1
- package/dist/ui/assets/{linear-Daef-l29.js → linear-DFao5Wyp.js} +1 -1
- package/dist/ui/assets/linear-DFao5Wyp.js.gz +0 -0
- package/dist/ui/assets/{mermaid-parser.core-CdK9QgYV.js → mermaid-parser.core-DYCfacHj.js} +2 -2
- package/dist/ui/assets/mermaid-parser.core-DYCfacHj.js.gz +0 -0
- package/dist/ui/assets/mermaid.core-C6xGFSdE.js +11 -0
- package/dist/ui/assets/mermaid.core-C6xGFSdE.js.gz +0 -0
- package/dist/ui/assets/{mindmap-definition-VGOIOE7T-Cb3QMflX.js → mindmap-definition-VGOIOE7T-L3Pw-YM7.js} +1 -1
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-L3Pw-YM7.js.gz +0 -0
- package/dist/ui/assets/{packet-BFZMPI3H-Bm2uwz4i.js → packet-BFZMPI3H-CpL6iNoa.js} +1 -1
- package/dist/ui/assets/{particles-DsJFOarW.js → particles-CT8hcJOA.js} +1 -1
- package/dist/ui/assets/particles-CT8hcJOA.js.gz +0 -0
- package/dist/ui/assets/{pie-7BOR55EZ-5i17tVnF.js → pie-7BOR55EZ-hTqChbTo.js} +1 -1
- package/dist/ui/assets/{pieDiagram-ADFJNKIX-BxIwQWvw.js → pieDiagram-ADFJNKIX-Bf4Nou75.js} +1 -1
- package/dist/ui/assets/pieDiagram-ADFJNKIX-Bf4Nou75.js.gz +0 -0
- package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-B5HPe4ga.js → quadrantDiagram-AYHSOK5B-DpjUTLB1.js} +3 -3
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DpjUTLB1.js.gz +0 -0
- package/dist/ui/assets/{radar-NHE76QYJ-BTn-tq0k.js → radar-NHE76QYJ-myy7OENC.js} +1 -1
- package/dist/ui/assets/reactflow-Cubtnk8i.js +2 -0
- package/dist/ui/assets/reactflow-Cubtnk8i.js.gz +0 -0
- package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-YfI6llkX.js → requirementDiagram-UZGBJVZJ-Bfrfh-0-.js} +1 -1
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bfrfh-0-.js.gz +0 -0
- package/dist/ui/assets/{sandpack-D7koO5op.js → sandpack-C58bwfIS.js} +38 -38
- package/dist/ui/assets/sandpack-C58bwfIS.js.gz +0 -0
- package/dist/ui/assets/sandpackDefaults-Bkga8XAE.js +1 -0
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-ClZAZ6va.js +10 -0
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-ClZAZ6va.js.gz +0 -0
- package/dist/ui/assets/{sequenceDiagram-WL72ISMW-DAe4Um17.js → sequenceDiagram-WL72ISMW-CNgly63p.js} +6 -6
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-CNgly63p.js.gz +0 -0
- package/dist/ui/assets/src-DAeyG22O.js +34 -0
- package/dist/ui/assets/src-DAeyG22O.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-BrEAoDpE.js +1 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-BrEAoDpE.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BNL52_oN.js +1 -0
- package/dist/ui/assets/streamdown-BdAVfkeF.js +521 -0
- package/dist/ui/assets/streamdown-BdAVfkeF.js.gz +0 -0
- package/dist/ui/assets/syntax-BOfTnQiy.js +9 -0
- package/dist/ui/assets/syntax-BOfTnQiy.js.gz +0 -0
- package/dist/ui/assets/{timeline-definition-IT6M3QCI-D6P5txjT.js → timeline-definition-IT6M3QCI-CaRH3k4l.js} +16 -16
- package/dist/ui/assets/timeline-definition-IT6M3QCI-CaRH3k4l.js.gz +0 -0
- package/dist/ui/assets/{treemap-KMMF4GRG-Bitm3gy4.js → treemap-KMMF4GRG-CUaLOV_B.js} +1 -1
- package/dist/ui/assets/{useUserLocalStorage-Ckb8HsIw.js → useUserLocalStorage-C8sgXgXR.js} +1 -1
- package/dist/ui/assets/useUserLocalStorage-C8sgXgXR.js.gz +0 -0
- package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CsybjUbd.js → xychartDiagram-PRI3JC2R-BlhkI9T_.js} +1 -1
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-BlhkI9T_.js.gz +0 -0
- package/dist/ui/index.html +10 -11
- package/dist/ui/index.html.gz +0 -0
- package/package.json +6 -5
- package/scripts/postinstall.js +27 -19
- package/dist/cli/commands/daemon/sync.d.ts.map +0 -1
- package/dist/ui/assets/App-DcEY8Ota.js +0 -3
- package/dist/ui/assets/App-DcEY8Ota.js.gz +0 -0
- package/dist/ui/assets/ArtifactConsentModal-CiCbK9iv.js +0 -1
- package/dist/ui/assets/ArtifactConsentModal-CiCbK9iv.js.gz +0 -0
- package/dist/ui/assets/ArtifactFullscreenPage-CfsTEGKd.js +0 -9
- package/dist/ui/assets/ArtifactFullscreenPage-CfsTEGKd.js.gz +0 -0
- package/dist/ui/assets/AutocompleteTextarea-BAFFH_5e.js +0 -18
- package/dist/ui/assets/AutocompleteTextarea-BAFFH_5e.js.gz +0 -0
- package/dist/ui/assets/BoardObjectNodes-D-O6bZIG.js +0 -34
- package/dist/ui/assets/BoardObjectNodes-D-O6bZIG.js.gz +0 -0
- package/dist/ui/assets/CodeEditor.inner-DBgsP4tn.js +0 -8
- package/dist/ui/assets/CodeEditor.inner-DBgsP4tn.js.gz +0 -0
- package/dist/ui/assets/ConversationView-CUWR0gR6.js +0 -1
- package/dist/ui/assets/ConversationView-CUWR0gR6.js.gz +0 -0
- package/dist/ui/assets/KnowledgePage-B2bzlXfn.js +0 -24
- package/dist/ui/assets/KnowledgePage-B2bzlXfn.js.gz +0 -0
- package/dist/ui/assets/MarketingScreenshotPage-zv5RUCuV.js.gz +0 -0
- package/dist/ui/assets/MobileApp-VgVnsnsN.js +0 -1
- package/dist/ui/assets/MobileApp-VgVnsnsN.js.gz +0 -0
- package/dist/ui/assets/SessionCanvas-f1-1Gbcw.js +0 -20
- package/dist/ui/assets/SessionCanvas-f1-1Gbcw.js.gz +0 -0
- package/dist/ui/assets/SessionCanvas-mEmYGZhC.css.gz +0 -0
- package/dist/ui/assets/StreamdownDemoPage-wzWaqWwr.js.gz +0 -0
- package/dist/ui/assets/ThemeSwitcher-Dly2y9pi.js +0 -1
- package/dist/ui/assets/ThemeSwitcher-Dly2y9pi.js.gz +0 -0
- package/dist/ui/assets/architecture-U656AL7Q-CykGFbQU.js +0 -1
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-C8HXAenz.js +0 -36
- package/dist/ui/assets/architectureDiagram-VXUJARFQ-C8HXAenz.js.gz +0 -0
- package/dist/ui/assets/blockDiagram-VD42YOAC-BhZaEN19.js.gz +0 -0
- package/dist/ui/assets/c4Diagram-YG6GDRKO-Dk_UH-sY.js.gz +0 -0
- package/dist/ui/assets/channel-D6_nUWlW.js +0 -1
- package/dist/ui/assets/chunk-55IACEB6-ByzqIgSb.js +0 -1
- package/dist/ui/assets/chunk-ABZYJK2D-BJcrryHK.js.gz +0 -0
- package/dist/ui/assets/chunk-AGHRB4JF-DvxmfbM0.js.gz +0 -0
- package/dist/ui/assets/chunk-ATLVNIR6-DbeJ0OrR.js.gz +0 -0
- package/dist/ui/assets/chunk-B4BG7PRW-C53q2ggf.js.gz +0 -0
- package/dist/ui/assets/chunk-DI55MBZ5-vIyNEQN-.js.gz +0 -0
- package/dist/ui/assets/chunk-EXTU4WIE-B3ObkuOm.js +0 -1
- package/dist/ui/assets/chunk-HN2XXSSU-Dttqcg3b.js.gz +0 -0
- package/dist/ui/assets/chunk-JA3XYJ7Z-DbNDev3D.js +0 -11
- package/dist/ui/assets/chunk-JA3XYJ7Z-DbNDev3D.js.gz +0 -0
- package/dist/ui/assets/chunk-JZLCHNYA-EUmx2y4H.js.gz +0 -0
- package/dist/ui/assets/chunk-MI3HLSF2-65n9Mkyc.js.gz +0 -0
- package/dist/ui/assets/chunk-N4CR4FBY-mv5koXqW.js +0 -2
- package/dist/ui/assets/chunk-N4CR4FBY-mv5koXqW.js.gz +0 -0
- package/dist/ui/assets/chunk-QXUST7PY-BCYnMiS3.js.gz +0 -0
- package/dist/ui/assets/chunk-QZHKN3VN-HucAw4xW.js +0 -1
- package/dist/ui/assets/chunk-S3R3BYOJ-CWMEa9Dc.js +0 -2
- package/dist/ui/assets/chunk-S3R3BYOJ-CWMEa9Dc.js.gz +0 -0
- package/dist/ui/assets/chunk-TZMSLE5B-BuQUQcTr.js.gz +0 -0
- package/dist/ui/assets/classDiagram-2ON5EDUG-CUT3rPTB.js +0 -1
- package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CUT3rPTB.js +0 -1
- package/dist/ui/assets/cose-bilkent-S5V4N54A-CnPB3ARO.js.gz +0 -0
- package/dist/ui/assets/dagre-6UL2VRFP-DhS-k_Se.js.gz +0 -0
- package/dist/ui/assets/dagre-KgLoHEuy.js.gz +0 -0
- package/dist/ui/assets/diagram-PSM6KHXK-BZg3MJmb.js +0 -24
- package/dist/ui/assets/diagram-PSM6KHXK-BZg3MJmb.js.gz +0 -0
- package/dist/ui/assets/diagram-QEK2KX5R-BPCitvbo.js.gz +0 -0
- package/dist/ui/assets/diagram-S2PKOQOG-NW4uK6sx.js.gz +0 -0
- package/dist/ui/assets/editor-CzFWIUw2.js +0 -39
- package/dist/ui/assets/editor-CzFWIUw2.js.gz +0 -0
- package/dist/ui/assets/emoji-Dkz4Zzv_.js +0 -3
- package/dist/ui/assets/emoji-Dkz4Zzv_.js.gz +0 -0
- package/dist/ui/assets/erDiagram-Q2GNP2WA-me1fboaf.js.gz +0 -0
- package/dist/ui/assets/flowDiagram-NV44I4VS-DzE8dGsh.js +0 -162
- package/dist/ui/assets/flowDiagram-NV44I4VS-DzE8dGsh.js.gz +0 -0
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-CFQD09Mi.js +0 -267
- package/dist/ui/assets/ganttDiagram-LVOFAZNH-CFQD09Mi.js.gz +0 -0
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CaVoxU4C.js +0 -65
- package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CaVoxU4C.js.gz +0 -0
- package/dist/ui/assets/index-BN5_Qq7R.js +0 -324
- package/dist/ui/assets/index-BN5_Qq7R.js.gz +0 -0
- package/dist/ui/assets/index-DxuPq13l.css.gz +0 -0
- package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CZF-2DHU.js.gz +0 -0
- package/dist/ui/assets/kanban-definition-3W4ZIXB7-CfvJIOny.js.gz +0 -0
- package/dist/ui/assets/katex-CamJ39w1.js +0 -257
- package/dist/ui/assets/katex-CamJ39w1.js.gz +0 -0
- package/dist/ui/assets/linear-Daef-l29.js.gz +0 -0
- package/dist/ui/assets/mermaid-parser.core-CdK9QgYV.js.gz +0 -0
- package/dist/ui/assets/mermaid.core-D6GS9mU-.js +0 -11
- package/dist/ui/assets/mermaid.core-D6GS9mU-.js.gz +0 -0
- package/dist/ui/assets/message-SqLqNYcv.js +0 -36
- package/dist/ui/assets/message-SqLqNYcv.js.gz +0 -0
- package/dist/ui/assets/mindmap-definition-VGOIOE7T-Cb3QMflX.js.gz +0 -0
- package/dist/ui/assets/particles-DsJFOarW.js.gz +0 -0
- package/dist/ui/assets/pieDiagram-ADFJNKIX-BxIwQWvw.js.gz +0 -0
- package/dist/ui/assets/quadrantDiagram-AYHSOK5B-B5HPe4ga.js.gz +0 -0
- package/dist/ui/assets/reactflow-Bf74ngoo.js +0 -2
- package/dist/ui/assets/reactflow-Bf74ngoo.js.gz +0 -0
- package/dist/ui/assets/requirementDiagram-UZGBJVZJ-YfI6llkX.js.gz +0 -0
- package/dist/ui/assets/sandpack-D7koO5op.js.gz +0 -0
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-DOk_B10B.js +0 -10
- package/dist/ui/assets/sankeyDiagram-TZEHDZUN-DOk_B10B.js.gz +0 -0
- package/dist/ui/assets/sequenceDiagram-WL72ISMW-DAe4Um17.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-CCesDu_C.js +0 -1
- package/dist/ui/assets/stateDiagram-FKZM4ZOC-CCesDu_C.js.gz +0 -0
- package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-CMlIrsoO.js +0 -1
- package/dist/ui/assets/syntax-C-M-8jOU.js +0 -10
- package/dist/ui/assets/syntax-C-M-8jOU.js.gz +0 -0
- package/dist/ui/assets/theme-BQZdiqwv.js +0 -1
- package/dist/ui/assets/timeline-definition-IT6M3QCI-D6P5txjT.js.gz +0 -0
- package/dist/ui/assets/useUserLocalStorage-Ckb8HsIw.js.gz +0 -0
- package/dist/ui/assets/xychartDiagram-PRI3JC2R-CsybjUbd.js.gz +0 -0
- /package/dist/cli/commands/{admin → local}/sync-unix.d.ts +0 -0
package/dist/core/unix/index.cjs
CHANGED
|
@@ -12,14 +12,15 @@ var __export = (target, all) => {
|
|
|
12
12
|
for (var name in all)
|
|
13
13
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
14
|
};
|
|
15
|
-
var __copyProps = (to, from, except,
|
|
15
|
+
var __copyProps = (to, from, except, desc6) => {
|
|
16
16
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
17
|
for (let key of __getOwnPropNames(from))
|
|
18
18
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc6 = __getOwnPropDesc(from, key)) || desc6.enumerable });
|
|
20
20
|
}
|
|
21
21
|
return to;
|
|
22
22
|
};
|
|
23
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
23
24
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
24
25
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
25
26
|
// file that has been converted to a CommonJS file using a Babel-
|
|
@@ -31,9 +32,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
31
32
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
33
|
|
|
33
34
|
// ../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.15_tsx@4.22.4_typescript@6.0.3_yaml@2.9.0/node_modules/tsup/assets/cjs_shims.js
|
|
35
|
+
var getImportMetaUrl, importMetaUrl;
|
|
34
36
|
var init_cjs_shims = __esm({
|
|
35
37
|
"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.15_tsx@4.22.4_typescript@6.0.3_yaml@2.9.0/node_modules/tsup/assets/cjs_shims.js"() {
|
|
36
38
|
"use strict";
|
|
39
|
+
getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
|
|
40
|
+
importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
|
|
37
41
|
}
|
|
38
42
|
});
|
|
39
43
|
|
|
@@ -156,6 +160,71 @@ var init_executor_heartbeat = __esm({
|
|
|
156
160
|
}
|
|
157
161
|
});
|
|
158
162
|
|
|
163
|
+
// src/config/multitenancy.ts
|
|
164
|
+
function detectPostgresUrl(url) {
|
|
165
|
+
if (!url) return false;
|
|
166
|
+
const lower = url.toLowerCase();
|
|
167
|
+
return lower.startsWith("postgresql://") || lower.startsWith("postgres://") || lower.startsWith("pg://");
|
|
168
|
+
}
|
|
169
|
+
function resolveMultiTenancyDatabaseDialect(config = {}) {
|
|
170
|
+
if (process.env.AGOR_DB_DIALECT === "postgresql" || process.env.AGOR_DB_DIALECT === "sqlite") {
|
|
171
|
+
return process.env.AGOR_DB_DIALECT;
|
|
172
|
+
}
|
|
173
|
+
if (detectPostgresUrl(process.env.DATABASE_URL)) return "postgresql";
|
|
174
|
+
if (config.database?.dialect === "postgresql" || config.database?.dialect === "sqlite") {
|
|
175
|
+
return config.database.dialect;
|
|
176
|
+
}
|
|
177
|
+
if (detectPostgresUrl(config.database?.postgresql?.url) || config.database?.postgresql?.host) {
|
|
178
|
+
return "postgresql";
|
|
179
|
+
}
|
|
180
|
+
return "sqlite";
|
|
181
|
+
}
|
|
182
|
+
function resolveMultiTenancyConfig(config) {
|
|
183
|
+
const raw = config.multi_tenancy ?? {};
|
|
184
|
+
const mode = raw.mode ?? "static";
|
|
185
|
+
return {
|
|
186
|
+
mode,
|
|
187
|
+
static_tenant_id: raw.static_tenant_id?.trim() || DEFAULT_STATIC_TENANT_ID,
|
|
188
|
+
...raw.auth_claim ? { auth_claim: raw.auth_claim } : {},
|
|
189
|
+
...raw.trusted_header ? { trusted_header: raw.trusted_header } : {}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function assertValidMultiTenancyConfig(config) {
|
|
193
|
+
const resolved = resolveMultiTenancyConfig(config);
|
|
194
|
+
if (resolved.mode !== "static" && resolved.mode !== "required_from_auth") {
|
|
195
|
+
throw new Error("Config error: multi_tenancy.mode must be one of: static, required_from_auth");
|
|
196
|
+
}
|
|
197
|
+
if (!resolved.static_tenant_id) {
|
|
198
|
+
throw new Error("Config error: multi_tenancy.static_tenant_id must not be empty");
|
|
199
|
+
}
|
|
200
|
+
if (resolved.auth_claim && RESERVED_AUTH_CLAIMS.has(resolved.auth_claim)) {
|
|
201
|
+
throw new Error(
|
|
202
|
+
`Config error: multi_tenancy.auth_claim cannot be reserved JWT claim '${resolved.auth_claim}'`
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
if (resolved.mode === "required_from_auth") {
|
|
206
|
+
if (resolveMultiTenancyDatabaseDialect(config) !== "postgresql") {
|
|
207
|
+
throw new Error(
|
|
208
|
+
"Config error: multi_tenancy.required_from_auth requires database.dialect: postgresql"
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
if (!resolved.auth_claim && !resolved.trusted_header) {
|
|
212
|
+
throw new Error(
|
|
213
|
+
"Config error: multi_tenancy.required_from_auth requires multi_tenancy.auth_claim or multi_tenancy.trusted_header"
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
var DEFAULT_STATIC_TENANT_ID, RESERVED_AUTH_CLAIMS;
|
|
219
|
+
var init_multitenancy = __esm({
|
|
220
|
+
"src/config/multitenancy.ts"() {
|
|
221
|
+
"use strict";
|
|
222
|
+
init_cjs_shims();
|
|
223
|
+
DEFAULT_STATIC_TENANT_ID = "default";
|
|
224
|
+
RESERVED_AUTH_CLAIMS = /* @__PURE__ */ new Set(["aud", "exp", "iat", "iss", "jti", "nbf", "sub", "type"]);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
|
|
159
228
|
// src/config/types.ts
|
|
160
229
|
var BRANCH_STORAGE_MODES, DEFAULT_BRANCH_STORAGE_MODE;
|
|
161
230
|
var init_types = __esm({
|
|
@@ -200,6 +269,7 @@ __export(config_manager_exports, {
|
|
|
200
269
|
requireDaemonUser: () => requireDaemonUser,
|
|
201
270
|
requirePublicBaseUrl: () => requirePublicBaseUrl,
|
|
202
271
|
resolveBranchStorageConfig: () => resolveBranchStorageConfig,
|
|
272
|
+
resolveExecutionSecurityMode: () => resolveExecutionSecurityMode,
|
|
203
273
|
saveConfig: () => saveConfig,
|
|
204
274
|
setConfigValue: () => setConfigValue,
|
|
205
275
|
unsetConfigValue: () => unsetConfigValue
|
|
@@ -209,8 +279,8 @@ function cacheKeyMatches(a, b) {
|
|
|
209
279
|
}
|
|
210
280
|
function statCacheKey(configPath) {
|
|
211
281
|
try {
|
|
212
|
-
const
|
|
213
|
-
return { mtimeMs:
|
|
282
|
+
const stat = (0, import_node_fs2.statSync)(configPath);
|
|
283
|
+
return { mtimeMs: stat.mtimeMs, size: stat.size };
|
|
214
284
|
} catch (error) {
|
|
215
285
|
if (error.code === "ENOENT") {
|
|
216
286
|
return NO_FILE_KEY;
|
|
@@ -238,7 +308,10 @@ function __resetConfigCacheForTests() {
|
|
|
238
308
|
invalidateConfigCache();
|
|
239
309
|
}
|
|
240
310
|
function parseAndValidateConfig(content) {
|
|
241
|
-
|
|
311
|
+
if (content.trim() === "") {
|
|
312
|
+
return {};
|
|
313
|
+
}
|
|
314
|
+
const parsed = yaml2.load(content);
|
|
242
315
|
const finalConfig = parsed || {};
|
|
243
316
|
validateConfig(finalConfig);
|
|
244
317
|
return finalConfig;
|
|
@@ -275,6 +348,7 @@ To update: agor config set execution.unix_user_mode insulated`
|
|
|
275
348
|
`Config error: execution.managed_envs_execution_mode must be one of: hybrid, webhook-only`
|
|
276
349
|
);
|
|
277
350
|
}
|
|
351
|
+
assertValidMultiTenancyConfig(config);
|
|
278
352
|
validateOptionalHttpUrl(
|
|
279
353
|
config.external_launch,
|
|
280
354
|
"login_redirect_url",
|
|
@@ -354,7 +428,7 @@ async function saveConfig(config) {
|
|
|
354
428
|
validateConfig(config);
|
|
355
429
|
await ensureAgorHome();
|
|
356
430
|
const configPath = getConfigPath();
|
|
357
|
-
const content =
|
|
431
|
+
const content = yaml2.dump(config, {
|
|
358
432
|
indent: 2,
|
|
359
433
|
lineWidth: 120,
|
|
360
434
|
noRefs: true
|
|
@@ -392,7 +466,12 @@ function getDefaultConfig() {
|
|
|
392
466
|
// Default: sync passwords to Unix
|
|
393
467
|
executor_heartbeat: resolveExecutorHeartbeatConfig()
|
|
394
468
|
},
|
|
395
|
-
analytics: getDefaultAnalyticsConfig()
|
|
469
|
+
analytics: getDefaultAnalyticsConfig(),
|
|
470
|
+
telemetry: {},
|
|
471
|
+
multi_tenancy: {
|
|
472
|
+
mode: "static",
|
|
473
|
+
static_tenant_id: "default"
|
|
474
|
+
}
|
|
396
475
|
};
|
|
397
476
|
}
|
|
398
477
|
function expandHomePath(input) {
|
|
@@ -424,7 +503,8 @@ async function getConfigValue(key) {
|
|
|
424
503
|
ui: { ...defaults.ui, ...config.ui },
|
|
425
504
|
execution: { ...defaults.execution, ...config.execution },
|
|
426
505
|
paths: { ...defaults.paths, ...config.paths },
|
|
427
|
-
analytics: { ...defaults.analytics, ...config.analytics }
|
|
506
|
+
analytics: { ...defaults.analytics, ...config.analytics },
|
|
507
|
+
telemetry: { ...defaults.telemetry, ...config.telemetry }
|
|
428
508
|
};
|
|
429
509
|
const parts = key.split(".");
|
|
430
510
|
let value = merged;
|
|
@@ -586,10 +666,10 @@ function requireDaemonUser(config) {
|
|
|
586
666
|
if (config.daemon?.unix_user) {
|
|
587
667
|
return config.daemon.unix_user;
|
|
588
668
|
}
|
|
589
|
-
const unixIsolationEnabled = config.
|
|
669
|
+
const unixIsolationEnabled = resolveExecutionSecurityMode(config).requiresDaemonUnixUser;
|
|
590
670
|
if (unixIsolationEnabled) {
|
|
591
671
|
throw new Error(
|
|
592
|
-
"Unix isolation is enabled (
|
|
672
|
+
"Unix isolation is enabled (execution.unix_user_mode is insulated or strict) but daemon.unix_user is not configured.\nPlease set daemon.unix_user in ~/.agor/config.yaml to the user running the daemon.\nExample:\n daemon:\n unix_user: agor"
|
|
593
673
|
);
|
|
594
674
|
}
|
|
595
675
|
const user = process.env.USER || import_node_os.default.userInfo().username;
|
|
@@ -600,19 +680,29 @@ function requireDaemonUser(config) {
|
|
|
600
680
|
}
|
|
601
681
|
return user;
|
|
602
682
|
}
|
|
683
|
+
function resolveExecutionSecurityMode(config = loadConfigSync()) {
|
|
684
|
+
const unixUserMode = config.execution?.unix_user_mode ?? "simple";
|
|
685
|
+
const unixIsolationEnabled = unixUserMode !== "simple";
|
|
686
|
+
return {
|
|
687
|
+
appRbacEnabled: config.execution?.branch_rbac === true,
|
|
688
|
+
unixUserMode,
|
|
689
|
+
unixImpersonationEnabled: unixIsolationEnabled,
|
|
690
|
+
unixFsIsolationEnabled: unixIsolationEnabled,
|
|
691
|
+
unixGroupRefreshNeeded: unixIsolationEnabled,
|
|
692
|
+
requiresDaemonUnixUser: unixIsolationEnabled,
|
|
693
|
+
shouldInitUnixGroups: unixIsolationEnabled
|
|
694
|
+
};
|
|
695
|
+
}
|
|
603
696
|
function isBranchRbacEnabled() {
|
|
604
697
|
try {
|
|
605
|
-
|
|
606
|
-
return config.execution?.branch_rbac === true;
|
|
698
|
+
return resolveExecutionSecurityMode().appRbacEnabled;
|
|
607
699
|
} catch {
|
|
608
700
|
return false;
|
|
609
701
|
}
|
|
610
702
|
}
|
|
611
703
|
function isUnixImpersonationEnabled() {
|
|
612
704
|
try {
|
|
613
|
-
|
|
614
|
-
const mode = config.execution?.unix_user_mode;
|
|
615
|
-
return mode !== void 0 && mode !== "simple";
|
|
705
|
+
return resolveExecutionSecurityMode().unixImpersonationEnabled;
|
|
616
706
|
} catch {
|
|
617
707
|
return false;
|
|
618
708
|
}
|
|
@@ -638,7 +728,7 @@ function ensureBranchStorageModeAllowed(mode) {
|
|
|
638
728
|
}
|
|
639
729
|
}
|
|
640
730
|
function isUnixGroupRefreshNeeded() {
|
|
641
|
-
return
|
|
731
|
+
return resolveExecutionSecurityMode().unixGroupRefreshNeeded;
|
|
642
732
|
}
|
|
643
733
|
function getDataHome() {
|
|
644
734
|
if (process.env.AGOR_DATA_HOME) {
|
|
@@ -681,7 +771,7 @@ async function getReposDirAsync() {
|
|
|
681
771
|
async function getBranchesDirAsync() {
|
|
682
772
|
return import_node_path.default.join(await getDataHomeAsync(), "worktrees");
|
|
683
773
|
}
|
|
684
|
-
var import_node_fs2, import_promises, import_node_os, import_node_path,
|
|
774
|
+
var import_node_fs2, import_promises, import_node_os, import_node_path, yaml2, NO_FILE, NO_FILE_KEY, cachedEntry, PublicBaseUrlNotConfiguredError, CONFIG_CREDENTIAL_KEYS;
|
|
685
775
|
var init_config_manager = __esm({
|
|
686
776
|
"src/config/config-manager.ts"() {
|
|
687
777
|
"use strict";
|
|
@@ -690,10 +780,11 @@ var init_config_manager = __esm({
|
|
|
690
780
|
import_promises = __toESM(require("fs/promises"), 1);
|
|
691
781
|
import_node_os = __toESM(require("os"), 1);
|
|
692
782
|
import_node_path = __toESM(require("path"), 1);
|
|
693
|
-
|
|
783
|
+
yaml2 = __toESM(require("js-yaml"), 1);
|
|
694
784
|
init_analytics_defaults();
|
|
695
785
|
init_constants();
|
|
696
786
|
init_executor_heartbeat();
|
|
787
|
+
init_multitenancy();
|
|
697
788
|
init_types();
|
|
698
789
|
NO_FILE = -1;
|
|
699
790
|
NO_FILE_KEY = { mtimeMs: NO_FILE, size: 0 };
|
|
@@ -716,6 +807,21 @@ var init_config_manager = __esm({
|
|
|
716
807
|
}
|
|
717
808
|
});
|
|
718
809
|
|
|
810
|
+
// src/db/tenant-context.ts
|
|
811
|
+
function getCurrentTenantId() {
|
|
812
|
+
const store = tenantDatabaseScope.getStore();
|
|
813
|
+
return store?.kind === "tenant" ? store.tenantId : void 0;
|
|
814
|
+
}
|
|
815
|
+
var import_node_async_hooks, tenantDatabaseScope;
|
|
816
|
+
var init_tenant_context = __esm({
|
|
817
|
+
"src/db/tenant-context.ts"() {
|
|
818
|
+
"use strict";
|
|
819
|
+
init_cjs_shims();
|
|
820
|
+
import_node_async_hooks = require("async_hooks");
|
|
821
|
+
tenantDatabaseScope = new import_node_async_hooks.AsyncLocalStorage();
|
|
822
|
+
}
|
|
823
|
+
});
|
|
824
|
+
|
|
719
825
|
// src/db/database-wrapper.ts
|
|
720
826
|
var database_wrapper_exports = {};
|
|
721
827
|
__export(database_wrapper_exports, {
|
|
@@ -781,7 +887,7 @@ function dateTruncUtc(db, column, bucket) {
|
|
|
781
887
|
}
|
|
782
888
|
} else {
|
|
783
889
|
return import_drizzle_orm.sql`to_char(
|
|
784
|
-
date_trunc(${bucket}, ${column} AT TIME ZONE 'UTC'),
|
|
890
|
+
date_trunc(${import_drizzle_orm.sql.raw(`'${bucket}'`)}, ${column} AT TIME ZONE 'UTC'),
|
|
785
891
|
'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'
|
|
786
892
|
)`;
|
|
787
893
|
}
|
|
@@ -803,12 +909,12 @@ function advisoryLockKeyForUuid(uuid) {
|
|
|
803
909
|
const FNV_OFFSET = 0xcbf29ce484222325n;
|
|
804
910
|
const FNV_PRIME = 0x100000001b3n;
|
|
805
911
|
const MASK_64 = 0xffffffffffffffffn;
|
|
806
|
-
let
|
|
912
|
+
let hash = FNV_OFFSET;
|
|
807
913
|
for (let i = 0; i < uuid.length; i++) {
|
|
808
|
-
|
|
809
|
-
|
|
914
|
+
hash ^= BigInt(uuid.charCodeAt(i));
|
|
915
|
+
hash = hash * FNV_PRIME & MASK_64;
|
|
810
916
|
}
|
|
811
|
-
return
|
|
917
|
+
return hash > 0x7fffffffffffffffn ? hash - 0x10000000000000000n : hash;
|
|
812
918
|
}
|
|
813
919
|
async function executeRaw(db, query) {
|
|
814
920
|
if (isSQLiteDatabase(db)) {
|
|
@@ -836,21 +942,36 @@ async function getOne(db, table, where) {
|
|
|
836
942
|
}
|
|
837
943
|
async function insertOne(db, table, values) {
|
|
838
944
|
if (isSQLiteDatabase(db)) {
|
|
839
|
-
const result = await db.insert(table).values(values).returning();
|
|
945
|
+
const result = await db.insert(table).values(withTenantInsertValues(values, table)).returning();
|
|
840
946
|
return result;
|
|
841
947
|
} else {
|
|
842
|
-
const result = await db.insert(table).values(values).returning();
|
|
948
|
+
const result = await db.insert(table).values(withTenantInsertValues(values, table)).returning();
|
|
843
949
|
return result[0];
|
|
844
950
|
}
|
|
845
951
|
}
|
|
846
|
-
function
|
|
952
|
+
function tableHasTenantColumn(table) {
|
|
953
|
+
return Boolean(table && "tenant_id" in table);
|
|
954
|
+
}
|
|
955
|
+
function withTenantInsertValues(values, table) {
|
|
956
|
+
const tenantId = getCurrentTenantId();
|
|
957
|
+
if (!tenantId || !tableHasTenantColumn(table)) return values;
|
|
958
|
+
const stamp = (row) => {
|
|
959
|
+
if (!row || typeof row !== "object" || Array.isArray(row)) return row;
|
|
960
|
+
if ("tenant_id" in row) return row;
|
|
961
|
+
return { tenant_id: tenantId, ...row };
|
|
962
|
+
};
|
|
963
|
+
return Array.isArray(values) ? values.map(stamp) : stamp(values);
|
|
964
|
+
}
|
|
965
|
+
function wrapQuery(query, db, table) {
|
|
847
966
|
return {
|
|
848
967
|
...query,
|
|
849
968
|
one: async () => {
|
|
850
969
|
if (isSQLiteDatabase(db)) {
|
|
851
970
|
return await query.get();
|
|
852
971
|
} else {
|
|
853
|
-
const results = await query.limit(
|
|
972
|
+
const results = await query.limit(
|
|
973
|
+
1
|
|
974
|
+
);
|
|
854
975
|
return results[0] || null;
|
|
855
976
|
}
|
|
856
977
|
},
|
|
@@ -872,30 +993,55 @@ function wrapQuery(query, db) {
|
|
|
872
993
|
return { rowsAffected: result.length || 0 };
|
|
873
994
|
}
|
|
874
995
|
},
|
|
875
|
-
// biome-ignore lint/suspicious/noExplicitAny: Drizzle query builder types vary by dialect
|
|
876
996
|
returning: () => wrapReturning(query.returning(), db),
|
|
877
997
|
// Preserve chainable methods
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
998
|
+
where: (...args) => wrapQuery(
|
|
999
|
+
query.where(...args),
|
|
1000
|
+
db,
|
|
1001
|
+
table
|
|
1002
|
+
),
|
|
1003
|
+
limit: (...args) => wrapQuery(
|
|
1004
|
+
query.limit(...args),
|
|
1005
|
+
db,
|
|
1006
|
+
table
|
|
1007
|
+
),
|
|
1008
|
+
offset: (...args) => wrapQuery(
|
|
1009
|
+
query.offset(...args),
|
|
1010
|
+
db,
|
|
1011
|
+
table
|
|
1012
|
+
),
|
|
1013
|
+
orderBy: (...args) => wrapQuery(
|
|
1014
|
+
query.orderBy(...args),
|
|
1015
|
+
db,
|
|
1016
|
+
table
|
|
1017
|
+
),
|
|
1018
|
+
groupBy: (...args) => wrapQuery(
|
|
1019
|
+
query.groupBy(...args),
|
|
1020
|
+
db,
|
|
1021
|
+
table
|
|
1022
|
+
),
|
|
1023
|
+
set: (...args) => wrapQuery(query.set(...args), db, table),
|
|
1024
|
+
values: (...args) => wrapQuery(
|
|
1025
|
+
query.values(
|
|
1026
|
+
...args.map((arg) => withTenantInsertValues(arg, table))
|
|
1027
|
+
),
|
|
1028
|
+
db,
|
|
1029
|
+
table
|
|
1030
|
+
),
|
|
1031
|
+
innerJoin: (...args) => wrapQuery(
|
|
1032
|
+
query.innerJoin(...args),
|
|
1033
|
+
db,
|
|
1034
|
+
table
|
|
1035
|
+
),
|
|
1036
|
+
leftJoin: (...args) => wrapQuery(
|
|
1037
|
+
query.leftJoin(...args),
|
|
1038
|
+
db,
|
|
1039
|
+
table
|
|
1040
|
+
),
|
|
1041
|
+
onConflictDoNothing: (...args) => wrapQuery(
|
|
1042
|
+
query.onConflictDoNothing(...args),
|
|
1043
|
+
db,
|
|
1044
|
+
table
|
|
899
1045
|
)
|
|
900
1046
|
};
|
|
901
1047
|
}
|
|
@@ -928,7 +1074,7 @@ function select(db, columns) {
|
|
|
928
1074
|
}
|
|
929
1075
|
function insert(db, table) {
|
|
930
1076
|
const query = db.insert(table);
|
|
931
|
-
return wrapQuery(query, db);
|
|
1077
|
+
return wrapQuery(query, db, table);
|
|
932
1078
|
}
|
|
933
1079
|
function update(db, table) {
|
|
934
1080
|
const query = db.update(table);
|
|
@@ -968,6 +1114,7 @@ var init_database_wrapper = __esm({
|
|
|
968
1114
|
"use strict";
|
|
969
1115
|
init_cjs_shims();
|
|
970
1116
|
import_drizzle_orm = require("drizzle-orm");
|
|
1117
|
+
init_tenant_context();
|
|
971
1118
|
}
|
|
972
1119
|
});
|
|
973
1120
|
|
|
@@ -1245,6 +1392,14 @@ var init_template = __esm({
|
|
|
1245
1392
|
}
|
|
1246
1393
|
});
|
|
1247
1394
|
|
|
1395
|
+
// src/types/tenant.ts
|
|
1396
|
+
var init_tenant = __esm({
|
|
1397
|
+
"src/types/tenant.ts"() {
|
|
1398
|
+
"use strict";
|
|
1399
|
+
init_cjs_shims();
|
|
1400
|
+
}
|
|
1401
|
+
});
|
|
1402
|
+
|
|
1248
1403
|
// src/types/ui.ts
|
|
1249
1404
|
var init_ui = __esm({
|
|
1250
1405
|
"src/types/ui.ts"() {
|
|
@@ -1350,6 +1505,7 @@ var init_types2 = __esm({
|
|
|
1350
1505
|
init_session();
|
|
1351
1506
|
init_task();
|
|
1352
1507
|
init_template();
|
|
1508
|
+
init_tenant();
|
|
1353
1509
|
init_ui();
|
|
1354
1510
|
init_user();
|
|
1355
1511
|
init_utils();
|
|
@@ -1375,6 +1531,7 @@ __export(schema_postgres_exports, {
|
|
|
1375
1531
|
cardTypes: () => cardTypes,
|
|
1376
1532
|
cards: () => cards,
|
|
1377
1533
|
gatewayChannels: () => gatewayChannels,
|
|
1534
|
+
gatewayOutboundMessages: () => gatewayOutboundMessages,
|
|
1378
1535
|
groupMemberships: () => groupMemberships,
|
|
1379
1536
|
groups: () => groups,
|
|
1380
1537
|
kbDocumentUnits: () => kbDocumentUnits,
|
|
@@ -1403,7 +1560,7 @@ __export(schema_postgres_exports, {
|
|
|
1403
1560
|
userMcpOauthTokens: () => userMcpOauthTokens,
|
|
1404
1561
|
users: () => users
|
|
1405
1562
|
});
|
|
1406
|
-
var import_drizzle_orm2, import_pg_core, bytea, t, sessions, sessionRelationships, tasks, serializedSessions, messages, boards, repos, branches, branchOwners, boardOwners, schedules, users, groups, groupMemberships, branchGroupGrants, boardGroupGrants, appVariables, userApiKeys, mcpServers, cardTypes, cards, artifacts, artifactTrustGrants, boardObjects, sessionMcpServers, userMcpOauthTokens, boardComments, gatewayChannels, threadSessionMap, sessionEnvSelections, kbNamespaces, kbNamespaceAcl, kbDocuments, kbDocumentVersions, kbDocumentUnits, kbEmbeddingSpaces, kbGraphNodes, kbGraphEdges, sessionsRelations, sessionRelationshipsRelations, branchesRelations, schedulesRelations;
|
|
1563
|
+
var import_drizzle_orm2, import_pg_core, bytea, t, sessions, sessionRelationships, tasks, serializedSessions, messages, boards, repos, branches, branchOwners, boardOwners, schedules, users, groups, groupMemberships, branchGroupGrants, boardGroupGrants, appVariables, userApiKeys, mcpServers, cardTypes, cards, artifacts, artifactTrustGrants, boardObjects, sessionMcpServers, userMcpOauthTokens, boardComments, gatewayChannels, threadSessionMap, gatewayOutboundMessages, sessionEnvSelections, kbNamespaces, kbNamespaceAcl, kbDocuments, kbDocumentVersions, kbDocumentUnits, kbEmbeddingSpaces, kbGraphNodes, kbGraphEdges, sessionsRelations, sessionRelationshipsRelations, branchesRelations, schedulesRelations;
|
|
1407
1564
|
var init_schema_postgres = __esm({
|
|
1408
1565
|
"src/db/schema.postgres.ts"() {
|
|
1409
1566
|
"use strict";
|
|
@@ -1424,6 +1581,7 @@ var init_schema_postgres = __esm({
|
|
|
1424
1581
|
sessions = (0, import_pg_core.pgTable)(
|
|
1425
1582
|
"sessions",
|
|
1426
1583
|
{
|
|
1584
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1427
1585
|
// Primary identity
|
|
1428
1586
|
session_id: (0, import_pg_core.varchar)("session_id", { length: 36 }).primaryKey(),
|
|
1429
1587
|
created_at: t.timestamp("created_at").notNull(),
|
|
@@ -1483,7 +1641,9 @@ var init_schema_postgres = __esm({
|
|
|
1483
1641
|
data: t.json("data").$type().notNull()
|
|
1484
1642
|
},
|
|
1485
1643
|
(table) => ({
|
|
1644
|
+
tenantIdx: (0, import_pg_core.index)("sessions_tenant_id_idx").on(table.tenant_id),
|
|
1486
1645
|
statusIdx: (0, import_pg_core.index)("sessions_status_idx").on(table.status),
|
|
1646
|
+
statusReadyIdx: (0, import_pg_core.index)("sessions_status_ready_idx").on(table.status, table.ready_for_prompt),
|
|
1487
1647
|
agenticToolIdx: (0, import_pg_core.index)("sessions_agentic_tool_idx").on(table.agentic_tool),
|
|
1488
1648
|
boardIdx: (0, import_pg_core.index)("sessions_board_idx").on(table.board_id),
|
|
1489
1649
|
branchIdx: (0, import_pg_core.index)("sessions_branch_idx").on(table.branch_id),
|
|
@@ -1495,12 +1655,13 @@ var init_schema_postgres = __esm({
|
|
|
1495
1655
|
// Partial unique index — covering for the scheduler's dedup lookup
|
|
1496
1656
|
// AND serves as the DB-level guard against check-then-create races
|
|
1497
1657
|
// in spawnScheduledSession.
|
|
1498
|
-
scheduleRunUnique: (0, import_pg_core.uniqueIndex)("sessions_schedule_run_unique").on(table.schedule_id, table.scheduled_run_at).where(import_drizzle_orm2.sql`${table.schedule_id} IS NOT NULL AND ${table.scheduled_run_at} IS NOT NULL`)
|
|
1658
|
+
scheduleRunUnique: (0, import_pg_core.uniqueIndex)("sessions_schedule_run_unique").on(table.tenant_id, table.schedule_id, table.scheduled_run_at).where(import_drizzle_orm2.sql`${table.schedule_id} IS NOT NULL AND ${table.scheduled_run_at} IS NOT NULL`)
|
|
1499
1659
|
})
|
|
1500
1660
|
);
|
|
1501
1661
|
sessionRelationships = (0, import_pg_core.pgTable)(
|
|
1502
1662
|
"session_relationships",
|
|
1503
1663
|
{
|
|
1664
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1504
1665
|
relationship_id: (0, import_pg_core.varchar)("relationship_id", { length: 36 }).primaryKey(),
|
|
1505
1666
|
source_session_id: (0, import_pg_core.varchar)("source_session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
1506
1667
|
target_session_id: (0, import_pg_core.varchar)("target_session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
@@ -1518,10 +1679,23 @@ var init_schema_postgres = __esm({
|
|
|
1518
1679
|
data: t.json("data")
|
|
1519
1680
|
},
|
|
1520
1681
|
(table) => ({
|
|
1682
|
+
tenantIdx: (0, import_pg_core.index)("session_relationships_tenant_id_idx").on(table.tenant_id),
|
|
1521
1683
|
sourceIdx: (0, import_pg_core.index)("session_relationships_source_idx").on(table.source_session_id),
|
|
1522
1684
|
targetIdx: (0, import_pg_core.index)("session_relationships_target_idx").on(table.target_session_id),
|
|
1523
1685
|
callbackIdx: (0, import_pg_core.index)("session_relationships_callback_idx").on(table.callback_session_id),
|
|
1686
|
+
// Composite indexes so the OR predicate in dispatchCompletionCallbacks
|
|
1687
|
+
// (WHERE source_session_id = $1 OR target_session_id = $2) uses BitmapOr
|
|
1688
|
+
// over these instead of a full tenant table scan via tenant_id_idx.
|
|
1689
|
+
tenantSourceIdx: (0, import_pg_core.index)("session_relationships_tenant_source_idx").on(
|
|
1690
|
+
table.tenant_id,
|
|
1691
|
+
table.source_session_id
|
|
1692
|
+
),
|
|
1693
|
+
tenantTargetIdx: (0, import_pg_core.index)("session_relationships_tenant_target_idx").on(
|
|
1694
|
+
table.tenant_id,
|
|
1695
|
+
table.target_session_id
|
|
1696
|
+
),
|
|
1524
1697
|
sourceTargetTypeUnique: (0, import_pg_core.uniqueIndex)("session_relationships_source_target_type_unique").on(
|
|
1698
|
+
table.tenant_id,
|
|
1525
1699
|
table.source_session_id,
|
|
1526
1700
|
table.target_session_id,
|
|
1527
1701
|
table.relationship_type
|
|
@@ -1531,6 +1705,7 @@ var init_schema_postgres = __esm({
|
|
|
1531
1705
|
tasks = (0, import_pg_core.pgTable)(
|
|
1532
1706
|
"tasks",
|
|
1533
1707
|
{
|
|
1708
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1534
1709
|
task_id: (0, import_pg_core.varchar)("task_id", { length: 36 }).primaryKey(),
|
|
1535
1710
|
session_id: (0, import_pg_core.varchar)("session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
1536
1711
|
created_at: t.timestamp("created_at").notNull(),
|
|
@@ -1560,19 +1735,23 @@ var init_schema_postgres = __esm({
|
|
|
1560
1735
|
data: t.json("data").$type().notNull()
|
|
1561
1736
|
},
|
|
1562
1737
|
(table) => ({
|
|
1738
|
+
tenantIdx: (0, import_pg_core.index)("tasks_tenant_id_idx").on(table.tenant_id),
|
|
1563
1739
|
sessionIdx: (0, import_pg_core.index)("tasks_session_idx").on(table.session_id),
|
|
1564
1740
|
statusIdx: (0, import_pg_core.index)("tasks_status_idx").on(table.status),
|
|
1565
1741
|
createdIdx: (0, import_pg_core.index)("tasks_created_idx").on(table.created_at),
|
|
1742
|
+
// Composite for "latest task for session" queries (ORDER BY created_at DESC LIMIT 1).
|
|
1743
|
+
sessionCreatedIdx: (0, import_pg_core.index)("tasks_session_created_idx").on(table.session_id, table.created_at),
|
|
1566
1744
|
queueIdx: (0, import_pg_core.index)("tasks_queue_idx").on(table.session_id, table.status, table.queue_position),
|
|
1567
1745
|
// Partial unique index — defense-in-depth for `tasks.createPending` race
|
|
1568
1746
|
// serialization. Only QUEUED rows are constrained; CREATED/RUNNING/done
|
|
1569
1747
|
// rows have NULL queue_position and are unaffected.
|
|
1570
|
-
queuedPositionUnique: (0, import_pg_core.uniqueIndex)("tasks_queued_position_unique").on(table.session_id, table.queue_position).where(import_drizzle_orm2.sql`${table.status} = 'queued'`)
|
|
1748
|
+
queuedPositionUnique: (0, import_pg_core.uniqueIndex)("tasks_queued_position_unique").on(table.tenant_id, table.session_id, table.queue_position).where(import_drizzle_orm2.sql`${table.status} = 'queued'`)
|
|
1571
1749
|
})
|
|
1572
1750
|
);
|
|
1573
1751
|
serializedSessions = (0, import_pg_core.pgTable)(
|
|
1574
1752
|
"serialized_sessions",
|
|
1575
1753
|
{
|
|
1754
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1576
1755
|
id: (0, import_pg_core.varchar)("id", { length: 36 }).primaryKey(),
|
|
1577
1756
|
session_id: (0, import_pg_core.varchar)("session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
1578
1757
|
branch_id: (0, import_pg_core.varchar)("branch_id", { length: 36 }).notNull().references(() => branches.branch_id, { onDelete: "cascade" }),
|
|
@@ -1588,6 +1767,7 @@ var init_schema_postgres = __esm({
|
|
|
1588
1767
|
// gzipped; NULL while status='processing'
|
|
1589
1768
|
},
|
|
1590
1769
|
(table) => ({
|
|
1770
|
+
tenantIdx: (0, import_pg_core.index)("serialized_sessions_tenant_id_idx").on(table.tenant_id),
|
|
1591
1771
|
sessionTurnIdx: (0, import_pg_core.index)("serialized_sessions_session_turn_idx").on(
|
|
1592
1772
|
table.session_id,
|
|
1593
1773
|
table.turn_index
|
|
@@ -1598,6 +1778,7 @@ var init_schema_postgres = __esm({
|
|
|
1598
1778
|
messages = (0, import_pg_core.pgTable)(
|
|
1599
1779
|
"messages",
|
|
1600
1780
|
{
|
|
1781
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1601
1782
|
// Primary identity
|
|
1602
1783
|
message_id: (0, import_pg_core.varchar)("message_id", { length: 36 }).primaryKey(),
|
|
1603
1784
|
created_at: t.timestamp("created_at").notNull(),
|
|
@@ -1637,15 +1818,23 @@ var init_schema_postgres = __esm({
|
|
|
1637
1818
|
data: t.json("data").$type().notNull()
|
|
1638
1819
|
},
|
|
1639
1820
|
(table) => ({
|
|
1821
|
+
tenantIdx: (0, import_pg_core.index)("messages_tenant_id_idx").on(table.tenant_id),
|
|
1822
|
+
tenantTimestampIdx: (0, import_pg_core.index)("messages_tenant_timestamp_idx").on(table.tenant_id, table.timestamp),
|
|
1640
1823
|
// Indexes for efficient lookups
|
|
1641
1824
|
sessionIdx: (0, import_pg_core.index)("messages_session_id_idx").on(table.session_id),
|
|
1642
1825
|
taskIdx: (0, import_pg_core.index)("messages_task_id_idx").on(table.task_id),
|
|
1643
|
-
sessionIndexIdx: (0, import_pg_core.index)("messages_session_index_idx").on(table.session_id, table.index)
|
|
1826
|
+
sessionIndexIdx: (0, import_pg_core.index)("messages_session_index_idx").on(table.session_id, table.index),
|
|
1827
|
+
timestampIdx: (0, import_pg_core.index)("messages_timestamp_idx").on(table.timestamp),
|
|
1828
|
+
sessionTimestampIdx: (0, import_pg_core.index)("messages_session_timestamp_idx").on(
|
|
1829
|
+
table.session_id,
|
|
1830
|
+
table.timestamp
|
|
1831
|
+
)
|
|
1644
1832
|
})
|
|
1645
1833
|
);
|
|
1646
1834
|
boards = (0, import_pg_core.pgTable)(
|
|
1647
1835
|
"boards",
|
|
1648
1836
|
{
|
|
1837
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1649
1838
|
board_id: (0, import_pg_core.varchar)("board_id", { length: 36 }).primaryKey(),
|
|
1650
1839
|
created_at: t.timestamp("created_at").notNull(),
|
|
1651
1840
|
updated_at: t.timestamp("updated_at"),
|
|
@@ -1653,7 +1842,7 @@ var init_schema_postgres = __esm({
|
|
|
1653
1842
|
created_by: (0, import_pg_core.varchar)("created_by", { length: 36 }).notNull(),
|
|
1654
1843
|
// Materialized for lookups
|
|
1655
1844
|
name: (0, import_pg_core.text)("name").notNull(),
|
|
1656
|
-
slug: (0, import_pg_core.text)("slug")
|
|
1845
|
+
slug: (0, import_pg_core.text)("slug"),
|
|
1657
1846
|
primary_assistant_id: (0, import_pg_core.varchar)("primary_assistant_id", { length: 36 }).references(
|
|
1658
1847
|
() => branches.branch_id,
|
|
1659
1848
|
{
|
|
@@ -1668,18 +1857,21 @@ var init_schema_postgres = __esm({
|
|
|
1668
1857
|
archived_by: (0, import_pg_core.varchar)("archived_by", { length: 36 })
|
|
1669
1858
|
},
|
|
1670
1859
|
(table) => ({
|
|
1860
|
+
tenantIdx: (0, import_pg_core.index)("boards_tenant_id_idx").on(table.tenant_id),
|
|
1671
1861
|
nameIdx: (0, import_pg_core.index)("boards_name_idx").on(table.name),
|
|
1672
|
-
slugIdx: (0, import_pg_core.index)("boards_slug_idx").on(table.slug)
|
|
1862
|
+
slugIdx: (0, import_pg_core.index)("boards_slug_idx").on(table.slug),
|
|
1863
|
+
slugTenantUnique: (0, import_pg_core.uniqueIndex)("boards_tenant_slug_unique").on(table.tenant_id, table.slug)
|
|
1673
1864
|
})
|
|
1674
1865
|
);
|
|
1675
1866
|
repos = (0, import_pg_core.pgTable)(
|
|
1676
1867
|
"repos",
|
|
1677
1868
|
{
|
|
1869
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1678
1870
|
repo_id: (0, import_pg_core.varchar)("repo_id", { length: 36 }).primaryKey(),
|
|
1679
1871
|
created_at: t.timestamp("created_at").notNull(),
|
|
1680
1872
|
updated_at: t.timestamp("updated_at"),
|
|
1681
1873
|
// Materialized for querying
|
|
1682
|
-
slug: (0, import_pg_core.text)("slug").notNull()
|
|
1874
|
+
slug: (0, import_pg_core.text)("slug").notNull(),
|
|
1683
1875
|
repo_type: (0, import_pg_core.text)("repo_type", { enum: ["remote", "local"] }).notNull().default("remote"),
|
|
1684
1876
|
// Unix group for repo-level git access (agor_rp_<short-id>)
|
|
1685
1877
|
// Users who have access to ANY branch in this repo get added to this group.
|
|
@@ -1690,12 +1882,15 @@ var init_schema_postgres = __esm({
|
|
|
1690
1882
|
data: t.json("data").$type().notNull()
|
|
1691
1883
|
},
|
|
1692
1884
|
(table) => ({
|
|
1693
|
-
|
|
1885
|
+
tenantIdx: (0, import_pg_core.index)("repos_tenant_id_idx").on(table.tenant_id),
|
|
1886
|
+
slugIdx: (0, import_pg_core.index)("repos_slug_idx").on(table.slug),
|
|
1887
|
+
slugTenantUnique: (0, import_pg_core.uniqueIndex)("repos_tenant_slug_unique").on(table.tenant_id, table.slug)
|
|
1694
1888
|
})
|
|
1695
1889
|
);
|
|
1696
1890
|
branches = (0, import_pg_core.pgTable)(
|
|
1697
1891
|
"branches",
|
|
1698
1892
|
{
|
|
1893
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1699
1894
|
// Primary identity
|
|
1700
1895
|
branch_id: (0, import_pg_core.varchar)("branch_id", { length: 36 }).primaryKey(),
|
|
1701
1896
|
repo_id: (0, import_pg_core.varchar)("repo_id", { length: 36 }).notNull().references(() => repos.repo_id, { onDelete: "cascade" }),
|
|
@@ -1770,6 +1965,7 @@ var init_schema_postgres = __esm({
|
|
|
1770
1965
|
data: t.json("data").$type().notNull()
|
|
1771
1966
|
},
|
|
1772
1967
|
(table) => ({
|
|
1968
|
+
tenantIdx: (0, import_pg_core.index)("branches_tenant_id_idx").on(table.tenant_id),
|
|
1773
1969
|
repoIdx: (0, import_pg_core.index)("branches_repo_idx").on(table.repo_id),
|
|
1774
1970
|
nameIdx: (0, import_pg_core.index)("branches_name_idx").on(table.name),
|
|
1775
1971
|
refIdx: (0, import_pg_core.index)("branches_ref_idx").on(table.ref),
|
|
@@ -1783,22 +1979,26 @@ var init_schema_postgres = __esm({
|
|
|
1783
1979
|
branchOwners = (0, import_pg_core.pgTable)(
|
|
1784
1980
|
"branch_owners",
|
|
1785
1981
|
{
|
|
1982
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1786
1983
|
branch_id: (0, import_pg_core.varchar)("branch_id", { length: 36 }).notNull().references(() => branches.branch_id, { onDelete: "cascade" }),
|
|
1787
1984
|
user_id: (0, import_pg_core.varchar)("user_id", { length: 36 }).notNull().references(() => users.user_id, { onDelete: "cascade" }),
|
|
1788
1985
|
created_at: t.timestamp("created_at").defaultNow()
|
|
1789
1986
|
},
|
|
1790
1987
|
(table) => ({
|
|
1988
|
+
tenantIdx: (0, import_pg_core.index)("branch_owners_tenant_id_idx").on(table.tenant_id),
|
|
1791
1989
|
pk: (0, import_pg_core.primaryKey)({ columns: [table.branch_id, table.user_id] })
|
|
1792
1990
|
})
|
|
1793
1991
|
);
|
|
1794
1992
|
boardOwners = (0, import_pg_core.pgTable)(
|
|
1795
1993
|
"board_owners",
|
|
1796
1994
|
{
|
|
1995
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1797
1996
|
board_id: (0, import_pg_core.varchar)("board_id", { length: 36 }).notNull().references(() => boards.board_id, { onDelete: "cascade" }),
|
|
1798
1997
|
user_id: (0, import_pg_core.varchar)("user_id", { length: 36 }).notNull().references(() => users.user_id, { onDelete: "cascade" }),
|
|
1799
1998
|
created_at: t.timestamp("created_at")
|
|
1800
1999
|
},
|
|
1801
2000
|
(table) => ({
|
|
2001
|
+
tenantIdx: (0, import_pg_core.index)("board_owners_tenant_id_idx").on(table.tenant_id),
|
|
1802
2002
|
pk: (0, import_pg_core.primaryKey)({ columns: [table.board_id, table.user_id] }),
|
|
1803
2003
|
userIdx: (0, import_pg_core.index)("board_owners_user_idx").on(table.user_id)
|
|
1804
2004
|
})
|
|
@@ -1806,6 +2006,7 @@ var init_schema_postgres = __esm({
|
|
|
1806
2006
|
schedules = (0, import_pg_core.pgTable)(
|
|
1807
2007
|
"schedules",
|
|
1808
2008
|
{
|
|
2009
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1809
2010
|
schedule_id: (0, import_pg_core.varchar)("schedule_id", { length: 36 }).primaryKey(),
|
|
1810
2011
|
branch_id: (0, import_pg_core.varchar)("branch_id", { length: 36 }).notNull().references(() => branches.branch_id, { onDelete: "cascade" }),
|
|
1811
2012
|
name: (0, import_pg_core.text)("name").notNull(),
|
|
@@ -1829,6 +2030,7 @@ var init_schema_postgres = __esm({
|
|
|
1829
2030
|
created_by: (0, import_pg_core.varchar)("created_by", { length: 36 }).notNull().references(() => users.user_id)
|
|
1830
2031
|
},
|
|
1831
2032
|
(table) => ({
|
|
2033
|
+
tenantIdx: (0, import_pg_core.index)("schedules_tenant_id_idx").on(table.tenant_id),
|
|
1832
2034
|
enabledNextRunIdx: (0, import_pg_core.index)("schedules_enabled_next_run_idx").on(table.enabled, table.next_run_at),
|
|
1833
2035
|
branchIdx: (0, import_pg_core.index)("schedules_branch_idx").on(table.branch_id),
|
|
1834
2036
|
createdByIdx: (0, import_pg_core.index)("schedules_created_by_idx").on(table.created_by)
|
|
@@ -1837,12 +2039,13 @@ var init_schema_postgres = __esm({
|
|
|
1837
2039
|
users = (0, import_pg_core.pgTable)(
|
|
1838
2040
|
"users",
|
|
1839
2041
|
{
|
|
2042
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1840
2043
|
// Primary identity
|
|
1841
2044
|
user_id: (0, import_pg_core.varchar)("user_id", { length: 36 }).primaryKey(),
|
|
1842
2045
|
created_at: t.timestamp("created_at").notNull(),
|
|
1843
2046
|
updated_at: t.timestamp("updated_at"),
|
|
1844
2047
|
// Materialized for auth lookups
|
|
1845
|
-
email: (0, import_pg_core.text)("email").
|
|
2048
|
+
email: (0, import_pg_core.text)("email").notNull(),
|
|
1846
2049
|
password: (0, import_pg_core.text)("password").notNull(),
|
|
1847
2050
|
// bcrypt hashed
|
|
1848
2051
|
// Basic profile (materialized for display)
|
|
@@ -1858,16 +2061,22 @@ var init_schema_postgres = __esm({
|
|
|
1858
2061
|
onboarding_completed: t.bool("onboarding_completed").notNull().default(false),
|
|
1859
2062
|
// Force password change flag (admin-settable, auto-cleared on password change)
|
|
1860
2063
|
must_change_password: t.bool("must_change_password").notNull().default(false),
|
|
2064
|
+
// Auth invalidation marker. Password changes set this timestamp so any
|
|
2065
|
+
// previously issued browser access or refresh token is rejected.
|
|
2066
|
+
tokens_valid_after: t.timestamp("tokens_valid_after"),
|
|
1861
2067
|
// JSON blob for profile/preferences
|
|
1862
2068
|
data: t.json("data").$type().notNull()
|
|
1863
2069
|
},
|
|
1864
2070
|
(table) => ({
|
|
1865
|
-
|
|
2071
|
+
tenantIdx: (0, import_pg_core.index)("users_tenant_id_idx").on(table.tenant_id),
|
|
2072
|
+
emailIdx: (0, import_pg_core.index)("users_email_idx").on(table.email),
|
|
2073
|
+
emailTenantUnique: (0, import_pg_core.uniqueIndex)("users_tenant_email_unique").on(table.tenant_id, table.email)
|
|
1866
2074
|
})
|
|
1867
2075
|
);
|
|
1868
2076
|
groups = (0, import_pg_core.pgTable)(
|
|
1869
2077
|
"groups",
|
|
1870
2078
|
{
|
|
2079
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1871
2080
|
group_id: (0, import_pg_core.varchar)("group_id", { length: 36 }).primaryKey(),
|
|
1872
2081
|
name: (0, import_pg_core.text)("name").notNull(),
|
|
1873
2082
|
slug: (0, import_pg_core.text)("slug").notNull(),
|
|
@@ -1880,13 +2089,15 @@ var init_schema_postgres = __esm({
|
|
|
1880
2089
|
updated_at: t.timestamp("updated_at")
|
|
1881
2090
|
},
|
|
1882
2091
|
(table) => ({
|
|
1883
|
-
|
|
2092
|
+
tenantIdx: (0, import_pg_core.index)("groups_tenant_id_idx").on(table.tenant_id),
|
|
2093
|
+
slugIdx: (0, import_pg_core.uniqueIndex)("groups_tenant_slug_unique").on(table.tenant_id, table.slug),
|
|
1884
2094
|
archivedIdx: (0, import_pg_core.index)("groups_archived_idx").on(table.archived)
|
|
1885
2095
|
})
|
|
1886
2096
|
);
|
|
1887
2097
|
groupMemberships = (0, import_pg_core.pgTable)(
|
|
1888
2098
|
"group_memberships",
|
|
1889
2099
|
{
|
|
2100
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1890
2101
|
group_id: (0, import_pg_core.varchar)("group_id", { length: 36 }).notNull().references(() => groups.group_id, { onDelete: "cascade" }),
|
|
1891
2102
|
user_id: (0, import_pg_core.varchar)("user_id", { length: 36 }).notNull().references(() => users.user_id, { onDelete: "cascade" }),
|
|
1892
2103
|
added_by: (0, import_pg_core.varchar)("added_by", { length: 36 }).references(() => users.user_id, {
|
|
@@ -1895,6 +2106,7 @@ var init_schema_postgres = __esm({
|
|
|
1895
2106
|
created_at: t.timestamp("created_at").notNull()
|
|
1896
2107
|
},
|
|
1897
2108
|
(table) => ({
|
|
2109
|
+
tenantIdx: (0, import_pg_core.index)("group_memberships_tenant_id_idx").on(table.tenant_id),
|
|
1898
2110
|
pk: (0, import_pg_core.primaryKey)({ columns: [table.group_id, table.user_id] }),
|
|
1899
2111
|
userIdx: (0, import_pg_core.index)("group_memberships_user_idx").on(table.user_id)
|
|
1900
2112
|
})
|
|
@@ -1902,6 +2114,7 @@ var init_schema_postgres = __esm({
|
|
|
1902
2114
|
branchGroupGrants = (0, import_pg_core.pgTable)(
|
|
1903
2115
|
"branch_group_grants",
|
|
1904
2116
|
{
|
|
2117
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1905
2118
|
branch_id: (0, import_pg_core.varchar)("branch_id", { length: 36 }).notNull().references(() => branches.branch_id, { onDelete: "cascade" }),
|
|
1906
2119
|
group_id: (0, import_pg_core.varchar)("group_id", { length: 36 }).notNull().references(() => groups.group_id, { onDelete: "cascade" }),
|
|
1907
2120
|
can: (0, import_pg_core.text)("can", { enum: [...BRANCH_PERMISSION_LEVELS] }).notNull().default("view"),
|
|
@@ -1913,6 +2126,7 @@ var init_schema_postgres = __esm({
|
|
|
1913
2126
|
updated_at: t.timestamp("updated_at")
|
|
1914
2127
|
},
|
|
1915
2128
|
(table) => ({
|
|
2129
|
+
tenantIdx: (0, import_pg_core.index)("branch_group_grants_tenant_id_idx").on(table.tenant_id),
|
|
1916
2130
|
pk: (0, import_pg_core.primaryKey)({ columns: [table.branch_id, table.group_id] }),
|
|
1917
2131
|
groupIdx: (0, import_pg_core.index)("branch_group_grants_group_idx").on(table.group_id)
|
|
1918
2132
|
})
|
|
@@ -1920,6 +2134,7 @@ var init_schema_postgres = __esm({
|
|
|
1920
2134
|
boardGroupGrants = (0, import_pg_core.pgTable)(
|
|
1921
2135
|
"board_group_grants",
|
|
1922
2136
|
{
|
|
2137
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1923
2138
|
board_id: (0, import_pg_core.varchar)("board_id", { length: 36 }).notNull().references(() => boards.board_id, { onDelete: "cascade" }),
|
|
1924
2139
|
group_id: (0, import_pg_core.varchar)("group_id", { length: 36 }).notNull().references(() => groups.group_id, { onDelete: "cascade" }),
|
|
1925
2140
|
can: (0, import_pg_core.text)("can", { enum: [...BRANCH_PERMISSION_LEVELS] }).notNull().default("view"),
|
|
@@ -1931,6 +2146,7 @@ var init_schema_postgres = __esm({
|
|
|
1931
2146
|
updated_at: t.timestamp("updated_at")
|
|
1932
2147
|
},
|
|
1933
2148
|
(table) => ({
|
|
2149
|
+
tenantIdx: (0, import_pg_core.index)("board_group_grants_tenant_id_idx").on(table.tenant_id),
|
|
1934
2150
|
pk: (0, import_pg_core.primaryKey)({ columns: [table.board_id, table.group_id] }),
|
|
1935
2151
|
groupIdx: (0, import_pg_core.index)("board_group_grants_group_idx").on(table.group_id)
|
|
1936
2152
|
})
|
|
@@ -1938,6 +2154,7 @@ var init_schema_postgres = __esm({
|
|
|
1938
2154
|
appVariables = (0, import_pg_core.pgTable)(
|
|
1939
2155
|
"app_variables",
|
|
1940
2156
|
{
|
|
2157
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1941
2158
|
variable_id: (0, import_pg_core.varchar)("variable_id", { length: 36 }).primaryKey(),
|
|
1942
2159
|
namespace: (0, import_pg_core.text)("namespace").notNull(),
|
|
1943
2160
|
key: (0, import_pg_core.text)("key").notNull(),
|
|
@@ -1953,13 +2170,19 @@ var init_schema_postgres = __esm({
|
|
|
1953
2170
|
updated_at: t.timestamp("updated_at").notNull()
|
|
1954
2171
|
},
|
|
1955
2172
|
(table) => ({
|
|
1956
|
-
|
|
2173
|
+
tenantIdx: (0, import_pg_core.index)("app_variables_tenant_id_idx").on(table.tenant_id),
|
|
2174
|
+
namespaceKeyIdx: (0, import_pg_core.uniqueIndex)("app_variables_tenant_namespace_key_unique").on(
|
|
2175
|
+
table.tenant_id,
|
|
2176
|
+
table.namespace,
|
|
2177
|
+
table.key
|
|
2178
|
+
),
|
|
1957
2179
|
namespaceIdx: (0, import_pg_core.index)("app_variables_namespace_idx").on(table.namespace)
|
|
1958
2180
|
})
|
|
1959
2181
|
);
|
|
1960
2182
|
userApiKeys = (0, import_pg_core.pgTable)(
|
|
1961
2183
|
"user_api_keys",
|
|
1962
2184
|
{
|
|
2185
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1963
2186
|
id: (0, import_pg_core.varchar)("id", { length: 36 }).primaryKey(),
|
|
1964
2187
|
user_id: (0, import_pg_core.varchar)("user_id", { length: 36 }).notNull().references(() => users.user_id, { onDelete: "cascade" }),
|
|
1965
2188
|
name: (0, import_pg_core.text)("name").notNull(),
|
|
@@ -1971,6 +2194,7 @@ var init_schema_postgres = __esm({
|
|
|
1971
2194
|
last_used_at: t.timestamp("last_used_at")
|
|
1972
2195
|
},
|
|
1973
2196
|
(table) => ({
|
|
2197
|
+
tenantIdx: (0, import_pg_core.index)("user_api_keys_tenant_id_idx").on(table.tenant_id),
|
|
1974
2198
|
userIdx: (0, import_pg_core.index)("user_api_keys_user_idx").on(table.user_id),
|
|
1975
2199
|
prefixIdx: (0, import_pg_core.index)("user_api_keys_prefix_idx").on(table.prefix)
|
|
1976
2200
|
})
|
|
@@ -1978,6 +2202,7 @@ var init_schema_postgres = __esm({
|
|
|
1978
2202
|
mcpServers = (0, import_pg_core.pgTable)(
|
|
1979
2203
|
"mcp_servers",
|
|
1980
2204
|
{
|
|
2205
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
1981
2206
|
// Primary identity
|
|
1982
2207
|
mcp_server_id: (0, import_pg_core.varchar)("mcp_server_id", { length: 36 }).primaryKey(),
|
|
1983
2208
|
created_at: t.timestamp("created_at").notNull(),
|
|
@@ -2004,6 +2229,7 @@ var init_schema_postgres = __esm({
|
|
|
2004
2229
|
data: t.json("data").$type().notNull()
|
|
2005
2230
|
},
|
|
2006
2231
|
(table) => ({
|
|
2232
|
+
tenantIdx: (0, import_pg_core.index)("mcp_servers_tenant_id_idx").on(table.tenant_id),
|
|
2007
2233
|
nameIdx: (0, import_pg_core.index)("mcp_servers_name_idx").on(table.name),
|
|
2008
2234
|
scopeIdx: (0, import_pg_core.index)("mcp_servers_scope_idx").on(table.scope),
|
|
2009
2235
|
ownerIdx: (0, import_pg_core.index)("mcp_servers_owner_idx").on(table.owner_user_id),
|
|
@@ -2013,6 +2239,7 @@ var init_schema_postgres = __esm({
|
|
|
2013
2239
|
cardTypes = (0, import_pg_core.pgTable)(
|
|
2014
2240
|
"card_types",
|
|
2015
2241
|
{
|
|
2242
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2016
2243
|
card_type_id: (0, import_pg_core.varchar)("card_type_id", { length: 36 }).primaryKey(),
|
|
2017
2244
|
name: (0, import_pg_core.text)("name").notNull(),
|
|
2018
2245
|
emoji: (0, import_pg_core.text)("emoji"),
|
|
@@ -2024,12 +2251,14 @@ var init_schema_postgres = __esm({
|
|
|
2024
2251
|
updated_at: t.timestamp("updated_at").notNull()
|
|
2025
2252
|
},
|
|
2026
2253
|
(table) => ({
|
|
2254
|
+
tenantIdx: (0, import_pg_core.index)("card_types_tenant_id_idx").on(table.tenant_id),
|
|
2027
2255
|
nameIdx: (0, import_pg_core.index)("card_types_name_idx").on(table.name)
|
|
2028
2256
|
})
|
|
2029
2257
|
);
|
|
2030
2258
|
cards = (0, import_pg_core.pgTable)(
|
|
2031
2259
|
"cards",
|
|
2032
2260
|
{
|
|
2261
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2033
2262
|
card_id: (0, import_pg_core.varchar)("card_id", { length: 36 }).primaryKey(),
|
|
2034
2263
|
board_id: (0, import_pg_core.varchar)("board_id", { length: 36 }).notNull().references(() => boards.board_id, { onDelete: "cascade" }),
|
|
2035
2264
|
card_type_id: (0, import_pg_core.varchar)("card_type_id", { length: 36 }).references(() => cardTypes.card_type_id, {
|
|
@@ -2050,6 +2279,7 @@ var init_schema_postgres = __esm({
|
|
|
2050
2279
|
archived_at: t.timestamp("archived_at")
|
|
2051
2280
|
},
|
|
2052
2281
|
(table) => ({
|
|
2282
|
+
tenantIdx: (0, import_pg_core.index)("cards_tenant_id_idx").on(table.tenant_id),
|
|
2053
2283
|
boardIdx: (0, import_pg_core.index)("cards_board_idx").on(table.board_id),
|
|
2054
2284
|
cardTypeIdx: (0, import_pg_core.index)("cards_card_type_idx").on(table.card_type_id),
|
|
2055
2285
|
titleIdx: (0, import_pg_core.index)("cards_title_idx").on(table.title),
|
|
@@ -2060,6 +2290,7 @@ var init_schema_postgres = __esm({
|
|
|
2060
2290
|
artifacts = (0, import_pg_core.pgTable)(
|
|
2061
2291
|
"artifacts",
|
|
2062
2292
|
{
|
|
2293
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2063
2294
|
artifact_id: (0, import_pg_core.varchar)("artifact_id", { length: 36 }).primaryKey(),
|
|
2064
2295
|
branch_id: (0, import_pg_core.varchar)("branch_id", { length: 36 }).references(() => branches.branch_id, {
|
|
2065
2296
|
onDelete: "set null"
|
|
@@ -2095,6 +2326,7 @@ var init_schema_postgres = __esm({
|
|
|
2095
2326
|
archived_at: t.timestamp("archived_at")
|
|
2096
2327
|
},
|
|
2097
2328
|
(table) => ({
|
|
2329
|
+
tenantIdx: (0, import_pg_core.index)("artifacts_tenant_id_idx").on(table.tenant_id),
|
|
2098
2330
|
branchIdx: (0, import_pg_core.index)("artifacts_branch_idx").on(table.branch_id),
|
|
2099
2331
|
sourceSessionIdx: (0, import_pg_core.index)("artifacts_source_session_idx").on(table.source_session_id),
|
|
2100
2332
|
boardIdx: (0, import_pg_core.index)("artifacts_board_idx").on(table.board_id),
|
|
@@ -2105,6 +2337,7 @@ var init_schema_postgres = __esm({
|
|
|
2105
2337
|
artifactTrustGrants = (0, import_pg_core.pgTable)(
|
|
2106
2338
|
"artifact_trust_grants",
|
|
2107
2339
|
{
|
|
2340
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2108
2341
|
grant_id: (0, import_pg_core.varchar)("grant_id", { length: 36 }).primaryKey(),
|
|
2109
2342
|
user_id: (0, import_pg_core.varchar)("user_id", { length: 36 }).notNull(),
|
|
2110
2343
|
scope_type: (0, import_pg_core.text)("scope_type").notNull(),
|
|
@@ -2115,6 +2348,7 @@ var init_schema_postgres = __esm({
|
|
|
2115
2348
|
revoked_at: t.timestamp("revoked_at")
|
|
2116
2349
|
},
|
|
2117
2350
|
(table) => ({
|
|
2351
|
+
tenantIdx: (0, import_pg_core.index)("artifact_trust_grants_tenant_id_idx").on(table.tenant_id),
|
|
2118
2352
|
userIdx: (0, import_pg_core.index)("artifact_trust_grants_user_idx").on(table.user_id),
|
|
2119
2353
|
scopeIdx: (0, import_pg_core.index)("artifact_trust_grants_scope_idx").on(table.scope_type, table.scope_value)
|
|
2120
2354
|
})
|
|
@@ -2122,6 +2356,7 @@ var init_schema_postgres = __esm({
|
|
|
2122
2356
|
boardObjects = (0, import_pg_core.pgTable)(
|
|
2123
2357
|
"board_objects",
|
|
2124
2358
|
{
|
|
2359
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2125
2360
|
// Primary identity
|
|
2126
2361
|
object_id: (0, import_pg_core.varchar)("object_id", { length: 36 }).primaryKey(),
|
|
2127
2362
|
board_id: (0, import_pg_core.varchar)("board_id", { length: 36 }).notNull().references(() => boards.board_id, { onDelete: "cascade" }),
|
|
@@ -2137,6 +2372,7 @@ var init_schema_postgres = __esm({
|
|
|
2137
2372
|
data: t.json("data").$type().notNull()
|
|
2138
2373
|
},
|
|
2139
2374
|
(table) => ({
|
|
2375
|
+
tenantIdx: (0, import_pg_core.index)("board_objects_tenant_id_idx").on(table.tenant_id),
|
|
2140
2376
|
boardIdx: (0, import_pg_core.index)("board_objects_board_idx").on(table.board_id),
|
|
2141
2377
|
branchIdx: (0, import_pg_core.index)("board_objects_branch_idx").on(table.branch_id),
|
|
2142
2378
|
cardIdx: (0, import_pg_core.index)("board_objects_card_idx").on(table.card_id)
|
|
@@ -2145,12 +2381,14 @@ var init_schema_postgres = __esm({
|
|
|
2145
2381
|
sessionMcpServers = (0, import_pg_core.pgTable)(
|
|
2146
2382
|
"session_mcp_servers",
|
|
2147
2383
|
{
|
|
2384
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2148
2385
|
session_id: (0, import_pg_core.varchar)("session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
2149
2386
|
mcp_server_id: (0, import_pg_core.varchar)("mcp_server_id", { length: 36 }).notNull().references(() => mcpServers.mcp_server_id, { onDelete: "cascade" }),
|
|
2150
2387
|
enabled: t.bool("enabled").notNull().default(true),
|
|
2151
2388
|
added_at: t.timestamp("added_at").notNull()
|
|
2152
2389
|
},
|
|
2153
2390
|
(table) => ({
|
|
2391
|
+
tenantIdx: (0, import_pg_core.index)("session_mcp_servers_tenant_id_idx").on(table.tenant_id),
|
|
2154
2392
|
// Composite primary key
|
|
2155
2393
|
pk: (0, import_pg_core.index)("session_mcp_servers_pk").on(table.session_id, table.mcp_server_id),
|
|
2156
2394
|
// Indexes for queries
|
|
@@ -2162,6 +2400,7 @@ var init_schema_postgres = __esm({
|
|
|
2162
2400
|
userMcpOauthTokens = (0, import_pg_core.pgTable)(
|
|
2163
2401
|
"user_mcp_oauth_tokens",
|
|
2164
2402
|
{
|
|
2403
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2165
2404
|
// NULL = shared-mode token (one per mcp_server_id)
|
|
2166
2405
|
user_id: (0, import_pg_core.varchar)("user_id", { length: 36 }).references(() => users.user_id, {
|
|
2167
2406
|
onDelete: "cascade"
|
|
@@ -2179,6 +2418,7 @@ var init_schema_postgres = __esm({
|
|
|
2179
2418
|
updated_at: t.timestamp("updated_at")
|
|
2180
2419
|
},
|
|
2181
2420
|
(table) => ({
|
|
2421
|
+
tenantIdx: (0, import_pg_core.index)("user_mcp_oauth_tokens_tenant_id_idx").on(table.tenant_id),
|
|
2182
2422
|
// Composite lookup indexes. Uniqueness enforced via partial unique indexes
|
|
2183
2423
|
// created in the migration (one for per-user rows, one for the shared row).
|
|
2184
2424
|
pk: (0, import_pg_core.index)("user_mcp_oauth_tokens_pk").on(table.user_id, table.mcp_server_id),
|
|
@@ -2189,6 +2429,7 @@ var init_schema_postgres = __esm({
|
|
|
2189
2429
|
boardComments = (0, import_pg_core.pgTable)(
|
|
2190
2430
|
"board_comments",
|
|
2191
2431
|
{
|
|
2432
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2192
2433
|
// Primary identity
|
|
2193
2434
|
comment_id: (0, import_pg_core.varchar)("comment_id", { length: 36 }).primaryKey(),
|
|
2194
2435
|
created_at: t.timestamp("created_at").notNull(),
|
|
@@ -2230,6 +2471,7 @@ var init_schema_postgres = __esm({
|
|
|
2230
2471
|
data: t.json("data").$type().notNull()
|
|
2231
2472
|
},
|
|
2232
2473
|
(table) => ({
|
|
2474
|
+
tenantIdx: (0, import_pg_core.index)("board_comments_tenant_id_idx").on(table.tenant_id),
|
|
2233
2475
|
boardIdx: (0, import_pg_core.index)("board_comments_board_idx").on(table.board_id),
|
|
2234
2476
|
sessionIdx: (0, import_pg_core.index)("board_comments_session_idx").on(table.session_id),
|
|
2235
2477
|
taskIdx: (0, import_pg_core.index)("board_comments_task_idx").on(table.task_id),
|
|
@@ -2244,6 +2486,7 @@ var init_schema_postgres = __esm({
|
|
|
2244
2486
|
gatewayChannels = (0, import_pg_core.pgTable)(
|
|
2245
2487
|
"gateway_channels",
|
|
2246
2488
|
{
|
|
2489
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2247
2490
|
// Primary identity
|
|
2248
2491
|
id: (0, import_pg_core.varchar)("id", { length: 36 }).primaryKey(),
|
|
2249
2492
|
created_at: t.timestamp("created_at").notNull(),
|
|
@@ -2257,7 +2500,7 @@ var init_schema_postgres = __esm({
|
|
|
2257
2500
|
}).notNull(),
|
|
2258
2501
|
target_branch_id: (0, import_pg_core.varchar)("target_branch_id", { length: 36 }).notNull().references(() => branches.branch_id, { onDelete: "cascade" }),
|
|
2259
2502
|
agor_user_id: (0, import_pg_core.varchar)("agor_user_id", { length: 36 }).notNull(),
|
|
2260
|
-
channel_key: (0, import_pg_core.text)("channel_key").notNull()
|
|
2503
|
+
channel_key: (0, import_pg_core.text)("channel_key").notNull(),
|
|
2261
2504
|
enabled: t.bool("enabled").notNull().default(true),
|
|
2262
2505
|
last_message_at: t.timestamp("last_message_at"),
|
|
2263
2506
|
// JSON blob for platform credentials (encrypted at rest)
|
|
@@ -2266,13 +2509,19 @@ var init_schema_postgres = __esm({
|
|
|
2266
2509
|
agentic_config: t.json("agentic_config")
|
|
2267
2510
|
},
|
|
2268
2511
|
(table) => ({
|
|
2512
|
+
tenantIdx: (0, import_pg_core.index)("gateway_channels_tenant_id_idx").on(table.tenant_id),
|
|
2269
2513
|
channelKeyIdx: (0, import_pg_core.index)("idx_gateway_channel_key").on(table.channel_key),
|
|
2514
|
+
channelKeyTenantUnique: (0, import_pg_core.uniqueIndex)("gateway_channels_tenant_channel_key_unique").on(
|
|
2515
|
+
table.tenant_id,
|
|
2516
|
+
table.channel_key
|
|
2517
|
+
),
|
|
2270
2518
|
enabledTypeIdx: (0, import_pg_core.index)("idx_gateway_enabled_type").on(table.enabled, table.channel_type)
|
|
2271
2519
|
})
|
|
2272
2520
|
);
|
|
2273
2521
|
threadSessionMap = (0, import_pg_core.pgTable)(
|
|
2274
2522
|
"thread_session_map",
|
|
2275
2523
|
{
|
|
2524
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2276
2525
|
// Primary identity
|
|
2277
2526
|
id: (0, import_pg_core.varchar)("id", { length: 36 }).primaryKey(),
|
|
2278
2527
|
created_at: t.timestamp("created_at").notNull(),
|
|
@@ -2290,7 +2539,9 @@ var init_schema_postgres = __esm({
|
|
|
2290
2539
|
metadata: t.json("metadata")
|
|
2291
2540
|
},
|
|
2292
2541
|
(table) => ({
|
|
2293
|
-
|
|
2542
|
+
tenantIdx: (0, import_pg_core.index)("thread_session_map_tenant_id_idx").on(table.tenant_id),
|
|
2543
|
+
uniqueChannelThread: (0, import_pg_core.uniqueIndex)("uniq_thread_map_tenant_channel_thread").on(
|
|
2544
|
+
table.tenant_id,
|
|
2294
2545
|
table.channel_id,
|
|
2295
2546
|
table.thread_id
|
|
2296
2547
|
),
|
|
@@ -2299,14 +2550,82 @@ var init_schema_postgres = __esm({
|
|
|
2299
2550
|
channelStatusIdx: (0, import_pg_core.index)("idx_thread_map_channel_status").on(table.channel_id, table.status)
|
|
2300
2551
|
})
|
|
2301
2552
|
);
|
|
2553
|
+
gatewayOutboundMessages = (0, import_pg_core.pgTable)(
|
|
2554
|
+
"gateway_outbound_messages",
|
|
2555
|
+
{
|
|
2556
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2557
|
+
id: (0, import_pg_core.varchar)("id", { length: 36 }).primaryKey(),
|
|
2558
|
+
created_at: t.timestamp("created_at").notNull(),
|
|
2559
|
+
updated_at: t.timestamp("updated_at").notNull(),
|
|
2560
|
+
gateway_channel_id: (0, import_pg_core.varchar)("gateway_channel_id", { length: 36 }).notNull().references(() => gatewayChannels.id, { onDelete: "cascade" }),
|
|
2561
|
+
channel_type: (0, import_pg_core.text)("channel_type", {
|
|
2562
|
+
enum: ["slack", "discord", "whatsapp", "telegram", "github", "teams"]
|
|
2563
|
+
}).notNull(),
|
|
2564
|
+
platform_channel_id: (0, import_pg_core.text)("platform_channel_id").notNull(),
|
|
2565
|
+
platform_message_id: (0, import_pg_core.text)("platform_message_id").notNull(),
|
|
2566
|
+
platform_thread_id: (0, import_pg_core.text)("platform_thread_id").notNull(),
|
|
2567
|
+
platform_permalink: (0, import_pg_core.text)("platform_permalink"),
|
|
2568
|
+
target_branch_id: (0, import_pg_core.varchar)("target_branch_id", { length: 36 }).notNull().references(() => branches.branch_id),
|
|
2569
|
+
emitted_by_user_id: (0, import_pg_core.varchar)("emitted_by_user_id", { length: 36 }).notNull().references(() => users.user_id),
|
|
2570
|
+
emitted_by_session_id: (0, import_pg_core.varchar)("emitted_by_session_id", { length: 36 }).references(
|
|
2571
|
+
() => sessions.session_id,
|
|
2572
|
+
{
|
|
2573
|
+
onDelete: "set null"
|
|
2574
|
+
}
|
|
2575
|
+
),
|
|
2576
|
+
emitted_by_task_id: (0, import_pg_core.varchar)("emitted_by_task_id", { length: 36 }).references(
|
|
2577
|
+
() => tasks.task_id,
|
|
2578
|
+
{
|
|
2579
|
+
onDelete: "set null"
|
|
2580
|
+
}
|
|
2581
|
+
),
|
|
2582
|
+
emitted_by_schedule_id: (0, import_pg_core.varchar)("emitted_by_schedule_id", { length: 36 }).references(
|
|
2583
|
+
() => schedules.schedule_id,
|
|
2584
|
+
{
|
|
2585
|
+
onDelete: "set null"
|
|
2586
|
+
}
|
|
2587
|
+
),
|
|
2588
|
+
message_text: (0, import_pg_core.text)("message_text").notNull(),
|
|
2589
|
+
message_preview: (0, import_pg_core.text)("message_preview").notNull(),
|
|
2590
|
+
metadata: t.json("metadata"),
|
|
2591
|
+
consumed_by_session_id: (0, import_pg_core.varchar)("consumed_by_session_id", { length: 36 }).references(
|
|
2592
|
+
() => sessions.session_id,
|
|
2593
|
+
{
|
|
2594
|
+
onDelete: "set null"
|
|
2595
|
+
}
|
|
2596
|
+
),
|
|
2597
|
+
consumed_at: t.timestamp("consumed_at")
|
|
2598
|
+
},
|
|
2599
|
+
(table) => ({
|
|
2600
|
+
tenantIdx: (0, import_pg_core.index)("gateway_outbound_messages_tenant_id_idx").on(table.tenant_id),
|
|
2601
|
+
uniqueChannelThread: (0, import_pg_core.uniqueIndex)("uniq_gateway_outbound_tenant_channel_thread").on(
|
|
2602
|
+
table.tenant_id,
|
|
2603
|
+
table.gateway_channel_id,
|
|
2604
|
+
table.platform_thread_id
|
|
2605
|
+
),
|
|
2606
|
+
emittedSessionIdx: (0, import_pg_core.index)("idx_gateway_outbound_emitted_session").on(
|
|
2607
|
+
table.emitted_by_session_id
|
|
2608
|
+
),
|
|
2609
|
+
emittedScheduleIdx: (0, import_pg_core.index)("idx_gateway_outbound_emitted_schedule").on(
|
|
2610
|
+
table.emitted_by_schedule_id
|
|
2611
|
+
),
|
|
2612
|
+
targetBranchCreatedIdx: (0, import_pg_core.index)("idx_gateway_outbound_branch_created").on(
|
|
2613
|
+
table.target_branch_id,
|
|
2614
|
+
table.created_at
|
|
2615
|
+
),
|
|
2616
|
+
consumedIdx: (0, import_pg_core.index)("idx_gateway_outbound_consumed").on(table.consumed_at)
|
|
2617
|
+
})
|
|
2618
|
+
);
|
|
2302
2619
|
sessionEnvSelections = (0, import_pg_core.pgTable)(
|
|
2303
2620
|
"session_env_selections",
|
|
2304
2621
|
{
|
|
2622
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2305
2623
|
session_id: (0, import_pg_core.varchar)("session_id", { length: 36 }).notNull().references(() => sessions.session_id, { onDelete: "cascade" }),
|
|
2306
2624
|
env_var_name: (0, import_pg_core.text)("env_var_name").notNull(),
|
|
2307
2625
|
created_at: t.timestamp("created_at").notNull()
|
|
2308
2626
|
},
|
|
2309
2627
|
(table) => ({
|
|
2628
|
+
tenantIdx: (0, import_pg_core.index)("session_env_selections_tenant_id_idx").on(table.tenant_id),
|
|
2310
2629
|
pk: (0, import_pg_core.primaryKey)({ columns: [table.session_id, table.env_var_name] }),
|
|
2311
2630
|
sessionIdx: (0, import_pg_core.index)("session_env_selections_session_idx").on(table.session_id)
|
|
2312
2631
|
})
|
|
@@ -2314,6 +2633,7 @@ var init_schema_postgres = __esm({
|
|
|
2314
2633
|
kbNamespaces = (0, import_pg_core.pgTable)(
|
|
2315
2634
|
"kb_namespaces",
|
|
2316
2635
|
{
|
|
2636
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2317
2637
|
namespace_id: (0, import_pg_core.varchar)("namespace_id", { length: 36 }).primaryKey(),
|
|
2318
2638
|
slug: (0, import_pg_core.text)("slug").notNull(),
|
|
2319
2639
|
display_name: (0, import_pg_core.text)("display_name").notNull(),
|
|
@@ -2340,7 +2660,8 @@ var init_schema_postgres = __esm({
|
|
|
2340
2660
|
archived_at: t.timestamp("archived_at")
|
|
2341
2661
|
},
|
|
2342
2662
|
(table) => ({
|
|
2343
|
-
|
|
2663
|
+
tenantIdx: (0, import_pg_core.index)("kb_namespaces_tenant_id_idx").on(table.tenant_id),
|
|
2664
|
+
slugIdx: (0, import_pg_core.uniqueIndex)("kb_namespaces_tenant_slug_unique").on(table.tenant_id, table.slug).where(import_drizzle_orm2.sql`${table.archived} = false`),
|
|
2344
2665
|
kindIdx: (0, import_pg_core.index)("kb_namespaces_kind_idx").on(table.kind),
|
|
2345
2666
|
ownerIdx: (0, import_pg_core.index)("kb_namespaces_owner_idx").on(table.owner_user_id),
|
|
2346
2667
|
repoIdx: (0, import_pg_core.index)("kb_namespaces_repo_idx").on(table.repo_id),
|
|
@@ -2351,6 +2672,7 @@ var init_schema_postgres = __esm({
|
|
|
2351
2672
|
kbNamespaceAcl = (0, import_pg_core.pgTable)(
|
|
2352
2673
|
"kb_namespace_acl",
|
|
2353
2674
|
{
|
|
2675
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2354
2676
|
namespace_acl_id: (0, import_pg_core.varchar)("namespace_acl_id", { length: 36 }).primaryKey(),
|
|
2355
2677
|
namespace_id: (0, import_pg_core.varchar)("namespace_id", { length: 36 }).notNull().references(() => kbNamespaces.namespace_id, { onDelete: "cascade" }),
|
|
2356
2678
|
subject_type: (0, import_pg_core.text)("subject_type", { enum: ["user", "group"] }).notNull(),
|
|
@@ -2363,9 +2685,11 @@ var init_schema_postgres = __esm({
|
|
|
2363
2685
|
updated_at: t.timestamp("updated_at")
|
|
2364
2686
|
},
|
|
2365
2687
|
(table) => ({
|
|
2688
|
+
tenantIdx: (0, import_pg_core.index)("kb_namespace_acl_tenant_id_idx").on(table.tenant_id),
|
|
2366
2689
|
namespaceIdx: (0, import_pg_core.index)("kb_namespace_acl_namespace_idx").on(table.namespace_id),
|
|
2367
2690
|
subjectIdx: (0, import_pg_core.index)("kb_namespace_acl_subject_idx").on(table.subject_type, table.subject_id),
|
|
2368
|
-
namespaceSubjectIdx: (0, import_pg_core.uniqueIndex)("
|
|
2691
|
+
namespaceSubjectIdx: (0, import_pg_core.uniqueIndex)("kb_namespace_acl_tenant_namespace_subject_unique").on(
|
|
2692
|
+
table.tenant_id,
|
|
2369
2693
|
table.namespace_id,
|
|
2370
2694
|
table.subject_type,
|
|
2371
2695
|
table.subject_id
|
|
@@ -2375,6 +2699,7 @@ var init_schema_postgres = __esm({
|
|
|
2375
2699
|
kbDocuments = (0, import_pg_core.pgTable)(
|
|
2376
2700
|
"kb_documents",
|
|
2377
2701
|
{
|
|
2702
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2378
2703
|
document_id: (0, import_pg_core.varchar)("document_id", { length: 36 }).primaryKey(),
|
|
2379
2704
|
namespace_id: (0, import_pg_core.varchar)("namespace_id", { length: 36 }).notNull().references(() => kbNamespaces.namespace_id, { onDelete: "cascade" }),
|
|
2380
2705
|
path: (0, import_pg_core.text)("path").notNull(),
|
|
@@ -2402,8 +2727,9 @@ var init_schema_postgres = __esm({
|
|
|
2402
2727
|
archived_at: t.timestamp("archived_at")
|
|
2403
2728
|
},
|
|
2404
2729
|
(table) => ({
|
|
2405
|
-
|
|
2406
|
-
|
|
2730
|
+
tenantIdx: (0, import_pg_core.index)("kb_documents_tenant_id_idx").on(table.tenant_id),
|
|
2731
|
+
namespacePathIdx: (0, import_pg_core.uniqueIndex)("kb_documents_tenant_namespace_path_unique").on(table.tenant_id, table.namespace_id, table.path).where(import_drizzle_orm2.sql`${table.archived} = false`),
|
|
2732
|
+
uriIdx: (0, import_pg_core.uniqueIndex)("kb_documents_tenant_uri_unique").on(table.tenant_id, table.uri).where(import_drizzle_orm2.sql`${table.archived} = false`),
|
|
2407
2733
|
namespaceIdx: (0, import_pg_core.index)("kb_documents_namespace_idx").on(table.namespace_id),
|
|
2408
2734
|
kindIdx: (0, import_pg_core.index)("kb_documents_kind_idx").on(table.kind),
|
|
2409
2735
|
visibilityIdx: (0, import_pg_core.index)("kb_documents_visibility_idx").on(table.visibility),
|
|
@@ -2416,6 +2742,7 @@ var init_schema_postgres = __esm({
|
|
|
2416
2742
|
kbDocumentVersions = (0, import_pg_core.pgTable)(
|
|
2417
2743
|
"kb_document_versions",
|
|
2418
2744
|
{
|
|
2745
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2419
2746
|
version_id: (0, import_pg_core.varchar)("version_id", { length: 36 }).primaryKey(),
|
|
2420
2747
|
document_id: (0, import_pg_core.varchar)("document_id", { length: 36 }).notNull().references(() => kbDocuments.document_id, { onDelete: "cascade" }),
|
|
2421
2748
|
version_number: (0, import_pg_core.integer)("version_number").notNull(),
|
|
@@ -2435,7 +2762,9 @@ var init_schema_postgres = __esm({
|
|
|
2435
2762
|
created_at: t.timestamp("created_at").notNull()
|
|
2436
2763
|
},
|
|
2437
2764
|
(table) => ({
|
|
2438
|
-
|
|
2765
|
+
tenantIdx: (0, import_pg_core.index)("kb_document_versions_tenant_id_idx").on(table.tenant_id),
|
|
2766
|
+
documentVersionIdx: (0, import_pg_core.uniqueIndex)("kb_document_versions_tenant_document_version_unique").on(
|
|
2767
|
+
table.tenant_id,
|
|
2439
2768
|
table.document_id,
|
|
2440
2769
|
table.version_number
|
|
2441
2770
|
),
|
|
@@ -2447,6 +2776,7 @@ var init_schema_postgres = __esm({
|
|
|
2447
2776
|
kbDocumentUnits = (0, import_pg_core.pgTable)(
|
|
2448
2777
|
"kb_document_units",
|
|
2449
2778
|
{
|
|
2779
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2450
2780
|
unit_id: (0, import_pg_core.varchar)("unit_id", { length: 36 }).primaryKey(),
|
|
2451
2781
|
document_id: (0, import_pg_core.varchar)("document_id", { length: 36 }).notNull().references(() => kbDocuments.document_id, { onDelete: "cascade" }),
|
|
2452
2782
|
version_id: (0, import_pg_core.varchar)("version_id", { length: 36 }).notNull().references(() => kbDocumentVersions.version_id, { onDelete: "cascade" }),
|
|
@@ -2471,6 +2801,7 @@ var init_schema_postgres = __esm({
|
|
|
2471
2801
|
updated_at: t.timestamp("updated_at")
|
|
2472
2802
|
},
|
|
2473
2803
|
(table) => ({
|
|
2804
|
+
tenantIdx: (0, import_pg_core.index)("kb_document_units_tenant_id_idx").on(table.tenant_id),
|
|
2474
2805
|
documentIdx: (0, import_pg_core.index)("kb_document_units_document_idx").on(table.document_id),
|
|
2475
2806
|
versionIdx: (0, import_pg_core.index)("kb_document_units_version_idx").on(table.version_id),
|
|
2476
2807
|
versionOrdinalIdx: (0, import_pg_core.index)("kb_document_units_version_ordinal_idx").on(
|
|
@@ -2484,6 +2815,7 @@ var init_schema_postgres = __esm({
|
|
|
2484
2815
|
kbEmbeddingSpaces = (0, import_pg_core.pgTable)(
|
|
2485
2816
|
"kb_embedding_spaces",
|
|
2486
2817
|
{
|
|
2818
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2487
2819
|
embedding_space_id: (0, import_pg_core.varchar)("embedding_space_id", { length: 36 }).primaryKey(),
|
|
2488
2820
|
provider: (0, import_pg_core.text)("provider").notNull(),
|
|
2489
2821
|
model: (0, import_pg_core.text)("model").notNull(),
|
|
@@ -2496,7 +2828,9 @@ var init_schema_postgres = __esm({
|
|
|
2496
2828
|
updated_at: t.timestamp("updated_at")
|
|
2497
2829
|
},
|
|
2498
2830
|
(table) => ({
|
|
2499
|
-
|
|
2831
|
+
tenantIdx: (0, import_pg_core.index)("kb_embedding_spaces_tenant_id_idx").on(table.tenant_id),
|
|
2832
|
+
providerModelIdx: (0, import_pg_core.uniqueIndex)("kb_embedding_spaces_tenant_provider_model_unique").on(
|
|
2833
|
+
table.tenant_id,
|
|
2500
2834
|
table.provider,
|
|
2501
2835
|
table.model,
|
|
2502
2836
|
table.dimensions,
|
|
@@ -2509,6 +2843,7 @@ var init_schema_postgres = __esm({
|
|
|
2509
2843
|
kbGraphNodes = (0, import_pg_core.pgTable)(
|
|
2510
2844
|
"kb_graph_nodes",
|
|
2511
2845
|
{
|
|
2846
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2512
2847
|
node_id: (0, import_pg_core.varchar)("node_id", { length: 36 }).primaryKey(),
|
|
2513
2848
|
node_type: (0, import_pg_core.text)("node_type", {
|
|
2514
2849
|
enum: [
|
|
@@ -2574,7 +2909,8 @@ var init_schema_postgres = __esm({
|
|
|
2574
2909
|
archived_at: t.timestamp("archived_at")
|
|
2575
2910
|
},
|
|
2576
2911
|
(table) => ({
|
|
2577
|
-
|
|
2912
|
+
tenantIdx: (0, import_pg_core.index)("kb_graph_nodes_tenant_id_idx").on(table.tenant_id),
|
|
2913
|
+
uriIdx: (0, import_pg_core.uniqueIndex)("kb_graph_nodes_tenant_uri_unique").on(table.tenant_id, table.uri).where(import_drizzle_orm2.sql`${table.archived} = false`),
|
|
2578
2914
|
typeIdx: (0, import_pg_core.index)("kb_graph_nodes_type_idx").on(table.node_type),
|
|
2579
2915
|
namespaceIdx: (0, import_pg_core.index)("kb_graph_nodes_namespace_idx").on(table.namespace_id),
|
|
2580
2916
|
documentIdx: (0, import_pg_core.index)("kb_graph_nodes_document_idx").on(table.document_id),
|
|
@@ -2594,6 +2930,7 @@ var init_schema_postgres = __esm({
|
|
|
2594
2930
|
kbGraphEdges = (0, import_pg_core.pgTable)(
|
|
2595
2931
|
"kb_graph_edges",
|
|
2596
2932
|
{
|
|
2933
|
+
tenant_id: (0, import_pg_core.text)("tenant_id").notNull().default("default"),
|
|
2597
2934
|
edge_id: (0, import_pg_core.varchar)("edge_id", { length: 36 }).primaryKey(),
|
|
2598
2935
|
source_node_id: (0, import_pg_core.varchar)("source_node_id", { length: 36 }).notNull().references(() => kbGraphNodes.node_id, { onDelete: "cascade" }),
|
|
2599
2936
|
target_node_id: (0, import_pg_core.varchar)("target_node_id", { length: 36 }).notNull().references(() => kbGraphNodes.node_id, { onDelete: "cascade" }),
|
|
@@ -2622,6 +2959,7 @@ var init_schema_postgres = __esm({
|
|
|
2622
2959
|
archived_at: t.timestamp("archived_at")
|
|
2623
2960
|
},
|
|
2624
2961
|
(table) => ({
|
|
2962
|
+
tenantIdx: (0, import_pg_core.index)("kb_graph_edges_tenant_id_idx").on(table.tenant_id),
|
|
2625
2963
|
sourceIdx: (0, import_pg_core.index)("kb_graph_edges_source_idx").on(table.source_node_id),
|
|
2626
2964
|
targetIdx: (0, import_pg_core.index)("kb_graph_edges_target_idx").on(table.target_node_id),
|
|
2627
2965
|
typeIdx: (0, import_pg_core.index)("kb_graph_edges_type_idx").on(table.edge_type),
|
|
@@ -2633,7 +2971,7 @@ var init_schema_postgres = __esm({
|
|
|
2633
2971
|
table.target_node_id,
|
|
2634
2972
|
table.edge_type
|
|
2635
2973
|
),
|
|
2636
|
-
sourceTargetTypeIdx: (0, import_pg_core.uniqueIndex)("
|
|
2974
|
+
sourceTargetTypeIdx: (0, import_pg_core.uniqueIndex)("kb_graph_edges_tenant_source_target_type_unique").on(table.tenant_id, table.source_node_id, table.target_node_id, table.edge_type).where(import_drizzle_orm2.sql`${table.archived} = false`),
|
|
2637
2975
|
archivedIdx: (0, import_pg_core.index)("kb_graph_edges_archived_idx").on(table.archived)
|
|
2638
2976
|
})
|
|
2639
2977
|
);
|
|
@@ -2697,6 +3035,7 @@ __export(schema_sqlite_exports, {
|
|
|
2697
3035
|
cardTypes: () => cardTypes2,
|
|
2698
3036
|
cards: () => cards2,
|
|
2699
3037
|
gatewayChannels: () => gatewayChannels2,
|
|
3038
|
+
gatewayOutboundMessages: () => gatewayOutboundMessages2,
|
|
2700
3039
|
groupMemberships: () => groupMemberships2,
|
|
2701
3040
|
groups: () => groups2,
|
|
2702
3041
|
kbDocumentUnits: () => kbDocumentUnits2,
|
|
@@ -2725,7 +3064,7 @@ __export(schema_sqlite_exports, {
|
|
|
2725
3064
|
userMcpOauthTokens: () => userMcpOauthTokens2,
|
|
2726
3065
|
users: () => users2
|
|
2727
3066
|
});
|
|
2728
|
-
var import_drizzle_orm3, import_sqlite_core, t2, sessions2, sessionRelationships2, tasks2, serializedSessions2, messages2, boards2, repos2, branches2, branchOwners2, boardOwners2, schedules2, users2, groups2, groupMemberships2, branchGroupGrants2, boardGroupGrants2, appVariables2, userApiKeys2, mcpServers2, cardTypes2, cards2, artifacts2, artifactTrustGrants2, boardObjects2, sessionMcpServers2, userMcpOauthTokens2, boardComments2, gatewayChannels2, threadSessionMap2, sessionEnvSelections2, kbNamespaces2, kbNamespaceAcl2, kbDocuments2, kbDocumentVersions2, kbDocumentUnits2, kbEmbeddingSpaces2, kbGraphNodes2, kbGraphEdges2, sessionsRelations2, sessionRelationshipsRelations2, branchesRelations2, schedulesRelations2;
|
|
3067
|
+
var import_drizzle_orm3, import_sqlite_core, t2, sessions2, sessionRelationships2, tasks2, serializedSessions2, messages2, boards2, repos2, branches2, branchOwners2, boardOwners2, schedules2, users2, groups2, groupMemberships2, branchGroupGrants2, boardGroupGrants2, appVariables2, userApiKeys2, mcpServers2, cardTypes2, cards2, artifacts2, artifactTrustGrants2, boardObjects2, sessionMcpServers2, userMcpOauthTokens2, boardComments2, gatewayChannels2, threadSessionMap2, gatewayOutboundMessages2, sessionEnvSelections2, kbNamespaces2, kbNamespaceAcl2, kbDocuments2, kbDocumentVersions2, kbDocumentUnits2, kbEmbeddingSpaces2, kbGraphNodes2, kbGraphEdges2, sessionsRelations2, sessionRelationshipsRelations2, branchesRelations2, schedulesRelations2;
|
|
2729
3068
|
var init_schema_sqlite = __esm({
|
|
2730
3069
|
"src/db/schema.sqlite.ts"() {
|
|
2731
3070
|
"use strict";
|
|
@@ -2801,6 +3140,7 @@ var init_schema_sqlite = __esm({
|
|
|
2801
3140
|
},
|
|
2802
3141
|
(table) => ({
|
|
2803
3142
|
statusIdx: (0, import_sqlite_core.index)("sessions_status_idx").on(table.status),
|
|
3143
|
+
statusReadyIdx: (0, import_sqlite_core.index)("sessions_status_ready_idx").on(table.status, table.ready_for_prompt),
|
|
2804
3144
|
agenticToolIdx: (0, import_sqlite_core.index)("sessions_agentic_tool_idx").on(table.agentic_tool),
|
|
2805
3145
|
boardIdx: (0, import_sqlite_core.index)("sessions_board_idx").on(table.board_id),
|
|
2806
3146
|
branchIdx: (0, import_sqlite_core.index)("sessions_branch_idx").on(table.branch_id),
|
|
@@ -2840,6 +3180,9 @@ var init_schema_sqlite = __esm({
|
|
|
2840
3180
|
sourceIdx: (0, import_sqlite_core.index)("session_relationships_source_idx").on(table.source_session_id),
|
|
2841
3181
|
targetIdx: (0, import_sqlite_core.index)("session_relationships_target_idx").on(table.target_session_id),
|
|
2842
3182
|
callbackIdx: (0, import_sqlite_core.index)("session_relationships_callback_idx").on(table.callback_session_id),
|
|
3183
|
+
// Note: no tenant_source/tenant_target composite indexes here — SQLite schema
|
|
3184
|
+
// has no tenant column on this table (RLS is Postgres-only). The standalone
|
|
3185
|
+
// source/target indexes above are sufficient for SQLite.
|
|
2843
3186
|
sourceTargetTypeUnique: (0, import_sqlite_core.uniqueIndex)("session_relationships_source_target_type_unique").on(
|
|
2844
3187
|
table.source_session_id,
|
|
2845
3188
|
table.target_session_id,
|
|
@@ -2959,7 +3302,12 @@ var init_schema_sqlite = __esm({
|
|
|
2959
3302
|
// Indexes for efficient lookups
|
|
2960
3303
|
sessionIdx: (0, import_sqlite_core.index)("messages_session_id_idx").on(table.session_id),
|
|
2961
3304
|
taskIdx: (0, import_sqlite_core.index)("messages_task_id_idx").on(table.task_id),
|
|
2962
|
-
sessionIndexIdx: (0, import_sqlite_core.index)("messages_session_index_idx").on(table.session_id, table.index)
|
|
3305
|
+
sessionIndexIdx: (0, import_sqlite_core.index)("messages_session_index_idx").on(table.session_id, table.index),
|
|
3306
|
+
timestampIdx: (0, import_sqlite_core.index)("messages_timestamp_idx").on(table.timestamp),
|
|
3307
|
+
sessionTimestampIdx: (0, import_sqlite_core.index)("messages_session_timestamp_idx").on(
|
|
3308
|
+
table.session_id,
|
|
3309
|
+
table.timestamp
|
|
3310
|
+
)
|
|
2963
3311
|
})
|
|
2964
3312
|
);
|
|
2965
3313
|
boards2 = (0, import_sqlite_core.sqliteTable)(
|
|
@@ -3185,6 +3533,9 @@ var init_schema_sqlite = __esm({
|
|
|
3185
3533
|
onboarding_completed: t2.bool("onboarding_completed").notNull().default(false),
|
|
3186
3534
|
// Force password change flag (admin-settable, auto-cleared on password change)
|
|
3187
3535
|
must_change_password: t2.bool("must_change_password").notNull().default(false),
|
|
3536
|
+
// Auth invalidation marker. Password changes set this timestamp so any
|
|
3537
|
+
// previously issued browser access or refresh token is rejected.
|
|
3538
|
+
tokens_valid_after: t2.timestamp("tokens_valid_after"),
|
|
3188
3539
|
// JSON blob for profile/preferences
|
|
3189
3540
|
data: t2.json("data").$type().notNull()
|
|
3190
3541
|
},
|
|
@@ -3628,6 +3979,66 @@ var init_schema_sqlite = __esm({
|
|
|
3628
3979
|
channelStatusIdx: (0, import_sqlite_core.index)("idx_thread_map_channel_status").on(table.channel_id, table.status)
|
|
3629
3980
|
})
|
|
3630
3981
|
);
|
|
3982
|
+
gatewayOutboundMessages2 = (0, import_sqlite_core.sqliteTable)(
|
|
3983
|
+
"gateway_outbound_messages",
|
|
3984
|
+
{
|
|
3985
|
+
id: (0, import_sqlite_core.text)("id", { length: 36 }).primaryKey(),
|
|
3986
|
+
created_at: t2.timestamp("created_at").notNull(),
|
|
3987
|
+
updated_at: t2.timestamp("updated_at").notNull(),
|
|
3988
|
+
gateway_channel_id: (0, import_sqlite_core.text)("gateway_channel_id", { length: 36 }).notNull().references(() => gatewayChannels2.id, { onDelete: "cascade" }),
|
|
3989
|
+
channel_type: (0, import_sqlite_core.text)("channel_type", {
|
|
3990
|
+
enum: ["slack", "discord", "whatsapp", "telegram", "github", "teams"]
|
|
3991
|
+
}).notNull(),
|
|
3992
|
+
platform_channel_id: (0, import_sqlite_core.text)("platform_channel_id").notNull(),
|
|
3993
|
+
platform_message_id: (0, import_sqlite_core.text)("platform_message_id").notNull(),
|
|
3994
|
+
platform_thread_id: (0, import_sqlite_core.text)("platform_thread_id").notNull(),
|
|
3995
|
+
platform_permalink: (0, import_sqlite_core.text)("platform_permalink"),
|
|
3996
|
+
target_branch_id: (0, import_sqlite_core.text)("target_branch_id", { length: 36 }).notNull().references(() => branches2.branch_id),
|
|
3997
|
+
emitted_by_user_id: (0, import_sqlite_core.text)("emitted_by_user_id", { length: 36 }).notNull().references(() => users2.user_id),
|
|
3998
|
+
emitted_by_session_id: (0, import_sqlite_core.text)("emitted_by_session_id", { length: 36 }).references(
|
|
3999
|
+
() => sessions2.session_id,
|
|
4000
|
+
{
|
|
4001
|
+
onDelete: "set null"
|
|
4002
|
+
}
|
|
4003
|
+
),
|
|
4004
|
+
emitted_by_task_id: (0, import_sqlite_core.text)("emitted_by_task_id", { length: 36 }).references(() => tasks2.task_id, {
|
|
4005
|
+
onDelete: "set null"
|
|
4006
|
+
}),
|
|
4007
|
+
emitted_by_schedule_id: (0, import_sqlite_core.text)("emitted_by_schedule_id", { length: 36 }).references(
|
|
4008
|
+
() => schedules2.schedule_id,
|
|
4009
|
+
{
|
|
4010
|
+
onDelete: "set null"
|
|
4011
|
+
}
|
|
4012
|
+
),
|
|
4013
|
+
message_text: (0, import_sqlite_core.text)("message_text").notNull(),
|
|
4014
|
+
message_preview: (0, import_sqlite_core.text)("message_preview").notNull(),
|
|
4015
|
+
metadata: t2.json("metadata"),
|
|
4016
|
+
consumed_by_session_id: (0, import_sqlite_core.text)("consumed_by_session_id", { length: 36 }).references(
|
|
4017
|
+
() => sessions2.session_id,
|
|
4018
|
+
{
|
|
4019
|
+
onDelete: "set null"
|
|
4020
|
+
}
|
|
4021
|
+
),
|
|
4022
|
+
consumed_at: t2.timestamp("consumed_at")
|
|
4023
|
+
},
|
|
4024
|
+
(table) => ({
|
|
4025
|
+
uniqueChannelThread: (0, import_sqlite_core.uniqueIndex)("uniq_gateway_outbound_channel_thread").on(
|
|
4026
|
+
table.gateway_channel_id,
|
|
4027
|
+
table.platform_thread_id
|
|
4028
|
+
),
|
|
4029
|
+
emittedSessionIdx: (0, import_sqlite_core.index)("idx_gateway_outbound_emitted_session").on(
|
|
4030
|
+
table.emitted_by_session_id
|
|
4031
|
+
),
|
|
4032
|
+
emittedScheduleIdx: (0, import_sqlite_core.index)("idx_gateway_outbound_emitted_schedule").on(
|
|
4033
|
+
table.emitted_by_schedule_id
|
|
4034
|
+
),
|
|
4035
|
+
targetBranchCreatedIdx: (0, import_sqlite_core.index)("idx_gateway_outbound_branch_created").on(
|
|
4036
|
+
table.target_branch_id,
|
|
4037
|
+
table.created_at
|
|
4038
|
+
),
|
|
4039
|
+
consumedIdx: (0, import_sqlite_core.index)("idx_gateway_outbound_consumed").on(table.consumed_at)
|
|
4040
|
+
})
|
|
4041
|
+
);
|
|
3631
4042
|
sessionEnvSelections2 = (0, import_sqlite_core.sqliteTable)(
|
|
3632
4043
|
"session_env_selections",
|
|
3633
4044
|
{
|
|
@@ -4069,6 +4480,7 @@ __export(schema_exports, {
|
|
|
4069
4480
|
cardTypes: () => cardTypes3,
|
|
4070
4481
|
cards: () => cards3,
|
|
4071
4482
|
gatewayChannels: () => gatewayChannels3,
|
|
4483
|
+
gatewayOutboundMessages: () => gatewayOutboundMessages3,
|
|
4072
4484
|
groupMemberships: () => groupMemberships3,
|
|
4073
4485
|
groups: () => groups3,
|
|
4074
4486
|
kbDocumentUnits: () => kbDocumentUnits3,
|
|
@@ -4094,7 +4506,7 @@ __export(schema_exports, {
|
|
|
4094
4506
|
userMcpOauthTokens: () => userMcpOauthTokens3,
|
|
4095
4507
|
users: () => users3
|
|
4096
4508
|
});
|
|
4097
|
-
var dialect, schema, sessions3, tasks3, messages3, boards3, repos3, branches3, branchOwners3, boardOwners3, groups3, groupMemberships3, branchGroupGrants3, boardGroupGrants3, schedules3, users3, appVariables3, mcpServers3, cardTypes3, cards3, artifacts3, artifactTrustGrants3, boardObjects3, sessionMcpServers3, sessionRelationships3, sessionEnvSelections3, userMcpOauthTokens3, boardComments3, gatewayChannels3, threadSessionMap3, userApiKeys3, serializedSessions3, kbNamespaces3, kbNamespaceAcl3, kbDocuments3, kbDocumentVersions3, kbDocumentUnits3, kbEmbeddingSpaces3, kbGraphNodes3, kbGraphEdges3;
|
|
4509
|
+
var dialect, schema, sessions3, tasks3, messages3, boards3, repos3, branches3, branchOwners3, boardOwners3, groups3, groupMemberships3, branchGroupGrants3, boardGroupGrants3, schedules3, users3, appVariables3, mcpServers3, cardTypes3, cards3, artifacts3, artifactTrustGrants3, boardObjects3, sessionMcpServers3, sessionRelationships3, sessionEnvSelections3, userMcpOauthTokens3, boardComments3, gatewayChannels3, threadSessionMap3, gatewayOutboundMessages3, userApiKeys3, serializedSessions3, kbNamespaces3, kbNamespaceAcl3, kbDocuments3, kbDocumentVersions3, kbDocumentUnits3, kbEmbeddingSpaces3, kbGraphNodes3, kbGraphEdges3;
|
|
4098
4510
|
var init_schema = __esm({
|
|
4099
4511
|
"src/db/schema.ts"() {
|
|
4100
4512
|
"use strict";
|
|
@@ -4132,6 +4544,7 @@ var init_schema = __esm({
|
|
|
4132
4544
|
boardComments3 = schema.boardComments;
|
|
4133
4545
|
gatewayChannels3 = schema.gatewayChannels;
|
|
4134
4546
|
threadSessionMap3 = schema.threadSessionMap;
|
|
4547
|
+
gatewayOutboundMessages3 = schema.gatewayOutboundMessages;
|
|
4135
4548
|
userApiKeys3 = schema.userApiKeys;
|
|
4136
4549
|
serializedSessions3 = schema.serializedSessions;
|
|
4137
4550
|
kbNamespaces3 = schema.kbNamespaces;
|
|
@@ -4164,35 +4577,6 @@ var init_ids = __esm({
|
|
|
4164
4577
|
}
|
|
4165
4578
|
});
|
|
4166
4579
|
|
|
4167
|
-
// src/db/user-utils.ts
|
|
4168
|
-
var import_bcryptjs, import_drizzle_orm6;
|
|
4169
|
-
var init_user_utils = __esm({
|
|
4170
|
-
"src/db/user-utils.ts"() {
|
|
4171
|
-
"use strict";
|
|
4172
|
-
init_cjs_shims();
|
|
4173
|
-
import_bcryptjs = __toESM(require("bcryptjs"), 1);
|
|
4174
|
-
import_drizzle_orm6 = require("drizzle-orm");
|
|
4175
|
-
init_ids();
|
|
4176
|
-
init_user();
|
|
4177
|
-
init_database_wrapper();
|
|
4178
|
-
init_schema();
|
|
4179
|
-
}
|
|
4180
|
-
});
|
|
4181
|
-
|
|
4182
|
-
// src/db/first-run-bootstrap.ts
|
|
4183
|
-
var import_node_crypto3, import_drizzle_orm7;
|
|
4184
|
-
var init_first_run_bootstrap = __esm({
|
|
4185
|
-
"src/db/first-run-bootstrap.ts"() {
|
|
4186
|
-
"use strict";
|
|
4187
|
-
init_cjs_shims();
|
|
4188
|
-
import_node_crypto3 = require("crypto");
|
|
4189
|
-
import_drizzle_orm7 = require("drizzle-orm");
|
|
4190
|
-
init_database_wrapper();
|
|
4191
|
-
init_schema();
|
|
4192
|
-
init_user_utils();
|
|
4193
|
-
}
|
|
4194
|
-
});
|
|
4195
|
-
|
|
4196
4580
|
// src/unix/index.ts
|
|
4197
4581
|
var unix_exports = {};
|
|
4198
4582
|
__export(unix_exports, {
|
|
@@ -4277,7 +4661,7 @@ var import_node_child_process = require("child_process");
|
|
|
4277
4661
|
var import_node_util = require("util");
|
|
4278
4662
|
var execAsync = (0, import_node_util.promisify)(import_node_child_process.exec);
|
|
4279
4663
|
function spawnWithInput(cmd, args, input) {
|
|
4280
|
-
return new Promise((
|
|
4664
|
+
return new Promise((resolve, reject) => {
|
|
4281
4665
|
const child = (0, import_node_child_process.spawn)(cmd, args, {
|
|
4282
4666
|
stdio: ["pipe", "pipe", "pipe"]
|
|
4283
4667
|
});
|
|
@@ -4291,7 +4675,7 @@ function spawnWithInput(cmd, args, input) {
|
|
|
4291
4675
|
});
|
|
4292
4676
|
child.on("error", reject);
|
|
4293
4677
|
child.on("close", (code) => {
|
|
4294
|
-
|
|
4678
|
+
resolve({
|
|
4295
4679
|
stdout,
|
|
4296
4680
|
stderr,
|
|
4297
4681
|
exitCode: code ?? 1
|
|
@@ -4775,10 +5159,7 @@ var import_node_fs = __toESM(require("fs"), 1);
|
|
|
4775
5159
|
|
|
4776
5160
|
// src/yaml/index.ts
|
|
4777
5161
|
init_cjs_shims();
|
|
4778
|
-
var
|
|
4779
|
-
var load = import_js_yaml.default.load;
|
|
4780
|
-
var dump = import_js_yaml.default.dump;
|
|
4781
|
-
var YAMLException = import_js_yaml.default.YAMLException;
|
|
5162
|
+
var yaml = __toESM(require("js-yaml"), 1);
|
|
4782
5163
|
|
|
4783
5164
|
// src/config/variant-resolver.ts
|
|
4784
5165
|
init_cjs_shims();
|
|
@@ -4970,6 +5351,7 @@ init_schema();
|
|
|
4970
5351
|
init_cjs_shims();
|
|
4971
5352
|
init_ids();
|
|
4972
5353
|
init_id();
|
|
5354
|
+
init_tenant_context();
|
|
4973
5355
|
var RepositoryError = class extends Error {
|
|
4974
5356
|
constructor(message, cause) {
|
|
4975
5357
|
super(message);
|
|
@@ -5011,6 +5393,21 @@ async function resolveByShortIdPrefix(id, entityType, fetchMatches) {
|
|
|
5011
5393
|
return matches[0];
|
|
5012
5394
|
}
|
|
5013
5395
|
var RESOLVE_SHORT_ID_FETCH_LIMIT = 11;
|
|
5396
|
+
function getHiddenTenantId(row) {
|
|
5397
|
+
const tenantId = row?.tenant_id;
|
|
5398
|
+
return typeof tenantId === "string" && tenantId.length > 0 ? tenantId : void 0;
|
|
5399
|
+
}
|
|
5400
|
+
function attachHiddenTenant(dto, row) {
|
|
5401
|
+
const tenantId = getHiddenTenantId(row);
|
|
5402
|
+
if (tenantId) {
|
|
5403
|
+
Object.defineProperty(dto, "tenant_id", {
|
|
5404
|
+
value: tenantId,
|
|
5405
|
+
enumerable: false,
|
|
5406
|
+
configurable: true
|
|
5407
|
+
});
|
|
5408
|
+
}
|
|
5409
|
+
return dto;
|
|
5410
|
+
}
|
|
5014
5411
|
|
|
5015
5412
|
// src/db/repositories/session-env-selections.ts
|
|
5016
5413
|
var SessionEnvSelectionRepository = class {
|
|
@@ -5398,71 +5795,103 @@ init_executor_heartbeat();
|
|
|
5398
5795
|
|
|
5399
5796
|
// src/config/key-resolver.ts
|
|
5400
5797
|
init_cjs_shims();
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
var import_drizzle_orm35 = require("drizzle-orm");
|
|
5405
|
-
var import_bcryptjs3 = __toESM(require("bcryptjs"), 1);
|
|
5798
|
+
var import_drizzle_orm6 = require("drizzle-orm");
|
|
5799
|
+
init_database_wrapper();
|
|
5800
|
+
init_schema();
|
|
5406
5801
|
init_ids();
|
|
5407
|
-
|
|
5408
|
-
// src/lib/slugs.ts
|
|
5409
|
-
init_cjs_shims();
|
|
5410
|
-
|
|
5411
|
-
// src/db/client.ts
|
|
5412
|
-
init_cjs_shims();
|
|
5413
|
-
var import_client = require("@libsql/client");
|
|
5414
|
-
var import_libsql = require("drizzle-orm/libsql");
|
|
5415
|
-
var import_postgres_js = require("drizzle-orm/postgres-js");
|
|
5416
|
-
var import_postgres = __toESM(require("postgres"), 1);
|
|
5417
5802
|
init_config_manager();
|
|
5418
|
-
|
|
5419
|
-
init_schema_sqlite();
|
|
5420
|
-
init_schema_factory();
|
|
5803
|
+
var DEBUG_KEY_RESOLUTION = process.env.AGOR_DEBUG_KEY_RESOLUTION === "1" || process.env.DEBUG?.includes("key-resolution");
|
|
5421
5804
|
|
|
5422
|
-
// src/
|
|
5423
|
-
|
|
5424
|
-
var import_node_os2 = require("os");
|
|
5425
|
-
var import_node_path2 = require("path");
|
|
5805
|
+
// src/config/index.ts
|
|
5806
|
+
init_multitenancy();
|
|
5426
5807
|
|
|
5427
|
-
// src/
|
|
5428
|
-
|
|
5429
|
-
init_first_run_bootstrap();
|
|
5808
|
+
// src/config/proxies-resolver.ts
|
|
5809
|
+
init_cjs_shims();
|
|
5430
5810
|
|
|
5431
|
-
// src/
|
|
5811
|
+
// src/config/repo-list.ts
|
|
5432
5812
|
init_cjs_shims();
|
|
5433
|
-
var import_node_path3 = require("path");
|
|
5434
|
-
var import_node_url = require("url");
|
|
5435
|
-
var import_drizzle_orm8 = require("drizzle-orm");
|
|
5436
|
-
var import_migrator = require("drizzle-orm/libsql/migrator");
|
|
5437
|
-
var import_migrator2 = require("drizzle-orm/postgres-js/migrator");
|
|
5438
|
-
init_database_wrapper();
|
|
5439
|
-
init_schema();
|
|
5440
5813
|
|
|
5441
|
-
// src/
|
|
5814
|
+
// src/config/repo-reference.ts
|
|
5442
5815
|
init_cjs_shims();
|
|
5816
|
+
var REPO_SLUG_PATTERN = /^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/;
|
|
5443
5817
|
|
|
5444
|
-
// src/
|
|
5818
|
+
// src/config/resolved-config-slice.ts
|
|
5445
5819
|
init_cjs_shims();
|
|
5820
|
+
var import_zod = require("zod");
|
|
5821
|
+
var ResolvedConfigSliceSchema = import_zod.z.object({
|
|
5822
|
+
/** From `config.execution.*` */
|
|
5823
|
+
execution: import_zod.z.object({
|
|
5824
|
+
permission_timeout_ms: import_zod.z.number().int().nonnegative().optional(),
|
|
5825
|
+
executor_heartbeat: import_zod.z.object({
|
|
5826
|
+
enabled: import_zod.z.boolean(),
|
|
5827
|
+
interval_ms: import_zod.z.number().int().positive()
|
|
5828
|
+
}).optional()
|
|
5829
|
+
}).optional(),
|
|
5830
|
+
/** From `config.opencode.*` */
|
|
5831
|
+
opencode: import_zod.z.object({
|
|
5832
|
+
serverUrl: import_zod.z.string().optional()
|
|
5833
|
+
}).optional(),
|
|
5834
|
+
/** From `config.daemon.*` (selected fields only) */
|
|
5835
|
+
daemon: import_zod.z.object({
|
|
5836
|
+
host_ip_address: import_zod.z.string().optional()
|
|
5837
|
+
}).optional()
|
|
5838
|
+
});
|
|
5446
5839
|
|
|
5447
|
-
// src/
|
|
5840
|
+
// src/config/resource-schemas.ts
|
|
5448
5841
|
init_cjs_shims();
|
|
5449
|
-
var
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5842
|
+
var import_zod2 = require("zod");
|
|
5843
|
+
var uuidSchema = import_zod2.z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID");
|
|
5844
|
+
var repoSlugSchema = import_zod2.z.string().regex(
|
|
5845
|
+
REPO_SLUG_PATTERN,
|
|
5846
|
+
'Must be org/name format with alphanumeric, hyphens, underscores, or dots (e.g., "my-org/my-repo")'
|
|
5847
|
+
);
|
|
5848
|
+
var enforcedAgentConfigSchema = import_zod2.z.object({
|
|
5849
|
+
agentic_tool: import_zod2.z.enum(["claude-code", "claude-code-cli", "codex", "gemini", "opencode", "copilot", "cursor"]).optional(),
|
|
5850
|
+
permission_mode: import_zod2.z.string().optional(),
|
|
5851
|
+
model: import_zod2.z.string().optional(),
|
|
5852
|
+
mcp_server_ids: import_zod2.z.array(import_zod2.z.string()).optional()
|
|
5853
|
+
});
|
|
5854
|
+
var resourceRepoConfigSchema = import_zod2.z.object({
|
|
5855
|
+
repo_id: uuidSchema,
|
|
5856
|
+
slug: repoSlugSchema,
|
|
5857
|
+
remote_url: import_zod2.z.string().optional(),
|
|
5858
|
+
repo_type: import_zod2.z.enum(["remote", "local"]).default("remote"),
|
|
5859
|
+
default_branch: import_zod2.z.string().optional(),
|
|
5860
|
+
shallow: import_zod2.z.boolean().optional()
|
|
5861
|
+
}).refine((data) => data.repo_type !== "remote" || data.remote_url, {
|
|
5862
|
+
message: 'remote_url is required when repo_type is "remote"',
|
|
5863
|
+
path: ["remote_url"]
|
|
5864
|
+
});
|
|
5865
|
+
var resourceBranchConfigSchema = import_zod2.z.object({
|
|
5866
|
+
branch_id: uuidSchema,
|
|
5867
|
+
name: import_zod2.z.string().min(1, "Branch name is required"),
|
|
5868
|
+
ref: import_zod2.z.string().min(1, "Git ref is required"),
|
|
5869
|
+
ref_type: import_zod2.z.enum(["branch", "tag"]).optional(),
|
|
5870
|
+
others_can: import_zod2.z.enum(["none", "view", "session", "prompt", "all"]).optional(),
|
|
5871
|
+
mcp_server_ids: import_zod2.z.array(import_zod2.z.string()).optional(),
|
|
5872
|
+
repo: repoSlugSchema,
|
|
5873
|
+
readonly: import_zod2.z.boolean().optional(),
|
|
5874
|
+
agent: enforcedAgentConfigSchema.optional()
|
|
5875
|
+
});
|
|
5876
|
+
var resourceUserConfigSchema = import_zod2.z.object({
|
|
5877
|
+
user_id: uuidSchema,
|
|
5878
|
+
email: import_zod2.z.string().email("Must be a valid email address"),
|
|
5879
|
+
name: import_zod2.z.string().optional(),
|
|
5880
|
+
role: import_zod2.z.enum(["superadmin", "admin", "member", "viewer"]).default("member"),
|
|
5881
|
+
unix_username: import_zod2.z.string().optional(),
|
|
5882
|
+
password: import_zod2.z.string().optional()
|
|
5883
|
+
});
|
|
5884
|
+
var daemonResourcesConfigSchema = import_zod2.z.object({
|
|
5885
|
+
repos: import_zod2.z.array(resourceRepoConfigSchema).optional(),
|
|
5886
|
+
branches: import_zod2.z.array(resourceBranchConfigSchema).optional(),
|
|
5887
|
+
users: import_zod2.z.array(resourceUserConfigSchema).optional()
|
|
5888
|
+
});
|
|
5453
5889
|
|
|
5454
|
-
// src/
|
|
5890
|
+
// src/config/resource-sync.ts
|
|
5455
5891
|
init_cjs_shims();
|
|
5456
|
-
var import_drizzle_orm10 = require("drizzle-orm");
|
|
5457
|
-
init_ids();
|
|
5458
|
-
init_database_wrapper();
|
|
5459
|
-
init_schema();
|
|
5460
5892
|
|
|
5461
|
-
// src/
|
|
5893
|
+
// src/config/security-resolver.ts
|
|
5462
5894
|
init_cjs_shims();
|
|
5463
|
-
var import_drizzle_orm11 = require("drizzle-orm");
|
|
5464
|
-
init_config_manager();
|
|
5465
|
-
init_ids();
|
|
5466
5895
|
|
|
5467
5896
|
// src/utils/url.ts
|
|
5468
5897
|
init_cjs_shims();
|
|
@@ -5514,99 +5943,113 @@ function stripHttpUrlUserinfo(rawUrl) {
|
|
|
5514
5943
|
}
|
|
5515
5944
|
}
|
|
5516
5945
|
|
|
5517
|
-
// src/
|
|
5518
|
-
|
|
5519
|
-
|
|
5520
|
-
|
|
5521
|
-
|
|
5946
|
+
// src/config/security-resolver.ts
|
|
5947
|
+
var DEFAULT_GIT_CONFIG_PARAMETERS = Object.freeze([
|
|
5948
|
+
"transfer.credentialsInUrl=die",
|
|
5949
|
+
"protocol.file.allow=user",
|
|
5950
|
+
"protocol.ext.allow=never",
|
|
5951
|
+
"core.protectHFS=true",
|
|
5952
|
+
"core.protectNTFS=true"
|
|
5953
|
+
]);
|
|
5954
|
+
|
|
5955
|
+
// src/config/index.ts
|
|
5956
|
+
init_types();
|
|
5957
|
+
|
|
5958
|
+
// src/db/repositories/index.ts
|
|
5522
5959
|
init_cjs_shims();
|
|
5523
|
-
|
|
5960
|
+
|
|
5961
|
+
// src/db/repositories/app-variables.ts
|
|
5962
|
+
init_cjs_shims();
|
|
5963
|
+
var import_drizzle_orm7 = require("drizzle-orm");
|
|
5524
5964
|
init_ids();
|
|
5525
5965
|
init_database_wrapper();
|
|
5526
5966
|
init_schema();
|
|
5527
5967
|
|
|
5528
|
-
// src/db/repositories/
|
|
5968
|
+
// src/db/repositories/artifact-trust.ts
|
|
5529
5969
|
init_cjs_shims();
|
|
5530
|
-
var
|
|
5970
|
+
var import_drizzle_orm8 = require("drizzle-orm");
|
|
5531
5971
|
init_ids();
|
|
5972
|
+
init_database_wrapper();
|
|
5973
|
+
init_schema();
|
|
5532
5974
|
|
|
5533
|
-
// src/
|
|
5975
|
+
// src/db/repositories/artifacts.ts
|
|
5534
5976
|
init_cjs_shims();
|
|
5535
|
-
|
|
5536
|
-
|
|
5977
|
+
var import_drizzle_orm10 = require("drizzle-orm");
|
|
5978
|
+
init_config_manager();
|
|
5979
|
+
init_ids();
|
|
5537
5980
|
init_database_wrapper();
|
|
5538
5981
|
init_schema();
|
|
5539
5982
|
|
|
5540
5983
|
// src/db/repositories/branch-access.ts
|
|
5541
5984
|
init_cjs_shims();
|
|
5542
5985
|
init_types2();
|
|
5543
|
-
var
|
|
5986
|
+
var import_drizzle_orm9 = require("drizzle-orm");
|
|
5544
5987
|
init_database_wrapper();
|
|
5545
5988
|
init_schema();
|
|
5546
5989
|
var VISIBLE_BRANCH_PERMISSION_LEVELS = BRANCH_PERMISSION_LEVELS.filter(
|
|
5547
5990
|
(level) => level !== "none"
|
|
5548
5991
|
);
|
|
5549
5992
|
function activeGroupGrantAccessExists(db, userId) {
|
|
5550
|
-
return (0,
|
|
5993
|
+
return (0, import_drizzle_orm9.exists)(
|
|
5551
5994
|
// biome-ignore lint/suspicious/noExplicitAny: Drizzle select has complex cross-dialect overloads
|
|
5552
|
-
db.select({ _:
|
|
5995
|
+
db.select({ _: import_drizzle_orm9.sql`1` }).from(branchGroupGrants3).innerJoin(
|
|
5553
5996
|
groupMemberships3,
|
|
5554
|
-
(0,
|
|
5555
|
-
(0,
|
|
5556
|
-
(0,
|
|
5997
|
+
(0, import_drizzle_orm9.and)(
|
|
5998
|
+
(0, import_drizzle_orm9.eq)(groupMemberships3.group_id, branchGroupGrants3.group_id),
|
|
5999
|
+
(0, import_drizzle_orm9.eq)(groupMemberships3.user_id, userId)
|
|
5557
6000
|
)
|
|
5558
6001
|
).innerJoin(
|
|
5559
6002
|
groups3,
|
|
5560
|
-
(0,
|
|
6003
|
+
(0, import_drizzle_orm9.and)((0, import_drizzle_orm9.eq)(groups3.group_id, branchGroupGrants3.group_id), (0, import_drizzle_orm9.eq)(groups3.archived, false))
|
|
5561
6004
|
).where(
|
|
5562
|
-
(0,
|
|
5563
|
-
(0,
|
|
5564
|
-
(0,
|
|
6005
|
+
(0, import_drizzle_orm9.and)(
|
|
6006
|
+
(0, import_drizzle_orm9.eq)(branchGroupGrants3.branch_id, branches3.branch_id),
|
|
6007
|
+
(0, import_drizzle_orm9.inArray)(branchGroupGrants3.can, VISIBLE_BRANCH_PERMISSION_LEVELS)
|
|
5565
6008
|
)
|
|
5566
6009
|
)
|
|
5567
6010
|
);
|
|
5568
6011
|
}
|
|
5569
6012
|
function activeBoardGroupGrantAccessExists(db, userId) {
|
|
5570
|
-
return (0,
|
|
6013
|
+
return (0, import_drizzle_orm9.exists)(
|
|
5571
6014
|
// biome-ignore lint/suspicious/noExplicitAny: Drizzle select has complex cross-dialect overloads
|
|
5572
|
-
db.select({ _:
|
|
6015
|
+
db.select({ _: import_drizzle_orm9.sql`1` }).from(boardGroupGrants3).innerJoin(
|
|
5573
6016
|
groupMemberships3,
|
|
5574
|
-
(0,
|
|
5575
|
-
(0,
|
|
5576
|
-
(0,
|
|
6017
|
+
(0, import_drizzle_orm9.and)(
|
|
6018
|
+
(0, import_drizzle_orm9.eq)(groupMemberships3.group_id, boardGroupGrants3.group_id),
|
|
6019
|
+
(0, import_drizzle_orm9.eq)(groupMemberships3.user_id, userId)
|
|
5577
6020
|
)
|
|
5578
6021
|
).innerJoin(
|
|
5579
6022
|
groups3,
|
|
5580
|
-
(0,
|
|
6023
|
+
(0, import_drizzle_orm9.and)((0, import_drizzle_orm9.eq)(groups3.group_id, boardGroupGrants3.group_id), (0, import_drizzle_orm9.eq)(groups3.archived, false))
|
|
5581
6024
|
).innerJoin(
|
|
5582
6025
|
boards3,
|
|
5583
|
-
(0,
|
|
5584
|
-
(0,
|
|
5585
|
-
(0,
|
|
6026
|
+
(0, import_drizzle_orm9.and)(
|
|
6027
|
+
(0, import_drizzle_orm9.eq)(boards3.board_id, boardGroupGrants3.board_id),
|
|
6028
|
+
(0, import_drizzle_orm9.eq)(import_drizzle_orm9.sql`coalesce(${jsonExtract(db, boards3.data, "access_mode")}, 'shared')`, "shared")
|
|
5586
6029
|
)
|
|
5587
6030
|
).where(
|
|
5588
|
-
(0,
|
|
5589
|
-
(0,
|
|
5590
|
-
(0,
|
|
6031
|
+
(0, import_drizzle_orm9.and)(
|
|
6032
|
+
(0, import_drizzle_orm9.eq)(boardGroupGrants3.board_id, branches3.board_id),
|
|
6033
|
+
(0, import_drizzle_orm9.inArray)(boardGroupGrants3.can, VISIBLE_BRANCH_PERMISSION_LEVELS)
|
|
5591
6034
|
)
|
|
5592
6035
|
)
|
|
5593
6036
|
);
|
|
5594
6037
|
}
|
|
5595
6038
|
function activeBoardOwnerAccessExists(db, userId) {
|
|
5596
|
-
return (0,
|
|
6039
|
+
return (0, import_drizzle_orm9.exists)(
|
|
5597
6040
|
// biome-ignore lint/suspicious/noExplicitAny: Drizzle select has complex cross-dialect overloads
|
|
5598
|
-
db.select({ _:
|
|
6041
|
+
db.select({ _: import_drizzle_orm9.sql`1` }).from(boardOwners3).where((0, import_drizzle_orm9.and)((0, import_drizzle_orm9.eq)(boardOwners3.board_id, branches3.board_id), (0, import_drizzle_orm9.eq)(boardOwners3.user_id, userId)))
|
|
5599
6042
|
);
|
|
5600
6043
|
}
|
|
5601
6044
|
function alignedBoardDefaultVisible(db) {
|
|
5602
|
-
return (0,
|
|
6045
|
+
return (0, import_drizzle_orm9.exists)(
|
|
5603
6046
|
// biome-ignore lint/suspicious/noExplicitAny: Drizzle select has complex cross-dialect overloads
|
|
5604
|
-
db.select({ _:
|
|
5605
|
-
(0,
|
|
5606
|
-
(0,
|
|
5607
|
-
(0,
|
|
5608
|
-
(0,
|
|
5609
|
-
|
|
6047
|
+
db.select({ _: import_drizzle_orm9.sql`1` }).from(boards3).where(
|
|
6048
|
+
(0, import_drizzle_orm9.and)(
|
|
6049
|
+
(0, import_drizzle_orm9.eq)(boards3.board_id, branches3.board_id),
|
|
6050
|
+
(0, import_drizzle_orm9.eq)(import_drizzle_orm9.sql`coalesce(${jsonExtract(db, boards3.data, "access_mode")}, 'shared')`, "shared"),
|
|
6051
|
+
(0, import_drizzle_orm9.inArray)(
|
|
6052
|
+
import_drizzle_orm9.sql`coalesce(${jsonExtract(db, boards3.data, "default_others_can")}, 'session')`,
|
|
5610
6053
|
VISIBLE_BRANCH_PERMISSION_LEVELS
|
|
5611
6054
|
)
|
|
5612
6055
|
)
|
|
@@ -5614,33 +6057,81 @@ function alignedBoardDefaultVisible(db) {
|
|
|
5614
6057
|
);
|
|
5615
6058
|
}
|
|
5616
6059
|
function visibleBranchAccessCondition(db, userId) {
|
|
5617
|
-
return (0,
|
|
5618
|
-
(0,
|
|
6060
|
+
return (0, import_drizzle_orm9.or)(
|
|
6061
|
+
(0, import_drizzle_orm9.isNotNull)(branchOwners3.user_id),
|
|
5619
6062
|
activeGroupGrantAccessExists(db, userId),
|
|
5620
|
-
(0,
|
|
5621
|
-
(0,
|
|
5622
|
-
(0,
|
|
5623
|
-
(0,
|
|
5624
|
-
(0,
|
|
5625
|
-
(0,
|
|
6063
|
+
(0, import_drizzle_orm9.and)((0, import_drizzle_orm9.eq)(branches3.permission_source, "board"), activeBoardOwnerAccessExists(db, userId)),
|
|
6064
|
+
(0, import_drizzle_orm9.and)((0, import_drizzle_orm9.eq)(branches3.permission_source, "board"), activeBoardGroupGrantAccessExists(db, userId)),
|
|
6065
|
+
(0, import_drizzle_orm9.and)((0, import_drizzle_orm9.eq)(branches3.permission_source, "board"), alignedBoardDefaultVisible(db)),
|
|
6066
|
+
(0, import_drizzle_orm9.and)(
|
|
6067
|
+
(0, import_drizzle_orm9.eq)(branches3.permission_source, "override"),
|
|
6068
|
+
(0, import_drizzle_orm9.inArray)(branches3.others_can, VISIBLE_BRANCH_PERMISSION_LEVELS)
|
|
5626
6069
|
)
|
|
5627
|
-
) ??
|
|
6070
|
+
) ?? import_drizzle_orm9.sql`false`;
|
|
5628
6071
|
}
|
|
5629
6072
|
|
|
6073
|
+
// src/db/repositories/board-comments.ts
|
|
6074
|
+
init_cjs_shims();
|
|
6075
|
+
var import_drizzle_orm11 = require("drizzle-orm");
|
|
6076
|
+
init_ids();
|
|
6077
|
+
init_database_wrapper();
|
|
6078
|
+
init_schema();
|
|
6079
|
+
|
|
6080
|
+
// src/db/repositories/board-objects.ts
|
|
6081
|
+
init_cjs_shims();
|
|
6082
|
+
var import_drizzle_orm12 = require("drizzle-orm");
|
|
6083
|
+
init_ids();
|
|
6084
|
+
|
|
6085
|
+
// src/utils/board-placement.ts
|
|
6086
|
+
init_cjs_shims();
|
|
6087
|
+
|
|
6088
|
+
// src/db/repositories/board-objects.ts
|
|
6089
|
+
init_database_wrapper();
|
|
6090
|
+
init_schema();
|
|
6091
|
+
|
|
5630
6092
|
// src/db/repositories/boards.ts
|
|
5631
6093
|
init_cjs_shims();
|
|
5632
6094
|
init_types2();
|
|
5633
|
-
var
|
|
6095
|
+
var import_drizzle_orm15 = require("drizzle-orm");
|
|
5634
6096
|
var yaml3 = __toESM(require("js-yaml"), 1);
|
|
5635
6097
|
init_config_manager();
|
|
5636
6098
|
init_ids();
|
|
6099
|
+
|
|
6100
|
+
// src/lib/slugs.ts
|
|
6101
|
+
init_cjs_shims();
|
|
6102
|
+
|
|
6103
|
+
// src/utils/emoji-shortcodes.ts
|
|
6104
|
+
init_cjs_shims();
|
|
6105
|
+
var import_node_module = require("module");
|
|
6106
|
+
var requireJson = (0, import_node_module.createRequire)(importMetaUrl);
|
|
6107
|
+
var emojiData = requireJson("emojibase-data/en/compact.json");
|
|
6108
|
+
var shortcodes = requireJson(
|
|
6109
|
+
"emojibase-data/en/shortcodes/emojibase.json"
|
|
6110
|
+
);
|
|
6111
|
+
var emojiByHexcode = /* @__PURE__ */ new Map();
|
|
6112
|
+
for (const emoji of emojiData) {
|
|
6113
|
+
if (emoji.unicode) {
|
|
6114
|
+
emojiByHexcode.set(emoji.hexcode, emoji.unicode);
|
|
6115
|
+
}
|
|
6116
|
+
}
|
|
6117
|
+
var emojiByShortcode = /* @__PURE__ */ new Map();
|
|
6118
|
+
for (const [hexcode, codes] of Object.entries(shortcodes)) {
|
|
6119
|
+
const emoji = emojiByHexcode.get(hexcode);
|
|
6120
|
+
if (!emoji) continue;
|
|
6121
|
+
const codeList = Array.isArray(codes) ? codes : [codes];
|
|
6122
|
+
for (const code of codeList) {
|
|
6123
|
+
emojiByShortcode.set(code.toLowerCase(), emoji);
|
|
6124
|
+
}
|
|
6125
|
+
}
|
|
6126
|
+
|
|
6127
|
+
// src/db/repositories/boards.ts
|
|
5637
6128
|
init_database_wrapper();
|
|
5638
6129
|
init_schema();
|
|
5639
6130
|
|
|
5640
6131
|
// src/db/repositories/branches.ts
|
|
5641
6132
|
init_cjs_shims();
|
|
5642
6133
|
init_types2();
|
|
5643
|
-
var
|
|
6134
|
+
var import_drizzle_orm14 = require("drizzle-orm");
|
|
5644
6135
|
init_config_manager();
|
|
5645
6136
|
init_ids();
|
|
5646
6137
|
init_database_wrapper();
|
|
@@ -5648,7 +6139,7 @@ init_schema();
|
|
|
5648
6139
|
|
|
5649
6140
|
// src/db/repositories/groups.ts
|
|
5650
6141
|
init_cjs_shims();
|
|
5651
|
-
var
|
|
6142
|
+
var import_drizzle_orm13 = require("drizzle-orm");
|
|
5652
6143
|
init_ids();
|
|
5653
6144
|
init_database_wrapper();
|
|
5654
6145
|
init_schema();
|
|
@@ -5712,17 +6203,17 @@ var GroupRepository = class {
|
|
|
5712
6203
|
}
|
|
5713
6204
|
async findAll(filter) {
|
|
5714
6205
|
const conditions = [];
|
|
5715
|
-
if (filter?.archived !== void 0) conditions.push((0,
|
|
6206
|
+
if (filter?.archived !== void 0) conditions.push((0, import_drizzle_orm13.eq)(groups3.archived, filter.archived));
|
|
5716
6207
|
const query = select(this.db).from(groups3);
|
|
5717
|
-
const rows = conditions.length > 0 ? await query.where((0,
|
|
6208
|
+
const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm13.and)(...conditions)).all() : await query.all();
|
|
5718
6209
|
return rows.map((row) => this.rowToGroup(row));
|
|
5719
6210
|
}
|
|
5720
6211
|
async findById(id) {
|
|
5721
|
-
const row = await select(this.db).from(groups3).where((0,
|
|
6212
|
+
const row = await select(this.db).from(groups3).where((0, import_drizzle_orm13.eq)(groups3.group_id, id)).one();
|
|
5722
6213
|
return row ? this.rowToGroup(row) : null;
|
|
5723
6214
|
}
|
|
5724
6215
|
async findBySlug(slug) {
|
|
5725
|
-
const row = await select(this.db).from(groups3).where((0,
|
|
6216
|
+
const row = await select(this.db).from(groups3).where((0, import_drizzle_orm13.eq)(groups3.slug, slug)).one();
|
|
5726
6217
|
return row ? this.rowToGroup(row) : null;
|
|
5727
6218
|
}
|
|
5728
6219
|
async create(data) {
|
|
@@ -5756,7 +6247,7 @@ var GroupRepository = class {
|
|
|
5756
6247
|
if (updates.slug !== void 0) patch.slug = normalizeSlug(updates.slug);
|
|
5757
6248
|
if (updates.description !== void 0) patch.description = updates.description;
|
|
5758
6249
|
if (updates.archived !== void 0) patch.archived = updates.archived;
|
|
5759
|
-
await update(this.db, groups3).set(patch).where((0,
|
|
6250
|
+
await update(this.db, groups3).set(patch).where((0, import_drizzle_orm13.eq)(groups3.group_id, existing.group_id)).run();
|
|
5760
6251
|
const updatedGroup = await this.findById(existing.group_id);
|
|
5761
6252
|
if (!updatedGroup) throw new RepositoryError("Failed to retrieve updated group");
|
|
5762
6253
|
return updatedGroup;
|
|
@@ -5764,19 +6255,19 @@ var GroupRepository = class {
|
|
|
5764
6255
|
async delete(id) {
|
|
5765
6256
|
const existing = await this.findById(id);
|
|
5766
6257
|
if (!existing) throw new EntityNotFoundError("Group", id);
|
|
5767
|
-
await deleteFrom(this.db, groups3).where((0,
|
|
6258
|
+
await deleteFrom(this.db, groups3).where((0, import_drizzle_orm13.eq)(groups3.group_id, existing.group_id)).run();
|
|
5768
6259
|
return existing;
|
|
5769
6260
|
}
|
|
5770
6261
|
async listMemberships(filter) {
|
|
5771
6262
|
const conditions = [];
|
|
5772
|
-
if (filter?.group_id) conditions.push((0,
|
|
5773
|
-
if (filter?.user_id) conditions.push((0,
|
|
6263
|
+
if (filter?.group_id) conditions.push((0, import_drizzle_orm13.eq)(groupMemberships3.group_id, filter.group_id));
|
|
6264
|
+
if (filter?.user_id) conditions.push((0, import_drizzle_orm13.eq)(groupMemberships3.user_id, filter.user_id));
|
|
5774
6265
|
const query = select(this.db).from(groupMemberships3);
|
|
5775
|
-
const rows = conditions.length > 0 ? await query.where((0,
|
|
6266
|
+
const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm13.and)(...conditions)).all() : await query.all();
|
|
5776
6267
|
return rows.map((row) => this.rowToMembership(row));
|
|
5777
6268
|
}
|
|
5778
6269
|
async addMember(groupId, userId, addedBy) {
|
|
5779
|
-
const existing = await select(this.db).from(groupMemberships3).where((0,
|
|
6270
|
+
const existing = await select(this.db).from(groupMemberships3).where((0, import_drizzle_orm13.and)((0, import_drizzle_orm13.eq)(groupMemberships3.group_id, groupId), (0, import_drizzle_orm13.eq)(groupMemberships3.user_id, userId))).one();
|
|
5780
6271
|
if (existing) return this.rowToMembership(existing);
|
|
5781
6272
|
const row = {
|
|
5782
6273
|
group_id: groupId,
|
|
@@ -5788,17 +6279,17 @@ var GroupRepository = class {
|
|
|
5788
6279
|
return this.rowToMembership(row);
|
|
5789
6280
|
}
|
|
5790
6281
|
async removeMember(groupId, userId) {
|
|
5791
|
-
const existing = await select(this.db).from(groupMemberships3).where((0,
|
|
6282
|
+
const existing = await select(this.db).from(groupMemberships3).where((0, import_drizzle_orm13.and)((0, import_drizzle_orm13.eq)(groupMemberships3.group_id, groupId), (0, import_drizzle_orm13.eq)(groupMemberships3.user_id, userId))).one();
|
|
5792
6283
|
if (!existing) return null;
|
|
5793
|
-
await deleteFrom(this.db, groupMemberships3).where((0,
|
|
6284
|
+
await deleteFrom(this.db, groupMemberships3).where((0, import_drizzle_orm13.and)((0, import_drizzle_orm13.eq)(groupMemberships3.group_id, groupId), (0, import_drizzle_orm13.eq)(groupMemberships3.user_id, userId))).run();
|
|
5794
6285
|
return this.rowToMembership(existing);
|
|
5795
6286
|
}
|
|
5796
6287
|
async getGroupIdsForUser(userId) {
|
|
5797
|
-
const rows = await select(this.db, { group_id: groupMemberships3.group_id }).from(groupMemberships3).where((0,
|
|
6288
|
+
const rows = await select(this.db, { group_id: groupMemberships3.group_id }).from(groupMemberships3).where((0, import_drizzle_orm13.eq)(groupMemberships3.user_id, userId)).all();
|
|
5798
6289
|
return rows.map((r) => r.group_id);
|
|
5799
6290
|
}
|
|
5800
6291
|
async listBranchGrants(branchId) {
|
|
5801
|
-
const rows = await select(this.db).from(branchGroupGrants3).leftJoin(groups3, (0,
|
|
6292
|
+
const rows = await select(this.db).from(branchGroupGrants3).leftJoin(groups3, (0, import_drizzle_orm13.eq)(branchGroupGrants3.group_id, groups3.group_id)).where((0, import_drizzle_orm13.eq)(branchGroupGrants3.branch_id, branchId)).all();
|
|
5802
6293
|
return rows.map(
|
|
5803
6294
|
(r) => this.rowToGrant(r.branch_group_grants, r.groups ? this.rowToGroup(r.groups) : void 0)
|
|
5804
6295
|
);
|
|
@@ -5806,16 +6297,16 @@ var GroupRepository = class {
|
|
|
5806
6297
|
async upsertBranchGrant(data) {
|
|
5807
6298
|
const now = /* @__PURE__ */ new Date();
|
|
5808
6299
|
const existing = await select(this.db).from(branchGroupGrants3).where(
|
|
5809
|
-
(0,
|
|
5810
|
-
(0,
|
|
5811
|
-
(0,
|
|
6300
|
+
(0, import_drizzle_orm13.and)(
|
|
6301
|
+
(0, import_drizzle_orm13.eq)(branchGroupGrants3.branch_id, data.branch_id),
|
|
6302
|
+
(0, import_drizzle_orm13.eq)(branchGroupGrants3.group_id, data.group_id)
|
|
5812
6303
|
)
|
|
5813
6304
|
).one();
|
|
5814
6305
|
if (existing) {
|
|
5815
6306
|
await update(this.db, branchGroupGrants3).set({ can: data.can, fs_access: data.fs_access ?? null, updated_at: now }).where(
|
|
5816
|
-
(0,
|
|
5817
|
-
(0,
|
|
5818
|
-
(0,
|
|
6307
|
+
(0, import_drizzle_orm13.and)(
|
|
6308
|
+
(0, import_drizzle_orm13.eq)(branchGroupGrants3.branch_id, data.branch_id),
|
|
6309
|
+
(0, import_drizzle_orm13.eq)(branchGroupGrants3.group_id, data.group_id)
|
|
5819
6310
|
)
|
|
5820
6311
|
).run();
|
|
5821
6312
|
} else {
|
|
@@ -5838,16 +6329,16 @@ var GroupRepository = class {
|
|
|
5838
6329
|
const existing = (await this.listBranchGrants(branchId)).find((g) => g.group_id === groupId) ?? null;
|
|
5839
6330
|
if (!existing) return null;
|
|
5840
6331
|
await deleteFrom(this.db, branchGroupGrants3).where(
|
|
5841
|
-
(0,
|
|
6332
|
+
(0, import_drizzle_orm13.and)((0, import_drizzle_orm13.eq)(branchGroupGrants3.branch_id, branchId), (0, import_drizzle_orm13.eq)(branchGroupGrants3.group_id, groupId))
|
|
5842
6333
|
).run();
|
|
5843
6334
|
return existing;
|
|
5844
6335
|
}
|
|
5845
6336
|
async getBranchGrantsForUser(branchId, userId) {
|
|
5846
|
-
const rows = await select(this.db).from(branchGroupGrants3).innerJoin(groupMemberships3, (0,
|
|
5847
|
-
(0,
|
|
5848
|
-
(0,
|
|
5849
|
-
(0,
|
|
5850
|
-
(0,
|
|
6337
|
+
const rows = await select(this.db).from(branchGroupGrants3).innerJoin(groupMemberships3, (0, import_drizzle_orm13.eq)(branchGroupGrants3.group_id, groupMemberships3.group_id)).innerJoin(groups3, (0, import_drizzle_orm13.eq)(groupMemberships3.group_id, groups3.group_id)).where(
|
|
6338
|
+
(0, import_drizzle_orm13.and)(
|
|
6339
|
+
(0, import_drizzle_orm13.eq)(branchGroupGrants3.branch_id, branchId),
|
|
6340
|
+
(0, import_drizzle_orm13.eq)(groupMemberships3.user_id, userId),
|
|
6341
|
+
(0, import_drizzle_orm13.eq)(groups3.archived, false)
|
|
5851
6342
|
)
|
|
5852
6343
|
).all();
|
|
5853
6344
|
return rows.map(
|
|
@@ -5855,7 +6346,7 @@ var GroupRepository = class {
|
|
|
5855
6346
|
);
|
|
5856
6347
|
}
|
|
5857
6348
|
async listBoardGrants(boardId) {
|
|
5858
|
-
const rows = await select(this.db).from(boardGroupGrants3).leftJoin(groups3, (0,
|
|
6349
|
+
const rows = await select(this.db).from(boardGroupGrants3).leftJoin(groups3, (0, import_drizzle_orm13.eq)(boardGroupGrants3.group_id, groups3.group_id)).where((0, import_drizzle_orm13.eq)(boardGroupGrants3.board_id, boardId)).all();
|
|
5859
6350
|
return rows.map(
|
|
5860
6351
|
(r) => this.rowToBoardGrant(r.board_group_grants, r.groups ? this.rowToGroup(r.groups) : void 0)
|
|
5861
6352
|
);
|
|
@@ -5863,16 +6354,16 @@ var GroupRepository = class {
|
|
|
5863
6354
|
async upsertBoardGrant(data) {
|
|
5864
6355
|
const now = /* @__PURE__ */ new Date();
|
|
5865
6356
|
const existing = await select(this.db).from(boardGroupGrants3).where(
|
|
5866
|
-
(0,
|
|
5867
|
-
(0,
|
|
5868
|
-
(0,
|
|
6357
|
+
(0, import_drizzle_orm13.and)(
|
|
6358
|
+
(0, import_drizzle_orm13.eq)(boardGroupGrants3.board_id, data.board_id),
|
|
6359
|
+
(0, import_drizzle_orm13.eq)(boardGroupGrants3.group_id, data.group_id)
|
|
5869
6360
|
)
|
|
5870
6361
|
).one();
|
|
5871
6362
|
if (existing) {
|
|
5872
6363
|
await update(this.db, boardGroupGrants3).set({ can: data.can, fs_access: data.fs_access ?? null, updated_at: now }).where(
|
|
5873
|
-
(0,
|
|
5874
|
-
(0,
|
|
5875
|
-
(0,
|
|
6364
|
+
(0, import_drizzle_orm13.and)(
|
|
6365
|
+
(0, import_drizzle_orm13.eq)(boardGroupGrants3.board_id, data.board_id),
|
|
6366
|
+
(0, import_drizzle_orm13.eq)(boardGroupGrants3.group_id, data.group_id)
|
|
5876
6367
|
)
|
|
5877
6368
|
).run();
|
|
5878
6369
|
} else {
|
|
@@ -5894,15 +6385,15 @@ var GroupRepository = class {
|
|
|
5894
6385
|
async removeBoardGrant(boardId, groupId) {
|
|
5895
6386
|
const existing = (await this.listBoardGrants(boardId)).find((g) => g.group_id === groupId) ?? null;
|
|
5896
6387
|
if (!existing) return null;
|
|
5897
|
-
await deleteFrom(this.db, boardGroupGrants3).where((0,
|
|
6388
|
+
await deleteFrom(this.db, boardGroupGrants3).where((0, import_drizzle_orm13.and)((0, import_drizzle_orm13.eq)(boardGroupGrants3.board_id, boardId), (0, import_drizzle_orm13.eq)(boardGroupGrants3.group_id, groupId))).run();
|
|
5898
6389
|
return existing;
|
|
5899
6390
|
}
|
|
5900
6391
|
async getBoardGrantsForUser(boardId, userId) {
|
|
5901
|
-
const rows = await select(this.db).from(boardGroupGrants3).innerJoin(groupMemberships3, (0,
|
|
5902
|
-
(0,
|
|
5903
|
-
(0,
|
|
5904
|
-
(0,
|
|
5905
|
-
(0,
|
|
6392
|
+
const rows = await select(this.db).from(boardGroupGrants3).innerJoin(groupMemberships3, (0, import_drizzle_orm13.eq)(boardGroupGrants3.group_id, groupMemberships3.group_id)).innerJoin(groups3, (0, import_drizzle_orm13.eq)(groupMemberships3.group_id, groups3.group_id)).where(
|
|
6393
|
+
(0, import_drizzle_orm13.and)(
|
|
6394
|
+
(0, import_drizzle_orm13.eq)(boardGroupGrants3.board_id, boardId),
|
|
6395
|
+
(0, import_drizzle_orm13.eq)(groupMemberships3.user_id, userId),
|
|
6396
|
+
(0, import_drizzle_orm13.eq)(groups3.archived, false)
|
|
5906
6397
|
)
|
|
5907
6398
|
).all();
|
|
5908
6399
|
return rows.map(
|
|
@@ -5979,44 +6470,47 @@ var BranchRepository = class {
|
|
|
5979
6470
|
rowToBranch(row, baseUrl) {
|
|
5980
6471
|
const branchId = row.branch_id;
|
|
5981
6472
|
const url = baseUrl && row.board_id ? getBranchUrl(branchId, baseUrl) : null;
|
|
5982
|
-
return
|
|
5983
|
-
|
|
5984
|
-
|
|
5985
|
-
|
|
5986
|
-
|
|
5987
|
-
|
|
5988
|
-
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
|
|
5993
|
-
|
|
5994
|
-
|
|
5995
|
-
|
|
5996
|
-
|
|
5997
|
-
|
|
5998
|
-
|
|
5999
|
-
|
|
6000
|
-
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
|
|
6006
|
-
|
|
6007
|
-
|
|
6008
|
-
|
|
6009
|
-
|
|
6010
|
-
|
|
6011
|
-
|
|
6012
|
-
|
|
6013
|
-
|
|
6014
|
-
|
|
6015
|
-
|
|
6016
|
-
|
|
6017
|
-
|
|
6018
|
-
|
|
6019
|
-
|
|
6473
|
+
return attachHiddenTenant(
|
|
6474
|
+
{
|
|
6475
|
+
branch_id: branchId,
|
|
6476
|
+
repo_id: row.repo_id,
|
|
6477
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
6478
|
+
updated_at: row.updated_at ? new Date(row.updated_at).toISOString() : new Date(row.created_at).toISOString(),
|
|
6479
|
+
created_by: row.created_by,
|
|
6480
|
+
name: row.name,
|
|
6481
|
+
ref: row.ref,
|
|
6482
|
+
ref_type: row.ref_type ?? "branch",
|
|
6483
|
+
branch_unique_id: row.branch_unique_id,
|
|
6484
|
+
start_command: row.start_command ?? void 0,
|
|
6485
|
+
// Static environment fields
|
|
6486
|
+
stop_command: row.stop_command ?? void 0,
|
|
6487
|
+
nuke_command: row.nuke_command ?? void 0,
|
|
6488
|
+
health_check_url: row.health_check_url ?? void 0,
|
|
6489
|
+
app_url: row.app_url ?? void 0,
|
|
6490
|
+
logs_command: row.logs_command ?? void 0,
|
|
6491
|
+
environment_variant: row.environment_variant ?? void 0,
|
|
6492
|
+
board_id: row.board_id ?? void 0,
|
|
6493
|
+
// Top-level column
|
|
6494
|
+
needs_attention: Boolean(row.needs_attention),
|
|
6495
|
+
// Convert SQLite integer (0/1) to boolean
|
|
6496
|
+
archived: Boolean(row.archived),
|
|
6497
|
+
// Convert SQLite integer (0/1) to boolean
|
|
6498
|
+
archived_at: row.archived_at ? new Date(row.archived_at).toISOString() : void 0,
|
|
6499
|
+
archived_by: row.archived_by ?? void 0,
|
|
6500
|
+
filesystem_status: row.filesystem_status ?? void 0,
|
|
6501
|
+
// RBAC fields
|
|
6502
|
+
permission_source: row.permission_source ?? "override",
|
|
6503
|
+
others_can: row.others_can ?? void 0,
|
|
6504
|
+
others_fs_access: row.others_fs_access ?? void 0,
|
|
6505
|
+
unix_group: row.unix_group ?? void 0,
|
|
6506
|
+
// Branch storage mode
|
|
6507
|
+
storage_mode: row.storage_mode ?? "worktree",
|
|
6508
|
+
clone_depth: row.clone_depth ?? void 0,
|
|
6509
|
+
...row.data,
|
|
6510
|
+
url
|
|
6511
|
+
},
|
|
6512
|
+
row
|
|
6513
|
+
);
|
|
6020
6514
|
}
|
|
6021
6515
|
/**
|
|
6022
6516
|
* Convert Branch to database insert format
|
|
@@ -6123,10 +6617,10 @@ var BranchRepository = class {
|
|
|
6123
6617
|
async findById(id) {
|
|
6124
6618
|
try {
|
|
6125
6619
|
const fullId = await resolveByShortIdPrefix(id, "Branch", async (pattern) => {
|
|
6126
|
-
const rows = await select(this.db).from(branches3).where((0,
|
|
6620
|
+
const rows = await select(this.db).from(branches3).where((0, import_drizzle_orm14.like)(branches3.branch_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
6127
6621
|
return rows.map((r) => r.branch_id);
|
|
6128
6622
|
});
|
|
6129
|
-
const row = await select(this.db).from(branches3).where((0,
|
|
6623
|
+
const row = await select(this.db).from(branches3).where((0, import_drizzle_orm14.eq)(branches3.branch_id, fullId)).one();
|
|
6130
6624
|
if (!row) return null;
|
|
6131
6625
|
const baseUrl = await getBaseUrl();
|
|
6132
6626
|
return this.rowToBranch(row, baseUrl);
|
|
@@ -6141,7 +6635,7 @@ var BranchRepository = class {
|
|
|
6141
6635
|
async findRealtimeVisibilityBranch(id) {
|
|
6142
6636
|
try {
|
|
6143
6637
|
const fullId = await resolveByShortIdPrefix(id, "Branch", async (pattern) => {
|
|
6144
|
-
const rows = await select(this.db, { branch_id: branches3.branch_id }).from(branches3).where((0,
|
|
6638
|
+
const rows = await select(this.db, { branch_id: branches3.branch_id }).from(branches3).where((0, import_drizzle_orm14.like)(branches3.branch_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
6145
6639
|
return rows.map((r) => r.branch_id);
|
|
6146
6640
|
});
|
|
6147
6641
|
const row = await select(this.db, {
|
|
@@ -6149,11 +6643,11 @@ var BranchRepository = class {
|
|
|
6149
6643
|
others_can: branches3.others_can,
|
|
6150
6644
|
board_id: branches3.board_id,
|
|
6151
6645
|
permission_source: branches3.permission_source
|
|
6152
|
-
}).from(branches3).where((0,
|
|
6646
|
+
}).from(branches3).where((0, import_drizzle_orm14.eq)(branches3.branch_id, fullId)).one();
|
|
6153
6647
|
if (!row) return null;
|
|
6154
6648
|
let othersCan = row.others_can;
|
|
6155
6649
|
if (row.permission_source === "board" && row.board_id) {
|
|
6156
|
-
const board = await select(this.db, { data: boards3.data }).from(boards3).where((0,
|
|
6650
|
+
const board = await select(this.db, { data: boards3.data }).from(boards3).where((0, import_drizzle_orm14.eq)(boards3.board_id, row.board_id)).one();
|
|
6157
6651
|
const boardData = board?.data;
|
|
6158
6652
|
othersCan = (boardData?.access_mode ?? "shared") === "private" ? "none" : boardData?.default_others_can ?? row.others_can;
|
|
6159
6653
|
}
|
|
@@ -6173,21 +6667,109 @@ var BranchRepository = class {
|
|
|
6173
6667
|
* Callers that explicitly want to exclude archived branches should pass
|
|
6174
6668
|
* `{ includeArchived: false }`.
|
|
6175
6669
|
*
|
|
6176
|
-
*
|
|
6670
|
+
* The `board_id`, `archived`, and `branchIds` filters let the list read path
|
|
6671
|
+
* (`BranchesService.find`) push its high-selectivity predicates into SQL so it
|
|
6672
|
+
* no longer materializes the whole table before filtering in memory.
|
|
6673
|
+
*
|
|
6674
|
+
* @param filter - Optional filters
|
|
6177
6675
|
* @param filter.repo_id - Filter by repository ID
|
|
6178
6676
|
* @param filter.includeArchived - Include archived branches (default: true)
|
|
6677
|
+
* @param filter.board_id - Filter to a single board
|
|
6678
|
+
* @param filter.archived - Filter to an exact archived state (takes precedence
|
|
6679
|
+
* over `includeArchived`)
|
|
6680
|
+
* @param filter.branchIds - Restrict to a set of branch IDs (empty set yields
|
|
6681
|
+
* no rows, matching an `{ $in: [] }` filter)
|
|
6682
|
+
* @param filter.visibleToUserId - Restrict to branches visible to this user
|
|
6683
|
+
* under branch RBAC, pushed down as a SQL predicate instead of a preloaded
|
|
6684
|
+
* `branch_id IN (...)` list.
|
|
6179
6685
|
*/
|
|
6180
6686
|
async findAll(filter) {
|
|
6687
|
+
if (filter?.branchIds !== void 0 && filter.branchIds.length === 0) {
|
|
6688
|
+
return [];
|
|
6689
|
+
}
|
|
6181
6690
|
const includeArchived = filter?.includeArchived ?? true;
|
|
6182
6691
|
const conditions = [];
|
|
6183
6692
|
if (filter?.repo_id) {
|
|
6184
|
-
conditions.push((0,
|
|
6693
|
+
conditions.push((0, import_drizzle_orm14.eq)(branches3.repo_id, filter.repo_id));
|
|
6694
|
+
}
|
|
6695
|
+
if (filter?.board_id) {
|
|
6696
|
+
conditions.push((0, import_drizzle_orm14.eq)(branches3.board_id, filter.board_id));
|
|
6185
6697
|
}
|
|
6186
|
-
if (
|
|
6187
|
-
conditions.push((0,
|
|
6698
|
+
if (filter?.archived !== void 0) {
|
|
6699
|
+
conditions.push((0, import_drizzle_orm14.eq)(branches3.archived, filter.archived));
|
|
6700
|
+
} else if (!includeArchived) {
|
|
6701
|
+
conditions.push((0, import_drizzle_orm14.eq)(branches3.archived, false));
|
|
6188
6702
|
}
|
|
6189
|
-
|
|
6190
|
-
|
|
6703
|
+
if (filter?.branchIds !== void 0) {
|
|
6704
|
+
conditions.push((0, import_drizzle_orm14.inArray)(branches3.branch_id, filter.branchIds));
|
|
6705
|
+
}
|
|
6706
|
+
if (filter?.visibleToUserId) {
|
|
6707
|
+
conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
|
|
6708
|
+
}
|
|
6709
|
+
const baseQuery = filter?.visibleToUserId ? select(this.db, (0, import_drizzle_orm14.getTableColumns)(branches3)).from(branches3).leftJoin(
|
|
6710
|
+
branchOwners3,
|
|
6711
|
+
(0, import_drizzle_orm14.and)(
|
|
6712
|
+
(0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
6713
|
+
(0, import_drizzle_orm14.eq)(branchOwners3.user_id, filter.visibleToUserId)
|
|
6714
|
+
)
|
|
6715
|
+
) : select(this.db).from(branches3);
|
|
6716
|
+
const rows = conditions.length > 0 ? await baseQuery.where((0, import_drizzle_orm14.and)(...conditions)).all() : await baseQuery.all();
|
|
6717
|
+
const baseUrl = await getBaseUrl();
|
|
6718
|
+
return rows.map((row) => this.rowToBranch(row, baseUrl));
|
|
6719
|
+
}
|
|
6720
|
+
/**
|
|
6721
|
+
* Health-monitor discovery query. Returns only routing metadata so the
|
|
6722
|
+
* background monitor can enter the correct tenant DB scope before loading
|
|
6723
|
+
* branch contents or patching health state.
|
|
6724
|
+
*/
|
|
6725
|
+
async findActiveEnvironmentRefs() {
|
|
6726
|
+
const tenantColumn = branches3.tenant_id;
|
|
6727
|
+
const columns = isPostgresDatabase(this.db) && tenantColumn ? { branch_id: branches3.branch_id, tenant_id: tenantColumn } : { branch_id: branches3.branch_id };
|
|
6728
|
+
const statusExpr = import_drizzle_orm14.sql`${jsonExtract(this.db, branches3.data, "environment_instance.status")}`;
|
|
6729
|
+
const rows = await select(this.db, columns).from(branches3).where((0, import_drizzle_orm14.or)((0, import_drizzle_orm14.eq)(statusExpr, "running"), (0, import_drizzle_orm14.eq)(statusExpr, "starting"))).all();
|
|
6730
|
+
return rows.map((row) => ({
|
|
6731
|
+
branch_id: row.branch_id,
|
|
6732
|
+
...typeof row.tenant_id === "string" && row.tenant_id.length > 0 ? { tenant_id: row.tenant_id } : {}
|
|
6733
|
+
}));
|
|
6734
|
+
}
|
|
6735
|
+
/**
|
|
6736
|
+
* Find active assistant branches without paginating the whole branch list first.
|
|
6737
|
+
*
|
|
6738
|
+
* A branch is discoverable as an assistant when it has the canonical assistant
|
|
6739
|
+
* marker in custom_context (new or legacy key), or as a read-time backfill for
|
|
6740
|
+
* older hand-bootstrapped assistants, when it has at least one enabled
|
|
6741
|
+
* first-class schedule.
|
|
6742
|
+
*/
|
|
6743
|
+
async findAssistantBranches(filter) {
|
|
6744
|
+
const assistantKindConditions = [
|
|
6745
|
+
(0, import_drizzle_orm14.eq)(import_drizzle_orm14.sql`${jsonExtract(this.db, branches3.data, "custom_context.assistant.kind")}`, "assistant"),
|
|
6746
|
+
(0, import_drizzle_orm14.eq)(
|
|
6747
|
+
import_drizzle_orm14.sql`${jsonExtract(this.db, branches3.data, "custom_context.assistant.kind")}`,
|
|
6748
|
+
"persisted-agent"
|
|
6749
|
+
),
|
|
6750
|
+
(0, import_drizzle_orm14.eq)(import_drizzle_orm14.sql`${jsonExtract(this.db, branches3.data, "custom_context.agent.kind")}`, "assistant"),
|
|
6751
|
+
(0, import_drizzle_orm14.eq)(
|
|
6752
|
+
import_drizzle_orm14.sql`${jsonExtract(this.db, branches3.data, "custom_context.agent.kind")}`,
|
|
6753
|
+
"persisted-agent"
|
|
6754
|
+
)
|
|
6755
|
+
];
|
|
6756
|
+
const hasEnabledSchedule = (0, import_drizzle_orm14.exists)(
|
|
6757
|
+
// biome-ignore lint/suspicious/noExplicitAny: Drizzle select has complex cross-dialect overloads
|
|
6758
|
+
this.db.select({ _: import_drizzle_orm14.sql`1` }).from(schedules3).where((0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(schedules3.branch_id, branches3.branch_id), (0, import_drizzle_orm14.eq)(schedules3.enabled, true)))
|
|
6759
|
+
);
|
|
6760
|
+
const conditions = [(0, import_drizzle_orm14.or)(...assistantKindConditions, hasEnabledSchedule) ?? import_drizzle_orm14.sql`false`];
|
|
6761
|
+
if (filter?.repo_id) conditions.push((0, import_drizzle_orm14.eq)(branches3.repo_id, filter.repo_id));
|
|
6762
|
+
if (filter?.archived !== void 0) conditions.push((0, import_drizzle_orm14.eq)(branches3.archived, filter.archived));
|
|
6763
|
+
if (filter?.userId) conditions.push(visibleBranchAccessCondition(this.db, filter.userId));
|
|
6764
|
+
const baseQuery = select(this.db, (0, import_drizzle_orm14.getTableColumns)(branches3)).from(branches3);
|
|
6765
|
+
const query = filter?.userId ? baseQuery.leftJoin(
|
|
6766
|
+
branchOwners3,
|
|
6767
|
+
(0, import_drizzle_orm14.and)(
|
|
6768
|
+
(0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branches3.branch_id),
|
|
6769
|
+
(0, import_drizzle_orm14.eq)(branchOwners3.user_id, filter.userId)
|
|
6770
|
+
)
|
|
6771
|
+
) : baseQuery;
|
|
6772
|
+
const rows = await query.where((0, import_drizzle_orm14.and)(...conditions)).limit(filter?.limit ?? 200).all();
|
|
6191
6773
|
const baseUrl = await getBaseUrl();
|
|
6192
6774
|
return rows.map((row) => this.rowToBranch(row, baseUrl));
|
|
6193
6775
|
}
|
|
@@ -6208,9 +6790,9 @@ var BranchRepository = class {
|
|
|
6208
6790
|
txAsDb(tx),
|
|
6209
6791
|
this.db,
|
|
6210
6792
|
branches3,
|
|
6211
|
-
(0,
|
|
6793
|
+
(0, import_drizzle_orm14.eq)(branches3.branch_id, existing.branch_id)
|
|
6212
6794
|
);
|
|
6213
|
-
const currentRow = await select(txAsDb(tx)).from(branches3).where((0,
|
|
6795
|
+
const currentRow = await select(txAsDb(tx)).from(branches3).where((0, import_drizzle_orm14.eq)(branches3.branch_id, existing.branch_id)).one();
|
|
6214
6796
|
if (!currentRow) {
|
|
6215
6797
|
throw new EntityNotFoundError("Branch", id);
|
|
6216
6798
|
}
|
|
@@ -6227,7 +6809,7 @@ var BranchRepository = class {
|
|
|
6227
6809
|
// Always update timestamp
|
|
6228
6810
|
});
|
|
6229
6811
|
const insertData = this.branchToInsert(merged);
|
|
6230
|
-
const row = await update(txAsDb(tx), branches3).set(insertData).where((0,
|
|
6812
|
+
const row = await update(txAsDb(tx), branches3).set(insertData).where((0, import_drizzle_orm14.eq)(branches3.branch_id, current.branch_id)).returning().one();
|
|
6231
6813
|
return this.rowToBranch(row, baseUrl);
|
|
6232
6814
|
});
|
|
6233
6815
|
}
|
|
@@ -6239,13 +6821,13 @@ var BranchRepository = class {
|
|
|
6239
6821
|
if (!existing) {
|
|
6240
6822
|
throw new EntityNotFoundError("Branch", id);
|
|
6241
6823
|
}
|
|
6242
|
-
await deleteFrom(this.db, branches3).where((0,
|
|
6824
|
+
await deleteFrom(this.db, branches3).where((0, import_drizzle_orm14.eq)(branches3.branch_id, existing.branch_id)).run();
|
|
6243
6825
|
}
|
|
6244
6826
|
/**
|
|
6245
6827
|
* Find branch by repo_id and name
|
|
6246
6828
|
*/
|
|
6247
6829
|
async findByRepoAndName(repoId, name) {
|
|
6248
|
-
const row = await select(this.db).from(branches3).where((0,
|
|
6830
|
+
const row = await select(this.db).from(branches3).where((0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(branches3.repo_id, repoId), (0, import_drizzle_orm14.eq)(branches3.name, name))).one();
|
|
6249
6831
|
if (!row) return null;
|
|
6250
6832
|
const baseUrl = await getBaseUrl();
|
|
6251
6833
|
return this.rowToBranch(row, baseUrl);
|
|
@@ -6255,7 +6837,7 @@ var BranchRepository = class {
|
|
|
6255
6837
|
*/
|
|
6256
6838
|
async findActiveByRepoAndName(repoId, name) {
|
|
6257
6839
|
const row = await select(this.db).from(branches3).where(
|
|
6258
|
-
(0,
|
|
6840
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(branches3.repo_id, repoId), (0, import_drizzle_orm14.eq)(branches3.name, name), (0, import_drizzle_orm14.eq)(branches3.archived, false))
|
|
6259
6841
|
).one();
|
|
6260
6842
|
if (!row) return null;
|
|
6261
6843
|
const baseUrl = await getBaseUrl();
|
|
@@ -6274,7 +6856,7 @@ var BranchRepository = class {
|
|
|
6274
6856
|
* Used for auto-suffix name conflict resolution — bypasses Feathers pagination.
|
|
6275
6857
|
*/
|
|
6276
6858
|
async getActiveNamesByRepo(repoId) {
|
|
6277
|
-
const rows = await select(this.db, { name: branches3.name }).from(branches3).where((0,
|
|
6859
|
+
const rows = await select(this.db, { name: branches3.name }).from(branches3).where((0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(branches3.repo_id, repoId), (0, import_drizzle_orm14.eq)(branches3.archived, false))).all();
|
|
6278
6860
|
return rows.map((row) => row.name);
|
|
6279
6861
|
}
|
|
6280
6862
|
// ===== RBAC: Ownership Management =====
|
|
@@ -6286,7 +6868,7 @@ var BranchRepository = class {
|
|
|
6286
6868
|
* @returns true if user is an owner
|
|
6287
6869
|
*/
|
|
6288
6870
|
async isOwner(branchId, userId) {
|
|
6289
|
-
const row = await select(this.db).from(branchOwners3).where((0,
|
|
6871
|
+
const row = await select(this.db).from(branchOwners3).where((0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branchId), (0, import_drizzle_orm14.eq)(branchOwners3.user_id, userId))).one();
|
|
6290
6872
|
return row != null;
|
|
6291
6873
|
}
|
|
6292
6874
|
/**
|
|
@@ -6298,17 +6880,17 @@ var BranchRepository = class {
|
|
|
6298
6880
|
async getBestGroupGrantForUser(branchId, userId) {
|
|
6299
6881
|
const rows = await select(this.db).from(branchGroupGrants3).innerJoin(
|
|
6300
6882
|
groupMemberships3,
|
|
6301
|
-
(0,
|
|
6302
|
-
(0,
|
|
6303
|
-
(0,
|
|
6883
|
+
(0, import_drizzle_orm14.and)(
|
|
6884
|
+
(0, import_drizzle_orm14.eq)(groupMemberships3.group_id, branchGroupGrants3.group_id),
|
|
6885
|
+
(0, import_drizzle_orm14.eq)(groupMemberships3.user_id, userId)
|
|
6304
6886
|
)
|
|
6305
6887
|
).innerJoin(
|
|
6306
6888
|
groups3,
|
|
6307
|
-
(0,
|
|
6889
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(groups3.group_id, branchGroupGrants3.group_id), (0, import_drizzle_orm14.eq)(groups3.archived, false))
|
|
6308
6890
|
).where(
|
|
6309
|
-
(0,
|
|
6310
|
-
(0,
|
|
6311
|
-
(0,
|
|
6891
|
+
(0, import_drizzle_orm14.and)(
|
|
6892
|
+
(0, import_drizzle_orm14.eq)(branchGroupGrants3.branch_id, branchId),
|
|
6893
|
+
(0, import_drizzle_orm14.inArray)(branchGroupGrants3.can, BRANCH_PERMISSION_LEVELS)
|
|
6312
6894
|
)
|
|
6313
6895
|
).all();
|
|
6314
6896
|
let best = null;
|
|
@@ -6338,7 +6920,7 @@ var BranchRepository = class {
|
|
|
6338
6920
|
* this method.
|
|
6339
6921
|
*/
|
|
6340
6922
|
async resolveUserAccess(branch, userId) {
|
|
6341
|
-
const board = branch.permission_source === "board" && branch.board_id ? await select(this.db, { data: boards3.data, board_id: boards3.board_id }).from(boards3).where((0,
|
|
6923
|
+
const board = branch.permission_source === "board" && branch.board_id ? await select(this.db, { data: boards3.data, board_id: boards3.board_id }).from(boards3).where((0, import_drizzle_orm14.eq)(boards3.board_id, branch.board_id)).one() : null;
|
|
6342
6924
|
const boardData = board?.data;
|
|
6343
6925
|
const boardIsShared = (boardData?.access_mode ?? "shared") === "shared";
|
|
6344
6926
|
const sharing = branch.permission_source === "board" && boardIsShared ? boardData?.default_dangerously_allow_session_sharing ?? false : branch.dangerously_allow_session_sharing ?? false;
|
|
@@ -6354,7 +6936,7 @@ var BranchRepository = class {
|
|
|
6354
6936
|
const groupRepo = new GroupRepository(this.db);
|
|
6355
6937
|
const branchGroupGrants4 = await groupRepo.getBranchGrantsForUser(branch.branch_id, userId);
|
|
6356
6938
|
if (branch.permission_source === "board" && branch.board_id) {
|
|
6357
|
-
const boardOwner = await select(this.db).from(boardOwners3).where((0,
|
|
6939
|
+
const boardOwner = await select(this.db).from(boardOwners3).where((0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(boardOwners3.board_id, branch.board_id), (0, import_drizzle_orm14.eq)(boardOwners3.user_id, userId))).one();
|
|
6358
6940
|
if (boardOwner) {
|
|
6359
6941
|
return {
|
|
6360
6942
|
can: "all",
|
|
@@ -6411,34 +6993,34 @@ var BranchRepository = class {
|
|
|
6411
6993
|
const branchRow = await select(this.db, {
|
|
6412
6994
|
board_id: branches3.board_id,
|
|
6413
6995
|
permission_source: branches3.permission_source
|
|
6414
|
-
}).from(branches3).where((0,
|
|
6415
|
-
const ownerRows = await select(this.db, { user_id: branchOwners3.user_id }).from(branchOwners3).where((0,
|
|
6416
|
-
const groupRows = await select(this.db, { user_id: groupMemberships3.user_id }).from(branchGroupGrants3).innerJoin(groupMemberships3, (0,
|
|
6996
|
+
}).from(branches3).where((0, import_drizzle_orm14.eq)(branches3.branch_id, branchId)).one();
|
|
6997
|
+
const ownerRows = await select(this.db, { user_id: branchOwners3.user_id }).from(branchOwners3).where((0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branchId)).all();
|
|
6998
|
+
const groupRows = await select(this.db, { user_id: groupMemberships3.user_id }).from(branchGroupGrants3).innerJoin(groupMemberships3, (0, import_drizzle_orm14.eq)(groupMemberships3.group_id, branchGroupGrants3.group_id)).innerJoin(
|
|
6417
6999
|
groups3,
|
|
6418
|
-
(0,
|
|
7000
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(groups3.group_id, branchGroupGrants3.group_id), (0, import_drizzle_orm14.eq)(groups3.archived, false))
|
|
6419
7001
|
).where(
|
|
6420
|
-
(0,
|
|
6421
|
-
(0,
|
|
6422
|
-
(0,
|
|
7002
|
+
(0, import_drizzle_orm14.and)(
|
|
7003
|
+
(0, import_drizzle_orm14.eq)(branchGroupGrants3.branch_id, branchId),
|
|
7004
|
+
(0, import_drizzle_orm14.inArray)(branchGroupGrants3.can, VIEW_OR_BETTER_BRANCH_PERMISSIONS)
|
|
6423
7005
|
)
|
|
6424
7006
|
).all();
|
|
6425
|
-
const boardOwnerRows = branchRow?.permission_source === "board" && branchRow.board_id ? await select(this.db, { user_id: boardOwners3.user_id }).from(boardOwners3).where((0,
|
|
6426
|
-
const boardGroupRows = branchRow?.permission_source === "board" && branchRow.board_id ? await select(this.db, { user_id: groupMemberships3.user_id }).from(boardGroupGrants3).innerJoin(groupMemberships3, (0,
|
|
7007
|
+
const boardOwnerRows = branchRow?.permission_source === "board" && branchRow.board_id ? await select(this.db, { user_id: boardOwners3.user_id }).from(boardOwners3).where((0, import_drizzle_orm14.eq)(boardOwners3.board_id, branchRow.board_id)).all() : [];
|
|
7008
|
+
const boardGroupRows = branchRow?.permission_source === "board" && branchRow.board_id ? await select(this.db, { user_id: groupMemberships3.user_id }).from(boardGroupGrants3).innerJoin(groupMemberships3, (0, import_drizzle_orm14.eq)(groupMemberships3.group_id, boardGroupGrants3.group_id)).innerJoin(
|
|
6427
7009
|
groups3,
|
|
6428
|
-
(0,
|
|
7010
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(groups3.group_id, boardGroupGrants3.group_id), (0, import_drizzle_orm14.eq)(groups3.archived, false))
|
|
6429
7011
|
).innerJoin(
|
|
6430
7012
|
boards3,
|
|
6431
|
-
(0,
|
|
6432
|
-
(0,
|
|
6433
|
-
(0,
|
|
6434
|
-
|
|
7013
|
+
(0, import_drizzle_orm14.and)(
|
|
7014
|
+
(0, import_drizzle_orm14.eq)(boards3.board_id, boardGroupGrants3.board_id),
|
|
7015
|
+
(0, import_drizzle_orm14.eq)(
|
|
7016
|
+
import_drizzle_orm14.sql`coalesce(${jsonExtract(this.db, boards3.data, "access_mode")}, 'shared')`,
|
|
6435
7017
|
"shared"
|
|
6436
7018
|
)
|
|
6437
7019
|
)
|
|
6438
7020
|
).where(
|
|
6439
|
-
(0,
|
|
6440
|
-
(0,
|
|
6441
|
-
(0,
|
|
7021
|
+
(0, import_drizzle_orm14.and)(
|
|
7022
|
+
(0, import_drizzle_orm14.eq)(boardGroupGrants3.board_id, branchRow.board_id),
|
|
7023
|
+
(0, import_drizzle_orm14.inArray)(boardGroupGrants3.can, VIEW_OR_BETTER_BRANCH_PERMISSIONS)
|
|
6442
7024
|
)
|
|
6443
7025
|
).all() : [];
|
|
6444
7026
|
const userIds = /* @__PURE__ */ new Set();
|
|
@@ -6470,39 +7052,39 @@ var BranchRepository = class {
|
|
|
6470
7052
|
const branchRow = await select(this.db, {
|
|
6471
7053
|
board_id: branches3.board_id,
|
|
6472
7054
|
permission_source: branches3.permission_source
|
|
6473
|
-
}).from(branches3).where((0,
|
|
6474
|
-
const ownerRows = await select(this.db, { user_id: branchOwners3.user_id }).from(branchOwners3).where((0,
|
|
6475
|
-
const groupRows = await select(this.db, { user_id: groupMemberships3.user_id }).from(branchGroupGrants3).innerJoin(groupMemberships3, (0,
|
|
7055
|
+
}).from(branches3).where((0, import_drizzle_orm14.eq)(branches3.branch_id, branchId)).one();
|
|
7056
|
+
const ownerRows = await select(this.db, { user_id: branchOwners3.user_id }).from(branchOwners3).where((0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branchId)).all();
|
|
7057
|
+
const groupRows = await select(this.db, { user_id: groupMemberships3.user_id }).from(branchGroupGrants3).innerJoin(groupMemberships3, (0, import_drizzle_orm14.eq)(groupMemberships3.group_id, branchGroupGrants3.group_id)).innerJoin(
|
|
6476
7058
|
groups3,
|
|
6477
|
-
(0,
|
|
7059
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(groups3.group_id, branchGroupGrants3.group_id), (0, import_drizzle_orm14.eq)(groups3.archived, false))
|
|
6478
7060
|
).where(
|
|
6479
|
-
(0,
|
|
6480
|
-
(0,
|
|
6481
|
-
(0,
|
|
6482
|
-
|
|
7061
|
+
(0, import_drizzle_orm14.and)(
|
|
7062
|
+
(0, import_drizzle_orm14.eq)(branchGroupGrants3.branch_id, branchId),
|
|
7063
|
+
(0, import_drizzle_orm14.inArray)(
|
|
7064
|
+
import_drizzle_orm14.sql`coalesce(${branchGroupGrants3.fs_access}, 'read')`,
|
|
6483
7065
|
FS_ACCESS_BRANCH_PERMISSIONS
|
|
6484
7066
|
)
|
|
6485
7067
|
)
|
|
6486
7068
|
).all();
|
|
6487
7069
|
const isBoardAligned = branchRow?.permission_source === "board" && branchRow.board_id;
|
|
6488
|
-
const boardOwnerRows = isBoardAligned ? await select(this.db, { user_id: boardOwners3.user_id }).from(boardOwners3).where((0,
|
|
6489
|
-
const boardGroupRows = isBoardAligned ? await select(this.db, { user_id: groupMemberships3.user_id }).from(boardGroupGrants3).innerJoin(groupMemberships3, (0,
|
|
7070
|
+
const boardOwnerRows = isBoardAligned ? await select(this.db, { user_id: boardOwners3.user_id }).from(boardOwners3).where((0, import_drizzle_orm14.eq)(boardOwners3.board_id, branchRow.board_id)).all() : [];
|
|
7071
|
+
const boardGroupRows = isBoardAligned ? await select(this.db, { user_id: groupMemberships3.user_id }).from(boardGroupGrants3).innerJoin(groupMemberships3, (0, import_drizzle_orm14.eq)(groupMemberships3.group_id, boardGroupGrants3.group_id)).innerJoin(
|
|
6490
7072
|
groups3,
|
|
6491
|
-
(0,
|
|
7073
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(groups3.group_id, boardGroupGrants3.group_id), (0, import_drizzle_orm14.eq)(groups3.archived, false))
|
|
6492
7074
|
).innerJoin(
|
|
6493
7075
|
boards3,
|
|
6494
|
-
(0,
|
|
6495
|
-
(0,
|
|
6496
|
-
(0,
|
|
6497
|
-
|
|
7076
|
+
(0, import_drizzle_orm14.and)(
|
|
7077
|
+
(0, import_drizzle_orm14.eq)(boards3.board_id, boardGroupGrants3.board_id),
|
|
7078
|
+
(0, import_drizzle_orm14.eq)(
|
|
7079
|
+
import_drizzle_orm14.sql`coalesce(${jsonExtract(this.db, boards3.data, "access_mode")}, 'shared')`,
|
|
6498
7080
|
"shared"
|
|
6499
7081
|
)
|
|
6500
7082
|
)
|
|
6501
7083
|
).where(
|
|
6502
|
-
(0,
|
|
6503
|
-
(0,
|
|
6504
|
-
(0,
|
|
6505
|
-
|
|
7084
|
+
(0, import_drizzle_orm14.and)(
|
|
7085
|
+
(0, import_drizzle_orm14.eq)(boardGroupGrants3.board_id, branchRow.board_id),
|
|
7086
|
+
(0, import_drizzle_orm14.inArray)(
|
|
7087
|
+
import_drizzle_orm14.sql`coalesce(${boardGroupGrants3.fs_access}, 'read')`,
|
|
6506
7088
|
FS_ACCESS_BRANCH_PERMISSIONS
|
|
6507
7089
|
)
|
|
6508
7090
|
)
|
|
@@ -6524,10 +7106,10 @@ var BranchRepository = class {
|
|
|
6524
7106
|
}
|
|
6525
7107
|
async findBoardAlignedBranches(boardId) {
|
|
6526
7108
|
const rows = await select(this.db).from(branches3).where(
|
|
6527
|
-
(0,
|
|
6528
|
-
(0,
|
|
6529
|
-
(0,
|
|
6530
|
-
(0,
|
|
7109
|
+
(0, import_drizzle_orm14.and)(
|
|
7110
|
+
(0, import_drizzle_orm14.eq)(branches3.board_id, boardId),
|
|
7111
|
+
(0, import_drizzle_orm14.eq)(branches3.permission_source, "board"),
|
|
7112
|
+
(0, import_drizzle_orm14.eq)(branches3.archived, false)
|
|
6531
7113
|
)
|
|
6532
7114
|
).all();
|
|
6533
7115
|
const baseUrl = await getBaseUrl();
|
|
@@ -6544,7 +7126,7 @@ var BranchRepository = class {
|
|
|
6544
7126
|
if (!branch) {
|
|
6545
7127
|
throw new EntityNotFoundError("Branch", branchId);
|
|
6546
7128
|
}
|
|
6547
|
-
const rows = await select(this.db).from(branchOwners3).where((0,
|
|
7129
|
+
const rows = await select(this.db).from(branchOwners3).where((0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branch.branch_id)).all();
|
|
6548
7130
|
return rows.map((row) => row.user_id);
|
|
6549
7131
|
}
|
|
6550
7132
|
/**
|
|
@@ -6584,7 +7166,7 @@ var BranchRepository = class {
|
|
|
6584
7166
|
if (!branch) {
|
|
6585
7167
|
throw new EntityNotFoundError("Branch", branchId);
|
|
6586
7168
|
}
|
|
6587
|
-
await deleteFrom(this.db, branchOwners3).where((0,
|
|
7169
|
+
await deleteFrom(this.db, branchOwners3).where((0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branch.branch_id), (0, import_drizzle_orm14.eq)(branchOwners3.user_id, userId))).run();
|
|
6588
7170
|
}
|
|
6589
7171
|
/**
|
|
6590
7172
|
* Bulk-load ownership for multiple branches
|
|
@@ -6599,7 +7181,7 @@ var BranchRepository = class {
|
|
|
6599
7181
|
if (branchIds.length === 0) {
|
|
6600
7182
|
return /* @__PURE__ */ new Map();
|
|
6601
7183
|
}
|
|
6602
|
-
const rows = await select(this.db).from(branchOwners3).where((0,
|
|
7184
|
+
const rows = await select(this.db).from(branchOwners3).where((0, import_drizzle_orm14.inArray)(branchOwners3.branch_id, branchIds)).all();
|
|
6603
7185
|
const ownersByBranch = /* @__PURE__ */ new Map();
|
|
6604
7186
|
for (const row of rows) {
|
|
6605
7187
|
const wtId = row.branch_id;
|
|
@@ -6630,14 +7212,14 @@ var BranchRepository = class {
|
|
|
6630
7212
|
async findAccessibleBranches(userId, filter) {
|
|
6631
7213
|
const conditions = [visibleBranchAccessCondition(this.db, userId)];
|
|
6632
7214
|
if (filter?.archived === true) {
|
|
6633
|
-
conditions.push((0,
|
|
7215
|
+
conditions.push((0, import_drizzle_orm14.eq)(branches3.archived, true));
|
|
6634
7216
|
} else if (filter?.archived === false) {
|
|
6635
|
-
conditions.push((0,
|
|
7217
|
+
conditions.push((0, import_drizzle_orm14.eq)(branches3.archived, false));
|
|
6636
7218
|
}
|
|
6637
|
-
const rows = await select(this.db, (0,
|
|
7219
|
+
const rows = await select(this.db, (0, import_drizzle_orm14.getTableColumns)(branches3)).from(branches3).leftJoin(
|
|
6638
7220
|
branchOwners3,
|
|
6639
|
-
(0,
|
|
6640
|
-
).where((0,
|
|
7221
|
+
(0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(branchOwners3.branch_id, branches3.branch_id), (0, import_drizzle_orm14.eq)(branchOwners3.user_id, userId))
|
|
7222
|
+
).where((0, import_drizzle_orm14.and)(...conditions)).all();
|
|
6641
7223
|
const baseUrl = await getBaseUrl();
|
|
6642
7224
|
const seen = /* @__PURE__ */ new Set();
|
|
6643
7225
|
const result = [];
|
|
@@ -6660,7 +7242,7 @@ var BranchRepository = class {
|
|
|
6660
7242
|
const { jsonExtract: jsonExtract2 } = await Promise.resolve().then(() => (init_database_wrapper(), database_wrapper_exports));
|
|
6661
7243
|
const rows = await select(this.db, {
|
|
6662
7244
|
branch_id: boardObjectsTable.branch_id
|
|
6663
|
-
}).from(boardObjectsTable).where(
|
|
7245
|
+
}).from(boardObjectsTable).where(import_drizzle_orm14.sql`${jsonExtract2(this.db, boardObjectsTable.data, "zone_id")} = ${zoneId}`).all();
|
|
6664
7246
|
const uniqueIds = /* @__PURE__ */ new Set();
|
|
6665
7247
|
for (const row of rows) {
|
|
6666
7248
|
if (row.branch_id) {
|
|
@@ -6712,7 +7294,7 @@ var BranchRepository = class {
|
|
|
6712
7294
|
zone_id: jsonExtract2(this.db, boardObjectsTable.data, "zone_id"),
|
|
6713
7295
|
position: jsonExtract2(this.db, boardObjectsTable.data, "position"),
|
|
6714
7296
|
board_data: boardsTable.data
|
|
6715
|
-
}).from(boardObjectsTable).leftJoin(boardsTable, (0,
|
|
7297
|
+
}).from(boardObjectsTable).leftJoin(boardsTable, (0, import_drizzle_orm14.eq)(boardObjectsTable.board_id, boardsTable.board_id)).where((0, import_drizzle_orm14.inArray)(boardObjectsTable.branch_id, branchIds)).all();
|
|
6716
7298
|
const boardObjectInfoByBranch = /* @__PURE__ */ new Map();
|
|
6717
7299
|
for (const row of rows) {
|
|
6718
7300
|
const info = {
|
|
@@ -6791,7 +7373,7 @@ var BranchRepository = class {
|
|
|
6791
7373
|
agentic_tool: sessionsTable.agentic_tool,
|
|
6792
7374
|
updated_at: sessionsTable.updated_at,
|
|
6793
7375
|
unix_username: sessionsTable.unix_username
|
|
6794
|
-
}).from(sessionsTable).where((0,
|
|
7376
|
+
}).from(sessionsTable).where((0, import_drizzle_orm14.inArray)(sessionsTable.branch_id, branchIds)).orderBy(sessionsTable.updated_at).all();
|
|
6795
7377
|
const sessionIds = sessionRows.map((s) => s.session_id);
|
|
6796
7378
|
if (sessionIds.length === 0) {
|
|
6797
7379
|
return branches4.map((wt) => ({ ...wt, sessions: [] }));
|
|
@@ -6800,8 +7382,8 @@ var BranchRepository = class {
|
|
|
6800
7382
|
for (const sessionId of sessionIds) {
|
|
6801
7383
|
const query = select(this.db, {
|
|
6802
7384
|
data: messagesTable.data
|
|
6803
|
-
}).from(messagesTable).where((0,
|
|
6804
|
-
const lastMessage = await query.orderBy((0,
|
|
7385
|
+
}).from(messagesTable).where((0, import_drizzle_orm14.and)((0, import_drizzle_orm14.eq)(messagesTable.session_id, sessionId), (0, import_drizzle_orm14.eq)(messagesTable.role, "assistant")));
|
|
7386
|
+
const lastMessage = await query.orderBy((0, import_drizzle_orm14.desc)(messagesTable.index)).limit(1).one();
|
|
6805
7387
|
if (lastMessage) {
|
|
6806
7388
|
const messageData = lastMessage.data;
|
|
6807
7389
|
let fullText = "";
|
|
@@ -6816,8 +7398,8 @@ var BranchRepository = class {
|
|
|
6816
7398
|
}
|
|
6817
7399
|
const countRows = await select(this.db, {
|
|
6818
7400
|
session_id: messagesTable.session_id,
|
|
6819
|
-
count:
|
|
6820
|
-
}).from(messagesTable).where((0,
|
|
7401
|
+
count: import_drizzle_orm14.sql`count(*)`
|
|
7402
|
+
}).from(messagesTable).where((0, import_drizzle_orm14.inArray)(messagesTable.session_id, sessionIds)).groupBy(messagesTable.session_id).all();
|
|
6821
7403
|
const messageCountBySession = /* @__PURE__ */ new Map();
|
|
6822
7404
|
for (const r of countRows) {
|
|
6823
7405
|
messageCountBySession.set(r.session_id, Number(r.count));
|
|
@@ -6869,14 +7451,14 @@ var BranchRepository = class {
|
|
|
6869
7451
|
|
|
6870
7452
|
// src/db/repositories/card-types.ts
|
|
6871
7453
|
init_cjs_shims();
|
|
6872
|
-
var
|
|
7454
|
+
var import_drizzle_orm16 = require("drizzle-orm");
|
|
6873
7455
|
init_ids();
|
|
6874
7456
|
init_database_wrapper();
|
|
6875
7457
|
init_schema();
|
|
6876
7458
|
|
|
6877
7459
|
// src/db/repositories/cards.ts
|
|
6878
7460
|
init_cjs_shims();
|
|
6879
|
-
var
|
|
7461
|
+
var import_drizzle_orm17 = require("drizzle-orm");
|
|
6880
7462
|
init_ids();
|
|
6881
7463
|
init_database_wrapper();
|
|
6882
7464
|
init_schema();
|
|
@@ -6884,16 +7466,24 @@ init_schema();
|
|
|
6884
7466
|
// src/db/repositories/gateway-channels.ts
|
|
6885
7467
|
init_cjs_shims();
|
|
6886
7468
|
init_types2();
|
|
6887
|
-
var
|
|
7469
|
+
var import_drizzle_orm18 = require("drizzle-orm");
|
|
7470
|
+
init_ids();
|
|
7471
|
+
init_database_wrapper();
|
|
7472
|
+
init_schema();
|
|
7473
|
+
|
|
7474
|
+
// src/db/repositories/gateway-outbound-messages.ts
|
|
7475
|
+
init_cjs_shims();
|
|
7476
|
+
init_types2();
|
|
7477
|
+
var import_drizzle_orm19 = require("drizzle-orm");
|
|
6888
7478
|
init_ids();
|
|
6889
7479
|
init_database_wrapper();
|
|
6890
7480
|
init_schema();
|
|
6891
7481
|
|
|
6892
7482
|
// src/db/repositories/knowledge.ts
|
|
6893
7483
|
init_cjs_shims();
|
|
6894
|
-
var
|
|
7484
|
+
var import_node_crypto3 = require("crypto");
|
|
6895
7485
|
init_types2();
|
|
6896
|
-
var
|
|
7486
|
+
var import_drizzle_orm20 = require("drizzle-orm");
|
|
6897
7487
|
init_config_manager();
|
|
6898
7488
|
init_ids();
|
|
6899
7489
|
init_database_wrapper();
|
|
@@ -6901,7 +7491,7 @@ init_schema();
|
|
|
6901
7491
|
|
|
6902
7492
|
// src/db/repositories/mcp-servers.ts
|
|
6903
7493
|
init_cjs_shims();
|
|
6904
|
-
var
|
|
7494
|
+
var import_drizzle_orm21 = require("drizzle-orm");
|
|
6905
7495
|
init_ids();
|
|
6906
7496
|
|
|
6907
7497
|
// src/tools/mcp/auth-secrets.ts
|
|
@@ -6916,13 +7506,13 @@ init_schema();
|
|
|
6916
7506
|
|
|
6917
7507
|
// src/db/repositories/messages.ts
|
|
6918
7508
|
init_cjs_shims();
|
|
6919
|
-
var
|
|
7509
|
+
var import_drizzle_orm22 = require("drizzle-orm");
|
|
6920
7510
|
init_database_wrapper();
|
|
6921
7511
|
init_schema();
|
|
6922
7512
|
|
|
6923
7513
|
// src/db/repositories/repos.ts
|
|
6924
7514
|
init_cjs_shims();
|
|
6925
|
-
var
|
|
7515
|
+
var import_drizzle_orm23 = require("drizzle-orm");
|
|
6926
7516
|
init_ids();
|
|
6927
7517
|
init_database_wrapper();
|
|
6928
7518
|
init_schema();
|
|
@@ -6958,20 +7548,23 @@ var RepoRepository = class {
|
|
|
6958
7548
|
const environment = data.environment ?? wrapV1AsV2(data.environment_config);
|
|
6959
7549
|
const environment_config = data.environment_config ?? deriveV1FromV2(environment);
|
|
6960
7550
|
const remote_url = typeof data.remote_url === "string" ? stripHttpUrlUserinfo(data.remote_url) : data.remote_url;
|
|
6961
|
-
return
|
|
6962
|
-
|
|
6963
|
-
|
|
6964
|
-
|
|
6965
|
-
|
|
6966
|
-
|
|
6967
|
-
|
|
6968
|
-
|
|
6969
|
-
|
|
6970
|
-
|
|
6971
|
-
|
|
6972
|
-
|
|
6973
|
-
|
|
6974
|
-
|
|
7551
|
+
return attachHiddenTenant(
|
|
7552
|
+
{
|
|
7553
|
+
repo_id: row.repo_id,
|
|
7554
|
+
slug: row.slug,
|
|
7555
|
+
repo_type: row.repo_type ?? "remote",
|
|
7556
|
+
unix_group: row.unix_group ?? void 0,
|
|
7557
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
7558
|
+
last_updated: row.updated_at ? new Date(row.updated_at).toISOString() : new Date(row.created_at).toISOString(),
|
|
7559
|
+
...data,
|
|
7560
|
+
remote_url,
|
|
7561
|
+
environment,
|
|
7562
|
+
environment_config,
|
|
7563
|
+
clone_status: data.clone_status,
|
|
7564
|
+
clone_error: data.clone_error
|
|
7565
|
+
},
|
|
7566
|
+
row
|
|
7567
|
+
);
|
|
6975
7568
|
}
|
|
6976
7569
|
/**
|
|
6977
7570
|
* Convert Repo to database insert format
|
|
@@ -7021,7 +7614,7 @@ var RepoRepository = class {
|
|
|
7021
7614
|
*/
|
|
7022
7615
|
async resolveId(id) {
|
|
7023
7616
|
return resolveByShortIdPrefix(id, "Repo", async (pattern) => {
|
|
7024
|
-
const rows = await select(this.db).from(repos3).where((0,
|
|
7617
|
+
const rows = await select(this.db).from(repos3).where((0, import_drizzle_orm23.like)(repos3.repo_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
7025
7618
|
return rows.map((r) => r.repo_id);
|
|
7026
7619
|
});
|
|
7027
7620
|
}
|
|
@@ -7032,7 +7625,7 @@ var RepoRepository = class {
|
|
|
7032
7625
|
try {
|
|
7033
7626
|
const insertData = this.repoToInsert(data);
|
|
7034
7627
|
await insert(this.db, repos3).values(insertData).run();
|
|
7035
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
7628
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm23.eq)(repos3.repo_id, insertData.repo_id)).one();
|
|
7036
7629
|
if (!row) {
|
|
7037
7630
|
throw new RepositoryError("Failed to retrieve created repo");
|
|
7038
7631
|
}
|
|
@@ -7051,7 +7644,7 @@ var RepoRepository = class {
|
|
|
7051
7644
|
async findById(id) {
|
|
7052
7645
|
try {
|
|
7053
7646
|
const fullId = await this.resolveId(id);
|
|
7054
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
7647
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm23.eq)(repos3.repo_id, fullId)).one();
|
|
7055
7648
|
return row ? this.rowToRepo(row) : null;
|
|
7056
7649
|
} catch (error) {
|
|
7057
7650
|
if (error instanceof EntityNotFoundError) return null;
|
|
@@ -7067,7 +7660,7 @@ var RepoRepository = class {
|
|
|
7067
7660
|
*/
|
|
7068
7661
|
async findBySlug(slug) {
|
|
7069
7662
|
try {
|
|
7070
|
-
const row = await select(this.db).from(repos3).where((0,
|
|
7663
|
+
const row = await select(this.db).from(repos3).where((0, import_drizzle_orm23.eq)(repos3.slug, slug)).one();
|
|
7071
7664
|
return row ? this.rowToRepo(row) : null;
|
|
7072
7665
|
} catch (error) {
|
|
7073
7666
|
throw new RepositoryError(
|
|
@@ -7135,8 +7728,8 @@ var RepoRepository = class {
|
|
|
7135
7728
|
let changed = 0;
|
|
7136
7729
|
for (const finding of scan.findings) {
|
|
7137
7730
|
await this.db.transaction(async (tx) => {
|
|
7138
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
7139
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
7731
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm23.eq)(repos3.repo_id, finding.repo_id));
|
|
7732
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm23.eq)(repos3.repo_id, finding.repo_id)).one();
|
|
7140
7733
|
if (!currentRow) return;
|
|
7141
7734
|
const data = currentRow.data;
|
|
7142
7735
|
if (typeof data.remote_url !== "string" || !httpUrlHasUserinfo(data.remote_url)) {
|
|
@@ -7148,7 +7741,7 @@ var RepoRepository = class {
|
|
|
7148
7741
|
...data,
|
|
7149
7742
|
remote_url: stripHttpUrlUserinfo(data.remote_url)
|
|
7150
7743
|
}
|
|
7151
|
-
}).where((0,
|
|
7744
|
+
}).where((0, import_drizzle_orm23.eq)(repos3.repo_id, finding.repo_id)).run();
|
|
7152
7745
|
changed += 1;
|
|
7153
7746
|
});
|
|
7154
7747
|
}
|
|
@@ -7170,8 +7763,8 @@ var RepoRepository = class {
|
|
|
7170
7763
|
try {
|
|
7171
7764
|
const fullId = await this.resolveId(id);
|
|
7172
7765
|
return await this.db.transaction(async (tx) => {
|
|
7173
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
7174
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
7766
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm23.eq)(repos3.repo_id, fullId));
|
|
7767
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm23.eq)(repos3.repo_id, fullId)).one();
|
|
7175
7768
|
if (!currentRow) {
|
|
7176
7769
|
throw new EntityNotFoundError("Repo", id);
|
|
7177
7770
|
}
|
|
@@ -7185,7 +7778,7 @@ var RepoRepository = class {
|
|
|
7185
7778
|
repo_type: insertData.repo_type,
|
|
7186
7779
|
unix_group: merged.unix_group ?? null,
|
|
7187
7780
|
data: insertData.data
|
|
7188
|
-
}).where((0,
|
|
7781
|
+
}).where((0, import_drizzle_orm23.eq)(repos3.repo_id, fullId)).run();
|
|
7189
7782
|
merged.clone_error = insertData.data.clone_error;
|
|
7190
7783
|
merged.remote_url = insertData.data.remote_url;
|
|
7191
7784
|
merged.last_updated = newUpdatedAt.toISOString();
|
|
@@ -7219,8 +7812,8 @@ var RepoRepository = class {
|
|
|
7219
7812
|
try {
|
|
7220
7813
|
const fullId = await this.resolveId(id);
|
|
7221
7814
|
return await this.db.transaction(async (tx) => {
|
|
7222
|
-
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0,
|
|
7223
|
-
const currentRow = await select(txAsDb(tx)).from(repos3).where((0,
|
|
7815
|
+
await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm23.eq)(repos3.repo_id, fullId));
|
|
7816
|
+
const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm23.eq)(repos3.repo_id, fullId)).one();
|
|
7224
7817
|
if (!currentRow) {
|
|
7225
7818
|
throw new EntityNotFoundError("Repo", id);
|
|
7226
7819
|
}
|
|
@@ -7234,7 +7827,7 @@ var RepoRepository = class {
|
|
|
7234
7827
|
repo_type: insertData.repo_type,
|
|
7235
7828
|
unix_group: next.unix_group ?? null,
|
|
7236
7829
|
data: insertData.data
|
|
7237
|
-
}).where((0,
|
|
7830
|
+
}).where((0, import_drizzle_orm23.eq)(repos3.repo_id, fullId)).run();
|
|
7238
7831
|
next.environment = insertData.data.environment;
|
|
7239
7832
|
next.environment_config = insertData.data.environment_config;
|
|
7240
7833
|
next.remote_url = insertData.data.remote_url;
|
|
@@ -7274,7 +7867,7 @@ var RepoRepository = class {
|
|
|
7274
7867
|
async delete(id) {
|
|
7275
7868
|
try {
|
|
7276
7869
|
const fullId = await this.resolveId(id);
|
|
7277
|
-
const result = await deleteFrom(this.db, repos3).where((0,
|
|
7870
|
+
const result = await deleteFrom(this.db, repos3).where((0, import_drizzle_orm23.eq)(repos3.repo_id, fullId)).run();
|
|
7278
7871
|
if (result.rowsAffected === 0) {
|
|
7279
7872
|
throw new EntityNotFoundError("Repo", id);
|
|
7280
7873
|
}
|
|
@@ -7305,7 +7898,7 @@ var RepoRepository = class {
|
|
|
7305
7898
|
*/
|
|
7306
7899
|
async count() {
|
|
7307
7900
|
try {
|
|
7308
|
-
const result = await select(this.db, { count:
|
|
7901
|
+
const result = await select(this.db, { count: import_drizzle_orm23.sql`count(*)` }).from(repos3).one();
|
|
7309
7902
|
return result?.count ?? 0;
|
|
7310
7903
|
} catch (error) {
|
|
7311
7904
|
throw new RepositoryError(
|
|
@@ -7318,28 +7911,28 @@ var RepoRepository = class {
|
|
|
7318
7911
|
|
|
7319
7912
|
// src/db/repositories/schedules.ts
|
|
7320
7913
|
init_cjs_shims();
|
|
7321
|
-
var
|
|
7914
|
+
var import_drizzle_orm24 = require("drizzle-orm");
|
|
7322
7915
|
init_ids();
|
|
7323
7916
|
init_database_wrapper();
|
|
7324
7917
|
init_schema();
|
|
7325
7918
|
|
|
7326
7919
|
// src/db/repositories/serialized-sessions.ts
|
|
7327
7920
|
init_cjs_shims();
|
|
7328
|
-
var
|
|
7921
|
+
var import_drizzle_orm25 = require("drizzle-orm");
|
|
7329
7922
|
init_ids();
|
|
7330
7923
|
init_database_wrapper();
|
|
7331
7924
|
init_schema();
|
|
7332
7925
|
|
|
7333
7926
|
// src/db/repositories/session-mcp-servers.ts
|
|
7334
7927
|
init_cjs_shims();
|
|
7335
|
-
var
|
|
7928
|
+
var import_drizzle_orm27 = require("drizzle-orm");
|
|
7336
7929
|
init_database_wrapper();
|
|
7337
7930
|
init_schema();
|
|
7338
7931
|
|
|
7339
7932
|
// src/db/repositories/sessions.ts
|
|
7340
7933
|
init_cjs_shims();
|
|
7341
7934
|
init_types2();
|
|
7342
|
-
var
|
|
7935
|
+
var import_drizzle_orm26 = require("drizzle-orm");
|
|
7343
7936
|
init_config_manager();
|
|
7344
7937
|
init_ids();
|
|
7345
7938
|
init_database_wrapper();
|
|
@@ -7347,7 +7940,7 @@ init_schema();
|
|
|
7347
7940
|
|
|
7348
7941
|
// src/db/repositories/session-relationships.ts
|
|
7349
7942
|
init_cjs_shims();
|
|
7350
|
-
var
|
|
7943
|
+
var import_drizzle_orm28 = require("drizzle-orm");
|
|
7351
7944
|
init_ids();
|
|
7352
7945
|
init_database_wrapper();
|
|
7353
7946
|
init_schema();
|
|
@@ -7355,7 +7948,7 @@ init_schema();
|
|
|
7355
7948
|
// src/db/repositories/tasks.ts
|
|
7356
7949
|
init_cjs_shims();
|
|
7357
7950
|
init_types2();
|
|
7358
|
-
var
|
|
7951
|
+
var import_drizzle_orm29 = require("drizzle-orm");
|
|
7359
7952
|
init_ids();
|
|
7360
7953
|
init_database_wrapper();
|
|
7361
7954
|
init_schema();
|
|
@@ -7363,30 +7956,31 @@ init_schema();
|
|
|
7363
7956
|
// src/db/repositories/thread-session-map.ts
|
|
7364
7957
|
init_cjs_shims();
|
|
7365
7958
|
init_types2();
|
|
7366
|
-
var
|
|
7959
|
+
var import_drizzle_orm30 = require("drizzle-orm");
|
|
7367
7960
|
init_ids();
|
|
7368
7961
|
init_database_wrapper();
|
|
7369
7962
|
init_schema();
|
|
7370
7963
|
|
|
7371
7964
|
// src/db/repositories/user-api-keys.ts
|
|
7372
7965
|
init_cjs_shims();
|
|
7373
|
-
var
|
|
7374
|
-
var
|
|
7375
|
-
var
|
|
7966
|
+
var import_node_crypto4 = require("crypto");
|
|
7967
|
+
var import_bcryptjs = __toESM(require("bcryptjs"), 1);
|
|
7968
|
+
var import_drizzle_orm31 = require("drizzle-orm");
|
|
7376
7969
|
init_ids();
|
|
7377
7970
|
init_database_wrapper();
|
|
7378
7971
|
init_schema();
|
|
7972
|
+
init_tenant_context();
|
|
7379
7973
|
|
|
7380
7974
|
// src/db/repositories/user-mcp-oauth-tokens.ts
|
|
7381
7975
|
init_cjs_shims();
|
|
7382
|
-
var
|
|
7976
|
+
var import_drizzle_orm32 = require("drizzle-orm");
|
|
7383
7977
|
init_database_wrapper();
|
|
7384
7978
|
init_schema();
|
|
7385
7979
|
|
|
7386
7980
|
// src/db/repositories/users.ts
|
|
7387
7981
|
init_cjs_shims();
|
|
7388
7982
|
init_types2();
|
|
7389
|
-
var
|
|
7983
|
+
var import_drizzle_orm33 = require("drizzle-orm");
|
|
7390
7984
|
init_ids();
|
|
7391
7985
|
init_database_wrapper();
|
|
7392
7986
|
init_schema();
|
|
@@ -7411,7 +8005,12 @@ var UsersRepository = class {
|
|
|
7411
8005
|
unix_username: row.unix_username ?? void 0,
|
|
7412
8006
|
onboarding_completed: row.onboarding_completed,
|
|
7413
8007
|
must_change_password: row.must_change_password,
|
|
8008
|
+
tokens_valid_after: row.tokens_valid_after ? new Date(row.tokens_valid_after) : void 0,
|
|
8009
|
+
avatar_url: row.data.avatar_url ?? row.data.avatar,
|
|
7414
8010
|
avatar: row.data.avatar,
|
|
8011
|
+
avatar_source: row.data.avatar_source,
|
|
8012
|
+
avatar_source_id: row.data.avatar_source_id,
|
|
8013
|
+
avatar_synced_at: row.data.avatar_synced_at,
|
|
7415
8014
|
preferences: row.data.preferences,
|
|
7416
8015
|
// Convert encrypted per-tool credential blobs into boolean presence flags.
|
|
7417
8016
|
agentic_tools: toAgenticToolsStatus(row.data.agentic_tools),
|
|
@@ -7455,8 +8054,14 @@ var UsersRepository = class {
|
|
|
7455
8054
|
role: user.role ?? "member",
|
|
7456
8055
|
unix_username: user.unix_username ?? null,
|
|
7457
8056
|
onboarding_completed: user.onboarding_completed ?? false,
|
|
8057
|
+
must_change_password: user.must_change_password ?? false,
|
|
8058
|
+
tokens_valid_after: user.tokens_valid_after ? new Date(user.tokens_valid_after) : null,
|
|
7458
8059
|
data: {
|
|
8060
|
+
avatar_url: user.avatar_url,
|
|
7459
8061
|
avatar: user.avatar,
|
|
8062
|
+
avatar_source: user.avatar_source,
|
|
8063
|
+
avatar_source_id: user.avatar_source_id,
|
|
8064
|
+
avatar_synced_at: user.avatar_synced_at,
|
|
7460
8065
|
preferences: user.preferences,
|
|
7461
8066
|
// Encrypted per-tool credentials. Only forwarded when caller passes the
|
|
7462
8067
|
// raw shape (internal credential mutators); regular updates leave it undefined,
|
|
@@ -7478,7 +8083,7 @@ var UsersRepository = class {
|
|
|
7478
8083
|
*/
|
|
7479
8084
|
async resolveId(id) {
|
|
7480
8085
|
return resolveByShortIdPrefix(id, "User", async (pattern) => {
|
|
7481
|
-
const rows = await select(this.db).from(users3).where((0,
|
|
8086
|
+
const rows = await select(this.db).from(users3).where((0, import_drizzle_orm33.like)(users3.user_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
|
|
7482
8087
|
return rows.map((r) => r.user_id);
|
|
7483
8088
|
});
|
|
7484
8089
|
}
|
|
@@ -7486,7 +8091,7 @@ var UsersRepository = class {
|
|
|
7486
8091
|
* Check if unix_username is already taken by another user
|
|
7487
8092
|
*/
|
|
7488
8093
|
async isUnixUsernameTaken(unixUsername, excludeUserId) {
|
|
7489
|
-
const result = await select(this.db).from(users3).where((0,
|
|
8094
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.unix_username, unixUsername)).one();
|
|
7490
8095
|
if (!result) {
|
|
7491
8096
|
return false;
|
|
7492
8097
|
}
|
|
@@ -7509,7 +8114,7 @@ var UsersRepository = class {
|
|
|
7509
8114
|
}
|
|
7510
8115
|
const insertData = this.userToInsert(data);
|
|
7511
8116
|
await insert(this.db, users3).values(insertData).run();
|
|
7512
|
-
const row = await select(this.db).from(users3).where((0,
|
|
8117
|
+
const row = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.user_id, insertData.user_id)).one();
|
|
7513
8118
|
if (!row) {
|
|
7514
8119
|
throw new RepositoryError("Failed to retrieve created user");
|
|
7515
8120
|
}
|
|
@@ -7521,7 +8126,7 @@ var UsersRepository = class {
|
|
|
7521
8126
|
async findById(id) {
|
|
7522
8127
|
try {
|
|
7523
8128
|
const fullId = await this.resolveId(id);
|
|
7524
|
-
const result = await select(this.db).from(users3).where((0,
|
|
8129
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).one();
|
|
7525
8130
|
if (!result) {
|
|
7526
8131
|
return null;
|
|
7527
8132
|
}
|
|
@@ -7537,7 +8142,7 @@ var UsersRepository = class {
|
|
|
7537
8142
|
* Find user by email
|
|
7538
8143
|
*/
|
|
7539
8144
|
async findByEmail(email) {
|
|
7540
|
-
const result = await select(this.db).from(users3).where((0,
|
|
8145
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.email, email)).one();
|
|
7541
8146
|
if (!result) {
|
|
7542
8147
|
return null;
|
|
7543
8148
|
}
|
|
@@ -7558,7 +8163,7 @@ var UsersRepository = class {
|
|
|
7558
8163
|
if (!normalizedEmail) return null;
|
|
7559
8164
|
const exact = await this.findByEmail(normalizedEmail);
|
|
7560
8165
|
if (exact) return exact;
|
|
7561
|
-
const results = await select(this.db).from(users3).where(
|
|
8166
|
+
const results = await select(this.db).from(users3).where(import_drizzle_orm33.sql`LOWER(${users3.email}) = ${normalizedEmail}`).all();
|
|
7562
8167
|
if (results.length !== 1) {
|
|
7563
8168
|
if (results.length > 1) {
|
|
7564
8169
|
console.warn(
|
|
@@ -7608,8 +8213,8 @@ var UsersRepository = class {
|
|
|
7608
8213
|
await update(this.db, users3).set({
|
|
7609
8214
|
...insertData,
|
|
7610
8215
|
updated_at: /* @__PURE__ */ new Date()
|
|
7611
|
-
}).where((0,
|
|
7612
|
-
const row = await select(this.db).from(users3).where((0,
|
|
8216
|
+
}).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).run();
|
|
8217
|
+
const row = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).one();
|
|
7613
8218
|
if (!row) {
|
|
7614
8219
|
throw new RepositoryError("Failed to retrieve updated user");
|
|
7615
8220
|
}
|
|
@@ -7620,7 +8225,7 @@ var UsersRepository = class {
|
|
|
7620
8225
|
*/
|
|
7621
8226
|
async delete(id) {
|
|
7622
8227
|
const fullId = await this.resolveId(id);
|
|
7623
|
-
await deleteFrom(this.db, users3).where((0,
|
|
8228
|
+
await deleteFrom(this.db, users3).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).run();
|
|
7624
8229
|
}
|
|
7625
8230
|
/**
|
|
7626
8231
|
* Get raw database row (internal use only - includes encrypted keys)
|
|
@@ -7628,7 +8233,7 @@ var UsersRepository = class {
|
|
|
7628
8233
|
async getRawRow(id) {
|
|
7629
8234
|
try {
|
|
7630
8235
|
const fullId = await this.resolveId(id);
|
|
7631
|
-
const result = await select(this.db).from(users3).where((0,
|
|
8236
|
+
const result = await select(this.db).from(users3).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).one();
|
|
7632
8237
|
return result;
|
|
7633
8238
|
} catch (error) {
|
|
7634
8239
|
if (error instanceof EntityNotFoundError) {
|
|
@@ -7710,7 +8315,7 @@ var UsersRepository = class {
|
|
|
7710
8315
|
await update(this.db, users3).set({
|
|
7711
8316
|
data: { ...row.data, agentic_tools: next },
|
|
7712
8317
|
updated_at: /* @__PURE__ */ new Date()
|
|
7713
|
-
}).where((0,
|
|
8318
|
+
}).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).run();
|
|
7714
8319
|
}
|
|
7715
8320
|
/**
|
|
7716
8321
|
* Delete a single credential field for a tool.
|
|
@@ -7736,134 +8341,14 @@ var UsersRepository = class {
|
|
|
7736
8341
|
await update(this.db, users3).set({
|
|
7737
8342
|
data: { ...row.data, agentic_tools: next },
|
|
7738
8343
|
updated_at: /* @__PURE__ */ new Date()
|
|
7739
|
-
}).where((0,
|
|
8344
|
+
}).where((0, import_drizzle_orm33.eq)(users3.user_id, fullId)).run();
|
|
7740
8345
|
}
|
|
7741
8346
|
};
|
|
7742
8347
|
|
|
7743
|
-
// src/db/index.ts
|
|
7744
|
-
init_schema();
|
|
7745
|
-
|
|
7746
|
-
// src/db/session-guard.ts
|
|
7747
|
-
init_cjs_shims();
|
|
7748
|
-
init_ids();
|
|
7749
|
-
|
|
7750
|
-
// src/db/index.ts
|
|
7751
|
-
init_user_utils();
|
|
7752
|
-
var compare = import_bcryptjs3.default.compare;
|
|
7753
|
-
var hash = import_bcryptjs3.default.hash;
|
|
7754
|
-
|
|
7755
|
-
// src/config/key-resolver.ts
|
|
7756
|
-
init_database_wrapper();
|
|
7757
|
-
init_schema();
|
|
7758
|
-
init_ids();
|
|
7759
|
-
init_config_manager();
|
|
7760
|
-
var DEBUG_KEY_RESOLUTION = process.env.AGOR_DEBUG_KEY_RESOLUTION === "1" || process.env.DEBUG?.includes("key-resolution");
|
|
7761
|
-
|
|
7762
|
-
// src/config/proxies-resolver.ts
|
|
7763
|
-
init_cjs_shims();
|
|
7764
|
-
|
|
7765
|
-
// src/config/repo-list.ts
|
|
7766
|
-
init_cjs_shims();
|
|
7767
|
-
|
|
7768
|
-
// src/config/repo-reference.ts
|
|
7769
|
-
init_cjs_shims();
|
|
7770
|
-
var REPO_SLUG_PATTERN = /^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/;
|
|
7771
|
-
|
|
7772
|
-
// src/config/resolved-config-slice.ts
|
|
7773
|
-
init_cjs_shims();
|
|
7774
|
-
var import_zod = require("zod");
|
|
7775
|
-
var ResolvedConfigSliceSchema = import_zod.z.object({
|
|
7776
|
-
/** From `config.execution.*` */
|
|
7777
|
-
execution: import_zod.z.object({
|
|
7778
|
-
permission_timeout_ms: import_zod.z.number().int().nonnegative().optional(),
|
|
7779
|
-
executor_heartbeat: import_zod.z.object({
|
|
7780
|
-
enabled: import_zod.z.boolean(),
|
|
7781
|
-
interval_ms: import_zod.z.number().int().positive()
|
|
7782
|
-
}).optional()
|
|
7783
|
-
}).optional(),
|
|
7784
|
-
/** From `config.opencode.*` */
|
|
7785
|
-
opencode: import_zod.z.object({
|
|
7786
|
-
serverUrl: import_zod.z.string().optional()
|
|
7787
|
-
}).optional(),
|
|
7788
|
-
/** From `config.daemon.*` (selected fields only) */
|
|
7789
|
-
daemon: import_zod.z.object({
|
|
7790
|
-
host_ip_address: import_zod.z.string().optional()
|
|
7791
|
-
}).optional()
|
|
7792
|
-
});
|
|
7793
|
-
|
|
7794
|
-
// src/config/resource-schemas.ts
|
|
7795
|
-
init_cjs_shims();
|
|
7796
|
-
var import_zod2 = require("zod");
|
|
7797
|
-
var uuidSchema = import_zod2.z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID");
|
|
7798
|
-
var repoSlugSchema = import_zod2.z.string().regex(
|
|
7799
|
-
REPO_SLUG_PATTERN,
|
|
7800
|
-
'Must be org/name format with alphanumeric, hyphens, underscores, or dots (e.g., "my-org/my-repo")'
|
|
7801
|
-
);
|
|
7802
|
-
var enforcedAgentConfigSchema = import_zod2.z.object({
|
|
7803
|
-
agentic_tool: import_zod2.z.enum(["claude-code", "claude-code-cli", "codex", "gemini", "opencode", "copilot", "cursor"]).optional(),
|
|
7804
|
-
permission_mode: import_zod2.z.string().optional(),
|
|
7805
|
-
model: import_zod2.z.string().optional(),
|
|
7806
|
-
mcp_server_ids: import_zod2.z.array(import_zod2.z.string()).optional()
|
|
7807
|
-
});
|
|
7808
|
-
var resourceRepoConfigSchema = import_zod2.z.object({
|
|
7809
|
-
repo_id: uuidSchema,
|
|
7810
|
-
slug: repoSlugSchema,
|
|
7811
|
-
remote_url: import_zod2.z.string().optional(),
|
|
7812
|
-
repo_type: import_zod2.z.enum(["remote", "local"]).default("remote"),
|
|
7813
|
-
default_branch: import_zod2.z.string().optional(),
|
|
7814
|
-
shallow: import_zod2.z.boolean().optional()
|
|
7815
|
-
}).refine((data) => data.repo_type !== "remote" || data.remote_url, {
|
|
7816
|
-
message: 'remote_url is required when repo_type is "remote"',
|
|
7817
|
-
path: ["remote_url"]
|
|
7818
|
-
});
|
|
7819
|
-
var resourceBranchConfigSchema = import_zod2.z.object({
|
|
7820
|
-
branch_id: uuidSchema,
|
|
7821
|
-
name: import_zod2.z.string().min(1, "Branch name is required"),
|
|
7822
|
-
ref: import_zod2.z.string().min(1, "Git ref is required"),
|
|
7823
|
-
ref_type: import_zod2.z.enum(["branch", "tag"]).optional(),
|
|
7824
|
-
others_can: import_zod2.z.enum(["none", "view", "session", "prompt", "all"]).optional(),
|
|
7825
|
-
mcp_server_ids: import_zod2.z.array(import_zod2.z.string()).optional(),
|
|
7826
|
-
repo: repoSlugSchema,
|
|
7827
|
-
readonly: import_zod2.z.boolean().optional(),
|
|
7828
|
-
agent: enforcedAgentConfigSchema.optional()
|
|
7829
|
-
});
|
|
7830
|
-
var resourceUserConfigSchema = import_zod2.z.object({
|
|
7831
|
-
user_id: uuidSchema,
|
|
7832
|
-
email: import_zod2.z.string().email("Must be a valid email address"),
|
|
7833
|
-
name: import_zod2.z.string().optional(),
|
|
7834
|
-
role: import_zod2.z.enum(["superadmin", "admin", "member", "viewer"]).default("member"),
|
|
7835
|
-
unix_username: import_zod2.z.string().optional(),
|
|
7836
|
-
password: import_zod2.z.string().optional()
|
|
7837
|
-
});
|
|
7838
|
-
var daemonResourcesConfigSchema = import_zod2.z.object({
|
|
7839
|
-
repos: import_zod2.z.array(resourceRepoConfigSchema).optional(),
|
|
7840
|
-
branches: import_zod2.z.array(resourceBranchConfigSchema).optional(),
|
|
7841
|
-
users: import_zod2.z.array(resourceUserConfigSchema).optional()
|
|
7842
|
-
});
|
|
7843
|
-
|
|
7844
|
-
// src/config/resource-sync.ts
|
|
7845
|
-
init_cjs_shims();
|
|
7846
|
-
|
|
7847
|
-
// src/config/security-resolver.ts
|
|
7848
|
-
init_cjs_shims();
|
|
7849
|
-
var DEFAULT_GIT_CONFIG_PARAMETERS = Object.freeze([
|
|
7850
|
-
"transfer.credentialsInUrl=die",
|
|
7851
|
-
"protocol.file.allow=user",
|
|
7852
|
-
"protocol.ext.allow=never",
|
|
7853
|
-
"core.protectHFS=true",
|
|
7854
|
-
"core.protectNTFS=true"
|
|
7855
|
-
]);
|
|
7856
|
-
|
|
7857
|
-
// src/config/index.ts
|
|
7858
|
-
init_types();
|
|
7859
|
-
|
|
7860
8348
|
// src/git/index.ts
|
|
8349
|
+
var git_exports = {};
|
|
7861
8350
|
init_cjs_shims();
|
|
7862
|
-
|
|
7863
|
-
var import_promises2 = require("fs/promises");
|
|
7864
|
-
var import_node_path4 = require("path");
|
|
7865
|
-
var import_simple_git = require("simple-git");
|
|
7866
|
-
init_config_manager();
|
|
8351
|
+
__reExport(git_exports, require("@agor/git"));
|
|
7867
8352
|
|
|
7868
8353
|
// src/unix/run-as-user.ts
|
|
7869
8354
|
init_cjs_shims();
|
|
@@ -8219,116 +8704,13 @@ function buildSpawnArgs(command, args = [], options) {
|
|
|
8219
8704
|
};
|
|
8220
8705
|
}
|
|
8221
8706
|
|
|
8222
|
-
// src/git/index.ts
|
|
8223
|
-
init_config_manager();
|
|
8224
|
-
var cachedGitBinary;
|
|
8225
|
-
function getGitBinary() {
|
|
8226
|
-
if (cachedGitBinary !== void 0) return cachedGitBinary;
|
|
8227
|
-
const commonPaths = [
|
|
8228
|
-
"/opt/homebrew/bin/git",
|
|
8229
|
-
// Homebrew on Apple Silicon
|
|
8230
|
-
"/usr/local/bin/git",
|
|
8231
|
-
// Homebrew on Intel
|
|
8232
|
-
"/usr/bin/git"
|
|
8233
|
-
// System git (Docker and Linux)
|
|
8234
|
-
];
|
|
8235
|
-
for (const path2 of commonPaths) {
|
|
8236
|
-
if ((0, import_node_fs3.existsSync)(path2)) {
|
|
8237
|
-
cachedGitBinary = path2;
|
|
8238
|
-
return path2;
|
|
8239
|
-
}
|
|
8240
|
-
}
|
|
8241
|
-
cachedGitBinary = "git";
|
|
8242
|
-
return cachedGitBinary;
|
|
8243
|
-
}
|
|
8244
|
-
function isLikelyGitToken(token) {
|
|
8245
|
-
return /^[A-Za-z0-9_-]{20,255}$/.test(token);
|
|
8246
|
-
}
|
|
8247
|
-
var DEFAULT_AUTH_HEADER_HOST = "github.com";
|
|
8248
|
-
function buildGitConfigEnv(entries) {
|
|
8249
|
-
if (entries.length === 0) return {};
|
|
8250
|
-
const out = {
|
|
8251
|
-
GIT_CONFIG_COUNT: String(entries.length)
|
|
8252
|
-
};
|
|
8253
|
-
for (let i = 0; i < entries.length; i++) {
|
|
8254
|
-
const [key, value] = entries[i];
|
|
8255
|
-
out[`GIT_CONFIG_KEY_${i}`] = key;
|
|
8256
|
-
out[`GIT_CONFIG_VALUE_${i}`] = value;
|
|
8257
|
-
}
|
|
8258
|
-
return out;
|
|
8259
|
-
}
|
|
8260
|
-
function buildAuthHeaderEnv(token, host = DEFAULT_AUTH_HEADER_HOST) {
|
|
8261
|
-
if (!token) return [];
|
|
8262
|
-
if (!isLikelyGitToken(token)) {
|
|
8263
|
-
console.warn(
|
|
8264
|
-
"\u{1F511} Skipping http.extraheader: token does not match expected shape. Tokens must match /^[A-Za-z0-9_-]{20,255}$/. Re-save the token to enable the auth header."
|
|
8265
|
-
);
|
|
8266
|
-
return [];
|
|
8267
|
-
}
|
|
8268
|
-
const credential = Buffer.from(`x-access-token:${token}`, "utf8").toString("base64");
|
|
8269
|
-
const key = `http.https://${host}/.extraheader`;
|
|
8270
|
-
return [[key, `Authorization: Basic ${credential}`]];
|
|
8271
|
-
}
|
|
8272
|
-
function createGit(baseDir, env, authHost) {
|
|
8273
|
-
const gitBinary = getGitBinary();
|
|
8274
|
-
const config = [];
|
|
8275
|
-
const rawToken = env?.GITHUB_TOKEN ?? env?.GH_TOKEN;
|
|
8276
|
-
const authConfigEntries = buildAuthHeaderEnv(rawToken, authHost ?? DEFAULT_AUTH_HEADER_HOST);
|
|
8277
|
-
let spawnEnv;
|
|
8278
|
-
if (env || authConfigEntries.length > 0) {
|
|
8279
|
-
spawnEnv = {
|
|
8280
|
-
...process.env,
|
|
8281
|
-
...env ?? {},
|
|
8282
|
-
// Inheritance kill (GLOBAL only): ignore the daemon user's
|
|
8283
|
-
// ~/.gitconfig. /etc/gitconfig is intentionally NOT killed — it is
|
|
8284
|
-
// admin-policy territory (CA bundles, proxies). See block comment.
|
|
8285
|
-
GIT_CONFIG_GLOBAL: "/dev/null",
|
|
8286
|
-
// Fail fast instead of blocking on an interactive credential prompt
|
|
8287
|
-
// (which would hang the daemon).
|
|
8288
|
-
GIT_TERMINAL_PROMPT: "0",
|
|
8289
|
-
// Inject http.extraheader (and any future server-constructed config)
|
|
8290
|
-
// via the env-var protocol so it never lands on argv.
|
|
8291
|
-
...buildGitConfigEnv(authConfigEntries)
|
|
8292
|
-
};
|
|
8293
|
-
}
|
|
8294
|
-
const git = (0, import_simple_git.simpleGit)({
|
|
8295
|
-
baseDir,
|
|
8296
|
-
binary: gitBinary,
|
|
8297
|
-
config,
|
|
8298
|
-
unsafe: {
|
|
8299
|
-
// simple-git's scanner blocks spawning when these env vars / config keys
|
|
8300
|
-
// are present. We own the daemon env (in strict mode it's the user's own
|
|
8301
|
-
// env) and inject GIT_CONFIG_* ourselves — opting in here mirrors what a
|
|
8302
|
-
// direct `git` invocation on the same machine does.
|
|
8303
|
-
allowUnsafeSshCommand: true,
|
|
8304
|
-
allowUnsafeConfigPaths: true,
|
|
8305
|
-
allowUnsafeConfigEnvCount: true,
|
|
8306
|
-
allowUnsafeEditor: true,
|
|
8307
|
-
allowUnsafeAskPass: true,
|
|
8308
|
-
allowUnsafePager: true,
|
|
8309
|
-
allowUnsafeGitProxy: true,
|
|
8310
|
-
allowUnsafeTemplateDir: true,
|
|
8311
|
-
allowUnsafeDiffExternal: true
|
|
8312
|
-
}
|
|
8313
|
-
});
|
|
8314
|
-
if (spawnEnv) {
|
|
8315
|
-
git.env(spawnEnv);
|
|
8316
|
-
}
|
|
8317
|
-
return { git };
|
|
8318
|
-
}
|
|
8319
|
-
async function getCurrentSha(repoPath) {
|
|
8320
|
-
const { git } = createGit(repoPath);
|
|
8321
|
-
const log = await git.log({ maxCount: 1 });
|
|
8322
|
-
return log.latest?.hash || "";
|
|
8323
|
-
}
|
|
8324
|
-
|
|
8325
8707
|
// src/unix/user-env-file.ts
|
|
8326
8708
|
init_cjs_shims();
|
|
8327
8709
|
var import_node_child_process4 = require("child_process");
|
|
8328
|
-
var
|
|
8329
|
-
var
|
|
8330
|
-
var
|
|
8331
|
-
var
|
|
8710
|
+
var import_node_crypto5 = require("crypto");
|
|
8711
|
+
var import_node_fs3 = require("fs");
|
|
8712
|
+
var import_node_os2 = require("os");
|
|
8713
|
+
var import_node_path2 = require("path");
|
|
8332
8714
|
|
|
8333
8715
|
// src/unix/secret-env.ts
|
|
8334
8716
|
init_cjs_shims();
|
|
@@ -8370,8 +8752,8 @@ function writeUserEnvFile(asUser, env) {
|
|
|
8370
8752
|
if (!isValidUnixUsername(asUser)) {
|
|
8371
8753
|
throw new Error(`writeUserEnvFile: invalid Unix username: ${JSON.stringify(asUser)}`);
|
|
8372
8754
|
}
|
|
8373
|
-
const nonce = (0,
|
|
8374
|
-
const envFilePath = (0,
|
|
8755
|
+
const nonce = (0, import_node_crypto5.randomBytes)(16).toString("hex");
|
|
8756
|
+
const envFilePath = (0, import_node_path2.join)((0, import_node_os2.tmpdir)(), `${ENV_FILE_PREFIX}${nonce}`);
|
|
8375
8757
|
const lines = [];
|
|
8376
8758
|
for (const [key, value] of Object.entries(env)) {
|
|
8377
8759
|
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
|
|
@@ -8391,7 +8773,7 @@ function writeUserEnvFile(asUser, env) {
|
|
|
8391
8773
|
}
|
|
8392
8774
|
function tryUnlinkEnvFile(path2) {
|
|
8393
8775
|
try {
|
|
8394
|
-
(0,
|
|
8776
|
+
(0, import_node_fs3.unlinkSync)(path2);
|
|
8395
8777
|
} catch {
|
|
8396
8778
|
}
|
|
8397
8779
|
}
|
|
@@ -8437,7 +8819,7 @@ function prepareImpersonationEnv(options) {
|
|
|
8437
8819
|
// src/unix/environment-command-spawn.ts
|
|
8438
8820
|
async function captureBranchBuildSha(branchPath2) {
|
|
8439
8821
|
try {
|
|
8440
|
-
const sha = await getCurrentSha(branchPath2);
|
|
8822
|
+
const sha = await (0, git_exports.getCurrentSha)(branchPath2);
|
|
8441
8823
|
return sha ? sha.slice(0, 7) : void 0;
|
|
8442
8824
|
} catch {
|
|
8443
8825
|
return void 0;
|
|
@@ -8736,7 +9118,7 @@ var REPO_GIT_PERMISSION_MODE = "2770";
|
|
|
8736
9118
|
// src/unix/id-lookups.ts
|
|
8737
9119
|
init_cjs_shims();
|
|
8738
9120
|
var import_node_child_process6 = require("child_process");
|
|
8739
|
-
var
|
|
9121
|
+
var import_node_fs4 = __toESM(require("fs"), 1);
|
|
8740
9122
|
function getGidFromGroupName(groupName) {
|
|
8741
9123
|
if (!groupName) {
|
|
8742
9124
|
return void 0;
|
|
@@ -8757,8 +9139,8 @@ function getGidFromGroupName(groupName) {
|
|
|
8757
9139
|
}
|
|
8758
9140
|
} catch {
|
|
8759
9141
|
}
|
|
8760
|
-
if (
|
|
8761
|
-
const groupFile =
|
|
9142
|
+
if (import_node_fs4.default.existsSync("/etc/group")) {
|
|
9143
|
+
const groupFile = import_node_fs4.default.readFileSync("/etc/group", "utf-8");
|
|
8762
9144
|
const line = groupFile.split("\n").find((l) => l.startsWith(`${groupName}:`));
|
|
8763
9145
|
if (line) {
|
|
8764
9146
|
const parts = line.split(":");
|
|
@@ -8812,8 +9194,8 @@ function getUidFromUsername(username) {
|
|
|
8812
9194
|
}
|
|
8813
9195
|
} catch {
|
|
8814
9196
|
}
|
|
8815
|
-
if (
|
|
8816
|
-
const passwdFile =
|
|
9197
|
+
if (import_node_fs4.default.existsSync("/etc/passwd")) {
|
|
9198
|
+
const passwdFile = import_node_fs4.default.readFileSync("/etc/passwd", "utf-8");
|
|
8817
9199
|
const line = passwdFile.split("\n").find((l) => l.startsWith(`${username}:`));
|
|
8818
9200
|
if (line) {
|
|
8819
9201
|
const parts = line.split(":");
|
|
@@ -8852,8 +9234,8 @@ function getHomedirFromUsername(username) {
|
|
|
8852
9234
|
}
|
|
8853
9235
|
} catch {
|
|
8854
9236
|
}
|
|
8855
|
-
if (
|
|
8856
|
-
const passwdFile =
|
|
9237
|
+
if (import_node_fs4.default.existsSync("/etc/passwd")) {
|
|
9238
|
+
const passwdFile = import_node_fs4.default.readFileSync("/etc/passwd", "utf-8");
|
|
8857
9239
|
const line = passwdFile.split("\n").find((l) => l.startsWith(`${username}:`));
|
|
8858
9240
|
if (line) {
|
|
8859
9241
|
const parts = line.split(":");
|