@plurnk/plurnk-service 0.4.0 → 0.6.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 (71) hide show
  1. package/README.md +13 -44
  2. package/SPEC.md +546 -445
  3. package/bin/plurnk-service.js +2 -1
  4. package/dist/core/ChannelWrite.d.ts +5 -0
  5. package/dist/core/ChannelWrite.d.ts.map +1 -1
  6. package/dist/core/ChannelWrite.js.map +1 -1
  7. package/dist/core/Engine.d.ts +8 -5
  8. package/dist/core/Engine.d.ts.map +1 -1
  9. package/dist/core/Engine.js +190 -99
  10. package/dist/core/Engine.js.map +1 -1
  11. package/dist/core/PluginLoader.js +6 -6
  12. package/dist/core/PluginLoader.js.map +1 -1
  13. package/dist/core/ProviderInstantiate.d.ts +4 -0
  14. package/dist/core/ProviderInstantiate.d.ts.map +1 -0
  15. package/dist/core/ProviderInstantiate.js +41 -0
  16. package/dist/core/ProviderInstantiate.js.map +1 -0
  17. package/dist/core/ProviderRegistry.d.ts.map +1 -1
  18. package/dist/core/ProviderRegistry.js +1 -1
  19. package/dist/core/ProviderRegistry.js.map +1 -1
  20. package/dist/core/SchemeRegistry.d.ts +1 -1
  21. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  22. package/dist/core/SchemeRegistry.js +4 -20
  23. package/dist/core/SchemeRegistry.js.map +1 -1
  24. package/dist/core/line-marker.js +3 -3
  25. package/dist/core/line-marker.js.map +1 -1
  26. package/dist/core/matcher.d.ts +4 -6
  27. package/dist/core/matcher.d.ts.map +1 -1
  28. package/dist/core/matcher.js +61 -184
  29. package/dist/core/matcher.js.map +1 -1
  30. package/dist/core/mimetype-binary.js +1 -1
  31. package/dist/core/mimetype-binary.js.map +1 -1
  32. package/dist/core/packet-wire.d.ts.map +1 -1
  33. package/dist/core/packet-wire.js +130 -30
  34. package/dist/core/packet-wire.js.map +1 -1
  35. package/dist/core/scheme-types.d.ts +3 -26
  36. package/dist/core/scheme-types.d.ts.map +1 -1
  37. package/dist/core/scheme-types.js +5 -8
  38. package/dist/core/scheme-types.js.map +1 -1
  39. package/dist/index.d.ts +3 -2
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +14 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/schemes/Exec.d.ts.map +1 -1
  44. package/dist/schemes/Exec.js +12 -24
  45. package/dist/schemes/Exec.js.map +1 -1
  46. package/dist/schemes/File.d.ts +1 -0
  47. package/dist/schemes/File.d.ts.map +1 -1
  48. package/dist/schemes/File.js +11 -5
  49. package/dist/schemes/File.js.map +1 -1
  50. package/dist/schemes/Log.d.ts +1 -0
  51. package/dist/schemes/Log.d.ts.map +1 -1
  52. package/dist/schemes/Log.js +10 -4
  53. package/dist/schemes/Log.js.map +1 -1
  54. package/dist/schemes/_entry-ops.d.ts +1 -1
  55. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  56. package/dist/schemes/_entry-ops.js +15 -20
  57. package/dist/schemes/_entry-ops.js.map +1 -1
  58. package/dist/server/Daemon.d.ts +11 -0
  59. package/dist/server/Daemon.d.ts.map +1 -1
  60. package/dist/server/Daemon.js +18 -0
  61. package/dist/server/Daemon.js.map +1 -1
  62. package/dist/server/MethodRegistry.d.ts +2 -2
  63. package/dist/server/MethodRegistry.d.ts.map +1 -1
  64. package/dist/server/methods/loop_resolve.js +2 -2
  65. package/dist/server/methods/loop_resolve.js.map +1 -1
  66. package/dist/server/methods/loop_run.d.ts.map +1 -1
  67. package/dist/server/methods/loop_run.js +2 -1
  68. package/dist/server/methods/loop_run.js.map +1 -1
  69. package/dist/server/methods/providers_list.js +1 -1
  70. package/dist/server/methods/providers_list.js.map +1 -1
  71. package/package.json +17 -12
@@ -1,195 +1,72 @@
1
- // Body-matcher dispatch for FIND / READ / SHOW / HIDE (plurnk.md
2
- // §"Body matcher dispatch"). The grammar parser classifies the dialect
3
- // at parse time and emits a discriminated MatcherBody:
1
+ // Body-matcher adapter delegates to @plurnk/plurnk-mimetypes for the
2
+ // actual dialect dispatch. The framework parses the matcher's leading
3
+ // prefix internally (xpath `//`, jsonpath `$`, regex `/.../`, glob
4
+ // otherwise) and routes to per-mimetype handlers. plurnk-service catches
5
+ // the framework's typed errors and maps them to HTTP-shaped status codes
6
+ // the model can act on.
4
7
  //
5
- // { dialect: "xpath", raw, ... }
6
- // { dialect: "regex", raw, pattern, flags }
7
- // { dialect: "jsonpath", raw, ... }
8
- // { dialect: "glob", raw }
8
+ // Status mapping (per plurnk-service#172 + plurnk-grammar#19):
9
+ // UnsupportedDialectError → 415 (dialect not supported for mimetype, or binary content)
10
+ // InvalidExpressionError → 400 (model authored a malformed matcher body)
11
+ // QueryParseFailureError → 203 (source can't be parsed for the dialect;
12
+ // returns raw content as text/markdown with
13
+ // `reason` so the model can fall back to
14
+ // regex/visual parsing on the bytes)
15
+ // Empty match array → 204 (matcher applied, zero results)
16
+ // Match array → 200 (matcher applied, results in body)
9
17
  //
10
- // Regex + glob are universal text matching. xpath + jsonpath are
11
- // inherently mimetype-bound and belong on per-mimetype handlers in
12
- // @plurnk/plurnk-mimetypes (plurnk-mimetypes#3). 501 with sibling-issue
13
- // pointer until landed.
14
- //
15
- // Mimetype-mismatch rule (AGENTS.md "Resolved ambiguities" §1): dialect
16
- // on a wrong mimetype family returns 415. Binary entries are 415 across
17
- // the board (§2).
18
- //
19
- // Result shape (AGENTS.md "Matcher return semantics rework"):
20
- // Body is a JSON array of per-match objects `{line, matched, matching?}`.
21
- // `line`: 1-indexed source line of the match.
22
- // `matched`: extracted value, polymorphic by extractor:
23
- // bare regex → string (full match)
24
- // anon captures → array of capture strings
25
- // named captures → object {name: value, …}; mixed anon mixes in "1"/"2"
26
- // jsonpath → JSON value at the path
27
- // xpath text/attr → string
28
- // xpath node → serialized XML string
29
- // `matching`: per-instance discriminator when matcher targets multiple
30
- // instances (jsonpath wildcards, xpath multi-match). Omitted otherwise.
31
- // Empty matches → status 204, no body.
32
- // Result mimetype is always "application/json" for matcher results.
33
- import { isBinaryMimetype } from "./mimetype-binary.js";
34
- const isXmlFamily = (mimetype) => mimetype === "text/html" || mimetype === "application/xml" || mimetype.endsWith("+xml");
35
- const isJsonFamily = (mimetype) => mimetype === "application/json" || mimetype.endsWith("+json");
36
- // Count newlines in content[0..offset) to compute 1-indexed source line.
37
- const lineOfOffset = (content, offset, baseLine) => {
38
- let line = baseLine;
39
- for (let i = 0; i < offset && i < content.length; i++) {
40
- if (content.charCodeAt(i) === 0x0a)
41
- line++;
42
- }
43
- return line;
44
- };
45
- // Extract `matched` shape from a RegExp match result.
46
- // - No captures: string (full match)
47
- // - Anon only: array of capture strings
48
- // - Named (any): object with name keys; anon captures merged in as "1", "2", …
49
- const matchedFromRegex = (m) => {
50
- const anonCount = m.length - 1; // m[0] is full match
51
- const groups = m.groups;
52
- const hasNamed = groups !== undefined && Object.keys(groups).length > 0;
53
- if (anonCount === 0 && !hasNamed)
54
- return m[0]; // bare match
55
- if (hasNamed) {
56
- // Object form: named captures by name, anon captures by positional key.
57
- const obj = { ...groups };
58
- // Identify which capture indices are named (so we don't double-count).
59
- // RegExp doesn't expose this directly; collect named values and check
60
- // each anon position for presence in groups.
61
- const namedValues = new Set(Object.values(groups));
62
- for (let i = 1; i <= anonCount; i++) {
63
- const v = m[i];
64
- // Heuristic: include anon-indexed capture if it's not the same
65
- // reference as a named one. Imperfect when values collide; the
66
- // common case (truly distinct anon + named) works.
67
- if (!namedValues.has(v))
68
- obj[String(i)] = v;
69
- }
70
- return obj;
71
- }
72
- // Anonymous-only: array of captures.
73
- const arr = [];
74
- for (let i = 1; i <= anonCount; i++)
75
- arr.push(m[i]);
76
- return arr;
77
- };
18
+ // 203 is HTTP-creative ("Non-Authoritative Information") the runtime
19
+ // produced content but not in the structured form the matcher requested.
20
+ // Model sees the raw text plus a reason field and decides whether to
21
+ // retry, fall back, or fix source. Choice ratified by user (#172).
22
+ import { UnsupportedDialectError, InvalidExpressionError, QueryParseFailureError, } from "@plurnk/plurnk-mimetypes";
23
+ import { TEXT_PRIMITIVE_MIMETYPE } from "./mimetype-binary.js";
78
24
  const prettyJson = (value) => JSON.stringify(value, null, 2);
79
- // Convert a shell-style glob pattern to a RegExp for full-line matching.
80
- // Per plurnk-grammar#17 closing comment, glob in READ body is a line
81
- // filter: each content line tested against the glob; matching lines
82
- // yield rows. Conventions match shell globs:
83
- // `TODO*` → starts with TODO (`^TODO.*$`)
84
- // `*TODO*` → contains TODO (`^.*TODO.*$`)
85
- // `*.log` → ends with `.log` (`^.*\.log$`)
86
- // `[Tt]odo*`→ char class anchor (`^[Tt]odo.*$`)
87
- // Model controls anchoring via the pattern; no implicit "contains" wrapping.
88
- const globToLineRegex = (glob) => {
89
- let pattern = "^";
90
- let i = 0;
91
- while (i < glob.length) {
92
- const c = glob[i];
93
- if (c === "*") {
94
- pattern += ".*";
95
- }
96
- else if (c === "?") {
97
- pattern += ".";
98
- }
99
- else if (c === "[") {
100
- // Character class — pass through with `!` → `^` per glob convention.
101
- let cls = "[";
102
- i++;
103
- if (i < glob.length && (glob[i] === "!" || glob[i] === "^")) {
104
- cls += "^";
105
- i++;
106
- }
107
- while (i < glob.length && glob[i] !== "]") {
108
- cls += glob[i];
109
- i++;
110
- }
111
- cls += "]";
112
- pattern += cls;
113
- }
114
- else if (".+(){}|^$\\".includes(c)) {
115
- pattern += `\\${c}`;
116
- }
117
- else {
118
- pattern += c;
119
- }
120
- i++;
121
- }
122
- pattern += "$";
123
- return new RegExp(pattern);
25
+ // Apply a `<L>`-slice baseLine offset to per-match line numbers. The
26
+ // framework returns line numbers relative to the content it received;
27
+ // when the matcher runs inside an `<L>` slice, those need to be shifted
28
+ // back to original-source coordinates.
29
+ const shiftLines = (matches, baseLine) => {
30
+ if (baseLine === 1)
31
+ return [...matches];
32
+ const offset = baseLine - 1;
33
+ return matches.map((m) => ({ ...m, line: m.line + offset }));
124
34
  };
125
- // Apply a matcher against text content. Returns a JSON-array body of
126
- // per-match objects on success, or status 204 with no body when there
127
- // are zero matches.
128
- //
129
- // `baseLine` is the 1-indexed line of `content[0]` in the original
130
- // source. When the matcher runs against the full content, baseLine=1;
131
- // when called from inside a `<L>` slice path, baseLine = slice startLine
132
- // so per-match line numbers are reported in original-source coordinates.
133
- export const matchAgainstContent = (body, content, mimetype, baseLine = 1) => {
134
- if (isBinaryMimetype(mimetype)) {
135
- return { status: 415, error: `cannot match against binary mimetype \`${mimetype}\`` };
136
- }
137
- if (body.dialect === "regex") {
138
- let re;
139
- try {
140
- re = new RegExp(body.pattern, body.flags);
35
+ export const matchAgainstContent = async (body, content, mimetype, mimetypes, baseLine = 1) => {
36
+ try {
37
+ // Framework dispatches dialect by leading prefix of `body.raw`.
38
+ // `hint` carries the source mimetype so the framework selects the
39
+ // right per-mimetype handler without re-detecting from content.
40
+ const rawMatches = await mimetypes.query({ content, hint: mimetype }, body.raw);
41
+ if (rawMatches.length === 0) {
42
+ return { status: 204, matches: 0 };
141
43
  }
142
- catch (err) {
143
- return { status: 400, error: err instanceof Error ? err.message : String(err) };
44
+ const adjusted = shiftLines(rawMatches, baseLine);
45
+ return {
46
+ status: 200,
47
+ body: prettyJson(adjusted),
48
+ matches: adjusted.length,
49
+ };
50
+ }
51
+ catch (err) {
52
+ if (err instanceof UnsupportedDialectError) {
53
+ return { status: 415, error: err.message };
144
54
  }
145
- const rows = [];
146
- if (body.flags.includes("g")) {
147
- for (const m of content.matchAll(re)) {
148
- const line = lineOfOffset(content, m.index ?? 0, baseLine);
149
- rows.push({ line, matched: matchedFromRegex(m) });
150
- }
55
+ if (err instanceof InvalidExpressionError) {
56
+ return { status: 400, error: err.message };
151
57
  }
152
- else {
153
- const m = re.exec(content);
154
- if (m !== null) {
155
- const line = lineOfOffset(content, m.index, baseLine);
156
- rows.push({ line, matched: matchedFromRegex(m) });
157
- }
58
+ if (err instanceof QueryParseFailureError) {
59
+ // 203 soft fallback: return raw content as text so the model
60
+ // can fall back to regex/visual parsing or fix the source.
61
+ return {
62
+ status: 203,
63
+ body: content,
64
+ mimetype: TEXT_PRIMITIVE_MIMETYPE,
65
+ reason: err.message,
66
+ };
158
67
  }
159
- if (rows.length === 0)
160
- return { status: 204, matches: 0 };
161
- return { status: 200, body: prettyJson(rows), matches: rows.length };
162
- }
163
- if (body.dialect === "xpath") {
164
- if (!isXmlFamily(mimetype))
165
- return { status: 415, error: `xpath requires xml/html mimetype; got \`${mimetype}\`` };
166
- return { status: 501, error: "xpath not implemented (see plurnk-mimetypes#3)" };
68
+ // Unexpected let it propagate so the engine logs it as a 500.
69
+ throw err;
167
70
  }
168
- if (body.dialect === "jsonpath") {
169
- if (!isJsonFamily(mimetype))
170
- return { status: 415, error: `jsonpath requires json mimetype; got \`${mimetype}\`` };
171
- return { status: 501, error: "jsonpath not implemented (see plurnk-mimetypes#3)" };
172
- }
173
- // glob in READ body = line filter (plurnk-grammar#17 ratification).
174
- // Each content line tested against the glob pattern; matching lines
175
- // yield `{line, matched: <lineContent>}` rows. Complements regex
176
- // (substring/capture extraction); glob is the grep-like primitive.
177
- let re;
178
- try {
179
- re = globToLineRegex(body.raw);
180
- }
181
- catch (err) {
182
- return { status: 400, error: err instanceof Error ? err.message : String(err) };
183
- }
184
- const lines = content.split("\n");
185
- const rows = [];
186
- lines.forEach((line, i) => {
187
- if (re.test(line)) {
188
- rows.push({ line: baseLine + i, matched: line });
189
- }
190
- });
191
- if (rows.length === 0)
192
- return { status: 204, matches: 0 };
193
- return { status: 200, body: prettyJson(rows), matches: rows.length };
194
71
  };
195
72
  //# sourceMappingURL=matcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/core/matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/core/matcher.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,sEAAsE;AACtE,mEAAmE;AACnE,yEAAyE;AACzE,yEAAyE;AACzE,wBAAwB;AACxB,EAAE;AACF,+DAA+D;AAC/D,4FAA4F;AAC5F,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,wEAAwE;AACxE,oEAAoE;AACpE,uEAAuE;AACvE,EAAE;AACF,uEAAuE;AACvE,yEAAyE;AACzE,qEAAqE;AACrE,mEAAmE;AAInE,OAAO,EACH,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAW/D,MAAM,UAAU,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAE9E,qEAAqE;AACrE,sEAAsE;AACtE,wEAAwE;AACxE,uCAAuC;AACvC,MAAM,UAAU,GAAG,CAAC,OAA8B,EAAE,QAAgB,EAAgB,EAAE;IAClF,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACpC,IAAiB,EACjB,OAAe,EACf,QAAgB,EAChB,SAAoB,EACpB,WAAmB,CAAC,EACA,EAAE;IACtB,IAAI,CAAC;QACD,gEAAgE;QAChE,kEAAkE;QAClE,gEAAgE;QAChE,MAAM,UAAU,GAAiB,MAAM,SAAS,CAAC,KAAK,CAClD,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC3B,IAAI,CAAC,GAAG,CACX,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACvC,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO;YACH,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC1B,OAAO,EAAE,QAAQ,CAAC,MAAM;SAC3B,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;YACxC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;YACxC,6DAA6D;YAC7D,2DAA2D;YAC3D,OAAO;gBACH,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE,GAAG,CAAC,OAAO;aACtB,CAAC;QACN,CAAC;QACD,gEAAgE;QAChE,MAAM,GAAG,CAAC;IACd,CAAC;AACL,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  // Mimetype classifiers used at op-handler boundaries.
2
2
  //
3
3
  // `isBinaryMimetype` — enforces 415 on binary entries for READ/EDIT/
4
- // SHOW/HIDE (AGENTS.md "Resolved ambiguities" §2).
4
+ // SHOW/HIDE (SPEC.md §16.9 binary entries → 415).
5
5
  //
6
6
  // `isLineNavigableMimetype` — decides whether the render layer prefixes
7
7
  // each line with `N:\t` on READ output. Line-oriented mimetypes (text,
@@ -1 +1 @@
1
- {"version":3,"file":"mimetype-binary.js","sourceRoot":"","sources":["../../src/core/mimetype-binary.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,qEAAqE;AACrE,mDAAmD;AACnD,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,yEAAyE;AACzE,uEAAuE;AACvE,iEAAiE;AACjE,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,mEAAmE;AAEnE,MAAM,0BAA0B,GAAwB,IAAI,GAAG,CAAC;IAC5D,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,wBAAwB;IACxB,wBAAwB;IACxB,iBAAiB;CACpB,CAAC,CAAC;AAEH,mEAAmE;AACnE,+DAA+D;AAC/D,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IAC1D,kBAAkB;IAClB,iBAAiB;IACjB,WAAW;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAW,EAAE;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACxG,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,uEAAuE;AACvE,mEAAmE;AACnE,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAW,EAAE,CACxD,QAAQ,KAAK,kBAAkB,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,QAAgB,EAAW,EAAE;IACjE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,gEAAgE;IAChE,yEAAyE;IACzE,mEAAmE;IACnE,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,sEAAsE;AACtE,oEAAoE;AACpE,mEAAmE;AACnE,wEAAwE;AACxE,wEAAwE;AACxE,qEAAqE;AACrE,gEAAgE;AAChE,aAAa;AACb,EAAE;AACF,mEAAmE;AACnE,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAmC,EAAU,EAAE;IACrF,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9F,OAAO,uBAAuB,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC"}
1
+ {"version":3,"file":"mimetype-binary.js","sourceRoot":"","sources":["../../src/core/mimetype-binary.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,qEAAqE;AACrE,oDAAoD;AACpD,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,yEAAyE;AACzE,uEAAuE;AACvE,iEAAiE;AACjE,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,mEAAmE;AAEnE,MAAM,0BAA0B,GAAwB,IAAI,GAAG,CAAC;IAC5D,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,wBAAwB;IACxB,wBAAwB;IACxB,iBAAiB;CACpB,CAAC,CAAC;AAEH,mEAAmE;AACnE,+DAA+D;AAC/D,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IAC1D,kBAAkB;IAClB,iBAAiB;IACjB,WAAW;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAW,EAAE;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACxG,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,uEAAuE;AACvE,mEAAmE;AACnE,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAW,EAAE,CACxD,QAAQ,KAAK,kBAAkB,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,QAAgB,EAAW,EAAE;IACjE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,gEAAgE;IAChE,yEAAyE;IACzE,mEAAmE;IACnE,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,sEAAsE;AACtE,oEAAoE;AACpE,mEAAmE;AACnE,wEAAwE;AACxE,wEAAwE;AACxE,qEAAqE;AACrE,gEAAgE;AAChE,aAAa;AACb,EAAE;AACF,mEAAmE;AACnE,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAmC,EAAU,EAAE;IACrF,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9F,OAAO,uBAAuB,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"packet-wire.d.ts","sourceRoot":"","sources":["../../src/core/packet-wire.js"],"names":[],"mappings":"AAsBO,yDAYN;AAOM,qDAgBN;AAIM;;;IAGN"}
1
+ {"version":3,"file":"packet-wire.d.ts","sourceRoot":"","sources":["../../src/core/packet-wire.js"],"names":[],"mappings":"AAsBO,yDAYN;AASM,qDAgBN;AAIM;;;IAGN"}
@@ -11,7 +11,7 @@
11
11
  // Section headers follow the `# Plurnk System X` convention so the model
12
12
  // sees consistent framing across every section it might receive. Sections
13
13
  // with no content are omitted entirely (no empty headers in the wire).
14
- import { isLineNavigableMimetype } from "./mimetype-binary.js";
14
+ import { isLineNavigableMimetype } from "@plurnk/plurnk-schemes";
15
15
  // Render packet.system → system message content (markdown string).
16
16
  // {system_definition verbatim}
17
17
  // # Plurnk System Instructions (persona)
@@ -34,7 +34,9 @@ export const renderSystemContent = (system) => {
34
34
  // # Plurnk System User Prompt
35
35
  // # Plurnk System Budget (token budget table — only when present)
36
36
  // # Plurnk System Errors (telemetry errors — only when present)
37
- // # Plurnk System Requirements (per-turn rules incl. Turn N/M marker)
37
+ // # Plurnk System Requirements (static per-turn rules only when present)
38
+ // Requirements renders LAST so the contract the model has to honor is the
39
+ // most recent thing in the user message — closest to the assistant turn.
38
40
  export const renderUserContent = (user) => {
39
41
  const parts = [];
40
42
  if (typeof user.prompt === "string" && user.prompt.length > 0) {
@@ -90,6 +92,18 @@ const canonicalJson = (obj) => {
90
92
  sorted[k] = obj[k];
91
93
  return JSON.stringify(sorted);
92
94
  };
95
+ // Wrap a body in heredoc fences. Leading `\n` always (separates the
96
+ // opening fence from the first body character — necessary because
97
+ // numbered bodies start with `1:\t…` which would otherwise collide
98
+ // visually with the fence's closing `:`). Trailing `\n` only when the
99
+ // body doesn't already end with one — otherwise you get a doubled
100
+ // newline that renders as a blank line before the closing fence, which
101
+ // reads as "the content has a trailing blank line" when actually it
102
+ // doesn't. The body's own whitespace decides the shape.
103
+ const wrapHeredocBody = (fence, body) => {
104
+ const sep = body.endsWith("\n") ? "" : "\n";
105
+ return `<<${fence}:\n${body}${sep}:${fence}`;
106
+ };
93
107
  // Heredoc block for one channel of one entry. Fence is `URI#channel`
94
108
  // (plurnk-grammar-native form) so model emissions and entry projections
95
109
  // share one syntax. When `channel` is null/empty the fence is path-only —
@@ -98,8 +112,67 @@ const canonicalJson = (obj) => {
98
112
  // Body is line-numbered.
99
113
  const renderHeredoc = (uri, channel, body) => {
100
114
  const fence = channel ? `${uri}#${channel}` : uri;
101
- const numbered = numberLines(body);
102
- return `<<${fence}:\n${numbered}\n:${fence}`;
115
+ return wrapHeredocBody(fence, numberLines(body));
116
+ };
117
+ // Re-render a plurnk statement (from log_entries.tx) as the heredoc form
118
+ // the model would have emitted. Used by the log render so the model sees
119
+ // its own ops in its own native syntax — what it wrote, mirrored back.
120
+ //
121
+ // Faithfulness over cleverness: render the parts as recorded. `target.raw`
122
+ // preserves exactly what the model wrote (URL with fragment, bare path,
123
+ // etc.) instead of round-tripping through scheme/pathname/fragment fields.
124
+ // Returns null when tx isn't a parseable PlurnkStatement (callers fall
125
+ // back to the meta line alone).
126
+ //
127
+ // Signal renders to `[…]`:
128
+ // - array of strings (tags) → `[tag1,tag2]`
129
+ // - number (status code, e.g. SEND[200]) → `[200]`
130
+ // - string (runtime, e.g. EXEC[python]) → `[python]`
131
+ // - null/missing → omitted
132
+ // All plurnk statements share the same syntactic frame; signal type
133
+ // varies by op but renders uniformly.
134
+ const renderStatementHeredoc = (tx) => {
135
+ if (tx === null || typeof tx !== "object" || typeof tx.op !== "string" || tx.op.length === 0)
136
+ return null;
137
+ const op = tx.op;
138
+ const suffix = typeof tx.suffix === "string" ? tx.suffix : "";
139
+ let signalStr = "";
140
+ const signal = tx.signal;
141
+ if (Array.isArray(signal)) {
142
+ const tags = signal.filter((t) => typeof t === "string");
143
+ if (tags.length > 0)
144
+ signalStr = `[${tags.join(",")}]`;
145
+ }
146
+ else if (typeof signal === "number") {
147
+ signalStr = `[${signal}]`;
148
+ }
149
+ else if (typeof signal === "string" && signal.length > 0) {
150
+ signalStr = `[${signal}]`;
151
+ }
152
+ let targetStr = "";
153
+ const target = tx.target;
154
+ if (target !== null && typeof target === "object" && typeof target.raw === "string") {
155
+ targetStr = `(${target.raw})`;
156
+ }
157
+ let markerStr = "";
158
+ const lm = tx.lineMarker;
159
+ if (lm !== null && typeof lm === "object" && typeof lm.first === "number") {
160
+ markerStr = typeof lm.last === "number" ? `<${lm.first},${lm.last}>` : `<${lm.first}>`;
161
+ }
162
+ let body;
163
+ if (typeof tx.body === "string")
164
+ body = tx.body;
165
+ else if (tx.body !== null && typeof tx.body === "object" && typeof tx.body.raw === "string")
166
+ body = tx.body.raw;
167
+ else
168
+ body = "";
169
+ // Character-perfect: no padding around body. The body string IS
170
+ // whatever the model wrote between the colons, including any leading
171
+ // or trailing whitespace it chose. Adding `\n` here would inflate
172
+ // single-line emissions into multi-line and nudge the model toward
173
+ // verbose forms — and it would violate the grammar's "body content
174
+ // is character-perfect" guarantee on the way back.
175
+ return `<<${op}${suffix}${signalStr}${targetStr}${markerStr}:${body}:${op}${suffix}`;
103
176
  };
104
177
  // Render a (scheme, pathname) tuple as the URI the model should SEE.
105
178
  // Null scheme → bare pathname. The `file` scheme never reaches this
@@ -115,6 +188,11 @@ const renderModelUri = (scheme, pathname) => {
115
188
  // heredoc blocks. meta describes the entry; nested `channels` carries
116
189
  // per-channel mimetype/tokens so the model doesn't have to READ to
117
190
  // learn the shape of a channel's content.
191
+ //
192
+ // Empty channels are omitted entirely (no meta entry, no body block) —
193
+ // an empty stderr is an infohazard: the model has to read it and infer
194
+ // "this is intentionally blank." Absence carries the same information
195
+ // with zero tokens spent.
118
196
  const renderIndexEntries = (entries) => entries.map((e) => {
119
197
  const uri = renderModelUri(e.scheme, e.pathname);
120
198
  const defaultChannel = e.defaultChannel ?? "";
@@ -125,7 +203,7 @@ const renderIndexEntries = (entries) => entries.map((e) => {
125
203
  const blocks = [];
126
204
  for (const [channelName, ch] of Object.entries(e.channels ?? {})) {
127
205
  const content = ch?.content;
128
- if (typeof content !== "string")
206
+ if (typeof content !== "string" || content.length === 0)
129
207
  continue;
130
208
  const channelInfo = {};
131
209
  if (typeof ch.mimetype === "string")
@@ -153,12 +231,15 @@ const renderIndexEntries = (entries) => entries.map((e) => {
153
231
  // the next packet's user.telemetry.errors[] per SPEC §15.1. (Forward:
154
232
  // meta will gain tokensBefore/After + linesBefore/After to convey
155
233
  // change scope without carrying the body content.)
156
- // Per-entry render: one meta JSON line + optionally a body block for
157
- // ops whose response IS the content the model needs to see. READ is
158
- // the canonical case its rx carries the file/entry content the
159
- // model asked for, and the model can't act on what it can't see. The
160
- // body block uses the heredoc fence form so it parses the same as
161
- // index entries (model already knows the shape).
234
+ //
235
+ // Per-entry render: one meta JSON line plus a body block that the model
236
+ // can read to know what it did. Two body cases:
237
+ // 1. READ@200 with content render rx.content under the target fence.
238
+ // The model asked for content; show it the content. (Matcher is in
239
+ // meta.matcher, count is in meta.matches.)
240
+ // 2. Every other op → re-emit tx as a heredoc in the model's native
241
+ // syntax. The model wrote this; mirror it back so the log is a true
242
+ // record of its actions instead of a row of opaque status codes.
162
243
  const renderLogEntries = (entries) => entries.map((e) => {
163
244
  const meta = {};
164
245
  const coordinate = typeof e.coordinate === "string" ? e.coordinate : null;
@@ -196,16 +277,6 @@ const renderLogEntries = (entries) => entries.map((e) => {
196
277
  // READ@200: expose the response body. READ@204 (successfully empty —
197
278
  // 0 matcher hits, sentinel slice, or empty source) has no body to
198
279
  // render; the meta line carries the signal via `matches` / status code.
199
- // EDIT@200/201: surface the unified diff so the model sees what
200
- // changed without an explicit follow-up READ. Catches wrong-marker
201
- // mistakes on the next turn (M.12).
202
- if (op === "EDIT" && (e.status === 200 || e.status === 201)) {
203
- const rx = typeof e.rx === "string" ? safeParse(e.rx) : e.rx;
204
- if (rx !== null && typeof rx === "object" && typeof rx.diff === "string" && rx.diff.length > 0) {
205
- const fence = target ?? `log://${coordinate}`;
206
- return `${metaLine}\n<<${fence}:\n${rx.diff}\n:${fence}`;
207
- }
208
- }
209
280
  if (op === "READ" && e.status === 200) {
210
281
  const rx = typeof e.rx === "string" ? safeParse(e.rx) : e.rx;
211
282
  if (rx !== null && typeof rx === "object" && typeof rx.content === "string" && rx.content.length > 0) {
@@ -215,16 +286,24 @@ const renderLogEntries = (entries) => entries.map((e) => {
215
286
  // navigable (JSON, XML, HTML) render verbatim — line
216
287
  // numbers in the wrapper would collide with structural
217
288
  // navigation (jsonpath/xpath) used on these formats.
218
- // Classifier is consumer-side in this repo (see AGENTS.md
219
- // "Matcher return semantics rework" / plurnk-grammar#17).
289
+ // Classifier is consumer-side in this repo (SPEC.md §16.6).
220
290
  const mimetype = typeof rx.mimetype === "string" ? rx.mimetype : "text/plain";
221
291
  if (isLineNavigableMimetype(mimetype)) {
222
292
  const start = typeof rx.startLine === "number" ? rx.startLine : 1;
223
- return `${metaLine}\n<<${fence}:\n${numberLines(rx.content, start)}\n:${fence}`;
293
+ return `${metaLine}\n${wrapHeredocBody(fence, numberLines(rx.content, start))}`;
224
294
  }
225
- return `${metaLine}\n<<${fence}:\n${rx.content}\n:${fence}`;
295
+ return `${metaLine}\n${wrapHeredocBody(fence, rx.content)}`;
226
296
  }
227
297
  }
298
+ // Every other op: re-emit the model's statement. EDIT, EXEC, SEND,
299
+ // COPY, MOVE, FIND, SHOW, HIDE — each gets its native heredoc form
300
+ // back. Without this the log row is a status code with no record
301
+ // of what the model actually wrote, and the model has to back into
302
+ // its own actions by inference (see reasoning.md trace from the
303
+ // pre-fix count-files run).
304
+ const heredoc = renderStatementHeredoc(e.tx);
305
+ if (heredoc !== null)
306
+ return `${metaLine}\n${heredoc}`;
228
307
  return metaLine;
229
308
  }).join("\n");
230
309
  const renderActionTarget = (target) => {
@@ -233,9 +312,30 @@ const renderActionTarget = (target) => {
233
312
  const rendered = renderModelUri(target.scheme, target.pathname);
234
313
  return rendered.length > 0 ? rendered : null;
235
314
  };
236
- // Render TelemetryError[] → bullet list. v0 schema is open per Packet.json
237
- // ("Inner shapes intentionally open at v0; consumers populate as needs
238
- // solidify"), so this just emits each error as a JSON line until the
239
- // shape settles.
240
- const renderTelemetryErrors = (errors) => errors.map((e) => `* ${canonicalJson(e)}`).join("\n");
315
+ // Render TelemetryEvent[] → meta line per event, optionally followed by
316
+ // an N:\t-prefixed snippet block when the event carries `snippet` (the
317
+ // convention plurnk-service uses for content-offset positions model
318
+ // sees its own offending bytes alongside the error, not an abstract
319
+ // message it can't trace).
320
+ //
321
+ // Snippet renders verbatim — already N:\t-prefixed at production time
322
+ // (Engine.#extractSnippet). The fence is `error://<line>` to give the
323
+ // model a stable URI shape it can ignore or reference; the `error://`
324
+ // scheme isn't writable, it just identifies "this block is locator
325
+ // context, not addressable content."
326
+ //
327
+ // `snippet` is stripped from the meta JSON so the snippet appears once,
328
+ // in the body block, not also as a quoted string in the meta.
329
+ const renderTelemetryErrors = (errors) => errors.map((e) => {
330
+ const snippet = typeof e.snippet === "string" ? e.snippet : null;
331
+ const meta = { ...e };
332
+ if (snippet !== null)
333
+ delete meta.snippet;
334
+ const metaLine = `* ${canonicalJson(meta)}`;
335
+ if (snippet === null || snippet.length === 0)
336
+ return metaLine;
337
+ const line = typeof e.position?.line === "number" ? e.position.line : 0;
338
+ const fence = `error://${line}`;
339
+ return `${metaLine}\n${wrapHeredocBody(fence, snippet)}`;
340
+ }).join("\n");
241
341
  //# sourceMappingURL=packet-wire.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packet-wire.js","sourceRoot":"","sources":["../../src/core/packet-wire.js"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,6CAA6C;AAC7C,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,qEAAqE;AACrE,8CAA8C;AAE9C,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,mEAAmE;AACnE,iCAAiC;AACjC,6CAA6C;AAC7C,iEAAiE;AACjE,qEAAqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACzC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,4BAA4B,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,0BAA0B,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,+DAA+D;AAC/D,gCAAgC;AAChC,4EAA4E;AAC5E,0EAA0E;AAC1E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,EAAE;IACtC,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC/D,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,6BAA6B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,6BAA6B,qBAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,2EAA2E;AAC3E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5C,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;IAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;CAC5D,CAAC;AAEF,6DAA6D;AAC7D,yEAAyE;AACzE,2EAA2E;AAC3E,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,OAAO,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxD,CAAC,CAAC;AAEF,iEAAiE;AACjE,qEAAqE;AACrE,uEAAuE;AACvE,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE;IACpB,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACxD,CAAC,CAAC;AAEF,wEAAwE;AACxE,kEAAkE;AAClE,oCAAoC;AACpC,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,EAAE;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,qEAAqE;AACrE,wEAAwE;AACxE,0EAA0E;AAC1E,uEAAuE;AACvE,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,KAAK,KAAK,MAAM,QAAQ,MAAM,KAAK,EAAE,CAAC;AACjD,CAAC,CAAC;AAEF,qEAAqE;AACrE,oEAAoE;AACpE,sEAAsE;AACtE,iEAAiE;AACjE,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,QAAQ,IAAI,EAAE,CAAC;IAC5B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC;AACjC,CAAC,CAAC;AAEF,mEAAmE;AACnE,sEAAsE;AACtE,mEAAmE;AACnE,0CAA0C;AAC1C,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,EAAE,CACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;IACd,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACnE,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,EAAE,EAAE,OAAO,CAAC;QAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,SAAS;QAC1C,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,EAAE,CAAC,QAAQ,KAAK,QAAQ;YAAE,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;QACxE,IAAI,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ;YAAE,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAClE,YAAY,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;QACxC,MAAM,YAAY,GAAG,WAAW,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;IACvE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClD,CAAC,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AACrC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEpB,sEAAsE;AACtE,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;AACnE,oEAAoE;AACpE,kDAAkD;AAClD,EAAE;AACF,oEAAoE;AACpE,sEAAsE;AACtE,kEAAkE;AAClE,mDAAmD;AACnD,qEAAqE;AACrE,oEAAoE;AACpE,iEAAiE;AACjE,qEAAqE;AACrE,kEAAkE;AAClE,iDAAiD;AACjD,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,EAAE,CACjC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;IACd,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,IAAI,UAAU,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAAE,IAAI,CAAC,IAAI,GAAG,SAAS,UAAU,IAAI,EAAE,EAAE,CAAC;SAC3E,IAAI,UAAU,KAAK,IAAI;QAAE,IAAI,CAAC,IAAI,GAAG,SAAS,UAAU,EAAE,CAAC;IAChE,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,IAAI,EAAE,KAAK,IAAI;QAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IAC9B,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,IAAI;QAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAE1C,iEAAiE;IACjE,mEAAmE;IACnE,kEAAkE;IAClE,gEAAgE;IAChE,yDAAyD;IACzD,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAChB,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3F,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ;gBAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QACpE,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1E,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;IAE5C,qEAAqE;IACrE,kEAAkE;IAClE,wEAAwE;IACxE,gEAAgE;IAChE,mEAAmE;IACnE,oCAAoC;IACpC,IAAI,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7F,MAAM,KAAK,GAAG,MAAM,IAAI,SAAS,UAAU,EAAE,CAAC;YAC9C,OAAO,GAAG,QAAQ,OAAO,KAAK,MAAM,EAAE,CAAC,IAAI,MAAM,KAAK,EAAE,CAAC;QAC7D,CAAC;IACL,CAAC;IACD,IAAI,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnG,MAAM,KAAK,GAAG,MAAM,IAAI,SAAS,UAAU,EAAE,CAAC;YAC9C,uDAAuD;YACvD,0DAA0D;YAC1D,qDAAqD;YACrD,uDAAuD;YACvD,qDAAqD;YACrD,0DAA0D;YAC1D,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;YAC9E,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,OAAO,GAAG,QAAQ,OAAO,KAAK,MAAM,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC;YACpF,CAAC;YACD,OAAO,GAAG,QAAQ,OAAO,KAAK,MAAM,EAAE,CAAC,OAAO,MAAM,KAAK,EAAE,CAAC;QAChE,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAElB,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,EAAE;IAClC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC,CAAC;AAEF,2EAA2E;AAC3E,uEAAuE;AACvE,qEAAqE;AACrE,iBAAiB;AACjB,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,EAAE,CACrC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"packet-wire.js","sourceRoot":"","sources":["../../src/core/packet-wire.js"],"names":[],"mappings":"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"}