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,294 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { ProviderEntrySchema, ProvidersConfigSchema, UserModelSchema, ModelCostSchema, } from "./schema-providers.js";
3
- import { ModelCompatConfigSchema } from "../domain/model-compat.js";
4
- import { ProviderCapabilitiesSchema } from "../domain/provider-capabilities.js";
5
- // ---------------------------------------------------------------------------
6
- // ModelCompatConfigSchema
7
- // ---------------------------------------------------------------------------
8
- describe("ModelCompatConfigSchema", () => {
9
- it("parses empty object (all fields optional)", () => {
10
- const result = ModelCompatConfigSchema.safeParse({});
11
- expect(result.success).toBe(true);
12
- if (result.success) {
13
- expect(result.data.supportsTools).toBeUndefined();
14
- expect(result.data.toolSchemaProfile).toBeUndefined();
15
- expect(result.data.toolCallArgumentsEncoding).toBeUndefined();
16
- expect(result.data.nativeWebSearchTool).toBeUndefined();
17
- }
18
- });
19
- it("parses valid full config", () => {
20
- const result = ModelCompatConfigSchema.safeParse({
21
- supportsTools: true,
22
- toolSchemaProfile: "xai",
23
- toolCallArgumentsEncoding: "html-entities",
24
- nativeWebSearchTool: false,
25
- });
26
- expect(result.success).toBe(true);
27
- if (result.success) {
28
- expect(result.data.supportsTools).toBe(true);
29
- expect(result.data.toolSchemaProfile).toBe("xai");
30
- expect(result.data.toolCallArgumentsEncoding).toBe("html-entities");
31
- expect(result.data.nativeWebSearchTool).toBe(false);
32
- }
33
- });
34
- it("rejects unknown fields (z.strictObject enforcement)", () => {
35
- const result = ModelCompatConfigSchema.safeParse({
36
- supportsTools: true,
37
- unknownField: true,
38
- });
39
- expect(result.success).toBe(false);
40
- });
41
- it("rejects invalid enum values", () => {
42
- const result = ModelCompatConfigSchema.safeParse({
43
- toolSchemaProfile: "invalid",
44
- });
45
- expect(result.success).toBe(false);
46
- });
47
- });
48
- // ---------------------------------------------------------------------------
49
- // ProviderCapabilitiesSchema
50
- // ---------------------------------------------------------------------------
51
- describe("ProviderCapabilitiesSchema", () => {
52
- it("parses empty object and produces correct defaults", () => {
53
- const result = ProviderCapabilitiesSchema.safeParse({});
54
- expect(result.success).toBe(true);
55
- if (result.success) {
56
- expect(result.data.providerFamily).toBe("default");
57
- expect(result.data.dropThinkingBlockModelHints).toEqual([]);
58
- expect(result.data.transcriptToolCallIdMode).toBe("default");
59
- expect(result.data.transcriptToolCallIdModelHints).toEqual([]);
60
- }
61
- });
62
- it("parses full override", () => {
63
- const result = ProviderCapabilitiesSchema.safeParse({
64
- providerFamily: "anthropic",
65
- dropThinkingBlockModelHints: ["claude"],
66
- transcriptToolCallIdMode: "strict9",
67
- transcriptToolCallIdModelHints: ["mistral"],
68
- });
69
- expect(result.success).toBe(true);
70
- if (result.success) {
71
- expect(result.data.providerFamily).toBe("anthropic");
72
- expect(result.data.dropThinkingBlockModelHints).toEqual(["claude"]);
73
- expect(result.data.transcriptToolCallIdMode).toBe("strict9");
74
- expect(result.data.transcriptToolCallIdModelHints).toEqual(["mistral"]);
75
- }
76
- });
77
- it("rejects unknown fields", () => {
78
- const result = ProviderCapabilitiesSchema.safeParse({
79
- providerFamily: "default",
80
- unknownField: true,
81
- });
82
- expect(result.success).toBe(false);
83
- });
84
- it("rejects invalid providerFamily enum", () => {
85
- const result = ProviderCapabilitiesSchema.safeParse({
86
- providerFamily: "azure",
87
- });
88
- expect(result.success).toBe(false);
89
- });
90
- });
91
- // ---------------------------------------------------------------------------
92
- // UserModelSchema
93
- // ---------------------------------------------------------------------------
94
- describe("UserModelSchema", () => {
95
- it("parses minimal config with correct defaults", () => {
96
- const result = UserModelSchema.safeParse({ id: "test-model" });
97
- expect(result.success).toBe(true);
98
- if (result.success) {
99
- expect(result.data.id).toBe("test-model");
100
- expect(result.data.reasoning).toBe(false);
101
- expect(result.data.input).toEqual(["text"]);
102
- expect(result.data.name).toBeUndefined();
103
- expect(result.data.contextWindow).toBeUndefined();
104
- expect(result.data.maxTokens).toBeUndefined();
105
- expect(result.data.cost).toBeUndefined();
106
- expect(result.data.comisCompat).toBeUndefined();
107
- expect(result.data.sdkCompat).toBeUndefined();
108
- }
109
- });
110
- it("parses full config with comisCompat and sdkCompat", () => {
111
- const result = UserModelSchema.safeParse({
112
- id: "my-custom-model",
113
- name: "My Custom Model",
114
- reasoning: true,
115
- contextWindow: 128_000,
116
- maxTokens: 8192,
117
- input: ["text", "image"],
118
- cost: { input: 3.0, output: 15.0 },
119
- comisCompat: { supportsTools: true, toolSchemaProfile: "xai" },
120
- sdkCompat: { streamOptions: { includeUsage: true } },
121
- });
122
- expect(result.success).toBe(true);
123
- if (result.success) {
124
- expect(result.data.reasoning).toBe(true);
125
- expect(result.data.contextWindow).toBe(128_000);
126
- expect(result.data.comisCompat?.supportsTools).toBe(true);
127
- expect(result.data.sdkCompat?.streamOptions).toEqual({ includeUsage: true });
128
- }
129
- });
130
- it("rejects empty id string", () => {
131
- const result = UserModelSchema.safeParse({ id: "" });
132
- expect(result.success).toBe(false);
133
- });
134
- it("sdkCompat accepts arbitrary keys (z.record loose validation)", () => {
135
- const result = UserModelSchema.safeParse({
136
- id: "test",
137
- sdkCompat: { anyKey: "anyValue", nested: { deep: true } },
138
- });
139
- expect(result.success).toBe(true);
140
- if (result.success) {
141
- expect(result.data.sdkCompat?.anyKey).toBe("anyValue");
142
- }
143
- });
144
- it("comisCompat rejects unknown fields (strict)", () => {
145
- const result = UserModelSchema.safeParse({
146
- id: "test",
147
- comisCompat: { supportsTools: true, unknownField: true },
148
- });
149
- expect(result.success).toBe(false);
150
- });
151
- });
152
- // ---------------------------------------------------------------------------
153
- // ModelCostSchema
154
- // ---------------------------------------------------------------------------
155
- describe("ModelCostSchema", () => {
156
- it("parses empty object (all fields optional)", () => {
157
- const result = ModelCostSchema.safeParse({});
158
- expect(result.success).toBe(true);
159
- });
160
- it("parses full cost entry", () => {
161
- const result = ModelCostSchema.safeParse({
162
- input: 3.0,
163
- output: 15.0,
164
- cacheRead: 0.3,
165
- cacheWrite: 3.75,
166
- });
167
- expect(result.success).toBe(true);
168
- if (result.success) {
169
- expect(result.data.input).toBe(3.0);
170
- expect(result.data.output).toBe(15.0);
171
- expect(result.data.cacheRead).toBe(0.3);
172
- expect(result.data.cacheWrite).toBe(3.75);
173
- }
174
- });
175
- it("rejects negative cost values", () => {
176
- const result = ModelCostSchema.safeParse({ input: -1 });
177
- expect(result.success).toBe(false);
178
- });
179
- it("accepts zero cost (free models)", () => {
180
- const result = ModelCostSchema.safeParse({ input: 0, output: 0 });
181
- expect(result.success).toBe(true);
182
- });
183
- });
184
- // ---------------------------------------------------------------------------
185
- // ProviderEntrySchema (extended)
186
- // ---------------------------------------------------------------------------
187
- describe("ProviderEntrySchema (extended)", () => {
188
- it("parses existing minimal config -- backward compatibility", () => {
189
- const result = ProviderEntrySchema.safeParse({ type: "openai" });
190
- expect(result.success).toBe(true);
191
- if (result.success) {
192
- expect(result.data.type).toBe("openai");
193
- expect(result.data.enabled).toBe(true);
194
- expect(result.data.timeoutMs).toBe(120_000);
195
- }
196
- });
197
- it("capabilities defaults to empty ProviderCapabilities (with all defaults)", () => {
198
- const result = ProviderEntrySchema.safeParse({ type: "openai" });
199
- expect(result.success).toBe(true);
200
- if (result.success) {
201
- expect(result.data.capabilities).toBeDefined();
202
- expect(result.data.capabilities.providerFamily).toBe("default");
203
- expect(result.data.capabilities.dropThinkingBlockModelHints).toEqual([]);
204
- expect(result.data.capabilities.transcriptToolCallIdMode).toBe("default");
205
- expect(result.data.capabilities.transcriptToolCallIdModelHints).toEqual([]);
206
- }
207
- });
208
- it("models defaults to empty array", () => {
209
- const result = ProviderEntrySchema.safeParse({ type: "openai" });
210
- expect(result.success).toBe(true);
211
- if (result.success) {
212
- expect(result.data.models).toEqual([]);
213
- }
214
- });
215
- it("parses full config with capabilities and models array", () => {
216
- const result = ProviderEntrySchema.safeParse({
217
- type: "deepseek",
218
- name: "DeepSeek",
219
- baseUrl: "https://api.deepseek.com/v1",
220
- apiKeyName: "deepseek-key",
221
- capabilities: {
222
- providerFamily: "openai",
223
- transcriptToolCallIdMode: "strict9",
224
- transcriptToolCallIdModelHints: ["deepseek-chat"],
225
- },
226
- models: [
227
- { id: "deepseek-chat", reasoning: false },
228
- { id: "deepseek-reasoner", reasoning: true, contextWindow: 64_000 },
229
- ],
230
- });
231
- expect(result.success).toBe(true);
232
- if (result.success) {
233
- expect(result.data.capabilities.providerFamily).toBe("openai");
234
- expect(result.data.models).toHaveLength(2);
235
- expect(result.data.models[1].reasoning).toBe(true);
236
- expect(result.data.models[1].contextWindow).toBe(64_000);
237
- }
238
- });
239
- it("rejects unknown capabilities fields (strict)", () => {
240
- const result = ProviderEntrySchema.safeParse({
241
- type: "openai",
242
- capabilities: { providerFamily: "openai", unknownField: true },
243
- });
244
- expect(result.success).toBe(false);
245
- });
246
- });
247
- // ---------------------------------------------------------------------------
248
- // ProvidersConfigSchema
249
- // ---------------------------------------------------------------------------
250
- describe("ProvidersConfigSchema", () => {
251
- it("accepts provider entries with custom string keys", () => {
252
- const result = ProvidersConfigSchema.safeParse({
253
- entries: {
254
- anthropic: { type: "anthropic" },
255
- openai: { type: "openai" },
256
- },
257
- });
258
- expect(result.success).toBe(true);
259
- if (result.success) {
260
- expect(Object.keys(result.data.entries)).toEqual(["anthropic", "openai"]);
261
- }
262
- });
263
- it("full integration: nested provider with capabilities + models", () => {
264
- const result = ProvidersConfigSchema.safeParse({
265
- entries: {
266
- deepseek: {
267
- type: "deepseek",
268
- capabilities: {
269
- providerFamily: "openai",
270
- dropThinkingBlockModelHints: ["deepseek-reasoner"],
271
- },
272
- models: [
273
- {
274
- id: "deepseek-reasoner",
275
- reasoning: true,
276
- contextWindow: 64_000,
277
- maxTokens: 8192,
278
- input: ["text"],
279
- cost: { input: 0.55, output: 2.19 },
280
- comisCompat: { supportsTools: false },
281
- },
282
- ],
283
- },
284
- },
285
- });
286
- expect(result.success).toBe(true);
287
- if (result.success) {
288
- const ds = result.data.entries.deepseek;
289
- expect(ds.capabilities.dropThinkingBlockModelHints).toEqual(["deepseek-reasoner"]);
290
- expect(ds.models).toHaveLength(1);
291
- expect(ds.models[0].comisCompat?.supportsTools).toBe(false);
292
- }
293
- });
294
- });
@@ -1,234 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { QueueModeSchema, OverflowPolicySchema, OverflowConfigSchema, DebounceBufferConfigSchema, PerChannelQueueConfigSchema, FollowupConfigSchema, PriorityLaneConfigSchema, LaneAssignmentConfigSchema, QueueConfigSchema, } from "./schema-queue.js";
3
- // ---------------------------------------------------------------------------
4
- // QueueModeSchema
5
- // ---------------------------------------------------------------------------
6
- describe("QueueModeSchema", () => {
7
- it("accepts all 4 valid values", () => {
8
- for (const mode of ["followup", "collect", "steer", "steer+followup"]) {
9
- const result = QueueModeSchema.safeParse(mode);
10
- expect(result.success).toBe(true);
11
- }
12
- });
13
- it("defaults to steer+followup", () => {
14
- const result = QueueModeSchema.safeParse(undefined);
15
- expect(result.success).toBe(true);
16
- if (result.success) {
17
- expect(result.data).toBe("steer+followup");
18
- }
19
- });
20
- it("rejects invalid string", () => {
21
- const result = QueueModeSchema.safeParse("queue-all");
22
- expect(result.success).toBe(false);
23
- });
24
- });
25
- // ---------------------------------------------------------------------------
26
- // OverflowPolicySchema
27
- // ---------------------------------------------------------------------------
28
- describe("OverflowPolicySchema", () => {
29
- it("accepts drop-old, drop-new, summarize", () => {
30
- for (const policy of ["drop-old", "drop-new", "summarize"]) {
31
- const result = OverflowPolicySchema.safeParse(policy);
32
- expect(result.success).toBe(true);
33
- }
34
- });
35
- it("defaults to drop-new", () => {
36
- const result = OverflowPolicySchema.safeParse(undefined);
37
- expect(result.success).toBe(true);
38
- if (result.success) {
39
- expect(result.data).toBe("drop-new");
40
- }
41
- });
42
- });
43
- // ---------------------------------------------------------------------------
44
- // OverflowConfigSchema
45
- // ---------------------------------------------------------------------------
46
- describe("OverflowConfigSchema", () => {
47
- it("produces valid defaults", () => {
48
- const result = OverflowConfigSchema.safeParse({});
49
- expect(result.success).toBe(true);
50
- if (result.success) {
51
- expect(result.data.maxDepth).toBe(20);
52
- expect(result.data.policy).toBe("drop-new");
53
- }
54
- });
55
- it("rejects non-positive maxDepth", () => {
56
- const result = OverflowConfigSchema.safeParse({ maxDepth: 0 });
57
- expect(result.success).toBe(false);
58
- });
59
- });
60
- // ---------------------------------------------------------------------------
61
- // DebounceBufferConfigSchema
62
- // ---------------------------------------------------------------------------
63
- describe("DebounceBufferConfigSchema", () => {
64
- it("produces valid defaults", () => {
65
- const result = DebounceBufferConfigSchema.safeParse({});
66
- expect(result.success).toBe(true);
67
- if (result.success) {
68
- expect(result.data.windowMs).toBe(0);
69
- expect(result.data.maxBufferedMessages).toBe(10);
70
- expect(result.data.firstMessageImmediate).toBe(true);
71
- }
72
- });
73
- it("accepts windowMs=0 (disabled)", () => {
74
- const result = DebounceBufferConfigSchema.safeParse({ windowMs: 0 });
75
- expect(result.success).toBe(true);
76
- });
77
- it("rejects negative windowMs", () => {
78
- const result = DebounceBufferConfigSchema.safeParse({ windowMs: -1 });
79
- expect(result.success).toBe(false);
80
- });
81
- });
82
- // ---------------------------------------------------------------------------
83
- // PerChannelQueueConfigSchema
84
- // ---------------------------------------------------------------------------
85
- describe("PerChannelQueueConfigSchema", () => {
86
- it("produces valid defaults", () => {
87
- const result = PerChannelQueueConfigSchema.safeParse({});
88
- expect(result.success).toBe(true);
89
- if (result.success) {
90
- expect(result.data.mode).toBe("steer+followup");
91
- expect(result.data.overflow.maxDepth).toBe(20);
92
- expect(result.data.overflow.policy).toBe("drop-new");
93
- expect(result.data.debounceMs).toBe(0);
94
- }
95
- });
96
- });
97
- // ---------------------------------------------------------------------------
98
- // FollowupConfigSchema
99
- // ---------------------------------------------------------------------------
100
- describe("FollowupConfigSchema", () => {
101
- it("produces valid defaults", () => {
102
- const result = FollowupConfigSchema.safeParse({});
103
- expect(result.success).toBe(true);
104
- if (result.success) {
105
- expect(result.data.maxFollowupRuns).toBe(3);
106
- expect(result.data.followupOnCompaction).toBe(true);
107
- }
108
- });
109
- it("accepts maxFollowupRuns=0 (disabled)", () => {
110
- const result = FollowupConfigSchema.safeParse({ maxFollowupRuns: 0 });
111
- expect(result.success).toBe(true);
112
- if (result.success) {
113
- expect(result.data.maxFollowupRuns).toBe(0);
114
- }
115
- });
116
- });
117
- // ---------------------------------------------------------------------------
118
- // PriorityLaneConfigSchema
119
- // ---------------------------------------------------------------------------
120
- describe("PriorityLaneConfigSchema", () => {
121
- it("produces valid defaults for optional fields", () => {
122
- const result = PriorityLaneConfigSchema.safeParse({ name: "normal" });
123
- expect(result.success).toBe(true);
124
- if (result.success) {
125
- expect(result.data.concurrency).toBe(3);
126
- expect(result.data.priority).toBe(0);
127
- expect(result.data.agingPromotionMs).toBe(30_000);
128
- }
129
- });
130
- it("rejects empty name", () => {
131
- const result = PriorityLaneConfigSchema.safeParse({ name: "" });
132
- expect(result.success).toBe(false);
133
- });
134
- });
135
- // ---------------------------------------------------------------------------
136
- // LaneAssignmentConfigSchema
137
- // ---------------------------------------------------------------------------
138
- describe("LaneAssignmentConfigSchema", () => {
139
- it("produces valid defaults", () => {
140
- const result = LaneAssignmentConfigSchema.safeParse({});
141
- expect(result.success).toBe(true);
142
- if (result.success) {
143
- expect(result.data.defaultLane).toBe("normal");
144
- expect(result.data.dmLane).toBe("high");
145
- expect(result.data.mentionLane).toBe("normal");
146
- expect(result.data.followupLane).toBe("normal");
147
- expect(result.data.scheduledLane).toBe("low");
148
- }
149
- });
150
- });
151
- // ---------------------------------------------------------------------------
152
- // QueueConfigSchema
153
- // ---------------------------------------------------------------------------
154
- describe("QueueConfigSchema", () => {
155
- it("produces valid defaults from empty object", () => {
156
- const result = QueueConfigSchema.safeParse({});
157
- expect(result.success).toBe(true);
158
- if (result.success) {
159
- expect(result.data.enabled).toBe(true);
160
- expect(result.data.maxConcurrentSessions).toBe(10);
161
- expect(result.data.cleanupIdleMs).toBe(600_000);
162
- expect(result.data.defaultMode).toBe("steer+followup");
163
- expect(result.data.defaultDebounceMs).toBe(0);
164
- expect(result.data.perChannel).toEqual({});
165
- expect(result.data.perChannelDebounce).toEqual({});
166
- expect(result.data.priorityEnabled).toBe(false);
167
- }
168
- });
169
- it("includes default priorityLanes with 3 lanes (high/normal/low)", () => {
170
- const result = QueueConfigSchema.safeParse({});
171
- expect(result.success).toBe(true);
172
- if (result.success) {
173
- expect(result.data.priorityLanes).toHaveLength(3);
174
- const high = result.data.priorityLanes.find((l) => l.name === "high");
175
- expect(high).toBeDefined();
176
- expect(high.concurrency).toBe(3);
177
- expect(high.priority).toBe(2);
178
- const normal = result.data.priorityLanes.find((l) => l.name === "normal");
179
- expect(normal).toBeDefined();
180
- expect(normal.concurrency).toBe(5);
181
- expect(normal.priority).toBe(1);
182
- const low = result.data.priorityLanes.find((l) => l.name === "low");
183
- expect(low).toBeDefined();
184
- expect(low.concurrency).toBe(2);
185
- expect(low.priority).toBe(0);
186
- }
187
- });
188
- it("includes laneAssignment defaults", () => {
189
- const result = QueueConfigSchema.safeParse({});
190
- expect(result.success).toBe(true);
191
- if (result.success) {
192
- expect(result.data.laneAssignment.defaultLane).toBe("normal");
193
- expect(result.data.laneAssignment.dmLane).toBe("high");
194
- expect(result.data.laneAssignment.scheduledLane).toBe("low");
195
- }
196
- });
197
- it("includes followup defaults", () => {
198
- const result = QueueConfigSchema.safeParse({});
199
- expect(result.success).toBe(true);
200
- if (result.success) {
201
- expect(result.data.followup.maxFollowupRuns).toBe(3);
202
- expect(result.data.followup.followupOnCompaction).toBe(true);
203
- }
204
- });
205
- it("includes debounce defaults", () => {
206
- const result = QueueConfigSchema.safeParse({});
207
- expect(result.success).toBe(true);
208
- if (result.success) {
209
- expect(result.data.debounce.windowMs).toBe(0);
210
- expect(result.data.debounce.maxBufferedMessages).toBe(10);
211
- expect(result.data.debounce.firstMessageImmediate).toBe(true);
212
- }
213
- });
214
- it("includes defaultOverflow defaults", () => {
215
- const result = QueueConfigSchema.safeParse({});
216
- expect(result.success).toBe(true);
217
- if (result.success) {
218
- expect(result.data.defaultOverflow.maxDepth).toBe(20);
219
- expect(result.data.defaultOverflow.policy).toBe("drop-new");
220
- }
221
- });
222
- it("accepts perChannel overrides", () => {
223
- const result = QueueConfigSchema.safeParse({
224
- perChannel: {
225
- telegram: { mode: "collect", debounceMs: 500 },
226
- },
227
- });
228
- expect(result.success).toBe(true);
229
- if (result.success) {
230
- expect(result.data.perChannel.telegram.mode).toBe("collect");
231
- expect(result.data.perChannel.telegram.debounceMs).toBe(500);
232
- }
233
- });
234
- });
@@ -1,36 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { ResponsePrefixConfigSchema } from "./schema-response-prefix.js";
3
- describe("ResponsePrefixConfigSchema", () => {
4
- it("produces valid defaults from empty object", () => {
5
- const result = ResponsePrefixConfigSchema.safeParse({});
6
- expect(result.success).toBe(true);
7
- if (result.success) {
8
- expect(result.data.template).toBe("");
9
- expect(result.data.position).toBe("prepend");
10
- }
11
- });
12
- it("accepts fully specified config", () => {
13
- const result = ResponsePrefixConfigSchema.safeParse({
14
- template: "{agent.emoji} {model|short}{?thinking: | think}",
15
- position: "append",
16
- });
17
- expect(result.success).toBe(true);
18
- if (result.success) {
19
- expect(result.data.template).toBe("{agent.emoji} {model|short}{?thinking: | think}");
20
- expect(result.data.position).toBe("append");
21
- }
22
- });
23
- it("rejects unknown keys (strictObject)", () => {
24
- const result = ResponsePrefixConfigSchema.safeParse({
25
- template: "test",
26
- unknownField: "should-fail",
27
- });
28
- expect(result.success).toBe(false);
29
- });
30
- it("rejects invalid position enum value", () => {
31
- const result = ResponsePrefixConfigSchema.safeParse({
32
- position: "inline",
33
- });
34
- expect(result.success).toBe(false);
35
- });
36
- });
@@ -1,54 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { AgentToAgentConfigSchema, SecurityConfigSchema } from "./schema-security.js";
3
- // ---------------------------------------------------------------------------
4
- // AgentToAgentConfigSchema.subAgentSessionPersistence
5
- // ---------------------------------------------------------------------------
6
- describe("AgentToAgentConfigSchema.subAgentSessionPersistence", () => {
7
- it("defaults to false when omitted", () => {
8
- const result = AgentToAgentConfigSchema.safeParse({});
9
- expect(result.success).toBe(true);
10
- if (result.success) {
11
- expect(result.data.subAgentSessionPersistence).toBe(false);
12
- }
13
- });
14
- it("accepts explicit true", () => {
15
- const result = AgentToAgentConfigSchema.safeParse({
16
- subAgentSessionPersistence: true,
17
- });
18
- expect(result.success).toBe(true);
19
- if (result.success) {
20
- expect(result.data.subAgentSessionPersistence).toBe(true);
21
- }
22
- });
23
- it("accepts explicit false", () => {
24
- const result = AgentToAgentConfigSchema.safeParse({
25
- subAgentSessionPersistence: false,
26
- });
27
- expect(result.success).toBe(true);
28
- if (result.success) {
29
- expect(result.data.subAgentSessionPersistence).toBe(false);
30
- }
31
- });
32
- it("rejects non-boolean value", () => {
33
- const result = AgentToAgentConfigSchema.safeParse({
34
- subAgentSessionPersistence: "yes",
35
- });
36
- expect(result.success).toBe(false);
37
- });
38
- it("is present in SecurityConfigSchema parsed output", () => {
39
- const result = SecurityConfigSchema.safeParse({});
40
- expect(result.success).toBe(true);
41
- if (result.success) {
42
- expect(result.data.agentToAgent.subAgentSessionPersistence).toBe(false);
43
- }
44
- });
45
- it("is present in SecurityConfigSchema when set to true", () => {
46
- const result = SecurityConfigSchema.safeParse({
47
- agentToAgent: { subAgentSessionPersistence: true },
48
- });
49
- expect(result.success).toBe(true);
50
- if (result.success) {
51
- expect(result.data.agentToAgent.subAgentSessionPersistence).toBe(true);
52
- }
53
- });
54
- });