@proletariat/cli 0.3.72 → 0.3.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/action/create.js +1 -0
- package/dist/commands/action/create.js.map +1 -1
- package/dist/commands/action/delete.js +1 -1
- package/dist/commands/action/delete.js.map +1 -1
- package/dist/commands/action/run.js +1 -1
- package/dist/commands/action/run.js.map +1 -1
- package/dist/commands/action/show.js +1 -0
- package/dist/commands/action/show.js.map +1 -1
- package/dist/commands/action/update.js +1 -1
- package/dist/commands/action/update.js.map +1 -1
- package/dist/commands/agent/auth.js +4 -0
- package/dist/commands/agent/auth.js.map +1 -1
- package/dist/commands/agent/cleanup.js +1 -1
- package/dist/commands/agent/cleanup.js.map +1 -1
- package/dist/commands/agent/discover.js +1 -0
- package/dist/commands/agent/discover.js.map +1 -1
- package/dist/commands/agent/index.js +2 -0
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/rebuild.js +1 -1
- package/dist/commands/agent/rebuild.js.map +1 -1
- package/dist/commands/agent/remove.js +1 -1
- package/dist/commands/agent/remove.js.map +1 -1
- package/dist/commands/agent/restart.js +1 -1
- package/dist/commands/agent/restart.js.map +1 -1
- package/dist/commands/agent/visit.js +1 -1
- package/dist/commands/agent/visit.js.map +1 -1
- package/dist/commands/asana/connect.js +6 -5
- package/dist/commands/asana/connect.js.map +1 -1
- package/dist/commands/asana/import.js +4 -4
- package/dist/commands/asana/import.js.map +1 -1
- package/dist/commands/asana/sync.js +3 -3
- package/dist/commands/asana/sync.js.map +1 -1
- package/dist/commands/autocomplete/setup.js +2 -1
- package/dist/commands/autocomplete/setup.js.map +1 -1
- package/dist/commands/board/index.js +1 -0
- package/dist/commands/board/index.js.map +1 -1
- package/dist/commands/board/view.js +1 -1
- package/dist/commands/board/view.js.map +1 -1
- package/dist/commands/branch/create.js +1 -1
- package/dist/commands/branch/create.js.map +1 -1
- package/dist/commands/branch/validate.js +2 -0
- package/dist/commands/branch/validate.js.map +1 -1
- package/dist/commands/branch/where.js +1 -0
- package/dist/commands/branch/where.js.map +1 -1
- package/dist/commands/category/create.js +3 -0
- package/dist/commands/category/create.js.map +1 -1
- package/dist/commands/category/delete.js +3 -0
- package/dist/commands/category/delete.js.map +1 -1
- package/dist/commands/category/rename.js +6 -0
- package/dist/commands/category/rename.js.map +1 -1
- package/dist/commands/claude/index.js +5 -5
- package/dist/commands/claude/index.js.map +1 -1
- package/dist/commands/claude/open.js +5 -0
- package/dist/commands/claude/open.js.map +1 -1
- package/dist/commands/commit.js +1 -1
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/config/index.js +6 -1
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/dashboard.js +1 -0
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/diet.js +1 -0
- package/dist/commands/diet.js.map +1 -1
- package/dist/commands/docker/clean.js +2 -0
- package/dist/commands/docker/clean.js.map +1 -1
- package/dist/commands/docker/index.js +1 -0
- package/dist/commands/docker/index.js.map +1 -1
- package/dist/commands/docker/logs.js +6 -0
- package/dist/commands/docker/logs.js.map +1 -1
- package/dist/commands/docker/prune.js +1 -0
- package/dist/commands/docker/prune.js.map +1 -1
- package/dist/commands/docker/restart.js +5 -0
- package/dist/commands/docker/restart.js.map +1 -1
- package/dist/commands/docker/start.js +4 -0
- package/dist/commands/docker/start.js.map +1 -1
- package/dist/commands/docker/stop.js +4 -0
- package/dist/commands/docker/stop.js.map +1 -1
- package/dist/commands/epic/activate.js +1 -1
- package/dist/commands/epic/activate.js.map +1 -1
- package/dist/commands/epic/archive.js +1 -1
- package/dist/commands/epic/archive.js.map +1 -1
- package/dist/commands/epic/create.js +4 -0
- package/dist/commands/epic/create.js.map +1 -1
- package/dist/commands/epic/delete.js +1 -1
- package/dist/commands/epic/delete.js.map +1 -1
- package/dist/commands/epic/move.js +1 -1
- package/dist/commands/epic/move.js.map +1 -1
- package/dist/commands/epic/progress.js +1 -0
- package/dist/commands/epic/progress.js.map +1 -1
- package/dist/commands/epic/project.js +1 -1
- package/dist/commands/epic/project.js.map +1 -1
- package/dist/commands/epic/reorder.js +1 -1
- package/dist/commands/epic/reorder.js.map +1 -1
- package/dist/commands/epic/spec.js +1 -1
- package/dist/commands/epic/spec.js.map +1 -1
- package/dist/commands/epic/ticket.js +1 -1
- package/dist/commands/epic/ticket.js.map +1 -1
- package/dist/commands/epic/view.js +1 -1
- package/dist/commands/epic/view.js.map +1 -1
- package/dist/commands/execution/config.js +7 -1
- package/dist/commands/execution/config.js.map +1 -1
- package/dist/commands/execution/list.js +1 -0
- package/dist/commands/execution/list.js.map +1 -1
- package/dist/commands/execution/logs.js +1 -0
- package/dist/commands/execution/logs.js.map +1 -1
- package/dist/commands/execution/stop.js +2 -0
- package/dist/commands/execution/stop.js.map +1 -1
- package/dist/commands/execution/view.js +3 -1
- package/dist/commands/execution/view.js.map +1 -1
- package/dist/commands/feedback/list.js +2 -0
- package/dist/commands/feedback/list.js.map +1 -1
- package/dist/commands/feedback/submit.js +2 -0
- package/dist/commands/feedback/submit.js.map +1 -1
- package/dist/commands/feedback/view.js +2 -0
- package/dist/commands/feedback/view.js.map +1 -1
- package/dist/commands/gh/login.js +1 -1
- package/dist/commands/gh/login.js.map +1 -1
- package/dist/commands/gh/token.js +1 -1
- package/dist/commands/gh/token.js.map +1 -1
- package/dist/commands/linear/auth.js +4 -4
- package/dist/commands/linear/auth.js.map +1 -1
- package/dist/commands/linear/connect.js +10 -5
- package/dist/commands/linear/connect.js.map +1 -1
- package/dist/commands/linear/import.js +4 -3
- package/dist/commands/linear/import.js.map +1 -1
- package/dist/commands/linear/sync.js +3 -3
- package/dist/commands/linear/sync.js.map +1 -1
- package/dist/commands/link/create.js +1 -1
- package/dist/commands/link/create.js.map +1 -1
- package/dist/commands/link/list.js +1 -1
- package/dist/commands/link/list.js.map +1 -1
- package/dist/commands/link/remove.js +1 -1
- package/dist/commands/link/remove.js.map +1 -1
- package/dist/commands/media/add.js +2 -1
- package/dist/commands/media/add.js.map +1 -1
- package/dist/commands/media/index.js +2 -0
- package/dist/commands/media/index.js.map +1 -1
- package/dist/commands/media/list.js +1 -0
- package/dist/commands/media/list.js.map +1 -1
- package/dist/commands/media/preprocess.js +1 -1
- package/dist/commands/media/preprocess.js.map +1 -1
- package/dist/commands/media/remove.js +2 -1
- package/dist/commands/media/remove.js.map +1 -1
- package/dist/commands/media/show.js +1 -1
- package/dist/commands/media/show.js.map +1 -1
- package/dist/commands/monday/connect.js +4 -4
- package/dist/commands/monday/connect.js.map +1 -1
- package/dist/commands/monday/sync.js +4 -4
- package/dist/commands/monday/sync.js.map +1 -1
- package/dist/commands/new.js +1 -0
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/orchestrator/start.js +2 -0
- package/dist/commands/orchestrator/start.js.map +1 -1
- package/dist/commands/phase/delete.js +1 -1
- package/dist/commands/phase/delete.js.map +1 -1
- package/dist/commands/phase/move.js +1 -1
- package/dist/commands/phase/move.js.map +1 -1
- package/dist/commands/phase/template/delete.js +1 -0
- package/dist/commands/phase/template/delete.js.map +1 -1
- package/dist/commands/phase/update.js +1 -1
- package/dist/commands/phase/update.js.map +1 -1
- package/dist/commands/pmo/init.js +2 -2
- package/dist/commands/pmo/init.js.map +1 -1
- package/dist/commands/pr/checks.js +1 -1
- package/dist/commands/pr/checks.js.map +1 -1
- package/dist/commands/pr/create.js +1 -1
- package/dist/commands/pr/create.js.map +1 -1
- package/dist/commands/pr/index.js +1 -1
- package/dist/commands/pr/index.js.map +1 -1
- package/dist/commands/pr/link.js +3 -3
- package/dist/commands/pr/link.js.map +1 -1
- package/dist/commands/pr/list.js +1 -1
- package/dist/commands/pr/list.js.map +1 -1
- package/dist/commands/pr/merge.js +1 -1
- package/dist/commands/pr/merge.js.map +1 -1
- package/dist/commands/pr/status.js +1 -1
- package/dist/commands/pr/status.js.map +1 -1
- package/dist/commands/priority/add.js +2 -2
- package/dist/commands/priority/add.js.map +1 -1
- package/dist/commands/priority/remove.js +2 -2
- package/dist/commands/priority/remove.js.map +1 -1
- package/dist/commands/priority/set.js +2 -2
- package/dist/commands/priority/set.js.map +1 -1
- package/dist/commands/project/archive.js +1 -1
- package/dist/commands/project/archive.js.map +1 -1
- package/dist/commands/project/create.js +4 -0
- package/dist/commands/project/create.js.map +1 -1
- package/dist/commands/project/delete.js +1 -1
- package/dist/commands/project/delete.js.map +1 -1
- package/dist/commands/project/spec.js +1 -1
- package/dist/commands/project/spec.js.map +1 -1
- package/dist/commands/project/unarchive.js +1 -1
- package/dist/commands/project/unarchive.js.map +1 -1
- package/dist/commands/project/update.js +1 -1
- package/dist/commands/project/update.js.map +1 -1
- package/dist/commands/project/view.js +1 -1
- package/dist/commands/project/view.js.map +1 -1
- package/dist/commands/pull.js +3 -0
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/qa/index.js +4 -4
- package/dist/commands/qa/index.js.map +1 -1
- package/dist/commands/repo/add.js +1 -1
- package/dist/commands/repo/add.js.map +1 -1
- package/dist/commands/repo/create.js +1 -1
- package/dist/commands/repo/create.js.map +1 -1
- package/dist/commands/repo/remove.js +2 -2
- package/dist/commands/repo/remove.js.map +1 -1
- package/dist/commands/repo/view.js +1 -1
- package/dist/commands/repo/view.js.map +1 -1
- package/dist/commands/roadmap/create.js +1 -0
- package/dist/commands/roadmap/create.js.map +1 -1
- package/dist/commands/session/create.js +4 -0
- package/dist/commands/session/create.js.map +1 -1
- package/dist/commands/session/exec.js +4 -0
- package/dist/commands/session/exec.js.map +1 -1
- package/dist/commands/session/health.js +2 -0
- package/dist/commands/session/health.js.map +1 -1
- package/dist/commands/session/inspect.js +3 -0
- package/dist/commands/session/inspect.js.map +1 -1
- package/dist/commands/session/peek.js +1 -0
- package/dist/commands/session/peek.js.map +1 -1
- package/dist/commands/session/restart.js +4 -0
- package/dist/commands/session/restart.js.map +1 -1
- package/dist/commands/shortcut/connect.js +4 -4
- package/dist/commands/shortcut/connect.js.map +1 -1
- package/dist/commands/staff/remove.js +1 -1
- package/dist/commands/staff/remove.js.map +1 -1
- package/dist/commands/status/delete.js +2 -1
- package/dist/commands/status/delete.js.map +1 -1
- package/dist/commands/status/list.js +1 -0
- package/dist/commands/status/list.js.map +1 -1
- package/dist/commands/status/move.js +2 -1
- package/dist/commands/status/move.js.map +1 -1
- package/dist/commands/status/update.js +1 -1
- package/dist/commands/status/update.js.map +1 -1
- package/dist/commands/telemetry/disable.js +1 -0
- package/dist/commands/telemetry/disable.js.map +1 -1
- package/dist/commands/telemetry/enable.js +1 -0
- package/dist/commands/telemetry/enable.js.map +1 -1
- package/dist/commands/telemetry/index.js +1 -0
- package/dist/commands/telemetry/index.js.map +1 -1
- package/dist/commands/template/apply.js +2 -2
- package/dist/commands/template/apply.js.map +1 -1
- package/dist/commands/template/delete.js +1 -0
- package/dist/commands/template/delete.js.map +1 -1
- package/dist/commands/template/save.js +1 -0
- package/dist/commands/template/save.js.map +1 -1
- package/dist/commands/template/update.js +1 -0
- package/dist/commands/template/update.js.map +1 -1
- package/dist/commands/ticket/complete.js +1 -1
- package/dist/commands/ticket/complete.js.map +1 -1
- package/dist/commands/ticket/create.js +14 -4
- package/dist/commands/ticket/create.js.map +1 -1
- package/dist/commands/ticket/delete.js +23 -8
- package/dist/commands/ticket/delete.js.map +1 -1
- package/dist/commands/ticket/edit.js +2 -2
- package/dist/commands/ticket/edit.js.map +1 -1
- package/dist/commands/ticket/link/block.js +1 -1
- package/dist/commands/ticket/link/block.js.map +1 -1
- package/dist/commands/ticket/link/duplicates.js +1 -1
- package/dist/commands/ticket/link/duplicates.js.map +1 -1
- package/dist/commands/ticket/link/relates.js +1 -1
- package/dist/commands/ticket/link/relates.js.map +1 -1
- package/dist/commands/ticket/list.d.ts +0 -8
- package/dist/commands/ticket/list.js +15 -121
- package/dist/commands/ticket/list.js.map +1 -1
- package/dist/commands/ticket/move.js +34 -7
- package/dist/commands/ticket/move.js.map +1 -1
- package/dist/commands/ticket/resolve.js +2 -2
- package/dist/commands/ticket/resolve.js.map +1 -1
- package/dist/commands/ticket/status.js +1 -1
- package/dist/commands/ticket/status.js.map +1 -1
- package/dist/commands/ticket/template/delete.js +1 -0
- package/dist/commands/ticket/template/delete.js.map +1 -1
- package/dist/commands/ticket/template/save.js +1 -0
- package/dist/commands/ticket/template/save.js.map +1 -1
- package/dist/commands/ticket/update.js +1 -0
- package/dist/commands/ticket/update.js.map +1 -1
- package/dist/commands/ticket/view.js +1 -1
- package/dist/commands/ticket/view.js.map +1 -1
- package/dist/commands/tools/add.js +6 -0
- package/dist/commands/tools/add.js.map +1 -1
- package/dist/commands/tools/remove.js +3 -0
- package/dist/commands/tools/remove.js.map +1 -1
- package/dist/commands/trello/configure.js +5 -5
- package/dist/commands/trello/configure.js.map +1 -1
- package/dist/commands/trello/import.js +4 -4
- package/dist/commands/trello/import.js.map +1 -1
- package/dist/commands/trello/sync.js +3 -3
- package/dist/commands/trello/sync.js.map +1 -1
- package/dist/commands/version/bump.js +3 -0
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/work/complete.js +34 -1
- package/dist/commands/work/complete.js.map +1 -1
- package/dist/commands/work/hooks/add.js +7 -0
- package/dist/commands/work/hooks/add.js.map +1 -1
- package/dist/commands/work/hooks/list.js +2 -0
- package/dist/commands/work/hooks/list.js.map +1 -1
- package/dist/commands/work/hooks/remove.js +4 -0
- package/dist/commands/work/hooks/remove.js.map +1 -1
- package/dist/commands/work/hooks/toggle.js +4 -0
- package/dist/commands/work/hooks/toggle.js.map +1 -1
- package/dist/commands/work/ready.js +44 -5
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/resolve.js +1 -1
- package/dist/commands/work/resolve.js.map +1 -1
- package/dist/commands/work/review.js +3 -1
- package/dist/commands/work/review.js.map +1 -1
- package/dist/commands/work/revise.js +1 -1
- package/dist/commands/work/revise.js.map +1 -1
- package/dist/commands/work/source/set.js +3 -0
- package/dist/commands/work/source/set.js.map +1 -1
- package/dist/commands/work/source.js +1 -0
- package/dist/commands/work/source.js.map +1 -1
- package/dist/commands/work/spawn.js +2 -1
- package/dist/commands/work/spawn.js.map +1 -1
- package/dist/commands/work/start.js +71 -18
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/watch.js +1 -1
- package/dist/commands/work/watch.js.map +1 -1
- package/dist/commands/workflow/delete.js +1 -1
- package/dist/commands/workflow/delete.js.map +1 -1
- package/dist/commands/workflow/setup.js +5 -0
- package/dist/commands/workflow/setup.js.map +1 -1
- package/dist/commands/workflow/switch.js +1 -1
- package/dist/commands/workflow/switch.js.map +1 -1
- package/dist/commands/workflow/view.js +1 -1
- package/dist/commands/workflow/view.js.map +1 -1
- package/dist/commands/workflow-rule/create.js +1 -0
- package/dist/commands/workflow-rule/create.js.map +1 -1
- package/dist/commands/workflow-rule/delete.js +1 -1
- package/dist/commands/workflow-rule/delete.js.map +1 -1
- package/dist/commands/workflow-rule/update.js +1 -1
- package/dist/commands/workflow-rule/update.js.map +1 -1
- package/dist/commands/workspace/add.js +5 -0
- package/dist/commands/workspace/add.js.map +1 -1
- package/dist/commands/workspace/remove.js +1 -1
- package/dist/commands/workspace/remove.js.map +1 -1
- package/dist/hooks/init.js +35 -7
- package/dist/hooks/init.js.map +1 -1
- package/dist/hooks/postrun.d.ts +6 -4
- package/dist/hooks/postrun.js +25 -18
- package/dist/hooks/postrun.js.map +1 -1
- package/dist/lib/execution/commit-validation.d.ts +58 -0
- package/dist/lib/execution/commit-validation.js +252 -0
- package/dist/lib/execution/commit-validation.js.map +1 -0
- package/dist/lib/execution/config.js +3 -0
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/storage.d.ts +20 -3
- package/dist/lib/execution/storage.js +27 -6
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/flags/resolver.js +3 -6
- package/dist/lib/flags/resolver.js.map +1 -1
- package/dist/lib/linear/client.d.ts +4 -0
- package/dist/lib/linear/client.js +12 -0
- package/dist/lib/linear/client.js.map +1 -1
- package/dist/lib/onboarding/wizard.js +3 -3
- package/dist/lib/onboarding/wizard.js.map +1 -1
- package/dist/lib/pmo/base-command.d.ts +21 -1
- package/dist/lib/pmo/base-command.js +28 -4
- package/dist/lib/pmo/base-command.js.map +1 -1
- package/dist/lib/prompt-command.js +1 -1
- package/dist/lib/prompt-command.js.map +1 -1
- package/dist/lib/prompt-json.d.ts +19 -11
- package/dist/lib/prompt-json.js +32 -17
- package/dist/lib/prompt-json.js.map +1 -1
- package/dist/lib/providers/index.d.ts +11 -0
- package/dist/lib/providers/index.js +11 -0
- package/dist/lib/providers/index.js.map +1 -0
- package/dist/lib/providers/linear-provider.d.ts +26 -0
- package/dist/lib/providers/linear-provider.js +339 -0
- package/dist/lib/providers/linear-provider.js.map +1 -0
- package/dist/lib/providers/pmo-provider.d.ts +20 -0
- package/dist/lib/providers/pmo-provider.js +83 -0
- package/dist/lib/providers/pmo-provider.js.map +1 -0
- package/dist/lib/providers/resolver.d.ts +44 -0
- package/dist/lib/providers/resolver.js +82 -0
- package/dist/lib/providers/resolver.js.map +1 -0
- package/dist/lib/providers/types.d.ts +136 -0
- package/dist/lib/providers/types.js +12 -0
- package/dist/lib/providers/types.js.map +1 -0
- package/dist/lib/update-prompt.d.ts +3 -3
- package/dist/lib/update-prompt.js +15 -10
- package/dist/lib/update-prompt.js.map +1 -1
- package/dist/lib/work-lifecycle/index.d.ts +1 -0
- package/dist/lib/work-lifecycle/index.js +1 -0
- package/dist/lib/work-lifecycle/index.js.map +1 -1
- package/dist/lib/work-lifecycle/post-execution.d.ts +40 -9
- package/dist/lib/work-lifecycle/post-execution.js +61 -9
- package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
- package/oclif.manifest.json +1886 -1886
- package/package.json +1 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket Provider Interface
|
|
3
|
+
*
|
|
4
|
+
* Unified interface for all ticket operations across providers.
|
|
5
|
+
* Whether the ticket lives in local PMO, Linear, Jira, or another system,
|
|
6
|
+
* the same provider interface routes to the right backend.
|
|
7
|
+
*
|
|
8
|
+
* The local PMO is just the default provider for users without integrations,
|
|
9
|
+
* not a cache layer.
|
|
10
|
+
*/
|
|
11
|
+
import type { StateCategory, Ticket, TicketFilter, CreateTicketInput } from '../pmo/types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Supported provider names for ticket operations.
|
|
14
|
+
*/
|
|
15
|
+
export type TicketProviderName = 'pmo' | 'linear' | 'jira' | 'asana' | 'shortcut' | 'trello';
|
|
16
|
+
/**
|
|
17
|
+
* Generic result of a provider operation.
|
|
18
|
+
*/
|
|
19
|
+
export interface ProviderResult {
|
|
20
|
+
/** Whether the operation succeeded */
|
|
21
|
+
success: boolean;
|
|
22
|
+
/** The provider that handled the operation */
|
|
23
|
+
provider: TicketProviderName;
|
|
24
|
+
/** Error message if the operation failed */
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Result of a provider moveTicket operation.
|
|
29
|
+
*/
|
|
30
|
+
export interface ProviderMoveResult extends ProviderResult {
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result of a provider deleteTicket operation.
|
|
34
|
+
*/
|
|
35
|
+
export interface ProviderDeleteResult extends ProviderResult {
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Result of a provider listTickets operation.
|
|
39
|
+
*/
|
|
40
|
+
export interface ProviderListResult extends ProviderResult {
|
|
41
|
+
/** Tickets returned by the provider */
|
|
42
|
+
tickets: Ticket[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Result of a provider createTicket operation.
|
|
46
|
+
*/
|
|
47
|
+
export interface ProviderCreateResult extends ProviderResult {
|
|
48
|
+
/** The created ticket */
|
|
49
|
+
ticket?: Ticket;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Result of a provider getTicket operation.
|
|
53
|
+
*/
|
|
54
|
+
export interface ProviderGetResult extends ProviderResult {
|
|
55
|
+
/** The retrieved ticket */
|
|
56
|
+
ticket?: Ticket | null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Ticket provider interface — same contract for all backends.
|
|
60
|
+
*
|
|
61
|
+
* Implementations:
|
|
62
|
+
* - PMOTicketProvider: writes to local SQLite (emits ticket:status_changed)
|
|
63
|
+
* - LinearTicketProvider: calls Linear API, then updates local PMO
|
|
64
|
+
*/
|
|
65
|
+
export interface TicketProvider {
|
|
66
|
+
/** Which provider this is */
|
|
67
|
+
readonly name: TicketProviderName;
|
|
68
|
+
/**
|
|
69
|
+
* Move a ticket to a new state.
|
|
70
|
+
*
|
|
71
|
+
* @param ticketId - The PMO ticket ID (e.g., "TKT-142")
|
|
72
|
+
* @param newState - The target state name (e.g., "Review")
|
|
73
|
+
* @returns Result of the move operation
|
|
74
|
+
*/
|
|
75
|
+
moveTicket(ticketId: string, newState: string): Promise<ProviderMoveResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Delete a ticket.
|
|
78
|
+
*
|
|
79
|
+
* @param ticketId - The PMO ticket ID (e.g., "TKT-142")
|
|
80
|
+
* @returns Result of the delete operation
|
|
81
|
+
*/
|
|
82
|
+
deleteTicket(ticketId: string): Promise<ProviderDeleteResult>;
|
|
83
|
+
/**
|
|
84
|
+
* List tickets, optionally filtered.
|
|
85
|
+
*
|
|
86
|
+
* @param projectId - Optional project scope
|
|
87
|
+
* @param filter - Optional filters (column, priority, search, etc.)
|
|
88
|
+
* @returns Result with tickets array
|
|
89
|
+
*/
|
|
90
|
+
listTickets(projectId?: string, filter?: TicketFilter): Promise<ProviderListResult>;
|
|
91
|
+
/**
|
|
92
|
+
* Create a ticket.
|
|
93
|
+
*
|
|
94
|
+
* @param projectId - The project to create the ticket in
|
|
95
|
+
* @param input - Ticket creation input
|
|
96
|
+
* @returns Result with the created ticket
|
|
97
|
+
*/
|
|
98
|
+
createTicket(projectId: string, input: CreateTicketInput): Promise<ProviderCreateResult>;
|
|
99
|
+
/**
|
|
100
|
+
* Get a single ticket by ID.
|
|
101
|
+
*
|
|
102
|
+
* @param ticketId - The ticket ID
|
|
103
|
+
* @returns Result with the ticket (or null if not found)
|
|
104
|
+
*/
|
|
105
|
+
getTicket(ticketId: string): Promise<ProviderGetResult>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Context needed to resolve and create a ticket provider.
|
|
109
|
+
*/
|
|
110
|
+
export interface ProviderContext {
|
|
111
|
+
/** Ticket's external source (from metadata), e.g., 'linear' */
|
|
112
|
+
externalSource?: string | null;
|
|
113
|
+
/** Ticket's external ID in the source system */
|
|
114
|
+
externalId?: string | null;
|
|
115
|
+
/** Ticket's project ID in the PMO */
|
|
116
|
+
projectId?: string | null;
|
|
117
|
+
/** Ticket's current status category */
|
|
118
|
+
statusCategory?: StateCategory | null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Storage interface required by providers.
|
|
122
|
+
* SQLiteStorage satisfies this interface.
|
|
123
|
+
*/
|
|
124
|
+
export interface ProviderStorage {
|
|
125
|
+
getTicket: (id: string) => Promise<Ticket | null>;
|
|
126
|
+
getProjectBoard: (projectId: string) => Promise<{
|
|
127
|
+
columns: Array<{
|
|
128
|
+
name: string;
|
|
129
|
+
}>;
|
|
130
|
+
} | null>;
|
|
131
|
+
moveTicket: (projectId: string, ticketId: string, columnName: string, position?: number) => Promise<Ticket>;
|
|
132
|
+
deleteTicket: (id: string) => Promise<void>;
|
|
133
|
+
listTickets: (projectId: string | undefined, filter?: TicketFilter) => Promise<Ticket[]>;
|
|
134
|
+
createTicket: (projectId: string, input: CreateTicketInput) => Promise<Ticket>;
|
|
135
|
+
getDatabase: () => import('better-sqlite3').Database;
|
|
136
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket Provider Interface
|
|
3
|
+
*
|
|
4
|
+
* Unified interface for all ticket operations across providers.
|
|
5
|
+
* Whether the ticket lives in local PMO, Linear, Jira, or another system,
|
|
6
|
+
* the same provider interface routes to the right backend.
|
|
7
|
+
*
|
|
8
|
+
* The local PMO is just the default provider for users without integrations,
|
|
9
|
+
* not a cache layer.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -48,8 +48,8 @@ export declare function showUpdatePrompt(info: UpdateInfo): Promise<UpdateAction
|
|
|
48
48
|
* 3. If an update is available, show interactive prompt
|
|
49
49
|
* 4. Handle the user's choice
|
|
50
50
|
*
|
|
51
|
-
* Returns
|
|
52
|
-
*
|
|
51
|
+
* Returns 'continue' if the command should proceed, or 'stop' if the
|
|
52
|
+
* init hook should halt (e.g., after an update attempt).
|
|
53
53
|
*/
|
|
54
|
-
export declare function handleUpdatePrompt(info: UpdateInfo): Promise<
|
|
54
|
+
export declare function handleUpdatePrompt(info: UpdateInfo): Promise<'continue' | 'stop'>;
|
|
55
55
|
export {};
|
|
@@ -129,8 +129,10 @@ export async function showUpdatePrompt(info) {
|
|
|
129
129
|
// Action handlers
|
|
130
130
|
// ---------------------------------------------------------------------------
|
|
131
131
|
/**
|
|
132
|
-
* Execute the update command, then
|
|
132
|
+
* Execute the update command, then signal the caller to stop.
|
|
133
133
|
* Runs synchronously so the user sees output in real time.
|
|
134
|
+
* Returns 'updated' on success or 'failed' on failure, so the
|
|
135
|
+
* init hook can exit cleanly through oclif lifecycle.
|
|
134
136
|
*/
|
|
135
137
|
async function executeUpdate(info) {
|
|
136
138
|
console.log('');
|
|
@@ -143,7 +145,7 @@ async function executeUpdate(info) {
|
|
|
143
145
|
});
|
|
144
146
|
console.log('');
|
|
145
147
|
console.log('Update complete! Run your command again to use the new version.');
|
|
146
|
-
|
|
148
|
+
return 'updated';
|
|
147
149
|
}
|
|
148
150
|
catch {
|
|
149
151
|
console.error('');
|
|
@@ -153,7 +155,7 @@ async function executeUpdate(info) {
|
|
|
153
155
|
if (info.packageManager === 'brew' && info.staleTap?.isStale) {
|
|
154
156
|
await printStaleTapGuidance();
|
|
155
157
|
}
|
|
156
|
-
|
|
158
|
+
return 'failed';
|
|
157
159
|
}
|
|
158
160
|
}
|
|
159
161
|
// ---------------------------------------------------------------------------
|
|
@@ -166,23 +168,25 @@ async function executeUpdate(info) {
|
|
|
166
168
|
* 3. If an update is available, show interactive prompt
|
|
167
169
|
* 4. Handle the user's choice
|
|
168
170
|
*
|
|
169
|
-
* Returns
|
|
170
|
-
*
|
|
171
|
+
* Returns 'continue' if the command should proceed, or 'stop' if the
|
|
172
|
+
* init hook should halt (e.g., after an update attempt).
|
|
171
173
|
*/
|
|
172
174
|
export async function handleUpdatePrompt(info) {
|
|
173
175
|
if (shouldSuppressPrompt())
|
|
174
|
-
return;
|
|
176
|
+
return 'continue';
|
|
175
177
|
// Show stale tap guidance when detected (even if no version update is cached)
|
|
176
178
|
if (info.staleTap?.isStale) {
|
|
177
179
|
await printStaleTapGuidance();
|
|
178
180
|
}
|
|
179
181
|
if (!info.updateAvailable)
|
|
180
|
-
return;
|
|
182
|
+
return 'continue';
|
|
181
183
|
const action = await showUpdatePrompt(info);
|
|
182
184
|
switch (action) {
|
|
183
|
-
case 'update':
|
|
184
|
-
await executeUpdate(info);
|
|
185
|
-
|
|
185
|
+
case 'update': {
|
|
186
|
+
const result = await executeUpdate(info);
|
|
187
|
+
process.exitCode = result === 'updated' ? 0 : 1;
|
|
188
|
+
return 'stop';
|
|
189
|
+
}
|
|
186
190
|
case 'skip':
|
|
187
191
|
// Session-only dismiss — do nothing, just continue
|
|
188
192
|
break;
|
|
@@ -192,5 +196,6 @@ export async function handleUpdatePrompt(info) {
|
|
|
192
196
|
}
|
|
193
197
|
break;
|
|
194
198
|
}
|
|
199
|
+
return 'continue';
|
|
195
200
|
}
|
|
196
201
|
//# sourceMappingURL=update-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-prompt.js","sourceRoot":"","sources":["../../src/lib/update-prompt.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"update-prompt.js","sourceRoot":"","sources":["../../src/lib/update-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,6 @@ export type { WorkEventSource, WorkStartedEvent, WorkStatusChangedEvent, WorkPRC
|
|
|
9
9
|
export { WorkLifecycleAdapter, initWorkLifecycleAdapter, stopWorkLifecycleAdapter, } from './adapter.js';
|
|
10
10
|
export { initHookManager, stopHookManager, } from './hooks/index.js';
|
|
11
11
|
export { handlePostExecutionTransition, type PostExecutionContext, type PostExecutionResult, } from './post-execution.js';
|
|
12
|
+
export { validateCommits, tryValidateCommits, type CommitValidationResult, } from '../execution/commit-validation.js';
|
|
12
13
|
export { WorkflowRuleEvaluator, initWorkflowRuleEvaluator, stopWorkflowRuleEvaluator, } from './rule-evaluator.js';
|
|
13
14
|
export { ActionChainingHandler, initActionChaining, stopActionChaining, } from './action-chaining.js';
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
export { WorkLifecycleAdapter, initWorkLifecycleAdapter, stopWorkLifecycleAdapter, } from './adapter.js';
|
|
9
9
|
export { initHookManager, stopHookManager, } from './hooks/index.js';
|
|
10
10
|
export { handlePostExecutionTransition, } from './post-execution.js';
|
|
11
|
+
export { validateCommits, tryValidateCommits, } from '../execution/commit-validation.js';
|
|
11
12
|
export { WorkflowRuleEvaluator, initWorkflowRuleEvaluator, stopWorkflowRuleEvaluator, } from './rule-evaluator.js';
|
|
12
13
|
export { ActionChainingHandler, initActionChaining, stopActionChaining, } from './action-chaining.js';
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,6BAA6B,GAG9B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,6BAA6B,GAG9B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,eAAe,EACf,kBAAkB,GAEnB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAA"}
|
|
@@ -5,22 +5,47 @@
|
|
|
5
5
|
* Primary use case: when the implement action completes and a PR was created,
|
|
6
6
|
* automatically move the ticket from In Progress to Review.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Includes commit validation (PRLT-984): before auto-transitioning, checks that
|
|
9
|
+
* meaningful code was committed on the branch. Prevents agents that only wrote
|
|
10
|
+
* boilerplate (README) from being marked as ready for review.
|
|
11
|
+
*
|
|
12
|
+
* Uses the provider abstraction to write directly to the configured provider
|
|
13
|
+
* (Linear, Jira, etc.) — not through the local PMO as a cache layer.
|
|
14
|
+
* The local PMO is just the default provider for users without integrations.
|
|
11
15
|
*/
|
|
12
16
|
import Database from 'better-sqlite3';
|
|
13
17
|
import type { StateCategory } from '../pmo/types.js';
|
|
18
|
+
import type { ProviderStorage } from '../providers/types.js';
|
|
19
|
+
import { type CommitValidationResult } from '../execution/commit-validation.js';
|
|
14
20
|
export interface PostExecutionContext {
|
|
15
21
|
ticketId: string;
|
|
16
22
|
actionId?: string;
|
|
23
|
+
/** Agent name — used to resolve the agent's repository for commit validation */
|
|
24
|
+
agentName?: string;
|
|
25
|
+
/** Branch name — used for commit validation */
|
|
26
|
+
branch?: string;
|
|
27
|
+
/** Agent directory path — used to find the git repository */
|
|
28
|
+
agentDir?: string;
|
|
29
|
+
/** Repo worktree names within agentDir */
|
|
30
|
+
repoWorktrees?: string[];
|
|
17
31
|
}
|
|
18
32
|
export interface PostExecutionResult {
|
|
19
33
|
transitioned: boolean;
|
|
20
34
|
fromState?: string;
|
|
21
35
|
toState?: string;
|
|
36
|
+
/** Which provider handled the transition */
|
|
37
|
+
provider?: string;
|
|
38
|
+
/** Error from the provider (transition may have partially succeeded) */
|
|
39
|
+
providerError?: string;
|
|
40
|
+
/** Commit validation result (PRLT-984) — present when validation was attempted */
|
|
41
|
+
validation?: CommitValidationResult;
|
|
42
|
+
/** True if the transition was blocked by commit validation */
|
|
43
|
+
blockedByValidation?: boolean;
|
|
22
44
|
}
|
|
23
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Minimal storage interface for post-execution transitions.
|
|
47
|
+
* @deprecated Use ProviderStorage from providers/types.ts instead.
|
|
48
|
+
*/
|
|
24
49
|
export interface PostExecutionStorage {
|
|
25
50
|
getTicket: (id: string) => Promise<{
|
|
26
51
|
id: string;
|
|
@@ -42,13 +67,19 @@ export interface PostExecutionStorage {
|
|
|
42
67
|
* When an execution completes and the ticket:
|
|
43
68
|
* 1. Is in a "started" category (e.g., In Progress)
|
|
44
69
|
* 2. Has a PR URL in its metadata
|
|
70
|
+
* 3. Has meaningful code committed (not just boilerplate) — PRLT-984
|
|
71
|
+
*
|
|
72
|
+
* Then automatically move the ticket to the Review column via the appropriate
|
|
73
|
+
* provider (Linear, Jira, or local PMO).
|
|
45
74
|
*
|
|
46
|
-
*
|
|
47
|
-
* If
|
|
75
|
+
* Provider resolution:
|
|
76
|
+
* - If the ticket has an external_source (e.g., 'linear') and that provider
|
|
77
|
+
* is configured, write directly to that provider's API.
|
|
78
|
+
* - Otherwise, write to the local PMO (default for users without integrations).
|
|
48
79
|
*
|
|
49
|
-
* @param context - Execution context with ticket and optional action info
|
|
80
|
+
* @param context - Execution context with ticket and optional action/agent info
|
|
50
81
|
* @param storage - PMO storage instance for ticket operations
|
|
51
|
-
* @param db - Database for work column settings
|
|
82
|
+
* @param db - Database for work column settings and provider config
|
|
52
83
|
* @returns Result indicating whether a transition occurred
|
|
53
84
|
*/
|
|
54
|
-
export declare function handlePostExecutionTransition(context: PostExecutionContext, storage: PostExecutionStorage, db: Database.Database): Promise<PostExecutionResult>;
|
|
85
|
+
export declare function handlePostExecutionTransition(context: PostExecutionContext, storage: PostExecutionStorage | ProviderStorage, db: Database.Database): Promise<PostExecutionResult>;
|
|
@@ -5,24 +5,36 @@
|
|
|
5
5
|
* Primary use case: when the implement action completes and a PR was created,
|
|
6
6
|
* automatically move the ticket from In Progress to Review.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Includes commit validation (PRLT-984): before auto-transitioning, checks that
|
|
9
|
+
* meaningful code was committed on the branch. Prevents agents that only wrote
|
|
10
|
+
* boilerplate (README) from being marked as ready for review.
|
|
11
|
+
*
|
|
12
|
+
* Uses the provider abstraction to write directly to the configured provider
|
|
13
|
+
* (Linear, Jira, etc.) — not through the local PMO as a cache layer.
|
|
14
|
+
* The local PMO is just the default provider for users without integrations.
|
|
11
15
|
*/
|
|
12
16
|
import { getWorkColumnSetting, findColumnByName } from '../pmo/utils.js';
|
|
17
|
+
import { resolveTicketProvider } from '../providers/resolver.js';
|
|
18
|
+
import { tryValidateCommits } from '../execution/commit-validation.js';
|
|
13
19
|
/**
|
|
14
20
|
* Check if a completed execution should trigger an automatic state transition.
|
|
15
21
|
*
|
|
16
22
|
* When an execution completes and the ticket:
|
|
17
23
|
* 1. Is in a "started" category (e.g., In Progress)
|
|
18
24
|
* 2. Has a PR URL in its metadata
|
|
25
|
+
* 3. Has meaningful code committed (not just boilerplate) — PRLT-984
|
|
26
|
+
*
|
|
27
|
+
* Then automatically move the ticket to the Review column via the appropriate
|
|
28
|
+
* provider (Linear, Jira, or local PMO).
|
|
19
29
|
*
|
|
20
|
-
*
|
|
21
|
-
* If
|
|
30
|
+
* Provider resolution:
|
|
31
|
+
* - If the ticket has an external_source (e.g., 'linear') and that provider
|
|
32
|
+
* is configured, write directly to that provider's API.
|
|
33
|
+
* - Otherwise, write to the local PMO (default for users without integrations).
|
|
22
34
|
*
|
|
23
|
-
* @param context - Execution context with ticket and optional action info
|
|
35
|
+
* @param context - Execution context with ticket and optional action/agent info
|
|
24
36
|
* @param storage - PMO storage instance for ticket operations
|
|
25
|
-
* @param db - Database for work column settings
|
|
37
|
+
* @param db - Database for work column settings and provider config
|
|
26
38
|
* @returns Result indicating whether a transition occurred
|
|
27
39
|
*/
|
|
28
40
|
export async function handlePostExecutionTransition(context, storage, db) {
|
|
@@ -40,6 +52,30 @@ export async function handlePostExecutionTransition(context, storage, db) {
|
|
|
40
52
|
if (!prUrl) {
|
|
41
53
|
return { transitioned: false };
|
|
42
54
|
}
|
|
55
|
+
// PRLT-984: Validate that meaningful code was committed before transitioning.
|
|
56
|
+
// If agent info is available (branch + agentDir), run commit validation.
|
|
57
|
+
// If validation fails, block the auto-transition.
|
|
58
|
+
let validation;
|
|
59
|
+
if (context.branch && context.agentDir) {
|
|
60
|
+
try {
|
|
61
|
+
const result = tryValidateCommits(context.agentDir, context.branch, context.repoWorktrees);
|
|
62
|
+
if (result) {
|
|
63
|
+
validation = result;
|
|
64
|
+
if (!result.passed) {
|
|
65
|
+
return {
|
|
66
|
+
transitioned: false,
|
|
67
|
+
fromState: ticket.statusName,
|
|
68
|
+
validation,
|
|
69
|
+
blockedByValidation: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Non-fatal: validation failure shouldn't block everything.
|
|
76
|
+
// If we can't validate, allow the transition to proceed.
|
|
77
|
+
}
|
|
78
|
+
}
|
|
43
79
|
// Get the Review column name
|
|
44
80
|
const targetColumnName = getWorkColumnSetting(db, 'review');
|
|
45
81
|
// Get board columns to find the review column
|
|
@@ -56,13 +92,29 @@ export async function handlePostExecutionTransition(context, storage, db) {
|
|
|
56
92
|
if (ticket.statusName === reviewColumn) {
|
|
57
93
|
return { transitioned: false };
|
|
58
94
|
}
|
|
59
|
-
//
|
|
95
|
+
// Resolve the appropriate provider for this ticket
|
|
96
|
+
// Cast to ProviderStorage — at runtime the actual object is SQLiteStorage
|
|
97
|
+
// which implements the full interface. For post-execution, only moveTicket is used.
|
|
98
|
+
const provider = resolveTicketProvider(context.ticketId, ticket.projectId, db, storage, ticket.metadata);
|
|
99
|
+
// Move ticket via the provider
|
|
60
100
|
const previousState = ticket.statusName;
|
|
61
|
-
await
|
|
101
|
+
const moveResult = await provider.moveTicket(context.ticketId, reviewColumn);
|
|
102
|
+
if (!moveResult.success) {
|
|
103
|
+
return {
|
|
104
|
+
transitioned: false,
|
|
105
|
+
fromState: previousState,
|
|
106
|
+
toState: reviewColumn,
|
|
107
|
+
provider: moveResult.provider,
|
|
108
|
+
providerError: moveResult.error,
|
|
109
|
+
validation,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
62
112
|
return {
|
|
63
113
|
transitioned: true,
|
|
64
114
|
fromState: previousState,
|
|
65
115
|
toState: reviewColumn,
|
|
116
|
+
provider: moveResult.provider,
|
|
117
|
+
validation,
|
|
66
118
|
};
|
|
67
119
|
}
|
|
68
120
|
//# sourceMappingURL=post-execution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-execution.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/post-execution.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"post-execution.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/post-execution.ts"],"names":[],"mappings":"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"}
|