@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.
- package/README.md +1 -1
- package/dist/catalog-installation.js +3 -3
- package/dist/catalog-listing.js +1 -1
- package/dist/index.js +1 -1
- package/dist/tui.js +3 -3
- package/loops/actions/housekeeping/action.yml +2 -2
- package/loops/actions/validate-triage-output/validate-triage-output.sh +1 -1
- package/loops/actions/verify-refine-output/verify-refine-output.sh +3 -3
- package/loops/actions/verify-route-matrix/verify-route-matrix.sh +33 -5
- package/loops/docs/diagrams.md +4 -4
- package/loops/scripts/compile-agent-workflows.mjs +2 -2
- package/loops/templates/agentics/agentics-app-errors.yml +1 -1
- package/loops/templates/agentics/agentics-checks.yml +3 -3
- package/loops/templates/agentics/agentics-error-report.yml +3 -3
- package/loops/templates/agentics/agentics-maintenance.yml +9 -9
- package/loops/templates/ci/app-ci-dotnet-next.yml +10 -10
- package/loops/templates/ci/app-ci-node-monorepo.yml +11 -11
- package/loops/templates/issues/bug_report.yml +3 -3
- package/loops/templates/issues/feature_request.yml +4 -4
- package/loops/workflows/agent-apply-review.md +9 -9
- package/loops/workflows/agent-audit.md +3 -3
- package/loops/workflows/agent-implement.md +11 -11
- package/loops/workflows/agent-merge-gate.md +19 -19
- package/loops/workflows/agent-refine.md +21 -12
- package/loops/workflows/agent-release.md +5 -5
- package/loops/workflows/agent-triage.md +21 -21
- package/loops/workflows/agent-visual-verify.md +3 -3
- package/loops/workflows/authorize-bot-work.yml +1 -1
- package/loops/workflows/work-router.yml +37 -37
- 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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
59
|
+
&& format('Agent: Triage - #{0}', inputs.issue-number)
|
|
60
60
|
|| github.event_name == 'workflow_dispatch'
|
|
61
61
|
&& inputs.operation == 'refine'
|
|
62
|
-
&& format('Agent: Refine
|
|
62
|
+
&& format('Agent: Refine - #{0}', inputs.issue-number)
|
|
63
63
|
|| github.event_name == 'workflow_dispatch'
|
|
64
64
|
&& inputs.operation == 'implement'
|
|
65
|
-
&& format('Agent: Implement
|
|
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
|
|
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
|
|
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
|
|
74
|
+
&& format('Working: Batch - #{0}', inputs.issue-number)
|
|
75
75
|
|| github.event_name == 'workflow_dispatch'
|
|
76
76
|
&& inputs.operation == 'audit'
|
|
77
|
-
&& format('Agent: Audit
|
|
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
|
|
85
|
+
&& format('Agent: Audit - weekly{0}', '')
|
|
86
86
|
|| github.event_name == 'schedule'
|
|
87
87
|
&& github.event.schedule == '43 3 * * *'
|
|
88
|
-
&& format('Agentics: Audit Close
|
|
88
|
+
&& format('Agentics: Audit Close - daily{0}', '')
|
|
89
89
|
|| github.event_name == 'schedule'
|
|
90
90
|
&& github.event.schedule == '0 6 * * *'
|
|
91
|
-
&& format('Agentics: Cleanup
|
|
91
|
+
&& format('Agentics: Cleanup - daily{0}', '')
|
|
92
92
|
|| github.event_name == 'schedule'
|
|
93
93
|
&& github.event.schedule == '17 * * * *'
|
|
94
|
-
&& format('Agentics: Reconcile
|
|
94
|
+
&& format('Agentics: Reconcile - hourly{0}', '')
|
|
95
95
|
|| github.event_name == 'schedule'
|
|
96
96
|
&& github.event.schedule == '23 */6 * * *'
|
|
97
|
-
&& format('Agentics: Maintenance
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
704
|
-
# reads mergeability through the API and dispatches the Merge Gate
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
"
|
|
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
|
+
}
|