mcoda 0.1.2 → 0.1.4
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/CHANGELOG.md +2 -2
- package/README.md +9 -300
- package/dist/bin/McodaEntrypoint.d.ts +5 -0
- package/dist/bin/McodaEntrypoint.d.ts.map +1 -0
- package/dist/bin/McodaEntrypoint.js +175 -0
- package/dist/commands/agents/AgentsCommands.d.ts +4 -0
- package/dist/commands/agents/AgentsCommands.d.ts.map +1 -0
- package/dist/commands/agents/AgentsCommands.js +376 -0
- package/dist/commands/agents/GatewayAgentCommand.d.ts +4 -0
- package/dist/commands/agents/GatewayAgentCommand.d.ts.map +1 -0
- package/dist/commands/agents/GatewayAgentCommand.js +583 -0
- package/dist/commands/agents/TestAgentCommand.d.ts +4 -0
- package/dist/commands/agents/TestAgentCommand.d.ts.map +1 -0
- package/dist/commands/agents/TestAgentCommand.js +57 -0
- package/dist/commands/backlog/BacklogCommands.d.ts +17 -0
- package/dist/commands/backlog/BacklogCommands.d.ts.map +1 -0
- package/dist/commands/backlog/BacklogCommands.js +260 -0
- package/dist/commands/backlog/OrderTasksCommand.d.ts +16 -0
- package/dist/commands/backlog/OrderTasksCommand.d.ts.map +1 -0
- package/dist/commands/backlog/OrderTasksCommand.js +211 -0
- package/dist/commands/backlog/TaskShowCommands.d.ts +16 -0
- package/dist/commands/backlog/TaskShowCommands.d.ts.map +1 -0
- package/dist/commands/backlog/TaskShowCommands.js +275 -0
- package/dist/commands/docs/DocsCommands.d.ts +37 -0
- package/dist/commands/docs/DocsCommands.d.ts.map +1 -0
- package/dist/commands/docs/DocsCommands.js +381 -0
- package/dist/commands/estimate/EstimateCommands.d.ts +24 -0
- package/dist/commands/estimate/EstimateCommands.d.ts.map +1 -0
- package/dist/commands/estimate/EstimateCommands.js +259 -0
- package/dist/commands/jobs/JobsCommands.d.ts +24 -0
- package/dist/commands/jobs/JobsCommands.d.ts.map +1 -0
- package/dist/commands/jobs/JobsCommands.js +535 -0
- package/dist/commands/openapi/OpenapiCommands.d.ts +14 -0
- package/dist/commands/openapi/OpenapiCommands.d.ts.map +1 -0
- package/dist/commands/openapi/OpenapiCommands.js +157 -0
- package/dist/commands/planning/CreateTasksCommand.d.ts +17 -0
- package/dist/commands/planning/CreateTasksCommand.d.ts.map +1 -0
- package/dist/commands/planning/CreateTasksCommand.js +134 -0
- package/dist/commands/planning/MigrateTasksCommand.d.ts +15 -0
- package/dist/commands/planning/MigrateTasksCommand.d.ts.map +1 -0
- package/dist/commands/planning/MigrateTasksCommand.js +95 -0
- package/dist/commands/planning/PlanningCommands.d.ts +3 -0
- package/dist/commands/planning/PlanningCommands.d.ts.map +1 -0
- package/dist/commands/planning/PlanningCommands.js +2 -0
- package/dist/commands/planning/QaTasksCommand.d.ts +30 -0
- package/dist/commands/planning/QaTasksCommand.d.ts.map +1 -0
- package/dist/commands/planning/QaTasksCommand.js +293 -0
- package/dist/commands/planning/RefineTasksCommand.d.ts +30 -0
- package/dist/commands/planning/RefineTasksCommand.d.ts.map +1 -0
- package/dist/commands/planning/RefineTasksCommand.js +365 -0
- package/dist/commands/review/CodeReviewCommand.d.ts +21 -0
- package/dist/commands/review/CodeReviewCommand.d.ts.map +1 -0
- package/dist/commands/review/CodeReviewCommand.js +236 -0
- package/dist/commands/routing/RoutingCommands.d.ts +7 -0
- package/dist/commands/routing/RoutingCommands.d.ts.map +1 -0
- package/dist/commands/routing/RoutingCommands.js +484 -0
- package/dist/commands/telemetry/TelemetryCommands.d.ts +26 -0
- package/dist/commands/telemetry/TelemetryCommands.d.ts.map +1 -0
- package/dist/commands/telemetry/TelemetryCommands.js +313 -0
- package/dist/commands/update/UpdateCommands.d.ts +4 -0
- package/dist/commands/update/UpdateCommands.d.ts.map +1 -0
- package/dist/commands/update/UpdateCommands.js +280 -0
- package/dist/commands/work/WorkOnTasksCommand.d.ts +21 -0
- package/dist/commands/work/WorkOnTasksCommand.d.ts.map +1 -0
- package/dist/commands/work/WorkOnTasksCommand.js +238 -0
- package/dist/commands/workspace/SetWorkspaceCommand.d.ts +9 -0
- package/dist/commands/workspace/SetWorkspaceCommand.d.ts.map +1 -0
- package/dist/commands/workspace/SetWorkspaceCommand.js +128 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/package.json +31 -16
- package/.editorconfig +0 -9
- package/.eslintrc.cjs +0 -12
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -29
- package/.github/ISSUE_TEMPLATE/config.yml +0 -5
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
- package/.github/workflows/ci.yml +0 -37
- package/.github/workflows/nightly.yml +0 -38
- package/.github/workflows/release-dry-run.yml +0 -40
- package/.github/workflows/release-please.yml +0 -22
- package/.github/workflows/release.yml +0 -139
- package/.prettierrc +0 -5
- package/.release-please-manifest.json +0 -8
- package/CLA.md +0 -42
- package/CONTRIBUTING.md +0 -38
- package/docs/oss_publishing_plan.md +0 -41
- package/docs/pdr/.gitkeep +0 -0
- package/docs/quality_gates.md +0 -32
- package/docs/rfp/.gitkeep +0 -0
- package/docs/sds/sds.md +0 -11963
- package/docs/usage.md +0 -72
- package/openapi/gen-openapi.ts +0 -1
- package/openapi/generated/clients/.gitkeep +0 -0
- package/openapi/generated/types/.gitkeep +0 -0
- package/openapi/generated/types/index.ts +0 -118
- package/openapi/mcoda.yaml +0 -2063
- package/pack-mcoda.sh +0 -88
- package/packages/agents/CHANGELOG.md +0 -7
- package/packages/agents/LICENSE +0 -21
- package/packages/agents/README.md +0 -9
- package/packages/agents/package.json +0 -41
- package/packages/agents/src/AgentService/.gitkeep +0 -0
- package/packages/agents/src/AgentService/AgentService.d.ts +0 -21
- package/packages/agents/src/AgentService/AgentService.d.ts.map +0 -1
- package/packages/agents/src/AgentService/AgentService.js +0 -141
- package/packages/agents/src/AgentService/AgentService.ts +0 -308
- package/packages/agents/src/__tests__/AgentService.test.ts +0 -284
- package/packages/agents/src/adapters/AdapterTypes.d.ts +0 -29
- package/packages/agents/src/adapters/AdapterTypes.d.ts.map +0 -1
- package/packages/agents/src/adapters/AdapterTypes.js +0 -1
- package/packages/agents/src/adapters/AdapterTypes.ts +0 -32
- package/packages/agents/src/adapters/codex/.gitkeep +0 -0
- package/packages/agents/src/adapters/codex/CodexAdapter.d.ts +0 -11
- package/packages/agents/src/adapters/codex/CodexAdapter.d.ts.map +0 -1
- package/packages/agents/src/adapters/codex/CodexAdapter.js +0 -43
- package/packages/agents/src/adapters/codex/CodexAdapter.ts +0 -63
- package/packages/agents/src/adapters/codex/CodexCliRunner.ts +0 -154
- package/packages/agents/src/adapters/gemini/.gitkeep +0 -0
- package/packages/agents/src/adapters/gemini/GeminiAdapter.d.ts +0 -11
- package/packages/agents/src/adapters/gemini/GeminiAdapter.d.ts.map +0 -1
- package/packages/agents/src/adapters/gemini/GeminiAdapter.js +0 -42
- package/packages/agents/src/adapters/gemini/GeminiAdapter.ts +0 -58
- package/packages/agents/src/adapters/gemini/GeminiCliRunner.ts +0 -75
- package/packages/agents/src/adapters/local/.gitkeep +0 -0
- package/packages/agents/src/adapters/local/LocalAdapter.d.ts +0 -11
- package/packages/agents/src/adapters/local/LocalAdapter.d.ts.map +0 -1
- package/packages/agents/src/adapters/local/LocalAdapter.js +0 -38
- package/packages/agents/src/adapters/local/LocalAdapter.ts +0 -43
- package/packages/agents/src/adapters/ollama/OllamaCliAdapter.ts +0 -58
- package/packages/agents/src/adapters/ollama/OllamaCliRunner.ts +0 -70
- package/packages/agents/src/adapters/ollama/OllamaRemoteAdapter.ts +0 -205
- package/packages/agents/src/adapters/openai/.gitkeep +0 -0
- package/packages/agents/src/adapters/openai/OpenAiAdapter.d.ts +0 -11
- package/packages/agents/src/adapters/openai/OpenAiAdapter.d.ts.map +0 -1
- package/packages/agents/src/adapters/openai/OpenAiAdapter.js +0 -51
- package/packages/agents/src/adapters/openai/OpenAiAdapter.ts +0 -56
- package/packages/agents/src/adapters/openai/OpenAiCliAdapter.ts +0 -62
- package/packages/agents/src/adapters/qa/.gitkeep +0 -0
- package/packages/agents/src/adapters/qa/QaAdapter.d.ts +0 -11
- package/packages/agents/src/adapters/qa/QaAdapter.d.ts.map +0 -1
- package/packages/agents/src/adapters/qa/QaAdapter.js +0 -37
- package/packages/agents/src/adapters/qa/QaAdapter.ts +0 -42
- package/packages/agents/src/adapters/zhipu/ZhipuApiAdapter.ts +0 -273
- package/packages/agents/src/index.d.ts +0 -8
- package/packages/agents/src/index.d.ts.map +0 -1
- package/packages/agents/src/index.js +0 -7
- package/packages/agents/src/index.ts +0 -11
- package/packages/agents/tsconfig.json +0 -14
- package/packages/cli/CHANGELOG.md +0 -7
- package/packages/cli/LICENSE +0 -21
- package/packages/cli/README.md +0 -23
- package/packages/cli/package.json +0 -61
- package/packages/cli/src/__tests__/AgentsCommands.test.ts +0 -137
- package/packages/cli/src/__tests__/BacklogCommands.test.ts +0 -40
- package/packages/cli/src/__tests__/CodeReviewCommand.test.ts +0 -594
- package/packages/cli/src/__tests__/CreateTasksCommand.test.ts +0 -40
- package/packages/cli/src/__tests__/DocsCommands.test.ts +0 -41
- package/packages/cli/src/__tests__/EstimateCommands.test.ts +0 -54
- package/packages/cli/src/__tests__/JobsCommands.behavior.test.ts +0 -311
- package/packages/cli/src/__tests__/JobsCommands.test.ts +0 -49
- package/packages/cli/src/__tests__/MigrateTasksCommand.test.ts +0 -36
- package/packages/cli/src/__tests__/OpenapiCommands.test.ts +0 -34
- package/packages/cli/src/__tests__/OrderTasksCommand.test.ts +0 -150
- package/packages/cli/src/__tests__/PlanningCommands.test.ts +0 -9
- package/packages/cli/src/__tests__/QaTasksCommand.test.ts +0 -58
- package/packages/cli/src/__tests__/RefineTasksCommand.test.ts +0 -63
- package/packages/cli/src/__tests__/RoutingCommands.test.ts +0 -302
- package/packages/cli/src/__tests__/SetWorkspaceCommand.test.ts +0 -18
- package/packages/cli/src/__tests__/TaskShowCommands.test.ts +0 -130
- package/packages/cli/src/__tests__/TelemetryCommands.test.ts +0 -35
- package/packages/cli/src/__tests__/TestAgentCommand.test.ts +0 -41
- package/packages/cli/src/__tests__/UpdateCommands.test.ts +0 -292
- package/packages/cli/src/__tests__/WorkOnTasksCommand.test.ts +0 -42
- package/packages/cli/src/bin/.gitkeep +0 -0
- package/packages/cli/src/bin/McodaEntrypoint.ts +0 -180
- package/packages/cli/src/commands/agents/.gitkeep +0 -0
- package/packages/cli/src/commands/agents/AgentsCommands.ts +0 -374
- package/packages/cli/src/commands/agents/GatewayAgentCommand.ts +0 -621
- package/packages/cli/src/commands/agents/TestAgentCommand.ts +0 -63
- package/packages/cli/src/commands/backlog/.gitkeep +0 -0
- package/packages/cli/src/commands/backlog/BacklogCommands.ts +0 -286
- package/packages/cli/src/commands/backlog/OrderTasksCommand.ts +0 -237
- package/packages/cli/src/commands/backlog/TaskShowCommands.ts +0 -289
- package/packages/cli/src/commands/docs/.gitkeep +0 -0
- package/packages/cli/src/commands/docs/DocsCommands.ts +0 -413
- package/packages/cli/src/commands/estimate/EstimateCommands.ts +0 -290
- package/packages/cli/src/commands/jobs/.gitkeep +0 -0
- package/packages/cli/src/commands/jobs/JobsCommands.ts +0 -595
- package/packages/cli/src/commands/openapi/OpenapiCommands.ts +0 -167
- package/packages/cli/src/commands/planning/.gitkeep +0 -0
- package/packages/cli/src/commands/planning/CreateTasksCommand.ts +0 -149
- package/packages/cli/src/commands/planning/MigrateTasksCommand.ts +0 -105
- package/packages/cli/src/commands/planning/PlanningCommands.ts +0 -1
- package/packages/cli/src/commands/planning/QaTasksCommand.ts +0 -320
- package/packages/cli/src/commands/planning/RefineTasksCommand.ts +0 -408
- package/packages/cli/src/commands/review/CodeReviewCommand.ts +0 -262
- package/packages/cli/src/commands/routing/.gitkeep +0 -0
- package/packages/cli/src/commands/routing/RoutingCommands.ts +0 -554
- package/packages/cli/src/commands/telemetry/.gitkeep +0 -0
- package/packages/cli/src/commands/telemetry/TelemetryCommands.ts +0 -348
- package/packages/cli/src/commands/update/.gitkeep +0 -0
- package/packages/cli/src/commands/update/UpdateCommands.ts +0 -301
- package/packages/cli/src/commands/work/WorkOnTasksCommand.ts +0 -264
- package/packages/cli/src/commands/workspace/SetWorkspaceCommand.ts +0 -132
- package/packages/cli/test/packaging_guardrails.test.js +0 -75
- package/packages/cli/tsconfig.json +0 -20
- package/packages/core/CHANGELOG.md +0 -7
- package/packages/core/LICENSE +0 -21
- package/packages/core/README.md +0 -9
- package/packages/core/package.json +0 -45
- package/packages/core/src/__tests__/SmokeClasses.test.ts +0 -32
- package/packages/core/src/api/AgentsApi.ts +0 -219
- package/packages/core/src/api/QaTasksApi.ts +0 -38
- package/packages/core/src/api/TasksApi.ts +0 -35
- package/packages/core/src/api/__tests__/AgentsApi.test.ts +0 -203
- package/packages/core/src/api/__tests__/QaTasksApi.test.ts +0 -51
- package/packages/core/src/api/__tests__/TasksApi.test.ts +0 -56
- package/packages/core/src/config/.gitkeep +0 -0
- package/packages/core/src/config/ConfigService.ts +0 -1
- package/packages/core/src/domain/dependencies/.gitkeep +0 -0
- package/packages/core/src/domain/dependencies/Dependency.ts +0 -1
- package/packages/core/src/domain/epics/.gitkeep +0 -0
- package/packages/core/src/domain/epics/Epic.ts +0 -1
- package/packages/core/src/domain/projects/.gitkeep +0 -0
- package/packages/core/src/domain/projects/Project.ts +0 -1
- package/packages/core/src/domain/tasks/.gitkeep +0 -0
- package/packages/core/src/domain/tasks/Task.ts +0 -1
- package/packages/core/src/domain/userStories/.gitkeep +0 -0
- package/packages/core/src/domain/userStories/UserStory.ts +0 -1
- package/packages/core/src/index.ts +0 -27
- package/packages/core/src/prompts/.gitkeep +0 -0
- package/packages/core/src/prompts/PdrPrompts.ts +0 -23
- package/packages/core/src/prompts/PromptLoader.ts +0 -1
- package/packages/core/src/prompts/SdsPrompts.ts +0 -47
- package/packages/core/src/services/agents/.gitkeep +0 -0
- package/packages/core/src/services/agents/AgentManagementService.ts +0 -1
- package/packages/core/src/services/agents/GatewayAgentService.ts +0 -956
- package/packages/core/src/services/agents/RoutingService.ts +0 -461
- package/packages/core/src/services/agents/__tests__/GatewayAgentService.test.ts +0 -72
- package/packages/core/src/services/agents/__tests__/RoutingService.test.ts +0 -267
- package/packages/core/src/services/agents/generated/RoutingApiClient.ts +0 -89
- package/packages/core/src/services/backlog/.gitkeep +0 -0
- package/packages/core/src/services/backlog/BacklogService.ts +0 -580
- package/packages/core/src/services/backlog/TaskOrderingService.ts +0 -868
- package/packages/core/src/services/backlog/__tests__/BacklogService.test.ts +0 -219
- package/packages/core/src/services/backlog/__tests__/TaskOrderingService.test.ts +0 -268
- package/packages/core/src/services/docs/.gitkeep +0 -0
- package/packages/core/src/services/docs/DocsService.ts +0 -1913
- package/packages/core/src/services/docs/__tests__/DocsService.test.ts +0 -350
- package/packages/core/src/services/estimate/EstimateService.ts +0 -111
- package/packages/core/src/services/estimate/VelocityService.ts +0 -272
- package/packages/core/src/services/estimate/__tests__/VelocityAndEstimate.test.ts +0 -209
- package/packages/core/src/services/estimate/types.ts +0 -41
- package/packages/core/src/services/execution/.gitkeep +0 -0
- package/packages/core/src/services/execution/ExecutionService.ts +0 -1
- package/packages/core/src/services/execution/QaFollowupService.ts +0 -289
- package/packages/core/src/services/execution/QaProfileService.ts +0 -160
- package/packages/core/src/services/execution/QaTasksService.ts +0 -1303
- package/packages/core/src/services/execution/TaskSelectionService.ts +0 -362
- package/packages/core/src/services/execution/TaskStateService.ts +0 -64
- package/packages/core/src/services/execution/WorkOnTasksService.ts +0 -2023
- package/packages/core/src/services/execution/__tests__/QaFollowupService.test.ts +0 -58
- package/packages/core/src/services/execution/__tests__/QaProfileService.test.ts +0 -49
- package/packages/core/src/services/execution/__tests__/QaTasksService.test.ts +0 -157
- package/packages/core/src/services/execution/__tests__/TaskSelectionService.test.ts +0 -179
- package/packages/core/src/services/execution/__tests__/TaskStateService.test.ts +0 -51
- package/packages/core/src/services/execution/__tests__/WorkOnTasksService.test.ts +0 -285
- package/packages/core/src/services/jobs/.gitkeep +0 -0
- package/packages/core/src/services/jobs/JobInsightsService.ts +0 -355
- package/packages/core/src/services/jobs/JobResumeService.ts +0 -119
- package/packages/core/src/services/jobs/JobService.ts +0 -648
- package/packages/core/src/services/jobs/JobsApiClient.ts +0 -113
- package/packages/core/src/services/jobs/__tests__/JobInsightsService.test.ts +0 -17
- package/packages/core/src/services/jobs/__tests__/JobResumeService.test.ts +0 -45
- package/packages/core/src/services/jobs/__tests__/JobService.test.ts +0 -44
- package/packages/core/src/services/openapi/OpenApiService.ts +0 -558
- package/packages/core/src/services/openapi/__tests__/OpenApiService.test.ts +0 -57
- package/packages/core/src/services/planning/.gitkeep +0 -0
- package/packages/core/src/services/planning/CreateTasksService.ts +0 -1280
- package/packages/core/src/services/planning/KeyHelpers.ts +0 -80
- package/packages/core/src/services/planning/PlanningService.ts +0 -1
- package/packages/core/src/services/planning/RefineTasksService.ts +0 -1552
- package/packages/core/src/services/planning/__tests__/CreateTasksService.test.ts +0 -288
- package/packages/core/src/services/planning/__tests__/KeyHelpers.test.ts +0 -16
- package/packages/core/src/services/planning/__tests__/RefineTasksService.test.ts +0 -172
- package/packages/core/src/services/review/CodeReviewService.ts +0 -1386
- package/packages/core/src/services/review/__tests__/CodeReviewService.test.ts +0 -89
- package/packages/core/src/services/system/SystemUpdateService.ts +0 -177
- package/packages/core/src/services/system/__tests__/SystemUpdateService.test.ts +0 -40
- package/packages/core/src/services/tasks/TaskApiResolver.ts +0 -37
- package/packages/core/src/services/tasks/TaskDetailService.ts +0 -494
- package/packages/core/src/services/tasks/__tests__/TaskApiResolver.test.ts +0 -41
- package/packages/core/src/services/tasks/__tests__/TaskDetailService.test.ts +0 -178
- package/packages/core/src/services/telemetry/.gitkeep +0 -0
- package/packages/core/src/services/telemetry/TelemetryService.ts +0 -515
- package/packages/core/src/services/telemetry/__tests__/TelemetryService.test.ts +0 -160
- package/packages/core/src/workspace/.gitkeep +0 -0
- package/packages/core/src/workspace/WorkspaceManager.ts +0 -234
- package/packages/core/tsconfig.json +0 -20
- package/packages/db/CHANGELOG.md +0 -7
- package/packages/db/LICENSE +0 -21
- package/packages/db/README.md +0 -9
- package/packages/db/package.json +0 -42
- package/packages/db/src/__tests__/GlobalRepository.test.ts +0 -109
- package/packages/db/src/__tests__/SchemaAlignment.test.ts +0 -80
- package/packages/db/src/__tests__/WorkspaceRepository.test.ts +0 -19
- package/packages/db/src/index.d.ts +0 -6
- package/packages/db/src/index.d.ts.map +0 -1
- package/packages/db/src/index.js +0 -5
- package/packages/db/src/index.ts +0 -6
- package/packages/db/src/migrations/global/.gitkeep +0 -0
- package/packages/db/src/migrations/global/GlobalMigrations.d.ts +0 -9
- package/packages/db/src/migrations/global/GlobalMigrations.d.ts.map +0 -1
- package/packages/db/src/migrations/global/GlobalMigrations.js +0 -68
- package/packages/db/src/migrations/global/GlobalMigrations.ts +0 -336
- package/packages/db/src/migrations/workspace/.gitkeep +0 -0
- package/packages/db/src/migrations/workspace/WorkspaceMigrations.d.ts +0 -9
- package/packages/db/src/migrations/workspace/WorkspaceMigrations.d.ts.map +0 -1
- package/packages/db/src/migrations/workspace/WorkspaceMigrations.js +0 -251
- package/packages/db/src/migrations/workspace/WorkspaceMigrations.ts +0 -248
- package/packages/db/src/repositories/global/.gitkeep +0 -0
- package/packages/db/src/repositories/global/GlobalRepository.d.ts +0 -30
- package/packages/db/src/repositories/global/GlobalRepository.d.ts.map +0 -1
- package/packages/db/src/repositories/global/GlobalRepository.js +0 -209
- package/packages/db/src/repositories/global/GlobalRepository.ts +0 -492
- package/packages/db/src/repositories/workspace/.gitkeep +0 -0
- package/packages/db/src/repositories/workspace/WorkspaceRepository.d.ts +0 -282
- package/packages/db/src/repositories/workspace/WorkspaceRepository.d.ts.map +0 -1
- package/packages/db/src/repositories/workspace/WorkspaceRepository.js +0 -773
- package/packages/db/src/repositories/workspace/WorkspaceRepository.ts +0 -1511
- package/packages/db/src/sqlite/connection.d.ts +0 -11
- package/packages/db/src/sqlite/connection.d.ts.map +0 -1
- package/packages/db/src/sqlite/connection.js +0 -31
- package/packages/db/src/sqlite/connection.ts +0 -35
- package/packages/db/src/sqlite/pragmas.d.ts +0 -5
- package/packages/db/src/sqlite/pragmas.d.ts.map +0 -1
- package/packages/db/src/sqlite/pragmas.js +0 -6
- package/packages/db/src/sqlite/pragmas.ts +0 -10
- package/packages/db/tsconfig.json +0 -13
- package/packages/generators/package.json +0 -21
- package/packages/generators/src/__tests__/Generators.test.ts +0 -19
- package/packages/generators/src/index.ts +0 -1
- package/packages/generators/src/openapi/generateTypes.ts +0 -1
- package/packages/generators/src/openapi/validateSchema.ts +0 -1
- package/packages/generators/src/scaffolding/docs/.gitkeep +0 -0
- package/packages/generators/src/scaffolding/docs/DocsScaffolder.ts +0 -1
- package/packages/generators/src/scaffolding/global/.gitkeep +0 -0
- package/packages/generators/src/scaffolding/global/GlobalScaffolder.ts +0 -1
- package/packages/generators/src/scaffolding/workspace/.gitkeep +0 -0
- package/packages/generators/src/scaffolding/workspace/WorkspaceScaffolder.ts +0 -1
- package/packages/generators/tsconfig.json +0 -10
- package/packages/integrations/CHANGELOG.md +0 -7
- package/packages/integrations/LICENSE +0 -21
- package/packages/integrations/README.md +0 -9
- package/packages/integrations/package.json +0 -47
- package/packages/integrations/src/docdex/.gitkeep +0 -0
- package/packages/integrations/src/docdex/DocdexClient.d.ts +0 -50
- package/packages/integrations/src/docdex/DocdexClient.d.ts.map +0 -1
- package/packages/integrations/src/docdex/DocdexClient.js +0 -216
- package/packages/integrations/src/docdex/DocdexClient.ts +0 -261
- package/packages/integrations/src/docdex/__tests__/DocdexClient.test.ts +0 -29
- package/packages/integrations/src/index.d.ts +0 -2
- package/packages/integrations/src/index.d.ts.map +0 -1
- package/packages/integrations/src/index.js +0 -4
- package/packages/integrations/src/index.ts +0 -5
- package/packages/integrations/src/issues/.gitkeep +0 -0
- package/packages/integrations/src/issues/IssuesClient.ts +0 -1
- package/packages/integrations/src/issues/__tests__/IssuesClient.test.ts +0 -10
- package/packages/integrations/src/qa/.gitkeep +0 -0
- package/packages/integrations/src/qa/ChromiumQaAdapter.ts +0 -89
- package/packages/integrations/src/qa/CliQaAdapter.ts +0 -95
- package/packages/integrations/src/qa/MaestroQaAdapter.ts +0 -91
- package/packages/integrations/src/qa/QaAdapter.ts +0 -7
- package/packages/integrations/src/qa/QaClient.ts +0 -1
- package/packages/integrations/src/qa/QaTypes.ts +0 -26
- package/packages/integrations/src/qa/__tests__/ChromiumQaAdapter.test.ts +0 -30
- package/packages/integrations/src/qa/__tests__/CliQaAdapter.test.ts +0 -33
- package/packages/integrations/src/qa/__tests__/MaestroQaAdapter.test.ts +0 -30
- package/packages/integrations/src/qa/index.ts +0 -5
- package/packages/integrations/src/system/SystemClient.ts +0 -50
- package/packages/integrations/src/system/__tests__/SystemClient.test.ts +0 -40
- package/packages/integrations/src/telemetry/TelemetryClient.ts +0 -139
- package/packages/integrations/src/telemetry/__tests__/TelemetryClient.test.ts +0 -41
- package/packages/integrations/src/vcs/.gitkeep +0 -0
- package/packages/integrations/src/vcs/VcsClient.ts +0 -211
- package/packages/integrations/src/vcs/__tests__/VcsClient.test.ts +0 -26
- package/packages/integrations/tsconfig.json +0 -14
- package/packages/shared/CHANGELOG.md +0 -7
- package/packages/shared/LICENSE +0 -21
- package/packages/shared/README.md +0 -9
- package/packages/shared/package.json +0 -40
- package/packages/shared/src/__tests__/CommandMetadata.test.ts +0 -15
- package/packages/shared/src/__tests__/ServiceShells.test.ts +0 -16
- package/packages/shared/src/crypto/.gitkeep +0 -0
- package/packages/shared/src/crypto/CryptoHelper.d.ts +0 -15
- package/packages/shared/src/crypto/CryptoHelper.d.ts.map +0 -1
- package/packages/shared/src/crypto/CryptoHelper.js +0 -54
- package/packages/shared/src/crypto/CryptoHelper.ts +0 -57
- package/packages/shared/src/errors/.gitkeep +0 -0
- package/packages/shared/src/errors/ErrorFactory.ts +0 -1
- package/packages/shared/src/index.d.ts +0 -6
- package/packages/shared/src/index.d.ts.map +0 -1
- package/packages/shared/src/index.js +0 -4
- package/packages/shared/src/index.ts +0 -35
- package/packages/shared/src/logging/.gitkeep +0 -0
- package/packages/shared/src/logging/Logger.ts +0 -1
- package/packages/shared/src/metadata/CommandMetadata.ts +0 -165
- package/packages/shared/src/openapi/.gitkeep +0 -0
- package/packages/shared/src/openapi/OpenApiTypes.d.ts +0 -216
- package/packages/shared/src/openapi/OpenApiTypes.d.ts.map +0 -1
- package/packages/shared/src/openapi/OpenApiTypes.js +0 -1
- package/packages/shared/src/openapi/OpenApiTypes.ts +0 -312
- package/packages/shared/src/paths/.gitkeep +0 -0
- package/packages/shared/src/paths/PathHelper.d.ts +0 -12
- package/packages/shared/src/paths/PathHelper.d.ts.map +0 -1
- package/packages/shared/src/paths/PathHelper.js +0 -24
- package/packages/shared/src/paths/PathHelper.ts +0 -29
- package/packages/shared/src/qa/QaProfile.ts +0 -14
- package/packages/shared/src/utils/.gitkeep +0 -0
- package/packages/shared/src/utils/UtilityService.ts +0 -1
- package/packages/shared/tsconfig.json +0 -10
- package/packages/testing/package.json +0 -26
- package/packages/testing/src/__tests__/TestingFakes.test.ts +0 -15
- package/packages/testing/src/cli/e2e/.gitkeep +0 -0
- package/packages/testing/src/cli/e2e/E2eSuite.ts +0 -1
- package/packages/testing/src/fakes/agents/.gitkeep +0 -0
- package/packages/testing/src/fakes/agents/FakeAgents.ts +0 -1
- package/packages/testing/src/fakes/docdex/.gitkeep +0 -0
- package/packages/testing/src/fakes/docdex/FakeDocdexClient.ts +0 -1
- package/packages/testing/src/fakes/qa/.gitkeep +0 -0
- package/packages/testing/src/fakes/qa/FakeQaClient.ts +0 -1
- package/packages/testing/src/fakes/vcs/.gitkeep +0 -0
- package/packages/testing/src/fakes/vcs/FakeVcsClient.ts +0 -1
- package/packages/testing/src/fixtures/db/.gitkeep +0 -0
- package/packages/testing/src/fixtures/db/DbFixtures.ts +0 -1
- package/packages/testing/src/fixtures/workspaces/.gitkeep +0 -0
- package/packages/testing/src/fixtures/workspaces/WorkspaceFixtures.ts +0 -1
- package/packages/testing/src/index.ts +0 -1
- package/packages/testing/tsconfig.json +0 -10
- package/pnpm-workspace.yaml +0 -2
- package/prompts/README.md +0 -5
- package/prompts/code-reviewer.md +0 -23
- package/prompts/code-writer.md +0 -35
- package/prompts/gateway-agent.md +0 -27
- package/prompts/qa-agent.md +0 -21
- package/release-please-config.json +0 -39
- package/scripts/build-all.ts +0 -1
- package/scripts/dev.ts +0 -1
- package/scripts/install-local-cli.sh +0 -28
- package/scripts/pack-npm-tarballs.js +0 -63
- package/scripts/release.ts +0 -1
- package/scripts/run-node-tests.js +0 -37
- package/tests/all.js +0 -127
- package/tests/api/openapi_spec.test.js +0 -21
- package/tests/artifacts.md +0 -31
- package/tests/component/cli_version.test.js +0 -38
- package/tests/integration/workspace_resolver.test.js +0 -44
- package/tests/unit/crypto_helper.test.js +0 -36
- package/tests/unit/path_helper.test.js +0 -20
- package/tsconfig.base.json +0 -32
- /package/{packages/cli/src/index.ts → dist/index.js} +0 -0
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { promises as fs } from "node:fs";
|
|
3
|
-
import { randomUUID } from "node:crypto";
|
|
4
|
-
import { PathHelper } from "@mcoda/shared";
|
|
5
|
-
|
|
6
|
-
export interface WorkspaceResolution {
|
|
7
|
-
workspaceRoot: string;
|
|
8
|
-
workspaceId: string;
|
|
9
|
-
id: string;
|
|
10
|
-
legacyWorkspaceIds: string[];
|
|
11
|
-
mcodaDir: string;
|
|
12
|
-
workspaceDbPath: string;
|
|
13
|
-
globalDbPath: string;
|
|
14
|
-
config?: WorkspaceConfig;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface TelemetryPreferences {
|
|
18
|
-
optOut?: boolean;
|
|
19
|
-
strict?: boolean;
|
|
20
|
-
endpoint?: string;
|
|
21
|
-
authToken?: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface WorkspaceConfig {
|
|
25
|
-
mirrorDocs?: boolean;
|
|
26
|
-
branch?: string;
|
|
27
|
-
docdexUrl?: string;
|
|
28
|
-
velocity?: {
|
|
29
|
-
implementationSpPerHour?: number;
|
|
30
|
-
reviewSpPerHour?: number;
|
|
31
|
-
qaSpPerHour?: number;
|
|
32
|
-
alpha?: number;
|
|
33
|
-
};
|
|
34
|
-
telemetry?: TelemetryPreferences;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const fileExists = async (candidate: string): Promise<boolean> => {
|
|
38
|
-
try {
|
|
39
|
-
await fs.access(candidate);
|
|
40
|
-
return true;
|
|
41
|
-
} catch {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const findGitRoot = async (start: string): Promise<string | undefined> => {
|
|
47
|
-
// Only consider the provided directory; do not walk upward.
|
|
48
|
-
const current = path.resolve(start);
|
|
49
|
-
const gitPath = path.join(current, ".git");
|
|
50
|
-
if (await fileExists(gitPath)) return current;
|
|
51
|
-
return undefined;
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const findWorkspaceMarker = async (start: string): Promise<string | undefined> => {
|
|
55
|
-
// Only consider the provided directory; do not walk upward.
|
|
56
|
-
const current = path.resolve(start);
|
|
57
|
-
const marker = path.join(current, ".mcoda", "workspace.json");
|
|
58
|
-
const mcoda = path.join(current, ".mcoda");
|
|
59
|
-
if (await fileExists(marker)) return current;
|
|
60
|
-
if (await fileExists(mcoda)) return current;
|
|
61
|
-
return undefined;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const ensureGitignore = async (workspaceRoot: string): Promise<void> => {
|
|
65
|
-
const gitignorePath = path.join(workspaceRoot, ".gitignore");
|
|
66
|
-
const entry = ".mcoda/\n";
|
|
67
|
-
try {
|
|
68
|
-
const content = await fs.readFile(gitignorePath, "utf8");
|
|
69
|
-
if (content.includes(".mcoda/")) return;
|
|
70
|
-
await fs.writeFile(gitignorePath, `${content.trimEnd()}\n${entry}`, "utf8");
|
|
71
|
-
} catch {
|
|
72
|
-
await fs.writeFile(gitignorePath, entry, "utf8");
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const readWorkspaceConfig = async (mcodaDir: string): Promise<WorkspaceConfig | undefined> => {
|
|
77
|
-
const configPath = path.join(mcodaDir, "config.json");
|
|
78
|
-
try {
|
|
79
|
-
const raw = await fs.readFile(configPath, "utf8");
|
|
80
|
-
return JSON.parse(raw) as WorkspaceConfig;
|
|
81
|
-
} catch {
|
|
82
|
-
return undefined;
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
type WorkspaceIdentity = { id: string; name?: string; createdAt?: string; legacyIds?: string[] };
|
|
87
|
-
|
|
88
|
-
const readWorkspaceIdentity = async (mcodaDir: string): Promise<WorkspaceIdentity | undefined> => {
|
|
89
|
-
const workspacePath = path.join(mcodaDir, "workspace.json");
|
|
90
|
-
try {
|
|
91
|
-
const raw = await fs.readFile(workspacePath, "utf8");
|
|
92
|
-
const parsed = JSON.parse(raw) as WorkspaceIdentity;
|
|
93
|
-
if (parsed?.id) return parsed;
|
|
94
|
-
return undefined;
|
|
95
|
-
} catch {
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
const writeWorkspaceIdentity = async (
|
|
101
|
-
mcodaDir: string,
|
|
102
|
-
identity: WorkspaceIdentity,
|
|
103
|
-
): Promise<void> => {
|
|
104
|
-
const workspacePath = path.join(mcodaDir, "workspace.json");
|
|
105
|
-
await fs.writeFile(workspacePath, JSON.stringify(identity, null, 2), "utf8");
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
const looksLikeWorkspaceId = (value: string): boolean =>
|
|
109
|
-
/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(value.trim());
|
|
110
|
-
|
|
111
|
-
const migrateWorkspaceDbIds = async (workspace: WorkspaceResolution, legacyIds: string[]): Promise<void> => {
|
|
112
|
-
if (!legacyIds.length) return;
|
|
113
|
-
try {
|
|
114
|
-
const { Connection } = await import("@mcoda/db");
|
|
115
|
-
const conn = await Connection.open(workspace.workspaceDbPath);
|
|
116
|
-
const db = conn.db;
|
|
117
|
-
const placeholders = legacyIds.map(() => "?").join(",");
|
|
118
|
-
const params = [workspace.workspaceId, ...legacyIds];
|
|
119
|
-
const tables = ["jobs", "command_runs", "token_usage"];
|
|
120
|
-
for (const table of tables) {
|
|
121
|
-
await db.run(`UPDATE ${table} SET workspace_id = ? WHERE workspace_id IN (${placeholders})`, params);
|
|
122
|
-
}
|
|
123
|
-
await conn.close();
|
|
124
|
-
} catch {
|
|
125
|
-
/* best effort */
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const updateJsonArray = async (filePath: string) => {
|
|
129
|
-
try {
|
|
130
|
-
const raw = await fs.readFile(filePath, "utf8");
|
|
131
|
-
const parsed = JSON.parse(raw) as any[];
|
|
132
|
-
if (!Array.isArray(parsed) || !parsed.length) return;
|
|
133
|
-
let changed = false;
|
|
134
|
-
const updated = parsed.map((row) => {
|
|
135
|
-
if (row?.workspaceId && legacyIds.includes(row.workspaceId)) {
|
|
136
|
-
changed = true;
|
|
137
|
-
return { ...row, workspaceId: workspace.workspaceId };
|
|
138
|
-
}
|
|
139
|
-
return row;
|
|
140
|
-
});
|
|
141
|
-
if (changed) {
|
|
142
|
-
await fs.writeFile(filePath, JSON.stringify(updated, null, 2), "utf8");
|
|
143
|
-
}
|
|
144
|
-
} catch {
|
|
145
|
-
/* ignore */
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
await updateJsonArray(path.join(workspace.workspaceRoot, ".mcoda", "command_runs.json"));
|
|
149
|
-
await updateJsonArray(path.join(workspace.workspaceRoot, ".mcoda", "token_usage.json"));
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
export class WorkspaceResolver {
|
|
153
|
-
static async resolveWorkspace(input: { cwd?: string; explicitWorkspace?: string }): Promise<WorkspaceResolution> {
|
|
154
|
-
const cwd = path.resolve(input.cwd ?? process.cwd());
|
|
155
|
-
let explicit = input.explicitWorkspace;
|
|
156
|
-
let explicitPath: string | undefined;
|
|
157
|
-
if (explicit) {
|
|
158
|
-
const candidatePath = path.resolve(explicit);
|
|
159
|
-
if (await fileExists(candidatePath)) {
|
|
160
|
-
explicitPath = candidatePath;
|
|
161
|
-
} else if (await fileExists(path.join(candidatePath, ".mcoda"))) {
|
|
162
|
-
explicitPath = candidatePath;
|
|
163
|
-
} else if (looksLikeWorkspaceId(explicit)) {
|
|
164
|
-
throw new Error(
|
|
165
|
-
`Workspace id ${explicit} not recognized. Workspace registry lookups are not yet supported; pass a workspace path instead.`,
|
|
166
|
-
);
|
|
167
|
-
} else {
|
|
168
|
-
throw new Error(`Workspace path ${explicit} not found`);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const fromMarker = await findWorkspaceMarker(explicitPath ?? cwd);
|
|
173
|
-
const gitRoot = await findGitRoot(explicitPath ?? cwd);
|
|
174
|
-
const workspaceRoot = explicitPath ?? fromMarker ?? gitRoot ?? cwd;
|
|
175
|
-
const mcodaDir = path.join(workspaceRoot, ".mcoda");
|
|
176
|
-
await PathHelper.ensureDir(mcodaDir);
|
|
177
|
-
await ensureGitignore(workspaceRoot);
|
|
178
|
-
const existingIdentity = await readWorkspaceIdentity(mcodaDir);
|
|
179
|
-
let identity: WorkspaceIdentity;
|
|
180
|
-
let legacyIds: string[] = [];
|
|
181
|
-
if (existingIdentity) {
|
|
182
|
-
const existingLegacy = new Set<string>(existingIdentity.legacyIds ?? []);
|
|
183
|
-
let updatedIdentity = false;
|
|
184
|
-
legacyIds = [...(existingIdentity.legacyIds ?? [])];
|
|
185
|
-
if (existingIdentity.id && existingIdentity.id !== workspaceRoot) {
|
|
186
|
-
legacyIds.push(workspaceRoot);
|
|
187
|
-
updatedIdentity = true;
|
|
188
|
-
}
|
|
189
|
-
if (!looksLikeWorkspaceId(existingIdentity.id)) {
|
|
190
|
-
legacyIds.push(existingIdentity.id);
|
|
191
|
-
identity = {
|
|
192
|
-
...existingIdentity,
|
|
193
|
-
id: randomUUID(),
|
|
194
|
-
legacyIds: Array.from(new Set(legacyIds)),
|
|
195
|
-
};
|
|
196
|
-
await writeWorkspaceIdentity(mcodaDir, identity);
|
|
197
|
-
} else {
|
|
198
|
-
identity = {
|
|
199
|
-
...existingIdentity,
|
|
200
|
-
legacyIds: Array.from(new Set(legacyIds)),
|
|
201
|
-
};
|
|
202
|
-
if ((identity.legacyIds?.length ?? 0) !== existingLegacy.size) {
|
|
203
|
-
updatedIdentity = true;
|
|
204
|
-
}
|
|
205
|
-
if (updatedIdentity) {
|
|
206
|
-
await writeWorkspaceIdentity(mcodaDir, identity);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
} else {
|
|
210
|
-
identity = {
|
|
211
|
-
id: randomUUID(),
|
|
212
|
-
name: path.basename(workspaceRoot),
|
|
213
|
-
createdAt: new Date().toISOString(),
|
|
214
|
-
legacyIds: [workspaceRoot],
|
|
215
|
-
};
|
|
216
|
-
await writeWorkspaceIdentity(mcodaDir, identity);
|
|
217
|
-
}
|
|
218
|
-
const legacyWorkspaceIds = Array.from(new Set([...(identity.legacyIds ?? []), workspaceRoot].filter(Boolean)));
|
|
219
|
-
const config = await readWorkspaceConfig(mcodaDir);
|
|
220
|
-
const resolution: WorkspaceResolution = {
|
|
221
|
-
workspaceRoot,
|
|
222
|
-
workspaceId: identity.id,
|
|
223
|
-
id: identity.id,
|
|
224
|
-
legacyWorkspaceIds,
|
|
225
|
-
mcodaDir,
|
|
226
|
-
workspaceDbPath: PathHelper.getWorkspaceDbPath(workspaceRoot),
|
|
227
|
-
globalDbPath: PathHelper.getGlobalDbPath(),
|
|
228
|
-
config,
|
|
229
|
-
};
|
|
230
|
-
// Best-effort migration of workspace_id columns and JSON logs from legacy IDs.
|
|
231
|
-
await migrateWorkspaceDbIds(resolution, legacyWorkspaceIds.filter((id) => id !== identity.id));
|
|
232
|
-
return resolution;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"rootDir": "src",
|
|
5
|
-
"outDir": "dist",
|
|
6
|
-
"declaration": true,
|
|
7
|
-
"declarationMap": true,
|
|
8
|
-
"paths": {
|
|
9
|
-
"@mcoda/shared": ["packages/shared/dist/index.d.ts"],
|
|
10
|
-
"@mcoda/shared/*": ["packages/shared/dist/*"],
|
|
11
|
-
"@mcoda/db": ["packages/db/dist/index.d.ts"],
|
|
12
|
-
"@mcoda/db/*": ["packages/db/dist/*"],
|
|
13
|
-
"@mcoda/agents": ["packages/agents/dist/index.d.ts"],
|
|
14
|
-
"@mcoda/agents/*": ["packages/agents/dist/*"],
|
|
15
|
-
"@mcoda/integrations": ["packages/integrations/dist/index.d.ts"],
|
|
16
|
-
"@mcoda/integrations/*": ["packages/integrations/dist/*"]
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
"include": ["src"]
|
|
20
|
-
}
|
package/packages/db/CHANGELOG.md
DELETED
package/packages/db/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 bekir dag
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
package/packages/db/README.md
DELETED
package/packages/db/package.json
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@mcoda/db",
|
|
3
|
-
"version": "0.1.2",
|
|
4
|
-
"description": "SQLite-backed storage layer for mcoda.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"files": [
|
|
9
|
-
"dist",
|
|
10
|
-
"!dist/**/__tests__/**",
|
|
11
|
-
"!dist/**/*.test.*",
|
|
12
|
-
"README.md",
|
|
13
|
-
"CHANGELOG.md",
|
|
14
|
-
"LICENSE"
|
|
15
|
-
],
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "tsc -p tsconfig.json",
|
|
18
|
-
"lint": "echo \"lint not configured\"",
|
|
19
|
-
"test": "pnpm run build && node ../../scripts/run-node-tests.js dist"
|
|
20
|
-
},
|
|
21
|
-
"engines": {
|
|
22
|
-
"node": ">=20"
|
|
23
|
-
},
|
|
24
|
-
"repository": {
|
|
25
|
-
"type": "git",
|
|
26
|
-
"url": "git+https://github.com/bekirdag/mcoda.git"
|
|
27
|
-
},
|
|
28
|
-
"bugs": {
|
|
29
|
-
"url": "https://github.com/bekirdag/mcoda/issues"
|
|
30
|
-
},
|
|
31
|
-
"homepage": "https://github.com/bekirdag/mcoda#readme",
|
|
32
|
-
"license": "MIT",
|
|
33
|
-
"author": "bekir dag",
|
|
34
|
-
"publishConfig": {
|
|
35
|
-
"access": "public"
|
|
36
|
-
},
|
|
37
|
-
"dependencies": {
|
|
38
|
-
"@mcoda/shared": "workspace:*",
|
|
39
|
-
"sqlite": "^5.1.1",
|
|
40
|
-
"sqlite3": "^5.1.7"
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { strict as assert } from "node:assert";
|
|
2
|
-
import { test, beforeEach, afterEach } from "node:test";
|
|
3
|
-
import os from "node:os";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import fs from "node:fs";
|
|
6
|
-
import { Connection } from "../sqlite/connection.js";
|
|
7
|
-
import { GlobalMigrations } from "../migrations/global/GlobalMigrations.js";
|
|
8
|
-
import { GlobalRepository } from "../repositories/global/GlobalRepository.js";
|
|
9
|
-
|
|
10
|
-
let repo: GlobalRepository;
|
|
11
|
-
let dbPath: string;
|
|
12
|
-
|
|
13
|
-
beforeEach(async () => {
|
|
14
|
-
dbPath = path.join(os.tmpdir(), `mcoda-agent-${Date.now()}-${Math.random()}.db`);
|
|
15
|
-
const conn = await Connection.open(dbPath);
|
|
16
|
-
await GlobalMigrations.run(conn.db);
|
|
17
|
-
repo = new GlobalRepository(conn.db, conn);
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
afterEach(async () => {
|
|
21
|
-
await repo.close();
|
|
22
|
-
await fs.promises.unlink(dbPath).catch(() => {});
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
test("creates, updates, and deletes an agent with capabilities and prompts", async () => {
|
|
26
|
-
const created = await repo.createAgent({
|
|
27
|
-
slug: "test-agent",
|
|
28
|
-
adapter: "openai-api",
|
|
29
|
-
defaultModel: "gpt-4o",
|
|
30
|
-
capabilities: ["plan", "code_write"],
|
|
31
|
-
models: [
|
|
32
|
-
{ agentId: "ignored", modelName: "gpt-4o", isDefault: true },
|
|
33
|
-
{ agentId: "ignored", modelName: "gpt-4.1-mini", isDefault: false },
|
|
34
|
-
],
|
|
35
|
-
prompts: { jobPrompt: "job", characterPrompt: "character" },
|
|
36
|
-
});
|
|
37
|
-
assert.equal(created.slug, "test-agent");
|
|
38
|
-
|
|
39
|
-
const fetched = await repo.getAgentBySlug("test-agent");
|
|
40
|
-
assert.ok(fetched);
|
|
41
|
-
assert.equal(fetched?.defaultModel, "gpt-4o");
|
|
42
|
-
|
|
43
|
-
const capabilities = await repo.getAgentCapabilities(created.id);
|
|
44
|
-
assert.deepEqual(capabilities.sort(), ["code_write", "plan"].sort());
|
|
45
|
-
|
|
46
|
-
const prompts = await repo.getAgentPrompts(created.id);
|
|
47
|
-
assert.equal(prompts?.jobPrompt, "job");
|
|
48
|
-
|
|
49
|
-
const models = await repo.getAgentModels(created.id);
|
|
50
|
-
assert.equal(models.length, 2);
|
|
51
|
-
assert.equal(models[0]?.agentId, created.id);
|
|
52
|
-
|
|
53
|
-
await repo.updateAgent(created.id, { defaultModel: "gpt-4.1-mini" });
|
|
54
|
-
const updated = await repo.getAgentById(created.id);
|
|
55
|
-
assert.equal(updated?.defaultModel, "gpt-4.1-mini");
|
|
56
|
-
|
|
57
|
-
await repo.deleteAgent(created.id);
|
|
58
|
-
const afterDelete = await repo.getAgentById(created.id);
|
|
59
|
-
assert.equal(afterDelete, undefined);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
test("stores auth metadata and health records", async () => {
|
|
63
|
-
const created = await repo.createAgent({
|
|
64
|
-
slug: "auth-agent",
|
|
65
|
-
adapter: "openai-api",
|
|
66
|
-
});
|
|
67
|
-
await repo.setAgentAuth(created.id, "encrypted-secret");
|
|
68
|
-
const auth = await repo.getAgentAuthMetadata(created.id);
|
|
69
|
-
assert.equal(auth.configured, true);
|
|
70
|
-
|
|
71
|
-
const health = {
|
|
72
|
-
agentId: created.id,
|
|
73
|
-
status: "healthy" as const,
|
|
74
|
-
lastCheckedAt: new Date().toISOString(),
|
|
75
|
-
latencyMs: 5,
|
|
76
|
-
};
|
|
77
|
-
await repo.setAgentHealth(health);
|
|
78
|
-
const storedHealth = await repo.getAgentHealth(created.id);
|
|
79
|
-
assert.equal(storedHealth?.status, "healthy");
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
test("records command runs and token usage", async () => {
|
|
83
|
-
const created = await repo.createAgent({ slug: "telemetry-agent", adapter: "codex-cli" });
|
|
84
|
-
const run = await repo.createCommandRun({
|
|
85
|
-
commandName: "agent.test",
|
|
86
|
-
startedAt: new Date().toISOString(),
|
|
87
|
-
status: "running",
|
|
88
|
-
payload: { agentId: created.id },
|
|
89
|
-
});
|
|
90
|
-
await repo.recordTokenUsage({
|
|
91
|
-
agentId: created.id,
|
|
92
|
-
commandRunId: run.id,
|
|
93
|
-
modelName: "test-model",
|
|
94
|
-
tokensPrompt: 0,
|
|
95
|
-
tokensCompletion: 0,
|
|
96
|
-
tokensTotal: 0,
|
|
97
|
-
timestamp: new Date().toISOString(),
|
|
98
|
-
metadata: { reason: "test" },
|
|
99
|
-
});
|
|
100
|
-
await repo.completeCommandRun(run.id, {
|
|
101
|
-
status: "succeeded",
|
|
102
|
-
completedAt: new Date().toISOString(),
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
const runs = await (repo as any).db.all("SELECT command_name FROM command_runs WHERE id = ?", run.id);
|
|
106
|
-
assert.equal(runs.length, 1);
|
|
107
|
-
const usage = await (repo as any).db.all("SELECT agent_id FROM token_usage WHERE command_run_id = ?", run.id);
|
|
108
|
-
assert.equal(usage.length, 1);
|
|
109
|
-
});
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import fs from "node:fs/promises";
|
|
3
|
-
import os from "node:os";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { fileURLToPath } from "node:url";
|
|
6
|
-
import { test } from "node:test";
|
|
7
|
-
import { Connection } from "../sqlite/connection.js";
|
|
8
|
-
import { GlobalMigrations } from "../migrations/global/GlobalMigrations.js";
|
|
9
|
-
import { WorkspaceMigrations } from "../migrations/workspace/WorkspaceMigrations.js";
|
|
10
|
-
|
|
11
|
-
const AGENT_TABLES = [
|
|
12
|
-
"agents",
|
|
13
|
-
"agent_auth",
|
|
14
|
-
"agent_capabilities",
|
|
15
|
-
"agent_prompts",
|
|
16
|
-
"agent_health",
|
|
17
|
-
"agent_models",
|
|
18
|
-
"workspace_defaults",
|
|
19
|
-
];
|
|
20
|
-
|
|
21
|
-
const collectTables = async (db: any): Promise<Set<string>> => {
|
|
22
|
-
const rows = (await db.all("SELECT name FROM sqlite_master WHERE type = 'table'")) as Array<{
|
|
23
|
-
name?: string;
|
|
24
|
-
}>;
|
|
25
|
-
return new Set(rows.map((r) => (r.name ?? "").toString()));
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const readOpenapiTables = async (): Promise<Set<string>> => {
|
|
29
|
-
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
30
|
-
const openapiPath = path.resolve(here, "../../../../openapi/mcoda.yaml");
|
|
31
|
-
const content = await fs.readFile(openapiPath, "utf8");
|
|
32
|
-
const matches = [...content.matchAll(/x-mcoda-db-table:\s*([A-Za-z0-9_]+)/g)];
|
|
33
|
-
return new Set(matches.map((m) => m[1]));
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const withTempDb = async (fn: (dbPath: string) => Promise<void>): Promise<void> => {
|
|
37
|
-
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "mcoda-schema-"));
|
|
38
|
-
try {
|
|
39
|
-
const dbPath = path.join(dir, "mcoda.db");
|
|
40
|
-
await fn(dbPath);
|
|
41
|
-
} finally {
|
|
42
|
-
await fs.rm(dir, { recursive: true, force: true });
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
test("agent-related x-mcoda-db-table entries exist in global DB and not in workspace DB", async () => {
|
|
47
|
-
const tablesFromOpenapi = await readOpenapiTables();
|
|
48
|
-
for (const table of AGENT_TABLES) {
|
|
49
|
-
assert.ok(
|
|
50
|
-
tablesFromOpenapi.has(table),
|
|
51
|
-
`OpenAPI x-mcoda-db-table is missing expected table ${table}`,
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
await withTempDb(async (dbPath) => {
|
|
56
|
-
const globalConn = await Connection.open(dbPath);
|
|
57
|
-
await GlobalMigrations.run(globalConn.db);
|
|
58
|
-
const globalTables = await collectTables(globalConn.db);
|
|
59
|
-
await globalConn.close();
|
|
60
|
-
|
|
61
|
-
AGENT_TABLES.forEach((table) => {
|
|
62
|
-
assert.ok(globalTables.has(table), `Global DB missing table ${table}`);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
await withTempDb(async (dbPath) => {
|
|
67
|
-
const workspaceConn = await Connection.open(dbPath);
|
|
68
|
-
await WorkspaceMigrations.run(workspaceConn.db);
|
|
69
|
-
const workspaceTables = await collectTables(workspaceConn.db);
|
|
70
|
-
await workspaceConn.close();
|
|
71
|
-
|
|
72
|
-
AGENT_TABLES.forEach((table) => {
|
|
73
|
-
assert.equal(
|
|
74
|
-
workspaceTables.has(table),
|
|
75
|
-
false,
|
|
76
|
-
`Workspace DB should not contain agent table ${table}`,
|
|
77
|
-
);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import fs from "node:fs/promises";
|
|
4
|
-
import os from "node:os";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { WorkspaceRepository } from "../repositories/workspace/WorkspaceRepository.js";
|
|
7
|
-
|
|
8
|
-
test("WorkspaceRepository createProjectIfMissing is idempotent", async () => {
|
|
9
|
-
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "mcoda-db-"));
|
|
10
|
-
const repo = await WorkspaceRepository.create(dir);
|
|
11
|
-
try {
|
|
12
|
-
const first = await repo.createProjectIfMissing({ key: "proj", name: "Project" });
|
|
13
|
-
const second = await repo.createProjectIfMissing({ key: "proj", name: "Project" });
|
|
14
|
-
assert.equal(first.id, second.id);
|
|
15
|
-
} finally {
|
|
16
|
-
await repo.close();
|
|
17
|
-
await fs.rm(dir, { recursive: true, force: true });
|
|
18
|
-
}
|
|
19
|
-
});
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export * from "./sqlite/connection.js";
|
|
2
|
-
export * from "./migrations/global/GlobalMigrations.js";
|
|
3
|
-
export * from "./migrations/workspace/WorkspaceMigrations.js";
|
|
4
|
-
export * from "./repositories/global/GlobalRepository.js";
|
|
5
|
-
export * from "./repositories/workspace/WorkspaceRepository.js";
|
|
6
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,yCAAyC,CAAC;AACxD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iDAAiD,CAAC"}
|
package/packages/db/src/index.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from "./sqlite/connection.js";
|
|
2
|
-
export * from "./migrations/global/GlobalMigrations.js";
|
|
3
|
-
export * from "./migrations/workspace/WorkspaceMigrations.js";
|
|
4
|
-
export * from "./repositories/global/GlobalRepository.js";
|
|
5
|
-
export * from "./repositories/workspace/WorkspaceRepository.js";
|
package/packages/db/src/index.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export * from "./sqlite/connection.js";
|
|
2
|
-
export * from "./migrations/global/GlobalMigrations.js";
|
|
3
|
-
export * from "./migrations/workspace/WorkspaceMigrations.js";
|
|
4
|
-
export * from "./repositories/global/GlobalRepository.js";
|
|
5
|
-
export * from "./repositories/workspace/WorkspaceRepository.js";
|
|
6
|
-
export type { Database } from "sqlite";
|
|
File without changes
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Database } from "sqlite";
|
|
2
|
-
/**
|
|
3
|
-
* Global database migrations for ~/.mcoda/mcoda.db.
|
|
4
|
-
* Only includes tables required for the agent registry and routing defaults.
|
|
5
|
-
*/
|
|
6
|
-
export declare class GlobalMigrations {
|
|
7
|
-
static run(db: Database): Promise<void>;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=GlobalMigrations.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalMigrations.d.ts","sourceRoot":"","sources":["GlobalMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,qBAAa,gBAAgB;WACd,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CA8D9C"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Global database migrations for ~/.mcoda/mcoda.db.
|
|
3
|
-
* Only includes tables required for the agent registry and routing defaults.
|
|
4
|
-
*/
|
|
5
|
-
export class GlobalMigrations {
|
|
6
|
-
static async run(db) {
|
|
7
|
-
await db.exec(`
|
|
8
|
-
CREATE TABLE IF NOT EXISTS agents (
|
|
9
|
-
id TEXT PRIMARY KEY,
|
|
10
|
-
slug TEXT UNIQUE NOT NULL,
|
|
11
|
-
adapter TEXT NOT NULL,
|
|
12
|
-
default_model TEXT,
|
|
13
|
-
config_json TEXT,
|
|
14
|
-
created_at TEXT NOT NULL,
|
|
15
|
-
updated_at TEXT NOT NULL
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
CREATE TABLE IF NOT EXISTS agent_auth (
|
|
19
|
-
agent_id TEXT PRIMARY KEY REFERENCES agents(id) ON DELETE CASCADE,
|
|
20
|
-
encrypted_secret TEXT NOT NULL,
|
|
21
|
-
last_verified_at TEXT,
|
|
22
|
-
created_at TEXT NOT NULL,
|
|
23
|
-
updated_at TEXT NOT NULL
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
CREATE TABLE IF NOT EXISTS agent_capabilities (
|
|
27
|
-
agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
28
|
-
capability TEXT NOT NULL,
|
|
29
|
-
PRIMARY KEY (agent_id, capability)
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
CREATE TABLE IF NOT EXISTS agent_prompts (
|
|
33
|
-
agent_id TEXT PRIMARY KEY REFERENCES agents(id) ON DELETE CASCADE,
|
|
34
|
-
job_prompt TEXT,
|
|
35
|
-
character_prompt TEXT,
|
|
36
|
-
command_prompts_json TEXT,
|
|
37
|
-
job_path TEXT,
|
|
38
|
-
character_path TEXT,
|
|
39
|
-
created_at TEXT NOT NULL,
|
|
40
|
-
updated_at TEXT NOT NULL
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
CREATE TABLE IF NOT EXISTS agent_health (
|
|
44
|
-
agent_id TEXT PRIMARY KEY REFERENCES agents(id) ON DELETE CASCADE,
|
|
45
|
-
status TEXT NOT NULL,
|
|
46
|
-
last_checked_at TEXT NOT NULL,
|
|
47
|
-
latency_ms INTEGER,
|
|
48
|
-
details_json TEXT
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
CREATE TABLE IF NOT EXISTS agent_models (
|
|
52
|
-
agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
53
|
-
model_name TEXT NOT NULL,
|
|
54
|
-
is_default INTEGER DEFAULT 0,
|
|
55
|
-
config_json TEXT,
|
|
56
|
-
PRIMARY KEY (agent_id, model_name)
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
CREATE TABLE IF NOT EXISTS workspace_defaults (
|
|
60
|
-
workspace_id TEXT NOT NULL,
|
|
61
|
-
command_name TEXT NOT NULL,
|
|
62
|
-
agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
63
|
-
updated_at TEXT NOT NULL,
|
|
64
|
-
PRIMARY KEY (workspace_id, command_name)
|
|
65
|
-
);
|
|
66
|
-
`);
|
|
67
|
-
}
|
|
68
|
-
}
|