devchain-cli 0.11.5 → 0.12.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 +8 -4
- package/dist/drizzle/0050_teams.sql +26 -0
- package/dist/drizzle/0051_teams_optional_lead.sql +17 -0
- package/dist/drizzle/0054_provider_config_description.sql +1 -0
- package/dist/drizzle/0055_team_profiles.sql +10 -0
- package/dist/drizzle/0056_team_profile_configs.sql +11 -0
- package/dist/drizzle/0057_white_lester.sql +2 -0
- package/dist/drizzle/0058_fluffy_wolverine.sql +1 -0
- package/dist/drizzle/0059_loving_daimon_hellstrom.sql +1 -0
- package/dist/drizzle/meta/0050_snapshot.json +4929 -0
- package/dist/drizzle/meta/0051_snapshot.json +4929 -0
- package/dist/drizzle/meta/0053_snapshot.json +4944 -0
- package/dist/drizzle/meta/0054_snapshot.json +4951 -0
- package/dist/drizzle/meta/0055_snapshot.json +5025 -0
- package/dist/drizzle/meta/0056_snapshot.json +5109 -0
- package/dist/drizzle/meta/0057_snapshot.json +5125 -0
- package/dist/drizzle/meta/0058_snapshot.json +5133 -0
- package/dist/drizzle/meta/0059_snapshot.json +5140 -0
- package/dist/drizzle/meta/_journal.json +60 -4
- package/dist/node_modules/@devchain/codebase-overview/index.d.ts +2 -0
- package/dist/node_modules/@devchain/codebase-overview/index.d.ts.map +1 -0
- package/dist/node_modules/@devchain/codebase-overview/index.js +2 -0
- package/dist/node_modules/@devchain/codebase-overview/index.js.map +1 -0
- package/dist/node_modules/@devchain/codebase-overview/package.json +8 -0
- package/dist/node_modules/@devchain/codebase-overview/tsconfig.tsbuildinfo +1 -0
- package/dist/node_modules/@devchain/codebase-overview/types.d.ts +232 -0
- package/dist/node_modules/@devchain/codebase-overview/types.d.ts.map +1 -0
- package/dist/node_modules/@devchain/codebase-overview/types.js +2 -0
- package/dist/node_modules/@devchain/codebase-overview/types.js.map +1 -0
- package/dist/node_modules/@devchain/shared/index.d.ts +1 -1
- package/dist/node_modules/@devchain/shared/index.d.ts.map +1 -1
- package/dist/node_modules/@devchain/shared/index.js +1 -1
- package/dist/node_modules/@devchain/shared/index.js.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/env-vars.d.ts +3 -0
- package/dist/node_modules/@devchain/shared/schemas/env-vars.d.ts.map +1 -0
- package/dist/node_modules/@devchain/shared/schemas/env-vars.js +14 -0
- package/dist/node_modules/@devchain/shared/schemas/env-vars.js.map +1 -0
- package/dist/node_modules/@devchain/shared/schemas/export-schema.d.ts +99 -13
- package/dist/node_modules/@devchain/shared/schemas/export-schema.d.ts.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/export-schema.js +25 -1
- package/dist/node_modules/@devchain/shared/schemas/export-schema.js.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/index.d.ts +1 -0
- package/dist/node_modules/@devchain/shared/schemas/index.d.ts.map +1 -1
- package/dist/node_modules/@devchain/shared/schemas/index.js +1 -0
- package/dist/node_modules/@devchain/shared/schemas/index.js.map +1 -1
- package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
- package/dist/server/app.main.module.js +4 -0
- package/dist/server/app.main.module.js.map +1 -1
- package/dist/server/app.normal.module.js +4 -0
- package/dist/server/app.normal.module.js.map +1 -1
- package/dist/server/common/config/feature-flags.d.ts +0 -2
- package/dist/server/common/config/feature-flags.js +1 -4
- package/dist/server/common/config/feature-flags.js.map +1 -1
- package/dist/server/common/errors/error-types.d.ts +3 -0
- package/dist/server/common/errors/error-types.js +10 -1
- package/dist/server/common/errors/error-types.js.map +1 -1
- package/dist/server/common/template/agent-recipient-context.d.ts +10 -0
- package/dist/server/common/template/agent-recipient-context.js +13 -0
- package/dist/server/common/template/agent-recipient-context.js.map +1 -0
- package/dist/server/common/template/handlebars-renderer.d.ts +1 -0
- package/dist/server/common/template/handlebars-renderer.js +26 -0
- package/dist/server/common/template/handlebars-renderer.js.map +1 -0
- package/dist/server/modules/agents/agents.module.js +2 -1
- package/dist/server/modules/agents/agents.module.js.map +1 -1
- package/dist/server/modules/agents/controllers/agents.controller.d.ts +3 -1
- package/dist/server/modules/agents/controllers/agents.controller.js +36 -3
- package/dist/server/modules/agents/controllers/agents.controller.js.map +1 -1
- package/dist/server/modules/codebase-overview-analyzer/codebase-overview-analyzer.module.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/codebase-overview-analyzer.module.js +51 -0
- package/dist/server/modules/codebase-overview-analyzer/codebase-overview-analyzer.module.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/controllers/codebase-overview.controller.d.ts +30 -0
- package/dist/server/modules/codebase-overview-analyzer/controllers/codebase-overview.controller.js +225 -0
- package/dist/server/modules/codebase-overview-analyzer/controllers/codebase-overview.controller.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/repositories/overview-scope.repository.d.ts +24 -0
- package/dist/server/modules/codebase-overview-analyzer/repositories/overview-scope.repository.js +188 -0
- package/dist/server/modules/codebase-overview-analyzer/repositories/overview-scope.repository.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/codebase-overview-analyzer.service.d.ts +71 -0
- package/dist/server/modules/codebase-overview-analyzer/services/codebase-overview-analyzer.service.js +1128 -0
- package/dist/server/modules/codebase-overview-analyzer/services/codebase-overview-analyzer.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/dependency-aggregation.service.d.ts +14 -0
- package/dist/server/modules/codebase-overview-analyzer/services/dependency-aggregation.service.js +114 -0
- package/dist/server/modules/codebase-overview-analyzer/services/dependency-aggregation.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/district-splitting.service.d.ts +8 -0
- package/dist/server/modules/codebase-overview-analyzer/services/district-splitting.service.js +200 -0
- package/dist/server/modules/codebase-overview-analyzer/services/district-splitting.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/evidence-query.service.d.ts +11 -0
- package/dist/server/modules/codebase-overview-analyzer/services/evidence-query.service.js +164 -0
- package/dist/server/modules/codebase-overview-analyzer/services/evidence-query.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/go-adapter.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/services/go-adapter.js +166 -0
- package/dist/server/modules/codebase-overview-analyzer/services/go-adapter.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/hotspot-scoring.service.d.ts +21 -0
- package/dist/server/modules/codebase-overview-analyzer/services/hotspot-scoring.service.js +252 -0
- package/dist/server/modules/codebase-overview-analyzer/services/hotspot-scoring.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/identity-resolver.service.d.ts +24 -0
- package/dist/server/modules/codebase-overview-analyzer/services/identity-resolver.service.js +98 -0
- package/dist/server/modules/codebase-overview-analyzer/services/identity-resolver.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/java-adapter.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/services/java-adapter.js +155 -0
- package/dist/server/modules/codebase-overview-analyzer/services/java-adapter.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/language-adapter-registry.service.d.ts +19 -0
- package/dist/server/modules/codebase-overview-analyzer/services/language-adapter-registry.service.js +87 -0
- package/dist/server/modules/codebase-overview-analyzer/services/language-adapter-registry.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/php-adapter.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/services/php-adapter.js +173 -0
- package/dist/server/modules/codebase-overview-analyzer/services/php-adapter.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/python-adapter.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/services/python-adapter.js +171 -0
- package/dist/server/modules/codebase-overview-analyzer/services/python-adapter.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/ruby-adapter.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/services/ruby-adapter.js +158 -0
- package/dist/server/modules/codebase-overview-analyzer/services/ruby-adapter.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/rust-adapter.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/services/rust-adapter.js +222 -0
- package/dist/server/modules/codebase-overview-analyzer/services/rust-adapter.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/scope-auto-detector.service.d.ts +4 -0
- package/dist/server/modules/codebase-overview-analyzer/services/scope-auto-detector.service.js +72 -0
- package/dist/server/modules/codebase-overview-analyzer/services/scope-auto-detector.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/scope-resolver.service.d.ts +6 -0
- package/dist/server/modules/codebase-overview-analyzer/services/scope-resolver.service.js +37 -0
- package/dist/server/modules/codebase-overview-analyzer/services/scope-resolver.service.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/services/typescript-adapter.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/services/typescript-adapter.js +108 -0
- package/dist/server/modules/codebase-overview-analyzer/services/typescript-adapter.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/types/index.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/types/index.js +6 -0
- package/dist/server/modules/codebase-overview-analyzer/types/index.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope-defaults.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope-defaults.js +13 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope-defaults.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope.schema.d.ts +54 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope.schema.js +27 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope.schema.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope.types.d.ts +12 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope.types.js +3 -0
- package/dist/server/modules/codebase-overview-analyzer/types/scope.types.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/utils/constants.d.ts +1 -0
- package/dist/server/modules/codebase-overview-analyzer/utils/constants.js +5 -0
- package/dist/server/modules/codebase-overview-analyzer/utils/constants.js.map +1 -0
- package/dist/server/modules/codebase-overview-analyzer/utils/path-matcher.d.ts +2 -0
- package/dist/server/modules/codebase-overview-analyzer/utils/path-matcher.js +17 -0
- package/dist/server/modules/codebase-overview-analyzer/utils/path-matcher.js.map +1 -0
- package/dist/server/modules/core/controllers/preflight.controller.d.ts +1 -1
- package/dist/server/modules/core/controllers/preflight.controller.js +6 -4
- package/dist/server/modules/core/controllers/preflight.controller.js.map +1 -1
- package/dist/server/modules/core/services/preflight.service.d.ts +7 -1
- package/dist/server/modules/core/services/preflight.service.js +127 -10
- package/dist/server/modules/core/services/preflight.service.js.map +1 -1
- package/dist/server/modules/events/catalog/agent.created.d.ts +42 -0
- package/dist/server/modules/events/catalog/agent.created.js +23 -0
- package/dist/server/modules/events/catalog/agent.created.js.map +1 -0
- package/dist/server/modules/events/catalog/agent.deleted.d.ts +42 -0
- package/dist/server/modules/events/catalog/agent.deleted.js +22 -0
- package/dist/server/modules/events/catalog/agent.deleted.js.map +1 -0
- package/dist/server/modules/events/catalog/index.d.ts +180 -0
- package/dist/server/modules/events/catalog/index.js +10 -0
- package/dist/server/modules/events/catalog/index.js.map +1 -1
- package/dist/server/modules/events/catalog/team.config.updated.d.ts +67 -0
- package/dist/server/modules/events/catalog/team.config.updated.js +21 -0
- package/dist/server/modules/events/catalog/team.config.updated.js.map +1 -0
- package/dist/server/modules/events/catalog/team.member.added.d.ts +27 -0
- package/dist/server/modules/events/catalog/team.member.added.js +16 -0
- package/dist/server/modules/events/catalog/team.member.added.js.map +1 -0
- package/dist/server/modules/events/catalog/team.member.removed.d.ts +27 -0
- package/dist/server/modules/events/catalog/team.member.removed.js +16 -0
- package/dist/server/modules/events/catalog/team.member.removed.js.map +1 -0
- 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/services/event-log.service.js +3 -0
- package/dist/server/modules/events/services/event-log.service.js.map +1 -1
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.d.ts +2 -1
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js +30 -10
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js.map +1 -1
- package/dist/server/modules/events/subscribers/index.js +8 -0
- package/dist/server/modules/events/subscribers/index.js.map +1 -1
- package/dist/server/modules/events/subscribers/project-state-broadcaster.subscriber.d.ts +16 -0
- package/dist/server/modules/events/subscribers/project-state-broadcaster.subscriber.js +101 -0
- package/dist/server/modules/events/subscribers/project-state-broadcaster.subscriber.js.map +1 -0
- package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.d.ts +2 -1
- package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js +30 -8
- package/dist/server/modules/events/subscribers/review-comment-notifier.subscriber.js.map +1 -1
- package/dist/server/modules/events/subscribers/sub-epic-created-notifier.subscriber.d.ts +18 -0
- package/dist/server/modules/events/subscribers/sub-epic-created-notifier.subscriber.js +154 -0
- package/dist/server/modules/events/subscribers/sub-epic-created-notifier.subscriber.js.map +1 -0
- package/dist/server/modules/events/subscribers/team-config-updated-notifier.subscriber.d.ts +18 -0
- package/dist/server/modules/events/subscribers/team-config-updated-notifier.subscriber.js +138 -0
- package/dist/server/modules/events/subscribers/team-config-updated-notifier.subscriber.js.map +1 -0
- package/dist/server/modules/events/subscribers/team-membership-changed-notifier.subscriber.d.ts +18 -0
- package/dist/server/modules/events/subscribers/team-membership-changed-notifier.subscriber.js +129 -0
- package/dist/server/modules/events/subscribers/team-membership-changed-notifier.subscriber.js.map +1 -0
- package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +172 -0
- package/dist/server/modules/mcp/dtos/mcp.dto.js +69 -6
- package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
- package/dist/server/modules/mcp/dtos/schema-registry.js +6 -0
- package/dist/server/modules/mcp/dtos/schema-registry.js.map +1 -1
- package/dist/server/modules/mcp/mcp.module.js +2 -0
- package/dist/server/modules/mcp/mcp.module.js.map +1 -1
- package/dist/server/modules/mcp/services/handlers/chat-tools.js +117 -3
- package/dist/server/modules/mcp/services/handlers/chat-tools.js.map +1 -1
- package/dist/server/modules/mcp/services/handlers/epic-tools.js +16 -3
- package/dist/server/modules/mcp/services/handlers/epic-tools.js.map +1 -1
- package/dist/server/modules/mcp/services/handlers/prompt-tools.js +33 -1
- package/dist/server/modules/mcp/services/handlers/prompt-tools.js.map +1 -1
- package/dist/server/modules/mcp/services/handlers/teams-tools.d.ts +8 -0
- package/dist/server/modules/mcp/services/handlers/teams-tools.js +457 -0
- package/dist/server/modules/mcp/services/handlers/teams-tools.js.map +1 -0
- package/dist/server/modules/mcp/services/handlers/types.d.ts +2 -0
- package/dist/server/modules/mcp/services/instructions-resolver.d.ts +7 -3
- package/dist/server/modules/mcp/services/instructions-resolver.js +50 -26
- package/dist/server/modules/mcp/services/instructions-resolver.js.map +1 -1
- package/dist/server/modules/mcp/services/mcp.service.d.ts +3 -1
- package/dist/server/modules/mcp/services/mcp.service.js +15 -3
- package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
- package/dist/server/modules/mcp/tool-definitions.d.ts +501 -0
- package/dist/server/modules/mcp/tool-definitions.js +137 -3
- package/dist/server/modules/mcp/tool-definitions.js.map +1 -1
- package/dist/server/modules/profiles/controllers/profiles.controller.js +1 -0
- package/dist/server/modules/profiles/controllers/profiles.controller.js.map +1 -1
- package/dist/server/modules/profiles/controllers/provider-configs.controller.js +3 -0
- package/dist/server/modules/profiles/controllers/provider-configs.controller.js.map +1 -1
- package/dist/server/modules/profiles/dto.d.ts +19 -6
- package/dist/server/modules/profiles/dto.js +13 -15
- package/dist/server/modules/profiles/dto.js.map +1 -1
- package/dist/server/modules/projects/controllers/projects.controller.d.ts +34 -0
- package/dist/server/modules/projects/controllers/projects.controller.js +52 -1
- package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
- package/dist/server/modules/projects/helpers/project-export.d.ts +47 -0
- package/dist/server/modules/projects/helpers/project-export.js +116 -40
- package/dist/server/modules/projects/helpers/project-export.js.map +1 -1
- package/dist/server/modules/projects/helpers/project-import.d.ts +62 -0
- package/dist/server/modules/projects/helpers/project-import.js +191 -1
- package/dist/server/modules/projects/helpers/project-import.js.map +1 -1
- package/dist/server/modules/projects/helpers/template-loader.d.ts +13 -0
- package/dist/server/modules/projects/helpers/template-loader.js +60 -1
- package/dist/server/modules/projects/helpers/template-loader.js.map +1 -1
- package/dist/server/modules/projects/projects.module.js +2 -1
- package/dist/server/modules/projects/projects.module.js.map +1 -1
- package/dist/server/modules/projects/services/projects.service.d.ts +41 -1
- package/dist/server/modules/projects/services/projects.service.js +9 -2
- package/dist/server/modules/projects/services/projects.service.js.map +1 -1
- package/dist/server/modules/providers/adapters/gemini.adapter.js +2 -2
- package/dist/server/modules/providers/adapters/gemini.adapter.js.map +1 -1
- package/dist/server/modules/providers/controllers/providers.controller.js +7 -0
- package/dist/server/modules/providers/controllers/providers.controller.js.map +1 -1
- package/dist/server/modules/providers/services/provider-project-sync.service.js +5 -3
- package/dist/server/modules/providers/services/provider-project-sync.service.js.map +1 -1
- package/dist/server/modules/registry/controllers/templates.controller.d.ts +153 -0
- package/dist/server/modules/registry/controllers/templates.controller.js +56 -0
- package/dist/server/modules/registry/controllers/templates.controller.js.map +1 -1
- package/dist/server/modules/seeders/seeders/0007_seed_claude_no_flicker_env.d.ts +3 -0
- package/dist/server/modules/seeders/seeders/0007_seed_claude_no_flicker_env.js +28 -0
- package/dist/server/modules/seeders/seeders/0007_seed_claude_no_flicker_env.js.map +1 -0
- package/dist/server/modules/seeders/services/data-seeder.service.js +2 -0
- package/dist/server/modules/seeders/services/data-seeder.service.js.map +1 -1
- package/dist/server/modules/session-reader/data/pricing.json +137 -8
- package/dist/server/modules/sessions/services/sessions.service.d.ts +1 -0
- package/dist/server/modules/sessions/services/sessions.service.js +26 -5
- package/dist/server/modules/sessions/services/sessions.service.js.map +1 -1
- package/dist/server/modules/sessions/utils/template-renderer.d.ts +6 -0
- package/dist/server/modules/sessions/utils/template-renderer.js +15 -10
- package/dist/server/modules/sessions/utils/template-renderer.js.map +1 -1
- package/dist/server/modules/storage/db/schema.d.ts +440 -0
- package/dist/server/modules/storage/db/schema.js +65 -1
- package/dist/server/modules/storage/db/schema.js.map +1 -1
- package/dist/server/modules/storage/interfaces/storage.interface.d.ts +1 -0
- package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
- package/dist/server/modules/storage/local/delegates/agent.delegate.js +40 -15
- package/dist/server/modules/storage/local/delegates/agent.delegate.js.map +1 -1
- package/dist/server/modules/storage/local/delegates/profile-provider-config.delegate.d.ts +1 -0
- package/dist/server/modules/storage/local/delegates/profile-provider-config.delegate.js +28 -11
- package/dist/server/modules/storage/local/delegates/profile-provider-config.delegate.js.map +1 -1
- package/dist/server/modules/storage/local/delegates/project.delegate.js +10 -0
- package/dist/server/modules/storage/local/delegates/project.delegate.js.map +1 -1
- package/dist/server/modules/storage/local/delegates/provider.delegate.js +38 -10
- package/dist/server/modules/storage/local/delegates/provider.delegate.js.map +1 -1
- package/dist/server/modules/storage/local/helpers/storage-helpers.d.ts +2 -0
- package/dist/server/modules/storage/local/helpers/storage-helpers.js +36 -0
- package/dist/server/modules/storage/local/helpers/storage-helpers.js.map +1 -1
- package/dist/server/modules/storage/models/domain.models.d.ts +62 -0
- package/dist/server/modules/subscribers/services/subscriber-executor.service.d.ts +6 -2
- package/dist/server/modules/subscribers/services/subscriber-executor.service.js +52 -5
- package/dist/server/modules/subscribers/services/subscriber-executor.service.js.map +1 -1
- package/dist/server/modules/teams/controllers/teams.controller.d.ts +39 -0
- package/dist/server/modules/teams/controllers/teams.controller.js +214 -0
- package/dist/server/modules/teams/controllers/teams.controller.js.map +1 -0
- package/dist/server/modules/teams/services/teams.service.d.ts +106 -0
- package/dist/server/modules/teams/services/teams.service.js +748 -0
- package/dist/server/modules/teams/services/teams.service.js.map +1 -0
- package/dist/server/modules/teams/storage/teams.store.d.ts +58 -0
- package/dist/server/modules/teams/storage/teams.store.js +468 -0
- package/dist/server/modules/teams/storage/teams.store.js.map +1 -0
- package/dist/server/modules/teams/teams.module.d.ts +2 -0
- package/dist/server/modules/teams/teams.module.js +27 -0
- package/dist/server/modules/teams/teams.module.js.map +1 -0
- package/dist/server/templates/3-agents-dev.json +74 -41
- package/dist/server/templates/5-agents-dev.json +212 -151
- package/dist/server/templates/teams-dev.json +1096 -0
- package/dist/server/tsconfig.tsbuildinfo +1 -1
- package/dist/server/ui/assets/{ReviewDetailPage-lzvMi5Ex.js → ReviewDetailPage-CEMxN6RQ.js} +1 -1
- package/dist/server/ui/assets/{ReviewsPage-_tz-XI0o.js → ReviewsPage-BzMksnGd.js} +1 -1
- package/dist/server/ui/assets/index-ChJ1IUMI.css +32 -0
- package/dist/server/ui/assets/index-Csagg3g2.js +1027 -0
- package/dist/server/ui/assets/{useReviewSubscription-C3UHhiQv.js → useReviewSubscription-B2ejeWE4.js} +1 -1
- package/dist/server/ui/index.html +2 -2
- package/dist/templates/3-agents-dev.json +74 -41
- package/dist/templates/5-agents-dev.json +212 -151
- package/dist/templates/teams-dev.json +1096 -0
- package/package.json +28 -2
- package/dist/server/ui/assets/index-C99ggRaD.css +0 -32
- package/dist/server/ui/assets/index-CTOev9rG.js +0 -1012
- /package/dist/drizzle/{0050_providers_one_million_context.sql → 0052_providers_one_million_context.sql} +0 -0
- /package/dist/drizzle/{0051_providers_auto_compact_threshold_1m.sql → 0053_providers_auto_compact_threshold_1m.sql} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-query.service.js","sourceRoot":"","sources":["../../../../src/modules/codebase-overview-analyzer/services/evidence-query.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.goAdapter = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const GO_EXTENSIONS = ['.go'];
|
|
6
|
+
const IMPORT_BLOCK_RE = /import\s*\(\s*([\s\S]*?)\)/g;
|
|
7
|
+
const IMPORT_SINGLE_RE = /^import\s+(?:[\w.]+\s+)?"([^"]+)"/gm;
|
|
8
|
+
const IMPORT_LINE_RE = /(?:[\w.]+\s+)?"([^"]+)"/g;
|
|
9
|
+
function extractGoImports(content) {
|
|
10
|
+
const specifiers = new Set();
|
|
11
|
+
IMPORT_BLOCK_RE.lastIndex = 0;
|
|
12
|
+
let blockMatch;
|
|
13
|
+
while ((blockMatch = IMPORT_BLOCK_RE.exec(content)) !== null) {
|
|
14
|
+
const block = blockMatch[1];
|
|
15
|
+
IMPORT_LINE_RE.lastIndex = 0;
|
|
16
|
+
let lineMatch;
|
|
17
|
+
while ((lineMatch = IMPORT_LINE_RE.exec(block)) !== null) {
|
|
18
|
+
if (lineMatch[1])
|
|
19
|
+
specifiers.add(lineMatch[1]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
IMPORT_SINGLE_RE.lastIndex = 0;
|
|
23
|
+
let singleMatch;
|
|
24
|
+
while ((singleMatch = IMPORT_SINGLE_RE.exec(content)) !== null) {
|
|
25
|
+
if (singleMatch[1])
|
|
26
|
+
specifiers.add(singleMatch[1]);
|
|
27
|
+
}
|
|
28
|
+
return [...specifiers];
|
|
29
|
+
}
|
|
30
|
+
const FUNC_RE = /^func\s+(?:\([^)]*\)\s+)?([A-Za-z_]\w*)/gm;
|
|
31
|
+
const TYPE_DECL_RE = /^type\s+([A-Za-z_]\w*)\s+/gm;
|
|
32
|
+
const TYPE_BLOCK_RE = /^type\s*\(\s*([\s\S]*?)\)/gm;
|
|
33
|
+
const VAR_CONST_BLOCK_RE = /^(?:var|const)\s*\(\s*([\s\S]*?)\)/gm;
|
|
34
|
+
const VAR_CONST_SINGLE_RE = /^(?:var|const)\s+([A-Za-z_]\w*)/gm;
|
|
35
|
+
const BLOCK_NAME_RE = /^\s*([A-Za-z_]\w*)\s+/gm;
|
|
36
|
+
function countGoSymbols(content) {
|
|
37
|
+
const symbols = new Set();
|
|
38
|
+
for (const re of [FUNC_RE, TYPE_DECL_RE, VAR_CONST_SINGLE_RE]) {
|
|
39
|
+
re.lastIndex = 0;
|
|
40
|
+
let m;
|
|
41
|
+
while ((m = re.exec(content)) !== null) {
|
|
42
|
+
if (m[1])
|
|
43
|
+
symbols.add(m[1]);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
for (const blockRe of [TYPE_BLOCK_RE, VAR_CONST_BLOCK_RE]) {
|
|
47
|
+
blockRe.lastIndex = 0;
|
|
48
|
+
let blockMatch;
|
|
49
|
+
while ((blockMatch = blockRe.exec(content)) !== null) {
|
|
50
|
+
const block = blockMatch[1];
|
|
51
|
+
BLOCK_NAME_RE.lastIndex = 0;
|
|
52
|
+
let nameMatch;
|
|
53
|
+
while ((nameMatch = BLOCK_NAME_RE.exec(block)) !== null) {
|
|
54
|
+
if (nameMatch[1] && nameMatch[1] !== '//' && nameMatch[1] !== '/*') {
|
|
55
|
+
symbols.add(nameMatch[1]);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return symbols.size;
|
|
61
|
+
}
|
|
62
|
+
const GO_BRANCH_RE = /\b(?:if|else|for|case|default)\b/g;
|
|
63
|
+
const GO_LOGICAL_RE = /&&|\|\|/g;
|
|
64
|
+
function computeGoComplexity(content) {
|
|
65
|
+
if (!content)
|
|
66
|
+
return 1;
|
|
67
|
+
let complexity = 1;
|
|
68
|
+
complexity += (content.match(GO_BRANCH_RE) ?? []).length;
|
|
69
|
+
complexity += (content.match(GO_LOGICAL_RE) ?? []).length;
|
|
70
|
+
return complexity;
|
|
71
|
+
}
|
|
72
|
+
function detectGoTestPair(filePath, allPaths) {
|
|
73
|
+
const ext = (0, path_1.extname)(filePath);
|
|
74
|
+
const dir = (0, path_1.dirname)(filePath);
|
|
75
|
+
const base = (0, path_1.basename)(filePath, ext);
|
|
76
|
+
if (base.endsWith('_test')) {
|
|
77
|
+
const sourceBase = base.slice(0, -5);
|
|
78
|
+
const sourcePath = (0, path_1.join)(dir, `${sourceBase}${ext}`);
|
|
79
|
+
if (allPaths.has(sourcePath))
|
|
80
|
+
return sourcePath;
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const testPath = (0, path_1.join)(dir, `${base}_test${ext}`);
|
|
84
|
+
if (allPaths.has(testPath))
|
|
85
|
+
return testPath;
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const GO_TEST_RE = /^func\s+Test[A-Z]/m;
|
|
89
|
+
const GO_HANDLER_RE = /func\s+\(\s*\w+\s+\*?\w*(?:Handler|Server|Controller)\s*\)\s+(?:ServeHTTP|Handle)/;
|
|
90
|
+
const GO_HTTP_FRAMEWORK_RE = /\b(?:gin\.Context|echo\.Context|chi\.Router|mux\.Router|fiber\.Ctx)\b/;
|
|
91
|
+
const GO_HTTP_HANDLER_FUNC_RE = /\bfunc\s+\w+\s*\(\s*\w+\s+http\.ResponseWriter\s*,\s*\w+\s+\*http\.Request\s*\)/;
|
|
92
|
+
const GO_MODEL_RE = /\b(?:gorm\.Model|sqlx\b|`db:"|`json:.*`\s*$)/m;
|
|
93
|
+
const GO_STRUCT_DB_TAG_RE = /`(?:db|gorm|bson):/;
|
|
94
|
+
const GO_CONFIG_RE = /\b(?:viper\.|envconfig\.|godotenv\.)/;
|
|
95
|
+
const GO_SERVICE_RE = /(?:Service|Svc)\b/;
|
|
96
|
+
function classifyGoRole(filePath, content) {
|
|
97
|
+
const base = (0, path_1.basename)(filePath);
|
|
98
|
+
if (base.endsWith('_test.go'))
|
|
99
|
+
return 'test';
|
|
100
|
+
if (GO_TEST_RE.test(content))
|
|
101
|
+
return 'test';
|
|
102
|
+
if (GO_HANDLER_RE.test(content) ||
|
|
103
|
+
GO_HTTP_FRAMEWORK_RE.test(content) ||
|
|
104
|
+
GO_HTTP_HANDLER_FUNC_RE.test(content))
|
|
105
|
+
return 'controller';
|
|
106
|
+
if (GO_STRUCT_DB_TAG_RE.test(content) || GO_MODEL_RE.test(content))
|
|
107
|
+
return 'model';
|
|
108
|
+
if (base === 'config.go' || GO_CONFIG_RE.test(content))
|
|
109
|
+
return 'config';
|
|
110
|
+
if (GO_SERVICE_RE.test(content))
|
|
111
|
+
return 'service';
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
function isStdlib(specifier) {
|
|
115
|
+
const firstSegment = specifier.split('/')[0];
|
|
116
|
+
return !firstSegment.includes('.');
|
|
117
|
+
}
|
|
118
|
+
function resolveGoImport(specifier, importerPath, allPaths) {
|
|
119
|
+
if (!specifier)
|
|
120
|
+
return null;
|
|
121
|
+
if (isStdlib(specifier))
|
|
122
|
+
return null;
|
|
123
|
+
const segments = specifier.split('/');
|
|
124
|
+
for (let start = 1; start < segments.length; start++) {
|
|
125
|
+
const suffix = segments.slice(start).join('/');
|
|
126
|
+
const candidates = [];
|
|
127
|
+
for (const p of allPaths) {
|
|
128
|
+
if (!p.endsWith('.go'))
|
|
129
|
+
continue;
|
|
130
|
+
const pDir = (0, path_1.dirname)(p);
|
|
131
|
+
if (pDir === suffix || pDir.endsWith('/' + suffix)) {
|
|
132
|
+
candidates.push(p);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (candidates.length === 0)
|
|
136
|
+
continue;
|
|
137
|
+
const dirs = new Set(candidates.map((c) => (0, path_1.dirname)(c)));
|
|
138
|
+
if (dirs.size === 1)
|
|
139
|
+
return candidates[0];
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
exports.goAdapter = {
|
|
145
|
+
id: 'go',
|
|
146
|
+
extensions: GO_EXTENSIONS,
|
|
147
|
+
classifyRole(filePath, content) {
|
|
148
|
+
return classifyGoRole(filePath, content);
|
|
149
|
+
},
|
|
150
|
+
extractImports(content) {
|
|
151
|
+
return extractGoImports(content);
|
|
152
|
+
},
|
|
153
|
+
countSymbols(content) {
|
|
154
|
+
return countGoSymbols(content);
|
|
155
|
+
},
|
|
156
|
+
computeComplexity(content) {
|
|
157
|
+
return computeGoComplexity(content);
|
|
158
|
+
},
|
|
159
|
+
resolveImport(specifier, importerPath, allPaths) {
|
|
160
|
+
return resolveGoImport(specifier, importerPath, allPaths);
|
|
161
|
+
},
|
|
162
|
+
detectTestPair(filePath, allPaths) {
|
|
163
|
+
return detectGoTestPair(filePath, allPaths);
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=go-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-adapter.js","sourceRoot":"","sources":["../../../../src/modules/codebase-overview-analyzer/services/go-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DistrictNode, HotspotEntry, ActivitySummary } from '@devchain/codebase-overview';
|
|
2
|
+
import type { FileAdapterEnrichment } from './language-adapter-registry.service';
|
|
3
|
+
export interface FileChurnData {
|
|
4
|
+
path: string;
|
|
5
|
+
loc: number;
|
|
6
|
+
lastModified: number;
|
|
7
|
+
churn1d: number;
|
|
8
|
+
churn7d: number;
|
|
9
|
+
churn30d: number;
|
|
10
|
+
isTest: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function isTestFile(filePath: string): boolean;
|
|
13
|
+
export declare class HotspotScoringService {
|
|
14
|
+
enrichDistrictMetrics(districts: DistrictNode[], districtFiles: ReadonlyMap<string, FileChurnData[]>): void;
|
|
15
|
+
enrichDistrictAdapterMetrics(districts: DistrictNode[], districtFiles: ReadonlyMap<string, FileChurnData[]>, enrichments: ReadonlyMap<string, FileAdapterEnrichment>): void;
|
|
16
|
+
enrichDistrictOwnership(districts: DistrictNode[], districtFiles: ReadonlyMap<string, FileChurnData[]>, fileAuthors: ReadonlyMap<string, Map<string, number>>): void;
|
|
17
|
+
rankHotspots(districts: ReadonlyArray<DistrictNode>, districtFiles: ReadonlyMap<string, FileChurnData[]>): HotspotEntry[];
|
|
18
|
+
private static readonly CONTRIBUTORS_PER_DISTRICT;
|
|
19
|
+
computeActivitySummaries(districts: ReadonlyArray<DistrictNode>, districtFiles: ReadonlyMap<string, FileChurnData[]>, dailyChurnFileMap?: ReadonlyMap<string, ReadonlyMap<string, number>> | null, windowedAuthor7d?: ReadonlyMap<string, ReadonlyMap<string, number>> | null, windowedAuthor30d?: ReadonlyMap<string, ReadonlyMap<string, number>> | null): ActivitySummary[];
|
|
20
|
+
private aggregateContributors;
|
|
21
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
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 HotspotScoringService_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.HotspotScoringService = void 0;
|
|
11
|
+
exports.isTestFile = isTestFile;
|
|
12
|
+
const common_1 = require("@nestjs/common");
|
|
13
|
+
const district_splitting_service_1 = require("./district-splitting.service");
|
|
14
|
+
const TOP_N = 10;
|
|
15
|
+
const TEST_NAME_RE = /[.\-_](test|spec)\.[^/\\]+$/i;
|
|
16
|
+
const TEST_DIR_RE = /(^|[/\\])(__tests__|tests?)[/\\]/i;
|
|
17
|
+
function isTestFile(filePath) {
|
|
18
|
+
return TEST_NAME_RE.test(filePath) || TEST_DIR_RE.test(filePath);
|
|
19
|
+
}
|
|
20
|
+
let HotspotScoringService = HotspotScoringService_1 = class HotspotScoringService {
|
|
21
|
+
enrichDistrictMetrics(districts, districtFiles) {
|
|
22
|
+
for (const district of districts) {
|
|
23
|
+
const files = districtFiles.get(district.id) ?? [];
|
|
24
|
+
let churn7d = 0;
|
|
25
|
+
let churn30d = 0;
|
|
26
|
+
let testFileCount = 0;
|
|
27
|
+
const roleCounts = new Map();
|
|
28
|
+
for (const f of files) {
|
|
29
|
+
churn7d += f.churn7d;
|
|
30
|
+
churn30d += f.churn30d;
|
|
31
|
+
if (f.isTest)
|
|
32
|
+
testFileCount++;
|
|
33
|
+
const role = (0, district_splitting_service_1.classifyFileRole)(f.path);
|
|
34
|
+
roleCounts.set(role, (roleCounts.get(role) ?? 0) + 1);
|
|
35
|
+
}
|
|
36
|
+
district.churn7d = churn7d;
|
|
37
|
+
district.churn30d = churn30d;
|
|
38
|
+
district.testFileCount = testFileCount;
|
|
39
|
+
district.testFileRatio = files.length > 0 ? testFileCount / files.length : null;
|
|
40
|
+
if (files.length > 0) {
|
|
41
|
+
district.role = dominantRole(roleCounts);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
enrichDistrictAdapterMetrics(districts, districtFiles, enrichments) {
|
|
46
|
+
for (const district of districts) {
|
|
47
|
+
const files = districtFiles.get(district.id) ?? [];
|
|
48
|
+
if (files.length === 0)
|
|
49
|
+
continue;
|
|
50
|
+
let complexitySum = 0;
|
|
51
|
+
let complexityCount = 0;
|
|
52
|
+
let measuredSourceFiles = 0;
|
|
53
|
+
let coveredFiles = 0;
|
|
54
|
+
for (const f of files) {
|
|
55
|
+
const enrichment = enrichments.get(f.path);
|
|
56
|
+
if (enrichment?.complexity != null) {
|
|
57
|
+
complexitySum += enrichment.complexity;
|
|
58
|
+
complexityCount++;
|
|
59
|
+
}
|
|
60
|
+
if (!f.isTest && enrichment !== undefined) {
|
|
61
|
+
measuredSourceFiles++;
|
|
62
|
+
if (enrichment.testPair != null)
|
|
63
|
+
coveredFiles++;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
district.complexityAvg =
|
|
67
|
+
complexityCount > 0 ? Math.round((complexitySum / complexityCount) * 10) / 10 : null;
|
|
68
|
+
district.testCoverageRate =
|
|
69
|
+
measuredSourceFiles > 0
|
|
70
|
+
? Math.round((coveredFiles / measuredSourceFiles) * 100) / 100
|
|
71
|
+
: null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
enrichDistrictOwnership(districts, districtFiles, fileAuthors) {
|
|
75
|
+
for (const district of districts) {
|
|
76
|
+
const files = districtFiles.get(district.id) ?? [];
|
|
77
|
+
if (files.length === 0)
|
|
78
|
+
continue;
|
|
79
|
+
const authorCounts = new Map();
|
|
80
|
+
for (const f of files) {
|
|
81
|
+
const authors = fileAuthors.get(f.path);
|
|
82
|
+
if (!authors)
|
|
83
|
+
continue;
|
|
84
|
+
for (const [author, count] of authors) {
|
|
85
|
+
authorCounts.set(author, (authorCounts.get(author) ?? 0) + count);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (authorCounts.size === 0) {
|
|
89
|
+
district.ownershipConcentration = null;
|
|
90
|
+
district.primaryAuthorName = null;
|
|
91
|
+
district.primaryAuthorShare = null;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const totalCommits = [...authorCounts.values()].reduce((a, b) => a + b, 0);
|
|
95
|
+
let hhi = 0;
|
|
96
|
+
let primaryAuthorName = '';
|
|
97
|
+
let primaryAuthorMaxCount = 0;
|
|
98
|
+
for (const [author, count] of authorCounts) {
|
|
99
|
+
const share = count / totalCommits;
|
|
100
|
+
hhi += share * share;
|
|
101
|
+
if (count > primaryAuthorMaxCount) {
|
|
102
|
+
primaryAuthorMaxCount = count;
|
|
103
|
+
primaryAuthorName = author;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
district.ownershipConcentration = Math.round(hhi * 100) / 100;
|
|
107
|
+
district.primaryAuthorName = primaryAuthorName;
|
|
108
|
+
district.primaryAuthorShare = Math.round((primaryAuthorMaxCount / totalCommits) * 100) / 100;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
rankHotspots(districts, districtFiles) {
|
|
112
|
+
if (districts.length === 0)
|
|
113
|
+
return [];
|
|
114
|
+
const entries = [];
|
|
115
|
+
const nowMs = Date.now();
|
|
116
|
+
addRankedEntries(entries, districts, 'size', (d) => (districtFiles.get(d.id) ?? []).reduce((s, f) => s + f.loc, 0), (d, score) => `${d.name} — ${score.toLocaleString()} LOC`);
|
|
117
|
+
addRankedEntries(entries, districts, 'churn', (d) => d.churn30d, (d, score) => `${d.name} — ${score} commits in 30d`);
|
|
118
|
+
const districtsWithFiles = districts.filter((d) => d.totalFiles > 0);
|
|
119
|
+
addRankedEntries(entries, districtsWithFiles, 'tests', (d) => {
|
|
120
|
+
const ratio = d.testFileRatio ?? 0;
|
|
121
|
+
return Math.round((1 - ratio) * 100);
|
|
122
|
+
}, (d) => {
|
|
123
|
+
const pct = d.testFileRatio != null ? Math.round(d.testFileRatio * 100) : 0;
|
|
124
|
+
return `${d.name} — ${pct}% test files`;
|
|
125
|
+
});
|
|
126
|
+
const stalenessMap = new Map();
|
|
127
|
+
for (const district of districts) {
|
|
128
|
+
const files = districtFiles.get(district.id) ?? [];
|
|
129
|
+
if (files.length === 0)
|
|
130
|
+
continue;
|
|
131
|
+
const mostRecent = Math.max(...files.map((f) => f.lastModified));
|
|
132
|
+
const staleDays = Math.max(0, Math.floor((nowMs - mostRecent) / (1000 * 86400)));
|
|
133
|
+
stalenessMap.set(district.id, staleDays);
|
|
134
|
+
}
|
|
135
|
+
addRankedEntries(entries, districts, 'staleness', (d) => stalenessMap.get(d.id) ?? 0, (d, score) => `${d.name} — last modified ${score}d ago`);
|
|
136
|
+
addRankedEntries(entries, districts, 'coupling', (d) => d.couplingScore, (d, score) => `${d.name} — coupling ${score} (${d.inboundWeight} in, ${d.outboundWeight} out)`);
|
|
137
|
+
const complexDistricts = districts.filter((d) => d.complexityAvg != null);
|
|
138
|
+
addRankedEntries(entries, complexDistricts, 'complexity', (d) => d.complexityAvg, (d, score) => `${d.name} — avg complexity ${score}`);
|
|
139
|
+
const ownedDistricts = districts.filter((d) => d.ownershipConcentration != null);
|
|
140
|
+
addRankedEntries(entries, ownedDistricts, 'ownership', (d) => Math.round(d.ownershipConcentration * 100), (d) => {
|
|
141
|
+
const pct = Math.round(d.ownershipConcentration * 100);
|
|
142
|
+
return `${d.name} — ${pct}% ownership concentration`;
|
|
143
|
+
});
|
|
144
|
+
return entries;
|
|
145
|
+
}
|
|
146
|
+
computeActivitySummaries(districts, districtFiles, dailyChurnFileMap, windowedAuthor7d, windowedAuthor30d) {
|
|
147
|
+
return districts.map((district) => {
|
|
148
|
+
const files = districtFiles.get(district.id) ?? [];
|
|
149
|
+
let modifiedCount1d = 0;
|
|
150
|
+
let modifiedCount7d = 0;
|
|
151
|
+
let latestTimestamp = null;
|
|
152
|
+
for (const f of files) {
|
|
153
|
+
if (f.churn1d > 0)
|
|
154
|
+
modifiedCount1d++;
|
|
155
|
+
if (f.churn7d > 0)
|
|
156
|
+
modifiedCount7d++;
|
|
157
|
+
if (latestTimestamp == null || f.lastModified > latestTimestamp) {
|
|
158
|
+
latestTimestamp = f.lastModified;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const result = {
|
|
162
|
+
targetId: district.id,
|
|
163
|
+
targetKind: 'district',
|
|
164
|
+
modifiedCount1d,
|
|
165
|
+
modifiedCount7d,
|
|
166
|
+
buildFailures7d: null,
|
|
167
|
+
testFailures7d: null,
|
|
168
|
+
latestTimestamp: latestTimestamp != null ? Math.floor(latestTimestamp / 1000) : null,
|
|
169
|
+
recentContributors7d: [],
|
|
170
|
+
recentContributors30d: [],
|
|
171
|
+
};
|
|
172
|
+
if (dailyChurnFileMap) {
|
|
173
|
+
const dailyChurn = {};
|
|
174
|
+
for (const f of files) {
|
|
175
|
+
const dateMap = dailyChurnFileMap.get(f.path);
|
|
176
|
+
if (!dateMap)
|
|
177
|
+
continue;
|
|
178
|
+
for (const [dateStr, count] of dateMap) {
|
|
179
|
+
dailyChurn[dateStr] = (dailyChurn[dateStr] ?? 0) + count;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (Object.keys(dailyChurn).length > 0) {
|
|
183
|
+
result.dailyChurn = dailyChurn;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (windowedAuthor7d) {
|
|
187
|
+
result.recentContributors7d = this.aggregateContributors(files, windowedAuthor7d);
|
|
188
|
+
}
|
|
189
|
+
if (windowedAuthor30d) {
|
|
190
|
+
result.recentContributors30d = this.aggregateContributors(files, windowedAuthor30d);
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
aggregateContributors(files, authorMap) {
|
|
196
|
+
const totals = new Map();
|
|
197
|
+
for (const f of files) {
|
|
198
|
+
const fileAuthors = authorMap.get(f.path);
|
|
199
|
+
if (!fileAuthors)
|
|
200
|
+
continue;
|
|
201
|
+
for (const [author, count] of fileAuthors) {
|
|
202
|
+
totals.set(author, (totals.get(author) ?? 0) + count);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return [...totals.entries()]
|
|
206
|
+
.sort((a, b) => b[1] - a[1])
|
|
207
|
+
.slice(0, HotspotScoringService_1.CONTRIBUTORS_PER_DISTRICT)
|
|
208
|
+
.map(([authorName, commitCount]) => ({ authorName, commitCount }));
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
exports.HotspotScoringService = HotspotScoringService;
|
|
212
|
+
HotspotScoringService.CONTRIBUTORS_PER_DISTRICT = 5;
|
|
213
|
+
exports.HotspotScoringService = HotspotScoringService = HotspotScoringService_1 = __decorate([
|
|
214
|
+
(0, common_1.Injectable)()
|
|
215
|
+
], HotspotScoringService);
|
|
216
|
+
function dominantRole(roleCounts) {
|
|
217
|
+
let maxRole = 'mixed';
|
|
218
|
+
let maxCount = 0;
|
|
219
|
+
let knownCount = 0;
|
|
220
|
+
for (const [role, count] of roleCounts) {
|
|
221
|
+
if (role === 'unknown')
|
|
222
|
+
continue;
|
|
223
|
+
knownCount += count;
|
|
224
|
+
if (count > maxCount) {
|
|
225
|
+
maxCount = count;
|
|
226
|
+
maxRole = role;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (knownCount === 0)
|
|
230
|
+
return 'mixed';
|
|
231
|
+
return maxCount > knownCount * 0.5 ? maxRole : 'mixed';
|
|
232
|
+
}
|
|
233
|
+
function addRankedEntries(entries, districts, metric, scoreFn, labelFn) {
|
|
234
|
+
const scored = districts
|
|
235
|
+
.map((d) => ({ district: d, score: scoreFn(d) }))
|
|
236
|
+
.filter((item) => item.score > 0)
|
|
237
|
+
.sort((a, b) => b.score - a.score);
|
|
238
|
+
const count = Math.min(scored.length, TOP_N);
|
|
239
|
+
for (let i = 0; i < count; i++) {
|
|
240
|
+
const { district, score } = scored[i];
|
|
241
|
+
entries.push({
|
|
242
|
+
id: `hotspot:${metric}:${i + 1}`,
|
|
243
|
+
kind: 'district',
|
|
244
|
+
targetId: district.id,
|
|
245
|
+
metric,
|
|
246
|
+
rank: i + 1,
|
|
247
|
+
score,
|
|
248
|
+
label: labelFn(district, score),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=hotspot-scoring.service.js.map
|
package/dist/server/modules/codebase-overview-analyzer/services/hotspot-scoring.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hotspot-scoring.service.js","sourceRoot":"","sources":["../../../../src/modules/codebase-overview-analyzer/services/hotspot-scoring.service.ts"],"names":[],"mappings":"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"}
|
package/dist/server/modules/codebase-overview-analyzer/services/identity-resolver.service.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface GitRename {
|
|
2
|
+
oldPath: string;
|
|
3
|
+
newPath: string;
|
|
4
|
+
similarity: number;
|
|
5
|
+
}
|
|
6
|
+
export interface PreviousIdentityState {
|
|
7
|
+
commitSha: string | null;
|
|
8
|
+
files: ReadonlyMap<string, string>;
|
|
9
|
+
districts: ReadonlyMap<string, DistrictIdentityEntry>;
|
|
10
|
+
regions: ReadonlyMap<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface DistrictIdentityEntry {
|
|
13
|
+
id: string;
|
|
14
|
+
memberFileIds: ReadonlySet<string>;
|
|
15
|
+
}
|
|
16
|
+
export interface DistrictCandidate {
|
|
17
|
+
key: string;
|
|
18
|
+
memberFileIds: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare class IdentityResolverService {
|
|
21
|
+
resolveFileIds(currentPaths: string[], previous: PreviousIdentityState | null, gitRenames: GitRename[]): Map<string, string>;
|
|
22
|
+
resolveDistrictIds(currentDistricts: DistrictCandidate[], previous: PreviousIdentityState | null): Map<string, string>;
|
|
23
|
+
resolveRegionIds(currentRegionNames: string[], previous: PreviousIdentityState | null): Map<string, string>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.IdentityResolverService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const crypto_1 = require("crypto");
|
|
12
|
+
const DISTRICT_OVERLAP_THRESHOLD = 0.5;
|
|
13
|
+
let IdentityResolverService = class IdentityResolverService {
|
|
14
|
+
resolveFileIds(currentPaths, previous, gitRenames) {
|
|
15
|
+
const result = new Map();
|
|
16
|
+
const prevFiles = previous?.files ?? new Map();
|
|
17
|
+
const renameMap = new Map();
|
|
18
|
+
for (const r of gitRenames) {
|
|
19
|
+
renameMap.set(r.newPath, r.oldPath);
|
|
20
|
+
}
|
|
21
|
+
for (const path of currentPaths) {
|
|
22
|
+
const exactId = prevFiles.get(path);
|
|
23
|
+
if (exactId) {
|
|
24
|
+
result.set(path, exactId);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const oldPath = renameMap.get(path);
|
|
28
|
+
if (oldPath) {
|
|
29
|
+
const renamedId = prevFiles.get(oldPath);
|
|
30
|
+
if (renamedId) {
|
|
31
|
+
result.set(path, renamedId);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
result.set(path, (0, crypto_1.randomUUID)());
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
resolveDistrictIds(currentDistricts, previous) {
|
|
40
|
+
const result = new Map();
|
|
41
|
+
const prevDistricts = previous?.districts ?? new Map();
|
|
42
|
+
const matchedPrevious = new Set();
|
|
43
|
+
for (const district of currentDistricts) {
|
|
44
|
+
const currentMemberSet = new Set(district.memberFileIds);
|
|
45
|
+
const exactMatch = prevDistricts.get(district.key);
|
|
46
|
+
if (exactMatch) {
|
|
47
|
+
const overlap = computeOverlap(exactMatch.memberFileIds, currentMemberSet);
|
|
48
|
+
if (overlap >= DISTRICT_OVERLAP_THRESHOLD) {
|
|
49
|
+
result.set(district.key, exactMatch.id);
|
|
50
|
+
matchedPrevious.add(district.key);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
let bestMatch = null;
|
|
55
|
+
for (const [prevKey, prevData] of prevDistricts) {
|
|
56
|
+
if (matchedPrevious.has(prevKey))
|
|
57
|
+
continue;
|
|
58
|
+
const overlap = computeOverlap(prevData.memberFileIds, currentMemberSet);
|
|
59
|
+
if (overlap >= DISTRICT_OVERLAP_THRESHOLD && (!bestMatch || overlap > bestMatch.ratio)) {
|
|
60
|
+
bestMatch = { key: prevKey, id: prevData.id, ratio: overlap };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (bestMatch) {
|
|
64
|
+
result.set(district.key, bestMatch.id);
|
|
65
|
+
matchedPrevious.add(bestMatch.key);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
result.set(district.key, (0, crypto_1.randomUUID)());
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
resolveRegionIds(currentRegionNames, previous) {
|
|
73
|
+
const result = new Map();
|
|
74
|
+
const prevRegions = previous?.regions ?? new Map();
|
|
75
|
+
for (const name of currentRegionNames) {
|
|
76
|
+
const prevId = prevRegions.get(name);
|
|
77
|
+
result.set(name, prevId ?? (0, crypto_1.randomUUID)());
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
exports.IdentityResolverService = IdentityResolverService;
|
|
83
|
+
exports.IdentityResolverService = IdentityResolverService = __decorate([
|
|
84
|
+
(0, common_1.Injectable)()
|
|
85
|
+
], IdentityResolverService);
|
|
86
|
+
function computeOverlap(previousMembers, currentMembers) {
|
|
87
|
+
if (previousMembers.size === 0 && currentMembers.size === 0)
|
|
88
|
+
return 1;
|
|
89
|
+
if (previousMembers.size === 0 || currentMembers.size === 0)
|
|
90
|
+
return 0;
|
|
91
|
+
let intersectionCount = 0;
|
|
92
|
+
for (const id of previousMembers) {
|
|
93
|
+
if (currentMembers.has(id))
|
|
94
|
+
intersectionCount++;
|
|
95
|
+
}
|
|
96
|
+
return intersectionCount / Math.max(previousMembers.size, currentMembers.size);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=identity-resolver.service.js.map
|
package/dist/server/modules/codebase-overview-analyzer/services/identity-resolver.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-resolver.service.js","sourceRoot":"","sources":["../../../../src/modules/codebase-overview-analyzer/services/identity-resolver.service.ts"],"names":[],"mappings":"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"}
|