@vertesia/common 1.2.0 → 1.3.0-dev.20260620.061059Z

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 (634) hide show
  1. package/LICENSE +198 -10
  2. package/lib/{types/Progress.d.ts → Progress.d.ts} +1 -0
  3. package/lib/Progress.d.ts.map +1 -0
  4. package/lib/{esm/Progress.js → Progress.js} +2 -2
  5. package/lib/Progress.js.map +1 -0
  6. package/lib/access-control.d.ts +140 -0
  7. package/lib/access-control.d.ts.map +1 -0
  8. package/lib/{esm/access-control.js → access-control.js} +38 -0
  9. package/lib/access-control.js.map +1 -0
  10. package/lib/agent-request-template.d.ts +4 -0
  11. package/lib/agent-request-template.d.ts.map +1 -0
  12. package/lib/agent-request-template.js +46 -0
  13. package/lib/agent-request-template.js.map +1 -0
  14. package/lib/{types/analytics.d.ts → analytics.d.ts} +3 -2
  15. package/lib/analytics.d.ts.map +1 -0
  16. package/lib/{cjs/analytics.js.map → analytics.js.map} +1 -1
  17. package/lib/{types/apikey.d.ts → apikey.d.ts} +37 -7
  18. package/lib/apikey.d.ts.map +1 -0
  19. package/lib/{esm/apikey.js → apikey.js} +1 -0
  20. package/lib/apikey.js.map +1 -0
  21. package/lib/{types/apps.d.ts → apps.d.ts} +523 -36
  22. package/lib/apps.d.ts.map +1 -0
  23. package/lib/apps.js +210 -0
  24. package/lib/apps.js.map +1 -0
  25. package/lib/{types/ask-user.d.ts → ask-user.d.ts} +1 -0
  26. package/lib/ask-user.d.ts.map +1 -0
  27. package/lib/{esm/ask-user.js.map → ask-user.js.map} +1 -1
  28. package/lib/{types/audit-trail.d.ts → audit-trail.d.ts} +2 -1
  29. package/lib/audit-trail.d.ts.map +1 -0
  30. package/lib/audit-trail.js +3 -0
  31. package/lib/audit-trail.js.map +1 -0
  32. package/lib/browser-credentials.d.ts +123 -0
  33. package/lib/browser-credentials.d.ts.map +1 -0
  34. package/lib/browser-credentials.js +2 -0
  35. package/lib/browser-credentials.js.map +1 -0
  36. package/lib/{types/channels.d.ts → channels.d.ts} +3 -2
  37. package/lib/channels.d.ts.map +1 -0
  38. package/lib/{esm/channels.js → channels.js} +3 -3
  39. package/lib/channels.js.map +1 -0
  40. package/lib/{types/common.d.ts → common.d.ts} +18 -10
  41. package/lib/common.d.ts.map +1 -0
  42. package/lib/common.js.map +1 -0
  43. package/lib/{types/cost-analytics.d.ts → cost-analytics.d.ts} +2 -3
  44. package/lib/cost-analytics.d.ts.map +1 -0
  45. package/lib/cost-analytics.js.map +1 -0
  46. package/lib/{types/data-platform.d.ts → data-platform.d.ts} +134 -7
  47. package/lib/data-platform.d.ts.map +1 -0
  48. package/lib/data-platform.js.map +1 -0
  49. package/lib/{types/email.d.ts → email.d.ts} +6 -2
  50. package/lib/email.d.ts.map +1 -0
  51. package/lib/{esm/email.js → email.js} +2 -2
  52. package/lib/email.js.map +1 -0
  53. package/lib/embeddings.d.ts +65 -0
  54. package/lib/embeddings.d.ts.map +1 -0
  55. package/lib/embeddings.js +2 -0
  56. package/lib/embeddings.js.map +1 -0
  57. package/lib/{types/environment.d.ts → environment.d.ts} +19 -5
  58. package/lib/environment.d.ts.map +1 -0
  59. package/lib/{esm/environment.js → environment.js} +17 -7
  60. package/lib/environment.js.map +1 -0
  61. package/lib/{types/facets.d.ts → facets.d.ts} +6 -5
  62. package/lib/facets.d.ts.map +1 -0
  63. package/lib/facets.js.map +1 -0
  64. package/lib/{types/group.d.ts → group.d.ts} +15 -2
  65. package/lib/group.d.ts.map +1 -0
  66. package/lib/group.js +3 -0
  67. package/lib/group.js.map +1 -0
  68. package/lib/host-utils.d.ts +8 -0
  69. package/lib/host-utils.d.ts.map +1 -0
  70. package/lib/host-utils.js +84 -0
  71. package/lib/host-utils.js.map +1 -0
  72. package/lib/{types/index.d.ts → index.d.ts} +19 -10
  73. package/lib/index.d.ts.map +1 -0
  74. package/lib/{esm/index.js → index.js} +18 -10
  75. package/lib/index.js.map +1 -0
  76. package/lib/integrations.d.ts +151 -0
  77. package/lib/integrations.d.ts.map +1 -0
  78. package/lib/{esm/integrations.js → integrations.js} +6 -0
  79. package/lib/integrations.js.map +1 -0
  80. package/lib/{types/interaction.d.ts → interaction.d.ts} +99 -56
  81. package/lib/interaction.d.ts.map +1 -0
  82. package/lib/{esm/interaction.js → interaction.js} +3 -3
  83. package/lib/interaction.js.map +1 -0
  84. package/lib/json-schema.d.ts +2 -0
  85. package/lib/json-schema.d.ts.map +1 -0
  86. package/lib/{cjs/json-schema.js.map → json-schema.js.map} +1 -1
  87. package/lib/json.d.ts +2 -0
  88. package/lib/json.d.ts.map +1 -0
  89. package/lib/json.js.map +1 -0
  90. package/lib/{types/meters.d.ts → meters.d.ts} +2 -1
  91. package/lib/meters.d.ts.map +1 -0
  92. package/lib/meters.js.map +1 -0
  93. package/lib/model_utility.d.ts +2 -0
  94. package/lib/model_utility.d.ts.map +1 -0
  95. package/lib/model_utility.js +2 -0
  96. package/lib/model_utility.js.map +1 -0
  97. package/lib/oauth-scopes.d.ts +18 -0
  98. package/lib/oauth-scopes.d.ts.map +1 -0
  99. package/lib/oauth-scopes.js +57 -0
  100. package/lib/oauth-scopes.js.map +1 -0
  101. package/lib/{types/oauth-server.d.ts → oauth-server.d.ts} +64 -4
  102. package/lib/oauth-server.d.ts.map +1 -0
  103. package/lib/{cjs/oauth-server.js.map → oauth-server.js.map} +1 -1
  104. package/lib/{types/oauth.d.ts → oauth.d.ts} +1 -0
  105. package/lib/oauth.d.ts.map +1 -0
  106. package/lib/oauth.js.map +1 -0
  107. package/lib/{types/payload.d.ts → payload.d.ts} +5 -4
  108. package/lib/payload.d.ts.map +1 -0
  109. package/lib/{cjs/payload.js.map → payload.js.map} +1 -1
  110. package/lib/{types/pending-asks.d.ts → pending-asks.d.ts} +8 -1
  111. package/lib/pending-asks.d.ts.map +1 -0
  112. package/lib/pending-asks.js.map +1 -0
  113. package/lib/principal-context.d.ts +27 -0
  114. package/lib/principal-context.d.ts.map +1 -0
  115. package/lib/principal-context.js +2 -0
  116. package/lib/principal-context.js.map +1 -0
  117. package/lib/{types/project.d.ts → project.d.ts} +279 -50
  118. package/lib/project.d.ts.map +1 -0
  119. package/lib/project.js +230 -0
  120. package/lib/project.js.map +1 -0
  121. package/lib/{types/prompt.d.ts → prompt.d.ts} +16 -9
  122. package/lib/prompt.d.ts.map +1 -0
  123. package/lib/prompt.js.map +1 -0
  124. package/lib/{types/query.d.ts → query.d.ts} +11 -8
  125. package/lib/query.d.ts.map +1 -0
  126. package/lib/query.js.map +1 -0
  127. package/lib/{types/rate-limiter.d.ts → rate-limiter.d.ts} +1 -0
  128. package/lib/rate-limiter.d.ts.map +1 -0
  129. package/lib/rate-limiter.js.map +1 -0
  130. package/lib/{types/refs.d.ts → refs.d.ts} +1 -0
  131. package/lib/refs.d.ts.map +1 -0
  132. package/lib/refs.js.map +1 -0
  133. package/lib/roles/types.d.ts +54 -0
  134. package/lib/roles/types.d.ts.map +1 -0
  135. package/lib/roles/types.js +17 -0
  136. package/lib/roles/types.js.map +1 -0
  137. package/lib/{types/runs.d.ts → runs.d.ts} +3 -2
  138. package/lib/runs.d.ts.map +1 -0
  139. package/lib/runs.js.map +1 -0
  140. package/lib/secrets.d.ts +47 -0
  141. package/lib/secrets.d.ts.map +1 -0
  142. package/lib/secrets.js +2 -0
  143. package/lib/secrets.js.map +1 -0
  144. package/lib/{types/skill.d.ts → skill.d.ts} +2 -1
  145. package/lib/skill.d.ts.map +1 -0
  146. package/lib/skill.js.map +1 -0
  147. package/lib/{types/store → store}/activity-catalog.d.ts +2 -1
  148. package/lib/store/activity-catalog.d.ts.map +1 -0
  149. package/lib/store/activity-catalog.js.map +1 -0
  150. package/lib/{types/store → store}/agent-run.d.ts +206 -35
  151. package/lib/store/agent-run.d.ts.map +1 -0
  152. package/lib/store/agent-run.js.map +1 -0
  153. package/lib/{types/store → store}/collections.d.ts +18 -9
  154. package/lib/store/collections.d.ts.map +1 -0
  155. package/lib/store/collections.js.map +1 -0
  156. package/lib/{types/store → store}/common.d.ts +1 -0
  157. package/lib/store/common.d.ts.map +1 -0
  158. package/lib/{cjs → store}/common.js.map +1 -1
  159. package/lib/{types/store → store}/conversation-state.d.ts +51 -5
  160. package/lib/store/conversation-state.d.ts.map +1 -0
  161. package/lib/{esm/store → store}/conversation-state.js +3 -0
  162. package/lib/store/conversation-state.js.map +1 -0
  163. package/lib/{types/store → store}/doc-analyzer.d.ts +20 -14
  164. package/lib/store/doc-analyzer.d.ts.map +1 -0
  165. package/lib/{cjs/store → store}/doc-analyzer.js.map +1 -1
  166. package/lib/{types/store → store}/dsl-workflow.d.ts +42 -24
  167. package/lib/store/dsl-workflow.d.ts.map +1 -0
  168. package/lib/store/dsl-workflow.js +8 -0
  169. package/lib/store/dsl-workflow.js.map +1 -0
  170. package/lib/{types/store → store}/hive-memory.d.ts +2 -1
  171. package/lib/store/hive-memory.d.ts.map +1 -0
  172. package/lib/{cjs/store → store}/hive-memory.js.map +1 -1
  173. package/lib/store/index.d.ts +20 -0
  174. package/lib/store/index.d.ts.map +1 -0
  175. package/lib/store/index.js +20 -0
  176. package/lib/store/index.js.map +1 -0
  177. package/lib/{types/store → store}/object-types.d.ts +2 -1
  178. package/lib/store/object-types.d.ts.map +1 -0
  179. package/lib/store/object-types.js +95 -0
  180. package/lib/store/object-types.js.map +1 -0
  181. package/lib/store/process-schema.d.ts +481 -0
  182. package/lib/store/process-schema.d.ts.map +1 -0
  183. package/lib/store/process-schema.js +482 -0
  184. package/lib/store/process-schema.js.map +1 -0
  185. package/lib/store/process-validation.d.ts +17 -0
  186. package/lib/store/process-validation.d.ts.map +1 -0
  187. package/lib/store/process-validation.js +428 -0
  188. package/lib/store/process-validation.js.map +1 -0
  189. package/lib/store/process.d.ts +261 -0
  190. package/lib/store/process.d.ts.map +1 -0
  191. package/lib/store/process.js +2 -0
  192. package/lib/store/process.js.map +1 -0
  193. package/lib/{types/store → store}/rendering.d.ts +5 -4
  194. package/lib/store/rendering.d.ts.map +1 -0
  195. package/lib/{esm/store → store}/rendering.js +6 -6
  196. package/lib/store/rendering.js.map +1 -0
  197. package/lib/{types/store → store}/schedule.d.ts +4 -3
  198. package/lib/store/schedule.d.ts.map +1 -0
  199. package/lib/store/schedule.js.map +1 -0
  200. package/lib/{types/store → store}/signals.d.ts +17 -1
  201. package/lib/store/signals.d.ts.map +1 -0
  202. package/lib/{cjs/store → store}/signals.js.map +1 -1
  203. package/lib/{types/store → store}/store.d.ts +67 -38
  204. package/lib/store/store.d.ts.map +1 -0
  205. package/lib/{esm/store → store}/store.js +17 -8
  206. package/lib/store/store.js.map +1 -0
  207. package/lib/store/task.d.ts +63 -0
  208. package/lib/store/task.d.ts.map +1 -0
  209. package/lib/store/task.js +5 -0
  210. package/lib/store/task.js.map +1 -0
  211. package/lib/store/temporalio.d.ts +17 -0
  212. package/lib/store/temporalio.d.ts.map +1 -0
  213. package/lib/{esm/store → store}/temporalio.js +6 -6
  214. package/lib/store/temporalio.js.map +1 -0
  215. package/lib/{types/store → store}/workflow.d.ts +120 -34
  216. package/lib/store/workflow.d.ts.map +1 -0
  217. package/lib/{esm/store → store}/workflow.js +44 -42
  218. package/lib/store/workflow.js.map +1 -0
  219. package/lib/{types/sts-token-types.d.ts → sts-token-types.d.ts} +29 -2
  220. package/lib/sts-token-types.d.ts.map +1 -0
  221. package/lib/{esm/sts-token-types.js → sts-token-types.js} +0 -4
  222. package/lib/sts-token-types.js.map +1 -0
  223. package/lib/{types/tenant.d.ts → tenant.d.ts} +1 -0
  224. package/lib/tenant.d.ts.map +1 -0
  225. package/lib/tenant.js.map +1 -0
  226. package/lib/{types/tool-execution.d.ts → tool-execution.d.ts} +3 -2
  227. package/lib/tool-execution.d.ts.map +1 -0
  228. package/lib/tool-execution.js.map +1 -0
  229. package/lib/tools.d.ts +101 -0
  230. package/lib/tools.d.ts.map +1 -0
  231. package/lib/tools.js +2 -0
  232. package/lib/tools.js.map +1 -0
  233. package/lib/{types/training.d.ts → training.d.ts} +10 -9
  234. package/lib/training.d.ts.map +1 -0
  235. package/lib/training.js.map +1 -0
  236. package/lib/{types/transient-tokens.d.ts → transient-tokens.d.ts} +4 -3
  237. package/lib/transient-tokens.d.ts.map +1 -0
  238. package/lib/transient-tokens.js.map +1 -0
  239. package/lib/{types/user.d.ts → user.d.ts} +14 -8
  240. package/lib/user.d.ts.map +1 -0
  241. package/lib/{esm/user.js → user.js} +2 -2
  242. package/lib/user.js.map +1 -0
  243. package/lib/{types/utils → utils}/auth.d.ts +2 -1
  244. package/lib/utils/auth.d.ts.map +1 -0
  245. package/lib/{esm/utils → utils}/auth.js +1 -1
  246. package/lib/utils/auth.js.map +1 -0
  247. package/lib/{types/utils → utils}/schemas.d.ts +5 -4
  248. package/lib/utils/schemas.d.ts.map +1 -0
  249. package/lib/{esm/utils → utils}/schemas.js +24 -22
  250. package/lib/utils/schemas.js.map +1 -0
  251. package/lib/{types/utils → utils}/type-helpers.d.ts +1 -0
  252. package/lib/utils/type-helpers.d.ts.map +1 -0
  253. package/lib/{cjs/utils → utils}/type-helpers.js.map +1 -1
  254. package/lib/{types/versions.d.ts → versions.d.ts} +1 -0
  255. package/lib/versions.d.ts.map +1 -0
  256. package/lib/versions.js.map +1 -0
  257. package/lib/vertesia-common.js +1 -1
  258. package/lib/vertesia-common.js.map +1 -1
  259. package/lib/{types/workflow-analytics.d.ts → workflow-analytics.d.ts} +10 -3
  260. package/lib/workflow-analytics.d.ts.map +1 -0
  261. package/lib/workflow-analytics.js.map +1 -0
  262. package/package.json +21 -20
  263. package/src/Progress.ts +9 -7
  264. package/src/access-control.ts +127 -59
  265. package/src/agent-request-template.test.ts +40 -0
  266. package/src/agent-request-template.ts +45 -0
  267. package/src/analytics.ts +11 -16
  268. package/src/apikey.ts +46 -14
  269. package/src/apps.test.ts +37 -0
  270. package/src/apps.ts +702 -79
  271. package/src/audit-trail.ts +3 -5
  272. package/src/browser-credentials.ts +133 -0
  273. package/src/channels.ts +5 -5
  274. package/src/common.ts +17 -11
  275. package/src/cost-analytics.ts +10 -4
  276. package/src/data-platform.ts +142 -7
  277. package/src/email.ts +7 -4
  278. package/src/embeddings.ts +76 -0
  279. package/src/environment.ts +44 -25
  280. package/src/facets.ts +19 -21
  281. package/src/group.ts +14 -3
  282. package/src/host-utils.test.ts +61 -0
  283. package/src/host-utils.ts +93 -0
  284. package/src/index.ts +18 -10
  285. package/src/integrations.ts +134 -26
  286. package/src/interaction.ts +185 -141
  287. package/src/json-schema.ts +1 -1
  288. package/src/json.ts +6 -3
  289. package/src/meters.ts +6 -9
  290. package/src/model_utility.ts +1 -1
  291. package/src/oauth-scopes.ts +72 -0
  292. package/src/oauth-server.ts +80 -5
  293. package/src/payload.ts +6 -6
  294. package/src/pending-asks.ts +8 -1
  295. package/src/principal-context.ts +27 -0
  296. package/src/project.ts +416 -109
  297. package/src/prompt.ts +30 -27
  298. package/src/query.ts +19 -17
  299. package/src/rate-limiter.ts +1 -1
  300. package/src/refs.ts +19 -24
  301. package/src/roles/types.ts +58 -0
  302. package/src/roles.test.ts +32 -0
  303. package/src/runs.ts +14 -15
  304. package/src/secrets.ts +60 -0
  305. package/src/skill.ts +1 -2
  306. package/src/store/activity-catalog.ts +13 -1
  307. package/src/store/agent-run.ts +270 -42
  308. package/src/store/collections.ts +21 -13
  309. package/src/store/common.ts +1 -2
  310. package/src/store/conversation-state.ts +59 -5
  311. package/src/store/doc-analyzer.ts +22 -14
  312. package/src/store/dsl-workflow.ts +54 -29
  313. package/src/store/hive-memory.ts +10 -10
  314. package/src/store/index.ts +19 -17
  315. package/src/store/ms.d.ts +34 -3
  316. package/src/store/object-types.ts +75 -79
  317. package/src/store/process-schema.test.ts +106 -0
  318. package/src/store/process-schema.ts +485 -0
  319. package/src/store/process-validation.test.ts +432 -0
  320. package/src/store/process-validation.ts +548 -0
  321. package/src/store/process.ts +305 -0
  322. package/src/store/rendering.ts +12 -12
  323. package/src/store/schedule.ts +3 -3
  324. package/src/store/signals.ts +17 -1
  325. package/src/store/store.ts +119 -89
  326. package/src/store/task.ts +71 -0
  327. package/src/store/temporalio.ts +14 -14
  328. package/src/store/workflow.test.ts +76 -14
  329. package/src/store/workflow.ts +220 -125
  330. package/src/sts-token-types.ts +30 -4
  331. package/src/tool-execution.ts +2 -2
  332. package/src/tools.ts +103 -0
  333. package/src/training.ts +25 -27
  334. package/src/transient-tokens.ts +5 -8
  335. package/src/user.ts +26 -36
  336. package/src/utils/auth.ts +2 -2
  337. package/src/utils/schemas.ts +36 -31
  338. package/src/utils/type-helpers.ts +2 -4
  339. package/src/workflow-analytics.ts +15 -18
  340. package/lib/cjs/Progress.js +0 -61
  341. package/lib/cjs/Progress.js.map +0 -1
  342. package/lib/cjs/access-control.js +0 -58
  343. package/lib/cjs/access-control.js.map +0 -1
  344. package/lib/cjs/analytics.js +0 -3
  345. package/lib/cjs/apikey.js +0 -17
  346. package/lib/cjs/apikey.js.map +0 -1
  347. package/lib/cjs/apps.js +0 -89
  348. package/lib/cjs/apps.js.map +0 -1
  349. package/lib/cjs/ask-user.js +0 -8
  350. package/lib/cjs/ask-user.js.map +0 -1
  351. package/lib/cjs/audit-trail.js +0 -10
  352. package/lib/cjs/audit-trail.js.map +0 -1
  353. package/lib/cjs/channels.js +0 -63
  354. package/lib/cjs/channels.js.map +0 -1
  355. package/lib/cjs/common.js +0 -3
  356. package/lib/cjs/cost-analytics.js +0 -13
  357. package/lib/cjs/cost-analytics.js.map +0 -1
  358. package/lib/cjs/data-platform.js +0 -127
  359. package/lib/cjs/data-platform.js.map +0 -1
  360. package/lib/cjs/email.js +0 -20
  361. package/lib/cjs/email.js.map +0 -1
  362. package/lib/cjs/environment.js +0 -44
  363. package/lib/cjs/environment.js.map +0 -1
  364. package/lib/cjs/facets.js +0 -3
  365. package/lib/cjs/facets.js.map +0 -1
  366. package/lib/cjs/group.js +0 -6
  367. package/lib/cjs/group.js.map +0 -1
  368. package/lib/cjs/index.js +0 -60
  369. package/lib/cjs/index.js.map +0 -1
  370. package/lib/cjs/integrations.js +0 -16
  371. package/lib/cjs/integrations.js.map +0 -1
  372. package/lib/cjs/interaction.js +0 -101
  373. package/lib/cjs/interaction.js.map +0 -1
  374. package/lib/cjs/json-schema.js +0 -3
  375. package/lib/cjs/json.js +0 -3
  376. package/lib/cjs/json.js.map +0 -1
  377. package/lib/cjs/meters.js +0 -13
  378. package/lib/cjs/meters.js.map +0 -1
  379. package/lib/cjs/model_utility.js +0 -6
  380. package/lib/cjs/model_utility.js.map +0 -1
  381. package/lib/cjs/oauth-server.js +0 -3
  382. package/lib/cjs/oauth.js +0 -7
  383. package/lib/cjs/oauth.js.map +0 -1
  384. package/lib/cjs/openapi.js +0 -3
  385. package/lib/cjs/openapi.js.map +0 -1
  386. package/lib/cjs/package.json +0 -3
  387. package/lib/cjs/payload.js +0 -3
  388. package/lib/cjs/pending-asks.js +0 -7
  389. package/lib/cjs/pending-asks.js.map +0 -1
  390. package/lib/cjs/project.js +0 -143
  391. package/lib/cjs/project.js.map +0 -1
  392. package/lib/cjs/prompt.js +0 -21
  393. package/lib/cjs/prompt.js.map +0 -1
  394. package/lib/cjs/query.js +0 -3
  395. package/lib/cjs/query.js.map +0 -1
  396. package/lib/cjs/rate-limiter.js +0 -6
  397. package/lib/cjs/rate-limiter.js.map +0 -1
  398. package/lib/cjs/refs.js +0 -14
  399. package/lib/cjs/refs.js.map +0 -1
  400. package/lib/cjs/runs.js +0 -3
  401. package/lib/cjs/runs.js.map +0 -1
  402. package/lib/cjs/skill.js +0 -14
  403. package/lib/cjs/skill.js.map +0 -1
  404. package/lib/cjs/store/activity-catalog.js +0 -3
  405. package/lib/cjs/store/activity-catalog.js.map +0 -1
  406. package/lib/cjs/store/agent-run.js +0 -16
  407. package/lib/cjs/store/agent-run.js.map +0 -1
  408. package/lib/cjs/store/collections.js +0 -9
  409. package/lib/cjs/store/collections.js.map +0 -1
  410. package/lib/cjs/store/common.js +0 -3
  411. package/lib/cjs/store/common.js.map +0 -1
  412. package/lib/cjs/store/conversation-state.js +0 -19
  413. package/lib/cjs/store/conversation-state.js.map +0 -1
  414. package/lib/cjs/store/doc-analyzer.js +0 -3
  415. package/lib/cjs/store/dsl-workflow.js +0 -5
  416. package/lib/cjs/store/dsl-workflow.js.map +0 -1
  417. package/lib/cjs/store/hive-memory.js +0 -3
  418. package/lib/cjs/store/index.js +0 -33
  419. package/lib/cjs/store/index.js.map +0 -1
  420. package/lib/cjs/store/object-types.js +0 -98
  421. package/lib/cjs/store/object-types.js.map +0 -1
  422. package/lib/cjs/store/rendering.js +0 -26
  423. package/lib/cjs/store/rendering.js.map +0 -1
  424. package/lib/cjs/store/schedule.js +0 -32
  425. package/lib/cjs/store/schedule.js.map +0 -1
  426. package/lib/cjs/store/signals.js +0 -3
  427. package/lib/cjs/store/store.js +0 -182
  428. package/lib/cjs/store/store.js.map +0 -1
  429. package/lib/cjs/store/temporalio.js +0 -44
  430. package/lib/cjs/store/temporalio.js.map +0 -1
  431. package/lib/cjs/store/worker.js +0 -3
  432. package/lib/cjs/store/worker.js.map +0 -1
  433. package/lib/cjs/store/workflow.js +0 -306
  434. package/lib/cjs/store/workflow.js.map +0 -1
  435. package/lib/cjs/sts-token-types.js +0 -32
  436. package/lib/cjs/sts-token-types.js.map +0 -1
  437. package/lib/cjs/tenant.js +0 -3
  438. package/lib/cjs/tenant.js.map +0 -1
  439. package/lib/cjs/tool-execution.js +0 -6
  440. package/lib/cjs/tool-execution.js.map +0 -1
  441. package/lib/cjs/training.js +0 -14
  442. package/lib/cjs/training.js.map +0 -1
  443. package/lib/cjs/transient-tokens.js +0 -9
  444. package/lib/cjs/transient-tokens.js.map +0 -1
  445. package/lib/cjs/user.js +0 -26
  446. package/lib/cjs/user.js.map +0 -1
  447. package/lib/cjs/utils/auth.js +0 -15
  448. package/lib/cjs/utils/auth.js.map +0 -1
  449. package/lib/cjs/utils/schemas.js +0 -182
  450. package/lib/cjs/utils/schemas.js.map +0 -1
  451. package/lib/cjs/utils/type-helpers.js +0 -3
  452. package/lib/cjs/versions.js +0 -10
  453. package/lib/cjs/versions.js.map +0 -1
  454. package/lib/cjs/workflow-analytics.js +0 -52
  455. package/lib/cjs/workflow-analytics.js.map +0 -1
  456. package/lib/esm/Progress.js.map +0 -1
  457. package/lib/esm/access-control.js.map +0 -1
  458. package/lib/esm/analytics.js.map +0 -1
  459. package/lib/esm/apikey.js.map +0 -1
  460. package/lib/esm/apps.js +0 -79
  461. package/lib/esm/apps.js.map +0 -1
  462. package/lib/esm/audit-trail.js +0 -7
  463. package/lib/esm/audit-trail.js.map +0 -1
  464. package/lib/esm/channels.js.map +0 -1
  465. package/lib/esm/common.js.map +0 -1
  466. package/lib/esm/cost-analytics.js.map +0 -1
  467. package/lib/esm/data-platform.js.map +0 -1
  468. package/lib/esm/email.js.map +0 -1
  469. package/lib/esm/environment.js.map +0 -1
  470. package/lib/esm/facets.js.map +0 -1
  471. package/lib/esm/group.js +0 -3
  472. package/lib/esm/group.js.map +0 -1
  473. package/lib/esm/index.js.map +0 -1
  474. package/lib/esm/integrations.js.map +0 -1
  475. package/lib/esm/interaction.js.map +0 -1
  476. package/lib/esm/json-schema.js.map +0 -1
  477. package/lib/esm/json.js.map +0 -1
  478. package/lib/esm/meters.js.map +0 -1
  479. package/lib/esm/model_utility.js +0 -2
  480. package/lib/esm/model_utility.js.map +0 -1
  481. package/lib/esm/oauth-server.js.map +0 -1
  482. package/lib/esm/oauth.js.map +0 -1
  483. package/lib/esm/openapi.js +0 -2
  484. package/lib/esm/openapi.js.map +0 -1
  485. package/lib/esm/payload.js.map +0 -1
  486. package/lib/esm/pending-asks.js.map +0 -1
  487. package/lib/esm/project.js +0 -138
  488. package/lib/esm/project.js.map +0 -1
  489. package/lib/esm/prompt.js.map +0 -1
  490. package/lib/esm/query.js.map +0 -1
  491. package/lib/esm/rate-limiter.js.map +0 -1
  492. package/lib/esm/refs.js.map +0 -1
  493. package/lib/esm/runs.js.map +0 -1
  494. package/lib/esm/skill.js.map +0 -1
  495. package/lib/esm/store/activity-catalog.js.map +0 -1
  496. package/lib/esm/store/agent-run.js.map +0 -1
  497. package/lib/esm/store/collections.js.map +0 -1
  498. package/lib/esm/store/common.js.map +0 -1
  499. package/lib/esm/store/conversation-state.js.map +0 -1
  500. package/lib/esm/store/doc-analyzer.js.map +0 -1
  501. package/lib/esm/store/dsl-workflow.js +0 -2
  502. package/lib/esm/store/dsl-workflow.js.map +0 -1
  503. package/lib/esm/store/hive-memory.js.map +0 -1
  504. package/lib/esm/store/index.js +0 -17
  505. package/lib/esm/store/index.js.map +0 -1
  506. package/lib/esm/store/object-types.js +0 -95
  507. package/lib/esm/store/object-types.js.map +0 -1
  508. package/lib/esm/store/rendering.js.map +0 -1
  509. package/lib/esm/store/schedule.js.map +0 -1
  510. package/lib/esm/store/signals.js.map +0 -1
  511. package/lib/esm/store/store.js.map +0 -1
  512. package/lib/esm/store/temporalio.js.map +0 -1
  513. package/lib/esm/store/worker.js +0 -2
  514. package/lib/esm/store/worker.js.map +0 -1
  515. package/lib/esm/store/workflow.js.map +0 -1
  516. package/lib/esm/sts-token-types.js.map +0 -1
  517. package/lib/esm/tenant.js.map +0 -1
  518. package/lib/esm/tool-execution.js.map +0 -1
  519. package/lib/esm/training.js.map +0 -1
  520. package/lib/esm/transient-tokens.js.map +0 -1
  521. package/lib/esm/user.js.map +0 -1
  522. package/lib/esm/utils/auth.js.map +0 -1
  523. package/lib/esm/utils/schemas.js.map +0 -1
  524. package/lib/esm/utils/type-helpers.js.map +0 -1
  525. package/lib/esm/versions.js.map +0 -1
  526. package/lib/esm/workflow-analytics.js.map +0 -1
  527. package/lib/tsconfig.tsbuildinfo +0 -1
  528. package/lib/types/Progress.d.ts.map +0 -1
  529. package/lib/types/access-control.d.ts +0 -79
  530. package/lib/types/access-control.d.ts.map +0 -1
  531. package/lib/types/analytics.d.ts.map +0 -1
  532. package/lib/types/apikey.d.ts.map +0 -1
  533. package/lib/types/apps.d.ts.map +0 -1
  534. package/lib/types/ask-user.d.ts.map +0 -1
  535. package/lib/types/audit-trail.d.ts.map +0 -1
  536. package/lib/types/channels.d.ts.map +0 -1
  537. package/lib/types/common.d.ts.map +0 -1
  538. package/lib/types/cost-analytics.d.ts.map +0 -1
  539. package/lib/types/data-platform.d.ts.map +0 -1
  540. package/lib/types/email.d.ts.map +0 -1
  541. package/lib/types/environment.d.ts.map +0 -1
  542. package/lib/types/facets.d.ts.map +0 -1
  543. package/lib/types/group.d.ts.map +0 -1
  544. package/lib/types/index.d.ts.map +0 -1
  545. package/lib/types/integrations.d.ts +0 -83
  546. package/lib/types/integrations.d.ts.map +0 -1
  547. package/lib/types/interaction.d.ts.map +0 -1
  548. package/lib/types/json-schema.d.ts +0 -1
  549. package/lib/types/json-schema.d.ts.map +0 -1
  550. package/lib/types/json.d.ts +0 -1
  551. package/lib/types/json.d.ts.map +0 -1
  552. package/lib/types/meters.d.ts.map +0 -1
  553. package/lib/types/model_utility.d.ts +0 -1
  554. package/lib/types/model_utility.d.ts.map +0 -1
  555. package/lib/types/oauth-server.d.ts.map +0 -1
  556. package/lib/types/oauth.d.ts.map +0 -1
  557. package/lib/types/openapi.d.ts +0 -90
  558. package/lib/types/openapi.d.ts.map +0 -1
  559. package/lib/types/payload.d.ts.map +0 -1
  560. package/lib/types/pending-asks.d.ts.map +0 -1
  561. package/lib/types/project.d.ts.map +0 -1
  562. package/lib/types/prompt.d.ts.map +0 -1
  563. package/lib/types/query.d.ts.map +0 -1
  564. package/lib/types/rate-limiter.d.ts.map +0 -1
  565. package/lib/types/refs.d.ts.map +0 -1
  566. package/lib/types/runs.d.ts.map +0 -1
  567. package/lib/types/skill.d.ts.map +0 -1
  568. package/lib/types/store/activity-catalog.d.ts.map +0 -1
  569. package/lib/types/store/agent-run.d.ts.map +0 -1
  570. package/lib/types/store/collections.d.ts.map +0 -1
  571. package/lib/types/store/common.d.ts.map +0 -1
  572. package/lib/types/store/conversation-state.d.ts.map +0 -1
  573. package/lib/types/store/doc-analyzer.d.ts.map +0 -1
  574. package/lib/types/store/dsl-workflow.d.ts.map +0 -1
  575. package/lib/types/store/hive-memory.d.ts.map +0 -1
  576. package/lib/types/store/index.d.ts +0 -16
  577. package/lib/types/store/index.d.ts.map +0 -1
  578. package/lib/types/store/object-types.d.ts.map +0 -1
  579. package/lib/types/store/rendering.d.ts.map +0 -1
  580. package/lib/types/store/schedule.d.ts.map +0 -1
  581. package/lib/types/store/signals.d.ts.map +0 -1
  582. package/lib/types/store/store.d.ts.map +0 -1
  583. package/lib/types/store/temporalio.d.ts +0 -16
  584. package/lib/types/store/temporalio.d.ts.map +0 -1
  585. package/lib/types/store/worker.d.ts +0 -18
  586. package/lib/types/store/worker.d.ts.map +0 -1
  587. package/lib/types/store/workflow.d.ts.map +0 -1
  588. package/lib/types/sts-token-types.d.ts.map +0 -1
  589. package/lib/types/tenant.d.ts.map +0 -1
  590. package/lib/types/tool-execution.d.ts.map +0 -1
  591. package/lib/types/training.d.ts.map +0 -1
  592. package/lib/types/transient-tokens.d.ts.map +0 -1
  593. package/lib/types/user.d.ts.map +0 -1
  594. package/lib/types/utils/auth.d.ts.map +0 -1
  595. package/lib/types/utils/schemas.d.ts.map +0 -1
  596. package/lib/types/utils/type-helpers.d.ts.map +0 -1
  597. package/lib/types/versions.d.ts.map +0 -1
  598. package/lib/types/workflow-analytics.d.ts.map +0 -1
  599. package/src/openapi.ts +0 -102
  600. package/src/store/worker.ts +0 -19
  601. /package/lib/{esm/analytics.js → analytics.js} +0 -0
  602. /package/lib/{esm/ask-user.js → ask-user.js} +0 -0
  603. /package/lib/{esm/common.js → common.js} +0 -0
  604. /package/lib/{esm/cost-analytics.js → cost-analytics.js} +0 -0
  605. /package/lib/{esm/data-platform.js → data-platform.js} +0 -0
  606. /package/lib/{esm/facets.js → facets.js} +0 -0
  607. /package/lib/{esm/json-schema.js → json-schema.js} +0 -0
  608. /package/lib/{esm/json.js → json.js} +0 -0
  609. /package/lib/{esm/meters.js → meters.js} +0 -0
  610. /package/lib/{esm/oauth-server.js → oauth-server.js} +0 -0
  611. /package/lib/{esm/oauth.js → oauth.js} +0 -0
  612. /package/lib/{esm/payload.js → payload.js} +0 -0
  613. /package/lib/{esm/pending-asks.js → pending-asks.js} +0 -0
  614. /package/lib/{esm/prompt.js → prompt.js} +0 -0
  615. /package/lib/{esm/query.js → query.js} +0 -0
  616. /package/lib/{esm/rate-limiter.js → rate-limiter.js} +0 -0
  617. /package/lib/{esm/refs.js → refs.js} +0 -0
  618. /package/lib/{esm/runs.js → runs.js} +0 -0
  619. /package/lib/{esm/skill.js → skill.js} +0 -0
  620. /package/lib/{esm/store → store}/activity-catalog.js +0 -0
  621. /package/lib/{esm/store → store}/agent-run.js +0 -0
  622. /package/lib/{esm/store → store}/collections.js +0 -0
  623. /package/lib/{esm/store → store}/common.js +0 -0
  624. /package/lib/{esm/store → store}/doc-analyzer.js +0 -0
  625. /package/lib/{esm/store → store}/hive-memory.js +0 -0
  626. /package/lib/{esm/store → store}/schedule.js +0 -0
  627. /package/lib/{esm/store → store}/signals.js +0 -0
  628. /package/lib/{esm/tenant.js → tenant.js} +0 -0
  629. /package/lib/{esm/tool-execution.js → tool-execution.js} +0 -0
  630. /package/lib/{esm/training.js → training.js} +0 -0
  631. /package/lib/{esm/transient-tokens.js → transient-tokens.js} +0 -0
  632. /package/lib/{esm/utils → utils}/type-helpers.js +0 -0
  633. /package/lib/{esm/versions.js → versions.js} +0 -0
  634. /package/lib/{esm/workflow-analytics.js → workflow-analytics.js} +0 -0
package/src/apps.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { JSONObject, JSONSchema, ToolDefinition } from "@llumiverse/common";
2
- import { CatalogInteractionRef } from "./interaction.js";
3
- import { DSLActivityOptions, InCodeTypeDefinition } from "./store/index.js";
1
+ import type { JSONObject, JSONSchema, ToolDefinition } from '@llumiverse/common';
2
+ import type { AppDashboardDefinition } from './data-platform.js';
3
+ import type { CatalogInteractionRef } from './interaction.js';
4
+ import type { DSLActivityOptions, InCodeProcessDefinition, InCodeTypeDefinition } from './store/index.js';
4
5
 
5
6
  /** Allowed values for AppUINavItem.preferredSection */
6
- export const PREFERRED_SECTIONS = ["default", "footer", "settings"] as const;
7
+ export const PREFERRED_SECTIONS = ['default', 'footer', 'settings'] as const;
7
8
 
8
9
  /**
9
10
  * Additional navigation item for an app's UI configuration.
@@ -44,7 +45,7 @@ export interface AppUIConfig {
44
45
  * - shadow - use Shadow DOM to fully isolate the plugin from the host.
45
46
  * - css - use CSS processing (like prefixing or other isolation techniques). Ligther but plugins may conflict with the host
46
47
  */
47
- isolation?: "shadow" | "css";
48
+ isolation?: 'shadow' | 'css';
48
49
  /**
49
50
  * Navigation items for the app's sidebar UI.
50
51
  * Only applicable for apps with UI capability in shell contexts (ie. CompositeApp shell).
@@ -72,12 +73,12 @@ export interface AppInstallationsQuery {
72
73
  /**
73
74
  * Authentication type for tool collections
74
75
  */
75
- export type ToolCollectionAuthType = "oauth" | "other";
76
+ export type ToolCollectionAuthType = 'oauth' | 'other';
76
77
 
77
78
  /**
78
79
  * Tool collection type
79
80
  */
80
- export type ToolCollectionType = "mcp" | "vertesia_sdk";
81
+ export type ToolCollectionType = 'mcp' | 'vertesia_sdk';
81
82
 
82
83
  /**
83
84
  * Base tool collection configuration
@@ -131,7 +132,7 @@ export interface MCPOAuthConfig {
131
132
  * MCP tool collection configuration (requires name, description, and namespace)
132
133
  */
133
134
  export interface MCPToolCollectionObject extends BaseToolCollectionObject {
134
- type: "mcp";
135
+ type: 'mcp';
135
136
 
136
137
  /**
137
138
  * Stable identifier for this collection.
@@ -196,7 +197,7 @@ export interface MCPToolCollectionObject extends BaseToolCollectionObject {
196
197
  * Vertesia SDK tool collection configuration
197
198
  */
198
199
  export interface VertesiaSDKToolCollectionObject extends BaseToolCollectionObject {
199
- type: "vertesia_sdk";
200
+ type: 'vertesia_sdk';
200
201
 
201
202
  /**
202
203
  * Optional namespace to use for tool names from this collection.
@@ -220,14 +221,17 @@ export interface VertesiaSDKToolCollectionObject extends BaseToolCollectionObjec
220
221
  /**
221
222
  * Tool collection configuration (object format)
222
223
  */
224
+ /**
225
+ * @discriminator type
226
+ */
223
227
  export type ToolCollectionObject = MCPToolCollectionObject | VertesiaSDKToolCollectionObject;
224
228
 
225
229
  /**
226
- * Tool collection can be either:
227
- * - A string URL (legacy format, with "mcp:" prefix for MCP servers)
228
- * - An object with url, type, and optional auth (new format)
230
+ * Backward-compatible TypeScript alias. Public API payloads should reference
231
+ * ToolCollectionObject directly so generated clients do not create a wrapper
232
+ * model around the discriminated union.
229
233
  */
230
- export type ToolCollection = string | ToolCollectionObject;
234
+ export type ToolCollection = ToolCollectionObject;
231
235
 
232
236
  export const MCP_COLLECTION_ID_PATTERN = /^[a-z0-9]+(?:_[a-z0-9]+)*$/;
233
237
  export const MCP_COLLECTION_NAMESPACE_PATTERN = /^[a-z0-9]+(?:_[a-z0-9]+)*$/;
@@ -255,46 +259,34 @@ export function getDefaultOAuthAppNameForCollectionId(collectionId: string): str
255
259
 
256
260
  /**
257
261
  * Normalizes a tool collection to the object format.
258
- * Handles backward compatibility with string URLs.
262
+ * Applies optional `{{var}}` substitution to the URL so manifests can reference
263
+ * deployment-time variables like `{{studio_ui}}`.
259
264
  *
260
- * @param collection - String URL or ToolCollectionObject
265
+ * @param collection - ToolCollectionObject
266
+ * @param vars - Optional endpoint variables to substitute in URLs
261
267
  * @returns Normalized ToolCollectionObject
262
268
  */
263
- export function normalizeToolCollection(collection: ToolCollection): ToolCollectionObject {
264
- if (typeof collection === 'string') {
265
- // Legacy string format
266
- if (collection.startsWith('mcp:')) {
267
- const url = collection.substring('mcp:'.length);
268
- // For legacy MCP strings, derive name and prefix from URL
269
- const urlObj = new URL(url);
270
- const name = urlObj.hostname.replace(/\./g, '-');
271
- const id = deriveMCPCollectionId(urlObj.hostname);
272
- return {
273
- url,
274
- type: 'mcp',
275
- id,
276
- name,
277
- description: `MCP server at ${url}`,
278
- namespace: name
279
- };
280
- }
281
- return {
282
- url: collection,
283
- type: 'vertesia_sdk'
284
- };
269
+ export function normalizeToolCollection(collection: ToolCollectionObject, vars?: Endpoints): ToolCollectionObject {
270
+ if (!collection || typeof collection !== 'object') {
271
+ throw new TypeError('Tool collection must be an object');
285
272
  }
286
- // Already in object format
273
+ const substitutedUrl = vars && collection.url ? substituteEndpoints(collection.url, vars) : collection.url;
274
+ const urlChanged = substitutedUrl !== collection.url;
287
275
  if (collection.type === 'mcp') {
288
276
  const fallbackId = deriveMCPCollectionId(collection.id || collection.name || collection.url);
289
- return {
290
- ...collection,
291
- id: collection.id || fallbackId,
292
- };
277
+ if (urlChanged || !collection.id) {
278
+ return {
279
+ ...collection,
280
+ url: substitutedUrl,
281
+ id: collection.id || fallbackId,
282
+ };
283
+ }
284
+ } else if (urlChanged) {
285
+ return { ...collection, url: substitutedUrl };
293
286
  }
294
287
  return collection;
295
288
  }
296
289
 
297
-
298
290
  /**
299
291
  * Metadata hints from MCP tool annotations (per MCP spec).
300
292
  */
@@ -316,7 +308,7 @@ export interface MCPToolAnnotations {
316
308
  */
317
309
  export interface AgentToolDefinition extends ToolDefinition {
318
310
  /**
319
- * The tool execution URL. It can be an absolute URL or a path in which case the URL is obtained
311
+ * The tool execution URL. It can be an absolute URL or a path in which case the URL is obtained
320
312
  * using the base URL of the tool server API. Ex: http://tool-server.com/api/
321
313
  * Example of relative URLs: "tools/my-tool-collection" or "/api/tools/my-tool-collection"
322
314
  */
@@ -328,18 +320,29 @@ export interface AgentToolDefinition extends ToolDefinition {
328
320
  /**
329
321
  * Whether this tool is available by default.
330
322
  * - true/undefined: Tool is always available to agents
331
- * - false: Tool is only available when activated by a skill's related_tools
323
+ * - false: Tool is only available when enabled by a skill via `tools`
332
324
  */
333
325
  default?: boolean;
334
326
  /**
335
- * For skill tools (learn_*): list of related tool names that become available
336
- * when this skill is called. Used for dynamic tool discovery.
327
+ * For skill tools (`learn_*`): the tool names this skill enables when called.
328
+ * Matches the `tools:` key used in SKILL.md frontmatter and built-in skill
329
+ * definitions — one name across the whole stack.
337
330
  */
338
- related_tools?: string[];
331
+ tools?: string[];
339
332
  /**
340
333
  * MCP tool annotations providing hints about tool behavior and safety.
341
334
  */
342
335
  annotations?: MCPToolAnnotations;
336
+ /**
337
+ * When true, agents must obtain explicit user confirmation via `ask_user`
338
+ * (Yes/No) before invoking this tool. If the user answers No, the tool
339
+ * must not run and should return an error indicating the user declined.
340
+ *
341
+ * Stronger than `annotations.destructiveHint` (which is only a hint) —
342
+ * this is a hard contract the agent is expected to honor. Set on tools
343
+ * that perform irreversible or destructive actions (e.g. delete_*).
344
+ */
345
+ requires_user_confirmation?: boolean;
343
346
  }
344
347
 
345
348
  /**
@@ -357,9 +360,9 @@ export interface RemoteActivityDefinition {
357
360
  /** Description of what the activity does */
358
361
  description?: string;
359
362
  /** JSON Schema for the activity input parameters */
360
- input_schema?: Record<string, any>;
363
+ input_schema?: Record<string, unknown>;
361
364
  /** JSON Schema for the activity output */
362
- output_schema?: Record<string, any>;
365
+ output_schema?: Record<string, unknown>;
363
366
  /**
364
367
  * The activity execution URL. Can be absolute or relative to the tool server base URL.
365
368
  * If not provided, the collection-specific activities endpoint is used.
@@ -369,8 +372,331 @@ export interface RemoteActivityDefinition {
369
372
  options?: DSLActivityOptions;
370
373
  }
371
374
 
372
- export type AppCapabilities = 'ui' | 'tools' | 'interactions' | 'types' | 'templates';
375
+ export type AppCapabilities = 'ui' | 'tools' | 'interactions' | 'types' | 'processes' | 'templates' | 'dashboards';
376
+
377
+ /**
378
+ * Canonical runtime list of {@link AppCapabilities} — the app capabilities Studio
379
+ * renders/supports. Co-located with the type so TypeScript rejects any drift between
380
+ * the two. Consumers (publish manifest derivation, etc.) must use this rather than
381
+ * re-listing the values.
382
+ */
383
+ export const APP_CAPABILITIES: readonly AppCapabilities[] = [
384
+ 'ui',
385
+ 'tools',
386
+ 'interactions',
387
+ 'types',
388
+ 'processes',
389
+ 'templates',
390
+ 'dashboards',
391
+ ];
392
+
393
+ /**
394
+ * Header carrying the app version a generated-app UI is running, so studio/zeno resolve app-owned
395
+ * capability refs (`app:<app>:...`) against that version (candidate testing) instead of current.
396
+ * Resolution-time only; never persisted. Set by the generated app template via client.withAppVersion.
397
+ */
398
+ export const APP_VERSION_HEADER = 'x-vertesia-app-version';
399
+ /**
400
+ * The platform-artifact types an app build can be required to create. A finer-grained
401
+ * counterpart to {@link AppCapabilities}: a single `interactions` capability may comprise
402
+ * several `interaction` artifacts plus `agent`, `activity`, and `tool` artifacts that
403
+ * {@link AppCapabilities} folds together. Used by the App Solution Architect manifest and
404
+ * the publish-time capability gate.
405
+ */
406
+ export type AppArtifactType =
407
+ | 'interaction'
408
+ | 'agent'
409
+ | 'type'
410
+ | 'process'
411
+ | 'template'
412
+ | 'dashboard'
413
+ | 'activity'
414
+ | 'tool';
415
+
416
+ export const APP_ARTIFACT_TYPES: readonly AppArtifactType[] = [
417
+ 'interaction',
418
+ 'agent',
419
+ 'type',
420
+ 'process',
421
+ 'template',
422
+ 'dashboard',
423
+ 'activity',
424
+ 'tool',
425
+ ];
426
+
427
+ /**
428
+ * A single platform artifact the App Solution Architect requires the build to create.
429
+ * `id` is the app-owned in-code id the implementation must register and reference
430
+ * (e.g. `app:<name>:main:extract-item` for interactions/agents, `app:<name>:<type>` for
431
+ * types, `app:<name>:<process>` for processes).
432
+ */
433
+ /**
434
+ * Build progress for one artifact, maintained by the developer agent as a living checklist:
435
+ * - `pending` — defined by the architect, not yet built.
436
+ * - `built` — registered in the package, not yet successfully exercised.
437
+ * - `done` — built AND successfully exercised against real data.
438
+ * This is the agent's self-reported claim for tracking/handoff; the capability gate verifies
439
+ * the truth independently via package registration + run/data telemetry and does not trust it.
440
+ */
441
+ export type AppArtifactStatus = 'pending' | 'built' | 'done';
442
+
443
+ export const APP_ARTIFACT_STATUSES: readonly AppArtifactStatus[] = ['pending', 'built', 'done'];
444
+
445
+ export interface AppPlannedArtifact {
446
+ /** App-owned in-code id the build must register and reference. */
447
+ id: string;
448
+ type: AppArtifactType;
449
+ /** Short human label. */
450
+ name?: string;
451
+ /** Why this artifact exists / what it does — carried into the build checklist. */
452
+ purpose?: string;
453
+ /**
454
+ * When false, the artifact is planned but optional: the capability gate warns rather
455
+ * than blocks if it is missing or never exercised. Defaults to required (true).
456
+ */
457
+ required?: boolean;
458
+ /** Build progress, updated by the developer agent. Defaults to `pending`. */
459
+ status?: AppArtifactStatus;
460
+ }
461
+
462
+ /**
463
+ * Structured result the App Solution Architect emits alongside its prose artifacts — the
464
+ * machine-readable contract for the build. The implementation MUST create and successfully
465
+ * exercise every required artifact before preview/publish. Persisted into the app repo as
466
+ * {@link APP_CAPABILITY_MANIFEST_PATH} so it survives across runs and the publish-time
467
+ * capability gate can verify against it deterministically. If the builder finds the plan
468
+ * wrong or insufficient, the orchestrator relaunches the architect to revise the manifest;
469
+ * the gate always checks against the latest committed copy.
470
+ */
471
+ export interface AppCapabilityManifest {
472
+ /** Artifact-storage ref to the prose architecture spec (e.g. the architecture `.md`). */
473
+ spec_artifact: string;
474
+ /** Platform artifacts the build must create. */
475
+ artifacts: AppPlannedArtifact[];
476
+ /**
477
+ * Monotonic revision, starting at 1, bumped each time the architect evolves the manifest for
478
+ * the SAME app on a later iteration (read the committed manifest, preserve untouched artifacts,
479
+ * add/modify/remove, then bump). Lets downstream agents tell which contract they are building to.
480
+ */
481
+ revision?: number;
482
+ /**
483
+ * Newest-first change notes, one entry per revision (what was added/modified/removed and why).
484
+ * How manifest changes are communicated to downstream agents across iterations.
485
+ */
486
+ changelog?: string[];
487
+ /** Optional free-form notes the architect wants the builder to honor. */
488
+ notes?: string;
489
+ }
490
+
491
+ /** Repo-relative path the capability manifest is committed to, read by the publish gate. */
492
+ export const APP_CAPABILITY_MANIFEST_PATH = 'docs/app-capability-manifest.json';
493
+
373
494
  export type AppAvailableIn = 'app_portal' | 'composite_app';
495
+
496
+ export type AppVersionKind = 'design' | 'preview' | 'published';
497
+ export type AppVersionState = 'ready' | 'failed' | 'expired';
498
+ export type AppVersionTarget = 'static' | 'service';
499
+ export type AppVersionGitRefType = 'branch' | 'tag' | 'commit' | 'detached';
500
+ export type AppBuildIntent = 'preview' | 'publish';
501
+ export type AppBuildTrigger = 'ui' | 'git_push' | 'agent' | 'api';
502
+
503
+ export interface AppVersionStorage {
504
+ tenant_id?: string;
505
+ app_prefix?: string;
506
+ artifacts_prefix?: string;
507
+ source_archive?: string;
508
+ source_git?: AppVersionGitSource;
509
+ build_prefix?: string;
510
+ manifest_path?: string;
511
+ service_archive?: string;
512
+ live_metadata_path?: string;
513
+ }
514
+
515
+ export interface AppVersionGitSource {
516
+ url?: string;
517
+ remote?: string;
518
+ /**
519
+ * The source ref that should be used to reproduce this version. For immutable
520
+ * app versions this is normally the tag created during preview/publish.
521
+ */
522
+ ref?: string;
523
+ ref_type?: AppVersionGitRefType;
524
+ branch?: string;
525
+ tag?: string;
526
+ commit?: string;
527
+ dirty?: boolean;
528
+ pushed?: boolean;
529
+ push_warning?: string;
530
+ }
531
+
532
+ export interface AppVersionUrls {
533
+ live_url?: string;
534
+ app_url?: string;
535
+ plugin_url?: string;
536
+ package_url?: string;
537
+ internal_preview_url?: string;
538
+ }
539
+
540
+ export interface AppVersionRecord {
541
+ id: string;
542
+ account: string;
543
+ project: string;
544
+ app?: string;
545
+ app_id: string;
546
+ app_name: string;
547
+ version_id: string;
548
+ kind: AppVersionKind;
549
+ state: AppVersionState;
550
+ active?: boolean;
551
+ target?: AppVersionTarget;
552
+ agent_run_id?: string;
553
+ sandbox_id?: string;
554
+ title?: string;
555
+ description?: string;
556
+ storage?: AppVersionStorage;
557
+ urls?: AppVersionUrls;
558
+ manifest?: Record<string, unknown>;
559
+ files?: string[];
560
+ file_count?: number;
561
+ source_file_count?: number;
562
+ screenshot_artifact?: string;
563
+ checks?: string[];
564
+ created_by?: string;
565
+ created_at: string;
566
+ updated_at: string;
567
+ published_at?: string;
568
+ checked_at?: string;
569
+ expires_at?: string;
570
+ }
571
+
572
+ export interface UpsertAppVersionRequest {
573
+ app?: string;
574
+ app_id: string;
575
+ app_name?: string;
576
+ version_id: string;
577
+ kind: AppVersionKind;
578
+ state?: AppVersionState;
579
+ active?: boolean;
580
+ target?: AppVersionTarget;
581
+ agent_run_id?: string;
582
+ sandbox_id?: string;
583
+ title?: string;
584
+ description?: string;
585
+ storage?: AppVersionStorage;
586
+ urls?: AppVersionUrls;
587
+ manifest?: Record<string, unknown>;
588
+ files?: string[];
589
+ file_count?: number;
590
+ source_file_count?: number;
591
+ screenshot_artifact?: string;
592
+ checks?: string[];
593
+ published_at?: string;
594
+ checked_at?: string;
595
+ expires_at?: string;
596
+ }
597
+
598
+ export interface AppVersionListQuery {
599
+ app_id?: string;
600
+ kind?: AppVersionKind;
601
+ include_expired?: boolean;
602
+ limit?: number;
603
+ }
604
+
605
+ export interface ActivateAppVersionResponse {
606
+ version: AppVersionRecord;
607
+ app?: AppManifest;
608
+ }
609
+
610
+ export interface StartAppBuildRequest {
611
+ /**
612
+ * Source branch, tag, or commit to build. When omitted, the app source
613
+ * configuration chooses the dev branch for previews and production branch
614
+ * for publishes.
615
+ */
616
+ source_ref?: string;
617
+ source_ref_type?: Extract<AppVersionGitRefType, 'branch' | 'tag' | 'commit'>;
618
+ intent?: AppBuildIntent;
619
+ trigger?: AppBuildTrigger;
620
+ target?: AppVersionTarget;
621
+ activate?: boolean;
622
+ title?: string;
623
+ description?: string;
624
+ }
625
+
626
+ export interface StartAppBuildResponse {
627
+ workflow_id: string;
628
+ run_id: string;
629
+ app_id: string;
630
+ intent: AppBuildIntent;
631
+ source_ref?: string;
632
+ source_ref_type?: Extract<AppVersionGitRefType, 'branch' | 'tag' | 'commit'>;
633
+ }
634
+
635
+ export interface AppBuildWorkflowInput extends StartAppBuildRequest {
636
+ app_id: string;
637
+ app_record_id?: string;
638
+ app_title?: string;
639
+ app_description?: string;
640
+ source_git_url?: string;
641
+ }
642
+
643
+ export interface AppBuildWorkflowResult {
644
+ app_id: string;
645
+ version_id: string;
646
+ kind: Extract<AppVersionKind, 'preview' | 'published'>;
647
+ state: AppVersionState;
648
+ source_git?: AppVersionGitSource;
649
+ urls?: AppVersionUrls;
650
+ file_count?: number;
651
+ }
652
+
653
+ export type AppBuildProgressStatus = 'queued' | 'resolving' | 'building' | 'completed' | 'failed';
654
+
655
+ export interface AppBuildProgress {
656
+ status: AppBuildProgressStatus;
657
+ step: string;
658
+ app_id?: string;
659
+ version_id?: string;
660
+ intent?: AppBuildIntent;
661
+ source_ref?: string;
662
+ source_ref_type?: Extract<AppVersionGitRefType, 'branch' | 'tag' | 'commit'>;
663
+ source_commit?: string;
664
+ file_count?: number;
665
+ app_url?: string;
666
+ error?: string;
667
+ updated_at: string;
668
+ }
669
+
670
+ /**
671
+ * Access control policy for an app installation.
672
+ * Declares which access surfaces are gated by per-user ACEs.
673
+ *
674
+ * - 'all' (default): every surface (UI portal, tool/endpoint use, contributions) requires
675
+ * an explicit app_member ACE — the historical behavior.
676
+ * - 'ui': UI portal visibility requires an ACE, but tool/endpoint use and contributions
677
+ * are open to anyone in the project.
678
+ * - 'none': fully open within the project — no ACE required for any surface.
679
+ *
680
+ * Declared on the manifest as the app's default. May be overridden per-installation.
681
+ */
682
+ export type AppAccessControl = 'all' | 'ui' | 'none';
683
+
684
+ /**
685
+ * Resolve the effective access_control policy for an installed app:
686
+ * installation override wins, then manifest default, then `'all'`.
687
+ *
688
+ * Shared by the STS (JWT generation), the studio-server (validation), and the UI (badge display)
689
+ * so the resolution rule lives in exactly one place. Named `effectiveAppAccessControl` (not just
690
+ * `effectiveAccessControl`) because exports from `@vertesia/common` are flattened — the broader
691
+ * name would risk colliding with other access-control families added later.
692
+ */
693
+ export function effectiveAppAccessControl(
694
+ installation: { access_control?: AppAccessControl } | null | undefined,
695
+ manifest: { access_control?: AppAccessControl } | null | undefined,
696
+ ): AppAccessControl {
697
+ return installation?.access_control ?? manifest?.access_control ?? 'all';
698
+ }
699
+
374
700
  export interface AppManifestData {
375
701
  /**
376
702
  * The name of the app, used as the id in the system.
@@ -384,7 +710,7 @@ export interface AppManifestData {
384
710
  * - "private": visible only to the owning account
385
711
  * - "vertesia": visible only to Vertesia team members (any project)
386
712
  */
387
- visibility: "public" | "private" | "vertesia";
713
+ visibility: 'public' | 'private' | 'vertesia';
388
714
 
389
715
  title: string;
390
716
  description: string;
@@ -401,19 +727,31 @@ export interface AppManifestData {
401
727
  */
402
728
  color?: string;
403
729
 
404
- status: "beta" | "stable" | "deprecated"
730
+ /**
731
+ * Optional preview screenshot for the app-management UI, captured by the builder during a
732
+ * build/QA run. Resolved client-side from the owning agent run's artifact storage, so it
733
+ * carries both the run id and the artifact path.
734
+ */
735
+ preview_screenshot?: {
736
+ /** Agent run id whose artifact storage holds the screenshot. */
737
+ agent_run_id: string;
738
+ /** Artifact path within that storage, e.g. "preview-checks/app-preview-<ts>.png". */
739
+ artifact: string;
740
+ };
741
+
742
+ status: 'beta' | 'stable' | 'deprecated';
405
743
 
406
744
  /**
407
- * The UI configuration of the app. If not specified and the app "ui" is in the app capabilities
745
+ * The UI configuration of the app. If not specified and the app "ui" is in the app capabilities
408
746
  * then the ui configuration will be fetched from the endpoint property.
409
747
  */
410
- ui?: AppUIConfig
748
+ ui?: AppUIConfig;
411
749
 
412
750
  /**
413
751
  * A list of tool collections endpoints to be used by this app.
414
752
  * Prefer using endpoint over tool_collections.
415
753
  */
416
- tool_collections?: ToolCollection[]
754
+ tool_collections?: ToolCollectionObject[];
417
755
 
418
756
  /**
419
757
  * Named OAuth providers shared across multiple MCP tool collections.
@@ -429,7 +767,7 @@ export interface AppManifestData {
429
767
  * The URL must provide 2 endpoints:
430
768
  * 1. GET URL - must return a JSON array with the list of interactions (as AppInteractionRef[])
431
769
  * 2. GET URL/{interaction_name} - must return the full interaction definition for the specified interaction.
432
- * This feature is for advanced composition of interactions. Prefer using endpoint.
770
+ * This feature is for advanced composition of interactions. Prefer using endpoint.
433
771
  */
434
772
  interactions?: string;
435
773
 
@@ -456,11 +794,14 @@ export interface AppManifestData {
456
794
  * - tools
457
795
  * - interactions
458
796
  * - types
797
+ * - processes
798
+ * - templates
799
+ * - dashboards
459
800
  * - settings
460
801
  * - all (the default if no scope is provided)
461
802
  * You can also use comma-separated values to combine scopes (e.g. "ui,tools").
462
- *
463
- * Example:
803
+ *
804
+ * Example:
464
805
  * - ?scope=ui,tools - returns only the UI configuration
465
806
  */
466
807
  endpoint?: string;
@@ -472,41 +813,223 @@ export interface AppManifestData {
472
813
  * Only dev environment names are allowed as keys (starting with "desktop-" or "dev-").
473
814
  */
474
815
  endpoint_overrides?: Record<string, string>;
816
+
817
+ /**
818
+ * Optional app version string (e.g. "1.0.0") — informational.
819
+ */
820
+ version?: string;
821
+
822
+ /**
823
+ * Source repository configuration for apps generated and maintained through
824
+ * AppGen. Branches are mutable deployment lanes; immutable app versions
825
+ * record their exact source tag/commit in AppVersionRecord.storage.source_git.
826
+ */
827
+ source?: AppSourceConfig;
828
+
829
+ /**
830
+ * Free-form tags used for classification and filtering. Platform apps
831
+ * carry `"system"` so UIs can skip install/uninstall/manage-permission
832
+ * controls that don't apply to synthetic installations.
833
+ */
834
+ tags?: string[];
835
+
836
+ /**
837
+ * Access control policy for the app. Defaults to 'all' (ACE-gated everywhere)
838
+ * when undefined. See {@link AppAccessControl} for semantics. May be overridden
839
+ * on the AppInstallation.
840
+ */
841
+ access_control?: AppAccessControl;
842
+ }
843
+
844
+ export interface AppGitSourceConfig {
845
+ url?: string;
846
+ default_branch?: string;
847
+ production_branch?: string;
848
+ development_branch?: string;
849
+ }
850
+
851
+ export interface AppSourceConfig {
852
+ kind: 'git';
853
+ git?: AppGitSourceConfig;
475
854
  }
476
855
 
856
+ /**
857
+ * Reserved deployment environment names that may never be used as endpoint
858
+ * override keys. Reserving them prevents a manifest from hijacking auto-resolution
859
+ * on a shared production studio-server (whose `Env.environment` is one of these).
860
+ */
861
+ const RESERVED_ENDPOINT_OVERRIDE_ENVS = new Set(['production', 'preview', 'staging']);
862
+
477
863
  /**
478
864
  * Returns true if the given environment name is allowed as an endpoint override key.
479
- * Only "desktop-" or "dev-" prefixed names are valid.
865
+ * Any non-empty name is accepted except the reserved shared-deployment names.
480
866
  */
481
867
  export function isValidEndpointOverrideEnv(envName: string): boolean {
482
- return envName.startsWith('desktop-') || envName.startsWith('dev-');
868
+ if (!envName) return false;
869
+ return !RESERVED_ENDPOINT_OVERRIDE_ENVS.has(envName.toLowerCase());
483
870
  }
484
871
 
485
872
  /**
486
- * Resolves the effective endpoint for an app given an optional environment name.
487
- * Returns the override endpoint if the env name matches a valid dev environment, otherwise the default endpoint.
873
+ * Deployment-time URL endpoints that can be referenced in app manifest URLs
874
+ * via `{{key}}` placeholders. The caller (typically studio-server) supplies
875
+ * these from environment config so that system apps can ship a single manifest
876
+ * with endpoints like `{{studio}}/api/package` that resolve per deployment.
877
+ */
878
+ export interface Endpoints {
879
+ /** The Studio API (studio-server) base URL */
880
+ studio?: string;
881
+ /** The Store API (zeno-server) base URL */
882
+ store?: string;
883
+ /** The token server base URL */
884
+ token?: string;
885
+ /** The browser-facing Studio UI (composable-ui) base URL */
886
+ ui?: string;
887
+ /** The Smart HTTP app source git server base URL */
888
+ git?: string;
889
+ /** The appgen app-gateway base URL (serves published app bundles + their `/api` runtime). */
890
+ gateway?: string;
891
+ }
892
+
893
+ /**
894
+ * Substitutes `{{key}}` placeholders in a URL with the matching endpoint.
895
+ * Unknown placeholders are left untouched (so failures surface as fetch errors
896
+ * with the unresolved placeholder visible, rather than silently pointing nowhere).
897
+ * Trailing slashes on replacement values are stripped to avoid `//api/...` joins.
898
+ */
899
+ export function substituteEndpoints(url: string, endpoints?: Endpoints): string {
900
+ if (!url || !endpoints) return url;
901
+ return url.replace(/\{\{\s*(\w+)\s*\}\}/g, (match, key: string) => {
902
+ const value = (endpoints as Record<string, string | undefined>)[key];
903
+ if (typeof value !== 'string' || !value) return match;
904
+ return trimTrailingSlashes(value);
905
+ });
906
+ }
907
+
908
+ function trimTrailingSlashes(value: string): string {
909
+ let end = value.length;
910
+ while (end > 0 && value[end - 1] === '/') {
911
+ end--;
912
+ }
913
+ return end === value.length ? value : value.slice(0, end);
914
+ }
915
+
916
+ /**
917
+ * Resolves the effective endpoint for an app.
918
+ *
919
+ * Order of resolution:
920
+ * 1. If `requestedOverride` matches an `endpoint_overrides` key, use that URL
921
+ * (caller must verify the user is allowed to use the override).
922
+ * 2. Else if `envName` matches an `endpoint_overrides` key, use that URL
923
+ * (auto-resolution from the studio-server's deployment env).
924
+ * 3. Otherwise use the main `endpoint`.
925
+ * 4. Apply `{{var}}` substitution using `vars`.
488
926
  */
489
927
  export function resolveAppEndpoint(
490
928
  manifest: Pick<AppManifestData, 'endpoint' | 'endpoint_overrides'>,
491
- envName?: string
929
+ envName?: string,
930
+ vars?: Endpoints,
931
+ requestedOverride?: string,
492
932
  ): string | undefined {
493
- if (envName && manifest.endpoint_overrides?.[envName] && isValidEndpointOverrideEnv(envName)) {
494
- return manifest.endpoint_overrides[envName];
933
+ let raw: string | undefined;
934
+ if (
935
+ requestedOverride &&
936
+ manifest.endpoint_overrides?.[requestedOverride] &&
937
+ isValidEndpointOverrideEnv(requestedOverride)
938
+ ) {
939
+ raw = manifest.endpoint_overrides[requestedOverride];
940
+ } else if (envName && manifest.endpoint_overrides?.[envName] && isValidEndpointOverrideEnv(envName)) {
941
+ raw = manifest.endpoint_overrides[envName];
942
+ } else {
943
+ raw = manifest.endpoint;
944
+ }
945
+ return raw ? substituteEndpoints(raw, vars) : raw;
946
+ }
947
+
948
+ /**
949
+ * Resolves all URL placeholders in a manifest in place (both `endpoint` and
950
+ * `tool_collections[].url`). Intended for server-side serialization — clients and
951
+ * downstream workers receive already-substituted URLs so they don't need to know
952
+ * about deployment-time vars.
953
+ *
954
+ * Mutates the manifest rather than returning a copy so it works cleanly with
955
+ * Mongoose populated subdocs.
956
+ */
957
+ export function resolveManifestUrls(
958
+ manifest: Partial<AppManifestData> | null | undefined,
959
+ envName?: string,
960
+ vars?: Endpoints,
961
+ requestedOverride?: string,
962
+ ): void {
963
+ if (!manifest) return;
964
+
965
+ if (manifest.endpoint) {
966
+ const resolved = resolveAppEndpoint(manifest, envName, vars, requestedOverride);
967
+ if (resolved && resolved !== manifest.endpoint) {
968
+ manifest.endpoint = resolved;
969
+ }
970
+ }
971
+
972
+ const toolCollections = manifest.tool_collections as ToolCollectionObject[] | undefined;
973
+ if (toolCollections && Array.isArray(toolCollections)) {
974
+ for (let i = 0; i < toolCollections.length; i++) {
975
+ const item = toolCollections[i];
976
+ if (item && typeof item === 'object' && item.url) {
977
+ const sub = substituteEndpoints(item.url, vars);
978
+ if (sub !== item.url) item.url = sub;
979
+ }
980
+ }
495
981
  }
496
- return manifest.endpoint;
497
982
  }
498
983
 
499
- export type AppPackageScope = 'ui' | 'tools' | 'interactions' | 'types' | 'templates' | 'settings' | 'widgets' | 'activities' | 'all';
984
+ export type AppPackageScope =
985
+ | 'ui'
986
+ | 'tools'
987
+ | 'interactions'
988
+ | 'types'
989
+ | 'processes'
990
+ | 'templates'
991
+ | 'dashboards'
992
+ | 'settings'
993
+ | 'widgets'
994
+ | 'activities'
995
+ | 'all';
996
+
997
+ /**
998
+ * Canonical runtime list of {@link AppPackageScope} — every package scope, including the
999
+ * catch-all `'all'`. Co-located with the type so TypeScript rejects drift. Consumers (the
1000
+ * /package?scope= parser, the inspection report) must use this rather than re-listing.
1001
+ */
1002
+ export const APP_PACKAGE_SCOPES: readonly AppPackageScope[] = [
1003
+ 'ui',
1004
+ 'tools',
1005
+ 'interactions',
1006
+ 'types',
1007
+ 'processes',
1008
+ 'templates',
1009
+ 'dashboards',
1010
+ 'settings',
1011
+ 'widgets',
1012
+ 'activities',
1013
+ 'all',
1014
+ ];
500
1015
  export interface AppPackage {
501
1016
  /**
502
1017
  * The UI configuration of the app
503
1018
  */
504
- ui?: AppUIConfig
1019
+ ui?: AppUIConfig;
505
1020
 
506
1021
  /**
507
1022
  * A list of tools exposed by the app.
508
1023
  */
509
- tools?: AgentToolDefinition[]
1024
+ tools?: AgentToolDefinition[];
1025
+
1026
+ /**
1027
+ * A list of skills (`learn_*` tools) exposed by the app. Kept separate from
1028
+ * `tools` so clients can render them distinctly — consumers that don't care
1029
+ * (e.g. the worker building a combined tool registry) should concatenate
1030
+ * the two lists.
1031
+ */
1032
+ skills?: AgentToolDefinition[];
510
1033
 
511
1034
  /**
512
1035
  * A list of interactions exposed by the app
@@ -518,11 +1041,21 @@ export interface AppPackage {
518
1041
  */
519
1042
  types?: InCodeTypeDefinition[];
520
1043
 
1044
+ /**
1045
+ * A list of process definitions exposed by the app.
1046
+ */
1047
+ processes?: InCodeProcessDefinition[];
1048
+
521
1049
  /**
522
1050
  * Templates provided by the app.
523
1051
  */
524
1052
  templates?: RenderingTemplateDefinitionRef[];
525
1053
 
1054
+ /**
1055
+ * Dashboards provided by the app.
1056
+ */
1057
+ dashboards?: AppDashboardDefinition[];
1058
+
526
1059
  /**
527
1060
  * Widgets provided by the app.
528
1061
  */
@@ -541,6 +1074,61 @@ export interface AppPackage {
541
1074
  settings_schema?: JSONSchema;
542
1075
  }
543
1076
 
1077
+ /**
1078
+ * A single diagnostic produced while inspecting an app's registration state.
1079
+ */
1080
+ export interface AppInspectionIssue {
1081
+ severity: 'error' | 'warning';
1082
+ /** The capability this issue relates to, when applicable (e.g. 'types'). */
1083
+ capability?: AppPackageScope;
1084
+ /** Stable machine code, e.g. 'capability_declared_but_empty', 'endpoint_unreachable', 'not_installed'. */
1085
+ code: string;
1086
+ /** Human-readable explanation, safe to surface to the model and the UI. */
1087
+ message: string;
1088
+ }
1089
+
1090
+ /**
1091
+ * Per-capability report of what an app's published package actually exposes,
1092
+ * compared against what its manifest declares.
1093
+ */
1094
+ export interface AppInspectionCapabilityReport {
1095
+ capability: AppPackageScope;
1096
+ /** True when the manifest's `capabilities` array declares this capability. */
1097
+ declared: boolean;
1098
+ /** The local ids the published package actually serves for this capability. */
1099
+ exposed_ids: string[];
1100
+ /** Convenience count of `exposed_ids`. */
1101
+ exposed_count: number;
1102
+ }
1103
+
1104
+ /**
1105
+ * Result of inspecting an app's registration: the resolved manifest state, what
1106
+ * the published package actually exposes per capability, and diagnostics. This
1107
+ * is the ground truth used by the `app_inspect_registration` agent tool and the
1108
+ * Build › App inspection UI to verify what is registered vs declared, instead of
1109
+ * inferring it from failed object/import calls.
1110
+ */
1111
+ export interface AppInspectionResult {
1112
+ app_id: string;
1113
+ name: string;
1114
+ version?: string;
1115
+ /** The resolved package endpoint for the current environment, if any. */
1116
+ endpoint?: string;
1117
+ /** True when the package endpoint responded to the capability probe. */
1118
+ endpoint_reachable: boolean;
1119
+ /** True when the app is installed in the current project. */
1120
+ installed: boolean;
1121
+ access_control?: string;
1122
+ /** The capabilities declared on the manifest. */
1123
+ capabilities: AppPackageScope[];
1124
+ /** What the published package exposes, per capability. */
1125
+ package: AppInspectionCapabilityReport[];
1126
+ /** Diagnostics — errors and warnings about the registration state. */
1127
+ issues: AppInspectionIssue[];
1128
+ /** Populated when the package probe itself failed (endpoint error/unreachable). */
1129
+ probe_error?: string;
1130
+ }
1131
+
544
1132
  export interface AppWidgetInfo {
545
1133
  collection: string;
546
1134
  skill: string;
@@ -620,7 +1208,7 @@ export interface AppInstallation {
620
1208
  id: string;
621
1209
  project: string; // the project where the app is installed
622
1210
  manifest: string; // the app manifest
623
- settings?: Record<string, any>; // settings for the app installation
1211
+ settings?: Record<string, unknown>; // settings for the app installation
624
1212
  /**
625
1213
  * Admin-managed allowlist of tool names permitted for this installation.
626
1214
  * When undefined, all tools from the app are permitted.
@@ -639,6 +1227,12 @@ export interface AppInstallation {
639
1227
  * Multiple collections sharing the same provider all resolve to the same OAuth provider.
640
1228
  */
641
1229
  provider_bindings?: AppInstallationProviderBinding[];
1230
+ /**
1231
+ * Per-installation override of the manifest's access_control policy.
1232
+ * When set, takes precedence over the manifest value. When undefined, the
1233
+ * manifest value (or 'all' default) applies.
1234
+ */
1235
+ access_control?: AppAccessControl;
642
1236
  created_at: string;
643
1237
  updated_at: string;
644
1238
  }
@@ -673,7 +1267,20 @@ export type AppOAuthProviderParams = Record<string, OAuthClientCredentials>;
673
1267
 
674
1268
  export interface AppInstallationPayload {
675
1269
  app_id: string;
676
- settings?: Record<string, any>;
1270
+ settings?: Record<string, unknown>;
1271
+ /**
1272
+ * Per-installation override of the manifest's `access_control` policy. When provided, takes precedence
1273
+ * over the manifest default for every access check. Sibling of `settings` — admin-controlled, not
1274
+ * part of the app's own settings JSON.
1275
+ *
1276
+ * Three send-time semantics on update:
1277
+ * - Field omitted entirely from the payload → leave the existing override unchanged.
1278
+ * - Explicit `null` → clear the override, fall back to the manifest default.
1279
+ * - String enum → set the override to that value.
1280
+ *
1281
+ * (On install, the same shape applies; omit or pass `null` to use the manifest default.)
1282
+ */
1283
+ access_control?: AppAccessControl | null;
677
1284
  /**
678
1285
  * OAuth credentials for each collection, keyed by collection.id.
679
1286
  * Legacy callers may still use collection.name for older manifests.
@@ -711,7 +1318,7 @@ export interface AppToolCollection {
711
1318
  /**
712
1319
  * the tools provided by this collection
713
1320
  */
714
- tools: AgentToolDefinition[]
1321
+ tools: AgentToolDefinition[];
715
1322
  }
716
1323
 
717
1324
  /**
@@ -743,7 +1350,7 @@ export interface ProjectToolInfo {
743
1350
  * The app installation settings.
744
1351
  * Only included for agent tokens, not user tokens (security: may contain API keys).
745
1352
  */
746
- settings?: Record<string, any>;
1353
+ settings?: Record<string, unknown>;
747
1354
  }
748
1355
 
749
1356
  /**
@@ -829,10 +1436,9 @@ export interface CompositeAppLogoOverrides {
829
1436
  hideFooterLogo?: boolean;
830
1437
  }
831
1438
 
832
-
833
1439
  /**
834
1440
  * Message banner overrides for the shell header.
835
- */
1441
+ */
836
1442
  export type CompositeAppMessageStyle = 'foreground' | 'info' | 'success' | 'attention' | 'destructive';
837
1443
  export interface CompositeAppMessageOverrides {
838
1444
  /** Message text to display */
@@ -930,7 +1536,7 @@ export interface CompositeAppNavItemPermissions {
930
1536
  groupsAllowed?: string[];
931
1537
  /** User IDs who can see this item. */
932
1538
  usersAllowed?: string[];
933
- /** ProjectRoles values (e.g. "developer", "manager") whose holders can see this item. */
1539
+ /** SystemRoles values (e.g. "developer", "manager") whose holders can see this item. */
934
1540
  rolesAllowed?: string[];
935
1541
  }
936
1542
 
@@ -995,9 +1601,9 @@ export interface CompositeAppHomePlugin {
995
1601
  */
996
1602
  export interface CompositeAppConfig {
997
1603
  /**
998
- * The unique identifier for this CompositeApp configuration
1604
+ * The unique identifier for this CompositeApp configuration
999
1605
  * Undefined if the configuration doesn't exists yet.
1000
- */
1606
+ */
1001
1607
  id?: string;
1002
1608
  /** The project this CompositeApp belongs to */
1003
1609
  project: string;
@@ -1038,3 +1644,20 @@ export interface ValidateUrlRequest {
1038
1644
  export interface ValidateUrlResponse {
1039
1645
  valid: true;
1040
1646
  }
1647
+
1648
+ /**
1649
+ * Result of DELETE /api/v1/apps/:id. With `?confirm=true` the cascade runs and
1650
+ * `deleted: true` is set; without it the endpoint returns a dry-run summary so
1651
+ * the UI can show what would be removed.
1652
+ */
1653
+ export interface AppDeleteSummary {
1654
+ confirmed: boolean;
1655
+ app_id: string;
1656
+ app_name: string;
1657
+ versions: number;
1658
+ installations: number;
1659
+ storage_prefix: string;
1660
+ git_repo_url?: string;
1661
+ deleted: boolean;
1662
+ warnings: string[];
1663
+ }