@plurnk/plurnk-parser 1.18.0 → 1.19.1

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 (37) hide show
  1. package/README.md +1 -2
  2. package/SPEC.md +2 -10
  3. package/dist/AstBuilder.d.ts +5 -1
  4. package/dist/AstBuilder.d.ts.map +1 -1
  5. package/dist/AstBuilder.js +74 -44
  6. package/dist/AstBuilder.js.map +1 -1
  7. package/dist/HeadingTokens.d.ts +6 -0
  8. package/dist/HeadingTokens.d.ts.map +1 -0
  9. package/dist/HeadingTokens.js +60 -0
  10. package/dist/HeadingTokens.js.map +1 -0
  11. package/dist/NativeToolCalls.d.ts +6 -0
  12. package/dist/NativeToolCalls.d.ts.map +1 -0
  13. package/dist/NativeToolCalls.js +153 -0
  14. package/dist/NativeToolCalls.js.map +1 -0
  15. package/dist/PlurnkErrorStrategy.d.ts.map +1 -1
  16. package/dist/PlurnkErrorStrategy.js +10 -33
  17. package/dist/PlurnkErrorStrategy.js.map +1 -1
  18. package/dist/PlurnkParser.d.ts +4 -2
  19. package/dist/PlurnkParser.d.ts.map +1 -1
  20. package/dist/PlurnkParser.js +132 -29
  21. package/dist/PlurnkParser.js.map +1 -1
  22. package/dist/RecordingListener.d.ts.map +1 -1
  23. package/dist/RecordingListener.js +5 -23
  24. package/dist/RecordingListener.js.map +1 -1
  25. package/dist/generated/plurnkLexer.d.ts +70 -34
  26. package/dist/generated/plurnkLexer.d.ts.map +1 -1
  27. package/dist/generated/plurnkLexer.js +817 -437
  28. package/dist/generated/plurnkLexer.js.map +1 -1
  29. package/dist/generated/plurnkParser.d.ts +81 -84
  30. package/dist/generated/plurnkParser.d.ts.map +1 -1
  31. package/dist/generated/plurnkParser.js +621 -672
  32. package/dist/generated/plurnkParser.js.map +1 -1
  33. package/dist/generated/plurnkParserVisitor.d.ts +7 -14
  34. package/dist/generated/plurnkParserVisitor.d.ts.map +1 -1
  35. package/dist/generated/plurnkParserVisitor.js +6 -12
  36. package/dist/generated/plurnkParserVisitor.js.map +1 -1
  37. 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;;IAuCjE,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA0C5E;IA+Ge,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB,GAAG,IAAI,CAmB1E;IAEe,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAqB7E;IAEe,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAiB3D;IAEe,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAwB5D;CACJ"}
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.OPEN_TASK]: "operation fence header",
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() === "TASK"
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() || op === "SEND" || op === "TASK"
59
+ : lexer.isExecFence()
59
60
  ? "use minutes, e.g. `<5,1>`"
60
- : lexer.isTextCoordinateOp()
61
- ? "use numeric coordinates or `@hash` line anchors"
62
- : "this operation takes no scope";
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.OPEN_TASK,
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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"}
@@ -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":"AAMA,OAAO,EAIH,KAAK,eAAe,EAEpB,KAAK,WAAW,EAInB,MAAM,0BAA0B,CAAC;AAsBlC,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;IAK5E,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,CAqC/D;IAKD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAOnE;IAoDD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAE7E;IAID,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAEtE;IAKD,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,CAO1F;CAgMJ"}
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"}
@@ -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 { PlanValue, PlurnkParseError, TurnDisposition, } from "@plurnk/plurnk-contracts";
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} — a wider fence keeps shorter inner fences as body ({§fence-closer});
27
- // a body that itself holds a heading line of four or more backticks needs the numeric
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) => metadata !== null && metadata !== undefined ? metadata.map((block) => `[${block}]`)
52
- : matcher !== null && matcher !== undefined ? [bare && naked(matcher.raw) ? matcher.raw : `[${JSON.stringify({ pattern: matcher.raw })}]`]
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 = TurnDisposition.is(statement) ? PlanValue.stringify(statement.body)
77
- : statement.op === "COPY" || statement.op === "MOVE" || statement.body === null ? null
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
- AstBuilder.executorSpellings = new Map([...lexer.knownExecutors].map((name) => [name.toLowerCase(), name]));
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
- const tokenStream = new CommonTokenStream(lexer);
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
- items.push({
201
- kind: "error",
202
- error: new PlurnkParseError(note.line, note.column, "parser", `\`${note.tag}\` is not an operation or a known executor here; the block was read as prose and nothing ran.`, "warning"),
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", "TASK", ...executors]
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
- items.push({ kind: "statement", statement: buildFn(c) });
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 AstBuilder.takeAdvisories())
394
+ for (const advisory of advisories)
292
395
  items.push({ kind: "error", error: advisory });
293
396
  }
294
397
  catch (e) {