@vypdev/copilot 3.3.1 → 3.5.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.
Files changed (86) hide show
  1. package/README.md +33 -5
  2. package/action.yml +85 -109
  3. package/build/api/index.js +4737 -1506
  4. package/build/api/src/api.d.ts +60 -14
  5. package/build/api/src/application/errors/application_error.d.ts +10 -0
  6. package/build/api/src/application/ports/bugbot_context_ports.d.ts +20 -7
  7. package/build/api/src/application/ports/bugbot_finding_publication_ports.d.ts +4 -4
  8. package/build/api/src/application/ports/bugbot_finding_resolution_ports.d.ts +4 -4
  9. package/build/api/src/application/ports/bugbot_issue_read_ports.d.ts +3 -0
  10. package/build/api/src/application/ports/bugbot_issue_write_ports.d.ts +12 -0
  11. package/build/api/src/application/ports/bugbot_pull_request_read_ports.d.ts +3 -17
  12. package/build/api/src/application/ports/bugbot_pull_request_resolution_ports.d.ts +7 -1
  13. package/build/api/src/application/ports/bugbot_pull_request_write_ports.d.ts +6 -1
  14. package/build/api/src/application/ports/bugbot_reconciliation_ports.d.ts +18 -0
  15. package/build/api/src/application/ports/bugbot_review_navigation_ports.d.ts +13 -0
  16. package/build/api/src/application/ports/bugbot_rule_ports.d.ts +1 -1
  17. package/build/api/src/application/ports/bugbot_scm_ports.d.ts +14 -0
  18. package/build/api/src/application/ports/bugbot_telemetry_ports.d.ts +27 -2
  19. package/build/api/src/application/ports/message_catalog_ports.d.ts +17 -0
  20. package/build/api/src/application/ports/pull_request_review_comment_ports.d.ts +31 -2
  21. package/build/api/src/data/model/application_error.d.ts +82 -0
  22. package/build/api/src/data/model/result.d.ts +3 -4
  23. package/build/api/src/domain/agent.d.ts +6 -5
  24. package/build/api/src/domain/branch_sync_validation.d.ts +4 -0
  25. package/build/api/src/domain/bugbot/context.d.ts +68 -0
  26. package/build/api/src/domain/bugbot/finding.d.ts +61 -0
  27. package/build/api/src/domain/bugbot/review_projection.d.ts +33 -0
  28. package/build/api/src/domain/bugbot/review_state.d.ts +29 -0
  29. package/build/api/src/domain/message_catalog.d.ts +35 -0
  30. package/build/api/src/tooling/bugbot_analytics.d.ts +2 -1
  31. package/build/cli/index.js +93559 -71879
  32. package/build/github_action/index.js +79807 -63429
  33. package/build/web/assets/index-2NVaAtP1.js +3 -0
  34. package/build/web/assets/index-FN-aja4Y.css +1 -0
  35. package/build/web/index.html +14 -0
  36. package/package.json +35 -22
  37. package/scripts/install-git-hooks.cjs +38 -14
  38. package/setup/ISSUE_TEMPLATE/hotfix.yml +1 -1
  39. package/setup/ISSUE_TEMPLATE/release.yml +1 -1
  40. package/setup/pull_request_template.md +9 -135
  41. package/setup/source-workflows/copilot_pull_request_approval.yml +55 -0
  42. package/setup/workflows/agent-cli-provisioning.yml +37 -13
  43. package/setup/workflows/copilot_close_inactive_issues.yml +4 -4
  44. package/setup/workflows/copilot_commit.yml +16 -16
  45. package/setup/workflows/copilot_credential_health.yml +0 -20
  46. package/setup/workflows/copilot_deployment_orchestration.yml +91 -0
  47. package/setup/workflows/copilot_issue.yml +15 -19
  48. package/setup/workflows/copilot_issue_comment.yml +17 -19
  49. package/setup/workflows/copilot_pull_request.yml +21 -22
  50. package/setup/workflows/copilot_pull_request_approval.yml +51 -0
  51. package/setup/workflows/copilot_pull_request_comment.yml +17 -19
  52. package/setup/workflows/copilot_pull_request_merge_queue.yml +20 -0
  53. package/setup/workflows/copilot_pull_request_review_state.yml +109 -0
  54. package/setup/workflows/hotfix_workflow.yml +157 -168
  55. package/setup/workflows/release_workflow.yml +157 -168
  56. package/build/api/src/application/usecases/steps/commit/bugbot/types.d.ts +0 -112
  57. package/build/api/src/data/model/agent.d.ts +0 -2
  58. package/build/api/src/data/model/ai.d.ts +0 -28
  59. package/build/api/src/data/model/branch_configuration.d.ts +0 -6
  60. package/build/api/src/data/model/branches.d.ts +0 -12
  61. package/build/api/src/data/model/commit.d.ts +0 -8
  62. package/build/api/src/data/model/config.d.ts +0 -30
  63. package/build/api/src/data/model/emoji.d.ts +0 -5
  64. package/build/api/src/data/model/execution.d.ts +0 -75
  65. package/build/api/src/data/model/execution_components.d.ts +0 -43
  66. package/build/api/src/data/model/execution_inputs.d.ts +0 -94
  67. package/build/api/src/data/model/hotfix.d.ts +0 -7
  68. package/build/api/src/data/model/images.d.ts +0 -27
  69. package/build/api/src/data/model/issue.d.ts +0 -27
  70. package/build/api/src/data/model/issue_types.d.ts +0 -30
  71. package/build/api/src/data/model/labels.d.ts +0 -60
  72. package/build/api/src/data/model/locale.d.ts +0 -6
  73. package/build/api/src/data/model/project_detail.d.ts +0 -15
  74. package/build/api/src/data/model/projects.d.ts +0 -14
  75. package/build/api/src/data/model/pull_request.d.ts +0 -32
  76. package/build/api/src/data/model/recommendation_state.d.ts +0 -6
  77. package/build/api/src/data/model/release.d.ts +0 -6
  78. package/build/api/src/data/model/single_action.d.ts +0 -43
  79. package/build/api/src/data/model/size_threshold.d.ts +0 -6
  80. package/build/api/src/data/model/size_thresholds.d.ts +0 -10
  81. package/build/api/src/data/model/tokens.d.ts +0 -4
  82. package/build/api/src/data/model/welcome.d.ts +0 -5
  83. package/build/api/src/data/model/workflows.d.ts +0 -5
  84. package/build/api/src/domain/bugbot/review_command.d.ts +0 -16
  85. package/build/api/src/domain/copilot_lifecycle.d.ts +0 -42
  86. package/build/api/src/domain/pull_request_description.d.ts +0 -13
@@ -3,230 +3,219 @@ name: Task - Release
3
3
  on:
4
4
  workflow_dispatch:
5
5
  inputs:
6
- version:
7
- description: 'Release version'
6
+ mode:
7
+ description: 'Internal orchestration phase'
8
8
  required: true
9
- default: '1.0.0'
9
+ default: prepare
10
+ type: choice
11
+ options: [prepare, publish]
12
+ operation-id:
13
+ description: 'Internal durable operation identifier'
14
+ required: false
15
+ default: ''
16
+ version:
17
+ description: 'Release version (MAJOR.MINOR.PATCH)'
18
+ required: false
19
+ default: ''
10
20
  title:
11
- description: 'Title'
12
- required: true
13
- default: 'New Version'
21
+ description: 'Release title'
22
+ required: false
23
+ default: ''
14
24
  changelog:
15
- description: 'Changelog'
16
- required: true
17
- default: '- Several improvements'
25
+ description: 'Release changelog'
26
+ required: false
27
+ default: ''
18
28
  issue:
19
29
  description: 'Launcher issue'
20
30
  required: true
21
- default: '-1'
31
+
32
+ concurrency:
33
+ group: copilot-deployment-${{ github.repository_id }}-${{ inputs.issue }}
34
+ cancel-in-progress: false
35
+ queue: max
22
36
 
23
37
  jobs:
24
- queue-gate:
25
- name: Wait for previous mutation workflows
38
+ validate:
39
+ name: Validate deployment command
26
40
  runs-on: ubuntu-latest
27
- timeout-minutes: 120
28
- permissions:
29
- actions: read
30
- contents: read
41
+ timeout-minutes: 5
42
+ permissions: {}
31
43
  steps:
32
- - uses: actions/checkout@v5
33
- with:
34
- persist-credentials: false
35
- - name: Admit workflow to mutation queue
36
- uses: vypdev/copilot@v3
44
+ - name: Validate bounded orchestration inputs
45
+ uses: actions/github-script@v9
46
+ env:
47
+ MODE: ${{ inputs.mode }}
48
+ OPERATION_ID: ${{ inputs.operation-id }}
49
+ VERSION: ${{ inputs.version }}
50
+ ISSUE: ${{ inputs.issue }}
51
+ TITLE: ${{ inputs.title }}
52
+ CHANGELOG: ${{ inputs.changelog }}
37
53
  with:
38
- queue-gate-only: 'true'
39
- token: ${{ github.token }}
54
+ script: |
55
+ const mode = process.env.MODE;
56
+ const operationId = process.env.OPERATION_ID || '';
57
+ const version = process.env.VERSION || '';
58
+ const issueText = process.env.ISSUE || '';
59
+ const issue = Number(issueText);
60
+ const title = process.env.TITLE || '';
61
+ const changelog = process.env.CHANGELOG || '';
62
+ const errors = [];
63
+ if (!/^[1-9][0-9]*$/.test(issueText) || !Number.isSafeInteger(issue) || issue < 1) errors.push('Issue must be a positive safe integer.');
64
+ if (!/^[0-9]+\.[0-9]+\.[0-9]+$/.test(version)) errors.push('Version must use MAJOR.MINOR.PATCH.');
65
+ if (mode === 'prepare') {
66
+ if (operationId) errors.push('Operation ID must be empty in prepare mode.');
67
+ if (!title || title.length > 1000) errors.push('Title must contain 1-1000 characters.');
68
+ if (!changelog || changelog.length > 50000) errors.push('Changelog must contain 1-50000 characters.');
69
+ } else if (mode === 'publish') {
70
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]{7,127}$/.test(operationId)) errors.push('Operation ID is invalid.');
71
+ if (title || changelog) errors.push('Title and changelog must be empty in publish mode.');
72
+ } else errors.push('Mode must be prepare or publish.');
73
+ if (errors.length) core.setFailed(errors.join(' '));
40
74
 
41
75
  prepare-version-files:
42
- name: Prepare files for release
76
+ name: Prepare and validate release
77
+ if: ${{ inputs.mode == 'prepare' }}
43
78
  runs-on: ubuntu-latest
44
- needs: queue-gate
45
- timeout-minutes: 15
79
+ needs: validate
80
+ timeout-minutes: 30
46
81
  permissions:
47
82
  contents: write
48
83
  steps:
49
84
  - uses: actions/checkout@v5
50
85
  with:
51
86
  persist-credentials: true
52
-
53
- - name: Set up Node.js 24
54
- uses: actions/setup-node@v7
55
- with:
56
- node-version: '24.x'
57
-
58
- - name: Set up pnpm
59
- uses: pnpm/action-setup@v5
60
- with:
61
- version: 10.12.4
62
- standalone: false
63
-
64
- - name: Install dependencies
65
- run: pnpm install --frozen-lockfile
66
-
67
- - name: Validate inputs
68
- env:
69
- VERSION: ${{ github.event.inputs.version }}
70
- ISSUE: ${{ github.event.inputs.issue }}
71
- TITLE: ${{ github.event.inputs.title }}
72
- CHANGELOG: ${{ github.event.inputs.changelog }}
73
- run: |
74
- err=0
75
- if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
76
- echo "::error::Version must be in semver format (e.g. 1.0.0)."
77
- err=1
78
- fi
79
- if ! [[ "$ISSUE" =~ ^-?[0-9]+$ ]]; then
80
- echo "::error::Issue must be a number (e.g. 123 or -1)."
81
- err=1
82
- fi
83
- if [[ ${#TITLE} -gt 1000 ]]; then
84
- echo "::error::Title must be at most 1000 characters."
85
- err=1
86
- fi
87
- if [[ ${#CHANGELOG} -gt 50000 ]]; then
88
- echo "::error::Changelog must be at most 50000 characters."
89
- err=1
90
- fi
91
- [[ $err -eq 0 ]] || exit 1
92
-
93
- # Example: generic step to perform the version update or compilation (uncomment and adjust as needed)
94
- # - name: Generic step
95
- # uses: whatever/action@v2
96
-
97
- - name: Commit updated package.json and dist directory
87
+ # Add project-specific version, build, validation, smoke-test and generated-file steps here.
88
+ - name: Commit prepared release files
98
89
  uses: EndBug/add-and-commit@v9
99
90
  with:
100
- add: './build/ ./package.json'
91
+ add: './'
101
92
  committer_name: GitHub Actions
102
93
  committer_email: actions@github.com
103
94
  default_author: user_info
104
- message: 'gh-action: updated compiled files and bumped version to ${{ github.event.inputs.version }} (release)'
95
+ message: 'gh-action: prepare release ${{ inputs.version }}'
105
96
 
106
- tag:
107
- name: Publish version
97
+ promote:
98
+ name: Open production promotion
99
+ if: ${{ inputs.mode == 'prepare' }}
108
100
  runs-on: ubuntu-latest
109
- timeout-minutes: 120
110
- needs: [ prepare-version-files ]
101
+ needs: prepare-version-files
102
+ timeout-minutes: 10
111
103
  permissions:
112
104
  contents: read
105
+ issues: write
106
+ pull-requests: write
107
+ actions: write
113
108
  steps:
114
- - name: Checkout Repository
115
- uses: actions/checkout@v5
109
+ - uses: actions/checkout@v5
116
110
  with:
117
111
  persist-credentials: false
118
-
119
- - name: Copilot - Create Tag
112
+ - name: Create or resume promotion PR
120
113
  uses: vypdev/copilot@v3
121
- if: ${{ success() }}
122
114
  with:
123
- debug: ${{ vars.DEBUG }}
115
+ single-action: prepare_deployment_action
116
+ single-action-issue: ${{ inputs.issue }}
117
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
118
+ single-action-version: ${{ inputs.version }}
119
+ single-action-title: ${{ inputs.title }}
120
+ single-action-changelog: ${{ inputs.changelog }}
124
121
  main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
125
122
  development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
126
123
  release-tree: ${{ vars.RELEASE_TREE || 'release' }}
127
124
  hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
128
- single-action: 'create_tag'
129
- single-action-issue: '${{ github.event.inputs.issue }}'
130
- single-action-version: '${{ github.event.inputs.version }}'
131
- agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
132
- agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
133
- agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
134
- agent-effort: ${{ vars.AGENT_EFFORT }}
135
- agent-command: ${{ vars.AGENT_COMMAND }}
136
- findings-provider: ${{ vars.FINDINGS_PROVIDER }}
137
- findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
138
- findings-model: ${{ vars.FINDINGS_MODEL }}
139
- findings-effort: ${{ vars.FINDINGS_EFFORT }}
140
- findings-command: ${{ vars.FINDINGS_COMMAND }}
141
- fixer-provider: ${{ vars.FIXER_PROVIDER }}
142
- fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
143
- fixer-model: ${{ vars.FIXER_MODEL }}
144
- fixer-effort: ${{ vars.FIXER_EFFORT }}
145
- fixer-command: ${{ vars.FIXER_COMMAND }}
125
+ release-workflow: ${{ vars.RELEASE_WORKFLOW || 'release_workflow.yml' }}
126
+ hotfix-workflow: ${{ vars.HOTFIX_WORKFLOW || 'hotfix_workflow.yml' }}
127
+ release-reconciliation-strategy: ${{ vars.RELEASE_RECONCILIATION_STRATEGY || 'production-lineage' }}
128
+ hotfix-reconciliation-strategy: ${{ vars.HOTFIX_RECONCILIATION_STRATEGY || 'production-lineage' }}
129
+ reconciliation-pr-mode: ${{ vars.RECONCILIATION_PR_MODE || 'auto' }}
130
+ merge-queue-check-attestations: ${{ vars.MERGE_QUEUE_CHECK_ATTESTATIONS || '[]' }}
131
+ reconciliation-backmerge-mode: ${{ vars.RECONCILIATION_BACKMERGE_MODE || 'auto' }}
132
+ hotfix-active-release-policy: ${{ vars.HOTFIX_ACTIVE_RELEASE_POLICY || 'prefer-release' }}
133
+ reconciliation-tree: ${{ vars.RECONCILIATION_TREE || 'sync' }}
134
+ reconciliation-cleanup: ${{ vars.RECONCILIATION_CLEANUP || 'all' }}
135
+ reconciliation-issue-completion: ${{ vars.RECONCILIATION_ISSUE_COMPLETION || 'close' }}
136
+ orchestration-presentation-mode: ${{ vars.ORCHESTRATION_PRESENTATION_MODE || 'guided' }}
137
+ orchestration-diagrams: ${{ vars.ORCHESTRATION_DIAGRAMS || 'true' }}
138
+ orchestration-comment-mode: ${{ vars.ORCHESTRATION_COMMENT_MODE || 'update' }}
139
+ repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
140
+ issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
141
+ pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
142
+ token: ${{ secrets.PAT }}
143
+
144
+ publish:
145
+ name: Publish accepted production commit
146
+ if: ${{ inputs.mode == 'publish' }}
147
+ runs-on: ubuntu-latest
148
+ needs: validate
149
+ timeout-minutes: 30
150
+ permissions:
151
+ contents: write
152
+ issues: write
153
+ pull-requests: write
154
+ steps:
155
+ - uses: actions/checkout@v5
156
+ with:
157
+ persist-credentials: false
158
+ ref: ${{ vars.MAIN_BRANCH || 'master' }}
159
+ - name: Create or verify production tag
160
+ uses: vypdev/copilot@v3
161
+ with:
162
+ single-action: create_tag
163
+ single-action-issue: ${{ inputs.issue }}
164
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
165
+ single-action-operation-id: ${{ inputs.operation-id }}
166
+ single-action-version: ${{ inputs.version }}
146
167
  token: ${{ secrets.PAT }}
147
-
148
- - name: Copilot - Create Release
168
+ # Add project-specific deployment here. It runs only after production promotion merged.
169
+ - name: Create or verify GitHub Release
149
170
  uses: vypdev/copilot@v3
150
- if: ${{ success() }}
151
171
  with:
152
- debug: ${{ vars.DEBUG }}
153
- main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
154
- development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
155
- release-tree: ${{ vars.RELEASE_TREE || 'release' }}
156
- hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
157
- single-action: 'create_release'
158
- single-action-issue: '${{ github.event.inputs.issue }}'
159
- single-action-version: '${{ github.event.inputs.version }}'
160
- single-action-title: '${{ github.event.inputs.title }}'
161
- single-action-changelog: '${{ github.event.inputs.changelog }}'
162
- agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
163
- agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
164
- agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
165
- agent-effort: ${{ vars.AGENT_EFFORT }}
166
- agent-command: ${{ vars.AGENT_COMMAND }}
167
- findings-provider: ${{ vars.FINDINGS_PROVIDER }}
168
- findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
169
- findings-model: ${{ vars.FINDINGS_MODEL }}
170
- findings-effort: ${{ vars.FINDINGS_EFFORT }}
171
- findings-command: ${{ vars.FINDINGS_COMMAND }}
172
- fixer-provider: ${{ vars.FIXER_PROVIDER }}
173
- fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
174
- fixer-model: ${{ vars.FIXER_MODEL }}
175
- fixer-effort: ${{ vars.FIXER_EFFORT }}
176
- fixer-command: ${{ vars.FIXER_COMMAND }}
172
+ single-action: create_release
173
+ single-action-issue: ${{ inputs.issue }}
174
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
175
+ single-action-operation-id: ${{ inputs.operation-id }}
176
+ single-action-version: ${{ inputs.version }}
177
177
  token: ${{ secrets.PAT }}
178
-
179
- # Example: generic step to perform the deployment (uncomment and adjust as needed)
180
- # - name: Generic step
181
- # uses: whatever/action@v2
182
-
183
- - name: Copilot - Deploy success notification
178
+ - name: Start configured reconciliation
184
179
  uses: vypdev/copilot@v3
185
- if: ${{ success() }}
186
180
  with:
187
- debug: ${{ vars.DEBUG }}
188
- main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
189
- development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
190
- release-tree: ${{ vars.RELEASE_TREE || 'release' }}
191
- hotfix-tree: ${{ vars.HOTFIX_TREE || 'hotfix' }}
192
- single-action: 'deployed_action'
193
- single-action-issue: '${{ github.event.inputs.issue }}'
194
- agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
195
- agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
196
- agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
197
- agent-effort: ${{ vars.AGENT_EFFORT }}
198
- agent-command: ${{ vars.AGENT_COMMAND }}
199
- findings-provider: ${{ vars.FINDINGS_PROVIDER }}
200
- findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
201
- findings-model: ${{ vars.FINDINGS_MODEL }}
202
- findings-effort: ${{ vars.FINDINGS_EFFORT }}
203
- findings-command: ${{ vars.FINDINGS_COMMAND }}
204
- fixer-provider: ${{ vars.FIXER_PROVIDER }}
205
- fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
206
- fixer-model: ${{ vars.FIXER_MODEL }}
207
- fixer-effort: ${{ vars.FIXER_EFFORT }}
208
- fixer-command: ${{ vars.FIXER_COMMAND }}
181
+ single-action: published_deployment_action
182
+ single-action-issue: ${{ inputs.issue }}
183
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
184
+ single-action-operation-id: ${{ inputs.operation-id }}
185
+ single-action-version: ${{ inputs.version }}
209
186
  token: ${{ secrets.PAT }}
210
187
 
211
188
  report-failure:
212
- name: Report deployment failure
189
+ name: Report orchestration failure
213
190
  runs-on: ubuntu-latest
214
191
  timeout-minutes: 5
215
- needs: [ queue-gate, prepare-version-files, tag ]
216
- if: ${{ failure() && github.event.inputs.issue != '-1' }}
192
+ needs: [validate, prepare-version-files, promote, publish]
193
+ if: ${{ failure() && needs.validate.result == 'success' }}
217
194
  permissions:
218
195
  issues: write
219
196
  steps:
220
- - name: Report failure on launcher issue
221
- # This tag is published after the release changes reach master.
197
+ - name: Persist publication failure
198
+ if: ${{ inputs.mode == 'publish' }}
199
+ uses: vypdev/copilot@v3
200
+ with:
201
+ single-action: failed_deployment_action
202
+ single-action-issue: ${{ inputs.issue }}
203
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
204
+ single-action-operation-id: ${{ inputs.operation-id }}
205
+ single-action-version: ${{ inputs.version }}
206
+ single-action-message: Publication failed. Review ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} before retrying.
207
+ token: ${{ secrets.PAT }}
208
+ - name: Report preparation failure
209
+ if: ${{ inputs.mode == 'prepare' }}
222
210
  uses: vypdev/copilot@v3
223
211
  with:
224
212
  single-action: publish_issue_comment
225
- single-action-issue: '${{ github.event.inputs.issue }}'
213
+ single-action-issue: ${{ inputs.issue }}
214
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
226
215
  single-action-message: |
227
- ## ❌ Release deployment failed
216
+ ## ❌ Release orchestration needs attention
228
217
 
229
- The release workflow did not complete successfully.
218
+ Phase `${{ inputs.mode }}` failed. Review the control center before retrying.
230
219
 
231
220
  [Review the workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
232
- token: ${{ github.token }}
221
+ token: ${{ secrets.PAT }}
@@ -1,112 +0,0 @@
1
- /**
2
- * Bugbot types: data structures used across detection, publishing, and autofix.
3
- * GitHub supplies the canonical PR diff and the configured agent can inspect
4
- * the read-only workspace for context before returning findings.
5
- */
6
- /** Single finding from the configured findings agent. */
7
- export interface BugbotFinding {
8
- id: string;
9
- title: string;
10
- description: string;
11
- /** Computed locally; never accepted from the agent as an authority. */
12
- fingerprint?: string;
13
- /** Location-independent reconciliation identity computed locally. */
14
- semanticFingerprint?: string;
15
- file?: string;
16
- line?: number;
17
- endLine?: number;
18
- severity?: string;
19
- confidence?: number;
20
- category?: string;
21
- evidence?: string;
22
- suggestion?: string;
23
- /** Optional enclosing symbol used only to improve local identity. */
24
- symbol?: string;
25
- /** Short code anchor used only to improve local identity. */
26
- codeSnippet?: string;
27
- /** Exact replacement text for a GitHub suggested change, when safe and local. */
28
- suggestedCode?: string;
29
- }
30
- export interface ExistingIssueFindingInfo {
31
- commentId: number;
32
- resolved: boolean;
33
- fingerprint?: string;
34
- semanticFingerprint?: string;
35
- resolution?: BugbotFindingResolution;
36
- }
37
- export interface ExistingPullRequestFindingInfo {
38
- commentIdentity: string;
39
- pullRequestNumber: number;
40
- resolved: boolean;
41
- /** Fresh GitHub thread state when the provider supplied it. */
42
- threadResolved?: boolean;
43
- fingerprint?: string;
44
- semanticFingerprint?: string;
45
- resolution?: BugbotFindingResolution;
46
- }
47
- export type BugbotFindingResolution = 'fixed' | 'obsolete' | 'dismissed';
48
- /** Tracks each published destination independently so partial failures remain retryable. */
49
- export interface ExistingFindingInfo {
50
- issue?: ExistingIssueFindingInfo;
51
- pullRequest?: ExistingPullRequestFindingInfo;
52
- }
53
- export type ExistingByFindingId = Record<string, ExistingFindingInfo>;
54
- export declare function isExistingFindingFullyResolved(finding: ExistingFindingInfo): boolean;
55
- /** PR metadata used only when publishing findings to GitHub. */
56
- export interface BugbotPrContext {
57
- prHeadSha: string;
58
- prFiles: Array<{
59
- filename: string;
60
- status: string;
61
- }>;
62
- pathToFirstDiffLine: Record<string, number>;
63
- pathToDiffLocations?: Record<string, Array<{
64
- line: number;
65
- side: 'LEFT' | 'RIGHT';
66
- }>>;
67
- changes?: Array<{
68
- filename: string;
69
- status: string;
70
- additions: number;
71
- deletions: number;
72
- patch: string;
73
- }>;
74
- }
75
- /** Unresolved finding with a prompt-bounded comment body. */
76
- export interface UnresolvedFindingWithBody {
77
- id: string;
78
- fullBody: string;
79
- }
80
- /** Finding projection used by prompts that ask the agent to select findings. */
81
- export interface UnresolvedFindingSummary {
82
- id: string;
83
- title: string;
84
- description?: string;
85
- file?: string;
86
- line?: number;
87
- }
88
- export declare function findExistingFindingInfo(existingByFindingId: ExistingByFindingId, finding: Pick<BugbotFinding, 'id' | 'fingerprint' | 'semanticFingerprint'>): ExistingFindingInfo | undefined;
89
- /** Full context for detection, mutation, publishing, and autofix intent. */
90
- export interface BugbotContext {
91
- existingByFindingId: ExistingByFindingId;
92
- /** Full issue-comment bodies reserved for read-modify-write operations. */
93
- issueComments: Array<{
94
- id: number;
95
- body: string | null;
96
- }>;
97
- openPrNumbers: number[];
98
- /** Bounded text sent to the configured findings agent. */
99
- previousFindingsBlock: string;
100
- /** Canonical, bounded PR diff supplied by the GitHub API. */
101
- reviewDiffBlock?: string;
102
- /** Bounded human review discussion that may affect finding validity. */
103
- reviewConversationBlock?: string;
104
- prContext: BugbotPrContext | null;
105
- /** Bounded bodies used by intent prompts and autofix. */
106
- unresolvedFindingsWithBody: UnresolvedFindingWithBody[];
107
- /** Ordered, bounded rule content supplied to the reviewer. */
108
- reviewRulesBlock?: string;
109
- /** Auditable rule identities in effective precedence order. */
110
- reviewRuleSources?: string[];
111
- omittedReviewRules?: number;
112
- }
@@ -1,2 +0,0 @@
1
- export type { AgentConfiguration, AgentProvider, AgentCapability, AgentTask, AgentTaskConfiguration, } from '../../domain/agent';
2
- export { isAgentConfigurationReady } from '../../domain/agent';
@@ -1,28 +0,0 @@
1
- import { AgentConfiguration, AgentTask, AgentTaskConfiguration } from './agent';
2
- import { type PullRequestDescriptionMode } from '../../domain/pull_request_description';
3
- import { type BugbotReviewConfiguration } from '../../domain/bugbot/review_configuration';
4
- export declare class Ai {
5
- private aiPullRequestDescription;
6
- private aiMembersOnly;
7
- private aiIgnoreFiles;
8
- private aiIncludeReasoning;
9
- private bugbotMinSeverity;
10
- private bugbotCommentLimit;
11
- private bugbotFixVerifyCommands;
12
- private agentTasks;
13
- private pullRequestDescriptionMode;
14
- private bugbotReviewConfiguration;
15
- constructor(_configurationSource: string, model: string, aiPullRequestDescription: boolean, aiMembersOnly: boolean, aiIgnoreFiles: string[], aiIncludeReasoning: boolean, bugbotMinSeverity: string, bugbotCommentLimit: number, bugbotFixVerifyCommands?: string[], agentTasks?: AgentTaskConfiguration, pullRequestDescriptionMode?: PullRequestDescriptionMode, bugbotReviewConfiguration?: Partial<BugbotReviewConfiguration>);
16
- getAiPullRequestDescription(): boolean;
17
- getPullRequestDescriptionMode(): PullRequestDescriptionMode;
18
- getAiMembersOnly(): boolean;
19
- getAiIgnoreFiles(): string[];
20
- getAiIncludeReasoning(): boolean;
21
- getBugbotMinSeverity(): string;
22
- getBugbotCommentLimit(): number;
23
- getBugbotFixVerifyCommands(): string[];
24
- getBugbotReviewConfiguration(): BugbotReviewConfiguration;
25
- /** Applies command-scoped review options and restores the shared configuration afterwards. */
26
- withBugbotReviewConfiguration<T>(overrides: Partial<BugbotReviewConfiguration>, operation: () => Promise<T>): Promise<T>;
27
- getAgentConfiguration(task: AgentTask): AgentConfiguration;
28
- }
@@ -1,6 +0,0 @@
1
- export declare class BranchConfiguration {
2
- name: string;
3
- oid: string;
4
- children: BranchConfiguration[];
5
- constructor(data: unknown);
6
- }
@@ -1,12 +0,0 @@
1
- export declare class Branches {
2
- main: string;
3
- defaultBranch: string;
4
- development: string;
5
- featureTree: string;
6
- bugfixTree: string;
7
- hotfixTree: string;
8
- releaseTree: string;
9
- docsTree: string;
10
- choreTree: string;
11
- constructor(main: string, defaultBranch: string, development: string, featureTree: string, bugfixTree: string, hotfixTree: string, releaseTree: string, docsTree: string, choreTree: string);
12
- }
@@ -1,8 +0,0 @@
1
- import type { EventCommitPayload, ExecutionInputs } from './execution_inputs';
2
- export declare class Commit {
3
- private inputs;
4
- constructor(inputs?: ExecutionInputs | undefined);
5
- get branchReference(): string;
6
- get branch(): string;
7
- get commits(): EventCommitPayload[];
8
- }
@@ -1,30 +0,0 @@
1
- import { BranchConfiguration } from "./branch_configuration";
2
- import { RecommendationState } from "./recommendation_state";
3
- import { Result } from "./result";
4
- /** Version of the durable configuration contract stored in issue/PR content. */
5
- export declare const CONFIG_SCHEMA_VERSION = 2;
6
- export interface ConfigurationMigrationResult {
7
- readonly payload: Record<string, unknown>;
8
- readonly sourceVersion: number;
9
- readonly migrated: boolean;
10
- readonly futureVersion: boolean;
11
- }
12
- /**
13
- * Normalizes persisted configuration without silently losing fields from a
14
- * newer installation. Unknown keys are deliberately retained so a downgrade
15
- * or a mixed-version workflow can round-trip data safely.
16
- */
17
- export declare function migrateConfigurationPayload(value: unknown): ConfigurationMigrationResult;
18
- export declare class Config {
19
- readonly schemaVersion: number;
20
- branchType: string;
21
- releaseBranch: string | undefined;
22
- workingBranch: string | undefined;
23
- parentBranch: string | undefined;
24
- hotfixOriginBranch: string | undefined;
25
- hotfixBranch: string | undefined;
26
- results: Result[];
27
- branchConfiguration: BranchConfiguration | undefined;
28
- recommendationState: RecommendationState | undefined;
29
- constructor(data: unknown);
30
- }
@@ -1,5 +0,0 @@
1
- export declare class Emoji {
2
- emojiLabeledTitle: boolean;
3
- branchManagementEmoji: string;
4
- constructor(emojiLabeledTitle: boolean, branchManagementEmoji: string);
5
- }