@kody-ade/kody-engine 0.4.370 → 0.4.372
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/dist/bin/kody.js +153 -238
- package/package.json +1 -1
- package/dist/capabilities/agent-creator/capability.md +0 -13
- package/dist/capabilities/agent-creator/profile.json +0 -7
- package/dist/capabilities/agent-factory/capability.md +0 -10
- package/dist/capabilities/agent-factory/profile.json +0 -6
- package/dist/capabilities/capability-creator/capability.md +0 -13
- package/dist/capabilities/capability-creator/profile.json +0 -7
- package/dist/capabilities/goal-creator/capability.md +0 -13
- package/dist/capabilities/goal-creator/profile.json +0 -7
- package/dist/capabilities/loop-creator/capability.md +0 -13
- package/dist/capabilities/loop-creator/profile.json +0 -7
- package/dist/capabilities/workflow-creator/capability.md +0 -13
- package/dist/capabilities/workflow-creator/profile.json +0 -7
- package/dist/implementations/agent-creator/profile.json +0 -65
- package/dist/implementations/agent-creator/prompt.md +0 -86
- package/dist/implementations/agent-factory/profile.json +0 -65
- package/dist/implementations/agent-factory/prompt.md +0 -142
- package/dist/implementations/capability-creator/profile.json +0 -65
- package/dist/implementations/capability-creator/prompt.md +0 -120
- package/dist/implementations/goal-creator/profile.json +0 -65
- package/dist/implementations/goal-creator/prompt.md +0 -91
- package/dist/implementations/loop-creator/profile.json +0 -65
- package/dist/implementations/loop-creator/prompt.md +0 -86
- package/dist/implementations/workflow-creator/profile.json +0 -65
- package/dist/implementations/workflow-creator/prompt.md +0 -109
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "goal-creator",
|
|
3
|
-
"action": "goal-creator",
|
|
4
|
-
"describe": "Create one Kody goal outcome model from a focused request.",
|
|
5
|
-
"role": "primitive",
|
|
6
|
-
"kind": "oneshot",
|
|
7
|
-
"inputs": [
|
|
8
|
-
{
|
|
9
|
-
"name": "issue",
|
|
10
|
-
"flag": "--issue",
|
|
11
|
-
"type": "int",
|
|
12
|
-
"required": true,
|
|
13
|
-
"describe": "GitHub issue number containing the focused model creation request."
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
"claudeCode": {
|
|
17
|
-
"model": "inherit",
|
|
18
|
-
"permissionMode": "default",
|
|
19
|
-
"maxTurns": null,
|
|
20
|
-
"maxTurnTimeoutSec": 1200,
|
|
21
|
-
"systemPromptAppend": null,
|
|
22
|
-
"cacheable": true,
|
|
23
|
-
"enableVerifyTool": false,
|
|
24
|
-
"tools": [
|
|
25
|
-
"Read",
|
|
26
|
-
"Grep",
|
|
27
|
-
"Glob"
|
|
28
|
-
],
|
|
29
|
-
"hooks": [],
|
|
30
|
-
"skills": [],
|
|
31
|
-
"commands": [],
|
|
32
|
-
"subagents": [],
|
|
33
|
-
"plugins": [],
|
|
34
|
-
"mcpServers": []
|
|
35
|
-
},
|
|
36
|
-
"cliTools": [],
|
|
37
|
-
"scripts": {
|
|
38
|
-
"preflight": [
|
|
39
|
-
{
|
|
40
|
-
"script": "loadIssueContext"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"script": "composePrompt"
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
"postflight": [
|
|
47
|
-
{
|
|
48
|
-
"script": "parseAgentResult"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"script": "validateAgentFactoryBundle"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"script": "openAgentFactoryStatePr"
|
|
55
|
-
}
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
"output": {
|
|
59
|
-
"actionTypes": [
|
|
60
|
-
"GOAL_CREATOR_COMPLETED",
|
|
61
|
-
"GOAL_CREATOR_FAILED",
|
|
62
|
-
"AGENT_NOT_RUN"
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
You are Kody's goal-creator. Create exactly one Goal model.
|
|
2
|
-
|
|
3
|
-
# Target
|
|
4
|
-
|
|
5
|
-
- Consumer repo: {{repoOwner}}/{{repoName}}
|
|
6
|
-
- Default branch: {{defaultBranch}}
|
|
7
|
-
- Issue #{{issue.number}}: {{issue.title}}
|
|
8
|
-
|
|
9
|
-
# Authoritative model docs
|
|
10
|
-
|
|
11
|
-
Read and follow these docs before producing the model:
|
|
12
|
-
|
|
13
|
-
- `docs/goals.md`
|
|
14
|
-
- `docs/jobs-model.md`
|
|
15
|
-
- `docs/capabilities.md`
|
|
16
|
-
|
|
17
|
-
These docs are contract references. If the consumer repo does not contain them or `Read` fails, continue from the model boundary below and still list the referenced doc paths in `model.docsUsed`.
|
|
18
|
-
|
|
19
|
-
# Operator Request
|
|
20
|
-
|
|
21
|
-
{{issue.body}}
|
|
22
|
-
|
|
23
|
-
# Recent comments (most recent first, truncated)
|
|
24
|
-
|
|
25
|
-
{{issue.commentsFormatted}}
|
|
26
|
-
|
|
27
|
-
# Model Boundary
|
|
28
|
-
|
|
29
|
-
A Goal is the agency's durable **what**.
|
|
30
|
-
|
|
31
|
-
Own:
|
|
32
|
-
|
|
33
|
-
- outcome
|
|
34
|
-
- ordered evidence
|
|
35
|
-
- allowed capabilities
|
|
36
|
-
- route from evidence to capability
|
|
37
|
-
- facts
|
|
38
|
-
- blockers
|
|
39
|
-
- completion rules
|
|
40
|
-
|
|
41
|
-
Do not own:
|
|
42
|
-
|
|
43
|
-
- capability implementation details
|
|
44
|
-
- agent identity
|
|
45
|
-
- loop cadence
|
|
46
|
-
- workflow step internals
|
|
47
|
-
- consumer repo product history
|
|
48
|
-
|
|
49
|
-
# Task
|
|
50
|
-
|
|
51
|
-
Create the smallest review-ready managed Goal model that satisfies the requested outcome.
|
|
52
|
-
|
|
53
|
-
Do not call Bash, Write, Edit, mkdir, cat, tee, printf, python, node, git, gh, or any external command. Your only mutation channel is `PR_SUMMARY.files`; the deterministic postflight opens the state-repo review PR from that JSON.
|
|
54
|
-
|
|
55
|
-
Use current storage names in file paths. Put generated templates under:
|
|
56
|
-
|
|
57
|
-
`goals/templates/<slug>/state.json`
|
|
58
|
-
|
|
59
|
-
Do not create live runtime instances. Runtime instances belong in the configured state repo after activation.
|
|
60
|
-
|
|
61
|
-
# Final Output Contract
|
|
62
|
-
|
|
63
|
-
If the request is too ambiguous to produce one review-ready Goal model, output one line:
|
|
64
|
-
|
|
65
|
-
FAILED: <specific missing decision>
|
|
66
|
-
|
|
67
|
-
Otherwise output exactly:
|
|
68
|
-
|
|
69
|
-
DONE
|
|
70
|
-
PR_SUMMARY:
|
|
71
|
-
{
|
|
72
|
-
"title": "short title",
|
|
73
|
-
"summary": "human explanation and assumptions",
|
|
74
|
-
"model": {
|
|
75
|
-
"kind": "goal",
|
|
76
|
-
"slug": "goal-slug",
|
|
77
|
-
"docsUsed": ["docs/goals.md", "docs/jobs-model.md", "docs/capabilities.md"],
|
|
78
|
-
"outcome": "durable outcome",
|
|
79
|
-
"evidence": [],
|
|
80
|
-
"capabilities": [],
|
|
81
|
-
"doesNotOwn": ["capability implementation", "agent identity", "loop cadence"]
|
|
82
|
-
},
|
|
83
|
-
"files": [
|
|
84
|
-
{
|
|
85
|
-
"path": "goals/templates/example/state.json",
|
|
86
|
-
"content": "{\n \"version\": 1\n}\n"
|
|
87
|
-
}
|
|
88
|
-
]
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
The `PR_SUMMARY` value must be valid JSON. Do not wrap it in a markdown code fence.
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "loop-creator",
|
|
3
|
-
"action": "loop-creator",
|
|
4
|
-
"describe": "Create one Kody agent loop wakeup model from a focused request.",
|
|
5
|
-
"role": "primitive",
|
|
6
|
-
"kind": "oneshot",
|
|
7
|
-
"inputs": [
|
|
8
|
-
{
|
|
9
|
-
"name": "issue",
|
|
10
|
-
"flag": "--issue",
|
|
11
|
-
"type": "int",
|
|
12
|
-
"required": true,
|
|
13
|
-
"describe": "GitHub issue number containing the focused model creation request."
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
"claudeCode": {
|
|
17
|
-
"model": "inherit",
|
|
18
|
-
"permissionMode": "default",
|
|
19
|
-
"maxTurns": null,
|
|
20
|
-
"maxTurnTimeoutSec": 1200,
|
|
21
|
-
"systemPromptAppend": null,
|
|
22
|
-
"cacheable": true,
|
|
23
|
-
"enableVerifyTool": false,
|
|
24
|
-
"tools": [
|
|
25
|
-
"Read",
|
|
26
|
-
"Grep",
|
|
27
|
-
"Glob"
|
|
28
|
-
],
|
|
29
|
-
"hooks": [],
|
|
30
|
-
"skills": [],
|
|
31
|
-
"commands": [],
|
|
32
|
-
"subagents": [],
|
|
33
|
-
"plugins": [],
|
|
34
|
-
"mcpServers": []
|
|
35
|
-
},
|
|
36
|
-
"cliTools": [],
|
|
37
|
-
"scripts": {
|
|
38
|
-
"preflight": [
|
|
39
|
-
{
|
|
40
|
-
"script": "loadIssueContext"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"script": "composePrompt"
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
"postflight": [
|
|
47
|
-
{
|
|
48
|
-
"script": "parseAgentResult"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"script": "validateAgentFactoryBundle"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"script": "openAgentFactoryStatePr"
|
|
55
|
-
}
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
"output": {
|
|
59
|
-
"actionTypes": [
|
|
60
|
-
"LOOP_CREATOR_COMPLETED",
|
|
61
|
-
"LOOP_CREATOR_FAILED",
|
|
62
|
-
"AGENT_NOT_RUN"
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
You are Kody's loop-creator. Create exactly one AgentLoop model.
|
|
2
|
-
|
|
3
|
-
# Target
|
|
4
|
-
|
|
5
|
-
- Consumer repo: {{repoOwner}}/{{repoName}}
|
|
6
|
-
- Default branch: {{defaultBranch}}
|
|
7
|
-
- Issue #{{issue.number}}: {{issue.title}}
|
|
8
|
-
|
|
9
|
-
# Authoritative model docs
|
|
10
|
-
|
|
11
|
-
Read and follow these docs before producing the model:
|
|
12
|
-
|
|
13
|
-
- `docs/jobs-model.md`
|
|
14
|
-
- `docs/engine-company.md`
|
|
15
|
-
- `docs/ledgers.md`
|
|
16
|
-
|
|
17
|
-
These docs are contract references. If the consumer repo does not contain them or `Read` fails, continue from the model boundary below and still list the referenced doc paths in `model.docsUsed`.
|
|
18
|
-
|
|
19
|
-
# Operator Request
|
|
20
|
-
|
|
21
|
-
{{issue.body}}
|
|
22
|
-
|
|
23
|
-
# Recent comments (most recent first, truncated)
|
|
24
|
-
|
|
25
|
-
{{issue.commentsFormatted}}
|
|
26
|
-
|
|
27
|
-
# Model Boundary
|
|
28
|
-
|
|
29
|
-
An AgentLoop is the agency's **when**.
|
|
30
|
-
|
|
31
|
-
Own:
|
|
32
|
-
|
|
33
|
-
- cadence
|
|
34
|
-
- wakeup policy
|
|
35
|
-
- target to wake: goal, workflow, or capability
|
|
36
|
-
- operational cursor or dedup ledger when needed
|
|
37
|
-
|
|
38
|
-
Do not own:
|
|
39
|
-
|
|
40
|
-
- business completion
|
|
41
|
-
- goal evidence decisions
|
|
42
|
-
- capability implementation
|
|
43
|
-
- workflow step order
|
|
44
|
-
- agent identity
|
|
45
|
-
|
|
46
|
-
# Task
|
|
47
|
-
|
|
48
|
-
Create the smallest review-ready AgentLoop model that satisfies the requested wakeup behavior.
|
|
49
|
-
|
|
50
|
-
Do not call Bash, Write, Edit, mkdir, cat, tee, printf, python, node, git, gh, or any external command. Your only mutation channel is `PR_SUMMARY.files`; the deterministic postflight opens the state-repo review PR from that JSON.
|
|
51
|
-
|
|
52
|
-
Use current storage names in file paths. Put generated loop state under the current loop/state model used by the docs. If the request needs a shared template rather than a live runtime state, make that explicit in the summary.
|
|
53
|
-
|
|
54
|
-
# Final Output Contract
|
|
55
|
-
|
|
56
|
-
If the request is too ambiguous to produce one review-ready AgentLoop model, output one line:
|
|
57
|
-
|
|
58
|
-
FAILED: <specific missing decision>
|
|
59
|
-
|
|
60
|
-
Otherwise output exactly:
|
|
61
|
-
|
|
62
|
-
DONE
|
|
63
|
-
PR_SUMMARY:
|
|
64
|
-
{
|
|
65
|
-
"title": "short title",
|
|
66
|
-
"summary": "human explanation and assumptions",
|
|
67
|
-
"model": {
|
|
68
|
-
"kind": "agentLoop",
|
|
69
|
-
"slug": "loop-slug",
|
|
70
|
-
"docsUsed": ["docs/jobs-model.md", "docs/engine-company.md", "docs/ledgers.md"],
|
|
71
|
-
"cadence": "manual|1h|1d|7d|30d",
|
|
72
|
-
"wakeTarget": {
|
|
73
|
-
"type": "goal|workflow|capability",
|
|
74
|
-
"slug": "target-slug"
|
|
75
|
-
},
|
|
76
|
-
"doesNotOwn": ["business completion", "goal evidence", "capability implementation"]
|
|
77
|
-
},
|
|
78
|
-
"files": [
|
|
79
|
-
{
|
|
80
|
-
"path": "goals/templates/example-loop/state.json",
|
|
81
|
-
"content": "{\n \"state\": \"active\"\n}\n"
|
|
82
|
-
}
|
|
83
|
-
]
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
The `PR_SUMMARY` value must be valid JSON. Do not wrap it in a markdown code fence.
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "workflow-creator",
|
|
3
|
-
"action": "workflow-creator",
|
|
4
|
-
"describe": "Create one Kody workflow ordered-run model from a focused request.",
|
|
5
|
-
"role": "primitive",
|
|
6
|
-
"kind": "oneshot",
|
|
7
|
-
"inputs": [
|
|
8
|
-
{
|
|
9
|
-
"name": "issue",
|
|
10
|
-
"flag": "--issue",
|
|
11
|
-
"type": "int",
|
|
12
|
-
"required": true,
|
|
13
|
-
"describe": "GitHub issue number containing the focused model creation request."
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
"claudeCode": {
|
|
17
|
-
"model": "inherit",
|
|
18
|
-
"permissionMode": "default",
|
|
19
|
-
"maxTurns": null,
|
|
20
|
-
"maxTurnTimeoutSec": 1200,
|
|
21
|
-
"systemPromptAppend": null,
|
|
22
|
-
"cacheable": true,
|
|
23
|
-
"enableVerifyTool": false,
|
|
24
|
-
"tools": [
|
|
25
|
-
"Read",
|
|
26
|
-
"Grep",
|
|
27
|
-
"Glob"
|
|
28
|
-
],
|
|
29
|
-
"hooks": [],
|
|
30
|
-
"skills": [],
|
|
31
|
-
"commands": [],
|
|
32
|
-
"subagents": [],
|
|
33
|
-
"plugins": [],
|
|
34
|
-
"mcpServers": []
|
|
35
|
-
},
|
|
36
|
-
"cliTools": [],
|
|
37
|
-
"scripts": {
|
|
38
|
-
"preflight": [
|
|
39
|
-
{
|
|
40
|
-
"script": "loadIssueContext"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"script": "composePrompt"
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
"postflight": [
|
|
47
|
-
{
|
|
48
|
-
"script": "parseAgentResult"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"script": "validateAgentFactoryBundle"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"script": "openAgentFactoryStatePr"
|
|
55
|
-
}
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
"output": {
|
|
59
|
-
"actionTypes": [
|
|
60
|
-
"WORKFLOW_CREATOR_COMPLETED",
|
|
61
|
-
"WORKFLOW_CREATOR_FAILED",
|
|
62
|
-
"AGENT_NOT_RUN"
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
You are Kody's workflow-creator. Create exactly one Workflow model.
|
|
2
|
-
|
|
3
|
-
# Target
|
|
4
|
-
|
|
5
|
-
- Consumer repo: {{repoOwner}}/{{repoName}}
|
|
6
|
-
- Default branch: {{defaultBranch}}
|
|
7
|
-
- Issue #{{issue.number}}: {{issue.title}}
|
|
8
|
-
|
|
9
|
-
# Authoritative model docs
|
|
10
|
-
|
|
11
|
-
Read and follow these docs before producing the model:
|
|
12
|
-
|
|
13
|
-
- `docs/jobs-model.md`
|
|
14
|
-
- `docs/capabilities.md`
|
|
15
|
-
|
|
16
|
-
These docs are contract references. If the consumer repo does not contain them or `Read` fails, continue from the model boundary below and still list the referenced doc paths in `model.docsUsed`.
|
|
17
|
-
|
|
18
|
-
# Operator Request
|
|
19
|
-
|
|
20
|
-
{{issue.body}}
|
|
21
|
-
|
|
22
|
-
# Recent comments (most recent first, truncated)
|
|
23
|
-
|
|
24
|
-
{{issue.commentsFormatted}}
|
|
25
|
-
|
|
26
|
-
# Model Boundary
|
|
27
|
-
|
|
28
|
-
A Workflow is the agency's composed **how for one run**.
|
|
29
|
-
|
|
30
|
-
Own:
|
|
31
|
-
|
|
32
|
-
- ordered capability steps
|
|
33
|
-
- step reasons
|
|
34
|
-
- shared step outputs for that run
|
|
35
|
-
- final run output
|
|
36
|
-
|
|
37
|
-
Do not own:
|
|
38
|
-
|
|
39
|
-
- long-term progress
|
|
40
|
-
- schedule/cadence
|
|
41
|
-
- goal completion
|
|
42
|
-
- agent identity
|
|
43
|
-
- capability implementation internals
|
|
44
|
-
|
|
45
|
-
# Task
|
|
46
|
-
|
|
47
|
-
Create the smallest review-ready Workflow model that satisfies the requested ordered run behavior.
|
|
48
|
-
|
|
49
|
-
Do not call Bash, Write, Edit, mkdir, cat, tee, printf, python, node, git, gh, or any external command. Your only mutation channel is `PR_SUMMARY.files`; the deterministic postflight opens the state-repo review PR from that JSON.
|
|
50
|
-
|
|
51
|
-
Prefer placing workflow steps on the public capability that owns the composed action. Do not create a workflow when a single capability is enough.
|
|
52
|
-
|
|
53
|
-
Put the workflow contract in `capabilities/<slug>/profile.json`. Prefer a `workflow` object with `steps`; top-level `steps` are only for existing profiles that already use that shape.
|
|
54
|
-
|
|
55
|
-
The workflow profile is stored as a capability profile because workflows are composed capability runs. The generated file path must use exactly the same slug as `model.slug`.
|
|
56
|
-
|
|
57
|
-
Minimum profile shape:
|
|
58
|
-
|
|
59
|
-
```json
|
|
60
|
-
{
|
|
61
|
-
"slug": "<same slug as model.slug>",
|
|
62
|
-
"name": "Display Name",
|
|
63
|
-
"workflow": {
|
|
64
|
-
"steps": [
|
|
65
|
-
{
|
|
66
|
-
"capability": "capability-slug",
|
|
67
|
-
"reason": "why this step exists"
|
|
68
|
-
}
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Do not place workflow files under `workflows/`. Do not use a different profile slug than `model.slug`.
|
|
75
|
-
|
|
76
|
-
# Final Output Contract
|
|
77
|
-
|
|
78
|
-
If the request is too ambiguous to produce one review-ready Workflow model, output one line:
|
|
79
|
-
|
|
80
|
-
FAILED: <specific missing decision>
|
|
81
|
-
|
|
82
|
-
Otherwise output exactly:
|
|
83
|
-
|
|
84
|
-
DONE
|
|
85
|
-
PR_SUMMARY:
|
|
86
|
-
{
|
|
87
|
-
"title": "short title",
|
|
88
|
-
"summary": "human explanation and assumptions",
|
|
89
|
-
"model": {
|
|
90
|
-
"kind": "workflow",
|
|
91
|
-
"slug": "workflow-slug",
|
|
92
|
-
"docsUsed": ["docs/jobs-model.md", "docs/capabilities.md"],
|
|
93
|
-
"steps": [
|
|
94
|
-
{
|
|
95
|
-
"capability": "capability-slug",
|
|
96
|
-
"reason": "why this step exists"
|
|
97
|
-
}
|
|
98
|
-
],
|
|
99
|
-
"doesNotOwn": ["long-term progress", "schedule", "goal completion", "agent identity"]
|
|
100
|
-
},
|
|
101
|
-
"files": [
|
|
102
|
-
{
|
|
103
|
-
"path": "capabilities/example/profile.json",
|
|
104
|
-
"content": "{\n \"slug\": \"example\",\n \"name\": \"Example Workflow\",\n \"workflow\": { \"steps\": [{ \"capability\": \"example-capability\", \"reason\": \"run the composed capability\" }] }\n}\n"
|
|
105
|
-
}
|
|
106
|
-
]
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
The `PR_SUMMARY` value must be valid JSON. Do not wrap it in a markdown code fence.
|