@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,29 @@
1
+ import { type ResourceSelection } from "@plurnk/plurnk-contracts";
2
+ import { type ScopeNormalization } from "@plurnk/plurnk-schemes";
3
+ import type { ProposalSettlement } from "./ProposalLifecycle.ts";
4
+ import { type EditBatchReceipt, type LineAnchorPrecondition, type ResourceEffect, type ResourceEffectAction } from "../content/index.ts";
5
+ import type { DispatchResult, PreparedEdit, ResourceAddress, AddressedResourceSelection, ResolvedResourceSelection, SelectedSource, DeferredMoveSource, PendingResourceEffect } from "./mutation-types.ts";
6
+ export default class MutationEffects {
7
+ static failure(code: string, status: number, detail: string, fields?: Readonly<Record<string, unknown>>, extensions?: Readonly<Record<string, unknown>>): DispatchResult;
8
+ static isAppendMarker(marker: ResourceSelection["lineMarker"]): boolean;
9
+ static isCompleteAbsentDestinationMarker(marker: ResourceSelection["lineMarker"], content: string): boolean;
10
+ static isDispatchResult(value: AddressedResourceSelection | SelectedSource | DispatchResult): value is DispatchResult;
11
+ static prependScopeNormalizations(result: DispatchResult, scopeNormalizations: ReadonlyArray<ScopeNormalization> | undefined): DispatchResult;
12
+ static mergeLineAnchorPreconditions(...values: ReadonlyArray<LineAnchorPrecondition | null>): LineAnchorPrecondition | null;
13
+ static appliedEffects(result: DispatchResult, pending: readonly PendingResourceEffect[]): DispatchResult;
14
+ static withEditMaterialization(result: DispatchResult, receipt: EditBatchReceipt): DispatchResult;
15
+ static effectsOf(result: DispatchResult): readonly ResourceEffect[];
16
+ static withCombinedEffects(result: DispatchResult, ...additional: ReadonlyArray<readonly ResourceEffect[]>): DispatchResult;
17
+ static settleProposalEffects(original: DispatchResult, settlement: ProposalSettlement): ProposalSettlement;
18
+ static settlementEffects(settlement: ProposalSettlement): readonly ResourceEffect[];
19
+ static withSettlementEffects(settlement: ProposalSettlement, effects: readonly ResourceEffect[]): ProposalSettlement;
20
+ static resourceAddress(selection: ResourceAddress): string;
21
+ static pendingEffect(selection: ResourceAddress, action: ResourceEffectAction): PendingResourceEffect;
22
+ static withProposalRoute(result: DispatchResult, selection: ResourceAddress): DispatchResult;
23
+ static projectPreparedEdit(prepared: PreparedEdit): Promise<DispatchResult>;
24
+ static finalizeEffects(result: DispatchResult, selection: ResourceAddress, pending: readonly PendingResourceEffect[]): DispatchResult;
25
+ static sameChannel(left: ResourceAddress, right: ResourceAddress): boolean;
26
+ static moveFailureAfterDestination(result: DispatchResult, destination: string, destinationEffects: readonly ResourceEffect[]): DispatchResult;
27
+ static deferredMoveSource(source: ResolvedResourceSelection, destination: ResourceAddress, lineAnchorPrecondition: LineAnchorPrecondition | null): DeferredMoveSource;
28
+ }
29
+ //# sourceMappingURL=MutationEffects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationEffects.d.ts","sourceRoot":"","sources":["../../src/core/MutationEffects.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAwF,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE/N,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,cAAc,EAAE,kBAAkB,EAAE,qBAAqB,EAA8B,MAAM,qBAAqB,CAAC;AAEvO,MAAM,CAAC,OAAO,OAAO,eAAe;IAChC,MAAM,CAAC,OAAO,CACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,EAC9C,UAAU,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GACnD,cAAc,CAEhB;IAID,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,GAAG,OAAO,CAGtE;IAGD,MAAM,CAAC,iCAAiC,CACpC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,EACvC,OAAO,EAAE,MAAM,GAChB,OAAO,CAST;IAGD,MAAM,CAAC,gBAAgB,CACnB,KAAK,EAAE,0BAA0B,GAAG,cAAc,GAAG,cAAc,GACpE,KAAK,IAAI,cAAc,CAEzB;IAGD,MAAM,CAAC,0BAA0B,CAC7B,MAAM,EAAE,cAAc,EACtB,mBAAmB,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,SAAS,GACnE,cAAc,CAShB;IAGD,MAAM,CAAC,4BAA4B,CAC/B,GAAG,MAAM,EAAE,aAAa,CAAC,sBAAsB,GAAG,IAAI,CAAC,GACxD,sBAAsB,GAAG,IAAI,CAY/B;IAGD,MAAM,CAAC,cAAc,CACjB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,SAAS,qBAAqB,EAAE,GAC1C,cAAc,CAsEhB;IAOD,MAAM,CAAC,uBAAuB,CAC1B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,gBAAgB,GAC1B,cAAc,CAkBhB;IAGD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,cAAc,EAAE,CAIlE;IAGD,MAAM,CAAC,mBAAmB,CACtB,MAAM,EAAE,cAAc,EACtB,GAAG,UAAU,EAAE,aAAa,CAAC,SAAS,cAAc,EAAE,CAAC,GACxD,cAAc,CAOhB;IAGD,MAAM,CAAC,qBAAqB,CACxB,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,kBAAkB,GAC/B,kBAAkB,CAqCpB;IAGD,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,cAAc,EAAE,CAIlF;IAGD,MAAM,CAAC,qBAAqB,CACxB,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,SAAS,cAAc,EAAE,GACnC,kBAAkB,CAgBpB;IAGD,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAmBzD;IAGD,MAAM,CAAC,aAAa,CAChB,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,oBAAoB,GAC7B,qBAAqB,CAKvB;IAGD,MAAM,CAAC,iBAAiB,CACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,eAAe,GAC3B,cAAc,CAchB;IAGD,OAAa,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BhF;IAGD,MAAM,CAAC,eAAe,CAClB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,SAAS,qBAAqB,EAAE,GAC1C,cAAc,CAUhB;IAGD,MAAM,CAAC,WAAW,CACd,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,eAAe,GACvB,OAAO,CAKT;IAGD,MAAM,CAAC,2BAA2B,CAC9B,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,SAAS,cAAc,EAAE,GAC9C,cAAc,CAsBhB;IAGD,MAAM,CAAC,kBAAkB,CACrB,MAAM,EAAE,yBAAyB,EACjC,WAAW,EAAE,eAAe,EAC5B,sBAAsB,EAAE,sBAAsB,GAAG,IAAI,GACtD,kBAAkB,CAYpB;CAEJ"}
@@ -0,0 +1,318 @@
1
+ // Stateless helpers of the resource mutations: failure results, effect projection, address and marker facts.
2
+ import { PathSyntax } from "@plurnk/plurnk-contracts";
3
+ import { TextCoordinates } from "@plurnk/plurnk-mimetypes";
4
+ import { InvalidOperationResultError } from "@plurnk/plurnk-schemes";
5
+ import { renderAddress, renderTarget } from "./plurnk-uri.js";
6
+ import { assertEditBatchReceipt, assertEditReceipt, assertResourceEffects, projectEditReceipt } from "../content/index.js";
7
+ import Results from "./results.js";
8
+ export default class MutationEffects {
9
+ static failure(code, status, detail, fields = {}, extensions = {}) {
10
+ return Results.failure("engine:dispatcher", code, status, detail, fields, extensions);
11
+ }
12
+ // The documented append region is exactly `<-1>`: one mark, the line after the last.
13
+ static isAppendMarker(marker) {
14
+ const marks = marker?.marks;
15
+ return Array.isArray(marks) && marks.length === 1 && marks[0] === -1;
16
+ }
17
+ static isCompleteAbsentDestinationMarker(marker, content) {
18
+ const marks = marker?.marks;
19
+ if (!Array.isArray(marks))
20
+ return false;
21
+ if (marks.length === 2 && marks[0] === 1 && marks[1] === -1)
22
+ return true;
23
+ const lineCount = TextCoordinates.logicalLines(content).length;
24
+ return lineCount > 0 && marks[0] === 1 && ((marks.length === 1 && lineCount === 1)
25
+ || (marks.length === 2 && marks[1] === lineCount));
26
+ }
27
+ static isDispatchResult(value) {
28
+ return "status" in value;
29
+ }
30
+ static prependScopeNormalizations(result, scopeNormalizations) {
31
+ if (scopeNormalizations === undefined)
32
+ return result;
33
+ return Results.assert({
34
+ ...result,
35
+ scopeNormalizations: [
36
+ ...scopeNormalizations,
37
+ ...(result.scopeNormalizations ?? []),
38
+ ],
39
+ });
40
+ }
41
+ static mergeLineAnchorPreconditions(...values) {
42
+ const present = values.filter((value) => value !== null);
43
+ if (present.length === 0)
44
+ return null;
45
+ const identity = present[0].identity;
46
+ if (present.some((value) => value.identity !== identity)) {
47
+ throw new TypeError("Line-anchor preconditions for one edit batch must share a resource identity.");
48
+ }
49
+ const checks = [...new Map(present.flatMap(({ checks: valueChecks }) => valueChecks)
50
+ .map((check) => [`${check.anchor}:${check.line}`, check])).values()];
51
+ return { identity, checks };
52
+ }
53
+ static appliedEffects(result, pending) {
54
+ // {§edit-result-copy-move-effects} — only an applied mutation earns
55
+ // engine-composed effects; native scheme receipts remain internal input.
56
+ const exact = Results.assert(result);
57
+ if (exact.status === 304 || exact.status === 202 || exact.status >= 300)
58
+ return exact;
59
+ if (exact.effects !== undefined) {
60
+ throw new InvalidOperationResultError("A COPY/MOVE mutation result supplied effects before engine composition.");
61
+ }
62
+ const batch = exact.editReceipt === undefined
63
+ ? undefined
64
+ : assertEditBatchReceipt(exact.editReceipt);
65
+ const single = batch === undefined && exact.receipt !== undefined
66
+ ? assertEditReceipt(exact.receipt)
67
+ : undefined;
68
+ const batchSize = batch === undefined
69
+ ? undefined
70
+ : "disposition" in batch
71
+ ? batch.superseded.length
72
+ : batch.effects.length;
73
+ if (batchSize !== undefined && batchSize !== pending.length) {
74
+ throw new InvalidOperationResultError(`COPY/MOVE expected ${pending.length} receipt projections, got ${batchSize}.`);
75
+ }
76
+ if (single !== undefined && pending.length !== 1) {
77
+ throw new InvalidOperationResultError(`COPY/MOVE received one receipt for ${pending.length} resource effects.`);
78
+ }
79
+ let effects;
80
+ if (batch !== undefined && "disposition" in batch) {
81
+ const replacement = pending[0];
82
+ if (replacement === undefined) {
83
+ throw new InvalidOperationResultError("A reviewer-replaced COPY/MOVE batch has no resource effect.");
84
+ }
85
+ if (pending.some(({ target, action }) => target !== replacement.target || action !== replacement.action)) {
86
+ throw new InvalidOperationResultError("A reviewer-replaced COPY/MOVE batch spans incompatible resource effects.");
87
+ }
88
+ effects = [{
89
+ ...replacement,
90
+ receipt: projectEditReceipt(batch, 0),
91
+ }];
92
+ }
93
+ else {
94
+ effects = pending.map((effect, index) => ({
95
+ ...effect,
96
+ ...(batch !== undefined
97
+ ? { receipt: projectEditReceipt(batch, index) }
98
+ : single !== undefined
99
+ ? { receipt: single }
100
+ : {}),
101
+ }));
102
+ }
103
+ assertResourceEffects(effects);
104
+ const { editReceipt: _editReceipt, receipt: _receipt, ...withoutInternalReceipts } = exact;
105
+ return {
106
+ ...withoutInternalReceipts,
107
+ effects,
108
+ };
109
+ }
110
+ // {§copy-move-observation} {§edit-result-copy-move-effects} — scoped
111
+ // COPY/MOVE into an unscoped channel is a text materialization even when
112
+ // CRUD creates the channel wholesale. Carry the receipt through synchronous
113
+ // writes and proposals; the destination scheme owns reviewed output.
114
+ static withEditMaterialization(result, receipt) {
115
+ const exact = Results.assert(result);
116
+ if (exact.status !== 200 && exact.status !== 201 && exact.status !== 202)
117
+ return exact;
118
+ const materialized = exact.editReceipt === undefined
119
+ ? assertEditBatchReceipt(receipt)
120
+ : assertEditBatchReceipt(exact.editReceipt);
121
+ return {
122
+ ...exact,
123
+ editReceipt: materialized,
124
+ ...(exact.status === 202
125
+ ? {
126
+ attrs: {
127
+ ...exact.attrs,
128
+ editReceipt: materialized,
129
+ },
130
+ }
131
+ : {}),
132
+ };
133
+ }
134
+ static effectsOf(result) {
135
+ return result.effects === undefined
136
+ ? []
137
+ : assertResourceEffects(result.effects);
138
+ }
139
+ static withCombinedEffects(result, ...additional) {
140
+ const existing = MutationEffects.effectsOf(result);
141
+ const effects = [...existing, ...additional.flat()];
142
+ const { effects: _effects, ...withoutEffects } = result;
143
+ return effects.length === 0
144
+ ? withoutEffects
145
+ : { ...withoutEffects, effects: assertResourceEffects(effects) };
146
+ }
147
+ static settleProposalEffects(original, settlement) {
148
+ const pending = original.attrs
149
+ ?.proposalEffects;
150
+ if (pending === undefined
151
+ || settlement.resolution.decision !== "accept"
152
+ || settlement.applied === undefined
153
+ || settlement.applied.status >= 300) {
154
+ return settlement;
155
+ }
156
+ const projected = settlement.resolution.result ?? {};
157
+ const aggregate = settlement.applied.editReceipt;
158
+ const applied = MutationEffects.appliedEffects({
159
+ ...projected,
160
+ status: settlement.applied.status,
161
+ ...(aggregate === undefined ? {} : { editReceipt: aggregate }),
162
+ }, pending);
163
+ const { status: _status, body: _body, ...result } = applied;
164
+ const { body: _resolutionBody, ...resolution } = settlement.resolution;
165
+ return {
166
+ ...settlement,
167
+ resolution: {
168
+ ...resolution,
169
+ result,
170
+ },
171
+ };
172
+ }
173
+ static settlementEffects(settlement) {
174
+ const effects = settlement.resolution.result
175
+ ?.effects;
176
+ return effects === undefined ? [] : assertResourceEffects(effects);
177
+ }
178
+ static withSettlementEffects(settlement, effects) {
179
+ const projected = (settlement.resolution.result ?? {});
180
+ const { effects: _effects, ...withoutEffects } = projected;
181
+ const result = effects.length === 0
182
+ ? withoutEffects
183
+ : {
184
+ ...withoutEffects,
185
+ effects: assertResourceEffects(effects),
186
+ };
187
+ return {
188
+ ...settlement,
189
+ resolution: {
190
+ ...settlement.resolution,
191
+ result,
192
+ },
193
+ };
194
+ }
195
+ static resourceAddress(selection) {
196
+ const address = selection.scheme === "file"
197
+ ? renderTarget({
198
+ scheme: null,
199
+ pathname: selection.identityPathname.replace(/^\//, ""),
200
+ })
201
+ : renderAddress({
202
+ scheme: selection.scheme,
203
+ // {§worker-authority-carving} — storage keys the owner, so the
204
+ // address the model typed (`~`) is re-applied for it to recognize.
205
+ authority: selection.scheme === "worker" && selection.target.kind === "url"
206
+ ? selection.target.hostname ?? ""
207
+ : selection.authority,
208
+ pathname: selection.identityPathname,
209
+ });
210
+ if (address === null)
211
+ throw new Error("resolved resource selection has no renderable address");
212
+ return selection.channel === selection.manifest.defaultChannel
213
+ ? address
214
+ : `${address}#${PathSyntax.escapeTarget(selection.channel)}`;
215
+ }
216
+ static pendingEffect(selection, action) {
217
+ return {
218
+ target: MutationEffects.resourceAddress(selection),
219
+ action,
220
+ };
221
+ }
222
+ static withProposalRoute(result, selection) {
223
+ if (result.status !== 202)
224
+ return result;
225
+ return {
226
+ ...result,
227
+ attrs: {
228
+ ...result.attrs,
229
+ proposalScheme: selection.scheme,
230
+ proposalTarget: {
231
+ scheme: selection.scheme,
232
+ authority: selection.authority,
233
+ pathname: selection.identityPathname,
234
+ },
235
+ },
236
+ };
237
+ }
238
+ static async projectPreparedEdit(prepared) {
239
+ if (prepared.projection !== null)
240
+ return prepared.projection;
241
+ const settled = prepared.first
242
+ ? prepared.batch.initial
243
+ : await prepared.batch.settled;
244
+ const normalization = prepared.normalizationIndex === null
245
+ ? undefined
246
+ : settled.scopeNormalizations?.[prepared.normalizationIndex];
247
+ const { scopeNormalizations: _scopeNormalizations, merges: _merges, applied: _applied, merged: _merged, ...projectedSettlement } = settled;
248
+ const statementResult = {
249
+ ...(normalization === undefined ? projectedSettlement : { ...projectedSettlement, scopeNormalizations: [normalization] }),
250
+ ...(prepared.merged.length === 0 ? {} : { merged: prepared.merged }),
251
+ };
252
+ const aggregate = prepared.batch.aggregate;
253
+ if (aggregate === undefined)
254
+ return statementResult;
255
+ const receipt = assertEditBatchReceipt(aggregate);
256
+ // The settled result may already carry the first statement's projected receipt; every
257
+ // row projects its own from the batch aggregate.
258
+ const { editReceipt: _editReceipt, receipt: _receipt, ...withoutAggregate } = statementResult;
259
+ // A dropped duplicate applied nothing: its row carries the merge fact, not a twin's effect.
260
+ if (prepared.receiptIndex === null)
261
+ return withoutAggregate;
262
+ return {
263
+ ...withoutAggregate,
264
+ receipt: projectEditReceipt(receipt, prepared.receiptIndex),
265
+ };
266
+ }
267
+ static finalizeEffects(result, selection, pending) {
268
+ const routed = MutationEffects.withProposalRoute(result, selection);
269
+ if (routed.status !== 202)
270
+ return MutationEffects.appliedEffects(routed, pending);
271
+ return {
272
+ ...routed,
273
+ attrs: {
274
+ ...routed.attrs,
275
+ proposalEffects: pending,
276
+ },
277
+ };
278
+ }
279
+ static sameChannel(left, right) {
280
+ return left.scheme === right.scheme
281
+ && left.authority === right.authority
282
+ && left.identityPathname === right.identityPathname
283
+ && left.channel === right.channel;
284
+ }
285
+ static moveFailureAfterDestination(result, destination, destinationEffects) {
286
+ const exact = Results.assert(result);
287
+ if (exact.status < 400) {
288
+ throw new InvalidOperationResultError("A successful MOVE source result was classified as a partial failure.");
289
+ }
290
+ if (exact.problem === undefined) {
291
+ throw new InvalidOperationResultError("A failed MOVE source mutation has no Problem Details.");
292
+ }
293
+ const failed = Results.assert({
294
+ ...exact,
295
+ problem: {
296
+ ...exact.problem,
297
+ operation: "MOVE",
298
+ destinationWritten: true,
299
+ destination,
300
+ },
301
+ });
302
+ return MutationEffects.withCombinedEffects(failed, destinationEffects);
303
+ }
304
+ static deferredMoveSource(source, destination, lineAnchorPrecondition) {
305
+ return {
306
+ target: source.target,
307
+ metadata: source.metadata,
308
+ lineMarker: source.lineMarker,
309
+ scheme: source.scheme,
310
+ authority: source.authority,
311
+ pathname: source.pathname,
312
+ channel: source.channel,
313
+ destination: MutationEffects.resourceAddress(destination),
314
+ lineAnchorPrecondition,
315
+ };
316
+ }
317
+ }
318
+ //# sourceMappingURL=MutationEffects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationEffects.js","sourceRoot":"","sources":["../../src/core/MutationEffects.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { type FoldStatement, type PlanStatement, type SendStatement } from "@plurnk/plurnk-contracts";
1
+ import { type KillStatement, type PlanStatement, type SendStatement } from "@plurnk/plurnk-contracts";
2
2
  import type { Db } from "./Db.ts";
3
- export type OverflowFold = {
4
- readonly statement: FoldStatement;
3
+ export type OverflowKill = {
4
+ readonly statement: KillStatement;
5
5
  };
6
6
  export default class OverflowTurn {
7
- static plan(db: Db, loopId: number, turnId: number): Promise<OverflowFold[]>;
7
+ static plan(db: Db, loopId: number, turnId: number): Promise<OverflowKill[]>;
8
8
  static planStatement(): PlanStatement;
9
9
  static sendStatement(): SendStatement;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OverflowTurn.d.ts","sourceRoot":"","sources":["../../src/core/OverflowTurn.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAErB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAkBlC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;CACrC,CAAC;AAqCF,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,OAAa,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAmBjF;IAED,MAAM,CAAC,aAAa,IAAI,aAAa,CAUpC;IAED,MAAM,CAAC,aAAa,IAAI,aAAa,CAUpC;CACJ"}
1
+ {"version":3,"file":"OverflowTurn.d.ts","sourceRoot":"","sources":["../../src/core/OverflowTurn.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAErB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAkBlC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;CACrC,CAAC;AAoCF,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,OAAa,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAmBjF;IAED,MAAM,CAAC,aAAa,IAAI,aAAa,CAUpC;IAED,MAAM,CAAC,aAAa,IAAI,aAAa,CAUpC;CACJ"}
@@ -2,8 +2,8 @@ import { UNKNOWN_POSITION, } from "@plurnk/plurnk-contracts";
2
2
  import LogBody from "./LogBody.js";
3
3
  import LogEntryProjection from "./LogEntryProjection.js";
4
4
  import LogVisibility from "./LogVisibility.js";
5
- const OVERFLOW_PLAN = "Automatically FOLD log bodies newly active at token-budget overflow.";
6
- const OVERFLOW_SEND = "Next: YOU MUST ONLY FOLD, KILL, or trim ALL superseded, stale, or irrelevant log content in bulk.";
5
+ const OVERFLOW_PLAN = "Automatically KILL log bodies newly active at token-budget overflow.";
6
+ const OVERFLOW_SEND = "Next: YOU MUST ONLY KILL superseded, stale, or irrelevant log content in bulk.";
7
7
  const targetFor = (coordinate) => ({
8
8
  kind: "url",
9
9
  raw: `log:///${coordinate}`,
@@ -19,10 +19,9 @@ const targetFor = (coordinate) => ({
19
19
  const foldFor = (row) => {
20
20
  const coordinate = LogEntryProjection.coordinate(row.coordinate, row);
21
21
  const statement = {
22
- op: "FOLD",
22
+ op: "KILL",
23
23
  annotation: null,
24
24
  delimiter: "",
25
- signal: ["+_plurnk", "+overflow"],
26
25
  target: targetFor(coordinate),
27
26
  metadata: null,
28
27
  lineMarker: { marks: [1, -1] },
@@ -32,7 +31,7 @@ const foldFor = (row) => {
32
31
  return { statement };
33
32
  };
34
33
  // {§overflow-turn-curation} — deterministic selection only. Execution remains
35
- // ordinary Dispatcher FOLD, so Log owns the visibility transaction and effect
34
+ // ordinary Dispatcher scoped KILL, so Log owns the visibility transaction and effect
36
35
  // evidence exactly as it does for model-authored curation.
37
36
  export default class OverflowTurn {
38
37
  static async plan(db, loopId, turnId) {
@@ -58,7 +57,7 @@ export default class OverflowTurn {
58
57
  static planStatement() {
59
58
  return {
60
59
  op: "PLAN", delimiter: "", annotation: null,
61
- signal: null, target: null, metadata: null, lineMarker: null,
60
+ target: null, metadata: null, lineMarker: null,
62
61
  body: [{
63
62
  content: OVERFLOW_PLAN,
64
63
  status: "in_progress",
@@ -69,7 +68,7 @@ export default class OverflowTurn {
69
68
  static sendStatement() {
70
69
  return {
71
70
  op: "SEND", delimiter: "", annotation: null,
72
- signal: 102, target: null, metadata: null, lineMarker: null,
71
+ status: 102, target: null, metadata: null, lineMarker: null,
73
72
  body: {
74
73
  raw: OVERFLOW_SEND,
75
74
  json: null,
@@ -1 +1 @@
1
- {"version":3,"file":"OverflowTurn.js","sourceRoot":"","sources":["../../src/core/OverflowTurn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OverflowTurn.js","sourceRoot":"","sources":["../../src/core/OverflowTurn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PacketBuilder.d.ts","sourceRoot":"","sources":["../../src/core/PacketBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAgBhD,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,mBAAmB,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AA0FtE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,CAAC,OAAO,OAAO,aAAa;;IAc9B,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;QACpC,EAAE,EAAE,EAAE,CAAC;QACP,OAAO,EAAE,cAAc,CAAC;QACxB,SAAS,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;KACjD,EASA;IAED,yBAAyB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAE7G;IAiCD,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAEnD;IAIK,kBAAkB,CAAC,EACrB,eAAe,EAAE,KAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAY,EAC7G,uBAA8B,EAC9B,gBAA8B,GACjC,EAAE;QACC,eAAe,EAAE,WAAW,EAAE,CAAC;QAE/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAEtD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,QAAQ,CAAC;QAInB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAG5B,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAGxC,gBAAgB,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;KAC/C,GAAG,OAAO,CAAC,aAAa,CAAC,CAyJzB;IAIK,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAuCnH;IAKD,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,GAAG,IAAI,CAInF;IAKK,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9E,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC,CASF;CAqFJ"}
1
+ {"version":3,"file":"PacketBuilder.d.ts","sourceRoot":"","sources":["../../src/core/PacketBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAiBhD,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,mBAAmB,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AA2FtE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,CAAC,OAAO,OAAO,aAAa;;IAgB9B,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;QACpC,EAAE,EAAE,EAAE,CAAC;QACP,OAAO,EAAE,cAAc,CAAC;QACxB,SAAS,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;KACjD,EASA;IAED,yBAAyB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAE7G;IAiCD,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAEnD;IAIK,kBAAkB,CAAC,EACrB,eAAe,EAAE,KAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAY,EAC7G,uBAA8B,EAC9B,gBAA8B,GACjC,EAAE;QACC,eAAe,EAAE,WAAW,EAAE,CAAC;QAE/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAEtD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,QAAQ,CAAC;QAInB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAG5B,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAGxC,gBAAgB,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;KAC/C,GAAG,OAAO,CAAC,aAAa,CAAC,CAqKzB;IAIK,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAuCnH;IAKD,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,GAAG,IAAI,CASnF;IAKK,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9E,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC,CASF;CAmFJ"}
@@ -8,6 +8,7 @@ import { readPacketInject, readSystemPolicy } from "./packet-inject.js";
8
8
  import { readFile } from "node:fs/promises";
9
9
  import Paths from "../Paths.js";
10
10
  import { readTeachingSource } from "./teaching-corpus.js";
11
+ import { attachmentTeaching } from "./attachments.js";
11
12
  // Shared module imported by both Engine and bin/digest.ts, so wire
12
13
  // projection and digest projection are structurally one function — no
13
14
  // drift between wire and digest possible.
@@ -16,6 +17,7 @@ import LogEntryProjection from "./LogEntryProjection.js";
16
17
  import { scopeEnvToAlias, resolveActiveRoute } from "@plurnk/plurnk-providers";
17
18
  import ProviderInstantiate from "./ProviderInstantiate.js";
18
19
  import BudgetReadout from "./BudgetReadout.js";
20
+ import TokenCalibration from "./TokenCalibration.js";
19
21
  import LineAnchors from "../content/line-anchors.js";
20
22
  import ToolResources from "./ToolResources.js";
21
23
  import LogVisibility from "./LogVisibility.js";
@@ -103,6 +105,8 @@ const readRequiredPercentFrom = (env, name) => {
103
105
  // ({§overflow-turn}). Visibility changes stay in the ordinary FOLD owner.
104
106
  class PacketBuilder {
105
107
  #db;
108
+ // {§tokenomics-calibrated-readout} — the factor each built packet was judged and rendered with.
109
+ #calibrations = new WeakMap();
106
110
  #schemes;
107
111
  // Boot-discovered runtime executors, late-injected on Engine after daemon
108
112
  // start() — read through a thunk so the post-construction set is visible.
@@ -187,13 +191,13 @@ class PacketBuilder {
187
191
  prefix_len: promptPrefix.length,
188
192
  }))
189
193
  .filter((r) => typeof r.content === "string" && r.content.length > 0);
190
- // The section is a paths list (the errors shape - no bodies);
194
+ // The section is a JSON array of prompt paths (the errors shape - no bodies);
191
195
  // each prompt's content reaches the model through its actionless prompt row, and
192
196
  // prior prompts stay READable by the listed address - never silently lost, never an
193
197
  // unfair curation imposition. Fallback: callers that bypass persistence (bare messages)
194
198
  // still get their user text rendered directly.
195
199
  const prompt = promptRows.length > 0
196
- ? promptRows.map((r) => `* prompt://${r.pathname}`).join("\n")
200
+ ? `[${promptRows.map((r) => JSON.stringify(`prompt://${r.pathname}`)).join(",\n")}]`
197
201
  : byRole("user");
198
202
  // {§recap}: a non-empty override wins; otherwise read the meta-owned source per packet.
199
203
  const recapContent = recap.length > 0
@@ -220,6 +224,8 @@ class PacketBuilder {
220
224
  ? null
221
225
  : provider.outputBudget - (provider.reasoningBudget ?? 0);
222
226
  const budgetReadout = BudgetReadout.draft(curationBudget, responseRoom);
227
+ // {§tokenomics-calibrated-readout}: what this model's tokenizer charged for its recent packets.
228
+ const calibration = curationBudget === null ? 1 : await TokenCalibration.forModel(this.#db, provider.model);
223
229
  // The canonical default order, trust boundary, and cache-locality bias are
224
230
  // specified at {§packet-cache-monotone}. Budget placeholders resolve only
225
231
  // after trusted whole-list transforms establish the packet being measured.
@@ -228,7 +234,7 @@ class PacketBuilder {
228
234
  // {§turn0-agents-stunt} — the PROJECT AGENTS.md rides turn 0 as a foisted
229
235
  // READ (LoopDocs → worker://~/_plurnk/agents.md), not the system prompt.
230
236
  // Child-orientation ({§child-orientation}): the live things this worker holds — open streams +
231
- // unconcluded child workers — surfaced every turn as terse `* <status> <path>` pointers (same shape
237
+ // unconcluded child workers — surfaced every turn as `{status, path}` JSON pointers (same shape
232
238
  // as errors) just above the errors section. Orienting STATE so the model never loses track of
233
239
  // what it's holding (the premature-terminate trap), never advice on what to do. Empty → omitted.
234
240
  const openChannels = await this.#db.engine_child_streams_open.all({ worker_id: workerId });
@@ -249,8 +255,14 @@ class PacketBuilder {
249
255
  // {§fs-namespace} — the log renders working directories relative to the model's `/`.
250
256
  const workspaceRow = await this.#db.envelope_get_workspace.get({ id: workspaceId });
251
257
  const renderedLog = PacketWire.renderLogWithAccounting(log, weighContent, { projectRoot: workspaceRow?.project_root ?? null, ...(promptProjectionWeight === null ? {} : { promptProjectionWeight }) });
258
+ const attachmentsWeight = renderedLog.attachments.reduce((sum, { weight }) => sum + weight, 0);
252
259
  const defaults = [
253
260
  { name: "definition", slot: "system", header: null, content: system_definition },
261
+ // {§attachment-teaching} — what this route can take as a native part, taught by example
262
+ // above the policy and only when it applies; a blind route has no section at all.
263
+ ...(attachmentTeaching(provider.inputModalities) === ""
264
+ ? []
265
+ : [{ name: "attachments", slot: "system", header: "Attachments", content: attachmentTeaching(provider.inputModalities) }]),
254
266
  // Stable privileged policy leads capability teaching for
255
267
  // prefix-cache locality. Empty policy sections simply disappear.
256
268
  { name: "system-policy", slot: "system", header: "Policy", content: systemPolicy ?? "" },
@@ -292,8 +304,9 @@ class PacketBuilder {
292
304
  const content = BudgetReadout.resolve(budgetSection.content, curationBudget, (candidate) => {
293
305
  const candidateDrafts = drafts.map((section) => section === budgetSection ? { ...section, content: candidate } : section);
294
306
  return weighContent(PacketWire.renderSlot(candidateDrafts, "system"))
295
- + weighContent(PacketWire.renderSlot(candidateDrafts, "user"));
296
- }, reclaimableBodies);
307
+ + weighContent(PacketWire.renderSlot(candidateDrafts, "user"))
308
+ + attachmentsWeight;
309
+ }, reclaimableBodies.map((item) => TokenCalibration.scale(item, calibration)), calibration);
297
310
  drafts = drafts.map((section) => section === budgetSection ? { ...section, content } : section);
298
311
  }
299
312
  // Core alone turns validated drafts into measured durable sections.
@@ -302,7 +315,10 @@ class PacketBuilder {
302
315
  weight: weighContent(PacketWire.renderSection(section)),
303
316
  }));
304
317
  const renderWeight = weighContent(PacketWire.renderSlot(sections, "system")) + weighContent(PacketWire.renderSlot(sections, "user"));
305
- return { weight: renderWeight, sections, attributions: [] };
318
+ // {§packet-attachment-parts} — pictures weigh in the packet like everything else it carries.
319
+ const packet = { weight: renderWeight + attachmentsWeight, sections, attributions: [], attachments: [...renderedLog.attachments] };
320
+ this.#calibrations.set(packet, calibration);
321
+ return packet;
306
322
  }
307
323
  // {§schemes-self-doc-materialization} {§tools-resource-materialization} —
308
324
  // one reserved reference set, materialized by LoopDocs.
@@ -352,9 +368,16 @@ class PacketBuilder {
352
368
  // visibility while measuring a candidate request.
353
369
  curationOverflow(packet, provider) {
354
370
  const budget = this.curationBudgetFor(provider);
355
- if (budget === null || packet.weight <= budget)
371
+ if (budget === null)
356
372
  return null;
357
- return { weight: packet.weight, budget, excess: packet.weight - budget };
373
+ const calibration = this.#calibrations.get(packet);
374
+ if (calibration === undefined)
375
+ throw new Error("curationOverflow: the packet was not built by this PacketBuilder");
376
+ // {§tokenomics-calibrated-readout} — admission judges the same calibrated weight the model was shown.
377
+ const weight = Math.round(packet.weight * calibration);
378
+ if (weight <= budget)
379
+ return null;
380
+ return { weight, budget, excess: weight - budget };
358
381
  }
359
382
  // Every prior-turn operation failure is durable before packet assembly.
360
383
  // The model-facing Errors section is only a terse projection of those rows;
@@ -432,7 +455,6 @@ class PacketBuilder {
432
455
  : LogVisibility.parse(r.folded),
433
456
  source: r.source,
434
457
  attrs: r.attrs === null ? null : JSON.parse(r.attrs),
435
- tags: JSON.parse(r.tags),
436
458
  ...(lineAnchors === undefined ? {} : { lineAnchors }),
437
459
  ...(lineNumberWidth === undefined ? {} : { lineNumberWidth }),
438
460
  };