@plainconceptsplatform/workflows 1.2.3 → 1.3.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 (45) hide show
  1. package/dist/route-processing.js +1 -0
  2. package/loops/actions/add-issue-labels/action.yml +50 -50
  3. package/loops/actions/agent-output.cjs +17 -17
  4. package/loops/actions/apply-agent-bundle/action.yml +24 -24
  5. package/loops/actions/apply-agent-comments/action.yml +42 -42
  6. package/loops/actions/apply-agent-labels/action.yml +55 -55
  7. package/loops/actions/apply-agent-output/action.yml +108 -108
  8. package/loops/actions/assess-blast-radius/action.yml +47 -8
  9. package/loops/actions/assess-blast-radius/assess-blast-radius.sh +27 -5
  10. package/loops/actions/assess-blast-radius/migration-is-additive.sh +38 -0
  11. package/loops/actions/classify-route/action.yml +2 -1
  12. package/loops/actions/classify-route/classify-route.sh +7 -1
  13. package/loops/actions/cleanup-artifacts/action.yml +91 -91
  14. package/loops/actions/close-agent-issues/action.yml +43 -43
  15. package/loops/actions/create-agent-issues/action.yml +52 -52
  16. package/loops/actions/create-issue-comment/action.yml +29 -29
  17. package/loops/actions/download-agent-output/action.yml +53 -53
  18. package/loops/actions/link-pr-to-issue/action.yml +40 -40
  19. package/loops/actions/list-open-issues/action.yml +33 -33
  20. package/loops/actions/load-issue-context/action.yml +45 -45
  21. package/loops/actions/merge-agent-pr/action.yml +49 -49
  22. package/loops/actions/push-agent-branch/action.yml +45 -45
  23. package/loops/actions/remove-issue-labels/action.yml +37 -37
  24. package/loops/actions/update-agent-issues/action.yml +58 -58
  25. package/loops/actions/validate-merge-gate-output/action.yml +6 -1
  26. package/loops/actions/validate-merge-gate-output/validate-merge-gate-output.sh +9 -2
  27. package/loops/actions/validate-review-output/action.yml +35 -35
  28. package/loops/actions/validate-triage-output/action.yml +36 -36
  29. package/loops/actions/verify-composite-actions/action.yml +9 -9
  30. package/loops/actions/verify-refine-output/action.yml +9 -9
  31. package/loops/actions/verify-route-matrix/action.yml +9 -9
  32. package/loops/actions/verify-route-matrix/verify-route-matrix.sh +149 -29
  33. package/loops/docs/diagrams.md +26 -11
  34. package/loops/templates/agentics/agentics-maintenance.yml +121 -121
  35. package/loops/templates/issues/bug_report.yml +109 -109
  36. package/loops/templates/issues/feature_request.yml +75 -75
  37. package/loops/templates/release/github-release.yml +30 -30
  38. package/loops/workflows/agent-apply-review.md +5 -0
  39. package/loops/workflows/agent-implement.md +6 -0
  40. package/loops/workflows/agent-merge-gate.md +100 -3
  41. package/loops/workflows/authorize-bot-work.yml +105 -105
  42. package/loops/workflows/evidence.yml +79 -4
  43. package/loops/workflows/shared/platform-defaults.md +23 -23
  44. package/loops/workflows/work-router.yml +97 -21
  45. package/package.json +1 -1
@@ -10,6 +10,7 @@ const routeCrons = {
10
10
  const routeHelperJobs = {
11
11
  implement: ["check-implement-pr"],
12
12
  triage: ["dispatch-triage"],
13
+ "merge-gate": ["merge-approved"],
13
14
  };
14
15
  export function stripRouteFromRouter(yaml, route) {
15
16
  let result = yaml;
@@ -1,50 +1,50 @@
1
- # Managed by @plainconceptsplatform/workflows. Source: loops/actions/add-issue-labels/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
- name: Add issue labels
3
- description: Add one or more labels to an issue or pull request.
4
- inputs:
5
- token:
6
- description: GitHub token used by github-script.
7
- required: true
8
- issue-number:
9
- description: Issue or pull request number.
10
- required: true
11
- labels:
12
- description: Labels to add, one per line. A comma-separated list is accepted as well.
13
- required: true
14
- runs:
15
- using: composite
16
- steps:
17
- - name: Add labels
18
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
19
- env:
20
- ISSUE_NUMBER: ${{ inputs.issue-number }}
21
- LABELS: ${{ inputs.labels }}
22
- with:
23
- github-token: ${{ inputs.token }}
24
- script: |
25
- const labels = process.env.LABELS.split(/\r?\n|,/).map((label) => label.trim()).filter(Boolean);
26
- if (labels.length === 0) {
27
- core.notice('No labels to add.');
28
- return;
29
- }
30
-
31
- // Create what does not exist yet, so shipping a new label in the package does not
32
- // require a person to go and make it in every repository first. Its sibling
33
- // remove-issue-labels has swallowed 404 for a long time; this one had no guard at all,
34
- // so a label the package introduced would fail the step in every consumer until
35
- // somebody created it by hand. 422 is "already exists", which is the happy path on
36
- // every run after the first.
37
- for (const name of labels) {
38
- try {
39
- await github.rest.issues.createLabel({ ...context.repo, name, color: 'ededed' });
40
- core.notice(`Created the ${name} label.`);
41
- } catch (error) {
42
- if (error.status !== 422) throw error;
43
- }
44
- }
45
-
46
- await github.rest.issues.addLabels({
47
- ...context.repo,
48
- issue_number: Number(process.env.ISSUE_NUMBER),
49
- labels,
50
- });
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/add-issue-labels/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Add issue labels
3
+ description: Add one or more labels to an issue or pull request.
4
+ inputs:
5
+ token:
6
+ description: GitHub token used by github-script.
7
+ required: true
8
+ issue-number:
9
+ description: Issue or pull request number.
10
+ required: true
11
+ labels:
12
+ description: Labels to add, one per line. A comma-separated list is accepted as well.
13
+ required: true
14
+ runs:
15
+ using: composite
16
+ steps:
17
+ - name: Add labels
18
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
19
+ env:
20
+ ISSUE_NUMBER: ${{ inputs.issue-number }}
21
+ LABELS: ${{ inputs.labels }}
22
+ with:
23
+ github-token: ${{ inputs.token }}
24
+ script: |
25
+ const labels = process.env.LABELS.split(/\r?\n|,/).map((label) => label.trim()).filter(Boolean);
26
+ if (labels.length === 0) {
27
+ core.notice('No labels to add.');
28
+ return;
29
+ }
30
+
31
+ // Create what does not exist yet, so shipping a new label in the package does not
32
+ // require a person to go and make it in every repository first. Its sibling
33
+ // remove-issue-labels has swallowed 404 for a long time; this one had no guard at all,
34
+ // so a label the package introduced would fail the step in every consumer until
35
+ // somebody created it by hand. 422 is "already exists", which is the happy path on
36
+ // every run after the first.
37
+ for (const name of labels) {
38
+ try {
39
+ await github.rest.issues.createLabel({ ...context.repo, name, color: 'ededed' });
40
+ core.notice(`Created the ${name} label.`);
41
+ } catch (error) {
42
+ if (error.status !== 422) throw error;
43
+ }
44
+ }
45
+
46
+ await github.rest.issues.addLabels({
47
+ ...context.repo,
48
+ issue_number: Number(process.env.ISSUE_NUMBER),
49
+ labels,
50
+ });
@@ -1,17 +1,17 @@
1
- // Managed by @plainconceptsplatform/workflows. Source: loops/actions/agent-output.cjs. Update with `workflows update --force`; consumer edits may be overwritten.
2
- const fs = require('node:fs');
3
-
4
- // Every apply-agent-* action reads the same artifact the same way: a missing file means the
5
- // agent produced nothing, which is a normal outcome rather than a failure.
6
- function readAgentItems(outputFile, type) {
7
- if (!outputFile || !fs.existsSync(outputFile)) {
8
- return [];
9
- }
10
-
11
- const parsed = JSON.parse(fs.readFileSync(outputFile, 'utf8'));
12
- const items = Array.isArray(parsed.items) ? parsed.items : [];
13
-
14
- return type ? items.filter((item) => item.type === type) : items;
15
- }
16
-
17
- module.exports = { readAgentItems };
1
+ // Managed by @plainconceptsplatform/workflows. Source: loops/actions/agent-output.cjs. Update with `workflows update --force`; consumer edits may be overwritten.
2
+ const fs = require('node:fs');
3
+
4
+ // Every apply-agent-* action reads the same artifact the same way: a missing file means the
5
+ // agent produced nothing, which is a normal outcome rather than a failure.
6
+ function readAgentItems(outputFile, type) {
7
+ if (!outputFile || !fs.existsSync(outputFile)) {
8
+ return [];
9
+ }
10
+
11
+ const parsed = JSON.parse(fs.readFileSync(outputFile, 'utf8'));
12
+ const items = Array.isArray(parsed.items) ? parsed.items : [];
13
+
14
+ return type ? items.filter((item) => item.type === type) : items;
15
+ }
16
+
17
+ module.exports = { readAgentItems };
@@ -1,24 +1,24 @@
1
- # Managed by @plainconceptsplatform/workflows. Source: loops/actions/apply-agent-bundle/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
- name: Apply agent bundle
3
- description: Fast-forward an intended branch to the single commit exported by a verified git bundle.
4
- inputs:
5
- bundle-file:
6
- description: Path to the git bundle from the agent artifact.
7
- required: true
8
- target-branch:
9
- description: Branch that must fast-forward to the bundle commit.
10
- required: true
11
- base-branch:
12
- description: Existing branch used only when target-branch does not exist.
13
- required: false
14
- default: ''
15
- runs:
16
- using: composite
17
- steps:
18
- - name: Fast-forward branch from bundle
19
- shell: bash
20
- env:
21
- BUNDLE_FILE: ${{ inputs.bundle-file }}
22
- TARGET_BRANCH: ${{ inputs.target-branch }}
23
- BASE_BRANCH: ${{ inputs.base-branch }}
24
- run: bash "$GITHUB_ACTION_PATH/apply-bundle.sh" "$BUNDLE_FILE" "$TARGET_BRANCH" "$BASE_BRANCH"
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/apply-agent-bundle/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Apply agent bundle
3
+ description: Fast-forward an intended branch to the single commit exported by a verified git bundle.
4
+ inputs:
5
+ bundle-file:
6
+ description: Path to the git bundle from the agent artifact.
7
+ required: true
8
+ target-branch:
9
+ description: Branch that must fast-forward to the bundle commit.
10
+ required: true
11
+ base-branch:
12
+ description: Existing branch used only when target-branch does not exist.
13
+ required: false
14
+ default: ''
15
+ runs:
16
+ using: composite
17
+ steps:
18
+ - name: Fast-forward branch from bundle
19
+ shell: bash
20
+ env:
21
+ BUNDLE_FILE: ${{ inputs.bundle-file }}
22
+ TARGET_BRANCH: ${{ inputs.target-branch }}
23
+ BASE_BRANCH: ${{ inputs.base-branch }}
24
+ run: bash "$GITHUB_ACTION_PATH/apply-bundle.sh" "$BUNDLE_FILE" "$TARGET_BRANCH" "$BASE_BRANCH"
@@ -1,42 +1,42 @@
1
- # Managed by @plainconceptsplatform/workflows. Source: loops/actions/apply-agent-comments/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
- name: Apply agent comments
3
- description: Post every add_comment item from agent_output.json.
4
- inputs:
5
- output-file:
6
- description: Path to agent_output.json.
7
- required: true
8
- token:
9
- description: GitHub token with issues:write and pull-requests:write.
10
- required: true
11
- runs:
12
- using: composite
13
- steps:
14
- - name: Post comments
15
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
16
- env:
17
- AGENT_OUTPUT_LIB: ${{ github.action_path }}/../agent-output.cjs
18
- OUTPUT_FILE: ${{ inputs.output-file }}
19
- with:
20
- github-token: ${{ inputs.token }}
21
- script: |
22
- const { readAgentItems } = require(process.env.AGENT_OUTPUT_LIB);
23
- const items = readAgentItems(process.env.OUTPUT_FILE, 'add_comment');
24
-
25
- let posted = 0;
26
-
27
- for (const item of items) {
28
- if (!item.item_number) {
29
- core.warning(`add_comment item has no item_number, skipping: ${JSON.stringify(item)}`);
30
- continue;
31
- }
32
-
33
- await github.rest.issues.createComment({
34
- ...context.repo,
35
- issue_number: Number(item.item_number),
36
- body: item.body,
37
- });
38
-
39
- posted += 1;
40
- }
41
-
42
- core.info(`Posted ${posted} comment(s).`);
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/apply-agent-comments/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Apply agent comments
3
+ description: Post every add_comment item from agent_output.json.
4
+ inputs:
5
+ output-file:
6
+ description: Path to agent_output.json.
7
+ required: true
8
+ token:
9
+ description: GitHub token with issues:write and pull-requests:write.
10
+ required: true
11
+ runs:
12
+ using: composite
13
+ steps:
14
+ - name: Post comments
15
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
16
+ env:
17
+ AGENT_OUTPUT_LIB: ${{ github.action_path }}/../agent-output.cjs
18
+ OUTPUT_FILE: ${{ inputs.output-file }}
19
+ with:
20
+ github-token: ${{ inputs.token }}
21
+ script: |
22
+ const { readAgentItems } = require(process.env.AGENT_OUTPUT_LIB);
23
+ const items = readAgentItems(process.env.OUTPUT_FILE, 'add_comment');
24
+
25
+ let posted = 0;
26
+
27
+ for (const item of items) {
28
+ if (!item.item_number) {
29
+ core.warning(`add_comment item has no item_number, skipping: ${JSON.stringify(item)}`);
30
+ continue;
31
+ }
32
+
33
+ await github.rest.issues.createComment({
34
+ ...context.repo,
35
+ issue_number: Number(item.item_number),
36
+ body: item.body,
37
+ });
38
+
39
+ posted += 1;
40
+ }
41
+
42
+ core.info(`Posted ${posted} comment(s).`);
@@ -1,55 +1,55 @@
1
- # Managed by @plainconceptsplatform/workflows. Source: loops/actions/apply-agent-labels/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
- name: Apply agent labels
3
- description: Apply every add_labels and remove_labels item from agent_output.json.
4
- inputs:
5
- output-file:
6
- description: Path to agent_output.json.
7
- required: true
8
- token:
9
- description: GitHub token with issues:write.
10
- required: true
11
- runs:
12
- using: composite
13
- steps:
14
- - name: Apply label changes
15
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
16
- env:
17
- AGENT_OUTPUT_LIB: ${{ github.action_path }}/../agent-output.cjs
18
- OUTPUT_FILE: ${{ inputs.output-file }}
19
- with:
20
- github-token: ${{ inputs.token }}
21
- script: |
22
- const { readAgentItems } = require(process.env.AGENT_OUTPUT_LIB);
23
- const items = readAgentItems(process.env.OUTPUT_FILE)
24
- .filter((item) => item.type === 'add_labels' || item.type === 'remove_labels');
25
-
26
- let added = 0;
27
- let removed = 0;
28
-
29
- for (const item of items) {
30
- const labels = (item.labels ?? []).map((label) => label.name).filter(Boolean);
31
-
32
- if (!item.item_number || labels.length === 0) {
33
- core.warning(`${item.type} item is not actionable, skipping: ${JSON.stringify(item)}`);
34
- continue;
35
- }
36
-
37
- const issue_number = Number(item.item_number);
38
-
39
- if (item.type === 'add_labels') {
40
- await github.rest.issues.addLabels({ ...context.repo, issue_number, labels });
41
- added += labels.length;
42
- continue;
43
- }
44
-
45
- for (const name of labels) {
46
- try {
47
- await github.rest.issues.removeLabel({ ...context.repo, issue_number, name });
48
- removed += 1;
49
- } catch (error) {
50
- if (error.status !== 404) throw error;
51
- }
52
- }
53
- }
54
-
55
- core.info(`Added ${added} label(s), removed ${removed}.`);
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/apply-agent-labels/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Apply agent labels
3
+ description: Apply every add_labels and remove_labels item from agent_output.json.
4
+ inputs:
5
+ output-file:
6
+ description: Path to agent_output.json.
7
+ required: true
8
+ token:
9
+ description: GitHub token with issues:write.
10
+ required: true
11
+ runs:
12
+ using: composite
13
+ steps:
14
+ - name: Apply label changes
15
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
16
+ env:
17
+ AGENT_OUTPUT_LIB: ${{ github.action_path }}/../agent-output.cjs
18
+ OUTPUT_FILE: ${{ inputs.output-file }}
19
+ with:
20
+ github-token: ${{ inputs.token }}
21
+ script: |
22
+ const { readAgentItems } = require(process.env.AGENT_OUTPUT_LIB);
23
+ const items = readAgentItems(process.env.OUTPUT_FILE)
24
+ .filter((item) => item.type === 'add_labels' || item.type === 'remove_labels');
25
+
26
+ let added = 0;
27
+ let removed = 0;
28
+
29
+ for (const item of items) {
30
+ const labels = (item.labels ?? []).map((label) => label.name).filter(Boolean);
31
+
32
+ if (!item.item_number || labels.length === 0) {
33
+ core.warning(`${item.type} item is not actionable, skipping: ${JSON.stringify(item)}`);
34
+ continue;
35
+ }
36
+
37
+ const issue_number = Number(item.item_number);
38
+
39
+ if (item.type === 'add_labels') {
40
+ await github.rest.issues.addLabels({ ...context.repo, issue_number, labels });
41
+ added += labels.length;
42
+ continue;
43
+ }
44
+
45
+ for (const name of labels) {
46
+ try {
47
+ await github.rest.issues.removeLabel({ ...context.repo, issue_number, name });
48
+ removed += 1;
49
+ } catch (error) {
50
+ if (error.status !== 404) throw error;
51
+ }
52
+ }
53
+ }
54
+
55
+ core.info(`Added ${added} label(s), removed ${removed}.`);
@@ -1,108 +1,108 @@
1
- # Managed by @plainconceptsplatform/workflows. Source: loops/actions/apply-agent-output/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
- name: Apply agent output
3
- description: Download the agent artifact and apply its safe outputs in one fixed order, so every worker concludes the same way.
4
- inputs:
5
- token:
6
- description: GitHub token the writes are made with.
7
- required: true
8
- artifact-name:
9
- description: >-
10
- Name of the agent artifact. Callers pass the activation job's artifact_prefix output
11
- followed by "agent"; gh-aw derives that prefix from the workflow's inputs, so it is
12
- non-empty for every workflow_call worker and the bare name never resolves.
13
- required: true
14
- merge-pull-request:
15
- description: Apply merge_pull_request items.
16
- required: false
17
- default: 'false'
18
- push-to-branch:
19
- description: Apply push_to_pull_request_branch items.
20
- required: false
21
- default: 'false'
22
- close-issues:
23
- description: Apply close_issue items.
24
- required: false
25
- default: 'false'
26
- create-issues:
27
- description: Apply create_issue items.
28
- required: false
29
- default: 'false'
30
- update-issues:
31
- description: Apply update_issue items.
32
- required: false
33
- default: 'false'
34
- apply-labels:
35
- description: Apply add_labels and remove_labels items.
36
- required: false
37
- default: 'true'
38
- fallback-issue-number:
39
- description: Issue an update_issue item targets when it names none.
40
- required: false
41
- default: ''
42
- outputs:
43
- item-count:
44
- description: Number of items the agent produced.
45
- value: ${{ steps.output.outputs.item-count }}
46
- first-issue-number:
47
- description: Issue number of the first issue created, or empty.
48
- value: ${{ steps.create-issues.outputs.first-issue-number }}
49
- runs:
50
- using: composite
51
- steps:
52
- - name: Download agent output
53
- id: output
54
- uses: ./.github/actions/download-agent-output
55
- with:
56
- artifact-name: ${{ inputs.artifact-name }}
57
-
58
- - name: Merge pull request
59
- if: inputs.merge-pull-request == 'true' && steps.output.outputs.item-count != '0'
60
- uses: ./.github/actions/merge-agent-pr
61
- with:
62
- output-file: ${{ steps.output.outputs.output-file }}
63
- token: ${{ inputs.token }}
64
-
65
- - name: Push to pull request branch
66
- if: inputs.push-to-branch == 'true' && steps.output.outputs.item-count != '0'
67
- uses: ./.github/actions/push-agent-branch
68
- with:
69
- output-file: ${{ steps.output.outputs.output-file }}
70
- bundle-file: ${{ steps.output.outputs.bundle-file }}
71
- token: ${{ inputs.token }}
72
-
73
- - name: Close issues
74
- if: inputs.close-issues == 'true' && steps.output.outputs.item-count != '0'
75
- uses: ./.github/actions/close-agent-issues
76
- with:
77
- output-file: ${{ steps.output.outputs.output-file }}
78
- token: ${{ inputs.token }}
79
-
80
- - name: Update issues
81
- if: inputs.update-issues == 'true' && steps.output.outputs.item-count != '0'
82
- uses: ./.github/actions/update-agent-issues
83
- with:
84
- output-file: ${{ steps.output.outputs.output-file }}
85
- token: ${{ inputs.token }}
86
- fallback-issue-number: ${{ inputs.fallback-issue-number }}
87
-
88
- - name: Create issues
89
- id: create-issues
90
- if: inputs.create-issues == 'true' && steps.output.outputs.item-count != '0'
91
- uses: ./.github/actions/create-agent-issues
92
- with:
93
- output-file: ${{ steps.output.outputs.output-file }}
94
- token: ${{ inputs.token }}
95
-
96
- - name: Post agent comments
97
- if: steps.output.outputs.item-count != '0'
98
- uses: ./.github/actions/apply-agent-comments
99
- with:
100
- output-file: ${{ steps.output.outputs.output-file }}
101
- token: ${{ inputs.token }}
102
-
103
- - name: Apply agent label changes
104
- if: inputs.apply-labels == 'true' && steps.output.outputs.item-count != '0'
105
- uses: ./.github/actions/apply-agent-labels
106
- with:
107
- output-file: ${{ steps.output.outputs.output-file }}
108
- token: ${{ inputs.token }}
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/apply-agent-output/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Apply agent output
3
+ description: Download the agent artifact and apply its safe outputs in one fixed order, so every worker concludes the same way.
4
+ inputs:
5
+ token:
6
+ description: GitHub token the writes are made with.
7
+ required: true
8
+ artifact-name:
9
+ description: >-
10
+ Name of the agent artifact. Callers pass the activation job's artifact_prefix output
11
+ followed by "agent"; gh-aw derives that prefix from the workflow's inputs, so it is
12
+ non-empty for every workflow_call worker and the bare name never resolves.
13
+ required: true
14
+ merge-pull-request:
15
+ description: Apply merge_pull_request items.
16
+ required: false
17
+ default: 'false'
18
+ push-to-branch:
19
+ description: Apply push_to_pull_request_branch items.
20
+ required: false
21
+ default: 'false'
22
+ close-issues:
23
+ description: Apply close_issue items.
24
+ required: false
25
+ default: 'false'
26
+ create-issues:
27
+ description: Apply create_issue items.
28
+ required: false
29
+ default: 'false'
30
+ update-issues:
31
+ description: Apply update_issue items.
32
+ required: false
33
+ default: 'false'
34
+ apply-labels:
35
+ description: Apply add_labels and remove_labels items.
36
+ required: false
37
+ default: 'true'
38
+ fallback-issue-number:
39
+ description: Issue an update_issue item targets when it names none.
40
+ required: false
41
+ default: ''
42
+ outputs:
43
+ item-count:
44
+ description: Number of items the agent produced.
45
+ value: ${{ steps.output.outputs.item-count }}
46
+ first-issue-number:
47
+ description: Issue number of the first issue created, or empty.
48
+ value: ${{ steps.create-issues.outputs.first-issue-number }}
49
+ runs:
50
+ using: composite
51
+ steps:
52
+ - name: Download agent output
53
+ id: output
54
+ uses: ./.github/actions/download-agent-output
55
+ with:
56
+ artifact-name: ${{ inputs.artifact-name }}
57
+
58
+ - name: Merge pull request
59
+ if: inputs.merge-pull-request == 'true' && steps.output.outputs.item-count != '0'
60
+ uses: ./.github/actions/merge-agent-pr
61
+ with:
62
+ output-file: ${{ steps.output.outputs.output-file }}
63
+ token: ${{ inputs.token }}
64
+
65
+ - name: Push to pull request branch
66
+ if: inputs.push-to-branch == 'true' && steps.output.outputs.item-count != '0'
67
+ uses: ./.github/actions/push-agent-branch
68
+ with:
69
+ output-file: ${{ steps.output.outputs.output-file }}
70
+ bundle-file: ${{ steps.output.outputs.bundle-file }}
71
+ token: ${{ inputs.token }}
72
+
73
+ - name: Close issues
74
+ if: inputs.close-issues == 'true' && steps.output.outputs.item-count != '0'
75
+ uses: ./.github/actions/close-agent-issues
76
+ with:
77
+ output-file: ${{ steps.output.outputs.output-file }}
78
+ token: ${{ inputs.token }}
79
+
80
+ - name: Update issues
81
+ if: inputs.update-issues == 'true' && steps.output.outputs.item-count != '0'
82
+ uses: ./.github/actions/update-agent-issues
83
+ with:
84
+ output-file: ${{ steps.output.outputs.output-file }}
85
+ token: ${{ inputs.token }}
86
+ fallback-issue-number: ${{ inputs.fallback-issue-number }}
87
+
88
+ - name: Create issues
89
+ id: create-issues
90
+ if: inputs.create-issues == 'true' && steps.output.outputs.item-count != '0'
91
+ uses: ./.github/actions/create-agent-issues
92
+ with:
93
+ output-file: ${{ steps.output.outputs.output-file }}
94
+ token: ${{ inputs.token }}
95
+
96
+ - name: Post agent comments
97
+ if: steps.output.outputs.item-count != '0'
98
+ uses: ./.github/actions/apply-agent-comments
99
+ with:
100
+ output-file: ${{ steps.output.outputs.output-file }}
101
+ token: ${{ inputs.token }}
102
+
103
+ - name: Apply agent label changes
104
+ if: inputs.apply-labels == 'true' && steps.output.outputs.item-count != '0'
105
+ uses: ./.github/actions/apply-agent-labels
106
+ with:
107
+ output-file: ${{ steps.output.outputs.output-file }}
108
+ token: ${{ inputs.token }}