@mmerterden/multi-agent-pipeline 20.29.0 → 20.30.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 (146) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +5 -5
  3. package/README.tr.md +5 -5
  4. package/docs/architecture.md +3 -3
  5. package/docs/ecosystem.md +5 -5
  6. package/docs/facts.json +7 -7
  7. package/install/catalog-history.json +1 -1
  8. package/install/claude.mjs +10 -1
  9. package/install/codex.mjs +2 -0
  10. package/install/copilot.mjs +13 -0
  11. package/manifest.json +149 -48
  12. package/package.json +2 -1
  13. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +13 -15
  14. package/pipeline/commands/multi-agent/office-off/SKILL.md +27 -0
  15. package/pipeline/commands/multi-agent/office-on/SKILL.md +50 -0
  16. package/pipeline/commands/multi-agent/office-status/SKILL.md +29 -0
  17. package/pipeline/commands/multi-agent/serve/SKILL.md +4 -2
  18. package/pipeline/commands/multi-agent/stack/SKILL.md +15 -8
  19. package/pipeline/commands/multi-agent/steer/SKILL.md +10 -9
  20. package/pipeline/commands/multi-agent/sync/SKILL.md +3 -3
  21. package/pipeline/contract/CHANGELOG.md +62 -0
  22. package/pipeline/contract/README.md +52 -6
  23. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  24. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  25. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  26. package/pipeline/contract/manifest.json +367 -22
  27. package/pipeline/contract/types/index.d.ts +530 -3
  28. package/pipeline/multi-agent-refs/cross-cli-contract.md +5 -4
  29. package/pipeline/multi-agent-refs/features/office-threat-model.md +91 -0
  30. package/pipeline/multi-agent-refs/help/en.md +3 -0
  31. package/pipeline/multi-agent-refs/help/tr.md +3 -0
  32. package/pipeline/office/NOTICE.md +42 -0
  33. package/pipeline/office/assets/BIN.png +0 -0
  34. package/pipeline/office/assets/BOOKSHELF.png +0 -0
  35. package/pipeline/office/assets/CACTUS.png +0 -0
  36. package/pipeline/office/assets/CLOCK.png +0 -0
  37. package/pipeline/office/assets/COFFEE.png +0 -0
  38. package/pipeline/office/assets/COFFEE_TABLE.png +0 -0
  39. package/pipeline/office/assets/CUSHIONED_BENCH.png +0 -0
  40. package/pipeline/office/assets/CUSHIONED_CHAIR_BACK.png +0 -0
  41. package/pipeline/office/assets/CUSHIONED_CHAIR_FRONT.png +0 -0
  42. package/pipeline/office/assets/CUSHIONED_CHAIR_SIDE.png +0 -0
  43. package/pipeline/office/assets/DESK_FRONT.png +0 -0
  44. package/pipeline/office/assets/DESK_SIDE.png +0 -0
  45. package/pipeline/office/assets/DOUBLE_BOOKSHELF.png +0 -0
  46. package/pipeline/office/assets/HANGING_PLANT.png +0 -0
  47. package/pipeline/office/assets/LARGE_PAINTING.png +0 -0
  48. package/pipeline/office/assets/LARGE_PLANT.png +0 -0
  49. package/pipeline/office/assets/PC_BACK.png +0 -0
  50. package/pipeline/office/assets/PC_FRONT_OFF.png +0 -0
  51. package/pipeline/office/assets/PC_FRONT_ON_1.png +0 -0
  52. package/pipeline/office/assets/PC_FRONT_ON_2.png +0 -0
  53. package/pipeline/office/assets/PC_FRONT_ON_3.png +0 -0
  54. package/pipeline/office/assets/PC_SIDE.png +0 -0
  55. package/pipeline/office/assets/PLANT.png +0 -0
  56. package/pipeline/office/assets/PLANT_2.png +0 -0
  57. package/pipeline/office/assets/POT.png +0 -0
  58. package/pipeline/office/assets/SMALL_PAINTING.png +0 -0
  59. package/pipeline/office/assets/SMALL_PAINTING_2.png +0 -0
  60. package/pipeline/office/assets/SMALL_TABLE_FRONT.png +0 -0
  61. package/pipeline/office/assets/SMALL_TABLE_SIDE.png +0 -0
  62. package/pipeline/office/assets/SOFA_BACK.png +0 -0
  63. package/pipeline/office/assets/SOFA_FRONT.png +0 -0
  64. package/pipeline/office/assets/SOFA_SIDE.png +0 -0
  65. package/pipeline/office/assets/TABLE_FRONT.png +0 -0
  66. package/pipeline/office/assets/WHITEBOARD.png +0 -0
  67. package/pipeline/office/assets/WOODEN_BENCH.png +0 -0
  68. package/pipeline/office/assets/WOODEN_CHAIR_BACK.png +0 -0
  69. package/pipeline/office/assets/WOODEN_CHAIR_FRONT.png +0 -0
  70. package/pipeline/office/assets/WOODEN_CHAIR_SIDE.png +0 -0
  71. package/pipeline/office/assets/char_0.png +0 -0
  72. package/pipeline/office/assets/char_1.png +0 -0
  73. package/pipeline/office/assets/char_2.png +0 -0
  74. package/pipeline/office/assets/char_3.png +0 -0
  75. package/pipeline/office/assets/char_4.png +0 -0
  76. package/pipeline/office/assets/char_5.png +0 -0
  77. package/pipeline/office/assets/floor_0.png +0 -0
  78. package/pipeline/office/assets/floor_1.png +0 -0
  79. package/pipeline/office/assets/floor_2.png +0 -0
  80. package/pipeline/office/assets/floor_3.png +0 -0
  81. package/pipeline/office/assets/floor_4.png +0 -0
  82. package/pipeline/office/assets/floor_5.png +0 -0
  83. package/pipeline/office/assets/floor_6.png +0 -0
  84. package/pipeline/office/assets/floor_7.png +0 -0
  85. package/pipeline/office/assets/floor_8.png +0 -0
  86. package/pipeline/office/assets/wall_0.png +0 -0
  87. package/pipeline/office/index.html +5319 -0
  88. package/pipeline/schemas/activity-chat.schema.json +78 -0
  89. package/pipeline/schemas/activity-roles.json +48 -0
  90. package/pipeline/schemas/activity-roles.schema.json +49 -0
  91. package/pipeline/schemas/activity.schema.json +429 -0
  92. package/pipeline/schemas/autopilot-on-request.schema.json +33 -0
  93. package/pipeline/schemas/autopilot-on.schema.json +111 -0
  94. package/pipeline/schemas/contract-error.schema.json +33 -3
  95. package/pipeline/schemas/issue-maturity.schema.json +68 -0
  96. package/pipeline/schemas/ledger.schema.json +202 -0
  97. package/pipeline/schemas/permissions.schema.json +47 -0
  98. package/pipeline/schemas/prefs.schema.json +19 -0
  99. package/pipeline/schemas/prs.schema.json +73 -0
  100. package/pipeline/schemas/review-verdict-request.schema.json +20 -0
  101. package/pipeline/schemas/review-verdict.schema.json +62 -0
  102. package/pipeline/schemas/routine-delete.schema.json +59 -0
  103. package/pipeline/schemas/routines.schema.json +38 -0
  104. package/pipeline/schemas/run-evidence.schema.json +29 -0
  105. package/pipeline/schemas/run-results.schema.json +218 -0
  106. package/pipeline/schemas/service-read.schema.json +58 -0
  107. package/pipeline/schemas/stack-change.schema.json +82 -0
  108. package/pipeline/schemas/stack-request.schema.json +33 -0
  109. package/pipeline/schemas/stack.schema.json +59 -0
  110. package/pipeline/schemas/steer-request.schema.json +25 -0
  111. package/pipeline/schemas/steer.schema.json +59 -0
  112. package/pipeline/schemas/tool-call-request.schema.json +19 -0
  113. package/pipeline/schemas/tool-call.schema.json +47 -0
  114. package/pipeline/schemas/tools.schema.json +60 -0
  115. package/pipeline/scripts/_cost.mjs +66 -1
  116. package/pipeline/scripts/_office-smoke-lib.sh +115 -0
  117. package/pipeline/scripts/_spawn-async.mjs +73 -0
  118. package/pipeline/scripts/_transcript-tail.mjs +274 -0
  119. package/pipeline/scripts/activity-snapshot.mjs +1027 -0
  120. package/pipeline/scripts/autopilot-control.mjs +214 -9
  121. package/pipeline/scripts/contract-server.mjs +1178 -48
  122. package/pipeline/scripts/cost-analyze.mjs +2 -53
  123. package/pipeline/scripts/cost-table.json +1 -0
  124. package/pipeline/scripts/office-build.mjs +89 -0
  125. package/pipeline/scripts/office-control.mjs +383 -0
  126. package/pipeline/scripts/office-ledger.mjs +409 -0
  127. package/pipeline/scripts/routine-registry.mjs +42 -6
  128. package/pipeline/scripts/run-results.mjs +373 -0
  129. package/pipeline/scripts/service-read.mjs +244 -0
  130. package/pipeline/scripts/stack-toggle.mjs +285 -0
  131. package/pipeline/scripts/steer-run.mjs +97 -0
  132. package/pipeline/scripts/toolkit-tools.mjs +599 -0
  133. package/pipeline/scripts/uninstall.mjs +3 -0
  134. package/pipeline/scripts/work-items.mjs +304 -0
  135. package/pipeline/skills/.skill-manifest.json +19 -7
  136. package/pipeline/skills/.skills-index.json +34 -1
  137. package/pipeline/skills/shared/README.md +6 -3
  138. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +13 -15
  139. package/pipeline/skills/shared/core/multi-agent-office-off/SKILL.md +16 -0
  140. package/pipeline/skills/shared/core/multi-agent-office-on/SKILL.md +22 -0
  141. package/pipeline/skills/shared/core/multi-agent-office-status/SKILL.md +17 -0
  142. package/pipeline/skills/shared/core/multi-agent-serve/SKILL.md +4 -2
  143. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +14 -6
  144. package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +10 -9
  145. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +3 -3
  146. package/pipeline/skills/skills-index.md +4 -1
@@ -0,0 +1,59 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/routine-delete.schema.json",
4
+ "title": "Routine removal",
5
+ "description": "What DELETE /v1/routines/{name} returns. Without ?confirm: preview (the routine) with confirmToken and expiresAt. With it: removed, from `routine-registry.mjs remove`. A shipped command is never removed.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "preview": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": ["name", "description", "createdAt", "source"],
19
+ "properties": {
20
+ "name": {
21
+ "type": "string"
22
+ },
23
+ "description": {
24
+ "type": "string"
25
+ },
26
+ "createdAt": {
27
+ "type": ["string", "null"]
28
+ },
29
+ "source": {
30
+ "type": ["string", "null"]
31
+ }
32
+ }
33
+ },
34
+ "confirmToken": {
35
+ "type": "string",
36
+ "pattern": "^[A-Za-z0-9_-]{16,128}$"
37
+ },
38
+ "expiresAt": {
39
+ "type": "string",
40
+ "format": "date-time"
41
+ },
42
+ "removed": {
43
+ "type": "object",
44
+ "additionalProperties": false,
45
+ "required": ["name", "removedDir", "removedEntry"],
46
+ "properties": {
47
+ "name": {
48
+ "type": "string"
49
+ },
50
+ "removedDir": {
51
+ "type": "boolean"
52
+ },
53
+ "removedEntry": {
54
+ "type": "boolean"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/routines.schema.json",
4
+ "title": "Routines",
5
+ "description": "What GET /v1/routines returns (`routine-registry.mjs list --json`): the routines saved with /multi-agent:save. Description and source are scrubbed.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion", "routines"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "routines": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "object",
19
+ "additionalProperties": false,
20
+ "required": ["name", "description", "createdAt", "source"],
21
+ "properties": {
22
+ "name": {
23
+ "type": "string"
24
+ },
25
+ "description": {
26
+ "type": "string"
27
+ },
28
+ "createdAt": {
29
+ "type": ["string", "null"]
30
+ },
31
+ "source": {
32
+ "type": ["string", "null"]
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/run-evidence.schema.json",
4
+ "title": "Run screenshot",
5
+ "description": "What GET /v1/runs/{id}/evidence/{name} returns (`run-results.mjs <id> --evidence <name>`): one screenshot from the run's .pipeline/evidence directory, base64. name is a bare png or jpg file name; one that resolves outside the directory is not found.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion", "taskId", "name", "mime", "data"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "taskId": {
16
+ "type": "string"
17
+ },
18
+ "name": {
19
+ "type": "string"
20
+ },
21
+ "mime": {
22
+ "enum": ["image/png", "image/jpeg"]
23
+ },
24
+ "data": {
25
+ "type": "string",
26
+ "contentEncoding": "base64"
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,218 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/run-results.schema.json",
4
+ "title": "Run results",
5
+ "description": "What GET /v1/runs/{id}/results returns (`run-results.mjs <id> --json`): what a run produced, read from its own files. diff from agent-state diffRisk or .review-diff.txt; findings from triage-output.json or agent-state review; tests from the test-summary gate and uiTest; evidence the screenshot names under .pipeline/evidence; analysis the documents an analysis run wrote. A part with no source is null. Text is scrubbed and redacted; paths are reduced to file names.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion", "taskId", "diff", "findings", "tests", "evidence", "analysis"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "taskId": {
16
+ "type": "string"
17
+ },
18
+ "diff": {
19
+ "oneOf": [
20
+ {
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "required": ["files", "added", "removed", "maxScore", "signals", "changed", "source"],
24
+ "properties": {
25
+ "files": {
26
+ "type": "integer"
27
+ },
28
+ "added": {
29
+ "type": ["integer", "null"]
30
+ },
31
+ "removed": {
32
+ "type": ["integer", "null"]
33
+ },
34
+ "maxScore": {
35
+ "type": ["number", "null"]
36
+ },
37
+ "signals": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string"
41
+ }
42
+ },
43
+ "changed": {
44
+ "type": "array",
45
+ "items": {
46
+ "type": "string"
47
+ }
48
+ },
49
+ "source": {
50
+ "type": "string"
51
+ }
52
+ }
53
+ },
54
+ {
55
+ "type": "null"
56
+ }
57
+ ]
58
+ },
59
+ "findings": {
60
+ "oneOf": [
61
+ {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "required": ["approved", "items", "total", "source"],
65
+ "properties": {
66
+ "approved": {
67
+ "type": ["boolean", "null"]
68
+ },
69
+ "items": {
70
+ "type": "array",
71
+ "items": {
72
+ "type": "object",
73
+ "additionalProperties": false,
74
+ "required": ["severity", "file", "line", "issue", "fix", "reviewer", "verdict"],
75
+ "properties": {
76
+ "severity": {
77
+ "type": "string"
78
+ },
79
+ "file": {
80
+ "type": ["string", "null"]
81
+ },
82
+ "line": {
83
+ "type": ["integer", "null"]
84
+ },
85
+ "issue": {
86
+ "type": "string"
87
+ },
88
+ "fix": {
89
+ "type": ["string", "null"]
90
+ },
91
+ "reviewer": {
92
+ "type": ["string", "null"]
93
+ },
94
+ "verdict": {
95
+ "type": "string"
96
+ }
97
+ }
98
+ }
99
+ },
100
+ "total": {
101
+ "type": "integer"
102
+ },
103
+ "source": {
104
+ "type": "string"
105
+ }
106
+ }
107
+ },
108
+ {
109
+ "type": "null"
110
+ }
111
+ ]
112
+ },
113
+ "tests": {
114
+ "oneOf": [
115
+ {
116
+ "type": "object",
117
+ "additionalProperties": false,
118
+ "required": ["status", "passed", "failed", "skipped", "uiTest", "source"],
119
+ "properties": {
120
+ "status": {
121
+ "type": ["string", "null"]
122
+ },
123
+ "passed": {
124
+ "type": ["integer", "null"]
125
+ },
126
+ "failed": {
127
+ "type": ["integer", "null"]
128
+ },
129
+ "skipped": {
130
+ "type": ["integer", "null"]
131
+ },
132
+ "uiTest": {
133
+ "oneOf": [
134
+ {
135
+ "type": "object",
136
+ "additionalProperties": false,
137
+ "required": ["ran", "status", "notRunReason"],
138
+ "properties": {
139
+ "ran": {
140
+ "type": "boolean"
141
+ },
142
+ "status": {
143
+ "type": ["string", "null"]
144
+ },
145
+ "notRunReason": {
146
+ "type": ["string", "null"]
147
+ }
148
+ }
149
+ },
150
+ {
151
+ "type": "null"
152
+ }
153
+ ]
154
+ },
155
+ "source": {
156
+ "type": "string"
157
+ }
158
+ }
159
+ },
160
+ {
161
+ "type": "null"
162
+ }
163
+ ]
164
+ },
165
+ "evidence": {
166
+ "type": "array",
167
+ "items": {
168
+ "type": "object",
169
+ "additionalProperties": false,
170
+ "required": ["name", "phase"],
171
+ "properties": {
172
+ "name": {
173
+ "type": "string"
174
+ },
175
+ "phase": {
176
+ "enum": ["before", "after", null]
177
+ }
178
+ }
179
+ }
180
+ },
181
+ "analysis": {
182
+ "oneOf": [
183
+ {
184
+ "type": "object",
185
+ "additionalProperties": false,
186
+ "required": ["documents", "confluencePages", "jiraIssueKey"],
187
+ "properties": {
188
+ "documents": {
189
+ "type": "array",
190
+ "items": {
191
+ "type": "object",
192
+ "additionalProperties": false,
193
+ "required": ["name", "text"],
194
+ "properties": {
195
+ "name": {
196
+ "type": "string"
197
+ },
198
+ "text": {
199
+ "type": ["string", "null"]
200
+ }
201
+ }
202
+ }
203
+ },
204
+ "confluencePages": {
205
+ "type": "integer"
206
+ },
207
+ "jiraIssueKey": {
208
+ "type": ["string", "null"]
209
+ }
210
+ }
211
+ },
212
+ {
213
+ "type": "null"
214
+ }
215
+ ]
216
+ }
217
+ }
218
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/service-read.schema.json",
4
+ "title": "Service read",
5
+ "description": "What GET /v1/services/confluence, /crashlytics and /figma return (`service-read.mjs`): one Confluence page, one Crashlytics issue or one Figma frame render, through the pipeline's own clients. Text is redacted; a frame comes back as base64 PNG.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion", "service"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "service": {
16
+ "enum": ["confluence", "crashlytics", "figma"]
17
+ },
18
+ "pageId": {
19
+ "type": ["string", "null"]
20
+ },
21
+ "title": {
22
+ "type": "string"
23
+ },
24
+ "body": {
25
+ "type": "string"
26
+ },
27
+ "apiContracts": {
28
+ "type": "integer"
29
+ },
30
+ "type": {
31
+ "type": ["string", "null"]
32
+ },
33
+ "occurrences": {
34
+ "type": ["number", "null"]
35
+ },
36
+ "impactedUsers": {
37
+ "type": ["number", "null"]
38
+ },
39
+ "stackTrace": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "string"
43
+ }
44
+ },
45
+ "fileKey": {
46
+ "type": "string"
47
+ },
48
+ "nodeId": {
49
+ "type": "string"
50
+ },
51
+ "mime": {
52
+ "const": "image/png"
53
+ },
54
+ "data": {
55
+ "type": "string"
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,82 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/stack-change.schema.json",
4
+ "title": "Stack change",
5
+ "description": "What POST /v1/stack returns (`stack-toggle.mjs set`). Step one: preview {stacks, changed, enabledPlugins, dropped} with confirmToken and expiresAt, nothing written. Step two: the written enabledPlugins, the keys that changed and written.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "preview": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": ["stacks", "changed", "enabledPlugins", "dropped"],
19
+ "properties": {
20
+ "stacks": {
21
+ "type": "array",
22
+ "items": {
23
+ "type": "string"
24
+ }
25
+ },
26
+ "changed": {
27
+ "type": "array",
28
+ "items": {
29
+ "type": "string"
30
+ }
31
+ },
32
+ "enabledPlugins": {
33
+ "type": "object",
34
+ "additionalProperties": {
35
+ "type": "boolean"
36
+ }
37
+ },
38
+ "dropped": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "string"
42
+ }
43
+ }
44
+ }
45
+ },
46
+ "confirmToken": {
47
+ "type": "string",
48
+ "pattern": "^[A-Za-z0-9_-]{16,128}$"
49
+ },
50
+ "expiresAt": {
51
+ "type": "string",
52
+ "format": "date-time"
53
+ },
54
+ "stacks": {
55
+ "type": "array",
56
+ "items": {
57
+ "type": "string"
58
+ }
59
+ },
60
+ "enabledPlugins": {
61
+ "type": "object",
62
+ "additionalProperties": {
63
+ "type": "boolean"
64
+ }
65
+ },
66
+ "changed": {
67
+ "type": "array",
68
+ "items": {
69
+ "type": "string"
70
+ }
71
+ },
72
+ "dropped": {
73
+ "type": "array",
74
+ "items": {
75
+ "type": "string"
76
+ }
77
+ },
78
+ "written": {
79
+ "type": "boolean"
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/stack-request.schema.json",
4
+ "title": "Stack change request",
5
+ "description": "The body of POST /v1/stack. The first request names repo (a name from GET /v1/repos or its path) and stacks (as /multi-agent:stack takes them, aliases allowed); the second sends only confirmToken.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "repo": {
16
+ "type": "string",
17
+ "maxLength": 4096
18
+ },
19
+ "stacks": {
20
+ "type": "array",
21
+ "minItems": 1,
22
+ "maxItems": 8,
23
+ "items": {
24
+ "type": "string",
25
+ "pattern": "^[a-z]{2,16}$"
26
+ }
27
+ },
28
+ "confirmToken": {
29
+ "type": "string",
30
+ "pattern": "^[A-Za-z0-9_-]{16,128}$"
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/stack.schema.json",
4
+ "title": "Stack status",
5
+ "description": "What GET /v1/stack?repo= returns (`stack-toggle.mjs status --json`): the stacks a repository enables in .claude/settings.json and every marketplace plugin with its skills. manifestVerified is false when the marketplace manifest could not be read and the plugin list is the convention.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion", "stacks", "knownStacks", "plugins", "manifestVerified"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "stacks": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "string"
19
+ }
20
+ },
21
+ "knownStacks": {
22
+ "type": "array",
23
+ "items": {
24
+ "type": "string"
25
+ }
26
+ },
27
+ "plugins": {
28
+ "type": "array",
29
+ "items": {
30
+ "type": "object",
31
+ "additionalProperties": false,
32
+ "required": ["name", "enabled", "alwaysOn", "stack", "skills"],
33
+ "properties": {
34
+ "name": {
35
+ "type": "string"
36
+ },
37
+ "enabled": {
38
+ "type": "boolean"
39
+ },
40
+ "alwaysOn": {
41
+ "type": "boolean"
42
+ },
43
+ "stack": {
44
+ "type": ["string", "null"]
45
+ },
46
+ "skills": {
47
+ "type": "array",
48
+ "items": {
49
+ "type": "string"
50
+ }
51
+ }
52
+ }
53
+ }
54
+ },
55
+ "manifestVerified": {
56
+ "type": "boolean"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/steer-request.schema.json",
4
+ "title": "Steer request",
5
+ "description": "The body of POST /v1/runs/{id}/steer. The first request carries text (verbatim, up to 4000 characters) and gets a preview and a confirm token bound to the run and that text; the second carries only confirmToken.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "text": {
16
+ "type": "string",
17
+ "minLength": 1,
18
+ "maxLength": 4000
19
+ },
20
+ "confirmToken": {
21
+ "type": "string",
22
+ "pattern": "^[A-Za-z0-9_-]{16,128}$"
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/steer.schema.json",
4
+ "title": "Steer queued",
5
+ "description": "What POST /v1/runs/{id}/steer returns (`steer-run.mjs`). Step one: preview {text, status, currentPhase, replaces} with confirmToken and expiresAt, nothing written. Step two: the instruction is queued as the run's pendingSteer and applied at the entry to its next phase; replaced is the unconsumed instruction it replaced, or null.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion", "taskId"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "taskId": {
16
+ "type": "string"
17
+ },
18
+ "queuedAt": {
19
+ "type": "string",
20
+ "format": "date-time"
21
+ },
22
+ "replaced": {
23
+ "type": ["string", "null"]
24
+ },
25
+ "status": {
26
+ "type": ["string", "null"]
27
+ },
28
+ "currentPhase": {
29
+ "type": ["integer", "null"]
30
+ },
31
+ "preview": {
32
+ "type": "object",
33
+ "additionalProperties": false,
34
+ "required": ["text", "status", "currentPhase", "replaces"],
35
+ "properties": {
36
+ "text": {
37
+ "type": "string"
38
+ },
39
+ "status": {
40
+ "type": ["string", "null"]
41
+ },
42
+ "currentPhase": {
43
+ "type": ["integer", "null"]
44
+ },
45
+ "replaces": {
46
+ "type": ["string", "null"]
47
+ }
48
+ }
49
+ },
50
+ "confirmToken": {
51
+ "type": "string",
52
+ "pattern": "^[A-Za-z0-9_-]{16,128}$"
53
+ },
54
+ "expiresAt": {
55
+ "type": "string",
56
+ "format": "date-time"
57
+ }
58
+ }
59
+ }