@plainconceptsplatform/workflows 0.28.15 → 0.28.18

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 (30) hide show
  1. package/README.md +1 -1
  2. package/dist/catalog-installation.js +3 -3
  3. package/dist/catalog-listing.js +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/tui.js +3 -3
  6. package/loops/actions/housekeeping/action.yml +2 -2
  7. package/loops/actions/validate-triage-output/validate-triage-output.sh +1 -1
  8. package/loops/actions/verify-refine-output/verify-refine-output.sh +3 -3
  9. package/loops/actions/verify-route-matrix/verify-route-matrix.sh +33 -5
  10. package/loops/docs/diagrams.md +4 -4
  11. package/loops/scripts/compile-agent-workflows.mjs +2 -2
  12. package/loops/templates/agentics/agentics-app-errors.yml +1 -1
  13. package/loops/templates/agentics/agentics-checks.yml +3 -3
  14. package/loops/templates/agentics/agentics-error-report.yml +3 -3
  15. package/loops/templates/agentics/agentics-maintenance.yml +9 -9
  16. package/loops/templates/ci/app-ci-dotnet-next.yml +10 -10
  17. package/loops/templates/ci/app-ci-node-monorepo.yml +11 -11
  18. package/loops/templates/issues/bug_report.yml +3 -3
  19. package/loops/templates/issues/feature_request.yml +4 -4
  20. package/loops/workflows/agent-apply-review.md +9 -9
  21. package/loops/workflows/agent-audit.md +3 -3
  22. package/loops/workflows/agent-implement.md +11 -11
  23. package/loops/workflows/agent-merge-gate.md +19 -19
  24. package/loops/workflows/agent-refine.md +21 -12
  25. package/loops/workflows/agent-release.md +5 -5
  26. package/loops/workflows/agent-triage.md +21 -21
  27. package/loops/workflows/agent-visual-verify.md +3 -3
  28. package/loops/workflows/authorize-bot-work.yml +1 -1
  29. package/loops/workflows/work-router.yml +37 -37
  30. package/package.json +46 -45
@@ -34,7 +34,7 @@ jobs:
34
34
  github.event.label.name == 'refine') &&
35
35
  !contains(github.event.issue.labels.*.name, 'bot-working') &&
36
36
  !endsWith(github.actor, '[bot]')
37
- runs-on: ubuntu-latest
37
+ runs-on: agents-arc
38
38
  timeout-minutes: 5
39
39
  concurrency:
40
40
  group: authorize-${{ github.event.issue.number }}
@@ -10,38 +10,38 @@ name: "# Main Work Router"
10
10
  run-name: >-
11
11
  ${{ github.event_name == 'issues'
12
12
  && github.event.action == 'opened'
13
- && format('Event: Issue opened — #{0} {1} by {2}', github.event.issue.number, github.event.issue.title, github.actor)
13
+ && format('Event: Issue opened - #{0} {1} by {2}', github.event.issue.number, github.event.issue.title, github.actor)
14
14
  || github.event_name == 'issues'
15
15
  && github.event.label.name == 'bot-working'
16
16
  && contains(github.event.issue.labels.*.name, 'implement')
17
- && format('Agent: Implement — #{0} {1}', github.event.issue.number, github.event.issue.title)
17
+ && format('Agent: Implement - #{0} {1}', github.event.issue.number, github.event.issue.title)
18
18
  || github.event_name == 'issues'
19
19
  && github.event.label.name == 'bot-working'
20
20
  && contains(github.event.issue.labels.*.name, 'refine')
21
- && format('Agent: Refine — #{0} {1}', github.event.issue.number, github.event.issue.title)
21
+ && format('Agent: Refine - #{0} {1}', github.event.issue.number, github.event.issue.title)
22
22
  || github.event_name == 'issues'
23
23
  && github.event.label.name == 'bot-working'
24
24
  && contains(github.event.issue.labels.*.name, 'direct')
25
- && format('Working: Direct — #{0} {1}', github.event.issue.number, github.event.issue.title)
25
+ && format('Working: Direct - #{0} {1}', github.event.issue.number, github.event.issue.title)
26
26
  || github.event_name == 'issues'
27
27
  && github.event.label.name == 'bot-working'
28
28
  && contains(github.event.issue.labels.*.name, 'triage')
29
- && format('Agent: Triage — #{0} {1}', github.event.issue.number, github.event.issue.title)
29
+ && format('Agent: Triage - #{0} {1}', github.event.issue.number, github.event.issue.title)
30
30
  || github.event_name == 'issues'
31
31
  && github.event.label.name == 'bot-working'
32
32
  && format('Working: #{0} {1}', github.event.issue.number, github.event.issue.title)
33
33
  || github.event_name == 'issues'
34
34
  && github.event.label.name == 'implement'
35
35
  && endsWith(github.actor, '[bot]')
36
- && format('Agent: Implement — #{0} {1}', github.event.issue.number, github.event.issue.title)
36
+ && format('Agent: Implement - #{0} {1}', github.event.issue.number, github.event.issue.title)
37
37
  || github.event_name == 'issues'
38
38
  && github.event.label.name == 'refine'
39
39
  && endsWith(github.actor, '[bot]')
40
- && format('Agent: Refine — #{0} {1}', github.event.issue.number, github.event.issue.title)
40
+ && format('Agent: Refine - #{0} {1}', github.event.issue.number, github.event.issue.title)
41
41
  || github.event_name == 'issues'
42
42
  && github.event.label.name == 'direct'
43
43
  && endsWith(github.actor, '[bot]')
44
- && format('Working: Direct — #{0} {1}', github.event.issue.number, github.event.issue.title)
44
+ && format('Working: Direct - #{0} {1}', github.event.issue.number, github.event.issue.title)
45
45
  || github.event_name == 'issues'
46
46
  && format('Event: {0} on #{1} by {2}', github.event.label.name, github.event.issue.number, github.actor)
47
47
  || github.event_name == 'issue_comment'
@@ -56,25 +56,25 @@ run-name: >-
56
56
  && format('Event: CI {0} on {1}', github.event.workflow_run.conclusion, github.event.workflow_run.head_branch)
57
57
  || github.event_name == 'workflow_dispatch'
58
58
  && inputs.operation == 'triage'
59
- && format('Agent: Triage — #{0}', inputs.issue-number)
59
+ && format('Agent: Triage - #{0}', inputs.issue-number)
60
60
  || github.event_name == 'workflow_dispatch'
61
61
  && inputs.operation == 'refine'
62
- && format('Agent: Refine — #{0}', inputs.issue-number)
62
+ && format('Agent: Refine - #{0}', inputs.issue-number)
63
63
  || github.event_name == 'workflow_dispatch'
64
64
  && inputs.operation == 'implement'
65
- && format('Agent: Implement — #{0}', inputs.issue-number)
65
+ && format('Agent: Implement - #{0}', inputs.issue-number)
66
66
  || github.event_name == 'workflow_dispatch'
67
67
  && inputs.operation == 'merge-gate'
68
- && format('Agent: Merge Gate — PR #{0}', inputs.pr-number)
68
+ && format('Agent: Merge Gate - PR #{0}', inputs.pr-number)
69
69
  || github.event_name == 'workflow_dispatch'
70
70
  && inputs.operation == 'visual-verify'
71
- && format('Agent: Visual Verify — PR #{0}', inputs.pr-number)
71
+ && format('Agent: Visual Verify - PR #{0}', inputs.pr-number)
72
72
  || github.event_name == 'workflow_dispatch'
73
73
  && inputs.operation == 'batch'
74
- && format('Working: Batch — #{0}', inputs.issue-number)
74
+ && format('Working: Batch - #{0}', inputs.issue-number)
75
75
  || github.event_name == 'workflow_dispatch'
76
76
  && inputs.operation == 'audit'
77
- && format('Agent: Audit — manual{0}', '')
77
+ && format('Agent: Audit - manual{0}', '')
78
78
  || github.event_name == 'workflow_dispatch'
79
79
  && inputs.operation == 'release'
80
80
  && format('Agent: Release{0}', '')
@@ -82,19 +82,19 @@ run-name: >-
82
82
  && format('dispatch: {0}', inputs.operation)
83
83
  || github.event_name == 'schedule'
84
84
  && github.event.schedule == '17 1 * * 1'
85
- && format('Agent: Audit — weekly{0}', '')
85
+ && format('Agent: Audit - weekly{0}', '')
86
86
  || github.event_name == 'schedule'
87
87
  && github.event.schedule == '43 3 * * *'
88
- && format('Agentics: Audit Close — daily{0}', '')
88
+ && format('Agentics: Audit Close - daily{0}', '')
89
89
  || github.event_name == 'schedule'
90
90
  && github.event.schedule == '0 6 * * *'
91
- && format('Agentics: Cleanup — daily{0}', '')
91
+ && format('Agentics: Cleanup - daily{0}', '')
92
92
  || github.event_name == 'schedule'
93
93
  && github.event.schedule == '17 * * * *'
94
- && format('Agentics: Reconcile — hourly{0}', '')
94
+ && format('Agentics: Reconcile - hourly{0}', '')
95
95
  || github.event_name == 'schedule'
96
96
  && github.event.schedule == '23 */6 * * *'
97
- && format('Agentics: Maintenance — 6h{0}', '')
97
+ && format('Agentics: Maintenance - 6h{0}', '')
98
98
  || github.event_name == 'schedule'
99
99
  && format('schedule {0}', github.event.schedule)
100
100
  || github.event_name }}
@@ -267,7 +267,7 @@ permissions:
267
267
  jobs:
268
268
  # Public repositories must check repository permission before an event can start a model.
269
269
  authorize:
270
- runs-on: RunnerLandingZone
270
+ runs-on: agents-arc
271
271
  timeout-minutes: 5
272
272
  permissions:
273
273
  contents: read
@@ -346,7 +346,7 @@ jobs:
346
346
  # "unknown" counts as inside. Somebody with write or better whose membership
347
347
  # cannot be established is far more likely to be a colleague than an outside
348
348
  # collaborator, and treating them as outside starts a triage agent nobody asked
349
- # for — which, with a four-hour timeout, holds a runner for the afternoon.
349
+ # for - which, with a four-hour timeout, holds a runner for the afternoon.
350
350
  if [ "$is_member" != "false" ]; then
351
351
  echo "trusted=true" >> "$GITHUB_OUTPUT"
352
352
  echo "is_outside_collaborator=false" >> "$GITHUB_OUTPUT"
@@ -370,7 +370,7 @@ jobs:
370
370
  esac
371
371
 
372
372
  classify:
373
- runs-on: RunnerLandingZone
373
+ runs-on: agents-arc
374
374
  timeout-minutes: 5
375
375
  permissions:
376
376
  contents: read
@@ -423,12 +423,12 @@ jobs:
423
423
  AGENTMEMORY_SECRET: ${{ secrets.AGENTMEMORY_SECRET }}
424
424
 
425
425
  # Checks whether an open bot PR already exists for the issue. If it does, implement is
426
- # skipped — the merge-gate will handle fixing the existing PR. This prevents duplicate
426
+ # skipped - the merge-gate will handle fixing the existing PR. This prevents duplicate
427
427
  # PRs when retries are triggered after a merge-gate failure.
428
428
  check-implement-pr:
429
429
  needs: [classify, authorize]
430
430
  if: needs.classify.outputs.route == 'implement' && needs.authorize.outputs.trusted == 'true'
431
- runs-on: RunnerLandingZone
431
+ runs-on: agents-arc
432
432
  timeout-minutes: 3
433
433
  permissions:
434
434
  contents: read
@@ -519,7 +519,7 @@ jobs:
519
519
  dispatch-triage:
520
520
  needs: [classify, authorize]
521
521
  if: needs.classify.outputs.route == 'triage' && needs.authorize.outputs.is_outside_collaborator == 'true'
522
- runs-on: RunnerLandingZone
522
+ runs-on: agents-arc
523
523
  timeout-minutes: 5
524
524
  permissions:
525
525
  actions: write
@@ -548,7 +548,7 @@ jobs:
548
548
  call-triage:
549
549
  needs: [classify, authorize]
550
550
  # Triage on issue open is for outside collaborators only (handled by dispatch-triage).
551
- # A trusted actor who opens an issue should not start triage — they can add refine/implement/direct
551
+ # A trusted actor who opens an issue should not start triage - they can add refine/implement/direct
552
552
  # labels or manually dispatch triage. All other triage routes (labeled, comment, dispatch) are trusted.
553
553
  if: needs.classify.outputs.route == 'triage' && needs.authorize.outputs.trusted == 'true' && !(github.event_name == 'issues' && github.event.action == 'opened')
554
554
  uses: ./.github/workflows/agent-triage.lock.yml
@@ -669,7 +669,7 @@ jobs:
669
669
  if: >
670
670
  needs.classify.outputs.route == 'bot-approve' &&
671
671
  (github.actor == 'app/github-actions' || github.actor == 'platform-devbox[bot]')
672
- runs-on: RunnerLandingZone
672
+ runs-on: agents-arc
673
673
  timeout-minutes: 5
674
674
  permissions:
675
675
  actions: write
@@ -700,8 +700,8 @@ jobs:
700
700
  # Conflict watcher for bot pull requests. Merge-conflict state is only available from the
701
701
  # mergeability API, which the pure classifier cannot read, so this is an event-gated
702
702
  # deterministic dispatcher rather than a classify route (it runs alongside bot-approve on
703
- # the same pull_request_target event). It NEVER checks out or runs pull request code — it
704
- # reads mergeability through the API and dispatches the Merge Gate — so it is safe on
703
+ # the same pull_request_target event). It NEVER checks out or runs pull request code - it
704
+ # reads mergeability through the API and dispatches the Merge Gate - so it is safe on
705
705
  # pull_request_target. Two entry points:
706
706
  # opened / reopened / synchronize → check the pull request that changed. Gated to this
707
707
  # repository's own branches so a fork PR never starts this App-token job.
@@ -726,7 +726,7 @@ jobs:
726
726
  github.event.pull_request.head.repo.full_name == github.repository
727
727
  )
728
728
  )
729
- runs-on: RunnerLandingZone
729
+ runs-on: agents-arc
730
730
  timeout-minutes: 10
731
731
  permissions:
732
732
  contents: read
@@ -754,7 +754,7 @@ jobs:
754
754
  set -euo pipefail
755
755
 
756
756
  # Dispatch the Merge Gate for one pull request when it is a red-CI open, non-draft
757
- # pull request on this repository whose CI has concluded — the
757
+ # pull request on this repository whose CI has concluded - the
758
758
  # conflict case is one arm of that, because a conflicting PR never gets a fresh
759
759
  # CI run of its own; a merge conflict with red or concluded CI is the same
760
760
  # "needs the gate" signal. A green non-conflicting PR is left for the merge belt
@@ -918,7 +918,7 @@ jobs:
918
918
  reconcile-bot-pr-runs:
919
919
  needs: classify
920
920
  if: needs.classify.outputs.route == 'reconcile-bot-pr-runs'
921
- runs-on: RunnerLandingZone
921
+ runs-on: agents-arc
922
922
  timeout-minutes: 5
923
923
  permissions:
924
924
  contents: read
@@ -1145,7 +1145,7 @@ jobs:
1145
1145
  audit-close:
1146
1146
  needs: classify
1147
1147
  if: needs.classify.outputs.route == 'audit-close'
1148
- runs-on: RunnerLandingZone
1148
+ runs-on: agents-arc
1149
1149
  timeout-minutes: 15
1150
1150
  concurrency:
1151
1151
  group: audit-close
@@ -1170,7 +1170,7 @@ jobs:
1170
1170
  cleanup-artifacts:
1171
1171
  needs: classify
1172
1172
  if: needs.classify.outputs.route == 'cleanup-artifacts' && !github.event.repository.fork
1173
- runs-on: RunnerLandingZone
1173
+ runs-on: agents-arc
1174
1174
  timeout-minutes: 15
1175
1175
  concurrency:
1176
1176
  group: cleanup-artifacts
@@ -1194,7 +1194,7 @@ jobs:
1194
1194
  housekeeping:
1195
1195
  needs: classify
1196
1196
  if: needs.classify.outputs.route == 'housekeeping' && !github.event.repository.fork
1197
- runs-on: RunnerLandingZone
1197
+ runs-on: agents-arc
1198
1198
  timeout-minutes: 15
1199
1199
  concurrency:
1200
1200
  group: housekeeping
@@ -1235,7 +1235,7 @@ jobs:
1235
1235
  validate:
1236
1236
  needs: classify
1237
1237
  if: needs.classify.outputs.route == 'validate'
1238
- runs-on: RunnerLandingZone
1238
+ runs-on: agents-arc
1239
1239
  timeout-minutes: 10
1240
1240
  permissions:
1241
1241
  contents: read
package/package.json CHANGED
@@ -1,45 +1,46 @@
1
- {
2
- "name": "@plainconceptsplatform/workflows",
3
- "version": "0.28.15",
4
- "description": "Install and update Platform GitHub agentic workflows.",
5
- "keywords": [
6
- "github-actions",
7
- "agentic-workflows",
8
- "plain-concepts"
9
- ],
10
- "repository": {
11
- "type": "git",
12
- "url": "git+https://github.com/PlainConceptsPlatform/agentic-workflows.git"
13
- },
14
- "bugs": {
15
- "url": "https://github.com/PlainConceptsPlatform/agentic-workflows/issues"
16
- },
17
- "homepage": "https://github.com/PlainConceptsPlatform/agentic-workflows#readme",
18
- "license": "UNLICENSED",
19
- "type": "module",
20
- "bin": {
21
- "workflows": "./dist/index.js"
22
- },
23
- "files": [
24
- "dist",
25
- "loops",
26
- "README.md"
27
- ],
28
- "engines": {
29
- "node": ">=20.19"
30
- },
31
- "dependencies": {
32
- "yaml": "^2.9.0"
33
- },
34
- "devDependencies": {
35
- "@types/node": "^22.0.0",
36
- "typescript": "^5.8.0",
37
- "vitest": "^3.0.0"
38
- },
39
- "scripts": {
40
- "build": "tsc --project tsconfig.build.json && node ./scripts/copy-loops.mjs",
41
- "test": "vitest run",
42
- "typecheck": "tsc --noEmit --project tsconfig.json",
43
- "release": "pnpm build && pnpm test && npm publish --access public"
44
- }
45
- }
1
+ {
2
+ "name": "@plainconceptsplatform/workflows",
3
+ "version": "0.28.18",
4
+ "description": "Install and update Platform GitHub agentic workflows.",
5
+ "keywords": [
6
+ "github-actions",
7
+ "agentic-workflows",
8
+ "plain-concepts"
9
+ ],
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/PlainConceptsPlatform/agentic-workflows.git"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/PlainConceptsPlatform/agentic-workflows/issues"
16
+ },
17
+ "homepage": "https://github.com/PlainConceptsPlatform/agentic-workflows#readme",
18
+ "license": "UNLICENSED",
19
+ "type": "module",
20
+ "bin": {
21
+ "workflows": "./dist/index.js"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "loops",
26
+ "README.md"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc --project tsconfig.build.json && node ./scripts/copy-loops.mjs",
30
+ "test": "vitest run",
31
+ "typecheck": "tsc --noEmit --project tsconfig.json",
32
+ "release": "pnpm build && pnpm test && npm publish --access public",
33
+ "prepack": "node ./scripts/copy-loops.mjs"
34
+ },
35
+ "engines": {
36
+ "node": ">=20.19"
37
+ },
38
+ "dependencies": {
39
+ "yaml": "^2.9.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^22.0.0",
43
+ "typescript": "^5.8.0",
44
+ "vitest": "^3.0.0"
45
+ }
46
+ }