@lssm/lib.contracts 1.11.0 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (833) hide show
  1. package/README.md +1 -1
  2. package/dist/_virtual/rolldown_runtime.js +1 -0
  3. package/dist/app-config/app-config.feature.js +1 -0
  4. package/dist/app-config/contracts.js +1 -2
  5. package/dist/app-config/docs/app-config.docblock.js +220 -0
  6. package/dist/app-config/events.js +1 -2
  7. package/dist/app-config/index.js +1 -1
  8. package/dist/app-config/lifecycle-contracts.js +1 -2
  9. package/dist/app-config/runtime.js +1 -2
  10. package/dist/app-config/spec.js +1 -2
  11. package/dist/app-config/validation.js +1 -2
  12. package/dist/capabilities/docs/capabilities.docblock.js +1 -0
  13. package/dist/capabilities/openbanking.js +1 -2
  14. package/dist/capabilities.js +1 -2
  15. package/dist/client/react/drivers/rn-reusables.js +1 -2
  16. package/dist/client/react/drivers/shadcn.js +1 -2
  17. package/dist/client/react/feature-render.js +1 -2
  18. package/dist/client/react/form-render.js +1 -2
  19. package/dist/contract-registry/index.js +1 -0
  20. package/dist/contract-registry/schemas.js +1 -0
  21. package/dist/contract-registry/types.js +0 -0
  22. package/dist/contracts-adapter-hydration.js +1 -2
  23. package/dist/contracts-adapter-input.js +1 -2
  24. package/dist/data-views/docs/data-views.docblock.js +1 -0
  25. package/dist/data-views/query-generator.js +1 -2
  26. package/dist/data-views/runtime.js +1 -2
  27. package/dist/data-views.js +1 -2
  28. package/dist/docs/PUBLISHING.docblock.js +76 -0
  29. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +350 -0
  30. package/dist/docs/index.js +1 -0
  31. package/dist/docs/meta.docs.js +13 -0
  32. package/dist/docs/presentations.js +1 -0
  33. package/dist/docs/registry.js +1 -0
  34. package/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +383 -0
  35. package/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +68 -0
  36. package/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +140 -0
  37. package/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +86 -0
  38. package/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +1 -0
  39. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +58 -0
  40. package/dist/docs/tech/contracts/README.docblock.js +1 -0
  41. package/dist/docs/tech/contracts/create-subscription.docblock.js +1 -0
  42. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +180 -0
  43. package/dist/docs/tech/contracts/migrations.docblock.js +1 -0
  44. package/dist/docs/tech/contracts/openapi-export.docblock.js +38 -0
  45. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +62 -0
  46. package/dist/docs/tech/contracts/overlays.docblock.js +68 -0
  47. package/dist/docs/tech/contracts/tests.docblock.js +132 -0
  48. package/dist/docs/tech/contracts/themes.docblock.js +1 -0
  49. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +106 -0
  50. package/dist/docs/tech/lifecycle-stage-system.docblock.js +213 -0
  51. package/dist/docs/tech/llm/llm-integration.docblock.js +289 -0
  52. package/dist/docs/tech/mcp-endpoints.docblock.js +1 -0
  53. package/dist/docs/tech/presentation-runtime.docblock.js +1 -0
  54. package/dist/docs/tech/schema/README.docblock.js +262 -0
  55. package/dist/docs/tech/studio/learning-events.docblock.js +1 -0
  56. package/dist/docs/tech/studio/learning-journeys.docblock.js +57 -0
  57. package/dist/docs/tech/studio/platform-admin-panel.docblock.js +63 -0
  58. package/dist/docs/tech/studio/project-access-teams.docblock.js +36 -0
  59. package/dist/docs/tech/studio/project-routing.docblock.js +1 -0
  60. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +20 -0
  61. package/dist/docs/tech/studio/team-invitations.docblock.js +65 -0
  62. package/dist/docs/tech/studio/workspace-ops.docblock.js +1 -0
  63. package/dist/docs/tech/studio/workspaces.docblock.js +41 -0
  64. package/dist/docs/tech/telemetry-ingest.docblock.js +122 -0
  65. package/dist/docs/tech/templates/runtime.docblock.js +1 -0
  66. package/dist/docs/tech/vscode-extension.docblock.js +68 -0
  67. package/dist/docs/tech/workflows/overview.docblock.js +1 -0
  68. package/dist/docs/tech-contracts.docs.js +76 -0
  69. package/dist/docs/types.js +0 -0
  70. package/dist/events.js +1 -2
  71. package/dist/experiments/docs/experiments.docblock.js +128 -0
  72. package/dist/experiments/evaluator.js +1 -2
  73. package/dist/experiments/spec.js +1 -2
  74. package/dist/features.js +1 -2
  75. package/dist/forms/docs/forms.docblock.js +1 -0
  76. package/dist/forms.js +1 -2
  77. package/dist/index.js +1 -1
  78. package/dist/install.js +1 -2
  79. package/dist/integrations/contracts.js +1 -2
  80. package/dist/integrations/docs/integrations.docblock.js +1 -0
  81. package/dist/integrations/health.js +1 -2
  82. package/dist/integrations/index.js +1 -1
  83. package/dist/integrations/openbanking/contracts/accounts.js +1 -2
  84. package/dist/integrations/openbanking/contracts/balances.js +1 -2
  85. package/dist/integrations/openbanking/contracts/index.js +1 -2
  86. package/dist/integrations/openbanking/contracts/transactions.js +1 -2
  87. package/dist/integrations/openbanking/guards.js +1 -2
  88. package/dist/integrations/openbanking/models.js +1 -2
  89. package/dist/integrations/openbanking/openbanking.feature.js +1 -0
  90. package/dist/integrations/openbanking/telemetry.js +1 -2
  91. package/dist/integrations/providers/elevenlabs.js +1 -2
  92. package/dist/integrations/providers/gcs-storage.js +1 -2
  93. package/dist/integrations/providers/gmail.js +1 -2
  94. package/dist/integrations/providers/google-calendar.js +1 -2
  95. package/dist/integrations/providers/impls/elevenlabs-voice.js +1 -2
  96. package/dist/integrations/providers/impls/gcs-storage.js +1 -2
  97. package/dist/integrations/providers/impls/gmail-inbound.js +1 -2
  98. package/dist/integrations/providers/impls/gmail-outbound.js +1 -2
  99. package/dist/integrations/providers/impls/google-calendar.js +1 -2
  100. package/dist/integrations/providers/impls/index.js +1 -1
  101. package/dist/integrations/providers/impls/mistral-embedding.js +1 -2
  102. package/dist/integrations/providers/impls/mistral-llm.js +1 -2
  103. package/dist/integrations/providers/impls/postmark-email.js +1 -2
  104. package/dist/integrations/providers/impls/powens-client.js +1 -2
  105. package/dist/integrations/providers/impls/powens-openbanking.js +1 -2
  106. package/dist/integrations/providers/impls/provider-factory.js +1 -2
  107. package/dist/integrations/providers/impls/qdrant-vector.js +1 -2
  108. package/dist/integrations/providers/impls/stripe-payments.js +1 -2
  109. package/dist/integrations/providers/impls/twilio-sms.js +1 -2
  110. package/dist/integrations/providers/index.js +1 -1
  111. package/dist/integrations/providers/mistral.js +1 -2
  112. package/dist/integrations/providers/postmark.js +1 -2
  113. package/dist/integrations/providers/powens.js +1 -2
  114. package/dist/integrations/providers/qdrant.js +1 -2
  115. package/dist/integrations/providers/registry.js +1 -0
  116. package/dist/integrations/providers/stripe.js +1 -2
  117. package/dist/integrations/providers/twilio-sms.js +1 -2
  118. package/dist/integrations/runtime.js +1 -2
  119. package/dist/integrations/secrets/aws-secret-manager.js +1 -0
  120. package/dist/integrations/secrets/env-secret-provider.js +1 -2
  121. package/dist/integrations/secrets/gcp-secret-manager.js +1 -2
  122. package/dist/integrations/secrets/index.js +1 -1
  123. package/dist/integrations/secrets/manager.js +1 -2
  124. package/dist/integrations/secrets/provider.js +1 -2
  125. package/dist/integrations/secrets/scaleway-secret-manager.js +1 -0
  126. package/dist/integrations/spec.js +1 -2
  127. package/dist/jobs/define-job.js +1 -0
  128. package/dist/jobs/gcp-cloud-tasks.js +1 -2
  129. package/dist/jobs/gcp-pubsub.js +1 -2
  130. package/dist/jobs/handlers/gmail-sync-handler.js +1 -2
  131. package/dist/jobs/handlers/index.js +1 -1
  132. package/dist/jobs/handlers/ping-handler.js +1 -0
  133. package/dist/jobs/handlers/storage-document-handler.js +1 -2
  134. package/dist/jobs/index.js +1 -1
  135. package/dist/jobs/memory-queue.js +1 -2
  136. package/dist/jobs/queue.js +1 -0
  137. package/dist/jobs/scaleway-sqs-queue.js +1 -0
  138. package/dist/jsonschema.js +1 -2
  139. package/dist/knowledge/contracts.js +1 -2
  140. package/dist/knowledge/docs/knowledge.docblock.js +138 -0
  141. package/dist/knowledge/ingestion/document-processor.js +1 -2
  142. package/dist/knowledge/ingestion/embedding-service.js +1 -2
  143. package/dist/knowledge/ingestion/gmail-adapter.js +1 -2
  144. package/dist/knowledge/ingestion/storage-adapter.js +1 -2
  145. package/dist/knowledge/ingestion/vector-indexer.js +1 -2
  146. package/dist/knowledge/query/service.js +1 -2
  147. package/dist/knowledge/runtime.js +1 -2
  148. package/dist/knowledge/spaces/email-threads.js +1 -2
  149. package/dist/knowledge/spaces/financial-docs.js +1 -2
  150. package/dist/knowledge/spaces/financial-overview.js +1 -2
  151. package/dist/knowledge/spaces/product-canon.js +1 -2
  152. package/dist/knowledge/spaces/support-faq.js +1 -2
  153. package/dist/knowledge/spaces/uploaded-docs.js +1 -2
  154. package/dist/knowledge/spec.js +1 -2
  155. package/dist/llm/exporters.js +8 -0
  156. package/dist/llm/index.js +1 -0
  157. package/dist/llm/prompts.js +220 -0
  158. package/dist/llm/types.js +0 -0
  159. package/dist/markdown.js +1 -2
  160. package/dist/migrations.js +1 -2
  161. package/dist/node_modules/@pothos/plugin-complexity/esm/calculate-complexity.js +1 -0
  162. package/dist/node_modules/@pothos/plugin-complexity/esm/defaults.js +1 -0
  163. package/dist/node_modules/@pothos/plugin-complexity/esm/index.js +1 -0
  164. package/dist/node_modules/@pothos/plugin-complexity/esm/types.js +1 -0
  165. package/dist/node_modules/@pothos/plugin-complexity/esm/util.js +1 -0
  166. package/dist/node_modules/@pothos/plugin-complexity/esm/validator.js +1 -0
  167. package/dist/node_modules/@pothos/plugin-dataloader/esm/field-builder.js +1 -0
  168. package/dist/node_modules/@pothos/plugin-dataloader/esm/index.js +1 -0
  169. package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/index.js +1 -0
  170. package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/interface.js +1 -0
  171. package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/node.js +1 -0
  172. package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/object.js +1 -0
  173. package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/union.js +1 -0
  174. package/dist/node_modules/@pothos/plugin-dataloader/esm/schema-builder.js +1 -0
  175. package/dist/node_modules/@pothos/plugin-dataloader/esm/util.js +1 -0
  176. package/dist/node_modules/@pothos/plugin-prisma/esm/connection-helpers.js +1 -0
  177. package/dist/node_modules/@pothos/plugin-prisma/esm/field-builder.js +1 -0
  178. package/dist/node_modules/@pothos/plugin-prisma/esm/index.js +1 -0
  179. package/dist/node_modules/@pothos/plugin-prisma/esm/interface-ref.js +1 -0
  180. package/dist/node_modules/@pothos/plugin-prisma/esm/model-loader.js +1 -0
  181. package/dist/node_modules/@pothos/plugin-prisma/esm/node-ref.js +1 -0
  182. package/dist/node_modules/@pothos/plugin-prisma/esm/object-ref.js +1 -0
  183. package/dist/node_modules/@pothos/plugin-prisma/esm/prisma-field-builder.js +1 -0
  184. package/dist/node_modules/@pothos/plugin-prisma/esm/schema-builder.js +1 -0
  185. package/dist/node_modules/@pothos/plugin-prisma/esm/types.js +0 -0
  186. package/dist/node_modules/@pothos/plugin-prisma/esm/util/cursors.js +1 -0
  187. package/dist/node_modules/@pothos/plugin-prisma/esm/util/datamodel.js +1 -0
  188. package/dist/node_modules/@pothos/plugin-prisma/esm/util/deep-equal.js +1 -0
  189. package/dist/node_modules/@pothos/plugin-prisma/esm/util/description.js +1 -0
  190. package/dist/node_modules/@pothos/plugin-prisma/esm/util/get-client.js +1 -0
  191. package/dist/node_modules/@pothos/plugin-prisma/esm/util/loader-map.js +1 -0
  192. package/dist/node_modules/@pothos/plugin-prisma/esm/util/map-query.js +1 -0
  193. package/dist/node_modules/@pothos/plugin-prisma/esm/util/relation-map.js +1 -0
  194. package/dist/node_modules/@pothos/plugin-prisma/esm/util/selections.js +1 -0
  195. package/dist/node_modules/@pothos/plugin-prisma/esm/util/usage.js +1 -0
  196. package/dist/node_modules/@pothos/plugin-tracing/esm/index.js +1 -0
  197. package/dist/node_modules/@pothos/plugin-tracing/esm/util.js +1 -0
  198. package/dist/node_modules/dataloader/index.js +7 -0
  199. package/dist/node_modules/graphql/error/GraphQLError.js +5 -0
  200. package/dist/node_modules/graphql/error/index.js +1 -0
  201. package/dist/node_modules/graphql/error/locatedError.js +1 -0
  202. package/dist/node_modules/graphql/error/syntaxError.js +1 -0
  203. package/dist/node_modules/graphql/execution/collectFields.js +1 -0
  204. package/dist/node_modules/graphql/execution/execute.js +1 -0
  205. package/dist/node_modules/graphql/execution/index.js +1 -0
  206. package/dist/node_modules/graphql/execution/mapAsyncIterator.js +1 -0
  207. package/dist/node_modules/graphql/execution/subscribe.js +1 -0
  208. package/dist/node_modules/graphql/execution/values.js +1 -0
  209. package/dist/node_modules/graphql/graphql.js +1 -0
  210. package/dist/node_modules/graphql/index.js +1 -0
  211. package/dist/node_modules/graphql/jsutils/Path.js +1 -0
  212. package/dist/node_modules/graphql/jsutils/devAssert.js +1 -0
  213. package/dist/node_modules/graphql/jsutils/didYouMean.js +1 -0
  214. package/dist/node_modules/graphql/jsutils/groupBy.js +1 -0
  215. package/dist/node_modules/graphql/jsutils/identityFunc.js +1 -0
  216. package/dist/node_modules/graphql/jsutils/inspect.js +1 -0
  217. package/dist/node_modules/graphql/jsutils/instanceOf.js +12 -0
  218. package/dist/node_modules/graphql/jsutils/invariant.js +1 -0
  219. package/dist/node_modules/graphql/jsutils/isAsyncIterable.js +1 -0
  220. package/dist/node_modules/graphql/jsutils/isIterableObject.js +1 -0
  221. package/dist/node_modules/graphql/jsutils/isObjectLike.js +1 -0
  222. package/dist/node_modules/graphql/jsutils/isPromise.js +1 -0
  223. package/dist/node_modules/graphql/jsutils/keyMap.js +1 -0
  224. package/dist/node_modules/graphql/jsutils/keyValMap.js +1 -0
  225. package/dist/node_modules/graphql/jsutils/mapValue.js +1 -0
  226. package/dist/node_modules/graphql/jsutils/memoize3.js +1 -0
  227. package/dist/node_modules/graphql/jsutils/naturalCompare.js +1 -0
  228. package/dist/node_modules/graphql/jsutils/printPathArray.js +1 -0
  229. package/dist/node_modules/graphql/jsutils/promiseForObject.js +1 -0
  230. package/dist/node_modules/graphql/jsutils/promiseReduce.js +1 -0
  231. package/dist/node_modules/graphql/jsutils/suggestionList.js +1 -0
  232. package/dist/node_modules/graphql/jsutils/toError.js +1 -0
  233. package/dist/node_modules/graphql/jsutils/toObjMap.js +1 -0
  234. package/dist/node_modules/graphql/language/ast.js +1 -0
  235. package/dist/node_modules/graphql/language/blockString.js +3 -0
  236. package/dist/node_modules/graphql/language/characterClasses.js +1 -0
  237. package/dist/node_modules/graphql/language/directiveLocation.js +1 -0
  238. package/dist/node_modules/graphql/language/index.js +1 -0
  239. package/dist/node_modules/graphql/language/kinds.js +1 -0
  240. package/dist/node_modules/graphql/language/lexer.js +3 -0
  241. package/dist/node_modules/graphql/language/location.js +1 -0
  242. package/dist/node_modules/graphql/language/parser.js +1 -0
  243. package/dist/node_modules/graphql/language/predicates.js +1 -0
  244. package/dist/node_modules/graphql/language/printLocation.js +2 -0
  245. package/dist/node_modules/graphql/language/printString.js +1 -0
  246. package/dist/node_modules/graphql/language/printer.js +34 -0
  247. package/dist/node_modules/graphql/language/schemaCoordinateLexer.js +1 -0
  248. package/dist/node_modules/graphql/language/source.js +1 -0
  249. package/dist/node_modules/graphql/language/tokenKind.js +1 -0
  250. package/dist/node_modules/graphql/language/visitor.js +1 -0
  251. package/dist/node_modules/graphql/type/assertName.js +1 -0
  252. package/dist/node_modules/graphql/type/definition.js +1 -0
  253. package/dist/node_modules/graphql/type/directives.js +1 -0
  254. package/dist/node_modules/graphql/type/index.js +1 -0
  255. package/dist/node_modules/graphql/type/introspection.js +3 -0
  256. package/dist/node_modules/graphql/type/scalars.js +1 -0
  257. package/dist/node_modules/graphql/type/schema.js +1 -0
  258. package/dist/node_modules/graphql/type/validate.js +3 -0
  259. package/dist/node_modules/graphql/utilities/TypeInfo.js +1 -0
  260. package/dist/node_modules/graphql/utilities/assertValidName.js +1 -0
  261. package/dist/node_modules/graphql/utilities/astFromValue.js +1 -0
  262. package/dist/node_modules/graphql/utilities/buildASTSchema.js +1 -0
  263. package/dist/node_modules/graphql/utilities/buildClientSchema.js +1 -0
  264. package/dist/node_modules/graphql/utilities/coerceInputValue.js +1 -0
  265. package/dist/node_modules/graphql/utilities/concatAST.js +1 -0
  266. package/dist/node_modules/graphql/utilities/extendSchema.js +1 -0
  267. package/dist/node_modules/graphql/utilities/findBreakingChanges.js +1 -0
  268. package/dist/node_modules/graphql/utilities/getIntrospectionQuery.js +107 -0
  269. package/dist/node_modules/graphql/utilities/getOperationAST.js +1 -0
  270. package/dist/node_modules/graphql/utilities/getOperationRootType.js +1 -0
  271. package/dist/node_modules/graphql/utilities/index.js +1 -0
  272. package/dist/node_modules/graphql/utilities/introspectionFromSchema.js +1 -0
  273. package/dist/node_modules/graphql/utilities/lexicographicSortSchema.js +1 -0
  274. package/dist/node_modules/graphql/utilities/printSchema.js +13 -0
  275. package/dist/node_modules/graphql/utilities/resolveSchemaCoordinate.js +1 -0
  276. package/dist/node_modules/graphql/utilities/separateOperations.js +1 -0
  277. package/dist/node_modules/graphql/utilities/sortValueNode.js +1 -0
  278. package/dist/node_modules/graphql/utilities/stripIgnoredCharacters.js +1 -0
  279. package/dist/node_modules/graphql/utilities/typeComparators.js +1 -0
  280. package/dist/node_modules/graphql/utilities/typeFromAST.js +1 -0
  281. package/dist/node_modules/graphql/utilities/valueFromAST.js +1 -0
  282. package/dist/node_modules/graphql/utilities/valueFromASTUntyped.js +1 -0
  283. package/dist/node_modules/graphql/validation/ValidationContext.js +1 -0
  284. package/dist/node_modules/graphql/validation/index.js +1 -0
  285. package/dist/node_modules/graphql/validation/rules/ExecutableDefinitionsRule.js +1 -0
  286. package/dist/node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.js +1 -0
  287. package/dist/node_modules/graphql/validation/rules/FragmentsOnCompositeTypesRule.js +1 -0
  288. package/dist/node_modules/graphql/validation/rules/KnownArgumentNamesRule.js +1 -0
  289. package/dist/node_modules/graphql/validation/rules/KnownDirectivesRule.js +1 -0
  290. package/dist/node_modules/graphql/validation/rules/KnownFragmentNamesRule.js +1 -0
  291. package/dist/node_modules/graphql/validation/rules/KnownTypeNamesRule.js +1 -0
  292. package/dist/node_modules/graphql/validation/rules/LoneAnonymousOperationRule.js +1 -0
  293. package/dist/node_modules/graphql/validation/rules/LoneSchemaDefinitionRule.js +1 -0
  294. package/dist/node_modules/graphql/validation/rules/MaxIntrospectionDepthRule.js +1 -0
  295. package/dist/node_modules/graphql/validation/rules/NoFragmentCyclesRule.js +1 -0
  296. package/dist/node_modules/graphql/validation/rules/NoUndefinedVariablesRule.js +1 -0
  297. package/dist/node_modules/graphql/validation/rules/NoUnusedFragmentsRule.js +1 -0
  298. package/dist/node_modules/graphql/validation/rules/NoUnusedVariablesRule.js +1 -0
  299. package/dist/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMergedRule.js +1 -0
  300. package/dist/node_modules/graphql/validation/rules/PossibleFragmentSpreadsRule.js +1 -0
  301. package/dist/node_modules/graphql/validation/rules/PossibleTypeExtensionsRule.js +1 -0
  302. package/dist/node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.js +1 -0
  303. package/dist/node_modules/graphql/validation/rules/ScalarLeafsRule.js +1 -0
  304. package/dist/node_modules/graphql/validation/rules/SingleFieldSubscriptionsRule.js +1 -0
  305. package/dist/node_modules/graphql/validation/rules/UniqueArgumentDefinitionNamesRule.js +1 -0
  306. package/dist/node_modules/graphql/validation/rules/UniqueArgumentNamesRule.js +1 -0
  307. package/dist/node_modules/graphql/validation/rules/UniqueDirectiveNamesRule.js +1 -0
  308. package/dist/node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.js +1 -0
  309. package/dist/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.js +1 -0
  310. package/dist/node_modules/graphql/validation/rules/UniqueFieldDefinitionNamesRule.js +1 -0
  311. package/dist/node_modules/graphql/validation/rules/UniqueFragmentNamesRule.js +1 -0
  312. package/dist/node_modules/graphql/validation/rules/UniqueInputFieldNamesRule.js +1 -0
  313. package/dist/node_modules/graphql/validation/rules/UniqueOperationNamesRule.js +1 -0
  314. package/dist/node_modules/graphql/validation/rules/UniqueOperationTypesRule.js +1 -0
  315. package/dist/node_modules/graphql/validation/rules/UniqueTypeNamesRule.js +1 -0
  316. package/dist/node_modules/graphql/validation/rules/UniqueVariableNamesRule.js +1 -0
  317. package/dist/node_modules/graphql/validation/rules/ValuesOfCorrectTypeRule.js +1 -0
  318. package/dist/node_modules/graphql/validation/rules/VariablesAreInputTypesRule.js +1 -0
  319. package/dist/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js +1 -0
  320. package/dist/node_modules/graphql/validation/rules/custom/NoDeprecatedCustomRule.js +1 -0
  321. package/dist/node_modules/graphql/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +1 -0
  322. package/dist/node_modules/graphql/validation/specifiedRules.js +1 -0
  323. package/dist/node_modules/graphql/validation/validate.js +5 -0
  324. package/dist/node_modules/graphql/version.js +1 -0
  325. package/dist/onboarding-base.js +1 -2
  326. package/dist/openapi.js +1 -0
  327. package/dist/openbanking/docs/openbanking.docblock.js +109 -0
  328. package/dist/ownership.js +1 -2
  329. package/dist/policy/docs/policy.docblock.js +1 -0
  330. package/dist/policy/engine.js +1 -2
  331. package/dist/policy/opa-adapter.js +1 -2
  332. package/dist/policy/spec.js +1 -2
  333. package/dist/presentations/docs/presentations-conventions.docblock.js +8 -0
  334. package/dist/presentations.backcompat.js +1 -2
  335. package/dist/presentations.js +1 -2
  336. package/dist/presentations.v2.js +7 -2
  337. package/dist/prompt.js +1 -2
  338. package/dist/promptRegistry.js +1 -2
  339. package/dist/regenerator/docs/regenerator.docblock.js +184 -0
  340. package/dist/regenerator/executor.js +1 -2
  341. package/dist/regenerator/service.js +1 -2
  342. package/dist/regenerator/sinks.js +1 -2
  343. package/dist/regenerator/utils.js +1 -2
  344. package/dist/registry.js +1 -2
  345. package/dist/resources.js +1 -2
  346. package/dist/schema-to-markdown.js +10 -0
  347. package/dist/server/graphql-pothos.js +1 -2
  348. package/dist/server/index.js +1 -1
  349. package/dist/server/mcp/createMcpServer.js +1 -0
  350. package/dist/server/mcp/mcpTypes.js +0 -0
  351. package/dist/server/mcp/registerPresentations.js +1 -0
  352. package/dist/server/mcp/registerPrompts.js +3 -0
  353. package/dist/server/mcp/registerResources.js +1 -0
  354. package/dist/server/mcp/registerTools.js +1 -0
  355. package/dist/server/provider-mcp.js +1 -2
  356. package/dist/server/rest-elysia.js +1 -2
  357. package/dist/server/rest-express.js +1 -2
  358. package/dist/server/rest-generic.js +1 -2
  359. package/dist/server/rest-next-app.js +1 -2
  360. package/dist/server/rest-next-mcp.js +1 -2
  361. package/dist/server/rest-next-pages.js +1 -2
  362. package/dist/spec.js +1 -2
  363. package/dist/telemetry/anomaly.js +1 -2
  364. package/dist/telemetry/docs/telemetry.docblock.js +139 -0
  365. package/dist/telemetry/spec.js +1 -2
  366. package/dist/telemetry/tracker.js +1 -2
  367. package/dist/tests/runner.js +1 -2
  368. package/dist/tests/spec.js +1 -2
  369. package/dist/themes.js +1 -2
  370. package/dist/workflow/adapters/db-adapter.js +1 -2
  371. package/dist/workflow/adapters/file-adapter.js +1 -2
  372. package/dist/workflow/adapters/memory-store.js +1 -2
  373. package/dist/workflow/expression.js +1 -2
  374. package/dist/workflow/runner.js +1 -2
  375. package/dist/workflow/sla-monitor.js +1 -2
  376. package/dist/workflow/spec.js +1 -2
  377. package/dist/workflow/validation.js +1 -2
  378. package/package.json +353 -193
  379. package/dist/app-config/branding.d.ts +0 -56
  380. package/dist/app-config/branding.d.ts.map +0 -1
  381. package/dist/app-config/contracts.d.ts +0 -245
  382. package/dist/app-config/contracts.d.ts.map +0 -1
  383. package/dist/app-config/contracts.js.map +0 -1
  384. package/dist/app-config/events.d.ts +0 -123
  385. package/dist/app-config/events.d.ts.map +0 -1
  386. package/dist/app-config/events.js.map +0 -1
  387. package/dist/app-config/index.d.ts +0 -8
  388. package/dist/app-config/lifecycle-contracts.d.ts +0 -383
  389. package/dist/app-config/lifecycle-contracts.d.ts.map +0 -1
  390. package/dist/app-config/lifecycle-contracts.js.map +0 -1
  391. package/dist/app-config/lifecycle.d.ts +0 -28
  392. package/dist/app-config/lifecycle.d.ts.map +0 -1
  393. package/dist/app-config/runtime.d.ts +0 -115
  394. package/dist/app-config/runtime.d.ts.map +0 -1
  395. package/dist/app-config/runtime.js.map +0 -1
  396. package/dist/app-config/spec.d.ts +0 -176
  397. package/dist/app-config/spec.d.ts.map +0 -1
  398. package/dist/app-config/spec.js.map +0 -1
  399. package/dist/app-config/validation.d.ts +0 -48
  400. package/dist/app-config/validation.d.ts.map +0 -1
  401. package/dist/app-config/validation.js.map +0 -1
  402. package/dist/capabilities/openbanking.d.ts +0 -10
  403. package/dist/capabilities/openbanking.d.ts.map +0 -1
  404. package/dist/capabilities/openbanking.js.map +0 -1
  405. package/dist/capabilities.d.ts +0 -46
  406. package/dist/capabilities.d.ts.map +0 -1
  407. package/dist/capabilities.js.map +0 -1
  408. package/dist/client/index.d.ts +0 -6
  409. package/dist/client/react/drivers/rn-reusables.d.ts +0 -23
  410. package/dist/client/react/drivers/rn-reusables.d.ts.map +0 -1
  411. package/dist/client/react/drivers/rn-reusables.js.map +0 -1
  412. package/dist/client/react/drivers/shadcn.d.ts +0 -13
  413. package/dist/client/react/drivers/shadcn.d.ts.map +0 -1
  414. package/dist/client/react/drivers/shadcn.js.map +0 -1
  415. package/dist/client/react/feature-render.d.ts +0 -21
  416. package/dist/client/react/feature-render.d.ts.map +0 -1
  417. package/dist/client/react/feature-render.js.map +0 -1
  418. package/dist/client/react/form-render.d.ts +0 -92
  419. package/dist/client/react/form-render.d.ts.map +0 -1
  420. package/dist/client/react/form-render.js.map +0 -1
  421. package/dist/client/react/index.d.ts +0 -5
  422. package/dist/contracts-adapter-hydration.d.ts +0 -16
  423. package/dist/contracts-adapter-hydration.d.ts.map +0 -1
  424. package/dist/contracts-adapter-hydration.js.map +0 -1
  425. package/dist/contracts-adapter-input.d.ts +0 -11
  426. package/dist/contracts-adapter-input.d.ts.map +0 -1
  427. package/dist/contracts-adapter-input.js.map +0 -1
  428. package/dist/data-views/query-generator.d.ts +0 -40
  429. package/dist/data-views/query-generator.d.ts.map +0 -1
  430. package/dist/data-views/query-generator.js.map +0 -1
  431. package/dist/data-views/runtime.d.ts +0 -27
  432. package/dist/data-views/runtime.d.ts.map +0 -1
  433. package/dist/data-views/runtime.js.map +0 -1
  434. package/dist/data-views.d.ts +0 -132
  435. package/dist/data-views.d.ts.map +0 -1
  436. package/dist/data-views.js.map +0 -1
  437. package/dist/events.d.ts +0 -45
  438. package/dist/events.d.ts.map +0 -1
  439. package/dist/events.js.map +0 -1
  440. package/dist/experiments/evaluator.d.ts +0 -38
  441. package/dist/experiments/evaluator.d.ts.map +0 -1
  442. package/dist/experiments/evaluator.js.map +0 -1
  443. package/dist/experiments/spec-resolver.d.ts +0 -17
  444. package/dist/experiments/spec-resolver.d.ts.map +0 -1
  445. package/dist/experiments/spec.d.ts +0 -90
  446. package/dist/experiments/spec.d.ts.map +0 -1
  447. package/dist/experiments/spec.js.map +0 -1
  448. package/dist/features.d.ts +0 -88
  449. package/dist/features.d.ts.map +0 -1
  450. package/dist/features.js.map +0 -1
  451. package/dist/forms.d.ts +0 -259
  452. package/dist/forms.d.ts.map +0 -1
  453. package/dist/forms.js.map +0 -1
  454. package/dist/graphql-federation/dist/index.js +0 -2
  455. package/dist/graphql-federation/dist/index.js.map +0 -1
  456. package/dist/index.d.ts +0 -130
  457. package/dist/install.d.ts +0 -77
  458. package/dist/install.d.ts.map +0 -1
  459. package/dist/install.js.map +0 -1
  460. package/dist/integrations/binding.d.ts +0 -18
  461. package/dist/integrations/binding.d.ts.map +0 -1
  462. package/dist/integrations/connection.d.ts +0 -52
  463. package/dist/integrations/connection.d.ts.map +0 -1
  464. package/dist/integrations/contracts.d.ts +0 -436
  465. package/dist/integrations/contracts.d.ts.map +0 -1
  466. package/dist/integrations/contracts.js.map +0 -1
  467. package/dist/integrations/health.d.ts +0 -22
  468. package/dist/integrations/health.d.ts.map +0 -1
  469. package/dist/integrations/health.js.map +0 -1
  470. package/dist/integrations/index.d.ts +0 -53
  471. package/dist/integrations/openbanking/contracts/accounts.d.ts +0 -288
  472. package/dist/integrations/openbanking/contracts/accounts.d.ts.map +0 -1
  473. package/dist/integrations/openbanking/contracts/accounts.js.map +0 -1
  474. package/dist/integrations/openbanking/contracts/balances.d.ts +0 -164
  475. package/dist/integrations/openbanking/contracts/balances.d.ts.map +0 -1
  476. package/dist/integrations/openbanking/contracts/balances.js.map +0 -1
  477. package/dist/integrations/openbanking/contracts/index.d.ts +0 -10
  478. package/dist/integrations/openbanking/contracts/index.d.ts.map +0 -1
  479. package/dist/integrations/openbanking/contracts/index.js.map +0 -1
  480. package/dist/integrations/openbanking/contracts/transactions.d.ts +0 -212
  481. package/dist/integrations/openbanking/contracts/transactions.d.ts.map +0 -1
  482. package/dist/integrations/openbanking/contracts/transactions.js.map +0 -1
  483. package/dist/integrations/openbanking/guards.d.ts +0 -13
  484. package/dist/integrations/openbanking/guards.d.ts.map +0 -1
  485. package/dist/integrations/openbanking/guards.js.map +0 -1
  486. package/dist/integrations/openbanking/models.d.ts +0 -229
  487. package/dist/integrations/openbanking/models.d.ts.map +0 -1
  488. package/dist/integrations/openbanking/models.js.map +0 -1
  489. package/dist/integrations/openbanking/telemetry.d.ts +0 -16
  490. package/dist/integrations/openbanking/telemetry.d.ts.map +0 -1
  491. package/dist/integrations/openbanking/telemetry.js.map +0 -1
  492. package/dist/integrations/providers/calendar.d.ts +0 -79
  493. package/dist/integrations/providers/calendar.d.ts.map +0 -1
  494. package/dist/integrations/providers/elevenlabs.d.ts +0 -8
  495. package/dist/integrations/providers/elevenlabs.d.ts.map +0 -1
  496. package/dist/integrations/providers/elevenlabs.js.map +0 -1
  497. package/dist/integrations/providers/email.d.ts +0 -87
  498. package/dist/integrations/providers/email.d.ts.map +0 -1
  499. package/dist/integrations/providers/embedding.d.ts +0 -25
  500. package/dist/integrations/providers/embedding.d.ts.map +0 -1
  501. package/dist/integrations/providers/gcs-storage.d.ts +0 -8
  502. package/dist/integrations/providers/gcs-storage.d.ts.map +0 -1
  503. package/dist/integrations/providers/gcs-storage.js.map +0 -1
  504. package/dist/integrations/providers/gmail.d.ts +0 -8
  505. package/dist/integrations/providers/gmail.d.ts.map +0 -1
  506. package/dist/integrations/providers/gmail.js.map +0 -1
  507. package/dist/integrations/providers/google-calendar.d.ts +0 -8
  508. package/dist/integrations/providers/google-calendar.d.ts.map +0 -1
  509. package/dist/integrations/providers/google-calendar.js.map +0 -1
  510. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +0 -21
  511. package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +0 -1
  512. package/dist/integrations/providers/impls/elevenlabs-voice.js.map +0 -1
  513. package/dist/integrations/providers/impls/gcs-storage.d.ts +0 -25
  514. package/dist/integrations/providers/impls/gcs-storage.d.ts.map +0 -1
  515. package/dist/integrations/providers/impls/gcs-storage.js.map +0 -1
  516. package/dist/integrations/providers/impls/gmail-inbound.d.ts +0 -27
  517. package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +0 -1
  518. package/dist/integrations/providers/impls/gmail-inbound.js.map +0 -1
  519. package/dist/integrations/providers/impls/gmail-outbound.d.ts +0 -19
  520. package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +0 -1
  521. package/dist/integrations/providers/impls/gmail-outbound.js.map +0 -1
  522. package/dist/integrations/providers/impls/google-calendar.d.ts +0 -24
  523. package/dist/integrations/providers/impls/google-calendar.d.ts.map +0 -1
  524. package/dist/integrations/providers/impls/google-calendar.js.map +0 -1
  525. package/dist/integrations/providers/impls/index.d.ts +0 -15
  526. package/dist/integrations/providers/impls/mistral-embedding.d.ts +0 -24
  527. package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +0 -1
  528. package/dist/integrations/providers/impls/mistral-embedding.js.map +0 -1
  529. package/dist/integrations/providers/impls/mistral-llm.d.ts +0 -32
  530. package/dist/integrations/providers/impls/mistral-llm.d.ts.map +0 -1
  531. package/dist/integrations/providers/impls/mistral-llm.js.map +0 -1
  532. package/dist/integrations/providers/impls/postmark-email.d.ts +0 -20
  533. package/dist/integrations/providers/impls/postmark-email.d.ts.map +0 -1
  534. package/dist/integrations/providers/impls/postmark-email.js.map +0 -1
  535. package/dist/integrations/providers/impls/powens-client.d.ts +0 -125
  536. package/dist/integrations/providers/impls/powens-client.d.ts.map +0 -1
  537. package/dist/integrations/providers/impls/powens-client.js.map +0 -1
  538. package/dist/integrations/providers/impls/powens-openbanking.d.ts +0 -28
  539. package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +0 -1
  540. package/dist/integrations/providers/impls/powens-openbanking.js.map +0 -1
  541. package/dist/integrations/providers/impls/provider-factory.d.ts +0 -27
  542. package/dist/integrations/providers/impls/provider-factory.d.ts.map +0 -1
  543. package/dist/integrations/providers/impls/provider-factory.js.map +0 -1
  544. package/dist/integrations/providers/impls/qdrant-vector.d.ts +0 -25
  545. package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +0 -1
  546. package/dist/integrations/providers/impls/qdrant-vector.js.map +0 -1
  547. package/dist/integrations/providers/impls/stripe-payments.d.ts +0 -29
  548. package/dist/integrations/providers/impls/stripe-payments.d.ts.map +0 -1
  549. package/dist/integrations/providers/impls/stripe-payments.js.map +0 -1
  550. package/dist/integrations/providers/impls/twilio-sms.d.ts +0 -21
  551. package/dist/integrations/providers/impls/twilio-sms.d.ts.map +0 -1
  552. package/dist/integrations/providers/impls/twilio-sms.js.map +0 -1
  553. package/dist/integrations/providers/index.d.ts +0 -36
  554. package/dist/integrations/providers/llm.d.ts +0 -83
  555. package/dist/integrations/providers/llm.d.ts.map +0 -1
  556. package/dist/integrations/providers/mistral.d.ts +0 -8
  557. package/dist/integrations/providers/mistral.d.ts.map +0 -1
  558. package/dist/integrations/providers/mistral.js.map +0 -1
  559. package/dist/integrations/providers/openbanking.d.ts +0 -129
  560. package/dist/integrations/providers/openbanking.d.ts.map +0 -1
  561. package/dist/integrations/providers/payments.d.ts +0 -110
  562. package/dist/integrations/providers/payments.d.ts.map +0 -1
  563. package/dist/integrations/providers/postmark.d.ts +0 -8
  564. package/dist/integrations/providers/postmark.d.ts.map +0 -1
  565. package/dist/integrations/providers/postmark.js.map +0 -1
  566. package/dist/integrations/providers/powens.d.ts +0 -8
  567. package/dist/integrations/providers/powens.d.ts.map +0 -1
  568. package/dist/integrations/providers/powens.js.map +0 -1
  569. package/dist/integrations/providers/qdrant.d.ts +0 -8
  570. package/dist/integrations/providers/qdrant.d.ts.map +0 -1
  571. package/dist/integrations/providers/qdrant.js.map +0 -1
  572. package/dist/integrations/providers/sms.d.ts +0 -35
  573. package/dist/integrations/providers/sms.d.ts.map +0 -1
  574. package/dist/integrations/providers/storage.d.ts +0 -61
  575. package/dist/integrations/providers/storage.d.ts.map +0 -1
  576. package/dist/integrations/providers/stripe.d.ts +0 -8
  577. package/dist/integrations/providers/stripe.d.ts.map +0 -1
  578. package/dist/integrations/providers/stripe.js.map +0 -1
  579. package/dist/integrations/providers/twilio-sms.d.ts +0 -8
  580. package/dist/integrations/providers/twilio-sms.d.ts.map +0 -1
  581. package/dist/integrations/providers/twilio-sms.js.map +0 -1
  582. package/dist/integrations/providers/vector-store.d.ts +0 -44
  583. package/dist/integrations/providers/vector-store.d.ts.map +0 -1
  584. package/dist/integrations/providers/voice.d.ts +0 -35
  585. package/dist/integrations/providers/voice.d.ts.map +0 -1
  586. package/dist/integrations/runtime.d.ts +0 -100
  587. package/dist/integrations/runtime.d.ts.map +0 -1
  588. package/dist/integrations/runtime.js.map +0 -1
  589. package/dist/integrations/secrets/env-secret-provider.d.ts +0 -32
  590. package/dist/integrations/secrets/env-secret-provider.d.ts.map +0 -1
  591. package/dist/integrations/secrets/env-secret-provider.js.map +0 -1
  592. package/dist/integrations/secrets/gcp-secret-manager.d.ts +0 -33
  593. package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +0 -1
  594. package/dist/integrations/secrets/gcp-secret-manager.js.map +0 -1
  595. package/dist/integrations/secrets/index.d.ts +0 -5
  596. package/dist/integrations/secrets/manager.d.ts +0 -48
  597. package/dist/integrations/secrets/manager.d.ts.map +0 -1
  598. package/dist/integrations/secrets/manager.js.map +0 -1
  599. package/dist/integrations/secrets/provider.d.ts +0 -53
  600. package/dist/integrations/secrets/provider.d.ts.map +0 -1
  601. package/dist/integrations/secrets/provider.js.map +0 -1
  602. package/dist/integrations/spec.d.ts +0 -80
  603. package/dist/integrations/spec.d.ts.map +0 -1
  604. package/dist/integrations/spec.js.map +0 -1
  605. package/dist/jobs/gcp-cloud-tasks.d.ts +0 -42
  606. package/dist/jobs/gcp-cloud-tasks.d.ts.map +0 -1
  607. package/dist/jobs/gcp-cloud-tasks.js.map +0 -1
  608. package/dist/jobs/gcp-pubsub.d.ts +0 -26
  609. package/dist/jobs/gcp-pubsub.d.ts.map +0 -1
  610. package/dist/jobs/gcp-pubsub.js.map +0 -1
  611. package/dist/jobs/handlers/gmail-sync-handler.d.ts +0 -10
  612. package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +0 -1
  613. package/dist/jobs/handlers/gmail-sync-handler.js.map +0 -1
  614. package/dist/jobs/handlers/index.d.ts +0 -3
  615. package/dist/jobs/handlers/storage-document-handler.d.ts +0 -13
  616. package/dist/jobs/handlers/storage-document-handler.d.ts.map +0 -1
  617. package/dist/jobs/handlers/storage-document-handler.js.map +0 -1
  618. package/dist/jobs/index.d.ts +0 -7
  619. package/dist/jobs/memory-queue.d.ts +0 -19
  620. package/dist/jobs/memory-queue.d.ts.map +0 -1
  621. package/dist/jobs/memory-queue.js.map +0 -1
  622. package/dist/jobs/queue.d.ts +0 -27
  623. package/dist/jobs/queue.d.ts.map +0 -1
  624. package/dist/jsonschema.d.ts +0 -27
  625. package/dist/jsonschema.d.ts.map +0 -1
  626. package/dist/jsonschema.js.map +0 -1
  627. package/dist/knowledge/binding.d.ts +0 -26
  628. package/dist/knowledge/binding.d.ts.map +0 -1
  629. package/dist/knowledge/contracts.d.ts +0 -317
  630. package/dist/knowledge/contracts.d.ts.map +0 -1
  631. package/dist/knowledge/contracts.js.map +0 -1
  632. package/dist/knowledge/index.d.ts +0 -10
  633. package/dist/knowledge/ingestion/document-processor.d.ts +0 -25
  634. package/dist/knowledge/ingestion/document-processor.d.ts.map +0 -1
  635. package/dist/knowledge/ingestion/document-processor.js.map +0 -1
  636. package/dist/knowledge/ingestion/embedding-service.d.ts +0 -13
  637. package/dist/knowledge/ingestion/embedding-service.d.ts.map +0 -1
  638. package/dist/knowledge/ingestion/embedding-service.js.map +0 -1
  639. package/dist/knowledge/ingestion/gmail-adapter.d.ts +0 -19
  640. package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +0 -1
  641. package/dist/knowledge/ingestion/gmail-adapter.js.map +0 -1
  642. package/dist/knowledge/ingestion/index.d.ts +0 -6
  643. package/dist/knowledge/ingestion/storage-adapter.d.ts +0 -16
  644. package/dist/knowledge/ingestion/storage-adapter.d.ts.map +0 -1
  645. package/dist/knowledge/ingestion/storage-adapter.js.map +0 -1
  646. package/dist/knowledge/ingestion/vector-indexer.d.ts +0 -19
  647. package/dist/knowledge/ingestion/vector-indexer.d.ts.map +0 -1
  648. package/dist/knowledge/ingestion/vector-indexer.js.map +0 -1
  649. package/dist/knowledge/query/index.d.ts +0 -2
  650. package/dist/knowledge/query/service.d.ts +0 -30
  651. package/dist/knowledge/query/service.d.ts.map +0 -1
  652. package/dist/knowledge/query/service.js.map +0 -1
  653. package/dist/knowledge/runtime.d.ts +0 -33
  654. package/dist/knowledge/runtime.d.ts.map +0 -1
  655. package/dist/knowledge/runtime.js.map +0 -1
  656. package/dist/knowledge/source.d.ts +0 -33
  657. package/dist/knowledge/source.d.ts.map +0 -1
  658. package/dist/knowledge/spaces/email-threads.d.ts +0 -8
  659. package/dist/knowledge/spaces/email-threads.d.ts.map +0 -1
  660. package/dist/knowledge/spaces/email-threads.js.map +0 -1
  661. package/dist/knowledge/spaces/financial-docs.d.ts +0 -8
  662. package/dist/knowledge/spaces/financial-docs.d.ts.map +0 -1
  663. package/dist/knowledge/spaces/financial-docs.js.map +0 -1
  664. package/dist/knowledge/spaces/financial-overview.d.ts +0 -8
  665. package/dist/knowledge/spaces/financial-overview.d.ts.map +0 -1
  666. package/dist/knowledge/spaces/financial-overview.js.map +0 -1
  667. package/dist/knowledge/spaces/index.d.ts +0 -7
  668. package/dist/knowledge/spaces/product-canon.d.ts +0 -8
  669. package/dist/knowledge/spaces/product-canon.d.ts.map +0 -1
  670. package/dist/knowledge/spaces/product-canon.js.map +0 -1
  671. package/dist/knowledge/spaces/support-faq.d.ts +0 -8
  672. package/dist/knowledge/spaces/support-faq.d.ts.map +0 -1
  673. package/dist/knowledge/spaces/support-faq.js.map +0 -1
  674. package/dist/knowledge/spaces/uploaded-docs.d.ts +0 -8
  675. package/dist/knowledge/spaces/uploaded-docs.d.ts.map +0 -1
  676. package/dist/knowledge/spaces/uploaded-docs.js.map +0 -1
  677. package/dist/knowledge/spec.d.ts +0 -53
  678. package/dist/knowledge/spec.d.ts.map +0 -1
  679. package/dist/knowledge/spec.js.map +0 -1
  680. package/dist/markdown.d.ts +0 -22
  681. package/dist/markdown.d.ts.map +0 -1
  682. package/dist/markdown.js.map +0 -1
  683. package/dist/migrations.d.ts +0 -53
  684. package/dist/migrations.d.ts.map +0 -1
  685. package/dist/migrations.js.map +0 -1
  686. package/dist/onboarding-base.d.ts +0 -138
  687. package/dist/onboarding-base.d.ts.map +0 -1
  688. package/dist/onboarding-base.js.map +0 -1
  689. package/dist/ownership.d.ts +0 -76
  690. package/dist/ownership.d.ts.map +0 -1
  691. package/dist/ownership.js.map +0 -1
  692. package/dist/policy/engine.d.ts +0 -40
  693. package/dist/policy/engine.d.ts.map +0 -1
  694. package/dist/policy/engine.js.map +0 -1
  695. package/dist/policy/opa-adapter.d.ts +0 -46
  696. package/dist/policy/opa-adapter.d.ts.map +0 -1
  697. package/dist/policy/opa-adapter.js.map +0 -1
  698. package/dist/policy/spec.d.ts +0 -115
  699. package/dist/policy/spec.d.ts.map +0 -1
  700. package/dist/policy/spec.js.map +0 -1
  701. package/dist/presentations.backcompat.d.ts +0 -8
  702. package/dist/presentations.backcompat.d.ts.map +0 -1
  703. package/dist/presentations.backcompat.js.map +0 -1
  704. package/dist/presentations.d.ts +0 -97
  705. package/dist/presentations.d.ts.map +0 -1
  706. package/dist/presentations.js.map +0 -1
  707. package/dist/presentations.v2.d.ts +0 -96
  708. package/dist/presentations.v2.d.ts.map +0 -1
  709. package/dist/presentations.v2.js.map +0 -1
  710. package/dist/prompt.d.ts +0 -61
  711. package/dist/prompt.d.ts.map +0 -1
  712. package/dist/prompt.js.map +0 -1
  713. package/dist/promptRegistry.d.ts +0 -16
  714. package/dist/promptRegistry.d.ts.map +0 -1
  715. package/dist/promptRegistry.js.map +0 -1
  716. package/dist/regenerator/adapters.d.ts +0 -20
  717. package/dist/regenerator/adapters.d.ts.map +0 -1
  718. package/dist/regenerator/executor.d.ts +0 -71
  719. package/dist/regenerator/executor.d.ts.map +0 -1
  720. package/dist/regenerator/executor.js.map +0 -1
  721. package/dist/regenerator/index.d.ts +0 -7
  722. package/dist/regenerator/service.d.ts +0 -34
  723. package/dist/regenerator/service.d.ts.map +0 -1
  724. package/dist/regenerator/service.js.map +0 -1
  725. package/dist/regenerator/sinks.d.ts +0 -27
  726. package/dist/regenerator/sinks.d.ts.map +0 -1
  727. package/dist/regenerator/sinks.js.map +0 -1
  728. package/dist/regenerator/types.d.ts +0 -108
  729. package/dist/regenerator/types.d.ts.map +0 -1
  730. package/dist/regenerator/utils.d.ts +0 -10
  731. package/dist/regenerator/utils.d.ts.map +0 -1
  732. package/dist/regenerator/utils.js.map +0 -1
  733. package/dist/registry.d.ts +0 -73
  734. package/dist/registry.d.ts.map +0 -1
  735. package/dist/registry.js.map +0 -1
  736. package/dist/resources.d.ts +0 -65
  737. package/dist/resources.d.ts.map +0 -1
  738. package/dist/resources.js.map +0 -1
  739. package/dist/schema/dist/EnumType.js +0 -1
  740. package/dist/schema/dist/FieldType.js +0 -2
  741. package/dist/schema/dist/FieldType.js.map +0 -1
  742. package/dist/schema/dist/ScalarTypeEnum.js +0 -2
  743. package/dist/schema/dist/ScalarTypeEnum.js.map +0 -1
  744. package/dist/schema/dist/SchemaModel.js +0 -2
  745. package/dist/schema/dist/SchemaModel.js.map +0 -1
  746. package/dist/schema/dist/index.js +0 -1
  747. package/dist/server/graphql-pothos.d.ts +0 -32
  748. package/dist/server/graphql-pothos.d.ts.map +0 -1
  749. package/dist/server/graphql-pothos.js.map +0 -1
  750. package/dist/server/graphql-schema-export.d.ts +0 -7
  751. package/dist/server/graphql-schema-export.d.ts.map +0 -1
  752. package/dist/server/graphql-schema-export.js +0 -2
  753. package/dist/server/graphql-schema-export.js.map +0 -1
  754. package/dist/server/index.d.ts +0 -9
  755. package/dist/server/provider-mcp.d.ts +0 -52
  756. package/dist/server/provider-mcp.d.ts.map +0 -1
  757. package/dist/server/provider-mcp.js.map +0 -1
  758. package/dist/server/rest-elysia.d.ts +0 -41
  759. package/dist/server/rest-elysia.d.ts.map +0 -1
  760. package/dist/server/rest-elysia.js.map +0 -1
  761. package/dist/server/rest-express.d.ts +0 -17
  762. package/dist/server/rest-express.d.ts.map +0 -1
  763. package/dist/server/rest-express.js.map +0 -1
  764. package/dist/server/rest-generic.d.ts +0 -33
  765. package/dist/server/rest-generic.d.ts.map +0 -1
  766. package/dist/server/rest-generic.js.map +0 -1
  767. package/dist/server/rest-next-app.d.ts +0 -36
  768. package/dist/server/rest-next-app.d.ts.map +0 -1
  769. package/dist/server/rest-next-app.js.map +0 -1
  770. package/dist/server/rest-next-mcp.d.ts +0 -12
  771. package/dist/server/rest-next-mcp.d.ts.map +0 -1
  772. package/dist/server/rest-next-mcp.js.map +0 -1
  773. package/dist/server/rest-next-pages.d.ts +0 -10
  774. package/dist/server/rest-next-pages.d.ts.map +0 -1
  775. package/dist/server/rest-next-pages.js.map +0 -1
  776. package/dist/spec.d.ts +0 -172
  777. package/dist/spec.d.ts.map +0 -1
  778. package/dist/spec.js.map +0 -1
  779. package/dist/telemetry/anomaly.d.ts +0 -28
  780. package/dist/telemetry/anomaly.d.ts.map +0 -1
  781. package/dist/telemetry/anomaly.js.map +0 -1
  782. package/dist/telemetry/index.d.ts +0 -4
  783. package/dist/telemetry/spec.d.ts +0 -99
  784. package/dist/telemetry/spec.d.ts.map +0 -1
  785. package/dist/telemetry/spec.js.map +0 -1
  786. package/dist/telemetry/tracker.d.ts +0 -52
  787. package/dist/telemetry/tracker.d.ts.map +0 -1
  788. package/dist/telemetry/tracker.js.map +0 -1
  789. package/dist/tests/index.d.ts +0 -3
  790. package/dist/tests/runner.d.ts +0 -44
  791. package/dist/tests/runner.d.ts.map +0 -1
  792. package/dist/tests/runner.js.map +0 -1
  793. package/dist/tests/spec.d.ts +0 -90
  794. package/dist/tests/spec.d.ts.map +0 -1
  795. package/dist/tests/spec.js.map +0 -1
  796. package/dist/themes.d.ts +0 -56
  797. package/dist/themes.d.ts.map +0 -1
  798. package/dist/themes.js.map +0 -1
  799. package/dist/translations/catalog.d.ts +0 -29
  800. package/dist/translations/catalog.d.ts.map +0 -1
  801. package/dist/translations/tenant.d.ts +0 -16
  802. package/dist/translations/tenant.d.ts.map +0 -1
  803. package/dist/types/all.d.ts +0 -60
  804. package/dist/types.d.ts +0 -89
  805. package/dist/types.d.ts.map +0 -1
  806. package/dist/workflow/adapters/db-adapter.d.ts +0 -35
  807. package/dist/workflow/adapters/db-adapter.d.ts.map +0 -1
  808. package/dist/workflow/adapters/db-adapter.js.map +0 -1
  809. package/dist/workflow/adapters/file-adapter.d.ts +0 -15
  810. package/dist/workflow/adapters/file-adapter.d.ts.map +0 -1
  811. package/dist/workflow/adapters/file-adapter.js.map +0 -1
  812. package/dist/workflow/adapters/index.d.ts +0 -4
  813. package/dist/workflow/adapters/memory-store.d.ts +0 -19
  814. package/dist/workflow/adapters/memory-store.d.ts.map +0 -1
  815. package/dist/workflow/adapters/memory-store.js.map +0 -1
  816. package/dist/workflow/expression.d.ts +0 -10
  817. package/dist/workflow/expression.d.ts.map +0 -1
  818. package/dist/workflow/expression.js.map +0 -1
  819. package/dist/workflow/index.d.ts +0 -10
  820. package/dist/workflow/runner.d.ts +0 -75
  821. package/dist/workflow/runner.d.ts.map +0 -1
  822. package/dist/workflow/runner.js.map +0 -1
  823. package/dist/workflow/sla-monitor.d.ts +0 -21
  824. package/dist/workflow/sla-monitor.d.ts.map +0 -1
  825. package/dist/workflow/sla-monitor.js.map +0 -1
  826. package/dist/workflow/spec.d.ts +0 -100
  827. package/dist/workflow/spec.d.ts.map +0 -1
  828. package/dist/workflow/spec.js.map +0 -1
  829. package/dist/workflow/state.d.ts +0 -36
  830. package/dist/workflow/state.d.ts.map +0 -1
  831. package/dist/workflow/validation.d.ts +0 -29
  832. package/dist/workflow/validation.d.ts.map +0 -1
  833. package/dist/workflow/validation.js.map +0 -1
@@ -1,2 +1 @@
1
- import{performance as e}from"node:perf_hooks";var t=class{telemetry;maxAttempts;backoffMs;shouldRetry;sleep;now;constructor(e,t={}){this.secretProvider=e,this.telemetry=t.telemetry,this.maxAttempts=Math.max(1,t.maxAttempts??3),this.backoffMs=t.backoffMs??250,this.shouldRetry=t.shouldRetry??(e=>typeof e==`object`&&!!e&&`retryable`in e&&!!e.retryable),this.sleep=t.sleep??(e=>e<=0?Promise.resolve():new Promise(t=>setTimeout(t,e))),this.now=t.now??(()=>new Date)}async executeWithGuards(t,n,r,i,a){let o=this.findIntegration(t,i);if(!o)return this.failure({tenantId:i.tenantId,appId:i.appId,environment:i.environment,blueprintName:i.blueprintName,blueprintVersion:i.blueprintVersion,configVersion:i.configVersion,slotId:t,operation:n},void 0,{code:`SLOT_NOT_BOUND`,message:`Integration slot "${t}" is not bound for tenant "${i.tenantId}".`,retryable:!1},0);let s=o.connection.status;if(s===`disconnected`||s===`error`)return this.failure(this.makeContext(t,n,i),o,{code:`CONNECTION_NOT_READY`,message:`Integration connection "${o.connection.meta.label}" is in status "${s}".`,retryable:!1},0);let c=await this.fetchSecrets(o.connection),l=0,u=e.now();for(;l<this.maxAttempts;){l+=1;try{let r=await a(o.connection,c),s=e.now()-u;return this.emitTelemetry(this.makeContext(t,n,i),o,`success`,s),{success:!0,data:r,metadata:{latencyMs:s,connectionId:o.connection.meta.id,ownershipMode:o.connection.ownershipMode,attempts:l}}}catch(r){let a=e.now()-u;this.emitTelemetry(this.makeContext(t,n,i),o,`error`,a,this.errorCodeFor(r),r instanceof Error?r.message:String(r));let s=this.shouldRetry(r,l);if(!s||l>=this.maxAttempts)return{success:!1,error:{code:this.errorCodeFor(r),message:r instanceof Error?r.message:String(r),retryable:s,cause:r},metadata:{latencyMs:a,connectionId:o.connection.meta.id,ownershipMode:o.connection.ownershipMode,attempts:l}};await this.sleep(this.backoffMs)}}return{success:!1,error:{code:`UNKNOWN_ERROR`,message:`Integration call failed after retries.`,retryable:!1},metadata:{latencyMs:e.now()-u,connectionId:o.connection.meta.id,ownershipMode:o.connection.ownershipMode,attempts:this.maxAttempts}}}findIntegration(e,t){return t.integrations.find(t=>t.slot.slotId===e)}async fetchSecrets(e){if(!this.secretProvider.canHandle(e.secretRef))throw Error(`Secret provider "${this.secretProvider.id}" cannot handle reference "${e.secretRef}".`);let t=await this.secretProvider.getSecret(e.secretRef);return this.parseSecret(t)}parseSecret(e){let t=new TextDecoder().decode(e.data);try{let e=JSON.parse(t);if(e&&typeof e==`object`&&!Array.isArray(e)){let t=Object.entries(e).filter(([,e])=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`);return Object.fromEntries(t.map(([e,t])=>[e,String(t)]))}}catch{}return{secret:t}}emitTelemetry(e,t,n,r,i,a){!this.telemetry||!t||this.telemetry.record({tenantId:e.tenantId,appId:e.appId,environment:e.environment,slotId:e.slotId,integrationKey:t.connection.meta.integrationKey,integrationVersion:t.connection.meta.integrationVersion,connectionId:t.connection.meta.id,status:n,durationMs:r,errorCode:i,errorMessage:a,occurredAt:this.now(),metadata:{blueprint:`${e.blueprintName}.v${e.blueprintVersion}`,configVersion:e.configVersion,operation:e.operation}})}failure(e,t,n,r){return t&&this.emitTelemetry(e,t,`error`,0,n.code,n.message),{success:!1,error:n,metadata:{latencyMs:0,connectionId:t?.connection.meta.id??`unknown`,ownershipMode:t?.connection.ownershipMode??`managed`,attempts:r}}}makeContext(e,t,n){return{tenantId:n.tenantId,appId:n.appId,environment:n.environment,blueprintName:n.blueprintName,blueprintVersion:n.blueprintVersion,configVersion:n.configVersion,slotId:e,operation:t}}errorCodeFor(e){return typeof e==`object`&&e&&`code`in e&&typeof e.code==`string`?e.code:`PROVIDER_ERROR`}};function n(e){let t=e.connection.status;if(t===`disconnected`||t===`error`)throw Error(`Integration connection "${e.connection.meta.label}" is in status "${t}".`)}function r(e){switch(e){case`connected`:return`connected`;case`disconnected`:return`disconnected`;case`error`:return`error`;case`unknown`:default:return`unknown`}}export{t as IntegrationCallGuard,r as connectionStatusLabel,n as ensureConnectionReady};
2
- //# sourceMappingURL=runtime.js.map
1
+ import{performance as e}from"node:perf_hooks";var t=class{telemetry;maxAttempts;backoffMs;shouldRetry;sleep;now;constructor(e,t={}){this.secretProvider=e,this.telemetry=t.telemetry,this.maxAttempts=Math.max(1,t.maxAttempts??3),this.backoffMs=t.backoffMs??250,this.shouldRetry=t.shouldRetry??(e=>typeof e==`object`&&!!e&&`retryable`in e&&!!e.retryable),this.sleep=t.sleep??(e=>e<=0?Promise.resolve():new Promise(t=>setTimeout(t,e))),this.now=t.now??(()=>new Date)}async executeWithGuards(t,n,r,i,a){let o=this.findIntegration(t,i);if(!o)return this.failure({tenantId:i.tenantId,appId:i.appId,environment:i.environment,blueprintName:i.blueprintName,blueprintVersion:i.blueprintVersion,configVersion:i.configVersion,slotId:t,operation:n},void 0,{code:`SLOT_NOT_BOUND`,message:`Integration slot "${t}" is not bound for tenant "${i.tenantId}".`,retryable:!1},0);let s=o.connection.status;if(s===`disconnected`||s===`error`)return this.failure(this.makeContext(t,n,i),o,{code:`CONNECTION_NOT_READY`,message:`Integration connection "${o.connection.meta.label}" is in status "${s}".`,retryable:!1},0);let c=await this.fetchSecrets(o.connection),l=0,u=e.now();for(;l<this.maxAttempts;){l+=1;try{let r=await a(o.connection,c),s=e.now()-u;return this.emitTelemetry(this.makeContext(t,n,i),o,`success`,s),{success:!0,data:r,metadata:{latencyMs:s,connectionId:o.connection.meta.id,ownershipMode:o.connection.ownershipMode,attempts:l}}}catch(r){let a=e.now()-u;this.emitTelemetry(this.makeContext(t,n,i),o,`error`,a,this.errorCodeFor(r),r instanceof Error?r.message:String(r));let s=this.shouldRetry(r,l);if(!s||l>=this.maxAttempts)return{success:!1,error:{code:this.errorCodeFor(r),message:r instanceof Error?r.message:String(r),retryable:s,cause:r},metadata:{latencyMs:a,connectionId:o.connection.meta.id,ownershipMode:o.connection.ownershipMode,attempts:l}};await this.sleep(this.backoffMs)}}return{success:!1,error:{code:`UNKNOWN_ERROR`,message:`Integration call failed after retries.`,retryable:!1},metadata:{latencyMs:e.now()-u,connectionId:o.connection.meta.id,ownershipMode:o.connection.ownershipMode,attempts:this.maxAttempts}}}findIntegration(e,t){return t.integrations.find(t=>t.slot.slotId===e)}async fetchSecrets(e){if(!this.secretProvider.canHandle(e.secretRef))throw Error(`Secret provider "${this.secretProvider.id}" cannot handle reference "${e.secretRef}".`);let t=await this.secretProvider.getSecret(e.secretRef);return this.parseSecret(t)}parseSecret(e){let t=new TextDecoder().decode(e.data);try{let e=JSON.parse(t);if(e&&typeof e==`object`&&!Array.isArray(e)){let t=Object.entries(e).filter(([,e])=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`);return Object.fromEntries(t.map(([e,t])=>[e,String(t)]))}}catch{}return{secret:t}}emitTelemetry(e,t,n,r,i,a){!this.telemetry||!t||this.telemetry.record({tenantId:e.tenantId,appId:e.appId,environment:e.environment,slotId:e.slotId,integrationKey:t.connection.meta.integrationKey,integrationVersion:t.connection.meta.integrationVersion,connectionId:t.connection.meta.id,status:n,durationMs:r,errorCode:i,errorMessage:a,occurredAt:this.now(),metadata:{blueprint:`${e.blueprintName}.v${e.blueprintVersion}`,configVersion:e.configVersion,operation:e.operation}})}failure(e,t,n,r){return t&&this.emitTelemetry(e,t,`error`,0,n.code,n.message),{success:!1,error:n,metadata:{latencyMs:0,connectionId:t?.connection.meta.id??`unknown`,ownershipMode:t?.connection.ownershipMode??`managed`,attempts:r}}}makeContext(e,t,n){return{tenantId:n.tenantId,appId:n.appId,environment:n.environment,blueprintName:n.blueprintName,blueprintVersion:n.blueprintVersion,configVersion:n.configVersion,slotId:e,operation:t}}errorCodeFor(e){return typeof e==`object`&&e&&`code`in e&&typeof e.code==`string`?e.code:`PROVIDER_ERROR`}};function n(e){let t=e.connection.status;if(t===`disconnected`||t===`error`)throw Error(`Integration connection "${e.connection.meta.label}" is in status "${t}".`)}function r(e){switch(e){case`connected`:return`connected`;case`disconnected`:return`disconnected`;case`error`:return`error`;case`unknown`:default:return`unknown`}}export{t as IntegrationCallGuard,r as connectionStatusLabel,n as ensureConnectionReady};
@@ -0,0 +1 @@
1
+ import{SecretProviderError as e,normalizeSecretPayload as t,parseSecretUri as n}from"./provider.js";import{Buffer as r}from"node:buffer";import{CreateSecretCommand as i,DeleteSecretCommand as a,GetSecretValueCommand as o,PutSecretValueCommand as s,SecretsManagerClient as c}from"@aws-sdk/client-secrets-manager";var l=class{id=`aws-secrets-manager`;explicitRegion;injectedClient;clientConfig;clientsByRegion=new Map;constructor(e={}){this.explicitRegion=e.region,this.injectedClient=e.client,this.clientConfig=e.clientConfig}canHandle(e){try{let t=n(e);return t.provider===`aws`&&(t.path===`secretsmanager`||t.path.startsWith(`secretsmanager/`))}catch{return!1}}async getSecret(e,t){let n=this.parseReference(e),r=this.getClient(n.region),i=t?.version??n.stage??n.version,a={SecretId:n.secretId,...this.buildVersionSelector(i)};try{let t=await r.send(new o(a));return{data:u(t,e,this.id),version:typeof t.VersionId==`string`&&t.VersionId?t.VersionId:i,metadata:{region:n.region,secretId:n.secretId,...i?{requestedVersion:i}:{}},retrievedAt:new Date}}catch(t){throw p({error:t,provider:this.id,reference:e,operation:`getSecret`})}}async setSecret(n,r){let a=this.parseReference(n),o=this.getClient(a.region),c=t(r);try{let e=await o.send(new s({SecretId:a.secretId,SecretBinary:c})),t=typeof e.VersionId==`string`&&e.VersionId?e.VersionId:`latest`;return{reference:this.buildReference(a.region,a.secretId,{version:t}),version:t}}catch(t){if(!f(t))throw p({error:t,provider:this.id,reference:n,operation:`putSecretValue`});if(d(a.secretId))throw new e({message:`Secret not found: ${a.secretId}`,provider:this.id,reference:n,code:`NOT_FOUND`,cause:t});try{let e=await o.send(new i({Name:a.secretId,SecretBinary:c})),t=typeof e.VersionId==`string`&&e.VersionId?e.VersionId:`latest`;return{reference:this.buildReference(a.region,a.secretId,{version:t}),version:t}}catch(e){throw p({error:e,provider:this.id,reference:n,operation:`createSecret`})}}}async rotateSecret(e,t){return this.setSecret(e,t)}async deleteSecret(e){let t=this.parseReference(e),n=this.getClient(t.region);try{await n.send(new a({SecretId:t.secretId,RecoveryWindowInDays:7}))}catch(t){throw p({error:t,provider:this.id,reference:e,operation:`deleteSecret`})}}getClient(e){if(this.injectedClient)return this.injectedClient;let t=this.clientsByRegion.get(e);if(t)return t;let n=new c({...this.clientConfig??{},region:e});return this.clientsByRegion.set(e,n),n}parseReference(t){let r=n(t);if(r.provider!==`aws`)throw new e({message:`Unsupported secret provider: ${r.provider}`,provider:this.id,reference:t,code:`INVALID`});let i=r.path.split(`/`).filter(Boolean);if(i.length<3||i[0]!==`secretsmanager`)throw new e({message:`Expected secret reference format aws://secretsmanager/{region}/{secretIdOrArn}[?version=...]`,provider:this.id,reference:t,code:`INVALID`});let a=i[1],o=this.resolveRegion(a),s=i.slice(2).join(`/`);if(!s)throw new e({message:`Unable to resolve secret id from reference "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});return{region:o,secretId:s,version:r.extras?.version,stage:r.extras?.stage}}resolveRegion(t){let n=t??this.explicitRegion??process.env.AWS_REGION??process.env.AWS_DEFAULT_REGION;if(!n)throw new e({message:`AWS region must be provided either in reference (aws://secretsmanager/{region}/...) or via AWS_REGION/AWS_DEFAULT_REGION.`,provider:this.id,reference:`aws://secretsmanager//`,code:`INVALID`});return n}buildVersionSelector(e){return e?e===`latest`||e===`current`?{VersionStage:`AWSCURRENT`}:e.startsWith(`AWS`)?{VersionStage:e}:{VersionId:e}:{}}buildReference(e,t,n){let r=`aws://secretsmanager/${e}/${t}`,i=n?Object.entries(n).filter(([,e])=>!!e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join(`&`):``;return i?`${r}?${i}`:r}};function u(t,n,i){if(!t||typeof t!=`object`)throw new e({message:`Invalid AWS Secrets Manager response`,provider:i,reference:n,code:`UNKNOWN`,cause:t});let a=t;if(a.SecretBinary instanceof Uint8Array)return a.SecretBinary;if(typeof a.SecretBinary==`string`)return r.from(a.SecretBinary,`base64`);if(typeof a.SecretString==`string`)return r.from(a.SecretString,`utf-8`);throw new e({message:`AWS secret value is empty`,provider:i,reference:n,code:`NOT_FOUND`,cause:t})}function d(e){return e.startsWith(`arn:aws:secretsmanager:`)}function f(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.$metadata?.httpStatusCode==`number`?t.$metadata.httpStatusCode===404:t.name===`ResourceNotFoundException`}function p(t){let{error:n,provider:r,reference:i,operation:a}=t;if(n instanceof e)return n;let o=typeof n==`object`&&!!n&&`$metadata`in n&&typeof n.$metadata==`object`&&n.$metadata?.httpStatusCode,s=o===404?`NOT_FOUND`:o===401||o===403?`FORBIDDEN`:o===400?`INVALID`:`UNKNOWN`;return new e({message:n instanceof Error?n.message:`Unknown error during ${a}`,provider:r,reference:i,code:s,cause:n})}export{l as AwsSecretsManagerProvider};
@@ -1,2 +1 @@
1
- import{SecretProviderError as e,parseSecretUri as t}from"./provider.js";var n=class{id=`env`;aliases;constructor(e={}){this.aliases=e.aliases??{}}canHandle(e){let t=this.resolveEnvKey(e);return t!==void 0&&process.env[t]!==void 0}async getSecret(t){let n=this.resolveEnvKey(t);if(!n)throw new e({message:`Unable to resolve environment variable for reference "${t}".`,provider:this.id,reference:t,code:`INVALID`});let r=process.env[n];if(r===void 0)throw new e({message:`Environment variable "${n}" not found for reference "${t}".`,provider:this.id,reference:t,code:`NOT_FOUND`});return{data:Buffer.from(r,`utf-8`),version:`current`,metadata:{source:`env`,envKey:n},retrievedAt:new Date}}async setSecret(e,t){throw this.forbiddenError(`setSecret`,e)}async rotateSecret(e,t){throw this.forbiddenError(`rotateSecret`,e)}async deleteSecret(e){throw this.forbiddenError(`deleteSecret`,e)}resolveEnvKey(e){if(e){if(this.aliases[e])return this.aliases[e];if(!e.includes(`://`))return e;try{let n=t(e);return n.provider===`env`?n.path:n.extras?.env?n.extras.env:this.deriveEnvKey(n.path)}catch{return e}}}deriveEnvKey(e){if(e)return e.split(/[\/:\-\.]/).filter(Boolean).map(e=>e.replace(/[^a-zA-Z0-9]/g,`_`).replace(/_{2,}/g,`_`).toUpperCase()).join(`_`)}forbiddenError(t,n){return new e({message:`EnvSecretProvider is read-only. "${t}" is not allowed for ${n}.`,provider:this.id,reference:n,code:`FORBIDDEN`})}};export{n as EnvSecretProvider};
2
- //# sourceMappingURL=env-secret-provider.js.map
1
+ import{SecretProviderError as e,parseSecretUri as t}from"./provider.js";var n=class{id=`env`;aliases;constructor(e={}){this.aliases=e.aliases??{}}canHandle(e){let t=this.resolveEnvKey(e);return t!==void 0&&process.env[t]!==void 0}async getSecret(t){let n=this.resolveEnvKey(t);if(!n)throw new e({message:`Unable to resolve environment variable for reference "${t}".`,provider:this.id,reference:t,code:`INVALID`});let r=process.env[n];if(r===void 0)throw new e({message:`Environment variable "${n}" not found for reference "${t}".`,provider:this.id,reference:t,code:`NOT_FOUND`});return{data:Buffer.from(r,`utf-8`),version:`current`,metadata:{source:`env`,envKey:n},retrievedAt:new Date}}async setSecret(e,t){throw this.forbiddenError(`setSecret`,e)}async rotateSecret(e,t){throw this.forbiddenError(`rotateSecret`,e)}async deleteSecret(e){throw this.forbiddenError(`deleteSecret`,e)}resolveEnvKey(e){if(e){if(this.aliases[e])return this.aliases[e];if(!e.includes(`://`))return e;try{let n=t(e);return n.provider===`env`?n.path:n.extras?.env?n.extras.env:this.deriveEnvKey(n.path)}catch{return e}}}deriveEnvKey(e){if(e)return e.split(/[\/:\-\.]/).filter(Boolean).map(e=>e.replace(/[^a-zA-Z0-9]/g,`_`).replace(/_{2,}/g,`_`).toUpperCase()).join(`_`)}forbiddenError(t,n){return new e({message:`EnvSecretProvider is read-only. "${t}" is not allowed for ${n}.`,provider:this.id,reference:n,code:`FORBIDDEN`})}};export{n as EnvSecretProvider};
@@ -1,2 +1 @@
1
- import{SecretProviderError as e,normalizeSecretPayload as t,parseSecretUri as n}from"./provider.js";import{SecretManagerServiceClient as r,protos as i}from"@google-cloud/secret-manager";const a={automatic:{}};var o=class{id=`gcp-secret-manager`;client;explicitProjectId;replication;constructor(e={}){this.client=e.client??new r(e.clientOptions??{}),this.explicitProjectId=e.projectId,this.replication=e.defaultReplication??a}canHandle(e){try{return n(e).provider===`gcp`}catch{return!1}}async getSecret(t,n,r){let i=this.parseReference(t),a=this.buildVersionName(i,n?.version);try{let[n]=await this.client.accessSecretVersion({name:a},r??{}),i=n.payload;if(!i?.data)throw new e({message:`Secret payload empty for ${a}`,provider:this.id,reference:t,code:`UNKNOWN`});let o=s(n.name??a);return{data:i.data,version:o,metadata:i.dataCrc32c?{crc32c:i.dataCrc32c.toString()}:void 0,retrievedAt:new Date}}catch(e){throw c({error:e,provider:this.id,reference:t,operation:`access`})}}async setSecret(n,r){let i=this.parseReference(n),{secretName:a}=this.buildNames(i),o=t(r);await this.ensureSecretExists(i,r);try{let t=await this.client.addSecretVersion({parent:a,payload:{data:o}});if(!t)throw new e({message:`No version returned when adding secret version for ${a}`,provider:this.id,reference:n,code:`UNKNOWN`});let[r]=t,i=r?.name??`${a}/versions/latest`;return{reference:`gcp://${i}`,version:s(i)??`latest`}}catch(e){throw c({error:e,provider:this.id,reference:n,operation:`addSecretVersion`})}}async rotateSecret(e,t){return this.setSecret(e,t)}async deleteSecret(e){let t=this.parseReference(e),{secretName:n}=this.buildNames(t);try{await this.client.deleteSecret({name:n})}catch(t){throw c({error:t,provider:this.id,reference:e,operation:`delete`})}}parseReference(t){let r=n(t);if(r.provider!==`gcp`)throw new e({message:`Unsupported secret provider: ${r.provider}`,provider:this.id,reference:t,code:`INVALID`});let i=r.path.split(`/`).filter(Boolean);if(i.length<4||i[0]!==`projects`)throw new e({message:`Expected secret reference format gcp://projects/{project}/secrets/{secret}[(/versions/{version})] but received "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});let a=i[1]??this.explicitProjectId;if(!a)throw new e({message:`Unable to resolve project or secret from reference "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});let o=i.indexOf(`secrets`);if(o===-1||o+1>=i.length)throw new e({message:`Unable to resolve project or secret from reference "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});let s=a,c=i[o+1];if(!c)throw new e({message:`Unable to resolve secret ID from reference "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});let l=c,u=i.indexOf(`versions`);return{projectId:s,secretId:l,version:r.extras?.version??(u!==-1&&u+1<i.length?i[u+1]:void 0)}}buildNames(t){let n=t.projectId??this.explicitProjectId;if(!n)throw new e({message:`Project ID must be provided either in reference or provider configuration`,provider:this.id,reference:`gcp://projects//secrets/${t.secretId}`,code:`INVALID`});let r=`projects/${n}`;return{projectParent:r,secretName:`${r}/secrets/${t.secretId}`}}buildVersionName(e,t){let{secretName:n}=this.buildNames(e);return`${n}/versions/${t??e.version??`latest`}`}async ensureSecretExists(e,t){let{secretName:n,projectParent:r}=this.buildNames(e);try{await this.client.getSecret({name:n})}catch(i){let a=c({error:i,provider:this.id,reference:`gcp://${n}`,operation:`getSecret`,suppressThrow:!0});if(!a||a.code!==`NOT_FOUND`)throw a||i;try{await this.client.createSecret({parent:r,secretId:e.secretId,secret:{replication:this.replication,labels:t.labels}})}catch(e){throw c({error:e,provider:this.id,reference:`gcp://${n}`,operation:`createSecret`})}}}};function s(e){let t=e.split(`/`).filter(Boolean),n=t.indexOf(`versions`);if(!(n===-1||n+1>=t.length))return t[n+1]}function c(t){let{error:n,provider:r,reference:i,operation:a,suppressThrow:o}=t;if(n instanceof e)return n;let s=l(n),c=new e({message:n instanceof Error?n.message:`Unknown error during ${a}`,provider:r,reference:i,code:s,cause:n});if(o)return c;throw c}function l(e){if(typeof e!=`object`||!e)return`UNKNOWN`;let t=e.code;return t===5||t===`NOT_FOUND`?`NOT_FOUND`:t===6||t===`ALREADY_EXISTS`?`INVALID`:t===7||t===`PERMISSION_DENIED`||t===403?`FORBIDDEN`:t===3||t===`INVALID_ARGUMENT`?`INVALID`:`UNKNOWN`}export{o as GcpSecretManagerProvider};
2
- //# sourceMappingURL=gcp-secret-manager.js.map
1
+ import{SecretProviderError as e,normalizeSecretPayload as t,parseSecretUri as n}from"./provider.js";import{SecretManagerServiceClient as r}from"@google-cloud/secret-manager";const i={automatic:{}};var a=class{id=`gcp-secret-manager`;client;explicitProjectId;replication;constructor(e={}){this.client=e.client??new r(e.clientOptions??{}),this.explicitProjectId=e.projectId,this.replication=e.defaultReplication??i}canHandle(e){try{return n(e).provider===`gcp`}catch{return!1}}async getSecret(t,n,r){let i=this.parseReference(t),a=this.buildVersionName(i,n?.version);try{let[n]=await this.client.accessSecretVersion({name:a},r??{}),i=n.payload;if(!i?.data)throw new e({message:`Secret payload empty for ${a}`,provider:this.id,reference:t,code:`UNKNOWN`});let s=o(n.name??a);return{data:i.data,version:s,metadata:i.dataCrc32c?{crc32c:i.dataCrc32c.toString()}:void 0,retrievedAt:new Date}}catch(e){throw s({error:e,provider:this.id,reference:t,operation:`access`})}}async setSecret(n,r){let i=this.parseReference(n),{secretName:a}=this.buildNames(i),c=t(r);await this.ensureSecretExists(i,r);try{let t=await this.client.addSecretVersion({parent:a,payload:{data:c}});if(!t)throw new e({message:`No version returned when adding secret version for ${a}`,provider:this.id,reference:n,code:`UNKNOWN`});let[r]=t,i=r?.name??`${a}/versions/latest`;return{reference:`gcp://${i}`,version:o(i)??`latest`}}catch(e){throw s({error:e,provider:this.id,reference:n,operation:`addSecretVersion`})}}async rotateSecret(e,t){return this.setSecret(e,t)}async deleteSecret(e){let t=this.parseReference(e),{secretName:n}=this.buildNames(t);try{await this.client.deleteSecret({name:n})}catch(t){throw s({error:t,provider:this.id,reference:e,operation:`delete`})}}parseReference(t){let r=n(t);if(r.provider!==`gcp`)throw new e({message:`Unsupported secret provider: ${r.provider}`,provider:this.id,reference:t,code:`INVALID`});let i=r.path.split(`/`).filter(Boolean);if(i.length<4||i[0]!==`projects`)throw new e({message:`Expected secret reference format gcp://projects/{project}/secrets/{secret}[(/versions/{version})] but received "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});let a=i[1]??this.explicitProjectId;if(!a)throw new e({message:`Unable to resolve project or secret from reference "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});let o=i.indexOf(`secrets`);if(o===-1||o+1>=i.length)throw new e({message:`Unable to resolve project or secret from reference "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});let s=a,c=i[o+1];if(!c)throw new e({message:`Unable to resolve secret ID from reference "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});let l=c,u=i.indexOf(`versions`);return{projectId:s,secretId:l,version:r.extras?.version??(u!==-1&&u+1<i.length?i[u+1]:void 0)}}buildNames(t){let n=t.projectId??this.explicitProjectId;if(!n)throw new e({message:`Project ID must be provided either in reference or provider configuration`,provider:this.id,reference:`gcp://projects//secrets/${t.secretId}`,code:`INVALID`});let r=`projects/${n}`;return{projectParent:r,secretName:`${r}/secrets/${t.secretId}`}}buildVersionName(e,t){let{secretName:n}=this.buildNames(e);return`${n}/versions/${t??e.version??`latest`}`}async ensureSecretExists(e,t){let{secretName:n,projectParent:r}=this.buildNames(e);try{await this.client.getSecret({name:n})}catch(i){let a=s({error:i,provider:this.id,reference:`gcp://${n}`,operation:`getSecret`,suppressThrow:!0});if(!a||a.code!==`NOT_FOUND`)throw a||i;try{await this.client.createSecret({parent:r,secretId:e.secretId,secret:{replication:this.replication,labels:t.labels}})}catch(e){throw s({error:e,provider:this.id,reference:`gcp://${n}`,operation:`createSecret`})}}}};function o(e){let t=e.split(`/`).filter(Boolean),n=t.indexOf(`versions`);if(!(n===-1||n+1>=t.length))return t[n+1]}function s(t){let{error:n,provider:r,reference:i,operation:a,suppressThrow:o}=t;if(n instanceof e)return n;let s=c(n),l=new e({message:n instanceof Error?n.message:`Unknown error during ${a}`,provider:r,reference:i,code:s,cause:n});if(o)return l;throw l}function c(e){if(typeof e!=`object`||!e)return`UNKNOWN`;let t=e.code;return t===5||t===`NOT_FOUND`?`NOT_FOUND`:t===6||t===`ALREADY_EXISTS`?`INVALID`:t===7||t===`PERMISSION_DENIED`||t===403?`FORBIDDEN`:t===3||t===`INVALID_ARGUMENT`?`INVALID`:`UNKNOWN`}export{a as GcpSecretManagerProvider};
@@ -1 +1 @@
1
- import{SecretProviderError as e,normalizeSecretPayload as t,parseSecretUri as n}from"./provider.js";import{GcpSecretManagerProvider as r}from"./gcp-secret-manager.js";import{EnvSecretProvider as i}from"./env-secret-provider.js";import{SecretProviderManager as a}from"./manager.js";export{i as EnvSecretProvider,r as GcpSecretManagerProvider,e as SecretProviderError,a as SecretProviderManager,t as normalizeSecretPayload,n as parseSecretUri};
1
+ import{SecretProviderError as e,normalizeSecretPayload as t,parseSecretUri as n}from"./provider.js";import{AwsSecretsManagerProvider as r}from"./aws-secret-manager.js";import{EnvSecretProvider as i}from"./env-secret-provider.js";import{GcpSecretManagerProvider as a}from"./gcp-secret-manager.js";import{ScalewaySecretManagerProvider as o}from"./scaleway-secret-manager.js";import{SecretProviderManager as s}from"./manager.js";export{r as AwsSecretsManagerProvider,i as EnvSecretProvider,a as GcpSecretManagerProvider,o as ScalewaySecretManagerProvider,e as SecretProviderError,s as SecretProviderManager,t as normalizeSecretPayload,n as parseSecretUri};
@@ -1,2 +1 @@
1
- import{SecretProviderError as e}from"./provider.js";var t=class{id;providers=[];registrationCounter=0;constructor(e={}){this.id=e.id??`secret-provider-manager`;let t=e.providers??[];for(let e of t)this.register(e.provider,{priority:e.priority})}register(e,t={}){return this.providers.push({provider:e,priority:t.priority??0,order:this.registrationCounter++}),this.providers.sort((e,t)=>e.priority===t.priority?e.order-t.order:t.priority-e.priority),this}canHandle(e){return this.providers.some(({provider:t})=>n(t,e))}async getSecret(t,r){let i=[];for(let{provider:a}of this.providers)if(n(a,t))try{return await a.getSecret(t,r)}catch(t){if(t instanceof e){if(i.push(t),t.code!==`NOT_FOUND`)break;continue}throw t}throw this.composeError(`getSecret`,t,i,r?.version)}async setSecret(e,t){return this.delegateToFirst(`setSecret`,e,n=>n.setSecret(e,t))}async rotateSecret(e,t){return this.delegateToFirst(`rotateSecret`,e,n=>n.rotateSecret(e,t))}async deleteSecret(e){await this.delegateToFirst(`deleteSecret`,e,t=>t.deleteSecret(e))}async delegateToFirst(t,r,i){let a=[];for(let{provider:t}of this.providers)if(n(t,r))try{return await i(t)}catch(t){if(t instanceof e){a.push(t);continue}throw t}throw this.composeError(t,r,a)}composeError(t,n,r,i){if(r.length===1){let[e]=r;if(e)return e}let a=[`No registered secret provider could ${t}`,`reference "${n}"`];return i&&a.push(`(version: ${i})`),r.length>1&&a.push(`Attempts: ${r.map(e=>`${e.provider}:${e.code}`).join(`, `)}`),new e({message:a.join(` `),provider:this.id,reference:n,code:r.length>0?r[r.length-1].code:`UNKNOWN`,cause:r})}};function n(e,t){try{return e.canHandle(t)}catch{return!1}}export{t as SecretProviderManager};
2
- //# sourceMappingURL=manager.js.map
1
+ import{SecretProviderError as e}from"./provider.js";var t=class{id;providers=[];registrationCounter=0;constructor(e={}){this.id=e.id??`secret-provider-manager`;let t=e.providers??[];for(let e of t)this.register(e.provider,{priority:e.priority})}register(e,t={}){return this.providers.push({provider:e,priority:t.priority??0,order:this.registrationCounter++}),this.providers.sort((e,t)=>e.priority===t.priority?e.order-t.order:t.priority-e.priority),this}canHandle(e){return this.providers.some(({provider:t})=>n(t,e))}async getSecret(t,r){let i=[];for(let{provider:a}of this.providers)if(n(a,t))try{return await a.getSecret(t,r)}catch(t){if(t instanceof e){if(i.push(t),t.code!==`NOT_FOUND`)break;continue}throw t}throw this.composeError(`getSecret`,t,i,r?.version)}async setSecret(e,t){return this.delegateToFirst(`setSecret`,e,n=>n.setSecret(e,t))}async rotateSecret(e,t){return this.delegateToFirst(`rotateSecret`,e,n=>n.rotateSecret(e,t))}async deleteSecret(e){await this.delegateToFirst(`deleteSecret`,e,t=>t.deleteSecret(e))}async delegateToFirst(t,r,i){let a=[];for(let{provider:t}of this.providers)if(n(t,r))try{return await i(t)}catch(t){if(t instanceof e){a.push(t);continue}throw t}throw this.composeError(t,r,a)}composeError(t,n,r,i){if(r.length===1){let[e]=r;if(e)return e}let a=[`No registered secret provider could ${t}`,`reference "${n}"`];return i&&a.push(`(version: ${i})`),r.length>1&&a.push(`Attempts: ${r.map(e=>`${e.provider}:${e.code}`).join(`, `)}`),new e({message:a.join(` `),provider:this.id,reference:n,code:r.length>0?r[r.length-1].code:`UNKNOWN`,cause:r})}};function n(e,t){try{return e.canHandle(t)}catch{return!1}}export{t as SecretProviderManager};
@@ -1,2 +1 @@
1
- import{Buffer as e}from"node:buffer";var t=class extends Error{provider;reference;code;cause;constructor(e){super(e.message),this.name=`SecretProviderError`,this.provider=e.provider,this.reference=e.reference,this.code=e.code??`UNKNOWN`,this.cause=e.cause}};function n(e){if(!e)throw new t({message:`Secret reference cannot be empty`,provider:`unknown`,reference:e,code:`INVALID`});let[n,r]=e.split(`://`);if(!n||!r)throw new t({message:`Invalid secret reference: ${e}`,provider:`unknown`,reference:e,code:`INVALID`});let i=r.indexOf(`?`);if(i===-1)return{provider:n,path:r};let a=r.slice(0,i),o=r.slice(i+1);return{provider:n,path:a,extras:Object.fromEntries(o.split(`&`).filter(Boolean).map(e=>{let[t,n]=e.split(`=`),r=t??``,i=n??``;return[decodeURIComponent(r),decodeURIComponent(i)]}))}}function r(t){return t.data instanceof Uint8Array?t.data:t.encoding===`base64`?e.from(t.data,`base64`):t.encoding===`binary`?e.from(t.data,`binary`):e.from(t.data,`utf-8`)}export{t as SecretProviderError,r as normalizeSecretPayload,n as parseSecretUri};
2
- //# sourceMappingURL=provider.js.map
1
+ import{Buffer as e}from"node:buffer";var t=class extends Error{provider;reference;code;cause;constructor(e){super(e.message),this.name=`SecretProviderError`,this.provider=e.provider,this.reference=e.reference,this.code=e.code??`UNKNOWN`,this.cause=e.cause}};function n(e){if(!e)throw new t({message:`Secret reference cannot be empty`,provider:`unknown`,reference:e,code:`INVALID`});let[n,r]=e.split(`://`);if(!n||!r)throw new t({message:`Invalid secret reference: ${e}`,provider:`unknown`,reference:e,code:`INVALID`});let i=r.indexOf(`?`);if(i===-1)return{provider:n,path:r};let a=r.slice(0,i),o=r.slice(i+1);return{provider:n,path:a,extras:Object.fromEntries(o.split(`&`).filter(Boolean).map(e=>{let[t,n]=e.split(`=`),r=t??``,i=n??``;return[decodeURIComponent(r),decodeURIComponent(i)]}))}}function r(t){return t.data instanceof Uint8Array?t.data:t.encoding===`base64`?e.from(t.data,`base64`):t.encoding===`binary`?e.from(t.data,`binary`):e.from(t.data,`utf-8`)}export{t as SecretProviderError,r as normalizeSecretPayload,n as parseSecretUri};
@@ -0,0 +1 @@
1
+ import{SecretProviderError as e,normalizeSecretPayload as t,parseSecretUri as n}from"./provider.js";import{Buffer as r}from"node:buffer";const i=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var a=class{id=`scaleway-secret-manager`;token;defaultRegion;defaultProjectId;baseUrl;fetchFn;constructor(e={}){this.token=e.token??process.env.SCW_SECRET_KEY??process.env.SCALEWAY_SECRET_KEY??``,this.defaultRegion=e.defaultRegion??process.env.SCW_DEFAULT_REGION??process.env.SCW_REGION,this.defaultProjectId=e.defaultProjectId??process.env.SCW_DEFAULT_PROJECT_ID??process.env.SCW_PROJECT_ID,this.baseUrl=e.baseUrl??`https://api.scaleway.com`,this.fetchFn=e.fetch??fetch}canHandle(e){try{let t=n(e);return t.provider===`scw`&&(t.path===`secret-manager`||t.path.startsWith(`secret-manager/`))}catch{return!1}}async getSecret(t,n){let a=this.parseReference(t);if(!this.token)throw new e({message:`Scaleway secret manager token is missing (set SCW_SECRET_KEY / SCALEWAY_SECRET_KEY).`,provider:this.id,reference:t,code:`FORBIDDEN`});if(!i.test(a.secretIdOrName))throw new e({message:`Scaleway getSecret requires a secretId (uuid) reference, not a secret name.`,provider:this.id,reference:t,code:`INVALID`});let s=n?.version??a.revision??`latest`,c=`${this.baseUrl}/secret-manager/v1beta1/regions/${encodeURIComponent(a.region)}/secrets/${encodeURIComponent(a.secretIdOrName)}/versions/${encodeURIComponent(s)}/access`,u=await this.fetchFn(c,{method:`GET`,headers:{"X-Auth-Token":this.token}});if(!u.ok)throw await l({response:u,provider:this.id,reference:t,operation:`getSecret`});let d=o(await u.json());return{data:r.from(d,`base64`),version:s,metadata:{region:a.region,secretId:a.secretIdOrName},retrievedAt:new Date}}async setSecret(n,a){let o=this.parseReference(n);if(!this.token)throw new e({message:`Scaleway secret manager token is missing (set SCW_SECRET_KEY / SCALEWAY_SECRET_KEY).`,provider:this.id,reference:n,code:`FORBIDDEN`});let s=t(a),c=r.from(s).toString(`base64`),l=i.test(o.secretIdOrName)?o.secretIdOrName:await this.createSecret({region:o.region,name:o.secretIdOrName,reference:n}),u=await this.createSecretVersion({region:o.region,secretId:l,dataB64:c,reference:n});return{reference:this.buildReference(o.region,l,{version:u}),version:u}}async rotateSecret(e,t){return this.setSecret(e,t)}async deleteSecret(t){let n=this.parseReference(t);if(!this.token)throw new e({message:`Scaleway secret manager token is missing (set SCW_SECRET_KEY / SCALEWAY_SECRET_KEY).`,provider:this.id,reference:t,code:`FORBIDDEN`});if(!i.test(n.secretIdOrName))throw new e({message:`Scaleway deleteSecret requires a secretId (uuid) reference, not a secret name.`,provider:this.id,reference:t,code:`INVALID`});let r=`${this.baseUrl}/secret-manager/v1beta1/regions/${encodeURIComponent(n.region)}/secrets/${encodeURIComponent(n.secretIdOrName)}`,a=await this.fetchFn(r,{method:`DELETE`,headers:{"X-Auth-Token":this.token}});if(!a.ok)throw await l({response:a,provider:this.id,reference:t,operation:`deleteSecret`})}parseReference(t){let r=n(t);if(r.provider!==`scw`)throw new e({message:`Unsupported secret provider: ${r.provider}`,provider:this.id,reference:t,code:`INVALID`});let i=r.path.split(`/`).filter(Boolean);if(i.length<2||i[0]!==`secret-manager`)throw new e({message:`Expected secret reference format scw://secret-manager/{region}/{secretIdOrName}[?version=...]`,provider:this.id,reference:t,code:`INVALID`});let a=i[1]??this.defaultRegion;if(!a)throw new e({message:`Scaleway region must be provided either in reference (scw://secret-manager/{region}/...) or via SCW_DEFAULT_REGION/SCW_REGION.`,provider:this.id,reference:t,code:`INVALID`});let o=i.slice(2).join(`/`);if(!o)throw new e({message:`Unable to resolve secret id/name from reference "${r.path}"`,provider:this.id,reference:t,code:`INVALID`});return{region:a,secretIdOrName:o,revision:r.extras?.version}}async createSecret(t){let n=this.defaultProjectId;if(!n)throw new e({message:`Scaleway project id is required to create secrets by name (set SCW_DEFAULT_PROJECT_ID/SCW_PROJECT_ID).`,provider:this.id,reference:t.reference,code:`INVALID`});let r=`${this.baseUrl}/secret-manager/v1beta1/regions/${encodeURIComponent(t.region)}/secrets`,i=await this.fetchFn(r,{method:`POST`,headers:{"Content-Type":`application/json`,"X-Auth-Token":this.token},body:JSON.stringify({name:t.name,project_id:n})});if(!i.ok)throw await l({response:i,provider:this.id,reference:t.reference,operation:`createSecret`});return s(await i.json())}async createSecretVersion(e){let t=`${this.baseUrl}/secret-manager/v1beta1/regions/${encodeURIComponent(e.region)}/secrets/${encodeURIComponent(e.secretId)}/versions`,n=await this.fetchFn(t,{method:`POST`,headers:{"Content-Type":`application/json`,"X-Auth-Token":this.token},body:JSON.stringify({data:e.dataB64})});if(!n.ok)throw await l({response:n,provider:this.id,reference:e.reference,operation:`createSecretVersion`});return c(await n.json())??`latest`}buildReference(e,t,n){let r=`scw://secret-manager/${e}/${t}`,i=n?Object.entries(n).filter(([,e])=>!!e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join(`&`):``;return i?`${r}?${i}`:r}};function o(e){if(!e||typeof e!=`object`)throw Error(`Invalid scaleway secret payload`);let t=e;if(typeof t.data==`string`&&t.data)return t.data;throw Error(`Scaleway secret payload is missing data`)}function s(e){if(!e||typeof e!=`object`)throw Error(`Invalid scaleway createSecret payload`);let t=e;if(typeof t.id==`string`&&t.id)return t.id;throw Error(`Scaleway createSecret response is missing id`)}function c(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.revision==`number`)return String(t.revision);if(typeof t.revision==`string`&&t.revision)return t.revision;if(typeof t.id==`string`&&t.id)return t.id}async function l(t){let{response:n,provider:r,reference:i,operation:a}=t,o=n.status===404?`NOT_FOUND`:n.status===401||n.status===403?`FORBIDDEN`:n.status>=400&&n.status<500?`INVALID`:`UNKNOWN`,s=await u(n);return new e({message:s?`Scaleway Secret Manager ${a} failed (${n.status}): ${s}`:`Scaleway Secret Manager ${a} failed (${n.status})`,provider:r,reference:i,code:o})}async function u(e){try{let t=(await e.text()).trim();return t.length?t:void 0}catch{return}}export{a as ScalewaySecretManagerProvider};
@@ -1,2 +1 @@
1
- const e=e=>`${e.key}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate IntegrationSpec ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(t,n){if(n!=null)return this.items.get(e({key:t,version:n}));let r,i=-1/0;for(let e of this.items.values())e.meta.key===t&&e.meta.version>i&&(i=e.meta.version,r=e);return r}getByCategory(e){return this.list().filter(t=>t.meta.category===e)}};function n(t){return e(t)}export{t as IntegrationSpecRegistry,n as makeIntegrationSpecKey};
2
- //# sourceMappingURL=spec.js.map
1
+ const e=e=>`${e.key}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate IntegrationSpec ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(t,n){if(n!=null)return this.items.get(e({key:t,version:n}));let r,i=-1/0;for(let e of this.items.values())e.meta.key===t&&e.meta.version>i&&(i=e.meta.version,r=e);return r}getByCategory(e){return this.list().filter(t=>t.meta.category===e)}};function n(t){return e(t)}export{t as IntegrationSpecRegistry,n as makeIntegrationSpecKey};
@@ -0,0 +1 @@
1
+ function e(e,t){e.register(t.type,async e=>{let n=t.schema.parse(e.payload);await t.handler(n,e)})}export{e as registerDefinedJob};
@@ -1,2 +1 @@
1
- import{randomUUID as e}from"node:crypto";var t=class{handlers=new Map;constructor(e){this.options=e}async enqueue(t,n,r={}){let i=r.delaySeconds==null?void 0:{seconds:Math.floor(Date.now()/1e3)+r.delaySeconds},a=Buffer.from(JSON.stringify({id:e(),type:t,payload:n}),`utf-8`);return await this.options.client.createTask({parent:`projects/${this.options.projectId}/locations/${this.options.location}/queues/${this.options.queue}`,task:{httpRequest:{httpMethod:`POST`,url:this.options.resolveUrl(t),body:a,headers:{"Content-Type":`application/json`},oidcToken:this.options.serviceAccountEmail?{serviceAccountEmail:this.options.serviceAccountEmail}:void 0},scheduleTime:i}}),{id:e(),type:t,payload:n,status:`pending`,attempts:0,createdAt:new Date,updatedAt:new Date}}register(e,t){this.handlers.set(e,t)}start(){}async stop(){this.handlers.clear()}};export{t as GcpCloudTasksQueue};
2
- //# sourceMappingURL=gcp-cloud-tasks.js.map
1
+ import{DEFAULT_RETRY_POLICY as e}from"./queue.js";import{randomUUID as t}from"node:crypto";var n=class{handlers=new Map;constructor(e){this.options=e}async enqueue(n,r,i={}){let a=i.delaySeconds==null?void 0:{seconds:Math.floor(Date.now()/1e3)+i.delaySeconds},o=Buffer.from(JSON.stringify({id:t(),type:n,payload:r}),`utf-8`);return await this.options.client.createTask({parent:`projects/${this.options.projectId}/locations/${this.options.location}/queues/${this.options.queue}`,task:{httpRequest:{httpMethod:`POST`,url:this.options.resolveUrl(n),body:o,headers:{"Content-Type":`application/json`},oidcToken:this.options.serviceAccountEmail?{serviceAccountEmail:this.options.serviceAccountEmail}:void 0},scheduleTime:a}}),{id:t(),type:n,version:1,payload:r,status:`pending`,priority:i.priority??0,attempts:0,maxRetries:i.maxRetries??e.maxRetries,createdAt:new Date,updatedAt:new Date}}register(e,t){this.handlers.set(e,t)}start(){}async stop(){this.handlers.clear()}};export{n as GcpCloudTasksQueue};
@@ -1,2 +1 @@
1
- import{randomUUID as e}from"node:crypto";var t=class{handlers=new Map;constructor(e){this.options=e}async enqueue(t,n,r={}){return await this.options.client.topic(this.options.topicName).publishMessage({data:Buffer.from(JSON.stringify({id:e(),type:t,payload:n}),`utf-8`)}),{id:e(),type:t,payload:n,status:`pending`,attempts:0,createdAt:new Date,updatedAt:new Date}}register(e,t){this.handlers.set(e,t)}start(){}async stop(){this.handlers.clear()}};export{t as GcpPubSubQueue};
2
- //# sourceMappingURL=gcp-pubsub.js.map
1
+ import{DEFAULT_RETRY_POLICY as e}from"./queue.js";import{randomUUID as t}from"node:crypto";var n=class{handlers=new Map;constructor(e){this.options=e}async enqueue(n,r,i={}){return await this.options.client.topic(this.options.topicName).publishMessage({data:Buffer.from(JSON.stringify({id:t(),type:n,payload:r}),`utf-8`)}),{id:t(),type:n,version:1,payload:r,status:`pending`,priority:i.priority??0,attempts:0,maxRetries:i.maxRetries??e.maxRetries,createdAt:new Date,updatedAt:new Date}}register(e,t){this.handlers.set(e,t)}start(){}async stop(){this.handlers.clear()}};export{n as GcpPubSubQueue};
@@ -1,2 +1 @@
1
- function e(e){return async t=>{await e.syncThreads(t.payload)}}export{e as createGmailSyncHandler};
2
- //# sourceMappingURL=gmail-sync-handler.js.map
1
+ function e(e){return async t=>{await e.syncThreads(t.payload)}}export{e as createGmailSyncHandler};
@@ -1 +1 @@
1
- import{createGmailSyncHandler as e}from"./gmail-sync-handler.js";import{createStorageDocumentHandler as t}from"./storage-document-handler.js";export{e as createGmailSyncHandler,t as createStorageDocumentHandler};
1
+ import{registerDefinedJob as e}from"../define-job.js";import{createGmailSyncHandler as t}from"./gmail-sync-handler.js";import{PING_JOB_TYPE as n,PingPayloadSchema as r,pingJob as i}from"./ping-handler.js";import{createStorageDocumentHandler as a}from"./storage-document-handler.js";function o(t){e(t,i)}export{n as PING_JOB_TYPE,r as PingPayloadSchema,t as createGmailSyncHandler,a as createStorageDocumentHandler,i as pingJob,o as registerAllJobs};
@@ -0,0 +1 @@
1
+ import*as e from"zod";const t=`core.ping`,n=e.object({}),r={type:t,schema:n,handler:async(e,t)=>{console.log(`[ping] job id=%s attempts=%d`,t.id,t.attempts)}};export{t as PING_JOB_TYPE,n as PingPayloadSchema,r as pingJob};
@@ -1,2 +1 @@
1
- function e(e,t){return async n=>{let r=await e.getObject({bucket:n.payload.bucket,key:n.payload.key});if(!r)throw Error(`Object ${n.payload.bucket}/${n.payload.key} not found`);await t.ingestObject(r)}}export{e as createStorageDocumentHandler};
2
- //# sourceMappingURL=storage-document-handler.js.map
1
+ function e(e,t){return async n=>{let r=await e.getObject({bucket:n.payload.bucket,key:n.payload.key});if(!r)throw Error(`Object ${n.payload.bucket}/${n.payload.key} not found`);await t.ingestObject(r)}}export{e as createStorageDocumentHandler};
@@ -1 +1 @@
1
- import{GcpCloudTasksQueue as e}from"./gcp-cloud-tasks.js";import{GcpPubSubQueue as t}from"./gcp-pubsub.js";import{MemoryJobQueue as n}from"./memory-queue.js";import{createGmailSyncHandler as r}from"./handlers/gmail-sync-handler.js";import{createStorageDocumentHandler as i}from"./handlers/storage-document-handler.js";export{e as GcpCloudTasksQueue,t as GcpPubSubQueue,n as MemoryJobQueue,r as createGmailSyncHandler,i as createStorageDocumentHandler};
1
+ import{registerDefinedJob as e}from"./define-job.js";import{DEFAULT_RETRY_POLICY as t,calculateBackoff as n,defineJobType as r}from"./queue.js";export{t as DEFAULT_RETRY_POLICY,n as calculateBackoff,r as defineJobType,e as registerDefinedJob};
@@ -1,2 +1 @@
1
- import{randomUUID as e}from"node:crypto";var t=class{jobs=[];handlers=new Map;timer;processing=!1;constructor(e=200){this.pollIntervalMs=e}async enqueue(t,n,r={}){let i={id:e(),type:t,payload:n,status:`pending`,attempts:0,createdAt:new Date,updatedAt:new Date};return r.delaySeconds&&(i.updatedAt=new Date(Date.now()+r.delaySeconds*1e3)),this.jobs.push(i),i}register(e,t){this.handlers.set(e,t)}start(){this.timer||=setInterval(()=>{this.processNext()},this.pollIntervalMs)}async stop(){for(this.timer&&=(clearInterval(this.timer),void 0);this.processing;)await new Promise(e=>setTimeout(e,10))}async processNext(){if(this.processing)return;let e=this.jobs.find(e=>e.status===`pending`&&e.updatedAt<=new Date);if(!e)return;let t=this.handlers.get(e.type);if(t){this.processing=!0,e.status=`running`,e.updatedAt=new Date,e.attempts+=1;try{await t(e),e.status=`completed`,e.updatedAt=new Date}catch(t){e.status=`failed`,e.lastError=t instanceof Error?t.message:`Unknown job error`,e.updatedAt=new Date}finally{this.processing=!1}}}};export{t as MemoryJobQueue};
2
- //# sourceMappingURL=memory-queue.js.map
1
+ import{DEFAULT_RETRY_POLICY as e}from"./queue.js";import{randomUUID as t}from"node:crypto";var n=class{jobs=[];handlers=new Map;timer;processing=!1;constructor(e=200){this.pollIntervalMs=e}async enqueue(n,r,i={}){let a={id:t(),type:n,version:1,payload:r,status:`pending`,priority:i.priority??0,attempts:0,maxRetries:i.maxRetries??e.maxRetries,createdAt:new Date,updatedAt:new Date};return i.delaySeconds&&(a.updatedAt=new Date(Date.now()+i.delaySeconds*1e3)),this.jobs.push(a),a}register(e,t){this.handlers.set(e,t)}start(){this.timer||=setInterval(()=>{this.processNext()},this.pollIntervalMs)}async stop(){for(this.timer&&=(clearInterval(this.timer),void 0);this.processing;)await new Promise(e=>setTimeout(e,10))}async processNext(){if(this.processing)return;let e=this.jobs.find(e=>e.status===`pending`&&e.updatedAt<=new Date);if(!e)return;let t=this.handlers.get(e.type);if(t){this.processing=!0,e.status=`running`,e.updatedAt=new Date,e.attempts+=1;try{await t(e),e.status=`completed`,e.updatedAt=new Date}catch(t){e.status=`failed`,e.lastError=t instanceof Error?t.message:`Unknown job error`,e.updatedAt=new Date}finally{this.processing=!1}}}};export{n as MemoryJobQueue};
@@ -0,0 +1 @@
1
+ import"zod";const e={maxRetries:3,initialBackoffMs:1e3,maxBackoffMs:6e4,multiplier:2,jitter:!0};function t(t,n=e){let r=Math.min(n.initialBackoffMs*n.multiplier**(t-1),n.maxBackoffMs);if(n.jitter){let e=.8+Math.random()*.4;return Math.floor(r*e)}return r}function n(e){return e}export{e as DEFAULT_RETRY_POLICY,t as calculateBackoff,n as defineJobType};
@@ -0,0 +1 @@
1
+ import{DEFAULT_RETRY_POLICY as e}from"./queue.js";import{randomUUID as t}from"crypto";import{DeleteMessageCommand as n,ReceiveMessageCommand as r,SQSClient as i,SendMessageCommand as a}from"@aws-sdk/client-sqs";var o=class{sqs;queueUrl;waitTimeSeconds;maxNumberOfMessages;visibilityTimeoutSeconds;handlers=new Map;running=!1;constructor(e){let t=process.env.SCALEWAY_ACCESS_KEY_QUEUE,n=process.env.SCALEWAY_SECRET_KEY_QUEUE;if(!t||!n)throw Error(`Missing SCALEWAY_ACCESS_KEY_QUEUE / SCALEWAY_SECRET_KEY_QUEUE in env`);this.sqs=new i({region:e.region??process.env.SCALEWAY_REGION??`par`,endpoint:`https://sqs.mnq.fr-par.scaleway.com`,credentials:{accessKeyId:t,secretAccessKey:n}}),this.queueUrl=e.queueUrl,this.waitTimeSeconds=e.waitTimeSeconds??20,this.maxNumberOfMessages=e.maxNumberOfMessages??5,this.visibilityTimeoutSeconds=e.visibilityTimeoutSeconds??60}async enqueue(n,r,i={}){let o=t(),s=new Date,c={id:o,type:n,payload:r};return await this.sqs.send(new a({QueueUrl:this.queueUrl,MessageBody:JSON.stringify(c),DelaySeconds:i.delaySeconds??0})),{id:o,type:n,version:1,payload:r,status:`pending`,priority:i.priority??0,attempts:0,maxRetries:i.maxRetries??e.maxRetries,createdAt:s,updatedAt:s}}register(e,t){if(this.handlers.has(e))throw Error(`Handler already registered for job type "${e}"`);this.handlers.set(e,t)}start(){this.running||(this.running=!0,this.pollLoop().catch(e=>{console.error(`[queue] Fatal error in poll loop`,e),process.exit(1)}))}async stop(){this.running=!1}async pollLoop(){for(console.log(`[queue] SQS worker started for queue:`,this.queueUrl);this.running;)try{let t=(await this.sqs.send(new r({QueueUrl:this.queueUrl,MaxNumberOfMessages:this.maxNumberOfMessages,WaitTimeSeconds:this.waitTimeSeconds,VisibilityTimeout:this.visibilityTimeoutSeconds,MessageSystemAttributeNames:[`ApproximateReceiveCount`]}))).Messages??[];if(t.length===0)continue;for(let n of t){if(!n.Body||!n.ReceiptHandle){console.warn(`[queue] Message missing Body or ReceiptHandle`,n.MessageId);continue}let t;try{t=JSON.parse(n.Body)}catch(e){console.error(`[queue] Failed to parse message body (id=${n.MessageId}), deleting`,e),await this.deleteMessage(n.ReceiptHandle);continue}let r=this.handlers.get(t.type);if(!r){console.error(`[queue] No handler registered for type "${t.type}", deleting message`),await this.deleteMessage(n.ReceiptHandle);continue}let i=new Date,a=parseInt(n.Attributes?.ApproximateReceiveCount??`1`,10),o={id:t.id,type:t.type,version:1,payload:t.payload,status:`pending`,priority:0,attempts:a,maxRetries:e.maxRetries,createdAt:i,updatedAt:i};o.status=`running`,o.updatedAt=new Date;try{await r(o),o.status=`completed`,o.updatedAt=new Date,await this.deleteMessage(n.ReceiptHandle)}catch(e){o.status=`failed`,o.lastError=e instanceof Error?e.message:`Unknown job error`,o.updatedAt=new Date,console.error(`[queue] Error while handling job type=${o.type} id=${o.id}`,e)}}}catch(e){e&&typeof e==`object`&&`$response`in e?console.error(`[queue] Error while polling SQS`,e,e.$response):console.error(`[queue] Error while polling SQS`,e),await this.sleep(5e3)}console.log(`[queue] SQS worker stopped`)}async deleteMessage(e){try{await this.sqs.send(new n({QueueUrl:this.queueUrl,ReceiptHandle:e}))}catch(e){console.error(`[queue] Failed to delete message`,e)}}async sleep(e){await new Promise(t=>setTimeout(t,e))}};export{o as ScalewaySqsJobQueue};
@@ -1,2 +1 @@
1
- import e from"zod";function t(t){return{input:t.io.input?e.toJSONSchema(t.io.input.getZod()):null,output:t.io.output?e.toJSONSchema(t.io.output.getZod()):null,meta:{name:t.meta.name,version:t.meta.version,kind:t.meta.kind,description:t.meta.description,tags:t.meta.tags??[],stability:t.meta.stability??`stable`}}}function n(e,t){return`/${e.replace(/\./g,`/`)}/v${t}`}function r(e,t){return`${e}.v${t}`}function i(e,t){return`${e.replace(/\./g,`_`)}_v${t}`}export{i as defaultGqlField,r as defaultMcpTool,n as defaultRestPath,t as jsonSchemaForSpec};
2
- //# sourceMappingURL=jsonschema.js.map
1
+ import e from"zod";function t(t){return{input:t.io.input?e.toJSONSchema(t.io.input.getZod()):null,output:t.io.output?e.toJSONSchema(t.io.output.getZod()):null,meta:{name:t.meta.name,version:t.meta.version,kind:t.meta.kind,description:t.meta.description,tags:t.meta.tags??[],stability:t.meta.stability??`stable`}}}function n(e,t){return`/${e.replace(/\./g,`/`)}/v${t}`}function r(e,t){return`${e}.v${t}`}function i(e,t){return`${e.replace(/\./g,`_`)}_v${t}`}export{i as defaultGqlField,r as defaultMcpTool,n as defaultRestPath,t as jsonSchemaForSpec};
@@ -1,2 +1 @@
1
- import{l as e}from"../schema/dist/ScalarTypeEnum.js";import{t}from"../schema/dist/SchemaModel.js";import"../schema/dist/index.js";import{defineCommand as n,defineQuery as r}from"../spec.js";const i=new t({name:`KnowledgeSyncSchedule`,fields:{enabled:{type:e.Boolean(),isOptional:!1},cron:{type:e.String_unsecure(),isOptional:!0},intervalMs:{type:e.Int_unsecure(),isOptional:!0}}}),a=new t({name:`KnowledgeSourceRecord`,fields:{id:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},spaceKey:{type:e.NonEmptyString(),isOptional:!1},spaceVersion:{type:e.Int_unsecure(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!1},sourceType:{type:e.String_unsecure(),isOptional:!1},syncSchedule:{type:i,isOptional:!0},lastSyncStatus:{type:e.String_unsecure(),isOptional:!0},lastSyncAt:{type:e.DateTime(),isOptional:!0},itemsProcessed:{type:e.Int_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!0},updatedAt:{type:e.DateTime(),isOptional:!0}}}),o=new t({name:`CreateKnowledgeSourceInput`,fields:{tenantId:{type:e.ID(),isOptional:!1},spaceKey:{type:e.NonEmptyString(),isOptional:!1},spaceVersion:{type:e.Int_unsecure(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!1},sourceType:{type:e.NonEmptyString(),isOptional:!1},config:{type:e.JSONObject(),isOptional:!1},syncSchedule:{type:i,isOptional:!0}}}),s=new t({name:`UpdateKnowledgeSourceInput`,fields:{sourceId:{type:e.ID(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!0},config:{type:e.JSONObject(),isOptional:!0},syncSchedule:{type:i,isOptional:!0}}}),c=new t({name:`DeleteKnowledgeSourceInput`,fields:{sourceId:{type:e.ID(),isOptional:!1}}}),l=new t({name:`DeleteKnowledgeSourceOutput`,fields:{success:{type:e.Boolean(),isOptional:!1}}}),u=new t({name:`ListKnowledgeSourcesInput`,fields:{tenantId:{type:e.ID(),isOptional:!1},spaceKey:{type:e.NonEmptyString(),isOptional:!0}}}),d=new t({name:`ListKnowledgeSourcesOutput`,fields:{sources:{type:a,isOptional:!1,isArray:!0}}}),f=new t({name:`TriggerKnowledgeSyncInput`,fields:{sourceId:{type:e.ID(),isOptional:!1}}}),p=new t({name:`TriggerKnowledgeSyncOutput`,fields:{success:{type:e.Boolean(),isOptional:!1},itemsProcessed:{type:e.Int_unsecure(),isOptional:!0},error:{type:e.String_unsecure(),isOptional:!0}}}),m=n({meta:{name:`knowledge.source.create`,version:1,description:`Create a knowledge source binding for a tenant.`,goal:`Onboard a new knowledge ingestion source such as Notion or uploads.`,context:`Used by Ops and App Studio to configure knowledge ingestion per tenant and space.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:o,output:a},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),h=n({meta:{name:`knowledge.source.update`,version:1,description:`Update metadata or configuration for a knowledge source.`,goal:`Allow rotation of credentials, sync schedules, and labels.`,context:`Supports editing how a tenant ingests knowledge (e.g., toggling sync cadence).`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:s,output:a},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),g=n({meta:{name:`knowledge.source.delete`,version:1,description:`Delete a knowledge source binding for a tenant.`,goal:`Remove obsolete or compromised knowledge ingestion paths.`,context:`Ensures ephemeral or external sources can be removed cleanly without leaving residual bindings.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:c,output:l},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),_=r({meta:{name:`knowledge.source.list`,version:1,description:`List knowledge sources configured for a tenant.`,goal:`Provide visibility into knowledge ingest configuration and schedules.`,context:`Used by App Studio and Ops flows to surface knowledge sources and their health.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:u,output:d},policy:{auth:`admin`,policies:[{name:`platform.knowledge.read`,version:1}]}}),v=n({meta:{name:`knowledge.source.triggerSync`,version:1,description:`Trigger an immediate sync for a knowledge source.`,goal:`Support manual or automated sync retries for knowledge ingestion.`,context:`Invoked by Ops tooling or monitors when knowledge content must be refreshed or reprocessed.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:f,output:p},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),y={CreateKnowledgeSource:m,UpdateKnowledgeSource:h,DeleteKnowledgeSource:g,ListKnowledgeSources:_,TriggerKnowledgeSourceSync:v};function b(e){return e.register(m).register(h).register(g).register(_).register(v)}export{m as CreateKnowledgeSource,g as DeleteKnowledgeSource,_ as ListKnowledgeSources,v as TriggerKnowledgeSourceSync,h as UpdateKnowledgeSource,y as knowledgeContracts,b as registerKnowledgeContracts};
2
- //# sourceMappingURL=contracts.js.map
1
+ import{defineCommand as e,defineQuery as t}from"../spec.js";import{ScalarTypeEnum as n,SchemaModel as r}from"@lssm/lib.schema";const i=new r({name:`KnowledgeSyncSchedule`,fields:{enabled:{type:n.Boolean(),isOptional:!1},cron:{type:n.String_unsecure(),isOptional:!0},intervalMs:{type:n.Int_unsecure(),isOptional:!0}}}),a=new r({name:`KnowledgeSourceRecord`,fields:{id:{type:n.ID(),isOptional:!1},tenantId:{type:n.ID(),isOptional:!1},spaceKey:{type:n.NonEmptyString(),isOptional:!1},spaceVersion:{type:n.Int_unsecure(),isOptional:!1},label:{type:n.String_unsecure(),isOptional:!1},sourceType:{type:n.String_unsecure(),isOptional:!1},syncSchedule:{type:i,isOptional:!0},lastSyncStatus:{type:n.String_unsecure(),isOptional:!0},lastSyncAt:{type:n.DateTime(),isOptional:!0},itemsProcessed:{type:n.Int_unsecure(),isOptional:!0},createdAt:{type:n.DateTime(),isOptional:!0},updatedAt:{type:n.DateTime(),isOptional:!0}}}),o=new r({name:`CreateKnowledgeSourceInput`,fields:{tenantId:{type:n.ID(),isOptional:!1},spaceKey:{type:n.NonEmptyString(),isOptional:!1},spaceVersion:{type:n.Int_unsecure(),isOptional:!1},label:{type:n.String_unsecure(),isOptional:!1},sourceType:{type:n.NonEmptyString(),isOptional:!1},config:{type:n.JSONObject(),isOptional:!1},syncSchedule:{type:i,isOptional:!0}}}),s=new r({name:`UpdateKnowledgeSourceInput`,fields:{sourceId:{type:n.ID(),isOptional:!1},label:{type:n.String_unsecure(),isOptional:!0},config:{type:n.JSONObject(),isOptional:!0},syncSchedule:{type:i,isOptional:!0}}}),c=new r({name:`DeleteKnowledgeSourceInput`,fields:{sourceId:{type:n.ID(),isOptional:!1}}}),l=new r({name:`DeleteKnowledgeSourceOutput`,fields:{success:{type:n.Boolean(),isOptional:!1}}}),u=new r({name:`ListKnowledgeSourcesInput`,fields:{tenantId:{type:n.ID(),isOptional:!1},spaceKey:{type:n.NonEmptyString(),isOptional:!0}}}),d=new r({name:`ListKnowledgeSourcesOutput`,fields:{sources:{type:a,isOptional:!1,isArray:!0}}}),f=new r({name:`TriggerKnowledgeSyncInput`,fields:{sourceId:{type:n.ID(),isOptional:!1}}}),p=new r({name:`TriggerKnowledgeSyncOutput`,fields:{success:{type:n.Boolean(),isOptional:!1},itemsProcessed:{type:n.Int_unsecure(),isOptional:!0},error:{type:n.String_unsecure(),isOptional:!0}}}),m=e({meta:{name:`knowledge.source.create`,version:1,description:`Create a knowledge source binding for a tenant.`,goal:`Onboard a new knowledge ingestion source such as Notion or uploads.`,context:`Used by Ops and App Studio to configure knowledge ingestion per tenant and space.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:o,output:a},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),h=e({meta:{name:`knowledge.source.update`,version:1,description:`Update metadata or configuration for a knowledge source.`,goal:`Allow rotation of credentials, sync schedules, and labels.`,context:`Supports editing how a tenant ingests knowledge (e.g., toggling sync cadence).`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:s,output:a},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),g=e({meta:{name:`knowledge.source.delete`,version:1,description:`Delete a knowledge source binding for a tenant.`,goal:`Remove obsolete or compromised knowledge ingestion paths.`,context:`Ensures ephemeral or external sources can be removed cleanly without leaving residual bindings.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:c,output:l},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),_=t({meta:{name:`knowledge.source.list`,version:1,description:`List knowledge sources configured for a tenant.`,goal:`Provide visibility into knowledge ingest configuration and schedules.`,context:`Used by App Studio and Ops flows to surface knowledge sources and their health.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:u,output:d},policy:{auth:`admin`,policies:[{name:`platform.knowledge.read`,version:1}]}}),v=e({meta:{name:`knowledge.source.triggerSync`,version:1,description:`Trigger an immediate sync for a knowledge source.`,goal:`Support manual or automated sync retries for knowledge ingestion.`,context:`Invoked by Ops tooling or monitors when knowledge content must be refreshed or reprocessed.`,owners:[`platform.knowledge`],tags:[`knowledge`,`sources`],stability:`experimental`},io:{input:f,output:p},policy:{auth:`admin`,policies:[{name:`platform.knowledge.manage`,version:1}]}}),y={CreateKnowledgeSource:m,UpdateKnowledgeSource:h,DeleteKnowledgeSource:g,ListKnowledgeSources:_,TriggerKnowledgeSourceSync:v};function b(e){return e.register(m).register(h).register(g).register(_).register(v)}export{m as CreateKnowledgeSource,g as DeleteKnowledgeSource,_ as ListKnowledgeSources,v as TriggerKnowledgeSourceSync,h as UpdateKnowledgeSource,y as knowledgeContracts,b as registerKnowledgeContracts};
@@ -0,0 +1,138 @@
1
+ import{registerDocBlocks as e}from"../../docs/registry.js";import"../../registry.js";const t=[{id:`docs.tech.contracts.knowledge`,title:`Knowledge Layer`,summary:`The knowledge layer turns unstructured inputs (uploads, email threads,`,kind:`reference`,visibility:`public`,route:`/docs/tech/contracts/knowledge`,tags:[`tech`,`contracts`,`knowledge`],body:`# Knowledge Layer
2
+
3
+ The knowledge layer turns unstructured inputs (uploads, email threads,
4
+ notes) into searchable context for agents and workflows. The Pocket
5
+ Family Office vertical ships a minimal but production-ready stack that
6
+ covers ingestion, indexing, querying, and guardrails.
7
+
8
+ ## Knowledge Spaces
9
+
10
+ Knowledge is organised via \`KnowledgeSpaceSpec\` definitions under
11
+ \`packages/libs/contracts/src/knowledge/spaces\`:
12
+
13
+ - \`knowledge.financial-docs\` – canonical invoices, bills, and contracts.
14
+ - \`knowledge.email-threads\` – operational Gmail threads.
15
+ - \`knowledge.support-faq\` / \`knowledge.product-canon\` – reusable shared
16
+ spaces available to any vertical.
17
+
18
+ Each space defines:
19
+
20
+ - Ownership metadata (domain, owners, stability tags).
21
+ - Retention policy (TTL/archival).
22
+ - Access policy (trust level, automation write permissions).
23
+ - Indexing configuration (embedding model, chunk size, vector DB slot).
24
+
25
+ ## Sources & Bindings
26
+
27
+ - \`KnowledgeSourceConfig\` records tenant-specific connections (bucket,
28
+ Gmail labels, sync cadence). Pocket Family Office provides sample
29
+ configs in \`knowledge/sources.sample.ts\`.
30
+ - \`AppKnowledgeBinding\` associates spaces with workflows/agents and adds
31
+ per-tenant constraints (rate limits, scopes).
32
+
33
+ Validation ensures that:
34
+
35
+ - All referenced spaces exist in the registry.
36
+ - At least one source is configured per binding.
37
+ - External/ephemeral spaces trigger warnings for policy-sensitive flows.
38
+
39
+ ## Ingestion Pipeline
40
+
41
+ Implemented in \`packages/libs/contracts/src/knowledge/ingestion\`:
42
+
43
+ 1. **DocumentProcessor** – pluggable MIME extractors producing
44
+ \`DocumentFragment\`s.
45
+ 2. **EmbeddingService** – batches fragments through an \`EmbeddingProvider\`
46
+ (Mistral in the reference implementation).
47
+ 3. **VectorIndexer** – upserts fragments into a \`VectorStoreProvider\`
48
+ (Qdrant in production, with in-memory implementations for tests).
49
+ 4. **Adapters**
50
+ - \`GmailIngestionAdapter\`: list threads → convert to raw documents →
51
+ index.
52
+ - \`StorageIngestionAdapter\`: fetch object from storage provider →
53
+ index.
54
+
55
+ Background jobs (see \`jobs/\`) orchestrate ingestion via Cloud Tasks /
56
+ Pub/Sub or in-memory workers. Handlers:
57
+
58
+ - \`storage-document-handler\` – resolves storage object + indexes.
59
+ - \`gmail-sync-handler\` – syncs threads based on label/date filters.
60
+
61
+ ## Query Service
62
+
63
+ \`KnowledgeQueryService\` performs retrieval-augmented generation:
64
+
65
+ 1. Embed the user query using the configured provider.
66
+ 2. Search the vector store for top-k matches.
67
+ 3. Compose prompts combining system instructions + contextual snippets.
68
+ 4. Invoke the LLM provider (Mistral) and return the answer plus
69
+ references and token usage.
70
+
71
+ The service is designed for tooling: workflows can execute it directly
72
+ or through custom operations (see \`pfo.summary.generate\` contract).
73
+
74
+ ## Guardrails
75
+
76
+ - Automation can only write to spaces where \`automationWritable\` is true.
77
+ - Canonical spaces default to high trust; external/ephemeral spaces are
78
+ flagged during validation.
79
+ - Telemetry captures query volumes per tenant + space.
80
+
81
+ ## Extending
82
+
83
+ 1. Define a new \`KnowledgeSpaceSpec\` with indexing/retention policies.
84
+ 2. Add sources pointing to storage providers or APIs.
85
+ 3. Register adapters if ingestion requires bespoke logic.
86
+ 4. Reference the space in blueprints (\`AppKnowledgeBinding\`) and update
87
+ workflows/agents accordingly.
88
+
89
+ The Pocket Family Office tests (\`tests/pocket-family-office.test.ts\`)
90
+ show how to wire the ingestion pipeline, index a document, and run an
91
+ end-to-end knowledge query using in-memory providers.
92
+ ## Knowledge Spaces & Guardrails
93
+
94
+ Knowledge surfaces (\`KnowledgeSpaceSpec\`) describe curated corpora that agents and workflows can consult. Tenant bindings (\`AppKnowledgeBinding\`) declare which spaces are active, who can use them, and optional usage constraints.
95
+
96
+ ### Binding recap
97
+
98
+ - \`spaceKey\` / \`spaceVersion\`: pointer to the \`KnowledgeSpaceSpec\`
99
+ - \`scope.workflows\` / \`scope.agents\`: explicit allow-lists for consumers
100
+ - \`constraints.maxTokensPerQuery\` & \`constraints.maxQueriesPerMinute\`: throttling knobs for LLM-backed search
101
+ - \`required\`: mark the binding as blocking (defaults to \`true\`)
102
+
103
+ At runtime, \`ResolvedAppConfig.knowledge\` contains \`ResolvedKnowledge\` entries with the bound space, active sources, and the binding metadata above.
104
+
105
+ ### KnowledgeAccessGuard
106
+
107
+ \`KnowledgeAccessGuard\` (\`@lssm/lib.contracts/knowledge/runtime\`) centralises the access checks that must run before any workflow/agent reads or mutates a knowledge space.
108
+
109
+ \`\`\`ts
110
+ import { KnowledgeAccessGuard } from '@lssm/lib.contracts/knowledge/runtime';
111
+
112
+ const guard = new KnowledgeAccessGuard({
113
+ disallowWriteCategories: ['external', 'ephemeral'], // default
114
+ requireWorkflowBinding: true,
115
+ requireAgentBinding: false,
116
+ });
117
+
118
+ const result = guard.checkAccess(resolvedKnowledge, {
119
+ tenantId,
120
+ appId,
121
+ workflowName: 'order-processing',
122
+ operation: 'read', // or 'write' / 'search'
123
+ }, resolvedAppConfig);
124
+
125
+ if (!result.allowed) {
126
+ throw new Error(result.reason);
127
+ }
128
+ \`\`\`
129
+
130
+ Key behaviours:
131
+
132
+ - **Binding**: rejects access when the space is not present in the resolved tenant config.
133
+ - **Category guardrails**: blocks writes to \`external\` and \`ephemeral\` spaces by default; allows reads but emits warnings for \`ephemeral\`.
134
+ - **Workflow/agent scoping**: when \`requireWorkflowBinding\` or \`requireAgentBinding\` is enabled, only explicitly authorised consumers may access the space.
135
+
136
+ Use the guard inside workflow operations or agent resolvers to guarantee multi-tenant isolation and honour data governance rules.
137
+
138
+ `}];e(t);export{t as tech_contracts_knowledge_DocBlocks};
@@ -1,2 +1 @@
1
- import{Buffer as e}from"node:buffer";var t=class{extractors=new Map;constructor(){this.registerExtractor(`text/plain`,this.extractText),this.registerExtractor(`application/json`,this.extractJson)}registerExtractor(e,t){this.extractors.set(e.toLowerCase(),t)}async process(e){let t=this.extractors.get(e.mimeType.toLowerCase())??this.extractors.get(`*/*`);if(!t)throw Error(`No extractor registered for mime type ${e.mimeType}`);let n=await t(e);return n.length===0?[{id:`${e.id}:0`,documentId:e.id,text:``,metadata:e.metadata}]:n}async extractText(t){let n=e.from(t.data).toString(`utf-8`);return[{id:`${t.id}:0`,documentId:t.id,text:n,metadata:t.metadata}]}async extractJson(t){let n=e.from(t.data).toString(`utf-8`);try{let e=JSON.parse(n);return[{id:`${t.id}:0`,documentId:t.id,text:JSON.stringify(e,null,2),metadata:{...t.metadata,contentType:`application/json`}}]}catch{return this.extractText(t)}}};export{t as DocumentProcessor};
2
- //# sourceMappingURL=document-processor.js.map
1
+ import{Buffer as e}from"node:buffer";var t=class{extractors=new Map;constructor(){this.registerExtractor(`text/plain`,this.extractText),this.registerExtractor(`application/json`,this.extractJson)}registerExtractor(e,t){this.extractors.set(e.toLowerCase(),t)}async process(e){let t=this.extractors.get(e.mimeType.toLowerCase())??this.extractors.get(`*/*`);if(!t)throw Error(`No extractor registered for mime type ${e.mimeType}`);let n=await t(e);return n.length===0?[{id:`${e.id}:0`,documentId:e.id,text:``,metadata:e.metadata}]:n}async extractText(t){let n=e.from(t.data).toString(`utf-8`);return[{id:`${t.id}:0`,documentId:t.id,text:n,metadata:t.metadata}]}async extractJson(t){let n=e.from(t.data).toString(`utf-8`);try{let e=JSON.parse(n);return[{id:`${t.id}:0`,documentId:t.id,text:JSON.stringify(e,null,2),metadata:{...t.metadata,contentType:`application/json`}}]}catch{return this.extractText(t)}}};export{t as DocumentProcessor};
@@ -1,2 +1 @@
1
- var e=class{provider;batchSize;constructor(e,t=16){this.provider=e,this.batchSize=t}async embedFragments(e){let t=[];for(let n=0;n<e.length;n+=this.batchSize){let r=e.slice(n,n+this.batchSize).map(e=>({id:e.id,text:e.text,metadata:e.metadata})),i=await this.provider.embedDocuments(r);t.push(...i)}return t}};export{e as EmbeddingService};
2
- //# sourceMappingURL=embedding-service.js.map
1
+ var e=class{provider;batchSize;constructor(e,t=16){this.provider=e,this.batchSize=t}async embedFragments(e){let t=[];for(let n=0;n<e.length;n+=this.batchSize){let r=e.slice(n,n+this.batchSize).map(e=>({id:e.id,text:e.text,metadata:e.metadata})),i=await this.provider.embedDocuments(r);t.push(...i)}return t}};export{e as EmbeddingService};
@@ -3,5 +3,4 @@ var e=class{constructor(e,t,n,r){this.gmail=e,this.processor=t,this.embeddings=n
3
3
 
4
4
  ---
5
5
 
6
- `)}function n(e){return e.name?`${e.name} <${e.email}>`:e.email}function r(e){return e.replace(/<[^>]+>/g,` `)}export{e as GmailIngestionAdapter};
7
- //# sourceMappingURL=gmail-adapter.js.map
6
+ `)}function n(e){return e.name?`${e.name} <${e.email}>`:e.email}function r(e){return e.replace(/<[^>]+>/g,` `)}export{e as GmailIngestionAdapter};
@@ -1,2 +1 @@
1
- var e=class{constructor(e,t,n){this.processor=e,this.embeddings=t,this.indexer=n}async ingestObject(e){if(!(`data`in e)||!e.data)throw Error(`Storage ingestion requires object data`);let t={id:e.key,mimeType:e.contentType??`application/octet-stream`,data:e.data,metadata:{bucket:e.bucket,checksum:e.checksum??``}},n=await this.processor.process(t),r=await this.embeddings.embedFragments(n);await this.indexer.upsert(n,r)}};export{e as StorageIngestionAdapter};
2
- //# sourceMappingURL=storage-adapter.js.map
1
+ var e=class{constructor(e,t,n){this.processor=e,this.embeddings=t,this.indexer=n}async ingestObject(e){if(!(`data`in e)||!e.data)throw Error(`Storage ingestion requires object data`);let t={id:e.key,mimeType:e.contentType??`application/octet-stream`,data:e.data,metadata:{bucket:e.bucket,checksum:e.checksum??``}},n=await this.processor.process(t),r=await this.embeddings.embedFragments(n);await this.indexer.upsert(n,r)}};export{e as StorageIngestionAdapter};
@@ -1,2 +1 @@
1
- var e=class{provider;config;constructor(e,t){this.provider=e,this.config=t}async upsert(e,t){let n=t.map(t=>{let n=e.find(e=>e.id===t.id);return{id:t.id,vector:t.vector,payload:{...this.config.metadata,...n?.metadata??{},documentId:n?.documentId},namespace:this.config.namespace}}),r={collection:this.config.collection,documents:n};await this.provider.upsert(r)}};export{e as VectorIndexer};
2
- //# sourceMappingURL=vector-indexer.js.map
1
+ var e=class{provider;config;constructor(e,t){this.provider=e,this.config=t}async upsert(e,t){let n=t.map(t=>{let n=e.find(e=>e.id===t.id);return{id:t.id,vector:t.vector,payload:{...this.config.metadata,...n?.metadata??{},documentId:n?.documentId},namespace:this.config.namespace}}),r={collection:this.config.collection,documents:n};await this.provider.upsert(r)}};export{e as VectorIndexer};
@@ -1,4 +1,3 @@
1
1
  var e=class{embeddings;vectorStore;llm;config;constructor(e,t,n,r){this.embeddings=e,this.vectorStore=t,this.llm=n,this.config=r}async query(e){let r=await this.embeddings.embedQuery(e),i=await this.vectorStore.search({collection:this.config.collection,vector:r.vector,topK:this.config.topK??5,namespace:this.config.namespace,filter:void 0}),a=t(i),o=this.buildMessages(e,a),s=await this.llm.chat(o);return{answer:s.message.content.map(e=>`text`in e?e.text:``).join(``),references:i.map(e=>({...e,text:n(e)})),usage:s.usage}}buildMessages(e,t){return[{role:`system`,content:[{type:`text`,text:this.config.systemPrompt??`You are a knowledge assistant that answers questions using the provided context. Cite relevant sources if possible.`}]},{role:`user`,content:[{type:`text`,text:`Question:\n${e}\n\nContext:\n${t}`}]}]}};function t(e){return e.length===0?`No relevant documents found.`:e.map((e,t)=>{let r=n(e);return`Source ${t+1} (score: ${e.score.toFixed(3)}):\n${r}`}).join(`
2
2
 
3
- `)}function n(e){let t=e.payload??{};return typeof t.text==`string`?t.text:typeof t.content==`string`?t.content:JSON.stringify(t)}export{e as KnowledgeQueryService};
4
- //# sourceMappingURL=service.js.map
3
+ `)}function n(e){let t=e.payload??{};return typeof t.text==`string`?t.text:typeof t.content==`string`?t.content:JSON.stringify(t)}export{e as KnowledgeQueryService};
@@ -1,2 +1 @@
1
- const e=[`external`,`ephemeral`];var t=class{disallowedWrite;requireWorkflowBinding;requireAgentBinding;constructor(t={}){this.disallowedWrite=new Set(t.disallowWriteCategories??e),this.requireWorkflowBinding=t.requireWorkflowBinding??!0,this.requireAgentBinding=t.requireAgentBinding??!1}checkAccess(e,t,n){let{binding:r,space:i}=e;if(r.required!==!1&&!this.isSpaceBound(e,n))return{allowed:!1,reason:`Knowledge space "${i.meta.key}" is not bound in the resolved app config.`};if(t.operation===`write`&&this.disallowedWrite.has(i.meta.category))return{allowed:!1,reason:`Knowledge space "${i.meta.key}" is category "${i.meta.category}" and is read-only.`};if(this.requireWorkflowBinding&&t.workflowName){let e=r.scope?.workflows;if(e&&!e.includes(t.workflowName))return{allowed:!1,reason:`Workflow "${t.workflowName}" is not authorized to access knowledge space "${i.meta.key}".`}}if(this.requireAgentBinding&&t.agentName){let e=r.scope?.agents;if(e&&!e.includes(t.agentName))return{allowed:!1,reason:`Agent "${t.agentName}" is not authorized to access knowledge space "${i.meta.key}".`}}return i.meta.category===`ephemeral`?{allowed:!0,severity:`warning`,reason:`Knowledge space "${i.meta.key}" is ephemeral; results may be transient.`}:{allowed:!0}}isSpaceBound(e,t){return t.knowledge.some(t=>t.space.meta.key===e.space.meta.key&&(e.space.meta.version==null||t.space.meta.version===e.space.meta.version))}};export{t as KnowledgeAccessGuard};
2
- //# sourceMappingURL=runtime.js.map
1
+ const e=[`external`,`ephemeral`];var t=class{disallowedWrite;requireWorkflowBinding;requireAgentBinding;constructor(t={}){this.disallowedWrite=new Set(t.disallowWriteCategories??e),this.requireWorkflowBinding=t.requireWorkflowBinding??!0,this.requireAgentBinding=t.requireAgentBinding??!1}checkAccess(e,t,n){let{binding:r,space:i}=e;if(r.required!==!1&&!this.isSpaceBound(e,n))return{allowed:!1,reason:`Knowledge space "${i.meta.key}" is not bound in the resolved app config.`};if(t.operation===`write`&&this.disallowedWrite.has(i.meta.category))return{allowed:!1,reason:`Knowledge space "${i.meta.key}" is category "${i.meta.category}" and is read-only.`};if(this.requireWorkflowBinding&&t.workflowName){let e=r.scope?.workflows;if(e&&!e.includes(t.workflowName))return{allowed:!1,reason:`Workflow "${t.workflowName}" is not authorized to access knowledge space "${i.meta.key}".`}}if(this.requireAgentBinding&&t.agentName){let e=r.scope?.agents;if(e&&!e.includes(t.agentName))return{allowed:!1,reason:`Agent "${t.agentName}" is not authorized to access knowledge space "${i.meta.key}".`}}return i.meta.category===`ephemeral`?{allowed:!0,severity:`warning`,reason:`Knowledge space "${i.meta.key}" is ephemeral; results may be transient.`}:{allowed:!0}}isSpaceBound(e,t){return t.knowledge.some(t=>t.space.meta.key===e.space.meta.key&&(e.space.meta.version==null||t.space.meta.version===e.space.meta.version))}};export{t as KnowledgeAccessGuard};
@@ -1,2 +1 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.email-threads`,version:1,category:`operational`,displayName:`Email Threads`,title:`Operational Email Threads`,description:`Indexed copies of operational email threads used for support, onboarding, and workflows.`,domain:`operations`,owners:[`platform.operations`],tags:[`email`,`operations`],stability:e.Beta},retention:{ttlDays:365},access:{policy:{name:`knowledge.access.email-threads`,version:1},trustLevel:`medium`,automationWritable:!0},indexing:{embeddingModel:`mistral-embed`,chunkSize:600,vectorDbIntegration:`vectordb.qdrant`},description:`Operational email threads synchronized from Gmail to support automations and contextual assistance.`};function n(e){return e.register(t)}export{t as emailThreadsKnowledgeSpace,n as registerEmailThreadsKnowledgeSpace};
2
- //# sourceMappingURL=email-threads.js.map
1
+ import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.email-threads`,version:1,category:`operational`,displayName:`Email Threads`,title:`Operational Email Threads`,description:`Indexed copies of operational email threads used for support, onboarding, and workflows.`,domain:`operations`,owners:[`platform.operations`],tags:[`email`,`operations`],stability:e.Beta},retention:{ttlDays:365},access:{policy:{name:`knowledge.access.email-threads`,version:1},trustLevel:`medium`,automationWritable:!0},indexing:{embeddingModel:`mistral-embed`,chunkSize:600,vectorDbIntegration:`vectordb.qdrant`},description:`Operational email threads synchronized from Gmail to support automations and contextual assistance.`};function n(e){return e.register(t)}export{t as emailThreadsKnowledgeSpace,n as registerEmailThreadsKnowledgeSpace};
@@ -1,2 +1 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.financial-docs`,version:1,category:`canonical`,displayName:`Financial Documents`,title:`Household Financial Documents`,description:`Invoices, bills, and contracts powering Pocket Family Office financial automation.`,domain:`finance`,owners:[`platform.finance`],tags:[`finance`,`documents`],stability:e.Beta},retention:{ttlDays:null},access:{policy:{name:`knowledge.access.financial-docs`,version:1},trustLevel:`high`,automationWritable:!0},indexing:{embeddingModel:`mistral-embed`,chunkSize:700,vectorDbIntegration:`vectordb.qdrant`},description:`Normalized financial documents enabling bill pay automation, reminders, and summaries.`};function n(e){return e.register(t)}export{t as financialDocsKnowledgeSpace,n as registerFinancialDocsKnowledgeSpace};
2
- //# sourceMappingURL=financial-docs.js.map
1
+ import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.financial-docs`,version:1,category:`canonical`,displayName:`Financial Documents`,title:`Household Financial Documents`,description:`Invoices, bills, and contracts powering Pocket Family Office financial automation.`,domain:`finance`,owners:[`platform.finance`],tags:[`finance`,`documents`],stability:e.Beta},retention:{ttlDays:null},access:{policy:{name:`knowledge.access.financial-docs`,version:1},trustLevel:`high`,automationWritable:!0},indexing:{embeddingModel:`mistral-embed`,chunkSize:700,vectorDbIntegration:`vectordb.qdrant`},description:`Normalized financial documents enabling bill pay automation, reminders, and summaries.`};function n(e){return e.register(t)}export{t as financialDocsKnowledgeSpace,n as registerFinancialDocsKnowledgeSpace};
@@ -1,2 +1 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.financial-overview`,version:1,category:`operational`,displayName:`Financial Overview Summaries`,title:`Derived Financial Summaries`,description:`Aggregated cashflow summaries, category breakdowns, and balance trends derived from open banking data.`,domain:`finance`,owners:[`platform.finance`],tags:[`open-banking`,`summaries`,`cashflow`],stability:e.Experimental},retention:{ttlDays:180},access:{policy:{name:`knowledge.access.financial-overview`,version:1},trustLevel:`medium`,automationWritable:!0},indexing:{embeddingModel:`mistral-embed`,chunkSize:600,vectorDbIntegration:`vectordb.qdrant`},description:`Derived knowledge space containing weekly/monthly cashflow rollups and account health summaries. Raw transactions are excluded to respect privacy guardrails.`};function n(e){return e.register(t)}export{t as financialOverviewKnowledgeSpace,n as registerFinancialOverviewKnowledgeSpace};
2
- //# sourceMappingURL=financial-overview.js.map
1
+ import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.financial-overview`,version:1,category:`operational`,displayName:`Financial Overview Summaries`,title:`Derived Financial Summaries`,description:`Aggregated cashflow summaries, category breakdowns, and balance trends derived from open banking data.`,domain:`finance`,owners:[`platform.finance`],tags:[`open-banking`,`summaries`,`cashflow`],stability:e.Experimental},retention:{ttlDays:180},access:{policy:{name:`knowledge.access.financial-overview`,version:1},trustLevel:`medium`,automationWritable:!0},indexing:{embeddingModel:`mistral-embed`,chunkSize:600,vectorDbIntegration:`vectordb.qdrant`},description:`Derived knowledge space containing weekly/monthly cashflow rollups and account health summaries. Raw transactions are excluded to respect privacy guardrails.`};function n(e){return e.register(t)}export{t as financialOverviewKnowledgeSpace,n as registerFinancialOverviewKnowledgeSpace};
@@ -1,2 +1 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.product-canon`,version:1,category:`canonical`,displayName:`Product Canon`,title:`Product Canon Knowledge Space`,description:`Authoritative product knowledge covering strategy, roadmap, and delivery canon.`,domain:`product`,owners:[`platform.product`],tags:[`knowledge`,`product`],stability:e.Stable},retention:{ttlDays:null},access:{policy:{name:`knowledge.access.product-canon`,version:1},trustLevel:`high`,automationWritable:!1},indexing:{embeddingModel:`text-embedding-3-large`,chunkSize:800,vectorDbIntegration:`vectordb.qdrant`},description:`Single source of truth for product canon, principles, and strategic narratives.`};function n(e){return e.register(t)}export{t as productCanonKnowledgeSpace,n as registerProductCanonKnowledgeSpace};
2
- //# sourceMappingURL=product-canon.js.map
1
+ import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.product-canon`,version:1,category:`canonical`,displayName:`Product Canon`,title:`Product Canon Knowledge Space`,description:`Authoritative product knowledge covering strategy, roadmap, and delivery canon.`,domain:`product`,owners:[`platform.product`],tags:[`knowledge`,`product`],stability:e.Stable},retention:{ttlDays:null},access:{policy:{name:`knowledge.access.product-canon`,version:1},trustLevel:`high`,automationWritable:!1},indexing:{embeddingModel:`text-embedding-3-large`,chunkSize:800,vectorDbIntegration:`vectordb.qdrant`},description:`Single source of truth for product canon, principles, and strategic narratives.`};function n(e){return e.register(t)}export{t as productCanonKnowledgeSpace,n as registerProductCanonKnowledgeSpace};
@@ -1,2 +1 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.support-faq`,version:1,category:`operational`,displayName:`Support FAQ`,title:`Support & Success FAQ`,description:`Operational knowledge base for customer support and success.`,domain:`support`,owners:[`platform.support`],tags:[`knowledge`,`support`],stability:e.Beta},retention:{ttlDays:365,archiveAfterDays:180},access:{policy:{name:`knowledge.access.support`,version:1},trustLevel:`medium`,automationWritable:!0},indexing:{embeddingModel:`text-embedding-3-small`,chunkSize:700,vectorDbIntegration:`vectordb.qdrant`},description:`Operational FAQs, runbooks, and customer success playbooks augmented with automation updates.`};function n(e){return e.register(t)}export{n as registerSupportFaqKnowledgeSpace,t as supportFaqKnowledgeSpace};
2
- //# sourceMappingURL=support-faq.js.map
1
+ import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.support-faq`,version:1,category:`operational`,displayName:`Support FAQ`,title:`Support & Success FAQ`,description:`Operational knowledge base for customer support and success.`,domain:`support`,owners:[`platform.support`],tags:[`knowledge`,`support`],stability:e.Beta},retention:{ttlDays:365,archiveAfterDays:180},access:{policy:{name:`knowledge.access.support`,version:1},trustLevel:`medium`,automationWritable:!0},indexing:{embeddingModel:`text-embedding-3-small`,chunkSize:700,vectorDbIntegration:`vectordb.qdrant`},description:`Operational FAQs, runbooks, and customer success playbooks augmented with automation updates.`};function n(e){return e.register(t)}export{n as registerSupportFaqKnowledgeSpace,t as supportFaqKnowledgeSpace};
@@ -1,2 +1 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.uploaded-docs`,version:1,category:`external`,displayName:`Uploaded Documents`,title:`Uploaded Knowledge Assets`,description:`Documents uploaded by households, including invoices, contracts, and reference files.`,domain:`operations`,owners:[`platform.operations`],tags:[`documents`,`storage`],stability:e.Beta},retention:{ttlDays:null},access:{policy:{name:`knowledge.access.uploaded-docs`,version:1},trustLevel:`medium`,automationWritable:!0},indexing:{embeddingModel:`mistral-embed`,chunkSize:900,vectorDbIntegration:`vectordb.qdrant`},description:`User-provided documents normalized and embedded for retrieval augmented workflows.`};function n(e){return e.register(t)}export{n as registerUploadedDocsKnowledgeSpace,t as uploadedDocsKnowledgeSpace};
2
- //# sourceMappingURL=uploaded-docs.js.map
1
+ import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`knowledge.uploaded-docs`,version:1,category:`external`,displayName:`Uploaded Documents`,title:`Uploaded Knowledge Assets`,description:`Documents uploaded by households, including invoices, contracts, and reference files.`,domain:`operations`,owners:[`platform.operations`],tags:[`documents`,`storage`],stability:e.Beta},retention:{ttlDays:null},access:{policy:{name:`knowledge.access.uploaded-docs`,version:1},trustLevel:`medium`,automationWritable:!0},indexing:{embeddingModel:`mistral-embed`,chunkSize:900,vectorDbIntegration:`vectordb.qdrant`},description:`User-provided documents normalized and embedded for retrieval augmented workflows.`};function n(e){return e.register(t)}export{n as registerUploadedDocsKnowledgeSpace,t as uploadedDocsKnowledgeSpace};
@@ -1,2 +1 @@
1
- const e=e=>`${e.key}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate KnowledgeSpaceSpec ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(t,n){if(n!=null)return this.items.get(e({key:t,version:n}));let r,i=-1/0;for(let e of this.items.values())e.meta.key===t&&e.meta.version>i&&(i=e.meta.version,r=e);return r}getByCategory(e){return this.list().filter(t=>t.meta.category===e)}};function n(t){return e(t)}export{t as KnowledgeSpaceRegistry,n as makeKnowledgeSpaceKey};
2
- //# sourceMappingURL=spec.js.map
1
+ const e=e=>`${e.key}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate KnowledgeSpaceSpec ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(t,n){if(n!=null)return this.items.get(e({key:t,version:n}));let r,i=-1/0;for(let e of this.items.values())e.meta.key===t&&e.meta.version>i&&(i=e.meta.version,r=e);return r}getByCategory(e){return this.list().filter(t=>t.meta.category===e)}};function n(t){return e(t)}export{t as KnowledgeSpaceRegistry,n as makeKnowledgeSpaceKey};
@@ -0,0 +1,8 @@
1
+ import{jsonSchemaForSpec as e}from"../jsonschema.js";import{isEmitDeclRef as t}from"../spec.js";const n={format:`full`,includeSchemas:!0,includeScenarios:!0,includeExamples:!0,includePolicy:!0,includeSideEffects:!0},r={...n,includeRelatedSpecs:!0,includeRelatedEvents:!0,includeRelatedPresentations:!0};function i(e){let t=e.meta,n=[];if(n.push(`# ${t.name} (v${t.version})`),n.push(``),n.push(`> ${t.description}`),n.push(``),n.push(`**Type:** ${t.kind} | **Stability:** ${t.stability}`),n.push(``),n.push(`## Goal`),n.push(``),n.push(t.goal),n.push(``),n.push(`## Context`),n.push(``),n.push(t.context),n.push(``),e.acceptance?.scenarios?.length){n.push(`## Acceptance Criteria`),n.push(``);for(let t of e.acceptance.scenarios){n.push(`### ${t.name}`),n.push(``),n.push(`**Given:**`);for(let e of t.given)n.push(`- ${e}`);n.push(``),n.push(`**When:**`);for(let e of t.when)n.push(`- ${e}`);n.push(``),n.push(`**Then:**`);for(let e of t.then)n.push(`- ${e}`);n.push(``)}}return n.join(`
2
+ `)}function a(r,i={}){let a={...n,...i},o=r.meta,s=[];if(s.push(`# ${o.name}.v${o.version}`),s.push(``),s.push(`> ${o.description}`),s.push(``),s.push(`## Metadata`),s.push(``),s.push(`| Field | Value |`),s.push(`|-------|-------|`),s.push(`| Kind | ${o.kind} |`),s.push(`| Stability | ${o.stability} |`),s.push(`| Owners | ${o.owners.join(`, `)} |`),s.push(`| Tags | ${o.tags.join(`, `)} |`),s.push(``),s.push(`## Goal`),s.push(``),s.push(o.goal),s.push(``),s.push(`## Context`),s.push(``),s.push(o.context),s.push(``),a.includeSchemas){if(s.push(`## Input/Output`),s.push(``),r.io.input){s.push(`### Input Schema`),s.push(``),s.push("```json");try{let t=e(r);s.push(JSON.stringify(t.input??{},null,2))}catch{s.push(`// Schema generation not available`)}s.push("```"),s.push(``)}s.push(`### Output Schema`),s.push(``),s.push("```json");try{let t=e(r);s.push(JSON.stringify(t.output??{},null,2))}catch{s.push(`// Schema generation not available`)}if(s.push("```"),s.push(``),r.io.errors&&Object.keys(r.io.errors).length){s.push(`### Error Codes`),s.push(``),s.push(`| Code | HTTP | Description | When |`),s.push(`|------|------|-------------|------|`);for(let[e,t]of Object.entries(r.io.errors))s.push(`| \`${e}\` | ${t.http??400} | ${t.description} | ${t.when} |`);s.push(``)}}if(a.includePolicy&&(s.push(`## Policy`),s.push(``),s.push(`- **Auth Required:** ${r.policy.auth}`),s.push(`- **Idempotent:** ${r.policy.idempotent??o.kind===`query`}`),r.policy.rateLimit&&s.push(`- **Rate Limit:** ${r.policy.rateLimit.rpm} rpm per ${r.policy.rateLimit.key}`),r.policy.flags?.length&&s.push(`- **Feature Flags:** ${r.policy.flags.join(`, `)}`),r.policy.pii?.length&&s.push(`- **PII Fields:** ${r.policy.pii.join(`, `)}`),r.policy.escalate&&s.push(`- **Escalation:** ${r.policy.escalate}`),s.push(``)),a.includeSideEffects&&r.sideEffects){if(r.sideEffects.emits?.length){s.push(`## Events Emitted`),s.push(``);for(let e of r.sideEffects.emits)t(e)?s.push(`- \`${e.ref.name}.v${e.ref.version}\` — ${e.when}`):s.push(`- \`${e.name}.v${e.version}\` — ${e.when}`);s.push(``)}if(r.sideEffects.analytics?.length){s.push(`## Analytics Events`),s.push(``);for(let e of r.sideEffects.analytics)s.push(`- ${e}`);s.push(``)}}if(a.includeScenarios&&r.acceptance?.scenarios?.length){s.push(`## Acceptance Scenarios`),s.push(``);for(let e of r.acceptance.scenarios){s.push(`### ${e.name}`),s.push(``),s.push(`**Given:**`);for(let t of e.given)s.push(`- ${t}`);s.push(``),s.push(`**When:**`);for(let t of e.when)s.push(`- ${t}`);s.push(``),s.push(`**Then:**`);for(let t of e.then)s.push(`- ${t}`);s.push(``)}}if(a.includeExamples&&r.acceptance?.examples?.length){s.push(`## Examples`),s.push(``);for(let e of r.acceptance.examples)s.push(`### ${e.name}`),s.push(``),s.push(`**Input:**`),s.push("```json"),s.push(JSON.stringify(e.input,null,2)),s.push("```"),s.push(``),s.push(`**Output:**`),s.push("```json"),s.push(JSON.stringify(e.output,null,2)),s.push("```"),s.push(``)}return r.transport&&(s.push(`## Transport Configuration`),s.push(``),r.transport.rest&&s.push(`- **REST:** ${r.transport.rest.method??`POST`} ${r.transport.rest.path??`auto`}`),r.transport.gql&&s.push(`- **GraphQL:** ${r.transport.gql.field??`auto`}`),r.transport.mcp&&s.push(`- **MCP Tool:** ${r.transport.mcp.toolName??`auto`}`),s.push(``)),s.join(`
3
+ `)}function o(e,t){let n=t?.taskType??`implement`,r=e.meta,i=[],o={implement:`Implement`,test:`Write tests for`,refactor:`Refactor`,review:`Review`}[n];if(i.push(`# Task: ${o} ${r.name}.v${r.version}`),i.push(``),i.push(`## Context`),i.push(``),i.push(`You are working on a ContractSpec-driven codebase. This spec defines a ${r.kind} operation.`),i.push(``),i.push(`**Goal:** ${r.goal}`),i.push(``),i.push(`**Background:** ${r.context}`),i.push(``),i.push(`## Specification`),i.push(``),i.push(a(e)),i.push(``),i.push(`## Instructions`),i.push(``),n===`implement`){if(i.push(`Implement this specification following these requirements:`),i.push(``),i.push("1. **Type Safety**: Use TypeScript with strict typing. No `any` types."),i.push(`2. **Input Validation**: Validate input against the schema before processing.`),i.push(`3. **Error Handling**: Implement all error cases defined in the spec.`),i.push(`4. **Events**: Emit events as specified in sideEffects.emits.`),i.push(`5. **Policy**: Respect auth, rate limits, and feature flags.`),i.push(`6. **Idempotency**: `+(e.policy.idempotent?`This operation MUST be idempotent.`:`This operation may have side effects.`)),i.push(``),e.policy.pii?.length){i.push(`**PII Handling**: The following fields contain PII and must be handled carefully:`);for(let t of e.policy.pii)i.push(`- ${t}`);i.push(``)}}else n===`test`?(i.push(`Write comprehensive tests for this specification:`),i.push(``),i.push(`1. Test all acceptance scenarios defined in the spec.`),i.push(`2. Test all error cases with appropriate assertions.`),i.push(`3. Test edge cases and boundary conditions.`),i.push(`4. Verify events are emitted correctly.`),i.push(`5. Use descriptive test names following the pattern: "should [behavior] when [condition]"`),i.push(``)):n===`refactor`?(i.push(`Refactor this implementation while preserving all behavior:`),i.push(``),i.push(`1. Maintain compliance with the specification.`),i.push(`2. Improve code clarity and maintainability.`),i.push(`3. Reduce complexity where possible.`),i.push(`4. Ensure all existing tests still pass.`),i.push(``)):n===`review`&&(i.push(`Review this implementation against the specification:`),i.push(``),i.push(`1. Verify input/output types match the schema.`),i.push(`2. Check all error cases are handled.`),i.push(`3. Verify events are emitted as specified.`),i.push(`4. Check policy compliance (auth, rate limits).`),i.push(`5. Report any deviations from the spec.`),i.push(``));return t?.existingCode&&(i.push(`## Existing Code`),i.push(``),i.push("```typescript"),i.push(t.existingCode),i.push("```"),i.push(``)),i.push(`## Expected Output`),i.push(``),n===`implement`||n===`refactor`?(i.push(`Provide a complete TypeScript implementation. Include:`),i.push(`- Type definitions for input/output`),i.push(`- Handler function with proper error handling`),i.push(`- JSDoc comments explaining the implementation`)):n===`test`?i.push(`Provide a complete test file using the testing framework available (prefer Vitest).`):n===`review`&&(i.push(`Provide a structured review with:`),i.push(`- Compliance status (pass/fail for each requirement)`),i.push(`- Issues found with severity (error/warning/info)`),i.push(`- Suggestions for improvement`)),i.push(``),i.join(`
4
+ `)}function s(e,t,n={}){let i={...r,...n},o=e.meta,s=[];if(s.push(`# Feature: ${o.title??o.key}`),s.push(``),o.description&&(s.push(`> ${o.description}`),s.push(``)),s.push(`## Overview`),s.push(``),s.push(`- **Key:** \`${o.key}\``),s.push(`- **Stability:** ${o.stability}`),s.push(`- **Owners:** ${o.owners.join(`, `)}`),o.tags?.length&&s.push(`- **Tags:** ${o.tags.join(`, `)}`),s.push(``),e.operations?.length){s.push(`## Operations`),s.push(``),s.push(`| Name | Version | Type |`),s.push(`|------|---------|------|`);for(let n of e.operations){let e=(t?.specs?.getSpec(n.name,n.version))?.meta.kind??`unknown`;s.push(`| ${n.name} | v${n.version} | ${e} |`)}if(s.push(``),i.includeRelatedSpecs&&t?.specs){s.push(`### Operation Details`),s.push(``);for(let n of e.operations){let e=t.specs.getSpec(n.name,n.version);e&&(s.push(`---`),s.push(``),s.push(a(e,i)))}}}if(e.events?.length){s.push(`## Events`),s.push(``),s.push(`| Name | Version |`),s.push(`|------|---------|`);for(let t of e.events)s.push(`| ${t.name} | v${t.version} |`);s.push(``)}if(e.presentations?.length){s.push(`## Presentations`),s.push(``),s.push(`| Name | Version |`),s.push(`|------|---------|`);for(let t of e.presentations)s.push(`| ${t.name} | v${t.version} |`);if(s.push(``),i.includeRelatedPresentations&&t?.presentations){s.push(`### Presentation Details`),s.push(``);for(let n of e.presentations){let e=t.presentations.get(n.name,n.version);e&&(s.push(`#### ${n.name}.v${n.version}`),s.push(``),s.push(`- **Kind:** ${e.content.kind??`unknown`}`),`componentKey`in e.content&&s.push(`- **Component:** ${e.content.componentKey}`),s.push(``))}}}if(e.capabilities){if(e.capabilities.provides?.length){s.push(`## Capabilities Provided`),s.push(``);for(let t of e.capabilities.provides)s.push(`- \`${t.key}.v${t.version}\``);s.push(``)}if(e.capabilities.requires?.length){s.push(`## Capabilities Required`),s.push(``);for(let t of e.capabilities.requires)s.push(`- \`${t.key}\`${t.version?`.v${t.version}`:``} (${t.optional?`optional`:`required`})`);s.push(``)}}return s.join(`
5
+ `)}function c(e){let t=e.meta,n=[];n.push(`# Presentation: ${t.name}.v${t.version}`),n.push(``),t.description&&(n.push(`> ${t.description}`),n.push(``)),n.push(`## Metadata`),n.push(``),n.push(`- **Name:** ${t.name}`),n.push(`- **Version:** ${t.version}`),t.stability&&n.push(`- **Stability:** ${t.stability}`),t.owners?.length&&n.push(`- **Owners:** ${t.owners.join(`, `)}`),t.tags?.length&&n.push(`- **Tags:** ${t.tags.join(`, `)}`),n.push(``),n.push(`## Source`),n.push(``),n.push(`- **Type:** ${e.source.type}`),e.source.type===`component`&&(n.push(`- **Framework:** ${e.source.framework}`),n.push(`- **Component Key:** ${e.source.componentKey}`)),n.push(``),n.push(`## Supported Targets`),n.push(``);for(let t of e.targets)n.push(`- ${t}`);return n.push(``),e.policy&&(n.push(`## Policy`),n.push(``),e.policy.flags?.length&&n.push(`- **Feature Flags:** ${e.policy.flags.join(`, `)}`),e.policy.pii?.length&&n.push(`- **PII Fields:** ${e.policy.pii.join(`, `)}`),n.push(``)),n.join(`
6
+ `)}function l(e){let t=[];t.push(`# Event: ${e.name}.v${e.version}`),t.push(``),t.push(`## Metadata`),t.push(``),t.push(`- **Name:** ${e.name}`),t.push(`- **Version:** ${e.version}`),e.description&&t.push(`- **Description:** ${e.description}`),t.push(``),t.push(`## Payload Schema`),t.push(``),t.push("```json");try{let n=e.payload.getZod();if(`shape`in n&&n.shape){let e=n.shape,r=Object.keys(e);t.push(JSON.stringify({fields:r},null,2))}else t.push(`// Payload schema available at runtime`)}catch{t.push(`// Schema details available at runtime`)}return t.push("```"),t.push(``),t.join(`
7
+ `)}function u(e){let t=[];if(t.push(`# ${e.title}`),t.push(``),e.summary&&(t.push(`> ${e.summary}`),t.push(``)),t.push(`## Metadata`),t.push(``),t.push(`- **ID:** ${e.id}`),t.push(`- **Kind:** ${e.kind??`reference`}`),t.push(`- **Visibility:** ${e.visibility??`public`}`),e.tags?.length&&t.push(`- **Tags:** ${e.tags.join(`, `)}`),e.owners?.length&&t.push(`- **Owners:** ${e.owners.join(`, `)}`),e.domain&&t.push(`- **Domain:** ${e.domain}`),t.push(``),t.push(`## Content`),t.push(``),t.push(e.body),t.push(``),e.links?.length){t.push(`## Related Links`),t.push(``);for(let n of e.links)t.push(`- [${n.label}](${n.href})`);t.push(``)}return t.join(`
8
+ `)}function d(e,t={}){let n=t.format??`full`,r;switch(n){case`context`:r=i(e);break;case`prompt`:r=o(e);break;case`full`:default:r=a(e,t);break}return{spec:e,markdown:r,format:n,meta:{specName:e.meta.name,specVersion:e.meta.version,exportedAt:new Date().toISOString(),wordCount:r.split(/\s+/).length}}}function f(e,t,n={}){let r=n.format??`full`;return{feature:e,markdown:s(e,t,n),format:r,includedSpecs:e.operations?.map(e=>`${e.name}.v${e.version}`)??[],includedEvents:e.events?.map(e=>`${e.name}.v${e.version}`)??[],includedPresentations:e.presentations?.map(e=>`${e.name}.v${e.version}`)??[]}}export{u as docBlockToMarkdown,l as eventToMarkdown,f as exportFeature,d as exportSpec,s as featureToMarkdown,c as presentationToMarkdown,o as specToAgentPrompt,i as specToContextMarkdown,a as specToFullMarkdown};
@@ -0,0 +1 @@
1
+ import{docBlockToMarkdown as e,eventToMarkdown as t,exportFeature as n,exportSpec as r,featureToMarkdown as i,presentationToMarkdown as a,specToAgentPrompt as o,specToContextMarkdown as s,specToFullMarkdown as c}from"./exporters.js";import{AGENT_SYSTEM_PROMPTS as l,formatPlanForAgent as u,generateFixViolationsPrompt as d,generateImplementationPlan as f,generateImplementationPrompt as p,generateReviewPrompt as m,generateTestPrompt as h,generateVerificationPrompt as g}from"./prompts.js";export{l as AGENT_SYSTEM_PROMPTS,e as docBlockToMarkdown,t as eventToMarkdown,n as exportFeature,r as exportSpec,i as featureToMarkdown,u as formatPlanForAgent,d as generateFixViolationsPrompt,f as generateImplementationPlan,p as generateImplementationPrompt,m as generateReviewPrompt,h as generateTestPrompt,g as generateVerificationPrompt,a as presentationToMarkdown,o as specToAgentPrompt,s as specToContextMarkdown,c as specToFullMarkdown};