devchain-cli 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/build-info.json +2 -2
- package/dist/cli.js +34 -76
- package/dist/drizzle/0094_agent_worktree_lanes.sql +20 -0
- package/dist/drizzle/meta/0094_snapshot.json +7810 -0
- package/dist/drizzle/meta/_journal.json +7 -0
- package/dist/host-cli-pins.json +1 -1
- package/dist/host-install/devchain-host-bootstrap.tgz +0 -0
- package/dist/host-install/pins.json +2 -1
- package/dist/lib/git-owner.js +30 -205
- package/dist/lib/git-shim.js +417 -0
- package/dist/lib/git-supervisor.js +289 -0
- package/dist/lib/host-api-key.js +75 -19
- package/dist/lib/local-api.js +4 -2
- package/dist/lib/local-app-process.js +77 -0
- package/dist/node_modules/@devchain/shared/index.d.ts +1 -0
- package/dist/node_modules/@devchain/shared/index.d.ts.map +1 -1
- package/dist/node_modules/@devchain/shared/index.js +1 -0
- package/dist/node_modules/@devchain/shared/index.js.map +1 -1
- package/dist/node_modules/@devchain/shared/mobile-rpc-contract/index.d.ts +510 -5
- package/dist/node_modules/@devchain/shared/mobile-rpc-contract/index.d.ts.map +1 -1
- package/dist/node_modules/@devchain/shared/mobile-rpc-contract/index.js +55 -0
- package/dist/node_modules/@devchain/shared/mobile-rpc-contract/index.js.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/index.d.ts +1 -0
- package/dist/node_modules/@devchain/shared/schemas/index.d.ts.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/index.js +1 -0
- package/dist/node_modules/@devchain/shared/schemas/index.js.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/provider-clis.js +1 -1
- package/dist/node_modules/@devchain/shared/schemas/provider-clis.js.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/provider-usage.d.ts +350 -0
- package/dist/node_modules/@devchain/shared/schemas/provider-usage.d.ts.map +1 -0
- package/dist/node_modules/@devchain/shared/schemas/provider-usage.js +71 -0
- package/dist/node_modules/@devchain/shared/schemas/provider-usage.js.map +1 -0
- package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
- package/dist/server/app.module.js +4 -0
- package/dist/server/app.module.js.map +1 -1
- package/dist/server/common/config/env.config.d.ts +3 -0
- package/dist/server/common/config/env.config.js +1 -0
- package/dist/server/common/config/env.config.js.map +1 -1
- package/dist/server/common/config/host-image.json +3 -3
- package/dist/server/common/config/vm-destroy-fence.d.ts +18 -0
- package/dist/server/common/config/vm-destroy-fence.js +38 -0
- package/dist/server/common/config/vm-destroy-fence.js.map +1 -0
- package/dist/server/common/errors/error-types.d.ts +3 -0
- package/dist/server/common/errors/error-types.js +10 -1
- package/dist/server/common/errors/error-types.js.map +1 -1
- package/dist/server/common/git-shim-paths.d.ts +4 -0
- package/dist/server/common/git-shim-paths.js +24 -0
- package/dist/server/common/git-shim-paths.js.map +1 -0
- package/dist/server/common/test/fake-bootstrap.server.d.ts +5 -0
- package/dist/server/common/test/fake-bootstrap.server.js +12 -3
- package/dist/server/common/test/fake-bootstrap.server.js.map +1 -1
- package/dist/server/common/test/shared-vm.stub.d.ts +2 -0
- package/dist/server/common/test/shared-vm.stub.js +13 -0
- package/dist/server/common/test/shared-vm.stub.js.map +1 -0
- package/dist/server/main.js +2 -0
- package/dist/server/main.js.map +1 -1
- package/dist/server/modules/cloud-tunnel/cloud-tunnel.module.js +2 -0
- package/dist/server/modules/cloud-tunnel/cloud-tunnel.module.js.map +1 -1
- package/dist/server/modules/cloud-tunnel/services/mobile-chat-rpc.service.d.ts +5 -1
- package/dist/server/modules/cloud-tunnel/services/mobile-chat-rpc.service.js +11 -2
- package/dist/server/modules/cloud-tunnel/services/mobile-chat-rpc.service.js.map +1 -1
- package/dist/server/modules/cloud-tunnel/services/mobile-rpc-contract.generated.d.ts +506 -1
- package/dist/server/modules/cloud-tunnel/services/mobile-rpc-contract.generated.js +56 -1
- package/dist/server/modules/cloud-tunnel/services/mobile-rpc-contract.generated.js.map +1 -1
- package/dist/server/modules/cloud-tunnel/services/mobile-rpc-workspace-access.service.d.ts +1 -0
- package/dist/server/modules/cloud-tunnel/services/mobile-rpc-workspace-access.service.js +1 -0
- package/dist/server/modules/cloud-tunnel/services/mobile-rpc-workspace-access.service.js.map +1 -1
- package/dist/server/modules/cloud-tunnel/services/tunnel-handler.service.js +1 -0
- package/dist/server/modules/cloud-tunnel/services/tunnel-handler.service.js.map +1 -1
- package/dist/server/modules/events/catalog/broadcast-registry.js +8 -0
- package/dist/server/modules/events/catalog/broadcast-registry.js.map +1 -1
- package/dist/server/modules/events/catalog/index.d.ts +18 -11
- package/dist/server/modules/events/catalog/index.js +3 -0
- package/dist/server/modules/events/catalog/index.js.map +1 -1
- package/dist/server/modules/events/catalog/provider-usage.updated.d.ts +12 -0
- package/dist/server/modules/events/catalog/provider-usage.updated.js +13 -0
- package/dist/server/modules/events/catalog/provider-usage.updated.js.map +1 -0
- package/dist/server/modules/events/catalog/review.comment.created.d.ts +2 -2
- package/dist/server/modules/events/catalog/review.created.d.ts +8 -8
- package/dist/server/modules/file-sync/file-sync.dto.d.ts +18 -0
- package/dist/server/modules/file-sync/file-sync.dto.js +12 -2
- package/dist/server/modules/file-sync/file-sync.dto.js.map +1 -1
- package/dist/server/modules/file-sync/file-sync.module.js +17 -2
- package/dist/server/modules/file-sync/file-sync.module.js.map +1 -1
- package/dist/server/modules/file-sync/file-sync.service.d.ts +4 -0
- package/dist/server/modules/file-sync/file-sync.service.js +35 -0
- package/dist/server/modules/file-sync/file-sync.service.js.map +1 -1
- package/dist/server/modules/file-sync/git-guard.dto.d.ts +0 -21
- package/dist/server/modules/file-sync/git-guard.dto.js +1 -7
- package/dist/server/modules/file-sync/git-guard.dto.js.map +1 -1
- package/dist/server/modules/file-sync/home-git-guard.service.d.ts +3 -0
- package/dist/server/modules/file-sync/home-git-guard.service.js +128 -22
- package/dist/server/modules/file-sync/home-git-guard.service.js.map +1 -1
- package/dist/server/modules/file-sync/host-git-guard.controller.d.ts +3 -1
- package/dist/server/modules/file-sync/host-git-guard.controller.js +11 -5
- package/dist/server/modules/file-sync/host-git-guard.controller.js.map +1 -1
- package/dist/server/modules/file-sync/host-sync.controller.d.ts +11 -7
- package/dist/server/modules/file-sync/host-sync.controller.js +53 -20
- package/dist/server/modules/file-sync/host-sync.controller.js.map +1 -1
- package/dist/server/modules/file-sync/syncthing-launcher.d.ts +1 -0
- package/dist/server/modules/file-sync/syncthing-launcher.js +2 -1
- package/dist/server/modules/file-sync/syncthing-launcher.js.map +1 -1
- package/dist/server/modules/file-sync/testing/fake-file-sync.service.d.ts +2 -1
- package/dist/server/modules/file-sync/testing/fake-file-sync.service.js +6 -0
- package/dist/server/modules/file-sync/testing/fake-file-sync.service.js.map +1 -1
- package/dist/server/modules/git/dtos/git.dto.d.ts +4 -4
- package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +95 -1
- package/dist/server/modules/mcp/dtos/mcp.dto.js +45 -2
- package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
- package/dist/server/modules/mcp/mcp-full.module.js +2 -0
- package/dist/server/modules/mcp/mcp-full.module.js.map +1 -1
- package/dist/server/modules/mcp/services/handlers/epic-context.d.ts +2 -2
- package/dist/server/modules/mcp/services/handlers/epic-tools.js +16 -0
- package/dist/server/modules/mcp/services/handlers/epic-tools.js.map +1 -1
- package/dist/server/modules/mcp/services/handlers/teams-tools.d.ts +1 -0
- package/dist/server/modules/mcp/services/handlers/teams-tools.js +51 -0
- package/dist/server/modules/mcp/services/handlers/teams-tools.js.map +1 -1
- package/dist/server/modules/mcp/services/handlers/worktree-context.d.ts +6 -0
- package/dist/server/modules/mcp/services/handlers/worktree-context.js +3 -0
- package/dist/server/modules/mcp/services/handlers/worktree-context.js.map +1 -0
- package/dist/server/modules/mcp/services/handlers/worktree-tools.d.ts +7 -0
- package/dist/server/modules/mcp/services/handlers/worktree-tools.js +77 -0
- package/dist/server/modules/mcp/services/handlers/worktree-tools.js.map +1 -0
- package/dist/server/modules/mcp/services/mcp-tool-binding.registry.d.ts +2 -1
- package/dist/server/modules/mcp/services/mcp-tool-binding.registry.js +6 -2
- package/dist/server/modules/mcp/services/mcp-tool-binding.registry.js.map +1 -1
- package/dist/server/modules/mcp/tool-descriptors/binding-types.d.ts +4 -2
- package/dist/server/modules/mcp/tool-descriptors/binding-types.js.map +1 -1
- package/dist/server/modules/mcp/tool-descriptors/epic.metadata.js +2 -2
- package/dist/server/modules/mcp/tool-descriptors/epic.metadata.js.map +1 -1
- package/dist/server/modules/mcp/tool-descriptors/index.js +2 -0
- package/dist/server/modules/mcp/tool-descriptors/index.js.map +1 -1
- package/dist/server/modules/mcp/tool-descriptors/runtime-bindings.js +2 -0
- package/dist/server/modules/mcp/tool-descriptors/runtime-bindings.js.map +1 -1
- package/dist/server/modules/mcp/tool-descriptors/team.bindings.js +1 -0
- package/dist/server/modules/mcp/tool-descriptors/team.bindings.js.map +1 -1
- package/dist/server/modules/mcp/tool-descriptors/team.metadata.js +33 -0
- package/dist/server/modules/mcp/tool-descriptors/team.metadata.js.map +1 -1
- package/dist/server/modules/mcp/tool-descriptors/worktree.bindings.d.ts +1 -0
- package/dist/server/modules/mcp/tool-descriptors/worktree.bindings.js +20 -0
- package/dist/server/modules/mcp/tool-descriptors/worktree.bindings.js.map +1 -0
- package/dist/server/modules/mcp/tool-descriptors/worktree.metadata.d.ts +2 -0
- package/dist/server/modules/mcp/tool-descriptors/worktree.metadata.js +105 -0
- package/dist/server/modules/mcp/tool-descriptors/worktree.metadata.js.map +1 -0
- package/dist/server/modules/provider-auth/opencode-credential-family.v2.d.ts +4 -0
- package/dist/server/modules/provider-auth/opencode-credential-family.v2.js +41 -0
- package/dist/server/modules/provider-auth/opencode-credential-family.v2.js.map +1 -0
- package/dist/server/modules/provider-auth/opencode-credentials.d.ts +25 -0
- package/dist/server/modules/provider-auth/opencode-credentials.js +102 -0
- package/dist/server/modules/provider-auth/opencode-credentials.js.map +1 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.service.d.ts +11 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.service.js +62 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.service.js.map +1 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.v1.d.ts +1 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.v1.js +25 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.v1.js.map +1 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.v2.d.ts +3 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.v2.js +25 -0
- package/dist/server/modules/provider-auth/opencode-pc-logins.v2.js.map +1 -0
- package/dist/server/modules/provider-auth/provider-auth-adapters.d.ts +4 -1
- package/dist/server/modules/provider-auth/provider-auth-adapters.js +65 -33
- package/dist/server/modules/provider-auth/provider-auth-adapters.js.map +1 -1
- package/dist/server/modules/provider-auth/provider-auth-generator.service.d.ts +3 -1
- package/dist/server/modules/provider-auth/provider-auth-generator.service.js +12 -6
- package/dist/server/modules/provider-auth/provider-auth-generator.service.js.map +1 -1
- package/dist/server/modules/provider-auth/provider-auth-vault.service.d.ts +3 -2
- package/dist/server/modules/provider-auth/provider-auth-vault.service.js +8 -25
- package/dist/server/modules/provider-auth/provider-auth-vault.service.js.map +1 -1
- package/dist/server/modules/provider-auth/provider-auth-watcher.service.d.ts +5 -1
- package/dist/server/modules/provider-auth/provider-auth-watcher.service.js +32 -1
- package/dist/server/modules/provider-auth/provider-auth-watcher.service.js.map +1 -1
- package/dist/server/modules/provider-auth/provider-auth.module.js +4 -0
- package/dist/server/modules/provider-auth/provider-auth.module.js.map +1 -1
- package/dist/server/modules/provider-usage/checkers/agy.checker.d.ts +15 -0
- package/dist/server/modules/provider-usage/checkers/agy.checker.js +129 -0
- package/dist/server/modules/provider-usage/checkers/agy.checker.js.map +1 -0
- package/dist/server/modules/provider-usage/checkers/checker-helpers.d.ts +4 -0
- package/dist/server/modules/provider-usage/checkers/checker-helpers.js +12 -0
- package/dist/server/modules/provider-usage/checkers/checker-helpers.js.map +1 -0
- package/dist/server/modules/provider-usage/checkers/claude-login.checker.d.ts +10 -0
- package/dist/server/modules/provider-usage/checkers/claude-login.checker.js +92 -0
- package/dist/server/modules/provider-usage/checkers/claude-login.checker.js.map +1 -0
- package/dist/server/modules/provider-usage/checkers/claude-token.checker.d.ts +5 -0
- package/dist/server/modules/provider-usage/checkers/claude-token.checker.js +80 -0
- package/dist/server/modules/provider-usage/checkers/claude-token.checker.js.map +1 -0
- package/dist/server/modules/provider-usage/checkers/claude-usage-parser.d.ts +12 -0
- package/dist/server/modules/provider-usage/checkers/claude-usage-parser.js +113 -0
- package/dist/server/modules/provider-usage/checkers/claude-usage-parser.js.map +1 -0
- package/dist/server/modules/provider-usage/checkers/codex.checker.d.ts +7 -0
- package/dist/server/modules/provider-usage/checkers/codex.checker.js +159 -0
- package/dist/server/modules/provider-usage/checkers/codex.checker.js.map +1 -0
- package/dist/server/modules/provider-usage/checkers/private-cwd.d.ts +1 -0
- package/dist/server/modules/provider-usage/checkers/private-cwd.js +8 -0
- package/dist/server/modules/provider-usage/checkers/private-cwd.js.map +1 -0
- package/dist/server/modules/provider-usage/controllers/provider-usage.controller.d.ts +7 -0
- package/dist/server/modules/provider-usage/controllers/provider-usage.controller.js +51 -0
- package/dist/server/modules/provider-usage/controllers/provider-usage.controller.js.map +1 -0
- package/dist/server/modules/provider-usage/provider-usage.module.d.ts +2 -0
- package/dist/server/modules/provider-usage/provider-usage.module.js +58 -0
- package/dist/server/modules/provider-usage/provider-usage.module.js.map +1 -0
- package/dist/server/modules/provider-usage/provider-usage.types.d.ts +26 -0
- package/dist/server/modules/provider-usage/provider-usage.types.js +5 -0
- package/dist/server/modules/provider-usage/provider-usage.types.js.map +1 -0
- package/dist/server/modules/provider-usage/services/provider-usage-accounts.d.ts +5 -0
- package/dist/server/modules/provider-usage/services/provider-usage-accounts.js +94 -0
- package/dist/server/modules/provider-usage/services/provider-usage-accounts.js.map +1 -0
- package/dist/server/modules/provider-usage/services/provider-usage-accounts.service.d.ts +23 -0
- package/dist/server/modules/provider-usage/services/provider-usage-accounts.service.js +81 -0
- package/dist/server/modules/provider-usage/services/provider-usage-accounts.service.js.map +1 -0
- package/dist/server/modules/provider-usage/services/provider-usage.service.d.ts +37 -0
- package/dist/server/modules/provider-usage/services/provider-usage.service.js +262 -0
- package/dist/server/modules/provider-usage/services/provider-usage.service.js.map +1 -0
- package/dist/server/modules/providers/adapters/capabilities/index.d.ts +2 -2
- package/dist/server/modules/providers/adapters/capabilities/index.js +2 -1
- package/dist/server/modules/providers/adapters/capabilities/index.js.map +1 -1
- package/dist/server/modules/providers/adapters/capabilities/provider-plugin.capability.d.ts +16 -2
- package/dist/server/modules/providers/adapters/capabilities/session-command.capability.d.ts +5 -0
- package/dist/server/modules/providers/adapters/capabilities/session-command.capability.js +3 -0
- package/dist/server/modules/providers/adapters/capabilities/session-command.capability.js.map +1 -0
- package/dist/server/modules/providers/adapters/capabilities/type-guards.d.ts +4 -1
- package/dist/server/modules/providers/adapters/capabilities/type-guards.js +5 -3
- package/dist/server/modules/providers/adapters/capabilities/type-guards.js.map +1 -1
- package/dist/server/modules/providers/adapters/claude.adapter.d.ts +6 -3
- package/dist/server/modules/providers/adapters/claude.adapter.js +7 -2
- package/dist/server/modules/providers/adapters/claude.adapter.js.map +1 -1
- package/dist/server/modules/providers/adapters/codex.adapter.d.ts +6 -6
- package/dist/server/modules/providers/adapters/codex.adapter.js +47 -41
- package/dist/server/modules/providers/adapters/codex.adapter.js.map +1 -1
- package/dist/server/modules/providers/adapters/opencode-cli-version.d.ts +13 -0
- package/dist/server/modules/providers/adapters/opencode-cli-version.js +24 -0
- package/dist/server/modules/providers/adapters/opencode-cli-version.js.map +1 -0
- package/dist/server/modules/providers/adapters/opencode-config-content.d.ts +1 -0
- package/dist/server/modules/providers/adapters/opencode-config-content.js +43 -0
- package/dist/server/modules/providers/adapters/opencode-config-content.js.map +1 -0
- package/dist/server/modules/providers/adapters/opencode-launch.v1.d.ts +4 -0
- package/dist/server/modules/providers/adapters/opencode-launch.v1.js +10 -0
- package/dist/server/modules/providers/adapters/opencode-launch.v1.js.map +1 -0
- package/dist/server/modules/providers/adapters/opencode-launch.v2.d.ts +2 -0
- package/dist/server/modules/providers/adapters/opencode-launch.v2.js +18 -0
- package/dist/server/modules/providers/adapters/opencode-launch.v2.js.map +1 -0
- package/dist/server/modules/providers/adapters/opencode.adapter.d.ts +3 -4
- package/dist/server/modules/providers/adapters/opencode.adapter.js +11 -42
- package/dist/server/modules/providers/adapters/opencode.adapter.js.map +1 -1
- package/dist/server/modules/providers/adapters/plugin-catalog.utils.d.ts +3 -0
- package/dist/server/modules/providers/adapters/plugin-catalog.utils.js +10 -0
- package/dist/server/modules/providers/adapters/plugin-catalog.utils.js.map +1 -1
- package/dist/server/modules/providers/adapters/provider-adapter.interface.d.ts +9 -3
- package/dist/server/modules/providers/adapters/provider-cli-policy.d.ts +3 -0
- package/dist/server/modules/providers/adapters/provider-cli-policy.js +8 -0
- package/dist/server/modules/providers/adapters/provider-cli-policy.js.map +1 -1
- package/dist/server/modules/providers/controllers/provider-models.controller.d.ts +3 -1
- package/dist/server/modules/providers/controllers/provider-models.controller.js +18 -3
- package/dist/server/modules/providers/controllers/provider-models.controller.js.map +1 -1
- package/dist/server/modules/providers/providers.module.js +5 -0
- package/dist/server/modules/providers/providers.module.js.map +1 -1
- package/dist/server/modules/providers/services/codex-app-server.client.d.ts +11 -0
- package/dist/server/modules/providers/services/codex-app-server.client.js +129 -0
- package/dist/server/modules/providers/services/codex-app-server.client.js.map +1 -0
- package/dist/server/modules/providers/services/provider-cli-version-probe.module.d.ts +2 -0
- package/dist/server/modules/providers/services/provider-cli-version-probe.module.js +23 -0
- package/dist/server/modules/providers/services/provider-cli-version-probe.module.js.map +1 -0
- package/dist/server/modules/providers/services/provider-cli-version-probe.service.d.ts +8 -0
- package/dist/server/modules/providers/services/provider-cli-version-probe.service.js +65 -0
- package/dist/server/modules/providers/services/provider-cli-version-probe.service.js.map +1 -0
- package/dist/server/modules/providers/services/provider-plugins.service.d.ts +5 -1
- package/dist/server/modules/providers/services/provider-plugins.service.js +43 -16
- package/dist/server/modules/providers/services/provider-plugins.service.js.map +1 -1
- package/dist/server/modules/providers/utils/codex-config.d.ts +9 -0
- package/dist/server/modules/providers/utils/codex-config.js +34 -16
- package/dist/server/modules/providers/utils/codex-config.js.map +1 -1
- package/dist/server/modules/providers/utils/private-cwd.d.ts +1 -0
- package/dist/server/modules/providers/utils/private-cwd.js +12 -0
- package/dist/server/modules/providers/utils/private-cwd.js.map +1 -0
- package/dist/server/modules/remotes/contract/host-routes.d.ts +2180 -35
- package/dist/server/modules/remotes/contract/host-routes.js +168 -16
- package/dist/server/modules/remotes/contract/host-routes.js.map +1 -1
- package/dist/server/modules/remotes/controllers/home-shared-vm-notices.controller.d.ts +10 -0
- package/dist/server/modules/remotes/controllers/home-shared-vm-notices.controller.js +59 -0
- package/dist/server/modules/remotes/controllers/home-shared-vm-notices.controller.js.map +1 -0
- package/dist/server/modules/remotes/controllers/remotes.controller.js +1 -0
- package/dist/server/modules/remotes/controllers/remotes.controller.js.map +1 -1
- package/dist/server/modules/remotes/dtos/remote-notices.dto.d.ts +4 -0
- package/dist/server/modules/remotes/dtos/remote-notices.dto.js +3 -0
- package/dist/server/modules/remotes/dtos/remote-notices.dto.js.map +1 -0
- package/dist/server/modules/remotes/dtos/remote.dto.d.ts +2 -0
- package/dist/server/modules/remotes/dtos/remote.dto.js.map +1 -1
- package/dist/server/modules/remotes/dtos/shared-vm.dto.d.ts +488 -0
- package/dist/server/modules/remotes/dtos/shared-vm.dto.js +60 -0
- package/dist/server/modules/remotes/dtos/shared-vm.dto.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/git-checkpoint.d.ts +5 -0
- package/dist/server/modules/remotes/git-coordinator/git-checkpoint.js +95 -0
- package/dist/server/modules/remotes/git-coordinator/git-checkpoint.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator-index.service.d.ts +18 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator-index.service.js +192 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator-index.service.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.dto.d.ts +519 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.dto.js +104 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.dto.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.service.d.ts +66 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.service.js +555 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.service.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.store.d.ts +11 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.store.js +69 -0
- package/dist/server/modules/remotes/git-coordinator/git-coordinator.store.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/git-process-identity.d.ts +3 -0
- package/dist/server/modules/remotes/git-coordinator/git-process-identity.js +71 -0
- package/dist/server/modules/remotes/git-coordinator/git-process-identity.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/host-git-coordinator.controller.d.ts +19 -0
- package/dist/server/modules/remotes/git-coordinator/host-git-coordinator.controller.js +181 -0
- package/dist/server/modules/remotes/git-coordinator/host-git-coordinator.controller.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/loopback.d.ts +2 -0
- package/dist/server/modules/remotes/git-coordinator/loopback.js +10 -0
- package/dist/server/modules/remotes/git-coordinator/loopback.js.map +1 -0
- package/dist/server/modules/remotes/git-coordinator/vm-git-coordinator.controller.d.ts +9 -0
- package/dist/server/modules/remotes/git-coordinator/vm-git-coordinator.controller.js +66 -0
- package/dist/server/modules/remotes/git-coordinator/vm-git-coordinator.controller.js.map +1 -0
- package/dist/server/modules/remotes/git-owner.store.d.ts +102 -1
- package/dist/server/modules/remotes/git-owner.store.js +37 -11
- package/dist/server/modules/remotes/git-owner.store.js.map +1 -1
- package/dist/server/modules/remotes/git-shim/git-shim-registry.service.d.ts +31 -0
- package/dist/server/modules/remotes/git-shim/git-shim-registry.service.js +175 -0
- package/dist/server/modules/remotes/git-shim/git-shim-registry.service.js.map +1 -0
- package/dist/server/modules/remotes/git-writes/change-barrier.d.ts +16 -0
- package/dist/server/modules/remotes/git-writes/change-barrier.js +40 -0
- package/dist/server/modules/remotes/git-writes/change-barrier.js.map +1 -0
- package/dist/server/modules/remotes/git-writes/home-git-handover.service.d.ts +42 -0
- package/dist/server/modules/remotes/git-writes/home-git-handover.service.js +349 -0
- package/dist/server/modules/remotes/git-writes/home-git-handover.service.js.map +1 -0
- package/dist/server/modules/remotes/git-writes/home-git-transitions.d.ts +16 -0
- package/dist/server/modules/remotes/git-writes/home-git-transitions.js +12 -0
- package/dist/server/modules/remotes/git-writes/home-git-transitions.js.map +1 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.controller.d.ts +10 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.controller.js +74 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.controller.js.map +1 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.service.d.ts +72 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.service.js +481 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.service.js.map +1 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.store.d.ts +39 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.store.js +78 -0
- package/dist/server/modules/remotes/git-writes/home-git-write.store.js.map +1 -0
- package/dist/server/modules/remotes/host/host-helper.dto.d.ts +4 -0
- package/dist/server/modules/remotes/host/host-helper.dto.js +14 -1
- package/dist/server/modules/remotes/host/host-helper.dto.js.map +1 -1
- package/dist/server/modules/remotes/host/host-helper.service.d.ts +5 -1
- package/dist/server/modules/remotes/host/host-helper.service.js +9 -3
- package/dist/server/modules/remotes/host/host-helper.service.js.map +1 -1
- package/dist/server/modules/remotes/host/host-opencode-credentials.v2.d.ts +7 -0
- package/dist/server/modules/remotes/host/host-opencode-credentials.v2.js +46 -0
- package/dist/server/modules/remotes/host/host-opencode-credentials.v2.js.map +1 -0
- package/dist/server/modules/remotes/host/host-provider-auth.service.d.ts +11 -2
- package/dist/server/modules/remotes/host/host-provider-auth.service.js +92 -14
- package/dist/server/modules/remotes/host/host-provider-auth.service.js.map +1 -1
- package/dist/server/modules/remotes/host/host-provider-usage-revision.d.ts +2 -0
- package/dist/server/modules/remotes/host/host-provider-usage-revision.js +11 -0
- package/dist/server/modules/remotes/host/host-provider-usage-revision.js.map +1 -0
- package/dist/server/modules/remotes/host/host-provider-usage-settings.controller.d.ts +11 -0
- package/dist/server/modules/remotes/host/host-provider-usage-settings.controller.js +62 -0
- package/dist/server/modules/remotes/host/host-provider-usage-settings.controller.js.map +1 -0
- package/dist/server/modules/remotes/host/host-provider-usage-settings.service.d.ts +9 -0
- package/dist/server/modules/remotes/host/host-provider-usage-settings.service.js +35 -0
- package/dist/server/modules/remotes/host/host-provider-usage-settings.service.js.map +1 -0
- package/dist/server/modules/remotes/host/host-shared-vm.controller.d.ts +24 -0
- package/dist/server/modules/remotes/host/host-shared-vm.controller.js +183 -0
- package/dist/server/modules/remotes/host/host-shared-vm.controller.js.map +1 -0
- package/dist/server/modules/remotes/host/host-shared-vm.service.d.ts +28 -0
- package/dist/server/modules/remotes/host/host-shared-vm.service.js +159 -0
- package/dist/server/modules/remotes/host/host-shared-vm.service.js.map +1 -0
- package/dist/server/modules/remotes/host/host-shared-vm.store.d.ts +18 -0
- package/dist/server/modules/remotes/host/host-shared-vm.store.js +105 -0
- package/dist/server/modules/remotes/host/host-shared-vm.store.js.map +1 -0
- package/dist/server/modules/remotes/host/host-update.controller.js +3 -3
- package/dist/server/modules/remotes/host/host-update.controller.js.map +1 -1
- package/dist/server/modules/remotes/host/host.service.d.ts +3 -1
- package/dist/server/modules/remotes/host/host.service.js +9 -2
- package/dist/server/modules/remotes/host/host.service.js.map +1 -1
- package/dist/server/modules/remotes/host/shared-vm.contract.d.ts +184 -0
- package/dist/server/modules/remotes/host/shared-vm.contract.js +44 -0
- package/dist/server/modules/remotes/host/shared-vm.contract.js.map +1 -0
- package/dist/server/modules/remotes/host-install/host-install-block.d.ts +2 -0
- package/dist/server/modules/remotes/host-install/host-install-block.js +3 -2
- package/dist/server/modules/remotes/host-install/host-install-block.js.map +1 -1
- package/dist/server/modules/remotes/host-install/host-install.service.d.ts +2 -0
- package/dist/server/modules/remotes/host-install/host-install.service.js +10 -0
- package/dist/server/modules/remotes/host-install/host-install.service.js.map +1 -1
- package/dist/server/modules/remotes/host-install/host-join-block.d.ts +16 -0
- package/dist/server/modules/remotes/host-install/host-join-block.js +122 -0
- package/dist/server/modules/remotes/host-install/host-join-block.js.map +1 -0
- package/dist/server/modules/remotes/host-install/ssh-runner.d.ts +1 -0
- package/dist/server/modules/remotes/host-install/ssh-runner.js +2 -2
- package/dist/server/modules/remotes/host-install/ssh-runner.js.map +1 -1
- package/dist/server/modules/remotes/operations/attach.operation.d.ts +9 -2
- package/dist/server/modules/remotes/operations/attach.operation.js +38 -11
- package/dist/server/modules/remotes/operations/attach.operation.js.map +1 -1
- package/dist/server/modules/remotes/operations/claim.operation.d.ts +4 -0
- package/dist/server/modules/remotes/operations/claim.operation.js +15 -0
- package/dist/server/modules/remotes/operations/claim.operation.js.map +1 -1
- package/dist/server/modules/remotes/operations/claude-user-instructions.d.ts +2 -0
- package/dist/server/modules/remotes/operations/claude-user-instructions.js +23 -0
- package/dist/server/modules/remotes/operations/claude-user-instructions.js.map +1 -0
- package/dist/server/modules/remotes/operations/destroy-vm.operation.d.ts +4 -2
- package/dist/server/modules/remotes/operations/destroy-vm.operation.js +43 -23
- package/dist/server/modules/remotes/operations/destroy-vm.operation.js.map +1 -1
- package/dist/server/modules/remotes/operations/detach.operation.d.ts +12 -1
- package/dist/server/modules/remotes/operations/detach.operation.js +106 -29
- package/dist/server/modules/remotes/operations/detach.operation.js.map +1 -1
- package/dist/server/modules/remotes/operations/disconnect-all.operation.d.ts +50 -0
- package/dist/server/modules/remotes/operations/disconnect-all.operation.js +222 -0
- package/dist/server/modules/remotes/operations/disconnect-all.operation.js.map +1 -0
- package/dist/server/modules/remotes/operations/file-sync-handoff.d.ts +3 -1
- package/dist/server/modules/remotes/operations/file-sync-handoff.js +69 -68
- package/dist/server/modules/remotes/operations/file-sync-handoff.js.map +1 -1
- package/dist/server/modules/remotes/operations/git-owner.dto.d.ts +10 -44
- package/dist/server/modules/remotes/operations/git-owner.dto.js +1 -12
- package/dist/server/modules/remotes/operations/git-owner.dto.js.map +1 -1
- package/dist/server/modules/remotes/operations/guarded-vm-destroy.d.ts +2 -0
- package/dist/server/modules/remotes/operations/guarded-vm-destroy.js +14 -0
- package/dist/server/modules/remotes/operations/guarded-vm-destroy.js.map +1 -1
- package/dist/server/modules/remotes/operations/install-host.operation.d.ts +21 -1
- package/dist/server/modules/remotes/operations/install-host.operation.js +285 -27
- package/dist/server/modules/remotes/operations/install-host.operation.js.map +1 -1
- package/dist/server/modules/remotes/operations/remote-host.client.d.ts +51 -12
- package/dist/server/modules/remotes/operations/remote-host.client.js +129 -23
- package/dist/server/modules/remotes/operations/remote-host.client.js.map +1 -1
- package/dist/server/modules/remotes/operations/remote-operation.dto.d.ts +161 -0
- package/dist/server/modules/remotes/operations/remote-operation.dto.js +12 -1
- package/dist/server/modules/remotes/operations/remote-operation.dto.js.map +1 -1
- package/dist/server/modules/remotes/operations/remote-operation.runner.d.ts +4 -2
- package/dist/server/modules/remotes/operations/remote-operation.runner.js +53 -9
- package/dist/server/modules/remotes/operations/remote-operation.runner.js.map +1 -1
- package/dist/server/modules/remotes/operations/remote-operation.types.d.ts +6 -3
- package/dist/server/modules/remotes/operations/remote-operation.types.js +10 -1
- package/dist/server/modules/remotes/operations/remote-operation.types.js.map +1 -1
- package/dist/server/modules/remotes/operations/remote-operations.controller.d.ts +2 -3
- package/dist/server/modules/remotes/operations/remote-operations.controller.js +20 -25
- package/dist/server/modules/remotes/operations/remote-operations.controller.js.map +1 -1
- package/dist/server/modules/remotes/operations/remote-operations.service.d.ts +11 -9
- package/dist/server/modules/remotes/operations/remote-operations.service.js +123 -118
- package/dist/server/modules/remotes/operations/remote-operations.service.js.map +1 -1
- package/dist/server/modules/remotes/operations/remote-worktree-guard.d.ts +16 -0
- package/dist/server/modules/remotes/operations/remote-worktree-guard.js +100 -0
- package/dist/server/modules/remotes/operations/remote-worktree-guard.js.map +1 -0
- package/dist/server/modules/remotes/operations/reset-vm.operation.d.ts +15 -2
- package/dist/server/modules/remotes/operations/reset-vm.operation.js +115 -15
- package/dist/server/modules/remotes/operations/reset-vm.operation.js.map +1 -1
- package/dist/server/modules/remotes/operations/update-host.operation.d.ts +2 -0
- package/dist/server/modules/remotes/operations/update-host.operation.js +11 -5
- package/dist/server/modules/remotes/operations/update-host.operation.js.map +1 -1
- package/dist/server/modules/remotes/operations/vm-operations.controller.d.ts +5 -1
- package/dist/server/modules/remotes/operations/vm-operations.controller.js +36 -2
- package/dist/server/modules/remotes/operations/vm-operations.controller.js.map +1 -1
- package/dist/server/modules/remotes/operations/vm-operations.dto.d.ts +150 -0
- package/dist/server/modules/remotes/operations/vm-operations.dto.js +9 -1
- package/dist/server/modules/remotes/operations/vm-operations.dto.js.map +1 -1
- package/dist/server/modules/remotes/operations/vm-operations.service.d.ts +3 -1
- package/dist/server/modules/remotes/operations/vm-operations.service.js +38 -15
- package/dist/server/modules/remotes/operations/vm-operations.service.js.map +1 -1
- package/dist/server/modules/remotes/ports/remote-health.port.d.ts +2 -0
- package/dist/server/modules/remotes/ports/remote-health.port.js.map +1 -1
- package/dist/server/modules/remotes/remotes.module.js +53 -2
- package/dist/server/modules/remotes/remotes.module.js.map +1 -1
- package/dist/server/modules/remotes/services/home-shared-vm-notices.service.d.ts +18 -0
- package/dist/server/modules/remotes/services/home-shared-vm-notices.service.js +81 -0
- package/dist/server/modules/remotes/services/home-shared-vm-notices.service.js.map +1 -0
- package/dist/server/modules/remotes/services/remote-forced-detach.service.d.ts +11 -0
- package/dist/server/modules/remotes/services/remote-forced-detach.service.js +69 -0
- package/dist/server/modules/remotes/services/remote-forced-detach.service.js.map +1 -0
- package/dist/server/modules/remotes/services/remote-forced-detach.store.d.ts +23 -0
- package/dist/server/modules/remotes/services/remote-forced-detach.store.js +73 -0
- package/dist/server/modules/remotes/services/remote-forced-detach.store.js.map +1 -0
- package/dist/server/modules/remotes/services/remote-health.service.d.ts +7 -1
- package/dist/server/modules/remotes/services/remote-health.service.js +41 -4
- package/dist/server/modules/remotes/services/remote-health.service.js.map +1 -1
- package/dist/server/modules/remotes/services/remote-provider-usage-settings.service.d.ts +13 -0
- package/dist/server/modules/remotes/services/remote-provider-usage-settings.service.js +57 -0
- package/dist/server/modules/remotes/services/remote-provider-usage-settings.service.js.map +1 -0
- package/dist/server/modules/remotes/services/remote-shared-vm.service.d.ts +37 -0
- package/dist/server/modules/remotes/services/remote-shared-vm.service.js +184 -0
- package/dist/server/modules/remotes/services/remote-shared-vm.service.js.map +1 -0
- package/dist/server/modules/remotes/services/remote-shared-vm.store.d.ts +11 -0
- package/dist/server/modules/remotes/services/remote-shared-vm.store.js +75 -0
- package/dist/server/modules/remotes/services/remote-shared-vm.store.js.map +1 -0
- package/dist/server/modules/remotes/sync/remote-file-sync.service.d.ts +5 -1
- package/dist/server/modules/remotes/sync/remote-file-sync.service.js +95 -41
- package/dist/server/modules/remotes/sync/remote-file-sync.service.js.map +1 -1
- package/dist/server/modules/remotes/time/project-time-settler.dto.d.ts +2 -2
- package/dist/server/modules/remotes/transport/host-transport.d.ts +2 -0
- package/dist/server/modules/remotes/transport/host-transport.js +7 -0
- package/dist/server/modules/remotes/transport/host-transport.js.map +1 -1
- package/dist/server/modules/reviews/dtos/review.dto.d.ts +2 -2
- package/dist/server/modules/runtime-context-capture/codex-plugin-profile-materializer.service.d.ts +5 -1
- package/dist/server/modules/runtime-context-capture/codex-plugin-profile-materializer.service.js +25 -5
- package/dist/server/modules/runtime-context-capture/codex-plugin-profile-materializer.service.js.map +1 -1
- package/dist/server/modules/session-reader/__fixtures__/opencode-fixture-db.d.ts +6 -4
- package/dist/server/modules/session-reader/__fixtures__/opencode-fixture-db.js +17 -20
- package/dist/server/modules/session-reader/__fixtures__/opencode-fixture-db.js.map +1 -1
- package/dist/server/modules/session-reader/__fixtures__/opencode-v2-fixture-db.d.ts +61 -0
- package/dist/server/modules/session-reader/__fixtures__/opencode-v2-fixture-db.js +250 -0
- package/dist/server/modules/session-reader/__fixtures__/opencode-v2-fixture-db.js.map +1 -0
- package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.d.ts +1 -0
- package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.js +1 -0
- package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.js.map +1 -1
- package/dist/server/modules/session-reader/adapters/opencode-session-reader.adapter.d.ts +3 -1
- package/dist/server/modules/session-reader/adapters/opencode-session-reader.adapter.js +34 -13
- package/dist/server/modules/session-reader/adapters/opencode-session-reader.adapter.js.map +1 -1
- package/dist/server/modules/session-reader/adapters/session-reader-adapter.interface.d.ts +1 -0
- package/dist/server/modules/session-reader/data/pricing.json +302 -61
- package/dist/server/modules/session-reader/readers/opencode-sqlite.db.d.ts +73 -0
- package/dist/server/modules/session-reader/readers/opencode-sqlite.db.js +176 -0
- package/dist/server/modules/session-reader/readers/opencode-sqlite.db.js.map +1 -0
- package/dist/server/modules/session-reader/readers/opencode-sqlite.v1.reader.d.ts +45 -0
- package/dist/server/modules/session-reader/readers/{opencode-sqlite.reader.js → opencode-sqlite.v1.reader.js} +171 -164
- package/dist/server/modules/session-reader/readers/opencode-sqlite.v1.reader.js.map +1 -0
- package/dist/server/modules/session-reader/readers/opencode-sqlite.v2.reader.d.ts +15 -0
- package/dist/server/modules/session-reader/readers/opencode-sqlite.v2.reader.js +474 -0
- package/dist/server/modules/session-reader/readers/opencode-sqlite.v2.reader.js.map +1 -0
- package/dist/server/modules/session-reader/services/pricing.interface.d.ts +1 -0
- package/dist/server/modules/session-reader/services/pricing.interface.js.map +1 -1
- package/dist/server/modules/session-reader/services/pricing.service.d.ts +1 -0
- package/dist/server/modules/session-reader/services/pricing.service.js +3 -0
- package/dist/server/modules/session-reader/services/pricing.service.js.map +1 -1
- package/dist/server/modules/session-reader/services/session-reader.service.js +6 -1
- package/dist/server/modules/session-reader/services/session-reader.service.js.map +1 -1
- package/dist/server/modules/sessions/services/message-enqueue.service.d.ts +3 -0
- package/dist/server/modules/sessions/services/message-enqueue.service.js +1 -0
- package/dist/server/modules/sessions/services/message-enqueue.service.js.map +1 -1
- package/dist/server/modules/sessions/services/message-pool.types.d.ts +6 -0
- package/dist/server/modules/sessions/services/message-pool.types.js +6 -1
- package/dist/server/modules/sessions/services/message-pool.types.js.map +1 -1
- package/dist/server/modules/sessions/services/provider-launch-config/provider-launch-config.service.d.ts +2 -0
- package/dist/server/modules/sessions/services/provider-launch-config/provider-launch-config.service.js +18 -1
- package/dist/server/modules/sessions/services/provider-launch-config/provider-launch-config.service.js.map +1 -1
- package/dist/server/modules/sessions/services/provider-runtime-preparation/provider-runtime-preparation.service.d.ts +5 -1
- package/dist/server/modules/sessions/services/provider-runtime-preparation/provider-runtime-preparation.service.js +26 -2
- package/dist/server/modules/sessions/services/provider-runtime-preparation/provider-runtime-preparation.service.js.map +1 -1
- package/dist/server/modules/sessions/services/session-lifecycle-facade.service.d.ts +7 -2
- package/dist/server/modules/sessions/services/session-lifecycle-facade.service.js +4 -4
- package/dist/server/modules/sessions/services/session-lifecycle-facade.service.js.map +1 -1
- package/dist/server/modules/sessions/services/sessions-message-pool.service.d.ts +1 -0
- package/dist/server/modules/sessions/services/sessions-message-pool.service.js +30 -0
- package/dist/server/modules/sessions/services/sessions-message-pool.service.js.map +1 -1
- package/dist/server/modules/sessions/sessions.module.js +5 -0
- package/dist/server/modules/sessions/sessions.module.js.map +1 -1
- package/dist/server/modules/settings/dtos/settings.dto.d.ts +33 -0
- package/dist/server/modules/settings/dtos/settings.dto.js +2 -0
- package/dist/server/modules/settings/dtos/settings.dto.js.map +1 -1
- package/dist/server/modules/settings/local/delegates/core-settings.delegate.d.ts +3 -0
- package/dist/server/modules/settings/local/delegates/core-settings.delegate.js +35 -0
- package/dist/server/modules/settings/local/delegates/core-settings.delegate.js.map +1 -1
- package/dist/server/modules/settings/local/delegates/provider-cli-settings.delegate.js +6 -1
- package/dist/server/modules/settings/local/delegates/provider-cli-settings.delegate.js.map +1 -1
- package/dist/server/modules/settings/services/settings.service.d.ts +2 -1
- package/dist/server/modules/settings/services/settings.service.js +3 -0
- package/dist/server/modules/settings/services/settings.service.js.map +1 -1
- package/dist/server/modules/storage/db/schema.d.ts +235 -0
- package/dist/server/modules/storage/db/schema.js +22 -1
- package/dist/server/modules/storage/db/schema.js.map +1 -1
- package/dist/server/modules/storage/interfaces/storage.interface.d.ts +10 -2
- package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
- package/dist/server/modules/storage/local/delegates/project-replica.delegate.js +7 -0
- package/dist/server/modules/storage/local/delegates/project-replica.delegate.js.map +1 -1
- package/dist/server/modules/storage/local/delegates/worktree.delegate.d.ts +14 -0
- package/dist/server/modules/storage/local/delegates/worktree.delegate.js +89 -0
- package/dist/server/modules/storage/local/delegates/worktree.delegate.js.map +1 -0
- package/dist/server/modules/storage/local/helpers/host-abandoned-projects.d.ts +5 -0
- package/dist/server/modules/storage/local/helpers/host-abandoned-projects.js +39 -0
- package/dist/server/modules/storage/local/helpers/host-abandoned-projects.js.map +1 -0
- package/dist/server/modules/storage/local/local-storage.service.js +2 -0
- package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
- package/dist/server/modules/storage/local/storage-routes.d.ts +26 -0
- package/dist/server/modules/storage/local/storage-routes.js +9 -0
- package/dist/server/modules/storage/local/storage-routes.js.map +1 -1
- package/dist/server/modules/storage/models/domain.models.d.ts +20 -1
- package/dist/server/modules/storage/models/domain.models.js +1 -0
- package/dist/server/modules/storage/models/domain.models.js.map +1 -1
- package/dist/server/modules/storage/write-gate/storage-write-scope.d.ts +1 -0
- package/dist/server/modules/storage/write-gate/storage-write-scope.js +1 -0
- package/dist/server/modules/storage/write-gate/storage-write-scope.js.map +1 -1
- package/dist/server/modules/teams/services/teams.service.d.ts +46 -6
- package/dist/server/modules/teams/services/teams.service.js +129 -8
- package/dist/server/modules/teams/services/teams.service.js.map +1 -1
- package/dist/server/modules/teams/teams.module.js +14 -1
- package/dist/server/modules/teams/teams.module.js.map +1 -1
- package/dist/server/modules/vm-providers/proxmox-vm.provider.d.ts +1 -0
- package/dist/server/modules/vm-providers/proxmox-vm.provider.js +17 -0
- package/dist/server/modules/vm-providers/proxmox-vm.provider.js.map +1 -1
- package/dist/server/modules/worktrees/git-output.d.ts +5 -0
- package/dist/server/modules/worktrees/git-output.js +53 -0
- package/dist/server/modules/worktrees/git-output.js.map +1 -0
- package/dist/server/modules/worktrees/host-worktrees.controller.d.ts +10 -0
- package/dist/server/modules/worktrees/host-worktrees.controller.js +59 -0
- package/dist/server/modules/worktrees/host-worktrees.controller.js.map +1 -0
- package/dist/server/modules/worktrees/host-worktrees.dto.d.ts +40 -0
- package/dist/server/modules/worktrees/host-worktrees.dto.js +9 -0
- package/dist/server/modules/worktrees/host-worktrees.dto.js.map +1 -0
- package/dist/server/modules/worktrees/project-git-mutex.d.ts +5 -0
- package/dist/server/modules/worktrees/project-git-mutex.js +38 -0
- package/dist/server/modules/worktrees/project-git-mutex.js.map +1 -0
- package/dist/server/modules/worktrees/worktree-admission.service.d.ts +15 -0
- package/dist/server/modules/worktrees/worktree-admission.service.js +87 -0
- package/dist/server/modules/worktrees/worktree-admission.service.js.map +1 -0
- package/dist/server/modules/worktrees/worktree-git-runner.d.ts +12 -0
- package/dist/server/modules/worktrees/worktree-git-runner.js +57 -0
- package/dist/server/modules/worktrees/worktree-git-runner.js.map +1 -0
- package/dist/server/modules/worktrees/worktrees.errors.d.ts +5 -0
- package/dist/server/modules/worktrees/worktrees.errors.js +11 -0
- package/dist/server/modules/worktrees/worktrees.errors.js.map +1 -0
- package/dist/server/modules/worktrees/worktrees.module.d.ts +2 -0
- package/dist/server/modules/worktrees/worktrees.module.js +37 -0
- package/dist/server/modules/worktrees/worktrees.module.js.map +1 -0
- package/dist/server/modules/worktrees/worktrees.service.d.ts +50 -0
- package/dist/server/modules/worktrees/worktrees.service.js +586 -0
- package/dist/server/modules/worktrees/worktrees.service.js.map +1 -0
- package/dist/server/modules/worktrees/worktrees.types.d.ts +58 -0
- package/dist/server/modules/worktrees/worktrees.types.js +3 -0
- package/dist/server/modules/worktrees/worktrees.types.js.map +1 -0
- package/dist/server/templates/teams-dev.json +6 -6
- package/dist/server/tsconfig.build.tsbuildinfo +1 -1
- package/dist/server/ui/assets/{ExternalRichEditor-CB-LjWox.js → ExternalRichEditor-NpBNzn_X.js} +1 -1
- package/dist/server/ui/assets/{ReviewDetailPage-CpMMjYet.js → ReviewDetailPage-DxVCE1zh.js} +1 -1
- package/dist/server/ui/assets/{ReviewsPage-Cw17_agp.js → ReviewsPage-Bx6jkULr.js} +1 -1
- package/dist/server/ui/assets/index-BZjQEWOy.css +32 -0
- package/dist/server/ui/assets/{index-DmRXRpSy.js → index-CLPZxkZt.js} +263 -263
- package/dist/server/ui/assets/{useReviewSubscription-wd5iHNQy.js → useReviewSubscription-BLuFzXjh.js} +1 -1
- package/dist/server/ui/index.html +2 -2
- package/dist/templates/teams-dev.json +6 -6
- package/npm-shrinkwrap.json +6189 -0
- package/package.json +19 -13
- package/dist/server/modules/file-sync/host-git-index.controller.d.ts +0 -10
- package/dist/server/modules/file-sync/host-git-index.controller.js +0 -67
- package/dist/server/modules/file-sync/host-git-index.controller.js.map +0 -1
- package/dist/server/modules/remotes/operations/git-owner.operation.d.ts +0 -35
- package/dist/server/modules/remotes/operations/git-owner.operation.js +0 -216
- package/dist/server/modules/remotes/operations/git-owner.operation.js.map +0 -1
- package/dist/server/modules/session-reader/readers/opencode-sqlite.reader.d.ts +0 -73
- package/dist/server/modules/session-reader/readers/opencode-sqlite.reader.js.map +0 -1
- package/dist/server/ui/assets/index-BwuNu70G.css +0 -32
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RemoteSharedVmService = void 0;
|
|
16
|
+
exports.notifyForcedStep = notifyForcedStep;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const error_types_1 = require("../../../common/errors/error-types");
|
|
19
|
+
const storage_interface_1 = require("../../storage/interfaces/storage.interface");
|
|
20
|
+
const home_identity_1 = require("../home-identity");
|
|
21
|
+
const remote_host_client_1 = require("../operations/remote-host.client");
|
|
22
|
+
const shared_vm_dto_1 = require("../dtos/shared-vm.dto");
|
|
23
|
+
const remote_shared_vm_store_1 = require("./remote-shared-vm.store");
|
|
24
|
+
const logger_1 = require("../../../common/logging/logger");
|
|
25
|
+
const logger = (0, logger_1.createLogger)('RemoteSharedVmService');
|
|
26
|
+
function notifyForcedStep(sharedVm) {
|
|
27
|
+
return {
|
|
28
|
+
id: 'notify_forced',
|
|
29
|
+
label: 'Notify the other VM users',
|
|
30
|
+
skip: (details) => details.forceOccupied !== true && details.force !== true,
|
|
31
|
+
run: async ({ operation }) => {
|
|
32
|
+
await sharedVm()
|
|
33
|
+
.notify(operation.remoteId, { action: 'forced' })
|
|
34
|
+
.catch(() => undefined);
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
let RemoteSharedVmService = class RemoteSharedVmService {
|
|
39
|
+
storage;
|
|
40
|
+
client;
|
|
41
|
+
store;
|
|
42
|
+
constructor(storage, client, store) {
|
|
43
|
+
this.storage = storage;
|
|
44
|
+
this.client = client;
|
|
45
|
+
this.store = store;
|
|
46
|
+
}
|
|
47
|
+
lastRoster(remoteId) {
|
|
48
|
+
return this.store.read(remoteId);
|
|
49
|
+
}
|
|
50
|
+
async context(remoteId) {
|
|
51
|
+
const remote = await this.storage.getRemote(remoteId);
|
|
52
|
+
const lastRoster = this.store.read(remoteId);
|
|
53
|
+
if (!remote.baseUrl)
|
|
54
|
+
return { occupancy: { unavailable: true, instances: [] }, lastRoster };
|
|
55
|
+
const [identity] = await this.storage.listRemoteOperations({
|
|
56
|
+
remoteId,
|
|
57
|
+
states: ['done'],
|
|
58
|
+
kinds: home_identity_1.CLAIM_IDENTITY_KINDS,
|
|
59
|
+
limit: 1,
|
|
60
|
+
});
|
|
61
|
+
const ownUser = typeof identity?.details.userName === 'string'
|
|
62
|
+
? identity.details.userName
|
|
63
|
+
: (0, home_identity_1.homeIdentity)().user;
|
|
64
|
+
let roster;
|
|
65
|
+
try {
|
|
66
|
+
roster = shared_vm_dto_1.SharedVmRosterSchema.parse(await this.client.sharedVmRoster(remoteId));
|
|
67
|
+
if (new Set(roster.instances.map(({ user }) => user)).size !== roster.instances.length ||
|
|
68
|
+
!roster.instances.some(({ user }) => user === ownUser)) {
|
|
69
|
+
throw new Error('The roster does not identify this instance.');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return { occupancy: { unavailable: true, instances: [] }, lastRoster };
|
|
74
|
+
}
|
|
75
|
+
const saved = { roster, ownUser, at: new Date().toISOString(), vmIdentity: remote.vmIdentity };
|
|
76
|
+
await this.store.write(remoteId, saved);
|
|
77
|
+
return {
|
|
78
|
+
occupancy: {
|
|
79
|
+
unavailable: false,
|
|
80
|
+
instances: roster.instances.filter(({ user }) => user !== ownUser),
|
|
81
|
+
},
|
|
82
|
+
lastRoster: saved,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async assertAllowed(remoteId, input) {
|
|
86
|
+
const context = await this.context(remoteId);
|
|
87
|
+
if (!input.forceOccupied && (0, shared_vm_dto_1.sharedVmOccupied)(context.occupancy))
|
|
88
|
+
this.refuse(context);
|
|
89
|
+
if (input.forceOccupied && input.confirmedOccupancy)
|
|
90
|
+
this.assertConfirmed(context, input.confirmedOccupancy);
|
|
91
|
+
return input.forceOccupied
|
|
92
|
+
? (input.confirmedOccupancy ?? context.occupancy)
|
|
93
|
+
: context.occupancy;
|
|
94
|
+
}
|
|
95
|
+
async notify(remoteId, input) {
|
|
96
|
+
return this.client.sharedVmNotify(remoteId, input);
|
|
97
|
+
}
|
|
98
|
+
async fencedDestroy(input) {
|
|
99
|
+
const { operation, details } = input;
|
|
100
|
+
if (input.previouslyAttempted && input.confirmedGone && (await input.confirmedGone())) {
|
|
101
|
+
await input.destroy();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
await this.client.sharedVmFence(operation.remoteId, {
|
|
106
|
+
mode: 'set',
|
|
107
|
+
operationId: operation.id,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (error instanceof remote_host_client_1.RemoteHostRequestError && error.status !== null && error.status < 500)
|
|
112
|
+
throw error;
|
|
113
|
+
if (!details.forceOccupied)
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const context = await this.context(operation.remoteId);
|
|
118
|
+
if (!details.forceOccupied && (0, shared_vm_dto_1.sharedVmOccupied)(context.occupancy))
|
|
119
|
+
this.refuse(context);
|
|
120
|
+
this.assertConfirmed(context, details.confirmedOccupancy ?? { unavailable: false, instances: [] });
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
await this.releaseFenceIfIdle(input, !input.previouslyAttempted);
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
await input.destroy();
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
await this.releaseFenceIfIdle(input, error instanceof error_types_1.ConflictError && !input.previouslyAttempted);
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async releaseFenceIfIdle(input, knownIdle) {
|
|
135
|
+
let idle = knownIdle;
|
|
136
|
+
try {
|
|
137
|
+
if (!idle)
|
|
138
|
+
idle = await input.confirmedIdle();
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
}
|
|
142
|
+
if (idle)
|
|
143
|
+
await this.clearFence(input.operation);
|
|
144
|
+
}
|
|
145
|
+
assertConfirmed(context, confirmed) {
|
|
146
|
+
if (confirmed.unavailable)
|
|
147
|
+
return;
|
|
148
|
+
if (context.occupancy.unavailable)
|
|
149
|
+
this.refuse(context);
|
|
150
|
+
for (const current of context.occupancy.instances) {
|
|
151
|
+
const previous = confirmed.instances.find(({ user }) => user === current.user);
|
|
152
|
+
if (!previous)
|
|
153
|
+
this.refuse(context);
|
|
154
|
+
const confirmedIds = previous.connectedProjectIds;
|
|
155
|
+
if (confirmedIds === 'unknown' || previous.connectedCount === 'unknown')
|
|
156
|
+
continue;
|
|
157
|
+
if (current.connectedProjectIds === 'unknown' ||
|
|
158
|
+
current.connectedCount === 'unknown' ||
|
|
159
|
+
current.connectedProjectIds.some((id) => !confirmedIds.includes(id)))
|
|
160
|
+
this.refuse(context);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
refuse(context) {
|
|
164
|
+
const users = context.occupancy.instances.map(({ user, connectedCount, connectedProjectIds }) => `${user} (${connectedProjectIds === 'unknown' ? 'unknown' : connectedCount} projects)`);
|
|
165
|
+
throw new error_types_1.AppError(context.occupancy.unavailable
|
|
166
|
+
? 'Other users’ connected projects on this VM are unknown. Notify them or confirm a forced operation.'
|
|
167
|
+
: `Other users are connected to this VM: ${users.join(', ')}. Notify them or confirm a forced operation.`, shared_vm_dto_1.SHARED_VM_GUARD_CODE, 409, { ...context });
|
|
168
|
+
}
|
|
169
|
+
async clearFence(operation) {
|
|
170
|
+
await this.client
|
|
171
|
+
.sharedVmFence(operation.remoteId, { mode: 'clear', operationId: operation.id })
|
|
172
|
+
.catch((error) => {
|
|
173
|
+
logger.warn({ remoteId: operation.remoteId, operationId: operation.id, error: String(error) }, 'Could not clear the destroy fence');
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
exports.RemoteSharedVmService = RemoteSharedVmService;
|
|
178
|
+
exports.RemoteSharedVmService = RemoteSharedVmService = __decorate([
|
|
179
|
+
(0, common_1.Injectable)(),
|
|
180
|
+
__param(0, (0, common_1.Inject)(storage_interface_1.STORAGE_SERVICE)),
|
|
181
|
+
__metadata("design:paramtypes", [Object, remote_host_client_1.RemoteHostClient,
|
|
182
|
+
remote_shared_vm_store_1.RemoteSharedVmStore])
|
|
183
|
+
], RemoteSharedVmService);
|
|
184
|
+
//# sourceMappingURL=remote-shared-vm.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-shared-vm.service.js","sourceRoot":"","sources":["../../../../src/modules/remotes/services/remote-shared-vm.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
2
|
+
import type { SharedVmSavedRoster } from '../dtos/shared-vm.dto';
|
|
3
|
+
export declare class RemoteSharedVmStore {
|
|
4
|
+
private readonly sqlite;
|
|
5
|
+
private readonly transactions;
|
|
6
|
+
private cached;
|
|
7
|
+
constructor(db: BetterSQLite3Database);
|
|
8
|
+
read(remoteId: string): SharedVmSavedRoster | null;
|
|
9
|
+
write(remoteId: string, roster: SharedVmSavedRoster): Promise<void>;
|
|
10
|
+
private rosters;
|
|
11
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RemoteSharedVmStore = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const zod_1 = require("zod");
|
|
18
|
+
const db_provider_1 = require("../../storage/db/db.provider");
|
|
19
|
+
const sqlite_raw_1 = require("../../storage/db/sqlite-raw");
|
|
20
|
+
const transaction_runner_1 = require("../../storage/db/transaction-runner");
|
|
21
|
+
const shared_vm_dto_1 = require("../dtos/shared-vm.dto");
|
|
22
|
+
const KEY = 'remotes.sharedVmRosters';
|
|
23
|
+
const RostersSchema = zod_1.z.record(shared_vm_dto_1.SharedVmSavedRosterSchema);
|
|
24
|
+
let RemoteSharedVmStore = class RemoteSharedVmStore {
|
|
25
|
+
sqlite;
|
|
26
|
+
transactions;
|
|
27
|
+
cached = null;
|
|
28
|
+
constructor(db) {
|
|
29
|
+
this.sqlite = (0, sqlite_raw_1.getRawSqliteClient)(db);
|
|
30
|
+
this.transactions = new transaction_runner_1.TransactionRunner(this.sqlite);
|
|
31
|
+
}
|
|
32
|
+
read(remoteId) {
|
|
33
|
+
this.cached ??= this.rosters();
|
|
34
|
+
return this.cached[remoteId] ?? null;
|
|
35
|
+
}
|
|
36
|
+
async write(remoteId, roster) {
|
|
37
|
+
this.cached = await this.transactions.runImmediateQueued(() => {
|
|
38
|
+
const rosters = this.rosters();
|
|
39
|
+
const previous = rosters[remoteId];
|
|
40
|
+
if (previous && sameRoster(previous, roster))
|
|
41
|
+
return rosters;
|
|
42
|
+
rosters[remoteId] = shared_vm_dto_1.SharedVmSavedRosterSchema.parse(roster);
|
|
43
|
+
const now = new Date().toISOString();
|
|
44
|
+
this.sqlite
|
|
45
|
+
.prepare(`INSERT INTO settings (id,key,value,created_at,updated_at)
|
|
46
|
+
VALUES(lower(hex(randomblob(16))),?,?,?,?)
|
|
47
|
+
ON CONFLICT(key) DO UPDATE SET value=excluded.value,updated_at=excluded.updated_at`)
|
|
48
|
+
.run(KEY, JSON.stringify(rosters), now, now);
|
|
49
|
+
return rosters;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
rosters() {
|
|
53
|
+
const row = this.sqlite.prepare('SELECT value FROM settings WHERE key=?').get(KEY);
|
|
54
|
+
if (!row)
|
|
55
|
+
return {};
|
|
56
|
+
try {
|
|
57
|
+
return RostersSchema.parse(JSON.parse(row.value));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return {};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
exports.RemoteSharedVmStore = RemoteSharedVmStore;
|
|
65
|
+
exports.RemoteSharedVmStore = RemoteSharedVmStore = __decorate([
|
|
66
|
+
(0, common_1.Injectable)(),
|
|
67
|
+
__param(0, (0, common_1.Inject)(db_provider_1.DB_CONNECTION)),
|
|
68
|
+
__metadata("design:paramtypes", [Function])
|
|
69
|
+
], RemoteSharedVmStore);
|
|
70
|
+
function sameRoster(a, b) {
|
|
71
|
+
return (a.ownUser === b.ownUser &&
|
|
72
|
+
a.vmIdentity === b.vmIdentity &&
|
|
73
|
+
JSON.stringify(a.roster) === JSON.stringify(b.roster));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=remote-shared-vm.store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-shared-vm.store.js","sourceRoot":"","sources":["../../../../src/modules/remotes/services/remote-shared-vm.store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AAGpD,6BAAwB;AACxB,8DAA6D;AAC7D,4DAAiE;AACjE,4EAAwE;AACxE,yDAAkE;AAGlE,MAAM,GAAG,GAAG,yBAAyB,CAAC;AACtC,MAAM,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC,yCAAyB,CAAC,CAAC;AAOnD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACb,MAAM,CAAoB;IAC1B,YAAY,CAAoB;IACzC,MAAM,GAA+C,IAAI,CAAC;IAElE,YAAmC,EAAyB;QAC1D,IAAI,CAAC,MAAM,GAAG,IAAA,+BAAkB,EAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,IAAI,sCAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,QAAgB;QACnB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAGD,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,MAA2B;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,GAAG,EAAE;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAAE,OAAO,OAAO,CAAC;YAC7D,OAAO,CAAC,QAAQ,CAAC,GAAG,yCAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM;iBACR,OAAO,CACN;;2FAEiF,CAClF;iBACA,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,CAAC,GAAG,CAEpE,CAAC;QACd,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF,CAAA;AA7CY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;IAME,WAAA,IAAA,eAAM,EAAC,2BAAa,CAAC,CAAA;;GALvB,mBAAmB,CA6C/B;AAED,SAAS,UAAU,CAAC,CAAsB,EAAE,CAAsB;IAChE,OAAO,CACL,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;QACvB,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;QAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CACtD,CAAC;AACJ,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { FileSyncFailuresService } from './file-sync-failures.service';
|
|
|
7
7
|
import { FileSyncSuggestionsService } from './file-sync-suggestions.service';
|
|
8
8
|
import { FileSyncService } from '../../file-sync/file-sync.service';
|
|
9
9
|
import { GitService } from '../../git/services/git.service';
|
|
10
|
+
import type { GitCoordinatorRecord } from '../git-coordinator/git-coordinator.dto';
|
|
10
11
|
import { type RemoteStorage, type ProjectStorage } from '../../storage/interfaces/storage.interface';
|
|
11
12
|
import { RemoteHostClient } from '../operations/remote-host.client';
|
|
12
13
|
import { type RemoteHealthPort } from '../ports/remote-health.port';
|
|
@@ -35,7 +36,7 @@ export declare class RemoteFileSyncService {
|
|
|
35
36
|
setAutoFix(projectId: string, enabled: boolean): FileSyncAutoFix;
|
|
36
37
|
warning(projectId: string): string | null;
|
|
37
38
|
problem(projectId: string): FileSyncProblem | null;
|
|
38
|
-
hasOpenHold(projectId: string): Promise<boolean>;
|
|
39
|
+
hasOpenHold(projectId: string, vm?: GitCoordinatorRecord): Promise<boolean>;
|
|
39
40
|
assertNoHold(projectId: string): Promise<void>;
|
|
40
41
|
forceSyncOffer(projectId: string, excludeOperationId?: string): Promise<ForceSyncOffer>;
|
|
41
42
|
failedCounts(projectId: string): FileSyncFailedCounts | null;
|
|
@@ -44,7 +45,10 @@ export declare class RemoteFileSyncService {
|
|
|
44
45
|
private retryPullErrors;
|
|
45
46
|
private pauseCode;
|
|
46
47
|
private resumeOwed;
|
|
48
|
+
private repairGitIgnores;
|
|
47
49
|
tick(projectId: string, remoteId: string, active: () => boolean): Promise<void>;
|
|
50
|
+
private protectLaneBranches;
|
|
51
|
+
private followVmRecord;
|
|
48
52
|
private checkSync;
|
|
49
53
|
private fixAutomatically;
|
|
50
54
|
private scanVmOwnership;
|
|
@@ -92,19 +92,21 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
92
92
|
return 'setup';
|
|
93
93
|
return null;
|
|
94
94
|
}
|
|
95
|
-
async hasOpenHold(projectId) {
|
|
95
|
+
async hasOpenHold(projectId, vm) {
|
|
96
|
+
if (vm && (vm.transition || vm.closed || Object.keys(vm.homeWrites).length))
|
|
97
|
+
return true;
|
|
96
98
|
const operations = await this.storage.listRemoteOperations({
|
|
97
99
|
projectId,
|
|
98
|
-
kinds: ['force_sync'
|
|
100
|
+
kinds: ['force_sync'],
|
|
99
101
|
states: ['running', 'failed'],
|
|
100
102
|
limit: 1,
|
|
101
103
|
});
|
|
102
|
-
return operations.some((operation) =>
|
|
104
|
+
return operations.some((operation) => operation.kind === 'force_sync' &&
|
|
103
105
|
(operation.state === 'running' || operation.state === 'failed'));
|
|
104
106
|
}
|
|
105
107
|
async assertNoHold(projectId) {
|
|
106
108
|
if (await this.hasOpenHold(projectId))
|
|
107
|
-
throw new error_types_1.ConflictError('Force sync
|
|
109
|
+
throw new error_types_1.ConflictError('Force sync is running for this project. Save the list after it finishes.');
|
|
108
110
|
}
|
|
109
111
|
async forceSyncOffer(projectId, excludeOperationId) {
|
|
110
112
|
const pending = { fromVm: null, fromHome: null };
|
|
@@ -283,6 +285,18 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
283
285
|
}
|
|
284
286
|
}
|
|
285
287
|
}
|
|
288
|
+
async repairGitIgnores(projectId, remoteId) {
|
|
289
|
+
const id = (0, file_sync_service_1.projectFolderId)(projectId, 'git');
|
|
290
|
+
const ignores = (0, file_sync_dto_1.gitIgnores)(true);
|
|
291
|
+
const [home, vm] = await Promise.all([
|
|
292
|
+
this.files.installedIgnores(id),
|
|
293
|
+
this.host.syncFolderIgnores(remoteId, id),
|
|
294
|
+
]);
|
|
295
|
+
if (home.ignore.join('\0') !== ignores.join('\0'))
|
|
296
|
+
await this.files.updateFolder(id, { ignores });
|
|
297
|
+
if (vm.ignore.join('\0') !== ignores.join('\0'))
|
|
298
|
+
await this.host.syncFolderType(remoteId, id, { ignores }, this.gitOwner.fence(projectId));
|
|
299
|
+
}
|
|
286
300
|
async tick(projectId, remoteId, active) {
|
|
287
301
|
const health = this.health.getState(remoteId);
|
|
288
302
|
if (!active() || !health.online || health.apiKeyRejected || !health.versionMatches)
|
|
@@ -306,54 +320,59 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
306
320
|
await this.move(projectId, state, active);
|
|
307
321
|
return;
|
|
308
322
|
}
|
|
323
|
+
const now = Date.now();
|
|
324
|
+
if (state.hasGit &&
|
|
325
|
+
(state.ignoresRepairedAt === undefined ||
|
|
326
|
+
now - state.ignoresRepairedAt >= CHECK_INTERVAL_MS)) {
|
|
327
|
+
await this.repairGitIgnores(projectId, remoteId);
|
|
328
|
+
state.ignoresRepairedAt = now;
|
|
329
|
+
}
|
|
330
|
+
if (!active())
|
|
331
|
+
return;
|
|
309
332
|
await this.checkSync(projectId, state, active);
|
|
310
333
|
if (!state.hasGit || !active())
|
|
311
334
|
return;
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
335
|
+
const vm = await this.host.gitCoordinatorStatus(remoteId, projectId);
|
|
336
|
+
if (!active() || (await this.hasOpenHold(projectId, vm)))
|
|
337
|
+
return;
|
|
338
|
+
const owner = this.followVmRecord(projectId, vm, state);
|
|
339
|
+
if (owner === null || !active())
|
|
340
|
+
return;
|
|
341
|
+
if (owner === 'home') {
|
|
342
|
+
await this.protectLaneBranches(projectId, remoteId, state, vm.worktreeBranches);
|
|
343
|
+
if (!active())
|
|
344
|
+
return;
|
|
318
345
|
}
|
|
319
346
|
const id = (0, file_sync_service_1.projectFolderId)(projectId, 'git');
|
|
320
|
-
const config =
|
|
347
|
+
const config = owner === 'vm'
|
|
321
348
|
? await this.files.folderConfiguration(id)
|
|
322
349
|
: await this.host.syncFolderConfiguration(remoteId, id);
|
|
323
350
|
if (!active() || config.type !== 'receiveonly' || config.paused)
|
|
324
351
|
return;
|
|
325
|
-
const status =
|
|
326
|
-
? await this.files.status(id)
|
|
327
|
-
: await this.host.syncStatus(remoteId, id);
|
|
352
|
+
const status = owner === 'vm' ? await this.files.status(id) : await this.host.syncStatus(remoteId, id);
|
|
328
353
|
if (!active() || status.state !== 'idle' || status.needTotalItems !== 0)
|
|
329
354
|
return;
|
|
330
355
|
state.warning = null;
|
|
331
356
|
if (status.receiveOnlyChangedFiles > 0) {
|
|
332
|
-
if (
|
|
357
|
+
if (owner === 'vm')
|
|
333
358
|
await this.files.revertLocalChanges(id);
|
|
334
359
|
else
|
|
335
|
-
await this.host.syncRevert(remoteId, id);
|
|
360
|
+
await this.host.syncRevert(remoteId, id, this.gitOwner.fence(projectId));
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (owner === 'home')
|
|
336
364
|
return;
|
|
365
|
+
const revision = this.gitOwner.revision(projectId);
|
|
366
|
+
if (state.homeHeadRevision !== revision) {
|
|
367
|
+
state.homeHead = undefined;
|
|
368
|
+
state.homeHeadRevision = revision;
|
|
337
369
|
}
|
|
338
370
|
const root = await this.files.folderPath(projectId);
|
|
339
371
|
const head = await this.git.mirroredHead(projectId, root);
|
|
340
|
-
if (!active() || head === null || head === state.
|
|
372
|
+
if (!active() || head === null || head === state.homeHead)
|
|
341
373
|
return;
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
(state.heads ??= {}).home = head;
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
const result = await this.host.refreshGitIndex(remoteId, projectId, state.heads?.vm ?? null);
|
|
348
|
-
if (!active())
|
|
349
|
-
return;
|
|
350
|
-
if (result.warning) {
|
|
351
|
-
state.warning = result.warning;
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
354
|
-
if (result.refreshed && result.head !== null)
|
|
355
|
-
(state.heads ??= {}).vm = result.head;
|
|
356
|
-
}
|
|
374
|
+
await this.git.refreshIndexFromHead(projectId, root);
|
|
375
|
+
state.homeHead = head;
|
|
357
376
|
}
|
|
358
377
|
catch (error) {
|
|
359
378
|
state.warning =
|
|
@@ -361,6 +380,32 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
361
380
|
logger.warn({ error, projectId, step: state.step }, 'Remote file sync will retry');
|
|
362
381
|
}
|
|
363
382
|
}
|
|
383
|
+
async protectLaneBranches(projectId, remoteId, state, worktreeBranches) {
|
|
384
|
+
try {
|
|
385
|
+
const warning = await this.guard.protectBranches(projectId, remoteId, worktreeBranches);
|
|
386
|
+
if (warning && warning !== state.laneBranchesWarning)
|
|
387
|
+
logger.warn({ projectId }, warning);
|
|
388
|
+
state.laneBranchesWarning = warning;
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
logger.warn({ error, projectId }, 'VM worktree branch protection was not refreshed');
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
followVmRecord(projectId, vm, state) {
|
|
395
|
+
const cached = this.gitOwner.get(projectId);
|
|
396
|
+
if (vm.generation === this.gitOwner.generation(projectId) &&
|
|
397
|
+
(vm.owner === cached || cached === 'home'))
|
|
398
|
+
return cached;
|
|
399
|
+
if (vm.owner === 'vm' && cached === 'vm') {
|
|
400
|
+
this.gitOwner.remember(projectId, vm);
|
|
401
|
+
return 'vm';
|
|
402
|
+
}
|
|
403
|
+
state.warning =
|
|
404
|
+
cached === 'home'
|
|
405
|
+
? 'The VM took Git back while this PC was away. File sync continues after this PC gives up Git.'
|
|
406
|
+
: 'Git is moving to this PC. File sync continues after the move finishes.';
|
|
407
|
+
return null;
|
|
408
|
+
}
|
|
364
409
|
async checkSync(projectId, state, active) {
|
|
365
410
|
const now = Date.now();
|
|
366
411
|
if (!active() || (state.lastCheck !== undefined && now - state.lastCheck < CHECK_INTERVAL_MS))
|
|
@@ -532,7 +577,6 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
532
577
|
}
|
|
533
578
|
async move(projectId, state, active) {
|
|
534
579
|
const { remoteId } = state;
|
|
535
|
-
const owner = this.gitOwner.get(projectId);
|
|
536
580
|
const codeId = (0, file_sync_service_1.projectFolderId)(projectId, 'code');
|
|
537
581
|
const gitId = (0, file_sync_service_1.projectFolderId)(projectId, 'git');
|
|
538
582
|
if (state.step === 'create') {
|
|
@@ -540,6 +584,19 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
540
584
|
if (!active() || !folders.some((folder) => folder.kind === 'code'))
|
|
541
585
|
return;
|
|
542
586
|
state.hasGit = (await this.files.initialFolders(projectId)).some((folder) => folder.kind === 'git');
|
|
587
|
+
}
|
|
588
|
+
let owner = this.gitOwner.get(projectId);
|
|
589
|
+
if (state.hasGit) {
|
|
590
|
+
const vm = await this.host.gitCoordinatorStatus(remoteId, projectId);
|
|
591
|
+
if (!active() || (await this.hasOpenHold(projectId, vm)))
|
|
592
|
+
return;
|
|
593
|
+
const followed = this.followVmRecord(projectId, vm, state);
|
|
594
|
+
if (followed === null)
|
|
595
|
+
return;
|
|
596
|
+
owner = followed;
|
|
597
|
+
}
|
|
598
|
+
const fence = this.gitOwner.fence(projectId);
|
|
599
|
+
if (state.step === 'create') {
|
|
543
600
|
if (state.hasGit) {
|
|
544
601
|
const home = this.files.device();
|
|
545
602
|
const host = await this.host.syncDevice(remoteId);
|
|
@@ -554,7 +611,7 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
554
611
|
peerDeviceId: home.deviceId,
|
|
555
612
|
ignores: (0, file_sync_dto_1.gitIgnores)(true),
|
|
556
613
|
paused: true,
|
|
557
|
-
});
|
|
614
|
+
}, fence);
|
|
558
615
|
const ensureHome = () => this.files.ensureFolder({
|
|
559
616
|
projectId,
|
|
560
617
|
kind: 'git',
|
|
@@ -571,9 +628,9 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
571
628
|
await ensureVm();
|
|
572
629
|
await ensureHome();
|
|
573
630
|
}
|
|
574
|
-
await this.host.syncFolderType(remoteId, gitId, { paused: false });
|
|
631
|
+
await this.host.syncFolderType(remoteId, gitId, { paused: false }, fence);
|
|
575
632
|
await this.files.updateFolder(gitId, { paused: false });
|
|
576
|
-
await Promise.all([this.host.syncScan(remoteId, gitId), this.files.rescan(gitId)]);
|
|
633
|
+
await Promise.all([this.host.syncScan(remoteId, gitId, fence), this.files.rescan(gitId)]);
|
|
577
634
|
}
|
|
578
635
|
state.step = state.hasGit ? 'settle' : 'ignores';
|
|
579
636
|
}
|
|
@@ -600,7 +657,7 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
600
657
|
if (owner === 'vm')
|
|
601
658
|
await this.files.revertLocalChanges(gitId);
|
|
602
659
|
else
|
|
603
|
-
await this.host.syncRevert(remoteId, gitId);
|
|
660
|
+
await this.host.syncRevert(remoteId, gitId, fence);
|
|
604
661
|
return;
|
|
605
662
|
}
|
|
606
663
|
if (!(0, file_sync_service_1.evaluateCompletion)(sender, receiver).done) {
|
|
@@ -632,10 +689,7 @@ let RemoteFileSyncService = class RemoteFileSyncService {
|
|
|
632
689
|
state.guardWarning =
|
|
633
690
|
owner === 'vm'
|
|
634
691
|
? await this.guard.install(projectId, remoteId)
|
|
635
|
-
: (await this.host.installGitGuard(remoteId, projectId, {
|
|
636
|
-
homeName: (0, node_os_1.hostname)(),
|
|
637
|
-
reason: 'pc-git',
|
|
638
|
-
})).warning;
|
|
692
|
+
: (await this.host.installGitGuard(remoteId, projectId, { homeName: (0, node_os_1.hostname)(), reason: 'pc-git' }, fence)).warning;
|
|
639
693
|
}
|
|
640
694
|
state.step = 'done';
|
|
641
695
|
state.warning = null;
|