@plurnk/plurnk-service 1.14.2 → 1.16.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 (308) hide show
  1. package/.env.defaults +2 -2
  2. package/SPEC.md +243 -173
  3. package/digest-sql/curation/curation.sql +1 -1
  4. package/dist/build-info.json +1 -1
  5. package/dist/content/byte-view.d.ts +14 -0
  6. package/dist/content/byte-view.d.ts.map +1 -0
  7. package/dist/content/byte-view.js +33 -0
  8. package/dist/content/byte-view.js.map +1 -0
  9. package/dist/content/edit-receipt.d.ts.map +1 -1
  10. package/dist/content/edit-receipt.js +12 -1
  11. package/dist/content/edit-receipt.js.map +1 -1
  12. package/dist/content/line-marker.d.ts +2 -1
  13. package/dist/content/line-marker.d.ts.map +1 -1
  14. package/dist/content/line-marker.js +1 -0
  15. package/dist/content/line-marker.js.map +1 -1
  16. package/dist/content/matcher.d.ts +1 -0
  17. package/dist/content/matcher.d.ts.map +1 -1
  18. package/dist/content/matcher.js +1 -0
  19. package/dist/content/matcher.js.map +1 -1
  20. package/dist/content/read-projector.d.ts +4 -1
  21. package/dist/content/read-projector.d.ts.map +1 -1
  22. package/dist/content/read-projector.js +80 -3
  23. package/dist/content/read-projector.js.map +1 -1
  24. package/dist/core/AdmittedTurnExecutor.d.ts +43 -0
  25. package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -0
  26. package/dist/core/AdmittedTurnExecutor.js +245 -0
  27. package/dist/core/AdmittedTurnExecutor.js.map +1 -0
  28. package/dist/core/BareBatchRunner.d.ts +26 -0
  29. package/dist/core/BareBatchRunner.d.ts.map +1 -0
  30. package/dist/core/BareBatchRunner.js +104 -0
  31. package/dist/core/BareBatchRunner.js.map +1 -0
  32. package/dist/core/BudgetReadout.d.ts +1 -1
  33. package/dist/core/BudgetReadout.d.ts.map +1 -1
  34. package/dist/core/BudgetReadout.js +42 -47
  35. package/dist/core/BudgetReadout.js.map +1 -1
  36. package/dist/core/CapabilityResolver.d.ts +2 -1
  37. package/dist/core/CapabilityResolver.d.ts.map +1 -1
  38. package/dist/core/CapabilityResolver.js +8 -9
  39. package/dist/core/CapabilityResolver.js.map +1 -1
  40. package/dist/core/ChannelWrite.d.ts +1 -1
  41. package/dist/core/ChannelWrite.d.ts.map +1 -1
  42. package/dist/core/DataStatementRunner.d.ts +35 -0
  43. package/dist/core/DataStatementRunner.d.ts.map +1 -0
  44. package/dist/core/DataStatementRunner.js +252 -0
  45. package/dist/core/DataStatementRunner.js.map +1 -0
  46. package/dist/core/Dispatcher.d.ts +8 -3
  47. package/dist/core/Dispatcher.d.ts.map +1 -1
  48. package/dist/core/Dispatcher.js +88 -738
  49. package/dist/core/Dispatcher.js.map +1 -1
  50. package/dist/core/EditMutations.d.ts +39 -0
  51. package/dist/core/EditMutations.d.ts.map +1 -0
  52. package/dist/core/EditMutations.js +418 -0
  53. package/dist/core/EditMutations.js.map +1 -0
  54. package/dist/core/Engine.d.ts +2 -23
  55. package/dist/core/Engine.d.ts.map +1 -1
  56. package/dist/core/Engine.js +18 -240
  57. package/dist/core/Engine.js.map +1 -1
  58. package/dist/core/Engine.sql +24 -23
  59. package/dist/core/KillHandler.d.ts +32 -0
  60. package/dist/core/KillHandler.d.ts.map +1 -0
  61. package/dist/core/KillHandler.js +179 -0
  62. package/dist/core/KillHandler.js.map +1 -0
  63. package/dist/core/LogVisibility.d.ts +1 -1
  64. package/dist/core/LogVisibility.d.ts.map +1 -1
  65. package/dist/core/LogVisibility.js +3 -4
  66. package/dist/core/LogVisibility.js.map +1 -1
  67. package/dist/core/LogWriter.d.ts +42 -0
  68. package/dist/core/LogWriter.d.ts.map +1 -0
  69. package/dist/core/LogWriter.js +136 -0
  70. package/dist/core/LogWriter.js.map +1 -0
  71. package/dist/core/LoopDriver.d.ts +46 -0
  72. package/dist/core/LoopDriver.d.ts.map +1 -0
  73. package/dist/core/LoopDriver.js +263 -0
  74. package/dist/core/LoopDriver.js.map +1 -0
  75. package/dist/core/LoopLifecycle.d.ts +2 -1
  76. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  77. package/dist/core/MembershipMaterialization.d.ts +7 -0
  78. package/dist/core/MembershipMaterialization.d.ts.map +1 -0
  79. package/dist/core/MembershipMaterialization.js +283 -0
  80. package/dist/core/MembershipMaterialization.js.map +1 -0
  81. package/dist/core/MutationEffects.d.ts +29 -0
  82. package/dist/core/MutationEffects.d.ts.map +1 -0
  83. package/dist/core/MutationEffects.js +318 -0
  84. package/dist/core/MutationEffects.js.map +1 -0
  85. package/dist/core/OverflowTurn.d.ts +4 -4
  86. package/dist/core/OverflowTurn.d.ts.map +1 -1
  87. package/dist/core/OverflowTurn.js +6 -7
  88. package/dist/core/OverflowTurn.js.map +1 -1
  89. package/dist/core/PacketBuilder.d.ts.map +1 -1
  90. package/dist/core/PacketBuilder.js +31 -9
  91. package/dist/core/PacketBuilder.js.map +1 -1
  92. package/dist/core/ResourceMutations.d.ts +12 -36
  93. package/dist/core/ResourceMutations.d.ts.map +1 -1
  94. package/dist/core/ResourceMutations.js +27 -1351
  95. package/dist/core/ResourceMutations.js.map +1 -1
  96. package/dist/core/ResourceSelector.d.ts +21 -0
  97. package/dist/core/ResourceSelector.d.ts.map +1 -0
  98. package/dist/core/ResourceSelector.js +233 -0
  99. package/dist/core/ResourceSelector.js.map +1 -0
  100. package/dist/core/ResourceTransfers.d.ts +55 -0
  101. package/dist/core/ResourceTransfers.d.ts.map +1 -0
  102. package/dist/core/ResourceTransfers.js +525 -0
  103. package/dist/core/ResourceTransfers.js.map +1 -0
  104. package/dist/core/SchemeRegistry.js +2 -2
  105. package/dist/core/SchemeRegistry.js.map +1 -1
  106. package/dist/core/SendBroadcastHandler.d.ts +40 -0
  107. package/dist/core/SendBroadcastHandler.d.ts.map +1 -0
  108. package/dist/core/SendBroadcastHandler.js +159 -0
  109. package/dist/core/SendBroadcastHandler.js.map +1 -0
  110. package/dist/core/StoredPacket.d.ts +11 -0
  111. package/dist/core/StoredPacket.d.ts.map +1 -1
  112. package/dist/core/StoredPacket.js +22 -1
  113. package/dist/core/StoredPacket.js.map +1 -1
  114. package/dist/core/StrikeRail.d.ts.map +1 -1
  115. package/dist/core/StrikeRail.js +19 -9
  116. package/dist/core/StrikeRail.js.map +1 -1
  117. package/dist/core/TokenCalibration.d.ts +16 -0
  118. package/dist/core/TokenCalibration.d.ts.map +1 -0
  119. package/dist/core/TokenCalibration.js +35 -0
  120. package/dist/core/TokenCalibration.js.map +1 -0
  121. package/dist/core/ToolResources.d.ts.map +1 -1
  122. package/dist/core/ToolResources.js +15 -12
  123. package/dist/core/ToolResources.js.map +1 -1
  124. package/dist/core/TurnMaterialization.d.ts +37 -0
  125. package/dist/core/TurnMaterialization.d.ts.map +1 -0
  126. package/dist/core/TurnMaterialization.js +296 -0
  127. package/dist/core/TurnMaterialization.js.map +1 -0
  128. package/dist/core/TurnOps.d.ts.map +1 -1
  129. package/dist/core/TurnOps.js +6 -8
  130. package/dist/core/TurnOps.js.map +1 -1
  131. package/dist/core/TurnRunner.d.ts +15 -27
  132. package/dist/core/TurnRunner.d.ts.map +1 -1
  133. package/dist/core/TurnRunner.js +76 -670
  134. package/dist/core/TurnRunner.js.map +1 -1
  135. package/dist/core/WorkerControlHandler.d.ts +15 -0
  136. package/dist/core/WorkerControlHandler.d.ts.map +1 -0
  137. package/dist/core/WorkerControlHandler.js +89 -0
  138. package/dist/core/WorkerControlHandler.js.map +1 -0
  139. package/dist/core/attachments.d.ts +14 -0
  140. package/dist/core/attachments.d.ts.map +1 -0
  141. package/dist/core/attachments.js +18 -0
  142. package/dist/core/attachments.js.map +1 -0
  143. package/dist/core/fork.d.ts.map +1 -1
  144. package/dist/core/fork.js +0 -4
  145. package/dist/core/fork.js.map +1 -1
  146. package/dist/core/fork.sql +5 -16
  147. package/dist/core/git-membership.d.ts +15 -0
  148. package/dist/core/git-membership.d.ts.map +1 -1
  149. package/dist/core/git-membership.js +4 -273
  150. package/dist/core/git-membership.js.map +1 -1
  151. package/dist/core/git-state.d.ts +2 -1
  152. package/dist/core/git-state.d.ts.map +1 -1
  153. package/dist/core/mutation-types.d.ts +102 -0
  154. package/dist/core/mutation-types.d.ts.map +1 -0
  155. package/dist/core/mutation-types.js +2 -0
  156. package/dist/core/mutation-types.js.map +1 -0
  157. package/dist/core/operation-target-groups.js +1 -1
  158. package/dist/core/operation-target-groups.js.map +1 -1
  159. package/dist/core/packet-wire.d.ts +7 -6
  160. package/dist/core/packet-wire.d.ts.map +1 -1
  161. package/dist/core/packet-wire.js +96 -68
  162. package/dist/core/packet-wire.js.map +1 -1
  163. package/dist/core/plurnk-uri.d.ts +0 -1
  164. package/dist/core/plurnk-uri.d.ts.map +1 -1
  165. package/dist/core/plurnk-uri.js +1 -1
  166. package/dist/core/plurnk-uri.js.map +1 -1
  167. package/dist/core/statement-primary.d.ts +4 -0
  168. package/dist/core/statement-primary.d.ts.map +1 -0
  169. package/dist/core/statement-primary.js +3 -0
  170. package/dist/core/statement-primary.js.map +1 -0
  171. package/dist/core/teaching-corpus.d.ts +0 -1
  172. package/dist/core/teaching-corpus.d.ts.map +1 -1
  173. package/dist/core/teaching-corpus.js +0 -9
  174. package/dist/core/teaching-corpus.js.map +1 -1
  175. package/dist/core/turn-scheduler.js +3 -3
  176. package/dist/core/turn-scheduler.js.map +1 -1
  177. package/dist/core/turn-signals.d.ts +15 -0
  178. package/dist/core/turn-signals.d.ts.map +1 -0
  179. package/dist/core/turn-signals.js +19 -0
  180. package/dist/core/turn-signals.js.map +1 -0
  181. package/dist/core/worker-settings.d.ts +0 -1
  182. package/dist/core/worker-settings.d.ts.map +1 -1
  183. package/dist/core/worker-settings.js +1 -1
  184. package/dist/core/worker-settings.js.map +1 -1
  185. package/dist/digest/Digest.d.ts +3 -16
  186. package/dist/digest/Digest.d.ts.map +1 -1
  187. package/dist/digest/Digest.js +10 -958
  188. package/dist/digest/Digest.js.map +1 -1
  189. package/dist/digest/DigestRender.d.ts +12 -0
  190. package/dist/digest/DigestRender.d.ts.map +1 -0
  191. package/dist/digest/DigestRender.js +641 -0
  192. package/dist/digest/DigestRender.js.map +1 -0
  193. package/dist/digest/DigestRequiem.d.ts +13 -0
  194. package/dist/digest/DigestRequiem.d.ts.map +1 -0
  195. package/dist/digest/DigestRequiem.js +332 -0
  196. package/dist/digest/DigestRequiem.js.map +1 -0
  197. package/dist/digest/digest-rows.d.ts +303 -0
  198. package/dist/digest/digest-rows.d.ts.map +1 -0
  199. package/dist/digest/digest-rows.js +2 -0
  200. package/dist/digest/digest-rows.js.map +1 -0
  201. package/dist/digest/digest.sql +1 -7
  202. package/dist/observe/api.d.ts +0 -2
  203. package/dist/observe/api.d.ts.map +1 -1
  204. package/dist/observe/api.js +2 -2
  205. package/dist/observe/api.js.map +1 -1
  206. package/dist/observe/metrics.d.ts +0 -1
  207. package/dist/observe/metrics.d.ts.map +1 -1
  208. package/dist/observe/metrics.js +0 -1
  209. package/dist/observe/metrics.js.map +1 -1
  210. package/dist/schemes/Exec.d.ts +4 -1
  211. package/dist/schemes/Exec.d.ts.map +1 -1
  212. package/dist/schemes/Exec.js +89 -48
  213. package/dist/schemes/Exec.js.map +1 -1
  214. package/dist/schemes/ExecOutputScheme.d.ts +2 -1
  215. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
  216. package/dist/schemes/ExecOutputScheme.js +3 -3
  217. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  218. package/dist/schemes/File.d.ts +4 -1
  219. package/dist/schemes/File.d.ts.map +1 -1
  220. package/dist/schemes/File.js +100 -13
  221. package/dist/schemes/File.js.map +1 -1
  222. package/dist/schemes/Log.d.ts +4 -5
  223. package/dist/schemes/Log.d.ts.map +1 -1
  224. package/dist/schemes/Log.js +26 -118
  225. package/dist/schemes/Log.js.map +1 -1
  226. package/dist/schemes/Log.sql +1 -66
  227. package/dist/schemes/Prompt.js +1 -1
  228. package/dist/schemes/Prompt.js.map +1 -1
  229. package/dist/schemes/Worker.d.ts.map +1 -1
  230. package/dist/schemes/Worker.js +1 -13
  231. package/dist/schemes/Worker.js.map +1 -1
  232. package/dist/schemes/_entry-crud.d.ts +3 -1
  233. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  234. package/dist/schemes/_entry-crud.js +18 -3
  235. package/dist/schemes/_entry-crud.js.map +1 -1
  236. package/dist/schemes/_entry-find.d.ts +4 -2
  237. package/dist/schemes/_entry-find.d.ts.map +1 -1
  238. package/dist/schemes/_entry-find.js +79 -10
  239. package/dist/schemes/_entry-find.js.map +1 -1
  240. package/dist/schemes/_entry-manifest.d.ts +1 -2
  241. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  242. package/dist/schemes/_entry-ops.d.ts +2 -1
  243. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  244. package/dist/schemes/_entry-ops.js +20 -2
  245. package/dist/schemes/_entry-ops.js.map +1 -1
  246. package/dist/schemes/_entry-semantic.d.ts +1 -0
  247. package/dist/schemes/_entry-semantic.d.ts.map +1 -1
  248. package/dist/schemes/_entry-semantic.js +3 -0
  249. package/dist/schemes/_entry-semantic.js.map +1 -1
  250. package/dist/schemes/_entry-semantic.sql +2 -2
  251. package/dist/schemes/_entry-send.d.ts +0 -1
  252. package/dist/schemes/_entry-send.d.ts.map +1 -1
  253. package/dist/schemes/_entry-send.js +5 -80
  254. package/dist/schemes/_entry-send.js.map +1 -1
  255. package/dist/schemes/exec-runtime.d.ts +7 -0
  256. package/dist/schemes/exec-runtime.d.ts.map +1 -0
  257. package/dist/schemes/exec-runtime.js +2 -0
  258. package/dist/schemes/exec-runtime.js.map +1 -0
  259. package/dist/server/ClientReads.d.ts +34 -0
  260. package/dist/server/ClientReads.d.ts.map +1 -0
  261. package/dist/server/ClientReads.js +210 -0
  262. package/dist/server/ClientReads.js.map +1 -0
  263. package/dist/server/Daemon.d.ts +12 -22
  264. package/dist/server/Daemon.d.ts.map +1 -1
  265. package/dist/server/Daemon.js +31 -362
  266. package/dist/server/Daemon.js.map +1 -1
  267. package/dist/server/DaemonModule.d.ts +6 -5
  268. package/dist/server/DaemonModule.d.ts.map +1 -1
  269. package/dist/server/DrainSupervisor.d.ts +3 -2
  270. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  271. package/dist/server/DrainSupervisor.js +7 -3
  272. package/dist/server/DrainSupervisor.js.map +1 -1
  273. package/dist/server/Functionality.d.ts +0 -12
  274. package/dist/server/Functionality.d.ts.map +1 -1
  275. package/dist/server/Functionality.js.map +1 -1
  276. package/dist/server/FunctionalityManager.d.ts +0 -1
  277. package/dist/server/FunctionalityManager.d.ts.map +1 -1
  278. package/dist/server/FunctionalityManager.js +3 -3
  279. package/dist/server/FunctionalityManager.js.map +1 -1
  280. package/dist/server/MembersFunctionality.d.ts +2 -13
  281. package/dist/server/MembersFunctionality.d.ts.map +1 -1
  282. package/dist/server/MembersFunctionality.js +4 -4
  283. package/dist/server/MembersFunctionality.js.map +1 -1
  284. package/dist/server/SkillsFunctionality.d.ts +1 -7
  285. package/dist/server/SkillsFunctionality.d.ts.map +1 -1
  286. package/dist/server/SkillsFunctionality.js +3 -3
  287. package/dist/server/SkillsFunctionality.js.map +1 -1
  288. package/dist/server/WorkerModelResolver.d.ts +17 -0
  289. package/dist/server/WorkerModelResolver.d.ts.map +1 -0
  290. package/dist/server/WorkerModelResolver.js +166 -0
  291. package/dist/server/WorkerModelResolver.js.map +1 -0
  292. package/dist/server/daemon-results.d.ts +5 -0
  293. package/dist/server/daemon-results.d.ts.map +1 -0
  294. package/dist/server/daemon-results.js +7 -0
  295. package/dist/server/daemon-results.js.map +1 -0
  296. package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
  297. package/dist/server/dispatch-as-plurnk.js +4 -6
  298. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  299. package/dist/server/logEntry.d.ts +0 -1
  300. package/dist/server/logEntry.d.ts.map +1 -1
  301. package/dist/server/logEntry.js +1 -13
  302. package/dist/server/logEntry.js.map +1 -1
  303. package/dist/server/logEntry.sql +1 -5
  304. package/dist/server/loopDocs.d.ts.map +1 -1
  305. package/dist/server/loopDocs.js +11 -2
  306. package/dist/server/loopDocs.js.map +1 -1
  307. package/migrations/001_schema.sql +30 -347
  308. package/package.json +30 -30
@@ -0,0 +1,525 @@
1
+ import { PathSyntax } from "@plurnk/plurnk-contracts";
2
+ import { InvalidOperationResultError } from "@plurnk/plurnk-schemes";
3
+ import { assertResourceEffects, editReceipt, MimetypeBinary, PathMimetype } from "../content/index.js";
4
+ import DbProjectionCaps from "./caps/DbProjectionCaps.js";
5
+ import SchemeCtxImpl from "./caps/SchemeCtxImpl.js";
6
+ import Results from "./results.js";
7
+ import EntryManifest from "../schemes/_entry-manifest.js";
8
+ import MutationEffects from "./MutationEffects.js";
9
+ // COPY and MOVE orchestration: source selection, destination writes, move settlement.
10
+ export default class ResourceTransfers {
11
+ #schemes;
12
+ #liveSubscriptions;
13
+ #resolveDataEntryAddress;
14
+ #readEntry;
15
+ #writeEntry;
16
+ #deleteChannel;
17
+ #applyProposal;
18
+ #selection;
19
+ constructor({ schemes, liveSubscriptions, resolveDataEntryAddress, readEntry, writeEntry, deleteChannel, applyProposal, selection }) {
20
+ this.#schemes = schemes;
21
+ this.#liveSubscriptions = liveSubscriptions;
22
+ this.#resolveDataEntryAddress = resolveDataEntryAddress;
23
+ this.#readEntry = readEntry;
24
+ this.#writeEntry = writeEntry;
25
+ this.#deleteChannel = deleteChannel;
26
+ this.#applyProposal = applyProposal;
27
+ this.#selection = selection;
28
+ }
29
+ async handleCopy(statement, ctx) {
30
+ return this.copyOrchestration({
31
+ statement,
32
+ source: statement.source,
33
+ destination: statement.destination,
34
+ ctx,
35
+ });
36
+ }
37
+ async handleMove(statement, ctx) {
38
+ const sourceMarks = statement.source.lineMarker?.marks;
39
+ const sourceLineMarker = sourceMarks?.length === 2
40
+ && sourceMarks[0] === 1
41
+ && sourceMarks[1] === -1
42
+ ? null
43
+ : statement.source.lineMarker;
44
+ return this.moveOrchestration({
45
+ statement,
46
+ source: {
47
+ ...statement.source,
48
+ // Canonicalize only the execution selection. #writeLog retains
49
+ // the authored marker as operation evidence. {§move-canonical-whole-source}
50
+ lineMarker: sourceLineMarker,
51
+ },
52
+ destination: statement.destination,
53
+ ctx,
54
+ });
55
+ }
56
+ async copyOrchestration({ statement, source, destination, ctx, }) {
57
+ const resolvedSource = await this.#selection.resolveResourceSelection(source, ctx);
58
+ if (MutationEffects.isDispatchResult(resolvedSource))
59
+ return resolvedSource;
60
+ const resolvedDestination = await this.#selection.resolveResourceSelection(destination, ctx);
61
+ if (MutationEffects.isDispatchResult(resolvedDestination))
62
+ return resolvedDestination;
63
+ const selected = await this.#selection.selectSource(resolvedSource, ctx, "COPY");
64
+ if (MutationEffects.isDispatchResult(selected))
65
+ return selected;
66
+ const result = await this.writeDestination(statement, selected, resolvedDestination, ctx);
67
+ return MutationEffects.prependScopeNormalizations(result, selected.scopeNormalizations);
68
+ }
69
+ async moveOrchestration({ statement, source, destination, ctx, }) {
70
+ const resolvedSource = await this.#selection.resolveResourceSelection(source, ctx);
71
+ if (MutationEffects.isDispatchResult(resolvedSource))
72
+ return resolvedSource;
73
+ const resolvedDestination = await this.#selection.resolveResourceSelection(destination, ctx);
74
+ if (MutationEffects.isDispatchResult(resolvedDestination))
75
+ return resolvedDestination;
76
+ const selected = await this.#selection.selectSource(resolvedSource, ctx, "MOVE");
77
+ if (MutationEffects.isDispatchResult(selected))
78
+ return selected;
79
+ if (MutationEffects.sameChannel(resolvedSource, resolvedDestination)) {
80
+ const result = await this.moveWithinChannel(statement, selected, resolvedDestination, ctx);
81
+ return resolvedDestination.lineMarker === null
82
+ ? MutationEffects.prependScopeNormalizations(result, selected.scopeNormalizations)
83
+ : result;
84
+ }
85
+ const destinationResult = MutationEffects.prependScopeNormalizations(await this.writeDestination(statement, selected, resolvedDestination, ctx), selected.scopeNormalizations);
86
+ if (destinationResult.status >= 400)
87
+ return destinationResult;
88
+ const destinationAddress = MutationEffects.resourceAddress(resolvedDestination);
89
+ const destinationEffects = MutationEffects.effectsOf(destinationResult);
90
+ if (destinationResult.status === 202) {
91
+ return {
92
+ ...destinationResult,
93
+ attrs: {
94
+ ...destinationResult.attrs,
95
+ moveSource: MutationEffects.deferredMoveSource(selected, resolvedDestination, selected.lineAnchorPrecondition),
96
+ },
97
+ };
98
+ }
99
+ const sourceResult = await this.removeMoveSource(statement, selected, ctx, selected.lineAnchorPrecondition);
100
+ if (sourceResult.status === 202) {
101
+ return {
102
+ ...sourceResult,
103
+ ...(destinationResult.scopeNormalizations === undefined
104
+ ? {}
105
+ : { scopeNormalizations: destinationResult.scopeNormalizations }),
106
+ attrs: {
107
+ ...sourceResult.attrs,
108
+ moveDestinationWritten: destinationAddress,
109
+ moveDestinationEffects: destinationEffects,
110
+ },
111
+ };
112
+ }
113
+ if (sourceResult.status >= 400) {
114
+ return MutationEffects.moveFailureAfterDestination(destinationResult.scopeNormalizations === undefined
115
+ ? sourceResult
116
+ : Results.assert({
117
+ ...sourceResult,
118
+ scopeNormalizations: destinationResult.scopeNormalizations,
119
+ }), destinationAddress, destinationEffects);
120
+ }
121
+ const base = destinationResult.status === 304
122
+ ? { ...destinationResult, status: 200 }
123
+ : destinationResult;
124
+ return MutationEffects.withCombinedEffects(base, MutationEffects.effectsOf(sourceResult));
125
+ }
126
+ async moveWithinChannel(statement, source, destination, ctx) {
127
+ if (source.lineMarker === null) {
128
+ if (destination.lineMarker !== null) {
129
+ return MutationEffects.failure("move-region-overlap", 409, "MOVE cannot insert a whole channel into itself and then remove that channel.", {}, {
130
+ source: MutationEffects.resourceAddress(source),
131
+ destination: MutationEffects.resourceAddress(destination),
132
+ retryable: false,
133
+ });
134
+ }
135
+ return this.writeDestination(statement, source, destination, ctx);
136
+ }
137
+ if (destination.lineMarker === null) {
138
+ return this.writeDestination(statement, source, destination, ctx);
139
+ }
140
+ const resolvedDestination = this.#selection.resolveResourceLineMarker(destination, source.completeContent, "MOVE");
141
+ if ("result" in resolvedDestination)
142
+ return resolvedDestination.result;
143
+ const precondition = MutationEffects.mergeLineAnchorPreconditions(source.lineAnchorPrecondition, resolvedDestination.precondition);
144
+ const moved = await this.invokeEditBatch(resolvedDestination.selection, [
145
+ {
146
+ marker: resolvedDestination.selection.lineMarker,
147
+ body: source.content,
148
+ position: statement.position,
149
+ },
150
+ {
151
+ marker: source.lineMarker,
152
+ body: "",
153
+ position: statement.position,
154
+ },
155
+ ], ctx, precondition);
156
+ const effect = MutationEffects.pendingEffect(resolvedDestination.selection, "update");
157
+ return MutationEffects.finalizeEffects(moved, resolvedDestination.selection, [effect, effect]);
158
+ }
159
+ async removeMoveSource(statement, source, ctx, lineAnchorPrecondition = null) {
160
+ const effect = MutationEffects.pendingEffect(source, source.lineMarker === null ? "delete" : "update");
161
+ if (source.lineMarker === null) {
162
+ const handler = this.#schemes.get(source.scheme, ctx.functionalityWorkerId);
163
+ if (handler === undefined) {
164
+ throw new InvalidOperationResultError(`Resolved MOVE source scheme '${source.scheme}' is no longer registered.`);
165
+ }
166
+ const binding = await this.#resolveDataEntryAddress({
167
+ target: source.target,
168
+ routedScheme: source.scheme,
169
+ handler,
170
+ manifest: source.manifest,
171
+ ctx,
172
+ });
173
+ if (binding.result !== null)
174
+ return binding.result;
175
+ if (binding.address === null) {
176
+ return MutationEffects.failure("entry-not-found", 404, `No MOVE source entry exists at ${MutationEffects.resourceAddress(source)}.`);
177
+ }
178
+ const deleted = await this.#deleteChannel(source.scheme, binding.address, source.channel, ctx);
179
+ return MutationEffects.finalizeEffects(Results.assert(deleted), source, [effect]);
180
+ }
181
+ const edited = await this.invokeEditBatch(source, [{
182
+ marker: source.lineMarker,
183
+ body: "",
184
+ position: statement.position,
185
+ }], ctx, lineAnchorPrecondition);
186
+ return MutationEffects.finalizeEffects(edited, source, [effect]);
187
+ }
188
+ async writeDestination(statement, source, destination, ctx) {
189
+ const handler = this.#schemes.get(destination.scheme, ctx.functionalityWorkerId);
190
+ if (handler === undefined) {
191
+ throw new InvalidOperationResultError(`Resolved COPY/MOVE destination scheme '${destination.scheme}' is no longer registered.`);
192
+ }
193
+ const binding = await this.#resolveDataEntryAddress({
194
+ target: destination.target,
195
+ routedScheme: destination.scheme,
196
+ handler,
197
+ manifest: destination.manifest,
198
+ ctx,
199
+ });
200
+ if (binding.result !== null)
201
+ return binding.result;
202
+ if (binding.address === null) {
203
+ return MutationEffects.failure("entry-not-found", 404, `No destination entry address exists at ${MutationEffects.resourceAddress(destination)}.`);
204
+ }
205
+ const storageAddress = binding.address;
206
+ const existingResult = await this.#readEntry(destination.scheme, storageAddress, ctx);
207
+ if (existingResult.status >= 400 && existingResult.status !== 404) {
208
+ return existingResult;
209
+ }
210
+ const existing = existingResult.status === 200
211
+ ? existingResult.entry
212
+ : null;
213
+ if (existingResult.status === 200 && existing === null) {
214
+ throw new InvalidOperationResultError(`The '${destination.scheme}' scheme returned 200 without a destination entry.`);
215
+ }
216
+ const destinationChannel = existing?.channels[destination.channel];
217
+ // {§binary-parity} — a materialized binary destination's channel mimetype is its text projection
218
+ // (the facts line); its real mimetype is the source projection, and that is what a transfer must
219
+ // match and re-write. A text destination has no source projection, so this is its channel mimetype.
220
+ const destProjection = existing?.attributes?.sourceProjection;
221
+ const destRealMimetype = typeof destProjection?.mimetype === "string" ? destProjection.mimetype : destinationChannel?.mimetype;
222
+ const expectedMimetype = destRealMimetype
223
+ ?? await PathMimetype.resolveEntryMimetype(destination.pathname, destination.manifest.channels[destination.channel] ?? source.mimetype, ctx.mimetypes);
224
+ if (source.mimetype !== expectedMimetype) {
225
+ return MutationEffects.failure("mimetype-mismatch", 415, `COPY or MOVE cannot write '${source.mimetype}' into a '${expectedMimetype}' channel.`, {}, {
226
+ channel: destination.channel,
227
+ sourceMimetype: source.mimetype,
228
+ destinationMimetype: expectedMimetype,
229
+ retryable: false,
230
+ });
231
+ }
232
+ const destinationEffect = MutationEffects.pendingEffect(destination, destinationChannel === undefined ? "create" : "update");
233
+ // {§fs-write-surface} — a scope that describes the complete resulting
234
+ // value on an absent destination is creation, so the create path below
235
+ // writes the source content. Any partial region needs existing lines.
236
+ const scopedCreation = destination.lineMarker !== null
237
+ && destinationChannel === undefined
238
+ && (MutationEffects.isAppendMarker(destination.lineMarker)
239
+ || MutationEffects.isCompleteAbsentDestinationMarker(destination.lineMarker, source.content));
240
+ if (destination.lineMarker !== null && !scopedCreation) {
241
+ if (destinationChannel === undefined) {
242
+ const address = MutationEffects.resourceAddress(destination);
243
+ return MutationEffects.failure("destination-region-not-found", 404, `A destination region requires an existing #${destination.channel} channel at ${address}.`, {}, {
244
+ destination: address,
245
+ recovery: `Use \`<-1>\`, \`<1,-1>\`, or the exact whole-value \`<1,N>\` extent to create ${address}; partial regions require an existing resource.`,
246
+ retryable: false,
247
+ });
248
+ }
249
+ if (source.bytes !== undefined) {
250
+ // {§binary-parity} — a byte source into a destination region is a splice: the destination's
251
+ // named byte window becomes exactly the source bytes, every other byte untouched. The whole
252
+ // result is re-written. Coordinate = byte, as the source range is ({§read-bytes}).
253
+ return this.#spliceBytes(handler, storageAddress, destination, existing ?? null, source.bytes, source.mimetype, destinationEffect, ctx);
254
+ }
255
+ if (await MimetypeBinary.isBinaryMimetype(destinationChannel.mimetype, ctx.mimetypes)) {
256
+ return MutationEffects.failure("binary-region-unsupported", 415, `Channel #${destination.channel} is binary and cannot receive a textual region.`, {}, {
257
+ channel: destination.channel,
258
+ mimetype: destinationChannel.mimetype,
259
+ retryable: false,
260
+ });
261
+ }
262
+ const resolvedMarker = this.#selection.resolveResourceLineMarker(destination, destinationChannel.content, statement.op);
263
+ if ("result" in resolvedMarker)
264
+ return resolvedMarker.result;
265
+ const edited = await this.invokeEditBatch(resolvedMarker.selection, [{
266
+ marker: resolvedMarker.selection.lineMarker,
267
+ body: source.content,
268
+ position: statement.position,
269
+ }], ctx, resolvedMarker.precondition);
270
+ return MutationEffects.finalizeEffects(edited, resolvedMarker.selection, [destinationEffect]);
271
+ }
272
+ if (destinationChannel !== undefined
273
+ && destinationChannel.content !== source.content) {
274
+ return MutationEffects.failure("copy-destination-exists", 409, `COPY or MOVE destination ${MutationEffects.resourceAddress(destination)} already contains different content.`, {}, {
275
+ destination: MutationEffects.resourceAddress(destination),
276
+ retryable: false,
277
+ });
278
+ }
279
+ if (destinationChannel !== undefined)
280
+ return { status: 304 };
281
+ // {§binary-parity} — a binary source rides its bytes, not text; the destination channel carries
282
+ // them and the receipt is the byte count, with no text diff or parse-issue transition.
283
+ const isByteTransfer = source.bytes !== undefined;
284
+ const channels = {
285
+ ...(existing?.channels ?? {}),
286
+ [destination.channel]: isByteTransfer
287
+ ? { content: "", bytes: source.bytes, mimetype: source.mimetype }
288
+ : {
289
+ content: source.content,
290
+ mimetype: source.mimetype,
291
+ },
292
+ };
293
+ const written = await this.#writeEntry(destination.scheme, storageAddress, { channels }, ctx);
294
+ const exactWritten = Results.assert(written);
295
+ const parseIssues = !isByteTransfer && (exactWritten.status === 200 || exactWritten.status === 201)
296
+ ? await new DbProjectionCaps(ctx).parseIssueTransition(null, source.content, source.mimetype)
297
+ : undefined;
298
+ const materialized = isByteTransfer || source.lineMarker === null
299
+ || (exactWritten.status !== 200 && exactWritten.status !== 201 && exactWritten.status !== 202)
300
+ ? exactWritten
301
+ : MutationEffects.withEditMaterialization(exactWritten, editReceipt("", source.content, [{
302
+ marker: { marks: [1, -1] },
303
+ body: source.content,
304
+ }], parseIssues,
305
+ // {§edit-receipt-anchored-context} — the destination's READ identity
306
+ destination.channel === destination.manifest.defaultChannel
307
+ ? EntryManifest.toPath(destination.scheme, storageAddress.authority, storageAddress.pathname)
308
+ : `${EntryManifest.toPath(destination.scheme, storageAddress.authority, storageAddress.pathname)}#${PathSyntax.escapeTarget(destination.channel)}`));
309
+ return MutationEffects.finalizeEffects(materialized, destination, [destinationEffect]);
310
+ }
311
+ // {§binary-parity} — splice source bytes into the destination's named byte window and re-write the
312
+ // whole resource. `<c,d>` replaces bytes c..d (1-indexed, inclusive); `<c>` inserts at byte c (before
313
+ // it, or after it with a trailing position; `<-1>` appends). Every byte outside the window is kept.
314
+ async #spliceBytes(handler, storageAddress, destination, existing, srcBytes, mimetype, destinationEffect, ctx) {
315
+ const byteSource = handler.byteSource?.(storageAddress.pathname, ctx);
316
+ if (byteSource === undefined) {
317
+ 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 });
318
+ }
319
+ const size = await byteSource.size();
320
+ if (size === null) {
321
+ return MutationEffects.failure("entry-not-found", 404, `No bytes exist at ${MutationEffects.resourceAddress(destination)}.`, {}, { destination: MutationEffects.resourceAddress(destination), retryable: false });
322
+ }
323
+ // A binary region is numeric byte coordinates; a textual anchor mark has no byte meaning.
324
+ const marks = (destination.lineMarker?.marks ?? []).map((m) => typeof m === "number" ? m : Number.NaN);
325
+ if (marks.some(Number.isNaN)) {
326
+ 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 });
327
+ }
328
+ let headEnd;
329
+ let tailStart;
330
+ if (marks.length >= 2) {
331
+ const start = marks[0] === -1 ? size : marks[0];
332
+ const end = marks[1] === -1 ? size : marks[1];
333
+ if (!(start >= 1 && end >= start && end <= size)) {
334
+ 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 });
335
+ }
336
+ headEnd = start - 1;
337
+ tailStart = end + 1;
338
+ }
339
+ else {
340
+ const c = marks.length === 1 && marks[0] !== -1 ? marks[0] : size + 1;
341
+ if (!(c >= 1 && c <= size + 1)) {
342
+ 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 });
343
+ }
344
+ headEnd = c - 1;
345
+ tailStart = c;
346
+ }
347
+ const head = headEnd >= 1 ? await byteSource.read(1, headEnd) : new Uint8Array(0);
348
+ const tail = tailStart <= size ? await byteSource.read(tailStart, size) : new Uint8Array(0);
349
+ const result = new Uint8Array(head.length + srcBytes.length + tail.length);
350
+ result.set(head, 0);
351
+ result.set(srcBytes, head.length);
352
+ result.set(tail, head.length + srcBytes.length);
353
+ const channels = {
354
+ ...(existing?.channels ?? {}),
355
+ [destination.channel]: { content: "", bytes: result, mimetype },
356
+ };
357
+ const written = await this.#writeEntry(destination.scheme, storageAddress, { channels }, ctx);
358
+ return MutationEffects.finalizeEffects(Results.assert(written), destination, [destinationEffect]);
359
+ }
360
+ async invokeEditBatch(selection, edits, ctx, precondition = null) {
361
+ const handler = this.#schemes.get(selection.scheme, ctx.functionalityWorkerId);
362
+ if (typeof handler?.editBatch !== "function") {
363
+ return MutationEffects.failure("operation-not-implemented", 501, `Scheme '${selection.scheme}' does not implement EDIT batches.`, {}, {
364
+ scheme: selection.scheme,
365
+ operation: "EDIT",
366
+ retryable: false,
367
+ });
368
+ }
369
+ const statements = edits.map(({ marker, body, position }) => ({
370
+ op: "EDIT",
371
+ delimiter: "",
372
+ annotation: null,
373
+ signal: null,
374
+ target: selection.target,
375
+ metadata: selection.metadata,
376
+ lineMarker: marker,
377
+ body,
378
+ position,
379
+ }));
380
+ const addressedScheme = selection.target.kind === "url"
381
+ ? selection.target.scheme
382
+ : selection.scheme;
383
+ try {
384
+ const binding = await this.#resolveDataEntryAddress({
385
+ target: selection.target,
386
+ routedScheme: selection.scheme,
387
+ handler,
388
+ manifest: selection.manifest,
389
+ ctx,
390
+ });
391
+ if (binding.result !== null)
392
+ return binding.result;
393
+ if (binding.address === null) {
394
+ return MutationEffects.failure("entry-not-found", 404, `No entry exists at ${MutationEffects.resourceAddress(selection)}.`);
395
+ }
396
+ const result = Results.assert(await handler.editBatch(statements, new SchemeCtxImpl(ctx, addressedScheme, selection.manifest, this.#liveSubscriptions, {
397
+ authority: binding.address.authority,
398
+ ownerId: binding.address.ownerId,
399
+ publishedChannel: selection.channel,
400
+ editPrecondition: precondition,
401
+ })));
402
+ return MutationEffects.withProposalRoute(result, selection);
403
+ }
404
+ catch (err) {
405
+ if (err instanceof InvalidOperationResultError)
406
+ throw err;
407
+ console.error(`Scheme '${selection.scheme}' COPY/MOVE edit threw outside its operation result contract:`, err);
408
+ return MutationEffects.failure("scheme-handler-threw", 500, `The '${selection.scheme}' scheme did not produce a COPY/MOVE edit result.`, {}, {
409
+ stage: "scheme-dispatch",
410
+ scheme: selection.scheme,
411
+ operation: "EDIT",
412
+ });
413
+ }
414
+ }
415
+ async settleMoveProposal({ statement, result, settlement, ctx, ids, }) {
416
+ if (statement.op !== "MOVE")
417
+ return settlement;
418
+ const attrs = result.attrs;
419
+ const destinationWritten = attrs?.moveDestinationWritten;
420
+ if (destinationWritten !== undefined) {
421
+ const destinationEffects = attrs?.moveDestinationEffects === undefined
422
+ ? []
423
+ : assertResourceEffects(attrs.moveDestinationEffects);
424
+ if (settlement.resolution.decision !== "accept") {
425
+ const decision = settlement.resolution.decision;
426
+ return {
427
+ resolution: settlement.resolution,
428
+ applied: MutationEffects.moveFailureAfterDestination(MutationEffects.failure("move-source-not-applied", decision === "cancel" ? 499 : 409, `The MOVE destination was written, but source removal was ${decision === "cancel" ? "cancelled" : "rejected"}.`, {}, {
429
+ retryable: false,
430
+ }), destinationWritten, destinationEffects),
431
+ };
432
+ }
433
+ if (settlement.applied === undefined) {
434
+ return {
435
+ resolution: settlement.resolution,
436
+ applied: MutationEffects.moveFailureAfterDestination(MutationEffects.failure("proposal-apply-missing", 500, "The source scheme accepted its MOVE proposal without applying the source mutation.", {}, {
437
+ stage: "proposal-application",
438
+ retryable: false,
439
+ }), destinationWritten, destinationEffects),
440
+ };
441
+ }
442
+ if (settlement.applied.status >= 400) {
443
+ return {
444
+ resolution: settlement.resolution,
445
+ applied: MutationEffects.moveFailureAfterDestination(settlement.applied, destinationWritten, destinationEffects),
446
+ };
447
+ }
448
+ return MutationEffects.withSettlementEffects(settlement, [
449
+ ...destinationEffects,
450
+ ...MutationEffects.settlementEffects(settlement),
451
+ ]);
452
+ }
453
+ const deferred = attrs?.moveSource;
454
+ if (deferred === undefined
455
+ || settlement.resolution.decision !== "accept"
456
+ || (settlement.applied?.status ?? 200) >= 400) {
457
+ return settlement;
458
+ }
459
+ if (settlement.applied === undefined) {
460
+ return {
461
+ resolution: settlement.resolution,
462
+ applied: MutationEffects.failure("proposal-apply-missing", 500, "The destination scheme accepted its MOVE proposal without applying the destination mutation.", {}, {
463
+ stage: "proposal-application",
464
+ retryable: false,
465
+ }),
466
+ };
467
+ }
468
+ const destinationEffects = MutationEffects.settlementEffects(settlement);
469
+ const resolvedSource = await this.#selection.resolveResourceSelection({
470
+ target: deferred.target,
471
+ metadata: deferred.metadata,
472
+ lineMarker: deferred.lineMarker,
473
+ }, ctx);
474
+ if (MutationEffects.isDispatchResult(resolvedSource)) {
475
+ return {
476
+ resolution: settlement.resolution,
477
+ applied: MutationEffects.moveFailureAfterDestination(resolvedSource, deferred.destination, destinationEffects),
478
+ };
479
+ }
480
+ if (resolvedSource.scheme !== deferred.scheme
481
+ || resolvedSource.authority !== deferred.authority
482
+ || resolvedSource.pathname !== deferred.pathname
483
+ || resolvedSource.channel !== deferred.channel) {
484
+ throw new InvalidOperationResultError("A deferred MOVE source no longer resolves to its recorded identity.");
485
+ }
486
+ const removed = await this.removeMoveSource(statement, {
487
+ ...resolvedSource,
488
+ lineMarker: resolvedSource.lineMarker,
489
+ }, ctx, deferred.lineAnchorPrecondition);
490
+ if (removed.status >= 400) {
491
+ return {
492
+ resolution: settlement.resolution,
493
+ applied: MutationEffects.moveFailureAfterDestination(removed, deferred.destination, destinationEffects),
494
+ };
495
+ }
496
+ if (removed.status !== 202) {
497
+ return MutationEffects.withSettlementEffects(settlement, [
498
+ ...destinationEffects,
499
+ ...MutationEffects.effectsOf(removed),
500
+ ]);
501
+ }
502
+ const initialSourceSettlement = await this.#applyProposal(statement, removed, { decision: "accept" }, ids);
503
+ const sourceSettlement = MutationEffects.settleProposalEffects(removed, initialSourceSettlement);
504
+ if (sourceSettlement.applied === undefined) {
505
+ return {
506
+ resolution: settlement.resolution,
507
+ applied: MutationEffects.moveFailureAfterDestination(MutationEffects.failure("proposal-apply-missing", 500, "The source scheme accepted its MOVE proposal without applying the source mutation.", {}, {
508
+ stage: "proposal-application",
509
+ retryable: false,
510
+ }), deferred.destination, destinationEffects),
511
+ };
512
+ }
513
+ if (sourceSettlement.applied.status >= 400) {
514
+ return {
515
+ resolution: settlement.resolution,
516
+ applied: MutationEffects.moveFailureAfterDestination(sourceSettlement.applied, deferred.destination, destinationEffects),
517
+ };
518
+ }
519
+ return MutationEffects.withSettlementEffects(settlement, [
520
+ ...destinationEffects,
521
+ ...MutationEffects.settlementEffects(sourceSettlement),
522
+ ]);
523
+ }
524
+ }
525
+ //# sourceMappingURL=ResourceTransfers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceTransfers.js","sourceRoot":"","sources":["../../src/core/ResourceTransfers.ts"],"names":[],"mappings":"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"}
@@ -357,8 +357,8 @@ export default class SchemeRegistry {
357
357
  const examples = this.examples(workerId)
358
358
  .filter(({ name }) => admitted === undefined || admitted.has(name))
359
359
  .map(({ source }) => source);
360
- // Scheme examples use the shared model-facing operation fence. {§packet-operation-fences}
361
- return examples.length > 0 ? `\`\`\`plurnk\n${examples.join("\n\n")}\n\`\`\`` : "";
360
+ // Scheme examples use the shared model-facing operation-example fence. {§packet-operation-fences}
361
+ return examples.length > 0 ? `\`\`\`example\n${examples.join("\n\n")}\n\`\`\`` : "";
362
362
  }
363
363
  async #requiredSchemeDocs() {
364
364
  this.#schemeDocs ??= Promise.all(Object.entries(TEACHING_CORPUS.schemeDocs).map(async ([name, source]) => [name, await this.#readTeaching(source)])).then((entries) => new Map(entries));