@noodleseed/one 0.120.1 → 0.122.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 (511) hide show
  1. package/dist/commands/auth-ops.d.ts.map +1 -1
  2. package/dist/commands/auth-ops.js +1 -0
  3. package/dist/commands/auth-ops.js.map +1 -1
  4. package/dist/commands/catalog-data-bootstrap-authoring.d.ts.map +1 -1
  5. package/dist/commands/catalog-data-bootstrap-authoring.js +98 -189
  6. package/dist/commands/catalog-data-bootstrap-authoring.js.map +1 -1
  7. package/dist/commands/mcp-apps.d.ts.map +1 -1
  8. package/dist/commands/mcp-apps.js +1 -0
  9. package/dist/commands/mcp-apps.js.map +1 -1
  10. package/dist/commands/project-setup.d.ts.map +1 -1
  11. package/dist/commands/project-setup.js +25 -5
  12. package/dist/commands/project-setup.js.map +1 -1
  13. package/dist/commands/session.d.ts.map +1 -1
  14. package/dist/commands/session.js +5 -2
  15. package/dist/commands/session.js.map +1 -1
  16. package/dist/delegated-token-exchange-preflight.d.ts.map +1 -1
  17. package/dist/delegated-token-exchange-preflight.js +1 -0
  18. package/dist/delegated-token-exchange-preflight.js.map +1 -1
  19. package/dist/deploy.d.ts.map +1 -1
  20. package/dist/deploy.js +8 -131
  21. package/dist/deploy.js.map +1 -1
  22. package/dist/index.d.ts +1 -3
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/local-compile.d.ts.map +1 -1
  27. package/dist/local-compile.js +1 -0
  28. package/dist/local-compile.js.map +1 -1
  29. package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.d.ts.map +1 -1
  30. package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -0
  31. package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js.map +1 -1
  32. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.d.ts.map +1 -1
  33. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +8 -6
  34. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  35. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  36. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +5 -0
  37. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  38. package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +4 -4
  39. package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js +9 -9
  40. package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js.map +1 -1
  41. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.d.ts.map +1 -1
  42. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.js +5 -3
  43. package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.js.map +1 -1
  44. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.d.ts.map +1 -1
  45. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +20 -0
  46. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
  47. package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.d.ts.map +1 -1
  48. package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +6 -2
  49. package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
  50. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  51. package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.d.ts +2 -1
  52. package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.d.ts.map +1 -1
  53. package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.js +11 -1
  54. package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.js.map +1 -1
  55. package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-types.d.ts +16 -3
  56. package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-types.d.ts.map +1 -1
  57. package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-validation.d.ts.map +1 -1
  58. package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-validation.js +13 -4
  59. package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-validation.js.map +1 -1
  60. package/node_modules/@noodle-borg/agent-packaging/dist/index.d.ts +1 -0
  61. package/node_modules/@noodle-borg/agent-packaging/dist/index.d.ts.map +1 -1
  62. package/node_modules/@noodle-borg/agent-packaging/dist/index.js +1 -0
  63. package/node_modules/@noodle-borg/agent-packaging/dist/index.js.map +1 -1
  64. package/node_modules/@noodle-borg/agent-packaging/dist/product-skill-validation.d.ts.map +1 -1
  65. package/node_modules/@noodle-borg/agent-packaging/dist/product-skill-validation.js +4 -3
  66. package/node_modules/@noodle-borg/agent-packaging/dist/product-skill-validation.js.map +1 -1
  67. package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
  68. package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +4 -3
  69. package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts.map +1 -1
  70. package/node_modules/@noodle-borg/authoring/dist/assistant.js.map +1 -1
  71. package/node_modules/@noodle-borg/authoring/dist/distribution.d.ts +17 -3
  72. package/node_modules/@noodle-borg/authoring/dist/distribution.d.ts.map +1 -1
  73. package/node_modules/@noodle-borg/authoring/dist/distribution.js.map +1 -1
  74. package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -1
  75. package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -1
  76. package/node_modules/@noodle-borg/authoring/dist/index.js +1 -0
  77. package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -1
  78. package/node_modules/@noodle-borg/authoring/dist/knowledge.d.ts +70 -0
  79. package/node_modules/@noodle-borg/authoring/dist/knowledge.d.ts.map +1 -0
  80. package/node_modules/@noodle-borg/authoring/dist/knowledge.js +50 -0
  81. package/node_modules/@noodle-borg/authoring/dist/knowledge.js.map +1 -0
  82. package/node_modules/@noodle-borg/authoring/dist/load-authored.d.ts +24 -0
  83. package/node_modules/@noodle-borg/authoring/dist/load-authored.d.ts.map +1 -0
  84. package/node_modules/@noodle-borg/authoring/dist/load-authored.js +141 -0
  85. package/node_modules/@noodle-borg/authoring/dist/load-authored.js.map +1 -0
  86. package/node_modules/@noodle-borg/authoring/dist/react/components.d.ts +3 -3
  87. package/node_modules/@noodle-borg/authoring/dist/react/native-components.d.ts +2 -2
  88. package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -0
  89. package/node_modules/@noodle-borg/authoring/dist/server.d.ts.map +1 -1
  90. package/node_modules/@noodle-borg/authoring/dist/server.js +4 -0
  91. package/node_modules/@noodle-borg/authoring/dist/server.js.map +1 -1
  92. package/node_modules/@noodle-borg/authoring/package.json +5 -0
  93. package/node_modules/@noodle-borg/brand-kit/dist/index.d.ts +8 -0
  94. package/node_modules/@noodle-borg/brand-kit/dist/index.d.ts.map +1 -0
  95. package/node_modules/@noodle-borg/brand-kit/dist/index.js +8 -0
  96. package/node_modules/@noodle-borg/brand-kit/dist/index.js.map +1 -0
  97. package/node_modules/@noodle-borg/{compiler/dist/widget-palette.d.ts → brand-kit/dist/palette.d.ts} +1 -1
  98. package/node_modules/@noodle-borg/brand-kit/dist/palette.d.ts.map +1 -0
  99. package/node_modules/@noodle-borg/{compiler/dist/widget-palette.js → brand-kit/dist/palette.js} +1 -1
  100. package/node_modules/@noodle-borg/brand-kit/dist/palette.js.map +1 -0
  101. package/node_modules/@noodle-borg/{compiler/dist/widget-ui-style.d.ts → brand-kit/dist/ui-style.d.ts} +1 -1
  102. package/node_modules/@noodle-borg/brand-kit/dist/ui-style.d.ts.map +1 -0
  103. package/node_modules/@noodle-borg/{compiler/dist/widget-ui-style.js → brand-kit/dist/ui-style.js} +1 -1
  104. package/node_modules/@noodle-borg/brand-kit/dist/ui-style.js.map +1 -0
  105. package/node_modules/@noodle-borg/brand-kit/package.json +28 -0
  106. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.d.ts +2 -1
  107. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.d.ts.map +1 -1
  108. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
  109. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js.map +1 -1
  110. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +3 -0
  111. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts.map +1 -1
  112. package/node_modules/@noodle-borg/compiler/dist/artifact/types.js.map +1 -1
  113. package/node_modules/@noodle-borg/compiler/dist/branding.d.ts.map +1 -1
  114. package/node_modules/@noodle-borg/compiler/dist/branding.js +1 -1
  115. package/node_modules/@noodle-borg/compiler/dist/branding.js.map +1 -1
  116. package/node_modules/@noodle-borg/compiler/dist/compile.d.ts +8 -0
  117. package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -1
  118. package/node_modules/@noodle-borg/compiler/dist/compile.js +8 -1
  119. package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -1
  120. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
  121. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts.map +1 -1
  122. package/node_modules/@noodle-borg/compiler/dist/index.d.ts +1 -1
  123. package/node_modules/@noodle-borg/compiler/dist/index.d.ts.map +1 -1
  124. package/node_modules/@noodle-borg/compiler/dist/index.js +1 -1
  125. package/node_modules/@noodle-borg/compiler/dist/index.js.map +1 -1
  126. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +36 -0
  127. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
  128. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +7 -1
  129. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -1
  130. package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.d.ts +4 -0
  131. package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.d.ts.map +1 -1
  132. package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.js +1 -0
  133. package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.js.map +1 -1
  134. package/node_modules/@noodle-borg/compiler/dist/widget-emit.d.ts +1 -1
  135. package/node_modules/@noodle-borg/compiler/dist/widget-emit.d.ts.map +1 -1
  136. package/node_modules/@noodle-borg/compiler/dist/widget-emit.js +1 -1
  137. package/node_modules/@noodle-borg/compiler/dist/widget-emit.js.map +1 -1
  138. package/node_modules/@noodle-borg/compiler/dist/widget-size-validation.d.ts +1 -1
  139. package/node_modules/@noodle-borg/compiler/dist/widget-size-validation.d.ts.map +1 -1
  140. package/node_modules/@noodle-borg/compiler/dist/widget-size-validation.js.map +1 -1
  141. package/node_modules/@noodle-borg/compiler/package.json +3 -0
  142. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts +30 -9
  143. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts.map +1 -1
  144. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js +21 -6
  145. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js.map +1 -1
  146. package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts +2 -1
  147. package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts.map +1 -1
  148. package/node_modules/@noodle-borg/developer-mcp/dist/port.js.map +1 -1
  149. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js +3 -3
  150. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js.map +1 -1
  151. package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts.map +1 -1
  152. package/node_modules/@noodle-borg/developer-mcp/dist/resources.js +10 -9
  153. package/node_modules/@noodle-borg/developer-mcp/dist/resources.js.map +1 -1
  154. package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts +4 -3
  155. package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts.map +1 -1
  156. package/node_modules/@noodle-borg/developer-mcp/dist/results.js +5 -19
  157. package/node_modules/@noodle-borg/developer-mcp/dist/results.js.map +1 -1
  158. package/node_modules/@noodle-borg/developer-mcp/dist/server.js +3 -3
  159. package/node_modules/@noodle-borg/developer-mcp/dist/server.js.map +1 -1
  160. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.d.ts.map +1 -1
  161. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js +6 -25
  162. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js.map +1 -1
  163. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts +16 -3
  164. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts.map +1 -1
  165. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js +22 -19
  166. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js.map +1 -1
  167. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.d.ts.map +1 -1
  168. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js +3 -9
  169. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js.map +1 -1
  170. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.d.ts.map +1 -1
  171. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js +15 -16
  172. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js.map +1 -1
  173. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.d.ts.map +1 -1
  174. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js +9 -17
  175. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js.map +1 -1
  176. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.d.ts.map +1 -1
  177. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js +7 -10
  178. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js.map +1 -1
  179. package/node_modules/@noodle-borg/knowledge/dist/bm25.d.ts +14 -0
  180. package/node_modules/@noodle-borg/knowledge/dist/bm25.d.ts.map +1 -0
  181. package/node_modules/@noodle-borg/knowledge/dist/bm25.js +133 -0
  182. package/node_modules/@noodle-borg/knowledge/dist/bm25.js.map +1 -0
  183. package/node_modules/@noodle-borg/knowledge/dist/budget.d.ts +61 -0
  184. package/node_modules/@noodle-borg/knowledge/dist/budget.d.ts.map +1 -0
  185. package/node_modules/@noodle-borg/knowledge/dist/budget.js +0 -0
  186. package/node_modules/@noodle-borg/knowledge/dist/budget.js.map +1 -0
  187. package/node_modules/@noodle-borg/knowledge/dist/compile.d.ts +52 -0
  188. package/node_modules/@noodle-borg/knowledge/dist/compile.d.ts.map +1 -0
  189. package/node_modules/@noodle-borg/knowledge/dist/compile.js +250 -0
  190. package/node_modules/@noodle-borg/knowledge/dist/compile.js.map +1 -0
  191. package/node_modules/@noodle-borg/knowledge/dist/conformance.d.ts +21 -0
  192. package/node_modules/@noodle-borg/knowledge/dist/conformance.d.ts.map +1 -0
  193. package/node_modules/@noodle-borg/knowledge/dist/conformance.js +225 -0
  194. package/node_modules/@noodle-borg/knowledge/dist/conformance.js.map +1 -0
  195. package/node_modules/@noodle-borg/knowledge/dist/fakes.d.ts +23 -0
  196. package/node_modules/@noodle-borg/knowledge/dist/fakes.d.ts.map +1 -0
  197. package/node_modules/@noodle-borg/knowledge/dist/fakes.js +141 -0
  198. package/node_modules/@noodle-borg/knowledge/dist/fakes.js.map +1 -0
  199. package/node_modules/@noodle-borg/knowledge/dist/fusion.d.ts +27 -0
  200. package/node_modules/@noodle-borg/knowledge/dist/fusion.d.ts.map +1 -0
  201. package/node_modules/@noodle-borg/knowledge/dist/fusion.js +119 -0
  202. package/node_modules/@noodle-borg/knowledge/dist/fusion.js.map +1 -0
  203. package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts +49 -0
  204. package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts.map +1 -0
  205. package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js +235 -0
  206. package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js.map +1 -0
  207. package/node_modules/@noodle-borg/knowledge/dist/hits.d.ts +31 -0
  208. package/node_modules/@noodle-borg/knowledge/dist/hits.d.ts.map +1 -0
  209. package/node_modules/@noodle-borg/knowledge/dist/hits.js +75 -0
  210. package/node_modules/@noodle-borg/knowledge/dist/hits.js.map +1 -0
  211. package/node_modules/@noodle-borg/knowledge/dist/index.d.ts +26 -0
  212. package/node_modules/@noodle-borg/knowledge/dist/index.d.ts.map +1 -0
  213. package/node_modules/@noodle-borg/knowledge/dist/index.js +26 -0
  214. package/node_modules/@noodle-borg/knowledge/dist/index.js.map +1 -0
  215. package/node_modules/@noodle-borg/knowledge/dist/ir.d.ts +53 -0
  216. package/node_modules/@noodle-borg/knowledge/dist/ir.d.ts.map +1 -0
  217. package/node_modules/@noodle-borg/knowledge/dist/ir.js +87 -0
  218. package/node_modules/@noodle-borg/knowledge/dist/ir.js.map +1 -0
  219. package/node_modules/@noodle-borg/knowledge/dist/limits.d.ts +19 -0
  220. package/node_modules/@noodle-borg/knowledge/dist/limits.d.ts.map +1 -0
  221. package/node_modules/@noodle-borg/knowledge/dist/limits.js +19 -0
  222. package/node_modules/@noodle-borg/knowledge/dist/limits.js.map +1 -0
  223. package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.d.ts +42 -0
  224. package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.d.ts.map +1 -0
  225. package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.js +45 -0
  226. package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.js.map +1 -0
  227. package/node_modules/@noodle-borg/knowledge/dist/ports.d.ts +56 -0
  228. package/node_modules/@noodle-borg/knowledge/dist/ports.d.ts.map +1 -0
  229. package/node_modules/@noodle-borg/knowledge/dist/ports.js +13 -0
  230. package/node_modules/@noodle-borg/knowledge/dist/ports.js.map +1 -0
  231. package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.d.ts +22 -0
  232. package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.d.ts.map +1 -0
  233. package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.js +102 -0
  234. package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.js.map +1 -0
  235. package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts +35 -0
  236. package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts.map +1 -0
  237. package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js +260 -0
  238. package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js.map +1 -0
  239. package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts +86 -0
  240. package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts.map +1 -0
  241. package/node_modules/@noodle-borg/knowledge/dist/revision-store.js +167 -0
  242. package/node_modules/@noodle-borg/knowledge/dist/revision-store.js.map +1 -0
  243. package/node_modules/@noodle-borg/knowledge/package.json +36 -0
  244. package/node_modules/@noodle-borg/module/dist/contract.d.ts +2 -0
  245. package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
  246. package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
  247. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-render.d.ts +4 -0
  248. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-render.d.ts.map +1 -0
  249. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-render.js +147 -0
  250. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-render.js.map +1 -0
  251. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-types.d.ts +14 -0
  252. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-types.d.ts.map +1 -0
  253. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-types.js +2 -0
  254. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-types.js.map +1 -0
  255. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-validation.d.ts +10 -0
  256. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-validation.d.ts.map +1 -0
  257. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-validation.js +152 -0
  258. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-validation.js.map +1 -0
  259. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector.d.ts +7 -0
  260. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector.d.ts.map +1 -0
  261. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector.js +24 -0
  262. package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector.js.map +1 -0
  263. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-distribution-command.d.ts +6 -0
  264. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-distribution-command.d.ts.map +1 -0
  265. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-distribution-command.js +260 -0
  266. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-distribution-command.js.map +1 -0
  267. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-render.d.ts +3 -0
  268. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-render.d.ts.map +1 -0
  269. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-render.js +89 -0
  270. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-render.js.map +1 -0
  271. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-validation.d.ts +3 -0
  272. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-validation.d.ts.map +1 -0
  273. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-validation.js +16 -0
  274. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-validation.js.map +1 -0
  275. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin.d.ts +5 -0
  276. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin.d.ts.map +1 -0
  277. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin.js +15 -0
  278. package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin.js.map +1 -0
  279. package/node_modules/@noodle-borg/plugin-distribution/dist/command.d.ts +3 -0
  280. package/node_modules/@noodle-borg/plugin-distribution/dist/command.d.ts.map +1 -0
  281. package/node_modules/@noodle-borg/plugin-distribution/dist/command.js +3 -0
  282. package/node_modules/@noodle-borg/plugin-distribution/dist/command.js.map +1 -0
  283. package/node_modules/@noodle-borg/plugin-distribution/dist/distribution-command-support.d.ts +37 -0
  284. package/node_modules/@noodle-borg/plugin-distribution/dist/distribution-command-support.d.ts.map +1 -0
  285. package/node_modules/@noodle-borg/plugin-distribution/dist/distribution-command-support.js +60 -0
  286. package/node_modules/@noodle-borg/plugin-distribution/dist/distribution-command-support.js.map +1 -0
  287. package/node_modules/@noodle-borg/plugin-distribution/dist/index.d.ts +2 -0
  288. package/node_modules/@noodle-borg/plugin-distribution/dist/index.d.ts.map +1 -1
  289. package/node_modules/@noodle-borg/plugin-distribution/dist/index.js +2 -0
  290. package/node_modules/@noodle-borg/plugin-distribution/dist/index.js.map +1 -1
  291. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-command.d.ts +3 -28
  292. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-command.d.ts.map +1 -1
  293. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-command.js +23 -64
  294. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-command.js.map +1 -1
  295. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-render.d.ts.map +1 -1
  296. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-render.js +3 -97
  297. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-render.js.map +1 -1
  298. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-validation.d.ts.map +1 -1
  299. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-validation.js +19 -8
  300. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-validation.js.map +1 -1
  301. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.d.ts +5 -0
  302. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.d.ts.map +1 -0
  303. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.js +147 -0
  304. package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.js.map +1 -0
  305. package/node_modules/@noodle-borg/plugin-distribution/dist/public-url.d.ts +3 -0
  306. package/node_modules/@noodle-borg/plugin-distribution/dist/public-url.d.ts.map +1 -0
  307. package/node_modules/@noodle-borg/plugin-distribution/dist/public-url.js +22 -0
  308. package/node_modules/@noodle-borg/plugin-distribution/dist/public-url.js.map +1 -0
  309. package/node_modules/@noodle-borg/plugin-distribution/package.json +2 -2
  310. package/node_modules/@noodle-borg/protocol/dist/handlers/resources.d.ts +1 -1
  311. package/node_modules/@noodle-borg/protocol/dist/handlers/resources.d.ts.map +1 -1
  312. package/node_modules/@noodle-borg/protocol/dist/handlers/resources.js +1 -1
  313. package/node_modules/@noodle-borg/protocol/dist/handlers/resources.js.map +1 -1
  314. package/node_modules/@noodle-borg/protocol/dist/v2/response-observation.d.ts +1 -1
  315. package/node_modules/@noodle-borg/protocol/dist/v2/response-observation.d.ts.map +1 -1
  316. package/node_modules/@noodle-borg/protocol/dist/v2/response-observation.js +1 -1
  317. package/node_modules/@noodle-borg/protocol/dist/v2/response-observation.js.map +1 -1
  318. package/node_modules/@noodle-borg/protocol/dist/v2/server.d.ts.map +1 -1
  319. package/node_modules/@noodle-borg/protocol/dist/v2/server.js +1 -1
  320. package/node_modules/@noodle-borg/protocol/dist/v2/server.js.map +1 -1
  321. package/node_modules/@noodle-borg/protocol/package.json +1 -0
  322. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts +6 -4
  323. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts.map +1 -1
  324. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js +13 -16
  325. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js.map +1 -1
  326. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts +3 -2
  327. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts.map +1 -1
  328. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js +66 -47
  329. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js.map +1 -1
  330. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts.map +1 -1
  331. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +15 -16
  332. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js.map +1 -1
  333. package/node_modules/@noodle-borg/service/dist/index.d.ts +2 -3
  334. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  335. package/node_modules/@noodle-borg/service/dist/index.js +1 -2
  336. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  337. package/node_modules/@noodle-borg/service/dist/main.js +0 -52
  338. package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
  339. package/node_modules/@noodle-borg/service/dist/modules/host.d.ts +2 -6
  340. package/node_modules/@noodle-borg/service/dist/modules/host.d.ts.map +1 -1
  341. package/node_modules/@noodle-borg/service/dist/modules/host.js.map +1 -1
  342. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts +0 -2
  343. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts.map +1 -1
  344. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js +0 -16
  345. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js.map +1 -1
  346. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts +3 -28
  347. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts.map +1 -1
  348. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js +8 -67
  349. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js.map +1 -1
  350. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts +0 -4
  351. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts.map +1 -1
  352. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js +1 -14
  353. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js.map +1 -1
  354. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts +1 -1
  355. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts.map +1 -1
  356. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js +45 -36
  357. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js.map +1 -1
  358. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts +2 -2
  359. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts.map +1 -1
  360. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js +20 -229
  361. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js.map +1 -1
  362. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts +3 -2
  363. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts.map +1 -1
  364. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js +70 -36
  365. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js.map +1 -1
  366. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts +17 -6
  367. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts.map +1 -1
  368. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js +98 -26
  369. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js.map +1 -1
  370. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -1
  371. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +0 -2
  372. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
  373. package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js +1 -1
  374. package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js.map +1 -1
  375. package/node_modules/@noodle-borg/service/dist/options.d.ts +1 -21
  376. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  377. package/node_modules/@noodle-borg/service/dist/routes/analytics.js +3 -3
  378. package/node_modules/@noodle-borg/service/dist/routes/analytics.js.map +1 -1
  379. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -1
  380. package/node_modules/@noodle-borg/service/dist/routes/apps.js +6 -27
  381. package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -1
  382. package/node_modules/@noodle-borg/service/dist/routes/config-values.d.ts.map +1 -1
  383. package/node_modules/@noodle-borg/service/dist/routes/config-values.js +5 -8
  384. package/node_modules/@noodle-borg/service/dist/routes/config-values.js.map +1 -1
  385. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +7 -6
  386. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
  387. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +7 -6
  388. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
  389. package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js +1 -1
  390. package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js.map +1 -1
  391. package/node_modules/@noodle-borg/service/dist/routes/deployment-package.d.ts.map +1 -1
  392. package/node_modules/@noodle-borg/service/dist/routes/deployment-package.js +2 -7
  393. package/node_modules/@noodle-borg/service/dist/routes/deployment-package.js.map +1 -1
  394. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
  395. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +7 -20
  396. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
  397. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js +1 -1
  398. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js.map +1 -1
  399. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -1
  400. package/node_modules/@noodle-borg/service/dist/routes/envs.js +4 -8
  401. package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -1
  402. package/node_modules/@noodle-borg/service/dist/routes/logs.js +1 -1
  403. package/node_modules/@noodle-borg/service/dist/routes/logs.js.map +1 -1
  404. package/node_modules/@noodle-borg/service/dist/routes/rollback.js +1 -1
  405. package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
  406. package/node_modules/@noodle-borg/service/dist/serve-options.d.ts +7 -1
  407. package/node_modules/@noodle-borg/service/dist/serve-options.d.ts.map +1 -1
  408. package/node_modules/@noodle-borg/service/dist/serve.d.ts +0 -1
  409. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  410. package/node_modules/@noodle-borg/service/dist/serve.js +22 -26
  411. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  412. package/node_modules/@noodle-borg/service/dist/service-config.d.ts +1 -1
  413. package/node_modules/@noodle-borg/service/dist/service-config.d.ts.map +1 -1
  414. package/node_modules/@noodle-borg/service/dist/service-config.js.map +1 -1
  415. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  416. package/node_modules/@noodle-borg/service/dist/service.js +1 -24
  417. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  418. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  419. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +21 -0
  420. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  421. package/node_modules/@noodle-borg/service/package.json +2 -1
  422. package/node_modules/@noodle-borg/service-modules/dist/index.d.ts +9 -0
  423. package/node_modules/@noodle-borg/service-modules/dist/index.d.ts.map +1 -0
  424. package/node_modules/@noodle-borg/service-modules/dist/index.js +9 -0
  425. package/node_modules/@noodle-borg/service-modules/dist/index.js.map +1 -0
  426. package/node_modules/@noodle-borg/service-modules/dist/loaded-module.d.ts +8 -0
  427. package/node_modules/@noodle-borg/service-modules/dist/loaded-module.d.ts.map +1 -0
  428. package/node_modules/@noodle-borg/service-modules/dist/loaded-module.js +2 -0
  429. package/node_modules/@noodle-borg/service-modules/dist/loaded-module.js.map +1 -0
  430. package/node_modules/@noodle-borg/{service/dist/modules → service-modules/dist}/loader.d.ts +1 -1
  431. package/node_modules/@noodle-borg/service-modules/dist/loader.d.ts.map +1 -0
  432. package/node_modules/@noodle-borg/service-modules/dist/loader.js.map +1 -0
  433. package/node_modules/@noodle-borg/service-modules/package.json +32 -0
  434. package/node_modules/@noodle-borg/uri-template/dist/index.d.ts +7 -0
  435. package/node_modules/@noodle-borg/uri-template/dist/index.d.ts.map +1 -0
  436. package/node_modules/@noodle-borg/uri-template/dist/index.js +7 -0
  437. package/node_modules/@noodle-borg/uri-template/dist/index.js.map +1 -0
  438. package/node_modules/@noodle-borg/uri-template/package.json +28 -0
  439. package/node_modules/@noodleseed/assistant/package.json +42 -16
  440. package/package.json +6 -2
  441. package/node_modules/@noodle-borg/compiler/dist/widget-palette.d.ts.map +0 -1
  442. package/node_modules/@noodle-borg/compiler/dist/widget-palette.js.map +0 -1
  443. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts.map +0 -1
  444. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js.map +0 -1
  445. package/node_modules/@noodle-borg/service/dist/feedback-operations/bootstrap.d.ts +0 -7
  446. package/node_modules/@noodle-borg/service/dist/feedback-operations/bootstrap.d.ts.map +0 -1
  447. package/node_modules/@noodle-borg/service/dist/feedback-operations/bootstrap.js +0 -23
  448. package/node_modules/@noodle-borg/service/dist/feedback-operations/bootstrap.js.map +0 -1
  449. package/node_modules/@noodle-borg/service/dist/feedback-operations/config.d.ts +0 -12
  450. package/node_modules/@noodle-borg/service/dist/feedback-operations/config.d.ts.map +0 -1
  451. package/node_modules/@noodle-borg/service/dist/feedback-operations/config.js +0 -47
  452. package/node_modules/@noodle-borg/service/dist/feedback-operations/config.js.map +0 -1
  453. package/node_modules/@noodle-borg/service/dist/feedback-operations/contracts.d.ts +0 -24
  454. package/node_modules/@noodle-borg/service/dist/feedback-operations/contracts.d.ts.map +0 -1
  455. package/node_modules/@noodle-borg/service/dist/feedback-operations/contracts.js +0 -2
  456. package/node_modules/@noodle-borg/service/dist/feedback-operations/contracts.js.map +0 -1
  457. package/node_modules/@noodle-borg/service/dist/feedback-operations/delivery-worker.d.ts +0 -29
  458. package/node_modules/@noodle-borg/service/dist/feedback-operations/delivery-worker.d.ts.map +0 -1
  459. package/node_modules/@noodle-borg/service/dist/feedback-operations/delivery-worker.js +0 -263
  460. package/node_modules/@noodle-borg/service/dist/feedback-operations/delivery-worker.js.map +0 -1
  461. package/node_modules/@noodle-borg/service/dist/feedback-operations/linear-client.d.ts +0 -39
  462. package/node_modules/@noodle-borg/service/dist/feedback-operations/linear-client.d.ts.map +0 -1
  463. package/node_modules/@noodle-borg/service/dist/feedback-operations/linear-client.js +0 -142
  464. package/node_modules/@noodle-borg/service/dist/feedback-operations/linear-client.js.map +0 -1
  465. package/node_modules/@noodle-borg/service/dist/feedback-operations/reporter-email.d.ts +0 -33
  466. package/node_modules/@noodle-borg/service/dist/feedback-operations/reporter-email.d.ts.map +0 -1
  467. package/node_modules/@noodle-borg/service/dist/feedback-operations/reporter-email.js +0 -142
  468. package/node_modules/@noodle-borg/service/dist/feedback-operations/reporter-email.js.map +0 -1
  469. package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-card.d.ts +0 -138
  470. package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-card.d.ts.map +0 -1
  471. package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-card.js +0 -199
  472. package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-card.js.map +0 -1
  473. package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-client.d.ts +0 -52
  474. package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-client.d.ts.map +0 -1
  475. package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-client.js +0 -103
  476. package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-client.js.map +0 -1
  477. package/node_modules/@noodle-borg/service/dist/github/feedback-issues.d.ts +0 -44
  478. package/node_modules/@noodle-borg/service/dist/github/feedback-issues.d.ts.map +0 -1
  479. package/node_modules/@noodle-borg/service/dist/github/feedback-issues.js +0 -117
  480. package/node_modules/@noodle-borg/service/dist/github/feedback-issues.js.map +0 -1
  481. package/node_modules/@noodle-borg/service/dist/modules/loader.d.ts.map +0 -1
  482. package/node_modules/@noodle-borg/service/dist/modules/loader.js.map +0 -1
  483. package/node_modules/@noodle-borg/service/dist/routes/feedback-operations-dispatch.d.ts +0 -10
  484. package/node_modules/@noodle-borg/service/dist/routes/feedback-operations-dispatch.d.ts.map +0 -1
  485. package/node_modules/@noodle-borg/service/dist/routes/feedback-operations-dispatch.js +0 -54
  486. package/node_modules/@noodle-borg/service/dist/routes/feedback-operations-dispatch.js.map +0 -1
  487. package/node_modules/@noodle-borg/service/dist/routes/feedback.d.ts +0 -30
  488. package/node_modules/@noodle-borg/service/dist/routes/feedback.d.ts.map +0 -1
  489. package/node_modules/@noodle-borg/service/dist/routes/feedback.js +0 -233
  490. package/node_modules/@noodle-borg/service/dist/routes/feedback.js.map +0 -1
  491. package/node_modules/@noodle-borg/service/dist/routes/linear-feedback-webhook.d.ts +0 -17
  492. package/node_modules/@noodle-borg/service/dist/routes/linear-feedback-webhook.d.ts.map +0 -1
  493. package/node_modules/@noodle-borg/service/dist/routes/linear-feedback-webhook.js +0 -141
  494. package/node_modules/@noodle-borg/service/dist/routes/linear-feedback-webhook.js.map +0 -1
  495. package/node_modules/@noodle-borg/service/dist/routes/slack-feedback-actions.d.ts +0 -15
  496. package/node_modules/@noodle-borg/service/dist/routes/slack-feedback-actions.d.ts.map +0 -1
  497. package/node_modules/@noodle-borg/service/dist/routes/slack-feedback-actions.js +0 -135
  498. package/node_modules/@noodle-borg/service/dist/routes/slack-feedback-actions.js.map +0 -1
  499. package/node_modules/@noodle-borg/service/dist/store/feedback-operations.d.ts +0 -188
  500. package/node_modules/@noodle-borg/service/dist/store/feedback-operations.d.ts.map +0 -1
  501. package/node_modules/@noodle-borg/service/dist/store/feedback-operations.js +0 -489
  502. package/node_modules/@noodle-borg/service/dist/store/feedback-operations.js.map +0 -1
  503. package/node_modules/@noodle-borg/service/dist/store/postgres-feedback-operations.d.ts +0 -35
  504. package/node_modules/@noodle-borg/service/dist/store/postgres-feedback-operations.d.ts.map +0 -1
  505. package/node_modules/@noodle-borg/service/dist/store/postgres-feedback-operations.js +0 -172
  506. package/node_modules/@noodle-borg/service/dist/store/postgres-feedback-operations.js.map +0 -1
  507. /package/node_modules/@noodle-borg/{service/dist/modules → service-modules/dist}/loader.js +0 -0
  508. /package/node_modules/@noodle-borg/{compiler → uri-template}/dist/uri-template.d.ts +0 -0
  509. /package/node_modules/@noodle-borg/{compiler → uri-template}/dist/uri-template.d.ts.map +0 -0
  510. /package/node_modules/@noodle-borg/{compiler → uri-template}/dist/uri-template.js +0 -0
  511. /package/node_modules/@noodle-borg/{compiler → uri-template}/dist/uri-template.js.map +0 -0
@@ -0,0 +1,260 @@
1
+ import { knowledgeScopeKey } from './ir.js';
2
+ import { KnowledgeError } from './ports.js';
3
+ import { identityDocumentTextCodec, } from './revision-store.js';
4
+ const LEASE_TIMEOUT_MS = 60_000;
5
+ export class PostgresKnowledgeRevisionStore {
6
+ #pool;
7
+ #codec;
8
+ constructor(pool, codec = identityDocumentTextCodec) {
9
+ this.#pool = pool;
10
+ this.#codec = codec;
11
+ }
12
+ async ensureSchema() {
13
+ await this.#pool.query(`
14
+ CREATE TABLE IF NOT EXISTS knowledge_revisions (
15
+ revision_id text PRIMARY KEY,
16
+ org text NOT NULL,
17
+ app text NOT NULL,
18
+ env text NOT NULL,
19
+ component_name text NOT NULL,
20
+ content_hash text NOT NULL,
21
+ state text NOT NULL DEFAULT 'staged',
22
+ documents jsonb NOT NULL,
23
+ staged_at timestamptz NOT NULL DEFAULT now(),
24
+ UNIQUE (org, app, env, component_name, content_hash)
25
+ )
26
+ `);
27
+ await this.#pool.query(`
28
+ CREATE TABLE IF NOT EXISTS knowledge_deployment_pins (
29
+ deployment_id text PRIMARY KEY,
30
+ revision_id text NOT NULL REFERENCES knowledge_revisions (revision_id) ON DELETE CASCADE
31
+ )
32
+ `);
33
+ await this.#pool.query(`
34
+ CREATE TABLE IF NOT EXISTS knowledge_publication_leases (
35
+ scope_key text PRIMARY KEY,
36
+ holder text NOT NULL,
37
+ acquired_at timestamptz NOT NULL DEFAULT now()
38
+ )
39
+ `);
40
+ // Sealed revision text (ADR 0202 D5 as amended): lets any stateless instance rebuild the
41
+ // bundled BM25 index for the active revision. Ciphertext only; the codec owner holds keys.
42
+ await this.#pool.query(`
43
+ CREATE TABLE IF NOT EXISTS knowledge_revision_documents (
44
+ revision_id text NOT NULL REFERENCES knowledge_revisions (revision_id) ON DELETE CASCADE,
45
+ path text NOT NULL,
46
+ ciphertext bytea NOT NULL,
47
+ bytes integer NOT NULL,
48
+ PRIMARY KEY (revision_id, path)
49
+ )
50
+ `);
51
+ }
52
+ async stage(input) {
53
+ const result = await this.#pool.query(`INSERT INTO knowledge_revisions (revision_id, org, app, env, component_name, content_hash, documents)
54
+ VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb)
55
+ ON CONFLICT (org, app, env, component_name, content_hash) DO NOTHING
56
+ RETURNING revision_id, org, app, env, component_name, content_hash, state, documents, staged_at`, [
57
+ input.revision.revisionId,
58
+ input.scope.org,
59
+ input.scope.app,
60
+ input.scope.env,
61
+ input.componentName,
62
+ input.contentHash,
63
+ JSON.stringify(input.revision.documents),
64
+ ]);
65
+ if (result.rows[0] !== undefined)
66
+ return this.toRevision(result.rows[0]);
67
+ // Idempotent reuse: the unique scope+hash row already exists.
68
+ const existing = await this.#pool.query(`SELECT revision_id, org, app, env, component_name, content_hash, state, documents, staged_at
69
+ FROM knowledge_revisions
70
+ WHERE org = $1 AND app = $2 AND env = $3 AND component_name = $4 AND content_hash = $5`, [input.scope.org, input.scope.app, input.scope.env, input.componentName, input.contentHash]);
71
+ const row = existing.rows[0];
72
+ if (row === undefined)
73
+ throw new KnowledgeError('store', 'staged revision disappeared mid-transaction');
74
+ return this.toRevision(row);
75
+ }
76
+ async acquireLease(scope, componentName, holder) {
77
+ const scopeKey = knowledgeScopeKey(scope, componentName);
78
+ for (;;) {
79
+ const result = await this.#pool.query(`INSERT INTO knowledge_publication_leases (scope_key, holder, acquired_at)
80
+ VALUES ($1, $2, now())
81
+ ON CONFLICT (scope_key) DO UPDATE
82
+ SET holder = $2, acquired_at = now()
83
+ WHERE knowledge_publication_leases.acquired_at < now() - interval '${LEASE_TIMEOUT_MS} milliseconds'
84
+ RETURNING scope_key`, [scopeKey, holder]);
85
+ if (result.rows[0] !== undefined) {
86
+ return { scopeKey, leaseId: `${scopeKey}:${holder}` };
87
+ }
88
+ await new Promise((resolve) => setTimeout(resolve, 25));
89
+ }
90
+ }
91
+ async releaseLease(ticket) {
92
+ await this.#pool.query('DELETE FROM knowledge_publication_leases WHERE scope_key = $1', [
93
+ ticket.scopeKey,
94
+ ]);
95
+ }
96
+ async activate(scope, componentName, revisionId, deploymentId) {
97
+ const client = await this.#pool.connect();
98
+ try {
99
+ await client.query('BEGIN');
100
+ const existing = await client.query('SELECT * FROM knowledge_revisions WHERE revision_id = $1 FOR UPDATE', [revisionId]);
101
+ if (existing.rows[0] === undefined) {
102
+ await client.query('ROLLBACK');
103
+ throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
104
+ }
105
+ await client.query(`UPDATE knowledge_revisions SET state = 'retired'
106
+ WHERE org = $1 AND app = $2 AND env = $3 AND component_name = $4 AND state = 'active' AND revision_id <> $5`, [scope.org, scope.app, scope.env, componentName, revisionId]);
107
+ await client.query(`UPDATE knowledge_revisions SET state = 'active' WHERE revision_id = $1`, [
108
+ revisionId,
109
+ ]);
110
+ await client.query(`INSERT INTO knowledge_deployment_pins (deployment_id, revision_id)
111
+ VALUES ($1, $2)
112
+ ON CONFLICT (deployment_id) DO UPDATE SET revision_id = $2`, [deploymentId, revisionId]);
113
+ await client.query('COMMIT');
114
+ }
115
+ catch (error) {
116
+ await client.query('ROLLBACK').catch(() => undefined);
117
+ throw error;
118
+ }
119
+ finally {
120
+ client.release();
121
+ }
122
+ }
123
+ async pin(revisionId, deploymentId) {
124
+ const result = await this.#pool.query(`INSERT INTO knowledge_deployment_pins (deployment_id, revision_id)
125
+ VALUES ($1, $2)
126
+ ON CONFLICT (deployment_id) DO UPDATE SET revision_id = $2
127
+ RETURNING revision_id`, [deploymentId, revisionId]);
128
+ if (result.rows[0] === undefined)
129
+ throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
130
+ }
131
+ async rollback(deploymentId) {
132
+ const client = await this.#pool.connect();
133
+ try {
134
+ await client.query('BEGIN');
135
+ const pinned = await client.query('SELECT revision_id FROM knowledge_deployment_pins WHERE deployment_id = $1', [deploymentId]);
136
+ const revisionId = pinned.rows[0]?.revision_id;
137
+ if (revisionId === undefined) {
138
+ await client.query('COMMIT');
139
+ return undefined;
140
+ }
141
+ const target = await client.query('SELECT * FROM knowledge_revisions WHERE revision_id = $1', [revisionId]);
142
+ if (target.rows[0] === undefined) {
143
+ await client.query('COMMIT');
144
+ return undefined;
145
+ }
146
+ const scope = this.rowScope(target.rows[0]);
147
+ await client.query(`UPDATE knowledge_revisions SET state = 'retired'
148
+ WHERE org = $1 AND app = $2 AND env = $3 AND component_name = $4 AND state = 'active' AND revision_id <> $5`, [scope.org, scope.app, scope.env, target.rows[0].component_name, revisionId]);
149
+ await client.query(`UPDATE knowledge_revisions SET state = 'active' WHERE revision_id = $1`, [
150
+ revisionId,
151
+ ]);
152
+ await client.query('COMMIT');
153
+ return this.toRevision(target.rows[0]);
154
+ }
155
+ catch (error) {
156
+ await client.query('ROLLBACK').catch(() => undefined);
157
+ throw error;
158
+ }
159
+ finally {
160
+ client.release();
161
+ }
162
+ }
163
+ async collectGarbage() {
164
+ const result = await this.#pool.query(`DELETE FROM knowledge_revisions r
165
+ WHERE r.state <> 'active'
166
+ AND NOT EXISTS (
167
+ SELECT 1 FROM knowledge_deployment_pins p WHERE p.revision_id = r.revision_id
168
+ )`);
169
+ return result.rowCount ?? 0;
170
+ }
171
+ async active(scope, componentName) {
172
+ const result = await this.#pool.query(`SELECT * FROM knowledge_revisions
173
+ WHERE org = $1 AND app = $2 AND env = $3 AND component_name = $4 AND state = 'active'`, [scope.org, scope.app, scope.env, componentName]);
174
+ return result.rows[0] === undefined ? undefined : this.toRevision(result.rows[0]);
175
+ }
176
+ async record(revisionId) {
177
+ const result = await this.#pool.query('SELECT * FROM knowledge_revisions WHERE revision_id = $1', [revisionId]);
178
+ const row = result.rows[0];
179
+ if (row === undefined)
180
+ return undefined;
181
+ const pins = await this.#pool.query('SELECT deployment_id FROM knowledge_deployment_pins WHERE revision_id = $1', [revisionId]);
182
+ return {
183
+ revision: this.toRevision(row),
184
+ contentHash: row.content_hash,
185
+ state: row.state,
186
+ pins: new Set(pins.rows.map((pin) => pin.deployment_id)),
187
+ stagedAt: new Date(row.staged_at).getTime(),
188
+ };
189
+ }
190
+ async delete(revisionId) {
191
+ const record = await this.record(revisionId);
192
+ if (record === undefined)
193
+ return;
194
+ if (record.state === 'active') {
195
+ throw new KnowledgeError('store', 'cannot delete the active revision');
196
+ }
197
+ if (record.pins.size > 0) {
198
+ throw new KnowledgeError('store', 'cannot delete a deployment-pinned revision');
199
+ }
200
+ await this.#pool.query('DELETE FROM knowledge_revisions WHERE revision_id = $1', [revisionId]);
201
+ }
202
+ async stageDocuments(revisionId, documents) {
203
+ const client = await this.#pool.connect();
204
+ try {
205
+ await client.query('BEGIN');
206
+ const revision = await client.query('SELECT revision_id FROM knowledge_revisions WHERE revision_id = $1 FOR UPDATE', [revisionId]);
207
+ if (revision.rows[0] === undefined) {
208
+ await client.query('ROLLBACK');
209
+ throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
210
+ }
211
+ await client.query('DELETE FROM knowledge_revision_documents WHERE revision_id = $1', [
212
+ revisionId,
213
+ ]);
214
+ for (const document of documents) {
215
+ const plaintext = Buffer.from(document.text, 'utf8');
216
+ await client.query(`INSERT INTO knowledge_revision_documents (revision_id, path, ciphertext, bytes)
217
+ VALUES ($1, $2, $3, $4)`, [revisionId, document.descriptor.path, this.#codec.seal(plaintext), plaintext.length]);
218
+ }
219
+ await client.query('COMMIT');
220
+ }
221
+ catch (error) {
222
+ await client.query('ROLLBACK').catch(() => undefined);
223
+ throw error;
224
+ }
225
+ finally {
226
+ client.release();
227
+ }
228
+ }
229
+ async documents(revisionId) {
230
+ const revision = await this.#pool.query('SELECT * FROM knowledge_revisions WHERE revision_id = $1', [revisionId]);
231
+ const row = revision.rows[0];
232
+ if (row === undefined) {
233
+ throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
234
+ }
235
+ const rows = await this.#pool.query('SELECT path, ciphertext FROM knowledge_revision_documents WHERE revision_id = $1', [revisionId]);
236
+ const byPath = new Map(rows.rows.map((text) => [text.path, text.ciphertext]));
237
+ if (byPath.size === 0 && row.documents.length > 0) {
238
+ throw new KnowledgeError('store', `revision ${revisionId} has no staged document text`);
239
+ }
240
+ return row.documents.map((descriptor) => {
241
+ const ciphertext = byPath.get(descriptor.path);
242
+ if (ciphertext === undefined) {
243
+ throw new KnowledgeError('store', `revision ${revisionId} is missing text for ${descriptor.path}`);
244
+ }
245
+ return { descriptor, text: this.#codec.open(ciphertext).toString('utf8') };
246
+ });
247
+ }
248
+ rowScope(row) {
249
+ return { org: row.org, app: row.app, env: row.env };
250
+ }
251
+ toRevision(row) {
252
+ return {
253
+ revisionId: row.revision_id,
254
+ scope: this.rowScope(row),
255
+ componentName: row.component_name,
256
+ documents: row.documents,
257
+ };
258
+ }
259
+ }
260
+ //# sourceMappingURL=postgres-revision-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-revision-store.js","sourceRoot":"","sources":["../src/postgres-revision-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { KnowledgeScope } from './ir.js';
2
+ import type { KnowledgeRevision, StagedDocument } from './ports.js';
3
+ /**
4
+ * Seals document text at rest and opens it for BM25 rebuilds (ADR 0202 D5 as amended: the
5
+ * managed-bundled tier persists revision text sealed in the revision store so a stateless
6
+ * instance can rebuild the active index). The service injects its secret-box codec; tests
7
+ * and non-durable stores may use the identity codec.
8
+ */
9
+ export interface DocumentTextCodec {
10
+ seal(plaintext: Buffer): Buffer;
11
+ open(sealed: Buffer): Buffer;
12
+ }
13
+ export declare const identityDocumentTextCodec: DocumentTextCodec;
14
+ export interface StageRevisionInput {
15
+ readonly scope: KnowledgeScope;
16
+ readonly componentName: string;
17
+ /** Content hash of the complete document set — equal sets reuse the same revision. */
18
+ readonly contentHash: string;
19
+ readonly revision: KnowledgeRevision;
20
+ }
21
+ export interface LeaseTicket {
22
+ readonly scopeKey: string;
23
+ readonly leaseId: string;
24
+ }
25
+ export interface RevisionRecord {
26
+ readonly revision: KnowledgeRevision;
27
+ readonly contentHash: string;
28
+ readonly state: 'staged' | 'active' | 'retired';
29
+ /** Deployment ids that pin this revision against GC. */
30
+ readonly pins: ReadonlySet<string>;
31
+ readonly stagedAt: number;
32
+ }
33
+ export interface KnowledgeRevisionStore {
34
+ /** Record a staged revision. Re-staging the same contentHash for the scope is idempotent. */
35
+ stage(input: StageRevisionInput): Promise<KnowledgeRevision>;
36
+ /** Serialize publication per component/scope; resolves when the lease is held. */
37
+ acquireLease(scope: KnowledgeScope, componentName: string, holder: string): Promise<LeaseTicket>;
38
+ releaseLease(ticket: LeaseTicket): Promise<void>;
39
+ /** Atomically pair artifact activation with the revision: verify, then flip both. */
40
+ activate(scope: KnowledgeScope, componentName: string, revisionId: string, deploymentId: string): Promise<void>;
41
+ /** Mark a deployment as pinning the revision it activated. */
42
+ pin(revisionId: string, deploymentId: string): Promise<void>;
43
+ /** Rollback reselects the revision the target deployment pinned; returns it when reselved. */
44
+ rollback(deploymentId: string): Promise<KnowledgeRevision | undefined>;
45
+ /** Remove revisions that are neither active nor pinned. Returns the removed count. */
46
+ collectGarbage(): Promise<number>;
47
+ /** Active revision for a scope/component, if any. */
48
+ active(scope: KnowledgeScope, componentName: string): Promise<KnowledgeRevision | undefined>;
49
+ /** A specific revision by id (diagnostics/status only). */
50
+ record(revisionId: string): Promise<RevisionRecord | undefined>;
51
+ /** Delete a revision record; refuses an active or pinned one. */
52
+ delete(revisionId: string): Promise<void>;
53
+ /**
54
+ * Persist the revision's sealed document text so any instance can rebuild the bundled
55
+ * index (ADR 0202 D5 as amended). Idempotent full replacement per revision.
56
+ */
57
+ stageDocuments(revisionId: string, documents: readonly StagedDocument[]): Promise<void>;
58
+ /**
59
+ * The staged text for a revision. Throws `KnowledgeError` when the revision is unknown or
60
+ * its text was never staged — a rebuild must fail loudly, never index an empty corpus.
61
+ */
62
+ documents(revisionId: string): Promise<readonly StagedDocument[]>;
63
+ }
64
+ export declare function documentsContentHash(documentHashes: readonly string[]): string;
65
+ export declare class InMemoryKnowledgeRevisionStore implements KnowledgeRevisionStore {
66
+ private readonly records;
67
+ private readonly leases;
68
+ private readonly deploymentPins;
69
+ /** revisionId → path → sealed text; sealed even in memory so the codec path is exercised. */
70
+ private readonly sealedText;
71
+ private readonly codec;
72
+ constructor(codec?: DocumentTextCodec);
73
+ stage(input: StageRevisionInput): Promise<KnowledgeRevision>;
74
+ acquireLease(scope: KnowledgeScope, componentName: string, holder: string): Promise<LeaseTicket>;
75
+ releaseLease(ticket: LeaseTicket): Promise<void>;
76
+ activate(scope: KnowledgeScope, componentName: string, revisionId: string, deploymentId: string): Promise<void>;
77
+ pin(revisionId: string, deploymentId: string): Promise<void>;
78
+ rollback(deploymentId: string): Promise<KnowledgeRevision | undefined>;
79
+ collectGarbage(): Promise<number>;
80
+ active(scope: KnowledgeScope, componentName: string): Promise<KnowledgeRevision | undefined>;
81
+ record(revisionId: string): Promise<RevisionRecord | undefined>;
82
+ delete(revisionId: string): Promise<void>;
83
+ stageDocuments(revisionId: string, documents: readonly StagedDocument[]): Promise<void>;
84
+ documents(revisionId: string): Promise<readonly StagedDocument[]>;
85
+ }
86
+ //# sourceMappingURL=revision-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-store.d.ts","sourceRoot":"","sources":["../src/revision-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Deploy-coupled knowledge revision store (ADR 0202 publication transaction): staged/active
3
+ * state, content-hash reuse, publication leases, positive-predicate verification, atomic
4
+ * artifact+revision activation, deployment pins, rollback pairing, retention, and GC.
5
+ *
6
+ * The store owns *coordination*; the `KnowledgeIndex` port owns provider bytes. A deployment
7
+ * stages through the port, records the revision here, verifies, then activates both as one
8
+ * transaction; failure retains the previous pair.
9
+ */
10
+ import { createHash } from 'node:crypto';
11
+ import { knowledgeScopeKey } from './ir.js';
12
+ import { KnowledgeError } from './ports.js';
13
+ export const identityDocumentTextCodec = {
14
+ seal: (plaintext) => plaintext,
15
+ open: (sealed) => sealed,
16
+ };
17
+ export function documentsContentHash(documentHashes) {
18
+ return createHash('sha256').update(documentHashes.join('\n')).digest('hex');
19
+ }
20
+ const LEASE_TIMEOUT_MS = 60_000;
21
+ export class InMemoryKnowledgeRevisionStore {
22
+ records = new Map();
23
+ leases = new Map();
24
+ deploymentPins = new Map();
25
+ /** revisionId → path → sealed text; sealed even in memory so the codec path is exercised. */
26
+ sealedText = new Map();
27
+ codec;
28
+ constructor(codec = identityDocumentTextCodec) {
29
+ this.codec = codec;
30
+ }
31
+ async stage(input) {
32
+ const scopeKey = knowledgeScopeKey(input.scope, input.componentName);
33
+ const existing = [...this.records.values()].find((record) => knowledgeScopeKey(record.revision.scope, record.revision.componentName) === scopeKey &&
34
+ record.contentHash === input.contentHash);
35
+ if (existing !== undefined)
36
+ return existing.revision;
37
+ const record = {
38
+ revision: input.revision,
39
+ contentHash: input.contentHash,
40
+ state: 'staged',
41
+ pins: new Set(),
42
+ stagedAt: Date.now(),
43
+ };
44
+ this.records.set(input.revision.revisionId, record);
45
+ return input.revision;
46
+ }
47
+ async acquireLease(scope, componentName, holder) {
48
+ const scopeKey = knowledgeScopeKey(scope, componentName);
49
+ for (;;) {
50
+ const existing = this.leases.get(scopeKey);
51
+ const now = Date.now();
52
+ if (existing === undefined || now - existing.acquiredAt > LEASE_TIMEOUT_MS) {
53
+ this.leases.set(scopeKey, { holder, acquiredAt: now });
54
+ return { scopeKey, leaseId: `${scopeKey}:${now}:${holder}` };
55
+ }
56
+ await new Promise((resolve) => setTimeout(resolve, 5));
57
+ }
58
+ }
59
+ async releaseLease(ticket) {
60
+ this.leases.delete(ticket.scopeKey);
61
+ }
62
+ async activate(scope, componentName, revisionId, deploymentId) {
63
+ const record = this.records.get(revisionId);
64
+ if (record === undefined) {
65
+ throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
66
+ }
67
+ const scopeKey = knowledgeScopeKey(scope, componentName);
68
+ const currentActive = [...this.records.values()].find((candidate) => candidate.state === 'active' &&
69
+ knowledgeScopeKey(candidate.revision.scope, candidate.revision.componentName) === scopeKey);
70
+ if (currentActive !== undefined && currentActive.revision.revisionId !== revisionId) {
71
+ currentActive.state = 'retired';
72
+ }
73
+ record.state = 'active';
74
+ record.pins.add(deploymentId);
75
+ this.deploymentPins.set(deploymentId, revisionId);
76
+ }
77
+ async pin(revisionId, deploymentId) {
78
+ const record = this.records.get(revisionId);
79
+ if (record === undefined)
80
+ throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
81
+ record.pins.add(deploymentId);
82
+ this.deploymentPins.set(deploymentId, revisionId);
83
+ }
84
+ async rollback(deploymentId) {
85
+ const revisionId = this.deploymentPins.get(deploymentId);
86
+ if (revisionId === undefined)
87
+ return undefined;
88
+ const record = this.records.get(revisionId);
89
+ if (record === undefined)
90
+ return undefined;
91
+ const scopeKey = knowledgeScopeKey(record.revision.scope, record.revision.componentName);
92
+ for (const candidate of this.records.values()) {
93
+ if (candidate.state === 'active' &&
94
+ knowledgeScopeKey(candidate.revision.scope, candidate.revision.componentName) ===
95
+ scopeKey &&
96
+ candidate.revision.revisionId !== revisionId) {
97
+ candidate.state = 'retired';
98
+ }
99
+ }
100
+ record.state = 'active';
101
+ return record.revision;
102
+ }
103
+ async collectGarbage() {
104
+ let removed = 0;
105
+ for (const [revisionId, record] of this.records) {
106
+ if (record.state !== 'active' && record.pins.size === 0) {
107
+ this.records.delete(revisionId);
108
+ this.sealedText.delete(revisionId);
109
+ removed += 1;
110
+ }
111
+ }
112
+ return removed;
113
+ }
114
+ async active(scope, componentName) {
115
+ const scopeKey = knowledgeScopeKey(scope, componentName);
116
+ const record = [...this.records.values()].find((candidate) => candidate.state === 'active' &&
117
+ knowledgeScopeKey(candidate.revision.scope, candidate.revision.componentName) === scopeKey);
118
+ return record?.revision;
119
+ }
120
+ async record(revisionId) {
121
+ const record = this.records.get(revisionId);
122
+ if (record === undefined)
123
+ return undefined;
124
+ return { ...record, pins: new Set(record.pins) };
125
+ }
126
+ async delete(revisionId) {
127
+ const record = this.records.get(revisionId);
128
+ if (record === undefined)
129
+ return;
130
+ if (record.state === 'active') {
131
+ throw new KnowledgeError('store', 'cannot delete the active revision');
132
+ }
133
+ if (record.pins.size > 0) {
134
+ throw new KnowledgeError('store', 'cannot delete a deployment-pinned revision');
135
+ }
136
+ this.records.delete(revisionId);
137
+ this.sealedText.delete(revisionId);
138
+ }
139
+ async stageDocuments(revisionId, documents) {
140
+ if (!this.records.has(revisionId)) {
141
+ throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
142
+ }
143
+ const sealed = new Map();
144
+ for (const document of documents) {
145
+ sealed.set(document.descriptor.path, this.codec.seal(Buffer.from(document.text, 'utf8')));
146
+ }
147
+ this.sealedText.set(revisionId, sealed);
148
+ }
149
+ async documents(revisionId) {
150
+ const record = this.records.get(revisionId);
151
+ if (record === undefined) {
152
+ throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
153
+ }
154
+ const sealed = this.sealedText.get(revisionId);
155
+ if (sealed === undefined && record.revision.documents.length > 0) {
156
+ throw new KnowledgeError('store', `revision ${revisionId} has no staged document text`);
157
+ }
158
+ return record.revision.documents.map((descriptor) => {
159
+ const ciphertext = sealed?.get(descriptor.path);
160
+ if (ciphertext === undefined) {
161
+ throw new KnowledgeError('store', `revision ${revisionId} is missing text for ${descriptor.path}`);
162
+ }
163
+ return { descriptor, text: this.codec.open(ciphertext).toString('utf8') };
164
+ });
165
+ }
166
+ }
167
+ //# sourceMappingURL=revision-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-store.js","sourceRoot":"","sources":["../src/revision-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@noodle-borg/knowledge",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "engines": {
8
+ "node": ">=24"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ },
17
+ "./conformance": {
18
+ "types": "./dist/conformance.d.ts",
19
+ "import": "./dist/conformance.js"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.json",
27
+ "typecheck": "tsc -p tsconfig.json --noEmit"
28
+ },
29
+ "dependencies": {
30
+ "zod": "^4.4.3"
31
+ },
32
+ "devDependencies": {
33
+ "@types/node": "^24.13.1",
34
+ "@types/pg": "^8.20.0"
35
+ }
36
+ }
@@ -14,6 +14,8 @@ export interface ModuleRoute {
14
14
  export interface ModuleRouteContext {
15
15
  readonly logger: ModuleLogger;
16
16
  readonly controlPlane?: ControlPlaneAuthorizer;
17
+ /** Host audit sink for route-emitted audit events; absent means the host has no audit trail. */
18
+ readonly audit?: AuditSink;
17
19
  }
18
20
  export interface ControlPlaneAuthorizer {
19
21
  authorize(req: IncomingMessage): Promise<ControlPlaneAuthResult> | ControlPlaneAuthResult;