@plurnk/plurnk-service 1.26.0 → 1.27.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 (227) hide show
  1. package/.env.defaults +3 -6
  2. package/SPEC.md +260 -126
  3. package/dist/build-info.json +1 -1
  4. package/dist/content/body-preview.d.ts +1 -0
  5. package/dist/content/body-preview.d.ts.map +1 -1
  6. package/dist/content/body-preview.js +7 -0
  7. package/dist/content/body-preview.js.map +1 -1
  8. package/dist/content/byte-view.d.ts +19 -2
  9. package/dist/content/byte-view.d.ts.map +1 -1
  10. package/dist/content/byte-view.js +67 -14
  11. package/dist/content/byte-view.js.map +1 -1
  12. package/dist/content/edit-receipt.js +1 -1
  13. package/dist/content/edit-receipt.js.map +1 -1
  14. package/dist/content/line-marker.js +1 -1
  15. package/dist/content/line-marker.js.map +1 -1
  16. package/dist/content/line-selection.d.ts +3 -1
  17. package/dist/content/line-selection.d.ts.map +1 -1
  18. package/dist/content/line-selection.js +27 -3
  19. package/dist/content/line-selection.js.map +1 -1
  20. package/dist/content/matcher.d.ts +9 -14
  21. package/dist/content/matcher.d.ts.map +1 -1
  22. package/dist/content/matcher.js +51 -45
  23. package/dist/content/matcher.js.map +1 -1
  24. package/dist/content/pattern-edits.d.ts +7 -26
  25. package/dist/content/pattern-edits.d.ts.map +1 -1
  26. package/dist/content/pattern-edits.js +54 -91
  27. package/dist/content/pattern-edits.js.map +1 -1
  28. package/dist/content/read-projector.d.ts +2 -1
  29. package/dist/content/read-projector.d.ts.map +1 -1
  30. package/dist/content/read-projector.js +39 -7
  31. package/dist/content/read-projector.js.map +1 -1
  32. package/dist/content/read-resolve.js +1 -1
  33. package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
  34. package/dist/core/AdmittedTurnExecutor.js +3 -3
  35. package/dist/core/AdmittedTurnExecutor.js.map +1 -1
  36. package/dist/core/ChannelWrite.d.ts +2 -3
  37. package/dist/core/ChannelWrite.d.ts.map +1 -1
  38. package/dist/core/ChannelWrite.js +21 -22
  39. package/dist/core/ChannelWrite.js.map +1 -1
  40. package/dist/core/ChannelWrite.sql +26 -0
  41. package/dist/core/DataStatementRunner.d.ts.map +1 -1
  42. package/dist/core/DataStatementRunner.js +1 -0
  43. package/dist/core/DataStatementRunner.js.map +1 -1
  44. package/dist/core/Dispatcher.d.ts +2 -2
  45. package/dist/core/Dispatcher.d.ts.map +1 -1
  46. package/dist/core/Dispatcher.js +6 -13
  47. package/dist/core/Dispatcher.js.map +1 -1
  48. package/dist/core/EditMutations.d.ts +5 -5
  49. package/dist/core/EditMutations.d.ts.map +1 -1
  50. package/dist/core/EditMutations.js +44 -50
  51. package/dist/core/EditMutations.js.map +1 -1
  52. package/dist/core/EditSequence.js +2 -2
  53. package/dist/core/EditSequence.js.map +1 -1
  54. package/dist/core/Engine.d.ts +1 -0
  55. package/dist/core/Engine.d.ts.map +1 -1
  56. package/dist/core/Engine.js +3 -0
  57. package/dist/core/Engine.js.map +1 -1
  58. package/dist/core/InferenceCall.js +2 -2
  59. package/dist/core/InferenceCall.js.map +1 -1
  60. package/dist/core/InferenceCall.sql +1 -0
  61. package/dist/core/LiveSubscription.d.ts +20 -0
  62. package/dist/core/LiveSubscription.d.ts.map +1 -0
  63. package/dist/core/LiveSubscription.js +68 -0
  64. package/dist/core/LiveSubscription.js.map +1 -0
  65. package/dist/core/LiveSubscriptions.d.ts +1 -0
  66. package/dist/core/LiveSubscriptions.d.ts.map +1 -1
  67. package/dist/core/LiveSubscriptions.js +8 -0
  68. package/dist/core/LiveSubscriptions.js.map +1 -1
  69. package/dist/core/LogBody.js +1 -1
  70. package/dist/core/LogBody.js.map +1 -1
  71. package/dist/core/LoopDriver.js +2 -1
  72. package/dist/core/LoopDriver.js.map +1 -1
  73. package/dist/core/LoopLifecycle.d.ts +2 -2
  74. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  75. package/dist/core/LoopLifecycle.js +2 -4
  76. package/dist/core/LoopLifecycle.js.map +1 -1
  77. package/dist/core/LoopLifecycle.sql +1 -6
  78. package/dist/core/MutationEffects.d.ts +1 -3
  79. package/dist/core/MutationEffects.d.ts.map +1 -1
  80. package/dist/core/MutationEffects.js +2 -1
  81. package/dist/core/MutationEffects.js.map +1 -1
  82. package/dist/core/PacketBuilder.d.ts.map +1 -1
  83. package/dist/core/PacketBuilder.js +10 -3
  84. package/dist/core/PacketBuilder.js.map +1 -1
  85. package/dist/core/PacketBuilder.sql +4 -5
  86. package/dist/core/PatternSelection.d.ts +5 -10
  87. package/dist/core/PatternSelection.d.ts.map +1 -1
  88. package/dist/core/PatternSelection.js +9 -16
  89. package/dist/core/PatternSelection.js.map +1 -1
  90. package/dist/core/ResourceMutations.d.ts +2 -4
  91. package/dist/core/ResourceMutations.d.ts.map +1 -1
  92. package/dist/core/ResourceMutations.js +2 -5
  93. package/dist/core/ResourceMutations.js.map +1 -1
  94. package/dist/core/ResourceSelector.d.ts +2 -2
  95. package/dist/core/ResourceSelector.d.ts.map +1 -1
  96. package/dist/core/ResourceSelector.js +64 -33
  97. package/dist/core/ResourceSelector.js.map +1 -1
  98. package/dist/core/ResourceTransfers.d.ts +2 -4
  99. package/dist/core/ResourceTransfers.d.ts.map +1 -1
  100. package/dist/core/ResourceTransfers.js +74 -50
  101. package/dist/core/ResourceTransfers.js.map +1 -1
  102. package/dist/core/SchemeRegistry.d.ts +1 -0
  103. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  104. package/dist/core/SchemeRegistry.js +11 -9
  105. package/dist/core/SchemeRegistry.js.map +1 -1
  106. package/dist/core/ServiceTeardown.d.ts +3 -2
  107. package/dist/core/ServiceTeardown.d.ts.map +1 -1
  108. package/dist/core/ServiceTeardown.js +17 -8
  109. package/dist/core/ServiceTeardown.js.map +1 -1
  110. package/dist/core/StopDeadline.d.ts +5 -0
  111. package/dist/core/StopDeadline.d.ts.map +1 -0
  112. package/dist/core/StopDeadline.js +20 -0
  113. package/dist/core/StopDeadline.js.map +1 -0
  114. package/dist/core/ToolResources.d.ts.map +1 -1
  115. package/dist/core/ToolResources.js +11 -2
  116. package/dist/core/ToolResources.js.map +1 -1
  117. package/dist/core/TurnDispositionHandler.d.ts +4 -2
  118. package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
  119. package/dist/core/TurnDispositionHandler.js +24 -6
  120. package/dist/core/TurnDispositionHandler.js.map +1 -1
  121. package/dist/core/TurnRunner.d.ts.map +1 -1
  122. package/dist/core/TurnRunner.js +14 -21
  123. package/dist/core/TurnRunner.js.map +1 -1
  124. package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
  125. package/dist/core/caps/DbSubscriptionCaps.js +13 -19
  126. package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
  127. package/dist/core/content-hash.d.ts +1 -1
  128. package/dist/core/content-hash.d.ts.map +1 -1
  129. package/dist/core/content-hash.js.map +1 -1
  130. package/dist/core/mutation-types.d.ts +6 -4
  131. package/dist/core/mutation-types.d.ts.map +1 -1
  132. package/dist/core/packet-wire.d.ts.map +1 -1
  133. package/dist/core/packet-wire.js +30 -1
  134. package/dist/core/packet-wire.js.map +1 -1
  135. package/dist/core/provider-accounting.d.ts +1 -1
  136. package/dist/core/provider-accounting.d.ts.map +1 -1
  137. package/dist/core/provider-accounting.js +2 -1
  138. package/dist/core/provider-accounting.js.map +1 -1
  139. package/dist/digest/DigestEvidence.d.ts +1 -0
  140. package/dist/digest/DigestEvidence.d.ts.map +1 -1
  141. package/dist/digest/DigestEvidence.js +6 -0
  142. package/dist/digest/DigestEvidence.js.map +1 -1
  143. package/dist/digest/DigestRender.d.ts +1 -0
  144. package/dist/digest/DigestRender.d.ts.map +1 -1
  145. package/dist/digest/DigestRender.js +33 -11
  146. package/dist/digest/DigestRender.js.map +1 -1
  147. package/dist/digest/DigestRequiem.js +4 -4
  148. package/dist/digest/DigestRequiem.js.map +1 -1
  149. package/dist/digest/digest-rows.d.ts +1 -0
  150. package/dist/digest/digest-rows.d.ts.map +1 -1
  151. package/dist/digest/digest.sql +5 -0
  152. package/dist/schemes/Exec.d.ts.map +1 -1
  153. package/dist/schemes/Exec.js +28 -27
  154. package/dist/schemes/Exec.js.map +1 -1
  155. package/dist/schemes/File.d.ts.map +1 -1
  156. package/dist/schemes/File.js +1 -2
  157. package/dist/schemes/File.js.map +1 -1
  158. package/dist/schemes/Log.d.ts.map +1 -1
  159. package/dist/schemes/Log.js +4 -17
  160. package/dist/schemes/Log.js.map +1 -1
  161. package/dist/schemes/TurnSource.js +2 -2
  162. package/dist/schemes/TurnSource.js.map +1 -1
  163. package/dist/schemes/_derivation-use.d.ts +7 -0
  164. package/dist/schemes/_derivation-use.d.ts.map +1 -0
  165. package/dist/schemes/_derivation-use.js +40 -0
  166. package/dist/schemes/_derivation-use.js.map +1 -0
  167. package/dist/schemes/_entry-crud.d.ts +6 -1
  168. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  169. package/dist/schemes/_entry-crud.js.map +1 -1
  170. package/dist/schemes/_entry-find.d.ts.map +1 -1
  171. package/dist/schemes/_entry-find.js +13 -49
  172. package/dist/schemes/_entry-find.js.map +1 -1
  173. package/dist/schemes/_entry-find.sql +0 -11
  174. package/dist/schemes/_entry-fts.d.ts.map +1 -1
  175. package/dist/schemes/_entry-fts.js +9 -3
  176. package/dist/schemes/_entry-fts.js.map +1 -1
  177. package/dist/schemes/_entry-fts.sql +14 -8
  178. package/dist/schemes/_entry-graph.d.ts +5 -8
  179. package/dist/schemes/_entry-graph.d.ts.map +1 -1
  180. package/dist/schemes/_entry-graph.js +33 -72
  181. package/dist/schemes/_entry-graph.js.map +1 -1
  182. package/dist/schemes/_entry-graph.sql +30 -48
  183. package/dist/schemes/_entry-manifest.d.ts +5 -0
  184. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  185. package/dist/schemes/_entry-manifest.js +5 -0
  186. package/dist/schemes/_entry-manifest.js.map +1 -1
  187. package/dist/schemes/_entry-ops.d.ts +1 -1
  188. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  189. package/dist/schemes/_entry-ops.js +4 -11
  190. package/dist/schemes/_entry-ops.js.map +1 -1
  191. package/dist/schemes/_search-index.d.ts +10 -0
  192. package/dist/schemes/_search-index.d.ts.map +1 -1
  193. package/dist/schemes/_search-index.js +33 -1
  194. package/dist/schemes/_search-index.js.map +1 -1
  195. package/dist/schemes/exec-lifetime.d.ts.map +1 -1
  196. package/dist/schemes/exec-lifetime.js +1 -2
  197. package/dist/schemes/exec-lifetime.js.map +1 -1
  198. package/dist/server/Daemon.d.ts +2 -1
  199. package/dist/server/Daemon.d.ts.map +1 -1
  200. package/dist/server/Daemon.js +20 -33
  201. package/dist/server/Daemon.js.map +1 -1
  202. package/dist/server/DrainSupervisor.d.ts +2 -1
  203. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  204. package/dist/server/DrainSupervisor.js +37 -56
  205. package/dist/server/DrainSupervisor.js.map +1 -1
  206. package/dist/server/Functionality.d.ts +1 -1
  207. package/dist/server/Functionality.d.ts.map +1 -1
  208. package/dist/server/Functionality.js +24 -11
  209. package/dist/server/Functionality.js.map +1 -1
  210. package/dist/server/FunctionalityManager.js +2 -2
  211. package/dist/server/FunctionalityManager.js.map +1 -1
  212. package/dist/server/Retention.d.ts.map +1 -1
  213. package/dist/server/Retention.js +7 -3
  214. package/dist/server/Retention.js.map +1 -1
  215. package/dist/server/drain.sql +0 -6
  216. package/dist/server/seam-loop.sql +1 -1
  217. package/dist/service.js +1 -1
  218. package/dist/service.js.map +1 -1
  219. package/docs/env.md +4 -3
  220. package/migrations/013_graph_regions.sql +31 -0
  221. package/migrations/014_stream_timing.sql +3 -0
  222. package/migrations/015_request_evidence.sql +3 -0
  223. package/package.json +34 -34
  224. package/dist/server/exec-poll-backoff.d.ts +0 -2
  225. package/dist/server/exec-poll-backoff.d.ts.map +0 -1
  226. package/dist/server/exec-poll-backoff.js +0 -6
  227. package/dist/server/exec-poll-backoff.js.map +0 -1
@@ -9,6 +9,7 @@ import { entryCoordinateOf, missDetail, schemeNameOf } from "./plurnk-uri.js";
9
9
  import EntryAddressBinding from "./EntryAddressBinding.js";
10
10
  import { LineAnchors, LineMarkerOps, MimetypeBinary } from "../content/index.js";
11
11
  import EntryCrud from "../schemes/_entry-crud.js";
12
+ import EntryManifest from "../schemes/_entry-manifest.js";
12
13
  import EntryReadable from "../schemes/_entry-readable.js";
13
14
  import Results from "./results.js";
14
15
  import MutationEffects from "./MutationEffects.js";
@@ -16,6 +17,8 @@ import { coreRepresentationProvider } from "./CoreSchemeServices.js";
16
17
  import LineSelection from "../content/line-selection.js";
17
18
  import PatternEdits from "../content/pattern-edits.js";
18
19
  import PatternSelection from "./PatternSelection.js";
20
+ import ByteView from "../content/byte-view.js";
21
+ import { contentHash } from "./content-hash.js";
19
22
  // Shared source acquisition for explicit resource transfers.
20
23
  export default class ResourceSelector {
21
24
  #schemes;
@@ -65,10 +68,10 @@ export default class ResourceSelector {
65
68
  if (scheme === null) {
66
69
  return MutationEffects.failure("resource-scheme-required", 400, "Resource selection requires an address.", {}, { retryable: false });
67
70
  }
68
- // {§copy-move-pattern} — a pattern selects the lines a source gives; a destination is a
71
+ // {§copy-move-pattern} — a pattern selects source spans; a destination is a
69
72
  // place, named by its scope.
70
73
  if (access === "write" && matcher !== null) {
71
- return MutationEffects.failure("pattern-destination-unsupported", 400, "A pattern selects source lines; a COPY or MOVE destination is a place. Name where the lines land with a scope.", {}, { scheme, retryable: false });
74
+ return MutationEffects.failure("pattern-destination-unsupported", 400, "A pattern selects source text; a COPY or MOVE destination uses a scope.", {}, { scheme, retryable: false });
72
75
  }
73
76
  const binding = access === "read" ? await ResourceBindings.resolve(target, ctx) : undefined;
74
77
  const handler = access === "read" ? binding?.handler : this.#schemes.get(scheme, ctx.workspaceId);
@@ -149,9 +152,6 @@ export default class ResourceSelector {
149
152
  retryable: false,
150
153
  });
151
154
  }
152
- const resolvedMarker = this.resolveResourceLineMarker(selection, selected.content, operation, identity);
153
- if ("result" in resolvedMarker)
154
- return resolvedMarker.result;
155
155
  if (selected.producerResult !== undefined && selected.producerResult.status >= 400) {
156
156
  return Results.assert(selected.producerResult);
157
157
  }
@@ -162,10 +162,18 @@ export default class ResourceSelector {
162
162
  // not its readable text projection.
163
163
  const sourceProjection = representation.attributes?.sourceProjection;
164
164
  const sourceMimetype = typeof sourceProjection?.mimetype === "string" ? sourceProjection.mimetype : selected.mimetype;
165
- if (await MimetypeBinary.isBinaryMimetype(sourceMimetype, ctx.mimetypes)) {
166
- if (selection.matcher !== null) {
167
- return PatternSelection.refuse("pattern-unsupported", 400, `Channel #${selection.channel} is binary; bytes have no lines for a pattern to select.`, selection.scheme, operation);
168
- }
165
+ const binary = await MimetypeBinary.isBinaryMimetype(sourceMimetype, ctx.mimetypes);
166
+ if (binary) {
167
+ if (operation === "EDIT")
168
+ return PatternSelection.refuse("binary-edit-unsupported", 415, "Text edits do not author native bytes.", selection.scheme, operation);
169
+ const marker = ByteView.marker(selection.lineMarker);
170
+ if ("result" in marker)
171
+ return marker.result;
172
+ }
173
+ const resolvedMarker = this.resolveResourceLineMarker(selection, selected.content, operation, identity);
174
+ if ("result" in resolvedMarker)
175
+ return resolvedMarker.result;
176
+ if (binary) {
169
177
  const byteSource = (storageAddress === undefined ? undefined : handler.byteSource?.(storageAddress, EntryAddressBinding.addressContext(ctx)))
170
178
  ?? await EntryCrud.storedByteSource(representation, selection.channel, ctx.mimetypes);
171
179
  if (byteSource === undefined) {
@@ -175,19 +183,42 @@ export default class ResourceSelector {
175
183
  if (size === null) {
176
184
  return MutationEffects.failure("entry-not-found", 404, `No bytes exist at ${target}.`, {}, { target, retryable: false });
177
185
  }
178
- const marks = resolvedMarker.selection.lineMarker?.marks ?? [];
179
- const whole = marks.length === 0 || (marks.length === 2 && marks[0] === 1 && marks[1] === -1);
180
- const start = marks.length >= 1 ? marks[0] : 1;
181
- const end = marks.length >= 2 ? (marks[1] === -1 ? size : marks[1]) : (marks.length === 1 ? marks[0] : size);
182
- if (!whole && !(start >= 1 && end >= start && end <= size)) {
183
- return MutationEffects.failure("range-not-satisfiable", 416, `Byte range <${start},${end}> is outside the available 1..${size}.`, {}, { channel: selection.channel, unit: "byte", available: size, retryable: false });
186
+ const window = LineMarkerOps.window(resolvedMarker.selection.lineMarker ?? { marks: [1, -1] }, size, "byte");
187
+ if (window.status !== 200)
188
+ return window;
189
+ let complete;
190
+ let bytes;
191
+ let matchedScopes;
192
+ if (selection.matcher !== null) {
193
+ const loaded = await ByteView.load(byteSource, target);
194
+ if (!("bytes" in loaded))
195
+ return loaded;
196
+ complete = loaded.bytes;
197
+ const match = await ByteView.match(selection.matcher, complete);
198
+ if (match.status >= 400)
199
+ return Results.assert(match);
200
+ const spans = PatternEdits.spans(match.matches ?? [], selection.lineMarker === null ? null : {
201
+ startLine: window.start ?? 1, startColumn: 1, endLine: window.end ?? 0, endColumn: 3,
202
+ });
203
+ if (spans.length === 0)
204
+ return Results.assert({ status: 204, matched: 0 });
205
+ bytes = Buffer.concat(spans.map(({ startLine, endLine, endColumn }) => complete.subarray(startLine - 1, endColumn === 1 ? endLine - 1 : endLine)));
206
+ matchedScopes = spans.map(({ startLine, endLine, endColumn }) => ({ marks: endColumn === 1 ? [startLine] : [startLine, endLine] }));
207
+ }
208
+ else {
209
+ if (operation === "MOVE")
210
+ complete = size === 0 ? new Uint8Array() : await byteSource.read(1, size);
211
+ bytes = window.start === null || window.end === null ? new Uint8Array()
212
+ : complete?.subarray(window.start - 1, window.end) ?? await byteSource.read(window.start, window.end);
184
213
  }
185
- const bytes = await byteSource.read(start, end);
186
214
  return {
187
215
  ...resolvedMarker.selection,
188
216
  content: "",
189
217
  completeContent: "",
190
218
  bytes,
219
+ ...(identity === undefined ? {} : { identity }),
220
+ ...(matchedScopes === undefined ? {} : { matchedScopes }),
221
+ ...(operation === "MOVE" ? { bytePrecondition: contentHash(complete) } : {}),
191
222
  mimetype: sourceMimetype,
192
223
  lineAnchorPrecondition: resolvedMarker.precondition,
193
224
  };
@@ -202,14 +233,15 @@ export default class ResourceSelector {
202
233
  }
203
234
  const retained = visibleLines?.[selection.channel];
204
235
  if (selection.matcher !== null) {
205
- const matched = await this.#matchedLines(selection.matcher, resolvedMarker, selected, retained, operation, ctx, identity);
236
+ const matched = await this.#matchedSpans(selection.matcher, resolvedMarker, selected, retained, operation, ctx, identity);
206
237
  if ("result" in matched)
207
238
  return matched.result;
208
239
  return {
209
240
  ...resolvedMarker.selection,
210
- content: LineSelection.retain(selected.content, matched.lines).content,
241
+ content: PatternEdits.text(selected.content, matched.spans),
242
+ ...(identity === undefined ? {} : { identity }),
211
243
  completeContent: selected.content,
212
- matchedLines: matched.lines,
244
+ matchedScopes: PatternEdits.replacements(matched.spans, "").map(({ marker }) => marker),
213
245
  mimetype: selected.mimetype,
214
246
  lineAnchorPrecondition: MutationEffects.mergeLineAnchorPreconditions(resolvedMarker.precondition, matched.precondition),
215
247
  ...(scopeNormalizations === undefined ? {} : { scopeNormalizations }),
@@ -218,36 +250,34 @@ export default class ResourceSelector {
218
250
  return {
219
251
  ...resolvedMarker.selection,
220
252
  content: retained === undefined ? content : LineSelection.retain(content, retained, startLine).content,
253
+ ...(identity === undefined ? {} : { identity }),
221
254
  completeContent: selected.content,
222
255
  mimetype: selected.mimetype,
223
256
  lineAnchorPrecondition: resolvedMarker.precondition,
224
257
  ...(scopeNormalizations === undefined ? {} : { scopeNormalizations }),
225
258
  };
226
259
  }
227
- // {§copy-move-pattern} — the whole lines a source pattern selects, bounded by the scope and by
228
- // what the source shows; their anchors guard a MOVE's removal exactly as an anchored scope would.
229
- async #matchedLines(matcher, resolvedMarker, selected, retained, operation, ctx, identity) {
260
+ // {§copy-move-pattern} — selection and removal share the same source regions.
261
+ async #matchedSpans(matcher, resolvedMarker, selected, retained, operation, ctx, identity) {
230
262
  const { selection } = resolvedMarker;
231
- const dialect = PatternSelection.refuseDialect(matcher, selection.scheme, operation, selection.target.raw);
232
- if (dialect !== null)
233
- return { result: dialect };
234
263
  const matched = await PatternSelection.match({
235
- matcher, content: selected.content, mimetype: selected.mimetype,
264
+ matcher, content: selected.content, mimetype: selected.mimetype, target: selection.target,
265
+ ...(retained === undefined ? {} : { visibleLines: retained }),
236
266
  marks: selection.lineMarker?.marks, ctx, scheme: selection.scheme, operation,
237
267
  });
238
268
  if ("result" in matched)
239
269
  return matched;
240
- const shown = retained === undefined ? null : new Set(retained);
241
- const lines = PatternEdits.lines(matched.evidence, matched.bounds).filter((line) => shown === null || shown.has(line));
242
- if (lines.length === 0) {
243
- return { result: Results.assert({ status: 204, matched: 0, detail: `No line matched the pattern; nothing to ${operation === "COPY" ? "copy" : "move"}.` }) };
270
+ const { spans } = matched;
271
+ if (spans.length === 0) {
272
+ return { result: Results.assert({ status: 204, matched: 0 }) };
244
273
  }
245
274
  if (selection.manifest.textEditScopes !== true)
246
- return { lines, precondition: null };
275
+ return { spans, precondition: null };
247
276
  const target = identity ?? MutationEffects.resourceAddress(selection);
248
277
  const tokens = LineAnchors.tokens(target, selected.content);
278
+ const lines = PatternEdits.touchedLines(PatternEdits.replacements(spans, ""));
249
279
  return {
250
- lines,
280
+ spans,
251
281
  precondition: { identity: target, checks: lines.flatMap((line) => tokens[line - 1] === undefined ? [] : [{ anchor: tokens[line - 1], line }]) },
252
282
  };
253
283
  }
@@ -276,7 +306,8 @@ export default class ResourceSelector {
276
306
  if (read.status !== 200 || read.entry === null) {
277
307
  throw new InvalidOperationResultError(`The '${selection.scheme}' scheme returned status ${read.status} without a source entry.`);
278
308
  }
279
- return { representation: read.entry, storageAddress };
309
+ return { representation: read.entry, storageAddress,
310
+ identity: EntryManifest.channelPath(storageAddress, selection.channel, selection.manifest.defaultChannel) };
280
311
  }
281
312
  resolveResourceLineMarker(selection, content, operation, identity) {
282
313
  if (!LineAnchors.hasAnchor(selection.lineMarker)) {
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceSelector.js","sourceRoot":"","sources":["../../src/core/ResourceSelector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResourceSelector.js","sourceRoot":"","sources":["../../src/core/ResourceSelector.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type CopyStatement, type EditStatement, type LineMarker, type MoveStatement, type PlurnkStatement } from "@plurnk/plurnk-contracts";
1
+ import type { CopyStatement, EditStatement, LineMarker, MoveStatement, PlurnkStatement } from "@plurnk/plurnk-contracts";
2
2
  import type SchemeRegistry from "./SchemeRegistry.ts";
3
3
  import type LiveSubscriptions from "./LiveSubscriptions.ts";
4
4
  import type ProposalLifecycle from "./ProposalLifecycle.ts";
@@ -37,9 +37,7 @@ export default class ResourceTransfers {
37
37
  ctx: PlurnkSchemeContext;
38
38
  }): Promise<DispatchResult>;
39
39
  moveWithinChannel(statement: MoveStatement, source: SelectedSource, destination: AddressedResourceSelection, ctx: PlurnkSchemeContext): Promise<DispatchResult>;
40
- removeMoveSource(statement: MoveStatement, source: ResolvedResourceSelection & {
41
- readonly matchedLines?: readonly number[];
42
- }, ctx: PlurnkSchemeContext, lineAnchorPrecondition?: LineAnchorPrecondition | null): Promise<DispatchResult>;
40
+ removeMoveSource(statement: MoveStatement, source: ResolvedResourceSelection & Pick<SelectedSource, "matchedScopes" | "bytePrecondition">, ctx: PlurnkSchemeContext, lineAnchorPrecondition?: LineAnchorPrecondition | null): Promise<DispatchResult>;
43
41
  writeDestination(statement: CopyStatement | MoveStatement, source: SelectedSource, destination: AddressedResourceSelection, ctx: PlurnkSchemeContext): Promise<DispatchResult>;
44
42
  invokeEditBatch(selection: ResolvedResourceSelection, edits: ReadonlyArray<{
45
43
  readonly marker: LineMarker;
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceTransfers.d.ts","sourceRoot":"","sources":["../../src/core/ResourceTransfers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResourceTransfers.d.ts","sourceRoot":"","sources":["../../src/core/ResourceTransfers.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- import { PathSyntax } from "@plurnk/plurnk-contracts";
2
1
  import { InvalidOperationResultError, MimetypeClassifier } from "@plurnk/plurnk-schemes";
3
2
  import { missDetail } from "./plurnk-uri.js";
4
- import { assertResourceEffects, editReceipt, LineMarkerOps, MimetypeBinary, PathMimetype } from "../content/index.js";
3
+ import { assertResourceEffects, editReceipt, EditCollision, LineMarkerOps, MimetypeBinary, PathMimetype } from "../content/index.js";
4
+ import ByteView from "../content/byte-view.js";
5
+ import EntryCrud from "../schemes/_entry-crud.js";
6
+ import { contentHash } from "./content-hash.js";
5
7
  import DbProjectionCaps from "./caps/DbProjectionCaps.js";
6
8
  import SchemeCtxImpl from "./caps/SchemeCtxImpl.js";
7
9
  import Results from "./results.js";
@@ -9,7 +11,6 @@ import EntryAddressBinding from "./EntryAddressBinding.js";
9
11
  import EntryManifest from "../schemes/_entry-manifest.js";
10
12
  import EntryReadable from "../schemes/_entry-readable.js";
11
13
  import MutationEffects from "./MutationEffects.js";
12
- import PatternEdits from "../content/pattern-edits.js";
13
14
  // COPY and MOVE orchestration: source selection, destination writes, move settlement.
14
15
  export default class ResourceTransfers {
15
16
  #schemes;
@@ -70,11 +71,11 @@ export default class ResourceTransfers {
70
71
  const result = await this.writeDestination(statement, selected, resolvedDestination, ctx);
71
72
  return ResourceTransfers.#withMatched(MutationEffects.prependScopeNormalizations(result, selected.scopeNormalizations), selected);
72
73
  }
73
- // {§copy-move-pattern} — a pattern transfer reports how many lines it selected.
74
+ // {§copy-move-pattern} — a pattern transfer reports how many spans it selected.
74
75
  static #withMatched(result, selected) {
75
- if (selected.matchedLines === undefined || result.status >= 300)
76
+ if (selected.matchedScopes === undefined || result.status >= 300)
76
77
  return result;
77
- return Results.assert({ ...result, matched: selected.matchedLines.length });
78
+ return Results.assert({ ...result, matched: selected.matchedScopes.length });
78
79
  }
79
80
  async moveOrchestration({ statement, source, destination, ctx, }) {
80
81
  // {§move-decomposition} — a MOVE reads its source exactly as COPY does and then retires
@@ -97,7 +98,7 @@ export default class ResourceTransfers {
97
98
  return MutationEffects.failure("channel-derived", 400, `#${resolvedSource.channel} is derived from its source channel and cannot be moved; COPY it instead.`, {}, { scheme: resolvedSource.scheme, channel: resolvedSource.channel, operation: "MOVE", retryable: false });
98
99
  }
99
100
  // {§copy-move-pattern} — a curated source retires rows, not lines of its projection.
100
- if (selected.matchedLines !== undefined && ResourceTransfers.#curatedSource(resolvedSource)) {
101
+ if (selected.matchedScopes !== undefined && ResourceTransfers.#curatedSource(resolvedSource)) {
101
102
  return MutationEffects.failure("pattern-unsupported", 400, `MOVE cannot retire lines of the '${resolvedSource.scheme}' projection by pattern; COPY the lines and KILL its rows by pattern.`, {}, { scheme: resolvedSource.scheme, operation: "MOVE", retryable: false });
102
103
  }
103
104
  if (!ResourceTransfers.#curatedSource(resolvedSource)) {
@@ -162,7 +163,7 @@ export default class ResourceTransfers {
162
163
  return ResourceTransfers.#withMatched(MutationEffects.withCombinedEffects(base, MutationEffects.effectsOf(sourceResult)), selected);
163
164
  }
164
165
  async moveWithinChannel(statement, source, destination, ctx) {
165
- if (source.lineMarker === null && source.matchedLines === undefined) {
166
+ if (source.lineMarker === null && source.matchedScopes === undefined) {
166
167
  if (destination.lineMarker !== null) {
167
168
  return MutationEffects.failure("move-region-overlap", 409, "MOVE cannot insert a whole channel into itself and then remove that channel.", {}, {
168
169
  source: MutationEffects.resourceAddress(source),
@@ -175,6 +176,9 @@ export default class ResourceTransfers {
175
176
  if (destination.lineMarker === null) {
176
177
  return this.writeDestination(statement, source, destination, ctx);
177
178
  }
179
+ if (source.bytes !== undefined) {
180
+ return this.#moveBytes(source, destination, ctx);
181
+ }
178
182
  const resolvedDestination = this.#selection.resolveResourceLineMarker(destination, source.completeContent, "MOVE");
179
183
  if ("result" in resolvedDestination)
180
184
  return resolvedDestination.result;
@@ -191,11 +195,11 @@ export default class ResourceTransfers {
191
195
  const effect = MutationEffects.pendingEffect(resolvedDestination.selection, "update");
192
196
  return MutationEffects.finalizeEffects(moved, resolvedDestination.selection, [effect, ...removals.map(() => effect)]);
193
197
  }
194
- // The edits that take a scoped source out of its channel: the scope itself, or each line a
198
+ // The edits that take a scoped source out of its channel: the scope itself, or each span a
195
199
  // pattern selected ({§copy-move-pattern}).
196
200
  static #sourceRemovals(source, position) {
197
- if (source.matchedLines !== undefined) {
198
- return PatternEdits.deletions(source.matchedLines).map(({ marker, body }) => ({ marker, body, position }));
201
+ if (source.matchedScopes !== undefined) {
202
+ return source.matchedScopes.map((marker) => ({ marker, body: "", position }));
199
203
  }
200
204
  if (source.lineMarker === null)
201
205
  throw new InvalidOperationResultError("A whole-channel MOVE source has no removal edits.");
@@ -208,8 +212,19 @@ export default class ResourceTransfers {
208
212
  return source.manifest.category === "logging";
209
213
  }
210
214
  async removeMoveSource(statement, source, ctx, lineAnchorPrecondition = null) {
211
- const effect = MutationEffects.pendingEffect(source, source.lineMarker === null && source.matchedLines === undefined ? "delete" : "update");
212
- if (source.matchedLines !== undefined) {
215
+ if (source.bytePrecondition !== undefined) {
216
+ const current = await this.#selection.selectSource({ ...source, lineMarker: null, matcher: null }, ctx, "COPY");
217
+ if (MutationEffects.isDispatchResult(current))
218
+ return current;
219
+ if (current.bytes === undefined || contentHash(current.bytes) !== source.bytePrecondition) {
220
+ return EditCollision.result(MutationEffects.resourceAddress(source));
221
+ }
222
+ if (source.lineMarker !== null || source.matchedScopes !== undefined) {
223
+ return this.#moveBytes({ ...current, ...source }, null, ctx);
224
+ }
225
+ }
226
+ const effect = MutationEffects.pendingEffect(source, source.lineMarker === null && source.matchedScopes === undefined ? "delete" : "update");
227
+ if (source.matchedScopes !== undefined) {
213
228
  const removals = ResourceTransfers.#sourceRemovals(source, statement.position);
214
229
  const edited = await this.invokeEditBatch(source, removals, ctx, lineAnchorPrecondition);
215
230
  return MutationEffects.finalizeEffects(edited, source, removals.map(() => effect));
@@ -302,6 +317,11 @@ export default class ResourceTransfers {
302
317
  let creationContent = source.content;
303
318
  let creationScopeNormalizations;
304
319
  if (destination.lineMarker !== null && destinationChannel === undefined) {
320
+ if (source.bytes !== undefined) {
321
+ const marker = ByteView.marker(destination.lineMarker);
322
+ if ("result" in marker)
323
+ return marker.result;
324
+ }
305
325
  // {§fs-write-surface} {§empty-mutation-scope} — creation has an
306
326
  // ordinary empty pre-mutation value. Resolve and apply the authored
307
327
  // destination scope to that value; no source-length allowlist exists.
@@ -378,16 +398,15 @@ export default class ResourceTransfers {
378
398
  body: creationContent,
379
399
  }], parseIssues,
380
400
  // {§edit-receipt-anchored-context} — the destination's READ identity
381
- destination.channel === destination.manifest.defaultChannel
382
- ? EntryManifest.toPath(destination.scheme, storageAddress.authority, storageAddress.pathname)
383
- : `${EntryManifest.toPath(destination.scheme, storageAddress.authority, storageAddress.pathname)}#${PathSyntax.escapeTarget(destination.channel)}`));
401
+ EntryManifest.channelPath(storageAddress, destination.channel, destination.manifest.defaultChannel)));
384
402
  return MutationEffects.prependScopeNormalizations(MutationEffects.finalizeEffects(materialized, destination, [destinationEffect]), creationScopeNormalizations);
385
403
  }
386
404
  // {§binary-parity} — splice source bytes into the destination's named byte window and re-write the
387
405
  // whole resource. `<c,d>` replaces bytes c..d (1-indexed, inclusive); `<c>` inserts at byte c (before
388
406
  // it, or after it with a trailing position; `<-1>` appends). Every byte outside the window is kept.
389
- async #spliceBytes(handler, storageAddress, destination, existing, srcBytes, mimetype, destinationEffect, ctx) {
390
- const byteSource = handler.byteSource?.(storageAddress, EntryAddressBinding.addressContext(ctx));
407
+ async #spliceBytes(handler, storageAddress, destination, existing, srcBytes, mimetype, destinationEffect, ctx, removals = [], expectedHash) {
408
+ const byteSource = handler.byteSource?.(storageAddress, EntryAddressBinding.addressContext(ctx))
409
+ ?? (existing === null ? undefined : await EntryCrud.storedByteSource(existing, destination.channel, ctx.mimetypes));
391
410
  if (byteSource === undefined) {
392
411
  return MutationEffects.failure("binary-region-unsupported", 415, `Channel #${destination.channel} is binary and its scheme keeps no bytes to splice.`, {}, { channel: destination.channel, mimetype, retryable: false });
393
412
  }
@@ -395,43 +414,47 @@ export default class ResourceTransfers {
395
414
  if (size === null) {
396
415
  return MutationEffects.failure("entry-not-found", 404, `No bytes exist at ${MutationEffects.resourceAddress(destination)}.`, {}, { destination: MutationEffects.resourceAddress(destination), retryable: false });
397
416
  }
398
- // A binary region is numeric byte coordinates; a textual anchor mark has no byte meaning.
399
- const marks = (destination.lineMarker?.marks ?? []).map((m) => typeof m === "number" ? m : Number.NaN);
400
- if (marks.some(Number.isNaN)) {
401
- return MutationEffects.failure("range-not-satisfiable", 416, `A binary region is a numeric byte range; #${destination.channel} was given a textual anchor.`, {}, { channel: destination.channel, unit: "byte", available: size, retryable: false });
402
- }
403
- let headEnd;
404
- let tailStart;
405
- if (marks.length >= 2) {
406
- const start = marks[0] === -1 ? size : marks[0];
407
- const end = marks[1] === -1 ? size : marks[1];
408
- if (!(start >= 1 && end >= start && end <= size)) {
409
- return MutationEffects.failure("range-not-satisfiable", 416, `Byte range <${start},${end}> is outside the available 1..${size}.`, {}, { channel: destination.channel, unit: "byte", available: size, retryable: false });
410
- }
411
- headEnd = start - 1;
412
- tailStart = end + 1;
413
- }
414
- else {
415
- const c = marks.length === 1 && marks[0] !== -1 ? marks[0] : size + 1;
416
- if (!(c >= 1 && c <= size + 1)) {
417
- return MutationEffects.failure("range-not-satisfiable", 416, `Byte position <${c}> is outside the available 1..${size + 1}.`, {}, { channel: destination.channel, unit: "byte", available: size, retryable: false });
418
- }
419
- headEnd = c - 1;
420
- tailStart = c;
421
- }
422
- const head = headEnd >= 1 ? await byteSource.read(1, headEnd) : new Uint8Array(0);
423
- const tail = tailStart <= size ? await byteSource.read(tailStart, size) : new Uint8Array(0);
424
- const result = new Uint8Array(head.length + srcBytes.length + tail.length);
425
- result.set(head, 0);
426
- result.set(srcBytes, head.length);
427
- result.set(tail, head.length + srcBytes.length);
417
+ const marker = ByteView.marker(destination.lineMarker);
418
+ if ("result" in marker)
419
+ return marker.result;
420
+ if (marker.marker === null)
421
+ throw new InvalidOperationResultError("A byte splice requires destination coordinates.");
422
+ const original = size === 0 ? new Uint8Array() : await byteSource.read(1, size);
423
+ if (expectedHash !== undefined && contentHash(original) !== expectedHash)
424
+ return EditCollision.result(MutationEffects.resourceAddress(destination));
425
+ const result = ByteView.splice(original, [
426
+ { marker: marker.marker, bytes: srcBytes },
427
+ ...removals.map((marker) => ({ marker, bytes: new Uint8Array() })),
428
+ ]);
429
+ if ("result" in result)
430
+ return result.result;
431
+ if (Buffer.from(original).equals(result.bytes))
432
+ return { status: 304 };
428
433
  const channels = {
429
434
  ...(existing?.channels ?? {}),
430
- [destination.channel]: { content: "", bytes: result, mimetype },
435
+ [destination.channel]: { content: "", bytes: result.bytes, mimetype },
431
436
  };
432
437
  const written = await this.#writeEntry(destination.scheme, storageAddress, { channels }, ctx);
433
438
  return MutationEffects.finalizeEffects(Results.assert(written), destination, [destinationEffect]);
434
439
  }
440
+ // {§binary-parity}: source removal is a byte splice, not an empty text EDIT.
441
+ async #moveBytes(source, destination, ctx) {
442
+ const removals = source.matchedScopes ?? (source.lineMarker === null ? [] : [source.lineMarker]);
443
+ if (removals.length === 0)
444
+ throw new InvalidOperationResultError("A scoped byte MOVE has no removal coordinates.");
445
+ const target = destination ?? { ...source, matcher: null, lineMarker: removals[0] };
446
+ const handler = this.#schemes.get(source.scheme, ctx.workspaceId);
447
+ const binding = await this.#resolveDataEntryAddress({ target: source.target, routedScheme: source.scheme, handler,
448
+ manifest: source.manifest, ctx, access: "write" });
449
+ if (binding.result !== null)
450
+ return binding.result;
451
+ if (binding.address === null)
452
+ return MutationEffects.failure("entry-not-found", 404, "The MOVE source could not be resolved for deletion.");
453
+ const read = await this.#readEntry(source.scheme, binding.address, ctx);
454
+ if (read.status >= 400)
455
+ return read;
456
+ return this.#spliceBytes(handler, binding.address, target, read.entry, destination === null ? new Uint8Array() : source.bytes, source.mimetype, MutationEffects.pendingEffect(target, "update"), ctx, destination === null ? removals.slice(1) : removals, source.bytePrecondition);
457
+ }
435
458
  async invokeEditBatch(selection, edits, ctx, precondition = null) {
436
459
  const handler = this.#schemes.get(selection.scheme, ctx.workspaceId);
437
460
  if (typeof handler?.editBatch !== "function") {
@@ -562,7 +585,8 @@ export default class ResourceTransfers {
562
585
  const removed = await this.removeMoveSource(statement, {
563
586
  ...resolvedSource,
564
587
  lineMarker: resolvedSource.lineMarker,
565
- ...(deferred.matchedLines === undefined ? {} : { matchedLines: deferred.matchedLines }),
588
+ ...(deferred.matchedScopes === undefined ? {} : { matchedScopes: deferred.matchedScopes }),
589
+ ...(deferred.bytePrecondition === undefined ? {} : { bytePrecondition: deferred.bytePrecondition }),
566
590
  }, ctx, deferred.lineAnchorPrecondition);
567
591
  if (removed.status >= 400) {
568
592
  return {