@plurnk/plurnk-service 1.6.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/.env.defaults +29 -42
  2. package/INSTALL.md +49 -10
  3. package/README.md +11 -1
  4. package/SPEC.md +702 -287
  5. package/digest-sql/channel-dispositions/dispositions.sql +15 -0
  6. package/digest-sql/channel-state/state.sql +6 -0
  7. package/digest-sql/curation/curation.sql +5 -0
  8. package/digest-sql/derivations/derivations.sql +4 -0
  9. package/digest-sql/embeddings/embeddings.sql +4 -0
  10. package/digest-sql/entry-dispositions/dispositions.sql +15 -0
  11. package/digest-sql/entry-state/state.sql +6 -0
  12. package/digest-sql/token-counts/token-counts.sql +2 -0
  13. package/dist/Paths.d.ts +2 -5
  14. package/dist/Paths.d.ts.map +1 -1
  15. package/dist/Paths.js +9 -21
  16. package/dist/Paths.js.map +1 -1
  17. package/dist/build-info.json +1 -1
  18. package/dist/content/read-projector.d.ts.map +1 -1
  19. package/dist/content/read-projector.js +4 -3
  20. package/dist/content/read-projector.js.map +1 -1
  21. package/dist/core/BudgetReadout.d.ts.map +1 -1
  22. package/dist/core/BudgetReadout.js +12 -22
  23. package/dist/core/BudgetReadout.js.map +1 -1
  24. package/dist/core/ChannelWrite.d.ts.map +1 -1
  25. package/dist/core/ChannelWrite.js.map +1 -1
  26. package/dist/core/ChannelWrite.sql +2 -1
  27. package/dist/core/ClientInteractions.d.ts +19 -0
  28. package/dist/core/ClientInteractions.d.ts.map +1 -0
  29. package/dist/core/ClientInteractions.js +124 -0
  30. package/dist/core/ClientInteractions.js.map +1 -0
  31. package/dist/core/ClientInteractions.sql +34 -0
  32. package/dist/core/CoreSchemeServices.d.ts +8 -2
  33. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  34. package/dist/core/CoreSchemeServices.js +7 -1
  35. package/dist/core/CoreSchemeServices.js.map +1 -1
  36. package/dist/core/Dispatcher.d.ts +9 -6
  37. package/dist/core/Dispatcher.d.ts.map +1 -1
  38. package/dist/core/Dispatcher.js +74 -125
  39. package/dist/core/Dispatcher.js.map +1 -1
  40. package/dist/core/Engine.d.ts +26 -9
  41. package/dist/core/Engine.d.ts.map +1 -1
  42. package/dist/core/Engine.js +125 -44
  43. package/dist/core/Engine.js.map +1 -1
  44. package/dist/core/Engine.sql +112 -107
  45. package/dist/core/ExecutorRegistry.d.ts +19 -5
  46. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  47. package/dist/core/ExecutorRegistry.js +144 -18
  48. package/dist/core/ExecutorRegistry.js.map +1 -1
  49. package/dist/core/HostPaths.d.ts +29 -0
  50. package/dist/core/HostPaths.d.ts.map +1 -0
  51. package/dist/core/HostPaths.js +74 -0
  52. package/dist/core/HostPaths.js.map +1 -0
  53. package/dist/core/LegacyHome.d.ts +10 -0
  54. package/dist/core/LegacyHome.d.ts.map +1 -0
  55. package/dist/core/LegacyHome.js +170 -0
  56. package/dist/core/LegacyHome.js.map +1 -0
  57. package/dist/core/LogBody.d.ts +1 -1
  58. package/dist/core/LogBody.d.ts.map +1 -1
  59. package/dist/core/LogBody.js +2 -2
  60. package/dist/core/LogBody.js.map +1 -1
  61. package/dist/core/LogEntryProjection.js +1 -1
  62. package/dist/core/LogEntryProjection.js.map +1 -1
  63. package/dist/core/LogVisibility.d.ts +28 -0
  64. package/dist/core/LogVisibility.d.ts.map +1 -0
  65. package/dist/core/LogVisibility.js +215 -0
  66. package/dist/core/LogVisibility.js.map +1 -0
  67. package/dist/core/LoopLifecycle.d.ts +1 -0
  68. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  69. package/dist/core/LoopLifecycle.js +8 -0
  70. package/dist/core/LoopLifecycle.js.map +1 -1
  71. package/dist/core/LoopLifecycle.sql +10 -0
  72. package/dist/core/OperatorConfig.d.ts +6 -0
  73. package/dist/core/OperatorConfig.d.ts.map +1 -0
  74. package/dist/core/OperatorConfig.js +92 -0
  75. package/dist/core/OperatorConfig.js.map +1 -0
  76. package/dist/core/OverflowTurn.d.ts +11 -0
  77. package/dist/core/OverflowTurn.d.ts.map +1 -0
  78. package/dist/core/OverflowTurn.js +77 -0
  79. package/dist/core/OverflowTurn.js.map +1 -0
  80. package/dist/core/Owner.js +2 -2
  81. package/dist/core/Owner.js.map +1 -1
  82. package/dist/core/PacketBuilder.d.ts +3 -15
  83. package/dist/core/PacketBuilder.d.ts.map +1 -1
  84. package/dist/core/PacketBuilder.js +52 -113
  85. package/dist/core/PacketBuilder.js.map +1 -1
  86. package/dist/core/ProblemLog.js +1 -1
  87. package/dist/core/ProblemLog.js.map +1 -1
  88. package/dist/core/ProposalLifecycle.d.ts +3 -1
  89. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  90. package/dist/core/ProposalLifecycle.js +9 -26
  91. package/dist/core/ProposalLifecycle.js.map +1 -1
  92. package/dist/core/ProviderInstantiate.d.ts +9 -5
  93. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  94. package/dist/core/ProviderInstantiate.js +99 -104
  95. package/dist/core/ProviderInstantiate.js.map +1 -1
  96. package/dist/core/ResourceMutations.d.ts +2 -2
  97. package/dist/core/ResourceMutations.d.ts.map +1 -1
  98. package/dist/core/ResourceMutations.js +13 -11
  99. package/dist/core/ResourceMutations.js.map +1 -1
  100. package/dist/core/SchemeRegistry.d.ts +18 -11
  101. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  102. package/dist/core/SchemeRegistry.js +201 -53
  103. package/dist/core/SchemeRegistry.js.map +1 -1
  104. package/dist/core/ToolResources.d.ts +19 -0
  105. package/dist/core/ToolResources.d.ts.map +1 -0
  106. package/dist/core/ToolResources.js +122 -0
  107. package/dist/core/ToolResources.js.map +1 -0
  108. package/dist/core/Turn.d.ts +27 -0
  109. package/dist/core/Turn.d.ts.map +1 -0
  110. package/dist/core/Turn.js +43 -0
  111. package/dist/core/Turn.js.map +1 -0
  112. package/dist/core/Turn.sql +72 -0
  113. package/dist/core/TurnOps.d.ts +7 -0
  114. package/dist/core/TurnOps.d.ts.map +1 -0
  115. package/dist/core/TurnOps.js +63 -0
  116. package/dist/core/TurnOps.js.map +1 -0
  117. package/dist/core/TurnRunner.d.ts +15 -5
  118. package/dist/core/TurnRunner.d.ts.map +1 -1
  119. package/dist/core/TurnRunner.js +1050 -900
  120. package/dist/core/TurnRunner.js.map +1 -1
  121. package/dist/core/WorkerName.d.ts +1 -1
  122. package/dist/core/WorkerName.d.ts.map +1 -1
  123. package/dist/core/WorkspaceGate.d.ts +1 -0
  124. package/dist/core/WorkspaceGate.d.ts.map +1 -1
  125. package/dist/core/WorkspaceGate.js +39 -0
  126. package/dist/core/WorkspaceGate.js.map +1 -1
  127. package/dist/core/caps/CoreInteractionCaps.d.ts +9 -0
  128. package/dist/core/caps/CoreInteractionCaps.d.ts.map +1 -0
  129. package/dist/core/caps/CoreInteractionCaps.js +14 -0
  130. package/dist/core/caps/CoreInteractionCaps.js.map +1 -0
  131. package/dist/core/caps/SchemeCtxImpl.d.ts +2 -1
  132. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  133. package/dist/core/caps/SchemeCtxImpl.js +3 -0
  134. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  135. package/dist/core/env-defaults.d.ts.map +1 -1
  136. package/dist/core/env-defaults.js +7 -5
  137. package/dist/core/env-defaults.js.map +1 -1
  138. package/dist/core/fork.d.ts.map +1 -1
  139. package/dist/core/fork.js +15 -4
  140. package/dist/core/fork.js.map +1 -1
  141. package/dist/core/fork.sql +57 -27
  142. package/dist/core/git-env.d.ts +0 -1
  143. package/dist/core/git-env.d.ts.map +1 -1
  144. package/dist/core/git-env.js +0 -3
  145. package/dist/core/git-env.js.map +1 -1
  146. package/dist/core/git-membership.d.ts.map +1 -1
  147. package/dist/core/git-membership.js +10 -26
  148. package/dist/core/git-membership.js.map +1 -1
  149. package/dist/core/git-state.d.ts.map +1 -1
  150. package/dist/core/git-state.js +13 -14
  151. package/dist/core/git-state.js.map +1 -1
  152. package/dist/core/operation-target-groups.d.ts +3 -0
  153. package/dist/core/operation-target-groups.d.ts.map +1 -0
  154. package/dist/core/operation-target-groups.js +53 -0
  155. package/dist/core/operation-target-groups.js.map +1 -0
  156. package/dist/core/packet-inject.d.ts +0 -1
  157. package/dist/core/packet-inject.d.ts.map +1 -1
  158. package/dist/core/packet-inject.js +6 -13
  159. package/dist/core/packet-inject.js.map +1 -1
  160. package/dist/core/packet-wire.d.ts +4 -0
  161. package/dist/core/packet-wire.d.ts.map +1 -1
  162. package/dist/core/packet-wire.js +208 -44
  163. package/dist/core/packet-wire.js.map +1 -1
  164. package/dist/core/plurnk-uri.d.ts +1 -1
  165. package/dist/core/plurnk-uri.d.ts.map +1 -1
  166. package/dist/core/plurnk-uri.js +3 -3
  167. package/dist/core/plurnk-uri.js.map +1 -1
  168. package/dist/core/scheme-types.d.ts +2 -1
  169. package/dist/core/scheme-types.d.ts.map +1 -1
  170. package/dist/core/scheme-types.js.map +1 -1
  171. package/dist/core/teaching.d.ts.map +1 -1
  172. package/dist/core/teaching.js +4 -5
  173. package/dist/core/teaching.js.map +1 -1
  174. package/dist/core/worker-settings.d.ts +9 -0
  175. package/dist/core/worker-settings.d.ts.map +1 -0
  176. package/dist/core/worker-settings.js +25 -0
  177. package/dist/core/worker-settings.js.map +1 -0
  178. package/dist/core/workspace-settings.d.ts +0 -11
  179. package/dist/core/workspace-settings.d.ts.map +1 -1
  180. package/dist/core/workspace-settings.js +3 -47
  181. package/dist/core/workspace-settings.js.map +1 -1
  182. package/dist/digest/Digest.d.ts.map +1 -1
  183. package/dist/digest/Digest.js +164 -92
  184. package/dist/digest/Digest.js.map +1 -1
  185. package/dist/digest/digest.sql +8 -2
  186. package/dist/observe/genai.d.ts +9 -0
  187. package/dist/observe/genai.d.ts.map +1 -0
  188. package/dist/observe/genai.js +31 -0
  189. package/dist/observe/genai.js.map +1 -0
  190. package/dist/observe/spans.d.ts +3 -3
  191. package/dist/observe/spans.d.ts.map +1 -1
  192. package/dist/observe/spans.js +20 -5
  193. package/dist/observe/spans.js.map +1 -1
  194. package/dist/schemes/EffectPolicy.d.ts +3 -0
  195. package/dist/schemes/EffectPolicy.d.ts.map +1 -1
  196. package/dist/schemes/EffectPolicy.js +38 -6
  197. package/dist/schemes/EffectPolicy.js.map +1 -1
  198. package/dist/schemes/Exec.d.ts.map +1 -1
  199. package/dist/schemes/Exec.js +82 -18
  200. package/dist/schemes/Exec.js.map +1 -1
  201. package/dist/schemes/Log.d.ts +6 -2
  202. package/dist/schemes/Log.d.ts.map +1 -1
  203. package/dist/schemes/Log.js +73 -22
  204. package/dist/schemes/Log.js.map +1 -1
  205. package/dist/schemes/Log.sql +25 -7
  206. package/dist/schemes/Prompt.d.ts.map +1 -1
  207. package/dist/schemes/Prompt.js +1 -2
  208. package/dist/schemes/Prompt.js.map +1 -1
  209. package/dist/schemes/QuestionTool.d.ts +10 -0
  210. package/dist/schemes/QuestionTool.d.ts.map +1 -0
  211. package/dist/schemes/QuestionTool.js +81 -0
  212. package/dist/schemes/QuestionTool.js.map +1 -0
  213. package/dist/schemes/Skill.d.ts.map +1 -1
  214. package/dist/schemes/Skill.js +4 -1
  215. package/dist/schemes/Skill.js.map +1 -1
  216. package/dist/schemes/Worker.d.ts.map +1 -1
  217. package/dist/schemes/Worker.js +20 -3
  218. package/dist/schemes/Worker.js.map +1 -1
  219. package/dist/schemes/_entry-crud.sql +19 -1
  220. package/dist/schemes/_entry-find.d.ts +5 -3
  221. package/dist/schemes/_entry-find.d.ts.map +1 -1
  222. package/dist/schemes/_entry-find.js +102 -22
  223. package/dist/schemes/_entry-find.js.map +1 -1
  224. package/dist/schemes/_entry-find.sql +8 -6
  225. package/dist/schemes/_entry-graph.sql +2 -6
  226. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  227. package/dist/schemes/_entry-manifest.js +12 -1
  228. package/dist/schemes/_entry-manifest.js.map +1 -1
  229. package/dist/schemes/_search-index.d.ts.map +1 -1
  230. package/dist/schemes/_search-index.js +37 -25
  231. package/dist/schemes/_search-index.js.map +1 -1
  232. package/dist/server/Daemon.d.ts +69 -12
  233. package/dist/server/Daemon.d.ts.map +1 -1
  234. package/dist/server/Daemon.js +737 -133
  235. package/dist/server/Daemon.js.map +1 -1
  236. package/dist/server/DaemonModule.d.ts +31 -3
  237. package/dist/server/DaemonModule.d.ts.map +1 -1
  238. package/dist/server/DrainSupervisor.d.ts +12 -9
  239. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  240. package/dist/server/DrainSupervisor.js +59 -10
  241. package/dist/server/DrainSupervisor.js.map +1 -1
  242. package/dist/server/client-input.d.ts +7 -2
  243. package/dist/server/client-input.d.ts.map +1 -1
  244. package/dist/server/client-input.js +65 -34
  245. package/dist/server/client-input.js.map +1 -1
  246. package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
  247. package/dist/server/dispatch-as-plurnk.js +28 -6
  248. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  249. package/dist/server/drain.sql +26 -11
  250. package/dist/server/envelope.d.ts +1 -1
  251. package/dist/server/envelope.d.ts.map +1 -1
  252. package/dist/server/envelope.js +4 -4
  253. package/dist/server/envelope.js.map +1 -1
  254. package/dist/server/envelope.sql +25 -1
  255. package/dist/server/lifecycle-recovery.sql +17 -1
  256. package/dist/server/logEntry.d.ts +2 -1
  257. package/dist/server/logEntry.d.ts.map +1 -1
  258. package/dist/server/logEntry.js +3 -2
  259. package/dist/server/logEntry.js.map +1 -1
  260. package/dist/server/logEntry.sql +7 -0
  261. package/dist/server/loop-model.d.ts +2 -2
  262. package/dist/server/loop-model.d.ts.map +1 -1
  263. package/dist/server/loop-model.js +23 -33
  264. package/dist/server/loop-model.js.map +1 -1
  265. package/dist/server/loopDocs.d.ts +1 -0
  266. package/dist/server/loopDocs.d.ts.map +1 -1
  267. package/dist/server/loopDocs.js +94 -14
  268. package/dist/server/loopDocs.js.map +1 -1
  269. package/dist/server/loopDocs.sql +12 -0
  270. package/dist/server/model-catalog.d.ts +3 -0
  271. package/dist/server/model-catalog.d.ts.map +1 -0
  272. package/dist/server/model-catalog.js +83 -0
  273. package/dist/server/model-catalog.js.map +1 -0
  274. package/dist/server/model-route.d.ts +7 -0
  275. package/dist/server/model-route.d.ts.map +1 -0
  276. package/dist/server/model-route.js +47 -0
  277. package/dist/server/model-route.js.map +1 -0
  278. package/dist/server/module-discovery.d.ts +13 -0
  279. package/dist/server/module-discovery.d.ts.map +1 -0
  280. package/dist/server/module-discovery.js +78 -0
  281. package/dist/server/module-discovery.js.map +1 -0
  282. package/dist/server/skillDocs.d.ts +9 -0
  283. package/dist/server/skillDocs.d.ts.map +1 -0
  284. package/dist/server/skillDocs.js +212 -0
  285. package/dist/server/skillDocs.js.map +1 -0
  286. package/dist/server/skillDocs.sql +14 -0
  287. package/dist/server/workspace-capabilities.sql +19 -0
  288. package/dist/service.d.ts.map +1 -1
  289. package/dist/service.js +182 -123
  290. package/dist/service.js.map +1 -1
  291. package/migrations/001_schema.sql +455 -65
  292. package/package.json +38 -37
  293. package/dist/core/ExecutableTools.d.ts +0 -10
  294. package/dist/core/ExecutableTools.d.ts.map +0 -1
  295. package/dist/core/ExecutableTools.js +0 -41
  296. package/dist/core/ExecutableTools.js.map +0 -1
  297. package/dist/core/JournalTurn.d.ts +0 -9
  298. package/dist/core/JournalTurn.d.ts.map +0 -1
  299. package/dist/core/JournalTurn.js +0 -14
  300. package/dist/core/JournalTurn.js.map +0 -1
  301. package/dist/core/JournalTurn.sql +0 -10
  302. package/dist/core/git-iso.d.ts +0 -13
  303. package/dist/core/git-iso.d.ts.map +0 -1
  304. package/dist/core/git-iso.js +0 -267
  305. package/dist/core/git-iso.js.map +0 -1
  306. package/dist/core/search-gate.d.ts +0 -17
  307. package/dist/core/search-gate.d.ts.map +0 -1
  308. package/dist/core/search-gate.js +0 -77
  309. package/dist/core/search-gate.js.map +0 -1
  310. package/dist/digest/Digest.sql +0 -1
@@ -0,0 +1,47 @@
1
+ // {§worker-model-selection} — create-or-lookup for resolved model routes and the
2
+ // inverse lookup. The owning boundary resolves aliases to a complete route before
3
+ // persistence; no path re-resolves a historical selection through a possibly
4
+ // changed alias declaration.
5
+ export const routeForSpec = async (db, spec) => {
6
+ if (spec === null)
7
+ return null;
8
+ const alias = spec.alias ?? null;
9
+ const baseUrl = spec.baseUrl ?? null;
10
+ const existing = await db.model_route_lookup.get({
11
+ alias,
12
+ provider: spec.provider,
13
+ model: spec.model,
14
+ base_url: baseUrl,
15
+ });
16
+ if (existing !== undefined)
17
+ return existing.id;
18
+ const created = await db.model_route_create.get({
19
+ alias,
20
+ provider: spec.provider,
21
+ model: spec.model,
22
+ base_url: baseUrl,
23
+ });
24
+ if (created === undefined)
25
+ throw new Error("model_route_create returned no row");
26
+ return created.id;
27
+ };
28
+ export const specForRoute = async (db, routeId) => {
29
+ if (routeId === null)
30
+ return null;
31
+ const row = await db.model_route_by_id.get({ id: routeId });
32
+ if (row === undefined)
33
+ throw new Error(`model_route ${routeId} is missing`);
34
+ return {
35
+ ...(row.alias === null ? {} : { alias: row.alias }),
36
+ provider: row.provider,
37
+ model: row.model,
38
+ ...(row.base_url === null ? {} : { baseUrl: row.base_url }),
39
+ };
40
+ };
41
+ // The provider endpoint is durable construction state, not client model identity.
42
+ export const projectModelRoute = (spec) => ({
43
+ ...(spec.alias === undefined ? {} : { alias: spec.alias }),
44
+ provider: spec.provider,
45
+ model: spec.model,
46
+ });
47
+ //# sourceMappingURL=model-route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-route.js","sourceRoot":"","sources":["../../src/server/model-route.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,kFAAkF;AAClF,6EAA6E;AAC7E,6BAA6B;AAM7B,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,EAAM,EAAE,IAAyB,EAA0B,EAAE;IAC5F,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAiB;QAC7D,KAAK;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,OAAO;KACpB,CAAC,CAAC;IACH,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAiB;QAC5D,KAAK;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,OAAO;KACpB,CAAC,CAAC;IACH,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACjF,OAAO,OAAO,CAAC,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,EAAM,EAAE,OAAsB,EAAgC,EAAE;IAC/F,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAqF,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAChJ,IAAI,GAAG,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,aAAa,CAAC,CAAC;IAC5E,OAAO;QACH,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;QACnD,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;KAC9D,CAAC;AACN,CAAC,CAAC;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAkB,EAAc,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1D,QAAQ,EAAE,IAAI,CAAC,QAAQ;IACvB,KAAK,EAAE,IAAI,CAAC,KAAK;CACpB,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { DaemonModule } from "./DaemonModule.ts";
2
+ import type { CoreSeam } from "./Daemon.ts";
3
+ export declare const discoverDaemonModules: (options?: {
4
+ cwd?: string;
5
+ packageDirs?: Array<{
6
+ dir: string;
7
+ name: string;
8
+ }>;
9
+ }) => Promise<{
10
+ readonly modules: ReadonlyArray<DaemonModule<CoreSeam>>;
11
+ readonly skipped: readonly string[];
12
+ }>;
13
+ //# sourceMappingURL=module-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-discovery.d.ts","sourceRoot":"","sources":["../../src/server/module-discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA6C5C,eAAO,MAAM,qBAAqB,aACrB;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,KAC9E,OAAO,CAAC;IAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAwB1G,CAAC"}
@@ -0,0 +1,78 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { join } from "node:path";
10
+ import { pathToFileURL } from "node:url";
11
+ import fs from "node:fs/promises";
12
+ import Meta from "@plurnk/plurnk-meta";
13
+ // {§module-discovery} — third-party daemon-module composition. A package
14
+ // declares `plurnk: { kind: "module", module: "<export-subpath>" }`; the export
15
+ // is one DaemonModule (an object, or a no-arg factory returning one).
16
+ // Discovery mirrors the executor family ({§plugin-discovery}): scope-agnostic
17
+ // package scan, trust gate ({§plugin-trust-boundary}), lazy import.
18
+ //
19
+ // The service's explicit composition — the AG-UI, hooks, and MCP modules —
20
+ // carries init options and is wired in service.ts; discovery never duplicates
21
+ // those packages.
22
+ const EXPLICIT_COMPOSITION = new Set([
23
+ "@plurnk/plurnk-agui",
24
+ "@plurnk/plurnk-hooks",
25
+ "@plurnk/plurnk-mcp",
26
+ ]);
27
+ const readManifest = async (dir) => {
28
+ let raw;
29
+ try {
30
+ raw = await fs.readFile(join(dir, "package.json"), "utf8");
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ let pkg;
36
+ try {
37
+ pkg = JSON.parse(raw);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ const plurnk = pkg.plurnk;
43
+ if (!Meta.declaresKind(plurnk, "module"))
44
+ return null;
45
+ const moduleSubpath = plurnk.module;
46
+ if (typeof moduleSubpath !== "string" || moduleSubpath.length === 0)
47
+ return null;
48
+ const packageName = typeof pkg.name === "string" && pkg.name.length > 0 ? pkg.name : null;
49
+ if (packageName === null)
50
+ return null;
51
+ return { packageName, module: moduleSubpath };
52
+ };
53
+ export const discoverDaemonModules = async (options = {}) => {
54
+ const dirs = options.packageDirs ?? await Meta.packageDirs(join(options.cwd ?? process.cwd(), "node_modules"));
55
+ const pending = [];
56
+ const skipped = [];
57
+ for (const candidate of dirs) {
58
+ const manifest = await readManifest(candidate.dir);
59
+ if (manifest === null)
60
+ continue;
61
+ if (EXPLICIT_COMPOSITION.has(manifest.packageName))
62
+ continue;
63
+ if (!Meta.isTrusted(manifest.packageName)) {
64
+ skipped.push(manifest.packageName);
65
+ continue;
66
+ }
67
+ pending.push((async () => {
68
+ const imported = await import(__rewriteRelativeImportExtension(pathToFileURL(join(candidate.dir, manifest.module)).href));
69
+ const exported = imported.default;
70
+ if (exported === undefined) {
71
+ throw new Error(`module package '${manifest.packageName}' exports no default DaemonModule at '${manifest.module}'.`);
72
+ }
73
+ return typeof exported === "function" ? exported() : exported;
74
+ })());
75
+ }
76
+ return { modules: await Promise.all(pending), skipped };
77
+ };
78
+ //# sourceMappingURL=module-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-discovery.js","sourceRoot":"","sources":["../../src/server/module-discovery.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,qBAAqB,CAAC;AAIvC,yEAAyE;AACzE,gFAAgF;AAChF,sEAAsE;AACtE,8EAA8E;AAC9E,oEAAoE;AACpE,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,kBAAkB;AAElB,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACjC,qBAAqB;IACrB,sBAAsB;IACtB,oBAAoB;CACvB,CAAC,CAAC;AAOH,MAAM,YAAY,GAAG,KAAK,EAAE,GAAW,EAAkC,EAAE;IACvE,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACD,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,aAAa,GAAI,MAA+B,CAAC,MAAM,CAAC;IAC9D,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACjF,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACtC,OAAO,GAAyE,EAAE,EACuB,EAAE;IAC3G,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IAC/G,MAAM,OAAO,GAA2C,EAAE,CAAC;IAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,QAAQ,KAAK,IAAI;YAAE,SAAS;QAChC,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,SAAS;QAC7D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACnC,SAAS;QACb,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,IAAqC,EAAE;YACtD,MAAM,QAAQ,GAAG,MAAM,MAAM,kCAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAErF,CAAC;YACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;YAClC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,WAAW,yCAAyC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;YACzH,CAAC;YACD,OAAO,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClE,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;AAC5D,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type Engine from "../core/Engine.ts";
2
+ import type { Db } from "../core/Db.ts";
3
+ import HostPaths from "../core/HostPaths.ts";
4
+ export default class SkillDocs {
5
+ #private;
6
+ static refreshIfChanged(engine: Engine, db: Db, workspaceId: number, hostPaths?: HostPaths): Promise<void>;
7
+ static materialize(engine: Engine, db: Db, workspaceId: number, hostPaths?: HostPaths): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=skillDocs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillDocs.d.ts","sourceRoot":"","sources":["../../src/server/skillDocs.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAoI7C,MAAM,CAAC,OAAO,OAAO,SAAS;;IAiD1B,OAAa,gBAAgB,CACzB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,SAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CAMf;IAED,OAAa,WAAW,CACpB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,SAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CAIf;CAoCJ"}
@@ -0,0 +1,212 @@
1
+ // {§skills-materialization} — standard Agent Skills from the project, shared
2
+ // user root, and exact package bundle become kernel-owned pull-docs. This runs
3
+ // when a workspace boots and immediately before a changed filesystem can shape
4
+ // the next model turn, never as a per-worker ritual.
5
+ import { createHash } from "node:crypto";
6
+ import { readdir, readFile } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ import { UNKNOWN_POSITION, } from "@plurnk/plurnk-contracts";
9
+ import { parse as parseYaml } from "yaml";
10
+ import HostPaths from "../core/HostPaths.js";
11
+ import Owner from "../core/Owner.js";
12
+ import Paths from "../Paths.js";
13
+ import DispatchAsPlurnk from "./dispatch-as-plurnk.js";
14
+ const SKILLS_PREFIX_LENGTH = "/skills/".length;
15
+ const SKILL_NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
16
+ const skillPath = (segment) => ({
17
+ kind: "url",
18
+ raw: `worker://plurnk/skills/${segment}`,
19
+ scheme: "worker",
20
+ username: null,
21
+ password: null,
22
+ hostname: "plurnk",
23
+ port: null,
24
+ pathname: `/skills/${segment}`,
25
+ query: null,
26
+ fragment: null,
27
+ });
28
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
29
+ // Agent Skills requires YAML frontmatter with name and description. Admission
30
+ // consumes those two discovery keys and preserves the instruction body.
31
+ const parseSkill = (candidate, raw) => {
32
+ const lines = raw.replace(/\r\n/gu, "\n").split("\n");
33
+ if (lines[0] !== "---") {
34
+ throw new Error(`${candidate.file}: Agent Skill requires YAML frontmatter`);
35
+ }
36
+ let bodyStart = null;
37
+ for (let index = 1; index < lines.length; index += 1) {
38
+ const line = lines[index];
39
+ if (line === "---") {
40
+ bodyStart = index + 1;
41
+ break;
42
+ }
43
+ }
44
+ if (bodyStart === null)
45
+ throw new Error(`${candidate.file}: Agent Skill frontmatter is not closed`);
46
+ let metadata;
47
+ try {
48
+ metadata = parseYaml(lines.slice(1, bodyStart - 1).join("\n"), {
49
+ maxAliasCount: 0,
50
+ uniqueKeys: true,
51
+ });
52
+ }
53
+ catch (cause) {
54
+ throw new Error(`${candidate.file}: Agent Skill frontmatter is invalid YAML`, { cause });
55
+ }
56
+ if (!isRecord(metadata))
57
+ throw new Error(`${candidate.file}: Agent Skill frontmatter must be a mapping`);
58
+ const { name, description } = metadata;
59
+ if (typeof name !== "string" || name.length === 0) {
60
+ throw new Error(`${candidate.file}: Agent Skill frontmatter requires name`);
61
+ }
62
+ if (!SKILL_NAME.test(name))
63
+ throw new Error(`${candidate.file}: Agent Skill name ${JSON.stringify(name)} is invalid`);
64
+ if (name.length > 64)
65
+ throw new Error(`${candidate.file}: Agent Skill name exceeds 64 characters`);
66
+ if (name !== candidate.folder) {
67
+ throw new Error(`${candidate.file}: Agent Skill name ${JSON.stringify(name)} must match folder ${JSON.stringify(candidate.folder)}`);
68
+ }
69
+ if (typeof description !== "string" || description.length === 0) {
70
+ throw new Error(`${candidate.file}: Agent Skill frontmatter requires description`);
71
+ }
72
+ if (description.length > 1024)
73
+ throw new Error(`${candidate.file}: Agent Skill description exceeds 1024 characters`);
74
+ return {
75
+ name,
76
+ description,
77
+ body: lines.slice(bodyStart).join("\n").trim(),
78
+ };
79
+ };
80
+ const renderSkill = (doc) => [
81
+ `# ${doc.name}`,
82
+ "",
83
+ "## Summary",
84
+ "",
85
+ doc.description,
86
+ ...(doc.body.length === 0 ? [] : ["", doc.body]),
87
+ ].join("\n");
88
+ const renderIndex = (skills) => [
89
+ "# Skills",
90
+ "",
91
+ "## Summary",
92
+ "",
93
+ "Agent Skills available to this workspace.",
94
+ ...skills.flatMap((skill) => ["", `- **${skill.name}** — ${skill.description}`]),
95
+ ].join("\n");
96
+ const readDirectoryCandidates = async (dir, source) => {
97
+ let entries;
98
+ try {
99
+ entries = await readdir(dir, { withFileTypes: true });
100
+ }
101
+ catch (cause) {
102
+ if (cause.code === "ENOENT")
103
+ return [];
104
+ throw new Error(`read ${source} Agent Skills directory ${dir} failed`, { cause });
105
+ }
106
+ return entries
107
+ .filter((entry) => entry.isDirectory())
108
+ .map((entry) => ({
109
+ folder: entry.name,
110
+ file: join(dir, entry.name, "SKILL.md"),
111
+ source,
112
+ }))
113
+ .toSorted((left, right) => left.folder.localeCompare(right.folder));
114
+ };
115
+ const readCandidate = async (candidate) => {
116
+ let raw;
117
+ try {
118
+ raw = await readFile(candidate.file, "utf8");
119
+ }
120
+ catch (cause) {
121
+ if (cause.code === "ENOENT" && candidate.source !== "bundled")
122
+ return null;
123
+ throw new Error(`read ${candidate.source} Agent Skill ${candidate.file} failed`, { cause });
124
+ }
125
+ return parseSkill(candidate, raw);
126
+ };
127
+ export default class SkillDocs {
128
+ static #signatures = new WeakMap();
129
+ static async #scan(workspaceId, db, hostPaths) {
130
+ const workspace = await db.envelope_get_workspace.get({ id: workspaceId });
131
+ const candidates = [];
132
+ if (workspace?.project_root !== null && workspace?.project_root !== undefined) {
133
+ candidates.push(await readDirectoryCandidates(hostPaths.projectSkillsDir(workspace.project_root), "project"));
134
+ }
135
+ candidates.push(await readDirectoryCandidates(hostPaths.globalSkillsDir, "global"));
136
+ candidates.push([...Paths.bundledSkills()].map(([name, file]) => ({
137
+ folder: name,
138
+ file,
139
+ source: "bundled",
140
+ })));
141
+ const skills = [];
142
+ const claimed = new Set();
143
+ for (const layer of candidates) {
144
+ for (const candidate of layer) {
145
+ if (claimed.has(candidate.folder))
146
+ continue;
147
+ const skill = await readCandidate(candidate);
148
+ if (skill === null)
149
+ continue;
150
+ claimed.add(candidate.folder);
151
+ skills.push(skill);
152
+ }
153
+ }
154
+ skills.sort((left, right) => left.name.localeCompare(right.name));
155
+ const signature = createHash("sha256")
156
+ .update(skills.map((skill) => `${skill.name}\u0000${skill.description}\u0000${skill.body}`).join("\u0001"))
157
+ .digest("hex");
158
+ return { skills, signature };
159
+ }
160
+ static #byWorkspace(db) {
161
+ const existing = SkillDocs.#signatures.get(db);
162
+ if (existing !== undefined)
163
+ return existing;
164
+ const created = new Map();
165
+ SkillDocs.#signatures.set(db, created);
166
+ return created;
167
+ }
168
+ static async refreshIfChanged(engine, db, workspaceId, hostPaths = new HostPaths()) {
169
+ const scanned = await SkillDocs.#scan(workspaceId, db, hostPaths);
170
+ const signatures = SkillDocs.#byWorkspace(db);
171
+ if (signatures.get(workspaceId) === scanned.signature)
172
+ return;
173
+ await SkillDocs.#materialize(engine, db, workspaceId, scanned);
174
+ signatures.set(workspaceId, scanned.signature);
175
+ }
176
+ static async materialize(engine, db, workspaceId, hostPaths = new HostPaths()) {
177
+ const scanned = await SkillDocs.#scan(workspaceId, db, hostPaths);
178
+ await SkillDocs.#materialize(engine, db, workspaceId, scanned);
179
+ SkillDocs.#byWorkspace(db).set(workspaceId, scanned.signature);
180
+ }
181
+ static async #materialize(engine, db, workspaceId, scanned) {
182
+ const { skills } = scanned;
183
+ const statements = [];
184
+ const desired = new Map([
185
+ ["index.md", renderIndex(skills)],
186
+ ...skills.map((skill) => [`${encodeURIComponent(skill.name)}.md`, renderSkill(skill)]),
187
+ ]);
188
+ const ownerId = await Owner.kernelId(db, workspaceId);
189
+ const materialized = await db.skill_docs_materialized.all({
190
+ workspace_id: workspaceId,
191
+ owner_id: ownerId,
192
+ });
193
+ for (const { pathname } of materialized) {
194
+ if (desired.has(pathname.slice(SKILLS_PREFIX_LENGTH)))
195
+ continue;
196
+ statements.push({
197
+ op: "SEND", delimiter: "", annotation: null, signal: 410,
198
+ target: skillPath(pathname.slice(SKILLS_PREFIX_LENGTH)),
199
+ lineMarker: null, body: null, position: UNKNOWN_POSITION,
200
+ });
201
+ }
202
+ for (const [segment, content] of desired) {
203
+ statements.push({
204
+ op: "EDIT", delimiter: "", annotation: null, signal: null,
205
+ target: skillPath(segment),
206
+ lineMarker: { marks: [1, -1] }, body: content, position: UNKNOWN_POSITION,
207
+ });
208
+ }
209
+ await DispatchAsPlurnk.dispatch(engine, db, workspaceId, statements);
210
+ }
211
+ }
212
+ //# sourceMappingURL=skillDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillDocs.js","sourceRoot":"","sources":["../../src/server/skillDocs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ -- Workspace authored-skills reconciliation ({§skills-materialization}).
2
+ -- Mirrors loopDocs.sql's tracking pattern: kernel-owned worker://plurnk
3
+ -- entries whose pathnames carry the skills prefix, EXCLUDING the
4
+ -- kernel-generated /skills/plurnk/ namespace.
5
+
6
+ -- PREP: skill_docs_materialized
7
+ SELECT pathname
8
+ FROM entries
9
+ WHERE workspace_id = $workspace_id
10
+ AND owner_id = $owner_id
11
+ AND scheme = 'worker'
12
+ AND substr(pathname, 1, 8) = '/skills/'
13
+ AND substr(pathname, 1, 15) <> '/skills/plurnk/'
14
+ ORDER BY pathname;
@@ -0,0 +1,19 @@
1
+ -- Durable module-owned workspace state. {§module-workspace-state}
2
+
3
+ -- PREP: workspace_module_state_get
4
+ SELECT state
5
+ FROM workspace_module_state
6
+ WHERE workspace_id = $workspace_id
7
+ AND namespace_owner = $namespace_owner;
8
+
9
+ -- PREP: workspace_module_state_put
10
+ INSERT INTO workspace_module_state (workspace_id, namespace_owner, state)
11
+ VALUES ($workspace_id, $namespace_owner, $state)
12
+ ON CONFLICT (workspace_id, namespace_owner) DO UPDATE SET
13
+ state = excluded.state,
14
+ updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now');
15
+
16
+ -- PREP: workspace_module_state_delete
17
+ DELETE FROM workspace_module_state
18
+ WHERE workspace_id = $workspace_id
19
+ AND namespace_owner = $namespace_owner;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";AA0BA,MAAM,CAAC,OAAO,OAAO,OAAO;;IAyQxB,OAAa,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA+EjC;CACJ"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";AA8BA,MAAM,CAAC,OAAO,OAAO,OAAO;;IA8TxB,OAAa,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuGjC;CACJ"}