@mmerterden/multi-agent-pipeline 20.30.0 → 20.33.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 (120) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +45 -0
  3. package/README.tr.md +59 -0
  4. package/docs/facts.json +3 -3
  5. package/install/_unattended-profile.mjs +61 -0
  6. package/install/catalog-history.json +1 -1
  7. package/install/claude.mjs +9 -2
  8. package/install/index.mjs +10 -1
  9. package/install/templates/claude-hooks.json +12 -1
  10. package/manifest.json +123 -82
  11. package/package.json +2 -1
  12. package/pipeline/commands/multi-agent/analysis/SKILL.md +4 -4
  13. package/pipeline/commands/multi-agent/office-on/SKILL.md +8 -7
  14. package/pipeline/commands/multi-agent/office-status/SKILL.md +1 -1
  15. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -1
  16. package/pipeline/commands/multi-agent/review/SKILL.md +4 -3
  17. package/pipeline/commands/multi-agent/scenario-audit/SKILL.md +4 -2
  18. package/pipeline/commands/multi-agent/sync/SKILL.md +12 -0
  19. package/pipeline/commands/multi-agent/test-gen/SKILL.md +29 -3
  20. package/pipeline/contract/CHANGELOG.md +46 -0
  21. package/pipeline/contract/README.md +22 -8
  22. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  23. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  24. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  25. package/pipeline/contract/fixtures/launch-plan.json +1 -1
  26. package/pipeline/contract/fixtures/runs-awaiting-question.json +6 -1
  27. package/pipeline/contract/fixtures/runs-empty.json +1 -1
  28. package/pipeline/contract/fixtures/runs-failed.json +6 -1
  29. package/pipeline/contract/fixtures/runs-old-schema.json +6 -1
  30. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +5 -1
  31. package/pipeline/contract/fixtures/runs-pr-opened.json +6 -1
  32. package/pipeline/contract/fixtures/runs-running.json +6 -1
  33. package/pipeline/contract/manifest.json +153 -19
  34. package/pipeline/contract/types/index.d.ts +304 -6
  35. package/pipeline/lib/bg-launch.mjs +106 -0
  36. package/pipeline/lib/code-digest.mjs +49 -0
  37. package/pipeline/lib/credential-resolve.mjs +42 -2
  38. package/pipeline/multi-agent-refs/features/office-threat-model.md +24 -6
  39. package/pipeline/multi-agent-refs/features/unattended-security.md +1 -1
  40. package/pipeline/multi-agent-refs/help/en.md +2 -2
  41. package/pipeline/multi-agent-refs/help/tr.md +2 -2
  42. package/pipeline/multi-agent-refs/phases/modes.md +7 -7
  43. package/pipeline/multi-agent-refs/phases/phase-5-report.md +16 -10
  44. package/pipeline/multi-agent-refs/review-standalone-tracker.md +37 -0
  45. package/pipeline/multi-agent-refs/tracker-contract.md +8 -3
  46. package/pipeline/office/NOTICE.md +4 -1
  47. package/pipeline/office/assets/ARCHIVE_BOXES.png +0 -0
  48. package/pipeline/office/assets/COFFEE_MACHINE.png +0 -0
  49. package/pipeline/office/assets/COUNTER_SINK.png +0 -0
  50. package/pipeline/office/assets/DEVICE_STAND.png +0 -0
  51. package/pipeline/office/assets/FILING_CABINET.png +0 -0
  52. package/pipeline/office/assets/FRIDGE.png +0 -0
  53. package/pipeline/office/assets/MAILBOX.png +0 -0
  54. package/pipeline/office/assets/MOP_BUCKET.png +0 -0
  55. package/pipeline/office/assets/PRINTER.png +0 -0
  56. package/pipeline/office/assets/RECEPTION_DESK.png +0 -0
  57. package/pipeline/office/assets/SERVER_RACK.png +0 -0
  58. package/pipeline/office/assets/SERVER_RACK_2.png +0 -0
  59. package/pipeline/office/assets/TOILET_STALL.png +0 -0
  60. package/pipeline/office/assets/VENDING.png +0 -0
  61. package/pipeline/office/assets/WASHBASIN.png +0 -0
  62. package/pipeline/office/assets/WATER_COOLER.png +0 -0
  63. package/pipeline/office/index.html +3996 -884
  64. package/pipeline/office/toolkit.json +3 -0
  65. package/pipeline/schemas/activity.schema.json +188 -4
  66. package/pipeline/schemas/agent-state.schema.json +493 -115
  67. package/pipeline/schemas/contract-error.schema.json +12 -1
  68. package/pipeline/schemas/job-change.schema.json +72 -0
  69. package/pipeline/schemas/job-request.schema.json +38 -0
  70. package/pipeline/schemas/launch.json +4 -4
  71. package/pipeline/schemas/office-credentials.schema.json +71 -0
  72. package/pipeline/schemas/office-jobs.json +253 -0
  73. package/pipeline/schemas/office-jobs.schema.json +62 -0
  74. package/pipeline/schemas/office-memory.schema.json +105 -0
  75. package/pipeline/schemas/office-settings-request.schema.json +30 -0
  76. package/pipeline/schemas/office-settings.schema.json +67 -0
  77. package/pipeline/schemas/phases.json +10 -2
  78. package/pipeline/schemas/phases.schema.json +86 -19
  79. package/pipeline/schemas/prs.schema.json +5 -0
  80. package/pipeline/schemas/prune-logs-request.schema.json +26 -0
  81. package/pipeline/schemas/prune-logs.schema.json +52 -0
  82. package/pipeline/schemas/repo-change.schema.json +54 -0
  83. package/pipeline/schemas/repo-request.schema.json +29 -0
  84. package/pipeline/schemas/repos.schema.json +49 -1
  85. package/pipeline/schemas/runs-index.schema.json +257 -46
  86. package/pipeline/schemas/system-status.schema.json +111 -0
  87. package/pipeline/schemas/tools.schema.json +5 -0
  88. package/pipeline/schemas/unattended-profile.json +7 -2
  89. package/pipeline/scripts/_active-run.mjs +2 -1
  90. package/pipeline/scripts/_spawn-async.mjs +9 -5
  91. package/pipeline/scripts/activity-snapshot.mjs +219 -23
  92. package/pipeline/scripts/autopilot-runner.mjs +7 -5
  93. package/pipeline/scripts/contract-server.mjs +551 -25
  94. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -1
  95. package/pipeline/scripts/job-launch.mjs +477 -0
  96. package/pipeline/scripts/launch-request.mjs +94 -9
  97. package/pipeline/scripts/office-build.mjs +148 -11
  98. package/pipeline/scripts/office-control.mjs +34 -7
  99. package/pipeline/scripts/office-credentials.mjs +106 -0
  100. package/pipeline/scripts/office-memory.mjs +200 -0
  101. package/pipeline/scripts/office-prune.mjs +125 -0
  102. package/pipeline/scripts/office-settings.mjs +145 -0
  103. package/pipeline/scripts/phase-tracker.sh +12 -5
  104. package/pipeline/scripts/prune-logs.sh +53 -2
  105. package/pipeline/scripts/runs-index.mjs +62 -2
  106. package/pipeline/scripts/system-status.mjs +196 -0
  107. package/pipeline/scripts/task-mirror.mjs +150 -0
  108. package/pipeline/scripts/task-mirror.sh +20 -0
  109. package/pipeline/scripts/toolkit-tools.mjs +33 -7
  110. package/pipeline/scripts/transcript-index.mjs +4 -1
  111. package/pipeline/scripts/work-items.mjs +191 -22
  112. package/pipeline/skills/.skill-manifest.json +6 -6
  113. package/pipeline/skills/.skills-index.json +1 -1
  114. package/pipeline/skills/shared/README.md +1 -1
  115. package/pipeline/skills/shared/core/multi-agent-office-on/SKILL.md +3 -4
  116. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +4 -1
  117. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +19 -0
  118. package/pipeline/skills/shared/core/multi-agent-scenario-audit/SKILL.md +4 -2
  119. package/pipeline/skills/shared/core/multi-agent-test-gen/SKILL.md +26 -3
  120. package/pipeline/skills/skills-index.md +1 -1
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/office-settings-request.schema.json",
4
+ "title": "Office settings request",
5
+ "description": "The body of POST /v1/settings. Step 1 names the setting and its new value; step 2 sends only the confirmToken step 1 returned.",
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
+ "setting": {
16
+ "enum": ["language", "model", "route"],
17
+ "x-sensitivity": "none"
18
+ },
19
+ "value": {
20
+ "enum": ["en", "tr", "on", "off"],
21
+ "x-sensitivity": "none"
22
+ },
23
+ "confirmToken": {
24
+ "type": "string",
25
+ "pattern": "^[A-Za-z0-9_-]{16,128}$",
26
+ "x-sensitivity": "none",
27
+ "description": "The confirmToken the preview returned. Single use, bound to the route."
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/office-settings.schema.json",
4
+ "title": "Office settings",
5
+ "description": "What GET /v1/settings returns and POST /v1/settings returns after a change: the output language, the fable rung and model routing. A preview (the first POST) adds the change it would make and a confirmToken.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion", "language", "model", "route"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "language": {
16
+ "enum": ["en", "tr"],
17
+ "x-sensitivity": "none"
18
+ },
19
+ "model": {
20
+ "enum": ["on", "off"],
21
+ "x-sensitivity": "none",
22
+ "description": "Whether the fable rung is in play."
23
+ },
24
+ "route": {
25
+ "enum": ["on", "off"],
26
+ "x-sensitivity": "none",
27
+ "description": "Whether model routing is on."
28
+ },
29
+ "change": {
30
+ "type": "object",
31
+ "additionalProperties": false,
32
+ "required": ["setting", "from", "to"],
33
+ "x-sensitivity": "none",
34
+ "properties": {
35
+ "setting": {
36
+ "enum": ["language", "model", "route"]
37
+ },
38
+ "from": {
39
+ "type": "string"
40
+ },
41
+ "to": {
42
+ "type": "string"
43
+ },
44
+ "freeChain": {
45
+ "type": "object",
46
+ "additionalProperties": false,
47
+ "required": ["enabled", "allowTraining"],
48
+ "description": "Present when turning routing on brings back a saved free provider chain: the confirmation names it.",
49
+ "properties": {
50
+ "enabled": { "const": true },
51
+ "allowTraining": { "type": "boolean" }
52
+ }
53
+ }
54
+ }
55
+ },
56
+ "confirmToken": {
57
+ "type": "string",
58
+ "pattern": "^[A-Za-z0-9_-]{16,128}$",
59
+ "x-sensitivity": "none"
60
+ },
61
+ "expiresAt": {
62
+ "type": "string",
63
+ "format": "date-time",
64
+ "x-sensitivity": "none"
65
+ }
66
+ }
67
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/phases.json",
4
- "description": "The phase contract, in one place: the phase ids and names, which phases each mode runs, the per-phase token ceilings and the phase numbers other code compares against. gen-mode-dispatch.mjs, render-work-summary.sh, the autopilot runner, runs-index.mjs, usage-report.mjs and gen-facts.mjs read it; smoke-phase-contract.sh holds every copy that cannot read it (the phase docs and prose counts, agent-state.schema.json, token-budget.json, phase-tracker.sh, phase-banner.sh, gc-abandoned.sh) to it. Adding or merging a phase means editing here. A mode with `commits: false` delivers no commit in its Phase 4 (analysis publishes a document), so lib/run-completion.mjs asks it for no commit evidence before `status: complete`; any other mode commits. Ceilings are measured against the current phase documents, never summed from earlier ones: smoke-token-budget.sh fails a ceiling more than 25% above the measurement.",
4
+ "description": "The phase contract, in one place: the phase ids and names, which phases each mode runs, the per-phase token ceilings and the phase numbers other code compares against. gen-mode-dispatch.mjs, render-work-summary.sh, the autopilot runner, runs-index.mjs, usage-report.mjs and gen-facts.mjs read it; smoke-phase-contract.sh holds every copy that cannot read it (the phase docs and prose counts, agent-state.schema.json, token-budget.json, phase-tracker.sh, phase-banner.sh, gc-abandoned.sh) to it. Adding or merging a phase means editing here. A mode with `names` runs the same six slots under its own step names (analysis gathers evidence and synthesises where development plans and builds), and its tracker and task widget show those names. A mode with `commits: false` delivers no commit in its Phase 4 (analysis publishes a document), so lib/run-completion.mjs asks it for no commit evidence before `status: complete`; any other mode commits. Ceilings are measured against the current phase documents, never summed from earlier ones: smoke-token-budget.sh fails a ceiling more than 25% above the measurement.",
5
5
  "contractVersion": "2.0.0",
6
6
  "phaseSchema": 2,
7
7
  "phaseSchemaNote": "The phase vocabulary generation. metrics.jsonl is append-only and v19.0.0 renumbered the phases, so every line written from v19.0.0 on carries this number and a line without the field is generation 1. Aggregators pick their name table from it; without it phase 3 means Dev in old rows and Review in new ones and no reader can tell them apart.",
@@ -71,7 +71,15 @@
71
71
  "autopilot": true
72
72
  },
73
73
  "analysis": {
74
- "phases": [0, 1, 3, 4, 5],
74
+ "phases": [0, 1, 2, 3, 4, 5],
75
+ "names": {
76
+ "0": "Intake",
77
+ "1": "Evidence",
78
+ "2": "Synthesis",
79
+ "3": "Review",
80
+ "4": "Publish",
81
+ "5": "Report"
82
+ },
75
83
  "autopilot": false,
76
84
  "commits": false
77
85
  }
@@ -7,16 +7,38 @@
7
7
  "additionalProperties": false,
8
8
  "required": ["contractVersion", "phaseSchema", "phases", "totalMaxTokens", "modes", "thresholds"],
9
9
  "properties": {
10
- "$schema": { "type": "string" },
11
- "$id": { "type": "string" },
12
- "description": { "type": "string" },
13
- "contractVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
14
- "phaseSchema": { "type": "integer", "minimum": 1 },
15
- "phaseSchemaNote": { "type": "string" },
10
+ "$schema": {
11
+ "type": "string"
12
+ },
13
+ "$id": {
14
+ "type": "string"
15
+ },
16
+ "description": {
17
+ "type": "string"
18
+ },
19
+ "contractVersion": {
20
+ "type": "string",
21
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
22
+ },
23
+ "phaseSchema": {
24
+ "type": "integer",
25
+ "minimum": 1
26
+ },
27
+ "phaseSchemaNote": {
28
+ "type": "string"
29
+ },
16
30
  "legacyPhaseNames": {
17
31
  "type": "object",
18
- "properties": { "note": { "type": "string" } },
19
- "patternProperties": { "^[0-9]+$": { "type": "string" } },
32
+ "properties": {
33
+ "note": {
34
+ "type": "string"
35
+ }
36
+ },
37
+ "patternProperties": {
38
+ "^[0-9]+$": {
39
+ "type": "string"
40
+ }
41
+ },
20
42
  "additionalProperties": false
21
43
  },
22
44
  "phases": {
@@ -27,15 +49,36 @@
27
49
  "additionalProperties": false,
28
50
  "required": ["id", "name", "doc", "maxTokens"],
29
51
  "properties": {
30
- "id": { "type": "integer", "minimum": 0 },
31
- "name": { "type": "string", "minLength": 1 },
32
- "doc": { "type": "string", "pattern": "^phase-[0-9]+-[a-z-]+\\.md$" },
33
- "maxTokens": { "type": "integer", "minimum": 1 },
34
- "was": { "type": "array", "items": { "type": "integer", "minimum": 0 } }
52
+ "id": {
53
+ "type": "integer",
54
+ "minimum": 0
55
+ },
56
+ "name": {
57
+ "type": "string",
58
+ "minLength": 1
59
+ },
60
+ "doc": {
61
+ "type": "string",
62
+ "pattern": "^phase-[0-9]+-[a-z-]+\\.md$"
63
+ },
64
+ "maxTokens": {
65
+ "type": "integer",
66
+ "minimum": 1
67
+ },
68
+ "was": {
69
+ "type": "array",
70
+ "items": {
71
+ "type": "integer",
72
+ "minimum": 0
73
+ }
74
+ }
35
75
  }
36
76
  }
37
77
  },
38
- "totalMaxTokens": { "type": "integer", "minimum": 1 },
78
+ "totalMaxTokens": {
79
+ "type": "integer",
80
+ "minimum": 1
81
+ },
39
82
  "modes": {
40
83
  "type": "object",
41
84
  "minProperties": 1,
@@ -47,13 +90,29 @@
47
90
  "phases": {
48
91
  "type": "array",
49
92
  "minItems": 1,
50
- "items": { "type": "integer", "minimum": 0 },
93
+ "items": {
94
+ "type": "integer",
95
+ "minimum": 0
96
+ },
51
97
  "uniqueItems": true
52
98
  },
53
- "autopilot": { "type": "boolean" },
99
+ "autopilot": {
100
+ "type": "boolean"
101
+ },
54
102
  "commits": {
55
103
  "type": "boolean",
56
104
  "description": "false when the mode delivers no commit in its Phase 4; lib/run-completion.mjs then asks for no commit evidence before status complete. Absent means the mode commits."
105
+ },
106
+ "names": {
107
+ "type": "object",
108
+ "additionalProperties": false,
109
+ "patternProperties": {
110
+ "^[0-9]$": {
111
+ "type": "string",
112
+ "pattern": "^[A-Z][A-Za-z]{1,20}$"
113
+ }
114
+ },
115
+ "description": "The mode's own phase names by id, where they differ from the canonical ones (the analysis pipeline's Intake .. Report). Absent means the canonical names."
57
116
  }
58
117
  }
59
118
  }
@@ -63,9 +122,17 @@
63
122
  "additionalProperties": false,
64
123
  "required": ["waitingFromPhase", "mcpAllowedThroughPhase"],
65
124
  "properties": {
66
- "waitingFromPhase": { "type": "integer", "minimum": 0 },
67
- "mcpAllowedThroughPhase": { "type": "integer", "minimum": 0 },
68
- "note": { "type": "string" }
125
+ "waitingFromPhase": {
126
+ "type": "integer",
127
+ "minimum": 0
128
+ },
129
+ "mcpAllowedThroughPhase": {
130
+ "type": "integer",
131
+ "minimum": 0
132
+ },
133
+ "note": {
134
+ "type": "string"
135
+ }
69
136
  }
70
137
  }
71
138
  }
@@ -22,6 +22,11 @@
22
22
  "source": {
23
23
  "enum": ["github", "bitbucket"]
24
24
  },
25
+ "account": {
26
+ "type": ["string", "null"],
27
+ "x-sensitivity": "local",
28
+ "description": "The GitHub login the pull request was listed under, when gh is logged in to more than one account (personal and corporate). Null for Bitbucket."
29
+ },
25
30
  "repo": {
26
31
  "type": "string"
27
32
  },
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/prune-logs-request.schema.json",
4
+ "title": "Prune logs request",
5
+ "description": "The body of POST /v1/prune-logs. Step 1 names the age in days (7, 30 or 90); step 2 sends only the confirmToken step 1 returned.",
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
+ "olderThanDays": {
16
+ "enum": [7, 30, 90],
17
+ "x-sensitivity": "none"
18
+ },
19
+ "confirmToken": {
20
+ "type": "string",
21
+ "pattern": "^[A-Za-z0-9_-]{16,128}$",
22
+ "x-sensitivity": "none",
23
+ "description": "The confirmToken the preview returned. Single use, bound to the route."
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/prune-logs.schema.json",
4
+ "title": "Prune old run logs",
5
+ "description": "What POST /v1/prune-logs returns. The preview (body {olderThanDays}) is prune-logs.sh's dry run for that age with a confirm token; the confirmation (body {confirmToken}) runs it again with the same age and --yes. The audit trail, the metrics corpus and task counters are never removed, and a folder written in the last minutes is spared.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["contractVersion", "olderThanDays", "applied", "count", "freedMb", "folders"],
9
+ "properties": {
10
+ "contractVersion": {
11
+ "type": "string",
12
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$",
13
+ "x-sensitivity": "none"
14
+ },
15
+ "olderThanDays": {
16
+ "enum": [7, 30, 90],
17
+ "x-sensitivity": "none"
18
+ },
19
+ "applied": {
20
+ "type": "boolean",
21
+ "x-sensitivity": "none"
22
+ },
23
+ "count": {
24
+ "type": "integer",
25
+ "minimum": 0,
26
+ "x-sensitivity": "none"
27
+ },
28
+ "freedMb": {
29
+ "type": "number",
30
+ "minimum": 0,
31
+ "x-sensitivity": "none"
32
+ },
33
+ "folders": {
34
+ "type": "array",
35
+ "maxItems": 200,
36
+ "items": {
37
+ "type": "string"
38
+ },
39
+ "x-sensitivity": "local",
40
+ "description": "project/task folders, at most 200 listed."
41
+ },
42
+ "confirmToken": {
43
+ "type": "string",
44
+ "x-sensitivity": "local"
45
+ },
46
+ "expiresAt": {
47
+ "type": "string",
48
+ "format": "date-time",
49
+ "x-sensitivity": "none"
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/repo-change.schema.json",
4
+ "title": "Repository registration change",
5
+ "description": "What POST /v1/repos and DELETE /v1/repos/{id} return. Without a token: preview (the repository's name) with confirmToken and expiresAt. With it: registered or removed, by name. Paths never leave the server here.",
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"],
19
+ "properties": {
20
+ "name": {
21
+ "type": "string"
22
+ }
23
+ }
24
+ },
25
+ "confirmToken": {
26
+ "type": "string",
27
+ "pattern": "^[A-Za-z0-9_-]{16,128}$"
28
+ },
29
+ "expiresAt": {
30
+ "type": "string",
31
+ "format": "date-time"
32
+ },
33
+ "registered": {
34
+ "type": "object",
35
+ "additionalProperties": false,
36
+ "required": ["name"],
37
+ "properties": {
38
+ "name": {
39
+ "type": "string"
40
+ }
41
+ }
42
+ },
43
+ "removed": {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "required": ["name"],
47
+ "properties": {
48
+ "name": {
49
+ "type": "string"
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
@@ -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/repo-request.schema.json",
4
+ "title": "Repository registration request",
5
+ "description": "The body of POST /v1/repos. The first request names suggestion (an id from GET /v1/repos?all=1) or path (an absolute path to a git checkout); 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
+ "suggestion": {
16
+ "type": "string",
17
+ "pattern": "^[0-9a-f]{16}$"
18
+ },
19
+ "path": {
20
+ "type": "string",
21
+ "maxLength": 4096,
22
+ "x-sensitivity": "local"
23
+ },
24
+ "confirmToken": {
25
+ "type": "string",
26
+ "pattern": "^[A-Za-z0-9_-]{16,128}$"
27
+ }
28
+ }
29
+ }
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/repos.schema.json",
4
4
  "title": "Launch repositories",
5
- "description": "What GET /v1/repos returns and `launch-request.mjs repos` prints: the repositories POST /v1/launch?repo= accepts, by real path. source autopilot is a configured autopilot repo (config.json repos[], named by nameWithOwner); registered is one added with `launch-request.mjs register-repo` (launch-repos.json, named by its directory). path is dropped under redact.",
5
+ "description": "What GET /v1/repos returns and `launch-request.mjs repos` prints: the repositories POST /v1/launch?repo= accepts, by real path. source autopilot is a configured autopilot repo (config.json repos[], named by nameWithOwner); registered is one added with `launch-request.mjs register-repo` (launch-repos.json, named by its directory). path is dropped under redact. With --all (?all=1): suggested lists checkouts earlier runs worked in that launch does not accept yet, and missing lists registered entries that are no longer a directory; each carries an id that POST /v1/repos and DELETE /v1/repos/{id} take.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": ["contractVersion", "repos"],
@@ -34,6 +34,54 @@
34
34
  }
35
35
  }
36
36
  }
37
+ },
38
+ "suggested": {
39
+ "type": "array",
40
+ "x-sensitivity": "none",
41
+ "items": {
42
+ "type": "object",
43
+ "additionalProperties": false,
44
+ "required": ["id", "name"],
45
+ "properties": {
46
+ "id": {
47
+ "type": "string",
48
+ "pattern": "^[0-9a-f]{16}$",
49
+ "x-sensitivity": "none"
50
+ },
51
+ "path": {
52
+ "type": "string",
53
+ "x-sensitivity": "local"
54
+ },
55
+ "name": {
56
+ "type": "string",
57
+ "x-sensitivity": "none"
58
+ }
59
+ }
60
+ }
61
+ },
62
+ "missing": {
63
+ "type": "array",
64
+ "x-sensitivity": "none",
65
+ "items": {
66
+ "type": "object",
67
+ "additionalProperties": false,
68
+ "required": ["id", "name"],
69
+ "properties": {
70
+ "id": {
71
+ "type": "string",
72
+ "pattern": "^[0-9a-f]{16}$",
73
+ "x-sensitivity": "none"
74
+ },
75
+ "path": {
76
+ "type": "string",
77
+ "x-sensitivity": "local"
78
+ },
79
+ "name": {
80
+ "type": "string",
81
+ "x-sensitivity": "none"
82
+ }
83
+ }
84
+ }
37
85
  }
38
86
  }
39
87
  }