agent-relay 4.0.2 → 4.0.4

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 (175) hide show
  1. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  2. package/bin/agent-relay-broker-darwin-x64 +0 -0
  3. package/bin/agent-relay-broker-linux-arm64 +0 -0
  4. package/bin/agent-relay-broker-linux-x64 +0 -0
  5. package/dist/index.cjs +7906 -2084
  6. package/dist/packages/sdk/src/provisioner/seeder.d.ts +17 -0
  7. package/dist/packages/sdk/src/provisioner/seeder.d.ts.map +1 -0
  8. package/dist/packages/sdk/src/provisioner/seeder.js +419 -0
  9. package/dist/packages/sdk/src/provisioner/seeder.js.map +1 -0
  10. package/dist/packages/sdk/src/provisioner/token.d.ts +38 -0
  11. package/dist/packages/sdk/src/provisioner/token.d.ts.map +1 -0
  12. package/dist/packages/sdk/src/provisioner/token.js +74 -0
  13. package/dist/packages/sdk/src/provisioner/token.js.map +1 -0
  14. package/dist/src/cli/commands/core.d.ts.map +1 -1
  15. package/dist/src/cli/commands/core.js +7 -3
  16. package/dist/src/cli/commands/core.js.map +1 -1
  17. package/dist/src/cli/commands/on/provision.d.ts.map +1 -1
  18. package/dist/src/cli/commands/on/provision.js +8 -3
  19. package/dist/src/cli/commands/on/provision.js.map +1 -1
  20. package/dist/src/cli/commands/on/start.d.ts +5 -0
  21. package/dist/src/cli/commands/on/start.d.ts.map +1 -1
  22. package/dist/src/cli/commands/on/start.js +126 -88
  23. package/dist/src/cli/commands/on/start.js.map +1 -1
  24. package/dist/src/cli/commands/on/symlink-mount.d.ts +12 -0
  25. package/dist/src/cli/commands/on/symlink-mount.d.ts.map +1 -0
  26. package/dist/src/cli/commands/on/symlink-mount.js +304 -0
  27. package/dist/src/cli/commands/on/symlink-mount.js.map +1 -0
  28. package/dist/src/cli/commands/on.d.ts.map +1 -1
  29. package/dist/src/cli/commands/on.js +3 -0
  30. package/dist/src/cli/commands/on.js.map +1 -1
  31. package/install.sh +4 -0
  32. package/package.json +9 -9
  33. package/packages/acp-bridge/package.json +2 -2
  34. package/packages/brand/package.json +1 -1
  35. package/packages/cloud/package.json +2 -2
  36. package/packages/config/package.json +1 -1
  37. package/packages/hooks/package.json +4 -4
  38. package/packages/memory/package.json +2 -2
  39. package/packages/openclaw/package.json +2 -2
  40. package/packages/policy/package.json +2 -2
  41. package/packages/sdk/dist/client.d.ts +3 -10
  42. package/packages/sdk/dist/client.d.ts.map +1 -1
  43. package/packages/sdk/dist/client.js +2 -0
  44. package/packages/sdk/dist/client.js.map +1 -1
  45. package/packages/sdk/dist/provisioner/__tests__/audit.test.d.ts +2 -0
  46. package/packages/sdk/dist/provisioner/__tests__/audit.test.d.ts.map +1 -0
  47. package/packages/sdk/dist/provisioner/__tests__/audit.test.js +45 -0
  48. package/packages/sdk/dist/provisioner/__tests__/audit.test.js.map +1 -0
  49. package/packages/sdk/dist/provisioner/__tests__/compiler.test.d.ts +2 -0
  50. package/packages/sdk/dist/provisioner/__tests__/compiler.test.d.ts.map +1 -0
  51. package/packages/sdk/dist/provisioner/__tests__/compiler.test.js +345 -0
  52. package/packages/sdk/dist/provisioner/__tests__/compiler.test.js.map +1 -0
  53. package/packages/sdk/dist/provisioner/__tests__/presets.test.d.ts +2 -0
  54. package/packages/sdk/dist/provisioner/__tests__/presets.test.d.ts.map +1 -0
  55. package/packages/sdk/dist/provisioner/__tests__/presets.test.js +23 -0
  56. package/packages/sdk/dist/provisioner/__tests__/presets.test.js.map +1 -0
  57. package/packages/sdk/dist/provisioner/__tests__/seeder.test.d.ts +2 -0
  58. package/packages/sdk/dist/provisioner/__tests__/seeder.test.d.ts.map +1 -0
  59. package/packages/sdk/dist/provisioner/__tests__/seeder.test.js +224 -0
  60. package/packages/sdk/dist/provisioner/__tests__/seeder.test.js.map +1 -0
  61. package/packages/sdk/dist/provisioner/__tests__/tar-seeder.test.d.ts +2 -0
  62. package/packages/sdk/dist/provisioner/__tests__/tar-seeder.test.d.ts.map +1 -0
  63. package/packages/sdk/dist/provisioner/__tests__/tar-seeder.test.js +191 -0
  64. package/packages/sdk/dist/provisioner/__tests__/tar-seeder.test.js.map +1 -0
  65. package/packages/sdk/dist/provisioner/__tests__/token-factory.test.d.ts +2 -0
  66. package/packages/sdk/dist/provisioner/__tests__/token-factory.test.d.ts.map +1 -0
  67. package/packages/sdk/dist/provisioner/__tests__/token-factory.test.js +127 -0
  68. package/packages/sdk/dist/provisioner/__tests__/token-factory.test.js.map +1 -0
  69. package/packages/sdk/dist/provisioner/__tests__/token.test.d.ts +2 -0
  70. package/packages/sdk/dist/provisioner/__tests__/token.test.d.ts.map +1 -0
  71. package/packages/sdk/dist/provisioner/__tests__/token.test.js +44 -0
  72. package/packages/sdk/dist/provisioner/__tests__/token.test.js.map +1 -0
  73. package/packages/sdk/dist/provisioner/audit.d.ts +19 -0
  74. package/packages/sdk/dist/provisioner/audit.d.ts.map +1 -0
  75. package/packages/sdk/dist/provisioner/audit.js +74 -0
  76. package/packages/sdk/dist/provisioner/audit.js.map +1 -0
  77. package/packages/sdk/dist/provisioner/compiler.d.ts +23 -0
  78. package/packages/sdk/dist/provisioner/compiler.d.ts.map +1 -0
  79. package/packages/sdk/dist/provisioner/compiler.js +355 -0
  80. package/packages/sdk/dist/provisioner/compiler.js.map +1 -0
  81. package/packages/sdk/dist/provisioner/index.d.ts +9 -0
  82. package/packages/sdk/dist/provisioner/index.d.ts.map +1 -0
  83. package/packages/sdk/dist/provisioner/index.js +266 -0
  84. package/packages/sdk/dist/provisioner/index.js.map +1 -0
  85. package/packages/sdk/dist/provisioner/mount.d.ts +14 -0
  86. package/packages/sdk/dist/provisioner/mount.d.ts.map +1 -0
  87. package/packages/sdk/dist/provisioner/mount.js +329 -0
  88. package/packages/sdk/dist/provisioner/mount.js.map +1 -0
  89. package/packages/sdk/dist/provisioner/seeder.d.ts +17 -0
  90. package/packages/sdk/dist/provisioner/seeder.d.ts.map +1 -0
  91. package/packages/sdk/dist/provisioner/seeder.js +419 -0
  92. package/packages/sdk/dist/provisioner/seeder.js.map +1 -0
  93. package/packages/sdk/dist/provisioner/token.d.ts +38 -0
  94. package/packages/sdk/dist/provisioner/token.d.ts.map +1 -0
  95. package/packages/sdk/dist/provisioner/token.js +74 -0
  96. package/packages/sdk/dist/provisioner/token.js.map +1 -0
  97. package/packages/sdk/dist/provisioner/types.d.ts +133 -0
  98. package/packages/sdk/dist/provisioner/types.d.ts.map +1 -0
  99. package/packages/sdk/dist/provisioner/types.js +2 -0
  100. package/packages/sdk/dist/provisioner/types.js.map +1 -0
  101. package/packages/sdk/dist/relay.d.ts +6 -0
  102. package/packages/sdk/dist/relay.d.ts.map +1 -1
  103. package/packages/sdk/dist/relay.js +17 -5
  104. package/packages/sdk/dist/relay.js.map +1 -1
  105. package/packages/sdk/dist/types.d.ts +9 -0
  106. package/packages/sdk/dist/types.d.ts.map +1 -1
  107. package/packages/sdk/dist/workflows/__tests__/e2e-permissions.test.d.ts +2 -0
  108. package/packages/sdk/dist/workflows/__tests__/e2e-permissions.test.d.ts.map +1 -0
  109. package/packages/sdk/dist/workflows/__tests__/e2e-permissions.test.js +331 -0
  110. package/packages/sdk/dist/workflows/__tests__/e2e-permissions.test.js.map +1 -0
  111. package/packages/sdk/dist/workflows/__tests__/permission-types.test.d.ts +2 -0
  112. package/packages/sdk/dist/workflows/__tests__/permission-types.test.d.ts.map +1 -0
  113. package/packages/sdk/dist/workflows/__tests__/permission-types.test.js +124 -0
  114. package/packages/sdk/dist/workflows/__tests__/permission-types.test.js.map +1 -0
  115. package/packages/sdk/dist/workflows/__tests__/permissions-integration.test.d.ts +2 -0
  116. package/packages/sdk/dist/workflows/__tests__/permissions-integration.test.d.ts.map +1 -0
  117. package/packages/sdk/dist/workflows/__tests__/permissions-integration.test.js +526 -0
  118. package/packages/sdk/dist/workflows/__tests__/permissions-integration.test.js.map +1 -0
  119. package/packages/sdk/dist/workflows/dry-run-format.d.ts.map +1 -1
  120. package/packages/sdk/dist/workflows/dry-run-format.js +8 -0
  121. package/packages/sdk/dist/workflows/dry-run-format.js.map +1 -1
  122. package/packages/sdk/dist/workflows/runner.d.ts +14 -0
  123. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
  124. package/packages/sdk/dist/workflows/runner.js +455 -6
  125. package/packages/sdk/dist/workflows/runner.js.map +1 -1
  126. package/packages/sdk/dist/workflows/types.d.ts +190 -0
  127. package/packages/sdk/dist/workflows/types.d.ts.map +1 -1
  128. package/packages/sdk/dist/workflows/types.js +29 -0
  129. package/packages/sdk/dist/workflows/types.js.map +1 -1
  130. package/packages/sdk/package.json +6 -2
  131. package/packages/sdk/src/__tests__/orchestration-upgrades.test.ts +123 -1
  132. package/packages/sdk/src/__tests__/provisioner-mount.test.ts +126 -0
  133. package/packages/sdk/src/__tests__/spawn-token.test.ts +41 -0
  134. package/packages/sdk/src/__tests__/workflow-runner.test.ts +77 -45
  135. package/packages/sdk/src/client.ts +4 -8
  136. package/packages/sdk/src/provisioner/__tests__/audit.test.ts +62 -0
  137. package/packages/sdk/src/provisioner/__tests__/compiler.test.ts +369 -0
  138. package/packages/sdk/src/provisioner/__tests__/presets.test.ts +25 -0
  139. package/packages/sdk/src/provisioner/__tests__/seeder.test.ts +284 -0
  140. package/packages/sdk/src/provisioner/__tests__/tar-seeder.test.ts +249 -0
  141. package/packages/sdk/src/provisioner/__tests__/token-factory.test.ts +172 -0
  142. package/packages/sdk/src/provisioner/__tests__/token.test.ts +53 -0
  143. package/packages/sdk/src/provisioner/audit.ts +104 -0
  144. package/packages/sdk/src/provisioner/compiler.ts +498 -0
  145. package/packages/sdk/src/provisioner/index.ts +332 -0
  146. package/packages/sdk/src/provisioner/mount.ts +419 -0
  147. package/packages/sdk/src/provisioner/seeder.ts +571 -0
  148. package/packages/sdk/src/provisioner/token.ts +112 -0
  149. package/packages/sdk/src/provisioner/types.ts +188 -0
  150. package/packages/sdk/src/relay.ts +31 -9
  151. package/packages/sdk/src/types.ts +9 -0
  152. package/packages/sdk/src/workflows/__tests__/e2e-permissions.test.ts +407 -0
  153. package/packages/sdk/src/workflows/__tests__/fixtures/.agentignore +2 -0
  154. package/packages/sdk/src/workflows/__tests__/fixtures/.reader.agentreadonly +2 -0
  155. package/packages/sdk/src/workflows/__tests__/fixtures/permission-test.yaml +42 -0
  156. package/packages/sdk/src/workflows/__tests__/permission-types.test.ts +154 -0
  157. package/packages/sdk/src/workflows/__tests__/permissions-integration.test.ts +649 -0
  158. package/packages/sdk/src/workflows/builtin-templates/bug-fix.yaml +13 -9
  159. package/packages/sdk/src/workflows/builtin-templates/code-review.yaml +12 -8
  160. package/packages/sdk/src/workflows/builtin-templates/competitive.yaml +11 -7
  161. package/packages/sdk/src/workflows/builtin-templates/documentation.yaml +16 -8
  162. package/packages/sdk/src/workflows/builtin-templates/feature-dev.yaml +13 -9
  163. package/packages/sdk/src/workflows/builtin-templates/refactor.yaml +13 -9
  164. package/packages/sdk/src/workflows/builtin-templates/review-loop.yaml +14 -10
  165. package/packages/sdk/src/workflows/builtin-templates/security-audit.yaml +19 -9
  166. package/packages/sdk/src/workflows/dry-run-format.ts +14 -1
  167. package/packages/sdk/src/workflows/runner.ts +559 -6
  168. package/packages/sdk/src/workflows/schema.json +204 -114
  169. package/packages/sdk/src/workflows/types.ts +266 -1
  170. package/packages/sdk/vitest.config.ts +5 -1
  171. package/packages/sdk-py/pyproject.toml +1 -1
  172. package/packages/telemetry/package.json +1 -1
  173. package/packages/trajectory/package.json +2 -2
  174. package/packages/user-directory/package.json +2 -2
  175. package/packages/utils/package.json +2 -2
@@ -1,6 +1,6 @@
1
- version: "1.0"
1
+ version: '1.0'
2
2
  name: code-review
3
- description: "Blueprint-style parallel code review with deterministic diff capture."
3
+ description: 'Blueprint-style parallel code review with deterministic diff capture.'
4
4
  swarm:
5
5
  pattern: fan-out
6
6
  maxConcurrency: 4
@@ -13,26 +13,30 @@ swarm:
13
13
  agents:
14
14
  - name: lead
15
15
  cli: claude
16
- role: "Aggregates review output and final recommendations"
16
+ role: 'Aggregates review output and final recommendations'
17
+ permissions: { access: full }
17
18
  - name: reviewer-architecture
18
19
  cli: codex
19
- role: "Assesses architecture and maintainability"
20
+ role: 'Assesses architecture and maintainability'
21
+ permissions: { access: readonly }
20
22
  interactive: false
21
23
  - name: reviewer-correctness
22
24
  cli: claude
23
- role: "Assesses correctness and testing"
25
+ role: 'Assesses correctness and testing'
26
+ permissions: { access: readonly }
24
27
  interactive: false
25
28
  - name: reviewer-security
26
29
  cli: gemini
27
- role: "Assesses security posture and abuse resistance"
30
+ role: 'Assesses security posture and abuse resistance'
31
+ permissions: { access: readonly }
28
32
  interactive: false
29
33
  workflows:
30
34
  - name: parallel-review
31
- description: "Run focused reviews in parallel and synthesize final guidance."
35
+ description: 'Run focused reviews in parallel and synthesize final guidance.'
32
36
  onError: fail
33
37
  preflight:
34
38
  - command: git diff --stat HEAD~1 2>/dev/null || git diff --stat 2>/dev/null || echo "No diff available"
35
- description: "Check there are changes to review"
39
+ description: 'Check there are changes to review'
36
40
  steps:
37
41
  # Deterministic: Capture diff for review
38
42
  - name: capture-diff
@@ -1,6 +1,6 @@
1
- version: "1.0"
1
+ version: '1.0'
2
2
  name: competitive
3
- description: "Multiple agents independently implement solutions, then compare and select the best approach."
3
+ description: 'Multiple agents independently implement solutions, then compare and select the best approach.'
4
4
  swarm:
5
5
  pattern: competitive
6
6
  maxConcurrency: 4
@@ -9,19 +9,23 @@ swarm:
9
9
  agents:
10
10
  - name: lead
11
11
  cli: claude
12
- role: "Defines spec, judges implementations, and selects winner"
12
+ role: 'Defines spec, judges implementations, and selects winner'
13
+ permissions: { access: readwrite }
13
14
  - name: team-alpha
14
15
  cli: claude
15
- role: "Independent implementation team A"
16
+ role: 'Independent implementation team A'
17
+ permissions: { access: readwrite }
16
18
  - name: team-beta
17
19
  cli: codex
18
- role: "Independent implementation team B"
20
+ role: 'Independent implementation team B'
21
+ permissions: { access: readwrite }
19
22
  - name: team-gamma
20
23
  cli: gemini
21
- role: "Independent implementation team C"
24
+ role: 'Independent implementation team C'
25
+ permissions: { access: readwrite }
22
26
  workflows:
23
27
  - name: competitive-build
24
- description: "Independent parallel implementations followed by comparison and selection."
28
+ description: 'Independent parallel implementations followed by comparison and selection.'
25
29
  onError: fail
26
30
  steps:
27
31
  - name: define-spec
@@ -1,6 +1,6 @@
1
- version: "1.0"
1
+ version: '1.0'
2
2
  name: documentation
3
- description: "Blueprint-style documentation workflow with deterministic file operations."
3
+ description: 'Blueprint-style documentation workflow with deterministic file operations.'
4
4
  swarm:
5
5
  pattern: handoff
6
6
  maxConcurrency: 1
@@ -13,26 +13,34 @@ swarm:
13
13
  agents:
14
14
  - name: lead
15
15
  cli: claude
16
- role: "Owns final editorial sign-off"
16
+ role: 'Owns final editorial sign-off'
17
17
  - name: researcher
18
18
  cli: codex
19
- role: "Collects technical context and source details"
19
+ role: 'Collects technical context and source details'
20
20
  interactive: false
21
21
  - name: writer
22
22
  cli: codex
23
- role: "Drafts user-facing documentation"
23
+ role: 'Drafts user-facing documentation'
24
+ permissions:
25
+ access: readwrite
26
+ files:
27
+ write: ['docs/**', '*.md', 'web/content/**']
24
28
  interactive: false
25
29
  - name: editor
26
30
  cli: claude
27
- role: "Edits for accuracy, clarity, and structure"
31
+ role: 'Edits for accuracy, clarity, and structure'
32
+ permissions:
33
+ access: readwrite
34
+ files:
35
+ write: ['docs/**', '*.md', 'web/content/**']
28
36
  workflows:
29
37
  - name: docs-production
30
- description: "Gather context, draft docs, edit, and publish summary."
38
+ description: 'Gather context, draft docs, edit, and publish summary.'
31
39
  onError: skip
32
40
  preflight:
33
41
  - command: git status --porcelain
34
42
  failIf: non-empty
35
- description: "Ensure working directory is clean"
43
+ description: 'Ensure working directory is clean'
36
44
  steps:
37
45
  # Deterministic: List existing docs
38
46
  - name: list-docs
@@ -1,6 +1,6 @@
1
- version: "1.0"
1
+ version: '1.0'
2
2
  name: feature-dev
3
- description: "Blueprint-style feature development with deterministic quality gates."
3
+ description: 'Blueprint-style feature development with deterministic quality gates.'
4
4
  swarm:
5
5
  pattern: hub-spoke
6
6
  maxConcurrency: 2
@@ -13,28 +13,32 @@ swarm:
13
13
  agents:
14
14
  - name: lead
15
15
  cli: claude
16
- role: "Lead engineer coordinating delivery"
16
+ role: 'Lead engineer coordinating delivery'
17
+ permissions: { access: full }
17
18
  - name: planner
18
19
  cli: codex
19
- role: "Plans implementation and acceptance criteria"
20
+ role: 'Plans implementation and acceptance criteria'
21
+ permissions: { access: readonly }
20
22
  interactive: false
21
23
  - name: developer
22
24
  cli: codex
23
- role: "Implements planned changes"
25
+ role: 'Implements planned changes'
26
+ permissions: { access: readwrite }
24
27
  interactive: false
25
28
  - name: reviewer
26
29
  cli: claude
27
- role: "Reviews code quality and release risk"
30
+ role: 'Reviews code quality and release risk'
31
+ permissions: { access: readonly }
28
32
  workflows:
29
33
  - name: feature-delivery
30
- description: "Plan, implement, review, and finalize a feature request with quality gates."
34
+ description: 'Plan, implement, review, and finalize a feature request with quality gates.'
31
35
  onError: retry
32
36
  preflight:
33
37
  - command: git status --porcelain
34
38
  failIf: non-empty
35
- description: "Ensure working directory is clean"
39
+ description: 'Ensure working directory is clean'
36
40
  - command: npm run type-check 2>/dev/null || echo "skip"
37
- description: "Run type checking if available"
41
+ description: 'Run type checking if available'
38
42
  steps:
39
43
  # Agent: Planning
40
44
  - name: plan
@@ -1,6 +1,6 @@
1
- version: "1.0"
1
+ version: '1.0'
2
2
  name: refactor
3
- description: "Blueprint-style refactor workflow with deterministic quality gates."
3
+ description: 'Blueprint-style refactor workflow with deterministic quality gates.'
4
4
  swarm:
5
5
  pattern: hierarchical
6
6
  maxConcurrency: 2
@@ -13,28 +13,32 @@ swarm:
13
13
  agents:
14
14
  - name: lead
15
15
  cli: claude
16
- role: "Owns scope, sequencing, and acceptance"
16
+ role: 'Owns scope, sequencing, and acceptance'
17
+ permissions: { access: full }
17
18
  - name: architect
18
19
  cli: codex
19
- role: "Designs target architecture and migration plan"
20
+ role: 'Designs target architecture and migration plan'
21
+ permissions: { access: readwrite }
20
22
  interactive: false
21
23
  - name: refactorer
22
24
  cli: codex
23
- role: "Executes scoped refactor changes"
25
+ role: 'Executes scoped refactor changes'
26
+ permissions: { access: readwrite }
24
27
  interactive: false
25
28
  - name: tester
26
29
  cli: claude
27
- role: "Validates behavior parity and risk"
30
+ role: 'Validates behavior parity and risk'
31
+ permissions: { access: readonly }
28
32
  workflows:
29
33
  - name: refactor-execution
30
- description: "Analyze current system, design approach, refactor, and validate."
34
+ description: 'Analyze current system, design approach, refactor, and validate.'
31
35
  onError: retry
32
36
  preflight:
33
37
  - command: git status --porcelain
34
38
  failIf: non-empty
35
- description: "Ensure working directory is clean"
39
+ description: 'Ensure working directory is clean'
36
40
  - command: npm test 2>/dev/null || echo "baseline"
37
- description: "Capture baseline test results"
41
+ description: 'Capture baseline test results'
38
42
  steps:
39
43
  # Agent: Analyze current design
40
44
  - name: analyze
@@ -1,6 +1,6 @@
1
- version: "1.0"
1
+ version: '1.0'
2
2
  name: review-loop
3
- description: "Implement a task with automated multi-perspective code review loop. Inspired by claude-review-loop pattern."
3
+ description: 'Implement a task with automated multi-perspective code review loop. Inspired by claude-review-loop pattern.'
4
4
  swarm:
5
5
  pattern: review-loop
6
6
  maxConcurrency: 4
@@ -13,22 +13,26 @@ swarm:
13
13
  agents:
14
14
  - name: implementer
15
15
  cli: claude
16
- role: "Senior developer implementing the task and addressing review feedback"
16
+ role: 'Senior developer implementing the task and addressing review feedback'
17
+ permissions: { access: full }
17
18
  - name: reviewer-diff
18
19
  cli: codex
19
- role: "Code quality reviewer focusing on git diff, tests, and potential bugs"
20
+ role: 'Code quality reviewer focusing on git diff, tests, and potential bugs'
21
+ permissions: { access: readonly }
20
22
  interactive: false
21
23
  - name: reviewer-architecture
22
24
  cli: claude
23
- role: "Architecture and design reviewer assessing structure and maintainability"
25
+ role: 'Architecture and design reviewer assessing structure and maintainability'
26
+ permissions: { access: readonly }
24
27
  interactive: false
25
28
  - name: reviewer-security
26
29
  cli: codex
27
- role: "Security reviewer checking for OWASP Top 10 vulnerabilities"
30
+ role: 'Security reviewer checking for OWASP Top 10 vulnerabilities'
31
+ permissions: { access: readonly }
28
32
  interactive: false
29
33
  workflows:
30
34
  - name: review-loop-workflow
31
- description: "Implement task, run parallel reviews, consolidate feedback, and address issues."
35
+ description: 'Implement task, run parallel reviews, consolidate feedback, and address issues.'
32
36
  onError: fail
33
37
  steps:
34
38
  # Phase 1: Implementation
@@ -82,7 +86,7 @@ workflows:
82
86
  - If issues found: REVIEW:ISSUES followed by numbered list of issues
83
87
  verification:
84
88
  type: output_contains
85
- value: "REVIEW:"
89
+ value: 'REVIEW:'
86
90
 
87
91
  - name: review-architecture
88
92
  type: agent
@@ -107,7 +111,7 @@ workflows:
107
111
  - If issues found: REVIEW:ISSUES followed by numbered list of issues
108
112
  verification:
109
113
  type: output_contains
110
- value: "REVIEW:"
114
+ value: 'REVIEW:'
111
115
 
112
116
  - name: review-security
113
117
  type: agent
@@ -133,7 +137,7 @@ workflows:
133
137
  - If vulnerabilities found: REVIEW:ISSUES followed by numbered list with severity
134
138
  verification:
135
139
  type: output_contains
136
- value: "REVIEW:"
140
+ value: 'REVIEW:'
137
141
 
138
142
  # Phase 3: Consolidate reviews
139
143
  - name: consolidate
@@ -1,6 +1,6 @@
1
- version: "1.0"
1
+ version: '1.0'
2
2
  name: security-audit
3
- description: "Blueprint-style security assessment with deterministic scanning and agent triage."
3
+ description: 'Blueprint-style security assessment with deterministic scanning and agent triage.'
4
4
  swarm:
5
5
  pattern: pipeline
6
6
  maxConcurrency: 1
@@ -13,26 +13,36 @@ swarm:
13
13
  agents:
14
14
  - name: lead
15
15
  cli: claude
16
- role: "Owns final risk sign-off and recommendations"
16
+ role: 'Owns final risk sign-off and recommendations'
17
+ permissions: { access: full }
17
18
  - name: analyst
18
19
  cli: claude
19
- role: "Prioritizes findings and recommends mitigations"
20
+ role: 'Prioritizes findings and recommends mitigations'
21
+ permissions:
22
+ access: readonly
23
+ files:
24
+ deny: ['.env', 'secrets/**', '*.pem', '*.key']
20
25
  - name: remediator
21
26
  cli: codex
22
- role: "Implements approved remediations"
27
+ role: 'Implements approved remediations'
28
+ permissions: { access: readwrite }
23
29
  interactive: false
24
30
  - name: verifier
25
31
  cli: gemini
26
- role: "Verifies fixes and residual exposure"
32
+ role: 'Verifies fixes and residual exposure'
33
+ permissions:
34
+ access: readonly
35
+ files:
36
+ deny: ['.env', 'secrets/**', '*.pem', '*.key']
27
37
  workflows:
28
38
  - name: audit-pipeline
29
- description: "Scan, triage, remediate, verify, and report security posture."
39
+ description: 'Scan, triage, remediate, verify, and report security posture.'
30
40
  onError: fail
31
41
  preflight:
32
42
  - command: npm audit --json 2>/dev/null | head -100 || echo "{}"
33
- description: "Run npm audit preflight check"
43
+ description: 'Run npm audit preflight check'
34
44
  - command: git diff --check 2>/dev/null || echo "clean"
35
- description: "Check for whitespace errors"
45
+ description: 'Check for whitespace errors'
36
46
  steps:
37
47
  # Deterministic: Run npm audit
38
48
  - name: scan-npm
@@ -26,7 +26,20 @@ export function formatDryRunReport(report: DryRunReport): string {
26
26
  for (const agent of report.agents) {
27
27
  const stepLabel = agent.stepCount === 1 ? '1 step' : `${agent.stepCount} steps`;
28
28
  const cwdInfo = agent.cwd ? ` [cwd: ${agent.cwd}]` : '';
29
- lines.push(` ${agent.name.padEnd(maxNameLen)} ${agent.cli.padEnd(maxCliLen)} ${stepLabel}${cwdInfo}`);
29
+ lines.push(
30
+ ` ${agent.name.padEnd(maxNameLen)} ${agent.cli.padEnd(maxCliLen)} ${stepLabel}${cwdInfo}`
31
+ );
32
+ }
33
+ lines.push('');
34
+ }
35
+
36
+ // Permissions
37
+ if (report.permissions && report.permissions.length > 0) {
38
+ lines.push(`Permissions (${report.permissions.length} agents):`);
39
+ for (const perm of report.permissions) {
40
+ lines.push(
41
+ ` ${perm.agent}: ${perm.access} (read: ${perm.readPaths}, write: ${perm.writePaths}, deny: ${perm.denyPaths}, scopes: ${perm.scopes}) [${perm.source}]`
42
+ );
30
43
  }
31
44
  lines.push('');
32
45
  }