@plurnk/plurnk-contracts 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/SPEC.md +227 -63
  2. package/dist/conformance/agui-v1.json +541 -0
  3. package/dist/plurnk.gemma.gbnf +26 -22
  4. package/dist/plurnk.qwen.gbnf +26 -22
  5. package/dist/schema/A2aAgentDefinition.json +44 -0
  6. package/dist/schema/AcpPlan.json +63 -0
  7. package/dist/schema/AguiClientConformance.json +74 -0
  8. package/dist/schema/AguiConformanceKit.json +111 -0
  9. package/dist/schema/AguiDiscovery.json +70 -0
  10. package/dist/schema/ClientDisplayCapabilities.json +1 -1
  11. package/dist/schema/ClientInteractionProjection.json +2 -2
  12. package/dist/schema/ClientInteractionRequest.json +1 -1
  13. package/dist/schema/ClientInteractionResolution.json +1 -1
  14. package/dist/schema/ClientStatement.json +16 -11
  15. package/dist/schema/EntryReadResult.json +2 -2
  16. package/dist/schema/FunctionalityCandidate.json +33 -0
  17. package/dist/schema/FunctionalityDefinitionState.json +33 -0
  18. package/dist/schema/FunctionalityDiscoverQuery.json +16 -0
  19. package/dist/schema/FunctionalityDiscoverResult.json +15 -0
  20. package/dist/schema/FunctionalityListResult.json +15 -0
  21. package/dist/schema/FunctionalityMutationResult.json +16 -0
  22. package/dist/schema/LineMarker.json +1 -1
  23. package/dist/schema/LoopFlags.json +1 -1
  24. package/dist/schema/MatcherBody.json +1 -1
  25. package/dist/schema/McpConfigurationOverlay.json +25 -0
  26. package/dist/schema/McpServerDefinition.json +3 -2
  27. package/dist/schema/McpServerOptions.json +36 -0
  28. package/dist/schema/ModelCatalogPage.json +122 -0
  29. package/dist/schema/ModelCatalogQuery.json +32 -0
  30. package/dist/schema/ModelReadiness.json +47 -0
  31. package/dist/schema/ModelRoute.json +23 -0
  32. package/dist/schema/Notice.json +1 -1
  33. package/dist/schema/OperationResult.json +3 -3
  34. package/dist/schema/ParsedPath.json +1 -1
  35. package/dist/schema/Plan.json +52 -0
  36. package/dist/schema/PlurnkStatement.json +57 -40
  37. package/dist/schema/Position.json +1 -1
  38. package/dist/schema/ProblemDetails.json +1 -1
  39. package/dist/schema/ProposalDisposition.json +1 -1
  40. package/dist/schema/ProposalProjection.json +5 -6
  41. package/dist/schema/ProviderAccounting.json +3 -3
  42. package/dist/schema/ProviderCost.json +1 -1
  43. package/dist/schema/ProviderRequestAccounting.json +3 -3
  44. package/dist/schema/ProviderUsage.json +1 -1
  45. package/dist/schema/RangeExtent.json +1 -1
  46. package/dist/schema/ReasoningPolicy.json +7 -0
  47. package/dist/schema/ResourceSelection.json +3 -3
  48. package/dist/schema/SendBody.json +1 -1
  49. package/dist/schema/SkillDefinition.json +26 -0
  50. package/dist/schema/TextLineMarker.json +1 -1
  51. package/dist/schema/TextRegion.json +1 -1
  52. package/dist/src/AcpPlanValue.d.ts +7 -0
  53. package/dist/src/AcpPlanValue.d.ts.map +1 -0
  54. package/dist/src/AcpPlanValue.js +32 -0
  55. package/dist/src/AcpPlanValue.js.map +1 -0
  56. package/dist/src/AguiConformance.d.ts +11 -0
  57. package/dist/src/AguiConformance.d.ts.map +1 -0
  58. package/dist/src/AguiConformance.js +16 -0
  59. package/dist/src/AguiConformance.js.map +1 -0
  60. package/dist/src/ApplicationPort.d.ts +271 -0
  61. package/dist/src/ApplicationPort.d.ts.map +1 -0
  62. package/dist/src/ApplicationPort.js +2 -0
  63. package/dist/src/ApplicationPort.js.map +1 -0
  64. package/dist/src/AstBuilder.d.ts.map +1 -1
  65. package/dist/src/AstBuilder.js +44 -22
  66. package/dist/src/AstBuilder.js.map +1 -1
  67. package/dist/src/PlanValue.d.ts +10 -0
  68. package/dist/src/PlanValue.d.ts.map +1 -0
  69. package/dist/src/PlanValue.js +58 -0
  70. package/dist/src/PlanValue.js.map +1 -0
  71. package/dist/src/PlurnkErrorStrategy.d.ts.map +1 -1
  72. package/dist/src/PlurnkErrorStrategy.js +33 -19
  73. package/dist/src/PlurnkErrorStrategy.js.map +1 -1
  74. package/dist/src/PlurnkParser.js +3 -3
  75. package/dist/src/PlurnkParser.js.map +1 -1
  76. package/dist/src/Problems.js +1 -1
  77. package/dist/src/Validator.d.ts +68 -1
  78. package/dist/src/Validator.d.ts.map +1 -1
  79. package/dist/src/Validator.js +373 -0
  80. package/dist/src/Validator.js.map +1 -1
  81. package/dist/src/generated/plurnkLexer.d.ts +30 -28
  82. package/dist/src/generated/plurnkLexer.d.ts.map +1 -1
  83. package/dist/src/generated/plurnkLexer.js +398 -381
  84. package/dist/src/generated/plurnkLexer.js.map +1 -1
  85. package/dist/src/generated/plurnkParser.d.ts +56 -39
  86. package/dist/src/generated/plurnkParser.d.ts.map +1 -1
  87. package/dist/src/generated/plurnkParser.js +644 -450
  88. package/dist/src/generated/plurnkParser.js.map +1 -1
  89. package/dist/src/generated/plurnkParserVisitor.d.ts +7 -7
  90. package/dist/src/generated/plurnkParserVisitor.d.ts.map +1 -1
  91. package/dist/src/generated/plurnkParserVisitor.js +6 -6
  92. package/dist/src/generated/plurnkParserVisitor.js.map +1 -1
  93. package/dist/src/index.d.ts +7 -2
  94. package/dist/src/index.d.ts.map +1 -1
  95. package/dist/src/index.js +5 -2
  96. package/dist/src/index.js.map +1 -1
  97. package/dist/src/types.d.ts +2 -1
  98. package/dist/src/types.d.ts.map +1 -1
  99. package/dist/src/types.generated.d.ts +430 -21
  100. package/dist/src/types.generated.d.ts.map +1 -1
  101. package/dist/src/types.js +4 -0
  102. package/dist/src/types.js.map +1 -1
  103. package/package.json +7 -3
  104. package/plurnk.md +67 -78
@@ -45,29 +45,32 @@ section-body-b40 ::= ("#" section-body-b1 | [ PLANFDRETCOYMVSXBWK] section-body-
45
45
  section-body-b41 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | "L" section-body-b42 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
46
46
  section-body-b42 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
47
47
  section-body-ne ::= "#" section-body-b1 | [ PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0
48
+ annotation-body-b0 ::= ("-" annotation-body-b1 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
49
+ annotation-body-b1 ::= ("-" annotation-body-b2 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
50
+ annotation-body-b2 ::= ("-" annotation-body-b2 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
51
+ annotation-body-ne ::= "-" annotation-body-b1 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0
48
52
  pattern-body-ne ::= [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:#] [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r]*
49
53
  log-selection ::= (curation-tags-slot log-target-slot? | log-target-slot)?
50
- plan ::= "# PLAN0" "\n" section-body-ne "\n\n"
51
- find ::= "## FIND0" add-tags-slot? target-slot line-slot? "\n\n" | "## FIND0" add-tags-slot? target-slot line-slot? "\n" pattern-body-ne "\n\n"
52
- read ::= "## READ0" add-tags-slot? target-slot text-line-slot? "\n\n" | "## READ0" add-tags-slot? target-slot text-line-slot? "\n" pattern-body-ne "\n\n"
53
- edit ::= "## EDIT0" add-tags-slot? target-slot text-line-slot? "\n\n" | "## EDIT0" add-tags-slot? target-slot text-line-slot? "\n" section-body-ne "\n\n"
54
- copy ::= "## COPY0" add-tags-slot? target-slot text-line-slot? "\n" section-body-ne "\n\n"
55
- move ::= "## MOVE0" add-tags-slot? target-slot text-line-slot? "\n" section-body-ne "\n\n"
56
- open ::= "## OPEN0" log-selection "\n\n" | "## OPEN0" log-selection "\n" pattern-body-ne "\n\n"
57
- fold ::= "## FOLD0" log-selection "\n\n" | "## FOLD0" log-selection "\n" pattern-body-ne "\n\n"
58
- exec ::= "## EXEC0" exec-slot? target-slot? line-slot? "\n\n" | "## EXEC0" exec-slot? target-slot? line-slot? "\n" section-body-ne "\n\n"
59
- bare ::= "## BARE0" add-tags-slot? "\n" section-body-ne "\n\n"
60
- work ::= "## WORK0" branch-slot? target-slot "\n" section-body-ne "\n\n"
61
- fork ::= "## FORK0" branch-slot? target-slot "\n" section-body-ne "\n\n"
62
- kill ::= "## KILL0" kill-slot? target-slot "\n\n"
63
- send-mid ::= "## SEND0" status-mid-slot target-slot? "\n\n" | "## SEND0" status-mid-slot target-slot? "\n" section-body-ne "\n\n" | "## SEND0" target-slot? "\n\n" | "## SEND0" target-slot? "\n" section-body-ne "\n\n"
64
- send-102 ::= "## SEND0 [102]" target-slot? "\n" section-body-ne
65
- send-200 ::= "## SEND0 [200]" target-slot? "\n" section-body-ne
66
- send-202 ::= "## SEND0 [202]" target-slot? park-slot? "\n" section-body-ne
67
- send-300 ::= "## SEND0 [300]" target-slot? "\n" section-body-ne
68
- send-499 ::= "## SEND0 [499]" target-slot? "\n" section-body-ne
69
- send-final-any ::= send-102 | send-200 | send-202 | send-300 | send-499
70
- send-final-first ::= send-200 | send-202 | send-300 | send-499
54
+ plan ::= "# PLAN0" annotation-slot? "\n" section-body-ne "\n"
55
+ find ::= "## FIND0" add-tags-slot? target-slot line-slot? annotation-slot? "\n" | "## FIND0" add-tags-slot? target-slot line-slot? annotation-slot? "\n" pattern-body-ne "\n"
56
+ read ::= "## READ0" add-tags-slot? target-slot text-line-slot? annotation-slot? "\n" | "## READ0" add-tags-slot? target-slot text-line-slot? annotation-slot? "\n" pattern-body-ne "\n"
57
+ edit ::= "## EDIT0" add-tags-slot? target-slot text-line-slot? annotation-slot? "\n" | "## EDIT0" add-tags-slot? target-slot text-line-slot? annotation-slot? "\n" section-body-ne "\n"
58
+ copy ::= "## COPY0" add-tags-slot? target-slot text-line-slot? annotation-slot? "\n" section-body-ne "\n"
59
+ move ::= "## MOVE0" add-tags-slot? target-slot text-line-slot? annotation-slot? "\n" section-body-ne "\n"
60
+ open ::= "## OPEN0" log-selection text-line-slot? annotation-slot? "\n" | "## OPEN0" log-selection text-line-slot? annotation-slot? "\n" pattern-body-ne "\n"
61
+ fold ::= "## FOLD0" log-selection text-line-slot? annotation-slot? "\n" | "## FOLD0" log-selection text-line-slot? annotation-slot? "\n" pattern-body-ne "\n"
62
+ exec ::= "## EXEC0" exec-slot? target-slot? line-slot? annotation-slot? "\n" | "## EXEC0" exec-slot? target-slot? line-slot? annotation-slot? "\n" section-body-ne "\n"
63
+ bare ::= "## BARE0" add-tags-slot? annotation-slot? "\n" section-body-ne "\n"
64
+ work ::= "## WORK0" branch-slot? target-slot annotation-slot? "\n" section-body-ne "\n"
65
+ fork ::= "## FORK0" branch-slot? target-slot annotation-slot? "\n" section-body-ne "\n"
66
+ kill ::= "## KILL0" kill-slot? target-slot annotation-slot? "\n"
67
+ send-mid ::= "## SEND0" status-mid-slot target-slot? annotation-slot? "\n" | "## SEND0" status-mid-slot target-slot? annotation-slot? "\n" section-body-ne "\n" | "## SEND0" target-slot? annotation-slot? "\n" | "## SEND0" target-slot? annotation-slot? "\n" section-body-ne "\n"
68
+ send-102 ::= "## SEND0 [102]" target-slot? annotation-slot? "\n" section-body-ne
69
+ send-200 ::= "## SEND0 [200]" target-slot? annotation-slot? "\n" section-body-ne
70
+ send-202 ::= "## SEND0 [202]" target-slot? park-slot? annotation-slot? "\n" section-body-ne
71
+ send-499 ::= "## SEND0 [499]" target-slot? annotation-slot? "\n" section-body-ne
72
+ send-final-any ::= send-102 | send-200 | send-202 | send-499
73
+ send-final-first ::= send-200 | send-202 | send-499
71
74
  op-statement ::= find | read | edit | copy | move | open | fold | exec | bare | work | fork | kill
72
75
  tail-0 ::= send-mid tail-1 | op-statement tail-1 | send-final-first
73
76
  tail-1 ::= send-mid tail-2 | op-statement tail-2 | send-final-any
@@ -115,10 +118,11 @@ branch-slot ::= " " branch
115
118
  kill-slot ::= " " kill-sig
116
119
  status-mid-slot ::= " [" status-mid "]"
117
120
  park-slot ::= " " park
121
+ annotation-slot ::= " <!-- " annotation-body-ne " -->"
118
122
  status-mid ::= [05-9] [0-9] [0-9] | "1" status-mid-1 | "2" status-mid-2 | "3" status-mid-3 | "4" status-mid-4
119
123
  status-mid-1 ::= "0" [0-13-9] | [1-9] [0-9]
120
124
  status-mid-2 ::= "0" [13-9] | [1-9] [0-9]
121
- status-mid-3 ::= "0" [1-9] | [1-9] [0-9]
125
+ status-mid-3 ::= "0" [0-9] | [1-9] [0-9]
122
126
  status-mid-4 ::= "9" [0-8] | [0-8] [0-9]
123
127
  add-tags ::= "[" add-tag add-tag-rest* "]"
124
128
  curation-tags ::= "[" curation-term curation-term-rest* "]"
@@ -0,0 +1,44 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.plurnk.xyz/v0/A2aAgentDefinition.json",
4
+ "title": "A2aAgentDefinition",
5
+ "description": "One outbound A2A agent as the Worker Functionality coordinator persists it: the local alias, the remote base URL whose standard Agent Card is authoritative, and optional local connection facts. Secrets stay symbolic environment references.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["name", "url"],
9
+ "properties": {
10
+ "name": {
11
+ "description": "The local alias: the `a2a://<name>` authority.",
12
+ "type": "string",
13
+ "pattern": "^[a-z][a-z0-9-]*$"
14
+ },
15
+ "url": {
16
+ "description": "The remote agent's absolute HTTP(S) base URL; its Agent Card is discovered at the standard well-known path unless `cardPath` names another.",
17
+ "type": "string",
18
+ "pattern": "^https?://"
19
+ },
20
+ "cardPath": {
21
+ "description": "An absolute URL pathname replacing the standard Agent Card path.",
22
+ "type": "string",
23
+ "pattern": "^/[^?#]*$"
24
+ },
25
+ "headers": {
26
+ "description": "Extra request headers; values may be symbolic `${NAME}` environment references.",
27
+ "type": "object",
28
+ "additionalProperties": { "type": "string" }
29
+ },
30
+ "authorization": {
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "required": ["type", "token"],
34
+ "properties": {
35
+ "type": { "const": "bearer" },
36
+ "token": {
37
+ "description": "A symbolic `${NAME}` environment reference; the secret is never persisted.",
38
+ "type": "string",
39
+ "pattern": "^\\$\\{[A-Za-z_][A-Za-z0-9_]*\\}$"
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.plurnk.xyz/v0/AcpPlan.json",
4
+ "$comment": "ACP v1 Plan, pinned to schema-v1.21.0 / 272bf799f35a258c6a4107a0410ed361e83683d3.",
5
+ "title": "AcpPlan",
6
+ "description": "The standards-facing ACP v1 execution plan.",
7
+ "type": "object",
8
+ "properties": {
9
+ "entries": {
10
+ "description": "The complete list of current plan entries.",
11
+ "type": "array",
12
+ "items": { "$ref": "#/$defs/AcpPlanEntry" }
13
+ },
14
+ "_meta": {
15
+ "description": "Metadata reserved by ACP. Consumers must not assume meanings for its keys.",
16
+ "type": ["object", "null"],
17
+ "additionalProperties": true
18
+ }
19
+ },
20
+ "required": ["entries"],
21
+ "$defs": {
22
+ "AcpPlanEntry": {
23
+ "description": "One task or goal in an ACP execution plan.",
24
+ "type": "object",
25
+ "properties": {
26
+ "content": {
27
+ "description": "Human-readable description of what this task aims to accomplish.",
28
+ "type": "string"
29
+ },
30
+ "priority": {
31
+ "description": "The relative importance of this task.",
32
+ "$ref": "#/$defs/AcpPlanEntryPriority"
33
+ },
34
+ "status": {
35
+ "description": "The current execution status of this task.",
36
+ "$ref": "#/$defs/AcpPlanEntryStatus"
37
+ },
38
+ "_meta": {
39
+ "description": "Metadata reserved by ACP. Consumers must not assume meanings for its keys.",
40
+ "type": ["object", "null"],
41
+ "additionalProperties": true
42
+ }
43
+ },
44
+ "required": ["content", "priority", "status"]
45
+ },
46
+ "AcpPlanEntryPriority": {
47
+ "description": "ACP v1 priority levels.",
48
+ "oneOf": [
49
+ { "type": "string", "const": "high" },
50
+ { "type": "string", "const": "medium" },
51
+ { "type": "string", "const": "low" }
52
+ ]
53
+ },
54
+ "AcpPlanEntryStatus": {
55
+ "description": "ACP v1 plan-entry lifecycle states.",
56
+ "oneOf": [
57
+ { "type": "string", "const": "pending" },
58
+ { "type": "string", "const": "in_progress" },
59
+ { "type": "string", "const": "completed" }
60
+ ]
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,74 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.plurnk.xyz/v0/AguiClientConformance.json",
4
+ "title": "AguiClientConformance",
5
+ "description": "One client's exhaustive, evidence-bearing disposition for an installed AG-UI discovery surface.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "client", "actions", "notifications"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "schemaVersion": { "const": 1 },
11
+ "client": { "type": "string", "minLength": 1 },
12
+ "actions": {
13
+ "type": "object",
14
+ "propertyNames": { "type": "string", "minLength": 1 },
15
+ "additionalProperties": { "$ref": "#/$defs/disposition" }
16
+ },
17
+ "notifications": {
18
+ "type": "object",
19
+ "propertyNames": { "type": "string", "minLength": 1 },
20
+ "additionalProperties": { "$ref": "#/$defs/disposition" }
21
+ }
22
+ },
23
+ "$defs": {
24
+ "evidence": {
25
+ "type": "array",
26
+ "minItems": 1,
27
+ "uniqueItems": true,
28
+ "items": { "type": "string", "minLength": 1 }
29
+ },
30
+ "dimensions": {
31
+ "type": "array",
32
+ "minItems": 1,
33
+ "uniqueItems": true,
34
+ "items": {
35
+ "enum": [
36
+ "admission",
37
+ "projection",
38
+ "framing",
39
+ "success",
40
+ "failure",
41
+ "lifecycle",
42
+ "durability",
43
+ "composition",
44
+ "presentation"
45
+ ]
46
+ }
47
+ },
48
+ "disposition": {
49
+ "oneOf": [
50
+ {
51
+ "type": "object",
52
+ "required": ["posture", "dimensions", "evidence"],
53
+ "additionalProperties": false,
54
+ "properties": {
55
+ "posture": { "enum": ["native", "generic"] },
56
+ "dimensions": { "$ref": "#/$defs/dimensions" },
57
+ "evidence": { "$ref": "#/$defs/evidence" }
58
+ }
59
+ },
60
+ {
61
+ "type": "object",
62
+ "required": ["posture", "reason", "dimensions", "evidence"],
63
+ "additionalProperties": false,
64
+ "properties": {
65
+ "posture": { "const": "unsupported" },
66
+ "reason": { "type": "string", "minLength": 1 },
67
+ "dimensions": { "$ref": "#/$defs/dimensions" },
68
+ "evidence": { "$ref": "#/$defs/evidence" }
69
+ }
70
+ }
71
+ ]
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.plurnk.xyz/v0/AguiConformanceKit.json",
4
+ "title": "AguiConformanceKit",
5
+ "description": "Language-neutral raw SSE and AG-UI lifecycle specimens consumed by every Plurnk client.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "transport", "lifecycles"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "schemaVersion": { "const": 1 },
11
+ "transport": {
12
+ "type": "array",
13
+ "minItems": 1,
14
+ "items": { "$ref": "#/$defs/transportSpecimen" }
15
+ },
16
+ "lifecycles": {
17
+ "type": "array",
18
+ "minItems": 1,
19
+ "items": { "$ref": "#/$defs/lifecycleSpecimen" }
20
+ }
21
+ },
22
+ "$defs": {
23
+ "name": {
24
+ "type": "string",
25
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
26
+ },
27
+ "event": {
28
+ "type": "object",
29
+ "required": ["type"],
30
+ "properties": { "type": { "type": "string", "minLength": 1 } },
31
+ "additionalProperties": true
32
+ },
33
+ "transportSpecimen": {
34
+ "type": "object",
35
+ "required": ["name", "chunks", "eof", "expect"],
36
+ "additionalProperties": false,
37
+ "properties": {
38
+ "name": { "$ref": "#/$defs/name" },
39
+ "chunks": {
40
+ "type": "array",
41
+ "minItems": 1,
42
+ "items": { "type": "string", "minLength": 1 }
43
+ },
44
+ "eof": { "type": "boolean" },
45
+ "expect": {
46
+ "oneOf": [
47
+ {
48
+ "type": "object",
49
+ "required": ["events"],
50
+ "additionalProperties": false,
51
+ "properties": {
52
+ "events": {
53
+ "type": "array",
54
+ "items": { "$ref": "#/$defs/event" }
55
+ }
56
+ }
57
+ },
58
+ {
59
+ "type": "object",
60
+ "required": ["error"],
61
+ "additionalProperties": false,
62
+ "properties": {
63
+ "error": { "enum": ["invalid-json"] }
64
+ }
65
+ }
66
+ ]
67
+ }
68
+ }
69
+ },
70
+ "actionExpectation": {
71
+ "type": "object",
72
+ "required": ["kind", "ok"],
73
+ "additionalProperties": false,
74
+ "properties": {
75
+ "kind": { "type": "string", "minLength": 1 },
76
+ "ok": { "type": "boolean" },
77
+ "status": { "type": "integer", "minimum": 100, "maximum": 599 }
78
+ }
79
+ },
80
+ "lifecycleExpectation": {
81
+ "type": "object",
82
+ "required": ["completion", "families"],
83
+ "additionalProperties": false,
84
+ "properties": {
85
+ "completion": { "enum": ["success", "interrupt", "error", "dead-stream"] },
86
+ "families": {
87
+ "type": "array",
88
+ "uniqueItems": true,
89
+ "items": { "type": "string", "minLength": 1 }
90
+ },
91
+ "status": { "type": "integer", "minimum": 100, "maximum": 599 },
92
+ "interrupt": { "enum": ["proposal", "interaction"] },
93
+ "action": { "$ref": "#/$defs/actionExpectation" }
94
+ }
95
+ },
96
+ "lifecycleSpecimen": {
97
+ "type": "object",
98
+ "required": ["name", "events", "expect"],
99
+ "additionalProperties": false,
100
+ "properties": {
101
+ "name": { "$ref": "#/$defs/name" },
102
+ "events": {
103
+ "type": "array",
104
+ "minItems": 1,
105
+ "items": { "$ref": "#/$defs/event" }
106
+ },
107
+ "expect": { "$ref": "#/$defs/lifecycleExpectation" }
108
+ }
109
+ }
110
+ }
111
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.plurnk.xyz/v0/AguiDiscovery.json",
4
+ "title": "AguiDiscovery",
5
+ "description": "The complete installed AG-UI+ management and notification surface. Action and notification names are object keys so identity has one representation.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "actions", "notifications", "display"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "schemaVersion": {
11
+ "const": 1
12
+ },
13
+ "actions": {
14
+ "type": "object",
15
+ "propertyNames": {
16
+ "type": "string",
17
+ "minLength": 1
18
+ },
19
+ "additionalProperties": {
20
+ "$ref": "#/$defs/action"
21
+ }
22
+ },
23
+ "notifications": {
24
+ "type": "object",
25
+ "propertyNames": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "additionalProperties": {
30
+ "$ref": "#/$defs/notification"
31
+ }
32
+ },
33
+ "display": {
34
+ "$ref": "https://schemas.plurnk.xyz/v0/ClientDisplayCapabilities.json"
35
+ }
36
+ },
37
+ "$defs": {
38
+ "jsonSchema": {
39
+ "type": "object",
40
+ "description": "A JSON Schema 2020-12 schema supplied by the contract owner.",
41
+ "additionalProperties": true
42
+ },
43
+ "action": {
44
+ "type": "object",
45
+ "required": ["scope", "inputSchema", "outputSchema"],
46
+ "additionalProperties": false,
47
+ "properties": {
48
+ "scope": {
49
+ "enum": ["worldless", "workspace", "worker"]
50
+ },
51
+ "inputSchema": {
52
+ "$ref": "#/$defs/jsonSchema"
53
+ },
54
+ "outputSchema": {
55
+ "$ref": "#/$defs/jsonSchema"
56
+ }
57
+ }
58
+ },
59
+ "notification": {
60
+ "type": "object",
61
+ "required": ["payloadSchema"],
62
+ "additionalProperties": false,
63
+ "properties": {
64
+ "payloadSchema": {
65
+ "$ref": "#/$defs/jsonSchema"
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.plurnk.dev/v0/ClientDisplayCapabilities.json",
3
+ "$id": "https://schemas.plurnk.xyz/v0/ClientDisplayCapabilities.json",
4
4
  "title": "ClientDisplayCapabilities",
5
5
  "description": "The installed scheme and MIME capability identities with optional opaque client presentation metadata.",
6
6
  "type": "array",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.plurnk.dev/v0/ClientInteractionProjection.json",
3
+ "$id": "https://schemas.plurnk.xyz/v0/ClientInteractionProjection.json",
4
4
  "title": "ClientInteractionProjection",
5
5
  "description": "The runtime-neutral client-interface projection of one pending client interaction. Live delivery and reconnect discovery expose this same shape.",
6
6
  "type": "object",
@@ -11,6 +11,6 @@
11
11
  "workerId": { "type": "integer", "minimum": 1 },
12
12
  "loopId": { "type": "integer", "minimum": 1 },
13
13
  "turnId": { "type": "integer", "minimum": 1 },
14
- "request": { "$ref": "https://schemas.plurnk.dev/v0/ClientInteractionRequest.json" }
14
+ "request": { "$ref": "https://schemas.plurnk.xyz/v0/ClientInteractionRequest.json" }
15
15
  }
16
16
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.plurnk.dev/v0/ClientInteractionRequest.json",
3
+ "$id": "https://schemas.plurnk.xyz/v0/ClientInteractionRequest.json",
4
4
  "title": "ClientInteractionRequest",
5
5
  "description": "A runtime-neutral request for one client-owned interaction. The owner supplies the standard tool presentation and response contract; protocol-private continuation state is excluded.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.plurnk.dev/v0/ClientInteractionResolution.json",
3
+ "$id": "https://schemas.plurnk.xyz/v0/ClientInteractionResolution.json",
4
4
  "title": "ClientInteractionResolution",
5
5
  "description": "The client response that settles one pending interaction. A cancelled interaction carries no fabricated payload.",
6
6
  "oneOf": [
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.plurnk.dev/v0/ClientStatement.json",
3
+ "$id": "https://schemas.plurnk.xyz/v0/ClientStatement.json",
4
4
  "title": "ClientStatement",
5
5
  "description": "The client-tier AST returned by PlurnkParser.parseClient: the closed protocol PlurnkStatement union plus read-shaped LOOK and BUFF utility statements.",
6
6
  "oneOf": [
7
- { "$ref": "https://schemas.plurnk.dev/v0/PlurnkStatement.json" },
7
+ { "$ref": "https://schemas.plurnk.xyz/v0/PlurnkStatement.json" },
8
8
  { "$ref": "#/$defs/LookStatement" },
9
9
  { "$ref": "#/$defs/BuffStatement" }
10
10
  ],
@@ -15,40 +15,44 @@
15
15
  { "type": "null" }
16
16
  ]
17
17
  },
18
+ "AnnotationOrNull": {
19
+ "type": ["string", "null"]
20
+ },
18
21
  "PathOrNull": {
19
22
  "oneOf": [
20
- { "$ref": "https://schemas.plurnk.dev/v0/ParsedPath.json" },
23
+ { "$ref": "https://schemas.plurnk.xyz/v0/ParsedPath.json" },
21
24
  { "type": "null" }
22
25
  ]
23
26
  },
24
27
  "LineMarkerOrNull": {
25
28
  "oneOf": [
26
- { "$ref": "https://schemas.plurnk.dev/v0/LineMarker.json" },
29
+ { "$ref": "https://schemas.plurnk.xyz/v0/LineMarker.json" },
27
30
  { "type": "null" }
28
31
  ]
29
32
  },
30
33
  "TextLineMarkerOrNull": {
31
34
  "oneOf": [
32
- { "$ref": "https://schemas.plurnk.dev/v0/TextLineMarker.json" },
35
+ { "$ref": "https://schemas.plurnk.xyz/v0/TextLineMarker.json" },
33
36
  { "type": "null" }
34
37
  ]
35
38
  },
36
39
  "MatcherBodyOrNull": {
37
40
  "oneOf": [
38
- { "$ref": "https://schemas.plurnk.dev/v0/MatcherBody.json" },
41
+ { "$ref": "https://schemas.plurnk.xyz/v0/MatcherBody.json" },
39
42
  { "type": "null" }
40
43
  ]
41
44
  },
42
45
  "PositionRef": {
43
- "$ref": "https://schemas.plurnk.dev/v0/Position.json"
46
+ "$ref": "https://schemas.plurnk.xyz/v0/Position.json"
44
47
  },
45
48
  "LookStatement": {
46
49
  "type": "object",
47
- "required": ["op", "suffix", "signal", "target", "lineMarker", "body", "position"],
50
+ "required": ["op", "delimiter", "annotation", "signal", "target", "lineMarker", "body", "position"],
48
51
  "additionalProperties": false,
49
52
  "properties": {
50
53
  "op": { "const": "LOOK" },
51
- "suffix": { "type": "string" },
54
+ "delimiter": { "type": "string" },
55
+ "annotation": { "$ref": "#/$defs/AnnotationOrNull" },
52
56
  "signal": { "$ref": "#/$defs/TagSignal" },
53
57
  "target": { "$ref": "#/$defs/PathOrNull" },
54
58
  "lineMarker": { "$ref": "#/$defs/TextLineMarkerOrNull" },
@@ -58,11 +62,12 @@
58
62
  },
59
63
  "BuffStatement": {
60
64
  "type": "object",
61
- "required": ["op", "suffix", "signal", "target", "lineMarker", "body", "position"],
65
+ "required": ["op", "delimiter", "annotation", "signal", "target", "lineMarker", "body", "position"],
62
66
  "additionalProperties": false,
63
67
  "properties": {
64
68
  "op": { "const": "BUFF" },
65
- "suffix": { "type": "string" },
69
+ "delimiter": { "type": "string" },
70
+ "annotation": { "$ref": "#/$defs/AnnotationOrNull" },
66
71
  "signal": { "$ref": "#/$defs/TagSignal" },
67
72
  "target": { "$ref": "#/$defs/PathOrNull" },
68
73
  "lineMarker": { "$ref": "#/$defs/LineMarkerOrNull" },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.plurnk.dev/v0/EntryReadResult.json",
3
+ "$id": "https://schemas.plurnk.xyz/v0/EntryReadResult.json",
4
4
  "title": "EntryReadResult",
5
5
  "description": "The runtime-neutral result of reading one client-visible entry, either completely or as one channel suffix.",
6
6
  "oneOf": [
@@ -23,7 +23,7 @@
23
23
  "minimum": 400,
24
24
  "maximum": 599
25
25
  },
26
- "problem": { "$ref": "https://schemas.plurnk.dev/v0/ProblemDetails.json" },
26
+ "problem": { "$ref": "https://schemas.plurnk.xyz/v0/ProblemDetails.json" },
27
27
  "entry": { "type": "null" }
28
28
  }
29
29
  }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.plurnk.xyz/v0/FunctionalityCandidate.json",
4
+ "title": "FunctionalityCandidate",
5
+ "description": "One inert discovery result: an exact family definition with its provenance. Discovery never installs, persists, enables, or executes it.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["definition", "provenance"],
9
+ "properties": {
10
+ "alias": {
11
+ "description": "The alias the candidate would take if added; a suggestion, never authority.",
12
+ "type": "string",
13
+ "minLength": 1
14
+ },
15
+ "summary": {
16
+ "type": "string"
17
+ },
18
+ "definition": {
19
+ "description": "The exact family definition, conforming to the family's definition schema.",
20
+ "type": "object"
21
+ },
22
+ "provenance": {
23
+ "type": "object",
24
+ "additionalProperties": false,
25
+ "required": ["kind", "source"],
26
+ "properties": {
27
+ "kind": { "type": "string", "minLength": 1 },
28
+ "source": { "type": "string", "minLength": 1 },
29
+ "reference": { "type": "string", "minLength": 1 }
30
+ }
31
+ }
32
+ }
33
+ }