@plainconceptsplatform/workflows 0.1.2 → 0.2.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 (71) hide show
  1. package/README.md +40 -11
  2. package/dist/catalog-installation.d.ts +11 -2
  3. package/dist/catalog-installation.js +53 -9
  4. package/dist/catalog-installation.test.js +198 -16
  5. package/dist/catalog-listing.d.ts +13 -0
  6. package/dist/catalog-listing.js +68 -0
  7. package/dist/catalog-listing.test.d.ts +1 -0
  8. package/dist/catalog-listing.test.js +137 -0
  9. package/dist/index.js +76 -12
  10. package/dist/index.test.d.ts +1 -0
  11. package/dist/index.test.js +112 -0
  12. package/dist/repository-inspection.test.d.ts +1 -0
  13. package/dist/repository-inspection.test.js +77 -0
  14. package/dist/tui.d.ts +25 -0
  15. package/dist/tui.js +254 -0
  16. package/dist/tui.test.d.ts +1 -0
  17. package/dist/tui.test.js +246 -0
  18. package/dist/workflow-catalog.d.ts +15 -8
  19. package/dist/workflow-catalog.js +25 -15
  20. package/dist/workflow-catalog.test.js +18 -3
  21. package/loops/actions/add-issue-labels/action.yml +30 -29
  22. package/loops/actions/agent-output.cjs +1 -0
  23. package/loops/actions/apply-agent-bundle/action.yml +24 -23
  24. package/loops/actions/apply-agent-bundle/apply-bundle.sh +1 -0
  25. package/loops/actions/apply-agent-comments/action.yml +42 -41
  26. package/loops/actions/apply-agent-labels/action.yml +55 -54
  27. package/loops/actions/apply-agent-output/action.yml +108 -107
  28. package/loops/actions/audit-close/action.yml +104 -103
  29. package/loops/actions/classify-route/action.yml +91 -90
  30. package/loops/actions/classify-route/classify-route.sh +1 -0
  31. package/loops/actions/cleanup-artifacts/action.yml +65 -64
  32. package/loops/actions/close-agent-issues/action.yml +43 -42
  33. package/loops/actions/create-agent-issues/action.yml +52 -51
  34. package/loops/actions/create-issue-comment/action.yml +29 -28
  35. package/loops/actions/download-agent-output/action.yml +53 -52
  36. package/loops/actions/identify-gate-subject/action.yml +97 -96
  37. package/loops/actions/link-pr-to-issue/action.yml +40 -39
  38. package/loops/actions/list-open-issues/action.yml +33 -32
  39. package/loops/actions/load-issue-context/action.yml +43 -42
  40. package/loops/actions/merge-agent-pr/action.yml +36 -35
  41. package/loops/actions/push-agent-branch/action.yml +45 -44
  42. package/loops/actions/remove-issue-labels/action.yml +35 -34
  43. package/loops/actions/stale-recovery/action.yml +288 -287
  44. package/loops/actions/update-agent-issues/action.yml +58 -57
  45. package/loops/actions/validate-refine-output/action.yml +44 -43
  46. package/loops/actions/validate-refine-output/validate-refine-output.sh +1 -0
  47. package/loops/actions/verify-composite-actions/action.yml +9 -8
  48. package/loops/actions/verify-composite-actions/verify-composite-actions.sh +1 -0
  49. package/loops/actions/verify-refine-output/action.yml +9 -8
  50. package/loops/actions/verify-refine-output/verify-refine-output.sh +1 -0
  51. package/loops/actions/verify-route-matrix/action.yml +9 -8
  52. package/loops/actions/verify-route-matrix/verify-route-matrix.sh +1 -0
  53. package/loops/scripts/compile-agent-workflows.mjs +29 -13
  54. package/loops/templates/agentics/agentics-checks.yml +86 -0
  55. package/loops/templates/agentics/agentics-maintenance.yml +121 -0
  56. package/loops/templates/ci/app-ci-dotnet-next.yml +167 -0
  57. package/loops/templates/ci/app-ci-node-monorepo.yml +178 -0
  58. package/loops/templates/opencode/opencode.ci.json +46 -0
  59. package/loops/templates/opencode/opencode.ci.json.md +41 -0
  60. package/loops/workflows/agent-apply-review.md +9 -10
  61. package/loops/workflows/agent-audit.md +6 -7
  62. package/loops/workflows/agent-direct.md +7 -8
  63. package/loops/workflows/agent-implement.md +7 -8
  64. package/loops/workflows/agent-merge-gate.md +9 -10
  65. package/loops/workflows/agent-propose.md +7 -8
  66. package/loops/workflows/agent-refine.md +5 -7
  67. package/loops/workflows/shared/opencode-ci.md +105 -1
  68. package/loops/workflows/shared/platform-defaults.md +1 -0
  69. package/loops/workflows/work-router.yml +1 -0
  70. package/package.json +2 -2
  71. package/loops/aw/repo-config.md +0 -12
@@ -1,42 +1,43 @@
1
- name: Load issue context
2
- description: Write issue metadata and comment context to a JSON file.
3
- inputs:
4
- token:
5
- description: GitHub token used by github-script.
6
- required: true
7
- issue-number:
8
- description: Issue number to load.
9
- required: true
10
- output-path:
11
- description: Absolute path where context JSON is written.
12
- required: true
13
- runs:
14
- using: composite
15
- steps:
16
- - name: Load issue and comments
17
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
18
- env:
19
- ISSUE_NUMBER: ${{ inputs.issue-number }}
20
- OUTPUT_PATH: ${{ inputs.output-path }}
21
- with:
22
- github-token: ${{ inputs.token }}
23
- script: |
24
- const fs = require('fs');
25
- const issueNumber = Number(process.env.ISSUE_NUMBER);
26
- const issue = await github.rest.issues.get({ ...context.repo, issue_number: issueNumber });
27
- const comments = await github.paginate(github.rest.issues.listComments, {
28
- ...context.repo, issue_number: issueNumber, per_page: 100,
29
- });
30
-
31
- fs.mkdirSync(require('path').dirname(process.env.OUTPUT_PATH), { recursive: true });
32
- fs.writeFileSync(process.env.OUTPUT_PATH, JSON.stringify({
33
- number: issue.data.number,
34
- title: issue.data.title,
35
- body: issue.data.body,
36
- labels: issue.data.labels.map(({ name }) => name),
37
- comments: comments.map(({ user, author_association, body }) => ({
38
- author: user.login,
39
- association: author_association,
40
- body,
41
- })),
42
- }, null, 2));
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/load-issue-context/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Load issue context
3
+ description: Write issue metadata and comment context to a JSON file.
4
+ inputs:
5
+ token:
6
+ description: GitHub token used by github-script.
7
+ required: true
8
+ issue-number:
9
+ description: Issue number to load.
10
+ required: true
11
+ output-path:
12
+ description: Absolute path where context JSON is written.
13
+ required: true
14
+ runs:
15
+ using: composite
16
+ steps:
17
+ - name: Load issue and comments
18
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
19
+ env:
20
+ ISSUE_NUMBER: ${{ inputs.issue-number }}
21
+ OUTPUT_PATH: ${{ inputs.output-path }}
22
+ with:
23
+ github-token: ${{ inputs.token }}
24
+ script: |
25
+ const fs = require('fs');
26
+ const issueNumber = Number(process.env.ISSUE_NUMBER);
27
+ const issue = await github.rest.issues.get({ ...context.repo, issue_number: issueNumber });
28
+ const comments = await github.paginate(github.rest.issues.listComments, {
29
+ ...context.repo, issue_number: issueNumber, per_page: 100,
30
+ });
31
+
32
+ fs.mkdirSync(require('path').dirname(process.env.OUTPUT_PATH), { recursive: true });
33
+ fs.writeFileSync(process.env.OUTPUT_PATH, JSON.stringify({
34
+ number: issue.data.number,
35
+ title: issue.data.title,
36
+ body: issue.data.body,
37
+ labels: issue.data.labels.map(({ name }) => name),
38
+ comments: comments.map(({ user, author_association, body }) => ({
39
+ author: user.login,
40
+ association: author_association,
41
+ body,
42
+ })),
43
+ }, null, 2));
@@ -1,35 +1,36 @@
1
- name: Merge agent pull request
2
- description: Read merge_pull_request from agent_output.json and merge the PR via gh.
3
- inputs:
4
- output-file:
5
- description: Path to agent_output.json.
6
- required: true
7
- token:
8
- description: GitHub token with pull-requests:write and contents:write.
9
- required: true
10
- repo:
11
- description: Target repository in owner/name format.
12
- required: false
13
- default: ${{ github.repository }}
14
- runs:
15
- using: composite
16
- steps:
17
- - name: Merge pull request
18
- shell: bash
19
- env:
20
- GH_TOKEN: ${{ inputs.token }}
21
- OUTPUT_FILE: ${{ inputs.output-file }}
22
- REPO: ${{ inputs.repo }}
23
- run: |
24
- set -euo pipefail
25
- [ -f "$OUTPUT_FILE" ] || exit 0
26
-
27
- jq -c '.items[] | select(.type == "merge_pull_request")' "$OUTPUT_FILE" | while read -r item; do
28
- PR_NUM=$(echo "$item" | jq -er '.pr_number // .item_number // empty')
29
- [[ "$PR_NUM" =~ ^[1-9][0-9]*$ ]] || { echo "::error::Invalid pull request number: $PR_NUM"; exit 1; }
30
-
31
- HEAD_SHA=$(gh pr view "$PR_NUM" --repo "$REPO" --json headRefOid --jq '.headRefOid')
32
- [[ "$HEAD_SHA" =~ ^[0-9a-fA-F]{40}$ ]] || { echo "::error::Invalid pull request head SHA for #$PR_NUM"; exit 1; }
33
-
34
- gh pr merge "$PR_NUM" --repo "$REPO" --squash --match-head-commit "$HEAD_SHA"
35
- done
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/merge-agent-pr/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Merge agent pull request
3
+ description: Read merge_pull_request from agent_output.json and merge the PR via gh.
4
+ inputs:
5
+ output-file:
6
+ description: Path to agent_output.json.
7
+ required: true
8
+ token:
9
+ description: GitHub token with pull-requests:write and contents:write.
10
+ required: true
11
+ repo:
12
+ description: Target repository in owner/name format.
13
+ required: false
14
+ default: ${{ github.repository }}
15
+ runs:
16
+ using: composite
17
+ steps:
18
+ - name: Merge pull request
19
+ shell: bash
20
+ env:
21
+ GH_TOKEN: ${{ inputs.token }}
22
+ OUTPUT_FILE: ${{ inputs.output-file }}
23
+ REPO: ${{ inputs.repo }}
24
+ run: |
25
+ set -euo pipefail
26
+ [ -f "$OUTPUT_FILE" ] || exit 0
27
+
28
+ jq -c '.items[] | select(.type == "merge_pull_request")' "$OUTPUT_FILE" | while read -r item; do
29
+ PR_NUM=$(echo "$item" | jq -er '.pr_number // .item_number // empty')
30
+ [[ "$PR_NUM" =~ ^[1-9][0-9]*$ ]] || { echo "::error::Invalid pull request number: $PR_NUM"; exit 1; }
31
+
32
+ HEAD_SHA=$(gh pr view "$PR_NUM" --repo "$REPO" --json headRefOid --jq '.headRefOid')
33
+ [[ "$HEAD_SHA" =~ ^[0-9a-fA-F]{40}$ ]] || { echo "::error::Invalid pull request head SHA for #$PR_NUM"; exit 1; }
34
+
35
+ gh pr merge "$PR_NUM" --repo "$REPO" --squash --match-head-commit "$HEAD_SHA"
36
+ done
@@ -1,44 +1,45 @@
1
- name: Push agent branch
2
- description: Read push_to_pull_request_branch from agent_output.json and fast-forward from its git bundle.
3
- inputs:
4
- output-file:
5
- description: Path to agent_output.json.
6
- required: true
7
- bundle-file:
8
- description: Path to the git bundle from the agent artifact.
9
- required: false
10
- default: ''
11
- token:
12
- description: GitHub token with contents:write.
13
- required: true
14
- runs:
15
- using: composite
16
- steps:
17
- - name: Configure git credentials
18
- shell: bash
19
- env:
20
- GH_TOKEN: ${{ inputs.token }}
21
- run: |
22
- git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
23
- - name: Read pull request branch
24
- id: request
25
- shell: bash
26
- env:
27
- GH_TOKEN: ${{ inputs.token }}
28
- OUTPUT_FILE: ${{ inputs.output-file }}
29
- BUNDLE_FILE: ${{ inputs.bundle-file }}
30
- run: |
31
- set -euo pipefail
32
- [ -f "$OUTPUT_FILE" ] || exit 0
33
-
34
- ITEM=$(jq -c '.items[] | select(.type == "push_to_pull_request_branch")' "$OUTPUT_FILE")
35
- [ -n "$ITEM" ] || exit 0
36
-
37
- BRANCH=$(echo "$ITEM" | jq -r '.branch')
38
- echo "branch=$BRANCH" >> "$GITHUB_OUTPUT"
39
- - name: Apply bundle to pull request branch
40
- if: steps.request.outputs.branch != '' && inputs.bundle-file != ''
41
- uses: ./.github/actions/apply-agent-bundle
42
- with:
43
- bundle-file: ${{ inputs.bundle-file }}
44
- target-branch: ${{ steps.request.outputs.branch }}
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/push-agent-branch/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Push agent branch
3
+ description: Read push_to_pull_request_branch from agent_output.json and fast-forward from its git bundle.
4
+ inputs:
5
+ output-file:
6
+ description: Path to agent_output.json.
7
+ required: true
8
+ bundle-file:
9
+ description: Path to the git bundle from the agent artifact.
10
+ required: false
11
+ default: ''
12
+ token:
13
+ description: GitHub token with contents:write.
14
+ required: true
15
+ runs:
16
+ using: composite
17
+ steps:
18
+ - name: Configure git credentials
19
+ shell: bash
20
+ env:
21
+ GH_TOKEN: ${{ inputs.token }}
22
+ run: |
23
+ git config --global url."https://x-access-token:${GH_TOKEN}@github.com/".insteadOf "https://github.com/"
24
+ - name: Read pull request branch
25
+ id: request
26
+ shell: bash
27
+ env:
28
+ GH_TOKEN: ${{ inputs.token }}
29
+ OUTPUT_FILE: ${{ inputs.output-file }}
30
+ BUNDLE_FILE: ${{ inputs.bundle-file }}
31
+ run: |
32
+ set -euo pipefail
33
+ [ -f "$OUTPUT_FILE" ] || exit 0
34
+
35
+ ITEM=$(jq -c '.items[] | select(.type == "push_to_pull_request_branch")' "$OUTPUT_FILE")
36
+ [ -n "$ITEM" ] || exit 0
37
+
38
+ BRANCH=$(echo "$ITEM" | jq -r '.branch')
39
+ echo "branch=$BRANCH" >> "$GITHUB_OUTPUT"
40
+ - name: Apply bundle to pull request branch
41
+ if: steps.request.outputs.branch != '' && inputs.bundle-file != ''
42
+ uses: ./.github/actions/apply-agent-bundle
43
+ with:
44
+ bundle-file: ${{ inputs.bundle-file }}
45
+ target-branch: ${{ steps.request.outputs.branch }}
@@ -1,34 +1,35 @@
1
- name: Remove issue labels
2
- description: Remove one or more labels from an issue or pull request.
3
- inputs:
4
- token:
5
- description: GitHub token used by github-script.
6
- required: true
7
- issue-number:
8
- description: Issue or pull request number.
9
- required: true
10
- labels:
11
- description: Newline-delimited labels to remove.
12
- required: true
13
- runs:
14
- using: composite
15
- steps:
16
- - name: Remove labels
17
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
18
- env:
19
- ISSUE_NUMBER: ${{ inputs.issue-number }}
20
- LABELS: ${{ inputs.labels }}
21
- with:
22
- github-token: ${{ inputs.token }}
23
- script: |
24
- for (const label of process.env.LABELS.split(/\r?\n/).filter(Boolean)) {
25
- try {
26
- await github.rest.issues.removeLabel({
27
- ...context.repo,
28
- issue_number: Number(process.env.ISSUE_NUMBER),
29
- name: label,
30
- });
31
- } catch (error) {
32
- if (error.status !== 404) throw error;
33
- }
34
- }
1
+ # Managed by @plainconceptsplatform/workflows. Source: loops/actions/remove-issue-labels/action.yml. Update with workflows update --force; consumer edits may be overwritten.
2
+ name: Remove issue labels
3
+ description: Remove one or more labels from 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: Newline-delimited labels to remove.
13
+ required: true
14
+ runs:
15
+ using: composite
16
+ steps:
17
+ - name: Remove 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
+ for (const label of process.env.LABELS.split(/\r?\n/).filter(Boolean)) {
26
+ try {
27
+ await github.rest.issues.removeLabel({
28
+ ...context.repo,
29
+ issue_number: Number(process.env.ISSUE_NUMBER),
30
+ name: label,
31
+ });
32
+ } catch (error) {
33
+ if (error.status !== 404) throw error;
34
+ }
35
+ }