@plurnk/plurnk-service 0.9.0 → 0.10.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 (85) hide show
  1. package/SPEC.md +33 -48
  2. package/dist/content/line-marker.d.ts +2 -17
  3. package/dist/content/line-marker.d.ts.map +1 -1
  4. package/dist/content/line-marker.js +11 -319
  5. package/dist/content/line-marker.js.map +1 -1
  6. package/dist/content/matcher.d.ts.map +1 -1
  7. package/dist/content/matcher.js +9 -33
  8. package/dist/content/matcher.js.map +1 -1
  9. package/dist/content/mimetype-binary.d.ts +0 -1
  10. package/dist/content/mimetype-binary.d.ts.map +1 -1
  11. package/dist/content/mimetype-binary.js +13 -82
  12. package/dist/content/mimetype-binary.js.map +1 -1
  13. package/dist/content/path-mimetype.d.ts +0 -1
  14. package/dist/content/path-mimetype.d.ts.map +1 -1
  15. package/dist/content/path-mimetype.js +10 -44
  16. package/dist/content/path-mimetype.js.map +1 -1
  17. package/dist/core/Engine.d.ts.map +1 -1
  18. package/dist/core/Engine.js +32 -88
  19. package/dist/core/Engine.js.map +1 -1
  20. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  21. package/dist/core/ProviderInstantiate.js +15 -1
  22. package/dist/core/ProviderInstantiate.js.map +1 -1
  23. package/dist/core/git-membership.js +7 -7
  24. package/dist/core/git-membership.js.map +1 -1
  25. package/dist/core/packet-wire.d.ts +0 -5
  26. package/dist/core/packet-wire.d.ts.map +1 -1
  27. package/dist/core/packet-wire.js +2 -54
  28. package/dist/core/packet-wire.js.map +1 -1
  29. package/dist/core/resolveForLoop.d.ts +0 -11
  30. package/dist/core/resolveForLoop.d.ts.map +1 -1
  31. package/dist/core/resolveForLoop.js +7 -29
  32. package/dist/core/resolveForLoop.js.map +1 -1
  33. package/dist/core/results.d.ts +6 -34
  34. package/dist/core/results.d.ts.map +1 -1
  35. package/dist/core/results.js +19 -44
  36. package/dist/core/results.js.map +1 -1
  37. package/dist/core/scheme-types.d.ts.map +1 -1
  38. package/dist/core/types.d.ts +2 -25
  39. package/dist/core/types.d.ts.map +1 -1
  40. package/dist/core/types.js +1 -16
  41. package/dist/core/types.js.map +1 -1
  42. package/dist/schemes/Exec.d.ts +2 -4
  43. package/dist/schemes/Exec.d.ts.map +1 -1
  44. package/dist/schemes/Exec.js +5 -12
  45. package/dist/schemes/Exec.js.map +1 -1
  46. package/dist/schemes/File.d.ts.map +1 -1
  47. package/dist/schemes/File.js +9 -10
  48. package/dist/schemes/File.js.map +1 -1
  49. package/dist/schemes/Known.d.ts +2 -4
  50. package/dist/schemes/Known.d.ts.map +1 -1
  51. package/dist/schemes/Known.js +0 -6
  52. package/dist/schemes/Known.js.map +1 -1
  53. package/dist/schemes/Plurnk.d.ts +2 -4
  54. package/dist/schemes/Plurnk.d.ts.map +1 -1
  55. package/dist/schemes/Plurnk.js +0 -6
  56. package/dist/schemes/Plurnk.js.map +1 -1
  57. package/dist/schemes/Skill.d.ts +2 -4
  58. package/dist/schemes/Skill.d.ts.map +1 -1
  59. package/dist/schemes/Skill.js +0 -6
  60. package/dist/schemes/Skill.js.map +1 -1
  61. package/dist/schemes/Unknown.d.ts +2 -4
  62. package/dist/schemes/Unknown.d.ts.map +1 -1
  63. package/dist/schemes/Unknown.js +0 -6
  64. package/dist/schemes/Unknown.js.map +1 -1
  65. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  66. package/dist/schemes/_entry-crud.js +2 -3
  67. package/dist/schemes/_entry-crud.js.map +1 -1
  68. package/dist/schemes/_entry-find.d.ts.map +1 -1
  69. package/dist/schemes/_entry-find.js +6 -7
  70. package/dist/schemes/_entry-find.js.map +1 -1
  71. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  72. package/dist/schemes/_entry-manifest.js +12 -14
  73. package/dist/schemes/_entry-manifest.js.map +1 -1
  74. package/dist/schemes/_entry-ops.d.ts +1 -3
  75. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  76. package/dist/schemes/_entry-ops.js +1 -59
  77. package/dist/schemes/_entry-ops.js.map +1 -1
  78. package/dist/server/clientTurn.js +1 -1
  79. package/dist/server/clientTurn.js.map +1 -1
  80. package/dist/server/methods/op_hide.js +1 -1
  81. package/dist/server/methods/op_hide.js.map +1 -1
  82. package/dist/server/methods/op_show.js +1 -1
  83. package/dist/server/methods/op_show.js.map +1 -1
  84. package/migrations/0000-00-00.01_schema.sql +0 -13
  85. package/package.json +9 -11
@@ -1,323 +1,15 @@
1
- // `<L>` line-marker semantics (plurnk.md §`<L>`):
1
+ // `<L>` line-marker slicing + structural edits — single source of truth is
2
+ // @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the daughter's
3
+ // functions; call sites stay `LineMarkerOps.sliceLines(...)`. Types re-exported.
2
4
  //
3
- // <N> selects position N (1-indexed)
4
- // <N,M> selects positions N..M inclusive
5
- // <0> sentinel: before position 1 (EDIT prepend)
6
- // <-1> sentinel: after the last position (EDIT append)
7
- // <1,-1> every position (in range context, -1 normalizes to last line)
8
- //
9
- // "N and M are signed integers" — but plurnk.md only documents <0> and
10
- // <-1> as defined sentinels. Other negatives (<-2>, <-3>) are not
11
- // specified and rejected as 416. Within a range, -1 as the M endpoint
12
- // means "include through the last line" (so <1,-1> is whole content).
5
+ // `<L>` semantics (plurnk.md §`<L>`): <N> position, <N,M> range, <0> prepend
6
+ // sentinel, <-1> append sentinel, <1,-1> whole content.
7
+ import { sliceLines as _sliceLines, sliceJsonItems as _sliceJsonItems, applyJsonItemEdit as _applyJsonItemEdit, sliceLinesRaw as _sliceLinesRaw, applyLineMarkerEdit as _applyLineMarkerEdit, } from "@plurnk/plurnk-schemes";
13
8
  export default class LineMarkerOps {
14
- static #splitLines(content) {
15
- const trailingNewline = content.endsWith("\n");
16
- if (content === "")
17
- return { lines: [], trailingNewline: false };
18
- const lines = content.split("\n");
19
- if (trailingNewline)
20
- lines.pop();
21
- return { lines, trailingNewline };
22
- }
23
- static #normalize(marker, totalLines) {
24
- const { first, last } = marker;
25
- if (last === null) {
26
- if (first === 0)
27
- return { kind: "before-first", start: 0, end: 0 };
28
- if (first === -1)
29
- return { kind: "after-last", start: 0, end: 0 };
30
- if (first > 0 && first <= totalLines)
31
- return { kind: "range", start: first, end: first };
32
- return { error: `line ${first} out of range (1..${totalLines})` };
33
- }
34
- let n = first;
35
- let m = last;
36
- if (n === 0)
37
- n = 1;
38
- if (m === -1)
39
- m = totalLines;
40
- if (n < 1 || n > totalLines)
41
- return { error: `range start ${first} out of range (1..${totalLines})` };
42
- if (m < 1 || m > totalLines)
43
- return { error: `range end ${last} out of range (1..${totalLines})` };
44
- if (n > m)
45
- return { error: `range start ${first} > end ${last}` };
46
- return { kind: "range", start: n, end: m };
47
- }
48
- // READ a line range. Returns the raw selected lines (no `N:\t` prefix)
49
- // plus the 1-indexed position of the first selected line. The render
50
- // layer adds `N:\t` per plurnk.md ("READ output prefixes every line with
51
- // line numbers, N:\t") starting from `startLine` — keeps numbering as a
52
- // presentation concern, prevents double-prefixing when the same content
53
- // passes through the log render.
54
- //
55
- // Sentinel positions <0> and <-1> select no content (they're insertion
56
- // points, not lines) → status 200 with empty text.
57
- static sliceLines(content, marker) {
58
- const { lines } = LineMarkerOps.#splitLines(content);
59
- const norm = LineMarkerOps.#normalize(marker, lines.length);
60
- if ("error" in norm)
61
- return { status: 416, error: norm.error };
62
- if (norm.kind !== "range")
63
- return { status: 200, text: "", startLine: undefined };
64
- const selected = lines.slice(norm.start - 1, norm.end);
65
- return { status: 200, text: selected.join("\n"), startLine: norm.start };
66
- }
67
- // Structural `<L>` slice for JSON sources (plurnk-grammar 0.13.0).
68
- // "On structured entries, <L> addresses item index, not line number."
69
- // Every JSON value becomes a list of top-level items:
70
- // array `[a, b, c]` → items are the array elements
71
- // object `{k1: v1, ...}` → items are key-value pairs (as single-key objects)
72
- // scalar `"hello"` / 42 → item is the scalar itself (length-1 list)
73
- // `<L>` indexes into that list (1-indexed). Result is always a JSON array.
74
- // Sentinels `<0>` / `<-1>` are insertion points — empty `[]` for READ.
75
- // Out-of-range positions return 416. Matches the uniform "always JSON
76
- // array out" shape we settled for matcher results.
77
- static #jsonValueToItems(parsed) {
78
- if (Array.isArray(parsed))
79
- return parsed;
80
- if (parsed !== null && typeof parsed === "object") {
81
- // Object items are single-key {key: value} wrappers, in insertion
82
- // order. Object.entries preserves spec-guaranteed iteration order
83
- // for string keys.
84
- return Object.entries(parsed).map(([k, v]) => ({ [k]: v }));
85
- }
86
- // Scalar (string, number, boolean, null): a length-1 list of itself.
87
- return [parsed];
88
- }
89
- static sliceJsonItems(content, marker) {
90
- let parsed;
91
- try {
92
- parsed = JSON.parse(content);
93
- }
94
- catch (err) {
95
- return { status: 400, error: `malformed JSON: ${err instanceof Error ? err.message : String(err)}` };
96
- }
97
- const items = LineMarkerOps.#jsonValueToItems(parsed);
98
- const total = items.length;
99
- const { first, last } = marker;
100
- if (last === null) {
101
- if (first === 0 || first === -1)
102
- return { status: 200, body: "[]" };
103
- if (first > 0 && first <= total)
104
- return { status: 200, body: JSON.stringify([items[first - 1]], null, 2) };
105
- return { status: 416, error: `item ${first} out of range (1..${total})` };
106
- }
107
- let n = first;
108
- let m = last;
109
- if (n === 0)
110
- n = 1;
111
- if (m === -1)
112
- m = total;
113
- if (n < 1 || n > total)
114
- return { status: 416, error: `range start ${first} out of range (1..${total})` };
115
- if (m < 1 || m > total)
116
- return { status: 416, error: `range end ${last} out of range (1..${total})` };
117
- if (n > m)
118
- return { status: 416, error: `range start ${first} > end ${last}` };
119
- return { status: 200, body: JSON.stringify(items.slice(n - 1, m), null, 2) };
120
- }
121
- // Structural `<L>` EDIT for JSON sources (plurnk-grammar 0.13.0/0.14.0).
122
- // Source-shape rules (matches sliceJsonItems' item definition):
123
- // array → items are elements
124
- // object → items are key-value pairs (single-key fragments)
125
- // scalar → length-1 list of itself; grow markers (<0>,<-1>) reject
126
- //
127
- // Body shape (Resolution B):
128
- // body parses as JSON array → those are the items to splice in
129
- // body parses as non-array JSON → single item to splice in
130
- // empty body → delete the selection
131
- // body fails JSON parse → 400 (path-extension declares intent; honor it)
132
- //
133
- // Marker semantics (parallel to line-EDIT):
134
- // <N> replace item N with body item(s)
135
- // <N,M> replace items N..M with body item(s)
136
- // <0> prepend body item(s)
137
- // <-1> append body item(s)
138
- // <1,-1> replace whole top-level with body item(s); empty body clears
139
- // Empty body on a sentinel insertion (<0> or <-1>) → no-op.
140
- static #itemsFromBody(body) {
141
- if (body === "")
142
- return { items: [] }; // empty body = delete
143
- let parsed;
144
- try {
145
- parsed = JSON.parse(body);
146
- }
147
- catch (err) {
148
- return { error: `malformed JSON body: ${err instanceof Error ? err.message : String(err)}` };
149
- }
150
- if (Array.isArray(parsed))
151
- return { items: parsed };
152
- return { items: [parsed] };
153
- }
154
- static #applyJsonArrayEdit(source, marker, items) {
155
- const total = source.length;
156
- const { first, last } = marker;
157
- let result;
158
- if (last === null) {
159
- if (first === 0)
160
- result = [...items, ...source];
161
- else if (first === -1)
162
- result = [...source, ...items];
163
- else if (first > 0 && first <= total)
164
- result = [...source.slice(0, first - 1), ...items, ...source.slice(first)];
165
- else
166
- return { status: 416, error: `position ${first} out of range (1..${total})` };
167
- }
168
- else {
169
- let n = first;
170
- let m = last;
171
- if (n === 0)
172
- n = 1;
173
- if (m === -1)
174
- m = total;
175
- if (total === 0 && (first !== 1 || last !== -1))
176
- return { status: 416, error: `range on empty array` };
177
- if (n < 1 || (total > 0 && n > total))
178
- return { status: 416, error: `range start ${first} out of range (1..${total})` };
179
- if (m < 1 || (total > 0 && m > total))
180
- return { status: 416, error: `range end ${last} out of range (1..${total})` };
181
- if (n > m)
182
- return { status: 416, error: `range start ${first} > end ${last}` };
183
- result = [...source.slice(0, n - 1), ...items, ...source.slice(m)];
184
- }
185
- return { status: 200, result: JSON.stringify(result, null, 2) };
186
- }
187
- static #applyJsonObjectEdit(source, marker, items) {
188
- // Object items are key-value pairs. Body items must be objects;
189
- // each object's entries become kv-pairs to splice in. Items that
190
- // aren't single objects → 400 (model used wrong body shape for an
191
- // object source).
192
- const bodyEntries = [];
193
- for (const item of items) {
194
- if (item === null || typeof item !== "object" || Array.isArray(item)) {
195
- return { status: 400, error: "object source requires body items to be JSON objects (key-value pairs)" };
196
- }
197
- bodyEntries.push(...Object.entries(item));
198
- }
199
- const entries = Object.entries(source);
200
- const total = entries.length;
201
- const { first, last } = marker;
202
- let result;
203
- if (last === null) {
204
- if (first === 0)
205
- result = [...bodyEntries, ...entries];
206
- else if (first === -1)
207
- result = [...entries, ...bodyEntries];
208
- else if (first > 0 && first <= total)
209
- result = [...entries.slice(0, first - 1), ...bodyEntries, ...entries.slice(first)];
210
- else
211
- return { status: 416, error: `position ${first} out of range (1..${total})` };
212
- }
213
- else {
214
- let n = first;
215
- let m = last;
216
- if (n === 0)
217
- n = 1;
218
- if (m === -1)
219
- m = total;
220
- if (total === 0 && (first !== 1 || last !== -1))
221
- return { status: 416, error: `range on empty object` };
222
- if (n < 1 || (total > 0 && n > total))
223
- return { status: 416, error: `range start ${first} out of range (1..${total})` };
224
- if (m < 1 || (total > 0 && m > total))
225
- return { status: 416, error: `range end ${last} out of range (1..${total})` };
226
- if (n > m)
227
- return { status: 416, error: `range start ${first} > end ${last}` };
228
- result = [...entries.slice(0, n - 1), ...bodyEntries, ...entries.slice(m)];
229
- }
230
- return { status: 200, result: JSON.stringify(Object.fromEntries(result), null, 2) };
231
- }
232
- static #applyJsonScalarEdit(source, marker, items) {
233
- // Scalar source is a length-1 list of itself. Only `<1>` replace
234
- // works cleanly; grow markers (<0>,<-1>) and ranges that imply
235
- // growth/delete would require type promotion (scalar → array),
236
- // which is the kind of implicit magic that bites later. Reject.
237
- const { first, last } = marker;
238
- if (last === null && first === 1) {
239
- if (items.length === 0)
240
- return { status: 200, result: "null" }; // delete the scalar
241
- if (items.length === 1)
242
- return { status: 200, result: JSON.stringify(items[0], null, 2) };
243
- return { status: 400, error: "scalar source: <1> body must produce 0 or 1 items (no implicit promotion to array)" };
244
- }
245
- if (last === -1 && first === 1) {
246
- // <1,-1> = whole content. Same constraints as <1> for scalars.
247
- if (items.length === 0)
248
- return { status: 200, result: "null" };
249
- if (items.length === 1)
250
- return { status: 200, result: JSON.stringify(items[0], null, 2) };
251
- return { status: 400, error: "scalar source: <1,-1> body must produce 0 or 1 items (no implicit promotion to array)" };
252
- }
253
- return { status: 400, error: "scalar JSON source: only <1> or <1,-1> markers supported (no implicit promotion to array via grow markers)" };
254
- }
255
- static applyJsonItemEdit(content, marker, body) {
256
- let parsed;
257
- try {
258
- parsed = JSON.parse(content);
259
- }
260
- catch (err) {
261
- return { status: 400, error: `malformed JSON source: ${err instanceof Error ? err.message : String(err)}` };
262
- }
263
- const bodyResult = LineMarkerOps.#itemsFromBody(body);
264
- if ("error" in bodyResult)
265
- return { status: 400, error: bodyResult.error };
266
- const items = bodyResult.items;
267
- // Empty-body sentinel insertion is a no-op (model accidentally
268
- // emitted no items at an insertion point).
269
- if (items.length === 0 && marker.last === null && (marker.first === 0 || marker.first === -1)) {
270
- return { status: 200, result: content };
271
- }
272
- if (Array.isArray(parsed))
273
- return LineMarkerOps.#applyJsonArrayEdit(parsed, marker, items);
274
- if (parsed !== null && typeof parsed === "object")
275
- return LineMarkerOps.#applyJsonObjectEdit(parsed, marker, items);
276
- return LineMarkerOps.#applyJsonScalarEdit(parsed, marker, items);
277
- }
278
- // COPY-style raw line slice. Returns the selected lines verbatim (no line-
279
- // number prefix), trailing newline appended if any lines were selected.
280
- // Used for COPY/MOVE `<L>` per SPEC.md §16.9 (source range, symmetric
281
- // with READ but without the READ-output prefix that's a render concern,
282
- // not a data concern).
283
- static sliceLinesRaw(content, marker) {
284
- const { lines } = LineMarkerOps.#splitLines(content);
285
- const norm = LineMarkerOps.#normalize(marker, lines.length);
286
- if ("error" in norm)
287
- return { status: 416, error: norm.error };
288
- if (norm.kind !== "range")
289
- return { status: 200, text: "" };
290
- const selected = lines.slice(norm.start - 1, norm.end);
291
- const result = selected.length > 0 ? `${selected.join("\n")}\n` : "";
292
- return { status: 200, text: result };
293
- }
294
- // EDIT applies body at the marker position:
295
- // <0> prepend body before line 1
296
- // <-1> append body after the last line
297
- // <N> replace line N with body
298
- // <N,M> replace lines N..M with body
299
- // <1,-1> whole content (replace everything); empty body clears.
300
- // Empty body with <N>/<N,M> deletes those lines.
301
- static applyLineMarkerEdit(content, marker, body) {
302
- const { lines, trailingNewline } = LineMarkerOps.#splitLines(content);
303
- const norm = LineMarkerOps.#normalize(marker, lines.length);
304
- if ("error" in norm)
305
- return { status: 416, error: norm.error };
306
- const bodyLines = LineMarkerOps.#splitLines(body).lines;
307
- let newLines;
308
- if (norm.kind === "before-first") {
309
- newLines = [...bodyLines, ...lines];
310
- }
311
- else if (norm.kind === "after-last") {
312
- newLines = [...lines, ...bodyLines];
313
- }
314
- else {
315
- newLines = [...lines.slice(0, norm.start - 1), ...bodyLines, ...lines.slice(norm.end)];
316
- }
317
- let result = newLines.join("\n");
318
- if (newLines.length > 0 && trailingNewline)
319
- result += "\n";
320
- return { status: 200, result };
321
- }
9
+ static sliceLines(content, marker) { return _sliceLines(content, marker); }
10
+ static sliceJsonItems(content, marker) { return _sliceJsonItems(content, marker); }
11
+ static applyJsonItemEdit(content, marker, body) { return _applyJsonItemEdit(content, marker, body); }
12
+ static sliceLinesRaw(content, marker) { return _sliceLinesRaw(content, marker); }
13
+ static applyLineMarkerEdit(content, marker, body) { return _applyLineMarkerEdit(content, marker, body); }
322
14
  }
323
15
  //# sourceMappingURL=line-marker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"line-marker.js","sourceRoot":"","sources":["../../src/content/line-marker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"line-marker.js","sourceRoot":"","sources":["../../src/content/line-marker.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,iFAAiF;AACjF,EAAE;AACF,6EAA6E;AAC7E,wDAAwD;AACxD,OAAO,EACH,UAAU,IAAI,WAAW,EACzB,cAAc,IAAI,eAAe,EACjC,iBAAiB,IAAI,kBAAkB,EACvC,aAAa,IAAI,cAAc,EAC/B,mBAAmB,IAAI,oBAAoB,GAC9C,MAAM,wBAAwB,CAAC;AAMhC,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,UAAU,CAAC,OAAe,EAAE,MAAkB,IAAiB,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,CAAC,cAAc,CAAC,OAAe,EAAE,MAAkB,IAAqB,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,CAAC,iBAAiB,CAAC,OAAe,EAAE,MAAkB,EAAE,IAAY,IAAgB,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7I,MAAM,CAAC,aAAa,CAAC,OAAe,EAAE,MAAkB,IAAiB,OAAO,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClH,MAAM,CAAC,mBAAmB,CAAC,OAAe,EAAE,MAAkB,EAAE,IAAY,IAAgB,OAAO,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACpJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/content/matcher.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,0BAA0B,CAAC;AAMtE,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,OAAO,OAAO;;WAsBX,mBAAmB,CAC5B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,MAAU,GACrB,OAAO,CAAC,WAAW,CAAC;CAsE1B"}
1
+ {"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/content/matcher.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,0BAA0B,CAAC;AAItE,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,OAAO,OAAO;;WAsBX,mBAAmB,CAC5B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,MAAU,GACrB,OAAO,CAAC,WAAW,CAAC;CA0C1B"}
@@ -5,8 +5,8 @@
5
5
  //
6
6
  // glob / regex → the raw default content (line filter; daughter primitives)
7
7
  // jsonpath → deepJson (daughter's queryJsonpathObject)
8
- // xpath → deepXml (our own xpath engine the daughter exports no
9
- // xpath primitive; we own the xml dependency)
8
+ // xpath → deepXml (daughter's queryXpathStringrecovers source
9
+ // lines from the projection's pk:line attrs)
10
10
  //
11
11
  // Cross-dialect (xpath over a JSON doc, jsonpath over an XML doc) works because
12
12
  // process() yields BOTH projections for any type. Matches render as the
@@ -15,9 +15,7 @@
15
15
  // Status: 200 = matches; 204 = matcher applied, zero results; 400 = malformed
16
16
  // matcher expression; 203 = source unparseable for its mimetype → raw bytes as
17
17
  // text so the model can fall back to regex/visual parsing (SPEC §16.1).
18
- import { queryGlob, queryRegex, queryJsonpathObject } from "@plurnk/plurnk-mimetypes";
19
- import { DOMParser } from "@xmldom/xmldom";
20
- import { select } from "xpath";
18
+ import { queryGlob, queryRegex, queryJsonpathObject, queryXpathString } from "@plurnk/plurnk-mimetypes";
21
19
  import MimetypeBinary from "./mimetype-binary.js";
22
20
  export default class Matcher {
23
21
  // Render matches as the model-facing line-numbered form `<source-line>:\t<value>`,
@@ -40,11 +38,11 @@ export default class Matcher {
40
38
  return matches.map((m) => ({ ...m, line: m.line + offset }));
41
39
  }
42
40
  static async matchAgainstContent(body, content, mimetype, mimetypes, baseLine = 1) {
43
- if (body.dialect === "rag") {
44
- // Semantic similarity (grammar 0.21.0: `~query`, top-K via <L>). A
45
- // service-side feature needing its own embedding/vector design — the
46
- // resolution mechanism is ours, not the grammar's to prescribe. Parked.
47
- return { status: 501, error: "rag matcher not yet implemented (semantic similarity — parked, needs its own embedding/vector design)" };
41
+ if (body.dialect === "semantic") {
42
+ // Semantic similarity (grammar `~query`, top-K via <L>). A service-side
43
+ // feature needing its own embedding/vector design — the resolution
44
+ // mechanism is ours, not the grammar's to prescribe. Parked.
45
+ return { status: 501, error: "semantic matcher not yet implemented (similarity — parked, needs its own embedding/vector design)" };
48
46
  }
49
47
  let matches;
50
48
  if (body.dialect === "glob") {
@@ -73,7 +71,7 @@ export default class Matcher {
73
71
  try {
74
72
  matches = body.dialect === "jsonpath"
75
73
  ? queryJsonpathObject(deepJson, body.raw)
76
- : Matcher.#queryXpath(deepXml, body.raw);
74
+ : queryXpathString(deepXml, body.raw, mimetype);
77
75
  }
78
76
  catch (err) {
79
77
  // A throw from the QUERY is a malformed matcher expression the grammar
@@ -86,27 +84,5 @@ export default class Matcher {
86
84
  const adjusted = Matcher.#shiftLines(matches, baseLine);
87
85
  return { status: 200, body: Matcher.#renderMatches(adjusted), matches: adjusted.length };
88
86
  }
89
- // XPath over the daughter's deepXml projection — our own engine. An element
90
- // node renders as its XML serialization, a text/attribute node its value. Line
91
- // comes from the matched node's `line` attr (its parent's, for `text()`),
92
- // defaulting to 1 where the projection carries no source lines (JSON's deepXml).
93
- // The projection's inline `line`/`endLine` bookkeeping currently pollutes
94
- // element serialization (and is invalid XML on a content-attr collision) — the
95
- // daughter's to fix (plurnk-mimetypes#12), not ours to strip.
96
- static #queryXpath(deepXml, expression) {
97
- const doc = new DOMParser().parseFromString(deepXml, "text/xml");
98
- const selected = select(expression, doc);
99
- const nodes = Array.isArray(selected) ? selected : [selected];
100
- return nodes.map((node) => {
101
- const el = node;
102
- const line = el.getAttribute?.("line") ?? el.parentNode?.getAttribute?.("line");
103
- const matched = el.nodeType === 1 ? String(node) : el.nodeValue ?? String(node);
104
- return {
105
- line: line !== undefined && line !== null ? Number(line) : 1,
106
- matched,
107
- matching: expression,
108
- };
109
- });
110
- }
111
87
  }
112
88
  //# sourceMappingURL=matcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/content/matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/content/matcher.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  export default class MimetypeBinary {
2
- #private;
3
2
  static TEXT_PRIMITIVE_MIMETYPE: string;
4
3
  static isBinaryMimetype(mimetype: string): boolean;
5
4
  static isJsonMimetype(mimetype: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"mimetype-binary.d.ts","sourceRoot":"","sources":["../../src/content/mimetype-binary.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,OAAO,OAAO,cAAc;;IA8B/B,MAAM,CAAC,uBAAuB,SAAmB;IAEjD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAclD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIhD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAWzD,MAAM,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM;CAMhF"}
1
+ {"version":3,"file":"mimetype-binary.d.ts","sourceRoot":"","sources":["../../src/content/mimetype-binary.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,uBAAuB,SAA4B;IAC1D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAClD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAChD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IACzD,MAAM,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM;CAChF"}
@@ -1,86 +1,17 @@
1
- // Mimetype classifiers used at op-handler boundaries.
1
+ // Mimetype classifiers used at op-handler boundaries — single source of truth
2
+ // is @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the
3
+ // daughter's functions (mandate: static-method class); call sites stay
4
+ // `MimetypeBinary.isBinaryMimetype(...)`.
2
5
  //
3
- // `isBinaryMimetype` — enforces 415 on binary entries for READ/EDIT/
4
- // SHOW/HIDE (SPEC.md §16.9 binary entries 415).
5
- //
6
- // `isLineNavigableMimetype` decides whether the render layer prefixes
7
- // each line with `N:\t` on READ output. Line-oriented mimetypes (text,
8
- // markdown, source code, line-aligned configs) get `N:\t`. Tree-oriented
9
- // mimetypes (JSON, XML, HTML) don't — line numbers would conflict with
10
- // the structural navigation those formats use (jsonpath, xpath).
11
- //
12
- // Local heuristic until @plurnk/plurnk-mimetypes exposes per-mimetype
13
- // metadata via its public API (HandlerInfo flags exist at registry
14
- // level; not queryable per-mimetype yet — see plurnk-mimetypes#3).
6
+ // isBinaryMimetype — enforces 415 on binary entries (SPEC §16.9)
7
+ // isLineNavigableMimetype decides the render layer's `N:\t` line prefixes
8
+ // TEXT_PRIMITIVE_MIMETYPE — text/markdown, the auto-derived text default
9
+ import { isBinaryMimetype as _isBinaryMimetype, isJsonMimetype as _isJsonMimetype, isLineNavigableMimetype as _isLineNavigableMimetype, normalizeAutoTextMimetype as _normalizeAutoTextMimetype, TEXT_PRIMITIVE_MIMETYPE as _TEXT_PRIMITIVE_MIMETYPE, } from "@plurnk/plurnk-schemes";
15
10
  export default class MimetypeBinary {
16
- static #TEXT_APPLICATION_MIMETYPES = new Set([
17
- "application/json",
18
- "application/yaml",
19
- "application/toml",
20
- "application/xml",
21
- "application/javascript",
22
- "application/typescript",
23
- "application/sql",
24
- ]);
25
- // Mimetypes that are structurally tree-navigated rather than line-
26
- // navigated. READ output of these doesn't get `N:\t` prefixes.
27
- static #TREE_NAVIGABLE_MIMETYPES = new Set([
28
- "application/json",
29
- "application/xml",
30
- "text/html",
31
- ]);
32
- // Text primitive for the agent contract: text/markdown is the default
33
- // text mimetype anywhere plurnk-service auto-derives a text result.
34
- // text/plain is reserved for explicit scheme-manifest declarations
35
- // (exec subprocess streams) and client-set entries. Rationale: markdown
36
- // is a strict superset of plain text — any plain text is valid markdown
37
- // — so the agent gets markdown-aware processing capability for free,
38
- // and never needs to decide "is this markdown enough to mark as
39
- // markdown?"
40
- //
41
- // Use this at any consumer-side auto-derivation point (file scheme
42
- // extension fallback, log rx wrap, etc.) to normalize text/plain → text/markdown.
43
- static TEXT_PRIMITIVE_MIMETYPE = "text/markdown";
44
- static isBinaryMimetype(mimetype) {
45
- if (mimetype.length === 0)
46
- return false;
47
- const slash = mimetype.indexOf("/");
48
- if (slash === -1)
49
- return true;
50
- const type = mimetype.slice(0, slash);
51
- if (type === "text")
52
- return false;
53
- if (MimetypeBinary.#TEXT_APPLICATION_MIMETYPES.has(mimetype))
54
- return false;
55
- if (mimetype.endsWith("+json") || mimetype.endsWith("+xml") || mimetype.endsWith("+yaml"))
56
- return false;
57
- return true;
58
- }
59
- // JSON-family check — used by `<L>` dispatch to pick structural slicer
60
- // (sliceJsonItems) over line slicer (sliceLines) for JSON sources.
61
- // Matches application/json plus +json suffix variants per RFC 6839.
62
- static isJsonMimetype(mimetype) {
63
- return mimetype === "application/json" || mimetype.endsWith("+json");
64
- }
65
- static isLineNavigableMimetype(mimetype) {
66
- if (mimetype.length === 0)
67
- return false;
68
- if (MimetypeBinary.isBinaryMimetype(mimetype))
69
- return false;
70
- if (MimetypeBinary.#TREE_NAVIGABLE_MIMETYPES.has(mimetype))
71
- return false;
72
- if (mimetype.endsWith("+json") || mimetype.endsWith("+xml"))
73
- return false;
74
- // Everything text-ish that isn't tree-shaped is line-navigable.
75
- // text/plain, text/markdown, text/csv, text/javascript, text/typescript,
76
- // application/yaml, application/toml, application/javascript, etc.
77
- return true;
78
- }
79
- static normalizeAutoTextMimetype(mimetype) {
80
- if (mimetype === null || mimetype === undefined || mimetype === "" || mimetype === "text/plain") {
81
- return MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE;
82
- }
83
- return mimetype;
84
- }
11
+ static TEXT_PRIMITIVE_MIMETYPE = _TEXT_PRIMITIVE_MIMETYPE;
12
+ static isBinaryMimetype(mimetype) { return _isBinaryMimetype(mimetype); }
13
+ static isJsonMimetype(mimetype) { return _isJsonMimetype(mimetype); }
14
+ static isLineNavigableMimetype(mimetype) { return _isLineNavigableMimetype(mimetype); }
15
+ static normalizeAutoTextMimetype(mimetype) { return _normalizeAutoTextMimetype(mimetype); }
85
16
  }
86
17
  //# sourceMappingURL=mimetype-binary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mimetype-binary.js","sourceRoot":"","sources":["../../src/content/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,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,2BAA2B,GAAwB,IAAI,GAAG,CAAC;QAC9D,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,iBAAiB;QACjB,wBAAwB;QACxB,wBAAwB;QACxB,iBAAiB;KACpB,CAAC,CAAC;IAEH,mEAAmE;IACnE,+DAA+D;IAC/D,MAAM,CAAC,yBAAyB,GAAwB,IAAI,GAAG,CAAC;QAC5D,kBAAkB;QAClB,iBAAiB;QACjB,WAAW;KACd,CAAC,CAAC;IAEH,sEAAsE;IACtE,oEAAoE;IACpE,mEAAmE;IACnE,wEAAwE;IACxE,wEAAwE;IACxE,qEAAqE;IACrE,gEAAgE;IAChE,aAAa;IACb,EAAE;IACF,mEAAmE;IACnE,kFAAkF;IAClF,MAAM,CAAC,uBAAuB,GAAG,eAAe,CAAC;IAEjD,MAAM,CAAC,gBAAgB,CAAC,QAAgB;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,cAAc,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3E,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACxG,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,mEAAmE;IACnE,oEAAoE;IACpE,MAAM,CAAC,cAAc,CAAC,QAAgB;QAClC,OAAO,QAAQ,KAAK,kBAAkB,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,uBAAuB,CAAC,QAAgB;QAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5D,IAAI,cAAc,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QACzE,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,gEAAgE;QAChE,yEAAyE;QACzE,mEAAmE;QACnE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,yBAAyB,CAAC,QAAmC;QAChE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9F,OAAO,cAAc,CAAC,uBAAuB,CAAC;QAClD,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC"}
1
+ {"version":3,"file":"mimetype-binary.js","sourceRoot":"","sources":["../../src/content/mimetype-binary.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,uEAAuE;AACvE,0CAA0C;AAC1C,EAAE;AACF,yEAAyE;AACzE,8EAA8E;AAC9E,2EAA2E;AAC3E,OAAO,EACH,gBAAgB,IAAI,iBAAiB,EACrC,cAAc,IAAI,eAAe,EACjC,uBAAuB,IAAI,wBAAwB,EACnD,yBAAyB,IAAI,0BAA0B,EACvD,uBAAuB,IAAI,wBAAwB,GACtD,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,uBAAuB,GAAG,wBAAwB,CAAC;IAC1D,MAAM,CAAC,gBAAgB,CAAC,QAAgB,IAAa,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,CAAC,cAAc,CAAC,QAAgB,IAAa,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,uBAAuB,CAAC,QAAgB,IAAa,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxG,MAAM,CAAC,yBAAyB,CAAC,QAAmC,IAAY,OAAO,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import type { Mimetypes } from "@plurnk/plurnk-mimetypes";
2
2
  export default class PathMimetype {
3
- #private;
4
3
  static resolveEntryMimetype(pathname: string, schemeDefault: string, mimetypes: Mimetypes | undefined): Promise<string>;
5
4
  }
6
5
  //# sourceMappingURL=path-mimetype.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-mimetype.d.ts","sourceRoot":"","sources":["../../src/content/path-mimetype.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,CAAC,OAAO,OAAO,YAAY;;WAiBhB,oBAAoB,CAC7B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,SAAS,GAAG,SAAS,GACjC,OAAO,CAAC,MAAM,CAAC;CAQrB"}
1
+ {"version":3,"file":"path-mimetype.d.ts","sourceRoot":"","sources":["../../src/content/path-mimetype.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAG1H"}