devchain-cli 0.9.1 → 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/0042_nice_flatman.sql +10 -0
- package/dist/drizzle/0043_majestic_starhawk.sql +10 -0
- 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/0042_snapshot.json +4171 -0
- package/dist/drizzle/meta/0043_snapshot.json +4231 -0
- package/dist/drizzle/meta/0044_snapshot.json +4620 -0
- package/dist/drizzle/meta/_journal.json +35 -0
- 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/adapters/github-skill-source.base.d.ts +2 -5
- package/dist/server/modules/skills/adapters/github-skill-source.base.js +31 -100
- package/dist/server/modules/skills/adapters/github-skill-source.base.js.map +1 -1
- package/dist/server/modules/skills/adapters/local-skill-source.adapter.d.ts +16 -0
- package/dist/server/modules/skills/adapters/local-skill-source.adapter.js +265 -0
- package/dist/server/modules/skills/adapters/local-skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/adapters/skill-parsing.utils.d.ts +32 -0
- package/dist/server/modules/skills/adapters/skill-parsing.utils.js +169 -0
- package/dist/server/modules/skills/adapters/skill-parsing.utils.js.map +1 -0
- package/dist/server/modules/skills/controllers/local-sources.controller.d.ts +12 -0
- package/dist/server/modules/skills/controllers/local-sources.controller.js +71 -0
- package/dist/server/modules/skills/controllers/local-sources.controller.js.map +1 -0
- package/dist/server/modules/skills/controllers/skills.controller.d.ts +11 -1
- package/dist/server/modules/skills/controllers/skills.controller.js +35 -3
- package/dist/server/modules/skills/controllers/skills.controller.js.map +1 -1
- package/dist/server/modules/skills/dtos/community-sources.dto.d.ts +2 -2
- package/dist/server/modules/skills/dtos/local-sources.dto.d.ts +42 -0
- package/dist/server/modules/skills/dtos/local-sources.dto.js +30 -0
- package/dist/server/modules/skills/dtos/local-sources.dto.js.map +1 -0
- package/dist/server/modules/skills/dtos/skill.dto.d.ts +23 -7
- package/dist/server/modules/skills/dtos/skill.dto.js +7 -1
- package/dist/server/modules/skills/dtos/skill.dto.js.map +1 -1
- package/dist/server/modules/skills/services/community-sources.service.d.ts +8 -1
- package/dist/server/modules/skills/services/community-sources.service.js +62 -3
- package/dist/server/modules/skills/services/community-sources.service.js.map +1 -1
- package/dist/server/modules/skills/services/local-sources.service.d.ts +20 -0
- package/dist/server/modules/skills/services/local-sources.service.js +206 -0
- package/dist/server/modules/skills/services/local-sources.service.js.map +1 -0
- package/dist/server/modules/skills/services/skill-source-registry.service.d.ts +11 -0
- package/dist/server/modules/skills/services/skill-source-registry.service.js +99 -3
- package/dist/server/modules/skills/services/skill-source-registry.service.js.map +1 -1
- package/dist/server/modules/skills/services/skill-sync.service.d.ts +4 -0
- package/dist/server/modules/skills/services/skill-sync.service.js +93 -0
- package/dist/server/modules/skills/services/skill-sync.service.js.map +1 -1
- package/dist/server/modules/skills/services/skills.service.d.ts +14 -2
- package/dist/server/modules/skills/services/skills.service.js +125 -23
- package/dist/server/modules/skills/services/skills.service.js.map +1 -1
- package/dist/server/modules/skills/skills.module.js +4 -1
- package/dist/server/modules/skills/skills.module.js.map +1 -1
- package/dist/server/modules/storage/db/schema.d.ts +1115 -102
- package/dist/server/modules/storage/db/schema.js +81 -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 +17 -2
- package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
- package/dist/server/modules/storage/local/local-storage.service.d.ts +19 -2
- package/dist/server/modules/storage/local/local-storage.service.js +313 -5
- package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
- package/dist/server/modules/storage/models/domain.models.d.ts +10 -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-C98ST0lf.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-CmLuF45Z.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 +19 -1
- package/dist/server/ui/assets/ReviewDetailPage-D13dH7Wh.js +0 -6
- package/dist/server/ui/assets/index-C8Dc1yQf.js +0 -945
- package/dist/server/ui/assets/index-DZkJ40z9.css +0 -32
|
@@ -168,6 +168,46 @@ let LocalStorageService = class LocalStorageService {
|
|
|
168
168
|
}
|
|
169
169
|
return normalized;
|
|
170
170
|
}
|
|
171
|
+
normalizeLocalSkillSourceFolderPath(folderPath) {
|
|
172
|
+
const normalized = folderPath.trim();
|
|
173
|
+
if (!normalized) {
|
|
174
|
+
throw new error_types_1.ValidationError('folderPath is required.', { fieldName: 'folderPath' });
|
|
175
|
+
}
|
|
176
|
+
return normalized;
|
|
177
|
+
}
|
|
178
|
+
async assertLocalSourceNameAvailableAcrossTypes(sourceName) {
|
|
179
|
+
if (RESERVED_COMMUNITY_SOURCE_NAMES.has(sourceName)) {
|
|
180
|
+
throw new error_types_1.ValidationError('Local source name conflicts with a built-in source.', {
|
|
181
|
+
name: sourceName,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const { communitySkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
185
|
+
const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
186
|
+
const existingCommunitySource = await this.db
|
|
187
|
+
.select({ id: communitySkillSources.id })
|
|
188
|
+
.from(communitySkillSources)
|
|
189
|
+
.where(eq(communitySkillSources.name, sourceName))
|
|
190
|
+
.limit(1);
|
|
191
|
+
if (existingCommunitySource.length > 0) {
|
|
192
|
+
throw new error_types_1.ConflictError('Local source name conflicts with an existing community source.', {
|
|
193
|
+
name: sourceName,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
normalizeProjectIdForSourceEnablement(projectId) {
|
|
198
|
+
const normalized = projectId.trim();
|
|
199
|
+
if (!normalized) {
|
|
200
|
+
throw new error_types_1.ValidationError('projectId is required.', { fieldName: 'projectId' });
|
|
201
|
+
}
|
|
202
|
+
return normalized;
|
|
203
|
+
}
|
|
204
|
+
normalizeSourceNameForSourceEnablement(sourceName) {
|
|
205
|
+
const normalized = sourceName.trim().toLowerCase();
|
|
206
|
+
if (!normalized) {
|
|
207
|
+
throw new error_types_1.ValidationError('sourceName is required.', { fieldName: 'sourceName' });
|
|
208
|
+
}
|
|
209
|
+
return normalized;
|
|
210
|
+
}
|
|
171
211
|
isSqliteUniqueConstraint(error) {
|
|
172
212
|
if (typeof error !== 'object' || error === null) {
|
|
173
213
|
return false;
|
|
@@ -246,6 +286,39 @@ let LocalStorageService = class LocalStorageService {
|
|
|
246
286
|
});
|
|
247
287
|
}
|
|
248
288
|
}
|
|
289
|
+
async listSeedableSourceNamesForNewProject() {
|
|
290
|
+
const { communitySkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
291
|
+
const communitySourceRows = await this.db
|
|
292
|
+
.select({ name: communitySkillSources.name })
|
|
293
|
+
.from(communitySkillSources);
|
|
294
|
+
const sourceNames = communitySourceRows
|
|
295
|
+
.map((row) => row.name.trim().toLowerCase())
|
|
296
|
+
.filter((name) => name.length > 0);
|
|
297
|
+
const sqlite = (0, sqlite_raw_1.getRawSqliteClient)(this.db);
|
|
298
|
+
if (sqlite && typeof sqlite.prepare === 'function') {
|
|
299
|
+
try {
|
|
300
|
+
const localRows = sqlite.prepare('SELECT name FROM local_skill_sources').all();
|
|
301
|
+
for (const row of localRows) {
|
|
302
|
+
if (typeof row.name !== 'string') {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const normalized = row.name.trim().toLowerCase();
|
|
306
|
+
if (normalized.length > 0) {
|
|
307
|
+
sourceNames.push(normalized);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
313
|
+
if (!message.includes('no such table: local_skill_sources')) {
|
|
314
|
+
throw new error_types_1.StorageError('Failed to list local skill sources for project source seeding.', {
|
|
315
|
+
cause: message,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return [...new Set(sourceNames)];
|
|
321
|
+
}
|
|
249
322
|
async createProject(data) {
|
|
250
323
|
const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
251
324
|
const now = new Date().toISOString();
|
|
@@ -256,7 +329,8 @@ let LocalStorageService = class LocalStorageService {
|
|
|
256
329
|
createdAt: now,
|
|
257
330
|
updatedAt: now,
|
|
258
331
|
};
|
|
259
|
-
const
|
|
332
|
+
const seedableSourceNames = await this.listSeedableSourceNamesForNewProject();
|
|
333
|
+
const { projects, statuses, sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
260
334
|
await this.db.transaction(async (tx) => {
|
|
261
335
|
await tx.insert(projects).values({
|
|
262
336
|
id: project.id,
|
|
@@ -285,21 +359,32 @@ let LocalStorageService = class LocalStorageService {
|
|
|
285
359
|
updatedAt: now,
|
|
286
360
|
});
|
|
287
361
|
}
|
|
362
|
+
if (seedableSourceNames.length > 0) {
|
|
363
|
+
await tx.insert(sourceProjectEnabled).values(seedableSourceNames.map((sourceName) => ({
|
|
364
|
+
id: randomUUID(),
|
|
365
|
+
projectId: project.id,
|
|
366
|
+
sourceName,
|
|
367
|
+
enabled: false,
|
|
368
|
+
createdAt: now,
|
|
369
|
+
})));
|
|
370
|
+
}
|
|
288
371
|
});
|
|
289
372
|
logger.info({ projectId: project.id }, 'Created project with default statuses (transactional)');
|
|
290
373
|
return project;
|
|
291
374
|
}
|
|
292
|
-
async createProjectWithTemplate(data, template) {
|
|
375
|
+
async createProjectWithTemplate(data, template, options) {
|
|
293
376
|
const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
294
377
|
const now = new Date().toISOString();
|
|
378
|
+
const providedProjectId = options?.projectId?.trim();
|
|
295
379
|
const project = {
|
|
296
|
-
id: randomUUID(),
|
|
380
|
+
id: providedProjectId || randomUUID(),
|
|
297
381
|
...data,
|
|
298
382
|
isTemplate: data.isTemplate ?? false,
|
|
299
383
|
createdAt: now,
|
|
300
384
|
updatedAt: now,
|
|
301
385
|
};
|
|
302
|
-
const
|
|
386
|
+
const seedableSourceNames = await this.listSeedableSourceNamesForNewProject();
|
|
387
|
+
const { projects, statuses, prompts, agentProfiles, agents, tags, promptTags, profileProviderConfigs, providers, sourceProjectEnabled, } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
303
388
|
const statusIdMap = {};
|
|
304
389
|
const promptIdMap = {};
|
|
305
390
|
const profileIdMap = {};
|
|
@@ -336,6 +421,15 @@ let LocalStorageService = class LocalStorageService {
|
|
|
336
421
|
if (s.id)
|
|
337
422
|
statusIdMap[s.id] = statusId;
|
|
338
423
|
}
|
|
424
|
+
if (seedableSourceNames.length > 0) {
|
|
425
|
+
await this.db.insert(sourceProjectEnabled).values(seedableSourceNames.map((sourceName) => ({
|
|
426
|
+
id: randomUUID(),
|
|
427
|
+
projectId: project.id,
|
|
428
|
+
sourceName,
|
|
429
|
+
enabled: false,
|
|
430
|
+
createdAt: now,
|
|
431
|
+
})));
|
|
432
|
+
}
|
|
339
433
|
const { eq, and, or, isNull } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
340
434
|
for (const p of template.prompts) {
|
|
341
435
|
const promptId = randomUUID();
|
|
@@ -483,6 +577,15 @@ let LocalStorageService = class LocalStorageService {
|
|
|
483
577
|
logger.error({ rollbackError }, 'Failed to rollback transaction');
|
|
484
578
|
}
|
|
485
579
|
logger.error({ error, projectId: project.id }, 'Transaction failed');
|
|
580
|
+
const errorMessage = error instanceof Error ? error.message : '';
|
|
581
|
+
if (providedProjectId &&
|
|
582
|
+
this.isSqliteUniqueConstraint(error) &&
|
|
583
|
+
errorMessage.includes('projects.id')) {
|
|
584
|
+
throw new error_types_1.ConflictError(`Project ID "${providedProjectId}" already exists.`, {
|
|
585
|
+
field: 'projectId',
|
|
586
|
+
projectId: providedProjectId,
|
|
587
|
+
});
|
|
588
|
+
}
|
|
486
589
|
throw error;
|
|
487
590
|
}
|
|
488
591
|
return {
|
|
@@ -1868,6 +1971,11 @@ let LocalStorageService = class LocalStorageService {
|
|
|
1868
1971
|
const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
1869
1972
|
const now = new Date().toISOString();
|
|
1870
1973
|
const { providers } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
1974
|
+
const autoCompactThreshold = data.autoCompactThreshold !== undefined
|
|
1975
|
+
? data.autoCompactThreshold
|
|
1976
|
+
: data.name.toLowerCase() === 'claude'
|
|
1977
|
+
? 10
|
|
1978
|
+
: null;
|
|
1871
1979
|
const provider = {
|
|
1872
1980
|
id: randomUUID(),
|
|
1873
1981
|
name: data.name,
|
|
@@ -1875,6 +1983,7 @@ let LocalStorageService = class LocalStorageService {
|
|
|
1875
1983
|
mcpConfigured: data.mcpConfigured ?? false,
|
|
1876
1984
|
mcpEndpoint: data.mcpEndpoint ?? null,
|
|
1877
1985
|
mcpRegisteredAt: data.mcpRegisteredAt ?? null,
|
|
1986
|
+
autoCompactThreshold,
|
|
1878
1987
|
createdAt: now,
|
|
1879
1988
|
updatedAt: now,
|
|
1880
1989
|
};
|
|
@@ -1885,6 +1994,7 @@ let LocalStorageService = class LocalStorageService {
|
|
|
1885
1994
|
mcpConfigured: provider.mcpConfigured,
|
|
1886
1995
|
mcpEndpoint: provider.mcpEndpoint,
|
|
1887
1996
|
mcpRegisteredAt: provider.mcpRegisteredAt,
|
|
1997
|
+
autoCompactThreshold: provider.autoCompactThreshold,
|
|
1888
1998
|
createdAt: provider.createdAt,
|
|
1889
1999
|
updatedAt: provider.updatedAt,
|
|
1890
2000
|
});
|
|
@@ -1960,6 +2070,114 @@ let LocalStorageService = class LocalStorageService {
|
|
|
1960
2070
|
}
|
|
1961
2071
|
return this.updateProvider(id, update);
|
|
1962
2072
|
}
|
|
2073
|
+
async getSourceProjectEnabled(projectId, sourceName) {
|
|
2074
|
+
const normalizedProjectId = this.normalizeProjectIdForSourceEnablement(projectId);
|
|
2075
|
+
const normalizedSourceName = this.normalizeSourceNameForSourceEnablement(sourceName);
|
|
2076
|
+
const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2077
|
+
const { and, eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2078
|
+
const rows = await this.db
|
|
2079
|
+
.select({ enabled: sourceProjectEnabled.enabled })
|
|
2080
|
+
.from(sourceProjectEnabled)
|
|
2081
|
+
.where(and(eq(sourceProjectEnabled.projectId, normalizedProjectId), eq(sourceProjectEnabled.sourceName, normalizedSourceName)))
|
|
2082
|
+
.limit(1);
|
|
2083
|
+
return rows[0] ? Boolean(rows[0].enabled) : null;
|
|
2084
|
+
}
|
|
2085
|
+
async setSourceProjectEnabled(projectId, sourceName, enabled) {
|
|
2086
|
+
const normalizedProjectId = this.normalizeProjectIdForSourceEnablement(projectId);
|
|
2087
|
+
const normalizedSourceName = this.normalizeSourceNameForSourceEnablement(sourceName);
|
|
2088
|
+
const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2089
|
+
const { and, eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2090
|
+
const existing = await this.db
|
|
2091
|
+
.select({ id: sourceProjectEnabled.id })
|
|
2092
|
+
.from(sourceProjectEnabled)
|
|
2093
|
+
.where(and(eq(sourceProjectEnabled.projectId, normalizedProjectId), eq(sourceProjectEnabled.sourceName, normalizedSourceName)))
|
|
2094
|
+
.limit(1);
|
|
2095
|
+
if (existing[0]) {
|
|
2096
|
+
await this.db
|
|
2097
|
+
.update(sourceProjectEnabled)
|
|
2098
|
+
.set({ enabled })
|
|
2099
|
+
.where(eq(sourceProjectEnabled.id, existing[0].id));
|
|
2100
|
+
return;
|
|
2101
|
+
}
|
|
2102
|
+
const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
2103
|
+
await this.db.insert(sourceProjectEnabled).values({
|
|
2104
|
+
id: randomUUID(),
|
|
2105
|
+
projectId: normalizedProjectId,
|
|
2106
|
+
sourceName: normalizedSourceName,
|
|
2107
|
+
enabled,
|
|
2108
|
+
createdAt: new Date().toISOString(),
|
|
2109
|
+
});
|
|
2110
|
+
}
|
|
2111
|
+
async listSourceProjectEnabled(projectId) {
|
|
2112
|
+
const normalizedProjectId = this.normalizeProjectIdForSourceEnablement(projectId);
|
|
2113
|
+
const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2114
|
+
const { asc, eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2115
|
+
const rows = await this.db
|
|
2116
|
+
.select({
|
|
2117
|
+
sourceName: sourceProjectEnabled.sourceName,
|
|
2118
|
+
enabled: sourceProjectEnabled.enabled,
|
|
2119
|
+
})
|
|
2120
|
+
.from(sourceProjectEnabled)
|
|
2121
|
+
.where(eq(sourceProjectEnabled.projectId, normalizedProjectId))
|
|
2122
|
+
.orderBy(asc(sourceProjectEnabled.sourceName));
|
|
2123
|
+
return rows.map((row) => ({
|
|
2124
|
+
sourceName: row.sourceName,
|
|
2125
|
+
enabled: Boolean(row.enabled),
|
|
2126
|
+
}));
|
|
2127
|
+
}
|
|
2128
|
+
async seedSourceProjectDisabled(projectId, sourceNames) {
|
|
2129
|
+
const normalizedProjectId = this.normalizeProjectIdForSourceEnablement(projectId);
|
|
2130
|
+
const normalizedSourceNames = [
|
|
2131
|
+
...new Set(sourceNames.map((name) => name.trim().toLowerCase())),
|
|
2132
|
+
].filter((name) => name.length > 0);
|
|
2133
|
+
if (normalizedSourceNames.length === 0) {
|
|
2134
|
+
return;
|
|
2135
|
+
}
|
|
2136
|
+
const sqlite = (0, sqlite_raw_1.getRawSqliteClient)(this.db);
|
|
2137
|
+
if (!sqlite || typeof sqlite.exec !== 'function') {
|
|
2138
|
+
throw new error_types_1.StorageError('Unable to access underlying SQLite client');
|
|
2139
|
+
}
|
|
2140
|
+
sqlite.exec('BEGIN IMMEDIATE TRANSACTION');
|
|
2141
|
+
try {
|
|
2142
|
+
const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2143
|
+
const { and, eq, inArray } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2144
|
+
const existingRows = await this.db
|
|
2145
|
+
.select({ sourceName: sourceProjectEnabled.sourceName })
|
|
2146
|
+
.from(sourceProjectEnabled)
|
|
2147
|
+
.where(and(eq(sourceProjectEnabled.projectId, normalizedProjectId), inArray(sourceProjectEnabled.sourceName, normalizedSourceNames)));
|
|
2148
|
+
const existingSourceNames = new Set(existingRows.map((row) => row.sourceName));
|
|
2149
|
+
const sourceNamesToInsert = normalizedSourceNames.filter((sourceName) => !existingSourceNames.has(sourceName));
|
|
2150
|
+
if (sourceNamesToInsert.length > 0) {
|
|
2151
|
+
const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
2152
|
+
const now = new Date().toISOString();
|
|
2153
|
+
await this.db.insert(sourceProjectEnabled).values(sourceNamesToInsert.map((sourceName) => ({
|
|
2154
|
+
id: randomUUID(),
|
|
2155
|
+
projectId: normalizedProjectId,
|
|
2156
|
+
sourceName,
|
|
2157
|
+
enabled: false,
|
|
2158
|
+
createdAt: now,
|
|
2159
|
+
})));
|
|
2160
|
+
}
|
|
2161
|
+
sqlite.exec('COMMIT');
|
|
2162
|
+
}
|
|
2163
|
+
catch (error) {
|
|
2164
|
+
try {
|
|
2165
|
+
sqlite.exec('ROLLBACK');
|
|
2166
|
+
}
|
|
2167
|
+
catch (rollbackError) {
|
|
2168
|
+
logger.error({ rollbackError }, 'Failed to rollback seedSourceProjectDisabled transaction');
|
|
2169
|
+
}
|
|
2170
|
+
throw error;
|
|
2171
|
+
}
|
|
2172
|
+
}
|
|
2173
|
+
async deleteSourceProjectEnabledBySource(sourceName) {
|
|
2174
|
+
const normalizedSourceName = this.normalizeSourceNameForSourceEnablement(sourceName);
|
|
2175
|
+
const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2176
|
+
const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2177
|
+
await this.db
|
|
2178
|
+
.delete(sourceProjectEnabled)
|
|
2179
|
+
.where(eq(sourceProjectEnabled.sourceName, normalizedSourceName));
|
|
2180
|
+
}
|
|
1963
2181
|
async listCommunitySkillSources() {
|
|
1964
2182
|
const { communitySkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
1965
2183
|
const { asc } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
@@ -2052,14 +2270,104 @@ let LocalStorageService = class LocalStorageService {
|
|
|
2052
2270
|
}
|
|
2053
2271
|
async deleteCommunitySkillSource(id) {
|
|
2054
2272
|
const source = await this.getCommunitySkillSource(id);
|
|
2055
|
-
const { communitySkillSources, skills } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2273
|
+
const { communitySkillSources, skills, sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2056
2274
|
const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2057
2275
|
await this.db.transaction(async (tx) => {
|
|
2058
2276
|
await tx.delete(skills).where(eq(skills.source, source.name));
|
|
2277
|
+
await tx.delete(sourceProjectEnabled).where(eq(sourceProjectEnabled.sourceName, source.name));
|
|
2059
2278
|
await tx.delete(communitySkillSources).where(eq(communitySkillSources.id, source.id));
|
|
2060
2279
|
});
|
|
2061
2280
|
logger.info({ communitySkillSourceId: source.id, sourceName: source.name }, 'Deleted community skill source and related skills');
|
|
2062
2281
|
}
|
|
2282
|
+
async listLocalSkillSources() {
|
|
2283
|
+
const { localSkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2284
|
+
const { asc } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2285
|
+
const rows = await this.db
|
|
2286
|
+
.select()
|
|
2287
|
+
.from(localSkillSources)
|
|
2288
|
+
.orderBy(asc(localSkillSources.name));
|
|
2289
|
+
return rows;
|
|
2290
|
+
}
|
|
2291
|
+
async getLocalSkillSource(id) {
|
|
2292
|
+
const normalizedId = id.trim();
|
|
2293
|
+
if (!normalizedId) {
|
|
2294
|
+
throw new error_types_1.ValidationError('id is required.', { fieldName: 'id' });
|
|
2295
|
+
}
|
|
2296
|
+
const { localSkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2297
|
+
const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2298
|
+
const rows = await this.db
|
|
2299
|
+
.select()
|
|
2300
|
+
.from(localSkillSources)
|
|
2301
|
+
.where(eq(localSkillSources.id, normalizedId))
|
|
2302
|
+
.limit(1);
|
|
2303
|
+
return rows[0] ?? null;
|
|
2304
|
+
}
|
|
2305
|
+
async createLocalSkillSource(data) {
|
|
2306
|
+
const normalizedName = this.normalizeCommunitySourceNameForLookup(data.name);
|
|
2307
|
+
const normalizedFolderPath = this.normalizeLocalSkillSourceFolderPath(data.folderPath);
|
|
2308
|
+
await this.assertLocalSourceNameAvailableAcrossTypes(normalizedName);
|
|
2309
|
+
const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
2310
|
+
const now = new Date().toISOString();
|
|
2311
|
+
const record = {
|
|
2312
|
+
id: randomUUID(),
|
|
2313
|
+
name: normalizedName,
|
|
2314
|
+
folderPath: normalizedFolderPath,
|
|
2315
|
+
createdAt: now,
|
|
2316
|
+
updatedAt: now,
|
|
2317
|
+
};
|
|
2318
|
+
const { localSkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2319
|
+
try {
|
|
2320
|
+
await this.db.insert(localSkillSources).values({
|
|
2321
|
+
id: record.id,
|
|
2322
|
+
name: record.name,
|
|
2323
|
+
folderPath: record.folderPath,
|
|
2324
|
+
createdAt: record.createdAt,
|
|
2325
|
+
updatedAt: record.updatedAt,
|
|
2326
|
+
});
|
|
2327
|
+
}
|
|
2328
|
+
catch (error) {
|
|
2329
|
+
if (this.isSqliteUniqueConstraint(error)) {
|
|
2330
|
+
const rawMessage = typeof error === 'object' && error !== null && 'message' in error
|
|
2331
|
+
? String(error.message ?? '')
|
|
2332
|
+
: '';
|
|
2333
|
+
if (rawMessage.includes('local_skill_sources.name')) {
|
|
2334
|
+
throw new error_types_1.ConflictError('Local skill source name already exists.', {
|
|
2335
|
+
name: normalizedName,
|
|
2336
|
+
});
|
|
2337
|
+
}
|
|
2338
|
+
if (rawMessage.includes('local_skill_sources.folder_path')) {
|
|
2339
|
+
throw new error_types_1.ConflictError('Local skill source folder path already exists.', {
|
|
2340
|
+
folderPath: normalizedFolderPath,
|
|
2341
|
+
});
|
|
2342
|
+
}
|
|
2343
|
+
throw new error_types_1.ConflictError('Local skill source already exists.', {
|
|
2344
|
+
name: normalizedName,
|
|
2345
|
+
folderPath: normalizedFolderPath,
|
|
2346
|
+
});
|
|
2347
|
+
}
|
|
2348
|
+
throw new error_types_1.StorageError('Failed to create local skill source.', {
|
|
2349
|
+
name: normalizedName,
|
|
2350
|
+
folderPath: normalizedFolderPath,
|
|
2351
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
2352
|
+
});
|
|
2353
|
+
}
|
|
2354
|
+
logger.info({ localSkillSourceId: record.id, name: record.name }, 'Created local skill source');
|
|
2355
|
+
return record;
|
|
2356
|
+
}
|
|
2357
|
+
async deleteLocalSkillSource(id) {
|
|
2358
|
+
const source = await this.getLocalSkillSource(id);
|
|
2359
|
+
if (!source) {
|
|
2360
|
+
throw new error_types_1.NotFoundError('Local skill source', id.trim());
|
|
2361
|
+
}
|
|
2362
|
+
const { localSkillSources, skills, sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
|
|
2363
|
+
const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
|
|
2364
|
+
await this.db.transaction(async (tx) => {
|
|
2365
|
+
await tx.delete(skills).where(eq(skills.source, source.name));
|
|
2366
|
+
await tx.delete(sourceProjectEnabled).where(eq(sourceProjectEnabled.sourceName, source.name));
|
|
2367
|
+
await tx.delete(localSkillSources).where(eq(localSkillSources.id, source.id));
|
|
2368
|
+
});
|
|
2369
|
+
logger.info({ localSkillSourceId: source.id, sourceName: source.name }, 'Deleted local skill source and related skills');
|
|
2370
|
+
}
|
|
2063
2371
|
async createAgentProfile(data) {
|
|
2064
2372
|
const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
2065
2373
|
const now = new Date().toISOString();
|