@plurnk/plurnk-grammar 0.5.0 → 0.7.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.
- package/dist/schema/LogEntry.json +9 -0
- package/dist/schema/Packet.json +1 -2
- package/dist/schema/ProviderDeclaration.json +3 -3
- package/dist/schema/Turn.json +10 -1
- package/dist/src/types.generated.d.ts +19 -4
- package/dist/src/types.generated.d.ts.map +1 -1
- package/package.json +1 -1
- package/plurnk.md +35 -34
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"lineMarker",
|
|
14
14
|
"tx", "mimetype_tx",
|
|
15
15
|
"rx", "mimetype_rx", "status_rx",
|
|
16
|
+
"state", "outcome",
|
|
16
17
|
"tokens"
|
|
17
18
|
],
|
|
18
19
|
"additionalProperties": false,
|
|
@@ -62,6 +63,14 @@
|
|
|
62
63
|
"rx": { "type": "string", "description": "Raw response payload bytes/string." },
|
|
63
64
|
"mimetype_rx": { "type": "string", "minLength": 1 },
|
|
64
65
|
"status_rx": { "type": "integer", "minimum": 100, "maximum": 599 },
|
|
66
|
+
"state": {
|
|
67
|
+
"enum": ["proposed", "resolved", "failed", "cancelled"],
|
|
68
|
+
"description": "Lifecycle position; orthogonal to status_rx. status_rx is the HTTP-aligned outcome of the network call; state is where the entry sits in the proposal lifecycle. Side-effecting ops that route through a proposal flow transition proposed → {resolved | failed | cancelled}; non-proposing ops settle at 'resolved' on first write."
|
|
69
|
+
},
|
|
70
|
+
"outcome": {
|
|
71
|
+
"type": ["string", "null"],
|
|
72
|
+
"description": "Short reason string when state ∈ {failed, cancelled}; null otherwise. Common values: rejected, loop_aborted, timeout, policy_veto, apply_failed, write_failed. Open vocabulary — schemes mint their own as needed."
|
|
73
|
+
},
|
|
65
74
|
"tokens": { "type": "integer", "minimum": 0 }
|
|
66
75
|
},
|
|
67
76
|
"allOf": [
|
package/dist/schema/Packet.json
CHANGED
|
@@ -56,10 +56,9 @@
|
|
|
56
56
|
},
|
|
57
57
|
"assistant": {
|
|
58
58
|
"type": "object",
|
|
59
|
-
"required": ["
|
|
59
|
+
"required": ["content", "ops", "reasoning"],
|
|
60
60
|
"additionalProperties": true,
|
|
61
61
|
"properties": {
|
|
62
|
-
"tokens": { "type": "integer", "minimum": 0 },
|
|
63
62
|
"content": { "type": "string", "description": "Raw DSL string emitted by the model." },
|
|
64
63
|
"ops": {
|
|
65
64
|
"type": "array",
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"required": ["provider", "family", "model", "contextSize", "currency"],
|
|
8
8
|
"additionalProperties": false,
|
|
9
9
|
"properties": {
|
|
10
|
-
"provider": { "type": "string", "minLength": 1, "description": "API vendor identifier (e.g. \"
|
|
11
|
-
"family": { "type": "string", "minLength": 1, "description": "Model family (e.g. \"
|
|
12
|
-
"model": { "type": "string", "minLength": 1, "description": "Specific model id (e.g. \"
|
|
10
|
+
"provider": { "type": "string", "minLength": 1, "description": "API vendor identifier (e.g. \"local\", \"openrouter\", \"anthropic\", \"openai\")." },
|
|
11
|
+
"family": { "type": "string", "minLength": 1, "description": "Model family (e.g. \"gemma\", \"llama\", \"qwen\", \"claude\", \"gpt\", \"gemini\")." },
|
|
12
|
+
"model": { "type": "string", "minLength": 1, "description": "Specific model id (e.g. \"gemma3-12b\")." },
|
|
13
13
|
"contextSize": { "type": "integer", "minimum": 1, "description": "Total context window in tokens." },
|
|
14
14
|
"currency": { "type": "string", "pattern": "^[A-Z]{3}$", "description": "ISO 4217 code; the unit `cost_pico` is denominated in." }
|
|
15
15
|
}
|
package/dist/schema/Turn.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"title": "Turn",
|
|
5
5
|
"description": "The leaf of the envelope hierarchy. One model-provider exchange. Persists the full packet plus provider-returned usage and the turn-level status.",
|
|
6
6
|
"type": "object",
|
|
7
|
-
"required": ["id", "version", "loop_id", "sequence", "timestamp", "status", "usage", "packet"],
|
|
7
|
+
"required": ["id", "version", "loop_id", "sequence", "timestamp", "status", "usage", "finish_reason", "model", "packet"],
|
|
8
8
|
"additionalProperties": false,
|
|
9
9
|
"properties": {
|
|
10
10
|
"id": { "type": "integer", "minimum": 1 },
|
|
@@ -25,6 +25,15 @@
|
|
|
25
25
|
"cost_pico": { "type": "integer", "minimum": 0, "description": "Per-turn cost in pico-units of the active provider's currency." }
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
|
+
"finish_reason": {
|
|
29
|
+
"type": ["string", "null"],
|
|
30
|
+
"description": "Provider-reported completion-state token (`stop` | `length` | `tool_calls` | `content_filter` | provider-specific). Null when not reported. Distinct from `status` (HTTP-aligned turn outcome); `finish_reason` describes how the model stopped, `status` describes how the turn resolved."
|
|
31
|
+
},
|
|
32
|
+
"model": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"minLength": 1,
|
|
35
|
+
"description": "Wire-reported model identifier. May differ from `agent.provider.model` for routing-relay providers (OpenRouter, etc.); the verification surface for served-vs-requested alignment."
|
|
36
|
+
},
|
|
28
37
|
"packet": { "$ref": "https://schemas.plurnk.dev/v0/Packet.json" }
|
|
29
38
|
}
|
|
30
39
|
}
|
|
@@ -11,15 +11,15 @@ export interface Agent {
|
|
|
11
11
|
*/
|
|
12
12
|
export interface ProviderDeclaration {
|
|
13
13
|
/**
|
|
14
|
-
* API vendor identifier (e.g. "
|
|
14
|
+
* API vendor identifier (e.g. "local", "openrouter", "anthropic", "openai").
|
|
15
15
|
*/
|
|
16
16
|
provider: string;
|
|
17
17
|
/**
|
|
18
|
-
* Model family (e.g. "
|
|
18
|
+
* Model family (e.g. "gemma", "llama", "qwen", "claude", "gpt", "gemini").
|
|
19
19
|
*/
|
|
20
20
|
family: string;
|
|
21
21
|
/**
|
|
22
|
-
* Specific model id (e.g. "
|
|
22
|
+
* Specific model id (e.g. "gemma3-12b").
|
|
23
23
|
*/
|
|
24
24
|
model: string;
|
|
25
25
|
/**
|
|
@@ -143,6 +143,14 @@ export type LogEntry = ({
|
|
|
143
143
|
rx: string;
|
|
144
144
|
mimetype_rx: string;
|
|
145
145
|
status_rx: number;
|
|
146
|
+
/**
|
|
147
|
+
* Lifecycle position; orthogonal to status_rx. status_rx is the HTTP-aligned outcome of the network call; state is where the entry sits in the proposal lifecycle. Side-effecting ops that route through a proposal flow transition proposed → {resolved | failed | cancelled}; non-proposing ops settle at 'resolved' on first write.
|
|
148
|
+
*/
|
|
149
|
+
state: ("proposed" | "resolved" | "failed" | "cancelled");
|
|
150
|
+
/**
|
|
151
|
+
* Short reason string when state ∈ {failed, cancelled}; null otherwise. Common values: rejected, loop_aborted, timeout, policy_veto, apply_failed, write_failed. Open vocabulary — schemes mint their own as needed.
|
|
152
|
+
*/
|
|
153
|
+
outcome: (string | null);
|
|
146
154
|
tokens: number;
|
|
147
155
|
});
|
|
148
156
|
/**
|
|
@@ -247,7 +255,6 @@ export interface Packet {
|
|
|
247
255
|
system_requirements: string;
|
|
248
256
|
};
|
|
249
257
|
assistant: {
|
|
250
|
-
tokens: number;
|
|
251
258
|
/**
|
|
252
259
|
* Raw DSL string emitted by the model.
|
|
253
260
|
*/
|
|
@@ -452,6 +459,14 @@ export interface Turn {
|
|
|
452
459
|
*/
|
|
453
460
|
cost_pico: number;
|
|
454
461
|
};
|
|
462
|
+
/**
|
|
463
|
+
* Provider-reported completion-state token (`stop` | `length` | `tool_calls` | `content_filter` | provider-specific). Null when not reported. Distinct from `status` (HTTP-aligned turn outcome); `finish_reason` describes how the model stopped, `status` describes how the turn resolved.
|
|
464
|
+
*/
|
|
465
|
+
finish_reason: (string | null);
|
|
466
|
+
/**
|
|
467
|
+
* Wire-reported model identifier. May differ from `agent.provider.model` for routing-relay providers (OpenRouter, etc.); the verification surface for served-vs-requested alignment.
|
|
468
|
+
*/
|
|
469
|
+
model: string;
|
|
455
470
|
packet: Packet;
|
|
456
471
|
}
|
|
457
472
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.generated.d.ts","sourceRoot":"","sources":["../../src/types.generated.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.generated.d.ts","sourceRoot":"","sources":["../../src/types.generated.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/plurnk.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Plurnk System Grammar
|
|
2
2
|
|
|
3
|
-
YOU MUST ONLY use the HEREDOC
|
|
3
|
+
YOU MUST ONLY use the Extended HEREDOC Plurnk Operations (FIND|READ|EDIT|COPY|MOVE|SHOW|HIDE|SEND|EXEC).
|
|
4
4
|
|
|
5
5
|
## Syntax
|
|
6
6
|
|
|
@@ -8,27 +8,31 @@ YOU MUST ONLY use the HEREDOC-inspired Plurnk Operations (FIND|READ|EDIT|COPY|MO
|
|
|
8
8
|
<<OPsuffix[signal]?(path)?<L>?:body?:OPsuffix
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
Slots between `<<OPsuffix` and `:body:` are all optional. `:body:` fences are required (use `::` when body is empty).
|
|
11
|
+
Slots between `<<OPsuffix` and `:body:` are all optional. `:body:` fences are required (use `::` when body is empty).
|
|
12
12
|
|
|
13
13
|
## Operations
|
|
14
14
|
|
|
15
|
-
| OP | `[signal]`
|
|
16
|
-
|
|
17
|
-
| FIND | filter tags
|
|
18
|
-
| READ | filter tags
|
|
19
|
-
| EDIT | tags
|
|
20
|
-
| COPY | apply tags
|
|
21
|
-
| MOVE | apply tags
|
|
22
|
-
| SHOW | filter tags
|
|
23
|
-
| HIDE | filter tags
|
|
24
|
-
| SEND |
|
|
25
|
-
| EXEC |
|
|
26
|
-
|
|
27
|
-
SEND
|
|
15
|
+
| OP | `[signal]` | `(path)` | `<L>` | body |
|
|
16
|
+
|------|-------------|-----------|------------------|--------------------------|
|
|
17
|
+
| FIND | filter tags | required | results `N-M` | matcher |
|
|
18
|
+
| READ | filter tags | required | lines `N-M` | matcher |
|
|
19
|
+
| EDIT | tags | required | lines `N-M` | content (empty = clear) |
|
|
20
|
+
| COPY | apply tags | required | lines `N-M` | destination URI |
|
|
21
|
+
| MOVE | apply tags | required | lines `N-M` | destination URI |
|
|
22
|
+
| SHOW | filter tags | required | results `N-M` | matcher |
|
|
23
|
+
| HIDE | filter tags | required | results `N-M` | matcher |
|
|
24
|
+
| SEND | status code | recipient | — | message body |
|
|
25
|
+
| EXEC | runtime tag | cwd | — | command or code |
|
|
26
|
+
|
|
27
|
+
SEND broadcasts to uri when a path is included and messages the user when no path is included.
|
|
28
|
+
EXEC may include an optional runtime tag (`"sh"`, `"node"`, etc.).
|
|
28
29
|
|
|
29
30
|
## `<L>`
|
|
30
31
|
|
|
31
|
-
`<N>` selects position N.
|
|
32
|
+
`<N>` selects position N.
|
|
33
|
+
`<N-M>` selects the inclusive range N-M. N and M are signed integers.
|
|
34
|
+
|
|
35
|
+
Sentinels: `<0>` before position 1 (prepend), `<-1>` after the last position (append).
|
|
32
36
|
|
|
33
37
|
## Body matcher dispatch (FIND, READ, SHOW, HIDE)
|
|
34
38
|
|
|
@@ -53,21 +57,24 @@ Internal schemes:
|
|
|
53
57
|
- `unknown://` — pending / open questions.
|
|
54
58
|
- `known://` — knowledgebase entries.
|
|
55
59
|
- `skill://` — available skill entries.
|
|
56
|
-
- `
|
|
57
|
-
- `
|
|
60
|
+
- `exec://` — actions.
|
|
61
|
+
- `log://` — internal record of commands performed.
|
|
58
62
|
|
|
59
63
|
## Context
|
|
60
64
|
|
|
61
|
-
The agent maintains two contexts:
|
|
65
|
+
The agent maintains two contexts for budgeting tokens for working memory and available storage:
|
|
62
66
|
|
|
63
67
|
- **Index** — entries listed in the active index.
|
|
64
68
|
- **Archive** — entries archived; out of working memory (HIDE), but promotable (SHOW) by path or pattern lookup.
|
|
65
69
|
|
|
66
|
-
`SHOW` promotes matching entries to the active index
|
|
70
|
+
`SHOW` promotes matching entries to the active index and spends tokens.
|
|
71
|
+
`HIDE` demotes matching entries to archive and saves tokens.
|
|
72
|
+
|
|
73
|
+
YOU SHOULD demote distilled and irrelevant entries to Archive with HIDE to save tokens and optimize context relevance.
|
|
67
74
|
|
|
68
75
|
## Suffix
|
|
69
76
|
|
|
70
|
-
|
|
77
|
+
YOU MAY use an optional matching suffix on the opening and closing tags for disambiguation.
|
|
71
78
|
|
|
72
79
|
```
|
|
73
80
|
<<EDITouter(known://demo):
|
|
@@ -75,6 +82,10 @@ quoted: <<EDIT(known://inner):hello:EDIT
|
|
|
75
82
|
:EDITouter
|
|
76
83
|
```
|
|
77
84
|
|
|
85
|
+
## Body
|
|
86
|
+
|
|
87
|
+
Body content is character-perfect, exactly matching whitespace.
|
|
88
|
+
|
|
78
89
|
## Examples
|
|
79
90
|
|
|
80
91
|
```
|
|
@@ -100,17 +111,7 @@ quoted: <<EDIT(known://inner):hello:EDIT
|
|
|
100
111
|
const sum = [1, 2, 3].reduce((a, b) => a + b, 0);
|
|
101
112
|
console.log(sum);
|
|
102
113
|
:EXEC
|
|
103
|
-
<<SEND[102]:decomposed prompt; plan initialized:SEND
|
|
104
|
-
<<SEND[200]:{"
|
|
114
|
+
<<SEND[102]:decomposed prompt into unknowns; plan initialized:SEND
|
|
115
|
+
<<SEND[200]:{"city":"Paris","population":2161000}:SEND
|
|
116
|
+
<<SEND[200]:Paris:SEND
|
|
105
117
|
```
|
|
106
|
-
|
|
107
|
-
## Invariants
|
|
108
|
-
|
|
109
|
-
- `<<OPsuffix` and `:OPsuffix` MUST character-match.
|
|
110
|
-
- `:body:` fences MUST be present (use `::` for empty body).
|
|
111
|
-
- `:` and `OPsuffix` in the close tag MUST be character-adjacent.
|
|
112
|
-
- Header slot order MUST be `[signal]` → `(path)` → `<L>` → `:`.
|
|
113
|
-
- Inside `[…]`, `(…)`, `<…>`, between `OP` and `suffix` — no whitespace.
|
|
114
|
-
- Between header elements — whitespace is non-significant.
|
|
115
|
-
- Inside body — whitespace and newlines are preserved verbatim.
|
|
116
|
-
- A body containing `:OPkeyword` MUST use a suffix on the enclosing statement.
|