@stigmer/server 3.15.3-dev.20260914100347 → 3.15.3-dev.20260916211208

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 (570) hide show
  1. package/README.md +3 -3
  2. package/dist/archive/content-store.d.ts +35 -0
  3. package/dist/archive/content-store.d.ts.map +1 -0
  4. package/dist/archive/content-store.js +98 -0
  5. package/dist/archive/content-store.js.map +1 -0
  6. package/dist/archive/inflate.d.ts +22 -0
  7. package/dist/archive/inflate.d.ts.map +1 -0
  8. package/dist/archive/inflate.js +75 -0
  9. package/dist/archive/inflate.js.map +1 -0
  10. package/dist/archive/limits.d.ts +33 -0
  11. package/dist/archive/limits.d.ts.map +1 -0
  12. package/dist/archive/limits.js +31 -0
  13. package/dist/archive/limits.js.map +1 -0
  14. package/dist/archive/open.d.ts +24 -0
  15. package/dist/archive/open.d.ts.map +1 -0
  16. package/dist/archive/open.js +93 -0
  17. package/dist/archive/open.js.map +1 -0
  18. package/dist/{domain/skill/storage → archive}/prefilter.d.ts +5 -0
  19. package/dist/archive/prefilter.d.ts.map +1 -0
  20. package/dist/archive/prefilter.js.map +1 -0
  21. package/dist/archive/write.d.ts +8 -0
  22. package/dist/archive/write.d.ts.map +1 -0
  23. package/dist/archive/write.js +44 -0
  24. package/dist/archive/write.js.map +1 -0
  25. package/dist/authorization/authorizer.d.ts +98 -0
  26. package/dist/authorization/authorizer.d.ts.map +1 -0
  27. package/dist/authorization/authorizer.js +156 -0
  28. package/dist/authorization/authorizer.js.map +1 -0
  29. package/dist/authorization/derived-tuples.d.ts +42 -0
  30. package/dist/authorization/derived-tuples.d.ts.map +1 -0
  31. package/dist/authorization/derived-tuples.js +240 -0
  32. package/dist/authorization/derived-tuples.js.map +1 -0
  33. package/dist/authorization/evaluator.d.ts +66 -0
  34. package/dist/authorization/evaluator.d.ts.map +1 -0
  35. package/dist/authorization/evaluator.js +153 -0
  36. package/dist/authorization/evaluator.js.map +1 -0
  37. package/dist/authorization/facts.d.ts +29 -0
  38. package/dist/authorization/facts.d.ts.map +1 -0
  39. package/dist/authorization/facts.js +17 -0
  40. package/dist/authorization/facts.js.map +1 -0
  41. package/dist/authorization/list-read-scope.d.ts +18 -0
  42. package/dist/authorization/list-read-scope.d.ts.map +1 -0
  43. package/dist/authorization/list-read-scope.js +155 -0
  44. package/dist/authorization/list-read-scope.js.map +1 -0
  45. package/dist/authorization/model/agent.d.ts +2 -0
  46. package/dist/authorization/model/agent.d.ts.map +1 -0
  47. package/dist/authorization/model/agent.js +42 -0
  48. package/dist/authorization/model/agent.js.map +1 -0
  49. package/dist/authorization/model/agent_channel.d.ts +2 -0
  50. package/dist/authorization/model/agent_channel.d.ts.map +1 -0
  51. package/dist/authorization/model/agent_channel.js +38 -0
  52. package/dist/authorization/model/agent_channel.js.map +1 -0
  53. package/dist/authorization/model/agent_execution.d.ts +2 -0
  54. package/dist/authorization/model/agent_execution.d.ts.map +1 -0
  55. package/dist/authorization/model/agent_execution.js +25 -0
  56. package/dist/authorization/model/agent_execution.js.map +1 -0
  57. package/dist/authorization/model/agent_instance.d.ts +2 -0
  58. package/dist/authorization/model/agent_instance.d.ts.map +1 -0
  59. package/dist/authorization/model/agent_instance.js +47 -0
  60. package/dist/authorization/model/agent_instance.js.map +1 -0
  61. package/dist/authorization/model/agent_share.d.ts +2 -0
  62. package/dist/authorization/model/agent_share.d.ts.map +1 -0
  63. package/dist/authorization/model/agent_share.js +29 -0
  64. package/dist/authorization/model/agent_share.js.map +1 -0
  65. package/dist/authorization/model/api_key.d.ts +2 -0
  66. package/dist/authorization/model/api_key.d.ts.map +1 -0
  67. package/dist/authorization/model/api_key.js +27 -0
  68. package/dist/authorization/model/api_key.js.map +1 -0
  69. package/dist/authorization/model/artifact.d.ts +2 -0
  70. package/dist/authorization/model/artifact.d.ts.map +1 -0
  71. package/dist/authorization/model/artifact.js +27 -0
  72. package/dist/authorization/model/artifact.js.map +1 -0
  73. package/dist/authorization/model/channel_app.d.ts +2 -0
  74. package/dist/authorization/model/channel_app.d.ts.map +1 -0
  75. package/dist/authorization/model/channel_app.js +28 -0
  76. package/dist/authorization/model/channel_app.js.map +1 -0
  77. package/dist/authorization/model/default-of.d.ts +38 -0
  78. package/dist/authorization/model/default-of.d.ts.map +1 -0
  79. package/dist/authorization/model/default-of.js +39 -0
  80. package/dist/authorization/model/default-of.js.map +1 -0
  81. package/dist/authorization/model/environment.d.ts +2 -0
  82. package/dist/authorization/model/environment.d.ts.map +1 -0
  83. package/dist/authorization/model/environment.js +33 -0
  84. package/dist/authorization/model/environment.js.map +1 -0
  85. package/dist/authorization/model/execution_context.d.ts +2 -0
  86. package/dist/authorization/model/execution_context.d.ts.map +1 -0
  87. package/dist/authorization/model/execution_context.js +19 -0
  88. package/dist/authorization/model/execution_context.js.map +1 -0
  89. package/dist/authorization/model/iam_policy.d.ts +2 -0
  90. package/dist/authorization/model/iam_policy.d.ts.map +1 -0
  91. package/dist/authorization/model/iam_policy.js +31 -0
  92. package/dist/authorization/model/iam_policy.js.map +1 -0
  93. package/dist/authorization/model/identity_account.d.ts +2 -0
  94. package/dist/authorization/model/identity_account.d.ts.map +1 -0
  95. package/dist/authorization/model/identity_account.js +25 -0
  96. package/dist/authorization/model/identity_account.js.map +1 -0
  97. package/dist/authorization/model/index.d.ts +36 -0
  98. package/dist/authorization/model/index.d.ts.map +1 -0
  99. package/dist/authorization/model/index.js +72 -0
  100. package/dist/authorization/model/index.js.map +1 -0
  101. package/dist/authorization/model/mcp_server.d.ts +2 -0
  102. package/dist/authorization/model/mcp_server.d.ts.map +1 -0
  103. package/dist/authorization/model/mcp_server.js +37 -0
  104. package/dist/authorization/model/mcp_server.js.map +1 -0
  105. package/dist/authorization/model/memory.d.ts +2 -0
  106. package/dist/authorization/model/memory.d.ts.map +1 -0
  107. package/dist/authorization/model/memory.js +26 -0
  108. package/dist/authorization/model/memory.js.map +1 -0
  109. package/dist/authorization/model/oauth_app.d.ts +2 -0
  110. package/dist/authorization/model/oauth_app.d.ts.map +1 -0
  111. package/dist/authorization/model/oauth_app.js +30 -0
  112. package/dist/authorization/model/oauth_app.js.map +1 -0
  113. package/dist/authorization/model/organization.d.ts +2 -0
  114. package/dist/authorization/model/organization.d.ts.map +1 -0
  115. package/dist/authorization/model/organization.js +54 -0
  116. package/dist/authorization/model/organization.js.map +1 -0
  117. package/dist/authorization/model/plugin.d.ts +2 -0
  118. package/dist/authorization/model/plugin.d.ts.map +1 -0
  119. package/dist/authorization/model/plugin.js +44 -0
  120. package/dist/authorization/model/plugin.js.map +1 -0
  121. package/dist/authorization/model/project.d.ts +2 -0
  122. package/dist/authorization/model/project.d.ts.map +1 -0
  123. package/dist/authorization/model/project.js +32 -0
  124. package/dist/authorization/model/project.js.map +1 -0
  125. package/dist/authorization/model/rewrite.d.ts +127 -0
  126. package/dist/authorization/model/rewrite.d.ts.map +1 -0
  127. package/dist/authorization/model/rewrite.js +82 -0
  128. package/dist/authorization/model/rewrite.js.map +1 -0
  129. package/dist/authorization/model/schedule.d.ts +2 -0
  130. package/dist/authorization/model/schedule.d.ts.map +1 -0
  131. package/dist/authorization/model/schedule.js +29 -0
  132. package/dist/authorization/model/schedule.js.map +1 -0
  133. package/dist/authorization/model/session.d.ts +2 -0
  134. package/dist/authorization/model/session.d.ts.map +1 -0
  135. package/dist/authorization/model/session.js +38 -0
  136. package/dist/authorization/model/session.js.map +1 -0
  137. package/dist/authorization/model/skill.d.ts +2 -0
  138. package/dist/authorization/model/skill.d.ts.map +1 -0
  139. package/dist/authorization/model/skill.js +38 -0
  140. package/dist/authorization/model/skill.js.map +1 -0
  141. package/dist/authorization/model/workflow.d.ts +2 -0
  142. package/dist/authorization/model/workflow.d.ts.map +1 -0
  143. package/dist/authorization/model/workflow.js +38 -0
  144. package/dist/authorization/model/workflow.js.map +1 -0
  145. package/dist/authorization/model/workflow_execution.d.ts +2 -0
  146. package/dist/authorization/model/workflow_execution.d.ts.map +1 -0
  147. package/dist/authorization/model/workflow_execution.js +32 -0
  148. package/dist/authorization/model/workflow_execution.js.map +1 -0
  149. package/dist/authorization/model/workflow_instance.d.ts +2 -0
  150. package/dist/authorization/model/workflow_instance.d.ts.map +1 -0
  151. package/dist/authorization/model/workflow_instance.js +92 -0
  152. package/dist/authorization/model/workflow_instance.js.map +1 -0
  153. package/dist/authorization/organization-directory.d.ts +13 -0
  154. package/dist/authorization/organization-directory.d.ts.map +1 -0
  155. package/dist/authorization/organization-directory.js +83 -0
  156. package/dist/authorization/organization-directory.js.map +1 -0
  157. package/dist/authorization/person.d.ts +42 -0
  158. package/dist/authorization/person.d.ts.map +1 -0
  159. package/dist/authorization/person.js +19 -0
  160. package/dist/authorization/person.js.map +1 -0
  161. package/dist/authorization/posture.d.ts +38 -0
  162. package/dist/authorization/posture.d.ts.map +1 -0
  163. package/dist/authorization/posture.js +7 -0
  164. package/dist/authorization/posture.js.map +1 -0
  165. package/dist/authorization/schedule-fire-caller.d.ts +12 -0
  166. package/dist/authorization/schedule-fire-caller.d.ts.map +1 -0
  167. package/dist/authorization/schedule-fire-caller.js +67 -0
  168. package/dist/authorization/schedule-fire-caller.js.map +1 -0
  169. package/dist/authorization/store-test-kit.d.ts +68 -0
  170. package/dist/authorization/store-test-kit.d.ts.map +1 -0
  171. package/dist/authorization/store-test-kit.js +311 -0
  172. package/dist/authorization/store-test-kit.js.map +1 -0
  173. package/dist/authorization/tuples.d.ts +115 -0
  174. package/dist/authorization/tuples.d.ts.map +1 -0
  175. package/dist/authorization/tuples.js +83 -0
  176. package/dist/authorization/tuples.js.map +1 -0
  177. package/dist/boot/compose.d.ts.map +1 -1
  178. package/dist/boot/compose.js +157 -32
  179. package/dist/boot/compose.js.map +1 -1
  180. package/dist/boot/inprocess.d.ts +12 -0
  181. package/dist/boot/inprocess.d.ts.map +1 -1
  182. package/dist/boot/inprocess.js +62 -20
  183. package/dist/boot/inprocess.js.map +1 -1
  184. package/dist/domain/agent/controller.d.ts.map +1 -1
  185. package/dist/domain/agent/controller.js +9 -0
  186. package/dist/domain/agent/controller.js.map +1 -1
  187. package/dist/domain/iampolicy/constants.d.ts +11 -0
  188. package/dist/domain/iampolicy/constants.d.ts.map +1 -1
  189. package/dist/domain/iampolicy/constants.js +11 -0
  190. package/dist/domain/iampolicy/constants.js.map +1 -1
  191. package/dist/domain/iampolicy/membership.d.ts +72 -1
  192. package/dist/domain/iampolicy/membership.d.ts.map +1 -1
  193. package/dist/domain/iampolicy/membership.js +141 -56
  194. package/dist/domain/iampolicy/membership.js.map +1 -1
  195. package/dist/domain/identityaccount/actor.d.ts +26 -0
  196. package/dist/domain/identityaccount/actor.d.ts.map +1 -0
  197. package/dist/domain/identityaccount/actor.js +17 -0
  198. package/dist/domain/identityaccount/actor.js.map +1 -0
  199. package/dist/domain/mcpserver/controller.d.ts.map +1 -1
  200. package/dist/domain/mcpserver/controller.js +9 -0
  201. package/dist/domain/mcpserver/controller.js.map +1 -1
  202. package/dist/domain/plugin/archive.d.ts +37 -0
  203. package/dist/domain/plugin/archive.d.ts.map +1 -0
  204. package/dist/domain/plugin/archive.js +50 -0
  205. package/dist/domain/plugin/archive.js.map +1 -0
  206. package/dist/domain/plugin/constants.d.ts +38 -0
  207. package/dist/domain/plugin/constants.d.ts.map +1 -0
  208. package/dist/domain/plugin/constants.js +46 -0
  209. package/dist/domain/plugin/constants.js.map +1 -0
  210. package/dist/domain/plugin/controller.d.ts +25 -0
  211. package/dist/domain/plugin/controller.d.ts.map +1 -0
  212. package/dist/domain/plugin/controller.js +493 -0
  213. package/dist/domain/plugin/controller.js.map +1 -0
  214. package/dist/domain/plugin/materialize/agent.d.ts +13 -0
  215. package/dist/domain/plugin/materialize/agent.d.ts.map +1 -0
  216. package/dist/domain/plugin/materialize/agent.js +128 -0
  217. package/dist/domain/plugin/materialize/agent.js.map +1 -0
  218. package/dist/domain/plugin/materialize/default-agent-instructions.d.ts +22 -0
  219. package/dist/domain/plugin/materialize/default-agent-instructions.d.ts.map +1 -0
  220. package/dist/domain/plugin/materialize/default-agent-instructions.js +31 -0
  221. package/dist/domain/plugin/materialize/default-agent-instructions.js.map +1 -0
  222. package/dist/domain/plugin/materialize/identity.d.ts +28 -0
  223. package/dist/domain/plugin/materialize/identity.d.ts.map +1 -0
  224. package/dist/domain/plugin/materialize/identity.js +40 -0
  225. package/dist/domain/plugin/materialize/identity.js.map +1 -0
  226. package/dist/domain/plugin/materialize/mcp-servers.d.ts +15 -0
  227. package/dist/domain/plugin/materialize/mcp-servers.d.ts.map +1 -0
  228. package/dist/domain/plugin/materialize/mcp-servers.js +131 -0
  229. package/dist/domain/plugin/materialize/mcp-servers.js.map +1 -0
  230. package/dist/domain/plugin/materialize/plan.d.ts +24 -0
  231. package/dist/domain/plugin/materialize/plan.d.ts.map +1 -0
  232. package/dist/domain/plugin/materialize/plan.js +77 -0
  233. package/dist/domain/plugin/materialize/plan.js.map +1 -0
  234. package/dist/domain/plugin/materialize/ports.d.ts +42 -0
  235. package/dist/domain/plugin/materialize/ports.d.ts.map +1 -0
  236. package/dist/domain/plugin/materialize/ports.js +2 -0
  237. package/dist/domain/plugin/materialize/ports.js.map +1 -0
  238. package/dist/domain/plugin/materialize/skills.d.ts +12 -0
  239. package/dist/domain/plugin/materialize/skills.d.ts.map +1 -0
  240. package/dist/domain/plugin/materialize/skills.js +44 -0
  241. package/dist/domain/plugin/materialize/skills.js.map +1 -0
  242. package/dist/domain/plugin/materialize/workflows.d.ts +15 -0
  243. package/dist/domain/plugin/materialize/workflows.d.ts.map +1 -0
  244. package/dist/domain/plugin/materialize/workflows.js +31 -0
  245. package/dist/domain/plugin/materialize/workflows.js.map +1 -0
  246. package/dist/domain/plugin/members.d.ts +42 -0
  247. package/dist/domain/plugin/members.d.ts.map +1 -0
  248. package/dist/domain/plugin/members.js +97 -0
  249. package/dist/domain/plugin/members.js.map +1 -0
  250. package/dist/domain/plugin/overlay/documents.d.ts +31 -0
  251. package/dist/domain/plugin/overlay/documents.d.ts.map +1 -0
  252. package/dist/domain/plugin/overlay/documents.js +38 -0
  253. package/dist/domain/plugin/overlay/documents.js.map +1 -0
  254. package/dist/domain/plugin/overlay/parse.d.ts +16 -0
  255. package/dist/domain/plugin/overlay/parse.d.ts.map +1 -0
  256. package/dist/domain/plugin/overlay/parse.js +79 -0
  257. package/dist/domain/plugin/overlay/parse.js.map +1 -0
  258. package/dist/domain/plugin/overlay/sanitize.d.ts +10 -0
  259. package/dist/domain/plugin/overlay/sanitize.d.ts.map +1 -0
  260. package/dist/domain/plugin/overlay/sanitize.js +101 -0
  261. package/dist/domain/plugin/overlay/sanitize.js.map +1 -0
  262. package/dist/domain/plugin/push.d.ts +133 -0
  263. package/dist/domain/plugin/push.d.ts.map +1 -0
  264. package/dist/domain/plugin/push.js +800 -0
  265. package/dist/domain/plugin/push.js.map +1 -0
  266. package/dist/domain/plugin/search-extractor.d.ts +3 -0
  267. package/dist/domain/plugin/search-extractor.d.ts.map +1 -0
  268. package/dist/domain/plugin/search-extractor.js +41 -0
  269. package/dist/domain/plugin/search-extractor.js.map +1 -0
  270. package/dist/domain/skill/constants.d.ts +6 -11
  271. package/dist/domain/skill/constants.d.ts.map +1 -1
  272. package/dist/domain/skill/constants.js +6 -11
  273. package/dist/domain/skill/constants.js.map +1 -1
  274. package/dist/domain/skill/controller.d.ts.map +1 -1
  275. package/dist/domain/skill/controller.js +33 -30
  276. package/dist/domain/skill/controller.js.map +1 -1
  277. package/dist/domain/skill/push.d.ts +9 -10
  278. package/dist/domain/skill/push.d.ts.map +1 -1
  279. package/dist/domain/skill/push.js +53 -122
  280. package/dist/domain/skill/push.js.map +1 -1
  281. package/dist/domain/skill/search-extractor.d.ts.map +1 -1
  282. package/dist/domain/skill/search-extractor.js.map +1 -1
  283. package/dist/domain/skill/storage/artifact-storage.d.ts +26 -29
  284. package/dist/domain/skill/storage/artifact-storage.d.ts.map +1 -1
  285. package/dist/domain/skill/storage/artifact-storage.js +6 -103
  286. package/dist/domain/skill/storage/artifact-storage.js.map +1 -1
  287. package/dist/domain/skill/storage/zip-gate.d.ts +1 -2
  288. package/dist/domain/skill/storage/zip-gate.d.ts.map +1 -1
  289. package/dist/domain/skill/storage/zip-gate.js +56 -126
  290. package/dist/domain/skill/storage/zip-gate.js.map +1 -1
  291. package/dist/domain/skill/version-resolution.d.ts +5 -5
  292. package/dist/domain/skill/version-resolution.d.ts.map +1 -1
  293. package/dist/domain/skill/version-resolution.js +34 -216
  294. package/dist/domain/skill/version-resolution.js.map +1 -1
  295. package/dist/domain/workflow/controller.d.ts.map +1 -1
  296. package/dist/domain/workflow/controller.js +30 -3
  297. package/dist/domain/workflow/controller.js.map +1 -1
  298. package/dist/domain/workflow/registry/data/task-kind-registry.json +1 -0
  299. package/dist/extensions/authorizer.d.ts +10 -5
  300. package/dist/extensions/authorizer.d.ts.map +1 -1
  301. package/dist/extensions/drivers.d.ts +4 -1
  302. package/dist/extensions/drivers.d.ts.map +1 -1
  303. package/dist/extensions/list-read-scope.d.ts +75 -11
  304. package/dist/extensions/list-read-scope.d.ts.map +1 -1
  305. package/dist/extensions/list-read-scope.js +40 -7
  306. package/dist/extensions/list-read-scope.js.map +1 -1
  307. package/dist/extensions/organization-directory.d.ts +13 -9
  308. package/dist/extensions/organization-directory.d.ts.map +1 -1
  309. package/dist/extensions/organization-directory.js.map +1 -1
  310. package/dist/extensions/resource-authorization.d.ts +33 -0
  311. package/dist/extensions/resource-authorization.d.ts.map +1 -1
  312. package/dist/extensions/schedule-fire-caller.d.ts +45 -18
  313. package/dist/extensions/schedule-fire-caller.d.ts.map +1 -1
  314. package/dist/extensions/schedule-fire-caller.js +12 -1
  315. package/dist/extensions/schedule-fire-caller.js.map +1 -1
  316. package/dist/index.d.ts +10 -0
  317. package/dist/index.d.ts.map +1 -1
  318. package/dist/index.js +8 -0
  319. package/dist/index.js.map +1 -1
  320. package/dist/pipeline/apiresource-labels.d.ts +23 -3
  321. package/dist/pipeline/apiresource-labels.d.ts.map +1 -1
  322. package/dist/pipeline/apiresource-labels.js +20 -0
  323. package/dist/pipeline/apiresource-labels.js.map +1 -1
  324. package/dist/pipeline/apiresource-meta.d.ts +21 -0
  325. package/dist/pipeline/apiresource-meta.d.ts.map +1 -1
  326. package/dist/pipeline/apiresource-meta.js +28 -0
  327. package/dist/pipeline/apiresource-meta.js.map +1 -1
  328. package/dist/pipeline/errors.d.ts.map +1 -1
  329. package/dist/pipeline/errors.js.map +1 -1
  330. package/dist/pipeline/steps/authorization-facts.d.ts +12 -0
  331. package/dist/pipeline/steps/authorization-facts.d.ts.map +1 -0
  332. package/dist/pipeline/steps/authorization-facts.js +100 -0
  333. package/dist/pipeline/steps/authorization-facts.js.map +1 -0
  334. package/dist/pipeline/steps/authorization-tuples.d.ts.map +1 -1
  335. package/dist/pipeline/steps/authorization-tuples.js +7 -26
  336. package/dist/pipeline/steps/authorization-tuples.js.map +1 -1
  337. package/dist/pipeline/steps/delete.d.ts.map +1 -1
  338. package/dist/pipeline/steps/delete.js +1 -1
  339. package/dist/pipeline/steps/delete.js.map +1 -1
  340. package/dist/pipeline/steps/duplicate.d.ts.map +1 -1
  341. package/dist/pipeline/steps/duplicate.js.map +1 -1
  342. package/dist/pipeline/steps/guard-plugin-managed.d.ts +12 -0
  343. package/dist/pipeline/steps/guard-plugin-managed.d.ts.map +1 -0
  344. package/dist/pipeline/steps/guard-plugin-managed.js +96 -0
  345. package/dist/pipeline/steps/guard-plugin-managed.js.map +1 -0
  346. package/dist/pipeline/steps/guard-reserved-labels.d.ts +16 -2
  347. package/dist/pipeline/steps/guard-reserved-labels.d.ts.map +1 -1
  348. package/dist/pipeline/steps/guard-reserved-labels.js +11 -7
  349. package/dist/pipeline/steps/guard-reserved-labels.js.map +1 -1
  350. package/dist/pipeline/steps/helpers.d.ts.map +1 -1
  351. package/dist/pipeline/steps/helpers.js.map +1 -1
  352. package/dist/pipeline/steps/index-search.d.ts.map +1 -1
  353. package/dist/pipeline/steps/index-search.js.map +1 -1
  354. package/dist/pipeline/steps/load-existing.d.ts.map +1 -1
  355. package/dist/pipeline/steps/load-existing.js +1 -1
  356. package/dist/pipeline/steps/load-existing.js.map +1 -1
  357. package/dist/pipeline/steps/references.d.ts +16 -0
  358. package/dist/pipeline/steps/references.d.ts.map +1 -1
  359. package/dist/pipeline/steps/references.js +18 -0
  360. package/dist/pipeline/steps/references.js.map +1 -1
  361. package/dist/pipeline/steps/resolve-artifact-source.d.ts +35 -0
  362. package/dist/pipeline/steps/resolve-artifact-source.d.ts.map +1 -0
  363. package/dist/pipeline/steps/resolve-artifact-source.js +27 -0
  364. package/dist/pipeline/steps/resolve-artifact-source.js.map +1 -0
  365. package/dist/pipeline/steps/server-stamped-reserved-labels.d.ts.map +1 -1
  366. package/dist/pipeline/steps/server-stamped-reserved-labels.js.map +1 -1
  367. package/dist/pipeline/steps/shapes.d.ts +18 -0
  368. package/dist/pipeline/steps/shapes.d.ts.map +1 -1
  369. package/dist/pipeline/steps/shapes.js +29 -0
  370. package/dist/pipeline/steps/shapes.js.map +1 -1
  371. package/dist/pipeline/steps/slug.d.ts.map +1 -1
  372. package/dist/pipeline/steps/slug.js.map +1 -1
  373. package/dist/pipeline/steps/validate-visibility.d.ts +9 -0
  374. package/dist/pipeline/steps/validate-visibility.d.ts.map +1 -1
  375. package/dist/pipeline/steps/validate-visibility.js +6 -1
  376. package/dist/pipeline/steps/validate-visibility.js.map +1 -1
  377. package/dist/pipeline/steps/validation.d.ts.map +1 -1
  378. package/dist/pipeline/steps/validation.js.map +1 -1
  379. package/dist/pipeline/steps/version-archive.d.ts +63 -0
  380. package/dist/pipeline/steps/version-archive.d.ts.map +1 -0
  381. package/dist/pipeline/steps/version-archive.js +129 -0
  382. package/dist/pipeline/steps/version-archive.js.map +1 -0
  383. package/dist/pipeline/steps/version-history.d.ts +49 -0
  384. package/dist/pipeline/steps/version-history.d.ts.map +1 -0
  385. package/dist/pipeline/steps/version-history.js +229 -0
  386. package/dist/pipeline/steps/version-history.js.map +1 -0
  387. package/dist/pipeline/steps/visibility-gates.d.ts +8 -0
  388. package/dist/pipeline/steps/visibility-gates.d.ts.map +1 -1
  389. package/dist/pipeline/steps/visibility-gates.js +7 -2
  390. package/dist/pipeline/steps/visibility-gates.js.map +1 -1
  391. package/dist/query/search/registry.d.ts.map +1 -1
  392. package/dist/query/search/registry.js +2 -0
  393. package/dist/query/search/registry.js.map +1 -1
  394. package/dist/temporal/schedule/run-starter.d.ts +1 -1
  395. package/dist/temporal/schedule/run-starter.d.ts.map +1 -1
  396. package/dist/temporal/schedule/run-starter.js +14 -1
  397. package/dist/temporal/schedule/run-starter.js.map +1 -1
  398. package/package.json +5 -4
  399. package/src/archive/__tests__/archive.test.ts +233 -0
  400. package/src/{domain/skill → archive}/__tests__/prefilter.test.ts +1 -1
  401. package/src/archive/content-store.ts +132 -0
  402. package/src/archive/inflate.ts +107 -0
  403. package/src/archive/limits.ts +42 -0
  404. package/src/archive/open.ts +131 -0
  405. package/src/{domain/skill/storage → archive}/prefilter.ts +5 -0
  406. package/src/archive/write.ts +54 -0
  407. package/src/authorization/README.md +124 -0
  408. package/src/authorization/__tests__/authorizer.test.ts +719 -0
  409. package/src/authorization/__tests__/derived-tuples.test.ts +802 -0
  410. package/src/authorization/__tests__/drivers.ts +70 -0
  411. package/src/authorization/__tests__/evaluator.test.ts +359 -0
  412. package/src/authorization/__tests__/facts.test.ts +155 -0
  413. package/src/authorization/__tests__/fixtures/fga/agent-channel-owner.fga.yaml +112 -0
  414. package/src/authorization/__tests__/fixtures/fga/agent-share-owner.fga.yaml +109 -0
  415. package/src/authorization/__tests__/fixtures/fga/artifact-org-and-owner.fga.yaml +128 -0
  416. package/src/authorization/__tests__/fixtures/fga/blueprint-private-visibility.fga.yaml +410 -0
  417. package/src/authorization/__tests__/fixtures/fga/channel-app-owner.fga.yaml +125 -0
  418. package/src/authorization/__tests__/fixtures/fga/channel-participation.fga.yaml +201 -0
  419. package/src/authorization/__tests__/fixtures/fga/channel-session-visibility.fga.yaml +187 -0
  420. package/src/authorization/__tests__/fixtures/fga/cross-org-share-creation.fga.yaml +98 -0
  421. package/src/authorization/__tests__/fixtures/fga/default-instance-inheritance.fga.yaml +271 -0
  422. package/src/authorization/__tests__/fixtures/fga/memory-subject-only.fga.yaml +72 -0
  423. package/src/authorization/__tests__/fixtures/fga/org-admin-owner-inheritance.fga.yaml +328 -0
  424. package/src/authorization/__tests__/fixtures/fga/org-shared-environment.fga.yaml +144 -0
  425. package/src/authorization/__tests__/fixtures/fga/platform-visibility.fga.yaml +223 -0
  426. package/src/authorization/__tests__/fixtures/fga/provider-standing-viewer.fga.yaml +40 -0
  427. package/src/authorization/__tests__/fixtures/fga/public-visibility-setter.fga.yaml +52 -0
  428. package/src/authorization/__tests__/fixtures/fga/reserved-label-writer.fga.yaml +41 -0
  429. package/src/authorization/__tests__/fixtures/fga/schedule-owner.fga.yaml +113 -0
  430. package/src/authorization/__tests__/fixtures/fga/schedule-session-visibility.fga.yaml +214 -0
  431. package/src/authorization/__tests__/fixtures/fga/session-personal-resource.fga.yaml +117 -0
  432. package/src/authorization/__tests__/fixtures/fga/workflow-execution-sharing.fga.yaml +192 -0
  433. package/src/authorization/__tests__/list-read-scope.measure.test.ts +317 -0
  434. package/src/authorization/__tests__/list-read-scope.test.ts +796 -0
  435. package/src/authorization/__tests__/organization-directory.test.ts +236 -0
  436. package/src/authorization/__tests__/person.test.ts +114 -0
  437. package/src/authorization/__tests__/posture.test.ts +25 -0
  438. package/src/authorization/__tests__/schedule-fire-caller.test.ts +134 -0
  439. package/src/authorization/__tests__/store-tests.test.ts +306 -0
  440. package/src/authorization/__tests__/support.ts +101 -0
  441. package/src/authorization/__tests__/tuples.test.ts +62 -0
  442. package/src/authorization/__tests__/wire-permissions.test.ts +154 -0
  443. package/src/authorization/authorizer.ts +208 -0
  444. package/src/authorization/derived-tuples.ts +384 -0
  445. package/src/authorization/evaluator.ts +283 -0
  446. package/src/authorization/facts.ts +47 -0
  447. package/src/authorization/list-read-scope.ts +216 -0
  448. package/src/authorization/model/__tests__/registry.test.ts +317 -0
  449. package/src/authorization/model/agent.ts +64 -0
  450. package/src/authorization/model/agent_channel.ts +49 -0
  451. package/src/authorization/model/agent_execution.ts +33 -0
  452. package/src/authorization/model/agent_instance.ts +66 -0
  453. package/src/authorization/model/agent_share.ts +40 -0
  454. package/src/authorization/model/api_key.ts +28 -0
  455. package/src/authorization/model/artifact.ts +38 -0
  456. package/src/authorization/model/channel_app.ts +39 -0
  457. package/src/authorization/model/default-of.ts +99 -0
  458. package/src/authorization/model/environment.ts +48 -0
  459. package/src/authorization/model/execution_context.ts +20 -0
  460. package/src/authorization/model/iam_policy.ts +42 -0
  461. package/src/authorization/model/identity_account.ts +26 -0
  462. package/src/authorization/model/index.ts +108 -0
  463. package/src/authorization/model/mcp_server.ts +59 -0
  464. package/src/authorization/model/memory.ts +27 -0
  465. package/src/authorization/model/oauth_app.ts +42 -0
  466. package/src/authorization/model/organization.ts +55 -0
  467. package/src/authorization/model/plugin.ts +66 -0
  468. package/src/authorization/model/project.ts +47 -0
  469. package/src/authorization/model/rewrite.ts +213 -0
  470. package/src/authorization/model/schedule.ts +40 -0
  471. package/src/authorization/model/session.ts +50 -0
  472. package/src/authorization/model/skill.ts +60 -0
  473. package/src/authorization/model/workflow.ts +60 -0
  474. package/src/authorization/model/workflow_execution.ts +44 -0
  475. package/src/authorization/model/workflow_instance.ts +122 -0
  476. package/src/authorization/organization-directory.ts +114 -0
  477. package/src/authorization/person.ts +68 -0
  478. package/src/authorization/posture.ts +49 -0
  479. package/src/authorization/schedule-fire-caller.ts +91 -0
  480. package/src/authorization/store-test-kit.ts +454 -0
  481. package/src/authorization/tuples.ts +190 -0
  482. package/src/boot/compose.ts +175 -38
  483. package/src/boot/inprocess.ts +108 -30
  484. package/src/domain/agent/controller.ts +11 -0
  485. package/src/domain/iampolicy/__tests__/membership.test.ts +357 -3
  486. package/src/domain/iampolicy/constants.ts +12 -0
  487. package/src/domain/iampolicy/membership.ts +221 -66
  488. package/src/domain/identityaccount/actor.ts +44 -0
  489. package/src/domain/mcpserver/controller.ts +11 -0
  490. package/src/domain/plugin/__tests__/materialize.test.ts +303 -0
  491. package/src/domain/plugin/__tests__/overlay-parse.test.ts +85 -0
  492. package/src/domain/plugin/__tests__/plugin.test.ts +681 -0
  493. package/src/domain/plugin/__tests__/sanitize.test.ts +174 -0
  494. package/src/domain/plugin/archive.ts +89 -0
  495. package/src/domain/plugin/constants.ts +53 -0
  496. package/src/domain/plugin/controller.ts +913 -0
  497. package/src/domain/plugin/materialize/agent.ts +186 -0
  498. package/src/domain/plugin/materialize/default-agent-instructions.ts +59 -0
  499. package/src/domain/plugin/materialize/identity.ts +67 -0
  500. package/src/domain/plugin/materialize/mcp-servers.ts +175 -0
  501. package/src/domain/plugin/materialize/plan.ts +124 -0
  502. package/src/domain/plugin/materialize/ports.ts +53 -0
  503. package/src/domain/plugin/materialize/skills.ts +68 -0
  504. package/src/domain/plugin/materialize/workflows.ts +51 -0
  505. package/src/domain/plugin/members.ts +180 -0
  506. package/src/domain/plugin/overlay/documents.ts +78 -0
  507. package/src/domain/plugin/overlay/parse.ts +115 -0
  508. package/src/domain/plugin/overlay/sanitize.ts +149 -0
  509. package/src/domain/plugin/push.ts +1062 -0
  510. package/src/domain/plugin/search-extractor.ts +60 -0
  511. package/src/domain/skill/constants.ts +11 -14
  512. package/src/domain/skill/controller.ts +44 -36
  513. package/src/domain/skill/push.ts +61 -156
  514. package/src/domain/skill/search-extractor.ts +3 -1
  515. package/src/domain/skill/storage/artifact-storage.ts +23 -124
  516. package/src/domain/skill/storage/zip-gate.ts +58 -154
  517. package/src/domain/skill/version-resolution.ts +67 -269
  518. package/src/domain/workflow/controller.ts +38 -4
  519. package/src/domain/workflow/registry/data/task-kind-registry.json +1 -0
  520. package/src/extensions/__tests__/built-in-authorization-composed.test.ts +835 -0
  521. package/src/extensions/__tests__/composed-support.ts +32 -1
  522. package/src/extensions/__tests__/extension-composition.test.ts +35 -0
  523. package/src/extensions/__tests__/list-read-scope.test.ts +245 -3
  524. package/src/extensions/__tests__/role-reconciliation-composed.test.ts +209 -0
  525. package/src/extensions/__tests__/tier-truthfulness.test.ts +6 -14
  526. package/src/extensions/authorizer.ts +10 -5
  527. package/src/extensions/drivers.ts +4 -1
  528. package/src/extensions/list-read-scope.ts +116 -16
  529. package/src/extensions/organization-directory.ts +13 -9
  530. package/src/extensions/resource-authorization.ts +34 -0
  531. package/src/extensions/schedule-fire-caller.ts +49 -18
  532. package/src/index.ts +51 -1
  533. package/src/pipeline/__tests__/inherited-authorization-parent.test.ts +51 -0
  534. package/src/pipeline/__tests__/router-transport.test.ts +1 -3
  535. package/src/pipeline/apiresource-labels.ts +31 -3
  536. package/src/pipeline/apiresource-meta.ts +37 -0
  537. package/src/pipeline/errors.ts +5 -5
  538. package/src/pipeline/steps/__tests__/authorize-annotation-completeness.test.ts +1 -20
  539. package/src/pipeline/steps/__tests__/guard-memory-capture.test.ts +3 -9
  540. package/src/pipeline/steps/__tests__/guard-plugin-managed.test.ts +151 -0
  541. package/src/pipeline/steps/__tests__/guard-reserved-labels.test.ts +83 -8
  542. package/src/pipeline/steps/authorization-facts.ts +131 -0
  543. package/src/pipeline/steps/authorization-tuples.ts +7 -28
  544. package/src/pipeline/steps/delete.ts +11 -3
  545. package/src/pipeline/steps/duplicate.ts +8 -2
  546. package/src/pipeline/steps/guard-plugin-managed.ts +133 -0
  547. package/src/pipeline/steps/guard-reserved-labels.ts +29 -8
  548. package/src/pipeline/steps/helpers.ts +4 -1
  549. package/src/pipeline/steps/index-search.ts +28 -15
  550. package/src/pipeline/steps/load-existing.ts +12 -3
  551. package/src/pipeline/steps/references.ts +36 -2
  552. package/src/pipeline/steps/resolve-artifact-source.ts +66 -0
  553. package/src/pipeline/steps/server-stamped-reserved-labels.ts +2 -1
  554. package/src/pipeline/steps/shapes.ts +31 -0
  555. package/src/pipeline/steps/slug.ts +7 -2
  556. package/src/pipeline/steps/validate-visibility.ts +9 -2
  557. package/src/pipeline/steps/validation.ts +3 -1
  558. package/src/pipeline/steps/version-archive.ts +225 -0
  559. package/src/pipeline/steps/version-history.ts +362 -0
  560. package/src/pipeline/steps/visibility-gates.ts +12 -9
  561. package/src/query/README.md +1 -1
  562. package/src/query/search/__tests__/criteria.test.ts +6 -7
  563. package/src/query/search/__tests__/query-store.test.ts +9 -2
  564. package/src/query/search/__tests__/registry.test.ts +6 -4
  565. package/src/query/search/registry.ts +6 -1
  566. package/src/temporal/schedule/__tests__/run-starter.test.ts +86 -24
  567. package/src/temporal/schedule/run-starter.ts +31 -8
  568. package/dist/domain/skill/storage/prefilter.d.ts.map +0 -1
  569. package/dist/domain/skill/storage/prefilter.js.map +0 -1
  570. /package/dist/{domain/skill/storage → archive}/prefilter.js +0 -0
@@ -22,6 +22,35 @@ export function idValueOf(msg) {
22
22
  const value = msg.value;
23
23
  return typeof value === "string" ? value : "";
24
24
  }
25
+ /** proto snake_case field name → the generated property name. */
26
+ function camelCaseFieldName(specField) {
27
+ return specField.replace(/_([a-z0-9])/g, (_, ch) => ch.toUpperCase());
28
+ }
29
+ /**
30
+ * The parent id a `kind_meta` ParentRelationConfig names by `spec_field`,
31
+ * read from the resource's spec — the ParentIdExtractorRegistry port, with
32
+ * zero hardcoded kind knowledge: the proto config names the field, this
33
+ * reads it structurally (spec messages are plain objects whose properties
34
+ * are the camelCase proto field names). Returns "" for every miss (no
35
+ * spec, no field, non-string value); the caller decides whether that is
36
+ * fatal — the tuple lifecycle throws at create (Java's registry returned
37
+ * null and the service threw), the list scope carries no parent.
38
+ *
39
+ * ONE reader for both: the id the authorization tuple was written with is
40
+ * the id the list scope later asks the authorization backend about, so
41
+ * the two cannot drift (20260913.04 T04). Takes `object` rather than
42
+ * `Message` because the list lanes hand the scope structurally-typed rows
43
+ * and their unit suite hands it plain objects — the same posture
44
+ * `metadataOf` takes behind its cast.
45
+ */
46
+ export function parentIdOf(resource, specField) {
47
+ const spec = resource.spec;
48
+ if (spec === undefined) {
49
+ return "";
50
+ }
51
+ const value = spec[camelCaseFieldName(specField)];
52
+ return typeof value === "string" ? value : "";
53
+ }
25
54
  /**
26
55
  * Finds a singular message field by proto name with the narrowing TS needs
27
56
  * to give ReflectMessage out of get() — the reflection idiom every helper
@@ -1 +1 @@
1
- {"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../../src/pipeline/steps/shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAgBrD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,OAAQ,GAAmC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,MAAM,KAAK,GAAI,GAAyC,CAAC,KAAK,CAAC;IAC/D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAKD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAmB,EACnB,IAAY;IAEZ,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QACzD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,GAAY;IAEZ,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAmB,EACnB,GAAY;IAEZ,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CACxD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../../src/pipeline/steps/shapes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/slug.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,WAAW,KAAK,YAAY,CAAC,IAAI,CAAC,CAmBjF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjD"}
1
+ {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/slug.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,wBAAgB,kBAAkB,CAChC,IAAI,SAAS,WAAW,KACrB,YAAY,CAAC,IAAI,CAAC,CAsBtB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../../src/pipeline/steps/slug.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,CAAC,GAAyB;YAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,8DAA8D;gBAC9D,MAAM,aAAa,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBACzB,OAAO,CAAC,2BAA2B;YACrC,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBACzB,gDAAgD;gBAChD,MAAM,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;YAC1D,CAAC;YACD,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../../src/pipeline/steps/slug.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,kBAAkB;IAGhC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,OAAO,CAAC,GAAyB;YAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,8DAA8D;gBAC9D,MAAM,aAAa,CACjB,IAAI,KAAK,CAAC,0BAA0B,CAAC,EACrC,iBAAiB,CAClB,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBACzB,OAAO,CAAC,2BAA2B;YACrC,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBACzB,gDAAgD;gBAChD,MAAM,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;YAC1D,CAAC;YACD,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC"}
@@ -15,7 +15,9 @@
15
15
  * (Cloud's push handler does not validate either) — do not "fix" these.
16
16
  */
17
17
  import type { DescMessage } from "@bufbuild/protobuf";
18
+ import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
18
19
  import { UpdateVisibilityInputSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/io_pb";
20
+ import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
19
21
  import type { PipelineStep } from "../pipeline.js";
20
22
  export declare function newValidateVisibilityStep<Desc extends DescMessage>(): PipelineStep<Desc>;
21
23
  export declare function newValidateVisibilityUpdateStep(): PipelineStep<typeof UpdateVisibilityInputSchema>;
@@ -26,4 +28,11 @@ export declare function newValidateVisibilityUpdateStep(): PipelineStep<typeof U
26
28
  * the PREDICATE lives in the instance controllers' own guard steps.
27
29
  */
28
30
  export declare function rejectDefaultInstanceVisibilityUpdate(): never;
31
+ /** Go rejectUnsupportedVisibility (the shared level check + copy). */
32
+ /**
33
+ * The one sentence for a level a kind does not support. Exported for the
34
+ * push-shaped chains whose requested level rides the request rather than
35
+ * a resource's metadata (plugin push), so the copy stays in one place.
36
+ */
37
+ export declare function rejectUnsupportedVisibility(kind: ApiResourceKind, visibility: ApiResourceVisibility): void;
29
38
  //# sourceMappingURL=validate-visibility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-visibility.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/validate-visibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAanG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,wBAAgB,yBAAyB,CAAC,IAAI,SAAS,WAAW,KAAK,YAAY,CAAC,IAAI,CAAC,CAWxF;AAED,wBAAgB,+BAA+B,IAAI,YAAY,CAC7D,OAAO,2BAA2B,CACnC,CAOA;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,IAAI,KAAK,CAK7D"}
1
+ {"version":3,"file":"validate-visibility.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/validate-visibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAYtH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,wBAAgB,yBAAyB,CACvC,IAAI,SAAS,WAAW,KACrB,YAAY,CAAC,IAAI,CAAC,CAWtB;AAED,wBAAgB,+BAA+B,IAAI,YAAY,CAC7D,OAAO,2BAA2B,CACnC,CAOA;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,IAAI,KAAK,CAK7D;AAED,sEAAsE;AACtE;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,eAAe,EACrB,UAAU,EAAE,qBAAqB,GAChC,IAAI,CAeN"}
@@ -34,7 +34,12 @@ export function rejectDefaultInstanceVisibilityUpdate() {
34
34
  "the parent blueprint. Change the blueprint's visibility instead.");
35
35
  }
36
36
  /** Go rejectUnsupportedVisibility (the shared level check + copy). */
37
- function rejectUnsupportedVisibility(kind, visibility) {
37
+ /**
38
+ * The one sentence for a level a kind does not support. Exported for the
39
+ * push-shaped chains whose requested level rides the request rather than
40
+ * a resource's metadata (plugin push), so the copy stays in one place.
41
+ */
42
+ export function rejectUnsupportedVisibility(kind, visibility) {
38
43
  let supported;
39
44
  let levels;
40
45
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"validate-visibility.js","sourceRoot":"","sources":["../../../src/pipeline/steps/validate-visibility.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAI/F,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,OAAO,CAAC,GAAyB;YAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,yDAAyD;YACnE,CAAC;YACD,2BAA2B,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B;IAG7C,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,OAAO,CAAC,GAAuD;YAC7D,2BAA2B,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzE,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qCAAqC;IACnD,MAAM,uBAAuB,CAC3B,6EAA6E;QAC3E,kEAAkE,CACrE,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,SAAS,2BAA2B,CAClC,IAAqB,EACrB,UAAiC;IAEjC,IAAI,SAAkB,CAAC;IACvB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,aAAa,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IACD,MAAM,oBAAoB,CACxB,GAAG,mBAAmB,CAAC,IAAI,CAAC,+BAA+B,qBAAqB,CAAC,UAAU,CAAC,kCAAkC,MAAM,GAAG,CACxI,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validate-visibility.js","sourceRoot":"","sources":["../../../src/pipeline/steps/validate-visibility.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAI/F,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,yBAAyB;IAGvC,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,OAAO,CAAC,GAAyB;YAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,yDAAyD;YACnE,CAAC;YACD,2BAA2B,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B;IAG7C,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,OAAO,CAAC,GAAuD;YAC7D,2BAA2B,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzE,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qCAAqC;IACnD,MAAM,uBAAuB,CAC3B,6EAA6E;QAC3E,kEAAkE,CACrE,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAqB,EACrB,UAAiC;IAEjC,IAAI,SAAkB,CAAC;IACvB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,aAAa,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IACD,MAAM,oBAAoB,CACxB,GAAG,mBAAmB,CAAC,IAAI,CAAC,+BAA+B,qBAAqB,CAAC,UAAU,CAAC,kCAAkC,MAAM,GAAG,CACxI,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/validation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAOnD,wBAAgB,SAAS,IAAI,SAAS,CAKrC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,SAAS,WAAW,KAAK,YAAY,CAAC,IAAI,CAAC,CAmBnF"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/validation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAOnD,wBAAgB,SAAS,IAAI,SAAS,CAKrC;AAED,wBAAgB,oBAAoB,CAClC,IAAI,SAAS,WAAW,KACrB,YAAY,CAAC,IAAI,CAAC,CAmBtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/pipeline/steps/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM1D,0EAA0E;AAC1E,yBAAyB;AACzB,IAAI,eAAsC,CAAC;AAE3C,MAAM,UAAU,SAAS;IACvB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,eAAe,GAAG,eAAe,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,CAAC,GAAyB;YAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACrE,CAAC;YACD,oEAAoE;YACpE,qDAAqD;YACrD,MAAM,IAAI,YAAY,CACpB,6BAA6B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EACnD,IAAI,CAAC,QAAQ,CACd,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/pipeline/steps/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM1D,0EAA0E;AAC1E,yBAAyB;AACzB,IAAI,eAAsC,CAAC;AAE3C,MAAM,UAAU,SAAS;IACvB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,eAAe,GAAG,eAAe,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAGlC,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,CAAC,GAAyB;YAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACrE,CAAC;YACD,oEAAoE;YACpE,qDAAqD;YACrD,MAAM,IAAI,YAAY,CACpB,6BAA6B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EACnD,IAAI,CAAC,QAAQ,CACd,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The write side of content-addressed versioning, shared by every kind
3
+ * whose version is the SHA-256 of a pushed archive (skills, plugins): the
4
+ * "archive the head" step a push runs after the head is fully populated,
5
+ * and the best-effort archive cleanup a delete runs before the row. Skills
6
+ * carried both alone (#341, adopted for skills in #475; the Go
7
+ * ArchiveCurrentSkillStep / DeleteSkillArchivesStep port); plugins need the
8
+ * identical semantics over another schema, so the steps live here and each
9
+ * kind names its step (`ArchiveCurrentSkill`, `ArchiveCurrentPlugin`), its
10
+ * context key and where its hash and tag live.
11
+ *
12
+ * The load-bearing semantics, all preserved from the skill port:
13
+ * - repoint-never-duplicate: re-pushing EVER-archived content repoints the
14
+ * head to the existing audit row (an A→B→A re-push must not duplicate
15
+ * A's row);
16
+ * - snapshots archive TAGLESS; the audit tag COLUMN is the tag's only
17
+ * home, assigned through the single-holder setAuditTag primitive —
18
+ * assigned even when the content was already archived, because
19
+ * re-pushing under a new tag is the only retag path;
20
+ * - safe degradation: archive failure clears the version hash from the
21
+ * head (the persisted head never references an unresolvable audit
22
+ * entry); tag-assignment failure clears the live tag.
23
+ *
24
+ * Proven by the skill domain's __tests__/push-degradation.test.ts (the
25
+ * failing-store arms) and both kinds' conformance suites (the
26
+ * content-addressed versioning blocks).
27
+ */
28
+ import type { DescMessage, MessageShape } from "@bufbuild/protobuf";
29
+ import type { Logger } from "../../boot/logger.js";
30
+ import type { PipelineStep } from "../pipeline.js";
31
+ import type { Store } from "../../store/interface.js";
32
+ /** What a content-versioned kind must expose for its head to be archived. */
33
+ export interface ArchiveCurrentVersionBinding<Desc extends DescMessage> {
34
+ /** The step's name in the chain; shared vocabulary, never renamed. */
35
+ readonly stepName: string;
36
+ /** The context key the fully populated head rides. */
37
+ readonly resourceKey: string;
38
+ readonly schema: Desc;
39
+ /** The noun in log lines: "skill", "plugin". */
40
+ readonly noun: string;
41
+ headHashOf(resource: MessageShape<Desc>): string;
42
+ /** Degradation arm: the head must never reference an unresolvable audit row. */
43
+ clearHeadHash(resource: MessageShape<Desc>): void;
44
+ liveTagOf(resource: MessageShape<Desc>): string;
45
+ /** Degradation arm: the live tag must agree with the audit column. */
46
+ clearLiveTag(resource: MessageShape<Desc>): void;
47
+ }
48
+ /**
49
+ * Repoint or archive, then the single-holder tag assignment, each with its
50
+ * safe degradation. Runs AFTER the populate step so the archived snapshot
51
+ * is the fully populated head.
52
+ */
53
+ export declare function newArchiveCurrentVersionStep<Desc extends DescMessage, RequestDesc extends DescMessage>(store: Store, logger: Logger, binding: ArchiveCurrentVersionBinding<Desc>): PipelineStep<RequestDesc>;
54
+ /**
55
+ * Best-effort audit cleanup BEFORE the resource row (no FK cascade in the
56
+ * schema, by design): failures log and never block the delete. Reads the
57
+ * id ExtractResourceId set.
58
+ */
59
+ export declare function newDeleteVersionArchivesStep<RequestDesc extends DescMessage>(store: Store, logger: Logger, binding: {
60
+ readonly stepName: string;
61
+ readonly noun: string;
62
+ }): PipelineStep<RequestDesc>;
63
+ //# sourceMappingURL=version-archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-archive.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/version-archive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAItD,6EAA6E;AAC7E,MAAM,WAAW,4BAA4B,CAAC,IAAI,SAAS,WAAW;IACpE,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IACjD,gFAAgF;IAChF,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClD,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAChD,sEAAsE;IACtE,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAClD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,SAAS,WAAW,EACxB,WAAW,SAAS,WAAW,EAE/B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,4BAA4B,CAAC,IAAI,CAAC,GAC1C,YAAY,CAAC,WAAW,CAAC,CAiH3B;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,SAAS,WAAW,EAC1E,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5D,YAAY,CAAC,WAAW,CAAC,CA8B3B"}
@@ -0,0 +1,129 @@
1
+ import { AuditNotFoundError } from "../../store/interface.js";
2
+ import { RESOURCE_ID_KEY } from "./delete.js";
3
+ import { metadataOf } from "./shapes.js";
4
+ /**
5
+ * Repoint or archive, then the single-holder tag assignment, each with its
6
+ * safe degradation. Runs AFTER the populate step so the archived snapshot
7
+ * is the fully populated head.
8
+ */
9
+ export function newArchiveCurrentVersionStep(store, logger, binding) {
10
+ return {
11
+ name: binding.stepName,
12
+ async execute(ctx) {
13
+ const resource = ctx.get(binding.resourceKey);
14
+ const versionHash = binding.headHashOf(resource);
15
+ if (versionHash === "") {
16
+ return;
17
+ }
18
+ const tag = binding.liveTagOf(resource);
19
+ const resourceId = metadataOf(resource)?.id ?? "";
20
+ const idField = `${binding.noun}Id`;
21
+ // Repoint, never duplicate: if this content was ever archived, the
22
+ // head simply repoints to the existing row and only the tag
23
+ // assignment below still runs. An unexpected lookup failure degrades
24
+ // to archiving anyway — a possible duplicate row beats a failed push
25
+ // (readers resolve duplicates newest-wins).
26
+ let alreadyArchived = false;
27
+ try {
28
+ await store.getAuditByHash(ctx.apiResourceKind, resourceId, versionHash, binding.schema);
29
+ alreadyArchived = true;
30
+ }
31
+ catch (error) {
32
+ if (!(error instanceof AuditNotFoundError)) {
33
+ logger.warn(`Could not check for an existing archived ${binding.noun} version — archiving anyway`, {
34
+ [idField]: resourceId,
35
+ versionHash,
36
+ error: error instanceof Error ? error.message : String(error),
37
+ });
38
+ }
39
+ }
40
+ if (!alreadyArchived) {
41
+ // Archive the snapshot tagless: the tag lives only in the audit tag
42
+ // column (the source of truth), assigned below through the
43
+ // single-holder primitive — a later tag move never rewrites this
44
+ // immutable content.
45
+ try {
46
+ await store.saveAudit(ctx.apiResourceKind, resourceId, binding.schema, resource, versionHash, "");
47
+ }
48
+ catch (error) {
49
+ logger.error(`Failed to archive ${binding.noun} version — reverting the version hash to maintain the audit-resolvability invariant`, {
50
+ [idField]: resourceId,
51
+ versionHash,
52
+ error: error instanceof Error ? error.message : String(error),
53
+ });
54
+ // Revert: the persisted head must never reference an audit entry
55
+ // that does not exist. The push still succeeds, but without
56
+ // version tracking for this apply.
57
+ binding.clearHeadHash(resource);
58
+ return;
59
+ }
60
+ }
61
+ // Assign the requested tag through setAuditTag — the single-holder
62
+ // primitive — so the head version (freshly archived or repointed-to)
63
+ // becomes the tag's sole holder; any prior holder is cleared.
64
+ if (tag !== "") {
65
+ try {
66
+ await store.setAuditTag(ctx.apiResourceKind, resourceId, versionHash, tag);
67
+ }
68
+ catch (error) {
69
+ logger.error(`Archived ${binding.noun} version but failed to assign its tag — clearing the live tag to stay consistent with the audit column`, {
70
+ [idField]: resourceId,
71
+ versionHash,
72
+ tag,
73
+ error: error instanceof Error ? error.message : String(error),
74
+ });
75
+ // The audit head is now untagged; keep the live head consistent
76
+ // so get / getByReference never advertise a tag the store cannot
77
+ // resolve.
78
+ binding.clearLiveTag(resource);
79
+ }
80
+ }
81
+ if (alreadyArchived) {
82
+ logger.info(`${capitalize(binding.noun)} version content already archived — repointed head without a new history row`, { [idField]: resourceId, versionHash, tag });
83
+ }
84
+ else {
85
+ logger.info(`Archived ${binding.noun} version to audit history`, {
86
+ [idField]: resourceId,
87
+ versionHash,
88
+ tag,
89
+ });
90
+ }
91
+ },
92
+ };
93
+ }
94
+ /**
95
+ * Best-effort audit cleanup BEFORE the resource row (no FK cascade in the
96
+ * schema, by design): failures log and never block the delete. Reads the
97
+ * id ExtractResourceId set.
98
+ */
99
+ export function newDeleteVersionArchivesStep(store, logger, binding) {
100
+ return {
101
+ name: binding.stepName,
102
+ async execute(ctx) {
103
+ const resourceId = ctx.get(RESOURCE_ID_KEY);
104
+ if (typeof resourceId !== "string") {
105
+ throw new Error("resource id not found in context (ExtractResourceIdStep must run first)");
106
+ }
107
+ const idField = `${binding.noun}Id`;
108
+ try {
109
+ const deletedCount = await store.deleteAuditByResourceId(ctx.apiResourceKind, resourceId);
110
+ if (deletedCount > 0) {
111
+ logger.info(`Deleted archive records for ${binding.noun}`, {
112
+ [idField]: resourceId,
113
+ count: deletedCount,
114
+ });
115
+ }
116
+ }
117
+ catch (error) {
118
+ logger.warn(`failed to delete ${binding.noun} archives (best-effort)`, {
119
+ [idField]: resourceId,
120
+ error: error instanceof Error ? error.message : String(error),
121
+ });
122
+ }
123
+ },
124
+ };
125
+ }
126
+ function capitalize(word) {
127
+ return word.charAt(0).toUpperCase() + word.slice(1);
128
+ }
129
+ //# sourceMappingURL=version-archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-archive.js","sourceRoot":"","sources":["../../../src/pipeline/steps/version-archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { DescMessage, Message, MessageShape } from "@bufbuild/protobuf";
2
+ import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
3
+ import type { ApiResourceReferenceSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/io_pb";
4
+ import type { PipelineStep } from "../pipeline.js";
5
+ import type { Store } from "../../store/interface.js";
6
+ export declare function isVersionHash(version: string): boolean;
7
+ /** What a content-versioned kind must say about itself for the ladder. */
8
+ export interface VersionedResourceBinding<Desc extends DescMessage> {
9
+ readonly kind: ApiResourceKind;
10
+ readonly schema: Desc;
11
+ /** The noun in sentences: "skill", "plugin". */
12
+ readonly noun: string;
13
+ /** The head's content hash (status.version_hash, status.digest). */
14
+ headHashOf(resource: MessageShape<Desc>): string;
15
+ /** The tag the live head claims (spec.tag; the plugin's manifest version). */
16
+ liveTagOf(resource: MessageShape<Desc>): string;
17
+ }
18
+ type GetByReferenceDesc = typeof ApiResourceReferenceSchema;
19
+ /** The reference + version ladder (Go LoadSkillByReferenceStep, generalised). */
20
+ export declare function newLoadByReferenceWithVersionStep<Desc extends DescMessage>(store: Store, binding: VersionedResourceBinding<Desc>, stepName: string): PipelineStep<GetByReferenceDesc>;
21
+ export declare const LIST_VERSIONS_RESOURCE_ID_KEY = "listVersionsResourceId";
22
+ export declare const LIST_VERSIONS_HEAD_HASH_KEY = "listVersionsHeadHash";
23
+ export declare const LIST_VERSIONS_RESPONSE_KEY = "listVersionsResponse";
24
+ /** The fields every ListVersions input carries; the binding reads them off its own message. */
25
+ export interface ListVersionsInputShape {
26
+ readonly org: string;
27
+ readonly slug: string;
28
+ readonly pageToken: string;
29
+ readonly pageSize: number;
30
+ }
31
+ /** What differs per kind in the version history: the input, the entry, the response. */
32
+ export interface VersionHistoryBinding<Desc extends DescMessage, InputDesc extends DescMessage, Entry extends Message, Response extends Message> extends VersionedResourceBinding<Desc> {
33
+ input(message: MessageShape<InputDesc>): ListVersionsInputShape;
34
+ /** An archived snapshot to one entry; `tag` is the audit column's. */
35
+ mapEntry(snapshot: MessageShape<Desc>, isCurrent: boolean, tag: string): Entry;
36
+ response(entries: Entry[], nextPageToken: string, totalCount: number): Response;
37
+ }
38
+ /** Resolves the head by slug and captures its id and hash (Go ResolveSkillBySlugStep, generalised). */
39
+ export declare function newResolveBySlugForVersionsStep<Desc extends DescMessage, InputDesc extends DescMessage, Entry extends Message, Response extends Message>(store: Store, binding: VersionHistoryBinding<Desc, InputDesc, Entry, Response>, stepName: string): PipelineStep<InputDesc>;
40
+ /** Audit records → entries → one page (Go LoadAndMapVersionsStep, generalised). */
41
+ export declare function newLoadAndMapVersionsStep<Desc extends DescMessage, InputDesc extends DescMessage, Entry extends Message, Response extends Message>(store: Store, binding: VersionHistoryBinding<Desc, InputDesc, Entry, Response>, stepName: string): PipelineStep<InputDesc>;
42
+ /**
43
+ * Decodes the base64 cursor with Go's strictness: base64.StdEncoding
44
+ * rejects malformed input and strconv.Atoi rejects trailing garbage —
45
+ * Buffer.from is lenient on both, so validity is checked explicitly.
46
+ */
47
+ export declare function decodePageToken(token: string): number;
48
+ export {};
49
+ //# sourceMappingURL=version-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-history.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/version-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * The read side of content-addressed versioning, shared by every kind whose
3
+ * version is the SHA-256 of a pushed archive (skills, plugins): the
4
+ * getByReference version ladder and the paginated version history. Skills
5
+ * carried both alone (the Go LoadSkillByReferenceStep / ListVersions port);
6
+ * plugins need the identical ladder over another schema, and a second copy
7
+ * would be the drift the house forbids, so the steps take a
8
+ * `VersionedResourceBinding` that names what differs per kind (the schema,
9
+ * the noun in sentences, where the head hash and the live tag live, how a
10
+ * snapshot maps to an entry) and keep everything else once.
11
+ *
12
+ * The ladder: resolve the live head by slug+org; empty/"latest" returns it;
13
+ * a 64-hex version matches the head's hash or falls to the indexed
14
+ * audit-by-hash lookup; anything else is a tag, matching the head's live
15
+ * tag first (honest under the single-holder model: a push reconciles the
16
+ * live tag with the audit tag column, clearing the live tag when
17
+ * assignment fails) and then the indexed audit-by-tag lookup.
18
+ *
19
+ * listVersions marks is_current by HEAD-HASH match, not recency: under
20
+ * repoint semantics (#475) re-pushing archived content re-activates its
21
+ * existing row, so the current version need not be the newest-archived
22
+ * one. Tags come from the audit COLUMN (the single-holder source of
23
+ * truth), never from the snapshot.
24
+ *
25
+ * Proven by the skill domain's __tests__/skill.test.ts (ladder and
26
+ * pagination blocks) and the skill and plugin conformance suites'
27
+ * getByReference/listVersions blocks.
28
+ */
29
+ import { fromBinary } from "@bufbuild/protobuf";
30
+ import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
31
+ import { internalError, invalidArgumentError, notFoundError, } from "../errors.js";
32
+ import { AuditNotFoundError } from "../../store/interface.js";
33
+ import { findResourceBySlug, requireOrgForReference } from "./helpers.js";
34
+ import { TARGET_RESOURCE_KEY } from "./load-target.js";
35
+ import { metadataOf } from "./shapes.js";
36
+ /** A 64-character lowercase-hex string (a SHA-256 content hash). */
37
+ const HASH_PATTERN = /^[a-f0-9]{64}$/;
38
+ export function isVersionHash(version) {
39
+ return HASH_PATTERN.test(version);
40
+ }
41
+ /** The reference + version ladder (Go LoadSkillByReferenceStep, generalised). */
42
+ export function newLoadByReferenceWithVersionStep(store, binding, stepName) {
43
+ return {
44
+ name: stepName,
45
+ async execute(ctx) {
46
+ const ref = ctx.input;
47
+ if (ref.slug === "") {
48
+ throw invalidArgumentError("slug is required in reference");
49
+ }
50
+ // Org-scoped kinds: the slug is unique only within an org, so an
51
+ // empty-org reference is under-specified.
52
+ requireOrgForReference(ctx.apiResourceKind, ref.org);
53
+ if (ref.kind !== ApiResourceKind.api_resource_kind_unknown &&
54
+ ref.kind !== binding.kind) {
55
+ throw invalidArgumentError(`kind mismatch: expected ${ApiResourceKind[binding.kind]}, got ${ApiResourceKind[ref.kind]}`);
56
+ }
57
+ let head;
58
+ try {
59
+ head = await findResourceBySlug(store, ctx.apiResourceKind, binding.schema, ref.slug, ref.org);
60
+ }
61
+ catch (error) {
62
+ throw internalError(error, `failed to list ${binding.noun}s`);
63
+ }
64
+ if (head === undefined) {
65
+ throw notFoundError(binding.noun, ref.slug);
66
+ }
67
+ const version = ref.version.trim();
68
+ if (version === "" || version === "latest") {
69
+ ctx.set(TARGET_RESOURCE_KEY, head);
70
+ return;
71
+ }
72
+ if (headMatchesVersion(binding, head, version)) {
73
+ ctx.set(TARGET_RESOURCE_KEY, head);
74
+ return;
75
+ }
76
+ const archived = await findAuditByVersion(store, ctx.apiResourceKind, binding.schema, idOf(head), version);
77
+ if (archived === undefined) {
78
+ throw notFoundError(`${binding.noun} version`, `${ref.slug}:${version}`);
79
+ }
80
+ ctx.set(TARGET_RESOURCE_KEY, archived);
81
+ },
82
+ };
83
+ }
84
+ /** Whether the live head IS the requested version — by hash, or by its live tag. */
85
+ function headMatchesVersion(binding, head, version) {
86
+ if (isVersionHash(version)) {
87
+ return binding.headHashOf(head) === version;
88
+ }
89
+ const liveTag = binding.liveTagOf(head);
90
+ return liveTag !== "" && liveTag === version;
91
+ }
92
+ /**
93
+ * Indexed audit lookup by hash or tag — not-found is a normal outcome
94
+ * (undefined), storage failures are Internal.
95
+ */
96
+ async function findAuditByVersion(store, kind, schema, resourceId, version) {
97
+ if (isVersionHash(version)) {
98
+ try {
99
+ return await store.getAuditByHash(kind, resourceId, version, schema);
100
+ }
101
+ catch (error) {
102
+ if (error instanceof AuditNotFoundError) {
103
+ return undefined;
104
+ }
105
+ throw internalError(error, "failed to query audit by hash");
106
+ }
107
+ }
108
+ try {
109
+ return await store.getAuditByTag(kind, resourceId, version, schema);
110
+ }
111
+ catch (error) {
112
+ if (error instanceof AuditNotFoundError) {
113
+ return undefined;
114
+ }
115
+ throw internalError(error, "failed to query audit by tag");
116
+ }
117
+ }
118
+ // ─── listVersions ────────────────────────────────────────────────────────
119
+ const DEFAULT_PAGE_SIZE = 50;
120
+ const MAX_PAGE_SIZE = 100;
121
+ export const LIST_VERSIONS_RESOURCE_ID_KEY = "listVersionsResourceId";
122
+ export const LIST_VERSIONS_HEAD_HASH_KEY = "listVersionsHeadHash";
123
+ export const LIST_VERSIONS_RESPONSE_KEY = "listVersionsResponse";
124
+ /** Resolves the head by slug and captures its id and hash (Go ResolveSkillBySlugStep, generalised). */
125
+ export function newResolveBySlugForVersionsStep(store, binding, stepName) {
126
+ return {
127
+ name: stepName,
128
+ async execute(ctx) {
129
+ const req = binding.input(ctx.input);
130
+ let head;
131
+ try {
132
+ head = await findResourceBySlug(store, ctx.apiResourceKind, binding.schema, req.slug, req.org);
133
+ }
134
+ catch (error) {
135
+ throw internalError(error, `failed to search for ${binding.noun}`);
136
+ }
137
+ if (head === undefined) {
138
+ throw notFoundError(binding.noun, `${req.slug} (org: ${req.org})`);
139
+ }
140
+ ctx.set(LIST_VERSIONS_RESOURCE_ID_KEY, idOf(head));
141
+ // The live head's hash decides is_current downstream. Under repoint
142
+ // semantics the current version need not be the newest-archived row,
143
+ // so recency cannot stand in for currency.
144
+ ctx.set(LIST_VERSIONS_HEAD_HASH_KEY, binding.headHashOf(head));
145
+ },
146
+ };
147
+ }
148
+ /** Audit records → entries → one page (Go LoadAndMapVersionsStep, generalised). */
149
+ export function newLoadAndMapVersionsStep(store, binding, stepName) {
150
+ return {
151
+ name: stepName,
152
+ async execute(ctx) {
153
+ const req = binding.input(ctx.input);
154
+ const resourceId = ctx.get(LIST_VERSIONS_RESOURCE_ID_KEY);
155
+ let records;
156
+ try {
157
+ records = await store.listAuditRecords(ctx.apiResourceKind, resourceId);
158
+ }
159
+ catch (error) {
160
+ throw internalError(error, "failed to load version history");
161
+ }
162
+ // is_current = the entry whose hash matches the live head, not the
163
+ // newest row. Legacy data may hold duplicate-hash rows (predating
164
+ // repoint semantics); marking only the first match keeps
165
+ // exactly-one-current true for them too.
166
+ const headHash = ctx.get(LIST_VERSIONS_HEAD_HASH_KEY);
167
+ let currentMarked = false;
168
+ const entries = [];
169
+ for (const record of records) {
170
+ let snapshot;
171
+ try {
172
+ snapshot = fromBinary(binding.schema, record.data);
173
+ }
174
+ catch {
175
+ continue;
176
+ }
177
+ const isCurrent = !currentMarked &&
178
+ headHash !== "" &&
179
+ binding.headHashOf(snapshot) === headHash;
180
+ currentMarked = currentMarked || isCurrent;
181
+ // Tag comes from the audit column (source of truth), not the snapshot.
182
+ entries.push(binding.mapEntry(snapshot, isCurrent, record.tag));
183
+ }
184
+ let pageSize = req.pageSize;
185
+ if (pageSize <= 0) {
186
+ pageSize = DEFAULT_PAGE_SIZE;
187
+ }
188
+ if (pageSize > MAX_PAGE_SIZE) {
189
+ pageSize = MAX_PAGE_SIZE;
190
+ }
191
+ let startIndex = 0;
192
+ if (req.pageToken !== "") {
193
+ startIndex = decodePageToken(req.pageToken);
194
+ }
195
+ let pageEntries = [];
196
+ let nextPageToken = "";
197
+ if (startIndex < entries.length) {
198
+ const end = Math.min(startIndex + pageSize, entries.length);
199
+ pageEntries = entries.slice(startIndex, end);
200
+ if (end < entries.length) {
201
+ nextPageToken = Buffer.from(String(end)).toString("base64");
202
+ }
203
+ }
204
+ ctx.set(LIST_VERSIONS_RESPONSE_KEY, binding.response(pageEntries, nextPageToken, entries.length));
205
+ },
206
+ };
207
+ }
208
+ /**
209
+ * Decodes the base64 cursor with Go's strictness: base64.StdEncoding
210
+ * rejects malformed input and strconv.Atoi rejects trailing garbage —
211
+ * Buffer.from is lenient on both, so validity is checked explicitly.
212
+ */
213
+ export function decodePageToken(token) {
214
+ const decoded = Buffer.from(token, "base64");
215
+ if (decoded.toString("base64") !== token) {
216
+ throw invalidArgumentError("invalid page_token");
217
+ }
218
+ const text = decoded.toString("utf8");
219
+ const index = Number.parseInt(text, 10);
220
+ if (!Number.isSafeInteger(index) || String(index) !== text || index < 0) {
221
+ throw invalidArgumentError("invalid page_token");
222
+ }
223
+ return index;
224
+ }
225
+ /** metadata.id of a resource message; every versioned kind carries the commons metadata. */
226
+ function idOf(resource) {
227
+ return metadataOf(resource)?.id ?? "";
228
+ }
229
+ //# sourceMappingURL=version-history.js.map