comisai 1.0.11 → 1.0.13

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 (255) hide show
  1. package/node_modules/@comis/agent/dist/model/operation-model-defaults.js +1 -0
  2. package/node_modules/@comis/agent/dist/session/comis-session-manager.js +9 -9
  3. package/node_modules/@comis/agent/package.json +1 -1
  4. package/node_modules/@comis/channels/package.json +1 -1
  5. package/node_modules/@comis/cli/package.json +1 -1
  6. package/node_modules/@comis/core/dist/event-bus/events-infra.d.ts +2 -0
  7. package/node_modules/@comis/core/package.json +1 -1
  8. package/node_modules/@comis/daemon/dist/wiring/setup-channels.js +12 -1
  9. package/node_modules/@comis/daemon/dist/wiring/setup-gateway.js +1 -0
  10. package/node_modules/@comis/daemon/dist/wiring/setup-schedulers.js +1 -0
  11. package/node_modules/@comis/daemon/package.json +1 -1
  12. package/node_modules/@comis/gateway/package.json +1 -1
  13. package/node_modules/@comis/infra/package.json +1 -1
  14. package/node_modules/@comis/memory/package.json +1 -1
  15. package/node_modules/@comis/scheduler/dist/cron/cron-types.d.ts +6 -0
  16. package/node_modules/@comis/scheduler/dist/cron/cron-types.js +2 -0
  17. package/node_modules/@comis/scheduler/package.json +1 -1
  18. package/node_modules/@comis/shared/package.json +1 -1
  19. package/node_modules/@comis/skills/dist/builtin/platform/gateway-tool.d.ts +1 -1
  20. package/node_modules/@comis/skills/package.json +1 -1
  21. package/package.json +18 -18
  22. package/node_modules/@comis/core/dist/approval/approval-gate.test.d.ts +0 -1
  23. package/node_modules/@comis/core/dist/approval/approval-gate.test.js +0 -1003
  24. package/node_modules/@comis/core/dist/bootstrap.test.d.ts +0 -1
  25. package/node_modules/@comis/core/dist/bootstrap.test.js +0 -150
  26. package/node_modules/@comis/core/dist/config/backup.test.d.ts +0 -1
  27. package/node_modules/@comis/core/dist/config/backup.test.js +0 -160
  28. package/node_modules/@comis/core/dist/config/env-substitution.test.d.ts +0 -1
  29. package/node_modules/@comis/core/dist/config/env-substitution.test.js +0 -259
  30. package/node_modules/@comis/core/dist/config/field-metadata.test.d.ts +0 -1
  31. package/node_modules/@comis/core/dist/config/field-metadata.test.js +0 -72
  32. package/node_modules/@comis/core/dist/config/git-manager.test.d.ts +0 -1
  33. package/node_modules/@comis/core/dist/config/git-manager.test.js +0 -1042
  34. package/node_modules/@comis/core/dist/config/immutable-keys.test.d.ts +0 -1
  35. package/node_modules/@comis/core/dist/config/immutable-keys.test.js +0 -283
  36. package/node_modules/@comis/core/dist/config/include-resolver.test.d.ts +0 -1
  37. package/node_modules/@comis/core/dist/config/include-resolver.test.js +0 -292
  38. package/node_modules/@comis/core/dist/config/layered.test.d.ts +0 -1
  39. package/node_modules/@comis/core/dist/config/layered.test.js +0 -211
  40. package/node_modules/@comis/core/dist/config/loader.test.d.ts +0 -1
  41. package/node_modules/@comis/core/dist/config/loader.test.js +0 -300
  42. package/node_modules/@comis/core/dist/config/migrate.test.d.ts +0 -1
  43. package/node_modules/@comis/core/dist/config/migrate.test.js +0 -244
  44. package/node_modules/@comis/core/dist/config/partial-validator.test.d.ts +0 -1
  45. package/node_modules/@comis/core/dist/config/partial-validator.test.js +0 -98
  46. package/node_modules/@comis/core/dist/config/schema-agent-model.test.d.ts +0 -1
  47. package/node_modules/@comis/core/dist/config/schema-agent-model.test.js +0 -279
  48. package/node_modules/@comis/core/dist/config/schema-agent-session.test.d.ts +0 -1
  49. package/node_modules/@comis/core/dist/config/schema-agent-session.test.js +0 -242
  50. package/node_modules/@comis/core/dist/config/schema-agent.test.d.ts +0 -1
  51. package/node_modules/@comis/core/dist/config/schema-agent.test.js +0 -645
  52. package/node_modules/@comis/core/dist/config/schema-channel.test.d.ts +0 -1
  53. package/node_modules/@comis/core/dist/config/schema-channel.test.js +0 -341
  54. package/node_modules/@comis/core/dist/config/schema-coalescer.test.d.ts +0 -1
  55. package/node_modules/@comis/core/dist/config/schema-coalescer.test.js +0 -51
  56. package/node_modules/@comis/core/dist/config/schema-context-engine.test.d.ts +0 -1
  57. package/node_modules/@comis/core/dist/config/schema-context-engine.test.js +0 -797
  58. package/node_modules/@comis/core/dist/config/schema-context-guard.test.d.ts +0 -1
  59. package/node_modules/@comis/core/dist/config/schema-context-guard.test.js +0 -111
  60. package/node_modules/@comis/core/dist/config/schema-daemon.test.d.ts +0 -1
  61. package/node_modules/@comis/core/dist/config/schema-daemon.test.js +0 -107
  62. package/node_modules/@comis/core/dist/config/schema-delivery-timing.test.d.ts +0 -1
  63. package/node_modules/@comis/core/dist/config/schema-delivery-timing.test.js +0 -51
  64. package/node_modules/@comis/core/dist/config/schema-documentation.test.d.ts +0 -1
  65. package/node_modules/@comis/core/dist/config/schema-documentation.test.js +0 -63
  66. package/node_modules/@comis/core/dist/config/schema-gateway.test.d.ts +0 -1
  67. package/node_modules/@comis/core/dist/config/schema-gateway.test.js +0 -219
  68. package/node_modules/@comis/core/dist/config/schema-gemini-cache.test.d.ts +0 -1
  69. package/node_modules/@comis/core/dist/config/schema-gemini-cache.test.js +0 -41
  70. package/node_modules/@comis/core/dist/config/schema-integrations.test.d.ts +0 -1
  71. package/node_modules/@comis/core/dist/config/schema-integrations.test.js +0 -92
  72. package/node_modules/@comis/core/dist/config/schema-lifecycle-reactions.test.d.ts +0 -1
  73. package/node_modules/@comis/core/dist/config/schema-lifecycle-reactions.test.js +0 -61
  74. package/node_modules/@comis/core/dist/config/schema-misc.test.d.ts +0 -1
  75. package/node_modules/@comis/core/dist/config/schema-misc.test.js +0 -394
  76. package/node_modules/@comis/core/dist/config/schema-observability.test.d.ts +0 -1
  77. package/node_modules/@comis/core/dist/config/schema-observability.test.js +0 -76
  78. package/node_modules/@comis/core/dist/config/schema-providers.test.d.ts +0 -1
  79. package/node_modules/@comis/core/dist/config/schema-providers.test.js +0 -294
  80. package/node_modules/@comis/core/dist/config/schema-queue.test.d.ts +0 -1
  81. package/node_modules/@comis/core/dist/config/schema-queue.test.js +0 -234
  82. package/node_modules/@comis/core/dist/config/schema-response-prefix.test.d.ts +0 -1
  83. package/node_modules/@comis/core/dist/config/schema-response-prefix.test.js +0 -36
  84. package/node_modules/@comis/core/dist/config/schema-security.test.d.ts +0 -1
  85. package/node_modules/@comis/core/dist/config/schema-security.test.js +0 -54
  86. package/node_modules/@comis/core/dist/config/schema-sender-trust-display.test.d.ts +0 -1
  87. package/node_modules/@comis/core/dist/config/schema-sender-trust-display.test.js +0 -60
  88. package/node_modules/@comis/core/dist/config/schema-serializer.test.d.ts +0 -1
  89. package/node_modules/@comis/core/dist/config/schema-serializer.test.js +0 -73
  90. package/node_modules/@comis/core/dist/config/schema-telegram-file-guard.test.d.ts +0 -1
  91. package/node_modules/@comis/core/dist/config/schema-telegram-file-guard.test.js +0 -39
  92. package/node_modules/@comis/core/dist/context/context.test.d.ts +0 -1
  93. package/node_modules/@comis/core/dist/context/context.test.js +0 -276
  94. package/node_modules/@comis/core/dist/domain/agent-response.test.d.ts +0 -1
  95. package/node_modules/@comis/core/dist/domain/agent-response.test.js +0 -159
  96. package/node_modules/@comis/core/dist/domain/credential-mapping.test.d.ts +0 -1
  97. package/node_modules/@comis/core/dist/domain/credential-mapping.test.js +0 -135
  98. package/node_modules/@comis/core/dist/domain/delivery-origin.test.d.ts +0 -1
  99. package/node_modules/@comis/core/dist/domain/delivery-origin.test.js +0 -68
  100. package/node_modules/@comis/core/dist/domain/execution-graph.test.d.ts +0 -1
  101. package/node_modules/@comis/core/dist/domain/execution-graph.test.js +0 -441
  102. package/node_modules/@comis/core/dist/domain/memory-entry.test.d.ts +0 -1
  103. package/node_modules/@comis/core/dist/domain/memory-entry.test.js +0 -193
  104. package/node_modules/@comis/core/dist/domain/normalized-message.test.d.ts +0 -1
  105. package/node_modules/@comis/core/dist/domain/normalized-message.test.js +0 -255
  106. package/node_modules/@comis/core/dist/domain/session-key.test.d.ts +0 -1
  107. package/node_modules/@comis/core/dist/domain/session-key.test.js +0 -291
  108. package/node_modules/@comis/core/dist/domain/subagent-context-config.test.d.ts +0 -1
  109. package/node_modules/@comis/core/dist/domain/subagent-context-config.test.js +0 -131
  110. package/node_modules/@comis/core/dist/domain/subagent-context-types.test.d.ts +0 -1
  111. package/node_modules/@comis/core/dist/domain/subagent-context-types.test.js +0 -182
  112. package/node_modules/@comis/core/dist/event-bus/bus.test.d.ts +0 -1
  113. package/node_modules/@comis/core/dist/event-bus/bus.test.js +0 -152
  114. package/node_modules/@comis/core/dist/event-bus/events-agent.test.d.ts +0 -1
  115. package/node_modules/@comis/core/dist/event-bus/events-agent.test.js +0 -409
  116. package/node_modules/@comis/core/dist/event-bus/events-channel.test.d.ts +0 -1
  117. package/node_modules/@comis/core/dist/event-bus/events-channel.test.js +0 -240
  118. package/node_modules/@comis/core/dist/event-bus/events-infra.test.d.ts +0 -1
  119. package/node_modules/@comis/core/dist/event-bus/events-infra.test.js +0 -416
  120. package/node_modules/@comis/core/dist/event-bus/events-messaging.test.d.ts +0 -1
  121. package/node_modules/@comis/core/dist/event-bus/events-messaging.test.js +0 -433
  122. package/node_modules/@comis/core/dist/event-bus/events.test.d.ts +0 -1
  123. package/node_modules/@comis/core/dist/event-bus/events.test.js +0 -93
  124. package/node_modules/@comis/core/dist/hooks/hook-runner-global.test.d.ts +0 -1
  125. package/node_modules/@comis/core/dist/hooks/hook-runner-global.test.js +0 -29
  126. package/node_modules/@comis/core/dist/hooks/hook-runner.test.d.ts +0 -1
  127. package/node_modules/@comis/core/dist/hooks/hook-runner.test.js +0 -490
  128. package/node_modules/@comis/core/dist/hooks/hook-strategies.test.d.ts +0 -1
  129. package/node_modules/@comis/core/dist/hooks/hook-strategies.test.js +0 -209
  130. package/node_modules/@comis/core/dist/hooks/integration.test.d.ts +0 -1
  131. package/node_modules/@comis/core/dist/hooks/integration.test.js +0 -235
  132. package/node_modules/@comis/core/dist/hooks/plugin-registry.test.d.ts +0 -1
  133. package/node_modules/@comis/core/dist/hooks/plugin-registry.test.js +0 -470
  134. package/node_modules/@comis/core/dist/load-env.test.d.ts +0 -1
  135. package/node_modules/@comis/core/dist/load-env.test.js +0 -21
  136. package/node_modules/@comis/core/dist/security/action-classifier.test.d.ts +0 -1
  137. package/node_modules/@comis/core/dist/security/action-classifier.test.js +0 -298
  138. package/node_modules/@comis/core/dist/security/audit-aggregator.test.d.ts +0 -1
  139. package/node_modules/@comis/core/dist/security/audit-aggregator.test.js +0 -128
  140. package/node_modules/@comis/core/dist/security/audit.test.d.ts +0 -1
  141. package/node_modules/@comis/core/dist/security/audit.test.js +0 -154
  142. package/node_modules/@comis/core/dist/security/canary-token.test.d.ts +0 -1
  143. package/node_modules/@comis/core/dist/security/canary-token.test.js +0 -45
  144. package/node_modules/@comis/core/dist/security/config-redaction.test.d.ts +0 -1
  145. package/node_modules/@comis/core/dist/security/config-redaction.test.js +0 -107
  146. package/node_modules/@comis/core/dist/security/external-content.test.d.ts +0 -1
  147. package/node_modules/@comis/core/dist/security/external-content.test.js +0 -210
  148. package/node_modules/@comis/core/dist/security/injection-patterns.test.d.ts +0 -1
  149. package/node_modules/@comis/core/dist/security/injection-patterns.test.js +0 -213
  150. package/node_modules/@comis/core/dist/security/injection-rate-limiter.test.d.ts +0 -1
  151. package/node_modules/@comis/core/dist/security/injection-rate-limiter.test.js +0 -194
  152. package/node_modules/@comis/core/dist/security/input-guard.test.d.ts +0 -1
  153. package/node_modules/@comis/core/dist/security/input-guard.test.js +0 -215
  154. package/node_modules/@comis/core/dist/security/input-security-guard.test.d.ts +0 -1
  155. package/node_modules/@comis/core/dist/security/input-security-guard.test.js +0 -215
  156. package/node_modules/@comis/core/dist/security/input-validator.test.d.ts +0 -1
  157. package/node_modules/@comis/core/dist/security/input-validator.test.js +0 -133
  158. package/node_modules/@comis/core/dist/security/log-sanitizer.test.d.ts +0 -1
  159. package/node_modules/@comis/core/dist/security/log-sanitizer.test.js +0 -260
  160. package/node_modules/@comis/core/dist/security/memory-write-validator.test.d.ts +0 -1
  161. package/node_modules/@comis/core/dist/security/memory-write-validator.test.js +0 -62
  162. package/node_modules/@comis/core/dist/security/output-guard.test.d.ts +0 -1
  163. package/node_modules/@comis/core/dist/security/output-guard.test.js +0 -397
  164. package/node_modules/@comis/core/dist/security/safe-path.test.d.ts +0 -1
  165. package/node_modules/@comis/core/dist/security/safe-path.test.js +0 -95
  166. package/node_modules/@comis/core/dist/security/scoped-secret-manager.test.d.ts +0 -1
  167. package/node_modules/@comis/core/dist/security/scoped-secret-manager.test.js +0 -231
  168. package/node_modules/@comis/core/dist/security/secret-access.test.d.ts +0 -1
  169. package/node_modules/@comis/core/dist/security/secret-access.test.js +0 -41
  170. package/node_modules/@comis/core/dist/security/secret-crypto.test.d.ts +0 -1
  171. package/node_modules/@comis/core/dist/security/secret-crypto.test.js +0 -113
  172. package/node_modules/@comis/core/dist/security/secret-manager.test.d.ts +0 -1
  173. package/node_modules/@comis/core/dist/security/secret-manager.test.js +0 -394
  174. package/node_modules/@comis/core/dist/security/secret-ref-resolver.test.d.ts +0 -1
  175. package/node_modules/@comis/core/dist/security/secret-ref-resolver.test.js +0 -268
  176. package/node_modules/@comis/core/dist/security/secrets-audit.test.d.ts +0 -10
  177. package/node_modules/@comis/core/dist/security/secrets-audit.test.js +0 -295
  178. package/node_modules/@comis/core/dist/security/ssrf-guard.test.d.ts +0 -1
  179. package/node_modules/@comis/core/dist/security/ssrf-guard.test.js +0 -127
  180. package/node_modules/@comis/core/dist/security/token-generator.test.d.ts +0 -1
  181. package/node_modules/@comis/core/dist/security/token-generator.test.js +0 -35
  182. package/node_modules/@comis/core/dist/tool-metadata.test.d.ts +0 -1
  183. package/node_modules/@comis/core/dist/tool-metadata.test.js +0 -112
  184. package/node_modules/@comis/memory/dist/compaction.test.d.ts +0 -1
  185. package/node_modules/@comis/memory/dist/compaction.test.js +0 -298
  186. package/node_modules/@comis/memory/dist/context-schema.test.d.ts +0 -1
  187. package/node_modules/@comis/memory/dist/context-schema.test.js +0 -246
  188. package/node_modules/@comis/memory/dist/context-store.test.d.ts +0 -1
  189. package/node_modules/@comis/memory/dist/context-store.test.js +0 -708
  190. package/node_modules/@comis/memory/dist/credential-mapping-schema.test.d.ts +0 -7
  191. package/node_modules/@comis/memory/dist/credential-mapping-schema.test.js +0 -73
  192. package/node_modules/@comis/memory/dist/credential-mapping-store.test.d.ts +0 -8
  193. package/node_modules/@comis/memory/dist/credential-mapping-store.test.js +0 -340
  194. package/node_modules/@comis/memory/dist/delivery-mirror-adapter.test.d.ts +0 -1
  195. package/node_modules/@comis/memory/dist/delivery-mirror-adapter.test.js +0 -165
  196. package/node_modules/@comis/memory/dist/delivery-queue-adapter.test.d.ts +0 -1
  197. package/node_modules/@comis/memory/dist/delivery-queue-adapter.test.js +0 -263
  198. package/node_modules/@comis/memory/dist/embedding-batch-indexer.test.d.ts +0 -1
  199. package/node_modules/@comis/memory/dist/embedding-batch-indexer.test.js +0 -202
  200. package/node_modules/@comis/memory/dist/embedding-cache-lru.test.d.ts +0 -1
  201. package/node_modules/@comis/memory/dist/embedding-cache-lru.test.js +0 -241
  202. package/node_modules/@comis/memory/dist/embedding-cache-sqlite.test.d.ts +0 -8
  203. package/node_modules/@comis/memory/dist/embedding-cache-sqlite.test.js +0 -678
  204. package/node_modules/@comis/memory/dist/embedding-cache.test.d.ts +0 -1
  205. package/node_modules/@comis/memory/dist/embedding-cache.test.js +0 -213
  206. package/node_modules/@comis/memory/dist/embedding-fingerprint.test.d.ts +0 -1
  207. package/node_modules/@comis/memory/dist/embedding-fingerprint.test.js +0 -87
  208. package/node_modules/@comis/memory/dist/embedding-hash.test.d.ts +0 -1
  209. package/node_modules/@comis/memory/dist/embedding-hash.test.js +0 -31
  210. package/node_modules/@comis/memory/dist/embedding-integration.test.d.ts +0 -8
  211. package/node_modules/@comis/memory/dist/embedding-integration.test.js +0 -232
  212. package/node_modules/@comis/memory/dist/embedding-provider-factory.test.d.ts +0 -1
  213. package/node_modules/@comis/memory/dist/embedding-provider-factory.test.js +0 -176
  214. package/node_modules/@comis/memory/dist/embedding-provider-local.test.d.ts +0 -8
  215. package/node_modules/@comis/memory/dist/embedding-provider-local.test.js +0 -76
  216. package/node_modules/@comis/memory/dist/embedding-provider-openai.test.d.ts +0 -8
  217. package/node_modules/@comis/memory/dist/embedding-provider-openai.test.js +0 -100
  218. package/node_modules/@comis/memory/dist/embedding-queue.test.d.ts +0 -1
  219. package/node_modules/@comis/memory/dist/embedding-queue.test.js +0 -236
  220. package/node_modules/@comis/memory/dist/hybrid-search.test.d.ts +0 -1
  221. package/node_modules/@comis/memory/dist/hybrid-search.test.js +0 -476
  222. package/node_modules/@comis/memory/dist/identity-link-store.test.d.ts +0 -1
  223. package/node_modules/@comis/memory/dist/identity-link-store.test.js +0 -88
  224. package/node_modules/@comis/memory/dist/memory-api.test.d.ts +0 -1
  225. package/node_modules/@comis/memory/dist/memory-api.test.js +0 -495
  226. package/node_modules/@comis/memory/dist/memory-concurrency.test.d.ts +0 -20
  227. package/node_modules/@comis/memory/dist/memory-concurrency.test.js +0 -222
  228. package/node_modules/@comis/memory/dist/named-graph-store.test.d.ts +0 -1
  229. package/node_modules/@comis/memory/dist/named-graph-store.test.js +0 -227
  230. package/node_modules/@comis/memory/dist/observability-store.test.d.ts +0 -1
  231. package/node_modules/@comis/memory/dist/observability-store.test.js +0 -704
  232. package/node_modules/@comis/memory/dist/row-mapper.test.d.ts +0 -1
  233. package/node_modules/@comis/memory/dist/row-mapper.test.js +0 -409
  234. package/node_modules/@comis/memory/dist/schema.test.d.ts +0 -1
  235. package/node_modules/@comis/memory/dist/schema.test.js +0 -240
  236. package/node_modules/@comis/memory/dist/secret-store-schema.test.d.ts +0 -7
  237. package/node_modules/@comis/memory/dist/secret-store-schema.test.js +0 -90
  238. package/node_modules/@comis/memory/dist/session-store.test.d.ts +0 -1
  239. package/node_modules/@comis/memory/dist/session-store.test.js +0 -262
  240. package/node_modules/@comis/memory/dist/setup-secrets.test.d.ts +0 -1
  241. package/node_modules/@comis/memory/dist/setup-secrets.test.js +0 -140
  242. package/node_modules/@comis/memory/dist/sqlite-memory-adapter.test.d.ts +0 -1
  243. package/node_modules/@comis/memory/dist/sqlite-memory-adapter.test.js +0 -888
  244. package/node_modules/@comis/memory/dist/sqlite-secret-store.test.d.ts +0 -8
  245. package/node_modules/@comis/memory/dist/sqlite-secret-store.test.js +0 -245
  246. package/node_modules/@comis/shared/dist/abort.test.d.ts +0 -1
  247. package/node_modules/@comis/shared/dist/abort.test.js +0 -71
  248. package/node_modules/@comis/shared/dist/result.test.d.ts +0 -1
  249. package/node_modules/@comis/shared/dist/result.test.js +0 -178
  250. package/node_modules/@comis/shared/dist/suppress-error.test.d.ts +0 -1
  251. package/node_modules/@comis/shared/dist/suppress-error.test.js +0 -50
  252. package/node_modules/@comis/shared/dist/timeout.test.d.ts +0 -1
  253. package/node_modules/@comis/shared/dist/timeout.test.js +0 -75
  254. package/node_modules/@comis/shared/dist/ttl-cache.test.d.ts +0 -1
  255. package/node_modules/@comis/shared/dist/ttl-cache.test.js +0 -81
@@ -1,60 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { SenderTrustDisplayConfigSchema } from "./schema-sender-trust-display.js";
3
- describe("SenderTrustDisplayConfigSchema", () => {
4
- it("produces valid defaults from empty object", () => {
5
- const result = SenderTrustDisplayConfigSchema.safeParse({});
6
- expect(result.success).toBe(true);
7
- if (result.success) {
8
- expect(result.data.enabled).toBe(false);
9
- expect(result.data.displayMode).toBe("hash");
10
- expect(result.data.hashPrefix).toBe(8);
11
- expect(result.data.hashSecretRef).toBe("");
12
- expect(result.data.aliases).toEqual({});
13
- }
14
- });
15
- it("accepts fully specified config", () => {
16
- const result = SenderTrustDisplayConfigSchema.safeParse({
17
- enabled: true,
18
- displayMode: "alias",
19
- hashPrefix: 12,
20
- hashSecretRef: "secrets/hmac-key",
21
- aliases: {
22
- "user-123": "Alice",
23
- "user-456": "Bob",
24
- },
25
- });
26
- expect(result.success).toBe(true);
27
- if (result.success) {
28
- expect(result.data.enabled).toBe(true);
29
- expect(result.data.displayMode).toBe("alias");
30
- expect(result.data.hashPrefix).toBe(12);
31
- expect(result.data.hashSecretRef).toBe("secrets/hmac-key");
32
- expect(result.data.aliases["user-123"]).toBe("Alice");
33
- }
34
- });
35
- it("rejects unknown keys (strictObject)", () => {
36
- const result = SenderTrustDisplayConfigSchema.safeParse({
37
- enabled: true,
38
- unknownField: "should-fail",
39
- });
40
- expect(result.success).toBe(false);
41
- });
42
- it("rejects invalid displayMode enum value", () => {
43
- const result = SenderTrustDisplayConfigSchema.safeParse({
44
- displayMode: "obfuscated",
45
- });
46
- expect(result.success).toBe(false);
47
- });
48
- it("rejects hashPrefix below minimum (4)", () => {
49
- const result = SenderTrustDisplayConfigSchema.safeParse({
50
- hashPrefix: 3,
51
- });
52
- expect(result.success).toBe(false);
53
- });
54
- it("rejects hashPrefix above maximum (16)", () => {
55
- const result = SenderTrustDisplayConfigSchema.safeParse({
56
- hashPrefix: 17,
57
- });
58
- expect(result.success).toBe(false);
59
- });
60
- });
@@ -1,73 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { getConfigSchema, getConfigSections } from "./schema-serializer.js";
3
- describe("getConfigSchema", () => {
4
- it("returns full schema with type property", () => {
5
- const schema = getConfigSchema();
6
- expect(schema).toBeDefined();
7
- expect(typeof schema).toBe("object");
8
- // JSON Schema always has a type or definitions at the top level
9
- expect(schema).toHaveProperty("type");
10
- });
11
- it("caches the full schema (same reference on second call)", () => {
12
- const first = getConfigSchema();
13
- const second = getConfigSchema();
14
- expect(first).toBe(second);
15
- });
16
- it("returns section-specific schema for agents", () => {
17
- const schema = getConfigSchema("agents");
18
- expect(schema).toBeDefined();
19
- expect(typeof schema).toBe("object");
20
- expect(schema).toHaveProperty("type");
21
- });
22
- it("returns section-specific schema for gateway", () => {
23
- const schema = getConfigSchema("gateway");
24
- expect(schema).toBeDefined();
25
- expect(typeof schema).toBe("object");
26
- expect(schema).toHaveProperty("type");
27
- });
28
- it("throws for unknown section name", () => {
29
- expect(() => getConfigSchema("unknown_section")).toThrow("Unknown config section: unknown_section");
30
- });
31
- it("throws for empty string section", () => {
32
- expect(() => getConfigSchema("")).toThrow("Unknown config section: ");
33
- });
34
- it("getConfigSchema('agents') returns JSON Schema for per-agent config", () => {
35
- const schema = getConfigSchema("agents");
36
- expect(schema).toHaveProperty("type");
37
- // PerAgentConfigSchema is an object type with agent properties
38
- expect(schema.type).toBe("object");
39
- const sections = getConfigSections();
40
- expect(sections).toContain("agents");
41
- });
42
- });
43
- describe("getConfigSections", () => {
44
- it("returns an array of section names", () => {
45
- const sections = getConfigSections();
46
- expect(Array.isArray(sections)).toBe(true);
47
- expect(sections.length).toBeGreaterThan(0);
48
- });
49
- it("contains agents, security, and gateway", () => {
50
- const sections = getConfigSections();
51
- expect(sections).toContain("agents");
52
- expect(sections).toContain("security");
53
- expect(sections).toContain("gateway");
54
- });
55
- it("contains all 15 sections", () => {
56
- const sections = getConfigSections();
57
- expect(sections).toHaveLength(15);
58
- expect(sections).toContain("agents");
59
- expect(sections).toContain("channels");
60
- expect(sections).toContain("memory");
61
- expect(sections).toContain("routing");
62
- expect(sections).toContain("daemon");
63
- expect(sections).toContain("scheduler");
64
- expect(sections).toContain("integrations");
65
- expect(sections).toContain("monitoring");
66
- // CFG-07: New config sections
67
- expect(sections).toContain("browser");
68
- expect(sections).toContain("models");
69
- expect(sections).toContain("providers");
70
- expect(sections).toContain("messages");
71
- expect(sections).toContain("approvals");
72
- });
73
- });
@@ -1,39 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { TelegramFileRefGuardConfigSchema } from "./schema-telegram-file-guard.js";
3
- describe("TelegramFileRefGuardConfigSchema", () => {
4
- it("produces valid defaults from empty object", () => {
5
- const result = TelegramFileRefGuardConfigSchema.safeParse({});
6
- expect(result.success).toBe(true);
7
- if (result.success) {
8
- expect(result.data.enabled).toBe(true);
9
- expect(result.data.additionalExtensions).toEqual([]);
10
- expect(result.data.excludedExtensions).toEqual([]);
11
- }
12
- });
13
- it("accepts fully specified config", () => {
14
- const result = TelegramFileRefGuardConfigSchema.safeParse({
15
- enabled: false,
16
- additionalExtensions: [".docx", ".xlsx"],
17
- excludedExtensions: [".txt"],
18
- });
19
- expect(result.success).toBe(true);
20
- if (result.success) {
21
- expect(result.data.enabled).toBe(false);
22
- expect(result.data.additionalExtensions).toEqual([".docx", ".xlsx"]);
23
- expect(result.data.excludedExtensions).toEqual([".txt"]);
24
- }
25
- });
26
- it("rejects unknown keys (strictObject)", () => {
27
- const result = TelegramFileRefGuardConfigSchema.safeParse({
28
- enabled: true,
29
- unknownField: "should-fail",
30
- });
31
- expect(result.success).toBe(false);
32
- });
33
- it("rejects non-array additionalExtensions", () => {
34
- const result = TelegramFileRefGuardConfigSchema.safeParse({
35
- additionalExtensions: ".docx",
36
- });
37
- expect(result.success).toBe(false);
38
- });
39
- });
@@ -1,276 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { describe, it, expect } from "vitest";
3
- import { RequestContextSchema, getContext, tryGetContext, runWithContext } from "./context.js";
4
- function makeContext(overrides = {}) {
5
- return {
6
- tenantId: "tenant-1",
7
- userId: "user-1",
8
- sessionKey: "tenant-1:user-1:chan-1",
9
- traceId: randomUUID(),
10
- startedAt: Date.now(),
11
- trustLevel: "user",
12
- ...overrides,
13
- };
14
- }
15
- describe("RequestContext", () => {
16
- describe("runWithContext + getContext", () => {
17
- it("returns context within scope", () => {
18
- const ctx = makeContext();
19
- const result = runWithContext(ctx, () => getContext());
20
- expect(result).toEqual(ctx);
21
- });
22
- it("returns the exact same context object", () => {
23
- const ctx = makeContext();
24
- runWithContext(ctx, () => {
25
- const retrieved = getContext();
26
- expect(retrieved).toBe(ctx);
27
- });
28
- });
29
- });
30
- describe("getContext outside scope", () => {
31
- it("throws descriptive error", () => {
32
- expect(() => getContext()).toThrow("getContext() called outside of a request context scope");
33
- });
34
- it("error message mentions runWithContext", () => {
35
- expect(() => getContext()).toThrow("runWithContext()");
36
- });
37
- it("error message mentions tryGetContext alternative", () => {
38
- expect(() => getContext()).toThrow("tryGetContext()");
39
- });
40
- });
41
- describe("tryGetContext", () => {
42
- it("returns undefined outside scope", () => {
43
- expect(tryGetContext()).toBeUndefined();
44
- });
45
- it("returns context within scope", () => {
46
- const ctx = makeContext();
47
- runWithContext(ctx, () => {
48
- expect(tryGetContext()).toEqual(ctx);
49
- });
50
- });
51
- });
52
- describe("async propagation", () => {
53
- it("context propagates through async/await", async () => {
54
- const ctx = makeContext();
55
- const result = await runWithContext(ctx, async () => {
56
- // Simulate async work
57
- await new Promise((resolve) => setTimeout(resolve, 10));
58
- return getContext();
59
- });
60
- expect(result).toEqual(ctx);
61
- });
62
- it("context propagates through multiple async hops", async () => {
63
- const ctx = makeContext();
64
- async function innerAsync() {
65
- await new Promise((resolve) => setTimeout(resolve, 5));
66
- return getContext();
67
- }
68
- const result = await runWithContext(ctx, async () => {
69
- await new Promise((resolve) => setTimeout(resolve, 5));
70
- return innerAsync();
71
- });
72
- expect(result.traceId).toBe(ctx.traceId);
73
- });
74
- });
75
- describe("nested scopes", () => {
76
- it("nested runWithContext creates independent scopes", () => {
77
- const outerCtx = makeContext({ tenantId: "outer" });
78
- const innerCtx = makeContext({ tenantId: "inner" });
79
- runWithContext(outerCtx, () => {
80
- expect(getContext().tenantId).toBe("outer");
81
- runWithContext(innerCtx, () => {
82
- expect(getContext().tenantId).toBe("inner");
83
- });
84
- // Outer context restored after inner scope exits
85
- expect(getContext().tenantId).toBe("outer");
86
- });
87
- });
88
- });
89
- describe("concurrent isolation", () => {
90
- it("concurrent contexts maintain isolation via Promise.all", async () => {
91
- const ctx1 = makeContext({ tenantId: "tenant-A", userId: "user-A" });
92
- const ctx2 = makeContext({ tenantId: "tenant-B", userId: "user-B" });
93
- const ctx3 = makeContext({ tenantId: "tenant-C", userId: "user-C" });
94
- const [result1, result2, result3] = await Promise.all([
95
- runWithContext(ctx1, async () => {
96
- await new Promise((resolve) => setTimeout(resolve, 15));
97
- return getContext().tenantId;
98
- }),
99
- runWithContext(ctx2, async () => {
100
- await new Promise((resolve) => setTimeout(resolve, 10));
101
- return getContext().tenantId;
102
- }),
103
- runWithContext(ctx3, async () => {
104
- await new Promise((resolve) => setTimeout(resolve, 5));
105
- return getContext().tenantId;
106
- }),
107
- ]);
108
- expect(result1).toBe("tenant-A");
109
- expect(result2).toBe("tenant-B");
110
- expect(result3).toBe("tenant-C");
111
- });
112
- });
113
- describe("RequestContextSchema", () => {
114
- it("validates correct context", () => {
115
- const result = RequestContextSchema.safeParse({
116
- userId: "user-1",
117
- sessionKey: "default:user-1:chan-1",
118
- traceId: randomUUID(),
119
- startedAt: Date.now(),
120
- });
121
- expect(result.success).toBe(true);
122
- });
123
- it("tenantId defaults to 'default'", () => {
124
- const result = RequestContextSchema.parse({
125
- userId: "user-1",
126
- sessionKey: "default:user-1:chan-1",
127
- traceId: randomUUID(),
128
- startedAt: Date.now(),
129
- });
130
- expect(result.tenantId).toBe("default");
131
- });
132
- it("rejects missing required fields", () => {
133
- const result = RequestContextSchema.safeParse({
134
- tenantId: "t1",
135
- });
136
- expect(result.success).toBe(false);
137
- });
138
- it("rejects invalid traceId format", () => {
139
- const result = RequestContextSchema.safeParse({
140
- tenantId: "t1",
141
- userId: "u1",
142
- sessionKey: "t1:u1:c1",
143
- traceId: "not-a-uuid",
144
- startedAt: Date.now(),
145
- });
146
- expect(result.success).toBe(false);
147
- });
148
- it("rejects unknown fields (strict mode)", () => {
149
- const result = RequestContextSchema.safeParse({
150
- tenantId: "t1",
151
- userId: "u1",
152
- sessionKey: "t1:u1:c1",
153
- traceId: randomUUID(),
154
- startedAt: Date.now(),
155
- extraField: "should-fail",
156
- });
157
- expect(result.success).toBe(false);
158
- });
159
- });
160
- describe("trustLevel", () => {
161
- it("trustLevel defaults to 'admin'", () => {
162
- const result = RequestContextSchema.parse({
163
- userId: "user-1",
164
- sessionKey: "default:user-1:chan-1",
165
- traceId: randomUUID(),
166
- startedAt: Date.now(),
167
- });
168
- expect(result.trustLevel).toBe("admin");
169
- });
170
- it("accepts admin trustLevel", () => {
171
- const result = RequestContextSchema.safeParse({
172
- userId: "user-1",
173
- sessionKey: "default:user-1:chan-1",
174
- traceId: randomUUID(),
175
- startedAt: Date.now(),
176
- trustLevel: "admin",
177
- });
178
- expect(result.success).toBe(true);
179
- if (result.success) {
180
- expect(result.data.trustLevel).toBe("admin");
181
- }
182
- });
183
- it("accepts guest trustLevel", () => {
184
- const result = RequestContextSchema.safeParse({
185
- userId: "user-1",
186
- sessionKey: "default:user-1:chan-1",
187
- traceId: randomUUID(),
188
- startedAt: Date.now(),
189
- trustLevel: "guest",
190
- });
191
- expect(result.success).toBe(true);
192
- if (result.success) {
193
- expect(result.data.trustLevel).toBe("guest");
194
- }
195
- });
196
- it("rejects invalid trustLevel", () => {
197
- const result = RequestContextSchema.safeParse({
198
- userId: "user-1",
199
- sessionKey: "default:user-1:chan-1",
200
- traceId: randomUUID(),
201
- startedAt: Date.now(),
202
- trustLevel: "superadmin",
203
- });
204
- expect(result.success).toBe(false);
205
- });
206
- });
207
- describe("contentDelimiter", () => {
208
- it("accepts optional contentDelimiter field", () => {
209
- const result = RequestContextSchema.safeParse({
210
- userId: "user-1",
211
- sessionKey: "default:user-1:chan-1",
212
- traceId: randomUUID(),
213
- startedAt: Date.now(),
214
- contentDelimiter: "abcdef0123456789abcdef01",
215
- });
216
- expect(result.success).toBe(true);
217
- if (result.success) {
218
- expect(result.data.contentDelimiter).toBe("abcdef0123456789abcdef01");
219
- }
220
- });
221
- it("context without contentDelimiter still parses (backward compat)", () => {
222
- const result = RequestContextSchema.safeParse({
223
- userId: "user-1",
224
- sessionKey: "default:user-1:chan-1",
225
- traceId: randomUUID(),
226
- startedAt: Date.now(),
227
- });
228
- expect(result.success).toBe(true);
229
- if (result.success) {
230
- expect(result.data.contentDelimiter).toBeUndefined();
231
- }
232
- });
233
- it("rejects contentDelimiter shorter than 16 chars", () => {
234
- const result = RequestContextSchema.safeParse({
235
- userId: "user-1",
236
- sessionKey: "default:user-1:chan-1",
237
- traceId: randomUUID(),
238
- startedAt: Date.now(),
239
- contentDelimiter: "short",
240
- });
241
- expect(result.success).toBe(false);
242
- });
243
- });
244
- describe("channelType", () => {
245
- it("accepts optional channelType field", () => {
246
- const result = RequestContextSchema.safeParse({
247
- userId: "user-1",
248
- sessionKey: "default:user-1:chan-1",
249
- traceId: randomUUID(),
250
- startedAt: Date.now(),
251
- channelType: "telegram",
252
- });
253
- expect(result.success).toBe(true);
254
- if (result.success) {
255
- expect(result.data.channelType).toBe("telegram");
256
- }
257
- });
258
- it("context without channelType still parses (backward compat)", () => {
259
- const result = RequestContextSchema.safeParse({
260
- userId: "user-1",
261
- sessionKey: "default:user-1:chan-1",
262
- traceId: randomUUID(),
263
- startedAt: Date.now(),
264
- });
265
- expect(result.success).toBe(true);
266
- if (result.success) {
267
- expect(result.data.channelType).toBeUndefined();
268
- }
269
- });
270
- it("channelType propagates through runWithContext", () => {
271
- const ctx = makeContext({ channelType: "discord" });
272
- const result = runWithContext(ctx, () => getContext());
273
- expect(result.channelType).toBe("discord");
274
- });
275
- });
276
- });
@@ -1,159 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { parseAgentResponse } from "./agent-response.js";
3
- function validResponse(overrides = {}) {
4
- return {
5
- agentId: "main-agent",
6
- content: "Here is my response.",
7
- ...overrides,
8
- };
9
- }
10
- describe("AgentResponse", () => {
11
- describe("valid data", () => {
12
- it("parses a minimal valid response", () => {
13
- const result = parseAgentResponse(validResponse());
14
- expect(result.ok).toBe(true);
15
- if (result.ok) {
16
- expect(result.value.agentId).toBe("main-agent");
17
- expect(result.value.content).toBe("Here is my response.");
18
- }
19
- });
20
- it("applies default values for toolCalls, finishReason, metadata", () => {
21
- const result = parseAgentResponse(validResponse());
22
- expect(result.ok).toBe(true);
23
- if (result.ok) {
24
- expect(result.value.toolCalls).toEqual([]);
25
- expect(result.value.finishReason).toBe("stop");
26
- expect(result.value.metadata).toEqual({});
27
- }
28
- });
29
- it("accepts empty content (agent may return only tool calls)", () => {
30
- const result = parseAgentResponse(validResponse({ content: "" }));
31
- expect(result.ok).toBe(true);
32
- if (result.ok) {
33
- expect(result.value.content).toBe("");
34
- }
35
- });
36
- it("accepts all finish reasons", () => {
37
- const reasons = ["stop", "max_tokens", "tool_use", "error", "budget_exceeded"];
38
- for (const finishReason of reasons) {
39
- const result = parseAgentResponse(validResponse({ finishReason }));
40
- expect(result.ok).toBe(true);
41
- }
42
- });
43
- it("accepts tool calls array", () => {
44
- const result = parseAgentResponse(validResponse({
45
- toolCalls: [
46
- { id: "tc-1", name: "search", input: { query: "test" } },
47
- { id: "tc-2", name: "read_file", input: { path: "/tmp/a.txt" } },
48
- ],
49
- }));
50
- expect(result.ok).toBe(true);
51
- if (result.ok) {
52
- expect(result.value.toolCalls).toHaveLength(2);
53
- expect(result.value.toolCalls[0].name).toBe("search");
54
- }
55
- });
56
- it("accepts tokensUsed when provided", () => {
57
- const result = parseAgentResponse(validResponse({
58
- tokensUsed: {
59
- prompt: 100,
60
- completion: 50,
61
- provider: "anthropic",
62
- model: "claude-opus-4-20250514",
63
- },
64
- }));
65
- expect(result.ok).toBe(true);
66
- if (result.ok) {
67
- expect(result.value.tokensUsed?.prompt).toBe(100);
68
- expect(result.value.tokensUsed?.provider).toBe("anthropic");
69
- }
70
- });
71
- it("allows omitting optional tokensUsed", () => {
72
- const result = parseAgentResponse(validResponse());
73
- expect(result.ok).toBe(true);
74
- if (result.ok) {
75
- expect(result.value.tokensUsed).toBeUndefined();
76
- }
77
- });
78
- it("accepts metadata with arbitrary values", () => {
79
- const result = parseAgentResponse(validResponse({
80
- metadata: { latencyMs: 234, cached: false },
81
- }));
82
- expect(result.ok).toBe(true);
83
- if (result.ok) {
84
- expect(result.value.metadata).toEqual({
85
- latencyMs: 234,
86
- cached: false,
87
- });
88
- }
89
- });
90
- });
91
- describe("invalid data", () => {
92
- it("rejects missing required fields", () => {
93
- const result = parseAgentResponse({});
94
- expect(result.ok).toBe(false);
95
- if (!result.ok) {
96
- const paths = result.error.issues.map((i) => i.path[0]);
97
- expect(paths).toContain("agentId");
98
- expect(paths).toContain("content");
99
- }
100
- });
101
- it("rejects empty agentId", () => {
102
- const result = parseAgentResponse(validResponse({ agentId: "" }));
103
- expect(result.ok).toBe(false);
104
- });
105
- it("rejects invalid finishReason", () => {
106
- const result = parseAgentResponse(validResponse({ finishReason: "cancelled" }));
107
- expect(result.ok).toBe(false);
108
- });
109
- it("rejects invalid tool call shape", () => {
110
- const result = parseAgentResponse(validResponse({ toolCalls: [{ bad: "shape" }] }));
111
- expect(result.ok).toBe(false);
112
- });
113
- it("rejects tool call with empty id", () => {
114
- const result = parseAgentResponse(validResponse({
115
- toolCalls: [{ id: "", name: "search", input: {} }],
116
- }));
117
- expect(result.ok).toBe(false);
118
- });
119
- it("rejects tool call with empty name", () => {
120
- const result = parseAgentResponse(validResponse({
121
- toolCalls: [{ id: "tc-1", name: "", input: {} }],
122
- }));
123
- expect(result.ok).toBe(false);
124
- });
125
- it("rejects invalid tokensUsed shape", () => {
126
- const result = parseAgentResponse(validResponse({ tokensUsed: { prompt: "not a number" } }));
127
- expect(result.ok).toBe(false);
128
- });
129
- it("rejects negative token counts", () => {
130
- const result = parseAgentResponse(validResponse({
131
- tokensUsed: {
132
- prompt: -1,
133
- completion: 50,
134
- provider: "openai",
135
- model: "gpt-4",
136
- },
137
- }));
138
- expect(result.ok).toBe(false);
139
- });
140
- it("strips extra/unknown fields", () => {
141
- const result = parseAgentResponse(validResponse({ unknownField: "surprise" }));
142
- expect(result.ok).toBe(false);
143
- });
144
- it("rejects non-object input", () => {
145
- const result = parseAgentResponse(42);
146
- expect(result.ok).toBe(false);
147
- });
148
- it("returns descriptive ZodError issues", () => {
149
- const result = parseAgentResponse({ agentId: 123 });
150
- expect(result.ok).toBe(false);
151
- if (!result.ok) {
152
- expect(result.error.issues.length).toBeGreaterThan(0);
153
- for (const issue of result.error.issues) {
154
- expect(issue.message).toBeTruthy();
155
- }
156
- }
157
- });
158
- });
159
- });