@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.
- package/CHANGELOG.md +80 -0
- package/README.md +45 -0
- package/README.tr.md +59 -0
- package/docs/facts.json +3 -3
- package/install/_unattended-profile.mjs +61 -0
- package/install/catalog-history.json +1 -1
- package/install/claude.mjs +9 -2
- package/install/index.mjs +10 -1
- package/install/templates/claude-hooks.json +12 -1
- package/manifest.json +123 -82
- package/package.json +2 -1
- package/pipeline/commands/multi-agent/analysis/SKILL.md +4 -4
- package/pipeline/commands/multi-agent/office-on/SKILL.md +8 -7
- package/pipeline/commands/multi-agent/office-status/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -1
- package/pipeline/commands/multi-agent/review/SKILL.md +4 -3
- package/pipeline/commands/multi-agent/scenario-audit/SKILL.md +4 -2
- package/pipeline/commands/multi-agent/sync/SKILL.md +12 -0
- package/pipeline/commands/multi-agent/test-gen/SKILL.md +29 -3
- package/pipeline/contract/CHANGELOG.md +46 -0
- package/pipeline/contract/README.md +22 -8
- package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
- package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
- package/pipeline/contract/fixtures/error-unsigned.json +1 -1
- package/pipeline/contract/fixtures/launch-plan.json +1 -1
- package/pipeline/contract/fixtures/runs-awaiting-question.json +6 -1
- package/pipeline/contract/fixtures/runs-empty.json +1 -1
- package/pipeline/contract/fixtures/runs-failed.json +6 -1
- package/pipeline/contract/fixtures/runs-old-schema.json +6 -1
- package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +5 -1
- package/pipeline/contract/fixtures/runs-pr-opened.json +6 -1
- package/pipeline/contract/fixtures/runs-running.json +6 -1
- package/pipeline/contract/manifest.json +153 -19
- package/pipeline/contract/types/index.d.ts +304 -6
- package/pipeline/lib/bg-launch.mjs +106 -0
- package/pipeline/lib/code-digest.mjs +49 -0
- package/pipeline/lib/credential-resolve.mjs +42 -2
- package/pipeline/multi-agent-refs/features/office-threat-model.md +24 -6
- package/pipeline/multi-agent-refs/features/unattended-security.md +1 -1
- package/pipeline/multi-agent-refs/help/en.md +2 -2
- package/pipeline/multi-agent-refs/help/tr.md +2 -2
- package/pipeline/multi-agent-refs/phases/modes.md +7 -7
- package/pipeline/multi-agent-refs/phases/phase-5-report.md +16 -10
- package/pipeline/multi-agent-refs/review-standalone-tracker.md +37 -0
- package/pipeline/multi-agent-refs/tracker-contract.md +8 -3
- package/pipeline/office/NOTICE.md +4 -1
- package/pipeline/office/assets/ARCHIVE_BOXES.png +0 -0
- package/pipeline/office/assets/COFFEE_MACHINE.png +0 -0
- package/pipeline/office/assets/COUNTER_SINK.png +0 -0
- package/pipeline/office/assets/DEVICE_STAND.png +0 -0
- package/pipeline/office/assets/FILING_CABINET.png +0 -0
- package/pipeline/office/assets/FRIDGE.png +0 -0
- package/pipeline/office/assets/MAILBOX.png +0 -0
- package/pipeline/office/assets/MOP_BUCKET.png +0 -0
- package/pipeline/office/assets/PRINTER.png +0 -0
- package/pipeline/office/assets/RECEPTION_DESK.png +0 -0
- package/pipeline/office/assets/SERVER_RACK.png +0 -0
- package/pipeline/office/assets/SERVER_RACK_2.png +0 -0
- package/pipeline/office/assets/TOILET_STALL.png +0 -0
- package/pipeline/office/assets/VENDING.png +0 -0
- package/pipeline/office/assets/WASHBASIN.png +0 -0
- package/pipeline/office/assets/WATER_COOLER.png +0 -0
- package/pipeline/office/index.html +3996 -884
- package/pipeline/office/toolkit.json +3 -0
- package/pipeline/schemas/activity.schema.json +188 -4
- package/pipeline/schemas/agent-state.schema.json +493 -115
- package/pipeline/schemas/contract-error.schema.json +12 -1
- package/pipeline/schemas/job-change.schema.json +72 -0
- package/pipeline/schemas/job-request.schema.json +38 -0
- package/pipeline/schemas/launch.json +4 -4
- package/pipeline/schemas/office-credentials.schema.json +71 -0
- package/pipeline/schemas/office-jobs.json +253 -0
- package/pipeline/schemas/office-jobs.schema.json +62 -0
- package/pipeline/schemas/office-memory.schema.json +105 -0
- package/pipeline/schemas/office-settings-request.schema.json +30 -0
- package/pipeline/schemas/office-settings.schema.json +67 -0
- package/pipeline/schemas/phases.json +10 -2
- package/pipeline/schemas/phases.schema.json +86 -19
- package/pipeline/schemas/prs.schema.json +5 -0
- package/pipeline/schemas/prune-logs-request.schema.json +26 -0
- package/pipeline/schemas/prune-logs.schema.json +52 -0
- package/pipeline/schemas/repo-change.schema.json +54 -0
- package/pipeline/schemas/repo-request.schema.json +29 -0
- package/pipeline/schemas/repos.schema.json +49 -1
- package/pipeline/schemas/runs-index.schema.json +257 -46
- package/pipeline/schemas/system-status.schema.json +111 -0
- package/pipeline/schemas/tools.schema.json +5 -0
- package/pipeline/schemas/unattended-profile.json +7 -2
- package/pipeline/scripts/_active-run.mjs +2 -1
- package/pipeline/scripts/_spawn-async.mjs +9 -5
- package/pipeline/scripts/activity-snapshot.mjs +219 -23
- package/pipeline/scripts/autopilot-runner.mjs +7 -5
- package/pipeline/scripts/contract-server.mjs +551 -25
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -1
- package/pipeline/scripts/job-launch.mjs +477 -0
- package/pipeline/scripts/launch-request.mjs +94 -9
- package/pipeline/scripts/office-build.mjs +148 -11
- package/pipeline/scripts/office-control.mjs +34 -7
- package/pipeline/scripts/office-credentials.mjs +106 -0
- package/pipeline/scripts/office-memory.mjs +200 -0
- package/pipeline/scripts/office-prune.mjs +125 -0
- package/pipeline/scripts/office-settings.mjs +145 -0
- package/pipeline/scripts/phase-tracker.sh +12 -5
- package/pipeline/scripts/prune-logs.sh +53 -2
- package/pipeline/scripts/runs-index.mjs +62 -2
- package/pipeline/scripts/system-status.mjs +196 -0
- package/pipeline/scripts/task-mirror.mjs +150 -0
- package/pipeline/scripts/task-mirror.sh +20 -0
- package/pipeline/scripts/toolkit-tools.mjs +33 -7
- package/pipeline/scripts/transcript-index.mjs +4 -1
- package/pipeline/scripts/work-items.mjs +191 -22
- package/pipeline/skills/.skill-manifest.json +6 -6
- package/pipeline/skills/.skills-index.json +1 -1
- package/pipeline/skills/shared/README.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-office-on/SKILL.md +3 -4
- package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +4 -1
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +19 -0
- package/pipeline/skills/shared/core/multi-agent-scenario-audit/SKILL.md +4 -2
- package/pipeline/skills/shared/core/multi-agent-test-gen/SKILL.md +26 -3
- package/pipeline/skills/skills-index.md +1 -1
|
@@ -62,7 +62,18 @@
|
|
|
62
62
|
"busy",
|
|
63
63
|
"review-incomplete",
|
|
64
64
|
"host-not-allowed",
|
|
65
|
-
"internal"
|
|
65
|
+
"internal",
|
|
66
|
+
"unknown-job",
|
|
67
|
+
"command-not-installed",
|
|
68
|
+
"invalid-repo",
|
|
69
|
+
"invalid-args",
|
|
70
|
+
"room-busy",
|
|
71
|
+
"sandbox-unavailable",
|
|
72
|
+
"launch-failed",
|
|
73
|
+
"guard-missing",
|
|
74
|
+
"name-taken",
|
|
75
|
+
"already-registered",
|
|
76
|
+
"not-registered"
|
|
66
77
|
],
|
|
67
78
|
"x-sensitivity": "none"
|
|
68
79
|
},
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/job-change.schema.json",
|
|
4
|
+
"title": "Office job start",
|
|
5
|
+
"description": "What POST /v1/jobs returns. Without a token: preview (the job, the role that does it, team or solo, the repository by name, the exact prompt the session receives and what it writes outside the machine) with confirmToken and expiresAt. With it: started, the session the server began.",
|
|
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": ["jobId", "role", "team", "repo", "prompt", "writes"],
|
|
19
|
+
"properties": {
|
|
20
|
+
"jobId": {
|
|
21
|
+
"type": "string"
|
|
22
|
+
},
|
|
23
|
+
"role": {
|
|
24
|
+
"type": "string"
|
|
25
|
+
},
|
|
26
|
+
"team": {
|
|
27
|
+
"type": "boolean"
|
|
28
|
+
},
|
|
29
|
+
"repo": {
|
|
30
|
+
"type": "string"
|
|
31
|
+
},
|
|
32
|
+
"prompt": {
|
|
33
|
+
"type": "string"
|
|
34
|
+
},
|
|
35
|
+
"writes": {
|
|
36
|
+
"enum": ["none", "branch", "branch-pr", "pr-comments", "issue-comment"]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"confirmToken": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"pattern": "^[A-Za-z0-9_-]{16,128}$"
|
|
43
|
+
},
|
|
44
|
+
"expiresAt": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"format": "date-time"
|
|
47
|
+
},
|
|
48
|
+
"started": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"additionalProperties": false,
|
|
51
|
+
"required": ["sessionId", "jobId", "role", "team", "repo"],
|
|
52
|
+
"properties": {
|
|
53
|
+
"sessionId": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"pattern": "^[0-9a-f-]{36}$"
|
|
56
|
+
},
|
|
57
|
+
"jobId": {
|
|
58
|
+
"type": "string"
|
|
59
|
+
},
|
|
60
|
+
"role": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
},
|
|
63
|
+
"team": {
|
|
64
|
+
"type": "boolean"
|
|
65
|
+
},
|
|
66
|
+
"repo": {
|
|
67
|
+
"type": "string"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -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/job-request.schema.json",
|
|
4
|
+
"title": "Office job request",
|
|
5
|
+
"description": "The body of POST /v1/jobs. The first request names jobId (from GET /v1/jobs), repo (a name from GET /v1/repos or its path) and args (by parameter name), plus answers for a pipeline run; 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
|
+
"jobId": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"pattern": "^[a-z][a-z0-9-]{1,40}$"
|
|
18
|
+
},
|
|
19
|
+
"repo": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"maxLength": 4096
|
|
22
|
+
},
|
|
23
|
+
"args": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"additionalProperties": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"maxLength": 4000
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"answers": {
|
|
31
|
+
"type": "object"
|
|
32
|
+
},
|
|
33
|
+
"confirmToken": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"pattern": "^[A-Za-z0-9_-]{16,128}$"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"MULTI_AGENT_UNATTENDED": "1",
|
|
42
42
|
"MULTI_AGENT_SESSION_ID": "{sessionId}",
|
|
43
43
|
"MCP_TOOLKIT_URL_POLICY": "strict",
|
|
44
|
-
"MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains",
|
|
44
|
+
"MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains,~/.claude/logs/multi-agent/contract-server,~/.claude/logs/multi-agent/office",
|
|
45
45
|
"LOGS_ROOT": "{runLogsRoot}",
|
|
46
46
|
"MA_LAUNCH_REQUEST": "{requestFile}"
|
|
47
47
|
}
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"MULTI_AGENT_UNATTENDED": "1",
|
|
65
65
|
"MULTI_AGENT_SESSION_ID": "{sessionId}",
|
|
66
66
|
"MCP_TOOLKIT_URL_POLICY": "strict",
|
|
67
|
-
"MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains",
|
|
67
|
+
"MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains,~/.claude/logs/multi-agent/contract-server,~/.claude/logs/multi-agent/office",
|
|
68
68
|
"LOGS_ROOT": "{runLogsRoot}",
|
|
69
69
|
"MA_LAUNCH_REQUEST": "{requestFile}"
|
|
70
70
|
}
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"MULTI_AGENT_UNATTENDED": "1",
|
|
85
85
|
"MULTI_AGENT_SESSION_ID": "{sessionId}",
|
|
86
86
|
"MCP_TOOLKIT_URL_POLICY": "strict",
|
|
87
|
-
"MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains",
|
|
87
|
+
"MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains,~/.claude/logs/multi-agent/contract-server,~/.claude/logs/multi-agent/office",
|
|
88
88
|
"LOGS_ROOT": "{runLogsRoot}",
|
|
89
89
|
"MA_LAUNCH_REQUEST": "{requestFile}"
|
|
90
90
|
}
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"MULTI_AGENT_UNATTENDED": "1",
|
|
106
106
|
"MULTI_AGENT_SESSION_ID": "{sessionId}",
|
|
107
107
|
"MCP_TOOLKIT_URL_POLICY": "strict",
|
|
108
|
-
"MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains",
|
|
108
|
+
"MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains,~/.claude/logs/multi-agent/contract-server,~/.claude/logs/multi-agent/office",
|
|
109
109
|
"LOGS_ROOT": "{runLogsRoot}"
|
|
110
110
|
}
|
|
111
111
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/office-credentials.schema.json",
|
|
4
|
+
"title": "Key cabinet",
|
|
5
|
+
"description": "What GET /v1/credentials returns and `office-credentials.mjs --json` prints: for each credential the pipeline knows by logical name, whether the store holds it and, with probe, whether its service accepted it. Never a value: lib/credential-inventory.sh reads each through the store with stdout discarded. Renewal stays in the terminal (/multi-agent:setup).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["contractVersion", "generatedAt", "probed", "available", "credentials"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"contractVersion": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"pattern": "^1\\.[0-9]+\\.[0-9]+$",
|
|
13
|
+
"x-sensitivity": "none"
|
|
14
|
+
},
|
|
15
|
+
"generatedAt": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"format": "date-time",
|
|
18
|
+
"x-sensitivity": "none"
|
|
19
|
+
},
|
|
20
|
+
"probed": {
|
|
21
|
+
"type": "boolean",
|
|
22
|
+
"x-sensitivity": "none"
|
|
23
|
+
},
|
|
24
|
+
"available": {
|
|
25
|
+
"type": "boolean",
|
|
26
|
+
"x-sensitivity": "none",
|
|
27
|
+
"description": "False when the inventory could not run on this host."
|
|
28
|
+
},
|
|
29
|
+
"credentials": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"x-sensitivity": "local",
|
|
32
|
+
"items": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"additionalProperties": false,
|
|
35
|
+
"required": ["logical", "state", "reachability", "capability"],
|
|
36
|
+
"properties": {
|
|
37
|
+
"logical": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"pattern": "^[a-z][a-z0-9_]{0,60}$"
|
|
40
|
+
},
|
|
41
|
+
"state": {
|
|
42
|
+
"enum": ["present", "mapped-but-missing", "unmapped"]
|
|
43
|
+
},
|
|
44
|
+
"reachability": {
|
|
45
|
+
"enum": [
|
|
46
|
+
"not-probed",
|
|
47
|
+
"reachable",
|
|
48
|
+
"auth-rejected",
|
|
49
|
+
"unreachable",
|
|
50
|
+
"no-host-configured",
|
|
51
|
+
"well-formed",
|
|
52
|
+
"not-probeable",
|
|
53
|
+
"malformed",
|
|
54
|
+
"no-credential",
|
|
55
|
+
"probe-error",
|
|
56
|
+
"server-error",
|
|
57
|
+
"tier-1-ready",
|
|
58
|
+
"tier-2-ready",
|
|
59
|
+
"tier-1-no-grant",
|
|
60
|
+
"unknown"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"capability": {
|
|
64
|
+
"type": ["string", "null"],
|
|
65
|
+
"maxLength": 160
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./office-jobs.schema.json",
|
|
3
|
+
"contractVersion": "1.0.0",
|
|
4
|
+
"description": "The jobs a person can hand to someone in the office. A solo job is one command one agent does at a desk; a team job is a pipeline run that meets in a room. Each parameter has a kind that job-launch.mjs checks before anything starts, so no job takes free text, and `writes` names what the job changes outside this machine, shown in the confirmation. Commands not listed here stay terminal commands.",
|
|
5
|
+
"jobs": [
|
|
6
|
+
{
|
|
7
|
+
"id": "pipeline",
|
|
8
|
+
"command": "multi-agent",
|
|
9
|
+
"role": "Orchestrator",
|
|
10
|
+
"team": true,
|
|
11
|
+
"launch": "development",
|
|
12
|
+
"params": [
|
|
13
|
+
{
|
|
14
|
+
"name": "input",
|
|
15
|
+
"kind": "work-item",
|
|
16
|
+
"required": true
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"writes": "branch-pr"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "autopilot-run",
|
|
23
|
+
"command": "multi-agent",
|
|
24
|
+
"role": "Orchestrator",
|
|
25
|
+
"team": true,
|
|
26
|
+
"launch": "autopilot",
|
|
27
|
+
"params": [
|
|
28
|
+
{
|
|
29
|
+
"name": "input",
|
|
30
|
+
"kind": "work-item",
|
|
31
|
+
"required": true
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"writes": "branch-pr"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "analysis",
|
|
38
|
+
"command": "analysis",
|
|
39
|
+
"role": "Planner",
|
|
40
|
+
"team": true,
|
|
41
|
+
"launch": "analysis",
|
|
42
|
+
"params": [
|
|
43
|
+
{
|
|
44
|
+
"name": "input",
|
|
45
|
+
"kind": "work-item",
|
|
46
|
+
"required": true
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"writes": "none"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "review",
|
|
53
|
+
"command": "review",
|
|
54
|
+
"role": "Reviewer",
|
|
55
|
+
"team": false,
|
|
56
|
+
"params": [
|
|
57
|
+
{
|
|
58
|
+
"name": "target",
|
|
59
|
+
"kind": "pull-request",
|
|
60
|
+
"required": true
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"writes": "none"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": "security-review",
|
|
67
|
+
"command": "security-review",
|
|
68
|
+
"role": "Security Auditor",
|
|
69
|
+
"team": false,
|
|
70
|
+
"params": [
|
|
71
|
+
{
|
|
72
|
+
"name": "target",
|
|
73
|
+
"kind": "branch",
|
|
74
|
+
"required": false
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"writes": "none"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "diff-explain",
|
|
81
|
+
"command": "diff-explain",
|
|
82
|
+
"role": "Reviewer",
|
|
83
|
+
"team": false,
|
|
84
|
+
"params": [
|
|
85
|
+
{
|
|
86
|
+
"name": "task",
|
|
87
|
+
"kind": "run-id",
|
|
88
|
+
"required": true
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"writes": "none"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "review-jira",
|
|
95
|
+
"command": "review-jira",
|
|
96
|
+
"role": "Clarifier",
|
|
97
|
+
"team": false,
|
|
98
|
+
"params": [
|
|
99
|
+
{
|
|
100
|
+
"name": "issue",
|
|
101
|
+
"kind": "jira-key",
|
|
102
|
+
"required": true
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"writes": "none"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "review-issue",
|
|
109
|
+
"command": "review-issue",
|
|
110
|
+
"role": "Clarifier",
|
|
111
|
+
"team": false,
|
|
112
|
+
"params": [
|
|
113
|
+
{
|
|
114
|
+
"name": "issue",
|
|
115
|
+
"kind": "github-issue",
|
|
116
|
+
"required": true
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"writes": "none"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "estimate",
|
|
123
|
+
"command": "estimate",
|
|
124
|
+
"role": "Planner",
|
|
125
|
+
"team": false,
|
|
126
|
+
"params": [
|
|
127
|
+
{
|
|
128
|
+
"name": "input",
|
|
129
|
+
"kind": "jira-key",
|
|
130
|
+
"required": true
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"writes": "none"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "research",
|
|
137
|
+
"command": "research",
|
|
138
|
+
"role": "Explorer",
|
|
139
|
+
"team": false,
|
|
140
|
+
"params": [
|
|
141
|
+
{
|
|
142
|
+
"name": "item",
|
|
143
|
+
"kind": "jira-key",
|
|
144
|
+
"required": true
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
"writes": "none"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "postmortem",
|
|
151
|
+
"command": "postmortem",
|
|
152
|
+
"role": "Reader",
|
|
153
|
+
"team": false,
|
|
154
|
+
"params": [
|
|
155
|
+
{
|
|
156
|
+
"name": "target",
|
|
157
|
+
"kind": "run-id",
|
|
158
|
+
"required": true
|
|
159
|
+
}
|
|
160
|
+
],
|
|
161
|
+
"writes": "none"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "graph",
|
|
165
|
+
"command": "graph",
|
|
166
|
+
"role": "Explorer",
|
|
167
|
+
"team": false,
|
|
168
|
+
"params": [
|
|
169
|
+
{
|
|
170
|
+
"name": "action",
|
|
171
|
+
"kind": "enum",
|
|
172
|
+
"values": ["build", "refresh", "report", "status"],
|
|
173
|
+
"required": true
|
|
174
|
+
}
|
|
175
|
+
],
|
|
176
|
+
"writes": "none"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"id": "ios-coding-standard",
|
|
180
|
+
"command": "ios-coding-standard",
|
|
181
|
+
"role": "iOS Architect",
|
|
182
|
+
"team": false,
|
|
183
|
+
"params": [
|
|
184
|
+
{
|
|
185
|
+
"name": "target",
|
|
186
|
+
"kind": "repo-path",
|
|
187
|
+
"required": true
|
|
188
|
+
}
|
|
189
|
+
],
|
|
190
|
+
"writes": "none"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"id": "test-gen",
|
|
194
|
+
"command": "test-gen",
|
|
195
|
+
"role": "Test Gap Analyst",
|
|
196
|
+
"team": true,
|
|
197
|
+
"params": [],
|
|
198
|
+
"writes": "branch"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"id": "doctor",
|
|
202
|
+
"command": "doctor",
|
|
203
|
+
"role": "Sysadmin",
|
|
204
|
+
"team": false,
|
|
205
|
+
"params": [],
|
|
206
|
+
"writes": "none"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"id": "route-status",
|
|
210
|
+
"command": "route-status",
|
|
211
|
+
"role": "Sysadmin",
|
|
212
|
+
"team": false,
|
|
213
|
+
"params": [],
|
|
214
|
+
"writes": "none"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"id": "scan",
|
|
218
|
+
"command": "scan",
|
|
219
|
+
"role": "Librarian",
|
|
220
|
+
"team": false,
|
|
221
|
+
"params": [],
|
|
222
|
+
"writes": "none"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"id": "scenario-audit",
|
|
226
|
+
"command": "scenario-audit",
|
|
227
|
+
"role": "Test Gap Analyst",
|
|
228
|
+
"team": false,
|
|
229
|
+
"params": [
|
|
230
|
+
{
|
|
231
|
+
"name": "scenarios",
|
|
232
|
+
"kind": "repo-path",
|
|
233
|
+
"required": true
|
|
234
|
+
}
|
|
235
|
+
],
|
|
236
|
+
"writes": "none"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"id": "review-analysis",
|
|
240
|
+
"command": "review-analysis",
|
|
241
|
+
"role": "Clarifier",
|
|
242
|
+
"team": false,
|
|
243
|
+
"params": [
|
|
244
|
+
{
|
|
245
|
+
"name": "target",
|
|
246
|
+
"kind": "jira-key",
|
|
247
|
+
"required": true
|
|
248
|
+
}
|
|
249
|
+
],
|
|
250
|
+
"writes": "none"
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/office-jobs.schema.json",
|
|
4
|
+
"title": "Office jobs",
|
|
5
|
+
"description": "The catalog of jobs the office can start (office-jobs.json), read by job-launch.mjs and served by GET /v1/jobs.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["contractVersion", "jobs"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"$schema": { "type": "string" },
|
|
11
|
+
"contractVersion": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"pattern": "^1\\.[0-9]+\\.[0-9]+$",
|
|
14
|
+
"x-sensitivity": "none"
|
|
15
|
+
},
|
|
16
|
+
"description": { "type": "string" },
|
|
17
|
+
"jobs": {
|
|
18
|
+
"type": "array",
|
|
19
|
+
"x-sensitivity": "none",
|
|
20
|
+
"items": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"additionalProperties": false,
|
|
23
|
+
"required": ["id", "command", "role", "team", "params", "writes"],
|
|
24
|
+
"properties": {
|
|
25
|
+
"id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,40}$" },
|
|
26
|
+
"command": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,40}$" },
|
|
27
|
+
"role": { "type": "string", "minLength": 1 },
|
|
28
|
+
"team": { "type": "boolean" },
|
|
29
|
+
"launch": { "enum": ["development", "analysis", "autopilot"] },
|
|
30
|
+
"available": { "type": "boolean" },
|
|
31
|
+
"reason": { "type": ["string", "null"] },
|
|
32
|
+
"params": {
|
|
33
|
+
"type": "array",
|
|
34
|
+
"items": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"required": ["name", "kind", "required"],
|
|
38
|
+
"properties": {
|
|
39
|
+
"name": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,30}$" },
|
|
40
|
+
"kind": {
|
|
41
|
+
"enum": [
|
|
42
|
+
"work-item",
|
|
43
|
+
"pull-request",
|
|
44
|
+
"branch",
|
|
45
|
+
"run-id",
|
|
46
|
+
"jira-key",
|
|
47
|
+
"github-issue",
|
|
48
|
+
"enum",
|
|
49
|
+
"repo-path"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"values": { "type": "array", "items": { "type": "string" } },
|
|
53
|
+
"required": { "type": "boolean" }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"writes": { "enum": ["none", "branch", "branch-pr", "pr-comments", "issue-comment"] }
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/office-memory.schema.json",
|
|
4
|
+
"title": "Institutional memory",
|
|
5
|
+
"description": "What GET /v1/memory returns and `office-memory.mjs --json` prints: per repository, the code graph's age and size and how many learnings, past review findings and session notes the learning loop holds, with the newest learnings redacted and cut short. An empty shelf is reported, never left out.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["contractVersion", "generatedAt", "shelves"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"contractVersion": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"pattern": "^1\\.[0-9]+\\.[0-9]+$",
|
|
13
|
+
"x-sensitivity": "none"
|
|
14
|
+
},
|
|
15
|
+
"generatedAt": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"format": "date-time",
|
|
18
|
+
"x-sensitivity": "none"
|
|
19
|
+
},
|
|
20
|
+
"shelves": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"maxItems": 60,
|
|
23
|
+
"x-sensitivity": "local",
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"required": [
|
|
28
|
+
"repo",
|
|
29
|
+
"graph",
|
|
30
|
+
"learnings",
|
|
31
|
+
"findings",
|
|
32
|
+
"sessionNotes",
|
|
33
|
+
"recent",
|
|
34
|
+
"lastWrite"
|
|
35
|
+
],
|
|
36
|
+
"properties": {
|
|
37
|
+
"repo": {
|
|
38
|
+
"type": "string"
|
|
39
|
+
},
|
|
40
|
+
"graph": {
|
|
41
|
+
"oneOf": [
|
|
42
|
+
{
|
|
43
|
+
"type": "null"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": ["builtAt", "ageDays", "sizeKb"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"builtAt": {
|
|
51
|
+
"type": ["string", "null"]
|
|
52
|
+
},
|
|
53
|
+
"ageDays": {
|
|
54
|
+
"type": "integer",
|
|
55
|
+
"minimum": 0
|
|
56
|
+
},
|
|
57
|
+
"sizeKb": {
|
|
58
|
+
"type": "integer",
|
|
59
|
+
"minimum": 0
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
"learnings": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"minimum": 0
|
|
68
|
+
},
|
|
69
|
+
"findings": {
|
|
70
|
+
"type": "integer",
|
|
71
|
+
"minimum": 0
|
|
72
|
+
},
|
|
73
|
+
"sessionNotes": {
|
|
74
|
+
"type": "integer",
|
|
75
|
+
"minimum": 0
|
|
76
|
+
},
|
|
77
|
+
"recent": {
|
|
78
|
+
"type": "array",
|
|
79
|
+
"maxItems": 5,
|
|
80
|
+
"items": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"additionalProperties": false,
|
|
83
|
+
"required": ["kind", "statement", "at"],
|
|
84
|
+
"properties": {
|
|
85
|
+
"kind": {
|
|
86
|
+
"type": ["string", "null"]
|
|
87
|
+
},
|
|
88
|
+
"statement": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"maxLength": 120
|
|
91
|
+
},
|
|
92
|
+
"at": {
|
|
93
|
+
"type": ["string", "null"]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"lastWrite": {
|
|
99
|
+
"type": ["string", "null"]
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|