@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,13 @@
1
+ export default class Paths {
2
+ #private;
3
+ static migrations: string;
4
+ static instructionsSystem: string;
5
+ static personality: string;
6
+ static schemeDocs: string;
7
+ static defaultRequirements: string;
8
+ static docs(): Array<{
9
+ entryName: string;
10
+ path: string;
11
+ }>;
12
+ }
13
+ //# sourceMappingURL=Paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paths.d.ts","sourceRoot":"","sources":["../src/Paths.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,OAAO,OAAO,KAAK;;IAQtB,MAAM,CAAC,UAAU,SAA8C;IAC/D,MAAM,CAAC,kBAAkB,SAA6C;IAEtE,MAAM,CAAC,WAAW,SAAsD;IACxE,MAAM,CAAC,UAAU,SAAqC;IAMtD,MAAM,CAAC,mBAAmB,SAAuC;IAkBjE,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAUxD;CACJ"}
package/dist/Paths.js ADDED
@@ -0,0 +1,60 @@
1
+ // Package-relative paths to non-code artifacts.
2
+ //
3
+ // `migrations` ships in this package's tarball.
4
+ // `instructionsSystem` resolves to `plurnk.md` IN THE GRAMMAR PACKAGE — single
5
+ // source of truth lives upstream. Plurnk-service doesn't carry its own copy;
6
+ // the grammar agent owns the prose.
7
+ //
8
+ // Lives at src/ (one level above the package root, like the index barrel that
9
+ // re-exports it) so `..` resolves to PACKAGE_ROOT.
10
+ import { fileURLToPath } from "node:url";
11
+ import { dirname, resolve } from "node:path";
12
+ import { homedir } from "node:os";
13
+ export default class Paths {
14
+ static #PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
15
+ static #GRAMMAR_ROOT = dirname(fileURLToPath(import.meta.resolve("@plurnk/plurnk-grammar/package.json")));
16
+ // The teaching corpus (scheme docs, personality, requirements) lives in @plurnk/plurnk-meta —
17
+ // the metaproject layer OWNS the family prose (owner ruling, monorepo cut); the daemon
18
+ // consumes it via the same single-source pull shape as GRAMMAR_ROOT.
19
+ static #DOCS_ROOT = dirname(fileURLToPath(import.meta.resolve("@plurnk/plurnk-meta/package.json")));
20
+ static migrations = resolve(Paths.#PACKAGE_ROOT, "migrations");
21
+ static instructionsSystem = resolve(Paths.#GRAMMAR_ROOT, "plurnk.md");
22
+ // The default operating policy (seeded to ~/.plurnk/AGENTS.md) + the per-scheme teaching docs.
23
+ static personality = resolve(Paths.#DOCS_ROOT, "PLURNK_PERSONALITY.md");
24
+ static schemeDocs = resolve(Paths.#DOCS_ROOT, "docs");
25
+ // (GBNF artifact resolution moved to Engine.#grammarConstraint — the env value
26
+ // SELECTS the variant from @plurnk/plurnk-grammar; no hardcoded default here, #225.)
27
+ // packet.user.system_requirements DEFAULT. Static contract appended at
28
+ // the end of the user packet — names rules the model has to honor that
29
+ // the grammar block doesn't cover (e.g. "loop concludes with SEND[200]").
30
+ static defaultRequirements = Paths.#resolveDefaultRequirements();
31
+ // Resolve the default requirements file: `PLURNK_SERVICE_REQUIREMENTS` env (absolute
32
+ // or relative-to-package-root) overrides the docs package's `requirements.md`.
33
+ static #resolveDefaultRequirements() {
34
+ const env = process.env.PLURNK_SERVICE_REQUIREMENTS;
35
+ if (typeof env === "string" && env.length > 0) {
36
+ return resolve(Paths.#PACKAGE_ROOT, env);
37
+ }
38
+ return resolve(Paths.#DOCS_ROOT, "requirements.md");
39
+ }
40
+ // Operator reference docs auto-READ into every model run at turn 0.
41
+ // `PLURNK_SERVICE_MD_<ALIAS>=<path>` materializes <path>'s markdown as a
42
+ // `plurnk:///<ALIAS>.md` entry the model READs — an idiomatic, userland way
43
+ // to inject standing context (an ordinary entry + READ op, not a bespoke
44
+ // packet section). `~` expands to home; relative paths resolve
45
+ // against the package root. Resolved fresh each call so it tracks the env.
46
+ static docs() {
47
+ const out = [];
48
+ for (const [key, value] of Object.entries(process.env)) {
49
+ if (!key.startsWith("PLURNK_SERVICE_MD_") || typeof value !== "string" || value.length === 0)
50
+ continue;
51
+ const alias = key.slice("PLURNK_SERVICE_MD_".length);
52
+ if (alias.length === 0)
53
+ continue;
54
+ const expanded = value.startsWith("~/") ? resolve(homedir(), value.slice(2)) : value === "~" ? homedir() : value;
55
+ out.push({ entryName: `${alias}.md`, path: resolve(Paths.#PACKAGE_ROOT, expanded) });
56
+ }
57
+ return out;
58
+ }
59
+ }
60
+ //# sourceMappingURL=Paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paths.js","sourceRoot":"","sources":["../src/Paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const editedSpan: (original: string, updated: string, context?: number) => string;
2
+ //# sourceMappingURL=edited-span.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edited-span.d.ts","sourceRoot":"","sources":["../../src/content/edited-span.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,aAAc,MAAM,WAAW,MAAM,uBAAgB,MAc3E,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { diffLines } from "diff";
2
+ // §edit-result-render — the resulting span: the changed region of `updated` (relative to
3
+ // `original`), line-numbered (1-indexed), with `context` lines of padding above
4
+ // and below. Diff to find the changed lines, render their post-edit state.
5
+ // Shared by EDIT result rendering (`_entry-ops`) and the environment-delta
6
+ // materialization (`Engine`, §env-delta) — both show "the edited area as it is now."
7
+ export const editedSpan = (original, updated, context = 2) => {
8
+ const rows = [];
9
+ for (const part of diffLines(original, updated)) {
10
+ if (part.removed)
11
+ continue; // removed lines aren't in the new content
12
+ const ls = part.value.split("\n");
13
+ if (ls.length > 1 && ls[ls.length - 1] === "")
14
+ ls.pop(); // drop trailing-newline artifact
15
+ for (const t of ls)
16
+ rows.push({ text: t, changed: part.added === true });
17
+ }
18
+ let lo = -1, hi = -1;
19
+ for (let i = 0; i < rows.length; i++)
20
+ if (rows[i].changed) {
21
+ if (lo < 0)
22
+ lo = i;
23
+ hi = i;
24
+ }
25
+ if (lo < 0) {
26
+ lo = 0;
27
+ hi = rows.length - 1;
28
+ } // no added hunk (defensive) → whole
29
+ const start = Math.max(0, lo - context);
30
+ const end = Math.min(rows.length - 1, hi + context);
31
+ return rows.slice(start, end + 1).map((r, i) => `${start + i + 1}:\t${r.text}`).join("\n");
32
+ };
33
+ //# sourceMappingURL=edited-span.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edited-span.js","sourceRoot":"","sources":["../../src/content/edited-span.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,yFAAyF;AACzF,gFAAgF;AAChF,2EAA2E;AAC3E,2EAA2E;AAC3E,qFAAqF;AACrF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,OAAe,EAAE,OAAO,GAAG,CAAC,EAAU,EAAE;IACjF,MAAM,IAAI,GAAyC,EAAE,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,OAAO;YAAE,SAAS,CAAE,0CAA0C;QACvE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;YAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAE,iCAAiC;QAC3F,KAAK,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAAC,IAAI,EAAE,GAAG,CAAC;gBAAE,EAAE,GAAG,CAAC,CAAC;YAAC,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;IAC1F,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAAC,EAAE,GAAG,CAAC,CAAC;QAAC,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAAC,CAAC,CAAE,oCAAoC;IACnF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/F,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { default as MimetypeBinary } from "./mimetype-binary.ts";
2
+ export { default as LineMarkerOps } from "./line-marker.ts";
3
+ export type { EditResult as LineEditResult, JsonSliceResult, SliceResult } from "./line-marker.ts";
4
+ export { default as PathMimetype } from "./path-mimetype.ts";
5
+ export { default as Matcher } from "./matcher.ts";
6
+ export type { MatchResult } from "./matcher.ts";
7
+ export { default as ReadResolve } from "./read-resolve.ts";
8
+ export type { ReadSliceResult } from "./read-resolve.ts";
9
+ export { editedSpan } from "./edited-span.ts";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,UAAU,IAAI,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEnG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Transport-agnostic content primitives — matching, <L> slicing, mimetype
2
+ // classification, path→mimetype. Uniform across every scheme and mimetype;
3
+ // folded in from the former @plurnk/plurnk-schemes daughter, which was
4
+ // misnamed: this is service-level content logic, not protocol-specific.
5
+ export { default as MimetypeBinary } from "./mimetype-binary.js";
6
+ export { default as LineMarkerOps } from "./line-marker.js";
7
+ export { default as PathMimetype } from "./path-mimetype.js";
8
+ export { default as Matcher } from "./matcher.js";
9
+ export { default as ReadResolve } from "./read-resolve.js";
10
+ export { editedSpan } from "./edited-span.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,uEAAuE;AACvE,wEAAwE;AAExE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { SliceResult, JsonSliceResult, LineEditResult as EditResult } from "@plurnk/plurnk-schemes";
2
+ import type { LineMarker } from "@plurnk/plurnk-grammar";
3
+ export type { SliceResult, JsonSliceResult, EditResult };
4
+ export default class LineMarkerOps {
5
+ static sliceLines(content: string, marker: LineMarker): SliceResult;
6
+ static sliceJsonItems(content: string, marker: LineMarker): JsonSliceResult;
7
+ static applyJsonItemEdit(content: string, marker: LineMarker, body: string): EditResult;
8
+ static sliceLinesRaw(content: string, marker: LineMarker): SliceResult;
9
+ static applyLineMarkerEdit(content: string, marker: LineMarker, body: string): EditResult;
10
+ static firstLast(marker: LineMarker): {
11
+ first: number;
12
+ last: number | null;
13
+ };
14
+ }
15
+ //# sourceMappingURL=line-marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-marker.d.ts","sourceRoot":"","sources":["../../src/content/line-marker.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,CAA0C;IAC7G,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,eAAe,CAA8C;IACzH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAuD;IAC9I,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,CAA6C;IACnH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAyD;IAKlJ,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAE3E;CACJ"}
@@ -0,0 +1,21 @@
1
+ // `<L>` line-marker slicing + structural edits — single source of truth is
2
+ // @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the daughter's
3
+ // functions; call sites stay `LineMarkerOps.sliceLines(...)`. Types re-exported.
4
+ //
5
+ // `<L>` semantics (plurnk.md §`<L>`): <N> position, <N,M> range, <0> prepend
6
+ // sentinel, <-1> append sentinel, <1,-1> whole content.
7
+ import { Slicer } from "@plurnk/plurnk-schemes";
8
+ export default class LineMarkerOps {
9
+ static sliceLines(content, marker) { return Slicer.lines(content, marker); }
10
+ static sliceJsonItems(content, marker) { return Slicer.jsonItems(content, marker); }
11
+ static applyJsonItemEdit(content, marker, body) { return Slicer.jsonItemEdit(content, marker, body); } // structural JSON item edit; malformed JSON → 400 — §json-edit-structural-json-edit §json-edit-json-parse-fail-400
12
+ static sliceLinesRaw(content, marker) { return Slicer.linesRaw(content, marker); }
13
+ static applyLineMarkerEdit(content, marker, body) { return Slicer.lineMarkerEdit(content, marker, body); }
14
+ // grammar 0.49+: the <L> parser carries raw numbers in `marks`; role-assignment is the
15
+ // consumer's. We read the first mark as start and the second as end (<N,M> range), null for
16
+ // a lone <N>. Used by the service's own range/threshold consumers (paginate, ~query top-K).
17
+ static firstLast(marker) {
18
+ return { first: marker.marks[0], last: marker.marks.length > 1 ? marker.marks[1] : null };
19
+ }
20
+ }
21
+ //# sourceMappingURL=line-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-marker.js","sourceRoot":"","sources":["../../src/content/line-marker.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,iFAAiF;AACjF,EAAE;AACF,6EAA6E;AAC7E,wDAAwD;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMhD,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,UAAU,CAAC,OAAe,EAAE,MAAkB,IAAiB,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,CAAC,cAAc,CAAC,OAAe,EAAE,MAAkB,IAAqB,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACzH,MAAM,CAAC,iBAAiB,CAAC,OAAe,EAAE,MAAkB,EAAE,IAAY,IAAgB,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mHAAmH;IAClQ,MAAM,CAAC,aAAa,CAAC,OAAe,EAAE,MAAkB,IAAiB,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACnH,MAAM,CAAC,mBAAmB,CAAC,OAAe,EAAE,MAAkB,EAAE,IAAY,IAAgB,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAElJ,uFAAuF;IACvF,4FAA4F;IAC5F,4FAA4F;IAC5F,MAAM,CAAC,SAAS,CAAC,MAAkB;QAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9F,CAAC;CACJ"}
@@ -0,0 +1,44 @@
1
+ import type { MatcherBody } from "@plurnk/plurnk-grammar";
2
+ import type { Mimetypes } from "@plurnk/plurnk-mimetypes";
3
+ export interface MatchResult {
4
+ status: number;
5
+ body?: string;
6
+ matches?: number;
7
+ paths?: string[];
8
+ hits?: Array<{
9
+ span: {
10
+ lineStart: number;
11
+ lineEnd: number;
12
+ } | null;
13
+ path?: string;
14
+ }>;
15
+ lines?: number[];
16
+ spans?: {
17
+ lineStart: number;
18
+ lineEnd: number;
19
+ }[];
20
+ error?: string;
21
+ mimetype?: string;
22
+ reason?: string;
23
+ }
24
+ export default class Matcher {
25
+ #private;
26
+ static matchAgainstContent(body: MatcherBody, content: string, mimetype: string, mimetypes: Mimetypes, baseLine?: number): Promise<MatchResult>;
27
+ static matchCandidates(body: MatcherBody, candidates: ReadonlyArray<{
28
+ key: string;
29
+ content: string;
30
+ mimetype: string;
31
+ }>, mimetypes: Mimetypes): Promise<{
32
+ status: number;
33
+ matches: CandidateMatch[];
34
+ }>;
35
+ }
36
+ export interface CandidateMatch {
37
+ key: string;
38
+ span: {
39
+ lineStart: number;
40
+ lineEnd: number;
41
+ } | null;
42
+ path?: string;
43
+ }
44
+ //# sourceMappingURL=matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/content/matcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAiC,MAAM,0BAA0B,CAAC;AAIzF,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAIjB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,OAAO,OAAO;;IAuCxB,OAAa,mBAAmB,CAC5B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,MAAU,GACrB,OAAO,CAAC,WAAW,CAAC,CAsCtB;IAQD,OAAa,eAAe,CACxB,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,aAAa,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EAC7E,SAAS,EAAE,SAAS,GACrB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC,CAYxD;CACJ;AAGD,MAAM,WAAW,cAAc;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAAE"}
@@ -0,0 +1,126 @@
1
+ // Body-matcher filtering. The mimetypes daughter owns dialect dispatch, projection, AND
2
+ // source-line provenance: we hand it the matcher the GRAMMAR already parsed (as a
3
+ // ParsedBodyMatcher — no second parser, mimetypes#42) plus the content, and it returns
4
+ // QueryMatch[] with each hit's source span(s). READ returns the LINE at each match
5
+ // (plurnk.md:31) — a matcher SELECTS, it never extracts a value. We never reach into the
6
+ // internal deepJson/deepXml projections; that's the daughter's layer.
7
+ //
8
+ // Status: 200 = matches; 204 = matcher applied, zero results; 400 = malformed matcher
9
+ // expression; 203 = source unparseable for its mimetype → raw bytes as text so the model
10
+ // can fall back to regex/visual parsing (SPEC §matcher-dispatch).
11
+ import { InvalidExpressionError, QueryParseFailureError, UnsupportedDialectError, GrammarNotInstalledError } from "@plurnk/plurnk-mimetypes";
12
+ import MimetypeBinary from "./mimetype-binary.js";
13
+ export default class Matcher {
14
+ static #renderValue(v) {
15
+ return typeof v === "string" && !v.includes("\n") ? v : JSON.stringify(v);
16
+ }
17
+ // READ returns LINES of content (plurnk.md:31): a matcher SELECTS, READ delivers the
18
+ // source line(s) at each match — not the extracted value. `m.lines` is each hit's source
19
+ // span(s), uniform across dialects (the daughter self-provides them). One source-line
20
+ // prefix `N:\t` (plurnk.md:32), deduped by source line; baseLine shifts slice-relative
21
+ // spans back to source coordinates. A hit with no span (e.g. an xpath computed scalar —
22
+ // count()/sum(), which has no source node) falls back to the matched value.
23
+ static #renderRows(matches, content, baseLine) {
24
+ const lines = content.split("\n");
25
+ const offset = baseLine - 1;
26
+ const seen = new Set();
27
+ const seenSpan = new Set();
28
+ const rows = [];
29
+ const sourceLines = [];
30
+ const spans = []; // one (deduped) range per match — the (file, span) unit (#286)
31
+ for (const m of matches) {
32
+ const ranges = m.lines ?? [];
33
+ if (ranges.length === 0) {
34
+ rows.push(Matcher.#renderValue(m.matched));
35
+ continue;
36
+ }
37
+ for (const range of ranges) {
38
+ const lineStart = range.line + offset;
39
+ const lineEnd = range.endLine + offset;
40
+ const spanKey = `${lineStart}\0${lineEnd}`;
41
+ if (!seenSpan.has(spanKey)) {
42
+ seenSpan.add(spanKey);
43
+ spans.push({ lineStart, lineEnd });
44
+ }
45
+ for (let ln = range.line; ln <= range.endLine; ln++) {
46
+ const src = ln + offset;
47
+ sourceLines.push(src);
48
+ if (seen.has(src))
49
+ continue;
50
+ seen.add(src);
51
+ rows.push(`${src}:\t${lines[ln - 1] ?? Matcher.#renderValue(m.matched)}`);
52
+ }
53
+ }
54
+ }
55
+ return { body: rows.join("\n"), lines: sourceLines, spans };
56
+ }
57
+ static async matchAgainstContent(body, content, mimetype, mimetypes, baseLine = 1) {
58
+ // Invariant (#286): ~semantic and @graph resolve to (file, span) items via FIND
59
+ // (rankSemantic / EntryGraph) — never the content matcher. A matcher READ fans out through
60
+ // FIND, and the per-match read carries the span with no body. So matchAgainstContent only
61
+ // ever sees content dialects; reaching here with a relation dialect is a routing bug, not a
62
+ // user error — fail hard rather than silently mis-handle.
63
+ if (body.dialect === "semantic" || body.dialect === "graph")
64
+ throw new Error(`matchAgainstContent is content-only; ${body.dialect} must resolve through FIND`);
65
+ // Hand the daughter the matcher the GRAMMAR parsed — no second parser (mimetypes#42).
66
+ const parsedMatcher = body.dialect === "regex"
67
+ ? { dialect: "regex", pattern: body.pattern, flags: body.flags }
68
+ : { dialect: body.dialect, pattern: body.raw };
69
+ let matches;
70
+ try {
71
+ matches = await mimetypes.query({ content, hint: mimetype }, parsedMatcher);
72
+ }
73
+ catch (err) {
74
+ // A malformed matcher EXPRESSION is the model's fault → 400. Source/projection
75
+ // failures (unparseable for the mimetype, unsupported dialect for this type, grammar
76
+ // not installed, no handler) → 203 soft fallback: raw bytes as text so the model
77
+ // can regex/visual-parse (§matcher-dispatch-203-soft-fallback).
78
+ if (err instanceof InvalidExpressionError)
79
+ return { status: 400, error: err.message };
80
+ if (err instanceof QueryParseFailureError || err instanceof UnsupportedDialectError || err instanceof GrammarNotInstalledError || err instanceof ReferenceError) {
81
+ return { status: 203, body: content, mimetype: MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE, reason: err instanceof Error ? err.message : String(err) };
82
+ }
83
+ throw err;
84
+ }
85
+ if (matches.length === 0)
86
+ return { status: 204, matches: 0 };
87
+ const rendered = Matcher.#renderRows(matches, content, baseLine);
88
+ const paths = matches.map((m) => m.matching).filter((x) => typeof x === "string" && x.length > 0);
89
+ const offset = baseLine - 1;
90
+ const hits = matches.map((m) => {
91
+ const first = (m.lines ?? [])[0];
92
+ const matching = m.matching;
93
+ return {
94
+ span: first === undefined ? null : { lineStart: first.line + offset, lineEnd: first.endLine + offset },
95
+ ...(typeof matching === "string" && matching.length > 0 ? { path: matching } : {}),
96
+ };
97
+ });
98
+ return { status: 200, body: rendered.body, matches: matches.length, lines: rendered.lines, spans: rendered.spans, hits, ...(paths.length > 0 ? { paths } : {}) };
99
+ }
100
+ // §find-source-agnostic — apply a content matcher to a list of candidates from ANY source
101
+ // (entries, log rows, …), returning one (key, span) per HIT keyed by the caller's own identity
102
+ // (a pathname, a log coordinate). The matcher never cares what table content came from; this is
103
+ // the shared primitive both EntryFind and Log.find run, so every dialect works uniformly by
104
+ // construction rather than being re-implemented per scheme. 400 (malformed matcher) fails the
105
+ // whole op; a non-200 candidate (204 no-match / 415 / 203) simply drops out.
106
+ static async matchCandidates(body, candidates, mimetypes) {
107
+ const matches = [];
108
+ for (const cand of candidates) {
109
+ const match = await Matcher.matchAgainstContent(body, cand.content, cand.mimetype, mimetypes);
110
+ if (match.status === 400)
111
+ return { status: 400, matches: [] };
112
+ if (match.status !== 200)
113
+ continue;
114
+ const spans = match.spans ?? [];
115
+ const hits = match.hits ?? spans.map((span) => ({ span }));
116
+ if (hits.length === 0 || hits.every((h) => h.span === null)) {
117
+ matches.push({ key: cand.key, span: null });
118
+ continue;
119
+ }
120
+ for (const h of hits)
121
+ matches.push({ key: cand.key, span: h.span, path: h.path });
122
+ }
123
+ return { status: 200, matches };
124
+ }
125
+ }
126
+ //# sourceMappingURL=matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/content/matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export default class MimetypeBinary {
2
+ static TEXT_PRIMITIVE_MIMETYPE: string;
3
+ static isBinaryMimetype(mimetype: string): boolean;
4
+ static isJsonMimetype(mimetype: string): boolean;
5
+ static isLineNavigableMimetype(mimetype: string): boolean;
6
+ static normalizeAutoTextMimetype(mimetype: string | null | undefined): string;
7
+ }
8
+ //# sourceMappingURL=mimetype-binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mimetype-binary.d.ts","sourceRoot":"","sources":["../../src/content/mimetype-binary.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,uBAAuB,SAA4B;IAC1D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAkD;IACpG,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAgD;IAChG,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAyD;IAClH,MAAM,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAA2D;CAC3I"}
@@ -0,0 +1,17 @@
1
+ // Mimetype classifiers used at op-handler boundaries — single source of truth
2
+ // is @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the
3
+ // daughter's functions (mandate: static-method class); call sites stay
4
+ // `MimetypeBinary.isBinaryMimetype(...)`.
5
+ //
6
+ // isBinaryMimetype — enforces 415 on binary entries (SPEC §op-invariants)
7
+ // isLineNavigableMimetype — decides the render layer's `N:\t` line prefixes
8
+ // TEXT_PRIMITIVE_MIMETYPE — text/markdown, the auto-derived text default
9
+ import { MimetypeClassifier, TEXT_PRIMITIVE_MIMETYPE as _TEXT_PRIMITIVE_MIMETYPE } from "@plurnk/plurnk-schemes";
10
+ export default class MimetypeBinary {
11
+ static TEXT_PRIMITIVE_MIMETYPE = _TEXT_PRIMITIVE_MIMETYPE;
12
+ static isBinaryMimetype(mimetype) { return MimetypeClassifier.isBinary(mimetype); }
13
+ static isJsonMimetype(mimetype) { return MimetypeClassifier.isJson(mimetype); }
14
+ static isLineNavigableMimetype(mimetype) { return MimetypeClassifier.isLineNavigable(mimetype); }
15
+ static normalizeAutoTextMimetype(mimetype) { return MimetypeClassifier.normalizeAutoText(mimetype); } // auto-text → the text/markdown primitive — §markdown-primitive-text-markdown-normalize
16
+ }
17
+ //# 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,8EAA8E;AAC9E,sEAAsE;AACtE,uEAAuE;AACvE,0CAA0C;AAC1C,EAAE;AACF,kFAAkF;AAClF,8EAA8E;AAC9E,2EAA2E;AAC3E,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,IAAI,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEjH,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,uBAAuB,GAAG,wBAAwB,CAAC;IAC1D,MAAM,CAAC,gBAAgB,CAAC,QAAgB,IAAa,OAAO,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,CAAC,cAAc,CAAC,QAAgB,IAAa,OAAO,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,CAAC,uBAAuB,CAAC,QAAgB,IAAa,OAAO,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClH,MAAM,CAAC,yBAAyB,CAAC,QAAmC,IAAY,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,wFAAwF;CACpO"}
@@ -0,0 +1,5 @@
1
+ import type { Mimetypes } from "@plurnk/plurnk-mimetypes";
2
+ export default class PathMimetype {
3
+ static resolveEntryMimetype(pathname: string, schemeDefault: string, mimetypes: Mimetypes | undefined): Promise<string>;
4
+ }
5
+ //# 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":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtH;CACJ"}
@@ -0,0 +1,15 @@
1
+ // Path-extension mimetype resolver for entry schemes — single source of truth
2
+ // is @plurnk/plurnk-schemes (keystone PR-1). Local OO facade over the
3
+ // daughter's function; call sites stay `PathMimetype.resolveEntryMimetype(...)`.
4
+ //
5
+ // A pathname's extension drives the effective mimetype (§ext-mimetype-extension-mimetype; via the sibling
6
+ // Mimetypes detect service); the scheme manifest's channel default is the
7
+ // fallback when no extension is present. `known:///users.json` →
8
+ // application/json; `known:///notes` → scheme default.
9
+ import { PathMimetype as _PathMimetype } from "@plurnk/plurnk-schemes";
10
+ export default class PathMimetype {
11
+ static resolveEntryMimetype(pathname, schemeDefault, mimetypes) {
12
+ return _PathMimetype.resolve(pathname, schemeDefault, mimetypes);
13
+ }
14
+ }
15
+ //# 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,8EAA8E;AAC9E,sEAAsE;AACtE,iFAAiF;AACjF,EAAE;AACF,0GAA0G;AAC1G,0EAA0E;AAC1E,iEAAiE;AACjE,uDAAuD;AACvD,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvE,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,oBAAoB,CAAC,QAAgB,EAAE,aAAqB,EAAE,SAAgC;QACjG,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACrE,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;IAC5B,OAAa,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,CAiD3B;CACJ"}
@@ -0,0 +1,68 @@
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
+ // A range miss states the EXTENT (run24: 24 blind 416s — the model re-guessed
20
+ // ranges against a file whose size it was never told). A fact, not advice.
21
+ if (sliced.status === 416)
22
+ return { status: 416, content: "[ range not satisfiable — the JSON has fewer items than requested ]", mimetype: "text/markdown" };
23
+ if (sliced.status !== 200)
24
+ return { status: sliced.status, content: null, mimetype };
25
+ workingContent = sliced.body ?? "[]";
26
+ workingStart = null;
27
+ workingMimetypeForSlice = "application/json";
28
+ }
29
+ else {
30
+ const sliced = LineMarkerOps.sliceLines(content, lineMarker);
31
+ if (sliced.status === 416) {
32
+ const totalLines = content.length === 0 ? 0 : content.split("\n").length;
33
+ return { status: 416, content: `[ range not satisfiable — entry has ${totalLines} lines ]`, mimetype: "text/markdown" };
34
+ }
35
+ if (sliced.status !== 200)
36
+ return { status: sliced.status, content: null, mimetype };
37
+ workingContent = sliced.text ?? "";
38
+ workingStart = sliced.startLine ?? null;
39
+ }
40
+ }
41
+ if (body !== null) {
42
+ if (mimetypes === undefined)
43
+ return { status: 500, content: null, mimetype };
44
+ const matched = await Matcher.matchAgainstContent(body, workingContent, mimetype, mimetypes, workingStart ?? 1);
45
+ if (matched.status === 204)
46
+ return { status: 204, content: "", mimetype: "text/markdown", startLine: null, matches: 0 };
47
+ if (matched.status === 203) {
48
+ // Dialect-parse-failure fallback: raw source as text/markdown; reason surfaces why.
49
+ return { status: 203, content: matched.body ?? "", mimetype: matched.mimetype ?? "text/markdown", startLine: 1, reason: matched.reason };
50
+ }
51
+ if (matched.status !== 200)
52
+ return { status: matched.status, content: null, mimetype };
53
+ return { status: 200, content: matched.body ?? "", mimetype: "text/markdown", startLine: null, matches: matched.matches };
54
+ }
55
+ if (lineMarker !== null) {
56
+ // `<L>` slice mimetype follows the source family: line-navigable → text/markdown,
57
+ // JSON → application/json (structure preserved for compose, §slice-semantics-compose-pattern). Empty / `[]` → 204.
58
+ const isEmptyJsonArray = workingMimetypeForSlice === "application/json" && workingContent === "[]";
59
+ if (workingContent === "" || isEmptyJsonArray)
60
+ return { status: 204, content: "", mimetype: workingMimetypeForSlice, startLine: null };
61
+ return { status: 200, content: workingContent, mimetype: workingMimetypeForSlice, startLine: workingStart };
62
+ }
63
+ if (content === "")
64
+ return { status: 204, content: "", mimetype, startLine: null };
65
+ return { status: 200, content, mimetype, startLine: 1 };
66
+ }
67
+ }
68
+ //# 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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"}