@plurnk/plurnk-service 0.7.0 → 0.8.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 (258) hide show
  1. package/SPEC.md +104 -74
  2. package/bin/plurnk-service.ts +132 -0
  3. package/dist/Paths.d.ts +8 -0
  4. package/dist/Paths.d.ts.map +1 -0
  5. package/dist/Paths.js +47 -0
  6. package/dist/Paths.js.map +1 -0
  7. package/dist/content/index.d.ts +9 -0
  8. package/dist/content/index.d.ts.map +1 -0
  9. package/dist/content/index.js +10 -0
  10. package/dist/content/index.js.map +1 -0
  11. package/dist/content/line-marker.d.ts +26 -0
  12. package/dist/content/line-marker.d.ts.map +1 -0
  13. package/dist/content/line-marker.js +323 -0
  14. package/dist/content/line-marker.js.map +1 -0
  15. package/dist/content/matcher.d.ts +15 -0
  16. package/dist/content/matcher.d.ts.map +1 -0
  17. package/dist/content/matcher.js +112 -0
  18. package/dist/content/matcher.js.map +1 -0
  19. package/dist/content/mimetype-binary.d.ts +9 -0
  20. package/dist/content/mimetype-binary.d.ts.map +1 -0
  21. package/dist/content/mimetype-binary.js +86 -0
  22. package/dist/content/mimetype-binary.js.map +1 -0
  23. package/dist/content/path-mimetype.d.ts +6 -0
  24. package/dist/content/path-mimetype.d.ts.map +1 -0
  25. package/dist/content/path-mimetype.js +49 -0
  26. package/dist/content/path-mimetype.js.map +1 -0
  27. package/dist/content/read-resolve.d.ts +20 -0
  28. package/dist/content/read-resolve.d.ts.map +1 -0
  29. package/dist/content/read-resolve.js +60 -0
  30. package/dist/content/read-resolve.js.map +1 -0
  31. package/dist/core/ChannelWrite.d.ts +33 -30
  32. package/dist/core/ChannelWrite.d.ts.map +1 -1
  33. package/dist/core/ChannelWrite.js +43 -41
  34. package/dist/core/ChannelWrite.js.map +1 -1
  35. package/dist/core/Engine.d.ts +14 -10
  36. package/dist/core/Engine.d.ts.map +1 -1
  37. package/dist/core/Engine.js +269 -94
  38. package/dist/core/Engine.js.map +1 -1
  39. package/dist/core/EnvFlags.d.ts +6 -3
  40. package/dist/core/EnvFlags.d.ts.map +1 -1
  41. package/dist/core/EnvFlags.js +62 -60
  42. package/dist/core/EnvFlags.js.map +1 -1
  43. package/dist/core/PluginLoader.d.ts +6 -3
  44. package/dist/core/PluginLoader.d.ts.map +1 -1
  45. package/dist/core/PluginLoader.js +77 -73
  46. package/dist/core/PluginLoader.js.map +1 -1
  47. package/dist/core/ProviderInstantiate.d.ts +4 -2
  48. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  49. package/dist/core/ProviderInstantiate.js +23 -22
  50. package/dist/core/ProviderInstantiate.js.map +1 -1
  51. package/dist/core/SchemeRegistry.d.ts +1 -1
  52. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  53. package/dist/core/SchemeRegistry.js +3 -3
  54. package/dist/core/SchemeRegistry.js.map +1 -1
  55. package/dist/core/git-membership.d.ts +8 -0
  56. package/dist/core/git-membership.d.ts.map +1 -0
  57. package/dist/core/git-membership.js +125 -0
  58. package/dist/core/git-membership.js.map +1 -0
  59. package/dist/core/packet-wire.d.ts +47 -6
  60. package/dist/core/packet-wire.d.ts.map +1 -1
  61. package/dist/core/packet-wire.js +376 -312
  62. package/dist/core/packet-wire.js.map +1 -1
  63. package/dist/core/resolveForLoop.d.ts +14 -0
  64. package/dist/core/resolveForLoop.d.ts.map +1 -0
  65. package/dist/core/resolveForLoop.js +34 -0
  66. package/dist/core/resolveForLoop.js.map +1 -0
  67. package/dist/core/results.d.ts +40 -0
  68. package/dist/core/results.d.ts.map +1 -0
  69. package/dist/core/results.js +52 -0
  70. package/dist/core/results.js.map +1 -0
  71. package/dist/core/scheme-types.d.ts +5 -4
  72. package/dist/core/scheme-types.d.ts.map +1 -1
  73. package/dist/core/scheme-types.js +4 -4
  74. package/dist/core/scheme-types.js.map +1 -1
  75. package/dist/core/types.d.ts +27 -0
  76. package/dist/core/types.d.ts.map +1 -0
  77. package/dist/core/types.js +17 -0
  78. package/dist/core/types.js.map +1 -0
  79. package/dist/index.d.ts +1 -6
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +4 -43
  82. package/dist/index.js.map +1 -1
  83. package/dist/schemes/Exec.d.ts +1 -0
  84. package/dist/schemes/Exec.d.ts.map +1 -1
  85. package/dist/schemes/Exec.js +37 -21
  86. package/dist/schemes/Exec.js.map +1 -1
  87. package/dist/schemes/File.d.ts +0 -1
  88. package/dist/schemes/File.d.ts.map +1 -1
  89. package/dist/schemes/File.js +32 -66
  90. package/dist/schemes/File.js.map +1 -1
  91. package/dist/schemes/Known.d.ts.map +1 -1
  92. package/dist/schemes/Known.js +13 -13
  93. package/dist/schemes/Known.js.map +1 -1
  94. package/dist/schemes/Log.d.ts.map +1 -1
  95. package/dist/schemes/Log.js +8 -52
  96. package/dist/schemes/Log.js.map +1 -1
  97. package/dist/schemes/Plurnk.d.ts.map +1 -1
  98. package/dist/schemes/Plurnk.js +13 -13
  99. package/dist/schemes/Plurnk.js.map +1 -1
  100. package/dist/schemes/Skill.d.ts.map +1 -1
  101. package/dist/schemes/Skill.js +13 -13
  102. package/dist/schemes/Skill.js.map +1 -1
  103. package/dist/schemes/Unknown.d.ts.map +1 -1
  104. package/dist/schemes/Unknown.js +13 -13
  105. package/dist/schemes/Unknown.js.map +1 -1
  106. package/dist/schemes/_entry-crud.d.ts +5 -3
  107. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  108. package/dist/schemes/_entry-crud.js +55 -50
  109. package/dist/schemes/_entry-crud.js.map +1 -1
  110. package/dist/schemes/_entry-find.d.ts +10 -3
  111. package/dist/schemes/_entry-find.d.ts.map +1 -1
  112. package/dist/schemes/_entry-find.js +99 -77
  113. package/dist/schemes/_entry-find.js.map +1 -1
  114. package/dist/schemes/_entry-manifest.d.ts +6 -0
  115. package/dist/schemes/_entry-manifest.d.ts.map +1 -0
  116. package/dist/schemes/_entry-manifest.js +45 -0
  117. package/dist/schemes/_entry-manifest.js.map +1 -0
  118. package/dist/schemes/_entry-ops.d.ts +7 -4
  119. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  120. package/dist/schemes/_entry-ops.js +198 -316
  121. package/dist/schemes/_entry-ops.js.map +1 -1
  122. package/dist/schemes/_entry-send.d.ts +4 -1
  123. package/dist/schemes/_entry-send.d.ts.map +1 -1
  124. package/dist/schemes/_entry-send.js +57 -55
  125. package/dist/schemes/_entry-send.js.map +1 -1
  126. package/dist/server/ClientConnection.js +3 -3
  127. package/dist/server/ClientConnection.js.map +1 -1
  128. package/dist/server/Daemon.d.ts +5 -5
  129. package/dist/server/Daemon.d.ts.map +1 -1
  130. package/dist/server/Daemon.js +221 -176
  131. package/dist/server/Daemon.js.map +1 -1
  132. package/dist/server/clientTurn.d.ts +4 -1
  133. package/dist/server/clientTurn.d.ts.map +1 -1
  134. package/dist/server/clientTurn.js +19 -17
  135. package/dist/server/clientTurn.js.map +1 -1
  136. package/dist/server/dsl.d.ts +19 -16
  137. package/dist/server/dsl.d.ts.map +1 -1
  138. package/dist/server/dsl.js +127 -105
  139. package/dist/server/dsl.js.map +1 -1
  140. package/dist/server/envelope.d.ts +22 -19
  141. package/dist/server/envelope.d.ts.map +1 -1
  142. package/dist/server/envelope.js +116 -102
  143. package/dist/server/envelope.js.map +1 -1
  144. package/dist/server/logEntry.d.ts +4 -1
  145. package/dist/server/logEntry.d.ts.map +1 -1
  146. package/dist/server/logEntry.js +41 -39
  147. package/dist/server/logEntry.js.map +1 -1
  148. package/dist/server/methods/_dispatchAsClient.d.ts +3 -1
  149. package/dist/server/methods/_dispatchAsClient.d.ts.map +1 -1
  150. package/dist/server/methods/_dispatchAsClient.js +31 -29
  151. package/dist/server/methods/_dispatchAsClient.js.map +1 -1
  152. package/dist/server/methods/discover.d.ts +3 -1
  153. package/dist/server/methods/discover.d.ts.map +1 -1
  154. package/dist/server/methods/discover.js +8 -6
  155. package/dist/server/methods/discover.js.map +1 -1
  156. package/dist/server/methods/entry_read.d.ts +4 -1
  157. package/dist/server/methods/entry_read.d.ts.map +1 -1
  158. package/dist/server/methods/entry_read.js +54 -52
  159. package/dist/server/methods/entry_read.js.map +1 -1
  160. package/dist/server/methods/log_read.d.ts +4 -1
  161. package/dist/server/methods/log_read.d.ts.map +1 -1
  162. package/dist/server/methods/log_read.js +38 -36
  163. package/dist/server/methods/log_read.js.map +1 -1
  164. package/dist/server/methods/loop_cancel.d.ts +3 -1
  165. package/dist/server/methods/loop_cancel.d.ts.map +1 -1
  166. package/dist/server/methods/loop_cancel.js +19 -17
  167. package/dist/server/methods/loop_cancel.js.map +1 -1
  168. package/dist/server/methods/loop_resolve.d.ts +3 -1
  169. package/dist/server/methods/loop_resolve.d.ts.map +1 -1
  170. package/dist/server/methods/loop_resolve.js +42 -40
  171. package/dist/server/methods/loop_resolve.js.map +1 -1
  172. package/dist/server/methods/loop_run.d.ts +3 -1
  173. package/dist/server/methods/loop_run.d.ts.map +1 -1
  174. package/dist/server/methods/loop_run.js +104 -102
  175. package/dist/server/methods/loop_run.js.map +1 -1
  176. package/dist/server/methods/op_copy.d.ts +3 -1
  177. package/dist/server/methods/op_copy.d.ts.map +1 -1
  178. package/dist/server/methods/op_copy.js +25 -23
  179. package/dist/server/methods/op_copy.js.map +1 -1
  180. package/dist/server/methods/op_dispatch.d.ts +3 -1
  181. package/dist/server/methods/op_dispatch.d.ts.map +1 -1
  182. package/dist/server/methods/op_dispatch.js +18 -16
  183. package/dist/server/methods/op_dispatch.js.map +1 -1
  184. package/dist/server/methods/op_edit.d.ts +3 -1
  185. package/dist/server/methods/op_edit.d.ts.map +1 -1
  186. package/dist/server/methods/op_edit.js +23 -21
  187. package/dist/server/methods/op_edit.js.map +1 -1
  188. package/dist/server/methods/op_exec.d.ts +3 -1
  189. package/dist/server/methods/op_exec.d.ts.map +1 -1
  190. package/dist/server/methods/op_exec.js +20 -18
  191. package/dist/server/methods/op_exec.js.map +1 -1
  192. package/dist/server/methods/op_find.d.ts +3 -1
  193. package/dist/server/methods/op_find.d.ts.map +1 -1
  194. package/dist/server/methods/op_find.js +23 -21
  195. package/dist/server/methods/op_find.js.map +1 -1
  196. package/dist/server/methods/op_hide.d.ts +3 -1
  197. package/dist/server/methods/op_hide.d.ts.map +1 -1
  198. package/dist/server/methods/op_hide.js +23 -21
  199. package/dist/server/methods/op_hide.js.map +1 -1
  200. package/dist/server/methods/op_move.d.ts +3 -1
  201. package/dist/server/methods/op_move.d.ts.map +1 -1
  202. package/dist/server/methods/op_move.js +23 -21
  203. package/dist/server/methods/op_move.js.map +1 -1
  204. package/dist/server/methods/op_parse.d.ts +3 -1
  205. package/dist/server/methods/op_parse.d.ts.map +1 -1
  206. package/dist/server/methods/op_parse.js +24 -22
  207. package/dist/server/methods/op_parse.js.map +1 -1
  208. package/dist/server/methods/op_read.d.ts +3 -1
  209. package/dist/server/methods/op_read.d.ts.map +1 -1
  210. package/dist/server/methods/op_read.js +23 -21
  211. package/dist/server/methods/op_read.js.map +1 -1
  212. package/dist/server/methods/op_send.d.ts +3 -1
  213. package/dist/server/methods/op_send.d.ts.map +1 -1
  214. package/dist/server/methods/op_send.js +22 -20
  215. package/dist/server/methods/op_send.js.map +1 -1
  216. package/dist/server/methods/op_show.d.ts +3 -1
  217. package/dist/server/methods/op_show.d.ts.map +1 -1
  218. package/dist/server/methods/op_show.js +23 -21
  219. package/dist/server/methods/op_show.js.map +1 -1
  220. package/dist/server/methods/ping.d.ts +3 -1
  221. package/dist/server/methods/ping.d.ts.map +1 -1
  222. package/dist/server/methods/ping.js +8 -6
  223. package/dist/server/methods/ping.js.map +1 -1
  224. package/dist/server/methods/providers_list.d.ts +3 -1
  225. package/dist/server/methods/providers_list.d.ts.map +1 -1
  226. package/dist/server/methods/providers_list.js +19 -17
  227. package/dist/server/methods/providers_list.js.map +1 -1
  228. package/dist/server/methods/session_attach.d.ts +3 -1
  229. package/dist/server/methods/session_attach.d.ts.map +1 -1
  230. package/dist/server/methods/session_attach.js +43 -41
  231. package/dist/server/methods/session_attach.js.map +1 -1
  232. package/dist/server/methods/session_create.d.ts +3 -1
  233. package/dist/server/methods/session_create.d.ts.map +1 -1
  234. package/dist/server/methods/session_create.js +51 -49
  235. package/dist/server/methods/session_create.js.map +1 -1
  236. package/dist/server/methods/session_list.d.ts +3 -1
  237. package/dist/server/methods/session_list.d.ts.map +1 -1
  238. package/dist/server/methods/session_list.js +9 -7
  239. package/dist/server/methods/session_list.js.map +1 -1
  240. package/dist/server/methods/session_runs.d.ts +3 -1
  241. package/dist/server/methods/session_runs.d.ts.map +1 -1
  242. package/dist/server/methods/session_runs.js +19 -17
  243. package/dist/server/methods/session_runs.js.map +1 -1
  244. package/dist/server/methods/session_set_persona.d.ts +3 -1
  245. package/dist/server/methods/session_set_persona.d.ts.map +1 -1
  246. package/dist/server/methods/session_set_persona.js +28 -26
  247. package/dist/server/methods/session_set_persona.js.map +1 -1
  248. package/dist/server/methods/session_set_root.d.ts +3 -1
  249. package/dist/server/methods/session_set_root.d.ts.map +1 -1
  250. package/dist/server/methods/session_set_root.js +31 -29
  251. package/dist/server/methods/session_set_root.js.map +1 -1
  252. package/dist/server/yolo.d.ts +3 -1
  253. package/dist/server/yolo.d.ts.map +1 -1
  254. package/dist/server/yolo.js +15 -13
  255. package/dist/server/yolo.js.map +1 -1
  256. package/package.json +74 -30
  257. package/bin/plurnk-service.js +0 -112
  258. /package/migrations/{001_schema.sql → 0000-00-00.01_schema.sql} +0 -0
@@ -0,0 +1,86 @@
1
+ // Mimetype classifiers used at op-handler boundaries.
2
+ //
3
+ // `isBinaryMimetype` — enforces 415 on binary entries for READ/EDIT/
4
+ // SHOW/HIDE (SPEC.md §16.9 — binary entries → 415).
5
+ //
6
+ // `isLineNavigableMimetype` — decides whether the render layer prefixes
7
+ // each line with `N:\t` on READ output. Line-oriented mimetypes (text,
8
+ // markdown, source code, line-aligned configs) get `N:\t`. Tree-oriented
9
+ // mimetypes (JSON, XML, HTML) don't — line numbers would conflict with
10
+ // the structural navigation those formats use (jsonpath, xpath).
11
+ //
12
+ // Local heuristic until @plurnk/plurnk-mimetypes exposes per-mimetype
13
+ // metadata via its public API (HandlerInfo flags exist at registry
14
+ // level; not queryable per-mimetype yet — see plurnk-mimetypes#3).
15
+ export default class MimetypeBinary {
16
+ static #TEXT_APPLICATION_MIMETYPES = new Set([
17
+ "application/json",
18
+ "application/yaml",
19
+ "application/toml",
20
+ "application/xml",
21
+ "application/javascript",
22
+ "application/typescript",
23
+ "application/sql",
24
+ ]);
25
+ // Mimetypes that are structurally tree-navigated rather than line-
26
+ // navigated. READ output of these doesn't get `N:\t` prefixes.
27
+ static #TREE_NAVIGABLE_MIMETYPES = new Set([
28
+ "application/json",
29
+ "application/xml",
30
+ "text/html",
31
+ ]);
32
+ // Text primitive for the agent contract: text/markdown is the default
33
+ // text mimetype anywhere plurnk-service auto-derives a text result.
34
+ // text/plain is reserved for explicit scheme-manifest declarations
35
+ // (exec subprocess streams) and client-set entries. Rationale: markdown
36
+ // is a strict superset of plain text — any plain text is valid markdown
37
+ // — so the agent gets markdown-aware processing capability for free,
38
+ // and never needs to decide "is this markdown enough to mark as
39
+ // markdown?"
40
+ //
41
+ // Use this at any consumer-side auto-derivation point (file scheme
42
+ // extension fallback, log rx wrap, etc.) to normalize text/plain → text/markdown.
43
+ static TEXT_PRIMITIVE_MIMETYPE = "text/markdown";
44
+ static isBinaryMimetype(mimetype) {
45
+ if (mimetype.length === 0)
46
+ return false;
47
+ const slash = mimetype.indexOf("/");
48
+ if (slash === -1)
49
+ return true;
50
+ const type = mimetype.slice(0, slash);
51
+ if (type === "text")
52
+ return false;
53
+ if (MimetypeBinary.#TEXT_APPLICATION_MIMETYPES.has(mimetype))
54
+ return false;
55
+ if (mimetype.endsWith("+json") || mimetype.endsWith("+xml") || mimetype.endsWith("+yaml"))
56
+ return false;
57
+ return true;
58
+ }
59
+ // JSON-family check — used by `<L>` dispatch to pick structural slicer
60
+ // (sliceJsonItems) over line slicer (sliceLines) for JSON sources.
61
+ // Matches application/json plus +json suffix variants per RFC 6839.
62
+ static isJsonMimetype(mimetype) {
63
+ return mimetype === "application/json" || mimetype.endsWith("+json");
64
+ }
65
+ static isLineNavigableMimetype(mimetype) {
66
+ if (mimetype.length === 0)
67
+ return false;
68
+ if (MimetypeBinary.isBinaryMimetype(mimetype))
69
+ return false;
70
+ if (MimetypeBinary.#TREE_NAVIGABLE_MIMETYPES.has(mimetype))
71
+ return false;
72
+ if (mimetype.endsWith("+json") || mimetype.endsWith("+xml"))
73
+ return false;
74
+ // Everything text-ish that isn't tree-shaped is line-navigable.
75
+ // text/plain, text/markdown, text/csv, text/javascript, text/typescript,
76
+ // application/yaml, application/toml, application/javascript, etc.
77
+ return true;
78
+ }
79
+ static normalizeAutoTextMimetype(mimetype) {
80
+ if (mimetype === null || mimetype === undefined || mimetype === "" || mimetype === "text/plain") {
81
+ return MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE;
82
+ }
83
+ return mimetype;
84
+ }
85
+ }
86
+ //# sourceMappingURL=mimetype-binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mimetype-binary.js","sourceRoot":"","sources":["../../src/content/mimetype-binary.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,qEAAqE;AACrE,oDAAoD;AACpD,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,yEAAyE;AACzE,uEAAuE;AACvE,iEAAiE;AACjE,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,mEAAmE;AAEnE,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,2BAA2B,GAAwB,IAAI,GAAG,CAAC;QAC9D,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,iBAAiB;QACjB,wBAAwB;QACxB,wBAAwB;QACxB,iBAAiB;KACpB,CAAC,CAAC;IAEH,mEAAmE;IACnE,+DAA+D;IAC/D,MAAM,CAAC,yBAAyB,GAAwB,IAAI,GAAG,CAAC;QAC5D,kBAAkB;QAClB,iBAAiB;QACjB,WAAW;KACd,CAAC,CAAC;IAEH,sEAAsE;IACtE,oEAAoE;IACpE,mEAAmE;IACnE,wEAAwE;IACxE,wEAAwE;IACxE,qEAAqE;IACrE,gEAAgE;IAChE,aAAa;IACb,EAAE;IACF,mEAAmE;IACnE,kFAAkF;IAClF,MAAM,CAAC,uBAAuB,GAAG,eAAe,CAAC;IAEjD,MAAM,CAAC,gBAAgB,CAAC,QAAgB;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,cAAc,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3E,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACxG,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,mEAAmE;IACnE,oEAAoE;IACpE,MAAM,CAAC,cAAc,CAAC,QAAgB;QAClC,OAAO,QAAQ,KAAK,kBAAkB,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,uBAAuB,CAAC,QAAgB;QAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5D,IAAI,cAAc,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QACzE,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,gEAAgE;QAChE,yEAAyE;QACzE,mEAAmE;QACnE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,yBAAyB,CAAC,QAAmC;QAChE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9F,OAAO,cAAc,CAAC,uBAAuB,CAAC;QAClD,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Mimetypes } from "@plurnk/plurnk-mimetypes";
2
+ export default class PathMimetype {
3
+ #private;
4
+ static resolveEntryMimetype(pathname: string, schemeDefault: string, mimetypes: Mimetypes | undefined): Promise<string>;
5
+ }
6
+ //# sourceMappingURL=path-mimetype.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-mimetype.d.ts","sourceRoot":"","sources":["../../src/content/path-mimetype.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,CAAC,OAAO,OAAO,YAAY;;WAiBhB,oBAAoB,CAC7B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,SAAS,GAAG,SAAS,GACjC,OAAO,CAAC,MAAM,CAAC;CAQrB"}
@@ -0,0 +1,49 @@
1
+ // Path-extension mimetype resolver for entry schemes per plurnk-grammar
2
+ // 0.14.0 §Paths: "Path suffix (`.json`, `.md`, `.txt`, etc.) declares
3
+ // mimetype; absent suffix defers to scheme default."
4
+ //
5
+ // Plurnk-service implements this uniformly across entry schemes: a
6
+ // pathname's extension drives the effective mimetype (via the sibling
7
+ // Mimetypes detect service), and the scheme manifest's channel default
8
+ // is the fallback when no extension is present.
9
+ //
10
+ // This makes structural ops (`<L>` item-index, matcher dialect dispatch)
11
+ // fire correctly without content-sniffing: a model writing JSON to
12
+ // `known://users.json` opts into JSON treatment via the `.json` suffix,
13
+ // while `known://notes` (no suffix) stays at Known's default of
14
+ // `text/markdown`.
15
+ //
16
+ // Consistent across:
17
+ // - known://users.json → application/json
18
+ // - known://notes.md → text/markdown
19
+ // - known://config.yaml → application/yaml
20
+ // - known://users → scheme default (text/markdown for Known)
21
+ import MimetypeBinary from "./mimetype-binary.js";
22
+ export default class PathMimetype {
23
+ // Extract the suffix (everything after the last dot in the last segment)
24
+ // from a pathname. Empty if no dot in the last segment.
25
+ static #extractExtension(pathname) {
26
+ const lastSlash = pathname.lastIndexOf("/");
27
+ const lastSegment = lastSlash === -1 ? pathname : pathname.slice(lastSlash + 1);
28
+ const lastDot = lastSegment.lastIndexOf(".");
29
+ if (lastDot <= 0)
30
+ return ""; // leading-dot files (".env") aren't an extension
31
+ return lastSegment.slice(lastDot); // includes the leading "."
32
+ }
33
+ // Resolve a pathname → effective mimetype.
34
+ // 1. If the pathname has an extension, query Mimetypes.detect({ ext })
35
+ // and use what comes back (normalized via the text-primitive rule —
36
+ // text/plain → text/markdown).
37
+ // 2. Otherwise (no extension or no Mimetypes service), fall back to
38
+ // `schemeDefault` (typically the scheme manifest's channel default).
39
+ static async resolveEntryMimetype(pathname, schemeDefault, mimetypes) {
40
+ const ext = PathMimetype.#extractExtension(pathname);
41
+ if (ext.length > 0 && mimetypes !== undefined) {
42
+ const detected = await mimetypes.detect({ ext });
43
+ if (detected !== null)
44
+ return MimetypeBinary.normalizeAutoTextMimetype(detected);
45
+ }
46
+ return schemeDefault;
47
+ }
48
+ }
49
+ //# sourceMappingURL=path-mimetype.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-mimetype.js","sourceRoot":"","sources":["../../src/content/path-mimetype.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,sEAAsE;AACtE,qDAAqD;AACrD,EAAE;AACF,mEAAmE;AACnE,sEAAsE;AACtE,uEAAuE;AACvE,gDAAgD;AAChD,EAAE;AACF,yEAAyE;AACzE,mEAAmE;AACnE,wEAAwE;AACxE,gEAAgE;AAChE,mBAAmB;AACnB,EAAE;AACF,qBAAqB;AACrB,gDAAgD;AAChD,6CAA6C;AAC7C,gDAAgD;AAChD,wEAAwE;AAGxE,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,yEAAyE;IACzE,wDAAwD;IACxD,MAAM,CAAC,iBAAiB,CAAC,QAAgB;QACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC,CAAE,iDAAiD;QAC/E,OAAO,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,2BAA2B;IACnE,CAAC;IAED,2CAA2C;IAC3C,uEAAuE;IACvE,uEAAuE;IACvE,kCAAkC;IAClC,oEAAoE;IACpE,wEAAwE;IACxE,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAC7B,QAAgB,EAChB,aAAqB,EACrB,SAAgC;QAEhC,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,cAAc,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ"}
@@ -0,0 +1,20 @@
1
+ import type { LineMarker, MatcherBody } from "@plurnk/plurnk-grammar";
2
+ import type { Mimetypes } from "@plurnk/plurnk-mimetypes";
3
+ export interface ReadSliceResult {
4
+ status: number;
5
+ content: string | null;
6
+ mimetype: string;
7
+ startLine?: number | null;
8
+ matches?: number;
9
+ reason?: string;
10
+ }
11
+ export default class ReadResolve {
12
+ static resolve(opts: {
13
+ content: string;
14
+ mimetype: string;
15
+ lineMarker: LineMarker | null;
16
+ body: MatcherBody | null;
17
+ mimetypes: Mimetypes | undefined;
18
+ }): Promise<ReadSliceResult>;
19
+ }
20
+ //# sourceMappingURL=read-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-resolve.d.ts","sourceRoot":"","sources":["../../src/content/read-resolve.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAK1D,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;WACf,OAAO,CAAC,IAAI,EAAE;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;QAC9B,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;QACzB,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;KACpC,GAAG,OAAO,CAAC,eAAe,CAAC;CA2C/B"}
@@ -0,0 +1,60 @@
1
+ // Shared READ slice→match resolution for entry-bearing schemes (Known/Skill/
2
+ // Unknown/Exec/Plurnk via `_entry-ops`), plus `Log` and `File`. `<L>` scopes,
3
+ // the body matches within the scope: slice-then-match (plurnk.md slot order
4
+ // `<L>?:body?`). `<L>` dispatches on source mimetype — JSON → item index
5
+ // (sliceJsonItems), line-navigable → line index (sliceLines). Callers bind their
6
+ // own (content, mimetype) and wrap the result (e.g. `_entry-ops` adds `channel`).
7
+ import LineMarkerOps from "./line-marker.js";
8
+ import Matcher from "./matcher.js";
9
+ import MimetypeBinary from "./mimetype-binary.js";
10
+ export default class ReadResolve {
11
+ static async resolve(opts) {
12
+ const { content, mimetype, lineMarker, body, mimetypes } = opts;
13
+ let workingContent = content;
14
+ let workingStart = 1;
15
+ let workingMimetypeForSlice = MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE;
16
+ if (lineMarker !== null) {
17
+ if (MimetypeBinary.isJsonMimetype(mimetype)) {
18
+ const sliced = LineMarkerOps.sliceJsonItems(content, lineMarker);
19
+ if (sliced.status !== 200)
20
+ return { status: sliced.status, content: null, mimetype };
21
+ workingContent = sliced.body ?? "[]";
22
+ workingStart = null;
23
+ workingMimetypeForSlice = "application/json";
24
+ }
25
+ else {
26
+ const sliced = LineMarkerOps.sliceLines(content, lineMarker);
27
+ if (sliced.status !== 200)
28
+ return { status: sliced.status, content: null, mimetype };
29
+ workingContent = sliced.text ?? "";
30
+ workingStart = sliced.startLine ?? null;
31
+ }
32
+ }
33
+ if (body !== null) {
34
+ if (mimetypes === undefined)
35
+ return { status: 500, content: null, mimetype };
36
+ const matched = await Matcher.matchAgainstContent(body, workingContent, mimetype, mimetypes, workingStart ?? 1);
37
+ if (matched.status === 204)
38
+ return { status: 204, content: "", mimetype: "text/markdown", startLine: null, matches: 0 };
39
+ if (matched.status === 203) {
40
+ // Dialect-parse-failure fallback: raw source as text/markdown; reason surfaces why.
41
+ return { status: 203, content: matched.body ?? "", mimetype: matched.mimetype ?? "text/markdown", startLine: 1, reason: matched.reason };
42
+ }
43
+ if (matched.status !== 200)
44
+ return { status: matched.status, content: null, mimetype };
45
+ return { status: 200, content: matched.body ?? "", mimetype: "text/markdown", startLine: null, matches: matched.matches };
46
+ }
47
+ if (lineMarker !== null) {
48
+ // `<L>` slice mimetype follows the source family: line-navigable → text/markdown,
49
+ // JSON → application/json (structure preserved for compose). Empty / `[]` → 204.
50
+ const isEmptyJsonArray = workingMimetypeForSlice === "application/json" && workingContent === "[]";
51
+ if (workingContent === "" || isEmptyJsonArray)
52
+ return { status: 204, content: "", mimetype: workingMimetypeForSlice, startLine: null };
53
+ return { status: 200, content: workingContent, mimetype: workingMimetypeForSlice, startLine: workingStart };
54
+ }
55
+ if (content === "")
56
+ return { status: 204, content: "", mimetype, startLine: null };
57
+ return { status: 200, content, mimetype, startLine: 1 };
58
+ }
59
+ }
60
+ //# sourceMappingURL=read-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-resolve.js","sourceRoot":"","sources":["../../src/content/read-resolve.ts"],"names":[],"mappings":"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"}
@@ -22,34 +22,37 @@ export interface TelemetryEventPayload {
22
22
  event: object;
23
23
  }
24
24
  export type TelemetryEventNotify = (sessionId: number, payload: TelemetryEventPayload) => void;
25
- export declare const appendToChannel: (db: Db, { entryId, channel, chunk, notify }: {
26
- entryId: number;
27
- channel: string;
28
- chunk: string;
29
- notify?: StreamEventNotify;
30
- }) => Promise<void>;
31
- export declare const setChannelState: (db: Db, { entryId, channel, state, notify }: {
32
- entryId: number;
33
- channel: string;
34
- state: ChannelState;
35
- notify?: StreamEventNotify;
36
- }) => Promise<void>;
37
- export declare const openSubscription: (db: Db, { runId, entryId, scheme, handle }: {
38
- runId: number;
39
- entryId: number;
40
- scheme: string;
41
- handle: string;
42
- }) => Promise<number>;
43
- export declare const closeSubscription: (db: Db, { subscriptionId, status }: {
44
- subscriptionId: number;
45
- status: number;
46
- }) => Promise<void>;
47
- export declare const findActiveSubscription: (db: Db, { runId, entryId }: {
48
- runId: number;
49
- entryId: number;
50
- }) => Promise<{
51
- id: number;
52
- scheme: string;
53
- handle: string;
54
- } | null>;
25
+ export default class ChannelWrite {
26
+ #private;
27
+ static appendToChannel(db: Db, { entryId, channel, chunk, notify }: {
28
+ entryId: number;
29
+ channel: string;
30
+ chunk: string;
31
+ notify?: StreamEventNotify;
32
+ }): Promise<void>;
33
+ static setChannelState(db: Db, { entryId, channel, state, notify }: {
34
+ entryId: number;
35
+ channel: string;
36
+ state: ChannelState;
37
+ notify?: StreamEventNotify;
38
+ }): Promise<void>;
39
+ static openSubscription(db: Db, { runId, entryId, scheme, handle }: {
40
+ runId: number;
41
+ entryId: number;
42
+ scheme: string;
43
+ handle: string;
44
+ }): Promise<number>;
45
+ static closeSubscription(db: Db, { subscriptionId, status }: {
46
+ subscriptionId: number;
47
+ status: number;
48
+ }): Promise<void>;
49
+ static findActiveSubscription(db: Db, { runId, entryId }: {
50
+ runId: number;
51
+ entryId: number;
52
+ }): Promise<{
53
+ id: number;
54
+ scheme: string;
55
+ handle: string;
56
+ } | null>;
57
+ }
55
58
  //# sourceMappingURL=ChannelWrite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelWrite.d.ts","sourceRoot":"","sources":["../../src/core/ChannelWrite.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAQvF,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAQ9D,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAe/F,eAAO,MAAM,eAAe,GACxB,IAAI,EAAE,EACN,qCAAqC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAAE,KACrH,OAAO,CAAC,IAAI,CAOd,CAAC;AAEF,eAAO,MAAM,eAAe,GACxB,IAAI,EAAE,EACN,qCAAqC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAAE,KAC3H,OAAO,CAAC,IAAI,CAOd,CAAC;AAEF,eAAO,MAAM,gBAAgB,GACzB,IAAI,EAAE,EACN,oCAAoC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACvG,OAAO,CAAC,MAAM,CAIhB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC1B,IAAI,EAAE,EACN,4BAA4B;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACvE,OAAO,CAAC,IAAI,CAEd,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAC/B,IAAI,EAAE,EACN,oBAAoB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KACvD,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG/D,CAAC"}
1
+ {"version":3,"file":"ChannelWrite.d.ts","sourceRoot":"","sources":["../../src/core/ChannelWrite.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAQvF,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAQ9D,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAQ/F,MAAM,CAAC,OAAO,OAAO,YAAY;;WAQhB,eAAe,CACxB,EAAE,EAAE,EAAE,EACN,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,iBAAiB,CAAA;KAAE,GACrH,OAAO,CAAC,IAAI,CAAC;WASH,eAAe,CACxB,EAAE,EAAE,EAAE,EACN,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,iBAAiB,CAAA;KAAE,GAC3H,OAAO,CAAC,IAAI,CAAC;WASH,gBAAgB,CACzB,EAAE,EAAE,EAAE,EACN,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACvG,OAAO,CAAC,MAAM,CAAC;WAML,iBAAiB,CAC1B,EAAE,EAAE,EAAE,EACN,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACvE,OAAO,CAAC,IAAI,CAAC;WAIH,sBAAsB,CAC/B,EAAE,EAAE,EAAE,EACN,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAIpE"}
@@ -5,45 +5,47 @@
5
5
  // Helpers update entry_channels (content / state) and subscriptions, and emit
6
6
  // stream/event notifications scoped to the entry's session via an optional
7
7
  // callback the daemon wires in.
8
- const channelMeta = (db) => db.channel_meta;
9
- const appendStmt = (db) => db.append_to_channel;
10
- const stateStmt = (db) => db.set_channel_state;
11
- const openSubStmt = (db) => db.open_subscription;
12
- const closeSubStmt = (db) => db.close_subscription;
13
- const findActiveStmt = (db) => db.find_active_subscription;
14
- export const appendToChannel = async (db, { entryId, channel, chunk, notify }) => {
15
- const result = await appendStmt(db).run({ chunk, entry_id: entryId, channel });
16
- if (result.changes === 0)
17
- return;
18
- if (notify === undefined)
19
- return;
20
- const meta = await channelMeta(db).get({ entry_id: entryId, channel });
21
- if (meta === undefined)
22
- return;
23
- notify(meta.session_id, { entryId, channel, state: meta.state, contentLength: meta.contentLength });
24
- };
25
- export const setChannelState = async (db, { entryId, channel, state, notify }) => {
26
- const result = await stateStmt(db).run({ state, entry_id: entryId, channel });
27
- if (result.changes === 0)
28
- return;
29
- if (notify === undefined)
30
- return;
31
- const meta = await channelMeta(db).get({ entry_id: entryId, channel });
32
- if (meta === undefined)
33
- return;
34
- notify(meta.session_id, { entryId, channel, state: meta.state, contentLength: meta.contentLength });
35
- };
36
- export const openSubscription = async (db, { runId, entryId, scheme, handle }) => {
37
- const row = await openSubStmt(db).get({ run_id: runId, entry_id: entryId, scheme, handle });
38
- if (row === undefined)
39
- throw new Error("openSubscription: INSERT ... RETURNING produced no row");
40
- return row.id;
41
- };
42
- export const closeSubscription = async (db, { subscriptionId, status }) => {
43
- await closeSubStmt(db).run({ status, subscription_id: subscriptionId });
44
- };
45
- export const findActiveSubscription = async (db, { runId, entryId }) => {
46
- const row = await findActiveStmt(db).get({ run_id: runId, entry_id: entryId });
47
- return row ?? null;
48
- };
8
+ export default class ChannelWrite {
9
+ static #channelMeta(db) { return db.channel_meta; }
10
+ static #appendStmt(db) { return db.append_to_channel; }
11
+ static #stateStmt(db) { return db.set_channel_state; }
12
+ static #openSubStmt(db) { return db.open_subscription; }
13
+ static #closeSubStmt(db) { return db.close_subscription; }
14
+ static #findActiveStmt(db) { return db.find_active_subscription; }
15
+ static async appendToChannel(db, { entryId, channel, chunk, notify }) {
16
+ const result = await ChannelWrite.#appendStmt(db).run({ chunk, entry_id: entryId, channel });
17
+ if (result.changes === 0)
18
+ return;
19
+ if (notify === undefined)
20
+ return;
21
+ const meta = await ChannelWrite.#channelMeta(db).get({ entry_id: entryId, channel });
22
+ if (meta === undefined)
23
+ return;
24
+ notify(meta.session_id, { entryId, channel, state: meta.state, contentLength: meta.contentLength });
25
+ }
26
+ static async setChannelState(db, { entryId, channel, state, notify }) {
27
+ const result = await ChannelWrite.#stateStmt(db).run({ state, entry_id: entryId, channel });
28
+ if (result.changes === 0)
29
+ return;
30
+ if (notify === undefined)
31
+ return;
32
+ const meta = await ChannelWrite.#channelMeta(db).get({ entry_id: entryId, channel });
33
+ if (meta === undefined)
34
+ return;
35
+ notify(meta.session_id, { entryId, channel, state: meta.state, contentLength: meta.contentLength });
36
+ }
37
+ static async openSubscription(db, { runId, entryId, scheme, handle }) {
38
+ const row = await ChannelWrite.#openSubStmt(db).get({ run_id: runId, entry_id: entryId, scheme, handle });
39
+ if (row === undefined)
40
+ throw new Error("openSubscription: INSERT ... RETURNING produced no row");
41
+ return row.id;
42
+ }
43
+ static async closeSubscription(db, { subscriptionId, status }) {
44
+ await ChannelWrite.#closeSubStmt(db).run({ status, subscription_id: subscriptionId });
45
+ }
46
+ static async findActiveSubscription(db, { runId, entryId }) {
47
+ const row = await ChannelWrite.#findActiveStmt(db).get({ run_id: runId, entry_id: entryId });
48
+ return row ?? null;
49
+ }
50
+ }
49
51
  //# sourceMappingURL=ChannelWrite.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelWrite.js","sourceRoot":"","sources":["../../src/core/ChannelWrite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChannelWrite.js","sourceRoot":"","sources":["../../src/core/ChannelWrite.ts"],"names":[],"mappings":"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"}
@@ -46,23 +46,25 @@ export interface ProposalPendingEvent {
46
46
  attrs: object;
47
47
  flags: LoopFlags;
48
48
  }
49
- export declare const fingerprintTurn: (ops: ReadonlyArray<PlurnkStatement>) => string;
50
- export declare const detectCycle: (history: ReadonlyArray<string>, minCycles: number, maxCyclePeriod: number) => {
51
- detected: false;
52
- } | {
53
- detected: true;
54
- period: number;
55
- cycles: number;
56
- };
57
49
  export default class Engine {
58
50
  #private;
59
- constructor({ db, schemes, mimetypes, streamEventNotify, wakeRunNotify, telemetryEventNotify }: {
51
+ static computeCeiling(contextSize: number | null, config: number): number | null;
52
+ static fingerprintTurn(ops: ReadonlyArray<PlurnkStatement>): string;
53
+ static detectCycle(history: ReadonlyArray<string>, minCycles: number, maxCyclePeriod: number): {
54
+ detected: false;
55
+ } | {
56
+ detected: true;
57
+ period: number;
58
+ cycles: number;
59
+ };
60
+ constructor({ db, schemes, mimetypes, streamEventNotify, wakeRunNotify, telemetryEventNotify, tokenize }: {
60
61
  db: Db;
61
62
  schemes: SchemeRegistry;
62
63
  mimetypes?: Mimetypes;
63
64
  streamEventNotify?: StreamEventNotify;
64
65
  wakeRunNotify?: WakeRunNotify;
65
66
  telemetryEventNotify?: TelemetryEventNotify;
67
+ tokenize?: (text: string) => number;
66
68
  });
67
69
  runLoop({ provider, messages, persona, requirements, sessionId, runId, loopId, maxTurns, maxStrikes, minCycles, maxCyclePeriod, origin, signal, onDispatch, }: {
68
70
  provider: Provider;
@@ -83,7 +85,7 @@ export default class Engine {
83
85
  turnIds: number[];
84
86
  finalStatus: number;
85
87
  hitMaxTurns: boolean;
86
- reason: "max_turns" | "strike_threshold" | "external" | null;
88
+ reason: "max_turns" | "strike_threshold" | "budget_overflow" | "external" | null;
87
89
  }>;
88
90
  runTurn({ provider, messages, persona, requirements, sessionId, runId, loopId, origin, signal, onDispatch, turnNumber, maxTurns, }: {
89
91
  provider: Provider;
@@ -103,6 +105,8 @@ export default class Engine {
103
105
  status: number;
104
106
  statuses: number[];
105
107
  fingerprint: string;
108
+ budgetStruck: boolean;
109
+ budgetHardStop: boolean;
106
110
  }>;
107
111
  dispatch(context: DispatchContext): Promise<DispatchResult>;
108
112
  resolveProposal(logEntryId: number, resolution: ProposalResolution): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../src/core/Engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../src/core/Engine.ts"],"names":[],"mappings":"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"}