@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,20 @@
1
+ import type { FindStatement, ReadStatement } from "@plurnk/plurnk-grammar";
2
+ import type { PlurnkSchemeContext, SchemeManifest } from "../core/scheme-types.ts";
3
+ import type { Executor } from "../core/ExecutorRegistry.ts";
4
+ import type Exec from "./Exec.ts";
5
+ import { type ReadResult } from "./_entry-ops.ts";
6
+ import { type FindResult } from "./_entry-find.ts";
7
+ import { type ReadEntryResult } from "./_entry-crud.ts";
8
+ export default class ExecOutputScheme {
9
+ #private;
10
+ constructor(executor: Executor, exec: Exec);
11
+ get manifest(): SchemeManifest;
12
+ read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<ReadResult>;
13
+ find(statement: FindStatement, ctx: PlurnkSchemeContext): Promise<FindResult>;
14
+ readEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<ReadEntryResult>;
15
+ kill(pathname: string, signal: number | null, ctx: PlurnkSchemeContext): Promise<{
16
+ status: number;
17
+ error?: string;
18
+ }>;
19
+ }
20
+ //# sourceMappingURL=ExecOutputScheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecOutputScheme.d.ts","sourceRoot":"","sources":["../../src/schemes/ExecOutputScheme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAYnE,MAAM,CAAC,OAAO,OAAO,gBAAgB;;IAGjC,YAAY,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAGzC;IAED,IAAI,QAAQ,IAAI,cAAc,CAAoC;IAE5D,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAIK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAEpF;IAIK,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAEzH;CACJ"}
@@ -0,0 +1,39 @@
1
+ import EntryOps from "./_entry-ops.js";
2
+ import EntryFind from "./_entry-find.js";
3
+ import EntryCrud from "./_entry-crud.js";
4
+ // #240 — an executor IS a scheme; its output lives at <tag>://. Each discovered
5
+ // executor registers this face under its runtime tag, so READ/FIND <tag>://<coord>
6
+ // read PRIOR output, scoped to the tag's stored entries via the executor's OWN
7
+ // manifest (name = the tag) — fixing the latent mis-scope where the shared `exec`
8
+ // handler read under scheme="exec" while output persists under scheme=<tag>. The
9
+ // face never executes (the run stays on EXEC); process-KILL by coordinate and the
10
+ // COPY/MOVE source-read are the only cross-cutting bits — KILL delegates to the one
11
+ // Exec handler that owns the spawn-abort state, the source-read is tag-scoped here.
12
+ // Every tag — sh, search, sqlite, MCP — reads through this one uniform path; an executor
13
+ // is a pure PRODUCER (run() writes channels), never a read/find face (execs#13).
14
+ export default class ExecOutputScheme {
15
+ #executor;
16
+ #exec;
17
+ constructor(executor, exec) {
18
+ this.#executor = executor;
19
+ this.#exec = exec;
20
+ }
21
+ get manifest() { return this.#executor.manifest; }
22
+ async read(statement, ctx) {
23
+ return EntryOps.readSessionEntry(statement, ctx, this.#executor.manifest);
24
+ }
25
+ async find(statement, ctx) {
26
+ return EntryFind.findSessionEntries(statement, ctx, this.#executor.manifest);
27
+ }
28
+ // COPY/MOVE source — read the output entry by pathname, tag-scoped (not via the
29
+ // shared Exec handler, which would scope to scheme="exec" and 404).
30
+ async readEntry(pathname, ctx) {
31
+ return EntryCrud.readEntry(pathname, ctx, this.#executor.manifest.name);
32
+ }
33
+ // Process-KILL by coordinate — the spawn-abort state (#activeAborts) lives on the
34
+ // one Exec handler, so the per-tag face delegates to it.
35
+ async kill(pathname, signal, ctx) {
36
+ return this.#exec.kill(pathname, signal, ctx);
37
+ }
38
+ }
39
+ //# sourceMappingURL=ExecOutputScheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecOutputScheme.js","sourceRoot":"","sources":["../../src/schemes/ExecOutputScheme.ts"],"names":[],"mappings":"AAIA,OAAO,QAA6B,MAAM,iBAAiB,CAAC;AAC5D,OAAO,SAA8B,MAAM,kBAAkB,CAAC;AAC9D,OAAO,SAAmC,MAAM,kBAAkB,CAAC;AAEnE,gFAAgF;AAChF,mFAAmF;AACnF,+EAA+E;AAC/E,kFAAkF;AAClF,iFAAiF;AACjF,kFAAkF;AAClF,oFAAoF;AACpF,oFAAoF;AACpF,yFAAyF;AACzF,iFAAiF;AACjF,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,SAAS,CAAW;IACpB,KAAK,CAAO;IACZ,YAAY,QAAkB,EAAE,IAAU;QACtC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,KAAqB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAElE,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED,gFAAgF;IAChF,oEAAoE;IACpE,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,GAAwB;QACtD,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,kFAAkF;IAClF,yDAAyD;IACzD,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,MAAqB,EAAE,GAAwB;QACxE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;CACJ"}
@@ -0,0 +1,42 @@
1
+ import type { EditStatement, ReadStatement, FindStatement } from "@plurnk/plurnk-grammar";
2
+ import type { SchemeManifest, PlurnkSchemeContext } from "../core/scheme-types.ts";
3
+ import type { ReadResult } from "./_entry-ops.ts";
4
+ import type { FindResult } from "./_entry-find.ts";
5
+ import type { ReadEntryResult, EntryData, WriteEntryResult, DeleteEntryResult } from "./_entry-crud.ts";
6
+ type EditResult = {
7
+ status: number;
8
+ body?: string;
9
+ attrs?: object;
10
+ error?: string;
11
+ };
12
+ type ApplyArgs = {
13
+ attrs: {
14
+ path?: string;
15
+ canonical?: string;
16
+ patched?: string;
17
+ span?: string;
18
+ deletePath?: string;
19
+ baseSig?: string | null;
20
+ existed?: boolean;
21
+ [k: string]: unknown;
22
+ };
23
+ body?: string;
24
+ };
25
+ type ApplyResult = {
26
+ status: number;
27
+ outcome?: string;
28
+ body?: string;
29
+ };
30
+ export default class File {
31
+ #private;
32
+ static manifest: SchemeManifest;
33
+ read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<ReadResult>;
34
+ find(statement: FindStatement, ctx: PlurnkSchemeContext): Promise<FindResult>;
35
+ readEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<ReadEntryResult>;
36
+ edit(statement: EditStatement, ctx: PlurnkSchemeContext): Promise<EditResult>;
37
+ writeEntry(pathname: string, entry: EntryData, ctx: PlurnkSchemeContext): Promise<WriteEntryResult>;
38
+ applyResolution(args: ApplyArgs, ctx: PlurnkSchemeContext): Promise<ApplyResult>;
39
+ deleteEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<DeleteEntryResult>;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=File.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../../src/schemes/File.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAc,MAAM,wBAAwB,CAAC;AAGtG,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAQxG,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACpF,KAAK,SAAS,GAAG;IAAE,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACzM,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA+CvE,MAAM,CAAC,OAAO,OAAO,IAAI;;IACrB,MAAM,CAAC,QAAQ,EAAE,cAAc,CAY7B;IAOI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAQlF;IAiCK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAMlF;IAKK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAMpF;IA0DK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0BlF;IAQK,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CASxG;IAUK,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4FrF;IAMK,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAOxF;CACJ"}
@@ -0,0 +1,356 @@
1
+ import { mkdir, realpath, rm, stat, writeFile } from "node:fs/promises";
2
+ import { dirname, relative, isAbsolute, join, matchesGlob, sep } from "node:path";
3
+ import { createPatch } from "diff";
4
+ import { decodePathParens } from "../core/path-decode.js";
5
+ import EntryOps from "./_entry-ops.js";
6
+ import EntryFind from "./_entry-find.js";
7
+ import EntryCrud from "./_entry-crud.js";
8
+ import { LineMarkerOps, MimetypeBinary, editedSpan } from "../content/index.js";
9
+ // Workspace root for file ops is sourced from `sessions.project_root`,
10
+ // supplied by the client at session.create (headless is forever; issue
11
+ // #150 wired the RPC; F.1 added the column). Server doesn't guess —
12
+ // the client owns workspace identity. If a session is headless
13
+ // (project_root=null), file ops fail at 400; the client either supplies
14
+ // a root or the op isn't appropriate for this session.
15
+ const loadSessionRoot = async (db, sessionId) => {
16
+ const row = await db.envelope_get_session.get({ id: sessionId });
17
+ return row?.project_root ?? null;
18
+ };
19
+ // The model may hand us an absolute disk path (echoed from exec/build output) instead of the
20
+ // workspace-relative key it sees in the manifest. An absolute path UNDER the project root
21
+ // normalizes back to its relative key — so it resolves to the member, not a 404 (READ) or a
22
+ // wrong CREATE nested under root (EDIT). Outside-root absolutes don't arise: the model only
23
+ // ever sees those members as their `../`-relative keys, never an absolute form.
24
+ const toWorkspaceRelative = (pathname, root) => pathname === root || pathname.startsWith(root + sep) ? `/${relative(root, pathname)}` : pathname;
25
+ // Detect mimetype from a file's path. Routes through the Mimetypes service
26
+ // when available; falls back to the text primitive (text/markdown). The
27
+ // `MimetypeBinary.normalizeAutoTextMimetype` wrapper ensures text/plain returned by the
28
+ // service is normalized to text/markdown — plurnk-service never auto-
29
+ // derives text/plain (see mimetype-binary.ts MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE).
30
+ const detectFileMimetype = async (canonical, ctx) => {
31
+ if (ctx.mimetypes !== undefined) {
32
+ const detected = await ctx.mimetypes.detect({ path: canonical });
33
+ return MimetypeBinary.normalizeAutoTextMimetype(detected);
34
+ }
35
+ return MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE;
36
+ };
37
+ // SECURITY — File is entry-backed, identical to Known: read()/find()/readEntry()
38
+ // delegate to the shared Entry* helpers over the membership-materialized entries
39
+ // (scheme=null). The membership gate is now ENTRY-EXISTENCE — a non-member has no
40
+ // entry, so read/find/readEntry 404 it for free, the same invariant Known runs on
41
+ // (a gitignored `.env` is never a member → never an entry → never readable). Disk
42
+ // I/O is confined to the two edges that own it: the git-membership materialize-IN
43
+ // and edit()/applyResolution()'s proposal-gated write-OUT (§membership), where the
44
+ // containment/traversal checks live.
45
+ //
46
+ // writeEntry() is the proposal-gated write-back: a COPY/MOVE *into* file:/// is a disk
47
+ // write, so it flows through the SAME §membership gate as EDIT (#resolveWriteTarget) — a
48
+ // 202 proposal, then applyResolution() writes on accept — never an ungated overwrite (the
49
+ // `.env`-wipe this guard prevents). COPY/MOVE *from* file:/// is readEntry (read-only).
50
+ export default class File {
51
+ static manifest = {
52
+ name: "file",
53
+ storedScheme: null, // file rows persist bare (entries.scheme = NULL); renders as a bare path
54
+ channels: {}, // dynamic mimetype per file extension
55
+ defaultChannel: "body",
56
+ category: "data",
57
+ scope: "session",
58
+ writableBy: ["model", "client", "plugin"],
59
+ volatile: false,
60
+ modelVisible: true,
61
+ example: "<<READ(README.md)::READ",
62
+ documentation: "The project's workspace files (git-tracked members, shown as bare paths) — THE TASK'S FILES: when asked to change the project, EDIT these, not your notes or scratch. READ and FIND them like any entry; EDIT proposes a diff for review and only writes to disk once accepted — the review is normal, not a refusal, so propose the edit rather than working around it. Non-members are invisible, so you can't read or clobber a file outside the tracked surface.",
63
+ };
64
+ // Entry-backed, identical to Known (the unified-addressing promise): read the
65
+ // membership-materialized entry (scheme=null) through the shared helper. <L> /
66
+ // body / binary-415 / tag-404 are all handled there; a non-member has no entry
67
+ // → 404, the same gate Known runs on. Disk is reached only at the materialize
68
+ // and write-back edges (git-membership, applyResolution) — never on a read.
69
+ async read(statement, ctx) {
70
+ const r = await EntryOps.readSessionEntry(statement, ctx, File.manifest);
71
+ if (r.status !== 404)
72
+ return r;
73
+ // 404 fallback: the model may have used an absolute disk path (echoed from exec/build
74
+ // output) instead of the relative key it sees. Normalize + retry — an absolute-under-
75
+ // root member then resolves; anything else keeps the 404. No cost on the hit path.
76
+ const normalized = File.#normalizeFileTarget(statement, await loadSessionRoot(ctx.db, ctx.sessionId));
77
+ return normalized === statement ? r : EntryOps.readSessionEntry(normalized, ctx, File.manifest);
78
+ }
79
+ static #normalizeFileTarget(statement, root) {
80
+ const t = statement.target;
81
+ if (root === null || t === null)
82
+ return statement;
83
+ // A bare member parses as a LocalPath (`notes.md` / `/notes.md` → raw); a scheme'd
84
+ // one as a UrlPath (pathname). Normalize whichever the grammar produced to the `/rel`
85
+ // member key — the LOCAL form is what the model actually emits. regex isn't a path.
86
+ if (t.kind === "url") {
87
+ const norm = File.#toMemberKey(t.pathname, root);
88
+ return norm === t.pathname ? statement : { ...statement, target: { ...t, pathname: norm } };
89
+ }
90
+ if (t.kind === "local") {
91
+ const norm = File.#toMemberKey(t.raw, root);
92
+ return norm === t.raw ? statement : { ...statement, target: { ...t, raw: norm } };
93
+ }
94
+ return statement;
95
+ }
96
+ // Map any path form the model might type to its namespace member key `/rel`, so READ
97
+ // resolves a member the way writeEntry does (the parity that was missing — READ only
98
+ // normalized absolute disk paths). Two forms collapse to `/rel`: an absolute path under
99
+ // root (echoed from exec output) and a namespace-relative path — bare `notes.md`,
100
+ // `/notes.md`, or `sub/x`, which is what the model naturally copies from the catalog.
101
+ // A path escaping root is left unchanged → it stays a 404, so the membership boundary
102
+ // holds (the entry-existence gate has the final say; no disk is touched on a read).
103
+ static #toMemberKey(pathname, root) {
104
+ const abs = toWorkspaceRelative(pathname, root);
105
+ if (abs !== pathname)
106
+ return abs;
107
+ const relBare = relative(root, join(root, pathname));
108
+ return relBare === "" || relBare.startsWith("..") || isAbsolute(relBare) ? pathname : `/${relBare}`;
109
+ }
110
+ async find(statement, ctx) {
111
+ // Normalize the model-typed path to the `/rel` member key BEFORE the candidate
112
+ // glob — the parity READ/EDIT already have (§scheme-address). Without it a bare
113
+ // `notes.md` globs `notes.md*` and misses the canonical-stored `/notes.md`.
114
+ const normalized = File.#normalizeFileTarget(statement, await loadSessionRoot(ctx.db, ctx.sessionId));
115
+ return EntryFind.findSessionEntries(normalized, ctx, File.manifest);
116
+ }
117
+ // COPY/MOVE FROM file:/// — read-only, gated by entry-existence (a non-member
118
+ // has no entry → 404). The write-back side (writeEntry) is deliberately absent;
119
+ // see the SECURITY note above.
120
+ async readEntry(pathname, ctx) {
121
+ // §scheme-address — normalize the model-typed path (bare `brief.md`) to its `/rel` member key,
122
+ // the same parity READ/EDIT/deleteEntry have. Without it a COPY/MOVE FROM a bare file path
123
+ // misses the canonical-stored member and 404s a source that plainly exists.
124
+ const root = await loadSessionRoot(ctx.db, ctx.sessionId);
125
+ return EntryCrud.readEntry(root === null ? pathname : File.#toMemberKey(pathname, root), ctx, null);
126
+ }
127
+ // §membership disk-write gate, shared by edit() and writeEntry() (the COPY/MOVE
128
+ // dest). Resolves the canonical path; enforces containment (traversal → 403),
129
+ // membership (existing non-member → 403, the `.env` protection), the read-only
130
+ // overlay (→ 403), and binary (→ 415); reads current content for the diff. A
131
+ // not-found path is fine — we propose to CREATE. ONE home for the gate: an edit
132
+ // and a copy into file:/// are the same disk write under the same review.
133
+ // §membership-edit-membership-gate — membership/containment/read-only/binary gate before any disk write
134
+ async #resolveWriteTarget(pathname, ctx) {
135
+ const root = await loadSessionRoot(ctx.db, ctx.sessionId);
136
+ if (root === null)
137
+ return { ok: false, status: 400, error: "session has no project_root (headless is forever) — file ops need a session created with projectRoot" };
138
+ // An absolute disk path the model echoed → its relative key, so EDIT hits the member
139
+ // instead of proposing a wrong CREATE nested under root (the fileExists=false path).
140
+ pathname = toWorkspaceRelative(pathname, root);
141
+ let canonical;
142
+ // pathname is namespace-absolute (`/note`); join roots it at the workspace
143
+ // root — the leading slash is the namespace origin, not a filesystem path.
144
+ const requested = join(root, pathname);
145
+ let fileExists = true;
146
+ try {
147
+ canonical = await realpath(requested);
148
+ }
149
+ catch (err) {
150
+ if (err.code !== "ENOENT")
151
+ throw err;
152
+ canonical = requested;
153
+ fileExists = false;
154
+ }
155
+ const relBare = relative(root, canonical);
156
+ if (relBare.startsWith("..") || isAbsolute(relBare))
157
+ return { ok: false, status: 403, error: "path escapes workspace root" };
158
+ const rel = `/${relBare}`; // namespace-absolute entry key — matches the parser + membership storage
159
+ let original = "";
160
+ let baseSig = null; // the snapshot signature the proposal is computed against; null = create (assumed-absent)
161
+ if (fileExists) {
162
+ const member = await ctx.db.crud_get_member_sig.get({ session_id: ctx.sessionId, scheme: null, pathname: rel });
163
+ if (member === undefined)
164
+ return { ok: false, status: 403, error: "path is outside your workspace surface" };
165
+ const viewGlobs = (await ctx.db.crud_list_session_constraints.all({ session_id: ctx.sessionId }))
166
+ .filter((c) => c.effect === "view").map((c) => c.glob);
167
+ if (viewGlobs.some((g) => matchesGlob(relBare, g)))
168
+ return { ok: false, status: 403, error: "member is read-only" }; // view = read-only member, 403 on edit — §membership-overlay-view
169
+ // The diff base is the entry's snapshot — the body channel the model READ — not a fresh
170
+ // disk read. EDIT is naive against the view the model saw; the write-side CAS (applyResolution)
171
+ // guards the landing. baseSig is that snapshot's stat, carried with the proposal so a sibling
172
+ // run's reconcile can't advance it under the paused proposal. §membership-edit-write-cas
173
+ const snapshot = await ctx.db.ops_read_channel.get({ session_id: ctx.sessionId, scheme: null, pathname: rel, channel: "body" });
174
+ original = snapshot?.content ?? "";
175
+ baseSig = member.synced_sig;
176
+ }
177
+ const mimetype = await detectFileMimetype(canonical, ctx);
178
+ if (MimetypeBinary.isBinaryMimetype(mimetype))
179
+ return { ok: false, status: 415, error: `cannot write binary mimetype \`${mimetype}\`` };
180
+ return { ok: true, canonical, rel, fileExists, original, mimetype, baseSig };
181
+ }
182
+ // Edit op (task #42 canonical proposal consumer). Returns status=202
183
+ // with a udiff body for client review + attrs carrying the full patched
184
+ // content. Engine writes the proposed log entry, pauses dispatch, and
185
+ // calls applyResolution() (below) after the proposal accepts.
186
+ async edit(statement, ctx) {
187
+ if (statement.target === null)
188
+ return { status: 400, error: "EDIT requires a path" };
189
+ const pathname = statement.target.kind === "regex" ? statement.target.raw
190
+ : decodePathParens(statement.target.kind === "url" ? statement.target.pathname : statement.target.raw); // #239 item 4
191
+ const target = await this.#resolveWriteTarget(pathname, ctx);
192
+ if (!target.ok)
193
+ return { status: target.status, error: target.error };
194
+ const { canonical, rel, fileExists, original, mimetype, baseSig } = target;
195
+ // `<L>` line marker dispatches on file mimetype: JSON →
196
+ // LineMarkerOps.applyJsonItemEdit (structural item edit); otherwise →
197
+ // LineMarkerOps.applyLineMarkerEdit (line edit). On a non-existent file,
198
+ // body becomes content regardless of marker (per "Resolved ambiguities" §scheme).
199
+ const body = statement.body ?? "";
200
+ let patched;
201
+ if (statement.lineMarker !== null && fileExists) {
202
+ const result = MimetypeBinary.isJsonMimetype(mimetype)
203
+ ? LineMarkerOps.applyJsonItemEdit(original, statement.lineMarker, body)
204
+ : LineMarkerOps.applyLineMarkerEdit(original, statement.lineMarker, body);
205
+ if (result.status !== 200)
206
+ return { status: result.status, error: result.error };
207
+ patched = result.result ?? "";
208
+ }
209
+ else {
210
+ patched = body;
211
+ }
212
+ const patch = createPatch(rel, original, patched, "current", "proposed");
213
+ return { status: 202, body: patch, attrs: { path: rel, canonical, patch, patched, span: editedSpan(original, patched), baseSig, existed: fileExists } };
214
+ }
215
+ // COPY/MOVE INTO file:/// — the dest write. Same §membership gate as edit, same 202
216
+ // proposal + applyResolution path: a copy onto disk is a disk write and earns
217
+ // the identical human review. Dispatcher.#copyOrchestration propagates this 202;
218
+ // ProposalLifecycle.runApply routes the accept back here via the dest scheme;
219
+ // applyResolution() writes the file + registers the entry. The copied content
220
+ // is the source's body channel (full replacement — files are body-only).
221
+ async writeEntry(pathname, entry, ctx) {
222
+ const bodyChannel = entry.channels.body;
223
+ if (bodyChannel === undefined)
224
+ return { status: 400, created: false, entryId: null };
225
+ const target = await this.#resolveWriteTarget(pathname, ctx);
226
+ if (!target.ok)
227
+ return { status: target.status, created: false, entryId: null };
228
+ const { canonical, rel, fileExists, original, baseSig } = target;
229
+ const patched = bodyChannel.content;
230
+ const patch = createPatch(rel, original, patched, "current", "proposed");
231
+ return { status: 202, created: !fileExists, entryId: null, body: patch, attrs: { path: rel, canonical, patch, patched, span: editedSpan(original, patched), baseSig, existed: fileExists } };
232
+ }
233
+ // applyResolution — called by Engine.dispatch after a proposed log
234
+ // entry resolves with decision=accept. Two responsibilities:
235
+ // 1. Write the patched content to disk.
236
+ // 2. Register the file as an entry so it appears in the manifest and the
237
+ // model can READ its full landed work.
238
+ // The accepted result returns the editedSpan diff as its body, so the EDIT row
239
+ // itself carries the line-numbered confirmation of what changed — parity with the
240
+ // entry-scheme EDIT's span; default-folding reclaims it at the next turn boundary.
241
+ async applyResolution(args, ctx) {
242
+ const { attrs, body } = args;
243
+ // Delete-apply (deferred behind review — the KILL proposal, or the MOVE source-delete gated by
244
+ // its dest proposal): unlink the host file + deregister the entry on accept. A real unlink
245
+ // failure surfaces as 500, never a silent noop; ENOENT ⇒ file already gone, still deregister.
246
+ if (typeof attrs.deletePath === "string") {
247
+ const root = await loadSessionRoot(ctx.db, ctx.sessionId);
248
+ if (root === null)
249
+ return { status: 500, outcome: "no project_root" };
250
+ try {
251
+ await rm(join(root, attrs.deletePath));
252
+ }
253
+ catch (err) {
254
+ if (err.code !== "ENOENT")
255
+ return { status: 500, outcome: "delete_failed", body: err instanceof Error ? err.message : String(err) };
256
+ }
257
+ await EntryCrud.deleteEntry(attrs.deletePath, ctx, null);
258
+ return { status: 200 };
259
+ }
260
+ const canonical = attrs.canonical;
261
+ const relPath = attrs.path;
262
+ const patched = body ?? attrs.patched;
263
+ if (typeof canonical !== "string" || canonical.length === 0) {
264
+ return { status: 500, outcome: "applyResolution: missing attrs.canonical" };
265
+ }
266
+ if (typeof relPath !== "string" || relPath.length === 0) {
267
+ return { status: 500, outcome: "applyResolution: missing attrs.path" };
268
+ }
269
+ if (typeof patched !== "string") {
270
+ return { status: 500, outcome: "applyResolution: missing patched content" };
271
+ }
272
+ // CAS — the write-side twin of #materializeMember's read-gate (synced_sig === sig). The
273
+ // proposal was computed against the snapshot (body + baseSig); if disk drifted out-of-band
274
+ // since propose, the full-blob write would clobber it. Refuse and surface a write_conflict —
275
+ // the next reconcile narrates disk truth via FsDivergence; the model re-reads + re-proposes.
276
+ // No clever re-diff, no clobber. §membership-edit-write-cas
277
+ const baseSig = (args.attrs.baseSig ?? null);
278
+ const existed = args.attrs.existed === true; // proposal targeted an existing member (edit) vs a fresh create
279
+ let currentSig = null;
280
+ try {
281
+ const st = await stat(canonical);
282
+ currentSig = `${st.mtimeMs}:${st.size}`;
283
+ }
284
+ catch (err) {
285
+ if (err.code !== "ENOENT")
286
+ throw err;
287
+ }
288
+ // Edit → CAS on the snapshot signature (a null baseSig is an un-materialized member with no
289
+ // recorded snapshot — no baseline to guard, so the write proceeds). Create → the proposal
290
+ // assumed an absent path, so any file present now is the conflict.
291
+ const conflict = existed ? (baseSig !== null && currentSig !== baseSig) : (currentSig !== null);
292
+ if (conflict) {
293
+ return { status: 409, outcome: `write_conflict: ${relPath} changed on disk since the proposal (expected ${existed ? baseSig : "absent"}, found ${currentSig ?? "absent"}) — re-read and re-propose` };
294
+ }
295
+ try {
296
+ // A write into a not-yet-existing subtree creates it — an accepted proposal must not
297
+ // die on a missing parent dir (the fan-out digest: tasks/… write_failed on ENOENT).
298
+ await mkdir(dirname(canonical), { recursive: true });
299
+ await writeFile(canonical, patched, "utf8");
300
+ }
301
+ catch (err) {
302
+ return {
303
+ status: 500,
304
+ outcome: "write_failed",
305
+ body: err instanceof Error ? err.message : String(err),
306
+ };
307
+ }
308
+ // Register the file as an entry so it appears in the manifest
309
+ // under file:///<relPath> and is READ-able. mimetype is best-effort
310
+ // by file extension; .md → text/markdown, anything else → text/plain.
311
+ const mimetype = relPath.endsWith(".md") ? "text/markdown" : "text/plain";
312
+ try {
313
+ // scheme=null: the "file" scheme is a routing internal only;
314
+ // never stored. Entries.scheme stays NULL for filesystem rows
315
+ // so render-time bare-path output requires no special case.
316
+ const { entryId } = await EntryCrud.writeEntry(relPath, {
317
+ channels: { body: { content: patched, mimetype } },
318
+ tags: [],
319
+ }, ctx, null);
320
+ // Restamp synced_sig to the landed write so the next reconcile recognizes our own
321
+ // write as the synced state — not an FsDivergence narrated back at the model.
322
+ if (entryId !== null) {
323
+ const landed = await stat(canonical);
324
+ await ctx.db.crud_set_synced_sig.run({ entry_id: entryId, synced_sig: `${landed.mtimeMs}:${landed.size}` });
325
+ }
326
+ }
327
+ catch (err) {
328
+ // Disk write succeeded; entry registration failed. Surface
329
+ // the write as 200 (file is on disk) but log the failure —
330
+ // the manifest just won't reflect it until next time.
331
+ // (Could harden to roll back the file write; for v0,
332
+ // disk-truth-of-record wins.)
333
+ return {
334
+ status: 200,
335
+ outcome: "materialize_failed",
336
+ body: err instanceof Error ? err.message : String(err),
337
+ };
338
+ }
339
+ return { status: 200, body: attrs.span };
340
+ }
341
+ // deleteEntry — the KILL / MOVE-source counterpart of writeEntry. Deleting a host file is
342
+ // DESTRUCTIVE, so it PROPOSES for review (202), exactly as edit() does — never an ungated unlink.
343
+ // §membership — only a MEMBER reaches the proposal; a non-member is invisible (404), so untracked
344
+ // disk is never probed or touched. applyResolution unlinks + deregisters on accept.
345
+ async deleteEntry(pathname, ctx) {
346
+ const root = await loadSessionRoot(ctx.db, ctx.sessionId);
347
+ if (root === null)
348
+ return { status: 400 };
349
+ const rel = File.#toMemberKey(pathname, root);
350
+ const member = await ctx.db.crud_find_session_entry.get({ session_id: ctx.sessionId, scheme: null, pathname: rel });
351
+ if (member === undefined)
352
+ return { status: 404 };
353
+ return { status: 202, attrs: { deletePath: rel } };
354
+ }
355
+ }
356
+ //# sourceMappingURL=File.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File.js","sourceRoot":"","sources":["../../src/schemes/File.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { SchemeManifest, PlurnkSchemeContext } from "../core/scheme-types.ts";
2
+ import type { EditStatement, FindStatement, ReadStatement, SendStatement } from "@plurnk/plurnk-grammar";
3
+ import type { EditResult, ReadResult } from "./_entry-ops.ts";
4
+ import type { EntryData, ReadEntryResult, WriteEntryResult, DeleteEntryResult } from "./_entry-crud.ts";
5
+ import type { SendResult } from "./_entry-send.ts";
6
+ import type { FindResult } from "./_entry-find.ts";
7
+ export default class Known {
8
+ static manifest: SchemeManifest;
9
+ edit(statement: EditStatement, ctx: PlurnkSchemeContext): Promise<EditResult>;
10
+ read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<ReadResult>;
11
+ readEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<ReadEntryResult>;
12
+ writeEntry(pathname: string, entry: EntryData, ctx: PlurnkSchemeContext): Promise<WriteEntryResult>;
13
+ deleteEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<DeleteEntryResult>;
14
+ send(statement: SendStatement, ctx: PlurnkSchemeContext): Promise<SendResult>;
15
+ find(statement: FindStatement, ctx: PlurnkSchemeContext): Promise<FindResult>;
16
+ }
17
+ //# sourceMappingURL=Known.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Known.d.ts","sourceRoot":"","sources":["../../src/schemes/Known.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKzG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,KAAK;IAEtB,MAAM,CAAC,QAAQ,EAAE,cAAc,CAU7B;IAEI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAEK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAEpF;IAEK,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAExG;IAEK,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAExF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;CACJ"}
@@ -0,0 +1,40 @@
1
+ import EntryOps from "./_entry-ops.js";
2
+ import EntryCrud from "./_entry-crud.js";
3
+ import EntrySend from "./_entry-send.js";
4
+ import EntryFind from "./_entry-find.js";
5
+ export default class Known {
6
+ // A scheme declares its manifest — channels, default channel, scope, writableBy. §scheme-manifest-manifest
7
+ static manifest = {
8
+ name: "known",
9
+ channels: { body: "text/markdown" },
10
+ defaultChannel: "body",
11
+ category: "data",
12
+ scope: "session",
13
+ writableBy: ["model", "client"],
14
+ volatile: false,
15
+ modelVisible: true,
16
+ example: "<<EDIT(known:///plan.md):- [ ] step:EDIT",
17
+ };
18
+ async edit(statement, ctx) {
19
+ return EntryOps.editSessionEntry(statement, ctx, Known.manifest);
20
+ }
21
+ async read(statement, ctx) {
22
+ return EntryOps.readSessionEntry(statement, ctx, Known.manifest);
23
+ }
24
+ async readEntry(pathname, ctx) {
25
+ return EntryCrud.readEntry(pathname, ctx, Known.manifest.name);
26
+ }
27
+ async writeEntry(pathname, entry, ctx) {
28
+ return EntryCrud.writeEntry(pathname, entry, ctx, Known.manifest.name);
29
+ }
30
+ async deleteEntry(pathname, ctx) {
31
+ return EntryCrud.deleteEntry(pathname, ctx, Known.manifest.name);
32
+ }
33
+ async send(statement, ctx) {
34
+ return EntrySend.sendToSessionEntry(statement, ctx, Known.manifest.name);
35
+ }
36
+ async find(statement, ctx) {
37
+ return EntryFind.findSessionEntries(statement, ctx, Known.manifest);
38
+ }
39
+ }
40
+ //# sourceMappingURL=Known.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Known.js","sourceRoot":"","sources":["../../src/schemes/Known.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAMzC,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,2GAA2G;IAC3G,MAAM,CAAC,QAAQ,GAAmB;QAC9B,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QACnC,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/B,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,0CAA0C;KACtD,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,GAAwB;QACtD,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAgB,EAAE,GAAwB;QACzE,OAAO,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,GAAwB;QACxD,OAAO,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;CACJ"}
@@ -0,0 +1,22 @@
1
+ import type { FindStatement, FoldStatement, OpenStatement, ReadStatement } from "@plurnk/plurnk-grammar";
2
+ import type { SchemeManifest, PlurnkSchemeContext, SchemeReadResult } from "../core/scheme-types.ts";
3
+ import type { FindResult } from "./_entry-find.ts";
4
+ type OpenFoldResult = {
5
+ status: number;
6
+ matched?: number;
7
+ error?: string;
8
+ };
9
+ export default class Log {
10
+ #private;
11
+ static manifest: SchemeManifest;
12
+ read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<SchemeReadResult>;
13
+ find(statement: FindStatement, ctx: PlurnkSchemeContext): Promise<FindResult>;
14
+ open(statement: OpenStatement, ctx: PlurnkSchemeContext): Promise<OpenFoldResult>;
15
+ fold(statement: FoldStatement, ctx: PlurnkSchemeContext): Promise<OpenFoldResult>;
16
+ kill(pathname: string, _signal: number | null, ctx: PlurnkSchemeContext): Promise<{
17
+ status: number;
18
+ error?: string;
19
+ }>;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=Log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Log.d.ts","sourceRoot":"","sources":["../../src/schemes/Log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGzG,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGrG,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAErE,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAoE3E,MAAM,CAAC,OAAO,OAAO,GAAG;;IACpB,MAAM,CAAC,QAAQ,EAAE,cAAc,CAc7B;IAEI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgCxF;IAQK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsDlF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAEtF;IAGK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAEtF;IA6DK,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAK1H;CACJ"}