@plurnk/plurnk-contracts 6.0.0 → 7.0.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 (97) hide show
  1. package/.env.defaults +5 -5
  2. package/README.md +4 -4
  3. package/SPEC.md +158 -2054
  4. package/dist/schema/{AguiDiscovery.json → AcpDiscovery.json} +4 -4
  5. package/dist/schema/ApplicationOperationEvent.json +2 -2
  6. package/dist/schema/CapabilityDescriptor.json +3 -3
  7. package/dist/schema/CapabilityPolicy.json +5 -1
  8. package/dist/schema/CapabilitySelector.json +3 -3
  9. package/dist/schema/ClientInteractionProjection.json +2 -2
  10. package/dist/schema/ClientInteractionRequest.json +26 -10
  11. package/dist/schema/ClientInteractionResolution.json +14 -6
  12. package/dist/schema/FunctionalityDefinitionState.json +3 -3
  13. package/dist/schema/FunctionalityDiscoverQuery.json +2 -1
  14. package/dist/schema/FunctionalityMutationResult.json +1 -1
  15. package/dist/schema/MatcherBody.json +2 -2
  16. package/dist/schema/McpServerDefinition.json +35 -9
  17. package/dist/schema/ModelCatalogPage.json +1 -1
  18. package/dist/schema/ModelRoute.json +2 -2
  19. package/dist/schema/Notice.json +1 -1
  20. package/dist/schema/PlurnkStatement.json +8 -8
  21. package/dist/schema/ProposalDisposition.json +1 -1
  22. package/dist/schema/ProposalPolicy.json +1 -1
  23. package/dist/schema/ProposalProjection.json +57 -6
  24. package/dist/schema/ResourceSelection.json +1 -1
  25. package/dist/schema/RollbackReport.json +1 -1
  26. package/dist/schema/{WorkerOwner.json → SessionOwner.json} +2 -2
  27. package/dist/schema/SkillDefinition.json +8 -7
  28. package/dist/src/Application.d.ts +97 -66
  29. package/dist/src/Application.d.ts.map +1 -1
  30. package/dist/src/Application.js +198 -1
  31. package/dist/src/Application.js.map +1 -1
  32. package/dist/src/ApplicationNotifications.d.ts +52 -0
  33. package/dist/src/ApplicationNotifications.d.ts.map +1 -0
  34. package/dist/src/ApplicationNotifications.js +2 -0
  35. package/dist/src/ApplicationNotifications.js.map +1 -0
  36. package/dist/src/ApplicationPort.d.ts +84 -75
  37. package/dist/src/ApplicationPort.d.ts.map +1 -1
  38. package/dist/src/ApplicationStream.d.ts +4 -4
  39. package/dist/src/ApplicationStream.d.ts.map +1 -1
  40. package/dist/src/CapabilityAdmission.d.ts +2 -0
  41. package/dist/src/CapabilityAdmission.d.ts.map +1 -1
  42. package/dist/src/CapabilityAdmission.js +14 -2
  43. package/dist/src/CapabilityAdmission.js.map +1 -1
  44. package/dist/src/Excerpt.js +1 -1
  45. package/dist/src/Excerpt.js.map +1 -1
  46. package/dist/src/Functionality.d.ts +3 -6
  47. package/dist/src/Functionality.d.ts.map +1 -1
  48. package/dist/src/HttpOrigin.d.ts +3 -3
  49. package/dist/src/HttpOrigin.js +1 -1
  50. package/dist/src/JsonDocument.js +1 -1
  51. package/dist/src/JsonDocument.js.map +1 -1
  52. package/dist/src/JsonResult.js +1 -1
  53. package/dist/src/JsonResult.js.map +1 -1
  54. package/dist/src/LogRow.d.ts +31 -0
  55. package/dist/src/LogRow.d.ts.map +1 -0
  56. package/dist/src/LogRow.js +46 -0
  57. package/dist/src/LogRow.js.map +1 -0
  58. package/dist/src/LoopLifecycle.d.ts +1 -1
  59. package/dist/src/LoopLifecycle.d.ts.map +1 -1
  60. package/dist/src/LoopLifecycle.js +2 -2
  61. package/dist/src/LoopLifecycle.js.map +1 -1
  62. package/dist/src/MessageResource.d.ts +4 -4
  63. package/dist/src/MessageResource.d.ts.map +1 -1
  64. package/dist/src/PathSyntax.js +2 -2
  65. package/dist/src/PathSyntax.js.map +1 -1
  66. package/dist/src/PlurnkParseError.js +1 -1
  67. package/dist/src/PlurnkParseError.js.map +1 -1
  68. package/dist/src/Problems.js +1 -1
  69. package/dist/src/Problems.js.map +1 -1
  70. package/dist/src/TurnDisposition.js +1 -1
  71. package/dist/src/TurnDisposition.js.map +1 -1
  72. package/dist/src/Validator.d.ts +5 -108
  73. package/dist/src/Validator.d.ts.map +1 -1
  74. package/dist/src/Validator.js +97 -518
  75. package/dist/src/Validator.js.map +1 -1
  76. package/dist/src/guards.js +1 -1
  77. package/dist/src/guards.js.map +1 -1
  78. package/dist/src/index.d.ts +6 -5
  79. package/dist/src/index.d.ts.map +1 -1
  80. package/dist/src/index.js +7 -5
  81. package/dist/src/index.js.map +1 -1
  82. package/dist/src/types.d.ts +1 -1
  83. package/dist/src/types.d.ts.map +1 -1
  84. package/dist/src/types.generated.d.ts +91 -187
  85. package/dist/src/types.generated.d.ts.map +1 -1
  86. package/dist/src/types.js +7 -7
  87. package/dist/src/types.js.map +1 -1
  88. package/package.json +5 -9
  89. package/plurnk.md +22 -22
  90. package/dist/conformance/agui-v1.json +0 -716
  91. package/dist/schema/A2aAgentDefinition.json +0 -76
  92. package/dist/schema/AguiClientConformance.json +0 -74
  93. package/dist/schema/AguiConformanceKit.json +0 -111
  94. package/dist/src/AguiConformance.d.ts +0 -11
  95. package/dist/src/AguiConformance.d.ts.map +0 -1
  96. package/dist/src/AguiConformance.js +0 -16
  97. package/dist/src/AguiConformance.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  {
2
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.",
3
+ "$id": "https://schemas.plurnk.xyz/v0/AcpDiscovery.json",
4
+ "title": "AcpDiscovery",
5
+ "description": "The complete installed ACP management and notification surface. Action and notification names are object keys so identity has one representation.",
6
6
  "type": "object",
7
7
  "required": ["schemaVersion", "actions", "notifications", "display"],
8
8
  "additionalProperties": false,
@@ -46,7 +46,7 @@
46
46
  "additionalProperties": false,
47
47
  "properties": {
48
48
  "scope": {
49
- "enum": ["daemon", "workspace", "worker"]
49
+ "enum": ["daemon", "workspace", "session"]
50
50
  },
51
51
  "inputSchema": {
52
52
  "$ref": "#/$defs/jsonSchema"
@@ -4,10 +4,10 @@
4
4
  "title": "ApplicationOperationEvent",
5
5
  "description": "A core-owned dispatch boundary. A settled dispatch has its exact result; it does not assert asynchronous process completion.",
6
6
  "type": "object",
7
- "required": ["workerId", "loopId", "turnId", "sequence", "origin", "projectRoot", "statement", "phase"],
7
+ "required": ["sessionId", "loopId", "turnId", "sequence", "origin", "projectRoot", "statement", "phase"],
8
8
  "additionalProperties": false,
9
9
  "properties": {
10
- "workerId": { "type": "integer", "minimum": 1 },
10
+ "sessionId": { "type": "integer", "minimum": 1 },
11
11
  "loopId": { "type": "integer", "minimum": 1 },
12
12
  "turnId": { "type": "integer", "minimum": 1 },
13
13
  "sequence": { "type": "integer", "minimum": 1 },
@@ -11,12 +11,12 @@
11
11
  "description": "An operation keyword, or a runtime tag: an execution's operation is its runtime.",
12
12
  "anyOf": [
13
13
  { "enum": ["FIND", "READ", "EDIT", "COPY", "MOVE", "SEND", "BARE", "WORK", "FORK", "KILL"] },
14
- { "type": "string", "pattern": "^[a-z][a-z0-9+.-]*$" }
14
+ { "type": "string", "pattern": "^[a-z][a-z0-9+._-]*$" }
15
15
  ],
16
16
  "tsType": "\"FIND\" | \"READ\" | \"EDIT\" | \"COPY\" | \"MOVE\" | \"SEND\" | \"BARE\" | \"WORK\" | \"FORK\" | \"KILL\" | Lowercase<string>"
17
17
  },
18
- "scheme": { "type": "string", "pattern": "^[a-z][a-z0-9+.-]*$" },
19
- "runtime": { "type": "string", "pattern": "^[a-z][a-z0-9+.-]*$" },
18
+ "scheme": { "type": "string", "pattern": "^[a-z][a-z0-9+._-]*$" },
19
+ "runtime": { "type": "string", "pattern": "^[a-z][a-z0-9+._-]*$" },
20
20
  "tool": { "type": "string", "minLength": 1 },
21
21
  "access": { "enum": ["observe", "mutate", "execute", "interact", "control"] },
22
22
  "traits": {
@@ -2,10 +2,14 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/CapabilityPolicy.json",
4
4
  "title": "CapabilityPolicy",
5
- "description": "One purely subtractive capability-policy layer. Deny wins; when only is present, a demand must match at least one selector.",
5
+ "description": "One capability-policy layer. Deny wins; when only is present, a demand must match at least one selector; allow pre-approves matching admitted proposals.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "properties": {
9
+ "allow": {
10
+ "type": "array",
11
+ "items": { "$ref": "https://schemas.plurnk.xyz/v0/CapabilitySelector.json" }
12
+ },
9
13
  "only": {
10
14
  "type": "array",
11
15
  "items": { "$ref": "https://schemas.plurnk.xyz/v0/CapabilitySelector.json" }
@@ -11,12 +11,12 @@
11
11
  "description": "An operation keyword, or a runtime tag: an execution's operation is its runtime.",
12
12
  "anyOf": [
13
13
  { "enum": ["FIND", "READ", "EDIT", "COPY", "MOVE", "SEND", "BARE", "WORK", "FORK", "KILL"] },
14
- { "type": "string", "pattern": "^[a-z][a-z0-9+.-]*$" }
14
+ { "type": "string", "pattern": "^[a-z][a-z0-9+._-]*$" }
15
15
  ],
16
16
  "tsType": "\"FIND\" | \"READ\" | \"EDIT\" | \"COPY\" | \"MOVE\" | \"SEND\" | \"BARE\" | \"WORK\" | \"FORK\" | \"KILL\" | Lowercase<string>"
17
17
  },
18
- "scheme": { "type": "string", "pattern": "^[a-z][a-z0-9+.-]*$" },
19
- "runtime": { "type": "string", "pattern": "^[a-z][a-z0-9+.-]*$" },
18
+ "scheme": { "type": "string", "pattern": "^[a-z][a-z0-9+._-]*$" },
19
+ "runtime": { "type": "string", "pattern": "^[a-z][a-z0-9+._-]*$" },
20
20
  "tool": { "type": "string", "minLength": 1 },
21
21
  "access": { "enum": ["observe", "mutate", "execute", "interact", "control"] },
22
22
  "traits": {
@@ -4,11 +4,11 @@
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",
7
- "required": ["interactionId", "workerId", "loopId", "turnId", "recipient", "request"],
7
+ "required": ["interactionId", "sessionId", "loopId", "turnId", "recipient", "request"],
8
8
  "additionalProperties": false,
9
9
  "properties": {
10
10
  "interactionId": { "type": "integer", "minimum": 1 },
11
- "workerId": { "type": "integer", "minimum": 1 },
11
+ "sessionId": { "type": "integer", "minimum": 1 },
12
12
  "loopId": { "type": "integer", "minimum": 1 },
13
13
  "turnId": { "type": "integer", "minimum": 1 },
14
14
  "recipient": { "type": "string", "minLength": 1 },
@@ -2,14 +2,30 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/ClientInteractionRequest.json",
4
4
  "title": "ClientInteractionRequest",
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
- "type": "object",
7
- "required": ["toolName", "arguments", "responseSchema"],
8
- "additionalProperties": false,
9
- "properties": {
10
- "toolName": { "type": "string", "minLength": 1 },
11
- "arguments": { "type": "object", "additionalProperties": true },
12
- "message": { "type": "string", "minLength": 1 },
13
- "responseSchema": { "type": "object", "additionalProperties": true }
14
- }
5
+ "description": "A runtime-neutral client elicitation request in standard ACP v2 / MCP form or URL mode. Protocol-private continuation state is excluded.",
6
+ "oneOf": [
7
+ {
8
+ "type": "object",
9
+ "required": ["toolName", "mode", "message", "requestedSchema"],
10
+ "additionalProperties": false,
11
+ "properties": {
12
+ "toolName": { "type": "string", "minLength": 1 },
13
+ "mode": { "const": "form" },
14
+ "message": { "type": "string", "minLength": 1 },
15
+ "requestedSchema": { "type": "object", "additionalProperties": true }
16
+ }
17
+ },
18
+ {
19
+ "type": "object",
20
+ "required": ["toolName", "mode", "message", "elicitationId", "url"],
21
+ "additionalProperties": false,
22
+ "properties": {
23
+ "toolName": { "type": "string", "minLength": 1 },
24
+ "mode": { "const": "url" },
25
+ "message": { "type": "string", "minLength": 1 },
26
+ "elicitationId": { "type": "string", "minLength": 1 },
27
+ "url": { "type": "string", "format": "uri", "minLength": 1 }
28
+ }
29
+ }
30
+ ]
15
31
  }
@@ -2,23 +2,31 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/ClientInteractionResolution.json",
4
4
  "title": "ClientInteractionResolution",
5
- "description": "The client response that settles one pending interaction. A cancelled interaction carries no fabricated payload.",
5
+ "description": "The standard ACP v2 / MCP elicitation response that settles one pending interaction. Declined and cancelled interactions carry no fabricated content.",
6
6
  "oneOf": [
7
7
  {
8
8
  "type": "object",
9
- "required": ["status"],
9
+ "required": ["action"],
10
10
  "additionalProperties": false,
11
11
  "properties": {
12
- "status": { "const": "resolved" },
13
- "payload": true
12
+ "action": { "const": "accept" },
13
+ "content": { "type": "object", "additionalProperties": true }
14
14
  }
15
15
  },
16
16
  {
17
17
  "type": "object",
18
- "required": ["status"],
18
+ "required": ["action"],
19
19
  "additionalProperties": false,
20
20
  "properties": {
21
- "status": { "const": "cancelled" }
21
+ "action": { "const": "decline" }
22
+ }
23
+ },
24
+ {
25
+ "type": "object",
26
+ "required": ["action"],
27
+ "additionalProperties": false,
28
+ "properties": {
29
+ "action": { "const": "cancel" }
22
30
  }
23
31
  }
24
32
  ]
@@ -9,8 +9,8 @@
9
9
  "properties": {
10
10
  "alias": { "type": "string", "minLength": 1 },
11
11
  "origin": {
12
- "description": "Who owns this definition: the service baseline, the workspace, or one worker. A worker-scoped family (env) owns its definitions per worker, so origin names ownership rather than scope.",
13
- "enum": ["service", "workspace", "worker"]
12
+ "description": "Who owns this definition: the service baseline, the workspace, or one session. A session-scoped family (env) owns its definitions per session, so origin names ownership rather than scope.",
13
+ "enum": ["service", "workspace", "session"]
14
14
  },
15
15
  "state": {
16
16
  "description": "disabled: available, model-invisible. dormant: enabled without a resident publication. active: enabled and prepared. unavailable: enabled but preparation has an exact Problem. authorization-required: enabled and awaiting a protocol continuation.",
@@ -22,7 +22,7 @@
22
22
  "$ref": "https://schemas.plurnk.xyz/v0/FunctionalityProvenance.json"
23
23
  },
24
24
  "inherited": {
25
- "description": "The Worker this entry was copied from when this Worker was created (WORK or FORK), preserved across generations until this Worker changes the entry. Absent for an entry this Worker set itself. Worker-scoped families only.",
25
+ "description": "The Session this entry was copied from when this Session was created (WORK or FORK), preserved across generations until this Session changes the entry. Absent for an entry this Session set itself. Session-scoped families only.",
26
26
  "type": "string",
27
27
  "minLength": 1
28
28
  },
@@ -8,8 +8,9 @@
8
8
  "properties": {
9
9
  "query": { "type": "string", "minLength": 1 },
10
10
  "source": { "type": "string", "minLength": 1 },
11
+ "rule": { "type": "string", "minLength": 1 },
11
12
  "configuration": {
12
- "description": "Caller-supplied configuration material the family interprets as candidates (a client's own PLURNK_A2A_* environment, a local directory list). It contributes candidates with client-configuration provenance; it never becomes durable authority.",
13
+ "description": "Caller-supplied configuration material the family interprets as candidates (a client's own PLURNK_SCHEDULE_* environment, a local directory list). It contributes candidates with client-configuration provenance; it never becomes durable authority.",
13
14
  "type": "object"
14
15
  }
15
16
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/FunctionalityMutationResult.json",
4
- "description": "The committed resource outcome of add, replace, enable, disable, or remove ({§functionality-mutation-status}): 202 when the resulting definition requires authorization; otherwise 201 when add or replace creates a local definition (including an inherited override), or 200 for assignment to an existing local definition and settled enable/disable/remove. Only replace may change a different local definition. A mutation names the one alias it concerned, or, for an add that names its definitions by their content ({§functionality-addressing}), lists every definition it admitted.",
4
+ "description": "The committed resource outcome of add, replace, enable, disable, or remove ({§functionality-replacement}): 202 when the resulting definition requires authorization; otherwise 201 when add or replace creates a local definition (including an inherited override), or 200 for assignment to an existing local definition and settled enable/disable/remove. Only replace may change a different local definition. A mutation names the one alias it concerned, or, for an add that names its definitions by their content ({§functionality-replacement}), lists every definition it admitted.",
5
5
  "title": "FunctionalityMutationResult",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/MatcherBody.json",
4
4
  "title": "MatcherBody",
5
- "description": "Parsed single-line body of a matcher-bearing statement, discriminated on `dialect`. The dialect is determined by the body's leading characters (`//` xpath, `/` regex, `$` jsonpath, `~` full-text, `&` graph, else glob); a body the parser could not read in its claimed dialect is `unreadable` ({§matcher-refusal}). The regex variant carries pattern and flags split out of the `/pattern/flags` literal; every variant remains JSON-serializable.",
5
+ "description": "Parsed single-line body of a matcher-bearing statement, discriminated on `dialect`. The dialect is determined by the body's leading characters (`//` xpath, `/` regex, `$` jsonpath, `~` full-text, `&` graph, else glob); a body the parser could not read in its claimed dialect is `unreadable` ({§matcher-prefix-claims}). The regex variant carries pattern and flags split out of the `/pattern/flags` literal; every variant remains JSON-serializable.",
6
6
  "oneOf": [
7
7
  { "$ref": "#/$defs/XPathBody" },
8
8
  { "$ref": "#/$defs/RegexBody" },
@@ -72,7 +72,7 @@
72
72
  },
73
73
  "UnreadableBody": {
74
74
  "title": "UnreadableBody",
75
- "description": "A matcher the parser could not read in the dialect its prefix claims ({§matcher-refusal}): the authored text, the diagnostic, and the working form. The statement is admitted and the operation refuses with that message and recovery; it is never a contract strike.",
75
+ "description": "A matcher the parser could not read in the dialect its prefix claims ({§matcher-prefix-claims}): the authored text, the diagnostic, and the working form. The statement is admitted and the operation refuses with that message and recovery; it is never a contract strike.",
76
76
  "type": "object",
77
77
  "required": ["dialect", "raw", "message", "recovery"],
78
78
  "additionalProperties": false,
@@ -16,21 +16,39 @@
16
16
  "title": "McpServerName",
17
17
  "description": "The server's alias: the runtime tag whose fence invokes it and its resource scheme.",
18
18
  "type": "string",
19
- "pattern": "^[a-z][a-z0-9-]*$"
19
+ "pattern": "^[a-z][a-z0-9_-]*$"
20
+ },
21
+ "plurnkWorkspace": {
22
+ "description": "Target workspace name(s) or '*' for operator-scoped multi-workspace routing; ${NAME} references expand against the operator environment.",
23
+ "oneOf": [
24
+ {
25
+ "type": "string",
26
+ "minLength": 1
27
+ },
28
+ {
29
+ "type": "array",
30
+ "minItems": 1,
31
+ "items": {
32
+ "type": "string",
33
+ "minLength": 1
34
+ }
35
+ }
36
+ ]
37
+ },
38
+ "plurnkSession": {
39
+ "description": "Default target session name in the workspace for server-initiated Open Work; ${NAME} references expand against the workspace-composed operator environment.",
40
+ "type": "string",
41
+ "minLength": 1
20
42
  },
21
43
  "stdio": {
22
44
  "title": "McpStdioServerDefinition",
23
45
  "type": "object",
24
46
  "additionalProperties": false,
25
47
  "required": [
26
- "name",
27
48
  "type",
28
49
  "command"
29
50
  ],
30
51
  "properties": {
31
- "name": {
32
- "$ref": "#/$defs/name"
33
- },
34
52
  "type": {
35
53
  "description": "A local server: a subprocess speaking MCP over its standard input and output.",
36
54
  "const": "stdio"
@@ -58,6 +76,12 @@
58
76
  "description": "An absolute working directory, optionally using ${NAME} references. When absent the host supplies a workspace-owned state directory outside the project.",
59
77
  "type": "string",
60
78
  "minLength": 1
79
+ },
80
+ "plurnkWorkspace": {
81
+ "$ref": "#/$defs/plurnkWorkspace"
82
+ },
83
+ "plurnkSession": {
84
+ "$ref": "#/$defs/plurnkSession"
61
85
  }
62
86
  }
63
87
  },
@@ -66,14 +90,10 @@
66
90
  "type": "object",
67
91
  "additionalProperties": false,
68
92
  "required": [
69
- "name",
70
93
  "type",
71
94
  "url"
72
95
  ],
73
96
  "properties": {
74
- "name": {
75
- "$ref": "#/$defs/name"
76
- },
77
97
  "type": {
78
98
  "description": "A remote server: an MCP endpoint over Streamable HTTP.",
79
99
  "const": "streamable-http"
@@ -114,6 +134,12 @@
114
134
  "$ref": "https://schemas.plurnk.xyz/v0/McpOAuth.json"
115
135
  }
116
136
  ]
137
+ },
138
+ "plurnkWorkspace": {
139
+ "$ref": "#/$defs/plurnkWorkspace"
140
+ },
141
+ "plurnkSession": {
142
+ "$ref": "#/$defs/plurnkSession"
117
143
  }
118
144
  }
119
145
  }
@@ -106,7 +106,7 @@
106
106
  "attachment": { "type": "boolean" },
107
107
  "reasoning": { "type": "boolean" },
108
108
  "efforts": {
109
- "description": "Portable efforts admitted for this exact route by the installed provider adapter and provider-wide operator declarations; not a worker's combined model/spawn policy intersection.",
109
+ "description": "Portable efforts admitted for this exact route by the installed provider adapter and provider-wide operator declarations; not a session's combined model/spawn policy intersection.",
110
110
  "type": "array",
111
111
  "minItems": 1,
112
112
  "uniqueItems": true,
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/ModelRoute.json",
4
4
  "title": "ModelRoute",
5
- "description": "A client-visible resolved provider/model identity. Alias is present only when a declared alias supplied the route; provider configuration remains private to the daemon. effort is the worker's durable effort selection — absent when the model has no reasoning dimension.",
5
+ "description": "A client-visible resolved provider/model identity. Alias is present only when a declared alias supplied the route; provider configuration remains private to the daemon. effort is the session's durable effort selection — absent when the model has no reasoning dimension.",
6
6
  "type": "object",
7
7
  "required": ["provider", "model"],
8
8
  "dependentRequired": {
@@ -27,7 +27,7 @@
27
27
  "$ref": "https://schemas.plurnk.xyz/v0/Effort.json"
28
28
  },
29
29
  "effortSource": {
30
- "description": "Whether effort was chosen through worker.effort.set (explicit) or seeded from the alias configuration (default). Present exactly when effort is.",
30
+ "description": "Whether effort was chosen through setSessionEffort (explicit) or seeded from the alias configuration (default). Present exactly when effort is.",
31
31
  "type": "string",
32
32
  "enum": ["default", "explicit"]
33
33
  }
@@ -9,7 +9,7 @@
9
9
  "properties": {
10
10
  "source": {
11
11
  "type": "string",
12
- "pattern": "^[a-z]+(:[a-z][a-z0-9-]*)?$",
12
+ "pattern": "^[a-z]+(:[a-z][a-z0-9+._-]*)?$",
13
13
  "description": "Producer identifier. Top-level for self-contained subsystems; colon-namespaced for parameterized producers such as `provider:openai` or `exec:search`."
14
14
  },
15
15
  "kind": {
@@ -149,11 +149,11 @@
149
149
  },
150
150
  "matcher": {
151
151
  "$ref": "#/$defs/MatcherBodyOrNull",
152
- "description": "The selection matcher lifted from the heading's `[{\"pattern\": …}]` option ({§matcher-option}); null when the heading carries none."
152
+ "description": "The selection matcher lifted from the heading ({§parse-recovery}); null when the heading carries none."
153
153
  },
154
154
  "body": {
155
155
  "type": "null",
156
- "description": "Retrieval bodies normalize to separate NOTE statements; selection belongs to the header ({§retrieval-annotation})."
156
+ "description": "Retrieval bodies normalize to separate NOTE statements; selection belongs to the header ({§op-shapes})."
157
157
  },
158
158
  "position": {
159
159
  "$ref": "#/$defs/PositionRef"
@@ -191,7 +191,7 @@
191
191
  },
192
192
  "matcher": {
193
193
  "$ref": "#/$defs/MatcherBodyOrNull",
194
- "description": "The selection matcher lifted from the heading's `[{\"pattern\": …}]` option ({§matcher-option}); null when the heading carries none."
194
+ "description": "The selection matcher lifted from the heading ({§parse-recovery}); null when the heading carries none."
195
195
  },
196
196
  "body": {
197
197
  "type": "null"
@@ -232,7 +232,7 @@
232
232
  },
233
233
  "matcher": {
234
234
  "$ref": "#/$defs/MatcherBodyOrNull",
235
- "description": "The selection matcher lifted from the heading's `[{\"pattern\": …}]` option ({§matcher-option}); null when the heading carries none."
235
+ "description": "The selection matcher lifted from the heading ({§parse-recovery}); null when the heading carries none."
236
236
  },
237
237
  "body": {
238
238
  "type": [
@@ -353,7 +353,7 @@
353
353
  "runtime": {
354
354
  "description": "The runtime tag the fence names, in its registered lowercase spelling. An execution has no operation keyword: the fence name is the runtime, and the log row's op shows it as written.",
355
355
  "type": "string",
356
- "pattern": "^[a-z][a-z0-9+.-]*$",
356
+ "pattern": "^[a-z][a-z0-9+._-]*$",
357
357
  "tsType": "Lowercase<string>"
358
358
  },
359
359
  "op": {
@@ -448,15 +448,15 @@
448
448
  },
449
449
  "lineMarker": {
450
450
  "$ref": "#/$defs/TextLineMarkerOrNull",
451
- "description": "Scope of the kill: lines of a log body or of an entry ({§kill-scope}); null kills the whole target."
451
+ "description": "Scope of the kill: lines of a log body or of an entry ({§op-shapes}); null kills the whole target."
452
452
  },
453
453
  "matcher": {
454
454
  "$ref": "#/$defs/MatcherBodyOrNull",
455
- "description": "The selection matcher lifted from the heading's `[{\"pattern\": …}]` option ({§matcher-option}); null when the heading carries none."
455
+ "description": "The selection matcher lifted from the heading ({§parse-recovery}); null when the heading carries none."
456
456
  },
457
457
  "body": {
458
458
  "type": ["string", "null"],
459
- "description": "A `log:///` KILL carries its optional distillation, kept as the model's own NOTE row ({§log-kill-distillation}). Other KILLs take no body; their matcher is the `pattern` option."
459
+ "description": "A `log:///` KILL carries its optional distillation, kept as the model's own NOTE row ({§log-kill-scope}). Other KILLs take no body; their matcher rides on the heading line ({§parse-recovery})."
460
460
  },
461
461
  "position": {
462
462
  "$ref": "#/$defs/PositionRef"
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/ProposalDisposition.json",
4
4
  "title": "ProposalDisposition",
5
- "description": "The one core-owned settlement decision. Review waits for the worker's owner; accept and reject carry the automatic resolution core applies.",
5
+ "description": "The one core-owned settlement decision. Review waits for the session's owner; accept and reject carry the automatic resolution core applies.",
6
6
  "oneOf": [
7
7
  {
8
8
  "type": "object",
@@ -2,6 +2,6 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/ProposalPolicy.json",
4
4
  "title": "ProposalPolicy",
5
- "description": "Server disposition for proposals. Review requires the worker's owner; accept and reject settle within core.",
5
+ "description": "Server disposition for proposals. Review requires the session's owner; accept and reject settle within core.",
6
6
  "enum": ["review", "accept", "reject"]
7
7
  }
@@ -6,8 +6,8 @@
6
6
  "type": "object",
7
7
  "required": [
8
8
  "logEntryId",
9
- "workerId",
10
- "worker",
9
+ "sessionId",
10
+ "session",
11
11
  "loopId",
12
12
  "turnId",
13
13
  "coordinate",
@@ -24,12 +24,12 @@
24
24
  "type": "integer",
25
25
  "minimum": 1
26
26
  },
27
- "workerId": {
27
+ "sessionId": {
28
28
  "type": "integer",
29
29
  "minimum": 1
30
30
  },
31
- "worker": {
32
- "description": "The requesting worker's name.",
31
+ "session": {
32
+ "description": "The requesting session's name.",
33
33
  "type": "string",
34
34
  "minLength": 1
35
35
  },
@@ -67,7 +67,7 @@
67
67
  },
68
68
  {
69
69
  "type": "string",
70
- "pattern": "^[a-z][a-z0-9+.-]*$"
70
+ "pattern": "^[a-z][a-z0-9+._-]*$"
71
71
  }
72
72
  ],
73
73
  "tsType": "\"FIND\" | \"READ\" | \"EDIT\" | \"COPY\" | \"MOVE\" | \"SEND\" | \"BARE\" | \"WORK\" | \"FORK\" | \"KILL\" | \"NOTE\" | \"WAIT\" | Lowercase<string>"
@@ -115,6 +115,57 @@
115
115
  "disposition": {
116
116
  "$ref": "https://schemas.plurnk.xyz/v0/ProposalDisposition.json"
117
117
  },
118
+ "selector": {
119
+ "description": "The capability selector for the proposed operation, persisted on allow_always / reject_always.",
120
+ "$ref": "https://schemas.plurnk.xyz/v0/CapabilitySelector.json"
121
+ },
122
+ "subject": {
123
+ "description": "Structured ACP v2 permission subject for the proposed operation.",
124
+ "oneOf": [
125
+ {
126
+ "type": "object",
127
+ "required": ["type", "command", "cwd"],
128
+ "additionalProperties": false,
129
+ "properties": {
130
+ "type": { "const": "command" },
131
+ "command": { "type": "string" },
132
+ "cwd": { "type": "string", "minLength": 1 }
133
+ }
134
+ },
135
+ {
136
+ "type": "object",
137
+ "required": ["type", "kind", "title"],
138
+ "additionalProperties": false,
139
+ "properties": {
140
+ "type": { "const": "tool_call" },
141
+ "kind": {
142
+ "enum": ["read", "edit", "delete", "move", "search", "execute", "think", "fetch", "switch_mode", "other"]
143
+ },
144
+ "title": { "type": "string", "minLength": 1 },
145
+ "locations": {
146
+ "type": "array",
147
+ "items": {
148
+ "type": "object",
149
+ "required": ["path"],
150
+ "additionalProperties": false,
151
+ "properties": {
152
+ "path": { "type": "string", "minLength": 1 }
153
+ }
154
+ }
155
+ },
156
+ "diff": {
157
+ "type": "object",
158
+ "required": ["path", "patch"],
159
+ "additionalProperties": false,
160
+ "properties": {
161
+ "path": { "type": "string" },
162
+ "patch": { "type": "string" }
163
+ }
164
+ }
165
+ }
166
+ }
167
+ ]
168
+ },
118
169
  "expiresAt": {
119
170
  "description": "When the gate stops waiting and core cancels it (ISO 8601); absent while it waits indefinitely.",
120
171
  "type": "string",
@@ -40,7 +40,7 @@
40
40
  ]
41
41
  },
42
42
  "matcher": {
43
- "description": "The selection matcher lifted from the operand's `[{\"pattern\": …}]` option; meaningful on the source operand, refused by the owner on a destination.",
43
+ "description": "Optional selection matcher on the source operand; refused by the owner on a destination.",
44
44
  "oneOf": [
45
45
  {
46
46
  "$ref": "https://schemas.plurnk.xyz/v0/MatcherBody.json"
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schemas.plurnk.xyz/v0/RollbackReport.json",
4
4
  "title": "RollbackReport",
5
- "description": "What a rollback to a log coordinate did ({§rollback}): the file mutations it reversed, latest first, each as an ordinary operation of the acting client; the rows it could not reverse because they kept no patch; and, when it stopped, the row and path where the file no longer matched what that mutation wrote.",
5
+ "description": "What a rollback to a log coordinate did ({§log-wire-format}): the file mutations it reversed, latest first, each as an ordinary operation of the acting client; the rows it could not reverse because they kept no patch; and, when it stopped, the row and path where the file no longer matched what that mutation wrote.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": ["to", "restored", "skipped", "stopped"],
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.plurnk.xyz/v0/WorkerOwner.json",
4
- "title": "WorkerOwner",
3
+ "$id": "https://schemas.plurnk.xyz/v0/SessionOwner.json",
4
+ "title": "SessionOwner",
5
5
  "description": "A workspace-scoped approval owner, the client tools it implements, and whether a person attends it. Capabilities persist while disconnected; a message never changes ownership.",
6
6
  "type": "object",
7
7
  "required": ["address", "tools", "interactive"],
@@ -5,14 +5,7 @@
5
5
  "description": "One standard Agent Skill and its source. Source locations are inputs, not installation scopes.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
- "required": ["name"],
9
8
  "properties": {
10
- "name": {
11
- "description": "The standard Agent Skills name: Unicode lowercase or uncased letters and numbers joined by single hyphens, equal to the skill's directory name.",
12
- "type": "string",
13
- "pattern": "^(?!.*[\\p{Uppercase}\\p{Lt}])[\\p{L}\\p{N}]+(?:-[\\p{L}\\p{N}]+)*$",
14
- "maxLength": 64
15
- },
16
9
  "source": {
17
10
  "description": "A local skill folder or its SKILL.md (read in place), a Git remote, or an archive (materialized into workspace storage). Required for configured and added skills; omitted only for a host-provided tree.",
18
11
  "type": "string",
@@ -28,5 +21,13 @@
28
21
  "type": "string",
29
22
  "pattern": "^[0-9a-f]{40}(?:[0-9a-f]{24})?$"
30
23
  }
24
+ },
25
+ "$defs": {
26
+ "name": {
27
+ "description": "The standard Agent Skills name: Unicode lowercase or uncased letters and numbers joined by single hyphens, equal to the skill's directory name.",
28
+ "type": "string",
29
+ "pattern": "^(?!.{65}|.*[\\p{Uppercase}\\p{Lt}])[\\p{L}\\p{N}]+(?:-[\\p{L}\\p{N}]+)*$",
30
+ "maxLength": 64
31
+ }
31
32
  }
32
33
  }