@plurnk/plurnk-parser 1.18.0 → 1.19.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/README.md +1 -2
- package/SPEC.md +2 -10
- package/dist/AstBuilder.d.ts +5 -1
- package/dist/AstBuilder.d.ts.map +1 -1
- package/dist/AstBuilder.js +74 -44
- package/dist/AstBuilder.js.map +1 -1
- package/dist/HeadingTokens.d.ts +6 -0
- package/dist/HeadingTokens.d.ts.map +1 -0
- package/dist/HeadingTokens.js +60 -0
- package/dist/HeadingTokens.js.map +1 -0
- package/dist/NativeToolCalls.d.ts +6 -0
- package/dist/NativeToolCalls.d.ts.map +1 -0
- package/dist/NativeToolCalls.js +153 -0
- package/dist/NativeToolCalls.js.map +1 -0
- package/dist/PlurnkErrorStrategy.d.ts.map +1 -1
- package/dist/PlurnkErrorStrategy.js +10 -33
- package/dist/PlurnkErrorStrategy.js.map +1 -1
- package/dist/PlurnkParser.d.ts +4 -2
- package/dist/PlurnkParser.d.ts.map +1 -1
- package/dist/PlurnkParser.js +132 -29
- package/dist/PlurnkParser.js.map +1 -1
- package/dist/RecordingListener.d.ts.map +1 -1
- package/dist/RecordingListener.js +5 -23
- package/dist/RecordingListener.js.map +1 -1
- package/dist/generated/plurnkLexer.d.ts +70 -34
- package/dist/generated/plurnkLexer.d.ts.map +1 -1
- package/dist/generated/plurnkLexer.js +817 -437
- package/dist/generated/plurnkLexer.js.map +1 -1
- package/dist/generated/plurnkParser.d.ts +81 -84
- package/dist/generated/plurnkParser.d.ts.map +1 -1
- package/dist/generated/plurnkParser.js +621 -672
- package/dist/generated/plurnkParser.js.map +1 -1
- package/dist/generated/plurnkParserVisitor.d.ts +7 -14
- package/dist/generated/plurnkParserVisitor.d.ts.map +1 -1
- package/dist/generated/plurnkParserVisitor.js +6 -12
- package/dist/generated/plurnkParserVisitor.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
// {§native-tool-calls} — a model's native tool-call markup that names a plurnk operation is read
|
|
2
|
+
// as that operation (#760). DeepSeek emits `<||DSML|| invoke name="READ">` with parameters named
|
|
3
|
+
// after plurnk's own slots; the intent is unambiguous, so it is rewritten to the canonical fence and
|
|
4
|
+
// never taught. Each block keeps its line count, so parsed positions still point at the source.
|
|
5
|
+
// Any invoke this cannot map exactly (unknown name, unknown parameter) leaves the whole input as is.
|
|
6
|
+
const TAG = "(?:<||DSML||\\s*|<)";
|
|
7
|
+
const CALLS_OPEN = new RegExp(`^\\s*${TAG}calls>\\s*$`);
|
|
8
|
+
const CALLS_CLOSE = new RegExp(`^\\s*</(?:||DSML||\\s*)?calls>\\s*$`);
|
|
9
|
+
const INVOKE_OPEN = new RegExp(`^\\s*<||DSML||\\s*invoke\\s+name="([^"]+)"(.*)$`);
|
|
10
|
+
const INVOKE_CLOSE = new RegExp(`^\\s*</(?:||DSML||\\s*)?invoke>\\s*$`);
|
|
11
|
+
const PARAMETER = new RegExp(`^\\s*${TAG}parameter\\s+name="([^"]+)"[^>]*>(.*?)</(?:||DSML||\\s*)?parameter>\\s*$`);
|
|
12
|
+
const STRAY_PARAMETER_CLOSE = new RegExp(`^\\s*</(?:||DSML||\\s*)?parameter>\\s*$`);
|
|
13
|
+
const FENCE_LINE = /^\s*`{3,}\s*$/;
|
|
14
|
+
const OPERATIONS = new Set(["FIND", "READ", "EDIT", "COPY", "MOVE", "KILL", "SEND", "NOTE", "WAIT", "BARE", "WORK", "FORK"]);
|
|
15
|
+
const SLOT_OF = Object.freeze({
|
|
16
|
+
path: "path", target: "path",
|
|
17
|
+
scope: "scope", range: "scope", lines: "scope",
|
|
18
|
+
pattern: "pattern",
|
|
19
|
+
aside: "aside",
|
|
20
|
+
body: "body", content: "body", command: "body",
|
|
21
|
+
});
|
|
22
|
+
export default class NativeToolCalls {
|
|
23
|
+
static #MARKER = "DSML";
|
|
24
|
+
// The lines that belong to native markup: each `calls>` block to its close, or to the next
|
|
25
|
+
// block's opening. Fence lines inside them are the markup's own, not Markdown quotation.
|
|
26
|
+
static markupLines(input) {
|
|
27
|
+
const lines = input.split("\n");
|
|
28
|
+
const inside = new Set();
|
|
29
|
+
let open = false;
|
|
30
|
+
lines.forEach((line, index) => {
|
|
31
|
+
if (CALLS_OPEN.test(line))
|
|
32
|
+
open = true;
|
|
33
|
+
if (open)
|
|
34
|
+
inside.add(index);
|
|
35
|
+
if (CALLS_CLOSE.test(line))
|
|
36
|
+
open = false;
|
|
37
|
+
});
|
|
38
|
+
return inside;
|
|
39
|
+
}
|
|
40
|
+
// Returns the rewritten input, or null when there is nothing to rewrite or any invoke is unmappable.
|
|
41
|
+
// A block whose opening line is quoted ({§quotation}) is an example, never a call.
|
|
42
|
+
static rewrite(input, executors, quotedLines = new Set()) {
|
|
43
|
+
if (!input.includes(NativeToolCalls.#MARKER))
|
|
44
|
+
return null;
|
|
45
|
+
const known = new Set(executors.map((name) => name.toLowerCase()));
|
|
46
|
+
const lines = input.split("\n");
|
|
47
|
+
const out = [];
|
|
48
|
+
let rewrote = false;
|
|
49
|
+
for (let i = 0; i < lines.length; i++) {
|
|
50
|
+
if (quotedLines.has(i) || !CALLS_OPEN.test(lines[i])) {
|
|
51
|
+
out.push(lines[i]);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const start = i;
|
|
55
|
+
const fences = [];
|
|
56
|
+
let current = null;
|
|
57
|
+
// Each fence's heading lands on its invoke's own line when the space allows.
|
|
58
|
+
const finish = () => {
|
|
59
|
+
if (current === null)
|
|
60
|
+
return;
|
|
61
|
+
while (fences.length < current.line - start)
|
|
62
|
+
fences.push("");
|
|
63
|
+
fences.push(...NativeToolCalls.#fence(current.name, current.slots));
|
|
64
|
+
current = null;
|
|
65
|
+
};
|
|
66
|
+
let end = lines.length - 1;
|
|
67
|
+
for (i = start + 1; i < lines.length; i++) {
|
|
68
|
+
const line = lines[i];
|
|
69
|
+
if (CALLS_CLOSE.test(line)) {
|
|
70
|
+
end = i;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
if (CALLS_OPEN.test(line)) {
|
|
74
|
+
end = i - 1;
|
|
75
|
+
i--;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
const invoke = INVOKE_OPEN.exec(line);
|
|
79
|
+
if (invoke !== null) {
|
|
80
|
+
finish();
|
|
81
|
+
const name = invoke[1];
|
|
82
|
+
const op = OPERATIONS.has(name.toUpperCase()) ? name.toUpperCase() : known.has(name.toLowerCase()) ? name : null;
|
|
83
|
+
if (op === null)
|
|
84
|
+
return null;
|
|
85
|
+
const slots = NativeToolCalls.#headingSlots(invoke[2]);
|
|
86
|
+
if (slots === null)
|
|
87
|
+
return null;
|
|
88
|
+
current = { name: op, slots, line: i };
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (INVOKE_CLOSE.test(line) || STRAY_PARAMETER_CLOSE.test(line) || FENCE_LINE.test(line)) {
|
|
92
|
+
finish();
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const parameter = PARAMETER.exec(line);
|
|
96
|
+
if (parameter !== null) {
|
|
97
|
+
const slot = SLOT_OF[parameter[1]];
|
|
98
|
+
if (current === null || slot === undefined)
|
|
99
|
+
return null;
|
|
100
|
+
if (slot === "body")
|
|
101
|
+
current.slots.body.push(parameter[2]);
|
|
102
|
+
else
|
|
103
|
+
current.slots[slot] = parameter[2];
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (current === null) {
|
|
107
|
+
if (line.trim().length > 0)
|
|
108
|
+
return null;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
current.slots.body.push(line);
|
|
112
|
+
}
|
|
113
|
+
finish();
|
|
114
|
+
if (!fences.some((line) => line.length > 0))
|
|
115
|
+
return null;
|
|
116
|
+
const span = end - start + 1;
|
|
117
|
+
out.push(...fences, ...Array.from({ length: Math.max(0, span - fences.length) }, () => ""));
|
|
118
|
+
i = end;
|
|
119
|
+
rewrote = true;
|
|
120
|
+
}
|
|
121
|
+
return rewrote ? out.join("\n") : null;
|
|
122
|
+
}
|
|
123
|
+
// Attributes on the invoke line (`path="…"`, `range="…"`, `aside="…"`) and any plurnk slots the
|
|
124
|
+
// model wrote verbatim after the name (`[{"cwd":"."}] <!-- … -->`).
|
|
125
|
+
static #headingSlots(rest) {
|
|
126
|
+
const slots = { body: [], extra: "" };
|
|
127
|
+
let remainder = rest.replace(/(?<!--)\/?>\s*$/, "");
|
|
128
|
+
for (const [whole, key, value] of remainder.matchAll(/\s([a-z]+)="([^"]*)"/g)) {
|
|
129
|
+
const slot = SLOT_OF[key];
|
|
130
|
+
if (slot === undefined || slot === "body")
|
|
131
|
+
return null;
|
|
132
|
+
slots[slot] = value;
|
|
133
|
+
remainder = remainder.replace(whole, "");
|
|
134
|
+
}
|
|
135
|
+
slots.extra = remainder.trim();
|
|
136
|
+
return slots;
|
|
137
|
+
}
|
|
138
|
+
static #fence(name, slots) {
|
|
139
|
+
const scope = slots.scope === undefined ? "" : slots.scope.trim();
|
|
140
|
+
const heading = [
|
|
141
|
+
name,
|
|
142
|
+
slots.path === undefined ? "" : `(${slots.path.trim()})`,
|
|
143
|
+
scope === "" ? "" : scope.startsWith("<") ? scope : `<${scope}>`,
|
|
144
|
+
slots.pattern === undefined ? "" : `[${JSON.stringify({ pattern: slots.pattern })}]`,
|
|
145
|
+
slots.extra,
|
|
146
|
+
slots.aside === undefined ? "" : `<!-- ${slots.aside.trim()} -->`,
|
|
147
|
+
].filter((part) => part.length > 0).join(" ");
|
|
148
|
+
const longest = slots.body.reduce((max, line) => Math.max(max, /`+/.exec(line)?.[0].length ?? 0), 0);
|
|
149
|
+
const fence = "`".repeat(Math.max(4, longest + 1));
|
|
150
|
+
return [`${fence}${heading}`, ...slots.body, fence];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=NativeToolCalls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeToolCalls.js","sourceRoot":"","sources":["../src/NativeToolCalls.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlurnkErrorStrategy.d.ts","sourceRoot":"","sources":["../src/PlurnkErrorStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EAIpB,KAAK,MAAM,EACX,KAAK,oBAAoB,EAC5B,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,oBAAoB;;
|
|
1
|
+
{"version":3,"file":"PlurnkErrorStrategy.d.ts","sourceRoot":"","sources":["../src/PlurnkErrorStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EAIpB,KAAK,MAAM,EACX,KAAK,oBAAoB,EAC5B,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,oBAAoB;;IAwCjE,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA4C5E;IAgGe,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB,GAAG,IAAI,CAmB1E;IAEe,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAe7E;IAEe,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAiB3D;IAEe,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAmB5D;CACJ"}
|
|
@@ -17,7 +17,8 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
17
17
|
[plurnkParser.OPEN_COPY]: "operation fence header",
|
|
18
18
|
[plurnkParser.OPEN_MOVE]: "operation fence header",
|
|
19
19
|
[plurnkParser.OPEN_SEND]: "operation fence header",
|
|
20
|
-
[plurnkParser.
|
|
20
|
+
[plurnkParser.OPEN_NOTE]: "operation fence header",
|
|
21
|
+
[plurnkParser.OPEN_WAIT]: "operation fence header",
|
|
21
22
|
[plurnkParser.OPEN_EXEC]: "operation fence header",
|
|
22
23
|
[plurnkParser.OPEN_BARE]: "operation fence header",
|
|
23
24
|
[plurnkParser.OPEN_WORK]: "operation fence header",
|
|
@@ -40,7 +41,7 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
40
41
|
const context = PlurnkErrorStrategy.#LEXER_MODE_CONTEXT[modeName] ?? "between statements";
|
|
41
42
|
const ch = PlurnkErrorStrategy.#extractOffendingChar(originalMsg);
|
|
42
43
|
if (modeName === "SLOTS" && ch.startsWith("'[")) {
|
|
43
|
-
return lexer.getOpenOp()
|
|
44
|
+
return ["NOTE", "WAIT"].includes(lexer.getOpenOp())
|
|
44
45
|
? `${lexer.getOpenOp()}'s body begins below the header`
|
|
45
46
|
: "unexpected bracket modifier; the fence name selects the executor";
|
|
46
47
|
}
|
|
@@ -55,11 +56,13 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
55
56
|
const op = lexer.getOpenOp();
|
|
56
57
|
const constraint = op === "FIND"
|
|
57
58
|
? "use numeric result positions, e.g. `<1,16>`"
|
|
58
|
-
: lexer.isExecFence()
|
|
59
|
+
: lexer.isExecFence()
|
|
59
60
|
? "use minutes, e.g. `<5,1>`"
|
|
60
|
-
:
|
|
61
|
-
? "use numeric
|
|
62
|
-
:
|
|
61
|
+
: op === "SEND"
|
|
62
|
+
? "use a numeric scope supported by the recipient"
|
|
63
|
+
: lexer.isTextCoordinateOp()
|
|
64
|
+
? "use numeric coordinates or `@hash` line anchors"
|
|
65
|
+
: "this operation takes no scope";
|
|
63
66
|
return `invalid ${op} scope ${JSON.stringify(PlurnkErrorStrategy.#scopeExcerpt(lexer))}; ${constraint}`;
|
|
64
67
|
}
|
|
65
68
|
if (modeName === "SLOTS" && (/^'[$~@]'$/.test(ch)
|
|
@@ -169,28 +172,12 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
169
172
|
return `${names[0]} or ${names[1]}`;
|
|
170
173
|
return `${names.slice(0, -1).join(", ")}, or ${names[names.length - 1]}`;
|
|
171
174
|
}
|
|
172
|
-
// A second `(` on a heading that already closed a `(path)`: the heading has one path slot
|
|
173
|
-
// and a matcher belongs beneath it.
|
|
174
|
-
static #secondPathSlotMessage(recognizer, tok) {
|
|
175
|
-
if (tok?.type !== plurnkParser.LPAREN)
|
|
176
|
-
return null;
|
|
177
|
-
const stream = recognizer.tokenStream;
|
|
178
|
-
for (let i = tok.tokenIndex - 1; i >= 0; i -= 1) {
|
|
179
|
-
const prior = stream.get(i);
|
|
180
|
-
if (prior.line !== tok.line)
|
|
181
|
-
return null;
|
|
182
|
-
if (prior.type === plurnkParser.RPAREN) {
|
|
183
|
-
return { at: tok, message: 'a heading takes exactly one `(path)` slot; a pattern belongs in the heading as `[{"pattern": "…"}]`' };
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
175
|
// {§matcher-prefix-claims} Recovery resumes at the next top-level operation fence;
|
|
189
176
|
// later statements, including the disposition, are judged independently.
|
|
190
177
|
static #HEADING_BOUNDARY = new Set([
|
|
191
178
|
plurnkParser.OPEN_FIND, plurnkParser.OPEN_READ, plurnkParser.OPEN_EDIT,
|
|
192
179
|
plurnkParser.OPEN_COPY, plurnkParser.OPEN_MOVE,
|
|
193
|
-
plurnkParser.OPEN_SEND, plurnkParser.
|
|
180
|
+
plurnkParser.OPEN_SEND, plurnkParser.OPEN_NOTE, plurnkParser.OPEN_WAIT,
|
|
194
181
|
plurnkParser.OPEN_EXEC, plurnkParser.OPEN_BARE, plurnkParser.OPEN_WORK,
|
|
195
182
|
plurnkParser.OPEN_FORK, plurnkParser.OPEN_KILL, plurnkParser.OPEN_LOOK,
|
|
196
183
|
]);
|
|
@@ -227,11 +214,6 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
227
214
|
if (this.inErrorRecoveryMode(recognizer))
|
|
228
215
|
return;
|
|
229
216
|
this.beginErrorCondition(recognizer);
|
|
230
|
-
const secondSlot = PlurnkErrorStrategy.#secondPathSlotMessage(recognizer, e.offendingToken);
|
|
231
|
-
if (secondSlot !== null) {
|
|
232
|
-
recognizer.notifyErrorListeners(secondSlot.message, secondSlot.at, e);
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
217
|
const got = PlurnkErrorStrategy.#describeToken(e.offendingToken);
|
|
236
218
|
const expected = PlurnkErrorStrategy.#describeExpected(e);
|
|
237
219
|
let msg;
|
|
@@ -265,11 +247,6 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
265
247
|
return;
|
|
266
248
|
this.beginErrorCondition(recognizer);
|
|
267
249
|
const tok = recognizer.getCurrentToken();
|
|
268
|
-
const secondSlot = PlurnkErrorStrategy.#secondPathSlotMessage(recognizer, tok);
|
|
269
|
-
if (secondSlot !== null) {
|
|
270
|
-
recognizer.notifyErrorListeners(secondSlot.message, secondSlot.at, null);
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
250
|
const got = PlurnkErrorStrategy.#describeToken(tok);
|
|
274
251
|
const expectedTokens = this.getExpectedTokens(recognizer);
|
|
275
252
|
const expectedNames = [...new Set(expectedTokens
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlurnkErrorStrategy.js","sourceRoot":"","sources":["../src/PlurnkErrorStrategy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlurnkErrorStrategy.js","sourceRoot":"","sources":["../src/PlurnkErrorStrategy.ts"],"names":[],"mappings":"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"}
|
package/dist/PlurnkParser.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ClientStatement, type ParseResult } from "@plurnk/plurnk-contracts";
|
|
1
|
+
import { type ClientStatement, type NoteStatement, type ParseResult } from "@plurnk/plurnk-contracts";
|
|
2
2
|
export interface ParseOptions {
|
|
3
3
|
readonly executors?: readonly string[];
|
|
4
4
|
}
|
|
@@ -7,9 +7,11 @@ export default class PlurnkParser {
|
|
|
7
7
|
static readonly NO_VALID_OPERATION = "no valid Plurnk operation was found.";
|
|
8
8
|
static frame(header: string, body: string | null): string;
|
|
9
9
|
static stringify(statements: readonly ClientStatement[]): string;
|
|
10
|
+
static operationAttempt(input: string, executors?: readonly string[]): string | null;
|
|
11
|
+
static unquoted(input: string, executors?: readonly string[]): string;
|
|
10
12
|
static parse(input: string, options?: ParseOptions): ParseResult;
|
|
13
|
+
static parseReasoningNotes(input: string): NoteStatement[];
|
|
11
14
|
static parseStatements(input: string, options?: ParseOptions): ParseResult;
|
|
12
|
-
static parseLog(input: string, options?: ParseOptions): ParseResult;
|
|
13
15
|
static parseClient(input: string, options?: ParseOptions): ParseResult<ClientStatement>;
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=PlurnkParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlurnkParser.d.ts","sourceRoot":"","sources":["../src/PlurnkParser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlurnkParser.d.ts","sourceRoot":"","sources":["../src/PlurnkParser.ts"],"names":[],"mappings":"AAQA,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,KAAK,WAAW,EAInB,MAAM,0BAA0B,CAAC;AAqBlC,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;;IAC7B,MAAM,CAAC,QAAQ,CAAC,kBAAkB,0CAA0C;IAI5E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAWxD;IAGD,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CA0C/D;IAKD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,GAAG,IAAI,CAavF;IAwBD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAYxE;IAKD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAYnE;IAaD,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAGzD;IAoDD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAE7E;IAKD,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,CAO1F;CA2MJ"}
|
package/dist/PlurnkParser.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { CharStream, CommonTokenStream, Token } from "antlr4ng";
|
|
1
|
+
import { CharStream, CommonTokenStream, ListTokenSource, Token } from "antlr4ng";
|
|
2
2
|
import { plurnkLexer } from "./generated/plurnkLexer.js";
|
|
3
3
|
import { plurnkParser } from "./generated/plurnkParser.js";
|
|
4
4
|
import AstBuilder from "./AstBuilder.js";
|
|
5
|
+
import HeadingTokens from "./HeadingTokens.js";
|
|
6
|
+
import NativeToolCalls from "./NativeToolCalls.js";
|
|
5
7
|
import PlurnkErrorStrategy from "./PlurnkErrorStrategy.js";
|
|
6
8
|
import RecordingListener from "./RecordingListener.js";
|
|
7
|
-
import {
|
|
9
|
+
import { PlurnkParseError, } from "@plurnk/plurnk-contracts";
|
|
8
10
|
import { writtenOp } from "@plurnk/plurnk-contracts";
|
|
9
11
|
// Statement-bearing contexts the extraction builds into items. `statement` (statementSeq) and
|
|
10
12
|
// `midStatement` (mid-turn ops) each wrap one op; the turn disposition attaches as a direct
|
|
@@ -19,13 +21,11 @@ const STATEMENT_RULES = new Set([
|
|
|
19
21
|
// One-turn containers, flattened in source order for model and saved programs.
|
|
20
22
|
const CONTAINER_RULES = new Set([
|
|
21
23
|
plurnkParser.RULE_modelTurn,
|
|
22
|
-
plurnkParser.RULE_turn,
|
|
23
24
|
]);
|
|
24
25
|
export default class PlurnkParser {
|
|
25
26
|
static NO_VALID_OPERATION = "no valid Plurnk operation was found.";
|
|
26
|
-
// {§statement-rendering} —
|
|
27
|
-
//
|
|
28
|
-
// delimiter, since such a line ends any block it stands in ({§fence-heading-in-body}).
|
|
27
|
+
// {§statement-rendering} — canonical framing protects arbitrary, even unfinished,
|
|
28
|
+
// examples without depending on balanced nesting ({§numeric-delimiter}).
|
|
29
29
|
static frame(header, body) {
|
|
30
30
|
const longest = (body?.match(/`+/g) ?? []).reduce((maximum, ticks) => Math.max(maximum, ticks.length), 0);
|
|
31
31
|
const fence = "`".repeat(Math.max(4, longest + 1));
|
|
@@ -48,9 +48,20 @@ export default class PlurnkParser {
|
|
|
48
48
|
// identically; otherwise as its `pattern` option ({§matcher-option}), the escape.
|
|
49
49
|
const naked = (raw) => raw.trim() === raw && raw !== "" && !/[\r\n]/u.test(raw) && !raw.includes("<!--")
|
|
50
50
|
&& (/^(\/|\$|~|&|\^)/u.test(raw) || ((statement.op === "FIND" || statement.op === "READ" || statement.op === "KILL") && !/^[[(<`]/u.test(raw)));
|
|
51
|
-
const metadataOf = (metadata, matcher, bare) =>
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
const metadataOf = (metadata, matcher, bare) => {
|
|
52
|
+
const blocks = metadata?.map((block) => `[${block}]`) ?? [];
|
|
53
|
+
if (matcher === null || matcher === undefined)
|
|
54
|
+
return blocks;
|
|
55
|
+
const options = AstBuilder.metadataOptions(metadata);
|
|
56
|
+
if (options?.pattern === matcher.raw)
|
|
57
|
+
return blocks;
|
|
58
|
+
if (bare && naked(matcher.raw))
|
|
59
|
+
return [...blocks, matcher.raw];
|
|
60
|
+
const option = JSON.stringify({ pattern: matcher.raw });
|
|
61
|
+
if (options !== null)
|
|
62
|
+
return [`[${metadata[0]},${option}]`];
|
|
63
|
+
return [...blocks, `[${option}]`];
|
|
64
|
+
};
|
|
54
65
|
// {§local-path-fragment} — a bare path renders its channel back as `#channel`.
|
|
55
66
|
const spelled = (target) => target.kind === "local" && target.fragment !== undefined && target.fragment !== null ? `${target.raw}#${target.fragment}` : target.raw;
|
|
56
67
|
const selection = (resource) => {
|
|
@@ -73,17 +84,97 @@ export default class PlurnkParser {
|
|
|
73
84
|
}
|
|
74
85
|
if (statement.aside !== null)
|
|
75
86
|
modifiers.push(`<!-- ${statement.aside} -->`);
|
|
76
|
-
const body =
|
|
77
|
-
: statement.
|
|
78
|
-
: typeof statement.body === "string" ? statement.body : statement.body.raw;
|
|
87
|
+
const body = statement.op === "COPY" || statement.op === "MOVE" || statement.body === null ? null
|
|
88
|
+
: typeof statement.body === "string" ? statement.body : statement.body.raw;
|
|
79
89
|
const header = `${name}${modifiers.length === 0 ? "" : ` ${modifiers.join(" ")}`}`;
|
|
80
90
|
return PlurnkParser.frame(header, body);
|
|
81
91
|
}).join("\n\n");
|
|
82
92
|
}
|
|
93
|
+
// {§operation-attempt} — a response with no operation concludes only when it is prose. It is an
|
|
94
|
+
// operation attempt instead when a line opens a four-backtick fence, a heading stands outside
|
|
95
|
+
// any fence, native tool-call markup remains, or packet rows are echoed. Returns the kind.
|
|
96
|
+
static operationAttempt(input, executors = []) {
|
|
97
|
+
const helpers = ["FIND", "READ", "EDIT", "COPY", "MOVE", "SEND", "WORK", "FORK", "BARE", "KILL", "NOTE", "WAIT"];
|
|
98
|
+
const runtimes = executors.map((name) => name.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"));
|
|
99
|
+
// {§quotation} quoted examples are data: only unquoted text can attempt an operation.
|
|
100
|
+
input = PlurnkParser.unquoted(input, executors);
|
|
101
|
+
const known = [...helpers, "sh", ...runtimes].join("|");
|
|
102
|
+
if (new RegExp(`^\`{4,}[0-9]*(?:${known})(?![A-Za-z0-9_.+-])`, "mu").test(input))
|
|
103
|
+
return "an operation heading that did not parse";
|
|
104
|
+
// A runtime name alone on a line is ordinary prose; followed by a slot it is a heading.
|
|
105
|
+
const heading = [`(?:${helpers.join("|")})(?=\\s*(?:\\(|<|\\[|$))`, ...(runtimes.length === 0 ? [] : [`(?:${runtimes.join("|")})(?=\\s*(?:\\(|<|\\[))`])];
|
|
106
|
+
if (new RegExp(`^[ \\t]*(?:${heading.join("|")})`, "mu").test(input))
|
|
107
|
+
return "operation heading outside a fence";
|
|
108
|
+
if (/DSML|<\|?tool_call|<function_calls|<invoke\b/u.test(input))
|
|
109
|
+
return "native tool-call markup";
|
|
110
|
+
if (/^#{2,3} (?:log|ops|reasoning):\/\//mu.test(input))
|
|
111
|
+
return "echoed packet rows";
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
// {§quotation} {§native-tool-calls} the markup lines that sit inside a Markdown quotation:
|
|
115
|
+
// quotation is judged with the markup itself blanked, so its own fence lines quote nothing.
|
|
116
|
+
static #quotedMarkup(input, executors) {
|
|
117
|
+
const markup = NativeToolCalls.markupLines(input);
|
|
118
|
+
const blanked = input.split("\n").map((line, index) => markup.has(index) ? "" : line).join("\n");
|
|
119
|
+
const lexer = new plurnkLexer(CharStream.fromString(blanked));
|
|
120
|
+
for (const name of executors)
|
|
121
|
+
lexer.knownExecutors.add(name);
|
|
122
|
+
lexer.removeErrorListeners();
|
|
123
|
+
lexer.getAllTokens();
|
|
124
|
+
const points = Array.from(blanked);
|
|
125
|
+
const lineOf = [];
|
|
126
|
+
let line = 0;
|
|
127
|
+
for (const point of points) {
|
|
128
|
+
lineOf.push(line);
|
|
129
|
+
if (point === "\n")
|
|
130
|
+
line += 1;
|
|
131
|
+
}
|
|
132
|
+
const quoted = new Set();
|
|
133
|
+
for (const { start, end } of lexer.takeQuotedSpans(points.length)) {
|
|
134
|
+
for (let index = start; index < end; index += 1)
|
|
135
|
+
if (markup.has(lineOf[index]))
|
|
136
|
+
quoted.add(lineOf[index]);
|
|
137
|
+
}
|
|
138
|
+
return quoted;
|
|
139
|
+
}
|
|
140
|
+
// {§quotation} the input with every quoted span blanked (line breaks kept, so positions hold):
|
|
141
|
+
// what native-call recovery, attempt classification and advisories may read.
|
|
142
|
+
static unquoted(input, executors = []) {
|
|
143
|
+
const lexer = new plurnkLexer(CharStream.fromString(input));
|
|
144
|
+
for (const name of executors)
|
|
145
|
+
lexer.knownExecutors.add(name);
|
|
146
|
+
lexer.removeErrorListeners();
|
|
147
|
+
lexer.getAllTokens();
|
|
148
|
+
const points = Array.from(input);
|
|
149
|
+
const spans = lexer.takeQuotedSpans(points.length);
|
|
150
|
+
if (spans.length === 0)
|
|
151
|
+
return input;
|
|
152
|
+
for (const { start, end } of spans) {
|
|
153
|
+
for (let index = start; index < end; index += 1)
|
|
154
|
+
if (points[index] !== "\n" && points[index] !== "\r")
|
|
155
|
+
points[index] = " ";
|
|
156
|
+
}
|
|
157
|
+
return points.join("");
|
|
158
|
+
}
|
|
83
159
|
// Parse one model turn. An omitted disposition is silent continuation; a present one
|
|
84
160
|
// may sit anywhere in the turn ({§disposition-anywhere}) and the runtime executes it last.
|
|
85
161
|
// Outside text never becomes a parse item. {§whitespace-contract} {§turn-shape}
|
|
86
162
|
static parse(input, options = {}) {
|
|
163
|
+
const direct = PlurnkParser.#parseTurn(input, options);
|
|
164
|
+
if (direct.items.some((item) => item.kind === "statement"))
|
|
165
|
+
return direct;
|
|
166
|
+
// {§native-tool-calls} — an emission with no operation may be native tool-call markup that
|
|
167
|
+
// names plurnk operations; read it as those operations, silently (#760).
|
|
168
|
+
const executors = options.executors ?? [];
|
|
169
|
+
const rewritten = NativeToolCalls.rewrite(input, executors, PlurnkParser.#quotedMarkup(input, executors));
|
|
170
|
+
if (rewritten === null)
|
|
171
|
+
return direct;
|
|
172
|
+
const native = PlurnkParser.#parseTurn(rewritten, options);
|
|
173
|
+
return native.items.some((item) => item.kind === "statement") && !native.items.some((item) => item.kind === "error" && item.error.severity === "error")
|
|
174
|
+
? native
|
|
175
|
+
: direct;
|
|
176
|
+
}
|
|
177
|
+
static #parseTurn(input, options) {
|
|
87
178
|
const result = PlurnkParser.#run(input, (parser) => parser.document(), undefined, options);
|
|
88
179
|
PlurnkParser.#adviseBareHeadings(input, result.items, options.executors ?? []);
|
|
89
180
|
// Value-adds layered on ANTLR's diagnostics while the document boundary
|
|
@@ -92,6 +183,11 @@ export default class PlurnkParser {
|
|
|
92
183
|
PlurnkParser.#requireSourceOperation(result.items);
|
|
93
184
|
return result;
|
|
94
185
|
}
|
|
186
|
+
// {§reasoning-notes} — reasoning is not a program. Only its admitted top-level NOTE blocks
|
|
187
|
+
// cross this boundary; quoted bodies and all other operations remain reasoning evidence.
|
|
188
|
+
static parseReasoningNotes(input) {
|
|
189
|
+
return PlurnkParser.#run(input, (parser) => parser.statementSeq(), undefined, {}, true).items.flatMap((item) => item.kind === "statement" && item.statement.op === "NOTE" ? [item.statement] : []);
|
|
190
|
+
}
|
|
95
191
|
// {§turn-shape} — no source operation is reported as its own fact, beside every diagnostic
|
|
96
192
|
// that explains it: a host admits a turn whose only diagnostic is this one as an empty turn
|
|
97
193
|
// ({§empty-turn}) and rejects one that also carries a malformed heading.
|
|
@@ -140,26 +236,30 @@ export default class PlurnkParser {
|
|
|
140
236
|
static parseStatements(input, options = {}) {
|
|
141
237
|
return PlurnkParser.#run(input, (parser) => parser.statementSeq(), undefined, options);
|
|
142
238
|
}
|
|
143
|
-
// Parse saved turns in source order; dispositions separate them. Each turn
|
|
144
|
-
// requires a disposition, including when ordinary operations follow it.
|
|
145
|
-
static parseLog(input, options = {}) {
|
|
146
|
-
return PlurnkParser.#run(input, (parser) => parser.log(), undefined, options);
|
|
147
|
-
}
|
|
148
239
|
// Parse the CLIENT tier - a bare sequence of protocol statements plus the client-only utility
|
|
149
240
|
// op LOOK. The topmost subset (one above Script); never used for model output. The
|
|
150
241
|
// protocol entry points reject LOOK, so a client op only parses here.
|
|
151
242
|
static parseClient(input, options = {}) {
|
|
152
243
|
return PlurnkParser.#run(input, (parser) => parser.clientStatementSeq(), (ctx) => AstBuilder.buildClient(ctx), options);
|
|
153
244
|
}
|
|
154
|
-
static #run(input, parseFn, buildFn = ((ctx) => AstBuilder.build(ctx)), options = {}) {
|
|
245
|
+
static #run(input, parseFn, buildFn = ((ctx) => AstBuilder.build(ctx)), options = {}, reasoning = false) {
|
|
155
246
|
const lexer = new plurnkLexer(CharStream.fromString(input));
|
|
247
|
+
lexer.reasoning = reasoning;
|
|
156
248
|
for (const name of options.executors ?? [])
|
|
157
249
|
lexer.knownExecutors.add(name);
|
|
158
|
-
|
|
250
|
+
const spellings = new Map([...lexer.knownExecutors].map((name) => [name.toLowerCase(), name]));
|
|
251
|
+
const node = spellings.get("node");
|
|
252
|
+
if (node !== undefined && !spellings.has("js")) {
|
|
253
|
+
// {§executor-js-spelling}: canonicalize before runtime admission, without another registration.
|
|
254
|
+
lexer.knownExecutors.add("js");
|
|
255
|
+
spellings.set("js", node);
|
|
256
|
+
}
|
|
257
|
+
AstBuilder.executorSpellings = spellings;
|
|
159
258
|
const errors = [];
|
|
160
259
|
lexer.removeErrorListeners();
|
|
161
260
|
lexer.addErrorListener(new RecordingListener("lexer", errors));
|
|
162
|
-
|
|
261
|
+
// {§heading-slot-order} — lex eagerly so heading near-misses can be put in canonical order.
|
|
262
|
+
const tokenStream = new CommonTokenStream(new ListTokenSource(HeadingTokens.normalize(lexer.getAllTokens())));
|
|
163
263
|
const parser = new plurnkParser(tokenStream);
|
|
164
264
|
parser.removeErrorListeners();
|
|
165
265
|
parser.addErrorListener(new RecordingListener("parser", errors));
|
|
@@ -195,12 +295,14 @@ export default class PlurnkParser {
|
|
|
195
295
|
});
|
|
196
296
|
}
|
|
197
297
|
// {§interstitial-fence} — a tagged fence that opened nothing is prose; say so once, as a
|
|
198
|
-
// warning, so a misspelled executor is never a silent loss.
|
|
298
|
+
// warning, so a misspelled executor or an under-fenced operation is never a silent loss.
|
|
199
299
|
for (const note of lexer.takeUnknownTags()) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
300
|
+
const message = note.reason === "short"
|
|
301
|
+
? `\`${note.tag}\` needs four backticks to run; the three-backtick block was read as prose and nothing ran.`
|
|
302
|
+
: note.reason === "indented"
|
|
303
|
+
? `\`${note.tag}\` must start its line to run; the indented block was read as prose and nothing ran.`
|
|
304
|
+
: `\`${note.tag}\` is not an operation or a known executor here; the block was read as prose and nothing ran.`;
|
|
305
|
+
items.push({ kind: "error", error: new PlurnkParseError(note.line, note.column, "parser", message, "warning") });
|
|
204
306
|
}
|
|
205
307
|
return { items, unparsedTail };
|
|
206
308
|
}
|
|
@@ -226,7 +328,7 @@ export default class PlurnkParser {
|
|
|
226
328
|
// {§bare-heading-advisory} — an operation heading written outside any fence is prose, and prose
|
|
227
329
|
// is silent; one warning names the fence form so the loss is never quiet ({§interstitial-fence}).
|
|
228
330
|
static #adviseBareHeadings(input, items, executors) {
|
|
229
|
-
const names = ["FIND", "READ", "EDIT", "COPY", "MOVE", "SEND", "WORK", "FORK", "BARE", "KILL", "
|
|
331
|
+
const names = ["FIND", "READ", "EDIT", "COPY", "MOVE", "SEND", "WORK", "FORK", "BARE", "KILL", "NOTE", "WAIT", ...executors]
|
|
230
332
|
.map((name) => name.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"));
|
|
231
333
|
const headingShape = new RegExp(`^[ \\t]*(${names.join("|")})(?=\\s*(?:\\(|<|\\[|$))`, "u");
|
|
232
334
|
const covered = new Set();
|
|
@@ -240,7 +342,7 @@ export default class PlurnkParser {
|
|
|
240
342
|
for (let line = start; line <= start + span + 1; line += 1)
|
|
241
343
|
covered.add(line);
|
|
242
344
|
}
|
|
243
|
-
const lines = input.split("\n");
|
|
345
|
+
const lines = PlurnkParser.unquoted(input, executors).split("\n");
|
|
244
346
|
lines.forEach((text, index) => {
|
|
245
347
|
const line = index + 1;
|
|
246
348
|
if (covered.has(line))
|
|
@@ -286,9 +388,10 @@ export default class PlurnkParser {
|
|
|
286
388
|
}
|
|
287
389
|
else {
|
|
288
390
|
try {
|
|
289
|
-
|
|
391
|
+
const { value: statement, advisories } = AstBuilder.collectAdvisories(() => buildFn(c));
|
|
392
|
+
items.push({ kind: "statement", statement });
|
|
290
393
|
// {§misplaced-aside-advisory} — the builder's advisories follow their statement.
|
|
291
|
-
for (const advisory of
|
|
394
|
+
for (const advisory of advisories)
|
|
292
395
|
items.push({ kind: "error", error: advisory });
|
|
293
396
|
}
|
|
294
397
|
catch (e) {
|