@vypdev/copilot 3.3.1 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -13,6 +13,9 @@ jobs:
13
13
  name: Copilot - Commit
14
14
  runs-on: ubuntu-latest
15
15
  timeout-minutes: 120
16
+ concurrency:
17
+ group: copilot-push-${{ github.repository }}-${{ github.ref_name }}
18
+ cancel-in-progress: true
16
19
  permissions:
17
20
  contents: read
18
21
  steps:
@@ -23,6 +26,7 @@ jobs:
23
26
  fetch-depth: 0
24
27
 
25
28
  - name: Fetch push review range
29
+ shell: bash
26
30
  if: github.event.after != '0000000000000000000000000000000000000000'
27
31
  env:
28
32
  BEFORE_SHA: ${{ github.event.before }}
@@ -36,6 +40,10 @@ jobs:
36
40
 
37
41
  - uses: vypdev/copilot@v3
38
42
  with:
43
+ repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
44
+ issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
45
+ pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
46
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
39
47
  ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
40
48
  debug: ${{ vars.DEBUG }}
41
49
  main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
@@ -46,15 +54,12 @@ jobs:
46
54
  release-tree: ${{ vars.RELEASE_TREE || 'release' }}
47
55
  docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
48
56
  chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
49
- branch-management-always: ${{ vars.BRANCH_MANAGEMENT_ALWAYS || 'false' }}
57
+ issue-managed-branches: ${{ vars.ISSUE_MANAGED_BRANCHES || 'true' }}
58
+ pre-branch-sdd: ${{ vars.PRE_BRANCH_SDD || 'false' }}
50
59
  reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
51
60
  desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
52
61
  desired-reviewers-count: ${{ vars.DESIRED_REVIEWERS_COUNT || '1' }}
53
- merge-timeout: ${{ vars.MERGE_TIMEOUT || '600' }}
54
- issues-locale: ${{ vars.ISSUES_LOCALE || 'en-US' }}
55
- pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || 'en-US' }}
56
62
  commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
57
- ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
58
63
  ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
59
64
  ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
60
65
  ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
@@ -76,32 +81,28 @@ jobs:
76
81
  project-ids: ${{ vars.PROJECT_IDS }}
77
82
  agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
78
83
  agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
79
- agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
84
+ agent-model: ${{ vars.AGENT_MODEL || 'gpt-6-luna' }}
80
85
  agent-effort: ${{ vars.AGENT_EFFORT }}
81
- agent-command: ${{ vars.AGENT_COMMAND }}
86
+ agent-executable: ${{ vars.AGENT_EXECUTABLE }}
82
87
  findings-provider: ${{ vars.FINDINGS_PROVIDER }}
83
88
  findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
84
89
  findings-model: ${{ vars.FINDINGS_MODEL }}
85
90
  findings-effort: ${{ vars.FINDINGS_EFFORT }}
86
- findings-command: ${{ vars.FINDINGS_COMMAND }}
91
+ findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
87
92
  fixer-provider: ${{ vars.FIXER_PROVIDER }}
88
93
  fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
89
94
  fixer-model: ${{ vars.FIXER_MODEL }}
90
95
  fixer-effort: ${{ vars.FIXER_EFFORT }}
91
- fixer-command: ${{ vars.FIXER_COMMAND }}
96
+ fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
92
97
  token: ${{ secrets.PAT }}
93
98
  env:
94
99
  AGENT_PROVIDER: ${{ vars.AGENT_PROVIDER || 'codex' }}
95
100
  AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
96
101
  AGENT_MODEL: ${{ vars.AGENT_MODEL }}
97
102
  AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
98
- AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
99
103
  AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
100
- AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-5.6-luna' }}
101
- AGENT_COMMAND: ${{ vars.AGENT_COMMAND }}
102
- CODEX_VERSION: ${{ vars.CODEX_VERSION }}
103
- OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
104
- CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
104
+ AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-6-luna' }}
105
+ AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
105
106
  OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
106
107
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
107
108
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
@@ -109,4 +110,3 @@ jobs:
109
110
  OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
110
111
  CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
111
112
  CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
112
- CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
@@ -38,11 +38,6 @@ on:
38
38
  required: false
39
39
  default: false
40
40
  type: boolean
41
- check_codex:
42
- description: Check CODEX_ACCESS_TOKEN
43
- required: false
44
- default: false
45
- type: boolean
46
41
  check_codex_api_key:
47
42
  description: Check CODEX_API_KEY
48
43
  required: false
@@ -159,21 +154,6 @@ jobs:
159
154
  [[ -n "${OPENCODE_API_KEY:-}" ]] || { echo 'Required credential is missing.' >&2; exit 1; }
160
155
  curl --fail --silent --show-error --location --max-time 20 -H "Authorization: Bearer $OPENCODE_API_KEY" https://opencode.ai/zen/v1/models >/dev/null
161
156
 
162
- verify-codex:
163
- if: ${{ inputs.check_codex }}
164
- name: Verify CODEX_ACCESS_TOKEN
165
- runs-on: ubuntu-latest
166
- timeout-minutes: 10
167
- steps:
168
- - name: Validate Codex token without exposing its value
169
- shell: bash
170
- env:
171
- CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
172
- run: |
173
- set -euo pipefail
174
- [[ -n "${CODEX_ACCESS_TOKEN:-}" ]] || { echo 'Required credential is missing.' >&2; exit 1; }
175
- curl --fail --silent --show-error --location --max-time 20 -H "Authorization: Bearer $CODEX_ACCESS_TOKEN" https://api.openai.com/v1/models >/dev/null
176
-
177
157
  verify-codex-api-key:
178
158
  if: ${{ inputs.check_codex_api_key }}
179
159
  name: Verify CODEX_API_KEY
@@ -0,0 +1,91 @@
1
+ name: Copilot - Deployment Orchestration
2
+
3
+ on:
4
+ pull_request:
5
+ types: [closed]
6
+
7
+ jobs:
8
+ resolve-operation:
9
+ name: Resolve managed deployment ownership
10
+ if: ${{ github.event.pull_request.head.repo.full_name == github.repository && contains(github.event.pull_request.body || '', '<!-- copilot-deployment ') }}
11
+ runs-on: ubuntu-latest
12
+ timeout-minutes: 5
13
+ permissions:
14
+ contents: read
15
+ issues: read
16
+ pull-requests: read
17
+ outputs:
18
+ operation-id: ${{ steps.identity.outputs.operation-id }}
19
+ issue: ${{ steps.identity.outputs.issue }}
20
+ steps:
21
+ - name: Prove managed operation identity
22
+ id: identity
23
+ uses: actions/github-script@v9
24
+ env:
25
+ PR_BODY: ${{ github.event.pull_request.body }}
26
+ with:
27
+ script: |
28
+ const body = process.env.PR_BODY || '';
29
+ if (body.length > 70000) return core.setFailed('The managed deployment marker input is too large.');
30
+ const matches = [...body.matchAll(/<!-- copilot-deployment operation-id="([A-Za-z0-9][A-Za-z0-9._-]{7,127})" phase="(promotion|reconciliation)" issue="([1-9][0-9]*)" -->/g)];
31
+ if (matches.length !== 1) return core.setFailed('Exactly one valid managed deployment marker is required.');
32
+ const [, operationId, phase, issueText] = matches[0];
33
+ const issue = Number(issueText);
34
+ if (!Number.isSafeInteger(issue) || issue < 1) return core.setFailed('The launcher issue is invalid.');
35
+ const response = await github.rest.issues.get({ ...context.repo, issue_number: issue });
36
+ if (response.data.pull_request) return core.setFailed('The deployment launcher must be an issue.');
37
+ const description = response.data.body || '';
38
+ const start = '<!-- copilot-configuration-start';
39
+ const end = 'copilot-configuration-end -->';
40
+ const startIndex = description.indexOf(start);
41
+ const endIndex = description.indexOf(end, startIndex + start.length);
42
+ if (startIndex < 0 || endIndex < 0 || description.indexOf(start, startIndex + start.length) >= 0) {
43
+ return core.setFailed('The launcher issue has no unique durable configuration.');
44
+ }
45
+ let payload;
46
+ try { payload = JSON.parse(description.slice(startIndex + start.length, endIndex)); }
47
+ catch { return core.setFailed('The launcher issue configuration is invalid.'); }
48
+ const state = payload?.deploymentOrchestration;
49
+ if (payload?.schemaVersion !== 3 || state?.stateVersion !== 1 || !Number.isSafeInteger(state?.revision) || state.revision < 1) {
50
+ return core.setFailed('The launcher issue has no supported deployment state.');
51
+ }
52
+ if (state.operationId !== operationId) return core.setFailed('The pull request does not own the durable deployment operation.');
53
+ const number = context.payload.pull_request.number;
54
+ const ownsPullRequest = phase === 'promotion'
55
+ ? state.promotionPullRequest === number
56
+ : Array.isArray(state.reconciliationTargets) && state.reconciliationTargets.some(target => target?.pullRequest === number);
57
+ if (!ownsPullRequest) return core.setFailed('The pull request is not recorded by the durable deployment state.');
58
+ core.setOutput('operation-id', operationId);
59
+ core.setOutput('issue', issueText);
60
+
61
+ mutate:
62
+ name: Advance durable deployment operation
63
+ needs: resolve-operation
64
+ if: ${{ needs.resolve-operation.result == 'success' }}
65
+ runs-on: ubuntu-latest
66
+ timeout-minutes: 15
67
+ concurrency:
68
+ group: copilot-deployment-${{ github.repository_id }}-${{ needs.resolve-operation.outputs.issue }}
69
+ cancel-in-progress: false
70
+ queue: max
71
+ permissions:
72
+ contents: read
73
+ issues: write
74
+ pull-requests: read
75
+ actions: write
76
+ steps:
77
+ - name: Checkout trusted base branch
78
+ uses: actions/checkout@v5
79
+ with:
80
+ persist-credentials: false
81
+ ref: ${{ github.event.pull_request.base.ref }}
82
+ fetch-depth: 1
83
+ - name: Continue from current durable state
84
+ uses: vypdev/copilot@v3
85
+ with:
86
+ single-action: continue_deployment_action
87
+ single-action-issue: ${{ needs.resolve-operation.outputs.issue }}
88
+ single-action-operation-id: ${{ needs.resolve-operation.outputs.operation-id }}
89
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
90
+ merge-queue-check-attestations: ${{ vars.MERGE_QUEUE_CHECK_ATTESTATIONS || '[]' }}
91
+ token: ${{ secrets.PAT }}
@@ -2,11 +2,11 @@ name: Copilot - Issue
2
2
 
3
3
  on:
4
4
  issues:
5
- types: [opened, reopened, edited, labeled, unlabeled, assigned, unassigned]
5
+ types: [opened, reopened, closed, edited, labeled, unlabeled, assigned, unassigned]
6
6
 
7
7
  jobs:
8
8
  copilot-issues:
9
- if: ${{ vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN }}
9
+ if: ${{ (github.event.action == 'closed' && github.event.issue.state == 'closed') || vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN }}
10
10
  name: Copilot - Issue
11
11
  runs-on: ubuntu-latest
12
12
  timeout-minutes: 120
@@ -20,6 +20,9 @@ jobs:
20
20
 
21
21
  - uses: vypdev/copilot@v3
22
22
  with:
23
+ repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
24
+ issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
25
+ pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
23
26
  ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
24
27
  debug: ${{ vars.DEBUG }}
25
28
  main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
@@ -30,15 +33,13 @@ jobs:
30
33
  release-tree: ${{ vars.RELEASE_TREE || 'release' }}
31
34
  docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
32
35
  chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
33
- branch-management-always: ${{ vars.BRANCH_MANAGEMENT_ALWAYS || 'false' }}
36
+ issue-managed-branches: ${{ vars.ISSUE_MANAGED_BRANCHES || 'true' }}
37
+ pre-branch-sdd: ${{ vars.PRE_BRANCH_SDD || 'false' }}
38
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
34
39
  reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
35
40
  desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
36
41
  desired-reviewers-count: ${{ vars.DESIRED_REVIEWERS_COUNT || '1' }}
37
- merge-timeout: ${{ vars.MERGE_TIMEOUT || '600' }}
38
- issues-locale: ${{ vars.ISSUES_LOCALE || 'en-US' }}
39
- pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || 'en-US' }}
40
42
  commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
41
- ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
42
43
  ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
43
44
  ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
44
45
  ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
@@ -60,37 +61,33 @@ jobs:
60
61
  project-column-pull-request-in-progress: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_IN_PROGRESS || 'In Progress' }}
61
62
  agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
62
63
  agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
63
- agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
64
+ agent-model: ${{ vars.AGENT_MODEL || 'gpt-6-luna' }}
64
65
  agent-effort: ${{ vars.AGENT_EFFORT }}
65
- agent-command: ${{ vars.AGENT_COMMAND }}
66
+ agent-executable: ${{ vars.AGENT_EXECUTABLE }}
66
67
  findings-provider: ${{ vars.FINDINGS_PROVIDER }}
67
68
  findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
68
69
  findings-model: ${{ vars.FINDINGS_MODEL }}
69
70
  findings-effort: ${{ vars.FINDINGS_EFFORT }}
70
- findings-command: ${{ vars.FINDINGS_COMMAND }}
71
+ findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
71
72
  fixer-provider: ${{ vars.FIXER_PROVIDER }}
72
73
  fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
73
74
  fixer-model: ${{ vars.FIXER_MODEL }}
74
75
  fixer-effort: ${{ vars.FIXER_EFFORT }}
75
- fixer-command: ${{ vars.FIXER_COMMAND }}
76
+ fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
76
77
  planner-provider: ${{ vars.PLANNER_PROVIDER }}
77
78
  planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
78
79
  planner-model: ${{ vars.PLANNER_MODEL }}
79
80
  planner-effort: ${{ vars.PLANNER_EFFORT }}
80
- planner-command: ${{ vars.PLANNER_COMMAND }}
81
+ planner-executable: ${{ vars.PLANNER_EXECUTABLE }}
81
82
  token: ${{ secrets.PAT }}
82
83
  env:
83
84
  AGENT_PROVIDER: ${{ vars.AGENT_PROVIDER || 'codex' }}
84
85
  AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
85
86
  AGENT_MODEL: ${{ vars.AGENT_MODEL }}
86
87
  AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
87
- AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
88
88
  AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
89
- AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-5.6-luna' }}
90
- AGENT_COMMAND: ${{ vars.AGENT_COMMAND }}
91
- CODEX_VERSION: ${{ vars.CODEX_VERSION }}
92
- OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
93
- CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
89
+ AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-6-luna' }}
90
+ AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
94
91
  OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
95
92
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
96
93
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
@@ -98,4 +95,3 @@ jobs:
98
95
  OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
99
96
  CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
100
97
  CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
101
- CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
@@ -11,6 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  timeout-minutes: 120
13
13
  permissions:
14
+ checks: write
14
15
  contents: read
15
16
  steps:
16
17
  - name: Checkout Repository
@@ -21,6 +22,9 @@ jobs:
21
22
 
22
23
  - uses: vypdev/copilot@v3
23
24
  with:
25
+ repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
26
+ issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
27
+ pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
24
28
  ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
25
29
  debug: ${{ vars.DEBUG }}
26
30
  main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
@@ -31,15 +35,13 @@ jobs:
31
35
  release-tree: ${{ vars.RELEASE_TREE || 'release' }}
32
36
  docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
33
37
  chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
34
- branch-management-always: ${{ vars.BRANCH_MANAGEMENT_ALWAYS || 'false' }}
38
+ issue-managed-branches: ${{ vars.ISSUE_MANAGED_BRANCHES || 'true' }}
39
+ pre-branch-sdd: ${{ vars.PRE_BRANCH_SDD || 'false' }}
40
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
35
41
  reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
36
42
  desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
37
43
  desired-reviewers-count: ${{ vars.DESIRED_REVIEWERS_COUNT || '1' }}
38
- merge-timeout: ${{ vars.MERGE_TIMEOUT || '600' }}
39
- issues-locale: ${{ vars.ISSUES_LOCALE || 'en-US' }}
40
- pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || 'en-US' }}
41
44
  commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
42
- ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
43
45
  ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
44
46
  ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
45
47
  ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
@@ -60,34 +62,34 @@ jobs:
60
62
  project-column-pull-request-in-progress: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_IN_PROGRESS || 'In Progress' }}
61
63
  agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
62
64
  agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
63
- agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
65
+ agent-model: ${{ vars.AGENT_MODEL || 'gpt-6-luna' }}
64
66
  agent-effort: ${{ vars.AGENT_EFFORT }}
65
- agent-command: ${{ vars.AGENT_COMMAND }}
67
+ agent-executable: ${{ vars.AGENT_EXECUTABLE }}
66
68
  findings-provider: ${{ vars.FINDINGS_PROVIDER }}
67
69
  findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
68
70
  findings-model: ${{ vars.FINDINGS_MODEL }}
69
71
  findings-effort: ${{ vars.FINDINGS_EFFORT }}
70
- findings-command: ${{ vars.FINDINGS_COMMAND }}
72
+ findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
71
73
  fixer-provider: ${{ vars.FIXER_PROVIDER }}
72
74
  fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
73
75
  fixer-model: ${{ vars.FIXER_MODEL }}
74
76
  fixer-effort: ${{ vars.FIXER_EFFORT }}
75
- fixer-command: ${{ vars.FIXER_COMMAND }}
77
+ fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
76
78
  planner-provider: ${{ vars.PLANNER_PROVIDER }}
77
79
  planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
78
80
  planner-model: ${{ vars.PLANNER_MODEL }}
79
81
  planner-effort: ${{ vars.PLANNER_EFFORT }}
80
- planner-command: ${{ vars.PLANNER_COMMAND }}
82
+ planner-executable: ${{ vars.PLANNER_EXECUTABLE }}
81
83
  reviewer-provider: ${{ vars.REVIEWER_PROVIDER }}
82
84
  reviewer-model-provider: ${{ vars.REVIEWER_MODEL_PROVIDER }}
83
85
  reviewer-model: ${{ vars.REVIEWER_MODEL }}
84
86
  reviewer-effort: ${{ vars.REVIEWER_EFFORT }}
85
- reviewer-command: ${{ vars.REVIEWER_COMMAND }}
87
+ reviewer-executable: ${{ vars.REVIEWER_EXECUTABLE }}
86
88
  tester-provider: ${{ vars.TESTER_PROVIDER }}
87
89
  tester-model-provider: ${{ vars.TESTER_MODEL_PROVIDER }}
88
90
  tester-model: ${{ vars.TESTER_MODEL }}
89
91
  tester-effort: ${{ vars.TESTER_EFFORT }}
90
- tester-command: ${{ vars.TESTER_COMMAND }}
92
+ tester-executable: ${{ vars.TESTER_EXECUTABLE }}
91
93
  project-ids: ${{ vars.PROJECT_IDS }}
92
94
  token: ${{ secrets.PAT }}
93
95
  env:
@@ -95,13 +97,9 @@ jobs:
95
97
  AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
96
98
  AGENT_MODEL: ${{ vars.AGENT_MODEL }}
97
99
  AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
98
- AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
99
100
  AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
100
- AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-5.6-luna' }}
101
- AGENT_COMMAND: ${{ vars.AGENT_COMMAND }}
102
- CODEX_VERSION: ${{ vars.CODEX_VERSION }}
103
- OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
104
- CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
101
+ AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-6-luna' }}
102
+ AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
105
103
  OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
106
104
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
107
105
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
@@ -109,4 +107,4 @@ jobs:
109
107
  OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
110
108
  CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
111
109
  CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
112
- CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
110
+ COPILOT_EVIDENCE_TOKEN: ${{ github.token }}
@@ -1,17 +1,19 @@
1
1
  name: Copilot - Pull Request
2
+ run-name: Copilot PR · ${{ github.event_name }}:${{ github.event.action }}
2
3
 
3
4
  on:
4
5
  pull_request:
5
- types: [opened, reopened, edited, closed, synchronize]
6
- pull_request_review:
7
- types: [submitted, edited, dismissed]
6
+ types: [opened, reopened, closed, synchronize, ready_for_review]
8
7
 
9
8
  jobs:
10
9
  copilot-pull-requests:
11
- if: ${{ (vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN) && github.event.pull_request.head.repo.full_name == github.repository }}
10
+ if: ${{ github.event.pull_request.head.repo.full_name == github.repository && (vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN || ((github.event.action == 'opened' || github.event.action == 'reopened' || github.event.action == 'synchronize') && github.event.pull_request.user.login == github.actor)) }}
12
11
  name: Copilot - Pull Request
13
12
  runs-on: ubuntu-latest
14
13
  timeout-minutes: 120
14
+ concurrency:
15
+ group: copilot-pr-${{ github.repository }}-${{ github.event.pull_request.head.ref || github.ref_name }}-analysis
16
+ cancel-in-progress: true
15
17
  permissions:
16
18
  checks: write
17
19
  contents: read
@@ -23,6 +25,7 @@ jobs:
23
25
  fetch-depth: 0
24
26
 
25
27
  - name: Fetch incremental review range
28
+ shell: bash
26
29
  if: github.event.action == 'synchronize'
27
30
  env:
28
31
  BEFORE_SHA: ${{ github.event.before }}
@@ -35,6 +38,10 @@ jobs:
35
38
 
36
39
  - uses: vypdev/copilot@v3
37
40
  with:
41
+ repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
42
+ issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
43
+ pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
44
+ issue-workflow-profile: ${{ vars.COPILOT_ISSUE_WORKFLOW_PROFILE || '' }}
38
45
  ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
39
46
  debug: ${{ vars.DEBUG }}
40
47
  main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
@@ -45,15 +52,12 @@ jobs:
45
52
  release-tree: ${{ vars.RELEASE_TREE || 'release' }}
46
53
  docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
47
54
  chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
48
- branch-management-always: ${{ vars.BRANCH_MANAGEMENT_ALWAYS || 'false' }}
55
+ issue-managed-branches: ${{ vars.ISSUE_MANAGED_BRANCHES || 'true' }}
56
+ pre-branch-sdd: ${{ vars.PRE_BRANCH_SDD || 'false' }}
49
57
  reopen-issue-on-push: ${{ vars.REOPEN_ISSUE_ON_PUSH || 'true' }}
50
58
  desired-assignees-count: ${{ vars.DESIRED_ASSIGNEES_COUNT || '1' }}
51
59
  desired-reviewers-count: ${{ vars.DESIRED_REVIEWERS_COUNT || '1' }}
52
- merge-timeout: ${{ vars.MERGE_TIMEOUT || '600' }}
53
- issues-locale: ${{ vars.ISSUES_LOCALE || 'en-US' }}
54
- pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || 'en-US' }}
55
60
  commit-prefix-transforms: ${{ vars.COMMIT_PREFIX_TRANSFORMS || 'replace-slash' }}
56
- ai-pull-request-description: ${{ vars.AI_PULL_REQUEST_DESCRIPTION || 'true' }}
57
61
  ai-pull-request-description-mode: ${{ vars.AI_PULL_REQUEST_DESCRIPTION_MODE || 'replace' }}
58
62
  ai-members-only: ${{ vars.AI_MEMBERS_ONLY || 'false' }}
59
63
  ai-include-reasoning: ${{ vars.AI_INCLUDE_REASONING || 'false' }}
@@ -74,29 +78,29 @@ jobs:
74
78
  project-column-pull-request-in-progress: ${{ vars.PROJECT_COLUMN_PULL_REQUEST_IN_PROGRESS || 'In Progress' }}
75
79
  agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
76
80
  agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
77
- agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
81
+ agent-model: ${{ vars.AGENT_MODEL || 'gpt-6-luna' }}
78
82
  agent-effort: ${{ vars.AGENT_EFFORT }}
79
- agent-command: ${{ vars.AGENT_COMMAND }}
83
+ agent-executable: ${{ vars.AGENT_EXECUTABLE }}
80
84
  findings-provider: ${{ vars.FINDINGS_PROVIDER }}
81
85
  findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
82
86
  findings-model: ${{ vars.FINDINGS_MODEL }}
83
87
  findings-effort: ${{ vars.FINDINGS_EFFORT }}
84
- findings-command: ${{ vars.FINDINGS_COMMAND }}
88
+ findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
85
89
  fixer-provider: ${{ vars.FIXER_PROVIDER }}
86
90
  fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
87
91
  fixer-model: ${{ vars.FIXER_MODEL }}
88
92
  fixer-effort: ${{ vars.FIXER_EFFORT }}
89
- fixer-command: ${{ vars.FIXER_COMMAND }}
93
+ fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
90
94
  planner-provider: ${{ vars.PLANNER_PROVIDER }}
91
95
  planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
92
96
  planner-model: ${{ vars.PLANNER_MODEL }}
93
97
  planner-effort: ${{ vars.PLANNER_EFFORT }}
94
- planner-command: ${{ vars.PLANNER_COMMAND }}
98
+ planner-executable: ${{ vars.PLANNER_EXECUTABLE }}
95
99
  reviewer-provider: ${{ vars.REVIEWER_PROVIDER }}
96
100
  reviewer-model-provider: ${{ vars.REVIEWER_MODEL_PROVIDER }}
97
101
  reviewer-model: ${{ vars.REVIEWER_MODEL }}
98
102
  reviewer-effort: ${{ vars.REVIEWER_EFFORT }}
99
- reviewer-command: ${{ vars.REVIEWER_COMMAND }}
103
+ reviewer-executable: ${{ vars.REVIEWER_EXECUTABLE }}
100
104
  project-ids: ${{ vars.PROJECT_IDS }}
101
105
  token: ${{ secrets.PAT }}
102
106
  env:
@@ -104,13 +108,9 @@ jobs:
104
108
  AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
105
109
  AGENT_MODEL: ${{ vars.AGENT_MODEL }}
106
110
  AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
107
- AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
108
111
  AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
109
- AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-5.6-luna' }}
110
- AGENT_COMMAND: ${{ vars.AGENT_COMMAND }}
111
- CODEX_VERSION: ${{ vars.CODEX_VERSION }}
112
- OPENCODE_VERSION: ${{ vars.OPENCODE_VERSION }}
113
- CURSOR_INSTALLER_SHA256: ${{ vars.CURSOR_INSTALLER_SHA256 }}
112
+ AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-6-luna' }}
113
+ AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
114
114
  OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
115
115
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
116
116
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
@@ -118,5 +118,4 @@ jobs:
118
118
  OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
119
119
  CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
120
120
  CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
121
- CODEX_ACCESS_TOKEN: ${{ secrets.CODEX_ACCESS_TOKEN }}
122
121
  COPILOT_EVIDENCE_TOKEN: ${{ github.token }}
@@ -0,0 +1,51 @@
1
+ name: Copilot - Pull Request Approval
2
+ run-name: Copilot approval · ${{ github.event_name }}
3
+
4
+ on:
5
+ workflow_run:
6
+ workflows: __PR_APPROVAL_WORKFLOW_NAMES__
7
+ types: [completed]
8
+ workflow_dispatch:
9
+ inputs:
10
+ pr:
11
+ description: Positive pull-request number to recheck
12
+ required: true
13
+ type: number
14
+
15
+ jobs:
16
+ observe-approval:
17
+ name: Copilot - Pull Request Approval
18
+ runs-on: ubuntu-latest
19
+ timeout-minutes: 15
20
+ concurrency:
21
+ # Some workflow_run payloads omit the PR association. A repository-wide
22
+ # lane keeps every wakeup for the same PR serialized even when one run is
23
+ # associated by PR number and another is resolved from its head SHA.
24
+ group: copilot-approval-${{ github.repository }}
25
+ cancel-in-progress: false
26
+ permissions:
27
+ actions: read
28
+ checks: write
29
+ contents: read
30
+ pull-requests: read
31
+ steps:
32
+ - name: Observe current PR evidence without checking out PR code
33
+ uses: vypdev/copilot@v3
34
+ with:
35
+ pr-approval-observer: 'true'
36
+ pr-approval-pr-number: ${{ github.event.inputs.pr || '' }}
37
+ pr-approval-policy: ${{ vars.PR_APPROVAL_POLICY || '' }}
38
+ main-branch: ${{ vars.MAIN_BRANCH || 'master' }}
39
+ development-branch: ${{ vars.DEVELOPMENT_BRANCH || 'develop' }}
40
+ feature-tree: ${{ vars.FEATURE_TREE || 'feature' }}
41
+ bugfix-tree: ${{ vars.BUGFIX_TREE || 'bugfix' }}
42
+ docs-tree: ${{ vars.DOCS_TREE || 'docs' }}
43
+ chore-tree: ${{ vars.CHORE_TREE || 'chore' }}
44
+ bugbot-severity: ${{ vars.BUGBOT_SEVERITY || 'low' }}
45
+ bugbot-dry-run: ${{ vars.BUGBOT_DRY_RUN || 'false' }}
46
+ ai-ignore-files: ${{ vars.AI_IGNORE_FILES || 'build/*' }}
47
+ repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
48
+ pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
49
+ token: ${{ secrets.PAT }}
50
+ env:
51
+ COPILOT_APPROVAL_CHECK_TOKEN: ${{ github.token }}