@opengeni/contracts 5.5.0 → 5.5.2-canary.40656248492001

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 (543) hide show
  1. package/dist/agent-authored-durable-text.d.ts +9 -9
  2. package/dist/agent-config.d.ts +148 -37
  3. package/dist/api-key-presets.d.ts +19 -0
  4. package/dist/app-action-catalog-types.d.ts +32 -0
  5. package/dist/app-action-catalog.gen.d.ts +2 -0
  6. package/dist/app-actions.d.ts +91 -0
  7. package/dist/app-actions.js +10130 -0
  8. package/dist/app-actions.js.map +1 -0
  9. package/dist/app-shot.d.ts +55 -0
  10. package/dist/artifact-catalog.d.ts +33 -0
  11. package/dist/artifacts.d.ts +166 -0
  12. package/dist/atlassian-native-retirement.d.ts +16 -0
  13. package/dist/atlassian-native-retirement.js +30 -0
  14. package/dist/atlassian-native-retirement.js.map +1 -0
  15. package/dist/atlassian.js +48 -23
  16. package/dist/automation-templates.d.ts +434 -0
  17. package/dist/automation-templates.js +31 -0
  18. package/dist/automation-templates.js.map +1 -0
  19. package/dist/billing-subscriptions.d.ts +61 -0
  20. package/dist/bots.d.ts +583 -0
  21. package/dist/bundled-skills.d.ts +58 -2
  22. package/dist/canonical-human-identities.js +3 -1
  23. package/dist/child-lifecycle-notice-protocol.d.ts +45 -0
  24. package/dist/chunk-2QKIEAGY.js +396 -0
  25. package/dist/chunk-2QKIEAGY.js.map +1 -0
  26. package/dist/chunk-2WOWEWXV.js +426 -0
  27. package/dist/chunk-2WOWEWXV.js.map +1 -0
  28. package/dist/chunk-2ZIHHL72.js +153 -0
  29. package/dist/chunk-2ZIHHL72.js.map +1 -0
  30. package/dist/chunk-32U6NKQQ.js +389 -0
  31. package/dist/chunk-32U6NKQQ.js.map +1 -0
  32. package/dist/chunk-4YDDHSO2.js +799 -0
  33. package/dist/chunk-4YDDHSO2.js.map +1 -0
  34. package/dist/chunk-56SNIMDO.js +9 -0
  35. package/dist/chunk-56SNIMDO.js.map +1 -0
  36. package/dist/chunk-5RWB6QVL.js +101 -0
  37. package/dist/chunk-5RWB6QVL.js.map +1 -0
  38. package/dist/chunk-5UGUOT3L.js +243 -0
  39. package/dist/chunk-5UGUOT3L.js.map +1 -0
  40. package/dist/chunk-6LAT33BH.js +130 -0
  41. package/dist/chunk-6LAT33BH.js.map +1 -0
  42. package/dist/chunk-7272KVWZ.js +60 -0
  43. package/dist/chunk-7272KVWZ.js.map +1 -0
  44. package/dist/chunk-72QC2GTL.js +36 -0
  45. package/dist/chunk-72QC2GTL.js.map +1 -0
  46. package/dist/chunk-7EQGGZBY.js +105 -0
  47. package/dist/chunk-7EQGGZBY.js.map +1 -0
  48. package/dist/chunk-A3LXWVYU.js +382 -0
  49. package/dist/chunk-A3LXWVYU.js.map +1 -0
  50. package/dist/chunk-AQYDZUJV.js +34 -0
  51. package/dist/chunk-AQYDZUJV.js.map +1 -0
  52. package/dist/chunk-BHCEVVUP.js +93 -0
  53. package/dist/chunk-BHCEVVUP.js.map +1 -0
  54. package/dist/chunk-BMUTAZX5.js +486 -0
  55. package/dist/chunk-BMUTAZX5.js.map +1 -0
  56. package/dist/chunk-DGG6IBBK.js +150 -0
  57. package/dist/chunk-DGG6IBBK.js.map +1 -0
  58. package/dist/{chunk-YBW5JSA3.js → chunk-FBCTUMHI.js} +123 -102
  59. package/dist/chunk-FBCTUMHI.js.map +1 -0
  60. package/dist/chunk-G2KJTFIC.js +97 -0
  61. package/dist/chunk-G2KJTFIC.js.map +1 -0
  62. package/dist/chunk-G4RKARXZ.js +1167 -0
  63. package/dist/chunk-G4RKARXZ.js.map +1 -0
  64. package/dist/chunk-H6UJJIUM.js +350 -0
  65. package/dist/chunk-H6UJJIUM.js.map +1 -0
  66. package/dist/chunk-JOTHDW4H.js +18 -0
  67. package/dist/chunk-JOTHDW4H.js.map +1 -0
  68. package/dist/chunk-L4GUEP7K.js +56480 -0
  69. package/dist/chunk-L4GUEP7K.js.map +1 -0
  70. package/dist/{chunk-SIOU2K4U.js → chunk-LJH2EYGT.js} +23 -23
  71. package/dist/chunk-MTJKSIGA.js +161 -0
  72. package/dist/chunk-MTJKSIGA.js.map +1 -0
  73. package/dist/chunk-MYHMB6GZ.js +202 -0
  74. package/dist/chunk-MYHMB6GZ.js.map +1 -0
  75. package/dist/chunk-PI5VIKJY.js +660 -0
  76. package/dist/chunk-PI5VIKJY.js.map +1 -0
  77. package/dist/{chunk-RIY7GYQS.js → chunk-PTSROVDG.js} +2 -2
  78. package/dist/chunk-PUIUXIOL.js +189 -0
  79. package/dist/chunk-PUIUXIOL.js.map +1 -0
  80. package/dist/chunk-R6VXJIMB.js +19 -0
  81. package/dist/chunk-R6VXJIMB.js.map +1 -0
  82. package/dist/chunk-RLJUNVAM.js +15 -0
  83. package/dist/chunk-RLJUNVAM.js.map +1 -0
  84. package/dist/chunk-RR6APCBK.js +213 -0
  85. package/dist/chunk-RR6APCBK.js.map +1 -0
  86. package/dist/{chunk-TXTQIYCV.js → chunk-RUQ4I6DO.js} +59 -13
  87. package/dist/chunk-RUQ4I6DO.js.map +1 -0
  88. package/dist/{chunk-WYBDERIY.js → chunk-RWEEUDHD.js} +53 -42
  89. package/dist/chunk-RWEEUDHD.js.map +1 -0
  90. package/dist/chunk-S7MSQQL6.js +158 -0
  91. package/dist/chunk-S7MSQQL6.js.map +1 -0
  92. package/dist/{chunk-5Q54VCCH.js → chunk-SHO4YO4B.js} +20 -36
  93. package/dist/chunk-SHO4YO4B.js.map +1 -0
  94. package/dist/{chunk-HHZSZYYF.js → chunk-T3HSWMA5.js} +20 -4
  95. package/dist/chunk-T3HSWMA5.js.map +1 -0
  96. package/dist/{chunk-YRKRZ6OF.js → chunk-TOOJIBJC.js} +2 -2
  97. package/dist/chunk-UCUOTRS6.js +431 -0
  98. package/dist/chunk-UCUOTRS6.js.map +1 -0
  99. package/dist/chunk-UH4K7GP7.js +424 -0
  100. package/dist/chunk-UH4K7GP7.js.map +1 -0
  101. package/dist/chunk-UIZWGPHV.js +120 -0
  102. package/dist/chunk-UIZWGPHV.js.map +1 -0
  103. package/dist/chunk-VLUKBV6Y.js +1170 -0
  104. package/dist/chunk-VLUKBV6Y.js.map +1 -0
  105. package/dist/chunk-W2QQ5Y6K.js +55 -0
  106. package/dist/chunk-W2QQ5Y6K.js.map +1 -0
  107. package/dist/{chunk-Y3KNXVTD.js → chunk-W3NBPR4E.js} +131 -31
  108. package/dist/chunk-W3NBPR4E.js.map +1 -0
  109. package/dist/{chunk-NRMCVHAU.js → chunk-WMGO4HJU.js} +11 -9
  110. package/dist/chunk-WMGO4HJU.js.map +1 -0
  111. package/dist/{chunk-MYBZRDTY.js → chunk-WQI7VNN4.js} +19 -9
  112. package/dist/chunk-WQI7VNN4.js.map +1 -0
  113. package/dist/{chunk-PX3VCKAU.js → chunk-WVCFSOUZ.js} +1 -1
  114. package/dist/{chunk-PX3VCKAU.js.map → chunk-WVCFSOUZ.js.map} +1 -1
  115. package/dist/chunk-XB6GQLBH.js +76 -0
  116. package/dist/chunk-XB6GQLBH.js.map +1 -0
  117. package/dist/{chunk-D2HKF2EF.js → chunk-XP5M3IKT.js} +2 -2
  118. package/dist/{chunk-O77VSFYZ.js → chunk-ZMPU5BWE.js} +12 -2
  119. package/dist/chunk-ZMPU5BWE.js.map +1 -0
  120. package/dist/{chunk-3SIZGL3O.js → chunk-ZYVEJFNU.js} +22 -18
  121. package/dist/chunk-ZYVEJFNU.js.map +1 -0
  122. package/dist/claude-provider-account-authority.d.ts +18 -0
  123. package/dist/claude-subscription-oauth.d.ts +25 -0
  124. package/dist/claude-subscription-usage.d.ts +95 -1
  125. package/dist/client-error-report.d.ts +154 -8
  126. package/dist/client-error-report.js +157 -2
  127. package/dist/client-error-report.js.map +1 -1
  128. package/dist/code-search.d.ts +1 -1
  129. package/dist/code-search.js.map +1 -1
  130. package/dist/codex-provider-account-authority.js +23 -12
  131. package/dist/codex-provider-account-authority.js.map +1 -1
  132. package/dist/company-profile.d.ts +144 -0
  133. package/dist/connect.d.ts +38 -0
  134. package/dist/connect.js +244 -164
  135. package/dist/connect.js.map +1 -1
  136. package/dist/connection-account-label.d.ts +2 -0
  137. package/dist/connection-account-label.js +34 -0
  138. package/dist/connection-account-label.js.map +1 -0
  139. package/dist/connection-authority.js +49 -24
  140. package/dist/connector-attachments.js +3 -1
  141. package/dist/connector-destinations.js +3 -1
  142. package/dist/connector-tool-permissions.d.ts +68 -4
  143. package/dist/credential-profiles.d.ts +166 -0
  144. package/dist/cua-desktop-tools.d.ts +19 -0
  145. package/dist/define-schema.d.ts +8 -0
  146. package/dist/desktop-app.d.ts +28 -0
  147. package/dist/direct-model-provider.d.ts +38 -0
  148. package/dist/document-artifact-commands.js +2 -2
  149. package/dist/document-artifact-query.js +2 -2
  150. package/dist/editable-artifact-binary.d.ts +7 -0
  151. package/dist/editable-artifact-causal-frontier.js +2 -2
  152. package/dist/editable-artifact-codec-registry.js +7 -7
  153. package/dist/editable-artifact-committed-transaction.js +4 -2
  154. package/dist/editable-artifact-live.js +8 -8
  155. package/dist/editable-artifact-serialized-commit.js +9 -9
  156. package/dist/editable-artifact-versions.d.ts +7 -1
  157. package/dist/editable-artifact-versions.js +1 -1
  158. package/dist/editable-artifacts.js +49 -43
  159. package/dist/event-preview.d.ts +22 -0
  160. package/dist/event-triggers.d.ts +1253 -0
  161. package/dist/event-triggers.js +148 -0
  162. package/dist/event-triggers.js.map +1 -0
  163. package/dist/external-identities.d.ts +34 -0
  164. package/dist/external-identities.js +4 -2
  165. package/dist/feedback.d.ts +181 -0
  166. package/dist/file-access.d.ts +23 -0
  167. package/dist/first-party-tool-authorization.d.ts +852 -0
  168. package/dist/github-repository-contracts.js +64 -43
  169. package/dist/github-repository-contracts.js.map +1 -1
  170. package/dist/google-drive-native-retirement.d.ts +12 -0
  171. package/dist/google-drive-native-retirement.js +20 -0
  172. package/dist/google-drive-native-retirement.js.map +1 -0
  173. package/dist/google-drive.d.ts +1 -1
  174. package/dist/google-drive.js +323 -239
  175. package/dist/google-drive.js.map +1 -1
  176. package/dist/host-mcp-bindings.js +250 -198
  177. package/dist/host-mcp-bindings.js.map +1 -1
  178. package/dist/index.d.ts +29072 -20593
  179. package/dist/index.js +2432 -366
  180. package/dist/inference-residency.d.ts +22 -0
  181. package/dist/insights-usage.d.ts +948 -0
  182. package/dist/insights-usage.js +608 -0
  183. package/dist/insights-usage.js.map +1 -0
  184. package/dist/integration-capability-id.d.ts +8 -0
  185. package/dist/interaction-action-deadline.d.ts +48 -0
  186. package/dist/interaction-driver-diagnostic.d.ts +28 -0
  187. package/dist/interaction.d.ts +2126 -881
  188. package/dist/knowledge-entries.d.ts +38 -0
  189. package/dist/knowledge-preparation.d.ts +4 -0
  190. package/dist/learning-refusal.d.ts +43 -0
  191. package/dist/learning-refusal.js +49 -0
  192. package/dist/learning-refusal.js.map +1 -0
  193. package/dist/managed-auth-session-sets.d.ts +1 -0
  194. package/dist/managed-auth-session-sets.js +207 -146
  195. package/dist/managed-auth-session-sets.js.map +1 -1
  196. package/dist/managed-sign-in-methods.d.ts +96 -0
  197. package/dist/managed-sign-in-methods.js +157 -35
  198. package/dist/managed-sign-in-methods.js.map +1 -1
  199. package/dist/mcp-structured-content.d.ts +25 -0
  200. package/dist/message-time-zone.d.ts +38 -0
  201. package/dist/message-time-zone.js +19 -0
  202. package/dist/message-time-zone.js.map +1 -0
  203. package/dist/modal-native-proof-v2.d.ts +587 -0
  204. package/dist/modal-native-proof-v2.js +39 -0
  205. package/dist/modal-native-proof-v2.js.map +1 -0
  206. package/dist/model-account-choice.d.ts +237 -0
  207. package/dist/model-account-settings.d.ts +422 -0
  208. package/dist/model-availability.d.ts +15 -0
  209. package/dist/model-connection-access.d.ts +13 -0
  210. package/dist/model-context-inspector.d.ts +8 -0
  211. package/dist/model-display.d.ts +43 -0
  212. package/dist/model-display.js +17 -0
  213. package/dist/model-display.js.map +1 -0
  214. package/dist/model-picker-order.js.map +1 -1
  215. package/dist/model-residency.d.ts +304 -0
  216. package/dist/organization-access.d.ts +416 -0
  217. package/dist/organization-access.js +40 -0
  218. package/dist/organization-access.js.map +1 -0
  219. package/dist/organization-integration-policy.d.ts +18 -0
  220. package/dist/organization-membership-lifecycle.d.ts +66 -0
  221. package/dist/organization-model-usage.d.ts +146 -0
  222. package/dist/organization-model-usage.js +87 -0
  223. package/dist/organization-model-usage.js.map +1 -0
  224. package/dist/organization-recovery.js +3 -1
  225. package/dist/organization-usage.d.ts +12 -0
  226. package/dist/passkey-only-account.d.ts +14 -0
  227. package/dist/passkey-only-account.js +13 -0
  228. package/dist/passkey-only-account.js.map +1 -0
  229. package/dist/permissions.d.ts +19 -0
  230. package/dist/personal-github.js +220 -148
  231. package/dist/personal-github.js.map +1 -1
  232. package/dist/personal-integration-setup.d.ts +81 -0
  233. package/dist/personal-integration-setup.js +42 -0
  234. package/dist/personal-integration-setup.js.map +1 -0
  235. package/dist/prepared-mcp-setup.d.ts +54 -0
  236. package/dist/prepared-mcp-setup.js +13 -0
  237. package/dist/prepared-mcp-setup.js.map +1 -0
  238. package/dist/presentation-artifact-commands.js +2 -2
  239. package/dist/presentation-artifact-query.js +2 -2
  240. package/dist/primitives.d.ts +18 -0
  241. package/dist/product-analytics.d.ts +27 -10
  242. package/dist/product-lifecycle-facts.d.ts +26 -3
  243. package/dist/prompt-cache-diagnostics.d.ts +92 -0
  244. package/dist/recordings.d.ts +1371 -0
  245. package/dist/remember.d.ts +98 -2
  246. package/dist/retained-output.d.ts +4 -2
  247. package/dist/sandbox-file-artifacts.d.ts +19 -2
  248. package/dist/sandbox-provider-command.d.ts +5 -44
  249. package/dist/sandbox-recovery.d.ts +139 -8
  250. package/dist/secret-generator.d.ts +44 -0
  251. package/dist/secret-mask-strings.d.ts +32 -0
  252. package/dist/secret-references.d.ts +90 -0
  253. package/dist/secret-resolution.d.ts +143 -0
  254. package/dist/secret-shape-masking.d.ts +52 -0
  255. package/dist/secret-shape-masking.js +19 -0
  256. package/dist/secret-shape-masking.js.map +1 -0
  257. package/dist/secret-totp.d.ts +41 -0
  258. package/dist/secret-use-approval-question.d.ts +11 -0
  259. package/dist/secret-use-approval-question.js +11 -0
  260. package/dist/secret-use-approval-question.js.map +1 -0
  261. package/dist/secret-use-approvals.d.ts +106 -0
  262. package/dist/secret-value-masking.d.ts +299 -0
  263. package/dist/secret-value-masking.js +62 -0
  264. package/dist/secret-value-masking.js.map +1 -0
  265. package/dist/secret-value.d.ts +19 -0
  266. package/dist/session-history-import.d.ts +444 -8
  267. package/dist/session-history.d.ts +111 -0
  268. package/dist/session-history.js +35 -0
  269. package/dist/session-history.js.map +1 -0
  270. package/dist/session-list-entries.d.ts +8 -0
  271. package/dist/session-list-entries.js +61 -0
  272. package/dist/session-list-entries.js.map +1 -0
  273. package/dist/session-mcp-projections.d.ts +13 -1
  274. package/dist/session-mcp-tool-permissions.d.ts +62 -0
  275. package/dist/session-target.d.ts +18 -0
  276. package/dist/session-titles.d.ts +8 -0
  277. package/dist/session-titles.js +5 -1
  278. package/dist/session-usage-limit-refusal.d.ts +34 -0
  279. package/dist/session-usage-limit-refusal.js +15 -0
  280. package/dist/session-usage-limit-refusal.js.map +1 -0
  281. package/dist/session-usage-limits.d.ts +127 -0
  282. package/dist/session-usage-limits.js +43 -0
  283. package/dist/session-usage-limits.js.map +1 -0
  284. package/dist/site-data.d.ts +286 -0
  285. package/dist/site-operations.d.ts +39 -0
  286. package/dist/site-publishing.d.ts +813 -0
  287. package/dist/site-session-http.d.ts +103 -4
  288. package/dist/site-session-http.js +27 -1
  289. package/dist/site-sql.d.ts +425 -0
  290. package/dist/skills.d.ts +38 -0
  291. package/dist/slack-bot-scopes.d.ts +9 -7
  292. package/dist/slack-bot-scopes.js +6 -3
  293. package/dist/slack-rest-mcp.d.ts +36 -0
  294. package/dist/slack-rest-mcp.js +25 -0
  295. package/dist/slack-rest-mcp.js.map +1 -0
  296. package/dist/spreadsheet-artifact-commands.d.ts +14 -1
  297. package/dist/spreadsheet-artifact-commands.js +9 -2
  298. package/dist/spreadsheet-artifact-query.d.ts +13 -6
  299. package/dist/spreadsheet-artifact-query.js +4 -3
  300. package/dist/subscription-account-actions.d.ts +83 -0
  301. package/dist/subscription-account-pools.d.ts +326 -0
  302. package/dist/subscription-personal-authority-v2.d.ts +28 -0
  303. package/dist/subscription-personal-authority-v2.js +13 -0
  304. package/dist/subscription-personal-authority-v2.js.map +1 -0
  305. package/dist/subscription-plans.d.ts +38 -0
  306. package/dist/subscription-usage-pool.d.ts +89 -0
  307. package/dist/tool-action-review.d.ts +141 -0
  308. package/dist/tool-catalog.d.ts +479 -0
  309. package/dist/tool-policy.d.ts +5 -0
  310. package/dist/tool-review-presentation.d.ts +29 -0
  311. package/dist/tool-review-presentation.js +21 -0
  312. package/dist/tool-review-presentation.js.map +1 -0
  313. package/dist/turn-serving-policy.d.ts +223 -0
  314. package/dist/usage-allowances.d.ts +30 -0
  315. package/dist/usage-allowances.js +5 -1
  316. package/dist/values.d.ts +11 -0
  317. package/dist/values.js +19 -0
  318. package/dist/values.js.map +1 -0
  319. package/dist/vault-provider-wire.d.ts +907 -0
  320. package/dist/vault-provider-wire.js +74 -0
  321. package/dist/vault-provider-wire.js.map +1 -0
  322. package/dist/vaults.d.ts +2185 -0
  323. package/dist/video-generation.d.ts +75 -0
  324. package/dist/video-generation.js +8 -1
  325. package/dist/workspace-control-event.d.ts +18 -0
  326. package/dist/workspace-control-event.js +18 -0
  327. package/dist/workspace-control-event.js.map +1 -0
  328. package/dist/workspace-governance-context.d.ts +18 -0
  329. package/dist/workspace-integration-wire.d.ts +1 -1
  330. package/dist/workspace-integration-wire.js +1 -1
  331. package/dist/workspace-integrations.d.ts +212 -12
  332. package/dist/xai-provider-account-authority.js +3 -1
  333. package/package.json +121 -4
  334. package/src/agent-authored-durable-text.ts +14 -11
  335. package/src/agent-config.ts +382 -203
  336. package/src/agent-instruction-changes.ts +94 -74
  337. package/src/agent-learning.ts +94 -66
  338. package/src/agent-topology.ts +58 -52
  339. package/src/api-key-presets.ts +28 -0
  340. package/src/app-action-catalog-types.ts +32 -0
  341. package/src/app-action-catalog.gen.ts +9905 -0
  342. package/src/app-actions.ts +365 -0
  343. package/src/app-shot.ts +176 -0
  344. package/src/artifact-catalog.ts +81 -46
  345. package/src/artifacts.ts +360 -227
  346. package/src/atlassian-native-retirement.ts +33 -0
  347. package/src/atlassian.ts +136 -108
  348. package/src/automation-templates.ts +201 -0
  349. package/src/billing-subscriptions.ts +48 -0
  350. package/src/bots.ts +238 -0
  351. package/src/bundled-skills.ts +79 -22
  352. package/src/canonical-human-identities.ts +65 -62
  353. package/src/child-lifecycle-notice-protocol.gen.json +1310 -0
  354. package/src/child-lifecycle-notice-protocol.ts +224 -0
  355. package/src/claude-provider-account-authority.ts +12 -0
  356. package/src/claude-subscription-oauth.ts +61 -19
  357. package/src/claude-subscription-usage.ts +64 -35
  358. package/src/client-error-report.ts +344 -9
  359. package/src/code-search.ts +1 -1
  360. package/src/codex-provider-account-authority.ts +22 -16
  361. package/src/company-brain-governed-writes.ts +265 -244
  362. package/src/company-brain.ts +165 -154
  363. package/src/company-profile.ts +362 -297
  364. package/src/connect.ts +222 -173
  365. package/src/connection-account-label.ts +45 -0
  366. package/src/connection-authority.ts +172 -152
  367. package/src/connector-attachments.ts +139 -123
  368. package/src/connector-destinations.ts +48 -43
  369. package/src/connector-tool-permissions.ts +104 -46
  370. package/src/credential-profiles.ts +161 -0
  371. package/src/cua-desktop-tools.gen.json +6722 -0
  372. package/src/cua-desktop-tools.linux.gen.json +6798 -0
  373. package/src/cua-desktop-tools.ts +42 -0
  374. package/src/cua-desktop-tools.windows.gen.json +6739 -0
  375. package/src/define-schema.ts +10 -0
  376. package/src/desktop-app.ts +50 -0
  377. package/src/direct-model-provider.ts +112 -0
  378. package/src/editable-artifact-binary.ts +29 -8
  379. package/src/editable-artifact-committed-transaction.ts +19 -18
  380. package/src/editable-artifact-serialized-commit.ts +8 -2
  381. package/src/editable-artifact-versions.ts +7 -1
  382. package/src/event-preview.ts +53 -3
  383. package/src/event-triggers.ts +891 -0
  384. package/src/external-identities.ts +239 -195
  385. package/src/feedback.ts +125 -30
  386. package/src/file-access.ts +26 -0
  387. package/src/first-party-tool-authorization.ts +383 -0
  388. package/src/github-repository-contracts.ts +78 -64
  389. package/src/google-drive-native-retirement.ts +20 -0
  390. package/src/google-drive.ts +286 -234
  391. package/src/governed-learning-activation.ts +159 -137
  392. package/src/governed-learning-evaluator.ts +141 -133
  393. package/src/host-mcp-bindings.ts +244 -221
  394. package/src/image-generation.ts +105 -95
  395. package/src/index.ts +13928 -9899
  396. package/src/inference-residency.ts +36 -0
  397. package/src/insights-usage.ts +774 -0
  398. package/src/integration-capability-id.ts +16 -0
  399. package/src/interaction-action-deadline.ts +143 -0
  400. package/src/interaction-driver-diagnostic.ts +89 -0
  401. package/src/interaction.ts +3527 -2427
  402. package/src/knowledge-entries.ts +386 -299
  403. package/src/knowledge-preparation.ts +49 -41
  404. package/src/knowledge.ts +242 -213
  405. package/src/learning-refusal.ts +90 -0
  406. package/src/managed-auth-session-sets.ts +180 -133
  407. package/src/managed-sign-in-methods.ts +156 -34
  408. package/src/mcp-oauth.ts +58 -46
  409. package/src/mcp-receipts.ts +199 -194
  410. package/src/mcp-structured-content.ts +81 -0
  411. package/src/memory-slack-delivery.ts +172 -142
  412. package/src/message-time-zone.ts +109 -0
  413. package/src/modal-native-proof-v2.ts +430 -0
  414. package/src/model-account-choice.ts +178 -0
  415. package/src/model-account-settings.ts +210 -0
  416. package/src/model-availability.ts +22 -0
  417. package/src/model-connection-access.ts +62 -14
  418. package/src/model-context-inspector.ts +130 -109
  419. package/src/model-display.ts +221 -0
  420. package/src/model-picker-order.ts +1 -1
  421. package/src/model-residency.ts +535 -0
  422. package/src/organization-access.ts +216 -0
  423. package/src/organization-integration-policy.ts +47 -28
  424. package/src/organization-membership-lifecycle.ts +558 -384
  425. package/src/organization-model-usage.ts +82 -0
  426. package/src/organization-recovery.ts +148 -135
  427. package/src/organization-usage.ts +84 -52
  428. package/src/passkey-only-account.ts +29 -0
  429. package/src/permissions.ts +94 -52
  430. package/src/personal-github.ts +211 -171
  431. package/src/personal-integration-setup.ts +150 -0
  432. package/src/preference-registry.ts +319 -263
  433. package/src/prepared-mcp-setup.ts +190 -0
  434. package/src/primitives.ts +22 -0
  435. package/src/product-analytics.ts +40 -15
  436. package/src/product-lifecycle-facts.ts +50 -20
  437. package/src/prompt-cache-diagnostics.ts +212 -0
  438. package/src/recordings.ts +1153 -0
  439. package/src/remember.ts +184 -172
  440. package/src/retained-output.ts +181 -168
  441. package/src/sandbox-file-artifacts.ts +78 -57
  442. package/src/sandbox-provider-command.ts +55 -72
  443. package/src/sandbox-recovery.ts +163 -77
  444. package/src/scoped-knowledge.ts +62 -43
  445. package/src/secret-generator.ts +156 -0
  446. package/src/secret-mask-strings.ts +175 -0
  447. package/src/secret-references.ts +414 -0
  448. package/src/secret-resolution.ts +322 -0
  449. package/src/secret-shape-masking.ts +573 -0
  450. package/src/secret-totp.ts +188 -0
  451. package/src/secret-use-approval-question.ts +22 -0
  452. package/src/secret-use-approvals.ts +219 -0
  453. package/src/secret-value-masking.ts +1283 -0
  454. package/src/secret-value.ts +22 -0
  455. package/src/session-goal-reports.ts +55 -49
  456. package/src/session-history-import.ts +84 -68
  457. package/src/session-history.ts +197 -0
  458. package/src/session-list-entries.ts +106 -0
  459. package/src/session-mcp-projections.ts +21 -3
  460. package/src/session-mcp-tool-permissions.ts +109 -0
  461. package/src/session-message-search.ts +46 -38
  462. package/src/session-target.ts +58 -0
  463. package/src/session-titles.ts +40 -4
  464. package/src/session-topology-primitives.ts +20 -12
  465. package/src/session-usage-limit-refusal.ts +101 -0
  466. package/src/session-usage-limits.ts +169 -0
  467. package/src/signup-attribution.ts +20 -15
  468. package/src/site-data.ts +337 -0
  469. package/src/site-operations.ts +154 -0
  470. package/src/site-publishing.ts +903 -0
  471. package/src/site-session-http.ts +344 -16
  472. package/src/site-sql.ts +1120 -0
  473. package/src/skill-use.ts +18 -17
  474. package/src/skills.ts +105 -50
  475. package/src/slack-bot-scopes.ts +18 -35
  476. package/src/slack-rest-mcp.ts +222 -0
  477. package/src/slack-task-policy.ts +97 -73
  478. package/src/spreadsheet-artifact-commands.ts +74 -13
  479. package/src/spreadsheet-artifact-query.ts +188 -50
  480. package/src/subscription-account-actions.ts +103 -0
  481. package/src/subscription-account-pools.ts +74 -0
  482. package/src/subscription-personal-authority-v2.ts +69 -0
  483. package/src/subscription-plans.ts +51 -0
  484. package/src/subscription-usage-pool.ts +44 -0
  485. package/src/task-notes.ts +70 -68
  486. package/src/tool-action-review.ts +271 -0
  487. package/src/tool-catalog.ts +694 -379
  488. package/src/tool-policy.ts +82 -0
  489. package/src/tool-result-spill.ts +13 -9
  490. package/src/tool-review-presentation.ts +643 -0
  491. package/src/turn-serving-policy.ts +167 -0
  492. package/src/usage-allowances.ts +212 -136
  493. package/src/values.ts +25 -0
  494. package/src/vault-provider-wire.ts +580 -0
  495. package/src/vaults.ts +1296 -0
  496. package/src/video-generation.ts +430 -361
  497. package/src/work-claims.ts +183 -166
  498. package/src/workspace-control-event.ts +134 -0
  499. package/src/workspace-governance-context.ts +63 -0
  500. package/src/workspace-instruction-policies.ts +346 -279
  501. package/src/workspace-integration-wire.ts +10 -0
  502. package/src/workspace-integrations.ts +488 -398
  503. package/src/workspace-learning-administration.ts +58 -44
  504. package/src/workspace-learning-policy.ts +126 -99
  505. package/src/workspace-state.ts +239 -220
  506. package/src/xai-provider-account-authority.ts +23 -17
  507. package/dist/chunk-3SIZGL3O.js.map +0 -1
  508. package/dist/chunk-566IFOVP.js +0 -26133
  509. package/dist/chunk-566IFOVP.js.map +0 -1
  510. package/dist/chunk-5IXYF6XN.js +0 -728
  511. package/dist/chunk-5IXYF6XN.js.map +0 -1
  512. package/dist/chunk-5Q54VCCH.js.map +0 -1
  513. package/dist/chunk-BCS7WHCK.js +0 -139
  514. package/dist/chunk-BCS7WHCK.js.map +0 -1
  515. package/dist/chunk-EK7NDGFR.js +0 -128
  516. package/dist/chunk-EK7NDGFR.js.map +0 -1
  517. package/dist/chunk-GRG7PHWQ.js +0 -25
  518. package/dist/chunk-GRG7PHWQ.js.map +0 -1
  519. package/dist/chunk-HHZSZYYF.js.map +0 -1
  520. package/dist/chunk-ICDZGUX2.js +0 -186
  521. package/dist/chunk-ICDZGUX2.js.map +0 -1
  522. package/dist/chunk-JUFK3T4Q.js +0 -80
  523. package/dist/chunk-JUFK3T4Q.js.map +0 -1
  524. package/dist/chunk-MYBZRDTY.js.map +0 -1
  525. package/dist/chunk-NRMCVHAU.js.map +0 -1
  526. package/dist/chunk-O77VSFYZ.js.map +0 -1
  527. package/dist/chunk-P3HLDT77.js +0 -59
  528. package/dist/chunk-P3HLDT77.js.map +0 -1
  529. package/dist/chunk-TXTQIYCV.js.map +0 -1
  530. package/dist/chunk-WYBDERIY.js.map +0 -1
  531. package/dist/chunk-Y3KNXVTD.js.map +0 -1
  532. package/dist/chunk-YBW5JSA3.js.map +0 -1
  533. package/dist/chunk-YRXAWWCU.js +0 -45
  534. package/dist/chunk-YRXAWWCU.js.map +0 -1
  535. package/dist/chunk-YWMOIZ6A.js +0 -185
  536. package/dist/chunk-YWMOIZ6A.js.map +0 -1
  537. package/dist/site-request-headers.test.d.ts +0 -1
  538. package/dist/transcription-recordings.d.ts +0 -300
  539. package/src/transcription-recordings.ts +0 -169
  540. /package/dist/{chunk-SIOU2K4U.js.map → chunk-LJH2EYGT.js.map} +0 -0
  541. /package/dist/{chunk-RIY7GYQS.js.map → chunk-PTSROVDG.js.map} +0 -0
  542. /package/dist/{chunk-YRKRZ6OF.js.map → chunk-TOOJIBJC.js.map} +0 -0
  543. /package/dist/{chunk-D2HKF2EF.js.map → chunk-XP5M3IKT.js.map} +0 -0
@@ -0,0 +1,414 @@
1
+ /**
2
+ * The one secret reference grammar (design §10B.2, normative).
3
+ *
4
+ * ```
5
+ * reference = "{{" kind ":" body "}}" ; no whitespace after "{{" or before "}}"
6
+ * kind = "secret" | "secretfile"
7
+ * body = id-form | path-form
8
+ * id-form = "id:" uuid [ "/" segment ] [ "/otp" ] [ "#previous" ]
9
+ * path-form = segment *2( "/" segment ) [ "/otp" ] [ "#previous" ]
10
+ * segment = 1*120( any char except "/" "{" "}" "#" "\" and control chars ),
11
+ * no leading/trailing whitespace
12
+ * escape = "\" reference ; the reference text, literally
13
+ * ```
14
+ *
15
+ * Text that starts with `{{secret:` or `{{secretfile:` and does not parse is
16
+ * an `invalid` token: callers fail it with `invalid_reference` and never pass
17
+ * it through. References are at most 300 characters long.
18
+ *
19
+ * Pure and isomorphic: no I/O, no runtime imports from `./index`.
20
+ */
21
+ import { isValidSecretName, VAULT_LIMITS } from "./vaults";
22
+
23
+ export type SecretReferenceKind = "secret" | "secretfile";
24
+ export type SecretReferenceTarget =
25
+ | { form: "id"; itemId: string; field: string | null }
26
+ | { form: "path"; segments: [string] | [string, string] | [string, string, string] };
27
+ export interface SecretReference {
28
+ kind: SecretReferenceKind;
29
+ raw: string;
30
+ /** Offsets in the source text; `end` is exclusive. */
31
+ start: number;
32
+ end: number;
33
+ target: SecretReferenceTarget;
34
+ otp: boolean;
35
+ previous: boolean;
36
+ }
37
+ export type SecretTextToken =
38
+ /** Escapes already unescaped. */
39
+ | { type: "text"; value: string }
40
+ | { type: "reference"; reference: SecretReference }
41
+ | { type: "invalid"; raw: string; start: number; end: number; reason: string };
42
+
43
+ /** Fast-path needle; also matches `{{secretfile:`. */
44
+ export const SECRET_REFERENCE_MARKER = "{{secret";
45
+
46
+ export class SecretReferenceSyntaxError extends Error {
47
+ readonly reason: string;
48
+ constructor(reason: string, message?: string) {
49
+ super(message ?? `invalid secret reference: ${reason}`);
50
+ this.name = "SecretReferenceSyntaxError";
51
+ this.reason = reason;
52
+ }
53
+ }
54
+
55
+ const PREFIXES: ReadonlyArray<{ prefix: string; kind: SecretReferenceKind }> = [
56
+ // Longest first: "{{secretfile:" must win over "{{secret".
57
+ { prefix: "{{secretfile:", kind: "secretfile" },
58
+ { prefix: "{{secret:", kind: "secret" },
59
+ ];
60
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
61
+ const PREVIOUS_SUFFIX = "#previous";
62
+ const ID_PREFIX = "id:";
63
+
64
+ export function containsSecretReference(text: string): boolean {
65
+ return text.includes(SECRET_REFERENCE_MARKER);
66
+ }
67
+
68
+ function prefixAt(
69
+ text: string,
70
+ index: number,
71
+ ): { prefix: string; kind: SecretReferenceKind } | null {
72
+ for (const candidate of PREFIXES) {
73
+ if (text.startsWith(candidate.prefix, index)) return candidate;
74
+ }
75
+ return null;
76
+ }
77
+
78
+ function isControl(code: number): boolean {
79
+ return code <= 0x1f || (code >= 0x7f && code <= 0x9f);
80
+ }
81
+
82
+ /** Parse the body (between `kind:` and `}}`). Throws SecretReferenceSyntaxError. */
83
+ function parseBody(body: string): {
84
+ target: SecretReferenceTarget;
85
+ otp: boolean;
86
+ previous: boolean;
87
+ } {
88
+ if (body.length === 0)
89
+ throw new SecretReferenceSyntaxError("empty_body", "secret reference is empty");
90
+ let rest = body;
91
+ let previous = false;
92
+ if (rest.endsWith(PREVIOUS_SUFFIX)) {
93
+ previous = true;
94
+ rest = rest.slice(0, -PREVIOUS_SUFFIX.length);
95
+ }
96
+ if (rest.includes("#")) {
97
+ throw new SecretReferenceSyntaxError(
98
+ "unsupported_version_suffix",
99
+ "only #previous is supported, and it must be last",
100
+ );
101
+ }
102
+ const parts = rest.split("/");
103
+ let otp = false;
104
+ if (parts.length >= 2 && parts[parts.length - 1]!.toLowerCase() === "otp") {
105
+ otp = true;
106
+ parts.pop();
107
+ }
108
+ if (parts[0]!.toLowerCase().startsWith(ID_PREFIX)) {
109
+ const itemId = parts[0]!.slice(ID_PREFIX.length);
110
+ if (!UUID_PATTERN.test(itemId)) {
111
+ throw new SecretReferenceSyntaxError("invalid_id", "id: must be followed by an item UUID");
112
+ }
113
+ if (parts.length > 2) {
114
+ throw new SecretReferenceSyntaxError("too_many_segments", "id form takes at most one field");
115
+ }
116
+ const field = parts[1] ?? null;
117
+ if (field !== null) assertSegment(field);
118
+ return { target: { form: "id", itemId: itemId.toLowerCase(), field }, otp, previous };
119
+ }
120
+ if (parts.length > 3) {
121
+ throw new SecretReferenceSyntaxError(
122
+ "too_many_segments",
123
+ "a reference has at most Vault/Item/field",
124
+ );
125
+ }
126
+ for (const segment of parts) assertSegment(segment);
127
+ return {
128
+ target: {
129
+ form: "path",
130
+ segments: parts as [string] | [string, string] | [string, string, string],
131
+ },
132
+ otp,
133
+ previous,
134
+ };
135
+ }
136
+
137
+ function assertSegment(segment: string): void {
138
+ if (segment.length === 0) {
139
+ throw new SecretReferenceSyntaxError("empty_segment", "a reference has an empty name");
140
+ }
141
+ if (!isValidSecretName(segment)) {
142
+ throw new SecretReferenceSyntaxError(
143
+ "invalid_segment",
144
+ `"${segment.slice(0, 40)}" is not a valid vault, item or field name`,
145
+ );
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Scan one candidate starting at `index` (where a prefix matched). Returns the
151
+ * candidate's end (exclusive) and either the parsed reference or a reason.
152
+ */
153
+ function scanCandidate(
154
+ text: string,
155
+ index: number,
156
+ prefix: { prefix: string; kind: SecretReferenceKind },
157
+ ):
158
+ | { ok: true; end: number; reference: SecretReference }
159
+ | { ok: false; end: number; reason: string } {
160
+ const bodyStart = index + prefix.prefix.length;
161
+ const limit = Math.min(text.length, index + VAULT_LIMITS.referenceMaxChars);
162
+ let cursor = bodyStart;
163
+ while (cursor < text.length) {
164
+ const code = text.charCodeAt(cursor);
165
+ const character = text[cursor]!;
166
+ if (character === "}" && text[cursor + 1] === "}") {
167
+ const end = cursor + 2;
168
+ if (end - index > VAULT_LIMITS.referenceMaxChars) {
169
+ return { ok: false, end, reason: "too_long" };
170
+ }
171
+ const raw = text.slice(index, end);
172
+ try {
173
+ const parsed = parseBody(text.slice(bodyStart, cursor));
174
+ return {
175
+ ok: true,
176
+ end,
177
+ reference: { kind: prefix.kind, raw, start: index, end, ...parsed },
178
+ };
179
+ } catch (error) {
180
+ return {
181
+ ok: false,
182
+ end,
183
+ reason: error instanceof SecretReferenceSyntaxError ? error.reason : "invalid",
184
+ };
185
+ }
186
+ }
187
+ if (character === "{" || character === "}" || isControl(code) || cursor >= limit) {
188
+ // Unterminated: the invalid token stops before the offending character.
189
+ const end = Math.max(cursor, bodyStart);
190
+ return { ok: false, end, reason: cursor >= limit ? "too_long" : "unterminated" };
191
+ }
192
+ cursor += 1;
193
+ }
194
+ return { ok: false, end: text.length, reason: "unterminated" };
195
+ }
196
+
197
+ /**
198
+ * Split text into literal text, references and invalid candidates. Adjacent
199
+ * text is merged; an escaped reference (`\{{secret:…}}`) becomes literal
200
+ * text without the backslash. Never throws.
201
+ */
202
+ export function tokenizeSecretText(text: string): SecretTextToken[] {
203
+ if (!containsSecretReference(text)) return text.length > 0 ? [{ type: "text", value: text }] : [];
204
+ const tokens: SecretTextToken[] = [];
205
+ let buffer = "";
206
+ let cursor = 0;
207
+ const flush = () => {
208
+ if (buffer.length > 0) tokens.push({ type: "text", value: buffer });
209
+ buffer = "";
210
+ };
211
+ while (cursor < text.length) {
212
+ const next = text.indexOf(SECRET_REFERENCE_MARKER, cursor);
213
+ if (next < 0) {
214
+ buffer += text.slice(cursor);
215
+ break;
216
+ }
217
+ const prefix = prefixAt(text, next);
218
+ if (prefix === null) {
219
+ // "{{secret" not followed by ":" or "file:" is ordinary text.
220
+ buffer += text.slice(cursor, next + SECRET_REFERENCE_MARKER.length);
221
+ cursor = next + SECRET_REFERENCE_MARKER.length;
222
+ continue;
223
+ }
224
+ // A backslash immediately before the candidate (and not already consumed)
225
+ // escapes it: the candidate is emitted literally, without the backslash.
226
+ const escaped = next - 1 >= cursor && text[next - 1] === "\\";
227
+ const scanned = scanCandidate(text, next, prefix);
228
+ if (escaped) {
229
+ buffer += text.slice(cursor, next - 1) + text.slice(next, scanned.end);
230
+ cursor = scanned.end;
231
+ continue;
232
+ }
233
+ buffer += text.slice(cursor, next);
234
+ flush();
235
+ if (scanned.ok) {
236
+ tokens.push({ type: "reference", reference: scanned.reference });
237
+ } else {
238
+ tokens.push({
239
+ type: "invalid",
240
+ raw: text.slice(next, scanned.end),
241
+ start: next,
242
+ end: scanned.end,
243
+ reason: scanned.reason,
244
+ });
245
+ }
246
+ cursor = scanned.end;
247
+ }
248
+ flush();
249
+ return tokens;
250
+ }
251
+
252
+ /** Valid references only, in text order. */
253
+ export function findSecretReferences(text: string): SecretReference[] {
254
+ if (!containsSecretReference(text)) return [];
255
+ return tokenizeSecretText(text).flatMap((token) =>
256
+ token.type === "reference" ? [token.reference] : [],
257
+ );
258
+ }
259
+
260
+ /** Invalid candidates only, in text order. */
261
+ export function findInvalidSecretReferences(
262
+ text: string,
263
+ ): Array<Extract<SecretTextToken, { type: "invalid" }>> {
264
+ if (!containsSecretReference(text)) return [];
265
+ return tokenizeSecretText(text).filter(
266
+ (token): token is Extract<SecretTextToken, { type: "invalid" }> => token.type === "invalid",
267
+ );
268
+ }
269
+
270
+ /** Parse exactly one reference (`{{…}}`). Throws SecretReferenceSyntaxError. */
271
+ export function parseSecretReference(raw: string): SecretReference {
272
+ const prefix = prefixAt(raw, 0);
273
+ if (prefix === null) {
274
+ throw new SecretReferenceSyntaxError(
275
+ "missing_prefix",
276
+ "a secret reference starts with {{secret: or {{secretfile:",
277
+ );
278
+ }
279
+ const scanned = scanCandidate(raw, 0, prefix);
280
+ if (!scanned.ok) throw new SecretReferenceSyntaxError(scanned.reason);
281
+ if (scanned.end !== raw.length) {
282
+ throw new SecretReferenceSyntaxError("trailing_text", "unexpected text after the reference");
283
+ }
284
+ return scanned.reference;
285
+ }
286
+
287
+ export type FormatSecretReferenceInput =
288
+ | {
289
+ kind?: SecretReferenceKind;
290
+ vault?: string;
291
+ item: string;
292
+ field?: string;
293
+ otp?: boolean;
294
+ previous?: boolean;
295
+ }
296
+ | {
297
+ kind?: SecretReferenceKind;
298
+ itemId: string;
299
+ field?: string;
300
+ otp?: boolean;
301
+ previous?: boolean;
302
+ };
303
+
304
+ /** Build a reference. Throws SecretReferenceSyntaxError when a name cannot be referenced. */
305
+ export function formatSecretReference(input: FormatSecretReferenceInput): string {
306
+ const kind = input.kind ?? "secret";
307
+ const parts: string[] = [];
308
+ if ("itemId" in input) {
309
+ if (!UUID_PATTERN.test(input.itemId)) throw new SecretReferenceSyntaxError("invalid_id");
310
+ parts.push(`${ID_PREFIX}${input.itemId.toLowerCase()}`);
311
+ } else {
312
+ if (input.vault !== undefined) parts.push(input.vault);
313
+ parts.push(input.item);
314
+ }
315
+ if (input.field !== undefined) parts.push(input.field);
316
+ for (const part of "itemId" in input ? parts.slice(1) : parts) assertSegment(part);
317
+ const body = `${parts.join("/")}${input.otp ? "/otp" : ""}${input.previous ? PREVIOUS_SUFFIX : ""}`;
318
+ const raw = `{{${kind}:${body}}}`;
319
+ if (raw.length > VAULT_LIMITS.referenceMaxChars) throw new SecretReferenceSyntaxError("too_long");
320
+ return raw;
321
+ }
322
+
323
+ /** NFC + trim + lowercase. For UI and dedupe only; SQL `vault_name_key` is authoritative. */
324
+ export function secretNameKey(name: string): string {
325
+ return name.normalize("NFC").trim().toLowerCase();
326
+ }
327
+
328
+ /** Canonical dedupe key within one call (same target and modifiers → same key). */
329
+ export function referenceKey(ref: SecretReference): string {
330
+ const target =
331
+ ref.target.form === "id"
332
+ ? `id:${ref.target.itemId.toLowerCase()}/${ref.target.field === null ? "" : secretNameKey(ref.target.field)}`
333
+ : `path:${ref.target.segments.map(secretNameKey).join("/")}`;
334
+ return `${ref.kind}|${target}|${ref.otp ? "otp" : ""}|${ref.previous ? "previous" : ""}`;
335
+ }
336
+
337
+ /** Remove escapes (`\{{secret:…}}` → `{{secret:…}}`); references stay as written. */
338
+ export function unescapeSecretText(text: string): string {
339
+ if (!containsSecretReference(text)) return text;
340
+ return tokenizeSecretText(text)
341
+ .map((token) =>
342
+ token.type === "text"
343
+ ? token.value
344
+ : token.type === "reference"
345
+ ? token.reference.raw
346
+ : token.raw,
347
+ )
348
+ .join("");
349
+ }
350
+
351
+ function walkStrings(value: unknown, visit: (text: string) => void, seen: Set<object>): void {
352
+ if (typeof value === "string") {
353
+ visit(value);
354
+ return;
355
+ }
356
+ if (value === null || typeof value !== "object") return;
357
+ if (seen.has(value)) return;
358
+ seen.add(value);
359
+ if (Array.isArray(value)) {
360
+ for (const entry of value) walkStrings(entry, visit, seen);
361
+ return;
362
+ }
363
+ for (const entry of Object.values(value as Record<string, unknown>))
364
+ walkStrings(entry, visit, seen);
365
+ }
366
+
367
+ /** Every valid reference in every string value of a JSON-like structure. */
368
+ export function collectReferencesDeep(value: unknown): SecretReference[] {
369
+ const out: SecretReference[] = [];
370
+ walkStrings(value, (text) => out.push(...findSecretReferences(text)), new Set());
371
+ return out;
372
+ }
373
+
374
+ /** Every invalid candidate in every string value of a JSON-like structure. */
375
+ export function collectInvalidReferencesDeep(
376
+ value: unknown,
377
+ ): Array<Extract<SecretTextToken, { type: "invalid" }>> {
378
+ const out: Array<Extract<SecretTextToken, { type: "invalid" }>> = [];
379
+ walkStrings(value, (text) => out.push(...findInvalidSecretReferences(text)), new Set());
380
+ return out;
381
+ }
382
+
383
+ /**
384
+ * Deep copy with each reference replaced by `replace(ref)` and escapes
385
+ * removed. Strings without the marker are copied unchanged; invalid
386
+ * candidates are kept verbatim (callers reject them before replacing).
387
+ * Object keys are not rewritten.
388
+ */
389
+ export function replaceReferencesDeep<T>(value: T, replace: (ref: SecretReference) => string): T {
390
+ const replaceText = (text: string): string => {
391
+ if (!containsSecretReference(text)) return text;
392
+ return tokenizeSecretText(text)
393
+ .map((token) =>
394
+ token.type === "text"
395
+ ? token.value
396
+ : token.type === "reference"
397
+ ? replace(token.reference)
398
+ : token.raw,
399
+ )
400
+ .join("");
401
+ };
402
+ const copy = (input: unknown): unknown => {
403
+ if (typeof input === "string") return replaceText(input);
404
+ if (input === null || typeof input !== "object") return input;
405
+ if (Array.isArray(input)) return input.map(copy);
406
+ if (input instanceof Uint8Array || input instanceof Date) return input;
407
+ const out: Record<string, unknown> = {};
408
+ for (const [key, entry] of Object.entries(input as Record<string, unknown>)) {
409
+ out[key] = copy(entry);
410
+ }
411
+ return out;
412
+ };
413
+ return copy(value) as T;
414
+ }