devchain-cli 0.9.2 → 0.10.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/dist/cli.js +985 -194
- package/dist/drizzle/0044_supreme_joshua_kane.sql +57 -0
- package/dist/drizzle/0045_provider_auto_compact_threshold.sql +11 -0
- package/dist/drizzle/0046_worktrees_owner_project_id.sql +3 -0
- package/dist/drizzle/meta/0044_snapshot.json +4620 -0
- package/dist/drizzle/meta/_journal.json +22 -1
- package/dist/node_modules/@devchain/shared/schemas/export-schema.d.ts +18 -0
- package/dist/node_modules/@devchain/shared/schemas/export-schema.d.ts.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/export-schema.js +6 -0
- package/dist/node_modules/@devchain/shared/schemas/export-schema.js.map +1 -1
- package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
- package/dist/server/app.main.module.d.ts +4 -0
- package/dist/server/app.main.module.js +102 -0
- package/dist/server/app.main.module.js.map +1 -0
- package/dist/server/app.module.d.ts +1 -4
- package/dist/server/app.module.js +2 -78
- package/dist/server/app.module.js.map +1 -1
- package/dist/server/app.normal.module.d.ts +4 -0
- package/dist/server/app.normal.module.js +90 -0
- package/dist/server/app.normal.module.js.map +1 -0
- package/dist/server/common/config/env.config.d.ts +81 -1
- package/dist/server/common/config/env.config.js +52 -2
- package/dist/server/common/config/env.config.js.map +1 -1
- package/dist/server/common/templates-directory.d.ts +8 -0
- package/dist/server/common/templates-directory.js +56 -0
- package/dist/server/common/templates-directory.js.map +1 -0
- package/dist/server/main.js +58 -7
- package/dist/server/main.js.map +1 -1
- package/dist/server/modules/chat/dtos/chat.dto.d.ts +2 -2
- package/dist/server/modules/core/controllers/health.controller.d.ts +4 -0
- package/dist/server/modules/core/controllers/health.controller.js +22 -1
- package/dist/server/modules/core/controllers/health.controller.js.map +1 -1
- package/dist/server/modules/core/controllers/runtime.controller.d.ts +18 -0
- package/dist/server/modules/core/controllers/runtime.controller.js +130 -0
- package/dist/server/modules/core/controllers/runtime.controller.js.map +1 -0
- package/dist/server/modules/core/core-common.module.d.ts +2 -0
- package/dist/server/modules/core/core-common.module.js +24 -0
- package/dist/server/modules/core/core-common.module.js.map +1 -0
- package/dist/server/modules/core/core-main-health.module.d.ts +2 -0
- package/dist/server/modules/core/core-main-health.module.js +32 -0
- package/dist/server/modules/core/core-main-health.module.js.map +1 -0
- package/dist/server/modules/core/core-normal-health.module.d.ts +2 -0
- package/dist/server/modules/core/core-normal-health.module.js +29 -0
- package/dist/server/modules/core/core-normal-health.module.js.map +1 -0
- package/dist/server/modules/core/core-normal.module.d.ts +2 -0
- package/dist/server/modules/core/core-normal.module.js +28 -0
- package/dist/server/modules/core/core-normal.module.js.map +1 -0
- package/dist/server/modules/core/core.module.js +4 -11
- package/dist/server/modules/core/core.module.js.map +1 -1
- package/dist/server/modules/core/services/health.service.d.ts +13 -0
- package/dist/server/modules/core/services/health.service.js +39 -0
- package/dist/server/modules/core/services/health.service.js.map +1 -0
- package/dist/server/modules/core/services/main-readiness-checker.service.d.ts +14 -0
- package/dist/server/modules/core/services/main-readiness-checker.service.js +82 -0
- package/dist/server/modules/core/services/main-readiness-checker.service.js.map +1 -0
- package/dist/server/modules/core/services/normal-readiness-checker.service.d.ts +13 -0
- package/dist/server/modules/core/services/normal-readiness-checker.service.js +67 -0
- package/dist/server/modules/core/services/normal-readiness-checker.service.js.map +1 -0
- package/dist/server/modules/core/services/preflight.service.d.ts +1 -0
- package/dist/server/modules/core/services/preflight.service.js +18 -1
- package/dist/server/modules/core/services/preflight.service.js.map +1 -1
- package/dist/server/modules/core/services/provider-mcp-ensure.service.js +8 -0
- package/dist/server/modules/core/services/provider-mcp-ensure.service.js.map +1 -1
- package/dist/server/modules/epics/epics.module.js +2 -2
- package/dist/server/modules/epics/epics.module.js.map +1 -1
- package/dist/server/modules/events/catalog/claude.hooks.session.started.d.ts +39 -0
- package/dist/server/modules/events/catalog/claude.hooks.session.started.js +20 -0
- package/dist/server/modules/events/catalog/claude.hooks.session.started.js.map +1 -0
- package/dist/server/modules/events/catalog/epic.created.d.ts +2 -2
- package/dist/server/modules/events/catalog/index.d.ts +38 -4
- package/dist/server/modules/events/catalog/index.js +2 -0
- package/dist/server/modules/events/catalog/index.js.map +1 -1
- package/dist/server/modules/events/catalog/terminal.watcher.triggered.d.ts +2 -2
- package/dist/server/modules/events/controllers/event-log.controller.d.ts +1 -1
- package/dist/server/modules/events/controllers/event-log.controller.js +11 -9
- package/dist/server/modules/events/controllers/event-log.controller.js.map +1 -1
- package/dist/server/modules/events/dtos/event-log.dto.d.ts +1 -0
- package/dist/server/modules/events/events-domain.module.d.ts +2 -0
- package/dist/server/modules/events/events-domain.module.js +42 -0
- package/dist/server/modules/events/events-domain.module.js.map +1 -0
- package/dist/server/modules/events/events-infra.module.d.ts +2 -0
- package/dist/server/modules/events/events-infra.module.js +26 -0
- package/dist/server/modules/events/events-infra.module.js.map +1 -0
- package/dist/server/modules/events/events.module.js +4 -27
- package/dist/server/modules/events/events.module.js.map +1 -1
- package/dist/server/modules/events/index.d.ts +2 -0
- package/dist/server/modules/events/index.js +2 -0
- package/dist/server/modules/events/index.js.map +1 -1
- package/dist/server/modules/events/services/event-log.service.d.ts +8 -1
- package/dist/server/modules/events/services/event-log.service.js +41 -0
- package/dist/server/modules/events/services/event-log.service.js.map +1 -1
- package/dist/server/modules/events/subscribers/index.js +2 -0
- package/dist/server/modules/events/subscribers/index.js.map +1 -1
- package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.d.ts +8 -0
- package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.js +48 -0
- package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.js.map +1 -0
- package/dist/server/modules/git/dtos/git.dto.d.ts +1 -1
- package/dist/server/modules/guests/guests.module.js +2 -2
- package/dist/server/modules/guests/guests.module.js.map +1 -1
- package/dist/server/modules/hooks/controllers/hooks.controller.d.ts +7 -0
- package/dist/server/modules/hooks/controllers/hooks.controller.js +49 -0
- package/dist/server/modules/hooks/controllers/hooks.controller.js.map +1 -0
- package/dist/server/modules/hooks/dtos/hook-event.dto.d.ts +41 -0
- package/dist/server/modules/hooks/dtos/hook-event.dto.js +19 -0
- package/dist/server/modules/hooks/dtos/hook-event.dto.js.map +1 -0
- package/dist/server/modules/hooks/hooks.module.d.ts +2 -0
- package/dist/server/modules/hooks/hooks.module.js +27 -0
- package/dist/server/modules/hooks/hooks.module.js.map +1 -0
- package/dist/server/modules/hooks/services/hooks-config.service.d.ts +5 -0
- package/dist/server/modules/hooks/services/hooks-config.service.js +215 -0
- package/dist/server/modules/hooks/services/hooks-config.service.js.map +1 -0
- package/dist/server/modules/hooks/services/hooks.service.d.ts +11 -0
- package/dist/server/modules/hooks/services/hooks.service.js +83 -0
- package/dist/server/modules/hooks/services/hooks.service.js.map +1 -0
- package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +14 -14
- package/dist/server/modules/mcp/mcp.module.js +2 -2
- package/dist/server/modules/mcp/mcp.module.js.map +1 -1
- package/dist/server/modules/orchestrator/docker/docker.module.d.ts +2 -0
- package/dist/server/modules/orchestrator/docker/docker.module.js +22 -0
- package/dist/server/modules/orchestrator/docker/docker.module.js.map +1 -0
- package/dist/server/modules/orchestrator/docker/index.d.ts +3 -0
- package/dist/server/modules/orchestrator/docker/index.js +20 -0
- package/dist/server/modules/orchestrator/docker/index.js.map +1 -0
- package/dist/server/modules/orchestrator/docker/services/docker.service.d.ts +85 -0
- package/dist/server/modules/orchestrator/docker/services/docker.service.js +745 -0
- package/dist/server/modules/orchestrator/docker/services/docker.service.js.map +1 -0
- package/dist/server/modules/orchestrator/docker/services/seed-preparation.service.d.ts +11 -0
- package/dist/server/modules/orchestrator/docker/services/seed-preparation.service.js +181 -0
- package/dist/server/modules/orchestrator/docker/services/seed-preparation.service.js.map +1 -0
- package/dist/server/modules/orchestrator/git/controllers/git.controller.d.ts +8 -0
- package/dist/server/modules/orchestrator/git/controllers/git.controller.js +38 -0
- package/dist/server/modules/orchestrator/git/controllers/git.controller.js.map +1 -0
- package/dist/server/modules/orchestrator/git/git.module.d.ts +2 -0
- package/dist/server/modules/orchestrator/git/git.module.js +23 -0
- package/dist/server/modules/orchestrator/git/git.module.js.map +1 -0
- package/dist/server/modules/orchestrator/git/index.d.ts +3 -0
- package/dist/server/modules/orchestrator/git/index.js +20 -0
- package/dist/server/modules/orchestrator/git/index.js.map +1 -0
- package/dist/server/modules/orchestrator/git/services/git-worktree.service.d.ts +83 -0
- package/dist/server/modules/orchestrator/git/services/git-worktree.service.js +474 -0
- package/dist/server/modules/orchestrator/git/services/git-worktree.service.js.map +1 -0
- package/dist/server/modules/orchestrator/index.d.ts +6 -0
- package/dist/server/modules/orchestrator/index.js +23 -0
- package/dist/server/modules/orchestrator/index.js.map +1 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/db/index.d.ts +1 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/db/index.js +18 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/db/index.js.map +1 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/db/orchestrator.provider.d.ts +5 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/db/orchestrator.provider.js +10 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/db/orchestrator.provider.js.map +1 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/index.d.ts +2 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/index.js +19 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/index.js.map +1 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/orchestrator-storage.module.d.ts +2 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/orchestrator-storage.module.js +23 -0
- package/dist/server/modules/orchestrator/orchestrator-storage/orchestrator-storage.module.js.map +1 -0
- package/dist/server/modules/orchestrator/proxy/index.d.ts +2 -0
- package/dist/server/modules/orchestrator/proxy/index.js +19 -0
- package/dist/server/modules/orchestrator/proxy/index.js.map +1 -0
- package/dist/server/modules/orchestrator/proxy/orchestrator-proxy.module.d.ts +2 -0
- package/dist/server/modules/orchestrator/proxy/orchestrator-proxy.module.js +22 -0
- package/dist/server/modules/orchestrator/proxy/orchestrator-proxy.module.js.map +1 -0
- package/dist/server/modules/orchestrator/proxy/services/orchestrator-proxy.service.d.ts +18 -0
- package/dist/server/modules/orchestrator/proxy/services/orchestrator-proxy.service.js +192 -0
- package/dist/server/modules/orchestrator/proxy/services/orchestrator-proxy.service.js.map +1 -0
- package/dist/server/modules/orchestrator/sync/controllers/overview.controller.d.ts +9 -0
- package/dist/server/modules/orchestrator/sync/controllers/overview.controller.js +66 -0
- package/dist/server/modules/orchestrator/sync/controllers/overview.controller.js.map +1 -0
- package/dist/server/modules/orchestrator/sync/dtos/overview.dto.d.ts +52 -0
- package/dist/server/modules/orchestrator/sync/dtos/overview.dto.js +3 -0
- package/dist/server/modules/orchestrator/sync/dtos/overview.dto.js.map +1 -0
- package/dist/server/modules/orchestrator/sync/dtos/task-merge.dto.d.ts +5 -0
- package/dist/server/modules/orchestrator/sync/dtos/task-merge.dto.js +3 -0
- package/dist/server/modules/orchestrator/sync/dtos/task-merge.dto.js.map +1 -0
- package/dist/server/modules/orchestrator/sync/events/task-merge.events.d.ts +4 -0
- package/dist/server/modules/orchestrator/sync/events/task-merge.events.js +5 -0
- package/dist/server/modules/orchestrator/sync/events/task-merge.events.js.map +1 -0
- package/dist/server/modules/orchestrator/sync/index.d.ts +7 -0
- package/dist/server/modules/orchestrator/sync/index.js +24 -0
- package/dist/server/modules/orchestrator/sync/index.js.map +1 -0
- package/dist/server/modules/orchestrator/sync/services/lazy-fetch.service.d.ts +31 -0
- package/dist/server/modules/orchestrator/sync/services/lazy-fetch.service.js +410 -0
- package/dist/server/modules/orchestrator/sync/services/lazy-fetch.service.js.map +1 -0
- package/dist/server/modules/orchestrator/sync/services/task-merge.service.d.ts +44 -0
- package/dist/server/modules/orchestrator/sync/services/task-merge.service.js +730 -0
- package/dist/server/modules/orchestrator/sync/services/task-merge.service.js.map +1 -0
- package/dist/server/modules/orchestrator/sync/sync.module.d.ts +2 -0
- package/dist/server/modules/orchestrator/sync/sync.module.js +36 -0
- package/dist/server/modules/orchestrator/sync/sync.module.js.map +1 -0
- package/dist/server/modules/orchestrator/ui/app/lib/worktrees.d.ts +118 -0
- package/dist/server/modules/orchestrator/ui/app/lib/worktrees.js +297 -0
- package/dist/server/modules/orchestrator/ui/app/lib/worktrees.js.map +1 -0
- package/dist/server/modules/orchestrator/ui/app/orchestrator-app.d.ts +17 -0
- package/dist/server/modules/orchestrator/ui/app/orchestrator-app.js +752 -0
- package/dist/server/modules/orchestrator/ui/app/orchestrator-app.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/controllers/templates.controller.d.ts +15 -0
- package/dist/server/modules/orchestrator/worktrees/controllers/templates.controller.js +85 -0
- package/dist/server/modules/orchestrator/worktrees/controllers/templates.controller.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/controllers/worktrees.controller.d.ts +29 -0
- package/dist/server/modules/orchestrator/worktrees/controllers/worktrees.controller.js +272 -0
- package/dist/server/modules/orchestrator/worktrees/controllers/worktrees.controller.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/dtos/worktree.dto.d.ts +109 -0
- package/dist/server/modules/orchestrator/worktrees/dtos/worktree.dto.js +57 -0
- package/dist/server/modules/orchestrator/worktrees/dtos/worktree.dto.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/events/worktree.events.d.ts +4 -0
- package/dist/server/modules/orchestrator/worktrees/events/worktree.events.js +5 -0
- package/dist/server/modules/orchestrator/worktrees/events/worktree.events.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/index.d.ts +7 -0
- package/dist/server/modules/orchestrator/worktrees/index.js +24 -0
- package/dist/server/modules/orchestrator/worktrees/index.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/local-worktrees.store.d.ts +18 -0
- package/dist/server/modules/orchestrator/worktrees/local-worktrees.store.js +198 -0
- package/dist/server/modules/orchestrator/worktrees/local-worktrees.store.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.d.ts +87 -0
- package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.js +1380 -0
- package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/worktree-validation.d.ts +4 -0
- package/dist/server/modules/orchestrator/worktrees/worktree-validation.js +43 -0
- package/dist/server/modules/orchestrator/worktrees/worktree-validation.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/worktrees.module.d.ts +2 -0
- package/dist/server/modules/orchestrator/worktrees/worktrees.module.js +44 -0
- package/dist/server/modules/orchestrator/worktrees/worktrees.module.js.map +1 -0
- package/dist/server/modules/orchestrator/worktrees/worktrees.store.d.ts +38 -0
- package/dist/server/modules/orchestrator/worktrees/worktrees.store.js +5 -0
- package/dist/server/modules/orchestrator/worktrees/worktrees.store.js.map +1 -0
- package/dist/server/modules/profiles/dto.d.ts +4 -4
- package/dist/server/modules/projects/controllers/projects.controller.d.ts +13 -3
- package/dist/server/modules/projects/controllers/projects.controller.js +55 -7
- package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
- package/dist/server/modules/projects/projects.module.js +3 -2
- package/dist/server/modules/projects/projects.module.js.map +1 -1
- package/dist/server/modules/projects/services/main-project-bootstrap.service.d.ts +11 -0
- package/dist/server/modules/projects/services/main-project-bootstrap.service.js +76 -0
- package/dist/server/modules/projects/services/main-project-bootstrap.service.js.map +1 -0
- package/dist/server/modules/projects/services/projects.service.d.ts +8 -0
- package/dist/server/modules/projects/services/projects.service.js +115 -37
- package/dist/server/modules/projects/services/projects.service.js.map +1 -1
- package/dist/server/modules/providers/adapters/gemini.adapter.d.ts +1 -1
- package/dist/server/modules/providers/adapters/gemini.adapter.js +6 -4
- package/dist/server/modules/providers/adapters/gemini.adapter.js.map +1 -1
- package/dist/server/modules/providers/controllers/providers.controller.d.ts +3 -0
- package/dist/server/modules/providers/controllers/providers.controller.js +28 -0
- package/dist/server/modules/providers/controllers/providers.controller.js.map +1 -1
- package/dist/server/modules/providers/providers.module.js +2 -2
- package/dist/server/modules/providers/providers.module.js.map +1 -1
- package/dist/server/modules/registry/services/unified-template.service.js +6 -18
- package/dist/server/modules/registry/services/unified-template.service.js.map +1 -1
- package/dist/server/modules/reviews/dtos/review.dto.d.ts +4 -4
- package/dist/server/modules/reviews/reviews.module.js +2 -2
- package/dist/server/modules/reviews/reviews.module.js.map +1 -1
- package/dist/server/modules/seeders/seeders/0005_seed_renew_instructions_subscriber.d.ts +3 -0
- package/dist/server/modules/seeders/seeders/0005_seed_renew_instructions_subscriber.js +89 -0
- package/dist/server/modules/seeders/seeders/0005_seed_renew_instructions_subscriber.js.map +1 -0
- package/dist/server/modules/seeders/seeders/0006_seed_rename_template_slugs.d.ts +3 -0
- package/dist/server/modules/seeders/seeders/0006_seed_rename_template_slugs.js +60 -0
- package/dist/server/modules/seeders/seeders/0006_seed_rename_template_slugs.js.map +1 -0
- package/dist/server/modules/seeders/services/data-seeder.service.js +4 -0
- package/dist/server/modules/seeders/services/data-seeder.service.js.map +1 -1
- package/dist/server/modules/sessions/services/sessions.service.d.ts +3 -1
- package/dist/server/modules/sessions/services/sessions.service.js +79 -22
- package/dist/server/modules/sessions/services/sessions.service.js.map +1 -1
- package/dist/server/modules/sessions/sessions.module.js +6 -4
- package/dist/server/modules/sessions/sessions.module.js.map +1 -1
- package/dist/server/modules/sessions/utils/claude-config.d.ts +6 -2
- package/dist/server/modules/sessions/utils/claude-config.js +19 -6
- package/dist/server/modules/sessions/utils/claude-config.js.map +1 -1
- package/dist/server/modules/settings/dtos/settings.dto.d.ts +4 -4
- package/dist/server/modules/skills/dtos/community-sources.dto.d.ts +2 -2
- package/dist/server/modules/skills/dtos/local-sources.dto.d.ts +2 -2
- package/dist/server/modules/skills/dtos/skill.dto.d.ts +7 -7
- package/dist/server/modules/storage/db/schema.d.ts +811 -0
- package/dist/server/modules/storage/db/schema.js +63 -1
- package/dist/server/modules/storage/db/schema.js.map +1 -1
- package/dist/server/modules/storage/db/sqlite-json.d.ts +2 -0
- package/dist/server/modules/storage/db/sqlite-json.js +8 -0
- package/dist/server/modules/storage/db/sqlite-json.js.map +1 -0
- package/dist/server/modules/storage/interfaces/storage.interface.d.ts +4 -1
- package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
- package/dist/server/modules/storage/local/local-storage.service.d.ts +1 -1
- package/dist/server/modules/storage/local/local-storage.service.js +19 -2
- package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
- package/dist/server/modules/storage/models/domain.models.d.ts +2 -0
- package/dist/server/modules/subscribers/dtos/subscriber.dto.d.ts +16 -16
- package/dist/server/modules/subscribers/events/event-fields-catalog.js +18 -0
- package/dist/server/modules/subscribers/events/event-fields-catalog.js.map +1 -1
- package/dist/server/modules/subscribers/subscribers.module.js +2 -2
- package/dist/server/modules/subscribers/subscribers.module.js.map +1 -1
- package/dist/server/modules/terminal/gateways/terminal.gateway.js +7 -2
- package/dist/server/modules/terminal/gateways/terminal.gateway.js.map +1 -1
- package/dist/server/modules/terminal/services/tmux.service.d.ts +9 -0
- package/dist/server/modules/terminal/services/tmux.service.js +55 -5
- package/dist/server/modules/terminal/services/tmux.service.js.map +1 -1
- package/dist/server/modules/terminal/terminal.module.js +2 -2
- package/dist/server/modules/terminal/terminal.module.js.map +1 -1
- package/dist/server/modules/watchers/watchers.module.js +2 -2
- package/dist/server/modules/watchers/watchers.module.js.map +1 -1
- package/dist/server/templates/3-agents-dev.json +662 -0
- package/dist/server/templates/{dev-loop.json → 5-agents-dev.json} +174 -100
- package/dist/server/test-setup.js +7 -0
- package/dist/server/test-setup.js.map +1 -1
- package/dist/server/tsconfig.tsbuildinfo +1 -1
- package/dist/server/ui/assets/ReviewDetailPage-CZZQtaY7.js +1 -0
- package/dist/server/ui/assets/{ReviewsPage-MKT-vv59.js → ReviewsPage-C209GLQG.js} +1 -1
- package/dist/server/ui/assets/index-DvRuLfpZ.css +32 -0
- package/dist/server/ui/assets/index-Th1FDtKR.js +977 -0
- package/dist/server/ui/assets/{useReviewSubscription-Dc58i6Bk.js → useReviewSubscription-Dcabsa78.js} +1 -1
- package/dist/server/ui/index.html +2 -2
- package/dist/templates/3-agents-dev.json +662 -0
- package/dist/templates/{dev-loop.json → 5-agents-dev.json} +174 -100
- package/package.json +15 -1
- package/dist/server/ui/assets/ReviewDetailPage-BvSckWKj.js +0 -6
- package/dist/server/ui/assets/index-BtUq-Qxb.css +0 -32
- package/dist/server/ui/assets/index-kTb634Zp.js +0 -945
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OnApplicationBootstrap } from '@nestjs/common';
|
|
2
|
+
import { StorageService } from '../../storage/interfaces/storage.interface';
|
|
3
|
+
export declare class MainProjectBootstrapService implements OnApplicationBootstrap {
|
|
4
|
+
private readonly storage;
|
|
5
|
+
private mainProjectId;
|
|
6
|
+
constructor(storage: StorageService);
|
|
7
|
+
onApplicationBootstrap(): Promise<void>;
|
|
8
|
+
getMainProjectId(): string | null;
|
|
9
|
+
ensureMainProjectId(): Promise<string | null>;
|
|
10
|
+
private deriveMainProjectName;
|
|
11
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
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.MainProjectBootstrapService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const path_1 = require("path");
|
|
18
|
+
const env_config_1 = require("../../../common/config/env.config");
|
|
19
|
+
const logger_1 = require("../../../common/logging/logger");
|
|
20
|
+
const storage_interface_1 = require("../../storage/interfaces/storage.interface");
|
|
21
|
+
const logger = (0, logger_1.createLogger)('MainProjectBootstrapService');
|
|
22
|
+
let MainProjectBootstrapService = class MainProjectBootstrapService {
|
|
23
|
+
constructor(storage) {
|
|
24
|
+
this.storage = storage;
|
|
25
|
+
this.mainProjectId = null;
|
|
26
|
+
}
|
|
27
|
+
async onApplicationBootstrap() {
|
|
28
|
+
await this.ensureMainProjectId();
|
|
29
|
+
}
|
|
30
|
+
getMainProjectId() {
|
|
31
|
+
return this.mainProjectId;
|
|
32
|
+
}
|
|
33
|
+
async ensureMainProjectId() {
|
|
34
|
+
if (this.mainProjectId) {
|
|
35
|
+
return this.mainProjectId;
|
|
36
|
+
}
|
|
37
|
+
const env = (0, env_config_1.getEnvConfig)();
|
|
38
|
+
if (env.DEVCHAIN_MODE !== 'main') {
|
|
39
|
+
this.mainProjectId = null;
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const repoRoot = (0, path_1.resolve)(env.REPO_ROOT ?? process.cwd());
|
|
43
|
+
const projects = await this.storage.listProjects({ limit: 1000, offset: 0 });
|
|
44
|
+
const byRepoRoot = projects.items.find((project) => (0, path_1.resolve)(project.rootPath) === repoRoot);
|
|
45
|
+
if (byRepoRoot) {
|
|
46
|
+
this.mainProjectId = byRepoRoot.id;
|
|
47
|
+
logger.info({ projectId: byRepoRoot.id, projectName: byRepoRoot.name, repoRoot }, 'Using existing main project for current repository root');
|
|
48
|
+
return this.mainProjectId;
|
|
49
|
+
}
|
|
50
|
+
if (projects.total > 0 && projects.items.length > 0) {
|
|
51
|
+
this.mainProjectId = projects.items[0].id;
|
|
52
|
+
logger.info({ projectId: this.mainProjectId, repoRoot }, 'Using existing project as main merge target');
|
|
53
|
+
return this.mainProjectId;
|
|
54
|
+
}
|
|
55
|
+
const created = await this.storage.createProject({
|
|
56
|
+
name: this.deriveMainProjectName(repoRoot),
|
|
57
|
+
description: 'Auto-created main project for merged worktree epics',
|
|
58
|
+
rootPath: repoRoot,
|
|
59
|
+
isTemplate: false,
|
|
60
|
+
});
|
|
61
|
+
this.mainProjectId = created.id;
|
|
62
|
+
logger.info({ projectId: created.id, projectName: created.name, repoRoot }, 'Created main project bootstrap target');
|
|
63
|
+
return this.mainProjectId;
|
|
64
|
+
}
|
|
65
|
+
deriveMainProjectName(repoRoot) {
|
|
66
|
+
const name = (0, path_1.basename)(repoRoot).trim();
|
|
67
|
+
return name.length > 0 ? name : 'Main';
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
exports.MainProjectBootstrapService = MainProjectBootstrapService;
|
|
71
|
+
exports.MainProjectBootstrapService = MainProjectBootstrapService = __decorate([
|
|
72
|
+
(0, common_1.Injectable)(),
|
|
73
|
+
__param(0, (0, common_1.Inject)(storage_interface_1.STORAGE_SERVICE)),
|
|
74
|
+
__metadata("design:paramtypes", [Object])
|
|
75
|
+
], MainProjectBootstrapService);
|
|
76
|
+
//# sourceMappingURL=main-project-bootstrap.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-project-bootstrap.service.js","sourceRoot":"","sources":["../../../../src/modules/projects/services/main-project-bootstrap.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export interface CreateFromTemplateInput {
|
|
|
13
13
|
name: string;
|
|
14
14
|
description?: string | null;
|
|
15
15
|
rootPath: string;
|
|
16
|
+
projectId?: string;
|
|
16
17
|
slug?: string;
|
|
17
18
|
version?: string | null;
|
|
18
19
|
templatePath?: string;
|
|
@@ -137,6 +138,10 @@ export declare class ProjectsService {
|
|
|
137
138
|
position: number;
|
|
138
139
|
priority: number;
|
|
139
140
|
}[];
|
|
141
|
+
providerSettings?: {
|
|
142
|
+
name: string;
|
|
143
|
+
autoCompactThreshold: number | null;
|
|
144
|
+
}[] | undefined;
|
|
140
145
|
projectSettings?: {
|
|
141
146
|
initialPromptTitle?: string;
|
|
142
147
|
autoCleanStatusLabels?: string[];
|
|
@@ -319,6 +324,9 @@ export declare class ProjectsService {
|
|
|
319
324
|
name: string;
|
|
320
325
|
};
|
|
321
326
|
familySlug?: string | null;
|
|
327
|
+
providerConfigs?: Array<{
|
|
328
|
+
providerName: string;
|
|
329
|
+
}>;
|
|
322
330
|
}>, templateAgents: Array<{
|
|
323
331
|
id?: string;
|
|
324
332
|
name: string;
|
|
@@ -23,9 +23,9 @@ const logger_1 = require("../../../common/logging/logger");
|
|
|
23
23
|
const error_types_1 = require("../../../common/errors/error-types");
|
|
24
24
|
const path_1 = require("path");
|
|
25
25
|
const fs_1 = require("fs");
|
|
26
|
-
const env_config_1 = require("../../../common/config/env.config");
|
|
27
26
|
const shared_1 = require("@devchain/shared");
|
|
28
27
|
const unified_template_service_1 = require("../../registry/services/unified-template.service");
|
|
28
|
+
const templates_directory_1 = require("../../../common/templates-directory");
|
|
29
29
|
const logger = (0, logger_1.createLogger)('ProjectsService');
|
|
30
30
|
let ProjectsService = class ProjectsService {
|
|
31
31
|
constructor(storage, sessions, settings, watchersService, watcherRunner, unifiedTemplateService) {
|
|
@@ -37,24 +37,12 @@ let ProjectsService = class ProjectsService {
|
|
|
37
37
|
this.unifiedTemplateService = unifiedTemplateService;
|
|
38
38
|
}
|
|
39
39
|
findTemplatesDirectory() {
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return env.TEMPLATES_DIR;
|
|
45
|
-
}
|
|
46
|
-
logger.warn({ path: env.TEMPLATES_DIR }, 'TEMPLATES_DIR set but path does not exist');
|
|
47
|
-
}
|
|
48
|
-
const possibleTemplatePaths = [
|
|
49
|
-
(0, path_1.join)(__dirname, '..', '..', '..', '..', 'templates'),
|
|
50
|
-
(0, path_1.join)(process.cwd(), 'apps', 'local-app', 'templates'),
|
|
51
|
-
];
|
|
52
|
-
for (const path of possibleTemplatePaths) {
|
|
53
|
-
if ((0, fs_1.existsSync)(path)) {
|
|
54
|
-
logger.debug({ path }, 'Found templates directory');
|
|
55
|
-
return path;
|
|
56
|
-
}
|
|
40
|
+
const templatesDir = (0, templates_directory_1.resolveTemplatesDirectory)(__dirname);
|
|
41
|
+
if (templatesDir) {
|
|
42
|
+
logger.debug({ path: templatesDir }, 'Found templates directory');
|
|
43
|
+
return templatesDir;
|
|
57
44
|
}
|
|
45
|
+
logger.warn('Templates directory not found in known locations');
|
|
58
46
|
return null;
|
|
59
47
|
}
|
|
60
48
|
async listTemplates() {
|
|
@@ -143,26 +131,48 @@ let ProjectsService = class ProjectsService {
|
|
|
143
131
|
}
|
|
144
132
|
const familyResult = await this.computeFamilyAlternatives(payload.profiles, payload.agents);
|
|
145
133
|
const needsMapping = familyResult.alternatives.some((alt) => !alt.defaultProviderAvailable);
|
|
146
|
-
|
|
134
|
+
let effectiveFamilyProviderMappings = input.familyProviderMappings;
|
|
135
|
+
if (needsMapping && !effectiveFamilyProviderMappings) {
|
|
136
|
+
const autoMappings = {};
|
|
137
|
+
let canAutoSelect = familyResult.canImport;
|
|
138
|
+
for (const alt of familyResult.alternatives) {
|
|
139
|
+
if (!alt.defaultProviderAvailable) {
|
|
140
|
+
if (alt.availableProviders.length === 1) {
|
|
141
|
+
autoMappings[alt.familySlug] = alt.availableProviders[0];
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
canAutoSelect = false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (canAutoSelect) {
|
|
149
|
+
effectiveFamilyProviderMappings = autoMappings;
|
|
150
|
+
logger.info({ autoMappings }, 'Auto-selected provider mappings for single-alternative families');
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
providerMappingRequired: {
|
|
156
|
+
missingProviders: familyResult.missingProviders,
|
|
157
|
+
familyAlternatives: familyResult.alternatives,
|
|
158
|
+
canImport: familyResult.canImport,
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (!familyResult.canImport) {
|
|
147
164
|
return {
|
|
148
165
|
success: false,
|
|
149
166
|
providerMappingRequired: {
|
|
150
167
|
missingProviders: familyResult.missingProviders,
|
|
151
168
|
familyAlternatives: familyResult.alternatives,
|
|
152
|
-
canImport:
|
|
169
|
+
canImport: false,
|
|
153
170
|
},
|
|
154
171
|
};
|
|
155
172
|
}
|
|
156
|
-
if (!familyResult.canImport) {
|
|
157
|
-
throw new error_types_1.ValidationError('Cannot import: some profile families have no available providers', {
|
|
158
|
-
hint: 'Install the required providers or use a different template',
|
|
159
|
-
missingProviders: familyResult.missingProviders,
|
|
160
|
-
familyAlternatives: familyResult.alternatives,
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
173
|
const providerNames = new Set((payload.profiles ?? []).map((p) => p.provider.name.trim().toLowerCase()));
|
|
164
174
|
const { available } = await this.resolveProviders(providerNames);
|
|
165
|
-
const selectedProfilesByFamily = this.selectProfilesForFamilies(payload.profiles, payload.agents,
|
|
175
|
+
const selectedProfilesByFamily = this.selectProfilesForFamilies(payload.profiles, payload.agents, effectiveFamilyProviderMappings, available);
|
|
166
176
|
const templatePayload = {
|
|
167
177
|
prompts: payload.prompts.map((p) => ({
|
|
168
178
|
id: p.id,
|
|
@@ -205,12 +215,21 @@ let ProjectsService = class ProjectsService {
|
|
|
205
215
|
})),
|
|
206
216
|
initialPrompt: payload.initialPrompt,
|
|
207
217
|
};
|
|
208
|
-
const result =
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
218
|
+
const result = input.projectId
|
|
219
|
+
? await this.storage.createProjectWithTemplate({
|
|
220
|
+
name: input.name,
|
|
221
|
+
description: input.description ?? null,
|
|
222
|
+
rootPath: input.rootPath,
|
|
223
|
+
isTemplate: false,
|
|
224
|
+
}, templatePayload, {
|
|
225
|
+
projectId: input.projectId,
|
|
226
|
+
})
|
|
227
|
+
: await this.storage.createProjectWithTemplate({
|
|
228
|
+
name: input.name,
|
|
229
|
+
description: input.description ?? null,
|
|
230
|
+
rootPath: input.rootPath,
|
|
231
|
+
isTemplate: false,
|
|
232
|
+
}, templatePayload);
|
|
214
233
|
const { agentNameToId: agentNameToNewId, profileNameToId: profileNameToNewId } = this.buildNameToIdMaps(templatePayload, result.mappings);
|
|
215
234
|
const configLookupMap = new Map();
|
|
216
235
|
for (const prof of selectedProfilesByFamily.profilesToCreate) {
|
|
@@ -274,7 +293,19 @@ let ProjectsService = class ProjectsService {
|
|
|
274
293
|
logger.debug({ agentName: a.name, providerConfigId }, 'Updated agent with providerConfigId');
|
|
275
294
|
}
|
|
276
295
|
else {
|
|
277
|
-
|
|
296
|
+
const fallbackKey = Array.from(configLookupMap.keys()).find((key) => key.startsWith(`${newProfileId}:`));
|
|
297
|
+
if (fallbackKey) {
|
|
298
|
+
const fallbackConfigId = configLookupMap.get(fallbackKey);
|
|
299
|
+
await this.storage.updateAgent(newAgentId, { providerConfigId: fallbackConfigId });
|
|
300
|
+
logger.warn({
|
|
301
|
+
agentName: a.name,
|
|
302
|
+
providerConfigName: agentWithConfig.providerConfigName,
|
|
303
|
+
fallbackConfigId,
|
|
304
|
+
}, 'Agent providerConfigName unavailable, fell back to first available config');
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
logger.warn({ agentName: a.name, providerConfigName: agentWithConfig.providerConfigName }, 'No provider config available for agent in createFromTemplate');
|
|
308
|
+
}
|
|
278
309
|
}
|
|
279
310
|
}
|
|
280
311
|
for (const [newProfileId, { profileName, configNames }] of profilesWithProviderConfigs) {
|
|
@@ -282,8 +313,13 @@ let ProjectsService = class ProjectsService {
|
|
|
282
313
|
for (const existingConfig of existingConfigs) {
|
|
283
314
|
const isFromProviderConfigs = configNames.has(existingConfig.name.trim().toLowerCase());
|
|
284
315
|
if (!isFromProviderConfigs && existingConfig.name === profileName) {
|
|
285
|
-
|
|
286
|
-
|
|
316
|
+
try {
|
|
317
|
+
await this.storage.deleteProfileProviderConfig(existingConfig.id);
|
|
318
|
+
logger.debug({ profileName, configId: existingConfig.id }, 'Deleted duplicate config created by storage layer');
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
logger.debug({ profileName, configId: existingConfig.id }, 'Skipped deleting default config — still referenced by agents');
|
|
322
|
+
}
|
|
287
323
|
}
|
|
288
324
|
}
|
|
289
325
|
}
|
|
@@ -588,6 +624,15 @@ let ProjectsService = class ProjectsService {
|
|
|
588
624
|
position: s.position,
|
|
589
625
|
priority: s.priority,
|
|
590
626
|
}));
|
|
627
|
+
const providerSettings = [];
|
|
628
|
+
for (const prov of providersMap.values()) {
|
|
629
|
+
if (prov.autoCompactThreshold != null) {
|
|
630
|
+
providerSettings.push({
|
|
631
|
+
name: prov.name,
|
|
632
|
+
autoCompactThreshold: prov.autoCompactThreshold,
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
}
|
|
591
636
|
const existingMetadata = this.settings.getProjectTemplateMetadata(projectId);
|
|
592
637
|
const manifest = {
|
|
593
638
|
slug: existingMetadata?.templateSlug || this.slugify(project.name),
|
|
@@ -609,6 +654,7 @@ let ProjectsService = class ProjectsService {
|
|
|
609
654
|
? { promptId: initialPrompt.id, title: initialPrompt.title }
|
|
610
655
|
: null,
|
|
611
656
|
...(Object.keys(projectSettings).length > 0 && { projectSettings }),
|
|
657
|
+
...(providerSettings.length > 0 && { providerSettings }),
|
|
612
658
|
watchers,
|
|
613
659
|
subscribers,
|
|
614
660
|
...(presetsOverride !== undefined
|
|
@@ -1120,6 +1166,27 @@ let ProjectsService = class ProjectsService {
|
|
|
1120
1166
|
await this.settings.clearProjectPresets(input.projectId);
|
|
1121
1167
|
logger.info({ projectId: input.projectId }, 'Presets cleared during import (template has none)');
|
|
1122
1168
|
}
|
|
1169
|
+
const importedProviderSettings = payload.providerSettings;
|
|
1170
|
+
if (importedProviderSettings && importedProviderSettings.length > 0) {
|
|
1171
|
+
const allProviders = await this.storage.listProviders();
|
|
1172
|
+
const providersByName = new Map(allProviders.items.map((p) => [p.name.trim().toLowerCase(), p]));
|
|
1173
|
+
for (const setting of importedProviderSettings) {
|
|
1174
|
+
const localProvider = providersByName.get(setting.name.trim().toLowerCase());
|
|
1175
|
+
if (!localProvider) {
|
|
1176
|
+
continue;
|
|
1177
|
+
}
|
|
1178
|
+
if (localProvider.autoCompactThreshold != null) {
|
|
1179
|
+
logger.debug({ providerName: setting.name, existing: localProvider.autoCompactThreshold }, 'Skipping providerSettings import: local threshold already set');
|
|
1180
|
+
continue;
|
|
1181
|
+
}
|
|
1182
|
+
if (setting.autoCompactThreshold != null) {
|
|
1183
|
+
await this.storage.updateProvider(localProvider.id, {
|
|
1184
|
+
autoCompactThreshold: setting.autoCompactThreshold,
|
|
1185
|
+
});
|
|
1186
|
+
logger.info({ providerName: setting.name, threshold: setting.autoCompactThreshold }, 'Applied autoCompactThreshold from template import');
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1123
1190
|
return {
|
|
1124
1191
|
success: true,
|
|
1125
1192
|
mode: 'replace',
|
|
@@ -1207,6 +1274,17 @@ let ProjectsService = class ProjectsService {
|
|
|
1207
1274
|
familyMap.set(providerName, []);
|
|
1208
1275
|
}
|
|
1209
1276
|
familyMap.get(providerName).push(prof.name);
|
|
1277
|
+
if (prof.providerConfigs) {
|
|
1278
|
+
for (const config of prof.providerConfigs) {
|
|
1279
|
+
const configProviderName = config.providerName.trim().toLowerCase();
|
|
1280
|
+
if (!familyMap.has(configProviderName)) {
|
|
1281
|
+
familyMap.set(configProviderName, []);
|
|
1282
|
+
}
|
|
1283
|
+
if (!familyMap.get(configProviderName).includes(prof.name)) {
|
|
1284
|
+
familyMap.get(configProviderName).push(prof.name);
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1210
1288
|
}
|
|
1211
1289
|
const alternatives = [];
|
|
1212
1290
|
const allMissingProviders = new Set();
|