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,291 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { parseSessionKey, formatSessionKey, parseFormattedSessionKey } from "./session-key.js";
3
- function validKey(overrides = {}) {
4
- return {
5
- userId: "user-42",
6
- channelId: "general",
7
- ...overrides,
8
- };
9
- }
10
- describe("SessionKey", () => {
11
- describe("valid data", () => {
12
- it("parses a minimal valid key", () => {
13
- const result = parseSessionKey(validKey());
14
- expect(result.ok).toBe(true);
15
- if (result.ok) {
16
- expect(result.value.userId).toBe("user-42");
17
- expect(result.value.channelId).toBe("general");
18
- }
19
- });
20
- it("applies default tenantId", () => {
21
- const result = parseSessionKey(validKey());
22
- expect(result.ok).toBe(true);
23
- if (result.ok) {
24
- expect(result.value.tenantId).toBe("default");
25
- }
26
- });
27
- it("accepts explicit tenantId", () => {
28
- const result = parseSessionKey(validKey({ tenantId: "acme" }));
29
- expect(result.ok).toBe(true);
30
- if (result.ok) {
31
- expect(result.value.tenantId).toBe("acme");
32
- }
33
- });
34
- it("accepts optional peerId", () => {
35
- const result = parseSessionKey(validKey({ peerId: "peer-99" }));
36
- expect(result.ok).toBe(true);
37
- if (result.ok) {
38
- expect(result.value.peerId).toBe("peer-99");
39
- }
40
- });
41
- it("accepts optional guildId", () => {
42
- const result = parseSessionKey(validKey({ guildId: "guild-7" }));
43
- expect(result.ok).toBe(true);
44
- if (result.ok) {
45
- expect(result.value.guildId).toBe("guild-7");
46
- }
47
- });
48
- it("allows omitting optional fields (peerId, guildId)", () => {
49
- const result = parseSessionKey(validKey());
50
- expect(result.ok).toBe(true);
51
- if (result.ok) {
52
- expect(result.value.peerId).toBeUndefined();
53
- expect(result.value.guildId).toBeUndefined();
54
- }
55
- });
56
- it("accepts optional agentId", () => {
57
- const result = parseSessionKey(validKey({ agentId: "dash" }));
58
- expect(result.ok).toBe(true);
59
- if (result.ok) {
60
- expect(result.value.agentId).toBe("dash");
61
- }
62
- });
63
- it("accepts optional threadId", () => {
64
- const result = parseSessionKey(validKey({ threadId: "t-123" }));
65
- expect(result.ok).toBe(true);
66
- if (result.ok) {
67
- expect(result.value.threadId).toBe("t-123");
68
- }
69
- });
70
- });
71
- describe("invalid data", () => {
72
- it("rejects missing required fields", () => {
73
- const result = parseSessionKey({});
74
- expect(result.ok).toBe(false);
75
- if (!result.ok) {
76
- const paths = result.error.issues.map((i) => i.path[0]);
77
- expect(paths).toContain("userId");
78
- expect(paths).toContain("channelId");
79
- }
80
- });
81
- it("rejects empty userId", () => {
82
- const result = parseSessionKey(validKey({ userId: "" }));
83
- expect(result.ok).toBe(false);
84
- });
85
- it("rejects empty channelId", () => {
86
- const result = parseSessionKey(validKey({ channelId: "" }));
87
- expect(result.ok).toBe(false);
88
- });
89
- it("rejects empty tenantId", () => {
90
- const result = parseSessionKey(validKey({ tenantId: "" }));
91
- expect(result.ok).toBe(false);
92
- });
93
- it("strips extra/unknown fields", () => {
94
- const result = parseSessionKey(validKey({ extra: "data" }));
95
- expect(result.ok).toBe(false);
96
- });
97
- it("rejects non-object input", () => {
98
- const result = parseSessionKey("not-an-object");
99
- expect(result.ok).toBe(false);
100
- });
101
- it("rejects null input", () => {
102
- const result = parseSessionKey(null);
103
- expect(result.ok).toBe(false);
104
- });
105
- it("returns descriptive ZodError issues", () => {
106
- const result = parseSessionKey({ userId: 123 });
107
- expect(result.ok).toBe(false);
108
- if (!result.ok) {
109
- expect(result.error.issues.length).toBeGreaterThan(0);
110
- for (const issue of result.error.issues) {
111
- expect(issue.message).toBeTruthy();
112
- }
113
- }
114
- });
115
- });
116
- describe("formatSessionKey", () => {
117
- it("formats basic key", () => {
118
- const key = {
119
- tenantId: "default",
120
- userId: "user-42",
121
- channelId: "general",
122
- };
123
- expect(formatSessionKey(key)).toBe("default:user-42:general");
124
- });
125
- it("includes peerId when present", () => {
126
- const key = {
127
- tenantId: "default",
128
- userId: "user-42",
129
- channelId: "general",
130
- peerId: "peer-99",
131
- };
132
- expect(formatSessionKey(key)).toBe("default:user-42:general:peer:peer-99");
133
- });
134
- it("includes guildId when present", () => {
135
- const key = {
136
- tenantId: "default",
137
- userId: "user-42",
138
- channelId: "general",
139
- guildId: "guild-7",
140
- };
141
- expect(formatSessionKey(key)).toBe("default:user-42:general:guild:guild-7");
142
- });
143
- it("includes both peerId and guildId when present", () => {
144
- const key = {
145
- tenantId: "acme",
146
- userId: "user-1",
147
- channelId: "ch-1",
148
- peerId: "p-1",
149
- guildId: "g-1",
150
- };
151
- expect(formatSessionKey(key)).toBe("acme:user-1:ch-1:peer:p-1:guild:g-1");
152
- });
153
- it("uses custom tenantId", () => {
154
- const key = {
155
- tenantId: "acme-corp",
156
- userId: "admin",
157
- channelId: "ops",
158
- };
159
- expect(formatSessionKey(key)).toBe("acme-corp:admin:ops");
160
- });
161
- it("prepends agent prefix when agentId is set", () => {
162
- const key = {
163
- tenantId: "default",
164
- userId: "user-42",
165
- channelId: "general",
166
- agentId: "myAgent",
167
- };
168
- expect(formatSessionKey(key)).toBe("agent:myAgent:default:user-42:general");
169
- });
170
- it("appends thread suffix when threadId is set", () => {
171
- const key = {
172
- tenantId: "default",
173
- userId: "user-42",
174
- channelId: "general",
175
- threadId: "t123",
176
- };
177
- expect(formatSessionKey(key)).toBe("default:user-42:general:thread:t123");
178
- });
179
- it("includes both agentId and threadId", () => {
180
- const key = {
181
- tenantId: "default",
182
- userId: "u1",
183
- channelId: "c1",
184
- peerId: "p1",
185
- agentId: "dash",
186
- threadId: "th-7",
187
- };
188
- expect(formatSessionKey(key)).toBe("agent:dash:default:u1:c1:peer:p1:thread:th-7");
189
- });
190
- it("produces identical output without agentId/threadId", () => {
191
- const key = {
192
- tenantId: "default",
193
- userId: "user-42",
194
- channelId: "general",
195
- peerId: "peer-99",
196
- guildId: "guild-7",
197
- };
198
- // Must match the original format exactly
199
- expect(formatSessionKey(key)).toBe("default:user-42:general:peer:peer-99:guild:guild-7");
200
- });
201
- });
202
- describe("parseFormattedSessionKey", () => {
203
- it("parses basic 3-part key", () => {
204
- const key = parseFormattedSessionKey("default:user-1:chan-1");
205
- expect(key).toEqual({ tenantId: "default", userId: "user-1", channelId: "chan-1" });
206
- });
207
- it("parses key with peer segment", () => {
208
- const key = parseFormattedSessionKey("default:user-1:chan-1:peer:peer-1");
209
- expect(key).toEqual({ tenantId: "default", userId: "user-1", channelId: "chan-1", peerId: "peer-1" });
210
- });
211
- it("parses key with guild segment", () => {
212
- const key = parseFormattedSessionKey("default:user-1:chan-1:guild:guild-1");
213
- expect(key).toEqual({ tenantId: "default", userId: "user-1", channelId: "chan-1", guildId: "guild-1" });
214
- });
215
- it("parses key with both peer and guild", () => {
216
- const key = parseFormattedSessionKey("default:user-1:chan-1:peer:peer-1:guild:guild-1");
217
- expect(key).toEqual({
218
- tenantId: "default", userId: "user-1", channelId: "chan-1",
219
- peerId: "peer-1", guildId: "guild-1",
220
- });
221
- });
222
- it("roundtrips with formatSessionKey", () => {
223
- const original = { tenantId: "t", userId: "u", channelId: "c", peerId: "p", guildId: "g" };
224
- const formatted = formatSessionKey(original);
225
- const parsed = parseFormattedSessionKey(formatted);
226
- expect(parsed).toEqual(original);
227
- });
228
- it("returns undefined for invalid format (fewer than 3 parts)", () => {
229
- expect(parseFormattedSessionKey("only:two")).toBeUndefined();
230
- expect(parseFormattedSessionKey("one")).toBeUndefined();
231
- expect(parseFormattedSessionKey("")).toBeUndefined();
232
- });
233
- it("parses agent-prefixed key", () => {
234
- const key = parseFormattedSessionKey("agent:dash:default:user-1:chan-1");
235
- expect(key).toEqual({
236
- tenantId: "default",
237
- userId: "user-1",
238
- channelId: "chan-1",
239
- agentId: "dash",
240
- });
241
- });
242
- it("parses thread-suffixed key", () => {
243
- const key = parseFormattedSessionKey("default:user-1:chan-1:thread:t-42");
244
- expect(key).toEqual({
245
- tenantId: "default",
246
- userId: "user-1",
247
- channelId: "chan-1",
248
- threadId: "t-42",
249
- });
250
- });
251
- it("parses key with agent prefix, peer, guild, and thread", () => {
252
- const key = parseFormattedSessionKey("agent:coder:acme:u1:c1:peer:p1:guild:g1:thread:th7");
253
- expect(key).toEqual({
254
- tenantId: "acme",
255
- userId: "u1",
256
- channelId: "c1",
257
- peerId: "p1",
258
- guildId: "g1",
259
- agentId: "coder",
260
- threadId: "th7",
261
- });
262
- });
263
- it("roundtrips with new fields (agentId + threadId)", () => {
264
- const original = {
265
- tenantId: "t",
266
- userId: "u",
267
- channelId: "c",
268
- peerId: "p",
269
- guildId: "g",
270
- agentId: "bot",
271
- threadId: "th",
272
- };
273
- const formatted = formatSessionKey(original);
274
- const parsed = parseFormattedSessionKey(formatted);
275
- expect(parsed).toEqual(original);
276
- });
277
- it("still handles old format without agent/thread (regression)", () => {
278
- // Old format keys must parse identically to original behavior
279
- const key = parseFormattedSessionKey("default:user-1:chan-1:peer:p1:guild:g1");
280
- expect(key).toEqual({
281
- tenantId: "default",
282
- userId: "user-1",
283
- channelId: "chan-1",
284
- peerId: "p1",
285
- guildId: "g1",
286
- });
287
- expect(key.agentId).toBeUndefined();
288
- expect(key.threadId).toBeUndefined();
289
- });
290
- });
291
- });
@@ -1,131 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { SubagentContextConfigSchema } from "./subagent-context-config.js";
3
- // ---------------------------------------------------------------------------
4
- // SubagentContextConfigSchema
5
- // ---------------------------------------------------------------------------
6
- describe("SubagentContextConfigSchema", () => {
7
- it("produces valid defaults from empty object", () => {
8
- const result = SubagentContextConfigSchema.parse({});
9
- expect(result).toEqual({
10
- maxSpawnDepth: 3,
11
- maxChildrenPerAgent: 5,
12
- maxResultTokens: 4_000,
13
- resultRetentionMs: 86_400_000,
14
- condensationStrategy: "auto",
15
- includeParentHistory: "none",
16
- objectiveReinforcement: true,
17
- artifactPassthrough: true,
18
- autoCompactThreshold: 0.95,
19
- errorPreservation: true,
20
- narrativeCasting: true,
21
- resultTagPrefix: "Subagent Result",
22
- parentSummaryMaxTokens: 1_000,
23
- maxQueuedPerAgent: 10,
24
- queueTimeoutMs: 120_000,
25
- maxRunTimeoutMs: 600_000,
26
- perStepTimeoutMs: 60_000,
27
- });
28
- // condensationModel is optional with no default -- should NOT be present
29
- expect("condensationModel" in result).toBe(false);
30
- });
31
- it("accepts full override", () => {
32
- const result = SubagentContextConfigSchema.parse({
33
- maxSpawnDepth: 5,
34
- maxChildrenPerAgent: 10,
35
- maxResultTokens: 8_000,
36
- resultRetentionMs: 172_800_000,
37
- condensationStrategy: "always",
38
- includeParentHistory: "summary",
39
- objectiveReinforcement: false,
40
- artifactPassthrough: false,
41
- autoCompactThreshold: 0.8,
42
- errorPreservation: false,
43
- narrativeCasting: false,
44
- resultTagPrefix: "Custom Tag",
45
- parentSummaryMaxTokens: 2_000,
46
- condensationModel: "groq:llama-3.3-70b-versatile",
47
- maxQueuedPerAgent: 20,
48
- queueTimeoutMs: 60_000,
49
- maxRunTimeoutMs: 300_000,
50
- perStepTimeoutMs: 30_000,
51
- });
52
- expect(result.maxSpawnDepth).toBe(5);
53
- expect(result.maxChildrenPerAgent).toBe(10);
54
- expect(result.maxResultTokens).toBe(8_000);
55
- expect(result.resultRetentionMs).toBe(172_800_000);
56
- expect(result.condensationStrategy).toBe("always");
57
- expect(result.includeParentHistory).toBe("summary");
58
- expect(result.objectiveReinforcement).toBe(false);
59
- expect(result.artifactPassthrough).toBe(false);
60
- expect(result.autoCompactThreshold).toBe(0.8);
61
- expect(result.errorPreservation).toBe(false);
62
- expect(result.narrativeCasting).toBe(false);
63
- expect(result.resultTagPrefix).toBe("Custom Tag");
64
- expect(result.parentSummaryMaxTokens).toBe(2_000);
65
- expect(result.condensationModel).toBe("groq:llama-3.3-70b-versatile");
66
- expect(result.maxQueuedPerAgent).toBe(20);
67
- expect(result.queueTimeoutMs).toBe(60_000);
68
- expect(result.maxRunTimeoutMs).toBe(300_000);
69
- expect(result.perStepTimeoutMs).toBe(30_000);
70
- });
71
- it("accepts condensationModel override", () => {
72
- const result = SubagentContextConfigSchema.parse({
73
- condensationModel: "anthropic:claude-haiku-4-20250514",
74
- });
75
- expect(result.condensationModel).toBe("anthropic:claude-haiku-4-20250514");
76
- });
77
- it("rejects unknown keys (strictObject enforcement)", () => {
78
- const result = SubagentContextConfigSchema.safeParse({ unknownField: true });
79
- expect(result.success).toBe(false);
80
- });
81
- it("rejects maxSpawnDepth below 1", () => {
82
- const result = SubagentContextConfigSchema.safeParse({ maxSpawnDepth: 0 });
83
- expect(result.success).toBe(false);
84
- });
85
- it("rejects maxSpawnDepth above 10", () => {
86
- const result = SubagentContextConfigSchema.safeParse({ maxSpawnDepth: 11 });
87
- expect(result.success).toBe(false);
88
- });
89
- it("rejects autoCompactThreshold below 0.5", () => {
90
- const result = SubagentContextConfigSchema.safeParse({ autoCompactThreshold: 0.4 });
91
- expect(result.success).toBe(false);
92
- });
93
- it("rejects invalid condensationStrategy", () => {
94
- const result = SubagentContextConfigSchema.safeParse({ condensationStrategy: "manual" });
95
- expect(result.success).toBe(false);
96
- });
97
- it("maxQueuedPerAgent defaults to 10", () => {
98
- const result = SubagentContextConfigSchema.parse({});
99
- expect(result.maxQueuedPerAgent).toBe(10);
100
- });
101
- it("queueTimeoutMs defaults to 120000", () => {
102
- const result = SubagentContextConfigSchema.parse({});
103
- expect(result.queueTimeoutMs).toBe(120_000);
104
- });
105
- it("maxQueuedPerAgent: 0 is valid (disables queuing)", () => {
106
- const result = SubagentContextConfigSchema.safeParse({ maxQueuedPerAgent: 0 });
107
- expect(result.success).toBe(true);
108
- if (result.success)
109
- expect(result.data.maxQueuedPerAgent).toBe(0);
110
- });
111
- it("rejects maxQueuedPerAgent above 50", () => {
112
- const result = SubagentContextConfigSchema.safeParse({ maxQueuedPerAgent: 51 });
113
- expect(result.success).toBe(false);
114
- });
115
- it("rejects queueTimeoutMs below 1000", () => {
116
- const result = SubagentContextConfigSchema.safeParse({ queueTimeoutMs: 999 });
117
- expect(result.success).toBe(false);
118
- });
119
- it("rejects queueTimeoutMs above 600000", () => {
120
- const result = SubagentContextConfigSchema.safeParse({ queueTimeoutMs: 600_001 });
121
- expect(result.success).toBe(false);
122
- });
123
- it("maxRunTimeoutMs defaults to 600000", () => {
124
- const result = SubagentContextConfigSchema.parse({});
125
- expect(result.maxRunTimeoutMs).toBe(600_000);
126
- });
127
- it("perStepTimeoutMs defaults to 60000", () => {
128
- const result = SubagentContextConfigSchema.parse({});
129
- expect(result.perStepTimeoutMs).toBe(60_000);
130
- });
131
- });
@@ -1,182 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { SubagentResultSchema, SubagentEndReasonSchema, parseSubagentResult, } from "./subagent-context-types.js";
3
- // ---------------------------------------------------------------------------
4
- // Helpers
5
- // ---------------------------------------------------------------------------
6
- function validResult(overrides = {}) {
7
- return {
8
- taskComplete: true,
9
- summary: "Successfully analyzed the codebase structure.",
10
- conclusions: ["The architecture follows hexagonal patterns"],
11
- ...overrides,
12
- };
13
- }
14
- // ---------------------------------------------------------------------------
15
- // SubagentResultSchema
16
- // ---------------------------------------------------------------------------
17
- describe("SubagentResultSchema", () => {
18
- describe("valid data", () => {
19
- it("accepts valid minimal result", () => {
20
- const result = SubagentResultSchema.safeParse(validResult());
21
- expect(result.success).toBe(true);
22
- if (result.success) {
23
- expect(result.data.taskComplete).toBe(true);
24
- expect(result.data.summary).toBe("Successfully analyzed the codebase structure.");
25
- expect(result.data.conclusions).toEqual(["The architecture follows hexagonal patterns"]);
26
- }
27
- });
28
- it("accepts valid full result", () => {
29
- const result = SubagentResultSchema.safeParse(validResult({
30
- filePaths: ["/src/index.ts", "/src/types.ts"],
31
- actionableItems: ["Review the port interfaces"],
32
- errors: ["Minor: unused import in file.ts"],
33
- keyData: { linesOfCode: 1500, coverage: 0.85 },
34
- confidence: 0.92,
35
- }));
36
- expect(result.success).toBe(true);
37
- if (result.success) {
38
- expect(result.data.filePaths).toEqual(["/src/index.ts", "/src/types.ts"]);
39
- expect(result.data.actionableItems).toEqual(["Review the port interfaces"]);
40
- expect(result.data.errors).toEqual(["Minor: unused import in file.ts"]);
41
- expect(result.data.keyData).toEqual({ linesOfCode: 1500, coverage: 0.85 });
42
- expect(result.data.confidence).toBe(0.92);
43
- }
44
- });
45
- });
46
- describe("invalid data", () => {
47
- it("rejects missing required field taskComplete", () => {
48
- const { taskComplete: _, ...rest } = validResult();
49
- const result = SubagentResultSchema.safeParse(rest);
50
- expect(result.success).toBe(false);
51
- });
52
- it("rejects missing required field summary", () => {
53
- const { summary: _, ...rest } = validResult();
54
- const result = SubagentResultSchema.safeParse(rest);
55
- expect(result.success).toBe(false);
56
- });
57
- it("rejects missing required field conclusions", () => {
58
- const { conclusions: _, ...rest } = validResult();
59
- const result = SubagentResultSchema.safeParse(rest);
60
- expect(result.success).toBe(false);
61
- });
62
- it("rejects empty summary", () => {
63
- const result = SubagentResultSchema.safeParse(validResult({ summary: "" }));
64
- expect(result.success).toBe(false);
65
- });
66
- it("rejects empty conclusions array", () => {
67
- const result = SubagentResultSchema.safeParse(validResult({ conclusions: [] }));
68
- expect(result.success).toBe(false);
69
- });
70
- it("rejects confidence outside 0-1 range", () => {
71
- const tooHigh = SubagentResultSchema.safeParse(validResult({ confidence: 1.5 }));
72
- expect(tooHigh.success).toBe(false);
73
- const tooLow = SubagentResultSchema.safeParse(validResult({ confidence: -0.1 }));
74
- expect(tooLow.success).toBe(false);
75
- });
76
- it("rejects unknown keys", () => {
77
- const result = SubagentResultSchema.safeParse(validResult({ unknownField: "surprise" }));
78
- expect(result.success).toBe(false);
79
- });
80
- });
81
- describe("parseSubagentResult", () => {
82
- it("returns ok() on valid input", () => {
83
- const result = parseSubagentResult(validResult());
84
- expect(result.ok).toBe(true);
85
- if (result.ok) {
86
- expect(result.value.taskComplete).toBe(true);
87
- expect(result.value.summary).toBe("Successfully analyzed the codebase structure.");
88
- }
89
- });
90
- it("returns err() on invalid input", () => {
91
- const result = parseSubagentResult({ taskComplete: "not a boolean" });
92
- expect(result.ok).toBe(false);
93
- if (!result.ok) {
94
- expect(result.error.issues.length).toBeGreaterThan(0);
95
- }
96
- });
97
- });
98
- });
99
- // ---------------------------------------------------------------------------
100
- // SubagentEndReasonSchema
101
- // ---------------------------------------------------------------------------
102
- describe("SubagentEndReasonSchema", () => {
103
- it("accepts valid reasons", () => {
104
- const reasons = ["completed", "failed", "killed", "swept"];
105
- for (const reason of reasons) {
106
- const result = SubagentEndReasonSchema.safeParse(reason);
107
- expect(result.success).toBe(true);
108
- }
109
- });
110
- it("rejects invalid reason", () => {
111
- const result = SubagentEndReasonSchema.safeParse("cancelled");
112
- expect(result.success).toBe(false);
113
- });
114
- });
115
- // ---------------------------------------------------------------------------
116
- // Type Assertion Tests (compile-time only)
117
- // ---------------------------------------------------------------------------
118
- describe("Type assertions", () => {
119
- it("SpawnPacket literal satisfies the interface", () => {
120
- const packet = {
121
- task: "analyze codebase",
122
- artifactRefs: ["/src/index.ts"],
123
- domainKnowledge: ["hexagonal architecture"],
124
- toolGroups: ["coding"],
125
- objective: "Understand the project structure",
126
- workspaceDir: "/workspace",
127
- depth: 1,
128
- maxDepth: 3,
129
- };
130
- // Compile-time check: if this file compiles, the type assertion holds
131
- expect(packet).toBeTruthy();
132
- });
133
- it("SpawnPacket accepts optional parentSummary", () => {
134
- const packet = {
135
- task: "analyze codebase",
136
- artifactRefs: [],
137
- domainKnowledge: [],
138
- toolGroups: [],
139
- objective: "Understand the project structure",
140
- parentSummary: "Parent was working on auth module",
141
- workspaceDir: "/workspace",
142
- depth: 0,
143
- maxDepth: 3,
144
- };
145
- expect(packet).toBeTruthy();
146
- expect(packet.parentSummary).toBe("Parent was working on auth module");
147
- });
148
- it("SpawnPacket accepts optional agentWorkspaces", () => {
149
- const packet = {
150
- task: "update agent configs",
151
- artifactRefs: [],
152
- domainKnowledge: [],
153
- toolGroups: [],
154
- objective: "Modify workspace files for all agents",
155
- workspaceDir: "/workspace",
156
- depth: 1,
157
- maxDepth: 3,
158
- agentWorkspaces: {
159
- "default": "/home/user/.comis/workspace",
160
- "technical-analyst": "/home/user/.comis/workspace-technical-analyst",
161
- },
162
- };
163
- expect(packet).toBeTruthy();
164
- expect(packet.agentWorkspaces).toBeDefined();
165
- expect(Object.keys(packet.agentWorkspaces)).toHaveLength(2);
166
- });
167
- it("CondensedResult literal satisfies the interface", () => {
168
- const condensed = {
169
- level: 2,
170
- result: {
171
- taskComplete: true,
172
- summary: "Completed analysis",
173
- conclusions: ["All good"],
174
- },
175
- originalTokens: 5000,
176
- condensedTokens: 2000,
177
- compressionRatio: 0.4,
178
- diskPath: "/tmp/result-001.json",
179
- };
180
- expect(condensed).toBeTruthy();
181
- });
182
- });
@@ -1 +0,0 @@
1
- export {};