@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,245 @@
1
+ // Executing an admitted turn: its ordered statements dispatched, problems and notices recorded, the bare batch when no provider spoke. Split out of TurnRunner, which keeps the delegating entry point.
2
+ import { PlurnkParser } from "@plurnk/plurnk-contracts";
3
+ import Results, { OperationFailureError } from "./results.js";
4
+ import Turn from "./Turn.js";
5
+ import StrikeRail from "./StrikeRail.js";
6
+ import { observed } from "../observe/spans.js";
7
+ import { OPS_DISPATCHED, recordCounter } from "../observe/metrics.js";
8
+ import { scheduleTurnOps } from "./turn-scheduler.js";
9
+ import { expandSafeUriTargetGroup } from "./operation-target-groups.js";
10
+ import { readOptimisticSettlementMs } from "./optimistic-settlement.js";
11
+ import { ENGINE_PROBLEMS, TERMINAL_SEND_SIGNALS, TURN_STATUS_IMPLICIT_CONTINUE } from "./turn-signals.js";
12
+ export default class AdmittedTurnExecutor {
13
+ #db;
14
+ #schemes;
15
+ #notices;
16
+ #problems;
17
+ #dispatcher;
18
+ #bareBatch;
19
+ constructor({ db, schemes, notices, problems, dispatcher, bareBatch }) {
20
+ this.#db = db;
21
+ this.#schemes = schemes;
22
+ this.#notices = notices;
23
+ this.#problems = problems;
24
+ this.#dispatcher = dispatcher;
25
+ this.#bareBatch = bareBatch;
26
+ }
27
+ // {§turn-ops-admission-path} — source acquisition ends before this seam.
28
+ // Every admitted producer program is scheduled, dispatched, recorded, and
29
+ // completed here; inference is only the model-specific way one program is
30
+ // acquired and supplied with BARE capability.
31
+ async executeAdmittedTurn({ statements, source, sourceFolded, sourceModelCallId = null, sourceReasoningItems, origin, workspaceId, workerId, loopId, turnId, fromSequence, maxCommands = Number.POSITIVE_INFINITY, enforceIdle = false, failOnOperationError = false, recoverableParseErrors = [], bare, signal, onDispatch, onSettled, }) {
32
+ // {§turn-shape} — PLAN is a SHOULD; the terminal SEND is the one structural requirement.
33
+ const finalOp = statements.at(-1);
34
+ if (finalOp?.op !== "SEND") {
35
+ throw new Error("an admitted operation batch must end in a disposition SEND");
36
+ }
37
+ const dispositionSignal = finalOp.status;
38
+ if (dispositionSignal === null || !TERMINAL_SEND_SIGNALS.has(dispositionSignal)) {
39
+ throw new Error("an admitted turnOps program must end in a terminal disposition SEND");
40
+ }
41
+ let sendOp = finalOp;
42
+ let turnStatus = dispositionSignal;
43
+ let steerStruck = false;
44
+ const pendingEngineErrors = [];
45
+ const middleCount = statements.filter((statement) => statement.op !== "PLAN" && statement.op !== "SEND").length
46
+ + recoverableParseErrors.length;
47
+ if (enforceIdle && turnStatus === TURN_STATUS_IMPLICIT_CONTINUE && middleCount === 0) {
48
+ // {§send-idle-turn} — an empty (NEXT) while the worker holds a live stream or child is a
49
+ // mis-spelled wait, not idleness: it parks as (WAIT) and no strike (#441). The correction
50
+ // rides the SEND row's annotation — a park drops transient notices, the row survives the
51
+ // wake. With nothing in flight the idle-turn 409 stands.
52
+ if (await this.#dispatcher.hasLiveWork(workerId)) {
53
+ const note = "an empty NEXT while a stream or child is in flight waits like WAIT - say WAIT to wait on it";
54
+ sendOp = { ...finalOp, status: 202, annotation: finalOp.annotation === null ? note : `${finalOp.annotation} · ${note}` };
55
+ turnStatus = 202;
56
+ }
57
+ else {
58
+ steerStruck = true;
59
+ pendingEngineErrors.push("idle_turn");
60
+ }
61
+ }
62
+ const turnStatements = sendOp === finalOp ? statements : statements.map((statement) => statement === finalOp ? sendOp : statement);
63
+ let realCommands = 0;
64
+ const admitted = turnStatements.filter((statement) => statement.op === "PLAN"
65
+ || statement === sendOp
66
+ || realCommands++ < maxCommands);
67
+ const scheduled = scheduleTurnOps(admitted.flatMap(expandSafeUriTargetGroup));
68
+ await this.#dispatcher.prepareEditBatches(scheduled, { workspaceId, workerId, loopId, turnId, origin, onDispatch, onSettled });
69
+ const droppedCount = statements.length - admitted.length;
70
+ const bareStatements = scheduled.filter((statement) => statement.op === "BARE");
71
+ let bareResults = null;
72
+ const outcomes = [];
73
+ let rowSequence = fromSequence;
74
+ let parseErrorsRecorded = false;
75
+ const recordRecoverableParseErrors = async () => {
76
+ if (parseErrorsRecorded)
77
+ return;
78
+ parseErrorsRecorded = true;
79
+ for (const error of recoverableParseErrors) {
80
+ const envelopeDefault = error.message === PlurnkParser.MISSING_SEND;
81
+ const recorded = await this.#problems.record({
82
+ workerId,
83
+ loopId,
84
+ turnId,
85
+ sequence: rowSequence++,
86
+ origin,
87
+ source: "grammar",
88
+ result: Results.failure("grammar:parser", "invalid-operation-syntax", 400, error.message, {}, {
89
+ line: error.line,
90
+ column: error.column,
91
+ source: error.source,
92
+ stage: "parse",
93
+ ...(envelopeDefault ? {} : { siblingsRetained: true }),
94
+ retryable: false,
95
+ }),
96
+ });
97
+ outcomes.push({ op: null, status: recorded.result.status, problemType: recorded.result.problem?.type ?? null });
98
+ onDispatch?.(recorded.id);
99
+ await onSettled?.(recorded.id);
100
+ }
101
+ };
102
+ for (const statement of scheduled) {
103
+ if (statement === sendOp) {
104
+ await recordRecoverableParseErrors();
105
+ const execHandler = this.#schemes.get("exec");
106
+ await execHandler?.settleTurnSpawns?.(workerId, turnId, readOptimisticSettlementMs(), signal);
107
+ }
108
+ const result = await observed("op.dispatch", { op: statement.op }, async (span) => {
109
+ let dispatchResult;
110
+ if (statement.op === "BARE") {
111
+ if (bare === undefined) {
112
+ throw new Error(`${origin} turnOps cannot execute BARE without provider acquisition context`);
113
+ }
114
+ if (bareResults === null) {
115
+ const batch = await this.#bareBatch.runBareBatch({
116
+ statements: bareStatements,
117
+ provider: bare.provider,
118
+ turnId,
119
+ workspaceId,
120
+ workerId,
121
+ primaryWorkerId: bare.primaryWorkerId,
122
+ loopSequence: bare.loopSequence,
123
+ turnSequence: bare.turnSequence,
124
+ signal: bare.signal,
125
+ });
126
+ bareResults = new Map(batch.map((item) => [item.statement, item]));
127
+ }
128
+ const bareResult = bareResults.get(statement);
129
+ if (bareResult === undefined) {
130
+ throw new Error("BARE statement reached dispatch without its batch result");
131
+ }
132
+ dispatchResult = await this.#dispatcher.recordBareResult({
133
+ statement,
134
+ workspaceId,
135
+ workerId,
136
+ loopId,
137
+ turnId,
138
+ sequence: rowSequence,
139
+ origin,
140
+ onDispatch,
141
+ onSettled,
142
+ }, bareResult.result, bareResult.modelCallId);
143
+ }
144
+ else {
145
+ dispatchResult = await this.#dispatcher.dispatch({
146
+ statement,
147
+ workspaceId,
148
+ workerId,
149
+ loopId,
150
+ turnId,
151
+ sequence: rowSequence,
152
+ origin,
153
+ onDispatch,
154
+ onSettled,
155
+ });
156
+ }
157
+ span.setAttribute("status", dispatchResult.status);
158
+ recordCounter(OPS_DISPATCHED, { op: statement.op, status: dispatchResult.status });
159
+ return dispatchResult;
160
+ });
161
+ outcomes.push({ op: statement.op, status: result.status, problemType: result.problem?.type ?? null });
162
+ if (failOnOperationError && result.status >= 400)
163
+ throw new OperationFailureError(result);
164
+ for (const normalization of result.scopeNormalizations ?? []) {
165
+ this.#notices.push(workspaceId, workerId, loopId, {
166
+ source: "engine:slicer",
167
+ kind: "scope_normalized",
168
+ level: "warn",
169
+ message: `Scope <${normalization.requested.join(",")}> was normalized to <${normalization.canonical.join(",")}>.`,
170
+ });
171
+ }
172
+ // {§edit-batch-merges} — every applied resolution is also a notice, so the row's
173
+ // `merged` fact is never the only place it is said.
174
+ for (const merge of result.merged ?? []) {
175
+ this.#notices.push(workspaceId, workerId, loopId, {
176
+ source: "engine:slicer",
177
+ kind: "edit_merged",
178
+ level: "warn",
179
+ message: `EDIT resolution applied: ${merge.rule} - the row's merged fact has the coordinates; verify before building on it.`,
180
+ });
181
+ }
182
+ if (statement === sendOp && result.status === 409) {
183
+ steerStruck = true;
184
+ turnStatus = TURN_STATUS_IMPLICIT_CONTINUE;
185
+ }
186
+ if (statement === sendOp
187
+ && result.status !== 409
188
+ && sendOp.target === null
189
+ && sendOp.status === 202
190
+ && result.status !== 202) {
191
+ turnStatus = result.status;
192
+ }
193
+ rowSequence += result.rowsWritten ?? 1;
194
+ }
195
+ await recordRecoverableParseErrors();
196
+ if (droppedCount > 0)
197
+ pendingEngineErrors.push("max_commands_exceeded");
198
+ for (const kind of pendingEngineErrors) {
199
+ const problem = ENGINE_PROBLEMS[kind];
200
+ const extensions = kind === "max_commands_exceeded"
201
+ ? {
202
+ operationLimit: maxCommands,
203
+ omittedOperations: droppedCount,
204
+ stage: "dispatch-admission",
205
+ recovery: "Continue with no more than the configured operation limit.",
206
+ retryable: false,
207
+ }
208
+ : {
209
+ stage: "turn",
210
+ recovery: "Perform an operation before continuing with `### SEND0 (NEXT)`.",
211
+ retryable: false,
212
+ };
213
+ await this.#problems.record({
214
+ workerId,
215
+ loopId,
216
+ turnId,
217
+ sequence: rowSequence++,
218
+ origin: "_plurnk",
219
+ source: "rail",
220
+ result: Results.failure("engine:rail", problem.code, problem.status, problem.detail, {}, extensions),
221
+ });
222
+ }
223
+ if (source !== null) {
224
+ await this.#dispatcher.writeTurnOps({
225
+ verbatim: source,
226
+ workerId,
227
+ loopId,
228
+ turnId,
229
+ sequence: rowSequence,
230
+ origin,
231
+ folded: sourceFolded,
232
+ modelCallId: sourceModelCallId,
233
+ ...(sourceReasoningItems !== undefined ? { reasoningItems: sourceReasoningItems } : {}),
234
+ });
235
+ }
236
+ await Turn.complete(this.#db, turnId, turnStatus);
237
+ return {
238
+ status: turnStatus,
239
+ outcomes,
240
+ fingerprint: StrikeRail.fingerprintTurn(statements),
241
+ steerStruck,
242
+ };
243
+ }
244
+ }
245
+ //# sourceMappingURL=AdmittedTurnExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdmittedTurnExecutor.js","sourceRoot":"","sources":["../../src/core/AdmittedTurnExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { BareStatement } from "@plurnk/plurnk-contracts";
2
+ import { type PluginAttributionContext } from "@plurnk/plurnk-meta";
3
+ import type { Db } from "./Db.ts";
4
+ import { type SchemeResult } from "./results.ts";
5
+ import type { Provider } from "@plurnk/plurnk-providers";
6
+ import type { BareBatchResult } from "./TurnRunner.ts";
7
+ export default class BareBatchRunner {
8
+ #private;
9
+ constructor({ db, providerAttributions, providerFailure }: {
10
+ db: Db;
11
+ providerAttributions: (provider: Provider, context: PluginAttributionContext) => string[];
12
+ providerFailure: (error: unknown, signal: AbortSignal | undefined) => SchemeResult;
13
+ });
14
+ runBareBatch({ statements, provider, turnId, workspaceId, workerId, primaryWorkerId, loopSequence, turnSequence, signal, }: {
15
+ statements: readonly BareStatement[];
16
+ provider: Provider;
17
+ turnId: number;
18
+ workspaceId: number;
19
+ workerId: number;
20
+ primaryWorkerId: string;
21
+ loopSequence: number;
22
+ turnSequence: number;
23
+ signal: AbortSignal | undefined;
24
+ }): Promise<BareBatchResult[]>;
25
+ }
26
+ //# sourceMappingURL=BareBatchRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BareBatchRunner.d.ts","sourceRoot":"","sources":["../../src/core/BareBatchRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,OAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAK1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,eAAe;;IAKhC,YAAY,EAAE,EAAE,EAAE,oBAAoB,EAAE,eAAe,EAAE,EAAE;QACvD,EAAE,EAAE,EAAE,CAAC;QACP,oBAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,wBAAwB,KAAK,MAAM,EAAE,CAAC;QAC1F,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,YAAY,CAAC;KACtF,EAIA;IAEK,YAAY,CAAC,EACf,UAAU,EACV,QAAQ,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,MAAM,GACT,EAAE;QACC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;QACrC,QAAQ,EAAE,QAAQ,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;KACnC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAiG7B;CAKJ"}
@@ -0,0 +1,104 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import Results from "./results.js";
3
+ import { observed } from "../observe/spans.js";
4
+ import { GEN_AI_REQUEST_SPAN, genAiRequestOptions, settleGenAiResponse } from "../observe/genai.js";
5
+ import { PROVIDER_CALLS, recordCounter } from "../observe/metrics.js";
6
+ import ModelCall, { ModelCallPersistenceError, ProviderAccountingIntegrityError } from "./ModelCall.js";
7
+ import { ProviderError } from "@plurnk/plurnk-providers";
8
+ import ProviderInstantiate from "./ProviderInstantiate.js";
9
+ export default class BareBatchRunner {
10
+ #db;
11
+ #providerAttributions;
12
+ #providerFailure;
13
+ constructor({ db, providerAttributions, providerFailure }) {
14
+ this.#db = db;
15
+ this.#providerAttributions = providerAttributions;
16
+ this.#providerFailure = providerFailure;
17
+ }
18
+ async runBareBatch({ statements, provider, turnId, workspaceId, workerId, primaryWorkerId, loopSequence, turnSequence, signal, }) {
19
+ const prepared = [];
20
+ for (const statement of statements) {
21
+ const providerWorkerId = randomUUID();
22
+ const attributionContext = Object.freeze({
23
+ workspaceId: String(workspaceId),
24
+ workerId: providerWorkerId,
25
+ primaryWorkerId,
26
+ loop: loopSequence,
27
+ turn: turnSequence,
28
+ attempt: 1,
29
+ });
30
+ const attributions = this.#providerAttributions(provider, attributionContext);
31
+ const modelCall = await ModelCall.open(this.#db, {
32
+ turnId,
33
+ kind: "bare",
34
+ attributions,
35
+ model: provider.model,
36
+ });
37
+ prepared.push({ statement, modelCall, attributions, providerWorkerId });
38
+ }
39
+ const settlements = await Promise.allSettled(prepared.map(async ({ statement, modelCall, attributions, providerWorkerId }) => {
40
+ try {
41
+ const response = await observed(GEN_AI_REQUEST_SPAN, { model: provider.model, attempt: 1, kind: "bare" }, async (span) => {
42
+ try {
43
+ const generated = await provider.generate({
44
+ messages: [{ role: "user", content: statement.body }],
45
+ workerId: providerWorkerId,
46
+ primaryWorkerId,
47
+ signal,
48
+ attributions: attributions.length > 0 ? attributions : undefined,
49
+ workspaceId: String(workspaceId),
50
+ loop: loopSequence,
51
+ turn: turnSequence,
52
+ observeRequest: modelCall.observeRequest,
53
+ callKind: "bare",
54
+ });
55
+ modelCall.assertAccounting(generated.accounting);
56
+ recordCounter(PROVIDER_CALLS, {
57
+ model: provider.model,
58
+ attempt: 1,
59
+ status: "resolved",
60
+ });
61
+ span.setAttribute("status", "resolved");
62
+ settleGenAiResponse(span, generated);
63
+ return generated;
64
+ }
65
+ catch (error) {
66
+ if (error instanceof ProviderError) {
67
+ modelCall.assertAccounting(error.accounting);
68
+ }
69
+ throw error;
70
+ }
71
+ }, genAiRequestOptions(ProviderInstantiate.aliasOf(provider) ?? "plurnk", provider.model));
72
+ await modelCall.observeResponse(response);
73
+ return {
74
+ statement,
75
+ modelCallId: modelCall.id,
76
+ result: Results.assert({
77
+ status: 200,
78
+ content: response.assistant.content,
79
+ mimetype: "text/plain",
80
+ }),
81
+ };
82
+ }
83
+ catch (error) {
84
+ if (error instanceof ModelCallPersistenceError || error instanceof ProviderAccountingIntegrityError) {
85
+ throw error;
86
+ }
87
+ const failure = this.#providerFailure(error, signal);
88
+ if (error instanceof ProviderError && error.attempt !== undefined) {
89
+ await modelCall.observeResponse(error.attempt, failure);
90
+ }
91
+ else {
92
+ await modelCall.fail(failure);
93
+ }
94
+ return { statement, modelCallId: modelCall.id, result: failure };
95
+ }
96
+ }));
97
+ const internalFailure = settlements.find((settlement) => settlement.status === "rejected");
98
+ if (internalFailure !== undefined)
99
+ throw internalFailure.reason;
100
+ signal?.throwIfAborted();
101
+ return settlements.map((settlement) => settlement.value);
102
+ }
103
+ }
104
+ //# sourceMappingURL=BareBatchRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BareBatchRunner.js","sourceRoot":"","sources":["../../src/core/BareBatchRunner.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ interface LargestLogItem {
7
7
  export default class BudgetReadout {
8
8
  #private;
9
9
  static draft(ceiling: number | null, responseMax?: number | null): string;
10
- static resolve(template: string, ceiling: number, measurePacket: MeasurePacket, largestLogItems?: readonly LargestLogItem[]): string;
10
+ static resolve(template: string, ceiling: number, measurePacket: MeasurePacket, largestLogItems?: readonly LargestLogItem[], calibration?: number): string;
11
11
  }
12
12
  export {};
13
13
  //# sourceMappingURL=BudgetReadout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BudgetReadout.d.ts","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"AASA,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;AAEjD,UAAU,cAAc;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CACjC;AAMD,MAAM,CAAC,OAAO,OAAO,aAAa;;IAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAS9E;IAID,MAAM,CAAC,OAAO,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,aAAa,EAC5B,eAAe,GAAE,SAAS,cAAc,EAAO,GAChD,MAAM,CAsBR;CA+FJ"}
1
+ {"version":3,"file":"BudgetReadout.d.ts","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"AAGA,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;AAEjD,UAAU,cAAc;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CACjC;AAMD,MAAM,CAAC,OAAO,OAAO,aAAa;;IAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAS9E;IAID,MAAM,CAAC,OAAO,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,aAAa,EAC5B,eAAe,GAAE,SAAS,cAAc,EAAO,EAC/C,WAAW,SAAI,GAChB,MAAM,CAyBR;CAiFJ"}
@@ -1,9 +1,8 @@
1
1
  const TOKENS_ACTIVE_TOTAL_PLACEHOLDER = "{{tokensActiveTotal}}";
2
- const TOKEN_PERCENT_PLACEHOLDER = "{{tokenPercent}}";
3
2
  const MAX_WIDTH_PASSES = 64;
4
3
  const PRESSURE_FRACTION = 0.8;
5
4
  const LARGEST_LOG_ITEMS_MAX = 5;
6
- const PRESSURE_MANDATE = "YOU MUST FOLD, KILL, or trim superseded, stale, or irrelevant log content.";
5
+ const PRESSURE_MANDATE = "YOU MUST KILL superseded, stale, or irrelevant log items and ranges.";
7
6
  export default class BudgetReadout {
8
7
  static draft(ceiling, responseMax = null) {
9
8
  if (ceiling === null)
@@ -13,16 +12,19 @@ export default class BudgetReadout {
13
12
  // capacity fact like the ceiling — disclosed, never discovered by truncation.
14
13
  // {§provider-flexed-allowance} (#482): the disclosed number stays the
15
14
  // configured floor; wire-level overflow tolerance is never advertised.
16
- const responseLine = responseMax === null ? "" : `\ntokensResponseMax: ${responseMax}`;
17
- return `tokensActiveTotal: ${TOKENS_ACTIVE_TOTAL_PLACEHOLDER} (${TOKEN_PERCENT_PLACEHOLDER}%)\ntokensActiveMax: ${ceiling}${responseLine}`;
15
+ const responseField = responseMax === null ? "" : `,"tokensResponseMax":${responseMax}`;
16
+ return `{"tokensActiveTotal":${TOKENS_ACTIVE_TOTAL_PLACEHOLDER},"tokensActiveMax":${ceiling}${responseField}}`;
18
17
  }
19
- // {§tokenomics-render-weight-budget} — widths only expand, so final numeric
20
- // substitution cannot change the measured packet length or oscillate.
21
- static resolve(template, ceiling, measurePacket, largestLogItems = []) {
18
+ // {§tokenomics-render-weight-budget} — the width only expands, so the final
19
+ // numeric substitution cannot change the measured packet length or oscillate.
20
+ static resolve(template, ceiling, measurePacket, largestLogItems = [], calibration = 1) {
22
21
  BudgetReadout.#assertCeiling(ceiling);
23
22
  BudgetReadout.#assertTemplate(template);
24
- const neutral = BudgetReadout.#resolveTemplate(template, ceiling, measurePacket);
25
- if (neutral.usage / ceiling < PRESSURE_FRACTION || largestLogItems.length === 0) {
23
+ BudgetReadout.#assertCalibration(calibration);
24
+ // {§tokenomics-calibrated-readout} — pressure and the displayed figures judge the calibrated
25
+ // weight; the raw measure still guards the fixed-width substitution.
26
+ const neutral = BudgetReadout.#resolveTemplate(template, measurePacket, calibration);
27
+ if (neutral.calibrated / ceiling < PRESSURE_FRACTION || largestLogItems.length === 0) {
26
28
  return neutral.content;
27
29
  }
28
30
  // {§tokenomics-pressure-inventory} — take the largest useful prefix that
@@ -34,55 +36,45 @@ export default class BudgetReadout {
34
36
  : a.tokensActive > b.tokensActive ? -1 : 1)
35
37
  .slice(0, LARGEST_LOG_ITEMS_MAX);
36
38
  for (let count = ranked.length; count > 0; count -= 1) {
37
- const inventory = BudgetReadout.#renderPressureInventory(ranked.slice(0, count));
38
- const resolved = BudgetReadout.#resolveTemplate(`${template.replace(/\n+$/u, "")}\n\n${inventory}`, ceiling, measurePacket);
39
- if (neutral.usage > ceiling || resolved.usage <= ceiling)
39
+ const pressured = BudgetReadout.#withInventory(template, ranked.slice(0, count));
40
+ const resolved = BudgetReadout.#resolveTemplate(pressured, measurePacket, calibration);
41
+ if (neutral.calibrated > ceiling || resolved.calibrated <= ceiling)
40
42
  return resolved.content;
41
43
  }
42
44
  return neutral.content;
43
45
  }
44
- static #resolveTemplate(template, ceiling, measurePacket) {
45
- let widths = { activeTotal: 1, percent: 1 };
46
+ static #resolveTemplate(template, measurePacket, calibration) {
47
+ let width = 1;
46
48
  for (let pass = 0; pass < MAX_WIDTH_PASSES; pass += 1) {
47
- const probe = BudgetReadout.#render(template, widths, {
48
- activeTotal: "0".repeat(widths.activeTotal),
49
- percent: "0".repeat(widths.percent),
50
- });
49
+ const probe = BudgetReadout.#render(template, width, "0".repeat(width));
51
50
  const usage = BudgetReadout.#assertWeight(measurePacket(probe));
52
- const values = {
53
- activeTotal: String(usage),
54
- percent: BudgetReadout.#percent(usage, ceiling),
55
- };
56
- const expanded = {
57
- activeTotal: Math.max(widths.activeTotal, values.activeTotal.length),
58
- percent: Math.max(widths.percent, values.percent.length),
59
- };
60
- if (expanded.activeTotal !== widths.activeTotal
61
- || expanded.percent !== widths.percent) {
62
- widths = expanded;
51
+ const calibrated = Math.round(usage * calibration);
52
+ const value = String(calibrated);
53
+ const expanded = Math.max(width, value.length);
54
+ if (expanded !== width) {
55
+ width = expanded;
63
56
  continue;
64
57
  }
65
- const content = BudgetReadout.#render(template, widths, values);
58
+ const content = BudgetReadout.#render(template, width, value);
66
59
  const finalWeight = BudgetReadout.#assertWeight(measurePacket(content));
67
60
  if (finalWeight !== usage) {
68
61
  throw new Error(`Budget readout measurement changed after fixed-width substitution: ${usage} -> ${finalWeight}`);
69
62
  }
70
- return { content, usage };
63
+ return { content, usage, calibrated };
71
64
  }
72
- throw new Error(`Budget readout field widths did not converge after ${MAX_WIDTH_PASSES} passes`);
65
+ throw new Error(`Budget readout field width did not converge after ${MAX_WIDTH_PASSES} passes`);
73
66
  }
74
- static #render(template, widths, values) {
75
- return template
76
- .replace(TOKENS_ACTIVE_TOTAL_PLACEHOLDER, values.activeTotal.padStart(widths.activeTotal))
77
- .replace(TOKEN_PERCENT_PLACEHOLDER, values.percent.padStart(widths.percent));
67
+ static #render(template, width, value) {
68
+ return template.replace(TOKENS_ACTIVE_TOTAL_PLACEHOLDER, value.padStart(width));
78
69
  }
79
- static #percent(usage, ceiling) {
80
- const percent = (usage / ceiling) * 100;
81
- return usage > 0 && percent < 1 ? "<1" : String(Math.round(percent));
82
- }
83
- static #renderPressureInventory(items) {
84
- const rows = items.map(({ path, tokensBody, tokensActive }) => `* ${path} - ${JSON.stringify({ tokensBody, tokensActive })}`);
85
- return `${PRESSURE_MANDATE}\n\n### Largest Log Items:\n\n${rows.join("\n")}`;
70
+ // The inventory rides inside the same JSON object as a `tokensActiveLargest`
71
+ // field, so the block opens as one JSON payload; the recovery mandate follows it.
72
+ static #withInventory(template, items) {
73
+ const largest = items
74
+ .map(({ path, tokensBody, tokensActive }) => JSON.stringify({ path, tokensBody, tokensActive }))
75
+ .join(",");
76
+ const object = template.replace(/\}\s*$/u, () => `,"tokensActiveLargest":[${largest}]}`);
77
+ return `${object}\n\n${PRESSURE_MANDATE}`;
86
78
  }
87
79
  static #assertLargestLogItem(item) {
88
80
  if (!item.path.startsWith("log:///") || /[\r\n]/u.test(item.path)) {
@@ -100,6 +92,11 @@ export default class BudgetReadout {
100
92
  throw new TypeError("Budget readout ceiling must be a positive safe integer");
101
93
  }
102
94
  }
95
+ static #assertCalibration(calibration) {
96
+ if (!Number.isFinite(calibration) || calibration <= 0) {
97
+ throw new TypeError("Budget readout calibration must be a positive finite number");
98
+ }
99
+ }
103
100
  static #assertWeight(weight) {
104
101
  if (!Number.isSafeInteger(weight) || weight < 0) {
105
102
  throw new TypeError("Budget readout packet weight must be a non-negative safe integer");
@@ -107,10 +104,8 @@ export default class BudgetReadout {
107
104
  return weight;
108
105
  }
109
106
  static #assertTemplate(template) {
110
- for (const placeholder of [TOKENS_ACTIVE_TOTAL_PLACEHOLDER, TOKEN_PERCENT_PLACEHOLDER]) {
111
- if (template.split(placeholder).length !== 2) {
112
- throw new TypeError(`Budget readout template must contain ${placeholder} exactly once`);
113
- }
107
+ if (template.split(TOKENS_ACTIVE_TOTAL_PLACEHOLDER).length !== 2) {
108
+ throw new TypeError(`Budget readout template must contain ${TOKENS_ACTIVE_TOTAL_PLACEHOLDER} exactly once`);
114
109
  }
115
110
  }
116
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BudgetReadout.js","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BudgetReadout.js","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { type CapabilityDescriptor, type CapabilityPolicy, type CapabilityProjec
2
2
  import type { Db } from "./Db.ts";
3
3
  import type ExecutorRegistry from "./ExecutorRegistry.ts";
4
4
  import type SchemeRegistry from "./SchemeRegistry.ts";
5
- export type CapabilityScope = "service" | "workspace" | "worker-bound" | "worker" | "loop";
5
+ type CapabilityScope = "service" | "workspace" | "worker-bound" | "worker" | "loop";
6
6
  export interface CapabilityDenial {
7
7
  readonly descriptor: CapabilityDescriptor;
8
8
  readonly scope: CapabilityScope;
@@ -21,4 +21,5 @@ export default class CapabilityResolver {
21
21
  allowsRuntimeAcross(runtime: string, tool: string | null, workerId: number, policies: readonly CapabilityPolicy[]): boolean;
22
22
  static effective(policies: readonly CapabilityPolicy[]): CapabilityPolicy;
23
23
  }
24
+ export {};
24
25
  //# sourceMappingURL=CapabilityResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CapabilityResolver.d.ts","sourceRoot":"","sources":["../../src/core/CapabilityResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAKtD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3F,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,OAAO,kBAAkB;;IAKnC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,GAAG,SAAS,EAIzF;IAED,WAAW,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,oBAAoB,EAAE,CAqFzF;IAEK,MAAM,CACR,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQlC;IAEK,MAAM,CACR,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;IAEK,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAcrF;IAED,YAAY,CACR,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACtC,OAAO,CAGT;IAEK,aAAa,CACf,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAWlB;IAED,mBAAmB,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACtC,OAAO,CAQT;IAEK,aAAa,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAOlB;IAED,mBAAmB,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACtC,OAAO,CAET;IAiBD,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,gBAAgB,CAExE;CAOJ"}
1
+ {"version":3,"file":"CapabilityResolver.d.ts","sourceRoot":"","sources":["../../src/core/CapabilityResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAMtD,KAAK,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,OAAO,kBAAkB;;IAKnC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,GAAG,SAAS,EAIzF;IAED,WAAW,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,oBAAoB,EAAE,CAmFzF;IAEK,MAAM,CACR,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQlC;IAEK,MAAM,CACR,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;IAEK,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAcrF;IAED,YAAY,CACR,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACtC,OAAO,CAGT;IAEK,aAAa,CACf,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAWlB;IAED,mBAAmB,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACtC,OAAO,CAQT;IAEK,aAAa,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAOlB;IAED,mBAAmB,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACtC,OAAO,CAET;IAiBD,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,gBAAgB,CAExE;CAOJ"}