comisai 1.0.11 → 1.0.12

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 (247) hide show
  1. package/node_modules/@comis/agent/dist/executor/pi-executor.d.ts +1 -4
  2. package/node_modules/@comis/agent/package.json +1 -1
  3. package/node_modules/@comis/channels/package.json +1 -1
  4. package/node_modules/@comis/cli/package.json +1 -1
  5. package/node_modules/@comis/core/package.json +1 -1
  6. package/node_modules/@comis/daemon/package.json +1 -1
  7. package/node_modules/@comis/gateway/package.json +1 -1
  8. package/node_modules/@comis/infra/package.json +1 -1
  9. package/node_modules/@comis/memory/package.json +1 -1
  10. package/node_modules/@comis/scheduler/package.json +1 -1
  11. package/node_modules/@comis/shared/package.json +1 -1
  12. package/node_modules/@comis/skills/package.json +1 -1
  13. package/package.json +18 -18
  14. package/node_modules/@comis/core/dist/approval/approval-gate.test.d.ts +0 -1
  15. package/node_modules/@comis/core/dist/approval/approval-gate.test.js +0 -1003
  16. package/node_modules/@comis/core/dist/bootstrap.test.d.ts +0 -1
  17. package/node_modules/@comis/core/dist/bootstrap.test.js +0 -150
  18. package/node_modules/@comis/core/dist/config/backup.test.d.ts +0 -1
  19. package/node_modules/@comis/core/dist/config/backup.test.js +0 -160
  20. package/node_modules/@comis/core/dist/config/env-substitution.test.d.ts +0 -1
  21. package/node_modules/@comis/core/dist/config/env-substitution.test.js +0 -259
  22. package/node_modules/@comis/core/dist/config/field-metadata.test.d.ts +0 -1
  23. package/node_modules/@comis/core/dist/config/field-metadata.test.js +0 -72
  24. package/node_modules/@comis/core/dist/config/git-manager.test.d.ts +0 -1
  25. package/node_modules/@comis/core/dist/config/git-manager.test.js +0 -1042
  26. package/node_modules/@comis/core/dist/config/immutable-keys.test.d.ts +0 -1
  27. package/node_modules/@comis/core/dist/config/immutable-keys.test.js +0 -283
  28. package/node_modules/@comis/core/dist/config/include-resolver.test.d.ts +0 -1
  29. package/node_modules/@comis/core/dist/config/include-resolver.test.js +0 -292
  30. package/node_modules/@comis/core/dist/config/layered.test.d.ts +0 -1
  31. package/node_modules/@comis/core/dist/config/layered.test.js +0 -211
  32. package/node_modules/@comis/core/dist/config/loader.test.d.ts +0 -1
  33. package/node_modules/@comis/core/dist/config/loader.test.js +0 -300
  34. package/node_modules/@comis/core/dist/config/migrate.test.d.ts +0 -1
  35. package/node_modules/@comis/core/dist/config/migrate.test.js +0 -244
  36. package/node_modules/@comis/core/dist/config/partial-validator.test.d.ts +0 -1
  37. package/node_modules/@comis/core/dist/config/partial-validator.test.js +0 -98
  38. package/node_modules/@comis/core/dist/config/schema-agent-model.test.d.ts +0 -1
  39. package/node_modules/@comis/core/dist/config/schema-agent-model.test.js +0 -279
  40. package/node_modules/@comis/core/dist/config/schema-agent-session.test.d.ts +0 -1
  41. package/node_modules/@comis/core/dist/config/schema-agent-session.test.js +0 -242
  42. package/node_modules/@comis/core/dist/config/schema-agent.test.d.ts +0 -1
  43. package/node_modules/@comis/core/dist/config/schema-agent.test.js +0 -645
  44. package/node_modules/@comis/core/dist/config/schema-channel.test.d.ts +0 -1
  45. package/node_modules/@comis/core/dist/config/schema-channel.test.js +0 -341
  46. package/node_modules/@comis/core/dist/config/schema-coalescer.test.d.ts +0 -1
  47. package/node_modules/@comis/core/dist/config/schema-coalescer.test.js +0 -51
  48. package/node_modules/@comis/core/dist/config/schema-context-engine.test.d.ts +0 -1
  49. package/node_modules/@comis/core/dist/config/schema-context-engine.test.js +0 -797
  50. package/node_modules/@comis/core/dist/config/schema-context-guard.test.d.ts +0 -1
  51. package/node_modules/@comis/core/dist/config/schema-context-guard.test.js +0 -111
  52. package/node_modules/@comis/core/dist/config/schema-daemon.test.d.ts +0 -1
  53. package/node_modules/@comis/core/dist/config/schema-daemon.test.js +0 -107
  54. package/node_modules/@comis/core/dist/config/schema-delivery-timing.test.d.ts +0 -1
  55. package/node_modules/@comis/core/dist/config/schema-delivery-timing.test.js +0 -51
  56. package/node_modules/@comis/core/dist/config/schema-documentation.test.d.ts +0 -1
  57. package/node_modules/@comis/core/dist/config/schema-documentation.test.js +0 -63
  58. package/node_modules/@comis/core/dist/config/schema-gateway.test.d.ts +0 -1
  59. package/node_modules/@comis/core/dist/config/schema-gateway.test.js +0 -219
  60. package/node_modules/@comis/core/dist/config/schema-gemini-cache.test.d.ts +0 -1
  61. package/node_modules/@comis/core/dist/config/schema-gemini-cache.test.js +0 -41
  62. package/node_modules/@comis/core/dist/config/schema-integrations.test.d.ts +0 -1
  63. package/node_modules/@comis/core/dist/config/schema-integrations.test.js +0 -92
  64. package/node_modules/@comis/core/dist/config/schema-lifecycle-reactions.test.d.ts +0 -1
  65. package/node_modules/@comis/core/dist/config/schema-lifecycle-reactions.test.js +0 -61
  66. package/node_modules/@comis/core/dist/config/schema-misc.test.d.ts +0 -1
  67. package/node_modules/@comis/core/dist/config/schema-misc.test.js +0 -394
  68. package/node_modules/@comis/core/dist/config/schema-observability.test.d.ts +0 -1
  69. package/node_modules/@comis/core/dist/config/schema-observability.test.js +0 -76
  70. package/node_modules/@comis/core/dist/config/schema-providers.test.d.ts +0 -1
  71. package/node_modules/@comis/core/dist/config/schema-providers.test.js +0 -294
  72. package/node_modules/@comis/core/dist/config/schema-queue.test.d.ts +0 -1
  73. package/node_modules/@comis/core/dist/config/schema-queue.test.js +0 -234
  74. package/node_modules/@comis/core/dist/config/schema-response-prefix.test.d.ts +0 -1
  75. package/node_modules/@comis/core/dist/config/schema-response-prefix.test.js +0 -36
  76. package/node_modules/@comis/core/dist/config/schema-security.test.d.ts +0 -1
  77. package/node_modules/@comis/core/dist/config/schema-security.test.js +0 -54
  78. package/node_modules/@comis/core/dist/config/schema-sender-trust-display.test.d.ts +0 -1
  79. package/node_modules/@comis/core/dist/config/schema-sender-trust-display.test.js +0 -60
  80. package/node_modules/@comis/core/dist/config/schema-serializer.test.d.ts +0 -1
  81. package/node_modules/@comis/core/dist/config/schema-serializer.test.js +0 -73
  82. package/node_modules/@comis/core/dist/config/schema-telegram-file-guard.test.d.ts +0 -1
  83. package/node_modules/@comis/core/dist/config/schema-telegram-file-guard.test.js +0 -39
  84. package/node_modules/@comis/core/dist/context/context.test.d.ts +0 -1
  85. package/node_modules/@comis/core/dist/context/context.test.js +0 -276
  86. package/node_modules/@comis/core/dist/domain/agent-response.test.d.ts +0 -1
  87. package/node_modules/@comis/core/dist/domain/agent-response.test.js +0 -159
  88. package/node_modules/@comis/core/dist/domain/credential-mapping.test.d.ts +0 -1
  89. package/node_modules/@comis/core/dist/domain/credential-mapping.test.js +0 -135
  90. package/node_modules/@comis/core/dist/domain/delivery-origin.test.d.ts +0 -1
  91. package/node_modules/@comis/core/dist/domain/delivery-origin.test.js +0 -68
  92. package/node_modules/@comis/core/dist/domain/execution-graph.test.d.ts +0 -1
  93. package/node_modules/@comis/core/dist/domain/execution-graph.test.js +0 -441
  94. package/node_modules/@comis/core/dist/domain/memory-entry.test.d.ts +0 -1
  95. package/node_modules/@comis/core/dist/domain/memory-entry.test.js +0 -193
  96. package/node_modules/@comis/core/dist/domain/normalized-message.test.d.ts +0 -1
  97. package/node_modules/@comis/core/dist/domain/normalized-message.test.js +0 -255
  98. package/node_modules/@comis/core/dist/domain/session-key.test.d.ts +0 -1
  99. package/node_modules/@comis/core/dist/domain/session-key.test.js +0 -291
  100. package/node_modules/@comis/core/dist/domain/subagent-context-config.test.d.ts +0 -1
  101. package/node_modules/@comis/core/dist/domain/subagent-context-config.test.js +0 -131
  102. package/node_modules/@comis/core/dist/domain/subagent-context-types.test.d.ts +0 -1
  103. package/node_modules/@comis/core/dist/domain/subagent-context-types.test.js +0 -182
  104. package/node_modules/@comis/core/dist/event-bus/bus.test.d.ts +0 -1
  105. package/node_modules/@comis/core/dist/event-bus/bus.test.js +0 -152
  106. package/node_modules/@comis/core/dist/event-bus/events-agent.test.d.ts +0 -1
  107. package/node_modules/@comis/core/dist/event-bus/events-agent.test.js +0 -409
  108. package/node_modules/@comis/core/dist/event-bus/events-channel.test.d.ts +0 -1
  109. package/node_modules/@comis/core/dist/event-bus/events-channel.test.js +0 -240
  110. package/node_modules/@comis/core/dist/event-bus/events-infra.test.d.ts +0 -1
  111. package/node_modules/@comis/core/dist/event-bus/events-infra.test.js +0 -416
  112. package/node_modules/@comis/core/dist/event-bus/events-messaging.test.d.ts +0 -1
  113. package/node_modules/@comis/core/dist/event-bus/events-messaging.test.js +0 -433
  114. package/node_modules/@comis/core/dist/event-bus/events.test.d.ts +0 -1
  115. package/node_modules/@comis/core/dist/event-bus/events.test.js +0 -93
  116. package/node_modules/@comis/core/dist/hooks/hook-runner-global.test.d.ts +0 -1
  117. package/node_modules/@comis/core/dist/hooks/hook-runner-global.test.js +0 -29
  118. package/node_modules/@comis/core/dist/hooks/hook-runner.test.d.ts +0 -1
  119. package/node_modules/@comis/core/dist/hooks/hook-runner.test.js +0 -490
  120. package/node_modules/@comis/core/dist/hooks/hook-strategies.test.d.ts +0 -1
  121. package/node_modules/@comis/core/dist/hooks/hook-strategies.test.js +0 -209
  122. package/node_modules/@comis/core/dist/hooks/integration.test.d.ts +0 -1
  123. package/node_modules/@comis/core/dist/hooks/integration.test.js +0 -235
  124. package/node_modules/@comis/core/dist/hooks/plugin-registry.test.d.ts +0 -1
  125. package/node_modules/@comis/core/dist/hooks/plugin-registry.test.js +0 -470
  126. package/node_modules/@comis/core/dist/load-env.test.d.ts +0 -1
  127. package/node_modules/@comis/core/dist/load-env.test.js +0 -21
  128. package/node_modules/@comis/core/dist/security/action-classifier.test.d.ts +0 -1
  129. package/node_modules/@comis/core/dist/security/action-classifier.test.js +0 -298
  130. package/node_modules/@comis/core/dist/security/audit-aggregator.test.d.ts +0 -1
  131. package/node_modules/@comis/core/dist/security/audit-aggregator.test.js +0 -128
  132. package/node_modules/@comis/core/dist/security/audit.test.d.ts +0 -1
  133. package/node_modules/@comis/core/dist/security/audit.test.js +0 -154
  134. package/node_modules/@comis/core/dist/security/canary-token.test.d.ts +0 -1
  135. package/node_modules/@comis/core/dist/security/canary-token.test.js +0 -45
  136. package/node_modules/@comis/core/dist/security/config-redaction.test.d.ts +0 -1
  137. package/node_modules/@comis/core/dist/security/config-redaction.test.js +0 -107
  138. package/node_modules/@comis/core/dist/security/external-content.test.d.ts +0 -1
  139. package/node_modules/@comis/core/dist/security/external-content.test.js +0 -210
  140. package/node_modules/@comis/core/dist/security/injection-patterns.test.d.ts +0 -1
  141. package/node_modules/@comis/core/dist/security/injection-patterns.test.js +0 -213
  142. package/node_modules/@comis/core/dist/security/injection-rate-limiter.test.d.ts +0 -1
  143. package/node_modules/@comis/core/dist/security/injection-rate-limiter.test.js +0 -194
  144. package/node_modules/@comis/core/dist/security/input-guard.test.d.ts +0 -1
  145. package/node_modules/@comis/core/dist/security/input-guard.test.js +0 -215
  146. package/node_modules/@comis/core/dist/security/input-security-guard.test.d.ts +0 -1
  147. package/node_modules/@comis/core/dist/security/input-security-guard.test.js +0 -215
  148. package/node_modules/@comis/core/dist/security/input-validator.test.d.ts +0 -1
  149. package/node_modules/@comis/core/dist/security/input-validator.test.js +0 -133
  150. package/node_modules/@comis/core/dist/security/log-sanitizer.test.d.ts +0 -1
  151. package/node_modules/@comis/core/dist/security/log-sanitizer.test.js +0 -260
  152. package/node_modules/@comis/core/dist/security/memory-write-validator.test.d.ts +0 -1
  153. package/node_modules/@comis/core/dist/security/memory-write-validator.test.js +0 -62
  154. package/node_modules/@comis/core/dist/security/output-guard.test.d.ts +0 -1
  155. package/node_modules/@comis/core/dist/security/output-guard.test.js +0 -397
  156. package/node_modules/@comis/core/dist/security/safe-path.test.d.ts +0 -1
  157. package/node_modules/@comis/core/dist/security/safe-path.test.js +0 -95
  158. package/node_modules/@comis/core/dist/security/scoped-secret-manager.test.d.ts +0 -1
  159. package/node_modules/@comis/core/dist/security/scoped-secret-manager.test.js +0 -231
  160. package/node_modules/@comis/core/dist/security/secret-access.test.d.ts +0 -1
  161. package/node_modules/@comis/core/dist/security/secret-access.test.js +0 -41
  162. package/node_modules/@comis/core/dist/security/secret-crypto.test.d.ts +0 -1
  163. package/node_modules/@comis/core/dist/security/secret-crypto.test.js +0 -113
  164. package/node_modules/@comis/core/dist/security/secret-manager.test.d.ts +0 -1
  165. package/node_modules/@comis/core/dist/security/secret-manager.test.js +0 -394
  166. package/node_modules/@comis/core/dist/security/secret-ref-resolver.test.d.ts +0 -1
  167. package/node_modules/@comis/core/dist/security/secret-ref-resolver.test.js +0 -268
  168. package/node_modules/@comis/core/dist/security/secrets-audit.test.d.ts +0 -10
  169. package/node_modules/@comis/core/dist/security/secrets-audit.test.js +0 -295
  170. package/node_modules/@comis/core/dist/security/ssrf-guard.test.d.ts +0 -1
  171. package/node_modules/@comis/core/dist/security/ssrf-guard.test.js +0 -127
  172. package/node_modules/@comis/core/dist/security/token-generator.test.d.ts +0 -1
  173. package/node_modules/@comis/core/dist/security/token-generator.test.js +0 -35
  174. package/node_modules/@comis/core/dist/tool-metadata.test.d.ts +0 -1
  175. package/node_modules/@comis/core/dist/tool-metadata.test.js +0 -112
  176. package/node_modules/@comis/memory/dist/compaction.test.d.ts +0 -1
  177. package/node_modules/@comis/memory/dist/compaction.test.js +0 -298
  178. package/node_modules/@comis/memory/dist/context-schema.test.d.ts +0 -1
  179. package/node_modules/@comis/memory/dist/context-schema.test.js +0 -246
  180. package/node_modules/@comis/memory/dist/context-store.test.d.ts +0 -1
  181. package/node_modules/@comis/memory/dist/context-store.test.js +0 -708
  182. package/node_modules/@comis/memory/dist/credential-mapping-schema.test.d.ts +0 -7
  183. package/node_modules/@comis/memory/dist/credential-mapping-schema.test.js +0 -73
  184. package/node_modules/@comis/memory/dist/credential-mapping-store.test.d.ts +0 -8
  185. package/node_modules/@comis/memory/dist/credential-mapping-store.test.js +0 -340
  186. package/node_modules/@comis/memory/dist/delivery-mirror-adapter.test.d.ts +0 -1
  187. package/node_modules/@comis/memory/dist/delivery-mirror-adapter.test.js +0 -165
  188. package/node_modules/@comis/memory/dist/delivery-queue-adapter.test.d.ts +0 -1
  189. package/node_modules/@comis/memory/dist/delivery-queue-adapter.test.js +0 -263
  190. package/node_modules/@comis/memory/dist/embedding-batch-indexer.test.d.ts +0 -1
  191. package/node_modules/@comis/memory/dist/embedding-batch-indexer.test.js +0 -202
  192. package/node_modules/@comis/memory/dist/embedding-cache-lru.test.d.ts +0 -1
  193. package/node_modules/@comis/memory/dist/embedding-cache-lru.test.js +0 -241
  194. package/node_modules/@comis/memory/dist/embedding-cache-sqlite.test.d.ts +0 -8
  195. package/node_modules/@comis/memory/dist/embedding-cache-sqlite.test.js +0 -678
  196. package/node_modules/@comis/memory/dist/embedding-cache.test.d.ts +0 -1
  197. package/node_modules/@comis/memory/dist/embedding-cache.test.js +0 -213
  198. package/node_modules/@comis/memory/dist/embedding-fingerprint.test.d.ts +0 -1
  199. package/node_modules/@comis/memory/dist/embedding-fingerprint.test.js +0 -87
  200. package/node_modules/@comis/memory/dist/embedding-hash.test.d.ts +0 -1
  201. package/node_modules/@comis/memory/dist/embedding-hash.test.js +0 -31
  202. package/node_modules/@comis/memory/dist/embedding-integration.test.d.ts +0 -8
  203. package/node_modules/@comis/memory/dist/embedding-integration.test.js +0 -232
  204. package/node_modules/@comis/memory/dist/embedding-provider-factory.test.d.ts +0 -1
  205. package/node_modules/@comis/memory/dist/embedding-provider-factory.test.js +0 -176
  206. package/node_modules/@comis/memory/dist/embedding-provider-local.test.d.ts +0 -8
  207. package/node_modules/@comis/memory/dist/embedding-provider-local.test.js +0 -76
  208. package/node_modules/@comis/memory/dist/embedding-provider-openai.test.d.ts +0 -8
  209. package/node_modules/@comis/memory/dist/embedding-provider-openai.test.js +0 -100
  210. package/node_modules/@comis/memory/dist/embedding-queue.test.d.ts +0 -1
  211. package/node_modules/@comis/memory/dist/embedding-queue.test.js +0 -236
  212. package/node_modules/@comis/memory/dist/hybrid-search.test.d.ts +0 -1
  213. package/node_modules/@comis/memory/dist/hybrid-search.test.js +0 -476
  214. package/node_modules/@comis/memory/dist/identity-link-store.test.d.ts +0 -1
  215. package/node_modules/@comis/memory/dist/identity-link-store.test.js +0 -88
  216. package/node_modules/@comis/memory/dist/memory-api.test.d.ts +0 -1
  217. package/node_modules/@comis/memory/dist/memory-api.test.js +0 -495
  218. package/node_modules/@comis/memory/dist/memory-concurrency.test.d.ts +0 -20
  219. package/node_modules/@comis/memory/dist/memory-concurrency.test.js +0 -222
  220. package/node_modules/@comis/memory/dist/named-graph-store.test.d.ts +0 -1
  221. package/node_modules/@comis/memory/dist/named-graph-store.test.js +0 -227
  222. package/node_modules/@comis/memory/dist/observability-store.test.d.ts +0 -1
  223. package/node_modules/@comis/memory/dist/observability-store.test.js +0 -704
  224. package/node_modules/@comis/memory/dist/row-mapper.test.d.ts +0 -1
  225. package/node_modules/@comis/memory/dist/row-mapper.test.js +0 -409
  226. package/node_modules/@comis/memory/dist/schema.test.d.ts +0 -1
  227. package/node_modules/@comis/memory/dist/schema.test.js +0 -240
  228. package/node_modules/@comis/memory/dist/secret-store-schema.test.d.ts +0 -7
  229. package/node_modules/@comis/memory/dist/secret-store-schema.test.js +0 -90
  230. package/node_modules/@comis/memory/dist/session-store.test.d.ts +0 -1
  231. package/node_modules/@comis/memory/dist/session-store.test.js +0 -262
  232. package/node_modules/@comis/memory/dist/setup-secrets.test.d.ts +0 -1
  233. package/node_modules/@comis/memory/dist/setup-secrets.test.js +0 -140
  234. package/node_modules/@comis/memory/dist/sqlite-memory-adapter.test.d.ts +0 -1
  235. package/node_modules/@comis/memory/dist/sqlite-memory-adapter.test.js +0 -888
  236. package/node_modules/@comis/memory/dist/sqlite-secret-store.test.d.ts +0 -8
  237. package/node_modules/@comis/memory/dist/sqlite-secret-store.test.js +0 -245
  238. package/node_modules/@comis/shared/dist/abort.test.d.ts +0 -1
  239. package/node_modules/@comis/shared/dist/abort.test.js +0 -71
  240. package/node_modules/@comis/shared/dist/result.test.d.ts +0 -1
  241. package/node_modules/@comis/shared/dist/result.test.js +0 -178
  242. package/node_modules/@comis/shared/dist/suppress-error.test.d.ts +0 -1
  243. package/node_modules/@comis/shared/dist/suppress-error.test.js +0 -50
  244. package/node_modules/@comis/shared/dist/timeout.test.d.ts +0 -1
  245. package/node_modules/@comis/shared/dist/timeout.test.js +0 -75
  246. package/node_modules/@comis/shared/dist/ttl-cache.test.d.ts +0 -1
  247. 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
- });