vibe-squire 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -0
- package/bin/vibe-squire.js +3 -0
- package/dist/prisma.config.d.ts +3 -0
- package/dist/prisma.config.js +14 -0
- package/dist/prisma.config.js.map +1 -0
- package/dist/src/app.controller.d.ts +3 -0
- package/dist/src/app.controller.js +30 -0
- package/dist/src/app.controller.js.map +1 -0
- package/dist/src/app.module.d.ts +5 -0
- package/dist/src/app.module.js +56 -0
- package/dist/src/app.module.js.map +1 -0
- package/dist/src/config/app-env.token.d.ts +14 -0
- package/dist/src/config/app-env.token.js +5 -0
- package/dist/src/config/app-env.token.js.map +1 -0
- package/dist/src/config/env-schema.d.ts +28 -0
- package/dist/src/config/env-schema.js +43 -0
- package/dist/src/config/env-schema.js.map +1 -0
- package/dist/src/config/env.module.d.ts +5 -0
- package/dist/src/config/env.module.js +27 -0
- package/dist/src/config/env.module.js.map +1 -0
- package/dist/src/config/integration-types.d.ts +4 -0
- package/dist/src/config/integration-types.js +6 -0
- package/dist/src/config/integration-types.js.map +1 -0
- package/dist/src/config/vk-executors.d.ts +5 -0
- package/dist/src/config/vk-executors.js +21 -0
- package/dist/src/config/vk-executors.js.map +1 -0
- package/dist/src/configure-express-app.d.ts +2 -0
- package/dist/src/configure-express-app.js +74 -0
- package/dist/src/configure-express-app.js.map +1 -0
- package/dist/src/database/resolve-database-url.d.ts +2 -0
- package/dist/src/database/resolve-database-url.js +46 -0
- package/dist/src/database/resolve-database-url.js.map +1 -0
- package/dist/src/database/sqlite-migrate.d.ts +1 -0
- package/dist/src/database/sqlite-migrate.js +77 -0
- package/dist/src/database/sqlite-migrate.js.map +1 -0
- package/dist/src/events/integration-settings-emitter.service.d.ts +6 -0
- package/dist/src/events/integration-settings-emitter.service.js +30 -0
- package/dist/src/events/integration-settings-emitter.service.js.map +1 -0
- package/dist/src/events/integration-settings.events.d.ts +1 -0
- package/dist/src/events/integration-settings.events.js +5 -0
- package/dist/src/events/integration-settings.events.js.map +1 -0
- package/dist/src/events/status-events.module.d.ts +2 -0
- package/dist/src/events/status-events.module.js +23 -0
- package/dist/src/events/status-events.module.js.map +1 -0
- package/dist/src/events/status-events.service.d.ts +8 -0
- package/dist/src/events/status-events.service.js +32 -0
- package/dist/src/events/status-events.service.js.map +1 -0
- package/dist/src/generated/prisma/browser.d.ts +10 -0
- package/dist/src/generated/prisma/browser.js +44 -0
- package/dist/src/generated/prisma/browser.js.map +1 -0
- package/dist/src/generated/prisma/client.d.ts +14 -0
- package/dist/src/generated/prisma/client.js +46 -0
- package/dist/src/generated/prisma/client.js.map +1 -0
- package/dist/src/generated/prisma/commonInputTypes.d.ts +333 -0
- package/dist/src/generated/prisma/commonInputTypes.js +3 -0
- package/dist/src/generated/prisma/commonInputTypes.js.map +1 -0
- package/dist/src/generated/prisma/enums.d.ts +1 -0
- package/dist/src/generated/prisma/enums.js +3 -0
- package/dist/src/generated/prisma/enums.js.map +1 -0
- package/dist/src/generated/prisma/internal/class.d.ts +50 -0
- package/dist/src/generated/prisma/internal/class.js +75 -0
- package/dist/src/generated/prisma/internal/class.js.map +1 -0
- package/dist/src/generated/prisma/internal/prismaNamespace.d.ts +789 -0
- package/dist/src/generated/prisma/internal/prismaNamespace.js +145 -0
- package/dist/src/generated/prisma/internal/prismaNamespace.js.map +1 -0
- package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.d.ts +104 -0
- package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.js +129 -0
- package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.js.map +1 -0
- package/dist/src/generated/prisma/models/PollRun.d.ts +858 -0
- package/dist/src/generated/prisma/models/PollRun.js +3 -0
- package/dist/src/generated/prisma/models/PollRun.js.map +1 -0
- package/dist/src/generated/prisma/models/PollRunItem.d.ts +742 -0
- package/dist/src/generated/prisma/models/PollRunItem.js +3 -0
- package/dist/src/generated/prisma/models/PollRunItem.js.map +1 -0
- package/dist/src/generated/prisma/models/RepoProjectMapping.d.ts +429 -0
- package/dist/src/generated/prisma/models/RepoProjectMapping.js +3 -0
- package/dist/src/generated/prisma/models/RepoProjectMapping.js.map +1 -0
- package/dist/src/generated/prisma/models/ScoutState.d.ts +573 -0
- package/dist/src/generated/prisma/models/ScoutState.js +3 -0
- package/dist/src/generated/prisma/models/ScoutState.js.map +1 -0
- package/dist/src/generated/prisma/models/Setting.d.ts +348 -0
- package/dist/src/generated/prisma/models/Setting.js +3 -0
- package/dist/src/generated/prisma/models/Setting.js.map +1 -0
- package/dist/src/generated/prisma/models/SyncedPullRequest.d.ts +538 -0
- package/dist/src/generated/prisma/models/SyncedPullRequest.js +3 -0
- package/dist/src/generated/prisma/models/SyncedPullRequest.js.map +1 -0
- package/dist/src/generated/prisma/models.d.ts +7 -0
- package/dist/src/generated/prisma/models.js +3 -0
- package/dist/src/generated/prisma/models.js.map +1 -0
- package/dist/src/integrations/github/gh-cli.service.d.ts +7 -0
- package/dist/src/integrations/github/gh-cli.service.js +41 -0
- package/dist/src/integrations/github/gh-cli.service.js.map +1 -0
- package/dist/src/integrations/github/github-pr-scout.service.d.ts +6 -0
- package/dist/src/integrations/github/github-pr-scout.service.js +78 -0
- package/dist/src/integrations/github/github-pr-scout.service.js.map +1 -0
- package/dist/src/integrations/github/github-search-prs.schema.d.ts +28 -0
- package/dist/src/integrations/github/github-search-prs.schema.js +21 -0
- package/dist/src/integrations/github/github-search-prs.schema.js.map +1 -0
- package/dist/src/integrations/github/github-settings-group.service.d.ts +10 -0
- package/dist/src/integrations/github/github-settings-group.service.js +22 -0
- package/dist/src/integrations/github/github-settings-group.service.js.map +1 -0
- package/dist/src/integrations/github/github-settings.schema.d.ts +16 -0
- package/dist/src/integrations/github/github-settings.schema.js +57 -0
- package/dist/src/integrations/github/github-settings.schema.js.map +1 -0
- package/dist/src/integrations/github/github-settings.service.d.ts +10 -0
- package/dist/src/integrations/github/github-settings.service.js +46 -0
- package/dist/src/integrations/github/github-settings.service.js.map +1 -0
- package/dist/src/integrations/github/github-source-status.service.d.ts +8 -0
- package/dist/src/integrations/github/github-source-status.service.js +55 -0
- package/dist/src/integrations/github/github-source-status.service.js.map +1 -0
- package/dist/src/integrations/github/github-source.module.d.ts +2 -0
- package/dist/src/integrations/github/github-source.module.js +74 -0
- package/dist/src/integrations/github/github-source.module.js.map +1 -0
- package/dist/src/integrations/github/github-ui.controller.d.ts +14 -0
- package/dist/src/integrations/github/github-ui.controller.js +94 -0
- package/dist/src/integrations/github/github-ui.controller.js.map +1 -0
- package/dist/src/integrations/integrations.module.d.ts +5 -0
- package/dist/src/integrations/integrations.module.js +38 -0
- package/dist/src/integrations/integrations.module.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vibe-kanban-destination.module.d.ts +2 -0
- package/dist/src/integrations/vibe-kanban/vibe-kanban-destination.module.js +98 -0
- package/dist/src/integrations/vibe-kanban/vibe-kanban-destination.module.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vk-board-adapter.service.d.ts +24 -0
- package/dist/src/integrations/vibe-kanban/vk-board-adapter.service.js +73 -0
- package/dist/src/integrations/vibe-kanban/vk-board-adapter.service.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vk-mcp-integration.listener.d.ts +18 -0
- package/dist/src/integrations/vibe-kanban/vk-mcp-integration.listener.js +104 -0
- package/dist/src/integrations/vibe-kanban/vk-mcp-integration.listener.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vk-settings-group.service.d.ts +14 -0
- package/dist/src/integrations/vibe-kanban/vk-settings-group.service.js +22 -0
- package/dist/src/integrations/vibe-kanban/vk-settings-group.service.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vk-settings.schema.d.ts +16 -0
- package/dist/src/integrations/vibe-kanban/vk-settings.schema.js +38 -0
- package/dist/src/integrations/vibe-kanban/vk-settings.schema.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vk-settings.service.d.ts +12 -0
- package/dist/src/integrations/vibe-kanban/vk-settings.service.js +51 -0
- package/dist/src/integrations/vibe-kanban/vk-settings.service.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vk-status.service.d.ts +14 -0
- package/dist/src/integrations/vibe-kanban/vk-status.service.js +89 -0
- package/dist/src/integrations/vibe-kanban/vk-status.service.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vk-ui.controller.d.ts +16 -0
- package/dist/src/integrations/vibe-kanban/vk-ui.controller.js +100 -0
- package/dist/src/integrations/vibe-kanban/vk-ui.controller.js.map +1 -0
- package/dist/src/integrations/vibe-kanban/vk-workspace-executors.d.ts +1 -0
- package/dist/src/integrations/vibe-kanban/vk-workspace-executors.js +7 -0
- package/dist/src/integrations/vibe-kanban/vk-workspace-executors.js.map +1 -0
- package/dist/src/logging/create-logger-params.d.ts +3 -0
- package/dist/src/logging/create-logger-params.js +56 -0
- package/dist/src/logging/create-logger-params.js.map +1 -0
- package/dist/src/logging/redact-urls.d.ts +1 -0
- package/dist/src/logging/redact-urls.js +7 -0
- package/dist/src/logging/redact-urls.js.map +1 -0
- package/dist/src/main.d.ts +1 -0
- package/dist/src/main.js +40 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/mappings/dto/create-mapping.dto.d.ts +5 -0
- package/dist/src/mappings/dto/create-mapping.dto.js +42 -0
- package/dist/src/mappings/dto/create-mapping.dto.js.map +1 -0
- package/dist/src/mappings/dto/update-mapping.dto.d.ts +5 -0
- package/dist/src/mappings/dto/update-mapping.dto.js +44 -0
- package/dist/src/mappings/dto/update-mapping.dto.js.map +1 -0
- package/dist/src/mappings/mappings.controller.d.ts +36 -0
- package/dist/src/mappings/mappings.controller.js +97 -0
- package/dist/src/mappings/mappings.controller.js.map +1 -0
- package/dist/src/mappings/mappings.module.d.ts +2 -0
- package/dist/src/mappings/mappings.module.js +25 -0
- package/dist/src/mappings/mappings.module.js.map +1 -0
- package/dist/src/mappings/mappings.service.d.ts +34 -0
- package/dist/src/mappings/mappings.service.js +96 -0
- package/dist/src/mappings/mappings.service.js.map +1 -0
- package/dist/src/ports/destination-board.port.d.ts +37 -0
- package/dist/src/ports/destination-board.port.js +3 -0
- package/dist/src/ports/destination-board.port.js.map +1 -0
- package/dist/src/ports/destination-status.port.d.ts +17 -0
- package/dist/src/ports/destination-status.port.js +3 -0
- package/dist/src/ports/destination-status.port.js.map +1 -0
- package/dist/src/ports/github-pr-candidate.d.ts +9 -0
- package/dist/src/ports/github-pr-candidate.js +3 -0
- package/dist/src/ports/github-pr-candidate.js.map +1 -0
- package/dist/src/ports/github-scout.port.d.ts +2 -0
- package/dist/src/ports/github-scout.port.js +3 -0
- package/dist/src/ports/github-scout.port.js.map +1 -0
- package/dist/src/ports/injection-tokens.d.ts +8 -0
- package/dist/src/ports/injection-tokens.js +12 -0
- package/dist/src/ports/injection-tokens.js.map +1 -0
- package/dist/src/ports/source-status.port.d.ts +14 -0
- package/dist/src/ports/source-status.port.js +3 -0
- package/dist/src/ports/source-status.port.js.map +1 -0
- package/dist/src/ports/sync-pr-scout.port.d.ts +4 -0
- package/dist/src/ports/sync-pr-scout.port.js +3 -0
- package/dist/src/ports/sync-pr-scout.port.js.map +1 -0
- package/dist/src/ports/ui-nav.types.d.ts +5 -0
- package/dist/src/ports/ui-nav.types.js +3 -0
- package/dist/src/ports/ui-nav.types.js.map +1 -0
- package/dist/src/ports/vk-mcp-stdio-session.port.d.ts +5 -0
- package/dist/src/ports/vk-mcp-stdio-session.port.js +3 -0
- package/dist/src/ports/vk-mcp-stdio-session.port.js.map +1 -0
- package/dist/src/prisma/prisma.module.d.ts +2 -0
- package/dist/src/prisma/prisma.module.js +22 -0
- package/dist/src/prisma/prisma.module.js.map +1 -0
- package/dist/src/prisma/prisma.service.d.ts +8 -0
- package/dist/src/prisma/prisma.service.js +39 -0
- package/dist/src/prisma/prisma.service.js.map +1 -0
- package/dist/src/reinit/reinit.controller.d.ts +20 -0
- package/dist/src/reinit/reinit.controller.js +43 -0
- package/dist/src/reinit/reinit.controller.js.map +1 -0
- package/dist/src/reinit/reinit.module.d.ts +2 -0
- package/dist/src/reinit/reinit.module.js +25 -0
- package/dist/src/reinit/reinit.module.js.map +1 -0
- package/dist/src/reinit/reinit.service.d.ts +33 -0
- package/dist/src/reinit/reinit.service.js +150 -0
- package/dist/src/reinit/reinit.service.js.map +1 -0
- package/dist/src/settings/core-settings-group.service.d.ts +18 -0
- package/dist/src/settings/core-settings-group.service.js +22 -0
- package/dist/src/settings/core-settings-group.service.js.map +1 -0
- package/dist/src/settings/core-settings.schema.d.ts +35 -0
- package/dist/src/settings/core-settings.schema.js +72 -0
- package/dist/src/settings/core-settings.schema.js.map +1 -0
- package/dist/src/settings/core-settings.service.d.ts +13 -0
- package/dist/src/settings/core-settings.service.js +55 -0
- package/dist/src/settings/core-settings.service.js.map +1 -0
- package/dist/src/settings/dto/patch-settings-body.schema.d.ts +2 -0
- package/dist/src/settings/dto/patch-settings-body.schema.js +7 -0
- package/dist/src/settings/dto/patch-settings-body.schema.js.map +1 -0
- package/dist/src/settings/dto/patch-settings.dto.d.ts +8 -0
- package/dist/src/settings/dto/patch-settings.dto.js +14 -0
- package/dist/src/settings/dto/patch-settings.dto.js.map +1 -0
- package/dist/src/settings/parse-settings-patch.d.ts +6 -0
- package/dist/src/settings/parse-settings-patch.js +33 -0
- package/dist/src/settings/parse-settings-patch.js.map +1 -0
- package/dist/src/settings/resolve-effective-setting.d.ts +1 -0
- package/dist/src/settings/resolve-effective-setting.js +13 -0
- package/dist/src/settings/resolve-effective-setting.js.map +1 -0
- package/dist/src/settings/setting-definition.d.ts +4 -0
- package/dist/src/settings/setting-definition.js +3 -0
- package/dist/src/settings/setting-definition.js.map +1 -0
- package/dist/src/settings/settings-catalog.service.d.ts +15 -0
- package/dist/src/settings/settings-catalog.service.js +68 -0
- package/dist/src/settings/settings-catalog.service.js.map +1 -0
- package/dist/src/settings/settings-group.base.d.ts +15 -0
- package/dist/src/settings/settings-group.base.js +35 -0
- package/dist/src/settings/settings-group.base.js.map +1 -0
- package/dist/src/settings/settings-group.tokens.d.ts +3 -0
- package/dist/src/settings/settings-group.tokens.js +6 -0
- package/dist/src/settings/settings-group.tokens.js.map +1 -0
- package/dist/src/settings/settings.controller.d.ts +16 -0
- package/dist/src/settings/settings.controller.js +116 -0
- package/dist/src/settings/settings.controller.js.map +1 -0
- package/dist/src/settings/settings.module.d.ts +2 -0
- package/dist/src/settings/settings.module.js +39 -0
- package/dist/src/settings/settings.module.js.map +1 -0
- package/dist/src/settings/settings.service.d.ts +25 -0
- package/dist/src/settings/settings.service.js +112 -0
- package/dist/src/settings/settings.service.js.map +1 -0
- package/dist/src/setup/setup-complete.guard.d.ts +7 -0
- package/dist/src/setup/setup-complete.guard.js +36 -0
- package/dist/src/setup/setup-complete.guard.js.map +1 -0
- package/dist/src/setup/setup-evaluation.service.d.ts +19 -0
- package/dist/src/setup/setup-evaluation.service.js +64 -0
- package/dist/src/setup/setup-evaluation.service.js.map +1 -0
- package/dist/src/setup/setup.module.d.ts +2 -0
- package/dist/src/setup/setup.module.js +23 -0
- package/dist/src/setup/setup.module.js.map +1 -0
- package/dist/src/status/dto/status-snapshot.dto.d.ts +37 -0
- package/dist/src/status/dto/status-snapshot.dto.js +168 -0
- package/dist/src/status/dto/status-snapshot.dto.js.map +1 -0
- package/dist/src/status/status-snapshot.contract.d.ts +1 -0
- package/dist/src/status/status-snapshot.contract.js +7 -0
- package/dist/src/status/status-snapshot.contract.js.map +1 -0
- package/dist/src/status/status-snapshot.schema.d.ts +61 -0
- package/dist/src/status/status-snapshot.schema.js +60 -0
- package/dist/src/status/status-snapshot.schema.js.map +1 -0
- package/dist/src/status/status.controller.d.ts +57 -0
- package/dist/src/status/status.controller.js +63 -0
- package/dist/src/status/status.controller.js.map +1 -0
- package/dist/src/status/status.module.d.ts +2 -0
- package/dist/src/status/status.module.js +28 -0
- package/dist/src/status/status.module.js.map +1 -0
- package/dist/src/status/status.service.d.ts +67 -0
- package/dist/src/status/status.service.js +147 -0
- package/dist/src/status/status.service.js.map +1 -0
- package/dist/src/sync/poll-backoff.d.ts +10 -0
- package/dist/src/sync/poll-backoff.js +22 -0
- package/dist/src/sync/poll-backoff.js.map +1 -0
- package/dist/src/sync/poll-cycle/ensure-issue-for-pr.d.ts +18 -0
- package/dist/src/sync/poll-cycle/ensure-issue-for-pr.js +166 -0
- package/dist/src/sync/poll-cycle/ensure-issue-for-pr.js.map +1 -0
- package/dist/src/sync/poll-cycle/ensure-issue-outcome.d.ts +14 -0
- package/dist/src/sync/poll-cycle/ensure-issue-outcome.js +3 -0
- package/dist/src/sync/poll-cycle/ensure-issue-outcome.js.map +1 -0
- package/dist/src/sync/poll-cycle/finalize-successful-poll-cycle.d.ts +16 -0
- package/dist/src/sync/poll-cycle/finalize-successful-poll-cycle.js +37 -0
- package/dist/src/sync/poll-cycle/finalize-successful-poll-cycle.js.map +1 -0
- package/dist/src/sync/poll-cycle/kanban-terminal-status.d.ts +1 -0
- package/dist/src/sync/poll-cycle/kanban-terminal-status.js +15 -0
- package/dist/src/sync/poll-cycle/kanban-terminal-status.js.map +1 -0
- package/dist/src/sync/poll-cycle/mcp-network-error-heuristic.d.ts +1 -0
- package/dist/src/sync/poll-cycle/mcp-network-error-heuristic.js +13 -0
- package/dist/src/sync/poll-cycle/mcp-network-error-heuristic.js.map +1 -0
- package/dist/src/sync/poll-cycle/persist-scout-run-outcome.d.ts +16 -0
- package/dist/src/sync/poll-cycle/persist-scout-run-outcome.js +61 -0
- package/dist/src/sync/poll-cycle/persist-scout-run-outcome.js.map +1 -0
- package/dist/src/sync/poll-cycle/poll-pr-kanban-copy.d.ts +4 -0
- package/dist/src/sync/poll-cycle/poll-pr-kanban-copy.js +24 -0
- package/dist/src/sync/poll-cycle/poll-pr-kanban-copy.js.map +1 -0
- package/dist/src/sync/poll-cycle/poll-scout-context.d.ts +23 -0
- package/dist/src/sync/poll-cycle/poll-scout-context.js +46 -0
- package/dist/src/sync/poll-cycle/poll-scout-context.js.map +1 -0
- package/dist/src/sync/poll-cycle/process-poll-candidates.d.ts +26 -0
- package/dist/src/sync/poll-cycle/process-poll-candidates.js +69 -0
- package/dist/src/sync/poll-cycle/process-poll-candidates.js.map +1 -0
- package/dist/src/sync/poll-cycle/reconcile-removed-sync-rows.d.ts +9 -0
- package/dist/src/sync/poll-cycle/reconcile-removed-sync-rows.js +40 -0
- package/dist/src/sync/poll-cycle/reconcile-removed-sync-rows.js.map +1 -0
- package/dist/src/sync/poll-cycle/run-poll-prerequisites.d.ts +13 -0
- package/dist/src/sync/poll-cycle/run-poll-prerequisites.js +25 -0
- package/dist/src/sync/poll-cycle/run-poll-prerequisites.js.map +1 -0
- package/dist/src/sync/poll-run-decisions.d.ts +16 -0
- package/dist/src/sync/poll-run-decisions.js +18 -0
- package/dist/src/sync/poll-run-decisions.js.map +1 -0
- package/dist/src/sync/poll-run-history.service.d.ts +58 -0
- package/dist/src/sync/poll-run-history.service.js +126 -0
- package/dist/src/sync/poll-run-history.service.js.map +1 -0
- package/dist/src/sync/poll-run-labels.d.ts +2 -0
- package/dist/src/sync/poll-run-labels.js +32 -0
- package/dist/src/sync/poll-run-labels.js.map +1 -0
- package/dist/src/sync/poll-scheduler.service.d.ts +22 -0
- package/dist/src/sync/poll-scheduler.service.js +124 -0
- package/dist/src/sync/poll-scheduler.service.js.map +1 -0
- package/dist/src/sync/pr-ignore-author-logins.d.ts +1 -0
- package/dist/src/sync/pr-ignore-author-logins.js +11 -0
- package/dist/src/sync/pr-ignore-author-logins.js.map +1 -0
- package/dist/src/sync/pr-review-template.d.ts +2 -0
- package/dist/src/sync/pr-review-template.js +11 -0
- package/dist/src/sync/pr-review-template.js.map +1 -0
- package/dist/src/sync/run-poll-cycle.service.d.ts +32 -0
- package/dist/src/sync/run-poll-cycle.service.js +234 -0
- package/dist/src/sync/run-poll-cycle.service.js.map +1 -0
- package/dist/src/sync/sync-constants.d.ts +3 -0
- package/dist/src/sync/sync-constants.js +7 -0
- package/dist/src/sync/sync-constants.js.map +1 -0
- package/dist/src/sync/sync-dependencies.guard.d.ts +9 -0
- package/dist/src/sync/sync-dependencies.guard.js +54 -0
- package/dist/src/sync/sync-dependencies.guard.js.map +1 -0
- package/dist/src/sync/sync-run-state.module.d.ts +2 -0
- package/dist/src/sync/sync-run-state.module.js +21 -0
- package/dist/src/sync/sync-run-state.module.js.map +1 -0
- package/dist/src/sync/sync-run-state.service.d.ts +16 -0
- package/dist/src/sync/sync-run-state.service.js +38 -0
- package/dist/src/sync/sync-run-state.service.js.map +1 -0
- package/dist/src/sync/sync.controller.d.ts +10 -0
- package/dist/src/sync/sync.controller.js +60 -0
- package/dist/src/sync/sync.controller.js.map +1 -0
- package/dist/src/sync/sync.module.d.ts +2 -0
- package/dist/src/sync/sync.module.js +43 -0
- package/dist/src/sync/sync.module.js.map +1 -0
- package/dist/src/sync/sync.service.d.ts +18 -0
- package/dist/src/sync/sync.service.js +70 -0
- package/dist/src/sync/sync.service.js.map +1 -0
- package/dist/src/ui/activity-api.controller.d.ts +37 -0
- package/dist/src/ui/activity-api.controller.js +58 -0
- package/dist/src/ui/activity-api.controller.js.map +1 -0
- package/dist/src/ui/integration-ui-registry.d.ts +6 -0
- package/dist/src/ui/integration-ui-registry.js +27 -0
- package/dist/src/ui/integration-ui-registry.js.map +1 -0
- package/dist/src/ui/setting-labels.d.ts +11 -0
- package/dist/src/ui/setting-labels.js +34 -0
- package/dist/src/ui/setting-labels.js.map +1 -0
- package/dist/src/ui/ui-nav.service.d.ts +10 -0
- package/dist/src/ui/ui-nav.service.js +48 -0
- package/dist/src/ui/ui-nav.service.js.map +1 -0
- package/dist/src/ui/ui-presenter.d.ts +51 -0
- package/dist/src/ui/ui-presenter.js +116 -0
- package/dist/src/ui/ui-presenter.js.map +1 -0
- package/dist/src/ui/ui-vibe-kanban-presenter.d.ts +15 -0
- package/dist/src/ui/ui-vibe-kanban-presenter.js +70 -0
- package/dist/src/ui/ui-vibe-kanban-presenter.js.map +1 -0
- package/dist/src/ui/ui.controller.d.ts +32 -0
- package/dist/src/ui/ui.controller.js +212 -0
- package/dist/src/ui/ui.controller.js.map +1 -0
- package/dist/src/ui/ui.module.d.ts +2 -0
- package/dist/src/ui/ui.module.js +30 -0
- package/dist/src/ui/ui.module.js.map +1 -0
- package/dist/src/vibe-kanban/mcp-result/mcp-tool-result-text.d.ts +3 -0
- package/dist/src/vibe-kanban/mcp-result/mcp-tool-result-text.js +26 -0
- package/dist/src/vibe-kanban/mcp-result/mcp-tool-result-text.js.map +1 -0
- package/dist/src/vibe-kanban/mcp-result/vk-mcp-list-get-issue-response.schema.d.ts +80 -0
- package/dist/src/vibe-kanban/mcp-result/vk-mcp-list-get-issue-response.schema.js +58 -0
- package/dist/src/vibe-kanban/mcp-result/vk-mcp-list-get-issue-response.schema.js.map +1 -0
- package/dist/src/vibe-kanban/mcp-result/vk-mcp-tool-result.d.ts +10 -0
- package/dist/src/vibe-kanban/mcp-result/vk-mcp-tool-result.js +169 -0
- package/dist/src/vibe-kanban/mcp-result/vk-mcp-tool-result.js.map +1 -0
- package/dist/src/vibe-kanban/transport/mcp-transport-config.d.ts +5 -0
- package/dist/src/vibe-kanban/transport/mcp-transport-config.js +16 -0
- package/dist/src/vibe-kanban/transport/mcp-transport-config.js.map +1 -0
- package/dist/src/vibe-kanban/transport/vk-mcp-stdio-session.service.d.ts +20 -0
- package/dist/src/vibe-kanban/transport/vk-mcp-stdio-session.service.js +124 -0
- package/dist/src/vibe-kanban/transport/vk-mcp-stdio-session.service.js.map +1 -0
- package/dist/src/vibe-kanban/transport/vk-stdio-command.schema.d.ts +9 -0
- package/dist/src/vibe-kanban/transport/vk-stdio-command.schema.js +37 -0
- package/dist/src/vibe-kanban/transport/vk-stdio-command.schema.js.map +1 -0
- package/dist/src/vibe-kanban/vibe-kanban-context.controller.d.ts +14 -0
- package/dist/src/vibe-kanban/vibe-kanban-context.controller.js +105 -0
- package/dist/src/vibe-kanban/vibe-kanban-context.controller.js.map +1 -0
- package/dist/src/vibe-kanban/vibe-kanban-mcp-configured.guard.d.ts +7 -0
- package/dist/src/vibe-kanban/vibe-kanban-mcp-configured.guard.js +37 -0
- package/dist/src/vibe-kanban/vibe-kanban-mcp-configured.guard.js.map +1 -0
- package/dist/src/vibe-kanban/vibe-kanban-mcp.service.d.ts +51 -0
- package/dist/src/vibe-kanban/vibe-kanban-mcp.service.js +225 -0
- package/dist/src/vibe-kanban/vibe-kanban-mcp.service.js.map +1 -0
- package/dist/src/vibe-kanban/vibe-kanban-query.schema.d.ts +4 -0
- package/dist/src/vibe-kanban/vibe-kanban-query.schema.js +8 -0
- package/dist/src/vibe-kanban/vibe-kanban-query.schema.js.map +1 -0
- package/dist/src/vibe-kanban/vk-board-cap.d.ts +5 -0
- package/dist/src/vibe-kanban/vk-board-cap.js +31 -0
- package/dist/src/vibe-kanban/vk-board-cap.js.map +1 -0
- package/dist/src/vibe-kanban/vk-contract.d.ts +3 -0
- package/dist/src/vibe-kanban/vk-contract.js +10 -0
- package/dist/src/vibe-kanban/vk-contract.js.map +1 -0
- package/dist/src/vibe-kanban/vk-entities.d.ts +20 -0
- package/dist/src/vibe-kanban/vk-entities.js +3 -0
- package/dist/src/vibe-kanban/vk-entities.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/ui/public/operator-activity.js +223 -0
- package/dist/ui/public/operator-dashboard.js +295 -0
- package/dist/ui/public/operator-mappings.js +97 -0
- package/dist/ui/public/operator-shell.js +43 -0
- package/dist/ui/public/operator-ui-shared.js +40 -0
- package/dist/ui/public/operator-vibe-kanban.js +90 -0
- package/dist/ui/public/operator.css +706 -0
- package/dist/ui/views/activity.hbs +14 -0
- package/dist/ui/views/dashboard.hbs +51 -0
- package/dist/ui/views/github.hbs +36 -0
- package/dist/ui/views/mappings.hbs +98 -0
- package/dist/ui/views/partials/layout.hbs +27 -0
- package/dist/ui/views/partials/nav.hbs +45 -0
- package/dist/ui/views/settings.hbs +69 -0
- package/dist/ui/views/vibe-kanban.hbs +95 -0
- package/package.json +115 -0
- package/prisma/migrations/20260325063706_init/migration.sql +29 -0
- package/prisma/migrations/20260325065127_synced_pull_requests/migration.sql +20 -0
- package/prisma/migrations/20260325070037_scout_failure_streak/migration.sql +16 -0
- package/prisma/migrations/20260325071958_scout_last_poll_stats/migration.sql +4 -0
- package/prisma/migrations/20260325120556_kanban_repo_and_workspace/migration.sql +28 -0
- package/prisma/migrations/20260325151849_poll_run_history/migration.sql +37 -0
- package/prisma/migrations/20260326064926_poll_run_skipped_board_limit/migration.sql +2 -0
- package/prisma/migrations/20260326120000_drop_runtime_integration_settings/migration.sql +2 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +100 -0
package/README.md
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# vibe-squire
|
|
2
|
+
|
|
3
|
+
Local background orchestrator that polls **GitHub** for PRs requesting your review and syncs them as issues into **[Vibe Kanban](https://vibekanban.com)** over MCP (Model Context Protocol).
|
|
4
|
+
|
|
5
|
+
Built with [NestJS](https://nestjs.com), [Prisma](https://www.prisma.io) + SQLite, and a hexagonal architecture that keeps source/destination adapters pluggable.
|
|
6
|
+
|
|
7
|
+
## How it works
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
graph LR
|
|
11
|
+
GH["GitHub (PRs)"] -- "gh pr list<br/>review-requested:@me" --> VS["vibe-squire<br/>(localhost)"]
|
|
12
|
+
VS -- "MCP stdio<br/>create / update issue" --> VK["Vibe Kanban<br/>(board)"]
|
|
13
|
+
VS -- "state" --> DB["SQLite"]
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
1. **Scout** — polls GitHub via `gh pr list --search "review-requested:@me"` on a configurable interval.
|
|
17
|
+
2. **Dispatcher** — routes each PR to a Kanban project based on `owner/repo` mappings, deduplicates, and creates/updates issues via the Vibe Kanban MCP server.
|
|
18
|
+
3. **Reconciliation** — when a PR leaves your review queue, the matching Kanban issue is closed automatically.
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
- **Node.js** >= 20 (LTS)
|
|
23
|
+
- **[`gh`](https://cli.github.com/)** — installed and authenticated (`gh auth login`)
|
|
24
|
+
- **[Vibe Kanban](https://vibekanban.com)** — the MCP server is spawned automatically as a stdio subprocess (`npx vibe-kanban@latest --mcp`)
|
|
25
|
+
|
|
26
|
+
## Quick start
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
git clone https://github.com/AliakseiPialetski/vibe-squire.git
|
|
30
|
+
cd vibe-squire
|
|
31
|
+
npm install
|
|
32
|
+
cp .env.example .env # review and adjust settings
|
|
33
|
+
npm run start:dev # dev mode with watch
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Open the operator UI at **http://127.0.0.1:3000/ui/dashboard** (root `/` redirects there).
|
|
37
|
+
|
|
38
|
+
## Configuration
|
|
39
|
+
|
|
40
|
+
### Environment variables
|
|
41
|
+
|
|
42
|
+
| Variable | Default | Description |
|
|
43
|
+
|----------|---------|-------------|
|
|
44
|
+
| `DATABASE_URL` | `file:./dev.db` | SQLite URL for Prisma. If unset, resolved from `DATABASE_PATH`, `VIBE_SQUIRE_DATA_DIR`, or OS defaults. |
|
|
45
|
+
| `HOST` | `127.0.0.1` | HTTP bind address. |
|
|
46
|
+
| `PORT` | `3000` | HTTP bind port. |
|
|
47
|
+
| `SOURCE_TYPE` | `github` | Scout adapter (`github`). |
|
|
48
|
+
| `DESTINATION_TYPE` | `vibe_kanban` | Board adapter (`vibe_kanban`). |
|
|
49
|
+
| `SCHEDULED_SYNC_ENABLED` | `true` | Set `false` to disable the automatic poll timer (manual "Sync now" still works). |
|
|
50
|
+
| `POLL_INTERVAL_MINUTES` | `10` | Minutes between scheduled polls (minimum 5, clamped). |
|
|
51
|
+
| `JITTER_MAX_SECONDS` | `30` | Random jitter added to the poll interval. |
|
|
52
|
+
| `RUN_NOW_COOLDOWN_SECONDS` | `60` | Minimum gap after a manual sync before another is allowed. |
|
|
53
|
+
| `LOG_LEVEL` | `info` | Pino log level (`fatal` / `error` / `warn` / `info` / `debug` / `trace` / `silent`). |
|
|
54
|
+
| `LOG_FILE_PATH` | — | Path for JSON file logging (in addition to console). |
|
|
55
|
+
| `OPENAPI_ENABLED` | `true` | Expose Swagger UI at `/api/docs`. |
|
|
56
|
+
|
|
57
|
+
### Runtime settings (SQLite)
|
|
58
|
+
|
|
59
|
+
These have no env var equivalent — set them via the operator UI or `PATCH /api/settings`:
|
|
60
|
+
|
|
61
|
+
`default_organization_id`, `default_project_id`, `vk_workspace_executor`, `kanban_done_status`, `pr_ignore_author_logins`, `pr_review_body_template`, `max_board_pr_count`.
|
|
62
|
+
|
|
63
|
+
### Effective precedence
|
|
64
|
+
|
|
65
|
+
For keys that have both an env var and a SQLite row: **env (non-empty) > SQLite > code default**.
|
|
66
|
+
|
|
67
|
+
### Database location
|
|
68
|
+
|
|
69
|
+
When `DATABASE_URL` is not set, the app resolves a path automatically:
|
|
70
|
+
|
|
71
|
+
| OS | Default directory |
|
|
72
|
+
|----|-------------------|
|
|
73
|
+
| Linux | `~/.local/state/vibe-squire/` (respects `XDG_STATE_HOME`) |
|
|
74
|
+
| macOS | `~/Library/Application Support/vibe-squire/` |
|
|
75
|
+
| Windows | `%APPDATA%\vibe-squire\` |
|
|
76
|
+
|
|
77
|
+
Override with `VIBE_SQUIRE_DATA_DIR` (directory) or `DATABASE_PATH` (full file path).
|
|
78
|
+
|
|
79
|
+
## Operator UI
|
|
80
|
+
|
|
81
|
+
Server-rendered Handlebars templates served by the same Nest process — no separate frontend build.
|
|
82
|
+
|
|
83
|
+
| URL | Page |
|
|
84
|
+
|-----|------|
|
|
85
|
+
| `/ui/dashboard` | Health status, sync schedule, "Sync now" button |
|
|
86
|
+
| `/ui/settings` | Poll interval, board limits, PR filters |
|
|
87
|
+
| `/ui/mappings` | GitHub `owner/repo` → Vibe Kanban project mappings |
|
|
88
|
+
| `/ui/vibe-kanban` | Organisation/project picker, workspace executor |
|
|
89
|
+
|
|
90
|
+
## HTTP API
|
|
91
|
+
|
|
92
|
+
| Method | Path | Description |
|
|
93
|
+
|--------|------|-------------|
|
|
94
|
+
| `GET` | `/api/status` | Aggregate health, setup, and scheduler snapshot |
|
|
95
|
+
| `GET` | `/api/status/stream` | SSE status stream (heartbeat + events) |
|
|
96
|
+
| `POST` | `/api/sync/run` | Trigger manual sync (cooldown + guards) |
|
|
97
|
+
| `POST` | `/api/reinit` | Soft reinit: re-probe `gh`, DB, MCP; reset backoff |
|
|
98
|
+
| `CRUD` | `/api/settings` | Runtime settings |
|
|
99
|
+
| `CRUD` | `/api/mappings` | Repo → project mappings |
|
|
100
|
+
| `GET` | `/api/vibe-kanban/organizations` | MCP `list_organizations` |
|
|
101
|
+
| `GET` | `/api/vibe-kanban/projects?organization_id=` | MCP `list_projects` |
|
|
102
|
+
|
|
103
|
+
OpenAPI docs (when enabled): **http://127.0.0.1:3000/api/docs**
|
|
104
|
+
|
|
105
|
+
## Scripts
|
|
106
|
+
|
|
107
|
+
| Script | Purpose |
|
|
108
|
+
|--------|---------|
|
|
109
|
+
| `npm run build` | Compile with `nest build` |
|
|
110
|
+
| `npm run start:dev` | Dev mode with file watching |
|
|
111
|
+
| `npm run start:prod` | Production: `node dist/main` |
|
|
112
|
+
| `npm test` | Unit tests |
|
|
113
|
+
| `npm run test:cov` | Unit tests with coverage |
|
|
114
|
+
| `npm run test:integration` | Integration tests (Prisma + migrations + Supertest) |
|
|
115
|
+
| `npm run lint` | Lint and auto-fix |
|
|
116
|
+
| `npm run typecheck` | TypeScript type checking |
|
|
117
|
+
|
|
118
|
+
## Testing
|
|
119
|
+
|
|
120
|
+
- **Unit tests** — `src/**/__tests__/**/*.spec.ts`. Pure logic, Zod schemas, helpers.
|
|
121
|
+
- **Integration tests** — `test/*.integration-spec.ts`. Real Prisma + SQLite (`:memory:`), Nest module wiring, Supertest HTTP. External boundaries (GitHub `gh`, Vibe Kanban MCP) are stubbed.
|
|
122
|
+
- CI runs lint, typecheck, build, unit, and integration tests on every push and PR.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npm test && npm run test:integration
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Deployment
|
|
129
|
+
|
|
130
|
+
### Direct (recommended for development)
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm run build
|
|
134
|
+
node dist/main
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### systemd (user unit)
|
|
138
|
+
|
|
139
|
+
```ini
|
|
140
|
+
[Unit]
|
|
141
|
+
Description=vibe-squire orchestrator
|
|
142
|
+
After=network-online.target
|
|
143
|
+
|
|
144
|
+
[Service]
|
|
145
|
+
Type=simple
|
|
146
|
+
WorkingDirectory=%h/projects/vibe-squire
|
|
147
|
+
Environment=NODE_ENV=production
|
|
148
|
+
Environment=HOST=127.0.0.1
|
|
149
|
+
Environment=PORT=3000
|
|
150
|
+
Environment=DATABASE_URL=file:%h/.local/share/vibe-squire/data.sqlite
|
|
151
|
+
ExecStart=/usr/bin/node dist/main
|
|
152
|
+
Restart=on-failure
|
|
153
|
+
|
|
154
|
+
[Install]
|
|
155
|
+
WantedBy=default.target
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Docker (optional)
|
|
159
|
+
|
|
160
|
+
```dockerfile
|
|
161
|
+
FROM node:22-bookworm-slim
|
|
162
|
+
WORKDIR /app
|
|
163
|
+
COPY package.json package-lock.json ./
|
|
164
|
+
RUN npm ci
|
|
165
|
+
COPY . .
|
|
166
|
+
RUN npx prisma generate && npm run build
|
|
167
|
+
ENV NODE_ENV=production
|
|
168
|
+
ENV HOST=0.0.0.0
|
|
169
|
+
EXPOSE 3000
|
|
170
|
+
CMD ["node", "dist/main"]
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Mount a volume for the SQLite database and set `DATABASE_URL=file:/data/vibe-squire.sqlite`.
|
|
174
|
+
|
|
175
|
+
**Important:** Run a single vibe-squire process per SQLite file. Concurrent processes on the same database are unsupported.
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
UNLICENSED
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require("dotenv/config");
|
|
4
|
+
const config_1 = require("prisma/config");
|
|
5
|
+
exports.default = (0, config_1.defineConfig)({
|
|
6
|
+
schema: 'prisma/schema.prisma',
|
|
7
|
+
migrations: {
|
|
8
|
+
path: 'prisma/migrations',
|
|
9
|
+
},
|
|
10
|
+
datasource: {
|
|
11
|
+
url: process.env['DATABASE_URL'],
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=prisma.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma.config.js","sourceRoot":"","sources":["../prisma.config.ts"],"names":[],"mappings":";;AAEA,yBAAuB;AACvB,0CAA6C;AAE7C,kBAAe,IAAA,qBAAY,EAAC;IAC1B,MAAM,EAAE,sBAAsB;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,mBAAmB;KAC1B;IACD,UAAU,EAAE;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;KACjC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AppController = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
let AppController = class AppController {
|
|
15
|
+
root() {
|
|
16
|
+
void 0;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.AppController = AppController;
|
|
20
|
+
__decorate([
|
|
21
|
+
(0, common_1.Get)(),
|
|
22
|
+
(0, common_1.Redirect)('/ui/dashboard', 302),
|
|
23
|
+
__metadata("design:type", Function),
|
|
24
|
+
__metadata("design:paramtypes", []),
|
|
25
|
+
__metadata("design:returntype", void 0)
|
|
26
|
+
], AppController.prototype, "root", null);
|
|
27
|
+
exports.AppController = AppController = __decorate([
|
|
28
|
+
(0, common_1.Controller)()
|
|
29
|
+
], AppController);
|
|
30
|
+
//# sourceMappingURL=app.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.controller.js","sourceRoot":"","sources":["../../src/app.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2D;AAGpD,IAAM,aAAa,GAAnB,MAAM,aAAa;IAGxB,IAAI;QACF,KAAK,CAAC,CAAC;IACT,CAAC;CACF,CAAA;AANY,sCAAa;AAGxB;IAFC,IAAA,YAAG,GAAE;IACL,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,CAAC;;;;yCAG9B;wBALU,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAMzB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
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 AppModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.AppModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
13
|
+
const nestjs_pino_1 = require("nestjs-pino");
|
|
14
|
+
const app_controller_1 = require("./app.controller");
|
|
15
|
+
const env_module_1 = require("./config/env.module");
|
|
16
|
+
const create_logger_params_1 = require("./logging/create-logger-params");
|
|
17
|
+
const integrations_module_1 = require("./integrations/integrations.module");
|
|
18
|
+
const prisma_module_1 = require("./prisma/prisma.module");
|
|
19
|
+
const settings_module_1 = require("./settings/settings.module");
|
|
20
|
+
const mappings_module_1 = require("./mappings/mappings.module");
|
|
21
|
+
const status_module_1 = require("./status/status.module");
|
|
22
|
+
const status_events_module_1 = require("./events/status-events.module");
|
|
23
|
+
const sync_module_1 = require("./sync/sync.module");
|
|
24
|
+
const sync_run_state_module_1 = require("./sync/sync-run-state.module");
|
|
25
|
+
const reinit_module_1 = require("./reinit/reinit.module");
|
|
26
|
+
const ui_module_1 = require("./ui/ui.module");
|
|
27
|
+
const setup_module_1 = require("./setup/setup.module");
|
|
28
|
+
let AppModule = AppModule_1 = class AppModule {
|
|
29
|
+
static forRoot(env) {
|
|
30
|
+
return {
|
|
31
|
+
module: AppModule_1,
|
|
32
|
+
imports: [
|
|
33
|
+
env_module_1.EnvModule.forRoot(env),
|
|
34
|
+
nestjs_pino_1.LoggerModule.forRoot((0, create_logger_params_1.createLoggerModuleParams)(env)),
|
|
35
|
+
event_emitter_1.EventEmitterModule.forRoot(),
|
|
36
|
+
status_events_module_1.StatusEventsModule,
|
|
37
|
+
prisma_module_1.PrismaModule,
|
|
38
|
+
sync_run_state_module_1.SyncRunStateModule,
|
|
39
|
+
settings_module_1.SettingsModule,
|
|
40
|
+
integrations_module_1.IntegrationsModule.register(env),
|
|
41
|
+
sync_module_1.SyncModule,
|
|
42
|
+
reinit_module_1.ReinitModule,
|
|
43
|
+
mappings_module_1.MappingsModule,
|
|
44
|
+
status_module_1.StatusModule,
|
|
45
|
+
setup_module_1.SetupModule,
|
|
46
|
+
ui_module_1.UiModule,
|
|
47
|
+
],
|
|
48
|
+
controllers: [app_controller_1.AppController],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
exports.AppModule = AppModule;
|
|
53
|
+
exports.AppModule = AppModule = AppModule_1 = __decorate([
|
|
54
|
+
(0, common_1.Module)({})
|
|
55
|
+
], AppModule);
|
|
56
|
+
//# sourceMappingURL=app.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,yDAA2D;AAC3D,6CAA2C;AAC3C,qDAAiD;AACjD,oDAAgD;AAEhD,yEAA0E;AAC1E,4EAAwE;AACxE,0DAAsD;AACtD,gEAA4D;AAC5D,gEAA4D;AAC5D,0DAAsD;AACtD,wEAAmE;AACnE,oDAAgD;AAChD,wEAAkE;AAClE,0DAAsD;AACtD,8CAA0C;AAC1C,uDAAmD;AAQ5C,IAAM,SAAS,iBAAf,MAAM,SAAS;IAMpB,MAAM,CAAC,OAAO,CAAC,GAAW;QACxB,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,OAAO,EAAE;gBACP,sBAAS,CAAC,OAAO,CAAC,GAAG,CAAC;gBACtB,0BAAY,CAAC,OAAO,CAAC,IAAA,+CAAwB,EAAC,GAAG,CAAC,CAAC;gBACnD,kCAAkB,CAAC,OAAO,EAAE;gBAC5B,yCAAkB;gBAClB,4BAAY;gBACZ,0CAAkB;gBAClB,gCAAc;gBACd,wCAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAChC,wBAAU;gBACV,4BAAY;gBACZ,gCAAc;gBACd,4BAAY;gBACZ,0BAAW;gBACX,oBAAQ;aACT;YACD,WAAW,EAAE,CAAC,8BAAa,CAAC;SAC7B,CAAC;IACJ,CAAC;CACF,CAAA;AA5BY,8BAAS;oBAAT,SAAS;IADrB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,SAAS,CA4BrB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { LevelWithSilent } from 'pino';
|
|
2
|
+
import type { SupportedSourceType, SupportedDestinationType } from './integration-types';
|
|
3
|
+
export type AppEnv = {
|
|
4
|
+
nodeEnv: string | undefined;
|
|
5
|
+
databaseUrl: string;
|
|
6
|
+
host: string;
|
|
7
|
+
port: number;
|
|
8
|
+
openapiEnabled: boolean;
|
|
9
|
+
logLevel: LevelWithSilent;
|
|
10
|
+
logFilePath: string | undefined;
|
|
11
|
+
sourceType: SupportedSourceType;
|
|
12
|
+
destinationType: SupportedDestinationType;
|
|
13
|
+
};
|
|
14
|
+
export declare const APP_ENV: unique symbol;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-env.token.js","sourceRoot":"","sources":["../../../src/config/app-env.token.ts"],"names":[],"mappings":";;;AAsBa,QAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { AppEnv } from './app-env.token';
|
|
3
|
+
declare const appEnvInputSchema: z.ZodObject<{
|
|
4
|
+
NODE_ENV: z.ZodOptional<z.ZodString>;
|
|
5
|
+
DATABASE_URL: z.ZodString;
|
|
6
|
+
HOST: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodCustomStringFormat<"hostname">, z.ZodIPv4]>>>;
|
|
7
|
+
PORT: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
OPENAPI_ENABLED: z.ZodDefault<z.ZodOptional<z.ZodCodec<z.ZodString, z.ZodBoolean>>>;
|
|
9
|
+
LOG_LEVEL: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
fatal: "fatal";
|
|
11
|
+
error: "error";
|
|
12
|
+
warn: "warn";
|
|
13
|
+
info: "info";
|
|
14
|
+
debug: "debug";
|
|
15
|
+
trace: "trace";
|
|
16
|
+
silent: "silent";
|
|
17
|
+
}>>>;
|
|
18
|
+
LOG_FILE_PATH: z.ZodOptional<z.ZodString>;
|
|
19
|
+
SOURCE_TYPE: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
20
|
+
github: "github";
|
|
21
|
+
}>>>;
|
|
22
|
+
DESTINATION_TYPE: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
23
|
+
vibe_kanban: "vibe_kanban";
|
|
24
|
+
}>>>;
|
|
25
|
+
}, z.core.$loose>;
|
|
26
|
+
export type AppEnvInput = z.input<typeof appEnvInputSchema>;
|
|
27
|
+
export declare function parseAppEnv(env?: NodeJS.ProcessEnv): AppEnv;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseAppEnv = parseAppEnv;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const integration_types_1 = require("./integration-types");
|
|
6
|
+
const PINO_LOG_LEVELS = [
|
|
7
|
+
'fatal',
|
|
8
|
+
'error',
|
|
9
|
+
'warn',
|
|
10
|
+
'info',
|
|
11
|
+
'debug',
|
|
12
|
+
'trace',
|
|
13
|
+
'silent',
|
|
14
|
+
];
|
|
15
|
+
const appEnvInputSchema = zod_1.z.looseObject({
|
|
16
|
+
NODE_ENV: zod_1.z.string().optional(),
|
|
17
|
+
DATABASE_URL: zod_1.z.string().trim().min(1, 'DATABASE_URL is required'),
|
|
18
|
+
HOST: zod_1.z.union([zod_1.z.hostname(), zod_1.z.ipv4()]).optional().default('127.0.0.1'),
|
|
19
|
+
PORT: zod_1.z.number().int().min(1).max(65535).default(3000),
|
|
20
|
+
OPENAPI_ENABLED: zod_1.z.stringbool().optional().default(true),
|
|
21
|
+
LOG_LEVEL: zod_1.z.enum(PINO_LOG_LEVELS).optional().default('info'),
|
|
22
|
+
LOG_FILE_PATH: zod_1.z.string().optional(),
|
|
23
|
+
SOURCE_TYPE: zod_1.z.enum(integration_types_1.SUPPORTED_SOURCE_TYPES).optional().default('github'),
|
|
24
|
+
DESTINATION_TYPE: zod_1.z
|
|
25
|
+
.enum(integration_types_1.SUPPORTED_DESTINATION_TYPES)
|
|
26
|
+
.optional()
|
|
27
|
+
.default('vibe_kanban'),
|
|
28
|
+
});
|
|
29
|
+
function parseAppEnv(env = process.env) {
|
|
30
|
+
const parsed = appEnvInputSchema.parse(env);
|
|
31
|
+
return {
|
|
32
|
+
nodeEnv: parsed.NODE_ENV,
|
|
33
|
+
databaseUrl: parsed.DATABASE_URL,
|
|
34
|
+
host: parsed.HOST,
|
|
35
|
+
port: parsed.PORT,
|
|
36
|
+
openapiEnabled: parsed.OPENAPI_ENABLED,
|
|
37
|
+
logLevel: parsed.LOG_LEVEL,
|
|
38
|
+
logFilePath: parsed.LOG_FILE_PATH?.trim() || undefined,
|
|
39
|
+
sourceType: parsed.SOURCE_TYPE,
|
|
40
|
+
destinationType: parsed.DESTINATION_TYPE,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=env-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-schema.js","sourceRoot":"","sources":["../../../src/config/env-schema.ts"],"names":[],"mappings":";;AA4CA,kCAcC;AAlDD,6BAAwB;AAExB,2DAG6B;AAG7B,MAAM,eAAe,GAAG;IACtB,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;CACqC,CAAC;AAEhD,MAAM,iBAAiB,GAAG,OAAC,CAAC,WAAW,CAAC;IACtC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;IAClE,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,CAAC,OAAC,CAAC,QAAQ,EAAE,EAAE,OAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IACvE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACtD,eAAe,EAAE,OAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxD,SAAS,EAAE,OAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAE7D,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,OAAC,CAAC,IAAI,CAAC,0CAAsB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxE,gBAAgB,EAAE,OAAC;SAChB,IAAI,CAAC,+CAA2B,CAAC;SACjC,QAAQ,EAAE;SACV,OAAO,CAAC,aAAa,CAAC;CAC1B,CAAC,CAAC;AAIH,SAAgB,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5C,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,QAAQ;QACxB,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,cAAc,EAAE,MAAM,CAAC,eAAe;QACtC,QAAQ,EAAE,MAAM,CAAC,SAAS;QAC1B,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS;QACtD,UAAU,EAAE,MAAM,CAAC,WAAW;QAC9B,eAAe,EAAE,MAAM,CAAC,gBAAgB;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 EnvModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.EnvModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const app_env_token_1 = require("./app-env.token");
|
|
13
|
+
let EnvModule = EnvModule_1 = class EnvModule {
|
|
14
|
+
static forRoot(env) {
|
|
15
|
+
return {
|
|
16
|
+
module: EnvModule_1,
|
|
17
|
+
providers: [{ provide: app_env_token_1.APP_ENV, useValue: env }],
|
|
18
|
+
exports: [app_env_token_1.APP_ENV],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.EnvModule = EnvModule;
|
|
23
|
+
exports.EnvModule = EnvModule = EnvModule_1 = __decorate([
|
|
24
|
+
(0, common_1.Global)(),
|
|
25
|
+
(0, common_1.Module)({})
|
|
26
|
+
], EnvModule);
|
|
27
|
+
//# sourceMappingURL=env.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.module.js","sourceRoot":"","sources":["../../../src/config/env.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoE;AACpE,mDAAuD;AAIhD,IAAM,SAAS,iBAAf,MAAM,SAAS;IACpB,MAAM,CAAC,OAAO,CAAC,GAAW;QACxB,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,uBAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAChD,OAAO,EAAE,CAAC,uBAAO,CAAC;SACnB,CAAC;IACJ,CAAC;CACF,CAAA;AARY,8BAAS;oBAAT,SAAS;IAFrB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,SAAS,CAQrB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const SUPPORTED_SOURCE_TYPES: readonly ["github"];
|
|
2
|
+
export type SupportedSourceType = (typeof SUPPORTED_SOURCE_TYPES)[number];
|
|
3
|
+
export declare const SUPPORTED_DESTINATION_TYPES: readonly ["vibe_kanban"];
|
|
4
|
+
export type SupportedDestinationType = (typeof SUPPORTED_DESTINATION_TYPES)[number];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SUPPORTED_DESTINATION_TYPES = exports.SUPPORTED_SOURCE_TYPES = void 0;
|
|
4
|
+
exports.SUPPORTED_SOURCE_TYPES = ['github'];
|
|
5
|
+
exports.SUPPORTED_DESTINATION_TYPES = ['vibe_kanban'];
|
|
6
|
+
//# sourceMappingURL=integration-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-types.js","sourceRoot":"","sources":["../../../src/config/integration-types.ts"],"names":[],"mappings":";;;AACa,QAAA,sBAAsB,GAAG,CAAC,QAAQ,CAAU,CAAC;AAI7C,QAAA,2BAA2B,GAAG,CAAC,aAAa,CAAU,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VK_WORKSPACE_EXECUTOR_OPTIONS = void 0;
|
|
4
|
+
exports.normalizeVkWorkspaceExecutor = normalizeVkWorkspaceExecutor;
|
|
5
|
+
exports.VK_WORKSPACE_EXECUTOR_OPTIONS = [
|
|
6
|
+
{ value: 'claude-code', label: 'Claude Code' },
|
|
7
|
+
{ value: 'amp', label: 'Amp' },
|
|
8
|
+
{ value: 'gemini', label: 'Gemini' },
|
|
9
|
+
{ value: 'codex', label: 'Codex' },
|
|
10
|
+
{ value: 'opencode', label: 'OpenCode' },
|
|
11
|
+
{ value: 'cursor_agent', label: 'Cursor Agent' },
|
|
12
|
+
{ value: 'qwen-code', label: 'Qwen Code' },
|
|
13
|
+
{ value: 'copilot', label: 'Copilot' },
|
|
14
|
+
{ value: 'droid', label: 'Droid' },
|
|
15
|
+
];
|
|
16
|
+
function normalizeVkWorkspaceExecutor(raw) {
|
|
17
|
+
const t = raw.trim().toLowerCase();
|
|
18
|
+
const found = exports.VK_WORKSPACE_EXECUTOR_OPTIONS.find((o) => o.value.toLowerCase() === t);
|
|
19
|
+
return found ? found.value : null;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=vk-executors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vk-executors.js","sourceRoot":"","sources":["../../../src/config/vk-executors.ts"],"names":[],"mappings":";;;AAgBA,oEAMC;AArBY,QAAA,6BAA6B,GAGrC;IACH,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;IAC9C,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IAC9B,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;IAChD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;IAC1C,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACtC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;CACnC,CAAC;AAEF,SAAgB,4BAA4B,CAAC,GAAW;IACtD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,qCAA6B,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CACnC,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.configureExpressApp = configureExpressApp;
|
|
40
|
+
const node_fs_1 = require("node:fs");
|
|
41
|
+
const node_path_1 = require("node:path");
|
|
42
|
+
const express = __importStar(require("express"));
|
|
43
|
+
const hbs_1 = __importDefault(require("hbs"));
|
|
44
|
+
const UI_LAYOUT_MARKER = (0, node_path_1.join)('views', 'partials', 'layout.hbs');
|
|
45
|
+
function resolveUiRoot() {
|
|
46
|
+
const siblingUi = (0, node_path_1.join)(__dirname, '..', 'ui');
|
|
47
|
+
const coLocatedUi = (0, node_path_1.join)(__dirname, 'ui');
|
|
48
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(siblingUi, UI_LAYOUT_MARKER))) {
|
|
49
|
+
return siblingUi;
|
|
50
|
+
}
|
|
51
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(coLocatedUi, UI_LAYOUT_MARKER))) {
|
|
52
|
+
return coLocatedUi;
|
|
53
|
+
}
|
|
54
|
+
return siblingUi;
|
|
55
|
+
}
|
|
56
|
+
function configureExpressApp(app) {
|
|
57
|
+
app.use(express.urlencoded({ extended: true }));
|
|
58
|
+
const uiRoot = resolveUiRoot();
|
|
59
|
+
const viewsPath = (0, node_path_1.join)(uiRoot, 'views');
|
|
60
|
+
const publicPath = (0, node_path_1.join)(uiRoot, 'public');
|
|
61
|
+
const partialsDir = (0, node_path_1.join)(viewsPath, 'partials');
|
|
62
|
+
hbs_1.default.registerPartial('layout', (0, node_fs_1.readFileSync)((0, node_path_1.join)(partialsDir, 'layout.hbs'), 'utf8'));
|
|
63
|
+
hbs_1.default.registerPartial('nav', (0, node_fs_1.readFileSync)((0, node_path_1.join)(partialsDir, 'nav.hbs'), 'utf8'));
|
|
64
|
+
hbs_1.default.registerHelper('eq', (a, b) => a === b);
|
|
65
|
+
hbs_1.default.registerHelper('renderBlock', function (options) {
|
|
66
|
+
const block = options.data?.['partial-block'];
|
|
67
|
+
return typeof block === 'function' ? block(this, options) : '';
|
|
68
|
+
});
|
|
69
|
+
hbs_1.default.registerHelper('json', (context) => JSON.stringify(context ?? null).replace(/</g, '\\u003c'));
|
|
70
|
+
app.useStaticAssets(publicPath, { prefix: '/ui/assets/' });
|
|
71
|
+
app.setBaseViewsDir(viewsPath);
|
|
72
|
+
app.setViewEngine('hbs');
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=configure-express-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-express-app.js","sourceRoot":"","sources":["../../src/configure-express-app.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,kDA0CC;AAxED,qCAAmD;AACnD,yCAAiC;AAEjC,iDAAmC;AACnC,8CAAsB;AAEtB,MAAM,gBAAgB,GAAG,IAAA,gBAAI,EAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AAOjE,SAAS,aAAa;IACpB,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE1C,IAAI,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAMD,SAAgB,mBAAmB,CAAC,GAA2B;IAC7D,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEhD,aAAG,CAAC,eAAe,CACjB,QAAQ,EACR,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CACtD,CAAC;IACF,aAAG,CAAC,eAAe,CACjB,KAAK,EACL,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,WAAW,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CACnD,CAAC;IACF,aAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAO9D,aAAG,CAAC,cAAc,CAChB,aAAa,EACb,UAEE,OAEC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC;QAC9C,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,CAAC,CACF,CAAC;IACF,aAAG,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,OAAgB,EAAE,EAAE,CAC9C,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CACzD,CAAC;IAEF,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC3D,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC/B,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureDatabaseUrlFromEnv = ensureDatabaseUrlFromEnv;
|
|
4
|
+
exports.databaseUrlToFilePath = databaseUrlToFilePath;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const node_url_1 = require("node:url");
|
|
9
|
+
function ensureDatabaseUrlFromEnv() {
|
|
10
|
+
const existing = process.env.DATABASE_URL?.trim();
|
|
11
|
+
if (existing) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const explicitFile = process.env.DATABASE_PATH?.trim();
|
|
15
|
+
if (explicitFile) {
|
|
16
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(explicitFile), { recursive: true });
|
|
17
|
+
process.env.DATABASE_URL = (0, node_url_1.pathToFileURL)(explicitFile).href;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const dataDir = process.env.VIBE_SQUIRE_DATA_DIR?.trim() || defaultDataDirectory();
|
|
21
|
+
(0, node_fs_1.mkdirSync)(dataDir, { recursive: true });
|
|
22
|
+
const dbPath = (0, node_path_1.join)(dataDir, 'vibe-squire.db');
|
|
23
|
+
process.env.DATABASE_URL = (0, node_url_1.pathToFileURL)(dbPath).href;
|
|
24
|
+
}
|
|
25
|
+
function databaseUrlToFilePath(url) {
|
|
26
|
+
if (url.startsWith('file://')) {
|
|
27
|
+
return (0, node_url_1.fileURLToPath)(url);
|
|
28
|
+
}
|
|
29
|
+
const raw = url.replace(/^file:/, '');
|
|
30
|
+
return (0, node_path_1.resolve)(raw);
|
|
31
|
+
}
|
|
32
|
+
function defaultDataDirectory() {
|
|
33
|
+
if (process.platform === 'win32') {
|
|
34
|
+
const base = process.env.APPDATA || (0, node_path_1.join)((0, node_os_1.homedir)(), 'AppData', 'Roaming');
|
|
35
|
+
return (0, node_path_1.join)(base, 'vibe-squire');
|
|
36
|
+
}
|
|
37
|
+
if (process.platform === 'darwin') {
|
|
38
|
+
return (0, node_path_1.join)((0, node_os_1.homedir)(), 'Library', 'Application Support', 'vibe-squire');
|
|
39
|
+
}
|
|
40
|
+
const xdg = process.env.XDG_STATE_HOME?.trim();
|
|
41
|
+
if (xdg) {
|
|
42
|
+
return (0, node_path_1.join)(xdg, 'vibe-squire');
|
|
43
|
+
}
|
|
44
|
+
return (0, node_path_1.join)((0, node_os_1.homedir)(), '.local', 'state', 'vibe-squire');
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=resolve-database-url.js.map
|