@amsterdamdatalabs/enact-factory 0.1.1
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/LICENSE +674 -0
- package/README.md +566 -0
- package/dist/adapters/agenticLoop.d.ts +90 -0
- package/dist/adapters/agenticLoop.d.ts.map +1 -0
- package/dist/adapters/agenticLoop.js +219 -0
- package/dist/adapters/agenticLoop.js.map +1 -0
- package/dist/adapters/base.d.ts +16 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +135 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude.d.ts +13 -0
- package/dist/adapters/claude.d.ts.map +1 -0
- package/dist/adapters/claude.js +318 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/codex.d.ts +14 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +366 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/cryptoQuantAdapter.d.ts +85 -0
- package/dist/adapters/cryptoQuantAdapter.d.ts.map +1 -0
- package/dist/adapters/cryptoQuantAdapter.js +238 -0
- package/dist/adapters/cryptoQuantAdapter.js.map +1 -0
- package/dist/adapters/cursor.d.ts +13 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +300 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/envPath.d.ts +20 -0
- package/dist/adapters/envPath.d.ts.map +1 -0
- package/dist/adapters/envPath.js +49 -0
- package/dist/adapters/envPath.js.map +1 -0
- package/dist/adapters/hermes.d.ts +13 -0
- package/dist/adapters/hermes.d.ts.map +1 -0
- package/dist/adapters/hermes.js +283 -0
- package/dist/adapters/hermes.js.map +1 -0
- package/dist/adapters/index.d.ts +18 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +56 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/opencode.d.ts +13 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +282 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/processRegistry.d.ts +38 -0
- package/dist/adapters/processRegistry.d.ts.map +1 -0
- package/dist/adapters/processRegistry.js +147 -0
- package/dist/adapters/processRegistry.js.map +1 -0
- package/dist/adapters/responses.d.ts +16 -0
- package/dist/adapters/responses.d.ts.map +1 -0
- package/dist/adapters/responses.js +244 -0
- package/dist/adapters/responses.js.map +1 -0
- package/dist/adapters/streamBuffer.d.ts +59 -0
- package/dist/adapters/streamBuffer.d.ts.map +1 -0
- package/dist/adapters/streamBuffer.js +123 -0
- package/dist/adapters/streamBuffer.js.map +1 -0
- package/dist/adapters/tools.d.ts +30 -0
- package/dist/adapters/tools.d.ts.map +1 -0
- package/dist/adapters/tools.js +219 -0
- package/dist/adapters/tools.js.map +1 -0
- package/dist/adapters/types.d.ts +82 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +6 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/agents/agentBus.d.ts +160 -0
- package/dist/agents/agentBus.d.ts.map +1 -0
- package/dist/agents/agentBus.js +350 -0
- package/dist/agents/agentBus.js.map +1 -0
- package/dist/agents/agentPair.d.ts +215 -0
- package/dist/agents/agentPair.d.ts.map +1 -0
- package/dist/agents/agentPair.js +456 -0
- package/dist/agents/agentPair.js.map +1 -0
- package/dist/agents/auditor.d.ts +27 -0
- package/dist/agents/auditor.d.ts.map +1 -0
- package/dist/agents/auditor.js +238 -0
- package/dist/agents/auditor.js.map +1 -0
- package/dist/agents/cliStreamParser.d.ts +18 -0
- package/dist/agents/cliStreamParser.d.ts.map +1 -0
- package/dist/agents/cliStreamParser.js +156 -0
- package/dist/agents/cliStreamParser.js.map +1 -0
- package/dist/agents/documenter.d.ts +31 -0
- package/dist/agents/documenter.d.ts.map +1 -0
- package/dist/agents/documenter.js +286 -0
- package/dist/agents/documenter.js.map +1 -0
- package/dist/agents/draftAnalyzer.d.ts +50 -0
- package/dist/agents/draftAnalyzer.d.ts.map +1 -0
- package/dist/agents/draftAnalyzer.js +289 -0
- package/dist/agents/draftAnalyzer.js.map +1 -0
- package/dist/agents/evaluator.d.ts +61 -0
- package/dist/agents/evaluator.d.ts.map +1 -0
- package/dist/agents/evaluator.js +338 -0
- package/dist/agents/evaluator.js.map +1 -0
- package/dist/agents/executor.d.ts +33 -0
- package/dist/agents/executor.d.ts.map +1 -0
- package/dist/agents/executor.js +130 -0
- package/dist/agents/executor.js.map +1 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +10 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/pairMetrics.d.ts +63 -0
- package/dist/agents/pairMetrics.d.ts.map +1 -0
- package/dist/agents/pairMetrics.js +232 -0
- package/dist/agents/pairMetrics.js.map +1 -0
- package/dist/agents/pairPipeline.d.ts +184 -0
- package/dist/agents/pairPipeline.d.ts.map +1 -0
- package/dist/agents/pairPipeline.js +934 -0
- package/dist/agents/pairPipeline.js.map +1 -0
- package/dist/agents/pairWebhook.d.ts +59 -0
- package/dist/agents/pairWebhook.d.ts.map +1 -0
- package/dist/agents/pairWebhook.js +242 -0
- package/dist/agents/pairWebhook.js.map +1 -0
- package/dist/agents/pipelineFormat.d.ts +8 -0
- package/dist/agents/pipelineFormat.d.ts.map +1 -0
- package/dist/agents/pipelineFormat.js +65 -0
- package/dist/agents/pipelineFormat.js.map +1 -0
- package/dist/agents/pipelineGuards.d.ts +23 -0
- package/dist/agents/pipelineGuards.d.ts.map +1 -0
- package/dist/agents/pipelineGuards.js +257 -0
- package/dist/agents/pipelineGuards.js.map +1 -0
- package/dist/agents/reviewer.d.ts +37 -0
- package/dist/agents/reviewer.d.ts.map +1 -0
- package/dist/agents/reviewer.js +214 -0
- package/dist/agents/reviewer.js.map +1 -0
- package/dist/agents/skillDocumenter.d.ts +23 -0
- package/dist/agents/skillDocumenter.d.ts.map +1 -0
- package/dist/agents/skillDocumenter.js +219 -0
- package/dist/agents/skillDocumenter.js.map +1 -0
- package/dist/agents/tester.d.ts +37 -0
- package/dist/agents/tester.d.ts.map +1 -0
- package/dist/agents/tester.js +309 -0
- package/dist/agents/tester.js.map +1 -0
- package/dist/automation/autonomousRunner.d.ts +145 -0
- package/dist/automation/autonomousRunner.d.ts.map +1 -0
- package/dist/automation/autonomousRunner.js +1272 -0
- package/dist/automation/autonomousRunner.js.map +1 -0
- package/dist/automation/dailyReporter.d.ts +26 -0
- package/dist/automation/dailyReporter.d.ts.map +1 -0
- package/dist/automation/dailyReporter.js +130 -0
- package/dist/automation/dailyReporter.js.map +1 -0
- package/dist/automation/index.d.ts +5 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +5 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/longRunningMonitor.d.ts +26 -0
- package/dist/automation/longRunningMonitor.d.ts.map +1 -0
- package/dist/automation/longRunningMonitor.js +356 -0
- package/dist/automation/longRunningMonitor.js.map +1 -0
- package/dist/automation/prOwnership.d.ts +18 -0
- package/dist/automation/prOwnership.d.ts.map +1 -0
- package/dist/automation/prOwnership.js +61 -0
- package/dist/automation/prOwnership.js.map +1 -0
- package/dist/automation/runnerExecution.d.ts +57 -0
- package/dist/automation/runnerExecution.d.ts.map +1 -0
- package/dist/automation/runnerExecution.js +701 -0
- package/dist/automation/runnerExecution.js.map +1 -0
- package/dist/automation/runnerState.d.ts +170 -0
- package/dist/automation/runnerState.d.ts.map +1 -0
- package/dist/automation/runnerState.js +496 -0
- package/dist/automation/runnerState.js.map +1 -0
- package/dist/automation/runnerTypes.d.ts +57 -0
- package/dist/automation/runnerTypes.d.ts.map +1 -0
- package/dist/automation/runnerTypes.js +5 -0
- package/dist/automation/runnerTypes.js.map +1 -0
- package/dist/automation/scheduler.d.ts +75 -0
- package/dist/automation/scheduler.d.ts.map +1 -0
- package/dist/automation/scheduler.js +402 -0
- package/dist/automation/scheduler.js.map +1 -0
- package/dist/azdo/azdo.d.ts +70 -0
- package/dist/azdo/azdo.d.ts.map +1 -0
- package/dist/azdo/azdo.js +328 -0
- package/dist/azdo/azdo.js.map +1 -0
- package/dist/azdo/index.d.ts +3 -0
- package/dist/azdo/index.d.ts.map +1 -0
- package/dist/azdo/index.js +3 -0
- package/dist/azdo/index.js.map +1 -0
- package/dist/azdo/projectUpdater.d.ts +13 -0
- package/dist/azdo/projectUpdater.d.ts.map +1 -0
- package/dist/azdo/projectUpdater.js +155 -0
- package/dist/azdo/projectUpdater.js.map +1 -0
- package/dist/azureDevOps/client.d.ts +75 -0
- package/dist/azureDevOps/client.d.ts.map +1 -0
- package/dist/azureDevOps/client.js +150 -0
- package/dist/azureDevOps/client.js.map +1 -0
- package/dist/azureDevOps/hierarchy.d.ts +119 -0
- package/dist/azureDevOps/hierarchy.d.ts.map +1 -0
- package/dist/azureDevOps/hierarchy.js +470 -0
- package/dist/azureDevOps/hierarchy.js.map +1 -0
- package/dist/azureDevOps/mapper.d.ts +101 -0
- package/dist/azureDevOps/mapper.d.ts.map +1 -0
- package/dist/azureDevOps/mapper.js +438 -0
- package/dist/azureDevOps/mapper.js.map +1 -0
- package/dist/azureDevOps/stateMapping.d.ts +15 -0
- package/dist/azureDevOps/stateMapping.d.ts.map +1 -0
- package/dist/azureDevOps/stateMapping.js +141 -0
- package/dist/azureDevOps/stateMapping.js.map +1 -0
- package/dist/cli/authHandler.d.ts +13 -0
- package/dist/cli/authHandler.d.ts.map +1 -0
- package/dist/cli/authHandler.js +70 -0
- package/dist/cli/authHandler.js.map +1 -0
- package/dist/cli/checkHandler.d.ts +27 -0
- package/dist/cli/checkHandler.d.ts.map +1 -0
- package/dist/cli/checkHandler.js +560 -0
- package/dist/cli/checkHandler.js.map +1 -0
- package/dist/cli/daemon.d.ts +30 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +141 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/factoryCommands.d.ts +3 -0
- package/dist/cli/factoryCommands.d.ts.map +1 -0
- package/dist/cli/factoryCommands.js +165 -0
- package/dist/cli/factoryCommands.js.map +1 -0
- package/dist/cli/promptHandler.d.ts +13 -0
- package/dist/cli/promptHandler.d.ts.map +1 -0
- package/dist/cli/promptHandler.js +193 -0
- package/dist/cli/promptHandler.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +320 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/agentLifecycle.d.ts +322 -0
- package/dist/core/agentLifecycle.d.ts.map +1 -0
- package/dist/core/agentLifecycle.js +230 -0
- package/dist/core/agentLifecycle.js.map +1 -0
- package/dist/core/areaMapping.d.ts +9 -0
- package/dist/core/areaMapping.d.ts.map +1 -0
- package/dist/core/areaMapping.js +37 -0
- package/dist/core/areaMapping.js.map +1 -0
- package/dist/core/config.d.ts +469 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +780 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/dashboardContract.d.ts +204 -0
- package/dist/core/dashboardContract.d.ts.map +1 -0
- package/dist/core/dashboardContract.js +205 -0
- package/dist/core/dashboardContract.js.map +1 -0
- package/dist/core/devopsModel.d.ts +138 -0
- package/dist/core/devopsModel.d.ts.map +1 -0
- package/dist/core/devopsModel.js +137 -0
- package/dist/core/devopsModel.js.map +1 -0
- package/dist/core/envFile.d.ts +11 -0
- package/dist/core/envFile.d.ts.map +1 -0
- package/dist/core/envFile.js +104 -0
- package/dist/core/envFile.js.map +1 -0
- package/dist/core/eventHub.d.ts +220 -0
- package/dist/core/eventHub.d.ts.map +1 -0
- package/dist/core/eventHub.js +136 -0
- package/dist/core/eventHub.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/laneExecutionState.d.ts +29 -0
- package/dist/core/laneExecutionState.d.ts.map +1 -0
- package/dist/core/laneExecutionState.js +18 -0
- package/dist/core/laneExecutionState.js.map +1 -0
- package/dist/core/laneStatus.d.ts +49 -0
- package/dist/core/laneStatus.d.ts.map +1 -0
- package/dist/core/laneStatus.js +153 -0
- package/dist/core/laneStatus.js.map +1 -0
- package/dist/core/prSidecar.d.ts +96 -0
- package/dist/core/prSidecar.d.ts.map +1 -0
- package/dist/core/prSidecar.js +33 -0
- package/dist/core/prSidecar.js.map +1 -0
- package/dist/core/runtimeConfig.d.ts +6 -0
- package/dist/core/runtimeConfig.d.ts.map +1 -0
- package/dist/core/runtimeConfig.js +24 -0
- package/dist/core/runtimeConfig.js.map +1 -0
- package/dist/core/scmProvider.d.ts +19 -0
- package/dist/core/scmProvider.d.ts.map +1 -0
- package/dist/core/scmProvider.js +38 -0
- package/dist/core/scmProvider.js.map +1 -0
- package/dist/core/service.d.ts +10 -0
- package/dist/core/service.d.ts.map +1 -0
- package/dist/core/service.js +297 -0
- package/dist/core/service.js.map +1 -0
- package/dist/core/traceCollector.d.ts +105 -0
- package/dist/core/traceCollector.d.ts.map +1 -0
- package/dist/core/traceCollector.js +141 -0
- package/dist/core/traceCollector.js.map +1 -0
- package/dist/core/types.d.ts +432 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/workItemMapper.d.ts +39 -0
- package/dist/core/workItemMapper.d.ts.map +1 -0
- package/dist/core/workItemMapper.js +427 -0
- package/dist/core/workItemMapper.js.map +1 -0
- package/dist/core/workItemModel.d.ts +120 -0
- package/dist/core/workItemModel.d.ts.map +1 -0
- package/dist/core/workItemModel.js +104 -0
- package/dist/core/workItemModel.js.map +1 -0
- package/dist/core/workItemPayload.d.ts +195 -0
- package/dist/core/workItemPayload.d.ts.map +1 -0
- package/dist/core/workItemPayload.js +24 -0
- package/dist/core/workItemPayload.js.map +1 -0
- package/dist/core/workspaceConfig.d.ts +57 -0
- package/dist/core/workspaceConfig.d.ts.map +1 -0
- package/dist/core/workspaceConfig.js +184 -0
- package/dist/core/workspaceConfig.js.map +1 -0
- package/dist/doctor.d.ts +18 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +34 -0
- package/dist/doctor.js.map +1 -0
- package/dist/factory/activeSkill.d.ts +11 -0
- package/dist/factory/activeSkill.d.ts.map +1 -0
- package/dist/factory/activeSkill.js +44 -0
- package/dist/factory/activeSkill.js.map +1 -0
- package/dist/factory/assignment.d.ts +54 -0
- package/dist/factory/assignment.d.ts.map +1 -0
- package/dist/factory/assignment.js +94 -0
- package/dist/factory/assignment.js.map +1 -0
- package/dist/factory/auditLog.d.ts +10 -0
- package/dist/factory/auditLog.d.ts.map +1 -0
- package/dist/factory/auditLog.js +38 -0
- package/dist/factory/auditLog.js.map +1 -0
- package/dist/factory/closureRequirements.d.ts +12 -0
- package/dist/factory/closureRequirements.d.ts.map +1 -0
- package/dist/factory/closureRequirements.js +30 -0
- package/dist/factory/closureRequirements.js.map +1 -0
- package/dist/factory/delegationPrompt.d.ts +3 -0
- package/dist/factory/delegationPrompt.d.ts.map +1 -0
- package/dist/factory/delegationPrompt.js +16 -0
- package/dist/factory/delegationPrompt.js.map +1 -0
- package/dist/factory/http.d.ts +3 -0
- package/dist/factory/http.d.ts.map +1 -0
- package/dist/factory/http.js +555 -0
- package/dist/factory/http.js.map +1 -0
- package/dist/factory/lifecyclePushMap.d.ts +4 -0
- package/dist/factory/lifecyclePushMap.d.ts.map +1 -0
- package/dist/factory/lifecyclePushMap.js +7 -0
- package/dist/factory/lifecyclePushMap.js.map +1 -0
- package/dist/factory/missions.d.ts +125 -0
- package/dist/factory/missions.d.ts.map +1 -0
- package/dist/factory/missions.js +304 -0
- package/dist/factory/missions.js.map +1 -0
- package/dist/factory/mode.d.ts +9 -0
- package/dist/factory/mode.d.ts.map +1 -0
- package/dist/factory/mode.js +30 -0
- package/dist/factory/mode.js.map +1 -0
- package/dist/factory/operatorActiveSkill.d.ts +15 -0
- package/dist/factory/operatorActiveSkill.d.ts.map +1 -0
- package/dist/factory/operatorActiveSkill.js +95 -0
- package/dist/factory/operatorActiveSkill.js.map +1 -0
- package/dist/factory/paseoDispatcher.d.ts +52 -0
- package/dist/factory/paseoDispatcher.d.ts.map +1 -0
- package/dist/factory/paseoDispatcher.js +122 -0
- package/dist/factory/paseoDispatcher.js.map +1 -0
- package/dist/factory/paseoLifecycle.d.ts +32 -0
- package/dist/factory/paseoLifecycle.d.ts.map +1 -0
- package/dist/factory/paseoLifecycle.js +260 -0
- package/dist/factory/paseoLifecycle.js.map +1 -0
- package/dist/factory/paths.d.ts +31 -0
- package/dist/factory/paths.d.ts.map +1 -0
- package/dist/factory/paths.js +139 -0
- package/dist/factory/paths.js.map +1 -0
- package/dist/factory/progressWatchdog.d.ts +58 -0
- package/dist/factory/progressWatchdog.d.ts.map +1 -0
- package/dist/factory/progressWatchdog.js +160 -0
- package/dist/factory/progressWatchdog.js.map +1 -0
- package/dist/factory/roster.d.ts +59 -0
- package/dist/factory/roster.d.ts.map +1 -0
- package/dist/factory/roster.js +116 -0
- package/dist/factory/roster.js.map +1 -0
- package/dist/factory/runtime.d.ts +44 -0
- package/dist/factory/runtime.d.ts.map +1 -0
- package/dist/factory/runtime.js +238 -0
- package/dist/factory/runtime.js.map +1 -0
- package/dist/factory/sync.d.ts +29 -0
- package/dist/factory/sync.d.ts.map +1 -0
- package/dist/factory/sync.js +77 -0
- package/dist/factory/sync.js.map +1 -0
- package/dist/factory/workitemQueues.d.ts +37 -0
- package/dist/factory/workitemQueues.d.ts.map +1 -0
- package/dist/factory/workitemQueues.js +99 -0
- package/dist/factory/workitemQueues.js.map +1 -0
- package/dist/factory/workitemTriage.d.ts +9 -0
- package/dist/factory/workitemTriage.d.ts.map +1 -0
- package/dist/factory/workitemTriage.js +81 -0
- package/dist/factory/workitemTriage.js.map +1 -0
- package/dist/hooks.d.ts +18 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +96 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/install/agentCatalog.d.ts +7 -0
- package/dist/install/agentCatalog.d.ts.map +1 -0
- package/dist/install/agentCatalog.js +28 -0
- package/dist/install/agentCatalog.js.map +1 -0
- package/dist/install/bundlePaths.d.ts +10 -0
- package/dist/install/bundlePaths.d.ts.map +1 -0
- package/dist/install/bundlePaths.js +30 -0
- package/dist/install/bundlePaths.js.map +1 -0
- package/dist/install/codex.d.ts +43 -0
- package/dist/install/codex.d.ts.map +1 -0
- package/dist/install/codex.js +207 -0
- package/dist/install/codex.js.map +1 -0
- package/dist/install/enactHome.d.ts +37 -0
- package/dist/install/enactHome.d.ts.map +1 -0
- package/dist/install/enactHome.js +152 -0
- package/dist/install/enactHome.js.map +1 -0
- package/dist/install/plugins.d.ts +115 -0
- package/dist/install/plugins.d.ts.map +1 -0
- package/dist/install/plugins.js +259 -0
- package/dist/install/plugins.js.map +1 -0
- package/dist/install/setup.d.ts +33 -0
- package/dist/install/setup.d.ts.map +1 -0
- package/dist/install/setup.js +167 -0
- package/dist/install/setup.js.map +1 -0
- package/dist/locale/en.d.ts +3 -0
- package/dist/locale/en.d.ts.map +1 -0
- package/dist/locale/en.js +435 -0
- package/dist/locale/en.js.map +1 -0
- package/dist/locale/index.d.ts +28 -0
- package/dist/locale/index.d.ts.map +1 -0
- package/dist/locale/index.js +84 -0
- package/dist/locale/index.js.map +1 -0
- package/dist/locale/prompts/en.d.ts +3 -0
- package/dist/locale/prompts/en.d.ts.map +1 -0
- package/dist/locale/prompts/en.js +254 -0
- package/dist/locale/prompts/en.js.map +1 -0
- package/dist/locale/types.d.ts +433 -0
- package/dist/locale/types.d.ts.map +1 -0
- package/dist/locale/types.js +5 -0
- package/dist/locale/types.js.map +1 -0
- package/dist/mcp/server.d.ts +489 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +597 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/orchestration/decisionEngine.d.ts +175 -0
- package/dist/orchestration/decisionEngine.d.ts.map +1 -0
- package/dist/orchestration/decisionEngine.js +471 -0
- package/dist/orchestration/decisionEngine.js.map +1 -0
- package/dist/orchestration/index.d.ts +5 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +5 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/workItemParser.d.ts +67 -0
- package/dist/orchestration/workItemParser.d.ts.map +1 -0
- package/dist/orchestration/workItemParser.js +560 -0
- package/dist/orchestration/workItemParser.js.map +1 -0
- package/dist/orchestration/workItemScheduler.d.ts +141 -0
- package/dist/orchestration/workItemScheduler.d.ts.map +1 -0
- package/dist/orchestration/workItemScheduler.js +317 -0
- package/dist/orchestration/workItemScheduler.js.map +1 -0
- package/dist/orchestration/workflow.d.ts +145 -0
- package/dist/orchestration/workflow.d.ts.map +1 -0
- package/dist/orchestration/workflow.js +301 -0
- package/dist/orchestration/workflow.js.map +1 -0
- package/dist/providers/codexSessions.d.ts +93 -0
- package/dist/providers/codexSessions.d.ts.map +1 -0
- package/dist/providers/codexSessions.js +366 -0
- package/dist/providers/codexSessions.js.map +1 -0
- package/dist/registry/bsDetector.d.ts +24 -0
- package/dist/registry/bsDetector.d.ts.map +1 -0
- package/dist/registry/bsDetector.js +276 -0
- package/dist/registry/bsDetector.js.map +1 -0
- package/dist/registry/entityScanner.d.ts +36 -0
- package/dist/registry/entityScanner.d.ts.map +1 -0
- package/dist/registry/entityScanner.js +693 -0
- package/dist/registry/entityScanner.js.map +1 -0
- package/dist/registry/index.d.ts +9 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +13 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/schema.d.ts +307 -0
- package/dist/registry/schema.d.ts.map +1 -0
- package/dist/registry/schema.js +139 -0
- package/dist/registry/schema.js.map +1 -0
- package/dist/registry/sqliteStore.d.ts +101 -0
- package/dist/registry/sqliteStore.d.ts.map +1 -0
- package/dist/registry/sqliteStore.js +688 -0
- package/dist/registry/sqliteStore.js.map +1 -0
- package/dist/registry/workItemBridge.d.ts +8 -0
- package/dist/registry/workItemBridge.d.ts.map +1 -0
- package/dist/registry/workItemBridge.js +30 -0
- package/dist/registry/workItemBridge.js.map +1 -0
- package/dist/runners/cliRunner.d.ts +11 -0
- package/dist/runners/cliRunner.d.ts.map +1 -0
- package/dist/runners/cliRunner.js +193 -0
- package/dist/runners/cliRunner.js.map +1 -0
- package/dist/support/apiCache.d.ts +85 -0
- package/dist/support/apiCache.d.ts.map +1 -0
- package/dist/support/apiCache.js +163 -0
- package/dist/support/apiCache.js.map +1 -0
- package/dist/support/chat.d.ts +3 -0
- package/dist/support/chat.d.ts.map +1 -0
- package/dist/support/chat.js +305 -0
- package/dist/support/chat.js.map +1 -0
- package/dist/support/chatBackend.d.ts +25 -0
- package/dist/support/chatBackend.d.ts.map +1 -0
- package/dist/support/chatBackend.js +289 -0
- package/dist/support/chatBackend.js.map +1 -0
- package/dist/support/chatTui.d.ts +3 -0
- package/dist/support/chatTui.d.ts.map +1 -0
- package/dist/support/chatTui.js +1082 -0
- package/dist/support/chatTui.js.map +1 -0
- package/dist/support/costTracker.d.ts +29 -0
- package/dist/support/costTracker.d.ts.map +1 -0
- package/dist/support/costTracker.js +113 -0
- package/dist/support/costTracker.js.map +1 -0
- package/dist/support/dashboardHtml.d.ts +5 -0
- package/dist/support/dashboardHtml.d.ts.map +1 -0
- package/dist/support/dashboardHtml.js +2629 -0
- package/dist/support/dashboardHtml.js.map +1 -0
- package/dist/support/dev.d.ts +55 -0
- package/dist/support/dev.d.ts.map +1 -0
- package/dist/support/dev.js +298 -0
- package/dist/support/dev.js.map +1 -0
- package/dist/support/editParser.d.ts +37 -0
- package/dist/support/editParser.d.ts.map +1 -0
- package/dist/support/editParser.js +365 -0
- package/dist/support/editParser.js.map +1 -0
- package/dist/support/ghosttyThemeCatalog.generated.d.ts +2 -0
- package/dist/support/ghosttyThemeCatalog.generated.d.ts.map +1 -0
- package/dist/support/ghosttyThemeCatalog.generated.js +11116 -0
- package/dist/support/ghosttyThemeCatalog.generated.js.map +1 -0
- package/dist/support/gitStatus.d.ts +21 -0
- package/dist/support/gitStatus.d.ts.map +1 -0
- package/dist/support/gitStatus.js +108 -0
- package/dist/support/gitStatus.js.map +1 -0
- package/dist/support/gitTracker.d.ts +30 -0
- package/dist/support/gitTracker.d.ts.map +1 -0
- package/dist/support/gitTracker.js +143 -0
- package/dist/support/gitTracker.js.map +1 -0
- package/dist/support/index.d.ts +12 -0
- package/dist/support/index.d.ts.map +1 -0
- package/dist/support/index.js +12 -0
- package/dist/support/index.js.map +1 -0
- package/dist/support/planner.d.ts +64 -0
- package/dist/support/planner.d.ts.map +1 -0
- package/dist/support/planner.js +396 -0
- package/dist/support/planner.js.map +1 -0
- package/dist/support/projectMapper.d.ts +46 -0
- package/dist/support/projectMapper.d.ts.map +1 -0
- package/dist/support/projectMapper.js +273 -0
- package/dist/support/projectMapper.js.map +1 -0
- package/dist/support/pty-helper.py +117 -0
- package/dist/support/quotaTracker.d.ts +29 -0
- package/dist/support/quotaTracker.d.ts.map +1 -0
- package/dist/support/quotaTracker.js +89 -0
- package/dist/support/quotaTracker.js.map +1 -0
- package/dist/support/rateLimiter.d.ts +101 -0
- package/dist/support/rateLimiter.d.ts.map +1 -0
- package/dist/support/rateLimiter.js +219 -0
- package/dist/support/rateLimiter.js.map +1 -0
- package/dist/support/rollback.d.ts +61 -0
- package/dist/support/rollback.d.ts.map +1 -0
- package/dist/support/rollback.js +329 -0
- package/dist/support/rollback.js.map +1 -0
- package/dist/support/sharedShell.d.ts +17 -0
- package/dist/support/sharedShell.d.ts.map +1 -0
- package/dist/support/sharedShell.js +439 -0
- package/dist/support/sharedShell.js.map +1 -0
- package/dist/support/stuckDetector.d.ts +68 -0
- package/dist/support/stuckDetector.d.ts.map +1 -0
- package/dist/support/stuckDetector.js +174 -0
- package/dist/support/stuckDetector.js.map +1 -0
- package/dist/support/terminalBridge.d.ts +18 -0
- package/dist/support/terminalBridge.d.ts.map +1 -0
- package/dist/support/terminalBridge.js +553 -0
- package/dist/support/terminalBridge.js.map +1 -0
- package/dist/support/timeWindow.d.ts +60 -0
- package/dist/support/timeWindow.d.ts.map +1 -0
- package/dist/support/timeWindow.js +236 -0
- package/dist/support/timeWindow.js.map +1 -0
- package/dist/support/uiThemes.d.ts +44 -0
- package/dist/support/uiThemes.d.ts.map +1 -0
- package/dist/support/uiThemes.js +290 -0
- package/dist/support/uiThemes.js.map +1 -0
- package/dist/support/web.d.ts +29 -0
- package/dist/support/web.d.ts.map +1 -0
- package/dist/support/web.js +1097 -0
- package/dist/support/web.js.map +1 -0
- package/dist/support/worktreeManager.d.ts +20 -0
- package/dist/support/worktreeManager.d.ts.map +1 -0
- package/dist/support/worktreeManager.js +140 -0
- package/dist/support/worktreeManager.js.map +1 -0
- package/dist/task_state_model.py +55 -0
- package/dist/workItemState/store.d.ts +122 -0
- package/dist/workItemState/store.d.ts.map +1 -0
- package/dist/workItemState/store.js +438 -0
- package/dist/workItemState/store.js.map +1 -0
- package/dist/workItems/azdoBridge.d.ts +42 -0
- package/dist/workItems/azdoBridge.d.ts.map +1 -0
- package/dist/workItems/azdoBridge.js +143 -0
- package/dist/workItems/azdoBridge.js.map +1 -0
- package/dist/workItems/azdoSyncRuntime.d.ts +28 -0
- package/dist/workItems/azdoSyncRuntime.d.ts.map +1 -0
- package/dist/workItems/azdoSyncRuntime.js +158 -0
- package/dist/workItems/azdoSyncRuntime.js.map +1 -0
- package/dist/workItems/azureDevOpsSync.d.ts +128 -0
- package/dist/workItems/azureDevOpsSync.d.ts.map +1 -0
- package/dist/workItems/azureDevOpsSync.js +748 -0
- package/dist/workItems/azureDevOpsSync.js.map +1 -0
- package/dist/workItems/helpers.d.ts +11 -0
- package/dist/workItems/helpers.d.ts.map +1 -0
- package/dist/workItems/helpers.js +17 -0
- package/dist/workItems/helpers.js.map +1 -0
- package/dist/workItems/index.d.ts +21 -0
- package/dist/workItems/index.d.ts.map +1 -0
- package/dist/workItems/index.js +89 -0
- package/dist/workItems/index.js.map +1 -0
- package/dist/workItems/localWorkItemFetcher.d.ts +55 -0
- package/dist/workItems/localWorkItemFetcher.d.ts.map +1 -0
- package/dist/workItems/localWorkItemFetcher.js +209 -0
- package/dist/workItems/localWorkItemFetcher.js.map +1 -0
- package/dist/workItems/migrations/001_rename_workItem_to_work_item.sql +10 -0
- package/dist/workItems/postgresStore.d.ts +78 -0
- package/dist/workItems/postgresStore.d.ts.map +1 -0
- package/dist/workItems/postgresStore.js +937 -0
- package/dist/workItems/postgresStore.js.map +1 -0
- package/dist/workItems/schema.d.ts +257 -0
- package/dist/workItems/schema.d.ts.map +1 -0
- package/dist/workItems/schema.js +176 -0
- package/dist/workItems/schema.js.map +1 -0
- package/dist/workItems/sqliteStore.d.ts +124 -0
- package/dist/workItems/sqliteStore.d.ts.map +1 -0
- package/dist/workItems/sqliteStore.js +713 -0
- package/dist/workItems/sqliteStore.js.map +1 -0
- package/dist/workItems/workItemBoardHtml.d.ts +5 -0
- package/dist/workItems/workItemBoardHtml.d.ts.map +1 -0
- package/dist/workItems/workItemBoardHtml.js +2192 -0
- package/dist/workItems/workItemBoardHtml.js.map +1 -0
- package/package.json +99 -0
- package/templates/AGENTS.md +432 -0
- package/templates/BOOT.md +25 -0
- package/templates/BOOTSTRAP.md +50 -0
- package/templates/CHANGELOG_AUDIT.md +74 -0
- package/templates/HEARTBEAT.md +86 -0
- package/templates/IDENTITY.md +27 -0
- package/templates/PR_LAND.md +75 -0
- package/templates/PR_REVIEW.md +97 -0
- package/templates/SOUL.dev.md +52 -0
- package/templates/SOUL.md +81 -0
- package/templates/TOOLS.md +52 -0
- package/templates/USER.md +22 -0
- package/templates/WORKITEM_ANALYSIS.md +31 -0
- package/templates/agents/executor.md +26 -0
- package/templates/agents/plan.md +22 -0
- package/templates/agents/ralph.md +37 -0
- package/templates/agents/review.md +22 -0
- package/templates/agents/team.md +39 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// EnactFactory - Azure DevOps Hierarchy Provisioning
|
|
3
|
+
// ============================================
|
|
4
|
+
//
|
|
5
|
+
// Provisions a stable Epic -> Feature -> (PBI/Bug) hierarchy in production
|
|
6
|
+
// Azure DevOps for orphaned work items (open PBIs/Bugs that have no parent).
|
|
7
|
+
//
|
|
8
|
+
// Design constraints:
|
|
9
|
+
// - This module CREATES real Epics/Features in production AzDO and re-parents
|
|
10
|
+
// work items. It MUST be idempotent: find-or-create, never duplicate.
|
|
11
|
+
// - Idempotency is enforced two ways:
|
|
12
|
+
// 1. A persistent KV cache (store.getSyncMeta / setSyncMeta) keyed by
|
|
13
|
+
// project + title so repeated backfills (across process restarts)
|
|
14
|
+
// re-use the same Epic/Feature ids.
|
|
15
|
+
// 2. A WIQL "find by title + type" probe so even a cold cache will adopt
|
|
16
|
+
// an existing Epic/Feature instead of creating a duplicate.
|
|
17
|
+
// 3. An in-run Map cache so a single backfill over many orphans never
|
|
18
|
+
// re-hits getSyncMeta / WIQL for the same Epic/Feature.
|
|
19
|
+
// - One bad orphan never aborts the backfill (per-item try/catch -> errors[]).
|
|
20
|
+
//
|
|
21
|
+
// Naming scheme:
|
|
22
|
+
// Epic : `${projectName}-v${major}.0.0` (e.g. "enact-factory-v1.0.0")
|
|
23
|
+
// Feature : `v${major}.${minor}.0` (e.g. "v1.3.0") -- for PBIs
|
|
24
|
+
// Feature : "Maintenance" -- for Bugs
|
|
25
|
+
// ============================================
|
|
26
|
+
import { readFileSync } from 'node:fs';
|
|
27
|
+
import { join } from 'node:path';
|
|
28
|
+
import { areaToProjectId } from '../core/areaMapping.js';
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Constants
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/** Feature title used to collect all Bug-type orphans for a repo. */
|
|
33
|
+
export const MAINTENANCE_FEATURE_TITLE = 'Maintenance';
|
|
34
|
+
/** Default assignee stamped on every Epic/Feature this module creates. */
|
|
35
|
+
const DEFAULT_ASSIGNEE = 'Tarun Rana <tarun.rana@amsterdamdatalabs.com>';
|
|
36
|
+
/** Floor that all repos provision against (the user wants minimum v1.0.0). */
|
|
37
|
+
const VERSION_FLOOR = { major: 1, minor: 0, patch: 0 };
|
|
38
|
+
/**
|
|
39
|
+
* Read `${repoPath}/package.json` and parse its `version` semver.
|
|
40
|
+
* On any failure (missing file/field/parse error) returns the floor
|
|
41
|
+
* { major: 1, minor: 0, patch: 0 }. Major is always floored at 1.
|
|
42
|
+
*/
|
|
43
|
+
export function getRepoVersion(repoPath) {
|
|
44
|
+
try {
|
|
45
|
+
const pkgPath = join(repoPath, 'package.json');
|
|
46
|
+
const raw = readFileSync(pkgPath, 'utf8');
|
|
47
|
+
const parsed = JSON.parse(raw);
|
|
48
|
+
const version = parsed.version;
|
|
49
|
+
if (typeof version !== 'string')
|
|
50
|
+
return { ...VERSION_FLOOR };
|
|
51
|
+
// Strip a leading 'v' and any pre-release / build metadata suffix.
|
|
52
|
+
const core = version.trim().replace(/^v/i, '').split(/[-+]/)[0];
|
|
53
|
+
const parts = core.split('.');
|
|
54
|
+
const major = Number.parseInt(parts[0] ?? '', 10);
|
|
55
|
+
const minor = Number.parseInt(parts[1] ?? '', 10);
|
|
56
|
+
const patch = Number.parseInt(parts[2] ?? '', 10);
|
|
57
|
+
if (!Number.isFinite(major))
|
|
58
|
+
return { ...VERSION_FLOOR };
|
|
59
|
+
return {
|
|
60
|
+
major: Math.max(1, major),
|
|
61
|
+
minor: Number.isFinite(minor) ? Math.max(0, minor) : 0,
|
|
62
|
+
patch: Number.isFinite(patch) ? Math.max(0, patch) : 0,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return { ...VERSION_FLOOR };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// Naming helpers (pure)
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
/** Epic title for a repo at a given major version, e.g. "enact-factory-v1.0.0". */
|
|
73
|
+
export function epicTitle(projectName, major) {
|
|
74
|
+
return `${projectName}-v${Math.max(1, major)}.0.0`;
|
|
75
|
+
}
|
|
76
|
+
/** Feature title for a repo version line, e.g. "v1.3.0". */
|
|
77
|
+
export function versionFeatureTitle(major, minor) {
|
|
78
|
+
return `v${Math.max(1, major)}.${minor}.0`;
|
|
79
|
+
}
|
|
80
|
+
/** Convert an area path slug into an AzDO area path, e.g. 'Enact/Factory' -> 'Enact\\Factory'. */
|
|
81
|
+
export function areaToAzdoAreaPath(area) {
|
|
82
|
+
return area.replace(/\//g, '\\');
|
|
83
|
+
}
|
|
84
|
+
/** Basename of a path, e.g. '/repos/enact-factory' -> 'enact-factory'. */
|
|
85
|
+
function pathBasename(p) {
|
|
86
|
+
const parts = p.replace(/[\\/]+$/, '').split(/[\\/]/);
|
|
87
|
+
return parts[parts.length - 1] ?? '';
|
|
88
|
+
}
|
|
89
|
+
/** Lowercase + hyphenate a name for tolerant comparison against a projectId. */
|
|
90
|
+
function slugify(name) {
|
|
91
|
+
return name.trim().toLowerCase().replace(/[\s/_]+/g, '-');
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Resolve the repo for a given area using the EXPLICIT hardcoded area->projectId
|
|
95
|
+
* mapping. Returns null when the area is not in the map (the caller then skips
|
|
96
|
+
* the orphan — intended). When mapped, the projectId slug is the repo name used
|
|
97
|
+
* for the Epic title; we best-effort recover a ProjectConfig path (by path
|
|
98
|
+
* basename or slugified name) for version detection — a miss floors to v1.0.0.
|
|
99
|
+
*/
|
|
100
|
+
export function resolveRepo(area, projects) {
|
|
101
|
+
const projectId = areaToProjectId(area);
|
|
102
|
+
if (!projectId)
|
|
103
|
+
return null;
|
|
104
|
+
const match = projects.find((p) => pathBasename(p.path) === projectId || slugify(p.name) === projectId);
|
|
105
|
+
return { name: projectId, path: match?.path };
|
|
106
|
+
}
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Parent relation patch
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
/**
|
|
111
|
+
* Build the JSON-patch that parents a work item under `parentId`. Mirrors the
|
|
112
|
+
* shape in src/azdo/azdo.ts (createParentRelationPatch) but takes org/project
|
|
113
|
+
* explicitly so it has no dependency on global config.
|
|
114
|
+
*/
|
|
115
|
+
function buildParentRelationPatch(organization, project, parentId) {
|
|
116
|
+
return {
|
|
117
|
+
op: 'add',
|
|
118
|
+
path: '/relations/-',
|
|
119
|
+
value: {
|
|
120
|
+
rel: 'System.LinkTypes.Hierarchy-Reverse',
|
|
121
|
+
url: `https://dev.azure.com/${organization}/${project}/_apis/wit/workItems/${parentId}`,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function fieldPatch(path, value) {
|
|
126
|
+
return { op: 'add', path, value };
|
|
127
|
+
}
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
// Retry (429 / 503 only)
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
function isRetryableStatus(err) {
|
|
132
|
+
const status = err?.status;
|
|
133
|
+
return status === 429 || status === 503;
|
|
134
|
+
}
|
|
135
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
136
|
+
/**
|
|
137
|
+
* Retry `fn` on 429/503 with exponential backoff (capped). Any non-throttle
|
|
138
|
+
* error is rethrown immediately. Deliberately self-contained to avoid a
|
|
139
|
+
* dependency cycle with azureDevOpsSync.ts.
|
|
140
|
+
*/
|
|
141
|
+
export async function withRetry(fn, attempts = 3, baseMs = 1000, capMs = 30000) {
|
|
142
|
+
let lastErr;
|
|
143
|
+
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
144
|
+
try {
|
|
145
|
+
return await fn();
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
lastErr = err;
|
|
149
|
+
if (!isRetryableStatus(err) || attempt === attempts - 1)
|
|
150
|
+
throw err;
|
|
151
|
+
const delay = Math.min(capMs, baseMs * 2 ** attempt);
|
|
152
|
+
await sleep(delay);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
throw lastErr;
|
|
156
|
+
}
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// Find-or-create
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
/** Escape a WIQL string literal by doubling embedded single quotes. */
|
|
161
|
+
function escapeWiqlLiteral(value) {
|
|
162
|
+
return value.replace(/'/g, "''");
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Find ALL work items of an exact title + type within a project via WIQL.
|
|
166
|
+
* Titles are NOT unique across repos (e.g. 'Maintenance', 'v1.0.0'), so callers
|
|
167
|
+
* that need a repo-scoped match must further filter by parent (see
|
|
168
|
+
* findFeatureUnderEpic). Returns every matching id.
|
|
169
|
+
*/
|
|
170
|
+
async function findWorkItemIdsByTitleAndType(client, project, type, title) {
|
|
171
|
+
const wiql = `SELECT [System.Id] FROM WorkItems WHERE ` +
|
|
172
|
+
`[System.TeamProject] = '${escapeWiqlLiteral(project)}' AND ` +
|
|
173
|
+
`[System.WorkItemType] = '${escapeWiqlLiteral(type)}' AND ` +
|
|
174
|
+
`[System.Title] = '${escapeWiqlLiteral(title)}'`;
|
|
175
|
+
return withRetry(() => client.queryByWiql(wiql));
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Find a work item by exact title + type within a project via WIQL.
|
|
179
|
+
* Returns the first matching id, or null. Project-wide — only safe for items
|
|
180
|
+
* whose title is unique per project (Epics: '<projectId>-v<major>.0.0').
|
|
181
|
+
*/
|
|
182
|
+
export async function findWorkItemByTitleAndType(client, project, type, title) {
|
|
183
|
+
const ids = await findWorkItemIdsByTitleAndType(client, project, type, title);
|
|
184
|
+
return ids[0] ?? null;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Extract the parent work item id from a Hierarchy-Reverse relation, matching
|
|
188
|
+
* the extraction used by azureDevOpsSync.extractParentId (/workItems/(\d+)/i).
|
|
189
|
+
*/
|
|
190
|
+
function parentIdFromRelationUrl(url) {
|
|
191
|
+
if (!url)
|
|
192
|
+
return null;
|
|
193
|
+
const match = url.match(/workItems\/(\d+)/i);
|
|
194
|
+
return match ? Number(match[1]) : null;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Index of the work item's Hierarchy-Reverse (parent) relation within its
|
|
198
|
+
* relations array, or -1 if it has none. Used to build the `remove` patch when
|
|
199
|
+
* re-parenting (AzDO removes relations by positional index).
|
|
200
|
+
*/
|
|
201
|
+
function parentRelationIndex(workItem) {
|
|
202
|
+
const relations = workItem.relations ?? [];
|
|
203
|
+
return relations.findIndex((r) => r.rel === 'System.LinkTypes.Hierarchy-Reverse');
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Find a Feature with `title` that is a CHILD of `epicId`. Feature titles are
|
|
207
|
+
* NOT unique across repos, so we WIQL all same-title Features in the project,
|
|
208
|
+
* batch-fetch them, and return the first whose Hierarchy-Reverse parent
|
|
209
|
+
* resolves to `epicId`. Returns null when no same-title Feature is parented to
|
|
210
|
+
* this Epic (caller then creates one under the correct Epic).
|
|
211
|
+
*/
|
|
212
|
+
export async function findFeatureUnderEpic(client, project, epicId, title) {
|
|
213
|
+
const candidateIds = await findWorkItemIdsByTitleAndType(client, project, 'Feature', title);
|
|
214
|
+
if (candidateIds.length === 0)
|
|
215
|
+
return null;
|
|
216
|
+
const candidates = await withRetry(() => client.getWorkItems(candidateIds));
|
|
217
|
+
for (const candidate of candidates) {
|
|
218
|
+
const parent = candidate.relations
|
|
219
|
+
?.filter((r) => r.rel === 'System.LinkTypes.Hierarchy-Reverse')
|
|
220
|
+
.map((r) => parentIdFromRelationUrl(r.url))
|
|
221
|
+
.find((id) => id != null);
|
|
222
|
+
if (parent === epicId)
|
|
223
|
+
return candidate.id;
|
|
224
|
+
}
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Resolve a cached id, checking the in-run memo first then the persistent KV
|
|
229
|
+
* store. Returns the id if present, else null. Populates the memo on a KV hit.
|
|
230
|
+
*/
|
|
231
|
+
async function readCachedId(ctx, cacheKey, validate) {
|
|
232
|
+
const memoHit = ctx.memo.get(cacheKey);
|
|
233
|
+
if (memoHit !== undefined) {
|
|
234
|
+
if (!validate || await validate(memoHit))
|
|
235
|
+
return memoHit;
|
|
236
|
+
ctx.memo.delete(cacheKey);
|
|
237
|
+
}
|
|
238
|
+
const stored = await ctx.deps.store.getSyncMeta(cacheKey);
|
|
239
|
+
if (stored != null) {
|
|
240
|
+
const id = Number.parseInt(stored, 10);
|
|
241
|
+
if (Number.isFinite(id) && id > 0) {
|
|
242
|
+
if (validate && !(await validate(id))) {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
ctx.memo.set(cacheKey, id);
|
|
246
|
+
return id;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
/** Persist a resolved id to both the in-run memo and the KV store. */
|
|
252
|
+
async function writeCachedId(ctx, cacheKey, id) {
|
|
253
|
+
ctx.memo.set(cacheKey, id);
|
|
254
|
+
await ctx.deps.store.setSyncMeta(cacheKey, String(id));
|
|
255
|
+
}
|
|
256
|
+
async function validateEpicCacheHit(ctx, id, title) {
|
|
257
|
+
try {
|
|
258
|
+
const item = await withRetry(() => ctx.deps.client.getWorkItem(id));
|
|
259
|
+
return item.fields['System.WorkItemType'] === 'Epic'
|
|
260
|
+
&& String(item.fields['System.Title'] ?? '') === title;
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
async function validateFeatureCacheHit(ctx, id, title, epicId) {
|
|
267
|
+
try {
|
|
268
|
+
const item = await withRetry(() => ctx.deps.client.getWorkItem(id));
|
|
269
|
+
if (item.fields['System.WorkItemType'] !== 'Feature')
|
|
270
|
+
return false;
|
|
271
|
+
if (String(item.fields['System.Title'] ?? '') !== title)
|
|
272
|
+
return false;
|
|
273
|
+
return parentRelationIndex(item) >= 0
|
|
274
|
+
&& parentIdFromRelationUrl(item.relations?.[parentRelationIndex(item)]?.url) === epicId;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Find-or-create the Epic for a repo's major version line. Idempotent via the
|
|
282
|
+
* cache key `azdo:epic:<cacheKeyName>`, falling back to a WIQL title probe, then
|
|
283
|
+
* to creation. Increments result.epicsCreated only on an actual create.
|
|
284
|
+
*/
|
|
285
|
+
async function ensureEpic(ctx, args) {
|
|
286
|
+
const { project, projectName, cacheKeyName, areaPath, major } = args;
|
|
287
|
+
const cacheKey = `azdo:epic:${cacheKeyName}`;
|
|
288
|
+
const title = epicTitle(projectName, major);
|
|
289
|
+
const cached = await readCachedId(ctx, cacheKey, async (id) => validateEpicCacheHit(ctx, id, title));
|
|
290
|
+
if (cached != null)
|
|
291
|
+
return cached;
|
|
292
|
+
const existing = await findWorkItemByTitleAndType(ctx.deps.client, project, 'Epic', title);
|
|
293
|
+
if (existing != null) {
|
|
294
|
+
await writeCachedId(ctx, cacheKey, existing);
|
|
295
|
+
return existing;
|
|
296
|
+
}
|
|
297
|
+
const created = await withRetry(() => ctx.deps.client.createWorkItem('Epic', [
|
|
298
|
+
fieldPatch('/fields/System.Title', title),
|
|
299
|
+
fieldPatch('/fields/System.AreaPath', areaPath),
|
|
300
|
+
fieldPatch('/fields/System.AssignedTo', DEFAULT_ASSIGNEE),
|
|
301
|
+
]));
|
|
302
|
+
ctx.result.epicsCreated++;
|
|
303
|
+
await writeCachedId(ctx, cacheKey, created.id);
|
|
304
|
+
return created.id;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Find-or-create a Feature under `epicId`. Idempotent via the cache key
|
|
308
|
+
* `azdo:feature:<cacheKeyName>:<title>`, falling back to a PARENT-SCOPED probe
|
|
309
|
+
* (findFeatureUnderEpic), then to creation. When CREATING, the Feature is
|
|
310
|
+
* parented to the Epic in the same patch document. Increments
|
|
311
|
+
* result.featuresCreated only on an actual create.
|
|
312
|
+
*
|
|
313
|
+
* The probe MUST be scoped to this Epic: Feature titles ('Maintenance',
|
|
314
|
+
* 'v1.0.0') are not unique across repos, so a project-wide title match would
|
|
315
|
+
* mis-link a new repo's items under another repo's Feature.
|
|
316
|
+
*
|
|
317
|
+
* Note: on a find/cache hit we assume the Feature is already linked to its
|
|
318
|
+
* Epic (the only code path that creates these Features always links them).
|
|
319
|
+
*/
|
|
320
|
+
async function ensureFeature(ctx, args) {
|
|
321
|
+
const { project, cacheKeyName, areaPath, title, epicId } = args;
|
|
322
|
+
const cacheKey = `azdo:feature:${cacheKeyName}:${title}`;
|
|
323
|
+
const cached = await readCachedId(ctx, cacheKey, async (id) => validateFeatureCacheHit(ctx, id, title, epicId));
|
|
324
|
+
if (cached != null)
|
|
325
|
+
return cached;
|
|
326
|
+
const existing = await findFeatureUnderEpic(ctx.deps.client, project, epicId, title);
|
|
327
|
+
if (existing != null) {
|
|
328
|
+
await writeCachedId(ctx, cacheKey, existing);
|
|
329
|
+
return existing;
|
|
330
|
+
}
|
|
331
|
+
const created = await withRetry(() => ctx.deps.client.createWorkItem('Feature', [
|
|
332
|
+
fieldPatch('/fields/System.Title', title),
|
|
333
|
+
fieldPatch('/fields/System.AreaPath', areaPath),
|
|
334
|
+
fieldPatch('/fields/System.AssignedTo', DEFAULT_ASSIGNEE),
|
|
335
|
+
buildParentRelationPatch(ctx.deps.organization, ctx.deps.project, epicId),
|
|
336
|
+
]));
|
|
337
|
+
ctx.result.featuresCreated++;
|
|
338
|
+
await writeCachedId(ctx, cacheKey, created.id);
|
|
339
|
+
return created.id;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Resolve the target Feature id for an item: find-or-create its Epic and the
|
|
343
|
+
* appropriate Feature (Bug -> Maintenance, PBI -> version line), all scoped to
|
|
344
|
+
* the item's repo. Returns null when the item can't be placed (unmapped area).
|
|
345
|
+
*/
|
|
346
|
+
async function resolveTargetFeature(ctx, item) {
|
|
347
|
+
// Resolve the owning repo via the explicit area->projectId map. An area not
|
|
348
|
+
// in the map is unresolvable -> caller skips (intended).
|
|
349
|
+
const repo = resolveRepo(item.area, ctx.deps.projects);
|
|
350
|
+
if (!repo)
|
|
351
|
+
return null;
|
|
352
|
+
const area = item.area; // resolveRepo guarantees a mapped area
|
|
353
|
+
// When the repo is configured we read its package.json; otherwise floor to
|
|
354
|
+
// v1.0.0 (the user's minimum) so a brand-new repo still provisions.
|
|
355
|
+
const version = repo.path ? getRepoVersion(repo.path) : { major: 1, minor: 0, patch: 0 };
|
|
356
|
+
const areaPath = areaToAzdoAreaPath(area);
|
|
357
|
+
const cacheKeyName = repo.name.toLowerCase();
|
|
358
|
+
const epicId = await ensureEpic(ctx, {
|
|
359
|
+
project: ctx.deps.project,
|
|
360
|
+
projectName: repo.name,
|
|
361
|
+
cacheKeyName,
|
|
362
|
+
areaPath,
|
|
363
|
+
major: version.major,
|
|
364
|
+
});
|
|
365
|
+
const featureTitle = item.kind === 'Bug'
|
|
366
|
+
? MAINTENANCE_FEATURE_TITLE
|
|
367
|
+
: versionFeatureTitle(version.major, version.minor);
|
|
368
|
+
return ensureFeature(ctx, {
|
|
369
|
+
project: ctx.deps.project,
|
|
370
|
+
cacheKeyName,
|
|
371
|
+
areaPath,
|
|
372
|
+
title: featureTitle,
|
|
373
|
+
epicId,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Provision the Epic -> Feature hierarchy for a set of open executable items
|
|
378
|
+
* and CORRECT their parentage so each lands under the right per-repo Feature.
|
|
379
|
+
*
|
|
380
|
+
* The caller should pass ALL open PBIs/Bugs (each carrying its current AzDO
|
|
381
|
+
* parent id), not just parentless orphans — items mis-parented by an earlier
|
|
382
|
+
* buggy run are self-healed here. For each item:
|
|
383
|
+
* - unmapped area / bad id -> skipped (no AzDO write)
|
|
384
|
+
* - already under the correct Feature -> alreadyCorrect (no AzDO write)
|
|
385
|
+
* - no parent -> add the parent link (linked)
|
|
386
|
+
* - under a different (wrong) Feature -> remove the old relation + add the
|
|
387
|
+
* new one in a single PATCH (reparented)
|
|
388
|
+
* Each item is processed in its own try/catch so one failure never aborts.
|
|
389
|
+
*/
|
|
390
|
+
export async function provisionHierarchy(deps, items) {
|
|
391
|
+
const ctx = {
|
|
392
|
+
deps,
|
|
393
|
+
memo: new Map(),
|
|
394
|
+
result: {
|
|
395
|
+
epicsCreated: 0,
|
|
396
|
+
featuresCreated: 0,
|
|
397
|
+
linked: 0,
|
|
398
|
+
reparented: 0,
|
|
399
|
+
alreadyCorrect: 0,
|
|
400
|
+
skipped: 0,
|
|
401
|
+
errors: [],
|
|
402
|
+
},
|
|
403
|
+
};
|
|
404
|
+
for (const item of items) {
|
|
405
|
+
try {
|
|
406
|
+
// Defend against malformed ids.
|
|
407
|
+
const numericId = Number(item.id);
|
|
408
|
+
if (!Number.isFinite(numericId) || numericId <= 0) {
|
|
409
|
+
ctx.result.skipped++;
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
const targetFeatureId = await resolveTargetFeature(ctx, item);
|
|
413
|
+
if (targetFeatureId == null) {
|
|
414
|
+
ctx.result.skipped++;
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
const currentParent = item.currentParentId != null ? Number(item.currentParentId) : null;
|
|
418
|
+
// Already correctly parented -> no write.
|
|
419
|
+
if (currentParent === targetFeatureId) {
|
|
420
|
+
ctx.result.alreadyCorrect++;
|
|
421
|
+
continue;
|
|
422
|
+
}
|
|
423
|
+
const addParent = buildParentRelationPatch(deps.organization, deps.project, targetFeatureId);
|
|
424
|
+
if (currentParent == null || !Number.isFinite(currentParent)) {
|
|
425
|
+
// No parent -> just add the link.
|
|
426
|
+
await withRetry(() => deps.client.updateWorkItem(numericId, [addParent]));
|
|
427
|
+
ctx.result.linked++;
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
// Wrong parent -> remove the existing Hierarchy-Reverse relation by its
|
|
431
|
+
// positional index, then add the correct one, in a single PATCH.
|
|
432
|
+
const fetched = await withRetry(() => deps.client.getWorkItem(numericId));
|
|
433
|
+
const idx = parentRelationIndex(fetched);
|
|
434
|
+
const patches = [];
|
|
435
|
+
if (idx >= 0) {
|
|
436
|
+
patches.push({ op: 'remove', path: `/relations/${idx}` });
|
|
437
|
+
}
|
|
438
|
+
patches.push(addParent);
|
|
439
|
+
await withRetry(() => deps.client.updateWorkItem(numericId, patches));
|
|
440
|
+
ctx.result.reparented++;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
catch (err) {
|
|
444
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
445
|
+
ctx.result.errors.push({ workItemId: item.id, message });
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
const r = ctx.result;
|
|
449
|
+
console.log(`[hierarchy] provisioned ${items.length} item(s): ` +
|
|
450
|
+
`epicsCreated=${r.epicsCreated} featuresCreated=${r.featuresCreated} ` +
|
|
451
|
+
`linked=${r.linked} reparented=${r.reparented} alreadyCorrect=${r.alreadyCorrect} ` +
|
|
452
|
+
`skipped=${r.skipped} errors=${r.errors.length}`);
|
|
453
|
+
return ctx.result;
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Backward-compatible wrapper: provision hierarchy from WorkItemRecord orphans.
|
|
457
|
+
* Maps each record to a HierarchyItem, carrying its `parentId` as the current
|
|
458
|
+
* parent so the self-heal path applies. Prefer provisionHierarchy + the sync
|
|
459
|
+
* layer's extractParentId for the canonical (AzDO-sourced) current parent id.
|
|
460
|
+
*/
|
|
461
|
+
export async function provisionHierarchyForOrphans(deps, orphans) {
|
|
462
|
+
const items = orphans.map((o) => ({
|
|
463
|
+
id: o.id,
|
|
464
|
+
kind: o.kind,
|
|
465
|
+
area: o.area,
|
|
466
|
+
currentParentId: o.parentId ?? null,
|
|
467
|
+
}));
|
|
468
|
+
return provisionHierarchy(deps, items);
|
|
469
|
+
}
|
|
470
|
+
//# sourceMappingURL=hierarchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/azureDevOps/hierarchy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { AzdoWorkItem, AzdoFieldPatch } from '../azureDevOps/client.js';
|
|
2
|
+
import type { AzdoSyncConfig } from '../core/types.js';
|
|
3
|
+
import type { WorkItemRecord } from '../workItems/schema.js';
|
|
4
|
+
import type { WorkItemPayload, LayeredState, AzdoFields } from '../core/workItemPayload.js';
|
|
5
|
+
import type { WorkItemKind, WorkItemState, EpicFeatureState, Area } from '../core/workItemModel.js';
|
|
6
|
+
/** Thrown when an AzDO value cannot be mapped to an internal type. */
|
|
7
|
+
export declare class MapperError extends Error {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Maps our logical field display names to their AzDO reference names.
|
|
12
|
+
* Override individual entries via `createAzdoClient` config or pass inline.
|
|
13
|
+
* All values follow the AzDO pattern: 'System.*', 'Microsoft.VSTS.*', or 'Custom.*'.
|
|
14
|
+
*/
|
|
15
|
+
export interface AzdoFieldNames {
|
|
16
|
+
id: string;
|
|
17
|
+
workItemType: string;
|
|
18
|
+
title: string;
|
|
19
|
+
description: string;
|
|
20
|
+
areaPath: string;
|
|
21
|
+
state: string;
|
|
22
|
+
reason: string;
|
|
23
|
+
acceptanceCriteria: string;
|
|
24
|
+
reproSteps: string;
|
|
25
|
+
systemInfo: string;
|
|
26
|
+
severity: string;
|
|
27
|
+
priority: string;
|
|
28
|
+
startDate: string;
|
|
29
|
+
targetDate: string;
|
|
30
|
+
planWritten: string;
|
|
31
|
+
implementationComplete: string;
|
|
32
|
+
reviewPassed: string;
|
|
33
|
+
testsPassing: string;
|
|
34
|
+
docsUpdated: string;
|
|
35
|
+
mergedToDevelop: string;
|
|
36
|
+
assignedTo: string;
|
|
37
|
+
tags: string;
|
|
38
|
+
iterationPath: string;
|
|
39
|
+
operatorLane: string;
|
|
40
|
+
failureReason: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Default reference-name mapping.
|
|
44
|
+
* Callers may spread and override any entry.
|
|
45
|
+
*/
|
|
46
|
+
export declare const DEFAULT_FIELD_NAMES: AzdoFieldNames;
|
|
47
|
+
/**
|
|
48
|
+
* Map AzDO `System.WorkItemType` to our `WorkItemKind`.
|
|
49
|
+
* Throws `MapperError` for unknown type strings.
|
|
50
|
+
*/
|
|
51
|
+
export declare function azdoToWorkItemKind(azdo: AzdoWorkItem): WorkItemKind;
|
|
52
|
+
/**
|
|
53
|
+
* Map AzDO `System.State` to our `WorkItemState` discriminated union.
|
|
54
|
+
* Uses the kind to determine which tier state machine to apply.
|
|
55
|
+
*/
|
|
56
|
+
export declare function azdoToWorkItemState(azdo: AzdoWorkItem, syncConfig?: AzdoSyncConfig): WorkItemState | EpicFeatureState;
|
|
57
|
+
/**
|
|
58
|
+
* Map AzDO area path to our `Area` type.
|
|
59
|
+
* Returns `null` for root-only paths (e.g. 'Enact' with no sub-area).
|
|
60
|
+
*/
|
|
61
|
+
export declare function azdoToArea(azdo: AzdoWorkItem): Area | null;
|
|
62
|
+
/**
|
|
63
|
+
* Build a `LayeredState` from an AzDO work item.
|
|
64
|
+
* Execution snapshot and prSidecar are not present in AzDO — they default to null.
|
|
65
|
+
* The six Boolean fields are read from the custom field reference names.
|
|
66
|
+
*/
|
|
67
|
+
export declare function azdoToLayeredState(azdo: AzdoWorkItem, fieldNames?: AzdoFieldNames, syncConfig?: AzdoSyncConfig): LayeredState;
|
|
68
|
+
/**
|
|
69
|
+
* Map an AzDO work item to a `Partial<WorkItemRecord>`.
|
|
70
|
+
* Only the fields that are present in both systems are populated.
|
|
71
|
+
*/
|
|
72
|
+
export declare function azdoToWorkItemRecord(azdo: AzdoWorkItem, syncConfig?: AzdoSyncConfig): Partial<WorkItemRecord>;
|
|
73
|
+
/**
|
|
74
|
+
* Project an AzDO work item into the flat `AzdoFields` sub-object that gets
|
|
75
|
+
* embedded under `WorkItemPayload.azdoFields`. Pulls every field the board
|
|
76
|
+
* card or detail panel might want to render so the API doesn't need to
|
|
77
|
+
* round-trip back to AzDO on every request.
|
|
78
|
+
*/
|
|
79
|
+
export declare function azdoToAzdoFields(azdo: AzdoWorkItem, fieldNames?: AzdoFieldNames): AzdoFields;
|
|
80
|
+
/**
|
|
81
|
+
* Map an AzDO work item to a full `WorkItemPayload`.
|
|
82
|
+
* Fields that cannot be derived from AzDO alone (worktreeLifecycle, execution snapshot)
|
|
83
|
+
* are set to `null`. Provider-specific fields land under `azdoFields`.
|
|
84
|
+
*/
|
|
85
|
+
export declare function azdoToWorkItemPayload(azdo: AzdoWorkItem, fieldNames?: AzdoFieldNames, syncConfig?: AzdoSyncConfig): WorkItemPayload;
|
|
86
|
+
/**
|
|
87
|
+
* Build AzDO patches to set `System.State` (and optionally `System.Reason`)
|
|
88
|
+
* from a `WorkItemState` or `EpicFeatureState`.
|
|
89
|
+
*/
|
|
90
|
+
export declare function workItemStateToAzdoPatches(state: WorkItemState | EpicFeatureState, syncConfig?: AzdoSyncConfig): AzdoFieldPatch[];
|
|
91
|
+
/**
|
|
92
|
+
* Build AzDO patches from a `LayeredState`.
|
|
93
|
+
* Maps business state + six lifecycle Boolean fields + review/resolution.
|
|
94
|
+
*/
|
|
95
|
+
export declare function layeredStateToAzdoPatches(state: LayeredState, fieldNames?: AzdoFieldNames, syncConfig?: AzdoSyncConfig): AzdoFieldPatch[];
|
|
96
|
+
/**
|
|
97
|
+
* Build the full set of AzDO patches from a `WorkItemPayload`.
|
|
98
|
+
* Patches title, area, and all layered-state fields.
|
|
99
|
+
*/
|
|
100
|
+
export declare function payloadToAzdoPatches(payload: WorkItemPayload, fieldNames?: AzdoFieldNames, syncConfig?: AzdoSyncConfig): AzdoFieldPatch[];
|
|
101
|
+
//# sourceMappingURL=mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/azureDevOps/mapper.ts"],"names":[],"mappings":"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"}
|