@chief-clancy/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/board/azdo/api/api.d.ts +95 -0
- package/dist/board/azdo/api/api.d.ts.map +1 -0
- package/dist/board/azdo/api/api.js +173 -0
- package/dist/board/azdo/api/api.js.map +1 -0
- package/dist/board/azdo/api/helpers.d.ts +89 -0
- package/dist/board/azdo/api/helpers.d.ts.map +1 -0
- package/dist/board/azdo/api/helpers.js +133 -0
- package/dist/board/azdo/api/helpers.js.map +1 -0
- package/dist/board/azdo/api/index.d.ts +5 -0
- package/dist/board/azdo/api/index.d.ts.map +1 -0
- package/dist/board/azdo/api/index.js +3 -0
- package/dist/board/azdo/api/index.js.map +1 -0
- package/dist/board/azdo/azdo-board.d.ts +12 -0
- package/dist/board/azdo/azdo-board.d.ts.map +1 -0
- package/dist/board/azdo/azdo-board.js +104 -0
- package/dist/board/azdo/azdo-board.js.map +1 -0
- package/dist/board/azdo/index.d.ts +3 -0
- package/dist/board/azdo/index.d.ts.map +1 -0
- package/dist/board/azdo/index.js +3 -0
- package/dist/board/azdo/index.js.map +1 -0
- package/dist/board/azdo/labels/index.d.ts +2 -0
- package/dist/board/azdo/labels/index.d.ts.map +1 -0
- package/dist/board/azdo/labels/index.js +2 -0
- package/dist/board/azdo/labels/index.js.map +1 -0
- package/dist/board/azdo/labels/labels.d.ts +27 -0
- package/dist/board/azdo/labels/labels.d.ts.map +1 -0
- package/dist/board/azdo/labels/labels.js +64 -0
- package/dist/board/azdo/labels/labels.js.map +1 -0
- package/dist/board/azdo/relations/index.d.ts +2 -0
- package/dist/board/azdo/relations/index.d.ts.map +1 -0
- package/dist/board/azdo/relations/index.js +2 -0
- package/dist/board/azdo/relations/index.js.map +1 -0
- package/dist/board/azdo/relations/relations.d.ts +37 -0
- package/dist/board/azdo/relations/relations.d.ts.map +1 -0
- package/dist/board/azdo/relations/relations.js +109 -0
- package/dist/board/azdo/relations/relations.js.map +1 -0
- package/dist/board/detect-board.d.ts +28 -0
- package/dist/board/detect-board.d.ts.map +1 -0
- package/dist/board/detect-board.js +80 -0
- package/dist/board/detect-board.js.map +1 -0
- package/dist/board/factory/factory.d.ts +18 -0
- package/dist/board/factory/factory.d.ts.map +1 -0
- package/dist/board/factory/factory.js +34 -0
- package/dist/board/factory/factory.js.map +1 -0
- package/dist/board/factory/index.d.ts +2 -0
- package/dist/board/factory/index.d.ts.map +1 -0
- package/dist/board/factory/index.js +2 -0
- package/dist/board/factory/index.js.map +1 -0
- package/dist/board/github/api/api.d.ts +86 -0
- package/dist/board/github/api/api.d.ts.map +1 -0
- package/dist/board/github/api/api.js +161 -0
- package/dist/board/github/api/api.js.map +1 -0
- package/dist/board/github/api/index.d.ts +3 -0
- package/dist/board/github/api/index.d.ts.map +1 -0
- package/dist/board/github/api/index.js +2 -0
- package/dist/board/github/api/index.js.map +1 -0
- package/dist/board/github/github-board.d.ts +19 -0
- package/dist/board/github/github-board.d.ts.map +1 -0
- package/dist/board/github/github-board.js +104 -0
- package/dist/board/github/github-board.js.map +1 -0
- package/dist/board/github/index.d.ts +3 -0
- package/dist/board/github/index.d.ts.map +1 -0
- package/dist/board/github/index.js +3 -0
- package/dist/board/github/index.js.map +1 -0
- package/dist/board/github/labels/index.d.ts +2 -0
- package/dist/board/github/labels/index.d.ts.map +1 -0
- package/dist/board/github/labels/index.js +2 -0
- package/dist/board/github/labels/index.js.map +1 -0
- package/dist/board/github/labels/labels.d.ts +42 -0
- package/dist/board/github/labels/labels.d.ts.map +1 -0
- package/dist/board/github/labels/labels.js +93 -0
- package/dist/board/github/labels/labels.js.map +1 -0
- package/dist/board/github/relations/index.d.ts +2 -0
- package/dist/board/github/relations/index.d.ts.map +1 -0
- package/dist/board/github/relations/index.js +2 -0
- package/dist/board/github/relations/index.js.map +1 -0
- package/dist/board/github/relations/relations.d.ts +54 -0
- package/dist/board/github/relations/relations.d.ts.map +1 -0
- package/dist/board/github/relations/relations.js +152 -0
- package/dist/board/github/relations/relations.js.map +1 -0
- package/dist/board/index.d.ts +2 -0
- package/dist/board/index.d.ts.map +1 -0
- package/dist/board/index.js +2 -0
- package/dist/board/index.js.map +1 -0
- package/dist/board/jira/api/api.d.ts +129 -0
- package/dist/board/jira/api/api.d.ts.map +1 -0
- package/dist/board/jira/api/api.js +207 -0
- package/dist/board/jira/api/api.js.map +1 -0
- package/dist/board/jira/api/index.d.ts +3 -0
- package/dist/board/jira/api/index.d.ts.map +1 -0
- package/dist/board/jira/api/index.js +2 -0
- package/dist/board/jira/api/index.js.map +1 -0
- package/dist/board/jira/index.d.ts +3 -0
- package/dist/board/jira/index.d.ts.map +1 -0
- package/dist/board/jira/index.js +3 -0
- package/dist/board/jira/index.js.map +1 -0
- package/dist/board/jira/jira-board.d.ts +12 -0
- package/dist/board/jira/jira-board.d.ts.map +1 -0
- package/dist/board/jira/jira-board.js +112 -0
- package/dist/board/jira/jira-board.js.map +1 -0
- package/dist/board/jira/labels/index.d.ts +2 -0
- package/dist/board/jira/labels/index.d.ts.map +1 -0
- package/dist/board/jira/labels/index.js +2 -0
- package/dist/board/jira/labels/index.js.map +1 -0
- package/dist/board/jira/labels/labels.d.ts +34 -0
- package/dist/board/jira/labels/labels.d.ts.map +1 -0
- package/dist/board/jira/labels/labels.js +69 -0
- package/dist/board/jira/labels/labels.js.map +1 -0
- package/dist/board/jira/relations/index.d.ts +2 -0
- package/dist/board/jira/relations/index.d.ts.map +1 -0
- package/dist/board/jira/relations/index.js +2 -0
- package/dist/board/jira/relations/index.js.map +1 -0
- package/dist/board/jira/relations/relations.d.ts +44 -0
- package/dist/board/jira/relations/relations.d.ts.map +1 -0
- package/dist/board/jira/relations/relations.js +111 -0
- package/dist/board/jira/relations/relations.js.map +1 -0
- package/dist/board/linear/api/api.d.ts +68 -0
- package/dist/board/linear/api/api.d.ts.map +1 -0
- package/dist/board/linear/api/api.js +179 -0
- package/dist/board/linear/api/api.js.map +1 -0
- package/dist/board/linear/api/index.d.ts +2 -0
- package/dist/board/linear/api/index.d.ts.map +1 -0
- package/dist/board/linear/api/index.js +2 -0
- package/dist/board/linear/api/index.js.map +1 -0
- package/dist/board/linear/index.d.ts +3 -0
- package/dist/board/linear/index.d.ts.map +1 -0
- package/dist/board/linear/index.js +3 -0
- package/dist/board/linear/index.js.map +1 -0
- package/dist/board/linear/labels/index.d.ts +2 -0
- package/dist/board/linear/labels/index.d.ts.map +1 -0
- package/dist/board/linear/labels/index.js +2 -0
- package/dist/board/linear/labels/index.js.map +1 -0
- package/dist/board/linear/labels/labels.d.ts +63 -0
- package/dist/board/linear/labels/labels.d.ts.map +1 -0
- package/dist/board/linear/labels/labels.js +204 -0
- package/dist/board/linear/labels/labels.js.map +1 -0
- package/dist/board/linear/linear-board.d.ts +18 -0
- package/dist/board/linear/linear-board.d.ts.map +1 -0
- package/dist/board/linear/linear-board.js +115 -0
- package/dist/board/linear/linear-board.js.map +1 -0
- package/dist/board/linear/relations/index.d.ts +2 -0
- package/dist/board/linear/relations/index.d.ts.map +1 -0
- package/dist/board/linear/relations/index.js +2 -0
- package/dist/board/linear/relations/index.js.map +1 -0
- package/dist/board/linear/relations/relations.d.ts +67 -0
- package/dist/board/linear/relations/relations.d.ts.map +1 -0
- package/dist/board/linear/relations/relations.js +195 -0
- package/dist/board/linear/relations/relations.js.map +1 -0
- package/dist/board/notion/api/api.d.ts +83 -0
- package/dist/board/notion/api/api.d.ts.map +1 -0
- package/dist/board/notion/api/api.js +124 -0
- package/dist/board/notion/api/api.js.map +1 -0
- package/dist/board/notion/api/helpers.d.ts +105 -0
- package/dist/board/notion/api/helpers.d.ts.map +1 -0
- package/dist/board/notion/api/helpers.js +175 -0
- package/dist/board/notion/api/helpers.js.map +1 -0
- package/dist/board/notion/api/index.d.ts +4 -0
- package/dist/board/notion/api/index.d.ts.map +1 -0
- package/dist/board/notion/api/index.js +3 -0
- package/dist/board/notion/api/index.js.map +1 -0
- package/dist/board/notion/index.d.ts +3 -0
- package/dist/board/notion/index.d.ts.map +1 -0
- package/dist/board/notion/index.js +3 -0
- package/dist/board/notion/index.js.map +1 -0
- package/dist/board/notion/labels/index.d.ts +2 -0
- package/dist/board/notion/labels/index.d.ts.map +1 -0
- package/dist/board/notion/labels/index.js +2 -0
- package/dist/board/notion/labels/index.js.map +1 -0
- package/dist/board/notion/labels/labels.d.ts +30 -0
- package/dist/board/notion/labels/labels.d.ts.map +1 -0
- package/dist/board/notion/labels/labels.js +56 -0
- package/dist/board/notion/labels/labels.js.map +1 -0
- package/dist/board/notion/notion-board.d.ts +12 -0
- package/dist/board/notion/notion-board.d.ts.map +1 -0
- package/dist/board/notion/notion-board.js +156 -0
- package/dist/board/notion/notion-board.js.map +1 -0
- package/dist/board/notion/relations/index.d.ts +2 -0
- package/dist/board/notion/relations/index.d.ts.map +1 -0
- package/dist/board/notion/relations/index.js +2 -0
- package/dist/board/notion/relations/index.js.map +1 -0
- package/dist/board/notion/relations/relations.d.ts +43 -0
- package/dist/board/notion/relations/relations.d.ts.map +1 -0
- package/dist/board/notion/relations/relations.js +127 -0
- package/dist/board/notion/relations/relations.js.map +1 -0
- package/dist/board/shortcut/api/api.d.ts +110 -0
- package/dist/board/shortcut/api/api.d.ts.map +1 -0
- package/dist/board/shortcut/api/api.js +227 -0
- package/dist/board/shortcut/api/api.js.map +1 -0
- package/dist/board/shortcut/api/index.d.ts +2 -0
- package/dist/board/shortcut/api/index.d.ts.map +1 -0
- package/dist/board/shortcut/api/index.js +2 -0
- package/dist/board/shortcut/api/index.js.map +1 -0
- package/dist/board/shortcut/index.d.ts +3 -0
- package/dist/board/shortcut/index.d.ts.map +1 -0
- package/dist/board/shortcut/index.js +3 -0
- package/dist/board/shortcut/index.js.map +1 -0
- package/dist/board/shortcut/labels/index.d.ts +2 -0
- package/dist/board/shortcut/labels/index.d.ts.map +1 -0
- package/dist/board/shortcut/labels/index.js +2 -0
- package/dist/board/shortcut/labels/index.js.map +1 -0
- package/dist/board/shortcut/labels/labels.d.ts +95 -0
- package/dist/board/shortcut/labels/labels.d.ts.map +1 -0
- package/dist/board/shortcut/labels/labels.js +154 -0
- package/dist/board/shortcut/labels/labels.js.map +1 -0
- package/dist/board/shortcut/relations/index.d.ts +2 -0
- package/dist/board/shortcut/relations/index.d.ts.map +1 -0
- package/dist/board/shortcut/relations/index.js +2 -0
- package/dist/board/shortcut/relations/index.js.map +1 -0
- package/dist/board/shortcut/relations/relations.d.ts +44 -0
- package/dist/board/shortcut/relations/relations.d.ts.map +1 -0
- package/dist/board/shortcut/relations/relations.js +118 -0
- package/dist/board/shortcut/relations/relations.js.map +1 -0
- package/dist/board/shortcut/shortcut-board.d.ts +18 -0
- package/dist/board/shortcut/shortcut-board.d.ts.map +1 -0
- package/dist/board/shortcut/shortcut-board.js +143 -0
- package/dist/board/shortcut/shortcut-board.js.map +1 -0
- package/dist/dev/lifecycle/branch/branch.d.ts +35 -0
- package/dist/dev/lifecycle/branch/branch.d.ts.map +1 -0
- package/dist/dev/lifecycle/branch/branch.js +48 -0
- package/dist/dev/lifecycle/branch/branch.js.map +1 -0
- package/dist/dev/lifecycle/branch/index.d.ts +2 -0
- package/dist/dev/lifecycle/branch/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/branch/index.js +2 -0
- package/dist/dev/lifecycle/branch/index.js.map +1 -0
- package/dist/dev/lifecycle/commit-type/commit-type.d.ts +22 -0
- package/dist/dev/lifecycle/commit-type/commit-type.d.ts.map +1 -0
- package/dist/dev/lifecycle/commit-type/commit-type.js +50 -0
- package/dist/dev/lifecycle/commit-type/commit-type.js.map +1 -0
- package/dist/dev/lifecycle/commit-type/index.d.ts +2 -0
- package/dist/dev/lifecycle/commit-type/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/commit-type/index.js +2 -0
- package/dist/dev/lifecycle/commit-type/index.js.map +1 -0
- package/dist/dev/lifecycle/cost/cost.d.ts +28 -0
- package/dist/dev/lifecycle/cost/cost.d.ts.map +1 -0
- package/dist/dev/lifecycle/cost/cost.js +36 -0
- package/dist/dev/lifecycle/cost/cost.js.map +1 -0
- package/dist/dev/lifecycle/deliver-epic/deliver-epic.d.ts +44 -0
- package/dist/dev/lifecycle/deliver-epic/deliver-epic.d.ts.map +1 -0
- package/dist/dev/lifecycle/deliver-epic/deliver-epic.js +75 -0
- package/dist/dev/lifecycle/deliver-epic/deliver-epic.js.map +1 -0
- package/dist/dev/lifecycle/deliver-ticket/deliver-ticket.d.ts +51 -0
- package/dist/dev/lifecycle/deliver-ticket/deliver-ticket.d.ts.map +1 -0
- package/dist/dev/lifecycle/deliver-ticket/deliver-ticket.js +132 -0
- package/dist/dev/lifecycle/deliver-ticket/deliver-ticket.js.map +1 -0
- package/dist/dev/lifecycle/epic/epic.d.ts +66 -0
- package/dist/dev/lifecycle/epic/epic.d.ts.map +1 -0
- package/dist/dev/lifecycle/epic/epic.js +91 -0
- package/dist/dev/lifecycle/epic/epic.js.map +1 -0
- package/dist/dev/lifecycle/epic/index.d.ts +2 -0
- package/dist/dev/lifecycle/epic/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/epic/index.js +2 -0
- package/dist/dev/lifecycle/epic/index.js.map +1 -0
- package/dist/dev/lifecycle/feasibility/feasibility.d.ts +55 -0
- package/dist/dev/lifecycle/feasibility/feasibility.d.ts.map +1 -0
- package/dist/dev/lifecycle/feasibility/feasibility.js +75 -0
- package/dist/dev/lifecycle/feasibility/feasibility.js.map +1 -0
- package/dist/dev/lifecycle/fetch-ticket/fetch-ticket.d.ts +49 -0
- package/dist/dev/lifecycle/fetch-ticket/fetch-ticket.d.ts.map +1 -0
- package/dist/dev/lifecycle/fetch-ticket/fetch-ticket.js +81 -0
- package/dist/dev/lifecycle/fetch-ticket/fetch-ticket.js.map +1 -0
- package/dist/dev/lifecycle/format/format.d.ts +11 -0
- package/dist/dev/lifecycle/format/format.d.ts.map +1 -0
- package/dist/dev/lifecycle/format/format.js +23 -0
- package/dist/dev/lifecycle/format/format.js.map +1 -0
- package/dist/dev/lifecycle/lock/index.d.ts +3 -0
- package/dist/dev/lifecycle/lock/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/lock/index.js +2 -0
- package/dist/dev/lifecycle/lock/index.js.map +1 -0
- package/dist/dev/lifecycle/lock/lock.d.ts +68 -0
- package/dist/dev/lifecycle/lock/lock.d.ts.map +1 -0
- package/dist/dev/lifecycle/lock/lock.js +125 -0
- package/dist/dev/lifecycle/lock/lock.js.map +1 -0
- package/dist/dev/lifecycle/outcome/index.d.ts +2 -0
- package/dist/dev/lifecycle/outcome/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/outcome/index.js +2 -0
- package/dist/dev/lifecycle/outcome/index.js.map +1 -0
- package/dist/dev/lifecycle/outcome/outcome.d.ts +65 -0
- package/dist/dev/lifecycle/outcome/outcome.d.ts.map +1 -0
- package/dist/dev/lifecycle/outcome/outcome.js +61 -0
- package/dist/dev/lifecycle/outcome/outcome.js.map +1 -0
- package/dist/dev/lifecycle/pr-creation/index.d.ts +3 -0
- package/dist/dev/lifecycle/pr-creation/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/pr-creation/index.js +2 -0
- package/dist/dev/lifecycle/pr-creation/index.js.map +1 -0
- package/dist/dev/lifecycle/pr-creation/pr-creation.d.ts +47 -0
- package/dist/dev/lifecycle/pr-creation/pr-creation.d.ts.map +1 -0
- package/dist/dev/lifecycle/pr-creation/pr-creation.js +143 -0
- package/dist/dev/lifecycle/pr-creation/pr-creation.js.map +1 -0
- package/dist/dev/lifecycle/preflight/preflight.d.ts +42 -0
- package/dist/dev/lifecycle/preflight/preflight.d.ts.map +1 -0
- package/dist/dev/lifecycle/preflight/preflight.js +101 -0
- package/dist/dev/lifecycle/preflight/preflight.js.map +1 -0
- package/dist/dev/lifecycle/progress/index.d.ts +3 -0
- package/dist/dev/lifecycle/progress/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/progress/index.js +2 -0
- package/dist/dev/lifecycle/progress/index.js.map +1 -0
- package/dist/dev/lifecycle/progress/progress.d.ts +98 -0
- package/dist/dev/lifecycle/progress/progress.d.ts.map +1 -0
- package/dist/dev/lifecycle/progress/progress.js +212 -0
- package/dist/dev/lifecycle/progress/progress.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/azdo/azdo.d.ts +86 -0
- package/dist/dev/lifecycle/pull-request/azdo/azdo.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/azdo/azdo.js +198 -0
- package/dist/dev/lifecycle/pull-request/azdo/azdo.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/azdo/index.d.ts +2 -0
- package/dist/dev/lifecycle/pull-request/azdo/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/azdo/index.js +2 -0
- package/dist/dev/lifecycle/pull-request/azdo/index.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/cloud.d.ts +85 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/cloud.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/cloud.js +158 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/cloud.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/index.d.ts +3 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/index.js +3 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/index.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/server.d.ts +85 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/server.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/server.js +168 -0
- package/dist/dev/lifecycle/pull-request/bitbucket/server.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/github/github.d.ts +107 -0
- package/dist/dev/lifecycle/pull-request/github/github.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/github/github.js +225 -0
- package/dist/dev/lifecycle/pull-request/github/github.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/github/index.d.ts +2 -0
- package/dist/dev/lifecycle/pull-request/github/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/github/index.js +2 -0
- package/dist/dev/lifecycle/pull-request/github/index.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/gitlab/gitlab.d.ts +103 -0
- package/dist/dev/lifecycle/pull-request/gitlab/gitlab.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/gitlab/gitlab.js +215 -0
- package/dist/dev/lifecycle/pull-request/gitlab/gitlab.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/gitlab/index.d.ts +2 -0
- package/dist/dev/lifecycle/pull-request/gitlab/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/gitlab/index.js +2 -0
- package/dist/dev/lifecycle/pull-request/gitlab/index.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/post-pr/post-pr.d.ts +44 -0
- package/dist/dev/lifecycle/pull-request/post-pr/post-pr.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/post-pr/post-pr.js +64 -0
- package/dist/dev/lifecycle/pull-request/post-pr/post-pr.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/pr-body/index.d.ts +3 -0
- package/dist/dev/lifecycle/pull-request/pr-body/index.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/pr-body/index.js +2 -0
- package/dist/dev/lifecycle/pull-request/pr-body/index.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/pr-body/pr-body.d.ts +65 -0
- package/dist/dev/lifecycle/pull-request/pr-body/pr-body.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/pr-body/pr-body.js +144 -0
- package/dist/dev/lifecycle/pull-request/pr-body/pr-body.js.map +1 -0
- package/dist/dev/lifecycle/pull-request/rework-comment/rework-comment.d.ts +30 -0
- package/dist/dev/lifecycle/pull-request/rework-comment/rework-comment.d.ts.map +1 -0
- package/dist/dev/lifecycle/pull-request/rework-comment/rework-comment.js +39 -0
- package/dist/dev/lifecycle/pull-request/rework-comment/rework-comment.js.map +1 -0
- package/dist/dev/lifecycle/quality/quality.d.ts +99 -0
- package/dist/dev/lifecycle/quality/quality.d.ts.map +1 -0
- package/dist/dev/lifecycle/quality/quality.js +213 -0
- package/dist/dev/lifecycle/quality/quality.js.map +1 -0
- package/dist/dev/lifecycle/resume/resume.d.ts +64 -0
- package/dist/dev/lifecycle/resume/resume.d.ts.map +1 -0
- package/dist/dev/lifecycle/resume/resume.js +171 -0
- package/dist/dev/lifecycle/resume/resume.js.map +1 -0
- package/dist/dev/lifecycle/rework/rework-builders.d.ts +20 -0
- package/dist/dev/lifecycle/rework/rework-builders.d.ts.map +1 -0
- package/dist/dev/lifecycle/rework/rework-builders.js +203 -0
- package/dist/dev/lifecycle/rework/rework-builders.js.map +1 -0
- package/dist/dev/lifecycle/rework/rework-handlers.d.ts +50 -0
- package/dist/dev/lifecycle/rework/rework-handlers.d.ts.map +1 -0
- package/dist/dev/lifecycle/rework/rework-handlers.js +41 -0
- package/dist/dev/lifecycle/rework/rework-handlers.js.map +1 -0
- package/dist/dev/lifecycle/rework/rework.d.ts +63 -0
- package/dist/dev/lifecycle/rework/rework.d.ts.map +1 -0
- package/dist/dev/lifecycle/rework/rework.js +141 -0
- package/dist/dev/lifecycle/rework/rework.js.map +1 -0
- package/dist/dev/pipeline/context.d.ts +105 -0
- package/dist/dev/pipeline/context.d.ts.map +1 -0
- package/dist/dev/pipeline/context.js +107 -0
- package/dist/dev/pipeline/context.js.map +1 -0
- package/dist/dev/pipeline/index.d.ts +6 -0
- package/dist/dev/pipeline/index.d.ts.map +1 -0
- package/dist/dev/pipeline/index.js +5 -0
- package/dist/dev/pipeline/index.js.map +1 -0
- package/dist/dev/pipeline/phases/branch-setup/branch-setup.d.ts +62 -0
- package/dist/dev/pipeline/phases/branch-setup/branch-setup.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/branch-setup/branch-setup.js +128 -0
- package/dist/dev/pipeline/phases/branch-setup/branch-setup.js.map +1 -0
- package/dist/dev/pipeline/phases/branch-setup/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/branch-setup/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/branch-setup/index.js +2 -0
- package/dist/dev/pipeline/phases/branch-setup/index.js.map +1 -0
- package/dist/dev/pipeline/phases/cleanup-phase/cleanup-phase.d.ts +32 -0
- package/dist/dev/pipeline/phases/cleanup-phase/cleanup-phase.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/cleanup-phase/cleanup-phase.js +32 -0
- package/dist/dev/pipeline/phases/cleanup-phase/cleanup-phase.js.map +1 -0
- package/dist/dev/pipeline/phases/cleanup-phase/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/cleanup-phase/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/cleanup-phase/index.js +2 -0
- package/dist/dev/pipeline/phases/cleanup-phase/index.js.map +1 -0
- package/dist/dev/pipeline/phases/cost-phase/cost-phase.d.ts +40 -0
- package/dist/dev/pipeline/phases/cost-phase/cost-phase.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/cost-phase/cost-phase.js +43 -0
- package/dist/dev/pipeline/phases/cost-phase/cost-phase.js.map +1 -0
- package/dist/dev/pipeline/phases/cost-phase/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/cost-phase/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/cost-phase/index.js +2 -0
- package/dist/dev/pipeline/phases/cost-phase/index.js.map +1 -0
- package/dist/dev/pipeline/phases/deliver-phase/deliver-phase.d.ts +68 -0
- package/dist/dev/pipeline/phases/deliver-phase/deliver-phase.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/deliver-phase/deliver-phase.js +125 -0
- package/dist/dev/pipeline/phases/deliver-phase/deliver-phase.js.map +1 -0
- package/dist/dev/pipeline/phases/deliver-phase/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/deliver-phase/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/deliver-phase/index.js +2 -0
- package/dist/dev/pipeline/phases/deliver-phase/index.js.map +1 -0
- package/dist/dev/pipeline/phases/dry-run/dry-run.d.ts +38 -0
- package/dist/dev/pipeline/phases/dry-run/dry-run.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/dry-run/dry-run.js +33 -0
- package/dist/dev/pipeline/phases/dry-run/dry-run.js.map +1 -0
- package/dist/dev/pipeline/phases/dry-run/index.d.ts +2 -0
- package/dist/dev/pipeline/phases/dry-run/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/dry-run/index.js +2 -0
- package/dist/dev/pipeline/phases/dry-run/index.js.map +1 -0
- package/dist/dev/pipeline/phases/epic-completion/epic-completion.d.ts +48 -0
- package/dist/dev/pipeline/phases/epic-completion/epic-completion.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/epic-completion/epic-completion.js +42 -0
- package/dist/dev/pipeline/phases/epic-completion/epic-completion.js.map +1 -0
- package/dist/dev/pipeline/phases/epic-completion/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/epic-completion/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/epic-completion/index.js +2 -0
- package/dist/dev/pipeline/phases/epic-completion/index.js.map +1 -0
- package/dist/dev/pipeline/phases/feasibility/feasibility.d.ts +52 -0
- package/dist/dev/pipeline/phases/feasibility/feasibility.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/feasibility/feasibility.js +34 -0
- package/dist/dev/pipeline/phases/feasibility/feasibility.js.map +1 -0
- package/dist/dev/pipeline/phases/feasibility/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/feasibility/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/feasibility/index.js +2 -0
- package/dist/dev/pipeline/phases/feasibility/index.js.map +1 -0
- package/dist/dev/pipeline/phases/index.d.ts +26 -0
- package/dist/dev/pipeline/phases/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/index.js +14 -0
- package/dist/dev/pipeline/phases/index.js.map +1 -0
- package/dist/dev/pipeline/phases/lock-check/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/lock-check/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/lock-check/index.js +2 -0
- package/dist/dev/pipeline/phases/lock-check/index.js.map +1 -0
- package/dist/dev/pipeline/phases/lock-check/lock-check.d.ts +55 -0
- package/dist/dev/pipeline/phases/lock-check/lock-check.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/lock-check/lock-check.js +60 -0
- package/dist/dev/pipeline/phases/lock-check/lock-check.js.map +1 -0
- package/dist/dev/pipeline/phases/pr-retry/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/pr-retry/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/pr-retry/index.js +2 -0
- package/dist/dev/pipeline/phases/pr-retry/index.js.map +1 -0
- package/dist/dev/pipeline/phases/pr-retry/pr-retry.d.ts +58 -0
- package/dist/dev/pipeline/phases/pr-retry/pr-retry.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/pr-retry/pr-retry.js +82 -0
- package/dist/dev/pipeline/phases/pr-retry/pr-retry.js.map +1 -0
- package/dist/dev/pipeline/phases/preflight-phase/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/preflight-phase/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/preflight-phase/index.js +2 -0
- package/dist/dev/pipeline/phases/preflight-phase/index.js.map +1 -0
- package/dist/dev/pipeline/phases/preflight-phase/preflight-phase.d.ts +42 -0
- package/dist/dev/pipeline/phases/preflight-phase/preflight-phase.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/preflight-phase/preflight-phase.js +41 -0
- package/dist/dev/pipeline/phases/preflight-phase/preflight-phase.js.map +1 -0
- package/dist/dev/pipeline/phases/rework-detection/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/rework-detection/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/rework-detection/index.js +2 -0
- package/dist/dev/pipeline/phases/rework-detection/index.js.map +1 -0
- package/dist/dev/pipeline/phases/rework-detection/rework-detection.d.ts +40 -0
- package/dist/dev/pipeline/phases/rework-detection/rework-detection.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/rework-detection/rework-detection.js +38 -0
- package/dist/dev/pipeline/phases/rework-detection/rework-detection.js.map +1 -0
- package/dist/dev/pipeline/phases/ticket-fetch/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/ticket-fetch/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/ticket-fetch/index.js +2 -0
- package/dist/dev/pipeline/phases/ticket-fetch/index.js.map +1 -0
- package/dist/dev/pipeline/phases/ticket-fetch/ticket-fetch.d.ts +46 -0
- package/dist/dev/pipeline/phases/ticket-fetch/ticket-fetch.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/ticket-fetch/ticket-fetch.js +64 -0
- package/dist/dev/pipeline/phases/ticket-fetch/ticket-fetch.js.map +1 -0
- package/dist/dev/pipeline/phases/transition/index.d.ts +3 -0
- package/dist/dev/pipeline/phases/transition/index.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/transition/index.js +2 -0
- package/dist/dev/pipeline/phases/transition/index.js.map +1 -0
- package/dist/dev/pipeline/phases/transition/transition.d.ts +30 -0
- package/dist/dev/pipeline/phases/transition/transition.d.ts.map +1 -0
- package/dist/dev/pipeline/phases/transition/transition.js +27 -0
- package/dist/dev/pipeline/phases/transition/transition.js.map +1 -0
- package/dist/dev/pipeline/run-pipeline.d.ts +98 -0
- package/dist/dev/pipeline/run-pipeline.d.ts.map +1 -0
- package/dist/dev/pipeline/run-pipeline.js +106 -0
- package/dist/dev/pipeline/run-pipeline.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/azdo/azdo-pr.d.ts +58 -0
- package/dist/schemas/azdo/azdo-pr.d.ts.map +1 -0
- package/dist/schemas/azdo/azdo-pr.js +48 -0
- package/dist/schemas/azdo/azdo-pr.js.map +1 -0
- package/dist/schemas/azdo/azdo.d.ts +88 -0
- package/dist/schemas/azdo/azdo.d.ts.map +1 -0
- package/dist/schemas/azdo/azdo.js +60 -0
- package/dist/schemas/azdo/azdo.js.map +1 -0
- package/dist/schemas/bitbucket/bitbucket.d.ts +112 -0
- package/dist/schemas/bitbucket/bitbucket.d.ts.map +1 -0
- package/dist/schemas/bitbucket/bitbucket.js +73 -0
- package/dist/schemas/bitbucket/bitbucket.js.map +1 -0
- package/dist/schemas/env/env.d.ts +336 -0
- package/dist/schemas/env/env.d.ts.map +1 -0
- package/dist/schemas/env/env.js +94 -0
- package/dist/schemas/env/env.js.map +1 -0
- package/dist/schemas/github/github.d.ts +128 -0
- package/dist/schemas/github/github.d.ts.map +1 -0
- package/dist/schemas/github/github.js +65 -0
- package/dist/schemas/github/github.js.map +1 -0
- package/dist/schemas/gitlab/gitlab.d.ts +72 -0
- package/dist/schemas/gitlab/gitlab.d.ts.map +1 -0
- package/dist/schemas/gitlab/gitlab.js +38 -0
- package/dist/schemas/gitlab/gitlab.js.map +1 -0
- package/dist/schemas/index.d.ts +15 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +8 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/jira/jira.d.ts +79 -0
- package/dist/schemas/jira/jira.d.ts.map +1 -0
- package/dist/schemas/jira/jira.js +69 -0
- package/dist/schemas/jira/jira.js.map +1 -0
- package/dist/schemas/linear/linear.d.ts +178 -0
- package/dist/schemas/linear/linear.d.ts.map +1 -0
- package/dist/schemas/linear/linear.js +136 -0
- package/dist/schemas/linear/linear.js.map +1 -0
- package/dist/schemas/notion/notion.d.ts +131 -0
- package/dist/schemas/notion/notion.d.ts.map +1 -0
- package/dist/schemas/notion/notion.js +102 -0
- package/dist/schemas/notion/notion.js.map +1 -0
- package/dist/schemas/shortcut/shortcut.d.ts +149 -0
- package/dist/schemas/shortcut/shortcut.d.ts.map +1 -0
- package/dist/schemas/shortcut/shortcut.js +68 -0
- package/dist/schemas/shortcut/shortcut.js.map +1 -0
- package/dist/shared/cache/cache.d.ts +14 -0
- package/dist/shared/cache/cache.d.ts.map +1 -0
- package/dist/shared/cache/cache.js +25 -0
- package/dist/shared/cache/cache.js.map +1 -0
- package/dist/shared/cache/index.d.ts +2 -0
- package/dist/shared/cache/index.d.ts.map +1 -0
- package/dist/shared/cache/index.js +2 -0
- package/dist/shared/cache/index.js.map +1 -0
- package/dist/shared/env-parser/env-parser.d.ts +42 -0
- package/dist/shared/env-parser/env-parser.d.ts.map +1 -0
- package/dist/shared/env-parser/env-parser.js +97 -0
- package/dist/shared/env-parser/env-parser.js.map +1 -0
- package/dist/shared/env-parser/index.d.ts +3 -0
- package/dist/shared/env-parser/index.d.ts.map +1 -0
- package/dist/shared/env-parser/index.js +2 -0
- package/dist/shared/env-parser/index.js.map +1 -0
- package/dist/shared/git-ops/git-ops.d.ts +127 -0
- package/dist/shared/git-ops/git-ops.d.ts.map +1 -0
- package/dist/shared/git-ops/git-ops.js +225 -0
- package/dist/shared/git-ops/git-ops.js.map +1 -0
- package/dist/shared/git-ops/index.d.ts +3 -0
- package/dist/shared/git-ops/index.d.ts.map +1 -0
- package/dist/shared/git-ops/index.js +2 -0
- package/dist/shared/git-ops/index.js.map +1 -0
- package/dist/shared/git-token/git-token.d.ts +18 -0
- package/dist/shared/git-token/git-token.d.ts.map +1 -0
- package/dist/shared/git-token/git-token.js +28 -0
- package/dist/shared/git-token/git-token.js.map +1 -0
- package/dist/shared/git-token/index.d.ts +2 -0
- package/dist/shared/git-token/index.d.ts.map +1 -0
- package/dist/shared/git-token/index.js +2 -0
- package/dist/shared/git-token/index.js.map +1 -0
- package/dist/shared/http/fetch-and-parse/fetch-and-parse.d.ts +32 -0
- package/dist/shared/http/fetch-and-parse/fetch-and-parse.d.ts.map +1 -0
- package/dist/shared/http/fetch-and-parse/fetch-and-parse.js +53 -0
- package/dist/shared/http/fetch-and-parse/fetch-and-parse.js.map +1 -0
- package/dist/shared/http/fetch-and-parse/index.d.ts +3 -0
- package/dist/shared/http/fetch-and-parse/index.d.ts.map +1 -0
- package/dist/shared/http/fetch-and-parse/index.js +2 -0
- package/dist/shared/http/fetch-and-parse/index.js.map +1 -0
- package/dist/shared/http/index.d.ts +7 -0
- package/dist/shared/http/index.d.ts.map +1 -0
- package/dist/shared/http/index.js +4 -0
- package/dist/shared/http/index.js.map +1 -0
- package/dist/shared/http/ping-endpoint/index.d.ts +3 -0
- package/dist/shared/http/ping-endpoint/index.d.ts.map +1 -0
- package/dist/shared/http/ping-endpoint/index.js +2 -0
- package/dist/shared/http/ping-endpoint/index.js.map +1 -0
- package/dist/shared/http/ping-endpoint/ping-endpoint.d.ts +29 -0
- package/dist/shared/http/ping-endpoint/ping-endpoint.d.ts.map +1 -0
- package/dist/shared/http/ping-endpoint/ping-endpoint.js +31 -0
- package/dist/shared/http/ping-endpoint/ping-endpoint.js.map +1 -0
- package/dist/shared/http/retry-fetch/index.d.ts +3 -0
- package/dist/shared/http/retry-fetch/index.d.ts.map +1 -0
- package/dist/shared/http/retry-fetch/index.js +2 -0
- package/dist/shared/http/retry-fetch/index.js.map +1 -0
- package/dist/shared/http/retry-fetch/retry-fetch.d.ts +33 -0
- package/dist/shared/http/retry-fetch/retry-fetch.d.ts.map +1 -0
- package/dist/shared/http/retry-fetch/retry-fetch.js +94 -0
- package/dist/shared/http/retry-fetch/retry-fetch.js.map +1 -0
- package/dist/shared/label-helpers/index.d.ts +3 -0
- package/dist/shared/label-helpers/index.d.ts.map +1 -0
- package/dist/shared/label-helpers/index.js +2 -0
- package/dist/shared/label-helpers/index.js.map +1 -0
- package/dist/shared/label-helpers/label-helpers.d.ts +41 -0
- package/dist/shared/label-helpers/label-helpers.d.ts.map +1 -0
- package/dist/shared/label-helpers/label-helpers.js +51 -0
- package/dist/shared/label-helpers/label-helpers.js.map +1 -0
- package/dist/shared/remote/index.d.ts +2 -0
- package/dist/shared/remote/index.d.ts.map +1 -0
- package/dist/shared/remote/index.js +2 -0
- package/dist/shared/remote/index.js.map +1 -0
- package/dist/shared/remote/remote.d.ts +39 -0
- package/dist/shared/remote/remote.d.ts.map +1 -0
- package/dist/shared/remote/remote.js +180 -0
- package/dist/shared/remote/remote.js.map +1 -0
- package/dist/types/board.d.ts +62 -0
- package/dist/types/board.d.ts.map +1 -0
- package/dist/types/board.js +5 -0
- package/dist/types/board.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/progress.d.ts +21 -0
- package/dist/types/progress.d.ts.map +1 -0
- package/dist/types/progress.js +34 -0
- package/dist/types/progress.js.map +1 -0
- package/dist/types/remote.d.ts +77 -0
- package/dist/types/remote.d.ts.map +1 -0
- package/dist/types/remote.js +5 -0
- package/dist/types/remote.js.map +1 -0
- package/package.json +44 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Alex Clapperton
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# @chief-clancy/core
|
|
2
|
+
|
|
3
|
+
Board integrations, pipeline phases, ticket lifecycle modules, schemas, and shared utilities for [Clancy](https://github.com/Pushedskydiver/chief-clancy).
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@chief-clancy/core) [](../../LICENSE)
|
|
6
|
+
|
|
7
|
+
> This package is part of the [Clancy monorepo](https://github.com/Pushedskydiver/chief-clancy). You don't install it directly — it's a dependency of [`@chief-clancy/terminal`](../terminal).
|
|
8
|
+
|
|
9
|
+
## What's in it
|
|
10
|
+
|
|
11
|
+
### Board integrations
|
|
12
|
+
|
|
13
|
+
Unified `Board` type abstraction with implementations for 6 platforms:
|
|
14
|
+
|
|
15
|
+
- **Jira** — REST API v3, JQL queries, ADF description parsing
|
|
16
|
+
- **GitHub Issues** — REST API, PR filtering, label management
|
|
17
|
+
- **Linear** — GraphQL API, workflow state resolution
|
|
18
|
+
- **Shortcut** — REST API v3, workflow state filtering
|
|
19
|
+
- **Notion** — REST API, database rows as tickets, property overrides
|
|
20
|
+
- **Azure DevOps** — REST API, WIQL queries, work item management
|
|
21
|
+
|
|
22
|
+
All boards implement the same interface: `ping`, `validateInputs`, `fetchTicket`, `fetchTickets`, `fetchBlockerStatus`, `fetchChildrenStatus`, `transitionTicket`, `ensureLabel`, `addLabel`, `removeLabel`, `sharedEnv`.
|
|
23
|
+
|
|
24
|
+
### Pipeline phases
|
|
25
|
+
|
|
26
|
+
The phase orchestrator runs a sequence of composable phases that take a ticket from fetch to delivery:
|
|
27
|
+
|
|
28
|
+
`lock-check` → `preflight` → `epic-completion` → `pr-retry` → `rework-detection` → `ticket-fetch` → `dry-run` → `feasibility` → `branch-setup` → `transition` → `deliver` → `cost` → `cleanup`
|
|
29
|
+
|
|
30
|
+
### Lifecycle modules
|
|
31
|
+
|
|
32
|
+
Focused modules for each concern in the ticket lifecycle: branching, locking, PR creation (GitHub/GitLab/Bitbucket/Azure DevOps), rework detection, epic delivery, cost tracking, progress logging, crash recovery, and more.
|
|
33
|
+
|
|
34
|
+
### Schemas
|
|
35
|
+
|
|
36
|
+
`zod/mini` schemas for validating API responses from all 6 board providers and environment configuration from `.clancy/.env`.
|
|
37
|
+
|
|
38
|
+
### Shared utilities
|
|
39
|
+
|
|
40
|
+
Cache (`Cached<T>`), HTTP (`fetchAndParse`, `retryFetch`), git operations, remote detection, label helpers, and environment parsing.
|
|
41
|
+
|
|
42
|
+
## Documentation
|
|
43
|
+
|
|
44
|
+
- [Architecture](../../docs/ARCHITECTURE.md) — full module map and dependency graph
|
|
45
|
+
- [Technical Reference](../../docs/TECHNICAL-REFERENCE.md) — board integration details and gotchas
|
|
46
|
+
- [Testing](../../docs/TESTING.md) — test patterns and coverage
|
|
47
|
+
|
|
48
|
+
## License
|
|
49
|
+
|
|
50
|
+
MIT — see [LICENSE](../../LICENSE).
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure DevOps REST API functions.
|
|
3
|
+
*
|
|
4
|
+
* Low-level functions for interacting with the Azure DevOps REST API.
|
|
5
|
+
* Pure helpers (auth, headers, parsing) are in `helpers.ts`.
|
|
6
|
+
*/
|
|
7
|
+
import type { AzdoCtx } from './helpers.js';
|
|
8
|
+
import type { AzdoWorkItem } from '../../../schemas/index.js';
|
|
9
|
+
import type { PingResult } from '../../../types/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Ping the Azure DevOps API to verify connectivity and credentials.
|
|
12
|
+
*
|
|
13
|
+
* @param ctx - Azure DevOps connection context.
|
|
14
|
+
* @returns Ping result with `ok` and optional `error`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function pingAzdo(ctx: AzdoCtx): Promise<PingResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Run a WIQL query against Azure DevOps.
|
|
19
|
+
*
|
|
20
|
+
* @param ctx - Azure DevOps connection context.
|
|
21
|
+
* @param query - The WIQL query string.
|
|
22
|
+
* @returns Array of work item IDs, or an empty array on failure.
|
|
23
|
+
*/
|
|
24
|
+
export declare function runWiql(ctx: AzdoCtx, query: string): Promise<readonly number[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Fetch a single work item by ID.
|
|
27
|
+
*
|
|
28
|
+
* @param ctx - Azure DevOps connection context.
|
|
29
|
+
* @param id - The work item ID.
|
|
30
|
+
* @returns The work item, or `undefined` on failure.
|
|
31
|
+
*/
|
|
32
|
+
export declare function fetchWorkItem(ctx: AzdoCtx, id: number): Promise<AzdoWorkItem | undefined>;
|
|
33
|
+
/** A JSON Patch operation for Azure DevOps work item updates. */
|
|
34
|
+
type JsonPatchOp = {
|
|
35
|
+
readonly op: 'add' | 'replace' | 'remove' | 'test';
|
|
36
|
+
readonly path: string;
|
|
37
|
+
readonly value?: unknown;
|
|
38
|
+
};
|
|
39
|
+
/** Options for {@link updateWorkItem}. */
|
|
40
|
+
type UpdateWorkItemOpts = {
|
|
41
|
+
readonly ctx: AzdoCtx;
|
|
42
|
+
readonly id: number;
|
|
43
|
+
readonly patchOps: readonly JsonPatchOp[];
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Update a work item using JSON Patch operations.
|
|
47
|
+
*
|
|
48
|
+
* @param opts - Connection context, work item ID, and patch operations.
|
|
49
|
+
* @returns `true` if the update succeeded.
|
|
50
|
+
*/
|
|
51
|
+
export declare function updateWorkItem(opts: UpdateWorkItemOpts): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Batch-fetch work items by IDs (up to 200 per request).
|
|
54
|
+
*
|
|
55
|
+
* @param ctx - Azure DevOps connection context.
|
|
56
|
+
* @param ids - Array of work item IDs to fetch.
|
|
57
|
+
* @returns Array of work items, or an empty array on failure.
|
|
58
|
+
*/
|
|
59
|
+
export declare function fetchWorkItems(ctx: AzdoCtx, ids: readonly number[]): Promise<readonly AzdoWorkItem[]>;
|
|
60
|
+
/** Azure DevOps ticket with work item ID and optional tags. */
|
|
61
|
+
export type AzdoTicket = {
|
|
62
|
+
readonly key: string;
|
|
63
|
+
readonly title: string;
|
|
64
|
+
readonly description: string;
|
|
65
|
+
readonly workItemId: number;
|
|
66
|
+
readonly parentId?: number;
|
|
67
|
+
readonly labels?: readonly string[];
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Convert a raw AzdoWorkItem to an AzdoTicket.
|
|
71
|
+
*
|
|
72
|
+
* @param item - The raw work item from the API.
|
|
73
|
+
* @returns A normalised AzdoTicket.
|
|
74
|
+
*/
|
|
75
|
+
export declare function workItemToTicket(item: AzdoWorkItem): AzdoTicket;
|
|
76
|
+
/** Options for {@link fetchTickets}. */
|
|
77
|
+
type FetchTicketsOpts = {
|
|
78
|
+
readonly ctx: AzdoCtx;
|
|
79
|
+
readonly status: string;
|
|
80
|
+
readonly wit?: string;
|
|
81
|
+
readonly excludeHitl?: boolean;
|
|
82
|
+
readonly label?: string;
|
|
83
|
+
readonly limit?: number;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Fetch work items matching a WIQL query and convert to AzdoTicket format.
|
|
87
|
+
*
|
|
88
|
+
* Two-step fetch: WIQL returns IDs, then batch fetch gets details.
|
|
89
|
+
*
|
|
90
|
+
* @param opts - Connection context, status, and optional filters.
|
|
91
|
+
* @returns Array of AzdoTickets.
|
|
92
|
+
*/
|
|
93
|
+
export declare function fetchTickets(opts: FetchTicketsOpts): Promise<readonly AzdoTicket[]>;
|
|
94
|
+
export {};
|
|
95
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/board/azdo/api/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAmBrD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAahE;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAgB5B;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAUnC;AAED,iEAAiE;AACjE,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,EAAE,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,0CAA0C;AAC1C,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;CAC3C,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAiCD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,SAAS,MAAM,EAAE,GACrB,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CASlC;AAID,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CAkB/D;AAED,wCAAwC;AACxC,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAqBF;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAwBhC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { azdoWiqlResponseSchema, azdoWorkItemsBatchResponseSchema, azdoWorkItemSchema, } from '../../../schemas/index.js';
|
|
2
|
+
import { fetchAndParse, pingEndpoint } from '../../../shared/http/index.js';
|
|
3
|
+
import { apiBase, AZDO_API_VERSION, azdoHeaders, azdoPatchHeaders, extractIdFromRelationUrl, isSafeWiqlValue, parseTags, } from './helpers.js';
|
|
4
|
+
/**
|
|
5
|
+
* Ping the Azure DevOps API to verify connectivity and credentials.
|
|
6
|
+
*
|
|
7
|
+
* @param ctx - Azure DevOps connection context.
|
|
8
|
+
* @returns Ping result with `ok` and optional `error`.
|
|
9
|
+
*/
|
|
10
|
+
export async function pingAzdo(ctx) {
|
|
11
|
+
const url = `https://dev.azure.com/${encodeURIComponent(ctx.org)}/_apis/projects/${encodeURIComponent(ctx.project)}?api-version=${AZDO_API_VERSION}`;
|
|
12
|
+
return pingEndpoint({
|
|
13
|
+
url,
|
|
14
|
+
headers: azdoHeaders(ctx.pat),
|
|
15
|
+
statusErrors: {
|
|
16
|
+
401: '✗ Azure DevOps auth failed — check AZDO_PAT',
|
|
17
|
+
403: '✗ Azure DevOps auth failed — check AZDO_PAT',
|
|
18
|
+
},
|
|
19
|
+
networkError: '✗ Could not reach Azure DevOps — check network',
|
|
20
|
+
fetcher: ctx.fetcher,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Run a WIQL query against Azure DevOps.
|
|
25
|
+
*
|
|
26
|
+
* @param ctx - Azure DevOps connection context.
|
|
27
|
+
* @param query - The WIQL query string.
|
|
28
|
+
* @returns Array of work item IDs, or an empty array on failure.
|
|
29
|
+
*/
|
|
30
|
+
export async function runWiql(ctx, query) {
|
|
31
|
+
const data = await fetchAndParse(`${apiBase(ctx.org, ctx.project)}/wit/wiql?api-version=${AZDO_API_VERSION}`, {
|
|
32
|
+
method: 'POST',
|
|
33
|
+
headers: azdoHeaders(ctx.pat),
|
|
34
|
+
body: JSON.stringify({ query }),
|
|
35
|
+
}, {
|
|
36
|
+
schema: azdoWiqlResponseSchema,
|
|
37
|
+
label: 'Azure DevOps WIQL',
|
|
38
|
+
fetcher: ctx.fetcher,
|
|
39
|
+
});
|
|
40
|
+
return data ? data.workItems.map((wi) => wi.id) : [];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Fetch a single work item by ID.
|
|
44
|
+
*
|
|
45
|
+
* @param ctx - Azure DevOps connection context.
|
|
46
|
+
* @param id - The work item ID.
|
|
47
|
+
* @returns The work item, or `undefined` on failure.
|
|
48
|
+
*/
|
|
49
|
+
export async function fetchWorkItem(ctx, id) {
|
|
50
|
+
return fetchAndParse(`${apiBase(ctx.org, ctx.project)}/wit/workitems/${String(id)}?$expand=relations&api-version=${AZDO_API_VERSION}`, { headers: azdoHeaders(ctx.pat) }, {
|
|
51
|
+
schema: azdoWorkItemSchema,
|
|
52
|
+
label: 'Azure DevOps work item',
|
|
53
|
+
fetcher: ctx.fetcher,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Update a work item using JSON Patch operations.
|
|
58
|
+
*
|
|
59
|
+
* @param opts - Connection context, work item ID, and patch operations.
|
|
60
|
+
* @returns `true` if the update succeeded.
|
|
61
|
+
*/
|
|
62
|
+
export async function updateWorkItem(opts) {
|
|
63
|
+
const { ctx, id, patchOps } = opts;
|
|
64
|
+
const doFetch = ctx.fetcher ?? fetch;
|
|
65
|
+
try {
|
|
66
|
+
const response = await doFetch(`${apiBase(ctx.org, ctx.project)}/wit/workitems/${String(id)}?api-version=${AZDO_API_VERSION}`, {
|
|
67
|
+
method: 'PATCH',
|
|
68
|
+
headers: azdoPatchHeaders(ctx.pat),
|
|
69
|
+
body: JSON.stringify(patchOps),
|
|
70
|
+
});
|
|
71
|
+
return response.ok;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ─── Batch fetch ─────────────────────────────────────────────────────────────
|
|
78
|
+
/** Maximum work items per Azure DevOps batch request. */
|
|
79
|
+
const BATCH_SIZE = 200;
|
|
80
|
+
/** Split an array into chunks of a given size. */
|
|
81
|
+
function chunk(arr, size) {
|
|
82
|
+
return Array.from({ length: Math.ceil(arr.length / size) }, (_, i) => arr.slice(i * size, i * size + size));
|
|
83
|
+
}
|
|
84
|
+
/** Fetch a single batch of work items by comma-separated IDs. */
|
|
85
|
+
async function fetchBatch(ctx, batch) {
|
|
86
|
+
const idString = batch.join(',');
|
|
87
|
+
const data = await fetchAndParse(`${apiBase(ctx.org, ctx.project)}/wit/workitems?ids=${idString}&$expand=relations&api-version=${AZDO_API_VERSION}`, { headers: azdoHeaders(ctx.pat) }, {
|
|
88
|
+
schema: azdoWorkItemsBatchResponseSchema,
|
|
89
|
+
label: 'Azure DevOps work items batch',
|
|
90
|
+
fetcher: ctx.fetcher,
|
|
91
|
+
});
|
|
92
|
+
return data ? data.value : [];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Batch-fetch work items by IDs (up to 200 per request).
|
|
96
|
+
*
|
|
97
|
+
* @param ctx - Azure DevOps connection context.
|
|
98
|
+
* @param ids - Array of work item IDs to fetch.
|
|
99
|
+
* @returns Array of work items, or an empty array on failure.
|
|
100
|
+
*/
|
|
101
|
+
export async function fetchWorkItems(ctx, ids) {
|
|
102
|
+
if (!ids.length)
|
|
103
|
+
return [];
|
|
104
|
+
const batches = chunk(ids, BATCH_SIZE);
|
|
105
|
+
const results = await Promise.all(batches.map((batch) => fetchBatch(ctx, batch)));
|
|
106
|
+
return results.flat();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Convert a raw AzdoWorkItem to an AzdoTicket.
|
|
110
|
+
*
|
|
111
|
+
* @param item - The raw work item from the API.
|
|
112
|
+
* @returns A normalised AzdoTicket.
|
|
113
|
+
*/
|
|
114
|
+
export function workItemToTicket(item) {
|
|
115
|
+
const tags = parseTags(item.fields['System.Tags']);
|
|
116
|
+
const parentRelation = (item.relations ?? []).find((rel) => rel.rel === 'System.LinkTypes.Hierarchy-Reverse');
|
|
117
|
+
const parentId = parentRelation
|
|
118
|
+
? extractIdFromRelationUrl(parentRelation.url)
|
|
119
|
+
: undefined;
|
|
120
|
+
return {
|
|
121
|
+
key: `azdo-${String(item.id)}`,
|
|
122
|
+
title: item.fields['System.Title'] ?? '',
|
|
123
|
+
description: item.fields['System.Description'] ?? '',
|
|
124
|
+
workItemId: item.id,
|
|
125
|
+
parentId,
|
|
126
|
+
labels: tags,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/** Build the WIQL query for fetching tickets. */
|
|
130
|
+
function buildWiql(opts) {
|
|
131
|
+
const { ctx, status, wit } = opts;
|
|
132
|
+
if (!isSafeWiqlValue(ctx.project) || !isSafeWiqlValue(status)) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
if (wit && !isSafeWiqlValue(wit))
|
|
136
|
+
return undefined;
|
|
137
|
+
const parts = [
|
|
138
|
+
`[System.TeamProject] = '${ctx.project}'`,
|
|
139
|
+
`[System.State] = '${status}'`,
|
|
140
|
+
'[System.AssignedTo] = @Me',
|
|
141
|
+
...(wit ? [`[System.WorkItemType] = '${wit}'`] : []),
|
|
142
|
+
];
|
|
143
|
+
return `SELECT [System.Id] FROM WorkItems WHERE ${parts.join(' AND ')} ORDER BY [System.CreatedDate] ASC`;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Fetch work items matching a WIQL query and convert to AzdoTicket format.
|
|
147
|
+
*
|
|
148
|
+
* Two-step fetch: WIQL returns IDs, then batch fetch gets details.
|
|
149
|
+
*
|
|
150
|
+
* @param opts - Connection context, status, and optional filters.
|
|
151
|
+
* @returns Array of AzdoTickets.
|
|
152
|
+
*/
|
|
153
|
+
export async function fetchTickets(opts) {
|
|
154
|
+
const { ctx, excludeHitl, label, limit = 5 } = opts;
|
|
155
|
+
const wiql = buildWiql(opts);
|
|
156
|
+
if (!wiql)
|
|
157
|
+
return [];
|
|
158
|
+
const ids = await runWiql(ctx, wiql);
|
|
159
|
+
if (!ids.length)
|
|
160
|
+
return [];
|
|
161
|
+
// Fetch up to 2x limit to allow for client-side filtering
|
|
162
|
+
const limitedIds = ids.slice(0, limit * 2);
|
|
163
|
+
const items = await fetchWorkItems(ctx, limitedIds);
|
|
164
|
+
const tickets = items.map(workItemToTicket);
|
|
165
|
+
const hitlFiltered = excludeHitl
|
|
166
|
+
? tickets.filter((t) => !t.labels?.includes('clancy:hitl'))
|
|
167
|
+
: tickets;
|
|
168
|
+
const labelFiltered = label
|
|
169
|
+
? hitlFiltered.filter((t) => t.labels?.includes(label))
|
|
170
|
+
: hitlFiltered;
|
|
171
|
+
return labelFiltered.slice(0, limit);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/board/azdo/api/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { Fetcher } from '../../../shared/http/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Azure DevOps pure helper functions.
|
|
4
|
+
*
|
|
5
|
+
* Auth, headers, WIQL validation, URL builders, tag parsing, and key parsing.
|
|
6
|
+
* All pure functions — no I/O.
|
|
7
|
+
*/
|
|
8
|
+
/** Azure DevOps API version used on all requests. */
|
|
9
|
+
export declare const AZDO_API_VERSION = "7.1";
|
|
10
|
+
/** Azure DevOps connection context (org + project + PAT). */
|
|
11
|
+
export type AzdoCtx = {
|
|
12
|
+
readonly org: string;
|
|
13
|
+
readonly project: string;
|
|
14
|
+
readonly pat: string;
|
|
15
|
+
readonly fetcher?: Fetcher;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Build the Azure DevOps Basic auth header value.
|
|
19
|
+
*
|
|
20
|
+
* Azure DevOps uses `Basic base64(':' + pat)` — empty username, colon, then PAT.
|
|
21
|
+
*
|
|
22
|
+
* @param pat - The personal access token.
|
|
23
|
+
* @returns The `Basic ...` header value.
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildAzdoAuth(pat: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Build standard headers for Azure DevOps requests.
|
|
28
|
+
*
|
|
29
|
+
* @param pat - The personal access token.
|
|
30
|
+
* @returns Headers object for Azure DevOps API requests.
|
|
31
|
+
*/
|
|
32
|
+
export declare function azdoHeaders(pat: string): Record<string, string>;
|
|
33
|
+
/**
|
|
34
|
+
* Build JSON Patch headers (required for work item updates).
|
|
35
|
+
*
|
|
36
|
+
* @param pat - The personal access token.
|
|
37
|
+
* @returns Headers object with `application/json-patch+json` content type.
|
|
38
|
+
*/
|
|
39
|
+
export declare function azdoPatchHeaders(pat: string): Record<string, string>;
|
|
40
|
+
/**
|
|
41
|
+
* Validate that a value is safe to interpolate into a WIQL query.
|
|
42
|
+
*
|
|
43
|
+
* Blocks single quotes (WIQL string delimiter), backslashes, `--`
|
|
44
|
+
* (SQL comment), `;` (statement separator), block comments, newlines,
|
|
45
|
+
* and non-printable characters.
|
|
46
|
+
*
|
|
47
|
+
* @param value - The string to validate.
|
|
48
|
+
* @returns `true` if the value is safe for WIQL interpolation.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isSafeWiqlValue(value: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Build the Azure DevOps API base URL for a given org and project.
|
|
53
|
+
*
|
|
54
|
+
* @param org - The Azure DevOps organisation name.
|
|
55
|
+
* @param project - The Azure DevOps project name.
|
|
56
|
+
* @returns The API base URL.
|
|
57
|
+
*/
|
|
58
|
+
export declare function apiBase(org: string, project: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Parse Azure DevOps semicolon-separated tags into an array.
|
|
61
|
+
*
|
|
62
|
+
* @param tags - The raw tags string (e.g., `"tag1; tag2; tag3"`).
|
|
63
|
+
* @returns Array of trimmed tag strings.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseTags(tags: string | null | undefined): readonly string[];
|
|
66
|
+
/**
|
|
67
|
+
* Rebuild a tags string from an array.
|
|
68
|
+
*
|
|
69
|
+
* @param tags - Array of tag strings.
|
|
70
|
+
* @returns Semicolon-separated tags string.
|
|
71
|
+
*/
|
|
72
|
+
export declare function buildTagsString(tags: readonly string[]): string;
|
|
73
|
+
/**
|
|
74
|
+
* Extract the work item ID from a relation URL.
|
|
75
|
+
*
|
|
76
|
+
* Relation URLs look like: `https://dev.azure.com/{org}/_apis/wit/workItems/{id}`
|
|
77
|
+
*
|
|
78
|
+
* @param url - The relation URL.
|
|
79
|
+
* @returns The work item ID, or `undefined` if parsing fails.
|
|
80
|
+
*/
|
|
81
|
+
export declare function extractIdFromRelationUrl(url: string): number | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Parse a work item ID from an Azure DevOps key (e.g., `'azdo-123'` → `123`).
|
|
84
|
+
*
|
|
85
|
+
* @param key - The Azure DevOps work item key.
|
|
86
|
+
* @returns The numeric work item ID, or `undefined` if parsing fails.
|
|
87
|
+
*/
|
|
88
|
+
export declare function parseWorkItemId(key: string): number | undefined;
|
|
89
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/board/azdo/api/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;;GAKG;AAEH,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,6DAA6D;AAC7D,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAIF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK/D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKpE;AAID;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQtD;AAID;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAM5E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE/D;AAID;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKxE;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/D"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure DevOps pure helper functions.
|
|
3
|
+
*
|
|
4
|
+
* Auth, headers, WIQL validation, URL builders, tag parsing, and key parsing.
|
|
5
|
+
* All pure functions — no I/O.
|
|
6
|
+
*/
|
|
7
|
+
/** Azure DevOps API version used on all requests. */
|
|
8
|
+
export const AZDO_API_VERSION = '7.1';
|
|
9
|
+
// ─── Auth ────────────────────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Build the Azure DevOps Basic auth header value.
|
|
12
|
+
*
|
|
13
|
+
* Azure DevOps uses `Basic base64(':' + pat)` — empty username, colon, then PAT.
|
|
14
|
+
*
|
|
15
|
+
* @param pat - The personal access token.
|
|
16
|
+
* @returns The `Basic ...` header value.
|
|
17
|
+
*/
|
|
18
|
+
export function buildAzdoAuth(pat) {
|
|
19
|
+
return `Basic ${btoa(`:${pat}`)}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build standard headers for Azure DevOps requests.
|
|
23
|
+
*
|
|
24
|
+
* @param pat - The personal access token.
|
|
25
|
+
* @returns Headers object for Azure DevOps API requests.
|
|
26
|
+
*/
|
|
27
|
+
export function azdoHeaders(pat) {
|
|
28
|
+
return {
|
|
29
|
+
Authorization: buildAzdoAuth(pat),
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build JSON Patch headers (required for work item updates).
|
|
35
|
+
*
|
|
36
|
+
* @param pat - The personal access token.
|
|
37
|
+
* @returns Headers object with `application/json-patch+json` content type.
|
|
38
|
+
*/
|
|
39
|
+
export function azdoPatchHeaders(pat) {
|
|
40
|
+
return {
|
|
41
|
+
Authorization: buildAzdoAuth(pat),
|
|
42
|
+
'Content-Type': 'application/json-patch+json',
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// ─── WIQL injection prevention ───────────────────────────────────────────────
|
|
46
|
+
/**
|
|
47
|
+
* Validate that a value is safe to interpolate into a WIQL query.
|
|
48
|
+
*
|
|
49
|
+
* Blocks single quotes (WIQL string delimiter), backslashes, `--`
|
|
50
|
+
* (SQL comment), `;` (statement separator), block comments, newlines,
|
|
51
|
+
* and non-printable characters.
|
|
52
|
+
*
|
|
53
|
+
* @param value - The string to validate.
|
|
54
|
+
* @returns `true` if the value is safe for WIQL interpolation.
|
|
55
|
+
*/
|
|
56
|
+
export function isSafeWiqlValue(value) {
|
|
57
|
+
if (value.includes("'"))
|
|
58
|
+
return false;
|
|
59
|
+
if (value.includes('\\'))
|
|
60
|
+
return false;
|
|
61
|
+
if (value.includes('--'))
|
|
62
|
+
return false;
|
|
63
|
+
if (value.includes(';'))
|
|
64
|
+
return false;
|
|
65
|
+
if (value.includes('/*'))
|
|
66
|
+
return false;
|
|
67
|
+
if (/[^\x20-\x7E\t]/.test(value))
|
|
68
|
+
return false;
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
// ─── URL builders ────────────────────────────────────────────────────────────
|
|
72
|
+
/**
|
|
73
|
+
* Build the Azure DevOps API base URL for a given org and project.
|
|
74
|
+
*
|
|
75
|
+
* @param org - The Azure DevOps organisation name.
|
|
76
|
+
* @param project - The Azure DevOps project name.
|
|
77
|
+
* @returns The API base URL.
|
|
78
|
+
*/
|
|
79
|
+
export function apiBase(org, project) {
|
|
80
|
+
return `https://dev.azure.com/${encodeURIComponent(org)}/${encodeURIComponent(project)}/_apis`;
|
|
81
|
+
}
|
|
82
|
+
// ─── Tag helpers ─────────────────────────────────────────────────────────────
|
|
83
|
+
/**
|
|
84
|
+
* Parse Azure DevOps semicolon-separated tags into an array.
|
|
85
|
+
*
|
|
86
|
+
* @param tags - The raw tags string (e.g., `"tag1; tag2; tag3"`).
|
|
87
|
+
* @returns Array of trimmed tag strings.
|
|
88
|
+
*/
|
|
89
|
+
export function parseTags(tags) {
|
|
90
|
+
if (!tags)
|
|
91
|
+
return [];
|
|
92
|
+
return tags
|
|
93
|
+
.split(';')
|
|
94
|
+
.map((t) => t.trim())
|
|
95
|
+
.filter(Boolean);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Rebuild a tags string from an array.
|
|
99
|
+
*
|
|
100
|
+
* @param tags - Array of tag strings.
|
|
101
|
+
* @returns Semicolon-separated tags string.
|
|
102
|
+
*/
|
|
103
|
+
export function buildTagsString(tags) {
|
|
104
|
+
return tags.join('; ');
|
|
105
|
+
}
|
|
106
|
+
// ─── Relation URL parsing ────────────────────────────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* Extract the work item ID from a relation URL.
|
|
109
|
+
*
|
|
110
|
+
* Relation URLs look like: `https://dev.azure.com/{org}/_apis/wit/workItems/{id}`
|
|
111
|
+
*
|
|
112
|
+
* @param url - The relation URL.
|
|
113
|
+
* @returns The work item ID, or `undefined` if parsing fails.
|
|
114
|
+
*/
|
|
115
|
+
export function extractIdFromRelationUrl(url) {
|
|
116
|
+
const match = url.match(/workItems\/(\d+)/i);
|
|
117
|
+
if (!match)
|
|
118
|
+
return undefined;
|
|
119
|
+
const num = parseInt(match[1], 10);
|
|
120
|
+
return Number.isNaN(num) ? undefined : num;
|
|
121
|
+
}
|
|
122
|
+
// ─── Key validation ──────────────────────────────────────────────────────────
|
|
123
|
+
/**
|
|
124
|
+
* Parse a work item ID from an Azure DevOps key (e.g., `'azdo-123'` → `123`).
|
|
125
|
+
*
|
|
126
|
+
* @param key - The Azure DevOps work item key.
|
|
127
|
+
* @returns The numeric work item ID, or `undefined` if parsing fails.
|
|
128
|
+
*/
|
|
129
|
+
export function parseWorkItemId(key) {
|
|
130
|
+
const num = parseInt(key.replace('azdo-', ''), 10);
|
|
131
|
+
return Number.isNaN(num) ? undefined : num;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/board/azdo/api/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { fetchTickets, fetchWorkItem, fetchWorkItems, pingAzdo, runWiql, updateWorkItem, } from './api.js';
|
|
2
|
+
export type { AzdoTicket } from './api.js';
|
|
3
|
+
export { apiBase, azdoHeaders, AZDO_API_VERSION, buildTagsString, extractIdFromRelationUrl, isSafeWiqlValue, parseWorkItemId, parseTags, } from './helpers.js';
|
|
4
|
+
export type { AzdoCtx } from './helpers.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/board/azdo/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,OAAO,EACP,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { fetchTickets, fetchWorkItem, fetchWorkItems, pingAzdo, runWiql, updateWorkItem, } from './api.js';
|
|
2
|
+
export { apiBase, azdoHeaders, AZDO_API_VERSION, buildTagsString, extractIdFromRelationUrl, isSafeWiqlValue, parseWorkItemId, parseTags, } from './helpers.js';
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/board/azdo/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,OAAO,EACP,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,SAAS,GACV,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AzdoEnv } from '../../schemas/index.js';
|
|
2
|
+
import type { Fetcher } from '../../shared/http/index.js';
|
|
3
|
+
import type { Board } from '../../types/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Create a Board implementation for Azure DevOps.
|
|
6
|
+
*
|
|
7
|
+
* @param env - The validated Azure DevOps environment variables.
|
|
8
|
+
* @param fetcher - Optional custom fetch function for DI in tests.
|
|
9
|
+
* @returns A Board object that delegates to Azure DevOps API functions.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createAzdoBoard(env: AzdoEnv, fetcher?: Fetcher): Board;
|
|
12
|
+
//# sourceMappingURL=azdo-board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azdo-board.d.ts","sourceRoot":"","sources":["../../../src/board/azdo/azdo-board.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAkC,MAAM,oBAAoB,CAAC;AAyFhF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,KAAK,CAyCtE"}
|