@open-agent-toolkit/cli 0.2.30 → 0.2.32
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/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/configuration.md +41 -0
- package/assets/docs/contributing/code.md +19 -7
- package/assets/docs/contributing/explainer-kit-verification.md +9 -1
- package/assets/docs/contributing/skills.md +9 -0
- package/assets/docs/provider-sync/commands.md +15 -10
- package/assets/docs/provider-sync/manifest-and-drift.md +23 -0
- package/assets/docs/provider-sync/providers.md +8 -2
- package/assets/docs/provider-sync/scope-and-surface.md +3 -1
- package/assets/docs/reference/file-locations.md +5 -0
- package/assets/docs/reference/troubleshooting.md +18 -0
- package/assets/docs/workflows/skills/explainer-kit-providers.md +16 -5
- package/assets/docs/workflows/skills/explainer-kit.md +98 -38
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/create-agnostic-skill/references/docs/skills-guide.md +34 -22
- package/assets/skills/explainer-kit/SKILL.md +33 -8
- package/assets/skills/explainer-kit/briefs/project-recap.md +25 -7
- package/assets/skills/explainer-kit/recipes/project-recap.v2.json +72 -0
- package/assets/skills/explainer-kit/references/contracts.md +49 -17
- package/assets/skills/explainer-kit/references/destination-contract.md +141 -25
- package/assets/skills/explainer-kit/references/extension-contract.md +19 -10
- package/assets/skills/explainer-kit/references/visual-authoring.md +24 -0
- package/assets/skills/explainer-kit/references/visual-review.md +19 -5
- package/assets/skills/explainer-kit/schemas/author-request.v3.schema.json +241 -0
- package/assets/skills/explainer-kit/schemas/publish-receipt.v2.schema.json +215 -0
- package/assets/skills/explainer-kit/schemas/publish-request.v2.schema.json +34 -0
- package/assets/skills/explainer-kit/schemas/run-request.schema.json +4 -1
- package/assets/skills/explainer-kit/schemas/terminal-evidence.v1.schema.json +81 -0
- package/assets/skills/explainer-kit/schemas/visual-review-evidence.v1.schema.json +66 -0
- package/assets/skills/explainer-kit/scripts/lib/catalog.mjs +109 -3
- package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +550 -17
- package/assets/skills/explainer-kit/scripts/lib/durability.mjs +90 -8
- package/assets/skills/explainer-kit/scripts/lib/fs-safe.mjs +5 -0
- package/assets/skills/explainer-kit/scripts/lib/internal-references.mjs +538 -0
- package/assets/skills/explainer-kit/scripts/lib/package-coverage.mjs +129 -11
- package/assets/skills/explainer-kit/scripts/lib/publication-policy.mjs +54 -0
- package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +2 -1
- package/assets/skills/explainer-kit/scripts/lib/records.mjs +139 -22
- package/assets/skills/explainer-kit/scripts/lib/s3-roots.mjs +353 -0
- package/assets/skills/explainer-kit/scripts/lib/s3-static.mjs +237 -107
- package/assets/skills/explainer-kit/scripts/lib/set-plan.mjs +1 -0
- package/assets/skills/explainer-kit/scripts/lib/terminal-evidence.mjs +157 -0
- package/assets/skills/explainer-kit/scripts/lib/visual-review.mjs +26 -6
- package/assets/skills/explainer-kit/scripts/run.mjs +1006 -144
- package/assets/skills/oat-agent-instructions-analyze/references/docs/provider-reference.md +14 -2
- package/assets/skills/oat-agent-instructions-apply/references/docs/provider-reference.md +14 -2
- package/assets/skills/oat-explainer-kit/SKILL.md +16 -3
- package/assets/skills/oat-explainer-kit/references/config-contract.md +13 -8
- package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +50 -6
- package/assets/skills/oat-explainer-kit/references/migration.md +2 -1
- package/assets/skills/oat-explainer-kit/references/visual-review-callback.md +11 -0
- package/assets/skills/oat-explainer-kit/scripts/bind-project-sources.mjs +37 -15
- package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +83 -0
- package/assets/skills/oat-explainer-kit/scripts/derive-destination.mjs +91 -0
- package/assets/skills/oat-explainer-kit/scripts/finalize-tracked-run.mjs +66 -10
- package/assets/skills/oat-explainer-kit/scripts/resolve-config.mjs +60 -21
- package/assets/skills/oat-explainer-kit/scripts/resolve-paths.mjs +52 -8
- package/assets/skills/oat-explainer-kit/scripts/run.mjs +271 -36
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +2 -2
- package/assets/skills/oat-project-complete/SKILL.md +19 -3
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +2 -2
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +8 -0
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +2 -2
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +2 -2
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +2 -2
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +18 -0
- package/dist/commands/init/index.d.ts +2 -2
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +22 -13
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +57 -7
- package/dist/commands/project/archive/explainer-terminal-evidence.d.ts +29 -0
- package/dist/commands/project/archive/explainer-terminal-evidence.d.ts.map +1 -0
- package/dist/commands/project/archive/explainer-terminal-evidence.js +37 -0
- package/dist/commands/remove/skill/remove-skill.d.ts +4 -1
- package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
- package/dist/commands/remove/skill/remove-skill.js +44 -5
- package/dist/commands/shared/adopt-stray.d.ts +5 -0
- package/dist/commands/shared/adopt-stray.d.ts.map +1 -1
- package/dist/commands/shared/adopt-stray.js +25 -4
- package/dist/commands/shared/native-skill-disposition.d.ts +22 -0
- package/dist/commands/shared/native-skill-disposition.d.ts.map +1 -0
- package/dist/commands/shared/native-skill-disposition.js +60 -0
- package/dist/commands/status/index.d.ts +2 -2
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +22 -13
- package/dist/config/oat-config.d.ts +2 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +4 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +1 -0
- package/dist/engine/compute-plan.d.ts +3 -2
- package/dist/engine/compute-plan.d.ts.map +1 -1
- package/dist/engine/compute-plan.js +1 -1
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/providers/copilot/paths.d.ts.map +1 -1
- package/dist/providers/copilot/paths.js +6 -4
- package/package.json +2 -2
- package/dist/commands/shared/cursor-skill-disposition.d.ts +0 -17
- package/dist/commands/shared/cursor-skill-disposition.d.ts.map +0 -1
- package/dist/commands/shared/cursor-skill-disposition.js +0 -41
- /package/assets/skills/explainer-kit/recipes/{project-recap.json → project-recap.v1.json} +0 -0
- /package/assets/skills/explainer-kit/schemas/{publish-receipt.schema.json → publish-receipt.v1.schema.json} +0 -0
- /package/assets/skills/explainer-kit/schemas/{publish-request.schema.json → publish-request.v1.schema.json} +0 -0
|
@@ -20,13 +20,18 @@ Private wrappers may retain presets, vault conventions, Google Docs behavior,
|
|
|
20
20
|
and personal destinations around this seam. Those values are wrapper-owned;
|
|
21
21
|
they are not OAT config keys and must not be discovered by the core.
|
|
22
22
|
|
|
23
|
-
## Frozen
|
|
23
|
+
## Frozen versioned boundary
|
|
24
24
|
|
|
25
25
|
The versioned request, artifact package, manifest, build record, durability
|
|
26
|
-
request, publish request, and publish receipt are the public boundary.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
request, publish request, and publish receipt are the public boundary. New
|
|
27
|
+
publication work uses the immutable `explainer-kit.publish-request/v2` and
|
|
28
|
+
`explainer-kit.publish-receipt/v2` contracts. The corresponding
|
|
29
|
+
`publish-request/v1` and `publish-receipt/v1` contracts remain readable for
|
|
30
|
+
replay; v2 is a new contract version, not an in-place mutation of v1. The
|
|
31
|
+
extension seam has no plugin registry and no mid-pipeline callback API for
|
|
32
|
+
private destinations. Provider-neutral callbacks already documented by the
|
|
33
|
+
core remain explicit run options; they do not transfer stage ownership to a
|
|
34
|
+
wrapper.
|
|
30
35
|
|
|
31
36
|
V1 readers reject unsupported contract majors and identity mismatches rather
|
|
32
37
|
than guessing. Wrappers should preserve unknown future versions for diagnosis,
|
|
@@ -59,13 +64,17 @@ or private content.
|
|
|
59
64
|
|
|
60
65
|
After the core command returns, the wrapper performs its post-run publication
|
|
61
66
|
and linking work. It retains the immutable core manifest as
|
|
62
|
-
`private-wrapper-manifest.json`, the complete `
|
|
67
|
+
`private-wrapper-manifest.json`, the complete `publish-receipt/v2` as
|
|
63
68
|
`private-wrapper-publish-receipt.json`, and its sanitized wrapper result as
|
|
64
69
|
`private-wrapper-result.json`. The wrapper result repeats canonical hashes for
|
|
65
70
|
the request, manifest, and post-run receipt.
|
|
66
71
|
|
|
67
72
|
The wrapper acceptance stage reads those post-run files separately. It
|
|
68
|
-
validates the closed receipt contract,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
validates the closed receipt contract, complete manifest and catalog evidence,
|
|
74
|
+
every source identity, path, artifact hash, destination, and verification fact,
|
|
75
|
+
the run-unique sentinel, the manifest hash, and the core run ID against
|
|
76
|
+
`private-wrapper-execution.json`. Public and protected v2 receipts must each
|
|
77
|
+
provide exactly one entry for every finalized manifest artifact and exactly one
|
|
78
|
+
generated catalog entry. A `publish-receipt/v1` remains consumable only for
|
|
79
|
+
replay. Repeating a matching hash cannot make a foreign, duplicate, incomplete,
|
|
80
|
+
or stale receipt attributable to the packaged run.
|
|
@@ -28,10 +28,30 @@ stands. Use one dominant title, a short framing statement, and the most useful
|
|
|
28
28
|
visual or status summary before secondary detail. Keep headings descriptive,
|
|
29
29
|
group related items, and use size, spacing, and contrast consistently.
|
|
30
30
|
|
|
31
|
+
Assign intentional typography roles to the title, framing statement, section
|
|
32
|
+
headings, labels, body copy, evidence, and annotations. Use weight, scale,
|
|
33
|
+
measure, and contrast to clarify those roles rather than making every text block
|
|
34
|
+
equally loud. Keep the role system consistent across artifacts without forcing
|
|
35
|
+
every medium into the same composition.
|
|
36
|
+
|
|
31
37
|
Use the shared terminology, status labels, and numbers exactly. Never create a
|
|
32
38
|
shorter synonym that changes meaning. Keep source-backed uncertainty visible as
|
|
33
39
|
`needs confirmation`.
|
|
34
40
|
|
|
41
|
+
## Compose to the evidence
|
|
42
|
+
|
|
43
|
+
Treat composition and density as editorial choices. Group facts that belong
|
|
44
|
+
together, give the main claim enough emphasis, and let supporting evidence
|
|
45
|
+
recede without becoming hard to find. Restructure crowded content instead of
|
|
46
|
+
shrinking it, and remove decorative filler instead of stretching sparse
|
|
47
|
+
material.
|
|
48
|
+
|
|
49
|
+
Seek medium leverage: a visual artifact should make a relationship, comparison,
|
|
50
|
+
sequence, or decision easier to understand than prose alone. Vary the treatment
|
|
51
|
+
to fit the evidence and avoid template repetition across sections, cards, or
|
|
52
|
+
slides. Shared visual language should create cross-artifact cohesion, not a set
|
|
53
|
+
of cloned layouts.
|
|
54
|
+
|
|
35
55
|
## Hubs and responsive navigation
|
|
36
56
|
|
|
37
57
|
- Lead with the project outcome and current state, then expose architecture,
|
|
@@ -45,6 +65,8 @@ shorter synonym that changes meaning. Keep source-backed uncertainty visible as
|
|
|
45
65
|
|
|
46
66
|
## Diagrams and system visuals
|
|
47
67
|
|
|
68
|
+
- Preserve diagram semantics: topology, direction, ownership, state, and edge
|
|
69
|
+
meaning must survive the visual treatment.
|
|
48
70
|
- Encode relationships with position and connectors, not color alone.
|
|
49
71
|
- Label nodes with concrete nouns and edges with actions or data movement.
|
|
50
72
|
- Make direction explicit and include a legend only when the encoding needs it.
|
|
@@ -58,6 +80,8 @@ shorter synonym that changes meaning. Keep source-backed uncertainty visible as
|
|
|
58
80
|
attribute escaping, including `data-edge-label=""` for an unlabeled edge.
|
|
59
81
|
- Give the canvas an accessible name and description. Keep labels readable at
|
|
60
82
|
the required viewport widths and provide bounded pan or zoom for large maps.
|
|
83
|
+
- Fit the frame to the content so the meaningful topology is prominent rather
|
|
84
|
+
than stranded in unused canvas.
|
|
61
85
|
- Use the same component names and status vocabulary as the hub and deck.
|
|
62
86
|
|
|
63
87
|
## Decks
|
|
@@ -12,17 +12,30 @@ Inspect the complete set before assigning artifact findings. Verify:
|
|
|
12
12
|
|
|
13
13
|
- **First viewport:** each artifact establishes purpose, project state, and the
|
|
14
14
|
primary reader question without scrolling.
|
|
15
|
+
- **Typography:** titles, framing text, headings, labels, body copy, and
|
|
16
|
+
annotations have distinct, readable roles that remain consistent across the
|
|
17
|
+
set.
|
|
15
18
|
- **Hierarchy:** the most important outcome or relationship is dominant, with
|
|
16
19
|
secondary detail grouped and ordered consistently.
|
|
17
|
-
- **
|
|
18
|
-
|
|
20
|
+
- **Composition:** grouping, alignment, spacing, and emphasis create a clear
|
|
21
|
+
reading path suited to the artifact's evidence.
|
|
22
|
+
- **Density:** crowded material is restructured instead of miniaturized, while
|
|
23
|
+
sparse material is not padded with decorative filler.
|
|
24
|
+
- **Medium leverage:** the selected medium makes a relationship, comparison,
|
|
25
|
+
sequence, or decision easier to understand than plain prose would.
|
|
19
26
|
- **Legibility:** text, labels, status cues, tables, and connectors remain
|
|
20
27
|
readable at every required viewport.
|
|
21
28
|
- **Medium fit:** the hub orients and links, the system visual preserves
|
|
22
29
|
relationships, the deck paces a narrative, and optional artifacts add a
|
|
23
30
|
distinct source-backed perspective.
|
|
24
|
-
- **
|
|
25
|
-
|
|
31
|
+
- **Template repetition:** sections, cards, and slides vary when the evidence
|
|
32
|
+
calls for a different treatment instead of repeating one shell mechanically.
|
|
33
|
+
- **Diagram semantics:** topology, direction, labels, edge meaning, and
|
|
34
|
+
fit-to-content framing communicate the planned relationships without false
|
|
35
|
+
linearization or decorative ambiguity.
|
|
36
|
+
- **Cross-artifact cohesion:** terminology, status labels, numbers, color
|
|
37
|
+
meaning, typographic roles, and visual language match the shared ledger and
|
|
38
|
+
one another.
|
|
26
39
|
- **Coverage and redundancy:** planned sources and reader questions are covered
|
|
27
40
|
once at the right depth; optional artifacts do not repeat the hub or deck
|
|
28
41
|
without a justified purpose.
|
|
@@ -49,7 +62,8 @@ Use severity proportionally:
|
|
|
49
62
|
Return exactly one provider-neutral disposition:
|
|
50
63
|
|
|
51
64
|
- `pass` when the full set clears the rubric with no required correction.
|
|
52
|
-
- `correct` when bounded artifact-scoped changes can clear the rubric
|
|
65
|
+
- `correct` when bounded artifact-scoped changes can clear the rubric; every
|
|
66
|
+
finding must name a concrete, actionable correction.
|
|
53
67
|
- `fail` when evidence is missing, the plan or ledger is internally invalid, or
|
|
54
68
|
correction would require unsupported facts or a different artifact set.
|
|
55
69
|
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "explainer-kit.author-request/v3",
|
|
4
|
+
"title": "AuthorRequestV3",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"artifactId",
|
|
10
|
+
"artifactType",
|
|
11
|
+
"authoring",
|
|
12
|
+
"brief",
|
|
13
|
+
"visualAuthoringGuidance",
|
|
14
|
+
"factBase",
|
|
15
|
+
"theme",
|
|
16
|
+
"setContext",
|
|
17
|
+
"plannedArtifact",
|
|
18
|
+
"artifactLinks"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"schemaVersion": { "const": "explainer-kit.author-request/v3" },
|
|
22
|
+
"artifactId": { "type": "string", "minLength": 1 },
|
|
23
|
+
"artifactType": {
|
|
24
|
+
"enum": ["hub", "diagram", "explainer", "deck", "catalog"]
|
|
25
|
+
},
|
|
26
|
+
"authoring": { "enum": ["markdown", "html"] },
|
|
27
|
+
"brief": { "type": "string", "minLength": 1 },
|
|
28
|
+
"visualAuthoringGuidance": { "type": "string", "minLength": 1 },
|
|
29
|
+
"factBase": { "$ref": "explainer-kit.fact-base/v1" },
|
|
30
|
+
"shell": { "type": "string", "minLength": 1 },
|
|
31
|
+
"theme": { "$ref": "explainer-kit.theme/v1" },
|
|
32
|
+
"setContext": { "$ref": "explainer-kit.set-plan/v1" },
|
|
33
|
+
"plannedArtifact": { "$ref": "#/$defs/plannedArtifact" },
|
|
34
|
+
"artifactLinks": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": { "$ref": "#/$defs/artifactLink" },
|
|
37
|
+
"minItems": 1,
|
|
38
|
+
"uniqueItems": true
|
|
39
|
+
},
|
|
40
|
+
"graphSemantics": {
|
|
41
|
+
"type": "array",
|
|
42
|
+
"items": { "$ref": "#/$defs/graphSemantics" },
|
|
43
|
+
"minItems": 1
|
|
44
|
+
},
|
|
45
|
+
"floor": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": ["requiredNarrative"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"requiredNarrative": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"items": { "type": "string", "minLength": 1 },
|
|
53
|
+
"minItems": 1,
|
|
54
|
+
"uniqueItems": true
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"$defs": {
|
|
60
|
+
"artifactLink": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"additionalProperties": false,
|
|
63
|
+
"required": ["artifactId", "artifactType", "sitePath", "href"],
|
|
64
|
+
"properties": {
|
|
65
|
+
"artifactId": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
|
|
68
|
+
},
|
|
69
|
+
"artifactType": {
|
|
70
|
+
"enum": ["hub", "diagram", "explainer", "deck", "catalog"]
|
|
71
|
+
},
|
|
72
|
+
"sitePath": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"pattern": "^site/[a-z0-9._-]+(?:/[a-z0-9._-]+)*/index\\.html$"
|
|
75
|
+
},
|
|
76
|
+
"href": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"pattern": "^(?:index\\.html|(?:\\.\\./)*[a-z0-9._-]+(?:/[a-z0-9._-]+)*/index\\.html)$"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"graphSemantics": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"additionalProperties": false,
|
|
85
|
+
"required": ["direction", "nodes", "edges", "topology"],
|
|
86
|
+
"properties": {
|
|
87
|
+
"direction": { "enum": ["TD", "LR"] },
|
|
88
|
+
"nodes": {
|
|
89
|
+
"type": "array",
|
|
90
|
+
"items": {
|
|
91
|
+
"type": "object",
|
|
92
|
+
"additionalProperties": false,
|
|
93
|
+
"required": ["id", "label", "shape", "explicit"],
|
|
94
|
+
"properties": {
|
|
95
|
+
"id": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" },
|
|
96
|
+
"label": { "type": "string", "minLength": 1 },
|
|
97
|
+
"shape": { "enum": ["rectangle", "rounded", "diamond"] },
|
|
98
|
+
"explicit": { "type": "boolean" }
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"minItems": 1,
|
|
102
|
+
"uniqueItems": true
|
|
103
|
+
},
|
|
104
|
+
"edges": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"items": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"additionalProperties": false,
|
|
109
|
+
"required": ["from", "to", "kind", "label"],
|
|
110
|
+
"properties": {
|
|
111
|
+
"from": {
|
|
112
|
+
"type": "string",
|
|
113
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
|
|
114
|
+
},
|
|
115
|
+
"to": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" },
|
|
116
|
+
"kind": { "enum": ["arrow", "line"] },
|
|
117
|
+
"label": { "type": "string" }
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"minItems": 1
|
|
121
|
+
},
|
|
122
|
+
"topology": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"additionalProperties": false,
|
|
125
|
+
"required": [
|
|
126
|
+
"kind",
|
|
127
|
+
"features",
|
|
128
|
+
"branchNodes",
|
|
129
|
+
"fanInNodes",
|
|
130
|
+
"cycle",
|
|
131
|
+
"order"
|
|
132
|
+
],
|
|
133
|
+
"properties": {
|
|
134
|
+
"kind": { "const": "non-linear" },
|
|
135
|
+
"features": {
|
|
136
|
+
"type": "array",
|
|
137
|
+
"items": {
|
|
138
|
+
"enum": [
|
|
139
|
+
"branch",
|
|
140
|
+
"fan-in",
|
|
141
|
+
"cycle",
|
|
142
|
+
"disconnected",
|
|
143
|
+
"non-linear"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
"minItems": 1,
|
|
147
|
+
"uniqueItems": true
|
|
148
|
+
},
|
|
149
|
+
"branchNodes": {
|
|
150
|
+
"type": "array",
|
|
151
|
+
"items": {
|
|
152
|
+
"type": "string",
|
|
153
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
|
|
154
|
+
},
|
|
155
|
+
"uniqueItems": true
|
|
156
|
+
},
|
|
157
|
+
"fanInNodes": {
|
|
158
|
+
"type": "array",
|
|
159
|
+
"items": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
|
|
162
|
+
},
|
|
163
|
+
"uniqueItems": true
|
|
164
|
+
},
|
|
165
|
+
"cycle": { "type": "boolean" },
|
|
166
|
+
"order": {
|
|
167
|
+
"type": "array",
|
|
168
|
+
"items": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
|
|
171
|
+
},
|
|
172
|
+
"maxItems": 0
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"plannedArtifact": {
|
|
179
|
+
"type": "object",
|
|
180
|
+
"additionalProperties": false,
|
|
181
|
+
"required": [
|
|
182
|
+
"artifactId",
|
|
183
|
+
"artifactType",
|
|
184
|
+
"profileId",
|
|
185
|
+
"required",
|
|
186
|
+
"sourceIds",
|
|
187
|
+
"draft",
|
|
188
|
+
"visualIntent"
|
|
189
|
+
],
|
|
190
|
+
"properties": {
|
|
191
|
+
"artifactId": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
|
|
194
|
+
},
|
|
195
|
+
"artifactType": {
|
|
196
|
+
"enum": ["hub", "diagram", "explainer", "deck", "catalog"]
|
|
197
|
+
},
|
|
198
|
+
"profileId": {
|
|
199
|
+
"type": "string",
|
|
200
|
+
"pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
|
|
201
|
+
},
|
|
202
|
+
"required": { "type": "boolean" },
|
|
203
|
+
"sourceIds": {
|
|
204
|
+
"type": "array",
|
|
205
|
+
"items": {
|
|
206
|
+
"type": "string",
|
|
207
|
+
"pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
|
|
208
|
+
},
|
|
209
|
+
"minItems": 1,
|
|
210
|
+
"uniqueItems": true
|
|
211
|
+
},
|
|
212
|
+
"draft": { "type": "string", "minLength": 1 },
|
|
213
|
+
"visualIntent": { "type": "string", "minLength": 1 },
|
|
214
|
+
"justification": {
|
|
215
|
+
"type": "object",
|
|
216
|
+
"additionalProperties": false,
|
|
217
|
+
"required": ["kind", "sourceIds", "rationale"],
|
|
218
|
+
"properties": {
|
|
219
|
+
"kind": {
|
|
220
|
+
"enum": [
|
|
221
|
+
"status-change",
|
|
222
|
+
"rollout-complexity",
|
|
223
|
+
"source-backed-detail"
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
"sourceIds": {
|
|
227
|
+
"type": "array",
|
|
228
|
+
"items": {
|
|
229
|
+
"type": "string",
|
|
230
|
+
"pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
|
|
231
|
+
},
|
|
232
|
+
"minItems": 1,
|
|
233
|
+
"uniqueItems": true
|
|
234
|
+
},
|
|
235
|
+
"rationale": { "type": "string", "minLength": 1 }
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "explainer-kit.publish-receipt/v2",
|
|
4
|
+
"title": "PublishReceiptV2",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"provider",
|
|
10
|
+
"publishedAt",
|
|
11
|
+
"publicAccess",
|
|
12
|
+
"roots",
|
|
13
|
+
"sentinel",
|
|
14
|
+
"artifacts"
|
|
15
|
+
],
|
|
16
|
+
"properties": {
|
|
17
|
+
"schemaVersion": {
|
|
18
|
+
"const": "explainer-kit.publish-receipt/v2"
|
|
19
|
+
},
|
|
20
|
+
"provider": {
|
|
21
|
+
"const": "s3-static"
|
|
22
|
+
},
|
|
23
|
+
"publishedAt": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"format": "date-time"
|
|
26
|
+
},
|
|
27
|
+
"publicAccess": {
|
|
28
|
+
"enum": ["public", "protected"]
|
|
29
|
+
},
|
|
30
|
+
"roots": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"additionalProperties": false,
|
|
33
|
+
"required": ["s3Uri", "publicBaseUrl"],
|
|
34
|
+
"properties": {
|
|
35
|
+
"s3Uri": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"pattern": "^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9](?:/[^\\s/?#\\\\]+(?:/[^\\s/?#\\\\]+)*)?$"
|
|
38
|
+
},
|
|
39
|
+
"publicBaseUrl": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"pattern": "^https://[^\\s/?#@]+(?::[0-9]+)?(?:/[^\\s/?#\\\\]+(?:/[^\\s/?#\\\\]+)*)?$"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"sentinel": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": [
|
|
49
|
+
"relativePath",
|
|
50
|
+
"objectVerification",
|
|
51
|
+
"publicVerification",
|
|
52
|
+
"deleted"
|
|
53
|
+
],
|
|
54
|
+
"properties": {
|
|
55
|
+
"relativePath": {
|
|
56
|
+
"$ref": "#/$defs/safeRelativePath"
|
|
57
|
+
},
|
|
58
|
+
"objectVerification": {
|
|
59
|
+
"$ref": "#/$defs/objectVerification"
|
|
60
|
+
},
|
|
61
|
+
"publicVerification": {
|
|
62
|
+
"$ref": "#/$defs/publicVerification"
|
|
63
|
+
},
|
|
64
|
+
"deleted": {
|
|
65
|
+
"type": "boolean"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"artifacts": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"$ref": "#/$defs/artifact"
|
|
73
|
+
},
|
|
74
|
+
"uniqueItems": true
|
|
75
|
+
},
|
|
76
|
+
"publicRootPolicy": {
|
|
77
|
+
"description": "Present only when EXPLAINER_KIT_ALLOW_PRIVATE_PUBLIC_ROOT was set and the public root was in fact a non-public address, so a publication made with the anti-SSRF control disabled is distinguishable in durable evidence.",
|
|
78
|
+
"enum": ["private-allowed"]
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"$defs": {
|
|
82
|
+
"hash": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"pattern": "^sha256:[a-f0-9]{64}$"
|
|
85
|
+
},
|
|
86
|
+
"safeRelativePath": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"minLength": 1,
|
|
89
|
+
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+$"
|
|
90
|
+
},
|
|
91
|
+
"source": {
|
|
92
|
+
"oneOf": [
|
|
93
|
+
{
|
|
94
|
+
"type": "object",
|
|
95
|
+
"additionalProperties": false,
|
|
96
|
+
"required": ["kind", "artifactId"],
|
|
97
|
+
"properties": {
|
|
98
|
+
"kind": {
|
|
99
|
+
"const": "manifest"
|
|
100
|
+
},
|
|
101
|
+
"artifactId": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"minLength": 1
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"type": "object",
|
|
109
|
+
"additionalProperties": false,
|
|
110
|
+
"required": ["kind", "name"],
|
|
111
|
+
"properties": {
|
|
112
|
+
"kind": {
|
|
113
|
+
"const": "auxiliary"
|
|
114
|
+
},
|
|
115
|
+
"name": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"minLength": 1
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
"objectVerification": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"additionalProperties": false,
|
|
126
|
+
"required": ["status", "method", "hash"],
|
|
127
|
+
"properties": {
|
|
128
|
+
"status": {
|
|
129
|
+
"const": "verified"
|
|
130
|
+
},
|
|
131
|
+
"method": {
|
|
132
|
+
"enum": ["service-checksum", "authenticated-download"]
|
|
133
|
+
},
|
|
134
|
+
"hash": {
|
|
135
|
+
"$ref": "#/$defs/hash"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"publicVerification": {
|
|
140
|
+
"oneOf": [
|
|
141
|
+
{
|
|
142
|
+
"type": "object",
|
|
143
|
+
"additionalProperties": false,
|
|
144
|
+
"required": ["status", "httpStatus", "hash"],
|
|
145
|
+
"properties": {
|
|
146
|
+
"status": {
|
|
147
|
+
"const": "verified"
|
|
148
|
+
},
|
|
149
|
+
"httpStatus": {
|
|
150
|
+
"type": "integer",
|
|
151
|
+
"minimum": 200,
|
|
152
|
+
"maximum": 299
|
|
153
|
+
},
|
|
154
|
+
"hash": {
|
|
155
|
+
"$ref": "#/$defs/hash"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"type": "object",
|
|
161
|
+
"additionalProperties": false,
|
|
162
|
+
"required": ["status"],
|
|
163
|
+
"properties": {
|
|
164
|
+
"status": {
|
|
165
|
+
"const": "skipped-protected"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
},
|
|
171
|
+
"artifact": {
|
|
172
|
+
"type": "object",
|
|
173
|
+
"additionalProperties": false,
|
|
174
|
+
"required": [
|
|
175
|
+
"source",
|
|
176
|
+
"relativePath",
|
|
177
|
+
"hash",
|
|
178
|
+
"s3Uri",
|
|
179
|
+
"publicUrl",
|
|
180
|
+
"contentType",
|
|
181
|
+
"objectVerification",
|
|
182
|
+
"publicVerification"
|
|
183
|
+
],
|
|
184
|
+
"properties": {
|
|
185
|
+
"source": {
|
|
186
|
+
"$ref": "#/$defs/source"
|
|
187
|
+
},
|
|
188
|
+
"relativePath": {
|
|
189
|
+
"$ref": "#/$defs/safeRelativePath"
|
|
190
|
+
},
|
|
191
|
+
"hash": {
|
|
192
|
+
"$ref": "#/$defs/hash"
|
|
193
|
+
},
|
|
194
|
+
"s3Uri": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"pattern": "^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]/[^\\s?#\\\\]+$"
|
|
197
|
+
},
|
|
198
|
+
"publicUrl": {
|
|
199
|
+
"type": "string",
|
|
200
|
+
"pattern": "^https://[^\\s/?#@]+(?::[0-9]+)?/[^\\s?#\\\\]+$"
|
|
201
|
+
},
|
|
202
|
+
"contentType": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"minLength": 1
|
|
205
|
+
},
|
|
206
|
+
"objectVerification": {
|
|
207
|
+
"$ref": "#/$defs/objectVerification"
|
|
208
|
+
},
|
|
209
|
+
"publicVerification": {
|
|
210
|
+
"$ref": "#/$defs/publicVerification"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "explainer-kit.publish-request/v2",
|
|
4
|
+
"title": "S3StaticPublishRequestV2",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"provider",
|
|
10
|
+
"s3Uri",
|
|
11
|
+
"publicBaseUrl",
|
|
12
|
+
"awsRegion",
|
|
13
|
+
"publicAccess",
|
|
14
|
+
"siteRoot",
|
|
15
|
+
"manifestPath"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"schemaVersion": { "const": "explainer-kit.publish-request/v2" },
|
|
19
|
+
"provider": { "const": "s3-static" },
|
|
20
|
+
"s3Uri": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9](?:/[^\\s/?#\\\\]+(?:/[^\\s/?#\\\\]+)*)?/?$"
|
|
23
|
+
},
|
|
24
|
+
"publicBaseUrl": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^https://[^\\s/?#@]+(?::[0-9]+)?(?:/[^\\s/?#\\\\]+(?:/[^\\s/?#\\\\]+)*)?/?$"
|
|
27
|
+
},
|
|
28
|
+
"awsRegion": { "type": "string", "minLength": 1 },
|
|
29
|
+
"awsProfile": { "type": "string", "minLength": 1 },
|
|
30
|
+
"publicAccess": { "enum": ["public", "protected"] },
|
|
31
|
+
"siteRoot": { "type": "string", "minLength": 1 },
|
|
32
|
+
"manifestPath": { "type": "string", "minLength": 1 }
|
|
33
|
+
}
|
|
34
|
+
}
|