@geraldmaron/construct 1.4.0 → 1.4.2

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 (65) hide show
  1. package/bin/construct +2 -1
  2. package/bin/construct-postinstall.mjs +27 -2
  3. package/config/tag-vocabulary.json +264 -0
  4. package/lib/config/schema.mjs +1 -1
  5. package/lib/doctor/diagnosis.mjs +20 -0
  6. package/lib/doctor/index.mjs +5 -0
  7. package/lib/embed/worker.mjs +5 -0
  8. package/lib/env-config.mjs +10 -2
  9. package/lib/export-validate.mjs +34 -2
  10. package/lib/hooks/guard-bash.mjs +3 -1
  11. package/lib/host/readiness.mjs +109 -0
  12. package/lib/host-disposition.mjs +10 -1
  13. package/lib/install/stage-project.mjs +41 -4
  14. package/lib/intake/prepare.mjs +2 -0
  15. package/lib/mcp/destructive-approval.mjs +57 -0
  16. package/lib/mcp/server.mjs +209 -35
  17. package/lib/mcp/tool-rate-limit.mjs +47 -0
  18. package/lib/mcp/tool-safety.mjs +94 -0
  19. package/lib/mcp/tool-surface-parity.mjs +60 -0
  20. package/lib/mcp/tools/orchestration-run.mjs +45 -7
  21. package/lib/mcp/tools/project.mjs +25 -8
  22. package/lib/mcp/tools/storage.mjs +9 -1
  23. package/lib/mcp/tools/web-search-governance.mjs +96 -0
  24. package/lib/mcp/tools/web-search.mjs +6 -44
  25. package/lib/mcp-platform-config.mjs +27 -18
  26. package/lib/oracle/daemon-entry.mjs +6 -0
  27. package/lib/orchestration/runtime.mjs +81 -42
  28. package/lib/orchestration/web-capability.mjs +59 -0
  29. package/lib/orchestration/worker.mjs +263 -19
  30. package/lib/orchestration-policy.mjs +36 -0
  31. package/lib/output-quality.mjs +61 -2
  32. package/lib/path-policy.mjs +56 -0
  33. package/lib/providers/secret-audit-wiring.mjs +35 -18
  34. package/lib/providers/secret-resolver.mjs +28 -13
  35. package/lib/registry/catalog.mjs +6 -0
  36. package/lib/registry/loader.mjs +7 -1
  37. package/lib/registry/validate.mjs +3 -3
  38. package/lib/sandbox.mjs +1 -1
  39. package/lib/service-manager.mjs +59 -9
  40. package/lib/storage/admin.mjs +7 -2
  41. package/package.json +6 -1
  42. package/registry/agent-manifest.json +117 -0
  43. package/registry/capabilities.json +1880 -0
  44. package/schemas/brand-voice.schema.json +24 -0
  45. package/schemas/capability-registry.schema.json +72 -0
  46. package/schemas/certification-run.schema.json +130 -0
  47. package/schemas/demo-recording.schema.json +46 -0
  48. package/schemas/eval-dataset.schema.json +79 -0
  49. package/schemas/execution-capability-profile.schema.json +46 -0
  50. package/schemas/execution-policy.schema.json +114 -0
  51. package/schemas/improvement-proposal.schema.json +65 -0
  52. package/schemas/mcp-tool-output.schema.json +61 -0
  53. package/schemas/platform-capabilities.schema.json +83 -0
  54. package/schemas/project-config.schema.json +227 -0
  55. package/schemas/project-demo.schema.json +60 -0
  56. package/schemas/provider-behavior-matrix.schema.json +91 -0
  57. package/schemas/scope.schema.json +197 -0
  58. package/schemas/specialist-trace.schema.json +107 -0
  59. package/schemas/team.schema.json +99 -0
  60. package/schemas/unified-registry.schema.json +548 -0
  61. package/scripts/sync-specialists.mjs +135 -12
  62. package/specialists/org/specialists/cx-researcher.json +1 -0
  63. package/specialists/prompts/cx-researcher.md +9 -8
  64. package/vendor/pandoc-ext/README.md +3 -0
  65. package/vendor/pandoc-ext/diagram.lua +687 -0
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://geraldmaron.github.io/construct/schemas/brand-voice.schema.json",
4
+ "title": "Project brand voice override",
5
+ "type": "object",
6
+ "required": ["version"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "version": { "type": "integer", "minimum": 1 },
10
+ "formality": { "type": "integer", "minimum": 1, "maximum": 5 },
11
+ "toneOverride": {
12
+ "type": "object",
13
+ "description": "Maps doc type id to tone profile id from specialists/tone-profiles.json",
14
+ "additionalProperties": { "type": "string" }
15
+ },
16
+ "audienceLexicon": {
17
+ "type": "object",
18
+ "properties": {
19
+ "prefer": { "type": "array", "items": { "type": "string" } },
20
+ "avoid": { "type": "array", "items": { "type": "string" } }
21
+ }
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://construct.dev/schemas/capability-registry.schema.json",
4
+ "title": "Construct Capability Registry",
5
+ "type": "object",
6
+ "required": ["version", "capabilities"],
7
+ "properties": {
8
+ "version": { "type": "integer", "minimum": 1 },
9
+ "capabilities": {
10
+ "type": "array",
11
+ "items": { "$ref": "#/$defs/capability" }
12
+ }
13
+ },
14
+ "$defs": {
15
+ "surfaceEntry": {
16
+ "type": "object",
17
+ "properties": {
18
+ "supported": { "type": "boolean" },
19
+ "primary": { "type": "boolean" },
20
+ "tool": { "type": "string" },
21
+ "command": { "type": "string" },
22
+ "jsonTwin": { "type": "boolean" },
23
+ "slashCommand": { "type": "string" }
24
+ }
25
+ },
26
+ "capability": {
27
+ "type": "object",
28
+ "required": ["id", "kind", "humanGate"],
29
+ "properties": {
30
+ "id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9.-]*$" },
31
+ "kind": {
32
+ "enum": ["capability", "workflow", "skill", "document-type", "ingest-strategy", "contract-chain"]
33
+ },
34
+ "name": { "type": "string" },
35
+ "description": { "type": "string" },
36
+ "criticality": { "enum": ["P0", "P1", "P2", "P3"] },
37
+ "ownerSpecialists": { "type": "array", "items": { "type": "string" } },
38
+ "skill": { "type": "string" },
39
+ "embeddedWorkflow": { "type": "string" },
40
+ "template": { "type": "string" },
41
+ "ingestStrategy": { "type": "string" },
42
+ "contracts": { "type": "array", "items": { "type": "string" } },
43
+ "surfaces": {
44
+ "type": "object",
45
+ "additionalProperties": { "$ref": "#/$defs/surfaceEntry" }
46
+ },
47
+ "dependencies": {
48
+ "type": "object",
49
+ "properties": {
50
+ "skills": { "type": "array", "items": { "type": "string" } },
51
+ "templates": { "type": "array", "items": { "type": "string" } },
52
+ "rules": { "type": "array", "items": { "type": "string" } }
53
+ }
54
+ },
55
+ "verification": {
56
+ "type": "object",
57
+ "properties": {
58
+ "functional": { "type": "string" },
59
+ "hostEmulation": { "type": "string" },
60
+ "structureRequirements": { "type": "string" },
61
+ "verificationBar": { "type": "string" },
62
+ "untestableRationale": { "type": "string" }
63
+ }
64
+ },
65
+ "humanGate": {
66
+ "enum": ["proposal-only", "requires-human-approval", "autonomous"]
67
+ },
68
+ "lastValidated": { "type": ["string", "null"], "format": "date-time" }
69
+ }
70
+ }
71
+ }
72
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://construct.dev/schemas/certification-run.schema.json",
4
+ "title": "CertificationRun",
5
+ "description": "Durable result of a scenario-based certification execution. Records model, fixture, gates, qualitative verdict, cost, and redacted output pointers without storing secrets.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion",
10
+ "id",
11
+ "scenarioId",
12
+ "capabilityId",
13
+ "model",
14
+ "fixture",
15
+ "verdict",
16
+ "gates",
17
+ "timing",
18
+ "evidenceVersion",
19
+ "createdAt"
20
+ ],
21
+ "properties": {
22
+ "schemaVersion": { "const": 1 },
23
+ "id": { "type": "string", "minLength": 1 },
24
+ "scenarioId": { "type": "string", "minLength": 1 },
25
+ "capabilityId": { "type": "string", "minLength": 1 },
26
+ "model": {
27
+ "type": "object",
28
+ "additionalProperties": false,
29
+ "required": ["provider", "requestedId", "resolvedId", "tier"],
30
+ "properties": {
31
+ "provider": { "type": "string", "minLength": 1 },
32
+ "requestedId": { "type": "string", "minLength": 1 },
33
+ "resolvedId": { "type": "string", "minLength": 1 },
34
+ "tier": { "enum": ["free", "paid-reference", "hermetic", "unknown"] },
35
+ "paidOptIn": { "type": "boolean" },
36
+ "operatorAckAt": { "type": ["string", "null"] }
37
+ }
38
+ },
39
+ "fixture": {
40
+ "type": "object",
41
+ "additionalProperties": false,
42
+ "required": ["path", "sha256"],
43
+ "properties": {
44
+ "path": { "type": "string", "minLength": 1 },
45
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
46
+ }
47
+ },
48
+ "verdict": {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": ["status", "source"],
52
+ "properties": {
53
+ "status": { "enum": ["pass", "fail", "inconclusive"] },
54
+ "source": { "enum": ["deterministic", "qualitative", "skipped-provider", "error"] },
55
+ "reason": { "type": ["string", "null"] }
56
+ }
57
+ },
58
+ "gates": {
59
+ "type": "array",
60
+ "items": {
61
+ "type": "object",
62
+ "additionalProperties": false,
63
+ "required": ["id", "pass"],
64
+ "properties": {
65
+ "id": { "type": "string", "minLength": 1 },
66
+ "pass": { "type": "boolean" },
67
+ "detail": { "type": ["string", "null"] },
68
+ "evidence": { "type": ["string", "null"] }
69
+ }
70
+ }
71
+ },
72
+ "qualitative": {
73
+ "type": ["object", "null"],
74
+ "additionalProperties": false,
75
+ "properties": {
76
+ "judgeModel": { "type": ["string", "null"] },
77
+ "score": { "type": ["number", "null"] },
78
+ "abstained": { "type": "boolean" }
79
+ }
80
+ },
81
+ "evaluation": {
82
+ "type": ["object", "null"],
83
+ "additionalProperties": true,
84
+ "properties": {
85
+ "schemaVersion": { "type": "integer" },
86
+ "blocked": { "type": ["boolean", "null"] },
87
+ "gates": { "type": "array" },
88
+ "evaluators": { "type": "array" },
89
+ "decision": {
90
+ "type": "object",
91
+ "properties": {
92
+ "promotable": { "type": "boolean" },
93
+ "reason": { "type": "string" },
94
+ "judgesConsulted": { "type": "integer" }
95
+ }
96
+ }
97
+ }
98
+ },
99
+ "timing": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": ["latencyMs"],
103
+ "properties": {
104
+ "latencyMs": { "type": "number", "minimum": 0 },
105
+ "startedAt": { "type": ["string", "null"] },
106
+ "finishedAt": { "type": ["string", "null"] }
107
+ }
108
+ },
109
+ "cost": {
110
+ "type": ["object", "null"],
111
+ "additionalProperties": false,
112
+ "properties": {
113
+ "currency": { "type": "string" },
114
+ "inputTokens": { "type": ["number", "null"] },
115
+ "outputTokens": { "type": ["number", "null"] },
116
+ "totalUsd": { "type": ["number", "null"] }
117
+ }
118
+ },
119
+ "artifacts": {
120
+ "type": "object",
121
+ "additionalProperties": false,
122
+ "properties": {
123
+ "outputMarkdown": { "type": ["string", "null"] },
124
+ "outputJson": { "type": ["string", "null"] }
125
+ }
126
+ },
127
+ "evidenceVersion": { "type": "string", "minLength": 1 },
128
+ "createdAt": { "type": "string", "minLength": 1 }
129
+ }
130
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://construct.dev/schemas/demo-recording.schema.json",
4
+ "title": "Construct demo recording manifest",
5
+ "type": "object",
6
+ "required": ["spec"],
7
+ "properties": {
8
+ "name": { "type": "string" },
9
+ "title": { "type": "string" },
10
+ "engine": { "enum": ["playwright"] },
11
+ "workspace": { "type": "string", "default": "." },
12
+ "spec": { "type": "string" },
13
+ "playwrightConfig": { "type": "string" },
14
+ "baseUrl": { "type": "string", "format": "uri" },
15
+ "project": { "type": "string" },
16
+ "skipWebServer": { "type": "boolean" },
17
+ "timeout": { "type": "number" },
18
+ "webServer": {
19
+ "type": "object",
20
+ "properties": {
21
+ "command": { "type": "string" },
22
+ "url": { "type": "string" },
23
+ "cwd": { "type": "string" },
24
+ "timeout": { "type": "number" }
25
+ },
26
+ "required": ["command", "url"]
27
+ },
28
+ "artifactReveal": {
29
+ "type": "object",
30
+ "properties": {
31
+ "mode": { "enum": ["sameOrigin", "constructPreview"] },
32
+ "staticDir": { "type": "string" },
33
+ "file": { "type": "string" },
34
+ "path": { "type": "string" },
35
+ "scroll": { "type": "boolean" }
36
+ }
37
+ },
38
+ "output": {
39
+ "type": "object",
40
+ "properties": {
41
+ "format": { "enum": ["mp4", "webm"] },
42
+ "path": { "type": "string" }
43
+ }
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://construct.dev/schemas/eval-dataset.schema.json",
4
+ "title": "EvalDatasetItem",
5
+ "description": "One provenance-backed evaluation dataset item for the governed AI improvement loop (construct-6zga.1.6). Preserves task input, capability snapshot, allowed tools, expected evidence and contract behavior, redaction state, source trace ids, human-label provenance, split assignment, and expiry, so a candidate can be evaluated on a held-out item that is provably not its own generating trace.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion", "id", "taskFamily", "taskInput", "capabilitySnapshot",
10
+ "allowedTools", "expectedEvidenceBehavior", "expectedContractResult",
11
+ "redaction", "sourceTraceIds", "humanLabel", "split", "expiry"
12
+ ],
13
+ "properties": {
14
+ "schemaVersion": { "const": 1 },
15
+ "id": { "type": "string", "minLength": 1 },
16
+ "taskFamily": { "type": "string", "minLength": 1 },
17
+ "taskInput": {
18
+ "type": "object",
19
+ "additionalProperties": true,
20
+ "required": ["prompt"],
21
+ "properties": {
22
+ "prompt": { "type": "string" },
23
+ "intent": { "type": ["string", "null"] },
24
+ "risk": { "type": ["string", "null"] }
25
+ }
26
+ },
27
+ "capabilitySnapshot": {
28
+ "type": "object",
29
+ "additionalProperties": true,
30
+ "required": ["capabilityClass"],
31
+ "properties": {
32
+ "capabilityClass": { "enum": ["hosted-direct", "hosted-routed", "local-capable", "local-constrained", "unknown"] },
33
+ "transport": { "type": ["string", "null"] },
34
+ "operatingProfileId": { "type": ["string", "null"] }
35
+ }
36
+ },
37
+ "allowedTools": { "type": "array", "items": { "type": "string" } },
38
+ "expectedEvidenceBehavior": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["requirement", "citationsRequired"],
42
+ "properties": {
43
+ "requirement": { "enum": ["none", "preferred", "required"] },
44
+ "citationsRequired": { "type": "boolean" }
45
+ }
46
+ },
47
+ "expectedContractResult": {
48
+ "type": "object",
49
+ "additionalProperties": true,
50
+ "required": ["outcome"],
51
+ "properties": {
52
+ "outcome": { "enum": ["pass", "fail", "blocker", "handoff"] }
53
+ }
54
+ },
55
+ "redaction": {
56
+ "type": "object",
57
+ "additionalProperties": false,
58
+ "required": ["state"],
59
+ "properties": {
60
+ "state": { "enum": ["raw", "redacted", "synthetic"] },
61
+ "fields": { "type": "array", "items": { "type": "string" } }
62
+ }
63
+ },
64
+ "sourceTraceIds": { "type": "array", "items": { "type": "string" }, "minItems": 1 },
65
+ "humanLabel": {
66
+ "type": "object",
67
+ "additionalProperties": false,
68
+ "required": ["provenance"],
69
+ "properties": {
70
+ "provenance": { "enum": ["human", "model-assisted", "unlabeled"] },
71
+ "labeledBy": { "type": ["string", "null"] },
72
+ "rubricVersion": { "type": ["string", "null"] },
73
+ "correctionId": { "type": ["string", "null"] }
74
+ }
75
+ },
76
+ "split": { "enum": ["train", "dev", "test"] },
77
+ "expiry": { "type": ["string", "null"], "description": "ISO 8601 date after which the item is stale, or null for non-expiring" }
78
+ }
79
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://construct.dev/schemas/execution-capability-profile.schema.json",
4
+ "title": "Construct Execution Capability Profile",
5
+ "description": "The single resolved capability record consumed by model routing and specialist prompt composition (construct-6zga.1.8). Keyed by provider, requested/resolved model, adapter protocol, and observation time. Every capability declares its evidence source and confidence; unknowns compile to conservative defaults with a degraded flag.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "key", "capabilityClass", "transport", "capabilities", "degraded", "evidenceSources"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "schemaVersion": { "type": "integer", "minimum": 1 },
11
+ "key": {
12
+ "type": "object",
13
+ "required": ["provider", "requestedModel", "resolvedModel", "adapterProtocol", "observedAt"],
14
+ "additionalProperties": false,
15
+ "properties": {
16
+ "provider": { "type": "string" },
17
+ "requestedModel": { "type": ["string", "null"] },
18
+ "resolvedModel": { "type": ["string", "null"] },
19
+ "adapterProtocol": { "type": "string" },
20
+ "observedAt": { "type": ["string", "null"] }
21
+ }
22
+ },
23
+ "capabilityClass": { "enum": ["hosted-direct", "hosted-routed", "local-constrained", "local-capable", "unknown"] },
24
+ "transport": { "enum": ["direct", "routed", "local", "unknown"] },
25
+ "capabilities": {
26
+ "type": "object",
27
+ "additionalProperties": { "$ref": "#/$defs/field" }
28
+ },
29
+ "degraded": { "type": "boolean" },
30
+ "evidenceSources": { "type": "array", "items": { "$ref": "#/$defs/evidenceSource" } }
31
+ },
32
+ "$defs": {
33
+ "evidenceSource": { "enum": ["provider_metadata", "live_probe", "operator_override", "compatibility_fallback", "unknown"] },
34
+ "confidence": { "enum": ["high", "medium", "low", "none"] },
35
+ "field": {
36
+ "type": "object",
37
+ "required": ["value", "source", "confidence"],
38
+ "additionalProperties": false,
39
+ "properties": {
40
+ "value": {},
41
+ "source": { "$ref": "#/$defs/evidenceSource" },
42
+ "confidence": { "$ref": "#/$defs/confidence" }
43
+ }
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,114 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://construct.dev/schemas/execution-policy.schema.json",
4
+ "title": "Construct Execution Policy",
5
+ "description": "The immutable per-turn execution policy compiled from an ExecutionCapabilityProfile plus the turn's intent, risk, and evidence requirement (construct-6zga.1.2). The single record the owned loop reads for prompt section budgets, tool limits, evidence-first requirement, output budget, visible-thinking policy, continuation/compaction trigger, and caching eligibility. Compiled only from measured capability class/transport/values and the turn inputs — never from a provider or model name.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "source", "prompt", "tools", "evidence", "output", "continuation", "caching", "degradedMode", "telemetry"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "schemaVersion": { "type": "integer", "minimum": 1 },
11
+ "source": {
12
+ "type": "object",
13
+ "required": ["capabilityClass", "transport", "intent", "risk", "evidenceRequirement", "evidenceSources"],
14
+ "additionalProperties": false,
15
+ "properties": {
16
+ "profileSchemaVersion": { "type": ["integer", "null"] },
17
+ "profileKey": {
18
+ "type": ["object", "null"],
19
+ "properties": {
20
+ "provider": { "type": "string" },
21
+ "requestedModel": { "type": ["string", "null"] },
22
+ "resolvedModel": { "type": ["string", "null"] },
23
+ "adapterProtocol": { "type": "string" },
24
+ "observedAt": { "type": ["string", "null"] }
25
+ }
26
+ },
27
+ "capabilityClass": { "$ref": "#/$defs/capabilityClass" },
28
+ "transport": { "enum": ["direct", "routed", "local", "unknown"] },
29
+ "intent": { "$ref": "#/$defs/intent" },
30
+ "risk": { "$ref": "#/$defs/risk" },
31
+ "evidenceRequirement": { "$ref": "#/$defs/evidenceRequirement" },
32
+ "evidenceSources": { "type": "array", "items": { "type": "string" } }
33
+ }
34
+ },
35
+ "prompt": {
36
+ "type": "object",
37
+ "required": ["systemPromptTier", "operatingProfileId", "sectionBudgets", "retrievalFirst", "preferCompressedGuidance"],
38
+ "additionalProperties": false,
39
+ "properties": {
40
+ "systemPromptTier": { "type": "string" },
41
+ "operatingProfileId": { "type": "string" },
42
+ "sectionBudgets": {
43
+ "type": "object",
44
+ "additionalProperties": { "type": "integer", "minimum": 0 }
45
+ },
46
+ "retrievalFirst": { "type": "boolean" },
47
+ "preferCompressedGuidance": { "type": "boolean" }
48
+ }
49
+ },
50
+ "tools": {
51
+ "type": "object",
52
+ "required": ["maxToolSchemas", "allowedToolGroups", "maxToolIterations"],
53
+ "additionalProperties": false,
54
+ "properties": {
55
+ "maxToolSchemas": { "type": "integer", "minimum": 0 },
56
+ "allowedToolGroups": { "type": "array", "items": { "$ref": "#/$defs/toolGroup" } },
57
+ "maxToolIterations": { "type": "integer", "minimum": 1 }
58
+ }
59
+ },
60
+ "evidence": {
61
+ "type": "object",
62
+ "required": ["evidenceFirst", "citationsRequired"],
63
+ "additionalProperties": false,
64
+ "properties": {
65
+ "evidenceFirst": { "type": "boolean" },
66
+ "citationsRequired": { "type": "boolean" }
67
+ }
68
+ },
69
+ "output": {
70
+ "type": "object",
71
+ "required": ["outputTokenBudget", "visibleThinking"],
72
+ "additionalProperties": false,
73
+ "properties": {
74
+ "outputTokenBudget": { "type": "integer", "minimum": 1 },
75
+ "visibleThinking": { "enum": ["hidden", "summary", "full"] }
76
+ }
77
+ },
78
+ "continuation": {
79
+ "type": "object",
80
+ "required": ["compactionTriggerRatio", "compactionTriggerTokens"],
81
+ "additionalProperties": false,
82
+ "properties": {
83
+ "compactionTriggerRatio": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 },
84
+ "compactionTriggerTokens": { "type": ["integer", "null"], "minimum": 1 }
85
+ }
86
+ },
87
+ "caching": {
88
+ "type": "object",
89
+ "required": ["eligible", "scope"],
90
+ "additionalProperties": false,
91
+ "properties": {
92
+ "eligible": { "type": "boolean" },
93
+ "scope": { "enum": ["none", "stable-prefix"] }
94
+ }
95
+ },
96
+ "degradedMode": { "type": "boolean" },
97
+ "telemetry": {
98
+ "type": "object",
99
+ "required": ["degraded", "reasons"],
100
+ "additionalProperties": false,
101
+ "properties": {
102
+ "degraded": { "type": "boolean" },
103
+ "reasons": { "type": "array", "items": { "type": "string" } }
104
+ }
105
+ }
106
+ },
107
+ "$defs": {
108
+ "capabilityClass": { "enum": ["hosted-direct", "hosted-routed", "local-constrained", "local-capable", "unknown"] },
109
+ "intent": { "enum": ["repository-summary", "code-change", "research", "tool-failure", "general"] },
110
+ "risk": { "enum": ["low", "medium", "high"] },
111
+ "evidenceRequirement": { "enum": ["none", "preferred", "required"] },
112
+ "toolGroup": { "enum": ["read", "search", "edit", "shell", "construct", "heavy-mcp"] }
113
+ }
114
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://construct.dev/schemas/improvement-proposal.schema.json",
4
+ "title": "ImprovementProposal",
5
+ "description": "A candidate change in the governed AI improvement loop (construct-6zga.1.5). Never an applied mutation: it declares its type, affected profiles, blast radius, rollback target, required gates, approver, and rollout mode, plus immutable lineage, and moves only through the legal operator states.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion", "id", "type", "state", "affectedProfiles", "blastRadius",
10
+ "rollbackTarget", "requiredGates", "rolloutMode", "lineage", "approver"
11
+ ],
12
+ "properties": {
13
+ "schemaVersion": { "const": 1 },
14
+ "id": { "type": "string", "minLength": 1 },
15
+ "type": { "enum": ["prompt", "role-flavor", "skill", "routing-rule", "contract", "provider-adapter", "policy-config"] },
16
+ "state": {
17
+ "enum": ["observed", "rejected", "reproduce_failed", "baseline_failed", "proposal_ready", "evaluation_failed", "awaiting_approval", "approved", "applied", "rolled_back", "superseded"]
18
+ },
19
+ "affectedProfiles": { "type": "array", "items": { "type": "string" } },
20
+ "blastRadius": { "enum": ["single-surface", "multi-surface", "global"] },
21
+ "rollbackTarget": {
22
+ "type": "object",
23
+ "additionalProperties": true,
24
+ "required": ["version"],
25
+ "properties": {
26
+ "version": { "type": "string" },
27
+ "ref": { "type": ["string", "null"] }
28
+ }
29
+ },
30
+ "requiredGates": { "type": "array", "items": { "type": "string" } },
31
+ "rolloutMode": { "enum": ["sandbox", "staged", "monitored"] },
32
+ "dependencies": { "type": "array", "items": { "type": "string" } },
33
+ "evaluationReportId": { "type": ["string", "null"] },
34
+ "terminalReason": { "type": ["string", "null"] },
35
+ "lineage": {
36
+ "type": "object",
37
+ "additionalProperties": true,
38
+ "required": ["inputTraceIds", "baselineVersion", "candidateVersion", "capabilitySnapshot", "evaluatorVersions"],
39
+ "properties": {
40
+ "inputTraceIds": { "type": "array", "items": { "type": "string" }, "description": "Immutable input-trace references; the controller refuses an empty set as insufficient provenance" },
41
+ "baselineVersion": { "type": "string" },
42
+ "candidateVersion": { "type": "string" },
43
+ "capabilitySnapshot": { "type": "object" },
44
+ "evaluatorVersions": { "type": "array", "items": { "type": "string" } },
45
+ "budgets": { "type": ["object", "null"] }
46
+ }
47
+ },
48
+ "approver": {
49
+ "oneOf": [
50
+ { "type": "null" },
51
+ {
52
+ "type": "object",
53
+ "additionalProperties": true,
54
+ "required": ["identity"],
55
+ "properties": {
56
+ "identity": { "type": "string" },
57
+ "approvedAt": { "type": ["string", "null"] },
58
+ "decision": { "type": ["string", "null"] }
59
+ }
60
+ }
61
+ ]
62
+ },
63
+ "rollout": { "type": ["object", "null"] }
64
+ }
65
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://construct.dev/schemas/mcp-tool-output.schema.json",
4
+ "title": "Construct MCP tool output/error envelope (target contract)",
5
+ "description": "Target, additive contract for MCP tool results (self-audit construct-rr63.6.1). Tools today return ad-hoc shapes: a success payload, or { error: string }. There is no outputSchema and no structured error vocabulary. This contract defines the typed error and degradation shape a Wave-4 implementation migrates toward. It is intentionally not yet wired into the 75 tool registrations; the migration accepts the legacy string error OR the structured object so it can land tool-by-tool without breaking callers.",
6
+ "type": "object",
7
+ "properties": {
8
+ "error": {
9
+ "description": "Absent on success. Legacy ad-hoc string OR the structured target object.",
10
+ "oneOf": [
11
+ {
12
+ "type": "string",
13
+ "description": "Legacy ad-hoc error message (current behaviour, to be migrated)."
14
+ },
15
+ {
16
+ "type": "object",
17
+ "required": ["code", "message"],
18
+ "additionalProperties": false,
19
+ "properties": {
20
+ "code": {
21
+ "type": "string",
22
+ "description": "Stable, machine-branchable discriminant.",
23
+ "enum": [
24
+ "INVALID_INPUT",
25
+ "NOT_FOUND",
26
+ "CAPABILITY_UNAVAILABLE",
27
+ "PROVIDER_EXECUTION_FAILED",
28
+ "SERVER_UNREACHABLE",
29
+ "INTERNAL"
30
+ ]
31
+ },
32
+ "message": {
33
+ "type": "string",
34
+ "description": "Human-readable explanation."
35
+ },
36
+ "details": {
37
+ "type": "object",
38
+ "description": "Optional structured context (offending field, path, provider, etc.)."
39
+ }
40
+ }
41
+ }
42
+ ]
43
+ },
44
+ "degraded": {
45
+ "type": "boolean",
46
+ "description": "True when the tool returned a reduced result instead of failing — e.g. a capability the host could not provide."
47
+ },
48
+ "degradationReason": {
49
+ "type": "string",
50
+ "description": "Typed reason a result is degraded. Shared vocabulary with the host capability matrix (construct-rr63.4.1).",
51
+ "enum": [
52
+ "not-installed",
53
+ "config-missing",
54
+ "mcp-unresolvable",
55
+ "token-unset",
56
+ "server-unreachable",
57
+ "capability-unavailable"
58
+ ]
59
+ }
60
+ }
61
+ }