@plurnk/plurnk-service 1.0.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 (343) hide show
  1. package/.env.defaults +208 -0
  2. package/INSTALL.md +69 -0
  3. package/LICENSE +21 -0
  4. package/README.md +46 -0
  5. package/SPEC.md +1511 -0
  6. package/dist/Paths.d.ts +13 -0
  7. package/dist/Paths.d.ts.map +1 -0
  8. package/dist/Paths.js +60 -0
  9. package/dist/Paths.js.map +1 -0
  10. package/dist/content/edited-span.d.ts +2 -0
  11. package/dist/content/edited-span.d.ts.map +1 -0
  12. package/dist/content/edited-span.js +33 -0
  13. package/dist/content/edited-span.js.map +1 -0
  14. package/dist/content/index.d.ts +10 -0
  15. package/dist/content/index.d.ts.map +1 -0
  16. package/dist/content/index.js +11 -0
  17. package/dist/content/index.js.map +1 -0
  18. package/dist/content/line-marker.d.ts +15 -0
  19. package/dist/content/line-marker.d.ts.map +1 -0
  20. package/dist/content/line-marker.js +21 -0
  21. package/dist/content/line-marker.js.map +1 -0
  22. package/dist/content/matcher.d.ts +44 -0
  23. package/dist/content/matcher.d.ts.map +1 -0
  24. package/dist/content/matcher.js +126 -0
  25. package/dist/content/matcher.js.map +1 -0
  26. package/dist/content/mimetype-binary.d.ts +8 -0
  27. package/dist/content/mimetype-binary.d.ts.map +1 -0
  28. package/dist/content/mimetype-binary.js +17 -0
  29. package/dist/content/mimetype-binary.js.map +1 -0
  30. package/dist/content/path-mimetype.d.ts +5 -0
  31. package/dist/content/path-mimetype.d.ts.map +1 -0
  32. package/dist/content/path-mimetype.js +15 -0
  33. package/dist/content/path-mimetype.js.map +1 -0
  34. package/dist/content/read-resolve.d.ts +20 -0
  35. package/dist/content/read-resolve.d.ts.map +1 -0
  36. package/dist/content/read-resolve.js +68 -0
  37. package/dist/content/read-resolve.js.map +1 -0
  38. package/dist/core/ChannelWrite.d.ts +100 -0
  39. package/dist/core/ChannelWrite.d.ts.map +1 -0
  40. package/dist/core/ChannelWrite.js +112 -0
  41. package/dist/core/ChannelWrite.js.map +1 -0
  42. package/dist/core/ChannelWrite.sql +84 -0
  43. package/dist/core/Db.d.ts +14 -0
  44. package/dist/core/Db.d.ts.map +1 -0
  45. package/dist/core/Db.js +7 -0
  46. package/dist/core/Db.js.map +1 -0
  47. package/dist/core/Dispatcher.d.ts +67 -0
  48. package/dist/core/Dispatcher.d.ts.map +1 -0
  49. package/dist/core/Dispatcher.js +1021 -0
  50. package/dist/core/Dispatcher.js.map +1 -0
  51. package/dist/core/Engine.d.ts +113 -0
  52. package/dist/core/Engine.d.ts.map +1 -0
  53. package/dist/core/Engine.js +1410 -0
  54. package/dist/core/Engine.js.map +1 -0
  55. package/dist/core/Engine.sql +538 -0
  56. package/dist/core/EnvFlags.d.ts +13 -0
  57. package/dist/core/EnvFlags.d.ts.map +1 -0
  58. package/dist/core/EnvFlags.js +84 -0
  59. package/dist/core/EnvFlags.js.map +1 -0
  60. package/dist/core/ExecutorRegistry.d.ts +45 -0
  61. package/dist/core/ExecutorRegistry.d.ts.map +1 -0
  62. package/dist/core/ExecutorRegistry.js +128 -0
  63. package/dist/core/ExecutorRegistry.js.map +1 -0
  64. package/dist/core/PacketBuilder.d.ts +67 -0
  65. package/dist/core/PacketBuilder.d.ts.map +1 -0
  66. package/dist/core/PacketBuilder.js +524 -0
  67. package/dist/core/PacketBuilder.js.map +1 -0
  68. package/dist/core/PluginLoader.d.ts +17 -0
  69. package/dist/core/PluginLoader.d.ts.map +1 -0
  70. package/dist/core/PluginLoader.js +97 -0
  71. package/dist/core/PluginLoader.js.map +1 -0
  72. package/dist/core/ProposalLifecycle.d.ts +59 -0
  73. package/dist/core/ProposalLifecycle.d.ts.map +1 -0
  74. package/dist/core/ProposalLifecycle.js +215 -0
  75. package/dist/core/ProposalLifecycle.js.map +1 -0
  76. package/dist/core/ProviderInstantiate.d.ts +9 -0
  77. package/dist/core/ProviderInstantiate.d.ts.map +1 -0
  78. package/dist/core/ProviderInstantiate.js +156 -0
  79. package/dist/core/ProviderInstantiate.js.map +1 -0
  80. package/dist/core/SchemeRegistry.d.ts +26 -0
  81. package/dist/core/SchemeRegistry.d.ts.map +1 -0
  82. package/dist/core/SchemeRegistry.js +205 -0
  83. package/dist/core/SchemeRegistry.js.map +1 -0
  84. package/dist/core/StrikeRail.d.ts +28 -0
  85. package/dist/core/StrikeRail.d.ts.map +1 -0
  86. package/dist/core/StrikeRail.js +165 -0
  87. package/dist/core/StrikeRail.js.map +1 -0
  88. package/dist/core/TelemetryChannel.d.ts +37 -0
  89. package/dist/core/TelemetryChannel.d.ts.map +1 -0
  90. package/dist/core/TelemetryChannel.js +77 -0
  91. package/dist/core/TelemetryChannel.js.map +1 -0
  92. package/dist/core/TokenGauge.d.ts +16 -0
  93. package/dist/core/TokenGauge.d.ts.map +1 -0
  94. package/dist/core/TokenGauge.js +58 -0
  95. package/dist/core/TokenGauge.js.map +1 -0
  96. package/dist/core/caps/CapsResolve.d.ts +5 -0
  97. package/dist/core/caps/CapsResolve.d.ts.map +1 -0
  98. package/dist/core/caps/CapsResolve.js +13 -0
  99. package/dist/core/caps/CapsResolve.js.map +1 -0
  100. package/dist/core/caps/DbChannelCaps.d.ts +16 -0
  101. package/dist/core/caps/DbChannelCaps.d.ts.map +1 -0
  102. package/dist/core/caps/DbChannelCaps.js +41 -0
  103. package/dist/core/caps/DbChannelCaps.js.map +1 -0
  104. package/dist/core/caps/DbEntryCaps.d.ts +19 -0
  105. package/dist/core/caps/DbEntryCaps.d.ts.map +1 -0
  106. package/dist/core/caps/DbEntryCaps.js +28 -0
  107. package/dist/core/caps/DbEntryCaps.js.map +1 -0
  108. package/dist/core/caps/DbNotifyCaps.d.ts +8 -0
  109. package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -0
  110. package/dist/core/caps/DbNotifyCaps.js +35 -0
  111. package/dist/core/caps/DbNotifyCaps.js.map +1 -0
  112. package/dist/core/caps/DbSubscriptionCaps.d.ts +10 -0
  113. package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -0
  114. package/dist/core/caps/DbSubscriptionCaps.js +86 -0
  115. package/dist/core/caps/DbSubscriptionCaps.js.map +1 -0
  116. package/dist/core/caps/DbTagCaps.d.ts +17 -0
  117. package/dist/core/caps/DbTagCaps.d.ts.map +1 -0
  118. package/dist/core/caps/DbTagCaps.js +37 -0
  119. package/dist/core/caps/DbTagCaps.js.map +1 -0
  120. package/dist/core/caps/SchemeCtxImpl.d.ts +18 -0
  121. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -0
  122. package/dist/core/caps/SchemeCtxImpl.js +42 -0
  123. package/dist/core/caps/SchemeCtxImpl.js.map +1 -0
  124. package/dist/core/env-defaults.d.ts +19 -0
  125. package/dist/core/env-defaults.d.ts.map +1 -0
  126. package/dist/core/env-defaults.js +89 -0
  127. package/dist/core/env-defaults.js.map +1 -0
  128. package/dist/core/fork.d.ts +6 -0
  129. package/dist/core/fork.d.ts.map +1 -0
  130. package/dist/core/fork.js +84 -0
  131. package/dist/core/fork.js.map +1 -0
  132. package/dist/core/fork.sql +85 -0
  133. package/dist/core/git-membership.d.ts +23 -0
  134. package/dist/core/git-membership.d.ts.map +1 -0
  135. package/dist/core/git-membership.js +366 -0
  136. package/dist/core/git-membership.js.map +1 -0
  137. package/dist/core/git-state.d.ts +15 -0
  138. package/dist/core/git-state.d.ts.map +1 -0
  139. package/dist/core/git-state.js +67 -0
  140. package/dist/core/git-state.js.map +1 -0
  141. package/dist/core/packet-inject.d.ts +5 -0
  142. package/dist/core/packet-inject.d.ts.map +1 -0
  143. package/dist/core/packet-inject.js +48 -0
  144. package/dist/core/packet-inject.js.map +1 -0
  145. package/dist/core/packet-wire.d.ts +46 -0
  146. package/dist/core/packet-wire.d.ts.map +1 -0
  147. package/dist/core/packet-wire.js +453 -0
  148. package/dist/core/packet-wire.js.map +1 -0
  149. package/dist/core/path-decode.d.ts +2 -0
  150. package/dist/core/path-decode.d.ts.map +1 -0
  151. package/dist/core/path-decode.js +8 -0
  152. package/dist/core/path-decode.js.map +1 -0
  153. package/dist/core/plugin-attribution.d.ts +5 -0
  154. package/dist/core/plugin-attribution.d.ts.map +1 -0
  155. package/dist/core/plugin-attribution.js +39 -0
  156. package/dist/core/plugin-attribution.js.map +1 -0
  157. package/dist/core/plurnk-uri.d.ts +7 -0
  158. package/dist/core/plurnk-uri.d.ts.map +1 -0
  159. package/dist/core/plurnk-uri.js +52 -0
  160. package/dist/core/plurnk-uri.js.map +1 -0
  161. package/dist/core/resolveForLoop.d.ts +5 -0
  162. package/dist/core/resolveForLoop.d.ts.map +1 -0
  163. package/dist/core/resolveForLoop.js +12 -0
  164. package/dist/core/resolveForLoop.js.map +1 -0
  165. package/dist/core/results.d.ts +12 -0
  166. package/dist/core/results.d.ts.map +1 -0
  167. package/dist/core/results.js +27 -0
  168. package/dist/core/results.js.map +1 -0
  169. package/dist/core/run-cap.d.ts +8 -0
  170. package/dist/core/run-cap.d.ts.map +1 -0
  171. package/dist/core/run-cap.js +20 -0
  172. package/dist/core/run-cap.js.map +1 -0
  173. package/dist/core/run-ops.sql +43 -0
  174. package/dist/core/scheme-types.d.ts +45 -0
  175. package/dist/core/scheme-types.d.ts.map +1 -0
  176. package/dist/core/scheme-types.js +6 -0
  177. package/dist/core/scheme-types.js.map +1 -0
  178. package/dist/core/session-settings.d.ts +23 -0
  179. package/dist/core/session-settings.d.ts.map +1 -0
  180. package/dist/core/session-settings.js +55 -0
  181. package/dist/core/session-settings.js.map +1 -0
  182. package/dist/core/teaching.d.ts +3 -0
  183. package/dist/core/teaching.d.ts.map +1 -0
  184. package/dist/core/teaching.js +13 -0
  185. package/dist/core/teaching.js.map +1 -0
  186. package/dist/core/types.d.ts +3 -0
  187. package/dist/core/types.d.ts.map +1 -0
  188. package/dist/core/types.js +2 -0
  189. package/dist/core/types.js.map +1 -0
  190. package/dist/digest/Digest.d.ts +20 -0
  191. package/dist/digest/Digest.d.ts.map +1 -0
  192. package/dist/digest/Digest.js +451 -0
  193. package/dist/digest/Digest.js.map +1 -0
  194. package/dist/digest/Digest.sql +1 -0
  195. package/dist/digest/digest.sql +55 -0
  196. package/dist/index.d.ts +18 -0
  197. package/dist/index.d.ts.map +1 -0
  198. package/dist/index.js +28 -0
  199. package/dist/index.js.map +1 -0
  200. package/dist/schemes/EffectPolicy.d.ts +6 -0
  201. package/dist/schemes/EffectPolicy.d.ts.map +1 -0
  202. package/dist/schemes/EffectPolicy.js +18 -0
  203. package/dist/schemes/EffectPolicy.js.map +1 -0
  204. package/dist/schemes/Exec.d.ts +39 -0
  205. package/dist/schemes/Exec.d.ts.map +1 -0
  206. package/dist/schemes/Exec.js +510 -0
  207. package/dist/schemes/Exec.js.map +1 -0
  208. package/dist/schemes/ExecOutputScheme.d.ts +20 -0
  209. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -0
  210. package/dist/schemes/ExecOutputScheme.js +39 -0
  211. package/dist/schemes/ExecOutputScheme.js.map +1 -0
  212. package/dist/schemes/File.d.ts +42 -0
  213. package/dist/schemes/File.d.ts.map +1 -0
  214. package/dist/schemes/File.js +356 -0
  215. package/dist/schemes/File.js.map +1 -0
  216. package/dist/schemes/Known.d.ts +17 -0
  217. package/dist/schemes/Known.d.ts.map +1 -0
  218. package/dist/schemes/Known.js +40 -0
  219. package/dist/schemes/Known.js.map +1 -0
  220. package/dist/schemes/Log.d.ts +22 -0
  221. package/dist/schemes/Log.d.ts.map +1 -0
  222. package/dist/schemes/Log.js +269 -0
  223. package/dist/schemes/Log.js.map +1 -0
  224. package/dist/schemes/Log.sql +59 -0
  225. package/dist/schemes/Plurnk.d.ts +17 -0
  226. package/dist/schemes/Plurnk.d.ts.map +1 -0
  227. package/dist/schemes/Plurnk.js +46 -0
  228. package/dist/schemes/Plurnk.js.map +1 -0
  229. package/dist/schemes/Run.d.ts +25 -0
  230. package/dist/schemes/Run.d.ts.map +1 -0
  231. package/dist/schemes/Run.js +172 -0
  232. package/dist/schemes/Run.js.map +1 -0
  233. package/dist/schemes/Skill.d.ts +17 -0
  234. package/dist/schemes/Skill.d.ts.map +1 -0
  235. package/dist/schemes/Skill.js +40 -0
  236. package/dist/schemes/Skill.js.map +1 -0
  237. package/dist/schemes/Unknown.d.ts +17 -0
  238. package/dist/schemes/Unknown.d.ts.map +1 -0
  239. package/dist/schemes/Unknown.js +39 -0
  240. package/dist/schemes/Unknown.js.map +1 -0
  241. package/dist/schemes/_entry-chunk.d.ts +11 -0
  242. package/dist/schemes/_entry-chunk.d.ts.map +1 -0
  243. package/dist/schemes/_entry-chunk.js +100 -0
  244. package/dist/schemes/_entry-chunk.js.map +1 -0
  245. package/dist/schemes/_entry-crud.d.ts +31 -0
  246. package/dist/schemes/_entry-crud.d.ts.map +1 -0
  247. package/dist/schemes/_entry-crud.js +77 -0
  248. package/dist/schemes/_entry-crud.js.map +1 -0
  249. package/dist/schemes/_entry-crud.sql +101 -0
  250. package/dist/schemes/_entry-find.d.ts +32 -0
  251. package/dist/schemes/_entry-find.d.ts.map +1 -0
  252. package/dist/schemes/_entry-find.js +226 -0
  253. package/dist/schemes/_entry-find.js.map +1 -0
  254. package/dist/schemes/_entry-find.sql +54 -0
  255. package/dist/schemes/_entry-graph.d.ts +16 -0
  256. package/dist/schemes/_entry-graph.d.ts.map +1 -0
  257. package/dist/schemes/_entry-graph.js +94 -0
  258. package/dist/schemes/_entry-graph.js.map +1 -0
  259. package/dist/schemes/_entry-graph.sql +52 -0
  260. package/dist/schemes/_entry-manifest.d.ts +25 -0
  261. package/dist/schemes/_entry-manifest.d.ts.map +1 -0
  262. package/dist/schemes/_entry-manifest.js +266 -0
  263. package/dist/schemes/_entry-manifest.js.map +1 -0
  264. package/dist/schemes/_entry-ops.d.ts +32 -0
  265. package/dist/schemes/_entry-ops.d.ts.map +1 -0
  266. package/dist/schemes/_entry-ops.js +216 -0
  267. package/dist/schemes/_entry-ops.js.map +1 -0
  268. package/dist/schemes/_entry-ops.sql +31 -0
  269. package/dist/schemes/_entry-semantic.d.ts +38 -0
  270. package/dist/schemes/_entry-semantic.d.ts.map +1 -0
  271. package/dist/schemes/_entry-semantic.js +202 -0
  272. package/dist/schemes/_entry-semantic.js.map +1 -0
  273. package/dist/schemes/_entry-semantic.sql +95 -0
  274. package/dist/schemes/_entry-send.d.ts +11 -0
  275. package/dist/schemes/_entry-send.d.ts.map +1 -0
  276. package/dist/schemes/_entry-send.js +66 -0
  277. package/dist/schemes/_entry-send.js.map +1 -0
  278. package/dist/schemes/cosine.d.ts +4 -0
  279. package/dist/schemes/cosine.d.ts.map +1 -0
  280. package/dist/schemes/cosine.js +9 -0
  281. package/dist/schemes/cosine.js.map +1 -0
  282. package/dist/schemes/exec-abort.d.ts +15 -0
  283. package/dist/schemes/exec-abort.d.ts.map +1 -0
  284. package/dist/schemes/exec-abort.js +29 -0
  285. package/dist/schemes/exec-abort.js.map +1 -0
  286. package/dist/schemes/exec-env.d.ts +5 -0
  287. package/dist/schemes/exec-env.d.ts.map +1 -0
  288. package/dist/schemes/exec-env.js +34 -0
  289. package/dist/schemes/exec-env.js.map +1 -0
  290. package/dist/server/Daemon.d.ts +244 -0
  291. package/dist/server/Daemon.d.ts.map +1 -0
  292. package/dist/server/Daemon.js +1119 -0
  293. package/dist/server/Daemon.js.map +1 -0
  294. package/dist/server/client-input.d.ts +11 -0
  295. package/dist/server/client-input.d.ts.map +1 -0
  296. package/dist/server/client-input.js +145 -0
  297. package/dist/server/client-input.js.map +1 -0
  298. package/dist/server/clientTurn.d.ts +6 -0
  299. package/dist/server/clientTurn.d.ts.map +1 -0
  300. package/dist/server/clientTurn.js +23 -0
  301. package/dist/server/clientTurn.js.map +1 -0
  302. package/dist/server/clientTurn.sql +10 -0
  303. package/dist/server/dispatch-as-plurnk.d.ts +7 -0
  304. package/dist/server/dispatch-as-plurnk.d.ts.map +1 -0
  305. package/dist/server/dispatch-as-plurnk.js +23 -0
  306. package/dist/server/dispatch-as-plurnk.js.map +1 -0
  307. package/dist/server/drain.sql +124 -0
  308. package/dist/server/envelope.d.ts +53 -0
  309. package/dist/server/envelope.d.ts.map +1 -0
  310. package/dist/server/envelope.js +172 -0
  311. package/dist/server/envelope.js.map +1 -0
  312. package/dist/server/envelope.sql +76 -0
  313. package/dist/server/logEntry.d.ts +35 -0
  314. package/dist/server/logEntry.d.ts.map +1 -0
  315. package/dist/server/logEntry.js +49 -0
  316. package/dist/server/logEntry.js.map +1 -0
  317. package/dist/server/logEntry.sql +10 -0
  318. package/dist/server/loopDocs.d.ts +6 -0
  319. package/dist/server/loopDocs.d.ts.map +1 -0
  320. package/dist/server/loopDocs.js +22 -0
  321. package/dist/server/loopDocs.js.map +1 -0
  322. package/dist/server/noProposals.d.ts +6 -0
  323. package/dist/server/noProposals.d.ts.map +1 -0
  324. package/dist/server/noProposals.js +37 -0
  325. package/dist/server/noProposals.js.map +1 -0
  326. package/dist/server/seam-entry-read.sql +21 -0
  327. package/dist/server/seam-log-read.sql +21 -0
  328. package/dist/server/seam-loop.sql +9 -0
  329. package/dist/server/seam-proposal-list.sql +13 -0
  330. package/dist/server/version-info.d.ts +14 -0
  331. package/dist/server/version-info.d.ts.map +1 -0
  332. package/dist/server/version-info.js +69 -0
  333. package/dist/server/version-info.js.map +1 -0
  334. package/dist/server/yolo.d.ts +6 -0
  335. package/dist/server/yolo.d.ts.map +1 -0
  336. package/dist/server/yolo.js +64 -0
  337. package/dist/server/yolo.js.map +1 -0
  338. package/dist/service.d.ts +6 -0
  339. package/dist/service.d.ts.map +1 -0
  340. package/dist/service.js +309 -0
  341. package/dist/service.js.map +1 -0
  342. package/migrations/0000-00-00.01_schema.sql +500 -0
  343. package/package.json +86 -0
@@ -0,0 +1,451 @@
1
+ #!/usr/bin/env node
2
+ //
3
+ // Run-digest tool for plurnk-service DBs. Reads a sqlite plurnk*.db and
4
+ // emits per-run forensic artifacts to test/digest/. First-order forensic
5
+ // surface; read-only; safe to re-run.
6
+ //
7
+ // test/digest/digest.md Health triage rollup (clean/degenerate-win/failed loops) +
8
+ // run-shape header + waterfall (per-loop health verdict; per-turn:
9
+ // status, ⚠ errs=N, model emission summary, indented op list)
10
+ // test/digest/digest.json Same data, machine-queryable
11
+ // test/digest/reasoning.md Per-turn reasoning text (full)
12
+ // test/digest/packetNNN.system.md BYTE-FOR-BYTE the system message the LLM
13
+ // received on TURN N (0-based). Turn 0 is the
14
+ // plurnk doc-materialization / setup turn (no model
15
+ // packet — a one-line note); the model's turns are
16
+ // Turn 1, 2, … (packet001, packet002, …).
17
+ // test/digest/packetNNN.user.md Same for the user message.
18
+ // test/digest/packetNNN.assistant.md Model emission (content string).
19
+ // test/digest/packetNNN.assistantRaw.json Opaque provider response.
20
+ //
21
+ // packet files are byte-identical to what Engine emits, because Engine and
22
+ // digest both project through PacketWire (one renderer, no drift).
23
+ //
24
+ // SQL lives in the co-located digest.sql; opened the sqlrite way (SqlRiteSync,
25
+ // the sync CLI/script facade). Each PREP block is read through its own accessor.
26
+ import { DatabaseSync } from "node:sqlite";
27
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
28
+ import { dirname, join, resolve } from "node:path";
29
+ import { fileURLToPath } from "node:url";
30
+ import { homedir } from "node:os";
31
+ import SqlRiteSync from "@possumtech/sqlrite/sync";
32
+ import PacketWire from "../core/packet-wire.js";
33
+ import ProviderInstantiate from "../core/ProviderInstantiate.js";
34
+ // The requiem prompt (#requiem): the model's exit interview. Absolution up front — the system is
35
+ // under test, not the model — so RLHF'd self-blame doesn't crowd out the system indictment. The
36
+ // operator's wording, one absolution sentence added.
37
+ const REQUIEM_PROMPT = "This run was a test of the Plurnk System. The system is under test, not you — any faults you encountered are defects in the system's design or documentation, and cataloguing them is the task, never a criticism of your performance. Please numerically list all of the errors, issues, and ambiguities you encountered in the Plurnk System while attempting to perform your tasks.";
38
+ export default class Digest {
39
+ static #summarize(text, n = 80) {
40
+ if (text === null || text === undefined)
41
+ return "";
42
+ const flat = String(text).replace(/\s+/g, " ").trim();
43
+ if (flat.length <= n)
44
+ return flat;
45
+ return `${flat.slice(0, n)}…`;
46
+ }
47
+ static #parseJson(s, fallback = null) {
48
+ if (s === null || s === undefined)
49
+ return fallback;
50
+ try {
51
+ return JSON.parse(String(s));
52
+ }
53
+ catch {
54
+ return fallback;
55
+ }
56
+ }
57
+ static #renderOpLine(le) {
58
+ const target = le.scheme !== null && le.pathname !== null
59
+ ? `${le.scheme}://${le.pathname}`
60
+ : le.pathname ?? "—";
61
+ const state = le.state !== "resolved" ? ` state=${le.state}` : "";
62
+ const outcome = le.outcome !== null ? ` outcome=${le.outcome}` : "";
63
+ const fail = le.status_rx >= 400 ? " ✗" : "";
64
+ // For non-2xx outcomes, surface the error string (or body) from rx so
65
+ // the waterfall explains WHY each failure happened without opening packets.
66
+ let errLine = "";
67
+ if (le.status_rx >= 400) {
68
+ const rx = Digest.#parseJson(le.rx, {});
69
+ const msg = rx.error ?? rx.body ?? null;
70
+ if (typeof msg === "string" && msg.length > 0) {
71
+ errLine = `\n → ${Digest.#summarize(msg, 140)}`;
72
+ }
73
+ }
74
+ return ` ← ${le.op}[${le.status_rx}] ${target}${state}${outcome}${fail}${errLine}`;
75
+ }
76
+ // The "degenerate win" lens (owner ask): a loop's health = how many errors/strikes it earned
77
+ // vs whether it still concluded. A green that limped across on 16 errors is a FAILING artifact
78
+ // wearing a passing badge; the digest must make that impossible to miss. errors = ≥400 op rows;
79
+ // errorItems = minted op='error' rows (truncation/budget/steer/cycle — the strike signals).
80
+ static #loopHealth(loop, m) {
81
+ let errors = 0;
82
+ let errorItems = 0;
83
+ for (const t of m.turnsByLoop.get(loop.id) ?? []) {
84
+ for (const le of m.logEntriesByTurn.get(t.id) ?? []) {
85
+ if (le.status_rx >= 400)
86
+ errors += 1;
87
+ if (le.op === "error")
88
+ errorItems += 1;
89
+ }
90
+ }
91
+ const s = loop.status;
92
+ const verdict = s >= 400 ? `FAILED(${s})`
93
+ : s >= 200 && s < 300 ? (errors > 0 ? "DEGENERATE-WIN" : "CLEAN")
94
+ : `status=${s}`;
95
+ return { errors, errorItems, verdict };
96
+ }
97
+ static #renderTurnLine(turn, m) {
98
+ const packet = Digest.#parseJson(turn.packet, {});
99
+ const assistant = packet.assistant ?? {};
100
+ const content = typeof assistant.content === "string" ? assistant.content : "";
101
+ const reasoning = typeof assistant.reasoning === "string" ? assistant.reasoning : null;
102
+ const tokens = `prompt=${turn.usage_prompt} completion=${turn.usage_completion} cached=${turn.usage_cached}`;
103
+ const cost = turn.usage_cost_pico > 0 ? ` cost=$${(turn.usage_cost_pico / 1e12).toFixed(6)}` : "";
104
+ const finishReason = turn.finish_reason ?? "—";
105
+ const model = turn.model ?? "—";
106
+ const errs = (m.logEntriesByTurn.get(turn.id) ?? []).filter((le) => le.status_rx >= 400).length;
107
+ const errBadge = errs > 0 ? ` ⚠ errs=${errs}` : "";
108
+ const head = `T${turn.sequence}: status=${turn.status} finish=${finishReason} model=${model} ${tokens}${cost}${errBadge}`;
109
+ const summary = content.length > 0 ? ` ↳ emission: ${Digest.#summarize(content, 100)}` : ` ↳ emission: (empty)`;
110
+ const reasoningLine = reasoning && reasoning.length > 0
111
+ ? ` ↳ reasoning: ${Digest.#summarize(reasoning, 100)}`
112
+ : null;
113
+ const opLines = (m.logEntriesByTurn.get(turn.id) ?? []).map((le) => Digest.#renderOpLine(le));
114
+ return [head, summary, ...(reasoningLine ? [reasoningLine] : []), ...opLines].join("\n");
115
+ }
116
+ static #renderRunShape(run, m) {
117
+ // every run has exactly one rollup row — digest_run_rollups is FROM runs
118
+ const roll = m.runRollups.get(run.id);
119
+ const opMix = (m.opMixByRun.get(run.id) ?? []).map((o) => `${o.op}=${o.n}`).join(" ");
120
+ const costStr = roll.total_cost_pico > 0 ? `$${(roll.total_cost_pico / 1e12).toFixed(6)}` : "$0";
121
+ return [
122
+ `Loops: ${roll.loops}`,
123
+ `Turns: ${roll.turns}`,
124
+ `Last turn: ${roll.last_status !== null ? `status=${roll.last_status}` : "(none)"}`,
125
+ `Tokens: prompt=${roll.total_prompt} completion=${roll.total_completion} cached=${roll.total_cached}`,
126
+ `Cost: ${costStr} (DB rollup runs.cost_pico=${run.cost_pico})`,
127
+ `Op mix: ${opMix.length > 0 ? opMix : "(no ops)"}`,
128
+ ].join("\n");
129
+ }
130
+ static #renderWaterfall(m) {
131
+ const lines = [];
132
+ lines.push(`# plurnk-service digest`);
133
+ lines.push("");
134
+ lines.push(`DB: ${m.dbPath}`);
135
+ lines.push(`Sessions: ${m.sessions.length} Runs: ${m.runs.length} Loops: ${m.loops.length} Turns: ${m.turns.length} Log entries: ${m.logEntries.length}`);
136
+ lines.push(`Semantic: entries=${m.embeddings.entries} embedded=${m.embeddings.entries_embedded} chunks=${m.embeddings.chunk_rows} models=${m.embeddings.models} token-derivations=${m.embeddings.token_derivations}`);
137
+ // Triage rollup up top: how many conversations limped vs died vs ran clean, and the total
138
+ // error/strike load. The whole point of the "degenerate win" lens — see it before scrolling.
139
+ const health = m.loops.map((l) => Digest.#loopHealth(l, m));
140
+ const clean = health.filter((h) => h.verdict === "CLEAN").length;
141
+ const degen = health.filter((h) => h.verdict === "DEGENERATE-WIN").length;
142
+ const failed = health.filter((h) => h.verdict.startsWith("FAILED")).length;
143
+ const totalErrs = health.reduce((s, h) => s + h.errors, 0);
144
+ const totalItems = health.reduce((s, h) => s + h.errorItems, 0);
145
+ lines.push(`Health: ${clean} clean · ${degen > 0 ? `⚠ ${degen} degenerate-win` : "0 degenerate-win"} · ${failed} failed (${m.loops.length} loops; ${totalErrs} error rows, ${totalItems} minted error-items total)`);
146
+ for (const session of m.sessions) {
147
+ lines.push("");
148
+ lines.push(`## Session #${session.id} — ${session.name}`);
149
+ const sessionRuns = m.runsBySession.get(session.id) ?? [];
150
+ for (const run of sessionRuns) {
151
+ lines.push("");
152
+ lines.push(`### Run #${run.id} — ${run.name}`);
153
+ lines.push("");
154
+ lines.push("```");
155
+ lines.push(Digest.#renderRunShape(run, m));
156
+ lines.push("```");
157
+ const runLoops = m.loopsByRun.get(run.id) ?? [];
158
+ for (const loop of runLoops) {
159
+ lines.push("");
160
+ const h = Digest.#loopHealth(loop, m);
161
+ const badge = h.verdict === "CLEAN"
162
+ ? " — CLEAN"
163
+ : ` — ${h.verdict === "DEGENERATE-WIN" ? "⚠ DEGENERATE-WIN" : h.verdict} (${h.errors} errors, ${h.errorItems} error-items)`;
164
+ lines.push(`#### Loop ${loop.sequence} (id=${loop.id}, status=${loop.status})${badge}`);
165
+ lines.push("");
166
+ lines.push(`Prompt: ${Digest.#summarize(loop.prompt, 160)}`);
167
+ const flags = Digest.#parseJson(loop.flags, {});
168
+ const flagSummary = Object.entries(flags).filter(([, v]) => v).map(([k, v]) => `${k}=${v}`).join(" ");
169
+ if (flagSummary.length > 0)
170
+ lines.push(`Flags: ${flagSummary}`);
171
+ lines.push("");
172
+ lines.push("```");
173
+ for (const t of m.turnsByLoop.get(loop.id) ?? [])
174
+ lines.push(Digest.#renderTurnLine(t, m));
175
+ lines.push("```");
176
+ }
177
+ }
178
+ }
179
+ return lines.join("\n");
180
+ }
181
+ static #renderReasoning(m) {
182
+ const lines = [];
183
+ lines.push(`# plurnk-service reasoning`);
184
+ lines.push("");
185
+ lines.push("Per-turn reasoning_content extracted from turns.packet.assistant.reasoning.");
186
+ for (const t of m.turns) {
187
+ const loop = m.loopsById.get(t.loop_id);
188
+ const run = loop ? m.runsById.get(loop.run_id) : undefined;
189
+ const packet = Digest.#parseJson(t.packet, {});
190
+ const reasoning = packet.assistant?.reasoning ?? null;
191
+ lines.push("");
192
+ lines.push(`## Run ${run?.id ?? "?"} / Loop ${loop?.sequence ?? "?"} / Turn ${t.sequence} (id=${t.id})`);
193
+ lines.push("");
194
+ if (typeof reasoning === "string" && reasoning.length > 0)
195
+ lines.push(reasoning);
196
+ else
197
+ lines.push("(no reasoning_content)");
198
+ }
199
+ return lines.join("\n");
200
+ }
201
+ // Per-turn packet files, byte-identical to the wire (Engine and digest both
202
+ // project through PacketWire). system/user are markdown; assistantRaw is JSON.
203
+ static #writePacketFiles(m) {
204
+ const written = [];
205
+ // 0-based TURN index, NOT the DB id: Turn 0 is the plurnk doc-materialization
206
+ // (setup) turn; the model's turns are Turn 1, 2, …, so the model's first packet is
207
+ // packet001 — not packet002-by-id. id-sorted so the index is chronological.
208
+ m.turns.toSorted((a, b) => a.id - b.id).forEach((t, index) => {
209
+ const packet = Digest.#parseJson(t.packet, {});
210
+ const sections = (Array.isArray(packet.sections) ? packet.sections : []);
211
+ const padded = String(index).padStart(3, "0");
212
+ if (sections.length === 0) {
213
+ // No assembled packet — the setup turn dispatches its doc EDITs without one.
214
+ // Write ONE labeled note rather than four blank files, so opening Turn 0 reads
215
+ // as "setup," not "the packet is empty, where is it?".
216
+ const note = `# Turn ${index} — setup, no model packet\n\nThe plurnk doc-materialization run dispatched its ops (the scheme/exec docs) without assembling a model packet. The model's first packet is Turn 1 — packet001. See digest.md for this turn's ops.\n`;
217
+ writeFileSync(join(m.digestDir, `packet${padded}.system.md`), note);
218
+ written.push(`packet${padded}.system.md`);
219
+ return;
220
+ }
221
+ const systemMd = PacketWire.renderSlot(sections, "system");
222
+ const userMd = PacketWire.renderSlot(sections, "user");
223
+ const assistantText = typeof packet.assistant?.content === "string" ? packet.assistant.content : "";
224
+ const assistantRawJson = JSON.stringify(packet.assistantRaw ?? null, null, 2);
225
+ const files = [
226
+ [`packet${padded}.system.md`, systemMd],
227
+ [`packet${padded}.user.md`, userMd],
228
+ [`packet${padded}.assistant.md`, assistantText],
229
+ [`packet${padded}.assistantRaw.json`, assistantRawJson],
230
+ ];
231
+ for (const [file, body] of files) {
232
+ writeFileSync(join(m.digestDir, file), body);
233
+ written.push(file);
234
+ }
235
+ });
236
+ return written;
237
+ }
238
+ static #renderJson(m) {
239
+ return JSON.stringify({
240
+ dbPath: m.dbPath,
241
+ sessions: m.sessions.map((s) => ({ id: s.id, name: s.name, cost_pico: s.cost_pico })),
242
+ runs: m.runs.map((r) => ({ id: r.id, session_id: r.session_id, name: r.name, cost_pico: r.cost_pico })),
243
+ loops: m.loops.map((l) => ({
244
+ id: l.id, run_id: l.run_id, sequence: l.sequence, status: l.status,
245
+ prompt: l.prompt, flags: Digest.#parseJson(l.flags, {}),
246
+ })),
247
+ turns: m.turns.map((t) => ({
248
+ id: t.id, loop_id: t.loop_id, sequence: t.sequence, status: t.status,
249
+ usage_prompt: t.usage_prompt, usage_completion: t.usage_completion,
250
+ usage_cached: t.usage_cached, usage_cost_pico: t.usage_cost_pico,
251
+ finish_reason: t.finish_reason, model: t.model,
252
+ })),
253
+ log_entries: m.logEntries.map((le) => ({
254
+ id: le.id, turn_id: le.turn_id, sequence: le.sequence,
255
+ op: le.op, target: `${le.scheme ?? ""}://${le.pathname ?? ""}`,
256
+ status_rx: le.status_rx, state: le.state, outcome: le.outcome,
257
+ })),
258
+ }, null, 2);
259
+ }
260
+ // Default DB path — mirrors the service (`Service.#expandHome(PLURNK_SERVICE_DB_PATH)`; the
261
+ // `.env.defaults` floor is `~/.plurnk/plurnk.db`). The old repo-local default broke when
262
+ // the DB moved to `~/.plurnk`; a no-arg digest now reads the service's actual DB.
263
+ static defaultDbPath() {
264
+ const env = process.env.PLURNK_SERVICE_DB_PATH;
265
+ if (env !== undefined && env.length > 0) {
266
+ if (env === "~")
267
+ return homedir();
268
+ return env.startsWith("~/") ? resolve(homedir(), env.slice(2)) : env;
269
+ }
270
+ return resolve(homedir(), ".plurnk", "plurnk.db");
271
+ }
272
+ // The requiem (#requiem): the model's OWN exit interview, the one reader in the correct epistemic
273
+ // position (it has none of our context about what the packet is "supposed" to mean). Reconstructs
274
+ // each run's final packet from the stored sections (byte-identical to what the model saw), appends
275
+ // its last emission + the requiem prompt, and calls the provider UNCONSTRAINED (no grammar — free
276
+ // prose, or the leash would distort the testimony). One requiem per run (workers included).
277
+ // Fail-hard on no provider: testimony with no witness is an error, not a skip.
278
+ static async requiem(opts) {
279
+ const dbPath = resolve(opts.dbPath);
280
+ if (!existsSync(dbPath))
281
+ throw new Error(`digest: no DB at ${dbPath}`);
282
+ const digestDir = opts.digestDir ?? join(process.cwd(), "test", "digest");
283
+ mkdirSync(digestDir, { recursive: true });
284
+ const provider = await ProviderInstantiate.loadActiveProvider();
285
+ if (provider === null)
286
+ throw new Error("requiem: no active provider — set PLURNK_MODEL; a requiem needs a witness to testify");
287
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
288
+ const db = new SqlRiteSync({ path: dbPath, dir: [moduleDir] });
289
+ const runs = db.digest_runs.all();
290
+ const loopById = new Map(db.digest_loops.all().map((l) => [l.id, l]));
291
+ // Each run's turns that carry a MODEL packet (non-empty sections — setup/plurnk turns have none),
292
+ // ordered; the last is the run's final context. A run with no model packet (client/plurnk) is silent.
293
+ const byRun = new Map();
294
+ for (const t of db.digest_turns.all()) {
295
+ const loop = loopById.get(t.loop_id);
296
+ if (loop === undefined)
297
+ continue;
298
+ const packet = Digest.#parseJson(t.packet, {});
299
+ const sections = (Array.isArray(packet.sections) ? packet.sections : []);
300
+ if (sections.length === 0)
301
+ continue;
302
+ const arr = byRun.get(loop.run_id) ?? [];
303
+ arr.push({ loopSeq: loop.sequence, turnSeq: t.sequence, sections, assistant: typeof packet.assistant?.content === "string" ? packet.assistant.content : "" });
304
+ byRun.set(loop.run_id, arr);
305
+ }
306
+ const out = [
307
+ "# plurnk-service requiem",
308
+ "",
309
+ "The model's own exit interview: each run's FINAL packet + its last emission, then the requiem",
310
+ "prompt, answered UNCONSTRAINED (no grammar). The model is the only reader without our context",
311
+ "about what the packet is supposed to mean. Testimony, NOT a bug list — most items are the model",
312
+ "chafing at discipline it is meant to chafe at (§filter-model-audit-findings); the signal is the",
313
+ "recurring, specific complaint across many requiems. Triage adversarially.",
314
+ "",
315
+ ];
316
+ for (const run of runs) {
317
+ const entries = byRun.get(run.id);
318
+ if (entries === undefined || entries.length === 0)
319
+ continue;
320
+ entries.sort((a, b) => a.loopSeq - b.loopSeq || a.turnSeq - b.turnSeq);
321
+ const last = entries[entries.length - 1];
322
+ const messages = [
323
+ { role: "system", content: PacketWire.renderSlot(last.sections, "system") },
324
+ { role: "user", content: PacketWire.renderSlot(last.sections, "user") },
325
+ ...(last.assistant.length > 0 ? [{ role: "assistant", content: last.assistant }] : []),
326
+ { role: "user", content: REQUIEM_PROMPT },
327
+ ];
328
+ // Generous budget: a thinking model spends the reasoning channel BEFORE emitting content;
329
+ // 4096 total left content empty (finish=length) on ~40% of a real sweep, and 16384 still
330
+ // starved a heavy thinker (#373). One escalation retry doubles the room; a run whose
331
+ // testimony is STILL empty records the reasoning spend honestly instead of a bare shrug.
332
+ let resp = await provider.generate({ messages, runId: String(run.id), maxTokens: 16384, ...(opts.signal !== undefined ? { signal: opts.signal } : {}) });
333
+ if (resp.assistant.content.trim() === "" && resp.assistant.finishReason === "length") {
334
+ resp = await provider.generate({ messages, runId: String(run.id), maxTokens: 32768, ...(opts.signal !== undefined ? { signal: opts.signal } : {}) });
335
+ }
336
+ const testimony = resp.assistant.content.trim()
337
+ || `(no testimony — ${resp.assistant.usage.completion} tokens consumed entirely by reasoning, even after the 32768-token retry)`;
338
+ out.push(`## Run #${run.id} — ${run.name}`, "", `_(${resp.assistant.finishReason ?? "?"}, ${resp.assistant.usage.completion} tok)_`, "", testimony, "");
339
+ }
340
+ const path = join(digestDir, "requiem.md");
341
+ writeFileSync(path, out.join("\n"));
342
+ return { path, runs: byRun.size };
343
+ }
344
+ static run(opts) {
345
+ // digest.sql is packaged beside this module (src/digest → dist/digest via copy-sql),
346
+ // so SqlRiteSync resolves it from node_modules in a published install too (#303).
347
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
348
+ const dbPath = resolve(opts.dbPath);
349
+ if (!existsSync(dbPath))
350
+ throw new Error(`digest: no DB at ${dbPath}`);
351
+ // A consumer (plurnk-bench) passes an explicit per-trial digestDir; the CLI default is cwd/test/digest.
352
+ const digestDir = opts.digestDir ?? join(process.cwd(), "test", "digest");
353
+ // Opens without readOnly so WAL-mode DBs (the daemon's normal operating
354
+ // mode) inspect cleanly; this tool only reads. The DB is quiescent at
355
+ // digest time, so each PREP reads on its own — no cross-query snapshot.
356
+ const db = new SqlRiteSync({ path: dbPath, dir: [moduleDir] });
357
+ let sessions = db.digest_sessions.all();
358
+ let runs = db.digest_runs.all();
359
+ let loops = db.digest_loops.all();
360
+ let turns = db.digest_turns.all();
361
+ let logEntries = db.digest_log_entries.all();
362
+ let runRollupRows = db.digest_run_rollups.all();
363
+ let opMixRows = db.digest_run_op_mix.all();
364
+ // The semantic-state analytic (owner ask), feature-detected per table: a HISTORICAL
365
+ // specimen may predate token_counts/entry_embeddings — an old db is a fact to read,
366
+ // not a contract violation. Absent tables read as -1. node:sqlite directly (SqlRite's
367
+ // eager prepare would refuse the whole open over one missing optional table).
368
+ const probe = new DatabaseSync(dbPath, { readOnly: true });
369
+ const has = (t) => probe.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name=?").get(t) !== undefined;
370
+ const one = (q) => Number(probe.prepare(q).get().n);
371
+ const embeddings = {
372
+ entries: has("entries") ? one("SELECT count(*) n FROM entries") : -1,
373
+ entries_embedded: has("entry_embeddings") ? one("SELECT count(DISTINCT entry_id) n FROM entry_embeddings") : -1,
374
+ chunk_rows: has("entry_embeddings") ? one("SELECT count(*) n FROM entry_embeddings") : -1,
375
+ models: has("entry_embeddings") ? one("SELECT count(DISTINCT embedding_model) n FROM entry_embeddings") : -1,
376
+ token_derivations: has("token_counts") ? one("SELECT count(*) n FROM token_counts") : -1,
377
+ };
378
+ probe.close();
379
+ db.close();
380
+ // Optional run/session selector — narrow to one run or session; everything
381
+ // cascades from the kept runs (loops→turns→log entries→rollups), so a consumer
382
+ // (plurnk-bench) digests just the scope it cares about, not the whole DB. #264.
383
+ if (opts.runId !== undefined)
384
+ runs = runs.filter((r) => r.id === opts.runId);
385
+ if (opts.sessionId !== undefined)
386
+ runs = runs.filter((r) => r.session_id === opts.sessionId);
387
+ if (opts.runId !== undefined || opts.sessionId !== undefined) {
388
+ const keptRunIds = new Set(runs.map((r) => r.id));
389
+ const keptSessionIds = new Set(runs.map((r) => r.session_id));
390
+ sessions = sessions.filter((s) => keptSessionIds.has(s.id));
391
+ loops = loops.filter((l) => keptRunIds.has(l.run_id));
392
+ const keptLoopIds = new Set(loops.map((l) => l.id));
393
+ turns = turns.filter((t) => keptLoopIds.has(t.loop_id));
394
+ const keptTurnIds = new Set(turns.map((t) => t.id));
395
+ logEntries = logEntries.filter((le) => keptTurnIds.has(le.turn_id));
396
+ runRollupRows = runRollupRows.filter((r) => keptRunIds.has(r.run_id));
397
+ opMixRows = opMixRows.filter((o) => keptRunIds.has(o.run_id));
398
+ }
399
+ // Wipe-then-recreate the digest dir so each run is a clean snapshot —
400
+ // orphaned packet*.* files from a prior run don't linger.
401
+ rmSync(digestDir, { recursive: true, force: true });
402
+ mkdirSync(digestDir, { recursive: true });
403
+ const runsBySession = new Map();
404
+ for (const r of runs) {
405
+ const arr = runsBySession.get(r.session_id) ?? [];
406
+ arr.push(r);
407
+ runsBySession.set(r.session_id, arr);
408
+ }
409
+ const loopsByRun = new Map();
410
+ for (const l of loops) {
411
+ const arr = loopsByRun.get(l.run_id) ?? [];
412
+ arr.push(l);
413
+ loopsByRun.set(l.run_id, arr);
414
+ }
415
+ const turnsByLoop = new Map();
416
+ for (const t of turns) {
417
+ const arr = turnsByLoop.get(t.loop_id) ?? [];
418
+ arr.push(t);
419
+ turnsByLoop.set(t.loop_id, arr);
420
+ }
421
+ const logEntriesByTurn = new Map();
422
+ for (const le of logEntries) {
423
+ const arr = logEntriesByTurn.get(le.turn_id) ?? [];
424
+ arr.push(le);
425
+ logEntriesByTurn.set(le.turn_id, arr);
426
+ }
427
+ const loopsById = new Map(loops.map((l) => [l.id, l]));
428
+ const runsById = new Map(runs.map((r) => [r.id, r]));
429
+ const runRollups = new Map(runRollupRows.map((r) => [r.run_id, r]));
430
+ const opMixByRun = new Map();
431
+ for (const o of opMixRows) {
432
+ const arr = opMixByRun.get(o.run_id) ?? [];
433
+ arr.push(o);
434
+ opMixByRun.set(o.run_id, arr);
435
+ }
436
+ const m = {
437
+ dbPath, digestDir, sessions, runs, loops, turns, logEntries,
438
+ runsBySession, loopsByRun, turnsByLoop, logEntriesByTurn, loopsById, runsById,
439
+ runRollups, opMixByRun, embeddings,
440
+ };
441
+ writeFileSync(join(digestDir, "digest.md"), Digest.#renderWaterfall(m));
442
+ writeFileSync(join(digestDir, "digest.json"), Digest.#renderJson(m));
443
+ writeFileSync(join(digestDir, "reasoning.md"), Digest.#renderReasoning(m));
444
+ const packetFiles = Digest.#writePacketFiles(m);
445
+ const packetIds = [...new Set(packetFiles.map((f) => f.slice(0, f.indexOf("."))))];
446
+ console.log(`digest: wrote ${digestDir}/{digest.md,digest.json,reasoning.md} + ${packetFiles.length} packet section files (${packetIds.join(", ") || "none"})`);
447
+ console.log(` source: ${dbPath}`);
448
+ console.log(` sessions=${sessions.length} runs=${runs.length} loops=${loops.length} turns=${turns.length} log_entries=${logEntries.length}`);
449
+ }
450
+ }
451
+ //# sourceMappingURL=Digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Digest.js","sourceRoot":"","sources":["../../src/digest/Digest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,55 @@
1
+ -- Forensic read queries for bin/digest.ts. Opened via SqlRiteSync against an
2
+ -- existing plurnk*.db the daemon already migrated — NO `-- INIT:` blocks, these
3
+ -- compile against its schema and never alter it. The digest reads a quiescent
4
+ -- DB (a kept test .db or a post-session plurnk.db), so each PREP is its own read
5
+ -- — sqlrite 5 dropped the JS transaction composer and these never needed it.
6
+
7
+ -- PREP: digest_sessions
8
+ SELECT * FROM sessions ORDER BY id;
9
+
10
+ -- PREP: digest_runs
11
+ SELECT * FROM runs ORDER BY id;
12
+
13
+ -- PREP: digest_loops
14
+ SELECT id, run_id, sequence, status, prompt, flags
15
+ FROM loops ORDER BY run_id, sequence;
16
+
17
+ -- PREP: digest_turns
18
+ SELECT id, loop_id, sequence, status, packet,
19
+ usage_prompt, usage_completion, usage_cached, usage_cost_pico,
20
+ finish_reason, model, timestamp
21
+ FROM turns ORDER BY loop_id, sequence;
22
+
23
+ -- PREP: digest_log_entries
24
+ SELECT id, run_id, loop_id, turn_id, sequence, at, origin,
25
+ op, suffix, signal,
26
+ scheme, pathname,
27
+ tx, rx, status_rx, mimetype_rx,
28
+ state, outcome, attrs
29
+ FROM log_entries ORDER BY loop_id, turn_id, sequence;
30
+
31
+ -- PREP: digest_run_rollups
32
+ -- Per-run aggregates (token/cost SUMs, loop/turn COUNTs, last-turn status) —
33
+ -- the run-summary data-ops, computed in SQL rather than rolled up in JS.
34
+ SELECT
35
+ r.id AS run_id,
36
+ COUNT(DISTINCT l.id) AS loops,
37
+ COUNT(t.id) AS turns,
38
+ COALESCE(SUM(t.usage_prompt), 0) AS total_prompt,
39
+ COALESCE(SUM(t.usage_completion), 0) AS total_completion,
40
+ COALESCE(SUM(t.usage_cached), 0) AS total_cached,
41
+ COALESCE(SUM(t.usage_cost_pico), 0) AS total_cost_pico,
42
+ (SELECT t2.status FROM turns t2 JOIN loops l2 ON t2.loop_id = l2.id
43
+ WHERE l2.run_id = r.id ORDER BY l2.sequence DESC, t2.sequence DESC LIMIT 1) AS last_status
44
+ FROM runs r
45
+ LEFT JOIN loops l ON l.run_id = r.id
46
+ LEFT JOIN turns t ON t.loop_id = l.id
47
+ GROUP BY r.id
48
+ ORDER BY r.id;
49
+
50
+ -- PREP: digest_run_op_mix
51
+ -- Per-run op histogram (GROUP BY run, op), pre-sorted by frequency.
52
+ SELECT run_id, op, COUNT(*) AS n
53
+ FROM log_entries
54
+ GROUP BY run_id, op
55
+ ORDER BY run_id, n DESC, op;
@@ -0,0 +1,18 @@
1
+ export { default as Engine } from "./core/Engine.ts";
2
+ export { default as SchemeRegistry } from "./core/SchemeRegistry.ts";
3
+ export { Mimetypes } from "@plurnk/plurnk-mimetypes";
4
+ export { default as Daemon } from "./server/Daemon.ts";
5
+ export { default as Known } from "./schemes/Known.ts";
6
+ export { default as Unknown } from "./schemes/Unknown.ts";
7
+ export { default as Skill } from "./schemes/Skill.ts";
8
+ export { default as Log } from "./schemes/Log.ts";
9
+ export { default as Plurnk } from "./schemes/Plurnk.ts";
10
+ export { default as Exec } from "./schemes/Exec.ts";
11
+ export { default as File } from "./schemes/File.ts";
12
+ export { Mock } from "@plurnk/plurnk-providers";
13
+ export type { MockResponse, MockAssistant, ChatMessage } from "@plurnk/plurnk-providers";
14
+ export type { EditResult, ReadResult, OpenFoldResult, } from "./schemes/_entry-ops.ts";
15
+ export { default as Paths } from "./Paths.ts";
16
+ export { default as EnvFlags } from "./core/EnvFlags.ts";
17
+ export type { FlagDescriptor } from "./core/EnvFlags.ts";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEzF,YAAY,EACR,UAAU,EACV,UAAU,EACV,cAAc,GACjB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAK9C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ // Public library API for @plurnk/plurnk-service.
2
+ //
3
+ // Consumers (plurnk CLI/TUI, future web app, etc.) import from here.
4
+ // Internal modules and tests reach into src/ paths directly; this file
5
+ // is the contract for external use.
6
+ export { default as Engine } from "./core/Engine.js";
7
+ export { default as SchemeRegistry } from "./core/SchemeRegistry.js";
8
+ // Mimetype handling is owned by @plurnk/plurnk-mimetypes. Consumers needing
9
+ // the orchestrator import directly from there.
10
+ export { Mimetypes } from "@plurnk/plurnk-mimetypes";
11
+ export { default as Daemon } from "./server/Daemon.js";
12
+ export { default as Known } from "./schemes/Known.js";
13
+ export { default as Unknown } from "./schemes/Unknown.js";
14
+ export { default as Skill } from "./schemes/Skill.js";
15
+ export { default as Log } from "./schemes/Log.js";
16
+ export { default as Plurnk } from "./schemes/Plurnk.js";
17
+ export { default as Exec } from "./schemes/Exec.js";
18
+ export { default as File } from "./schemes/File.js";
19
+ export { Mock } from "@plurnk/plurnk-providers";
20
+ // Package-relative paths to non-code artifacts (migrations, the upstream
21
+ // grammar's plurnk.md, default requirements). Resolution lives in the
22
+ // Paths class so this entry stays a pure re-export barrel.
23
+ export { default as Paths } from "./Paths.js";
24
+ // CLI-flag derivation from .env.defaults (PLURNK_X → --x, the comment above
25
+ // becomes help text, flags top the cascade) — the shared lib both the service
26
+ // CLI and the client TUI consume, so a flag set stays single-sourced.
27
+ export { default as EnvFlags } from "./core/EnvFlags.js";
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,oCAAoC;AAEpC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACrE,4EAA4E;AAC5E,+CAA+C;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAShD,yEAAyE;AACzE,sEAAsE;AACtE,2DAA2D;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAE9C,4EAA4E;AAC5E,8EAA8E;AAC9E,sEAAsE;AACtE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Effect } from "@plurnk/plurnk-execs";
2
+ export type ExecPolicy = "propose" | "auto";
3
+ export default class EffectPolicy {
4
+ static decide(effect: Effect): ExecPolicy;
5
+ }
6
+ //# sourceMappingURL=EffectPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EffectPolicy.d.ts","sourceRoot":"","sources":["../../src/schemes/EffectPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAc5C,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAExC;CACJ"}