@abot-ai/runtime 1.0.0 → 1.1.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 (549) hide show
  1. package/README.md +17 -3
  2. package/dist/scripts/add-runtime-model.js +4 -0
  3. package/dist/scripts/configure-long-term-memory.d.ts +6 -0
  4. package/dist/scripts/configure-long-term-memory.js +139 -0
  5. package/dist/scripts/init-runtime.js +11 -1
  6. package/dist/scripts/runtime-setup-files.d.ts +1 -0
  7. package/dist/scripts/runtime-setup-files.js +4 -0
  8. package/dist/src/capabilities/normal-invocation/contracts.d.ts +1 -0
  9. package/dist/src/capabilities/normal-invocation/validator.d.ts +5 -0
  10. package/dist/src/capabilities/normal-invocation/validator.js +35 -2
  11. package/dist/src/capabilities/tool-definition-validator/definition-fields.d.ts +7 -0
  12. package/dist/src/capabilities/tool-definition-validator/definition-fields.js +156 -0
  13. package/dist/src/capabilities/tool-definition-validator/definition-parser.d.ts +2 -0
  14. package/dist/src/capabilities/tool-definition-validator/definition-parser.js +76 -0
  15. package/dist/src/capabilities/tool-definition-validator/definition-shape.d.ts +7 -0
  16. package/dist/src/capabilities/tool-definition-validator/definition-shape.js +34 -0
  17. package/dist/src/capabilities/tool-definition-validator/event-presentation.d.ts +2 -0
  18. package/dist/src/capabilities/tool-definition-validator/event-presentation.js +97 -0
  19. package/dist/src/capabilities/tool-definition-validator/module-registry.d.ts +3 -0
  20. package/dist/src/capabilities/tool-definition-validator/module-registry.js +99 -0
  21. package/dist/src/capabilities/tool-definition-validator/payload-channel-spec.d.ts +2 -0
  22. package/dist/src/capabilities/tool-definition-validator/payload-channel-spec.js +190 -0
  23. package/dist/src/capabilities/tool-definition-validator/payload-channel-stage.d.ts +11 -0
  24. package/dist/src/capabilities/tool-definition-validator/payload-channel-stage.js +155 -0
  25. package/dist/src/capabilities/tool-definition-validator/payload-stage-conditions.d.ts +24 -0
  26. package/dist/src/capabilities/tool-definition-validator/payload-stage-conditions.js +193 -0
  27. package/dist/src/capabilities/tool-definition-validator.d.ts +2 -4
  28. package/dist/src/capabilities/tool-definition-validator.js +2 -776
  29. package/dist/src/cli/abot.js +11 -2
  30. package/dist/src/model-gateway/client/embeddings.d.ts +3 -0
  31. package/dist/src/model-gateway/client/embeddings.js +48 -0
  32. package/dist/src/model-gateway/client.d.ts +3 -1
  33. package/dist/src/model-gateway/client.js +5 -0
  34. package/dist/src/model-gateway/embeddings/constants.d.ts +1 -0
  35. package/dist/src/model-gateway/embeddings/constants.js +1 -0
  36. package/dist/src/model-gateway/embeddings/discovery.d.ts +10 -0
  37. package/dist/src/model-gateway/embeddings/discovery.js +39 -0
  38. package/dist/src/model-gateway/embeddings/execution.d.ts +16 -0
  39. package/dist/src/model-gateway/embeddings/execution.js +64 -0
  40. package/dist/src/model-gateway/embeddings/fingerprint.d.ts +3 -0
  41. package/dist/src/model-gateway/embeddings/fingerprint.js +36 -0
  42. package/dist/src/model-gateway/embeddings/profile.d.ts +11 -0
  43. package/dist/src/model-gateway/embeddings/profile.js +37 -0
  44. package/dist/src/model-gateway/embeddings/server-handler.d.ts +3 -0
  45. package/dist/src/model-gateway/embeddings/server-handler.js +89 -0
  46. package/dist/src/model-gateway/embeddings/validation.d.ts +7 -0
  47. package/dist/src/model-gateway/embeddings/validation.js +69 -0
  48. package/dist/src/model-gateway/index.d.ts +5 -3
  49. package/dist/src/model-gateway/index.js +3 -1
  50. package/dist/src/model-gateway/providers/contracts.d.ts +27 -1
  51. package/dist/src/model-gateway/providers/ollama/adapter.js +4 -0
  52. package/dist/src/model-gateway/providers/ollama/base-url.d.ts +1 -0
  53. package/dist/src/model-gateway/providers/ollama/base-url.js +4 -0
  54. package/dist/src/model-gateway/providers/ollama/embedding-models.d.ts +2 -0
  55. package/dist/src/model-gateway/providers/ollama/embedding-models.js +31 -0
  56. package/dist/src/model-gateway/providers/ollama/embeddings.d.ts +2 -0
  57. package/dist/src/model-gateway/providers/ollama/embeddings.js +43 -0
  58. package/dist/src/model-gateway/providers/ollama/request-diagnostics.js +2 -1
  59. package/dist/src/model-gateway/providers/openai/adapter.js +2 -0
  60. package/dist/src/model-gateway/providers/openai/embeddings.d.ts +2 -0
  61. package/dist/src/model-gateway/providers/openai/embeddings.js +87 -0
  62. package/dist/src/model-gateway/providers/openai/payload.js +5 -8
  63. package/dist/src/model-gateway/server/contracts.d.ts +5 -3
  64. package/dist/src/model-gateway/server/create-server.js +9 -0
  65. package/dist/src/model-gateway/server/errors.js +34 -0
  66. package/dist/src/model-gateway/server/index.d.ts +2 -0
  67. package/dist/src/model-gateway/server/index.js +2 -0
  68. package/dist/src/model-gateway/server/provider-fetch.d.ts +5 -3
  69. package/dist/src/model-gateway/server/provider-fetch.js +3 -1
  70. package/dist/src/model-gateway/server/request-body.d.ts +1 -1
  71. package/dist/src/model-gateway/types.d.ts +39 -0
  72. package/dist/src/plugin-contract/manifest.d.ts +1 -0
  73. package/dist/src/runtime/adapters/index.d.ts +4 -0
  74. package/dist/src/runtime/adapters/index.js +4 -0
  75. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.d.ts +2 -0
  76. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +77 -0
  77. package/dist/src/runtime/adapters/long-term-memory/file-lock/cleanup.d.ts +4 -0
  78. package/dist/src/runtime/adapters/long-term-memory/file-lock/cleanup.js +52 -0
  79. package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.d.ts +31 -0
  80. package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.js +17 -0
  81. package/dist/src/runtime/adapters/long-term-memory/file-lock/install.d.ts +1 -0
  82. package/dist/src/runtime/adapters/long-term-memory/file-lock/install.js +36 -0
  83. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.d.ts +2 -0
  84. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +114 -0
  85. package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.d.ts +2 -0
  86. package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +103 -0
  87. package/dist/src/runtime/adapters/long-term-memory/file-lock.d.ts +2 -0
  88. package/dist/src/runtime/adapters/long-term-memory/file-lock.js +10 -0
  89. package/dist/src/runtime/adapters/long-term-memory/file-repository.d.ts +2 -0
  90. package/dist/src/runtime/adapters/long-term-memory/file-repository.js +57 -0
  91. package/dist/src/runtime/adapters/long-term-memory/in-memory-repository.d.ts +2 -0
  92. package/dist/src/runtime/adapters/long-term-memory/in-memory-repository.js +21 -0
  93. package/dist/src/runtime/adapters/long-term-memory/onboarding-config-repository.d.ts +5 -0
  94. package/dist/src/runtime/adapters/long-term-memory/onboarding-config-repository.js +60 -0
  95. package/dist/src/runtime/adapters/long-term-memory/onboarding-service.d.ts +8 -0
  96. package/dist/src/runtime/adapters/long-term-memory/onboarding-service.js +34 -0
  97. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.d.ts +7 -1
  98. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.js +54 -25
  99. package/dist/src/runtime/adapters/registered-tool-normal-invocations/executor.js +18 -4
  100. package/dist/src/runtime/adapters/registered-tool-normal-invocations/payload/lifecycle.d.ts +6 -1
  101. package/dist/src/runtime/adapters/registered-tool-normal-invocations/payload/lifecycle.js +25 -12
  102. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/action-fingerprint.d.ts +22 -0
  103. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/action-fingerprint.js +65 -0
  104. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/contracts.d.ts +44 -0
  105. package/dist/src/runtime/adapters/registered-tool-normal-invocations.d.ts +1 -1
  106. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/catalog.js +14 -4
  107. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +218 -87
  108. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/failure-outcome-fingerprint.d.ts +7 -0
  109. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/failure-outcome-fingerprint.js +84 -0
  110. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.d.ts +5 -4
  111. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.js +7 -1
  112. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-observability.d.ts +35 -0
  113. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-observability.js +32 -0
  114. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +3 -3
  115. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +13 -8
  116. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.d.ts +5 -4
  117. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.js +4 -2
  118. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/result-observer.js +12 -4
  119. package/dist/src/runtime/composition.d.ts +3 -0
  120. package/dist/src/runtime/composition.js +5 -2
  121. package/dist/src/runtime/config/builders.js +34 -1
  122. package/dist/src/runtime/config/effective-model-config-validation.js +9 -0
  123. package/dist/src/runtime/config/embedding-profiles.d.ts +5 -0
  124. package/dist/src/runtime/config/embedding-profiles.js +66 -0
  125. package/dist/src/runtime/config/fields.js +22 -0
  126. package/dist/src/runtime/config/long-term-memory.d.ts +9 -0
  127. package/dist/src/runtime/config/long-term-memory.js +71 -0
  128. package/dist/src/runtime/config/runner/config-normalization.d.ts +16 -0
  129. package/dist/src/runtime/config/runner/config-normalization.js +109 -0
  130. package/dist/src/runtime/config/runner/loader.d.ts +1 -1
  131. package/dist/src/runtime/config/runner/loader.js +2 -69
  132. package/dist/src/runtime/config/runner/model-policy.js +3 -0
  133. package/dist/src/runtime/config/runner/schema-version.d.ts +14 -0
  134. package/dist/src/runtime/config/runner/schema-version.js +35 -0
  135. package/dist/src/runtime/config/runner/versioned-config.d.ts +2 -0
  136. package/dist/src/runtime/config/runner/versioned-config.js +51 -0
  137. package/dist/src/runtime/config/schema.js +36 -0
  138. package/dist/src/runtime/config/types.d.ts +1 -0
  139. package/dist/src/runtime/config/validation/environment-config-validation.d.ts +1 -0
  140. package/dist/src/runtime/config/validation/environment-config-validation.js +41 -0
  141. package/dist/src/runtime/config/validation/model-invocation-config-validation.d.ts +2 -0
  142. package/dist/src/runtime/config/validation/model-invocation-config-validation.js +64 -0
  143. package/dist/src/runtime/config/validation/model-invocation-override-validation.d.ts +2 -0
  144. package/dist/src/runtime/config/validation/model-invocation-override-validation.js +72 -0
  145. package/dist/src/runtime/config/validation/model-profile-validation.d.ts +4 -0
  146. package/dist/src/runtime/config/validation/model-profile-validation.js +87 -0
  147. package/dist/src/runtime/config/validation/model-registry-validation.d.ts +2 -0
  148. package/dist/src/runtime/config/validation/model-registry-validation.js +118 -0
  149. package/dist/src/runtime/config/validation/path-config-validation.d.ts +1 -0
  150. package/dist/src/runtime/config/validation/path-config-validation.js +7 -0
  151. package/dist/src/runtime/config/validation/runtime-config-field-validation.d.ts +12 -0
  152. package/dist/src/runtime/config/validation/runtime-config-field-validation.js +158 -0
  153. package/dist/src/runtime/config/validation/runtime-config-validation-contract.d.ts +9 -0
  154. package/dist/src/runtime/config/validation/runtime-config-validation-contract.js +13 -0
  155. package/dist/src/runtime/config/validation/runtime-root-section-validation.d.ts +6 -0
  156. package/dist/src/runtime/config/validation/runtime-root-section-validation.js +82 -0
  157. package/dist/src/runtime/config/validation/web-ui-config-validation.d.ts +3 -0
  158. package/dist/src/runtime/config/validation/web-ui-config-validation.js +26 -0
  159. package/dist/src/runtime/config/validation.d.ts +4 -15
  160. package/dist/src/runtime/config/validation.js +27 -499
  161. package/dist/src/runtime/config.js +3 -0
  162. package/dist/src/runtime/context/accepted-capability-action.d.ts +11 -0
  163. package/dist/src/runtime/context/accepted-capability-action.js +29 -0
  164. package/dist/src/runtime/context/model-step-compaction.js +6 -0
  165. package/dist/src/runtime/context/operation-supervision-evidence.d.ts +37 -0
  166. package/dist/src/runtime/context/operation-supervision-evidence.js +90 -0
  167. package/dist/src/runtime/context/request-tool-results.d.ts +3 -0
  168. package/dist/src/runtime/context/request-tool-results.js +11 -2
  169. package/dist/src/runtime/default-adapters.d.ts +3 -0
  170. package/dist/src/runtime/default-adapters.js +64 -3
  171. package/dist/src/runtime/index.d.ts +1 -0
  172. package/dist/src/runtime/index.js +1 -0
  173. package/dist/src/runtime/lifecycle/request-finalizer.d.ts +3 -0
  174. package/dist/src/runtime/lifecycle/request-finalizer.js +8 -0
  175. package/dist/src/runtime/long-term-memory/background-save-queue.d.ts +17 -0
  176. package/dist/src/runtime/long-term-memory/background-save-queue.js +66 -0
  177. package/dist/src/runtime/long-term-memory/candidate-persistence.d.ts +16 -0
  178. package/dist/src/runtime/long-term-memory/candidate-persistence.js +109 -0
  179. package/dist/src/runtime/long-term-memory/candidate-preparation.d.ts +8 -0
  180. package/dist/src/runtime/long-term-memory/candidate-preparation.js +36 -0
  181. package/dist/src/runtime/long-term-memory/candidate-processing.d.ts +9 -0
  182. package/dist/src/runtime/long-term-memory/candidate-processing.js +79 -0
  183. package/dist/src/runtime/long-term-memory/contracts.d.ts +108 -0
  184. package/dist/src/runtime/long-term-memory/contracts.js +1 -0
  185. package/dist/src/runtime/long-term-memory/diagnostics.d.ts +9 -0
  186. package/dist/src/runtime/long-term-memory/diagnostics.js +42 -0
  187. package/dist/src/runtime/long-term-memory/embedding-batches.d.ts +13 -0
  188. package/dist/src/runtime/long-term-memory/embedding-batches.js +87 -0
  189. package/dist/src/runtime/long-term-memory/events.d.ts +13 -0
  190. package/dist/src/runtime/long-term-memory/events.js +15 -0
  191. package/dist/src/runtime/long-term-memory/finalization.d.ts +8 -0
  192. package/dist/src/runtime/long-term-memory/finalization.js +24 -0
  193. package/dist/src/runtime/long-term-memory/index.d.ts +6 -0
  194. package/dist/src/runtime/long-term-memory/index.js +6 -0
  195. package/dist/src/runtime/long-term-memory/management/contracts.d.ts +54 -0
  196. package/dist/src/runtime/long-term-memory/management/contracts.js +1 -0
  197. package/dist/src/runtime/long-term-memory/management/errors.d.ts +10 -0
  198. package/dist/src/runtime/long-term-memory/management/errors.js +13 -0
  199. package/dist/src/runtime/long-term-memory/management/mutations.d.ts +17 -0
  200. package/dist/src/runtime/long-term-memory/management/mutations.js +178 -0
  201. package/dist/src/runtime/long-term-memory/management/queries.d.ts +8 -0
  202. package/dist/src/runtime/long-term-memory/management/queries.js +46 -0
  203. package/dist/src/runtime/long-term-memory/management/search.d.ts +7 -0
  204. package/dist/src/runtime/long-term-memory/management/search.js +18 -0
  205. package/dist/src/runtime/long-term-memory/management/service.d.ts +13 -0
  206. package/dist/src/runtime/long-term-memory/management/service.js +61 -0
  207. package/dist/src/runtime/long-term-memory/management/validation.d.ts +24 -0
  208. package/dist/src/runtime/long-term-memory/management/validation.js +77 -0
  209. package/dist/src/runtime/long-term-memory/onboarding/configuration.d.ts +14 -0
  210. package/dist/src/runtime/long-term-memory/onboarding/configuration.js +92 -0
  211. package/dist/src/runtime/long-term-memory/onboarding/contracts.d.ts +52 -0
  212. package/dist/src/runtime/long-term-memory/onboarding/contracts.js +1 -0
  213. package/dist/src/runtime/long-term-memory/onboarding/service.d.ts +21 -0
  214. package/dist/src/runtime/long-term-memory/onboarding/service.js +88 -0
  215. package/dist/src/runtime/long-term-memory/policies/normalization.d.ts +10 -0
  216. package/dist/src/runtime/long-term-memory/policies/normalization.js +45 -0
  217. package/dist/src/runtime/long-term-memory/policies/reconciliation.d.ts +20 -0
  218. package/dist/src/runtime/long-term-memory/policies/reconciliation.js +21 -0
  219. package/dist/src/runtime/long-term-memory/policies/scoring.d.ts +13 -0
  220. package/dist/src/runtime/long-term-memory/policies/scoring.js +55 -0
  221. package/dist/src/runtime/long-term-memory/policies/sensitive-data.d.ts +5 -0
  222. package/dist/src/runtime/long-term-memory/policies/sensitive-data.js +12 -0
  223. package/dist/src/runtime/long-term-memory/projection.d.ts +4 -0
  224. package/dist/src/runtime/long-term-memory/projection.js +39 -0
  225. package/dist/src/runtime/long-term-memory/ranked-search.d.ts +11 -0
  226. package/dist/src/runtime/long-term-memory/ranked-search.js +111 -0
  227. package/dist/src/runtime/long-term-memory/repository-state.d.ts +4 -0
  228. package/dist/src/runtime/long-term-memory/repository-state.js +131 -0
  229. package/dist/src/runtime/long-term-memory/response-context.d.ts +5 -0
  230. package/dist/src/runtime/long-term-memory/response-context.js +21 -0
  231. package/dist/src/runtime/long-term-memory/retrieval.d.ts +8 -0
  232. package/dist/src/runtime/long-term-memory/retrieval.js +73 -0
  233. package/dist/src/runtime/long-term-memory/service.d.ts +10 -0
  234. package/dist/src/runtime/long-term-memory/service.js +83 -0
  235. package/dist/src/runtime/orchestration/capability-adapters/index.d.ts +2 -0
  236. package/dist/src/runtime/orchestration/capability-adapters/index.js +2 -0
  237. package/dist/src/runtime/orchestration/final-response/authoring-contract.d.ts +10 -0
  238. package/dist/src/runtime/orchestration/final-response/authoring-contract.js +94 -0
  239. package/dist/src/runtime/orchestration/final-response/finalization.d.ts +1 -0
  240. package/dist/src/runtime/orchestration/final-response/finalization.js +1 -0
  241. package/dist/src/runtime/orchestration/final-response/format.d.ts +2 -0
  242. package/dist/src/runtime/orchestration/final-response/format.js +49 -0
  243. package/dist/src/runtime/orchestration/final-response/invoke.d.ts +16 -0
  244. package/dist/src/runtime/orchestration/final-response/invoke.js +24 -0
  245. package/dist/src/runtime/orchestration/role-calls/activation-budget.d.ts +14 -0
  246. package/dist/src/runtime/orchestration/role-calls/activation-budget.js +52 -0
  247. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +154 -0
  248. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.js +1 -8
  249. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-issuance.d.ts +17 -0
  250. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-issuance.js +155 -0
  251. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision.d.ts +78 -0
  252. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision.js +339 -0
  253. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +35 -10
  254. package/dist/src/runtime/orchestration/role-calls/command-dispatch/active-capability-caller.d.ts +6 -0
  255. package/dist/src/runtime/orchestration/role-calls/command-dispatch/active-capability-caller.js +15 -0
  256. package/dist/src/runtime/orchestration/role-calls/command-dispatch/call-frame-state.d.ts +3 -0
  257. package/dist/src/runtime/orchestration/role-calls/command-dispatch/call-frame-state.js +6 -0
  258. package/dist/src/runtime/orchestration/role-calls/command-dispatch/call-scope-transitions.d.ts +3 -0
  259. package/dist/src/runtime/orchestration/role-calls/command-dispatch/call-scope-transitions.js +86 -0
  260. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-batch-transitions.d.ts +3 -0
  261. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-batch-transitions.js +172 -0
  262. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-execution-state.d.ts +9 -0
  263. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-execution-state.js +28 -0
  264. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-execution-transitions.d.ts +3 -0
  265. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-execution-transitions.js +117 -0
  266. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-invocation.d.ts +4 -0
  267. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-invocation.js +16 -0
  268. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-selection-transition.d.ts +2 -0
  269. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-selection-transition.js +114 -0
  270. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-settlement.d.ts +6 -0
  271. package/dist/src/runtime/orchestration/role-calls/command-dispatch/capability-settlement.js +54 -0
  272. package/dist/src/runtime/orchestration/role-calls/command-dispatch/child-transitions.d.ts +3 -0
  273. package/dist/src/runtime/orchestration/role-calls/command-dispatch/child-transitions.js +206 -0
  274. package/dist/src/runtime/orchestration/role-calls/command-dispatch/operation-supervision-intervention.d.ts +13 -0
  275. package/dist/src/runtime/orchestration/role-calls/command-dispatch/operation-supervision-intervention.js +25 -0
  276. package/dist/src/runtime/orchestration/role-calls/command-dispatch/root-transitions.d.ts +3 -0
  277. package/dist/src/runtime/orchestration/role-calls/command-dispatch/root-transitions.js +70 -0
  278. package/dist/src/runtime/orchestration/role-calls/command-dispatch.d.ts +1 -1
  279. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +6 -580
  280. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +45 -5
  281. package/dist/src/runtime/orchestration/role-calls/contracts.js +2 -2
  282. package/dist/src/runtime/orchestration/role-calls/diagnostics.d.ts +4 -0
  283. package/dist/src/runtime/orchestration/role-calls/diagnostics.js +152 -1
  284. package/dist/src/runtime/orchestration/role-calls/index.d.ts +6 -0
  285. package/dist/src/runtime/orchestration/role-calls/index.js +6 -0
  286. package/dist/src/runtime/orchestration/role-calls/ledger.js +131 -7
  287. package/dist/src/runtime/orchestration/role-calls/operation-supervision-issuance.d.ts +11 -0
  288. package/dist/src/runtime/orchestration/role-calls/operation-supervision-issuance.js +66 -0
  289. package/dist/src/runtime/orchestration/role-calls/operation-supervision-projection.d.ts +16 -0
  290. package/dist/src/runtime/orchestration/role-calls/operation-supervision-projection.js +52 -0
  291. package/dist/src/runtime/orchestration/role-calls/operation-supervision-state-validation.d.ts +3 -0
  292. package/dist/src/runtime/orchestration/role-calls/operation-supervision-state-validation.js +151 -0
  293. package/dist/src/runtime/orchestration/role-calls/operation-supervision.d.ts +112 -0
  294. package/dist/src/runtime/orchestration/role-calls/operation-supervision.js +197 -0
  295. package/dist/src/runtime/orchestration/role-calls/reconsideration-cause.d.ts +26 -0
  296. package/dist/src/runtime/orchestration/role-calls/reconsideration-cause.js +127 -0
  297. package/dist/src/runtime/orchestration/role-calls/reducer-primitives.d.ts +1 -2
  298. package/dist/src/runtime/orchestration/role-calls/reducer-primitives.js +2 -12
  299. package/dist/src/runtime/orchestration/role-calls/reducer.js +19 -2
  300. package/dist/src/runtime/orchestration/role-calls/transactions.js +62 -5
  301. package/dist/src/runtime/orchestration/role-executors/activation/capability-continuation.d.ts +15 -0
  302. package/dist/src/runtime/orchestration/role-executors/activation/capability-continuation.js +73 -0
  303. package/dist/src/runtime/orchestration/role-executors/activation/loop.d.ts +0 -1
  304. package/dist/src/runtime/orchestration/role-executors/activation/loop.js +16 -54
  305. package/dist/src/runtime/orchestration/role-executors/activation/result-normalization.js +14 -0
  306. package/dist/src/runtime/orchestration/role-executors/activation/state-validation.d.ts +13 -1
  307. package/dist/src/runtime/orchestration/role-executors/activation/state-validation.js +137 -1
  308. package/dist/src/runtime/orchestration/role-executors/contracts.d.ts +7 -3
  309. package/dist/src/runtime/orchestration/role-executors/diagnostics.d.ts +2 -0
  310. package/dist/src/runtime/orchestration/role-executors/diagnostics.js +1 -6
  311. package/dist/src/runtime/orchestration/worker-capabilities/batch-selection.d.ts +10 -0
  312. package/dist/src/runtime/orchestration/worker-capabilities/batch-selection.js +8 -0
  313. package/dist/src/runtime/orchestration/worker-capabilities/binding/adapter-catalog.d.ts +14 -0
  314. package/dist/src/runtime/orchestration/worker-capabilities/binding/adapter-catalog.js +76 -0
  315. package/dist/src/runtime/orchestration/worker-capabilities/binding/adapter-normalization.d.ts +10 -0
  316. package/dist/src/runtime/orchestration/worker-capabilities/binding/adapter-normalization.js +160 -0
  317. package/dist/src/runtime/orchestration/worker-capabilities/binding/binding-rejection.d.ts +2 -0
  318. package/dist/src/runtime/orchestration/worker-capabilities/binding/binding-rejection.js +8 -0
  319. package/dist/src/runtime/orchestration/worker-capabilities/binding/bound-capability-session.d.ts +24 -0
  320. package/dist/src/runtime/orchestration/worker-capabilities/binding/bound-capability-session.js +100 -0
  321. package/dist/src/runtime/orchestration/worker-capabilities/binding/call-authority.d.ts +29 -0
  322. package/dist/src/runtime/orchestration/worker-capabilities/binding/call-authority.js +193 -0
  323. package/dist/src/runtime/orchestration/worker-capabilities/binding/create-binding.d.ts +11 -0
  324. package/dist/src/runtime/orchestration/worker-capabilities/binding/create-binding.js +109 -0
  325. package/dist/src/runtime/orchestration/worker-capabilities/binding/dependency-results.d.ts +2 -0
  326. package/dist/src/runtime/orchestration/worker-capabilities/binding/dependency-results.js +34 -0
  327. package/dist/src/runtime/orchestration/worker-capabilities/binding/invocation-preparation.d.ts +21 -0
  328. package/dist/src/runtime/orchestration/worker-capabilities/binding/invocation-preparation.js +167 -0
  329. package/dist/src/runtime/orchestration/worker-capabilities/binding.d.ts +1 -13
  330. package/dist/src/runtime/orchestration/worker-capabilities/binding.js +1 -625
  331. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +57 -14
  332. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +3 -1
  333. package/dist/src/runtime/orchestration/worker-capabilities/controls.d.ts +7 -0
  334. package/dist/src/runtime/orchestration/worker-capabilities/controls.js +50 -0
  335. package/dist/src/runtime/orchestration/worker-capabilities/error-fingerprint.d.ts +5 -0
  336. package/dist/src/runtime/orchestration/worker-capabilities/error-fingerprint.js +119 -0
  337. package/dist/src/runtime/orchestration/worker-capabilities/errors.d.ts +6 -0
  338. package/dist/src/runtime/orchestration/worker-capabilities/errors.js +11 -0
  339. package/dist/src/runtime/orchestration/worker-capabilities/execution/adapter-exact-result.d.ts +7 -0
  340. package/dist/src/runtime/orchestration/worker-capabilities/execution/adapter-exact-result.js +35 -0
  341. package/dist/src/runtime/orchestration/worker-capabilities/execution/adapter-execution.d.ts +9 -0
  342. package/dist/src/runtime/orchestration/worker-capabilities/execution/adapter-execution.js +28 -0
  343. package/dist/src/runtime/orchestration/worker-capabilities/execution/adapter-result-normalization.d.ts +18 -0
  344. package/dist/src/runtime/orchestration/worker-capabilities/execution/adapter-result-normalization.js +197 -0
  345. package/dist/src/runtime/orchestration/worker-capabilities/execution/adapter-result-references.d.ts +2 -0
  346. package/dist/src/runtime/orchestration/worker-capabilities/execution/adapter-result-references.js +44 -0
  347. package/dist/src/runtime/orchestration/worker-capabilities/execution/context-projection.d.ts +12 -0
  348. package/dist/src/runtime/orchestration/worker-capabilities/execution/context-projection.js +51 -0
  349. package/dist/src/runtime/orchestration/worker-capabilities/execution/invocation-preparation.d.ts +25 -0
  350. package/dist/src/runtime/orchestration/worker-capabilities/execution/invocation-preparation.js +111 -0
  351. package/dist/src/runtime/orchestration/worker-capabilities/execution/ledger-transaction.d.ts +20 -0
  352. package/dist/src/runtime/orchestration/worker-capabilities/execution/ledger-transaction.js +142 -0
  353. package/dist/src/runtime/orchestration/worker-capabilities/execution.d.ts +10 -14
  354. package/dist/src/runtime/orchestration/worker-capabilities/execution.js +84 -357
  355. package/dist/src/runtime/orchestration/worker-capabilities/index.d.ts +3 -0
  356. package/dist/src/runtime/orchestration/worker-capabilities/index.js +3 -0
  357. package/dist/src/runtime/orchestration/worker-capabilities/outcome-fingerprint.d.ts +8 -0
  358. package/dist/src/runtime/orchestration/worker-capabilities/outcome-fingerprint.js +21 -0
  359. package/dist/src/runtime/orchestration/worker-capabilities/payload-author.js +31 -9
  360. package/dist/src/runtime/orchestration/worker-capabilities/payload-contracts.d.ts +15 -6
  361. package/dist/src/runtime/orchestration/worker-capabilities/payload-contracts.js +2 -0
  362. package/dist/src/runtime/orchestration/worker-capabilities/payload-instructions.js +4 -4
  363. package/dist/src/runtime/orchestration/worker-capabilities/preparation-fingerprint.d.ts +23 -0
  364. package/dist/src/runtime/orchestration/worker-capabilities/preparation-fingerprint.js +109 -0
  365. package/dist/src/runtime/plugins/manifest-projection.js +3 -0
  366. package/dist/src/runtime/plugins/manifest-validator.js +20 -0
  367. package/dist/src/runtime/ports.d.ts +10 -1
  368. package/dist/src/runtime/request/contracts.d.ts +7 -0
  369. package/dist/src/runtime/request/dependencies.d.ts +1 -0
  370. package/dist/src/runtime/request/dependencies.js +10 -1
  371. package/dist/src/runtime/request/execution-agent-root-execution.js +5 -4
  372. package/dist/src/runtime/request/execution-facets.d.ts +2 -1
  373. package/dist/src/runtime/request/execution-facets.js +6 -0
  374. package/dist/src/runtime/request/execution-scope-surfaces.js +6 -0
  375. package/dist/src/runtime/request/execution-scope.d.ts +3 -2
  376. package/dist/src/runtime/request/handler.js +4 -1
  377. package/dist/src/runtime/request/result.d.ts +2 -0
  378. package/dist/src/runtime/request/root-contract.d.ts +4 -2
  379. package/dist/src/runtime/request/root-execution-kernel.js +100 -31
  380. package/dist/src/runtime/request/supervisor-root-execution.js +4 -2
  381. package/dist/src/runtime/request/worker-capability-payload-prompts.js +1 -1
  382. package/dist/src/runtime/steps/execution-agent/capability-invocation-contract.d.ts +24 -0
  383. package/dist/src/runtime/steps/execution-agent/capability-invocation-contract.js +52 -0
  384. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +5 -2
  385. package/dist/src/runtime/steps/execution-agent/format.js +19 -6
  386. package/dist/src/runtime/steps/execution-agent/input.js +8 -12
  387. package/dist/src/runtime/steps/execution-agent/parser.js +25 -19
  388. package/dist/src/runtime/steps/execution-agent/prompt.js +3 -2
  389. package/dist/src/runtime/steps/execution-agent/reconsideration-context.d.ts +3 -0
  390. package/dist/src/runtime/steps/execution-agent/reconsideration-context.js +76 -0
  391. package/dist/src/runtime/steps/execution-agent/refinement-prompt.js +4 -4
  392. package/dist/src/runtime/steps/execution-agent/refinement-reconsideration.d.ts +3 -0
  393. package/dist/src/runtime/steps/execution-agent/refinement-reconsideration.js +25 -0
  394. package/dist/src/runtime/steps/execution-agent/refinement.d.ts +4 -7
  395. package/dist/src/runtime/steps/execution-agent/refinement.js +24 -35
  396. package/dist/src/runtime/steps/execution-agent/response-input.d.ts +2 -0
  397. package/dist/src/runtime/steps/execution-agent/response-input.js +22 -6
  398. package/dist/src/runtime/steps/execution-agent/response-prompt.d.ts +1 -1
  399. package/dist/src/runtime/steps/execution-agent/response-prompt.js +8 -3
  400. package/dist/src/runtime/steps/execution-agent/response-run.d.ts +6 -0
  401. package/dist/src/runtime/steps/execution-agent/response-run.js +40 -10
  402. package/dist/src/runtime/steps/execution-agent/run.js +6 -6
  403. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +4 -1
  404. package/dist/src/runtime/steps/execution-agent/state-context.js +40 -23
  405. package/dist/src/runtime/steps/supervisor-response/index.d.ts +1 -1
  406. package/dist/src/runtime/steps/supervisor-response/index.js +1 -1
  407. package/dist/src/runtime/steps/supervisor-response/input.d.ts +13 -5
  408. package/dist/src/runtime/steps/supervisor-response/input.js +27 -8
  409. package/dist/src/runtime/steps/supervisor-response/memory-authoring.d.ts +10 -0
  410. package/dist/src/runtime/steps/supervisor-response/memory-authoring.js +125 -0
  411. package/dist/src/runtime/steps/supervisor-response/prompt.d.ts +4 -0
  412. package/dist/src/runtime/steps/supervisor-response/prompt.js +19 -0
  413. package/dist/src/runtime/steps/supervisor-response/run.d.ts +8 -0
  414. package/dist/src/runtime/steps/supervisor-response/run.js +46 -17
  415. package/dist/src/runtime/steps/worker-decision/contracts.d.ts +8 -1
  416. package/dist/src/runtime/steps/worker-decision/contracts.js +3 -0
  417. package/dist/src/runtime/steps/worker-decision/format.d.ts +4 -0
  418. package/dist/src/runtime/steps/worker-decision/format.js +97 -22
  419. package/dist/src/runtime/steps/worker-decision/input/action-policy.d.ts +9 -0
  420. package/dist/src/runtime/steps/worker-decision/input/action-policy.js +15 -0
  421. package/dist/src/runtime/steps/worker-decision/input/canonical-state.d.ts +2 -2
  422. package/dist/src/runtime/steps/worker-decision/input/canonical-state.js +19 -7
  423. package/dist/src/runtime/steps/worker-decision/input/capability-selection.js +44 -3
  424. package/dist/src/runtime/steps/worker-decision/input/contract.d.ts +1 -0
  425. package/dist/src/runtime/steps/worker-decision/input/contract.js +12 -6
  426. package/dist/src/runtime/steps/worker-decision/input/diagnostic-projection.js +14 -5
  427. package/dist/src/runtime/steps/worker-decision/input/prompt-context.js +9 -6
  428. package/dist/src/runtime/steps/worker-decision/input/reference-context.js +21 -3
  429. package/dist/src/runtime/steps/worker-decision/input/session.js +2 -1
  430. package/dist/src/runtime/steps/worker-decision/input/types.d.ts +6 -1
  431. package/dist/src/runtime/steps/worker-decision/input.d.ts +2 -2
  432. package/dist/src/runtime/steps/worker-decision/input.js +1 -2
  433. package/dist/src/runtime/steps/worker-decision/parser/accepted-decision.d.ts +3 -0
  434. package/dist/src/runtime/steps/worker-decision/parser/accepted-decision.js +70 -0
  435. package/dist/src/runtime/steps/worker-decision/parser/action-validation.d.ts +4 -0
  436. package/dist/src/runtime/steps/worker-decision/parser/action-validation.js +55 -0
  437. package/dist/src/runtime/steps/worker-decision/parser/capability-batch-validation.d.ts +3 -0
  438. package/dist/src/runtime/steps/worker-decision/parser/capability-batch-validation.js +135 -0
  439. package/dist/src/runtime/steps/worker-decision/parser/capability-controls-validation.d.ts +6 -0
  440. package/dist/src/runtime/steps/worker-decision/parser/capability-controls-validation.js +132 -0
  441. package/dist/src/runtime/steps/worker-decision/parser/capability-invocation-validation.d.ts +4 -0
  442. package/dist/src/runtime/steps/worker-decision/parser/capability-invocation-validation.js +104 -0
  443. package/dist/src/runtime/steps/worker-decision/parser/decision-shape-validation.d.ts +4 -0
  444. package/dist/src/runtime/steps/worker-decision/parser/decision-shape-validation.js +28 -0
  445. package/dist/src/runtime/steps/worker-decision/parser/pending-capability-selection-validation.d.ts +4 -0
  446. package/dist/src/runtime/steps/worker-decision/parser/pending-capability-selection-validation.js +105 -0
  447. package/dist/src/runtime/steps/worker-decision/parser/validation-contract.d.ts +50 -0
  448. package/dist/src/runtime/steps/worker-decision/parser/validation-contract.js +19 -0
  449. package/dist/src/runtime/steps/worker-decision/parser.d.ts +5 -1
  450. package/dist/src/runtime/steps/worker-decision/parser.js +32 -426
  451. package/dist/src/runtime/steps/worker-decision/prompt.d.ts +3 -0
  452. package/dist/src/runtime/steps/worker-decision/prompt.js +57 -20
  453. package/dist/src/runtime/steps/worker-decision/result-author.js +11 -1
  454. package/dist/src/runtime/steps/worker-decision/run.js +97 -19
  455. package/dist/src/runtime/validation/strict-record.d.ts +2 -0
  456. package/dist/src/runtime/validation/strict-record.js +12 -0
  457. package/dist/src/shared/model-step-registry-data.json +9 -0
  458. package/dist/src/shared/model-step-registry.d.ts +9 -0
  459. package/dist/src/shared/model-step-registry.generated.d.ts +9 -0
  460. package/dist/src/shared/model-step-registry.generated.js +9 -0
  461. package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
  462. package/dist/src/web-ui/app/app.js +56 -11
  463. package/dist/src/web-ui/app/components/config-workspace/config-model.js +320 -0
  464. package/dist/src/web-ui/app/components/config-workspace/dashboard-rendering.js +155 -0
  465. package/dist/src/web-ui/app/components/config-workspace/field-rendering.js +278 -0
  466. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +251 -0
  467. package/dist/src/web-ui/app/components/config-workspace/step-rendering.js +145 -0
  468. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +271 -0
  469. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +195 -0
  470. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +247 -0
  471. package/dist/src/web-ui/app/components/config-workspace/workspace-view.js +299 -0
  472. package/dist/src/web-ui/app/components/config-workspace.js +179 -866
  473. package/dist/src/web-ui/app/components/conversation-activity.d.ts +7 -1
  474. package/dist/src/web-ui/app/components/long-term-memory/icons.js +16 -0
  475. package/dist/src/web-ui/app/components/long-term-memory/manager.js +192 -0
  476. package/dist/src/web-ui/app/components/long-term-memory/record-editor.d.ts +9 -0
  477. package/dist/src/web-ui/app/components/long-term-memory/record-editor.js +62 -0
  478. package/dist/src/web-ui/app/components/long-term-memory/record-list.d.ts +5 -0
  479. package/dist/src/web-ui/app/components/long-term-memory/record-list.js +97 -0
  480. package/dist/src/web-ui/app/components/long-term-memory/view-model.d.ts +29 -0
  481. package/dist/src/web-ui/app/components/long-term-memory/view-model.js +69 -0
  482. package/dist/src/web-ui/app/components/long-term-memory-setup.js +334 -0
  483. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +39 -0
  484. package/dist/src/web-ui/app/components/tool-approval-card.d.ts +18 -0
  485. package/dist/src/web-ui/app/components/workspace-shell.js +48 -7
  486. package/dist/src/web-ui/app/controllers/app-event-bindings.js +43 -6
  487. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +92 -0
  488. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +109 -0
  489. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +77 -0
  490. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +149 -0
  491. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +43 -3
  492. package/dist/src/web-ui/app/controllers/long-term-memory/controller.d.ts +87 -0
  493. package/dist/src/web-ui/app/controllers/long-term-memory/controller.js +302 -0
  494. package/dist/src/web-ui/app/controllers/long-term-memory/policy.d.ts +14 -0
  495. package/dist/src/web-ui/app/controllers/long-term-memory/policy.js +61 -0
  496. package/dist/src/web-ui/app/controllers/long-term-memory/state.js +85 -0
  497. package/dist/src/web-ui/app/controllers/operations-controller.d.ts +25 -0
  498. package/dist/src/web-ui/app/controllers/realtime-event-controller.d.ts +57 -0
  499. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.d.ts +32 -0
  500. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +177 -0
  501. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +78 -11
  502. package/dist/src/web-ui/app/controllers/tool-approval-controller.d.ts +28 -0
  503. package/dist/src/web-ui/app/index.html +13 -15
  504. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +127 -0
  505. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +84 -0
  506. package/dist/src/web-ui/app/services/runtime-web-client.js +27 -1
  507. package/dist/src/web-ui/app/styles/30-inspector-config.css +151 -1423
  508. package/dist/src/web-ui/app/styles/35-memory-onboarding.css +153 -0
  509. package/dist/src/web-ui/app/styles/36-memory-management.css +419 -0
  510. package/dist/src/web-ui/app/styles/40-config-workspace.css +992 -0
  511. package/dist/src/web-ui/app/styles/90-responsive.css +187 -26
  512. package/dist/src/web-ui/app/styles.css +3 -0
  513. package/dist/src/web-ui/config-dashboard-backend.js +9 -1
  514. package/dist/src/web-ui/local-runtime/api-router.d.ts +4 -2
  515. package/dist/src/web-ui/local-runtime/api-router.js +33 -0
  516. package/dist/src/web-ui/local-runtime/contracts.d.ts +5 -0
  517. package/dist/src/web-ui/local-runtime/memory-management-input.d.ts +12 -0
  518. package/dist/src/web-ui/local-runtime/memory-management-input.js +68 -0
  519. package/dist/src/web-ui/local-runtime/memory-management-response.d.ts +17 -0
  520. package/dist/src/web-ui/local-runtime/memory-management-response.js +47 -0
  521. package/dist/src/web-ui/local-runtime/memory-management-routes.d.ts +24 -0
  522. package/dist/src/web-ui/local-runtime/memory-management-routes.js +128 -0
  523. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.d.ts +17 -0
  524. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.js +81 -0
  525. package/dist/src/web-ui/local-runtime/request-abort.d.ts +7 -0
  526. package/dist/src/web-ui/local-runtime/request-abort.js +19 -0
  527. package/dist/src/web-ui/local-runtime-backend.js +10 -3
  528. package/dist/src/web-ui/server.d.ts +2 -0
  529. package/dist/src/web-ui/server.js +3 -0
  530. package/docs/configuration.md +128 -45
  531. package/docs/installation.md +21 -0
  532. package/docs/known-limitations.md +11 -0
  533. package/docs/long-term-memory.md +181 -0
  534. package/docs/publishing.md +52 -25
  535. package/docs/runtime-invariant-coverage.md +1 -1
  536. package/docs/runtime-library.md +16 -1
  537. package/docs/runtime-prompt-policy-contracts.md +12 -2
  538. package/docs/troubleshooting.md +21 -0
  539. package/examples/models/default.config.json +1 -0
  540. package/examples/request-runner.config.example.json +16 -22
  541. package/examples/runtime.config.example.json +4 -0
  542. package/methodologies/memory-informed-response.md +15 -0
  543. package/methodologies/response-ux.md +17 -0
  544. package/package.json +8 -2
  545. package/plugins/exec/source/handlers.ts +65 -5
  546. package/plugins/exec/src/index.cjs +39 -3
  547. package/plugins/filesystem/plugin.json +1 -0
  548. package/runtime.config.schema.json +30 -0
  549. package/src/runtime/README.md +77 -38
@@ -1,7 +1,8 @@
1
1
  import { join, resolve } from "node:path";
2
2
  import { runAddRuntimeModel } from "../../scripts/add-runtime-model.js";
3
3
  import { runInitRuntime } from "../../scripts/init-runtime.js";
4
- import { createModelGatewayServer, resolveModelGatewayPort, } from "../model-gateway/server.js";
4
+ import { runConfigureLongTermMemory } from "../../scripts/configure-long-term-memory.js";
5
+ import { createModelGatewayServer, resolveProviderAdapters, resolveModelGatewayPort, } from "../model-gateway/server.js";
5
6
  import { loadDotEnvFile } from "../shared/load-dotenv.js";
6
7
  import { startWebUiServer } from "../web-ui/server.js";
7
8
  import { resolveWebUiAddress } from "../web-ui/web-ui-address.js";
@@ -12,11 +13,13 @@ function printHelp() {
12
13
  "Usage:",
13
14
  " abot init --provider <provider> --model <model-id> [options]",
14
15
  " abot add-model --profile <profile-id> --provider <provider> --model <model-id> [options]",
16
+ " abot memory <status|models|enable|disable> [options]",
15
17
  " abot start",
16
18
  "",
17
19
  "Commands:",
18
20
  " init Create the first machine-local runtime configuration.",
19
21
  " add-model Add a provider/model profile without replacing existing ones.",
22
+ " memory Configure passive long-term memory embeddings.",
20
23
  " start Start the local model gateway and Web UI.",
21
24
  ].join("\n"));
22
25
  }
@@ -42,9 +45,10 @@ async function runStart(args) {
42
45
  loadDotEnvFile(join(rootDir, ".env"));
43
46
  const webAddress = resolveWebUiAddress(process.env);
44
47
  const appDir = resolve(import.meta.dirname, "../web-ui/app");
48
+ const providerAdapters = resolveProviderAdapters({});
45
49
  let gateway;
46
50
  try {
47
- gateway = createModelGatewayServer();
51
+ gateway = createModelGatewayServer({ providerAdapters });
48
52
  const gatewayPort = resolveModelGatewayPort();
49
53
  gateway.listen(gatewayPort, "127.0.0.1", () => {
50
54
  console.log(`model gateway listening on http://127.0.0.1:${gatewayPort}`);
@@ -60,6 +64,7 @@ async function runStart(args) {
60
64
  host: webAddress.listenHost,
61
65
  port: webAddress.port,
62
66
  setupCommandMode: "package",
67
+ providerAdapters,
63
68
  });
64
69
  console.log(`Open ${webAddress.browserUrl}`);
65
70
  await new Promise((resolveExit, rejectExit) => {
@@ -94,6 +99,10 @@ export async function runAbotCli(argv = process.argv.slice(2)) {
94
99
  await runAddRuntimeModel(args, { commandMode: "package" });
95
100
  return;
96
101
  }
102
+ if (command === "memory") {
103
+ await runConfigureLongTermMemory(args, { commandMode: "package" });
104
+ return;
105
+ }
97
106
  if (command === "start") {
98
107
  await runStart(args);
99
108
  return;
@@ -0,0 +1,3 @@
1
+ import type { ModelGatewayEmbeddingParams, ModelGatewayEmbeddingResult } from "../types.js";
2
+ import type { ModelGatewayClientOptions } from "./contracts.js";
3
+ export declare function embedModelGatewayWithOptions(params: ModelGatewayEmbeddingParams, options?: ModelGatewayClientOptions): Promise<ModelGatewayEmbeddingResult>;
@@ -0,0 +1,48 @@
1
+ import { traceDebug } from "../../runtime/observability/debug-logger.js";
2
+ import { parseEmbeddingResult } from "../embeddings/validation.js";
3
+ import { resolveClientOptions } from "./options.js";
4
+ export async function embedModelGatewayWithOptions(params, options = {}) {
5
+ const clientOptions = resolveClientOptions(options);
6
+ const profileId = params.profileId.trim();
7
+ if (!profileId || params.texts.length === 0) {
8
+ throw new Error("model_gateway_embedding_request_invalid");
9
+ }
10
+ const requestId = params.debugRequestId?.trim() ?? "";
11
+ const startedAt = Date.now();
12
+ traceDebug("model-gateway.client", "embedding.request.start", {
13
+ requestId,
14
+ profileId,
15
+ inputCount: params.texts.length,
16
+ });
17
+ const response = await fetch(`${clientOptions.baseUrl}/embeddings`, {
18
+ method: "POST",
19
+ headers: { "Content-Type": "application/json" },
20
+ signal: params.abortSignal,
21
+ body: JSON.stringify({
22
+ profileId,
23
+ texts: params.texts,
24
+ ...(requestId ? { debugRequestId: requestId } : {}),
25
+ ...((params.modelPolicy ?? clientOptions.modelPolicy)
26
+ ? { modelPolicy: params.modelPolicy ?? clientOptions.modelPolicy }
27
+ : {}),
28
+ }),
29
+ });
30
+ if (!response.ok) {
31
+ const errorText = await response.text().catch(() => "");
32
+ throw new Error(`bridge_embedding_failed:${response.status}:${errorText || "empty error body"}`);
33
+ }
34
+ const result = parseEmbeddingResult(await response.json().catch(() => undefined), params.texts.length);
35
+ if (result.profileId !== profileId) {
36
+ throw new Error("model_gateway_embedding_profile_mismatch");
37
+ }
38
+ traceDebug("model-gateway.client", "embedding.request.completed", {
39
+ requestId,
40
+ profileId,
41
+ provider: result.provider,
42
+ model: result.model,
43
+ vectorCount: result.vectors.length,
44
+ dimensions: result.dimensions,
45
+ durationMs: Date.now() - startedAt,
46
+ });
47
+ return result;
48
+ }
@@ -3,7 +3,7 @@ import { buildModelInvocationMetrics } from "./client/invocation-metrics.js";
3
3
  import { projectModelGatewayMetricMessages } from "./client/message-projection.js";
4
4
  import { getModelGatewayStreamInactivityTimeoutMs } from "./client/options.js";
5
5
  import { classifyEmptyResponse } from "./client/stream-consumer.js";
6
- import type { ModelGatewayInputTokenCountParams, ModelGatewayInputTokenCountResult } from "./types.js";
6
+ import type { ModelGatewayEmbeddingParams, ModelGatewayEmbeddingResult, ModelGatewayInputTokenCountParams, ModelGatewayInputTokenCountResult } from "./types.js";
7
7
  export type { ModelGatewayClientOptions, ModelMetricMessage };
8
8
  export { buildModelInvocationMetrics, classifyEmptyResponse, getModelGatewayStreamInactivityTimeoutMs, projectModelGatewayMetricMessages, };
9
9
  export declare function invokeModelGateway(params: InvokeModelGatewayParams): Promise<{
@@ -12,8 +12,10 @@ export declare function invokeModelGateway(params: InvokeModelGatewayParams): Pr
12
12
  }>;
13
13
  export declare function countModelGatewayInputTokens(params: ModelGatewayInputTokenCountParams): Promise<ModelGatewayInputTokenCountResult | undefined>;
14
14
  export declare function invokeRawModelGateway(params: InvokeRawModelGatewayParams): Promise<RawModelGatewayResult>;
15
+ export declare function embedModelGateway(params: ModelGatewayEmbeddingParams): Promise<ModelGatewayEmbeddingResult>;
15
16
  export declare function createModelGatewayClient(options?: ModelGatewayClientOptions): {
16
17
  invoke: typeof invokeModelGateway;
17
18
  invokeRaw: typeof invokeRawModelGateway;
18
19
  countInputTokens: typeof countModelGatewayInputTokens;
20
+ embed: typeof embedModelGateway;
19
21
  };
@@ -5,6 +5,7 @@ import { projectModelGatewayMetricMessages } from "./client/message-projection.j
5
5
  import { getModelGatewayStreamInactivityTimeoutMs } from "./client/options.js";
6
6
  import { invokeRawModelGatewayWithOptions } from "./client/raw.js";
7
7
  import { classifyEmptyResponse } from "./client/stream-consumer.js";
8
+ import { embedModelGatewayWithOptions } from "./client/embeddings.js";
8
9
  export { buildModelInvocationMetrics, classifyEmptyResponse, getModelGatewayStreamInactivityTimeoutMs, projectModelGatewayMetricMessages, };
9
10
  export async function invokeModelGateway(params) {
10
11
  return invokeModelGatewayWithOptions(params);
@@ -15,11 +16,15 @@ export async function countModelGatewayInputTokens(params) {
15
16
  export async function invokeRawModelGateway(params) {
16
17
  return invokeRawModelGatewayWithOptions(params);
17
18
  }
19
+ export async function embedModelGateway(params) {
20
+ return embedModelGatewayWithOptions(params);
21
+ }
18
22
  export function createModelGatewayClient(options = {}) {
19
23
  const inputTokenCountCache = new Map();
20
24
  return {
21
25
  invoke: (params) => invokeModelGatewayWithOptions(params, options),
22
26
  invokeRaw: (params) => invokeRawModelGatewayWithOptions(params, options),
27
+ embed: (params) => embedModelGatewayWithOptions(params, options),
23
28
  countInputTokens: (params) => countModelGatewayInputTokensWithOptions(params, options, inputTokenCountCache),
24
29
  };
25
30
  }
@@ -0,0 +1 @@
1
+ export declare const MAX_MODEL_GATEWAY_EMBEDDING_BATCH_SIZE = 128;
@@ -0,0 +1 @@
1
+ export const MAX_MODEL_GATEWAY_EMBEDDING_BATCH_SIZE = 128;
@@ -0,0 +1,10 @@
1
+ import type { ModelProviderAdapterRegistry, ModelProviderEmbeddingModelCatalog } from "../providers/contracts.js";
2
+ import type { ModelGatewayPolicyConfig } from "../types.js";
3
+ export declare function discoverEmbeddingModels(params: {
4
+ providerId: string;
5
+ modelPolicy: ModelGatewayPolicyConfig;
6
+ abortSignal: AbortSignal;
7
+ fetchImpl?: typeof fetch;
8
+ providerAdapters?: ModelProviderAdapterRegistry;
9
+ ollamaUrl?: string;
10
+ }): Promise<ModelProviderEmbeddingModelCatalog>;
@@ -0,0 +1,39 @@
1
+ import { DEFAULT_OLLAMA_URL } from "../../shared/constants.js";
2
+ import { createBuiltInModelProviderAdapterRegistry } from "../providers/registry.js";
3
+ import { EmbeddingProviderRequestError } from "./execution.js";
4
+ export async function discoverEmbeddingModels(params) {
5
+ params.abortSignal.throwIfAborted();
6
+ const providerId = params.providerId.trim();
7
+ const providerConfig = params.modelPolicy.providers?.[providerId];
8
+ if (!providerConfig) {
9
+ throw new EmbeddingProviderRequestError(400, `unknown_embedding_provider:${providerId}`);
10
+ }
11
+ const adapter = resolveAdapters(params).resolve(providerConfig.type);
12
+ if (!adapter.listEmbeddingModels) {
13
+ return Object.freeze({ supported: false, models: Object.freeze([]) });
14
+ }
15
+ const result = await adapter.listEmbeddingModels({
16
+ providerId,
17
+ providerConfig,
18
+ fetchImpl: bindAbortSignal(params.fetchImpl ?? fetch, params.abortSignal),
19
+ });
20
+ if (result.kind === "error") {
21
+ throw new EmbeddingProviderRequestError(result.statusCode, result.message);
22
+ }
23
+ return Object.freeze({
24
+ supported: true,
25
+ models: Object.freeze(normalizeModelIds(result.models)),
26
+ });
27
+ }
28
+ function resolveAdapters(params) {
29
+ return (params.providerAdapters ??
30
+ createBuiltInModelProviderAdapterRegistry({
31
+ ollamaUrl: params.ollamaUrl ?? process.env.OLLAMA_URL ?? DEFAULT_OLLAMA_URL,
32
+ }));
33
+ }
34
+ function bindAbortSignal(fetchImpl, abortSignal) {
35
+ return (input, init) => fetchImpl(input, { ...init, signal: abortSignal });
36
+ }
37
+ function normalizeModelIds(models) {
38
+ return [...new Set(models.map((model) => model.trim()).filter(Boolean))].sort((left, right) => left.localeCompare(right));
39
+ }
@@ -0,0 +1,16 @@
1
+ import type { ModelProviderAdapterRegistry } from "../providers/contracts.js";
2
+ import type { ModelGatewayEmbeddingResult, ModelGatewayPolicyConfig } from "../types.js";
3
+ export declare class EmbeddingProviderRequestError extends Error {
4
+ readonly statusCode: number;
5
+ constructor(statusCode: number, message: string);
6
+ }
7
+ export declare function executeEmbeddingRequest(params: {
8
+ profileId: string;
9
+ texts: readonly string[];
10
+ modelPolicy: ModelGatewayPolicyConfig;
11
+ abortSignal: AbortSignal;
12
+ fetchImpl?: typeof fetch;
13
+ providerAdapters?: ModelProviderAdapterRegistry;
14
+ ollamaUrl?: string;
15
+ debugRequestId?: string;
16
+ }): Promise<ModelGatewayEmbeddingResult>;
@@ -0,0 +1,64 @@
1
+ import { DEFAULT_OLLAMA_URL } from "../../shared/constants.js";
2
+ import { createBuiltInModelProviderAdapterRegistry } from "../providers/registry.js";
3
+ import { resolveEmbeddingProfile } from "./profile.js";
4
+ import { validateEmbeddingModelFingerprint, validateEmbeddingVectors, } from "./validation.js";
5
+ export class EmbeddingProviderRequestError extends Error {
6
+ statusCode;
7
+ constructor(statusCode, message) {
8
+ super(message);
9
+ this.statusCode = statusCode;
10
+ this.name = "EmbeddingProviderRequestError";
11
+ }
12
+ }
13
+ export async function executeEmbeddingRequest(params) {
14
+ params.abortSignal.throwIfAborted();
15
+ const profile = resolveEmbeddingProfile({
16
+ profileId: params.profileId,
17
+ modelPolicy: params.modelPolicy,
18
+ });
19
+ const adapter = resolveAdapters(params).resolve(profile.provider);
20
+ if (!adapter.embed) {
21
+ throw new EmbeddingProviderRequestError(501, "model_provider_embeddings_unsupported");
22
+ }
23
+ const result = await adapter.embed({
24
+ requestBody: {
25
+ profileId: profile.id,
26
+ texts: params.texts,
27
+ modelPolicy: params.modelPolicy,
28
+ ...(params.debugRequestId
29
+ ? { debugRequestId: params.debugRequestId }
30
+ : {}),
31
+ },
32
+ profile,
33
+ texts: params.texts,
34
+ fetchImpl: bindAbortSignal(params.fetchImpl ?? fetch, params.abortSignal),
35
+ });
36
+ if (result.kind === "error") {
37
+ throwProviderError(result);
38
+ }
39
+ const vectors = validateEmbeddingVectors({
40
+ vectors: result.vectors,
41
+ expectedCount: params.texts.length,
42
+ });
43
+ const modelFingerprint = validateEmbeddingModelFingerprint(result.modelFingerprint);
44
+ return Object.freeze({
45
+ profileId: profile.id,
46
+ provider: profile.provider,
47
+ model: profile.model,
48
+ modelFingerprint,
49
+ dimensions: vectors[0]?.length ?? 0,
50
+ vectors,
51
+ });
52
+ }
53
+ function resolveAdapters(params) {
54
+ return (params.providerAdapters ??
55
+ createBuiltInModelProviderAdapterRegistry({
56
+ ollamaUrl: params.ollamaUrl ?? process.env.OLLAMA_URL ?? DEFAULT_OLLAMA_URL,
57
+ }));
58
+ }
59
+ function bindAbortSignal(fetchImpl, abortSignal) {
60
+ return (input, init) => fetchImpl(input, { ...init, signal: abortSignal });
61
+ }
62
+ function throwProviderError(error) {
63
+ throw new EmbeddingProviderRequestError(error.statusCode, error.message);
64
+ }
@@ -0,0 +1,3 @@
1
+ import type { ResolvedEmbeddingProfile } from "../types.js";
2
+ /** Stable identity for vectors that may be compared with one another. */
3
+ export declare function createEmbeddingModelFingerprint(profile: ResolvedEmbeddingProfile, effectiveBaseUrl: string): string;
@@ -0,0 +1,36 @@
1
+ import { createHash } from "node:crypto";
2
+ /** Stable identity for vectors that may be compared with one another. */
3
+ export function createEmbeddingModelFingerprint(profile, effectiveBaseUrl) {
4
+ const digest = createHash("sha256")
5
+ .update(JSON.stringify({
6
+ providerId: profile.providerId,
7
+ provider: profile.provider,
8
+ baseUrl: normalizeBaseUrl(effectiveBaseUrl),
9
+ model: profile.model,
10
+ options: canonicalizeJson(profile.options),
11
+ }))
12
+ .digest("hex")
13
+ .slice(0, 24);
14
+ return `${profile.provider}:${profile.model}:${digest}`;
15
+ }
16
+ function normalizeBaseUrl(value) {
17
+ return value.trim().replace(/\/+$/u, "");
18
+ }
19
+ function canonicalizeJson(value) {
20
+ if (Array.isArray(value)) {
21
+ return value.map(canonicalizeJson);
22
+ }
23
+ if (!value || typeof value !== "object") {
24
+ return value;
25
+ }
26
+ return Object.fromEntries(Object.entries(value)
27
+ .sort(([left], [right]) => compareKeys(left, right))
28
+ .map(([key, entry]) => [key, canonicalizeJson(entry)]));
29
+ }
30
+ function compareKeys(left, right) {
31
+ if (left < right)
32
+ return -1;
33
+ if (left > right)
34
+ return 1;
35
+ return 0;
36
+ }
@@ -0,0 +1,11 @@
1
+ import type { ModelGatewayPolicyConfig, ResolvedEmbeddingProfile } from "../types.js";
2
+ export type EmbeddingProfileResolutionErrorCode = "embedding_profile_required" | "unknown_embedding_profile" | "unknown_embedding_provider";
3
+ export declare class EmbeddingProfileResolutionError extends Error {
4
+ readonly code: EmbeddingProfileResolutionErrorCode;
5
+ readonly statusCode = 400;
6
+ constructor(code: EmbeddingProfileResolutionErrorCode, detail: string);
7
+ }
8
+ export declare function resolveEmbeddingProfile(params: {
9
+ profileId: unknown;
10
+ modelPolicy?: ModelGatewayPolicyConfig;
11
+ }): ResolvedEmbeddingProfile;
@@ -0,0 +1,37 @@
1
+ export class EmbeddingProfileResolutionError extends Error {
2
+ code;
3
+ statusCode = 400;
4
+ constructor(code, detail) {
5
+ super(`${code}: ${detail}`);
6
+ this.code = code;
7
+ this.name = "EmbeddingProfileResolutionError";
8
+ }
9
+ }
10
+ export function resolveEmbeddingProfile(params) {
11
+ const profileId = readRequiredProfileId(params.profileId);
12
+ const configured = params.modelPolicy?.embeddingProfiles?.[profileId];
13
+ if (!configured) {
14
+ throw new EmbeddingProfileResolutionError("unknown_embedding_profile", `embedding profile ${profileId} is not available in model policy`);
15
+ }
16
+ const providerId = configured.provider.trim();
17
+ const providerConfig = params.modelPolicy?.providers?.[providerId];
18
+ if (!providerConfig) {
19
+ throw new EmbeddingProfileResolutionError("unknown_embedding_provider", `embedding profile ${profileId} references unavailable provider ${providerId}`);
20
+ }
21
+ return Object.freeze({
22
+ id: profileId,
23
+ label: configured.label?.trim() || profileId,
24
+ providerId,
25
+ provider: providerConfig.type,
26
+ providerConfig,
27
+ model: configured.model.trim(),
28
+ options: Object.freeze({ ...(configured.options ?? {}) }),
29
+ });
30
+ }
31
+ function readRequiredProfileId(value) {
32
+ const profileId = typeof value === "string" ? value.trim() : "";
33
+ if (profileId) {
34
+ return profileId;
35
+ }
36
+ throw new EmbeddingProfileResolutionError("embedding_profile_required", "profileId must identify a configured embedding profile");
37
+ }
@@ -0,0 +1,3 @@
1
+ import type { ModelGatewayEmbeddingRequest } from "../types.js";
2
+ import type { GatewayResponse, ModelGatewayHandlerOptions, ModelGatewayInvocationContext } from "../server/contracts.js";
3
+ export declare function createEmbeddingHandler(options?: ModelGatewayHandlerOptions): (requestBody: ModelGatewayEmbeddingRequest, response: GatewayResponse, context?: ModelGatewayInvocationContext) => Promise<void>;
@@ -0,0 +1,89 @@
1
+ import { traceDebug } from "../../runtime/observability/debug-logger.js";
2
+ import { respondToGatewayHandlerError } from "../server/errors.js";
3
+ import { sendJson } from "../server/http-response.js";
4
+ import { MAX_MODEL_GATEWAY_EMBEDDING_BATCH_SIZE } from "./constants.js";
5
+ import { executeEmbeddingRequest } from "./execution.js";
6
+ export function createEmbeddingHandler(options = {}) {
7
+ const { fetchImpl = fetch, modelPolicy } = options;
8
+ return async function embeddingHandler(requestBody, response, context = {}) {
9
+ const abortSignal = context.abortSignal ?? new AbortController().signal;
10
+ try {
11
+ abortSignal.throwIfAborted();
12
+ const texts = readEmbeddingTexts(requestBody.texts);
13
+ const effectivePolicy = modelPolicy ?? requestBody.modelPolicy;
14
+ const startedAt = Date.now();
15
+ const result = await executeEmbeddingRequest({
16
+ profileId: readProfileId(requestBody.profileId),
17
+ texts,
18
+ modelPolicy: effectivePolicy ?? {},
19
+ abortSignal,
20
+ fetchImpl,
21
+ ...(options.providerAdapters
22
+ ? { providerAdapters: options.providerAdapters }
23
+ : {}),
24
+ ...(options.ollamaUrl ? { ollamaUrl: options.ollamaUrl } : {}),
25
+ ...(typeof requestBody.debugRequestId === "string"
26
+ ? { debugRequestId: requestBody.debugRequestId }
27
+ : {}),
28
+ });
29
+ if (abortSignal.aborted) {
30
+ return;
31
+ }
32
+ emitEmbeddingCompleted({
33
+ requestBody,
34
+ profileId: result.profileId,
35
+ provider: result.provider,
36
+ model: result.model,
37
+ vectorCount: result.vectors.length,
38
+ dimensions: result.dimensions,
39
+ durationMs: Date.now() - startedAt,
40
+ });
41
+ return sendJson(response, 200, result);
42
+ }
43
+ catch (error) {
44
+ respondToGatewayHandlerError({
45
+ error,
46
+ response,
47
+ abortSignal,
48
+ includeContextWindowErrors: false,
49
+ });
50
+ }
51
+ };
52
+ }
53
+ function readEmbeddingTexts(value) {
54
+ const texts = Array.isArray(value)
55
+ ? value.filter((entry) => typeof entry === "string")
56
+ : [];
57
+ const hasInvalidEntry = !Array.isArray(value) ||
58
+ texts.length !== value.length ||
59
+ texts.some(isBlank);
60
+ if (hasInvalidEntry || texts.length === 0) {
61
+ throw new EmbeddingRequestValidationError("embedding_texts_required");
62
+ }
63
+ if (texts.length > MAX_MODEL_GATEWAY_EMBEDDING_BATCH_SIZE) {
64
+ throw new EmbeddingRequestValidationError("embedding_batch_too_large");
65
+ }
66
+ return Object.freeze([...texts]);
67
+ }
68
+ function isBlank(value) {
69
+ return value.trim().length === 0;
70
+ }
71
+ function emitEmbeddingCompleted(params) {
72
+ traceDebug("model-gateway.server", "embedding.completed", {
73
+ requestId: typeof params.requestBody.debugRequestId === "string"
74
+ ? params.requestBody.debugRequestId
75
+ : "",
76
+ profileId: params.profileId,
77
+ provider: params.provider,
78
+ model: params.model,
79
+ vectorCount: params.vectorCount,
80
+ dimensions: params.dimensions,
81
+ durationMs: params.durationMs,
82
+ });
83
+ }
84
+ class EmbeddingRequestValidationError extends Error {
85
+ statusCode = 400;
86
+ }
87
+ function readProfileId(value) {
88
+ return typeof value === "string" ? value : "";
89
+ }
@@ -0,0 +1,7 @@
1
+ import type { ModelGatewayEmbeddingResult } from "../types.js";
2
+ export declare function validateEmbeddingVectors(params: {
3
+ vectors: unknown;
4
+ expectedCount: number;
5
+ }): readonly (readonly number[])[];
6
+ export declare function validateEmbeddingModelFingerprint(value: unknown): string;
7
+ export declare function parseEmbeddingResult(value: unknown, expectedCount: number): ModelGatewayEmbeddingResult;
@@ -0,0 +1,69 @@
1
+ export function validateEmbeddingVectors(params) {
2
+ if (!hasExpectedVectorCount(params.vectors, params.expectedCount)) {
3
+ throw new Error("model_gateway_embedding_vector_count_invalid");
4
+ }
5
+ const vectors = params.vectors.map(validateVector);
6
+ const dimensions = vectors[0]?.length ?? 0;
7
+ if (dimensions === 0) {
8
+ throw new Error("model_gateway_embedding_vector_empty");
9
+ }
10
+ if (vectors.some((vector) => vector.length !== dimensions)) {
11
+ throw new Error("model_gateway_embedding_dimensions_inconsistent");
12
+ }
13
+ return Object.freeze(vectors);
14
+ }
15
+ export function validateEmbeddingModelFingerprint(value) {
16
+ if (typeof value !== "string" || !value.trim()) {
17
+ throw new Error("model_gateway_embedding_binding_invalid");
18
+ }
19
+ return value;
20
+ }
21
+ function hasExpectedVectorCount(value, expectedCount) {
22
+ return Array.isArray(value) && value.length === expectedCount;
23
+ }
24
+ export function parseEmbeddingResult(value, expectedCount) {
25
+ const body = readRecord(value);
26
+ const vectors = validateEmbeddingVectors({
27
+ vectors: body.vectors,
28
+ expectedCount,
29
+ });
30
+ const dimensions = body.dimensions;
31
+ if (!Number.isSafeInteger(dimensions) || dimensions !== vectors[0]?.length) {
32
+ throw new Error("model_gateway_embedding_dimensions_invalid");
33
+ }
34
+ const binding = readEmbeddingBinding(body);
35
+ return Object.freeze({
36
+ ...binding,
37
+ dimensions,
38
+ vectors,
39
+ });
40
+ }
41
+ function validateVector(value) {
42
+ if (!Array.isArray(value) || value.length === 0) {
43
+ throw new Error("model_gateway_embedding_vector_invalid");
44
+ }
45
+ const vector = value.filter((entry) => typeof entry === "number" && Number.isFinite(entry));
46
+ if (vector.length !== value.length) {
47
+ throw new Error("model_gateway_embedding_vector_non_finite");
48
+ }
49
+ return Object.freeze(vector);
50
+ }
51
+ function readEmbeddingBinding(body) {
52
+ const keys = ["profileId", "provider", "model"];
53
+ const values = keys.map((key) => body[key]);
54
+ if (values.some((value) => typeof value !== "string" || value.length === 0)) {
55
+ throw new Error("model_gateway_embedding_binding_invalid");
56
+ }
57
+ return {
58
+ profileId: values[0],
59
+ provider: values[1],
60
+ model: values[2],
61
+ modelFingerprint: validateEmbeddingModelFingerprint(body.modelFingerprint),
62
+ };
63
+ }
64
+ function readRecord(value) {
65
+ if (value && typeof value === "object" && !Array.isArray(value)) {
66
+ return value;
67
+ }
68
+ throw new Error("model_gateway_embedding_response_invalid");
69
+ }
@@ -1,3 +1,5 @@
1
- export { createModelProviderAdapterRegistry, ModelProviderAdapterResolutionError, type ModelProviderAdapter, type ModelProviderAdapterRegistry, type ModelProviderChatInvocation, type ModelProviderEventSink, type ModelProviderInvocationError, type ModelProviderInputTokenCount, type ModelProviderInputTokenCountParams, type ModelProviderInputTokenCountResult, type ModelProviderInvocationParams, type ModelProviderInvocationResult, type ModelProviderRawInvocation, } from "./provider-adapter.js";
2
- export { createChatHandler, createInputTokenCountHandler, createModelGatewayServer, createRawHandler, type GatewayFetch, type GatewayResponse, type ModelGatewayHandlerOptions, } from "./server.js";
3
- export type { ModelContextConfig, ModelFormatTokenAccountingConfig, ModelGatewayPolicyConfig, ModelGatewayProviderConfig, ModelGatewayInputTokenCountParams, ModelGatewayInputTokenCountResult, ModelGatewayRequest, ModelProfile, ResolvedModelInvocation, } from "./types.js";
1
+ export { createModelProviderAdapterRegistry, ModelProviderAdapterResolutionError, type ModelProviderAdapter, type ModelProviderAdapterRegistry, type ModelProviderChatInvocation, type ModelProviderEventSink, type ModelProviderInvocationError, type ModelProviderInputTokenCount, type ModelProviderInputTokenCountParams, type ModelProviderInputTokenCountResult, type ModelProviderEmbeddingParams, type ModelProviderEmbeddingModelCatalog, type ModelProviderEmbeddingModelCatalogResult, type ModelProviderEmbeddingModelDiscoveryParams, type ModelProviderEmbeddingResult, type ModelProviderInvocationParams, type ModelProviderInvocationResult, type ModelProviderRawInvocation, } from "./provider-adapter.js";
2
+ export { createChatHandler, createEmbeddingHandler, createInputTokenCountHandler, createModelGatewayServer, createRawHandler, type GatewayFetch, type GatewayResponse, type ModelGatewayHandlerOptions, } from "./server.js";
3
+ export { EmbeddingProviderRequestError, executeEmbeddingRequest, } from "./embeddings/execution.js";
4
+ export { discoverEmbeddingModels } from "./embeddings/discovery.js";
5
+ export type { ModelContextConfig, ModelFormatTokenAccountingConfig, ModelGatewayPolicyConfig, ModelGatewayProviderConfig, ModelGatewayInputTokenCountParams, ModelGatewayInputTokenCountResult, ModelGatewayEmbeddingParams, ModelGatewayEmbeddingProfileConfig, ModelGatewayEmbeddingRequest, ModelGatewayEmbeddingResult, ModelGatewayRequest, ModelProfile, ResolvedModelInvocation, } from "./types.js";
@@ -1,2 +1,4 @@
1
1
  export { createModelProviderAdapterRegistry, ModelProviderAdapterResolutionError, } from "./provider-adapter.js";
2
- export { createChatHandler, createInputTokenCountHandler, createModelGatewayServer, createRawHandler, } from "./server.js";
2
+ export { createChatHandler, createEmbeddingHandler, createInputTokenCountHandler, createModelGatewayServer, createRawHandler, } from "./server.js";
3
+ export { EmbeddingProviderRequestError, executeEmbeddingRequest, } from "./embeddings/execution.js";
4
+ export { discoverEmbeddingModels } from "./embeddings/discovery.js";
@@ -1,4 +1,4 @@
1
- import type { ModelGatewayEvent, ModelGatewayRequest, ResolvedModelInvocation } from "../types.js";
1
+ import type { ModelGatewayEmbeddingRequest, ModelGatewayEvent, ModelGatewayProviderConfig, ModelGatewayRequest, ResolvedEmbeddingProfile, ResolvedModelInvocation } from "../types.js";
2
2
  export type ModelProviderEventSink = Readonly<{
3
3
  emit(event: ModelGatewayEvent): void;
4
4
  }>;
@@ -27,6 +27,30 @@ export type ModelProviderInputTokenMeasurement = Readonly<{
27
27
  source: "provider_input_token_count";
28
28
  }>;
29
29
  export type ModelProviderInputTokenCountResult = ModelProviderInvocationError | ModelProviderInputTokenCount;
30
+ export type ModelProviderEmbeddingResult = ModelProviderInvocationError | Readonly<{
31
+ kind: "embedded";
32
+ vectors: readonly (readonly number[])[];
33
+ modelFingerprint: string;
34
+ }>;
35
+ export type ModelProviderEmbeddingParams = Readonly<{
36
+ requestBody: ModelGatewayEmbeddingRequest;
37
+ profile: ResolvedEmbeddingProfile;
38
+ texts: readonly string[];
39
+ fetchImpl: typeof fetch;
40
+ }>;
41
+ export type ModelProviderEmbeddingModelCatalog = Readonly<{
42
+ supported: boolean;
43
+ models: readonly string[];
44
+ }>;
45
+ export type ModelProviderEmbeddingModelDiscoveryParams = Readonly<{
46
+ providerId: string;
47
+ providerConfig: ModelGatewayProviderConfig;
48
+ fetchImpl: typeof fetch;
49
+ }>;
50
+ export type ModelProviderEmbeddingModelCatalogResult = ModelProviderInvocationError | Readonly<{
51
+ kind: "listed";
52
+ models: readonly string[];
53
+ }>;
30
54
  export type ModelProviderInvocationParams = Readonly<{
31
55
  endpoint: "chat" | "raw";
32
56
  requestBody: ModelGatewayRequest;
@@ -47,6 +71,8 @@ export type ModelProviderInputTokenCountParams = Readonly<{
47
71
  export type ModelProviderAdapter = Readonly<{
48
72
  type: string;
49
73
  supportsImageInput: boolean;
74
+ embed?(params: ModelProviderEmbeddingParams): Promise<ModelProviderEmbeddingResult>;
75
+ listEmbeddingModels?(params: ModelProviderEmbeddingModelDiscoveryParams): Promise<ModelProviderEmbeddingModelCatalogResult>;
50
76
  countInputTokens?(params: ModelProviderInputTokenCountParams): Promise<ModelProviderInputTokenCountResult>;
51
77
  invoke(params: ModelProviderInvocationParams): Promise<ModelProviderInvocationResult>;
52
78
  }>;
@@ -3,6 +3,8 @@ import { buildOllamaPayload, buildOllamaRawPayload, } from "./payload.js";
3
3
  import { emitOllamaRequestProjection, emitOllamaSchemaDiagnostics, emitOllamaTiming, resolveOllamaBaseUrl, } from "./request-diagnostics.js";
4
4
  import { createOllamaStreamDiagnostics, isAbortFailure, } from "./stream-diagnostics.js";
5
5
  import { collectOllamaStream, forwardOllamaStream, } from "./stream-normalizer.js";
6
+ import { embedWithOllama } from "./embeddings.js";
7
+ import { listOllamaEmbeddingModels } from "./embedding-models.js";
6
8
  function readRequestId(params) {
7
9
  return typeof params.requestBody.debugRequestId === "string"
8
10
  ? params.requestBody.debugRequestId
@@ -21,6 +23,8 @@ export function createOllamaProviderAdapter(options) {
21
23
  return Object.freeze({
22
24
  type: "ollama",
23
25
  supportsImageInput: true,
26
+ embed: (params) => embedWithOllama(params, options.fallbackUrl),
27
+ listEmbeddingModels: (params) => listOllamaEmbeddingModels(params, options.fallbackUrl),
24
28
  async invoke(params) {
25
29
  const requestId = readRequestId(params);
26
30
  let removedConstraintCount = 0;
@@ -0,0 +1 @@
1
+ export declare function resolveConfiguredOllamaBaseUrl(configuredUrl: string | undefined, fallbackUrl: string): string;
@@ -0,0 +1,4 @@
1
+ export function resolveConfiguredOllamaBaseUrl(configuredUrl, fallbackUrl) {
2
+ const effectiveUrl = configuredUrl?.trim() || fallbackUrl.trim();
3
+ return effectiveUrl.replace(/\/+$/u, "");
4
+ }