@vellumai/assistant 0.4.54 → 0.4.56
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.
- package/ARCHITECTURE.md +157 -163
- package/Dockerfile +6 -9
- package/README.md +1 -1
- package/bun.lock +145 -112
- package/docs/architecture/integrations.md +22 -22
- package/docs/architecture/memory.md +50 -50
- package/docs/architecture/security.md +2 -2
- package/docs/credential-execution-service.md +411 -0
- package/knip.json +5 -1
- package/node_modules/@vellumai/ces-contracts/bun.lock +29 -0
- package/node_modules/@vellumai/ces-contracts/package.json +24 -0
- package/node_modules/@vellumai/ces-contracts/src/__tests__/contracts.test.ts +293 -0
- package/node_modules/@vellumai/ces-contracts/src/__tests__/grants.test.ts +686 -0
- package/node_modules/@vellumai/ces-contracts/src/error.ts +25 -0
- package/node_modules/@vellumai/ces-contracts/src/grants.ts +184 -0
- package/node_modules/@vellumai/ces-contracts/src/handles.ts +213 -0
- package/node_modules/@vellumai/ces-contracts/src/index.ts +147 -0
- package/node_modules/@vellumai/ces-contracts/src/rendering.ts +135 -0
- package/node_modules/@vellumai/ces-contracts/src/rpc.ts +511 -0
- package/node_modules/@vellumai/ces-contracts/tsconfig.json +20 -0
- package/node_modules/@vellumai/credential-storage/bun.lock +24 -0
- package/node_modules/@vellumai/credential-storage/package.json +17 -0
- package/node_modules/@vellumai/credential-storage/src/__tests__/package-boundary.test.ts +151 -0
- package/node_modules/@vellumai/credential-storage/src/index.ts +213 -0
- package/node_modules/@vellumai/credential-storage/src/oauth-runtime.ts +340 -0
- package/node_modules/@vellumai/credential-storage/src/static-credentials.ts +365 -0
- package/node_modules/@vellumai/credential-storage/tsconfig.json +20 -0
- package/node_modules/@vellumai/egress-proxy/bun.lock +24 -0
- package/node_modules/@vellumai/egress-proxy/package.json +17 -0
- package/node_modules/@vellumai/egress-proxy/src/__tests__/package-boundary.test.ts +131 -0
- package/node_modules/@vellumai/egress-proxy/src/index.ts +54 -0
- package/node_modules/@vellumai/egress-proxy/src/session-core.ts +466 -0
- package/node_modules/@vellumai/egress-proxy/src/types.ts +227 -0
- package/node_modules/@vellumai/egress-proxy/tsconfig.json +20 -0
- package/node_modules/zod/LICENSE +21 -0
- package/node_modules/zod/README.md +208 -0
- package/node_modules/zod/index.cjs +33 -0
- package/node_modules/zod/index.d.cts +4 -0
- package/node_modules/zod/index.d.ts +4 -0
- package/node_modules/zod/index.js +4 -0
- package/node_modules/zod/locales/index.cjs +17 -0
- package/node_modules/zod/locales/index.d.cts +1 -0
- package/node_modules/zod/locales/index.d.ts +1 -0
- package/node_modules/zod/locales/index.js +1 -0
- package/node_modules/zod/locales/package.json +6 -0
- package/node_modules/zod/mini/index.cjs +32 -0
- package/node_modules/zod/mini/index.d.cts +3 -0
- package/node_modules/zod/mini/index.d.ts +3 -0
- package/node_modules/zod/mini/index.js +3 -0
- package/node_modules/zod/mini/package.json +6 -0
- package/node_modules/zod/package.json +135 -0
- package/node_modules/zod/src/index.ts +4 -0
- package/node_modules/zod/src/locales/index.ts +1 -0
- package/node_modules/zod/src/mini/index.ts +3 -0
- package/node_modules/zod/src/v3/ZodError.ts +330 -0
- package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
- package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
- package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
- package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
- package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
- package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
- package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
- package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
- package/node_modules/zod/src/v3/errors.ts +13 -0
- package/node_modules/zod/src/v3/external.ts +6 -0
- package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
- package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
- package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
- package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
- package/node_modules/zod/src/v3/helpers/util.ts +224 -0
- package/node_modules/zod/src/v3/index.ts +4 -0
- package/node_modules/zod/src/v3/locales/en.ts +124 -0
- package/node_modules/zod/src/v3/standard-schema.ts +113 -0
- package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
- package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
- package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
- package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
- package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
- package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
- package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
- package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
- package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
- package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
- package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
- package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
- package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
- package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
- package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
- package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
- package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
- package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
- package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
- package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
- package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
- package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
- package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
- package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
- package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
- package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
- package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
- package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
- package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
- package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
- package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
- package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
- package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
- package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
- package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
- package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
- package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
- package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
- package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
- package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
- package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
- package/node_modules/zod/src/v3/types.ts +5138 -0
- package/node_modules/zod/src/v4/classic/checks.ts +32 -0
- package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
- package/node_modules/zod/src/v4/classic/compat.ts +70 -0
- package/node_modules/zod/src/v4/classic/errors.ts +82 -0
- package/node_modules/zod/src/v4/classic/external.ts +51 -0
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
- package/node_modules/zod/src/v4/classic/index.ts +5 -0
- package/node_modules/zod/src/v4/classic/iso.ts +90 -0
- package/node_modules/zod/src/v4/classic/parse.ts +82 -0
- package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
- package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
- package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
- package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
- package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
- package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
- package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
- package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
- package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
- package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
- package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
- package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
- package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
- package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
- package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
- package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
- package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
- package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
- package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
- package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
- package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
- package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
- package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
- package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
- package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
- package/node_modules/zod/src/v4/core/api.ts +1798 -0
- package/node_modules/zod/src/v4/core/checks.ts +1293 -0
- package/node_modules/zod/src/v4/core/config.ts +15 -0
- package/node_modules/zod/src/v4/core/core.ts +138 -0
- package/node_modules/zod/src/v4/core/doc.ts +44 -0
- package/node_modules/zod/src/v4/core/errors.ts +448 -0
- package/node_modules/zod/src/v4/core/index.ts +16 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
- package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
- package/node_modules/zod/src/v4/core/parse.ts +195 -0
- package/node_modules/zod/src/v4/core/regexes.ts +183 -0
- package/node_modules/zod/src/v4/core/registries.ts +105 -0
- package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
- package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
- package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
- package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
- package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
- package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
- package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
- package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
- package/node_modules/zod/src/v4/core/util.ts +966 -0
- package/node_modules/zod/src/v4/core/versions.ts +5 -0
- package/node_modules/zod/src/v4/core/zsf.ts +323 -0
- package/node_modules/zod/src/v4/index.ts +4 -0
- package/node_modules/zod/src/v4/locales/ar.ts +115 -0
- package/node_modules/zod/src/v4/locales/az.ts +111 -0
- package/node_modules/zod/src/v4/locales/be.ts +176 -0
- package/node_modules/zod/src/v4/locales/bg.ts +128 -0
- package/node_modules/zod/src/v4/locales/ca.ts +116 -0
- package/node_modules/zod/src/v4/locales/cs.ts +118 -0
- package/node_modules/zod/src/v4/locales/da.ts +123 -0
- package/node_modules/zod/src/v4/locales/de.ts +116 -0
- package/node_modules/zod/src/v4/locales/en.ts +119 -0
- package/node_modules/zod/src/v4/locales/eo.ts +118 -0
- package/node_modules/zod/src/v4/locales/es.ts +141 -0
- package/node_modules/zod/src/v4/locales/fa.ts +126 -0
- package/node_modules/zod/src/v4/locales/fi.ts +121 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
- package/node_modules/zod/src/v4/locales/fr.ts +116 -0
- package/node_modules/zod/src/v4/locales/he.ts +246 -0
- package/node_modules/zod/src/v4/locales/hu.ts +117 -0
- package/node_modules/zod/src/v4/locales/hy.ts +164 -0
- package/node_modules/zod/src/v4/locales/id.ts +115 -0
- package/node_modules/zod/src/v4/locales/index.ts +49 -0
- package/node_modules/zod/src/v4/locales/is.ts +119 -0
- package/node_modules/zod/src/v4/locales/it.ts +116 -0
- package/node_modules/zod/src/v4/locales/ja.ts +114 -0
- package/node_modules/zod/src/v4/locales/ka.ts +123 -0
- package/node_modules/zod/src/v4/locales/kh.ts +7 -0
- package/node_modules/zod/src/v4/locales/km.ts +119 -0
- package/node_modules/zod/src/v4/locales/ko.ts +121 -0
- package/node_modules/zod/src/v4/locales/lt.ts +239 -0
- package/node_modules/zod/src/v4/locales/mk.ts +118 -0
- package/node_modules/zod/src/v4/locales/ms.ts +115 -0
- package/node_modules/zod/src/v4/locales/nl.ts +121 -0
- package/node_modules/zod/src/v4/locales/no.ts +116 -0
- package/node_modules/zod/src/v4/locales/ota.ts +117 -0
- package/node_modules/zod/src/v4/locales/pl.ts +118 -0
- package/node_modules/zod/src/v4/locales/ps.ts +126 -0
- package/node_modules/zod/src/v4/locales/pt.ts +116 -0
- package/node_modules/zod/src/v4/locales/ru.ts +176 -0
- package/node_modules/zod/src/v4/locales/sl.ts +118 -0
- package/node_modules/zod/src/v4/locales/sv.ts +119 -0
- package/node_modules/zod/src/v4/locales/ta.ts +118 -0
- package/node_modules/zod/src/v4/locales/th.ts +119 -0
- package/node_modules/zod/src/v4/locales/tr.ts +111 -0
- package/node_modules/zod/src/v4/locales/ua.ts +7 -0
- package/node_modules/zod/src/v4/locales/uk.ts +117 -0
- package/node_modules/zod/src/v4/locales/ur.ts +119 -0
- package/node_modules/zod/src/v4/locales/uz.ts +116 -0
- package/node_modules/zod/src/v4/locales/vi.ts +117 -0
- package/node_modules/zod/src/v4/locales/yo.ts +124 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
- package/node_modules/zod/src/v4/mini/checks.ts +32 -0
- package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
- package/node_modules/zod/src/v4/mini/external.ts +40 -0
- package/node_modules/zod/src/v4/mini/index.ts +3 -0
- package/node_modules/zod/src/v4/mini/iso.ts +66 -0
- package/node_modules/zod/src/v4/mini/parse.ts +14 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
- package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
- package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
- package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
- package/node_modules/zod/src/v4-mini/index.ts +3 -0
- package/node_modules/zod/v3/ZodError.cjs +138 -0
- package/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/node_modules/zod/v3/ZodError.d.ts +164 -0
- package/node_modules/zod/v3/ZodError.js +133 -0
- package/node_modules/zod/v3/errors.cjs +17 -0
- package/node_modules/zod/v3/errors.d.cts +5 -0
- package/node_modules/zod/v3/errors.d.ts +5 -0
- package/node_modules/zod/v3/errors.js +9 -0
- package/node_modules/zod/v3/external.cjs +22 -0
- package/node_modules/zod/v3/external.d.cts +6 -0
- package/node_modules/zod/v3/external.d.ts +6 -0
- package/node_modules/zod/v3/external.js +6 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/node_modules/zod/v3/helpers/util.cjs +137 -0
- package/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/node_modules/zod/v3/helpers/util.d.ts +85 -0
- package/node_modules/zod/v3/helpers/util.js +133 -0
- package/node_modules/zod/v3/index.cjs +33 -0
- package/node_modules/zod/v3/index.d.cts +4 -0
- package/node_modules/zod/v3/index.d.ts +4 -0
- package/node_modules/zod/v3/index.js +4 -0
- package/node_modules/zod/v3/locales/en.cjs +112 -0
- package/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/node_modules/zod/v3/locales/en.d.ts +3 -0
- package/node_modules/zod/v3/locales/en.js +109 -0
- package/node_modules/zod/v3/package.json +6 -0
- package/node_modules/zod/v3/standard-schema.cjs +2 -0
- package/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/node_modules/zod/v3/standard-schema.d.ts +102 -0
- package/node_modules/zod/v3/standard-schema.js +1 -0
- package/node_modules/zod/v3/types.cjs +3777 -0
- package/node_modules/zod/v3/types.d.cts +1034 -0
- package/node_modules/zod/v3/types.d.ts +1034 -0
- package/node_modules/zod/v3/types.js +3695 -0
- package/node_modules/zod/v4/classic/checks.cjs +33 -0
- package/node_modules/zod/v4/classic/checks.d.cts +1 -0
- package/node_modules/zod/v4/classic/checks.d.ts +1 -0
- package/node_modules/zod/v4/classic/checks.js +1 -0
- package/node_modules/zod/v4/classic/coerce.cjs +47 -0
- package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
- package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
- package/node_modules/zod/v4/classic/coerce.js +17 -0
- package/node_modules/zod/v4/classic/compat.cjs +61 -0
- package/node_modules/zod/v4/classic/compat.d.cts +50 -0
- package/node_modules/zod/v4/classic/compat.d.ts +50 -0
- package/node_modules/zod/v4/classic/compat.js +31 -0
- package/node_modules/zod/v4/classic/errors.cjs +74 -0
- package/node_modules/zod/v4/classic/errors.d.cts +30 -0
- package/node_modules/zod/v4/classic/errors.d.ts +30 -0
- package/node_modules/zod/v4/classic/errors.js +48 -0
- package/node_modules/zod/v4/classic/external.cjs +73 -0
- package/node_modules/zod/v4/classic/external.d.cts +15 -0
- package/node_modules/zod/v4/classic/external.d.ts +15 -0
- package/node_modules/zod/v4/classic/external.js +20 -0
- package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
- package/node_modules/zod/v4/classic/index.cjs +33 -0
- package/node_modules/zod/v4/classic/index.d.cts +4 -0
- package/node_modules/zod/v4/classic/index.d.ts +4 -0
- package/node_modules/zod/v4/classic/index.js +4 -0
- package/node_modules/zod/v4/classic/iso.cjs +60 -0
- package/node_modules/zod/v4/classic/iso.d.cts +22 -0
- package/node_modules/zod/v4/classic/iso.d.ts +22 -0
- package/node_modules/zod/v4/classic/iso.js +30 -0
- package/node_modules/zod/v4/classic/package.json +6 -0
- package/node_modules/zod/v4/classic/parse.cjs +41 -0
- package/node_modules/zod/v4/classic/parse.d.cts +31 -0
- package/node_modules/zod/v4/classic/parse.d.ts +31 -0
- package/node_modules/zod/v4/classic/parse.js +15 -0
- package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
- package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
- package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
- package/node_modules/zod/v4/classic/schemas.js +1157 -0
- package/node_modules/zod/v4/core/api.cjs +1222 -0
- package/node_modules/zod/v4/core/api.d.cts +304 -0
- package/node_modules/zod/v4/core/api.d.ts +304 -0
- package/node_modules/zod/v4/core/api.js +1082 -0
- package/node_modules/zod/v4/core/checks.cjs +601 -0
- package/node_modules/zod/v4/core/checks.d.cts +278 -0
- package/node_modules/zod/v4/core/checks.d.ts +278 -0
- package/node_modules/zod/v4/core/checks.js +575 -0
- package/node_modules/zod/v4/core/core.cjs +83 -0
- package/node_modules/zod/v4/core/core.d.cts +70 -0
- package/node_modules/zod/v4/core/core.d.ts +70 -0
- package/node_modules/zod/v4/core/core.js +76 -0
- package/node_modules/zod/v4/core/doc.cjs +39 -0
- package/node_modules/zod/v4/core/doc.d.cts +14 -0
- package/node_modules/zod/v4/core/doc.d.ts +14 -0
- package/node_modules/zod/v4/core/doc.js +35 -0
- package/node_modules/zod/v4/core/errors.cjs +213 -0
- package/node_modules/zod/v4/core/errors.d.cts +220 -0
- package/node_modules/zod/v4/core/errors.d.ts +220 -0
- package/node_modules/zod/v4/core/errors.js +182 -0
- package/node_modules/zod/v4/core/index.cjs +47 -0
- package/node_modules/zod/v4/core/index.d.cts +16 -0
- package/node_modules/zod/v4/core/index.d.ts +16 -0
- package/node_modules/zod/v4/core/index.js +16 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
- package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
- package/node_modules/zod/v4/core/json-schema.cjs +2 -0
- package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
- package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
- package/node_modules/zod/v4/core/json-schema.js +1 -0
- package/node_modules/zod/v4/core/package.json +6 -0
- package/node_modules/zod/v4/core/parse.cjs +131 -0
- package/node_modules/zod/v4/core/parse.d.cts +49 -0
- package/node_modules/zod/v4/core/parse.d.ts +49 -0
- package/node_modules/zod/v4/core/parse.js +93 -0
- package/node_modules/zod/v4/core/regexes.cjs +166 -0
- package/node_modules/zod/v4/core/regexes.d.cts +79 -0
- package/node_modules/zod/v4/core/regexes.d.ts +79 -0
- package/node_modules/zod/v4/core/regexes.js +133 -0
- package/node_modules/zod/v4/core/registries.cjs +56 -0
- package/node_modules/zod/v4/core/registries.d.cts +35 -0
- package/node_modules/zod/v4/core/registries.d.ts +35 -0
- package/node_modules/zod/v4/core/registries.js +51 -0
- package/node_modules/zod/v4/core/schemas.cjs +2124 -0
- package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
- package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
- package/node_modules/zod/v4/core/schemas.js +2093 -0
- package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
- package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
- package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
- package/node_modules/zod/v4/core/standard-schema.js +1 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
- package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.js +437 -0
- package/node_modules/zod/v4/core/util.cjs +710 -0
- package/node_modules/zod/v4/core/util.d.cts +199 -0
- package/node_modules/zod/v4/core/util.d.ts +199 -0
- package/node_modules/zod/v4/core/util.js +651 -0
- package/node_modules/zod/v4/core/versions.cjs +8 -0
- package/node_modules/zod/v4/core/versions.d.cts +5 -0
- package/node_modules/zod/v4/core/versions.d.ts +5 -0
- package/node_modules/zod/v4/core/versions.js +5 -0
- package/node_modules/zod/v4/index.cjs +22 -0
- package/node_modules/zod/v4/index.d.cts +3 -0
- package/node_modules/zod/v4/index.d.ts +3 -0
- package/node_modules/zod/v4/index.js +3 -0
- package/node_modules/zod/v4/locales/ar.cjs +133 -0
- package/node_modules/zod/v4/locales/ar.d.cts +5 -0
- package/node_modules/zod/v4/locales/ar.d.ts +4 -0
- package/node_modules/zod/v4/locales/ar.js +106 -0
- package/node_modules/zod/v4/locales/az.cjs +132 -0
- package/node_modules/zod/v4/locales/az.d.cts +5 -0
- package/node_modules/zod/v4/locales/az.d.ts +4 -0
- package/node_modules/zod/v4/locales/az.js +105 -0
- package/node_modules/zod/v4/locales/be.cjs +183 -0
- package/node_modules/zod/v4/locales/be.d.cts +5 -0
- package/node_modules/zod/v4/locales/be.d.ts +4 -0
- package/node_modules/zod/v4/locales/be.js +156 -0
- package/node_modules/zod/v4/locales/bg.cjs +147 -0
- package/node_modules/zod/v4/locales/bg.d.cts +5 -0
- package/node_modules/zod/v4/locales/bg.d.ts +4 -0
- package/node_modules/zod/v4/locales/bg.js +120 -0
- package/node_modules/zod/v4/locales/ca.cjs +134 -0
- package/node_modules/zod/v4/locales/ca.d.cts +5 -0
- package/node_modules/zod/v4/locales/ca.d.ts +4 -0
- package/node_modules/zod/v4/locales/ca.js +107 -0
- package/node_modules/zod/v4/locales/cs.cjs +138 -0
- package/node_modules/zod/v4/locales/cs.d.cts +5 -0
- package/node_modules/zod/v4/locales/cs.d.ts +4 -0
- package/node_modules/zod/v4/locales/cs.js +111 -0
- package/node_modules/zod/v4/locales/da.cjs +142 -0
- package/node_modules/zod/v4/locales/da.d.cts +5 -0
- package/node_modules/zod/v4/locales/da.d.ts +4 -0
- package/node_modules/zod/v4/locales/da.js +115 -0
- package/node_modules/zod/v4/locales/de.cjs +135 -0
- package/node_modules/zod/v4/locales/de.d.cts +5 -0
- package/node_modules/zod/v4/locales/de.d.ts +4 -0
- package/node_modules/zod/v4/locales/de.js +108 -0
- package/node_modules/zod/v4/locales/en.cjs +136 -0
- package/node_modules/zod/v4/locales/en.d.cts +5 -0
- package/node_modules/zod/v4/locales/en.d.ts +4 -0
- package/node_modules/zod/v4/locales/en.js +109 -0
- package/node_modules/zod/v4/locales/eo.cjs +136 -0
- package/node_modules/zod/v4/locales/eo.d.cts +5 -0
- package/node_modules/zod/v4/locales/eo.d.ts +4 -0
- package/node_modules/zod/v4/locales/eo.js +109 -0
- package/node_modules/zod/v4/locales/es.cjs +159 -0
- package/node_modules/zod/v4/locales/es.d.cts +5 -0
- package/node_modules/zod/v4/locales/es.d.ts +4 -0
- package/node_modules/zod/v4/locales/es.js +132 -0
- package/node_modules/zod/v4/locales/fa.cjs +141 -0
- package/node_modules/zod/v4/locales/fa.d.cts +5 -0
- package/node_modules/zod/v4/locales/fa.d.ts +4 -0
- package/node_modules/zod/v4/locales/fa.js +114 -0
- package/node_modules/zod/v4/locales/fi.cjs +139 -0
- package/node_modules/zod/v4/locales/fi.d.cts +5 -0
- package/node_modules/zod/v4/locales/fi.d.ts +4 -0
- package/node_modules/zod/v4/locales/fi.js +112 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
- package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr-CA.js +107 -0
- package/node_modules/zod/v4/locales/fr.cjs +135 -0
- package/node_modules/zod/v4/locales/fr.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr.js +108 -0
- package/node_modules/zod/v4/locales/he.cjs +241 -0
- package/node_modules/zod/v4/locales/he.d.cts +5 -0
- package/node_modules/zod/v4/locales/he.d.ts +4 -0
- package/node_modules/zod/v4/locales/he.js +214 -0
- package/node_modules/zod/v4/locales/hu.cjs +135 -0
- package/node_modules/zod/v4/locales/hu.d.cts +5 -0
- package/node_modules/zod/v4/locales/hu.d.ts +4 -0
- package/node_modules/zod/v4/locales/hu.js +108 -0
- package/node_modules/zod/v4/locales/hy.cjs +174 -0
- package/node_modules/zod/v4/locales/hy.d.cts +5 -0
- package/node_modules/zod/v4/locales/hy.d.ts +4 -0
- package/node_modules/zod/v4/locales/hy.js +147 -0
- package/node_modules/zod/v4/locales/id.cjs +133 -0
- package/node_modules/zod/v4/locales/id.d.cts +5 -0
- package/node_modules/zod/v4/locales/id.d.ts +4 -0
- package/node_modules/zod/v4/locales/id.js +106 -0
- package/node_modules/zod/v4/locales/index.cjs +104 -0
- package/node_modules/zod/v4/locales/index.d.cts +49 -0
- package/node_modules/zod/v4/locales/index.d.ts +49 -0
- package/node_modules/zod/v4/locales/index.js +49 -0
- package/node_modules/zod/v4/locales/is.cjs +136 -0
- package/node_modules/zod/v4/locales/is.d.cts +5 -0
- package/node_modules/zod/v4/locales/is.d.ts +4 -0
- package/node_modules/zod/v4/locales/is.js +109 -0
- package/node_modules/zod/v4/locales/it.cjs +135 -0
- package/node_modules/zod/v4/locales/it.d.cts +5 -0
- package/node_modules/zod/v4/locales/it.d.ts +4 -0
- package/node_modules/zod/v4/locales/it.js +108 -0
- package/node_modules/zod/v4/locales/ja.cjs +134 -0
- package/node_modules/zod/v4/locales/ja.d.cts +5 -0
- package/node_modules/zod/v4/locales/ja.d.ts +4 -0
- package/node_modules/zod/v4/locales/ja.js +107 -0
- package/node_modules/zod/v4/locales/ka.cjs +139 -0
- package/node_modules/zod/v4/locales/ka.d.cts +5 -0
- package/node_modules/zod/v4/locales/ka.d.ts +4 -0
- package/node_modules/zod/v4/locales/ka.js +112 -0
- package/node_modules/zod/v4/locales/kh.cjs +12 -0
- package/node_modules/zod/v4/locales/kh.d.cts +5 -0
- package/node_modules/zod/v4/locales/kh.d.ts +5 -0
- package/node_modules/zod/v4/locales/kh.js +5 -0
- package/node_modules/zod/v4/locales/km.cjs +137 -0
- package/node_modules/zod/v4/locales/km.d.cts +5 -0
- package/node_modules/zod/v4/locales/km.d.ts +4 -0
- package/node_modules/zod/v4/locales/km.js +110 -0
- package/node_modules/zod/v4/locales/ko.cjs +138 -0
- package/node_modules/zod/v4/locales/ko.d.cts +5 -0
- package/node_modules/zod/v4/locales/ko.d.ts +4 -0
- package/node_modules/zod/v4/locales/ko.js +111 -0
- package/node_modules/zod/v4/locales/lt.cjs +230 -0
- package/node_modules/zod/v4/locales/lt.d.cts +5 -0
- package/node_modules/zod/v4/locales/lt.d.ts +4 -0
- package/node_modules/zod/v4/locales/lt.js +203 -0
- package/node_modules/zod/v4/locales/mk.cjs +136 -0
- package/node_modules/zod/v4/locales/mk.d.cts +5 -0
- package/node_modules/zod/v4/locales/mk.d.ts +4 -0
- package/node_modules/zod/v4/locales/mk.js +109 -0
- package/node_modules/zod/v4/locales/ms.cjs +134 -0
- package/node_modules/zod/v4/locales/ms.d.cts +5 -0
- package/node_modules/zod/v4/locales/ms.d.ts +4 -0
- package/node_modules/zod/v4/locales/ms.js +107 -0
- package/node_modules/zod/v4/locales/nl.cjs +137 -0
- package/node_modules/zod/v4/locales/nl.d.cts +5 -0
- package/node_modules/zod/v4/locales/nl.d.ts +4 -0
- package/node_modules/zod/v4/locales/nl.js +110 -0
- package/node_modules/zod/v4/locales/no.cjs +135 -0
- package/node_modules/zod/v4/locales/no.d.cts +5 -0
- package/node_modules/zod/v4/locales/no.d.ts +4 -0
- package/node_modules/zod/v4/locales/no.js +108 -0
- package/node_modules/zod/v4/locales/ota.cjs +136 -0
- package/node_modules/zod/v4/locales/ota.d.cts +5 -0
- package/node_modules/zod/v4/locales/ota.d.ts +4 -0
- package/node_modules/zod/v4/locales/ota.js +109 -0
- package/node_modules/zod/v4/locales/package.json +6 -0
- package/node_modules/zod/v4/locales/pl.cjs +136 -0
- package/node_modules/zod/v4/locales/pl.d.cts +5 -0
- package/node_modules/zod/v4/locales/pl.d.ts +4 -0
- package/node_modules/zod/v4/locales/pl.js +109 -0
- package/node_modules/zod/v4/locales/ps.cjs +141 -0
- package/node_modules/zod/v4/locales/ps.d.cts +5 -0
- package/node_modules/zod/v4/locales/ps.d.ts +4 -0
- package/node_modules/zod/v4/locales/ps.js +114 -0
- package/node_modules/zod/v4/locales/pt.cjs +135 -0
- package/node_modules/zod/v4/locales/pt.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt.js +108 -0
- package/node_modules/zod/v4/locales/ru.cjs +183 -0
- package/node_modules/zod/v4/locales/ru.d.cts +5 -0
- package/node_modules/zod/v4/locales/ru.d.ts +4 -0
- package/node_modules/zod/v4/locales/ru.js +156 -0
- package/node_modules/zod/v4/locales/sl.cjs +136 -0
- package/node_modules/zod/v4/locales/sl.d.cts +5 -0
- package/node_modules/zod/v4/locales/sl.d.ts +4 -0
- package/node_modules/zod/v4/locales/sl.js +109 -0
- package/node_modules/zod/v4/locales/sv.cjs +137 -0
- package/node_modules/zod/v4/locales/sv.d.cts +5 -0
- package/node_modules/zod/v4/locales/sv.d.ts +4 -0
- package/node_modules/zod/v4/locales/sv.js +110 -0
- package/node_modules/zod/v4/locales/ta.cjs +137 -0
- package/node_modules/zod/v4/locales/ta.d.cts +5 -0
- package/node_modules/zod/v4/locales/ta.d.ts +4 -0
- package/node_modules/zod/v4/locales/ta.js +110 -0
- package/node_modules/zod/v4/locales/th.cjs +137 -0
- package/node_modules/zod/v4/locales/th.d.cts +5 -0
- package/node_modules/zod/v4/locales/th.d.ts +4 -0
- package/node_modules/zod/v4/locales/th.js +110 -0
- package/node_modules/zod/v4/locales/tr.cjs +132 -0
- package/node_modules/zod/v4/locales/tr.d.cts +5 -0
- package/node_modules/zod/v4/locales/tr.d.ts +4 -0
- package/node_modules/zod/v4/locales/tr.js +105 -0
- package/node_modules/zod/v4/locales/ua.cjs +12 -0
- package/node_modules/zod/v4/locales/ua.d.cts +5 -0
- package/node_modules/zod/v4/locales/ua.d.ts +5 -0
- package/node_modules/zod/v4/locales/ua.js +5 -0
- package/node_modules/zod/v4/locales/uk.cjs +135 -0
- package/node_modules/zod/v4/locales/uk.d.cts +5 -0
- package/node_modules/zod/v4/locales/uk.d.ts +4 -0
- package/node_modules/zod/v4/locales/uk.js +108 -0
- package/node_modules/zod/v4/locales/ur.cjs +137 -0
- package/node_modules/zod/v4/locales/ur.d.cts +5 -0
- package/node_modules/zod/v4/locales/ur.d.ts +4 -0
- package/node_modules/zod/v4/locales/ur.js +110 -0
- package/node_modules/zod/v4/locales/uz.cjs +136 -0
- package/node_modules/zod/v4/locales/uz.d.cts +5 -0
- package/node_modules/zod/v4/locales/uz.d.ts +4 -0
- package/node_modules/zod/v4/locales/uz.js +109 -0
- package/node_modules/zod/v4/locales/vi.cjs +135 -0
- package/node_modules/zod/v4/locales/vi.d.cts +5 -0
- package/node_modules/zod/v4/locales/vi.d.ts +4 -0
- package/node_modules/zod/v4/locales/vi.js +108 -0
- package/node_modules/zod/v4/locales/yo.cjs +134 -0
- package/node_modules/zod/v4/locales/yo.d.cts +5 -0
- package/node_modules/zod/v4/locales/yo.d.ts +4 -0
- package/node_modules/zod/v4/locales/yo.js +107 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
- package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-CN.js +109 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
- package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-TW.js +107 -0
- package/node_modules/zod/v4/mini/checks.cjs +34 -0
- package/node_modules/zod/v4/mini/checks.d.cts +1 -0
- package/node_modules/zod/v4/mini/checks.d.ts +1 -0
- package/node_modules/zod/v4/mini/checks.js +1 -0
- package/node_modules/zod/v4/mini/coerce.cjs +52 -0
- package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
- package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
- package/node_modules/zod/v4/mini/coerce.js +22 -0
- package/node_modules/zod/v4/mini/external.cjs +63 -0
- package/node_modules/zod/v4/mini/external.d.cts +12 -0
- package/node_modules/zod/v4/mini/external.d.ts +12 -0
- package/node_modules/zod/v4/mini/external.js +14 -0
- package/node_modules/zod/v4/mini/index.cjs +32 -0
- package/node_modules/zod/v4/mini/index.d.cts +3 -0
- package/node_modules/zod/v4/mini/index.d.ts +3 -0
- package/node_modules/zod/v4/mini/index.js +3 -0
- package/node_modules/zod/v4/mini/iso.cjs +64 -0
- package/node_modules/zod/v4/mini/iso.d.cts +22 -0
- package/node_modules/zod/v4/mini/iso.d.ts +22 -0
- package/node_modules/zod/v4/mini/iso.js +34 -0
- package/node_modules/zod/v4/mini/package.json +6 -0
- package/node_modules/zod/v4/mini/parse.cjs +16 -0
- package/node_modules/zod/v4/mini/parse.d.cts +1 -0
- package/node_modules/zod/v4/mini/parse.d.ts +1 -0
- package/node_modules/zod/v4/mini/parse.js +1 -0
- package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
- package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
- package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
- package/node_modules/zod/v4/mini/schemas.js +925 -0
- package/node_modules/zod/v4/package.json +6 -0
- package/node_modules/zod/v4-mini/index.cjs +32 -0
- package/node_modules/zod/v4-mini/index.d.cts +3 -0
- package/node_modules/zod/v4-mini/index.d.ts +3 -0
- package/node_modules/zod/v4-mini/index.js +3 -0
- package/node_modules/zod/v4-mini/package.json +6 -0
- package/package.json +13 -2
- package/src/__tests__/acp-session.test.ts +292 -0
- package/src/__tests__/actor-token-service.test.ts +3 -3
- package/src/__tests__/always-loaded-tools-guard.test.ts +1 -1
- package/src/__tests__/anthropic-provider.test.ts +168 -46
- package/src/__tests__/app-builder-tool-scripts.test.ts +0 -1
- package/src/__tests__/approval-cascade.test.ts +121 -95
- package/src/__tests__/approval-primitive.test.ts +2 -2
- package/src/__tests__/approval-routes-http.test.ts +41 -26
- package/src/__tests__/asset-materialize-tool.test.ts +9 -16
- package/src/__tests__/asset-search-tool.test.ts +5 -12
- package/src/__tests__/assistant-attachments.test.ts +27 -0
- package/src/__tests__/assistant-event-hub.test.ts +14 -10
- package/src/__tests__/assistant-event.test.ts +9 -9
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +6 -1
- package/src/__tests__/assistant-feature-flags-integration.test.ts +139 -22
- package/src/__tests__/attachments-store.test.ts +1 -1
- package/src/__tests__/avatar-e2e.test.ts +16 -6
- package/src/__tests__/avatar-generator.test.ts +4 -7
- package/src/__tests__/browser-fill-credential.test.ts +17 -18
- package/src/__tests__/browser-skill-endstate.test.ts +1 -1
- package/src/__tests__/btw-routes.test.ts +21 -9
- package/src/__tests__/call-controller.test.ts +229 -202
- package/src/__tests__/call-pointer-messages.test.ts +12 -10
- package/src/__tests__/call-routes-http.test.ts +2 -2
- package/src/__tests__/call-start-guardian-guard.test.ts +0 -1
- package/src/__tests__/canonical-guardian-store.test.ts +8 -10
- package/src/__tests__/channel-approval-routes.test.ts +5 -5
- package/src/__tests__/channel-approval.test.ts +1 -1
- package/src/__tests__/channel-approvals.test.ts +13 -13
- package/src/__tests__/channel-guardian.test.ts +3 -3
- package/src/__tests__/channel-invite-transport.test.ts +5 -1
- package/src/__tests__/channel-readiness-routes.test.ts +4 -0
- package/src/__tests__/channel-reply-delivery.test.ts +1 -1
- package/src/__tests__/checker.test.ts +1 -1
- package/src/__tests__/claude-code-skill-regression.test.ts +67 -1
- package/src/__tests__/claude-code-tool-profiles.test.ts +1 -1
- package/src/__tests__/clipboard.test.ts +6 -6
- package/src/__tests__/commit-guarantee.test.ts +9 -9
- package/src/__tests__/commit-message-enrichment-service.test.ts +37 -6
- package/src/__tests__/computer-use-tools.test.ts +0 -1
- package/src/__tests__/config-loader-backfill.test.ts +6 -4
- package/src/__tests__/config-schema-cmd.test.ts +258 -0
- package/src/__tests__/config-schema.test.ts +38 -30
- package/src/__tests__/config-watcher.test.ts +25 -24
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +16 -14
- package/src/__tests__/contacts-tools.test.ts +0 -1
- package/src/__tests__/context-overflow-approval.test.ts +2 -2
- package/src/__tests__/{session-abort-tool-results.test.ts → conversation-abort-tool-results.test.ts} +24 -11
- package/src/__tests__/{session-agent-loop-overflow.test.ts → conversation-agent-loop-overflow.test.ts} +234 -59
- package/src/__tests__/{session-agent-loop.test.ts → conversation-agent-loop.test.ts} +77 -61
- package/src/__tests__/{session-approval-overrides.test.ts → conversation-approval-overrides.test.ts} +23 -23
- package/src/__tests__/conversation-attachments.test.ts +227 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +2 -2
- package/src/__tests__/{session-confirmation-signals.test.ts → conversation-confirmation-signals.test.ts} +62 -52
- package/src/__tests__/{session-error.test.ts → conversation-error.test.ts} +65 -57
- package/src/__tests__/{session-evictor.test.ts → conversation-evictor.test.ts} +21 -17
- package/src/__tests__/{session-history-web-search.test.ts → conversation-history-web-search.test.ts} +34 -10
- package/src/__tests__/{session-init.benchmark.test.ts → conversation-init.benchmark.test.ts} +23 -23
- package/src/__tests__/{session-load-history-repair.test.ts → conversation-load-history-repair.test.ts} +38 -38
- package/src/__tests__/{session-media-retry.test.ts → conversation-media-retry.test.ts} +1 -1
- package/src/__tests__/{session-messaging-secret-redirect.test.ts → conversation-messaging-secret-redirect.test.ts} +1 -1
- package/src/__tests__/conversation-pairing.test.ts +46 -46
- package/src/__tests__/{session-pre-run-repair.test.ts → conversation-pre-run-repair.test.ts} +24 -11
- package/src/__tests__/{session-provider-retry-repair.test.ts → conversation-provider-retry-repair.test.ts} +59 -46
- package/src/__tests__/{session-queue.test.ts → conversation-queue.test.ts} +241 -220
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +26 -26
- package/src/__tests__/conversation-routes-slash-commands.test.ts +33 -56
- package/src/__tests__/{session-runtime-assembly.test.ts → conversation-runtime-assembly.test.ts} +2 -2
- package/src/__tests__/{session-runtime-workspace.test.ts → conversation-runtime-workspace.test.ts} +1 -1
- package/src/__tests__/{thread-seed-composer.test.ts → conversation-seed-composer.test.ts} +50 -48
- package/src/__tests__/{session-skill-tools.test.ts → conversation-skill-tools.test.ts} +11 -13
- package/src/__tests__/{session-slash-queue.test.ts → conversation-slash-queue.test.ts} +55 -46
- package/src/__tests__/{session-slash-unknown.test.ts → conversation-slash-unknown.test.ts} +31 -75
- package/src/__tests__/conversation-store.test.ts +61 -55
- package/src/__tests__/{session-surfaces-deselection.test.ts → conversation-surfaces-deselection.test.ts} +5 -5
- package/src/__tests__/{session-surfaces-task-progress.test.ts → conversation-surfaces-task-progress.test.ts} +7 -7
- package/src/__tests__/{session-tool-setup-app-refresh.test.ts → conversation-tool-setup-app-refresh.test.ts} +5 -5
- package/src/__tests__/{session-tool-setup-memory-scope.test.ts → conversation-tool-setup-memory-scope.test.ts} +4 -4
- package/src/__tests__/{session-tool-setup-side-effect-flag.test.ts → conversation-tool-setup-side-effect-flag.test.ts} +4 -4
- package/src/__tests__/{session-tool-setup-tools-disabled.test.ts → conversation-tool-setup-tools-disabled.test.ts} +3 -3
- package/src/__tests__/{session-undo.test.ts → conversation-undo.test.ts} +1 -1
- package/src/__tests__/conversation-unread-route.test.ts +4 -0
- package/src/__tests__/{session-usage.test.ts → conversation-usage.test.ts} +1 -1
- package/src/__tests__/{session-workspace-cache-state.test.ts → conversation-workspace-cache-state.test.ts} +29 -36
- package/src/__tests__/{session-workspace-injection.test.ts → conversation-workspace-injection.test.ts} +58 -51
- package/src/__tests__/{session-workspace-tool-tracking.test.ts → conversation-workspace-tool-tracking.test.ts} +54 -47
- package/src/__tests__/credential-execution-admin-cli.test.ts +504 -0
- package/src/__tests__/credential-execution-api-key-propagation.test.ts +309 -0
- package/src/__tests__/credential-execution-approval-bridge.test.ts +535 -0
- package/src/__tests__/credential-execution-client.test.ts +380 -0
- package/src/__tests__/credential-execution-feature-gates.test.ts +169 -0
- package/src/__tests__/credential-execution-managed-contract.test.ts +526 -0
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +149 -0
- package/src/__tests__/credential-execution-tools.test.ts +279 -0
- package/src/__tests__/credential-security-e2e.test.ts +0 -1
- package/src/__tests__/credential-security-invariants.test.ts +4 -8
- package/src/__tests__/credential-storage-oauth-compat.test.ts +606 -0
- package/src/__tests__/credential-storage-static-compat.test.ts +396 -0
- package/src/__tests__/credential-vault-unit.test.ts +0 -1
- package/src/__tests__/credential-vault.test.ts +0 -1
- package/src/__tests__/credentials-cli.test.ts +10 -22
- package/src/__tests__/cu-unified-flow.test.ts +8 -6
- package/src/__tests__/daemon-assistant-events.test.ts +15 -12
- package/src/__tests__/delete-managed-skill-tool.test.ts +0 -1
- package/src/__tests__/diagnostics-export.test.ts +30 -0
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +19 -5
- package/src/__tests__/emit-signal-routing-intent.test.ts +1 -1
- package/src/__tests__/event-bus.test.ts +2 -6
- package/src/__tests__/file-edit-tool.test.ts +0 -1
- package/src/__tests__/file-read-tool.test.ts +0 -1
- package/src/__tests__/file-write-tool.test.ts +0 -1
- package/src/__tests__/fixtures/mock-signup-server.ts +2 -2
- package/src/__tests__/followup-tools.test.ts +25 -26
- package/src/__tests__/frontmatter.test.ts +12 -10
- package/src/__tests__/guardian-action-late-reply.test.ts +1 -1
- package/src/__tests__/guardian-action-no-hardcoded-copy.test.ts +1 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +15 -15
- package/src/__tests__/guardian-dispatch.test.ts +9 -9
- package/src/__tests__/guardian-grant-minting.test.ts +5 -5
- package/src/__tests__/guardian-question-copy.test.ts +10 -8
- package/src/__tests__/guardian-routing-invariants.test.ts +61 -61
- package/src/__tests__/guardian-routing-state.test.ts +1 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -1
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +20 -16
- package/src/__tests__/headless-browser-interactions.test.ts +18 -17
- package/src/__tests__/headless-browser-navigate.test.ts +0 -1
- package/src/__tests__/headless-browser-read-tools.test.ts +5 -6
- package/src/__tests__/headless-browser-snapshot.test.ts +12 -9
- package/src/__tests__/heartbeat-service.test.ts +5 -4
- package/src/__tests__/hooks-ts-runner.test.ts +10 -4
- package/src/__tests__/host-bash-proxy.test.ts +50 -1
- package/src/__tests__/host-cu-proxy.test.ts +1 -1
- package/src/__tests__/host-file-edit-tool.test.ts +0 -1
- package/src/__tests__/host-file-proxy.test.ts +1 -1
- package/src/__tests__/host-file-read-tool.test.ts +0 -1
- package/src/__tests__/host-file-write-tool.test.ts +0 -1
- package/src/__tests__/host-shell-tool.test.ts +64 -5
- package/src/__tests__/http-user-message-parity.test.ts +32 -19
- package/src/__tests__/intent-routing.test.ts +71 -84
- package/src/__tests__/invite-redemption-service.test.ts +35 -0
- package/src/__tests__/keychain-broker-client.test.ts +150 -0
- package/src/__tests__/list-messages-attachments.test.ts +4 -4
- package/src/__tests__/log-export-workspace.test.ts +133 -60
- package/src/__tests__/managed-credential-catalog-cli.test.ts +349 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +14 -2
- package/src/__tests__/managed-store.test.ts +0 -38
- package/src/__tests__/media-generate-image.test.ts +19 -2
- package/src/__tests__/media-reuse-story.e2e.test.ts +82 -70
- package/src/__tests__/media-visibility-policy.test.ts +10 -10
- package/src/__tests__/memory-query-builder.test.ts +2 -2
- package/src/__tests__/memory-regressions.test.ts +67 -30
- package/src/__tests__/messaging-send-tool.test.ts +0 -2
- package/src/__tests__/no-domain-routing-in-prompt-guard.test.ts +51 -0
- package/src/__tests__/notification-broadcaster.test.ts +42 -40
- package/src/__tests__/{notification-thread-candidate-validation.test.ts → notification-conversation-candidate-validation.test.ts} +26 -24
- package/src/__tests__/{notification-thread-candidates.test.ts → notification-conversation-candidates.test.ts} +15 -15
- package/src/__tests__/notification-decision-fallback.test.ts +6 -6
- package/src/__tests__/notification-decision-identity.test.ts +209 -0
- package/src/__tests__/notification-decision-strategy.test.ts +40 -38
- package/src/__tests__/notification-deep-link.test.ts +18 -18
- package/src/__tests__/notification-guardian-path.test.ts +13 -10
- package/src/__tests__/notification-telegram-adapter.test.ts +5 -5
- package/src/__tests__/oauth-store.test.ts +1 -5
- package/src/__tests__/permission-types.test.ts +1 -1
- package/src/__tests__/playbook-execution.test.ts +0 -1
- package/src/__tests__/playbook-tools.test.ts +0 -1
- package/src/__tests__/provider-commit-message-generator.test.ts +7 -6
- package/src/__tests__/provider-fail-open-selection.test.ts +22 -28
- package/src/__tests__/provider-managed-proxy-integration.test.ts +35 -56
- package/src/__tests__/provider-registry-ollama.test.ts +13 -2
- package/src/__tests__/proxy-approval-callback.test.ts +2 -2
- package/src/__tests__/recording-handler.test.ts +20 -20
- package/src/__tests__/relay-server.test.ts +8 -5
- package/src/__tests__/require-fresh-approval.test.ts +532 -0
- package/src/__tests__/resolve-trust-class.test.ts +2 -2
- package/src/__tests__/runtime-events-sse-parity.test.ts +21 -21
- package/src/__tests__/runtime-events-sse.test.ts +15 -7
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +1 -4
- package/src/__tests__/schedule-tools.test.ts +0 -1
- package/src/__tests__/scoped-approval-grants.test.ts +6 -6
- package/src/__tests__/scoped-grant-security-matrix.test.ts +1 -1
- package/src/__tests__/{script-proxy-session-manager.test.ts → script-proxy-conversation-manager.test.ts} +4 -1
- package/src/__tests__/secret-onetime-send.test.ts +0 -4
- package/src/__tests__/secret-response-routing.test.ts +1 -1
- package/src/__tests__/secret-routes-managed-proxy.test.ts +79 -2
- package/src/__tests__/secret-scanner-executor.test.ts +0 -2
- package/src/__tests__/send-endpoint-busy.test.ts +73 -60
- package/src/__tests__/send-notification-tool.test.ts +1 -3
- package/src/__tests__/sequence-store.test.ts +5 -5
- package/src/__tests__/shell-credential-ref.test.ts +1 -2
- package/src/__tests__/shell-tool-proxy-mode.test.ts +2 -3
- package/src/__tests__/skill-feature-flags-integration.test.ts +1 -2
- package/src/__tests__/skill-feature-flags.test.ts +7 -8
- package/src/__tests__/skill-include-graph.test.ts +1 -2
- package/src/__tests__/skill-load-feature-flag.test.ts +10 -11
- package/src/__tests__/skill-load-tool.test.ts +19 -15
- package/src/__tests__/skill-projection-feature-flag.test.ts +4 -6
- package/src/__tests__/skill-projection.benchmark.test.ts +3 -5
- package/src/__tests__/skill-script-runner-host.test.ts +3 -4
- package/src/__tests__/skill-script-runner-sandbox.test.ts +3 -4
- package/src/__tests__/skill-script-runner.test.ts +0 -1
- package/src/__tests__/skill-tool-factory.test.ts +0 -1
- package/src/__tests__/skills.test.ts +0 -37
- package/src/__tests__/slack-skill.test.ts +0 -4
- package/src/__tests__/starter-task-flow.test.ts +3 -3
- package/src/__tests__/subagent-manager-notify.test.ts +45 -40
- package/src/__tests__/subagent-tools.test.ts +78 -69
- package/src/__tests__/subagent-types.test.ts +3 -3
- package/src/__tests__/surface-mutex-cleanup.test.ts +1 -1
- package/src/__tests__/{swarm-session-integration.test.ts → swarm-conversation-integration.test.ts} +13 -1
- package/src/__tests__/swarm-recursion.test.ts +21 -9
- package/src/__tests__/swarm-tool.test.ts +14 -1
- package/src/__tests__/system-prompt.test.ts +34 -16
- package/src/__tests__/task-compiler.test.ts +1 -1
- package/src/__tests__/task-management-tools.test.ts +1 -2
- package/src/__tests__/terminal-sandbox.test.ts +6 -0
- package/src/__tests__/terminal-tools.test.ts +1 -1
- package/src/__tests__/token-estimator-accuracy.benchmark.test.ts +2 -2
- package/src/__tests__/tool-approval-handler.test.ts +2 -3
- package/src/__tests__/tool-audit-listener.test.ts +0 -6
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -11
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +67 -14
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +3 -6
- package/src/__tests__/tool-executor-shell-integration.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +20 -20
- package/src/__tests__/tool-grant-request-escalation.test.ts +8 -9
- package/src/__tests__/tool-metrics-listener.test.ts +0 -9
- package/src/__tests__/tool-notification-listener.test.ts +0 -2
- package/src/__tests__/tool-preview-lifecycle.test.ts +6 -6
- package/src/__tests__/tool-profiling-listener.test.ts +0 -7
- package/src/__tests__/tool-trace-listener.test.ts +0 -11
- package/src/__tests__/trace-emitter.test.ts +1 -1
- package/src/__tests__/trust-context-guards.test.ts +1 -1
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +1 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +9 -10
- package/src/__tests__/turn-commit.test.ts +3 -3
- package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
- package/src/__tests__/verification-control-plane-policy.test.ts +0 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +4 -4
- package/src/__tests__/voice-session-bridge.test.ts +31 -31
- package/src/__tests__/workspace-git-service.test.ts +49 -2
- package/src/__tests__/workspace-lifecycle.test.ts +6 -6
- package/src/__tests__/workspace-migration-add-send-diagnostics.test.ts +59 -0
- package/src/__tests__/workspace-migration-avatar-rename.test.ts +128 -0
- package/src/__tests__/workspace-migration-extract-collect-usage-data.test.ts +179 -0
- package/src/__tests__/workspace-migration-seed-device-id.test.ts +328 -0
- package/src/__tests__/workspace-migrations-runner.test.ts +293 -0
- package/src/acp/agent-process.ts +201 -0
- package/src/acp/client-handler.ts +361 -0
- package/src/acp/index.ts +44 -0
- package/src/acp/session-manager.ts +348 -0
- package/src/acp/types.ts +79 -0
- package/src/approvals/AGENTS.md +2 -2
- package/src/approvals/approval-primitive.ts +4 -4
- package/src/approvals/guardian-decision-primitive.ts +7 -7
- package/src/approvals/guardian-request-resolvers.ts +1 -1
- package/src/avatar/ascii-renderer.ts +63 -0
- package/src/avatar/character-components.ts +454 -0
- package/src/avatar/png-renderer.ts +17 -0
- package/src/avatar/svg-compositor.ts +90 -0
- package/src/avatar/traits-png-sync.ts +133 -0
- package/src/calls/call-controller.ts +8 -8
- package/src/calls/call-conversation-messages.ts +1 -1
- package/src/calls/call-domain.ts +4 -4
- package/src/calls/call-pointer-message-composer.ts +2 -2
- package/src/calls/call-pointer-messages.ts +10 -10
- package/src/calls/guardian-action-sweep.ts +3 -3
- package/src/calls/guardian-dispatch.ts +7 -7
- package/src/calls/guardian-question-copy.ts +7 -7
- package/src/calls/relay-server.ts +4 -4
- package/src/calls/twilio-routes.ts +1 -1
- package/src/calls/voice-session-bridge.ts +59 -56
- package/src/cli/AGENTS.md +2 -2
- package/src/cli/commands/avatar.ts +281 -0
- package/src/cli/commands/bash.ts +6 -3
- package/src/cli/commands/channel-verification-sessions.ts +7 -4
- package/src/cli/commands/completions.ts +4 -4
- package/src/cli/commands/config.ts +52 -7
- package/src/cli/commands/{sessions.ts → conversations.ts} +43 -40
- package/src/cli/commands/credential-execution.ts +345 -0
- package/src/cli/commands/credentials.ts +106 -6
- package/src/cli/commands/doctor.ts +9 -3
- package/src/cli/commands/keys.ts +30 -0
- package/src/cli/commands/mcp.ts +2 -2
- package/src/cli/commands/memory.ts +8 -8
- package/src/cli/commands/notifications.ts +2 -2
- package/src/cli/commands/oauth/connections.ts +98 -17
- package/src/cli/commands/oauth/providers.ts +45 -8
- package/src/cli/commands/shotgun.ts +250 -0
- package/src/cli/main-screen.tsx +3 -29
- package/src/cli/program.ts +13 -3
- package/src/cli/reference.ts +4 -2
- package/src/cli.ts +159 -235
- package/src/config/acp-schema.ts +47 -0
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +14 -12
- package/src/config/bundled-skills/acp/SKILL.md +58 -0
- package/src/config/bundled-skills/acp/TOOLS.json +79 -0
- package/src/config/bundled-skills/{settings/tools/set-avatar.ts → acp/tools/acp-abort.ts} +2 -2
- package/src/config/bundled-skills/acp/tools/acp-spawn.ts +12 -0
- package/src/config/bundled-skills/acp/tools/acp-status.ts +12 -0
- package/src/config/bundled-skills/app-builder/SKILL.md +22 -6
- package/src/config/bundled-skills/browser/SKILL.md +2 -1
- package/src/config/bundled-skills/browser/TOOLS.json +2 -2
- package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +1 -1
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +0 -1
- package/src/config/bundled-skills/claude-code/SKILL.md +1 -2
- package/src/config/bundled-skills/claude-code/TOOLS.json +1 -1
- package/src/config/bundled-skills/computer-use/SKILL.md +1 -3
- package/src/config/bundled-skills/contacts/SKILL.md +0 -1
- package/src/config/bundled-skills/contacts/TOOLS.json +4 -0
- package/src/config/bundled-skills/contacts/tools/google-contacts.ts +5 -1
- package/src/config/bundled-skills/followups/SKILL.md +1 -1
- package/src/config/bundled-skills/followups/TOOLS.json +7 -7
- package/src/config/bundled-skills/gmail/SKILL.md +0 -1
- package/src/config/bundled-skills/google-calendar/SKILL.md +0 -1
- package/src/config/bundled-skills/google-calendar/tools/calendar-check-availability.ts +1 -1
- package/src/config/bundled-skills/google-calendar/tools/calendar-create-event.ts +1 -1
- package/src/config/bundled-skills/google-calendar/tools/calendar-get-event.ts +1 -1
- package/src/config/bundled-skills/google-calendar/tools/calendar-list-events.ts +1 -1
- package/src/config/bundled-skills/google-calendar/tools/calendar-rsvp.ts +1 -1
- package/src/config/bundled-skills/google-calendar/tools/shared.ts +1 -5
- package/src/config/bundled-skills/image-studio/SKILL.md +0 -1
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +30 -13
- package/src/config/bundled-skills/media-processing/services/preprocess.ts +5 -1
- package/src/config/bundled-skills/media-processing/tools/analyze-keyframes.ts +3 -3
- package/src/config/bundled-skills/messaging/SKILL.md +11 -13
- package/src/config/bundled-skills/messaging/TOOLS.json +0 -4
- package/src/config/bundled-skills/notifications/SKILL.md +4 -5
- package/src/config/bundled-skills/notifications/TOOLS.json +1 -1
- package/src/config/bundled-skills/notifications/tools/send-notification.ts +2 -2
- package/src/config/bundled-skills/orchestration/SKILL.md +4 -1
- package/src/config/bundled-skills/phone-calls/SKILL.md +20 -8
- package/src/config/bundled-skills/schedule/SKILL.md +1 -1
- package/src/config/bundled-skills/screen-watch/SKILL.md +0 -1
- package/src/config/bundled-skills/sequences/SKILL.md +0 -1
- package/src/config/bundled-skills/sequences/TOOLS.json +4 -4
- package/src/config/bundled-skills/sequences/tools/sequence-create.ts +2 -1
- package/src/config/bundled-skills/sequences/tools/sequence-update.ts +2 -1
- package/src/config/bundled-skills/settings/SKILL.md +2 -3
- package/src/config/bundled-skills/settings/TOOLS.json +0 -22
- package/src/config/bundled-skills/skill-management/SKILL.md +0 -1
- package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
- package/src/config/bundled-skills/slack/SKILL.md +0 -1
- package/src/config/bundled-skills/subagent/SKILL.md +2 -2
- package/src/config/bundled-skills/subagent/TOOLS.json +2 -2
- package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +35 -5
- package/src/config/bundled-tool-registry.ts +9 -2
- package/src/config/env.ts +44 -2
- package/src/config/feature-flag-registry.json +161 -25
- package/src/config/loader.ts +3 -0
- package/src/config/raw-config-utils.ts +30 -0
- package/src/config/schema-utils.ts +27 -0
- package/src/config/schema.ts +54 -39
- package/src/config/schemas/calls.ts +219 -152
- package/src/config/schemas/channels.ts +118 -71
- package/src/config/schemas/elevenlabs.ts +39 -24
- package/src/config/schemas/heartbeat.ts +13 -4
- package/src/config/schemas/inference.ts +155 -99
- package/src/config/schemas/ingress.ts +100 -64
- package/src/config/schemas/logging.ts +24 -15
- package/src/config/schemas/mcp.ts +95 -44
- package/src/config/schemas/memory-lifecycle.ts +70 -50
- package/src/config/schemas/memory-processing.ts +46 -25
- package/src/config/schemas/memory-retrieval.ts +206 -139
- package/src/config/schemas/memory-storage.ts +113 -79
- package/src/config/schemas/memory.ts +33 -28
- package/src/config/schemas/notifications.ts +12 -7
- package/src/config/schemas/platform.ts +62 -39
- package/src/config/schemas/sandbox.ts +10 -5
- package/src/config/schemas/security.ts +72 -41
- package/src/config/schemas/services.ts +54 -0
- package/src/config/schemas/skills.ts +131 -81
- package/src/config/schemas/swarm.ts +78 -46
- package/src/config/schemas/timeouts.ts +64 -41
- package/src/config/schemas/workspace-git.ts +219 -162
- package/src/config/skill-state.ts +6 -47
- package/src/config/skills.ts +66 -271
- package/src/config/types.ts +5 -0
- package/src/contacts/contact-store.ts +19 -7
- package/src/contacts/contacts-write.ts +13 -2
- package/src/context/window-manager.ts +1 -1
- package/src/credential-execution/approval-bridge.ts +350 -0
- package/src/credential-execution/client.ts +414 -0
- package/src/credential-execution/executable-discovery.ts +169 -0
- package/src/credential-execution/feature-gates.ts +75 -0
- package/src/credential-execution/managed-catalog.ts +155 -0
- package/src/credential-execution/process-manager.ts +451 -0
- package/src/daemon/approval-generators.ts +13 -7
- package/src/daemon/assistant-attachments.ts +3 -3
- package/src/daemon/config-watcher.ts +21 -13
- package/src/daemon/context-overflow-policy.ts +5 -5
- package/src/daemon/context-overflow-reducer.ts +2 -2
- package/src/daemon/{session-agent-loop-handlers.ts → conversation-agent-loop-handlers.ts} +21 -21
- package/src/daemon/{session-agent-loop.ts → conversation-agent-loop.ts} +93 -72
- package/src/daemon/{session-attachments.ts → conversation-attachments.ts} +35 -9
- package/src/daemon/{session-error.ts → conversation-error.ts} +34 -24
- package/src/daemon/conversation-evictor.ts +204 -0
- package/src/daemon/{session-history.ts → conversation-history.ts} +37 -33
- package/src/daemon/{session-lifecycle.ts → conversation-lifecycle.ts} +16 -16
- package/src/daemon/{session-memory.ts → conversation-memory.ts} +1 -1
- package/src/daemon/{session-messaging.ts → conversation-messaging.ts} +9 -9
- package/src/daemon/{session-notifiers.ts → conversation-notifiers.ts} +25 -25
- package/src/daemon/{session-process.ts → conversation-process.ts} +128 -131
- package/src/daemon/{session-queue-manager.ts → conversation-queue-manager.ts} +11 -8
- package/src/daemon/{session-runtime-assembly.ts → conversation-runtime-assembly.ts} +17 -11
- package/src/daemon/{session-skill-tools.ts → conversation-skill-tools.ts} +18 -18
- package/src/daemon/{session-slash.ts → conversation-slash.ts} +35 -62
- package/src/daemon/{session-surfaces.ts → conversation-surfaces.ts} +34 -34
- package/src/daemon/{session-tool-setup.ts → conversation-tool-setup.ts} +41 -36
- package/src/daemon/{session-usage.ts → conversation-usage.ts} +1 -1
- package/src/daemon/{session-workspace.ts → conversation-workspace.ts} +3 -3
- package/src/daemon/{session.ts → conversation.ts} +96 -73
- package/src/daemon/doordash-steps.ts +9 -8
- package/src/daemon/guardian-action-generators.ts +8 -2
- package/src/daemon/handlers/config-channels.ts +7 -4
- package/src/daemon/handlers/config-model.ts +33 -32
- package/src/daemon/handlers/config-slack-channel.ts +28 -6
- package/src/daemon/handlers/config-voice.ts +1 -2
- package/src/daemon/handlers/{session-history.ts → conversation-history.ts} +4 -4
- package/src/daemon/handlers/{sessions.ts → conversations.ts} +163 -183
- package/src/daemon/handlers/recording.ts +20 -20
- package/src/daemon/handlers/shared.ts +17 -17
- package/src/daemon/handlers/skills.ts +164 -21
- package/src/daemon/history-repair.ts +1 -1
- package/src/daemon/host-bash-proxy.ts +11 -3
- package/src/daemon/host-cu-proxy.ts +2 -2
- package/src/daemon/host-file-proxy.ts +3 -3
- package/src/daemon/lifecycle.ts +103 -78
- package/src/daemon/main.ts +4 -0
- package/src/daemon/media-visibility-policy.ts +10 -10
- package/src/daemon/message-protocol.ts +11 -8
- package/src/daemon/message-types/acp.ts +66 -0
- package/src/daemon/message-types/computer-use.ts +4 -4
- package/src/daemon/message-types/{sessions.ts → conversations.ts} +74 -80
- package/src/daemon/message-types/documents.ts +2 -2
- package/src/daemon/message-types/host-bash.ts +3 -1
- package/src/daemon/message-types/host-cu.ts +1 -1
- package/src/daemon/message-types/host-file.ts +3 -3
- package/src/daemon/message-types/integrations.ts +2 -2
- package/src/daemon/message-types/messages.ts +23 -23
- package/src/daemon/message-types/notifications.ts +5 -5
- package/src/daemon/message-types/settings.ts +1 -1
- package/src/daemon/message-types/shared.ts +5 -3
- package/src/daemon/message-types/skills.ts +1 -10
- package/src/daemon/message-types/subagents.ts +2 -2
- package/src/daemon/message-types/surfaces.ts +7 -7
- package/src/daemon/message-types/work-items.ts +4 -4
- package/src/daemon/parse-actual-tokens-from-error.test.ts +3 -7
- package/src/daemon/providers-setup.ts +79 -0
- package/src/daemon/seed-files.ts +7 -26
- package/src/daemon/server.ts +452 -209
- package/src/daemon/startup-error.ts +126 -0
- package/src/daemon/tool-side-effects.ts +2 -18
- package/src/daemon/trace-emitter.ts +3 -3
- package/src/daemon/verification-session-intent.ts +1 -1
- package/src/daemon/watch-handler.ts +23 -21
- package/src/email/feature-gate.ts +23 -0
- package/src/events/domain-events.ts +2 -8
- package/src/events/tool-domain-event-publisher.ts +0 -8
- package/src/events/tool-metrics-listener.ts +0 -7
- package/src/export/formatter.ts +1 -1
- package/src/followups/followup-store.ts +8 -5
- package/src/followups/types.ts +2 -2
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/hooks/discovery.ts +3 -0
- package/src/hooks/manager.ts +27 -2
- package/src/hooks/types.ts +4 -1
- package/src/inbound/platform-callback-registration.ts +24 -2
- package/src/instrument.ts +37 -19
- package/src/media/app-icon-generator.ts +3 -3
- package/src/media/avatar-router.ts +3 -3
- package/src/memory/app-git-service.ts +3 -3
- package/src/memory/attachments-store.ts +92 -27
- package/src/memory/canonical-guardian-store.ts +37 -27
- package/src/memory/channel-verification-sessions.ts +6 -6
- package/src/memory/checkpoints.ts +5 -0
- package/src/memory/conversation-bootstrap.ts +2 -2
- package/src/memory/conversation-crud.ts +147 -22
- package/src/memory/conversation-key-store.ts +40 -4
- package/src/memory/conversation-queries.ts +8 -6
- package/src/memory/db-init.ts +46 -2
- package/src/memory/embedding-backend.ts +71 -11
- package/src/memory/external-conversation-store.ts +1 -1
- package/src/memory/guardian-action-store.ts +3 -3
- package/src/memory/indexer.ts +20 -9
- package/src/memory/invite-store.ts +4 -4
- package/src/memory/items-extractor.ts +48 -4
- package/src/memory/job-handlers/backfill.ts +15 -8
- package/src/memory/job-handlers/capability-cards.ts +420 -0
- package/src/memory/job-handlers/cleanup.ts +1 -1
- package/src/memory/job-handlers/thread-starters.ts +348 -0
- package/src/memory/jobs-store.ts +4 -7
- package/src/memory/jobs-worker.ts +8 -0
- package/src/memory/migrations/033-scoped-approval-grants.ts +4 -4
- package/src/memory/migrations/102-alter-table-columns.ts +5 -0
- package/src/memory/migrations/105-contacts-and-triage.ts +3 -3
- package/src/memory/migrations/111-media-assets.ts +1 -106
- package/src/memory/migrations/121-canonical-guardian-requests.ts +5 -5
- package/src/memory/migrations/159-drop-contact-interaction-columns.ts +5 -0
- package/src/memory/migrations/161-drop-orphaned-media-tables.ts +18 -0
- package/src/memory/migrations/162-guardian-timestamps-epoch-ms.ts +283 -0
- package/src/memory/migrations/163-rename-notification-thread-columns.ts +35 -0
- package/src/memory/migrations/164-rename-conversation-type-column.ts +19 -0
- package/src/memory/migrations/165-rename-inbox-thread-state-table.ts +15 -0
- package/src/memory/migrations/166-rename-followups-thread-id.ts +20 -0
- package/src/memory/migrations/167-rename-sequence-enrollments-thread-id.ts +20 -0
- package/src/memory/migrations/168-rename-sequence-steps-reply-key.ts +17 -0
- package/src/memory/migrations/169-rename-gmail-provider-key-to-google.ts +64 -0
- package/src/memory/migrations/170-thread-starters-table.ts +32 -0
- package/src/memory/migrations/171-capability-card-columns.ts +43 -0
- package/src/memory/migrations/index.ts +11 -0
- package/src/memory/migrations/registry.ts +19 -0
- package/src/memory/schema/calls.ts +1 -68
- package/src/memory/schema/contacts.ts +3 -3
- package/src/memory/schema/conversations.ts +2 -2
- package/src/memory/schema/guardian.ts +9 -9
- package/src/memory/schema/memory-core.ts +37 -0
- package/src/memory/schema/notifications.ts +4 -4
- package/src/memory/schema/tasks.ts +1 -1
- package/src/memory/scoped-approval-grants.ts +14 -14
- package/src/memory/search/types.ts +3 -3
- package/src/memory/thread-starters-cadence.ts +107 -0
- package/src/memory/turn-events-store.ts +48 -0
- package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
- package/src/notifications/AGENTS.md +1 -1
- package/src/notifications/README.md +103 -103
- package/src/notifications/adapters/slack.ts +3 -3
- package/src/notifications/adapters/telegram.ts +3 -3
- package/src/notifications/broadcaster.ts +40 -40
- package/src/notifications/{thread-candidates.ts → conversation-candidates.ts} +18 -18
- package/src/notifications/conversation-pairing.ts +35 -31
- package/src/notifications/{thread-seed-composer.ts → conversation-seed-composer.ts} +9 -9
- package/src/notifications/decision-engine.ts +105 -82
- package/src/notifications/deliveries-store.ts +14 -14
- package/src/notifications/emit-signal.ts +13 -13
- package/src/notifications/signal.ts +2 -2
- package/src/notifications/types.ts +16 -12
- package/src/oauth/byo-connection.test.ts +1 -1
- package/src/oauth/oauth-store.ts +37 -15
- package/src/oauth/platform-connection.test.ts +2 -2
- package/src/oauth/provider-behaviors.ts +2 -1
- package/src/oauth/seed-providers.ts +3 -11
- package/src/oauth/token-persistence.ts +41 -25
- package/src/outbound-proxy/index.ts +27 -3
- package/src/permissions/checker.ts +15 -2
- package/src/permissions/prompter.ts +3 -3
- package/src/permissions/secret-prompter.ts +2 -2
- package/src/permissions/types.ts +2 -2
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +60 -9
- package/src/prompts/system-prompt.ts +177 -236
- package/src/prompts/templates/SOUL.md +1 -1
- package/src/prompts/templates/UPDATES.md +0 -12
- package/src/prompts/update-bulletin-format.ts +16 -0
- package/src/prompts/update-bulletin.ts +18 -6
- package/src/providers/anthropic/client.ts +135 -11
- package/src/providers/managed-proxy/context.ts +26 -0
- package/src/providers/provider-availability.ts +39 -0
- package/src/providers/provider-send-message.ts +20 -6
- package/src/providers/registry.ts +121 -82
- package/src/runtime/AGENTS.md +5 -5
- package/src/runtime/access-request-helper.ts +2 -2
- package/src/runtime/actor-trust-resolver.ts +2 -2
- package/src/runtime/approval-conversation-turn.ts +2 -2
- package/src/runtime/assistant-event-hub.ts +9 -9
- package/src/runtime/assistant-event.ts +5 -5
- package/src/runtime/auth/__tests__/context.test.ts +2 -2
- package/src/runtime/auth/__tests__/external-assistant-id.test.ts +88 -0
- package/src/runtime/auth/__tests__/guard-tests.test.ts +60 -0
- package/src/runtime/auth/__tests__/local-auth-context.test.ts +4 -4
- package/src/runtime/auth/__tests__/middleware.test.ts +2 -2
- package/src/runtime/auth/__tests__/subject.test.ts +6 -6
- package/src/runtime/auth/context.ts +1 -1
- package/src/runtime/auth/credential-service.ts +1 -1
- package/src/runtime/auth/external-assistant-id.ts +36 -17
- package/src/runtime/auth/route-policy.ts +17 -0
- package/src/runtime/auth/subject.ts +7 -7
- package/src/runtime/auth/types.ts +1 -1
- package/src/runtime/channel-approval-types.ts +1 -1
- package/src/runtime/channel-approvals.ts +9 -6
- package/src/runtime/channel-invite-transport.ts +10 -7
- package/src/runtime/channel-readiness-service.ts +5 -2
- package/src/runtime/channel-retry-sweep.ts +1 -1
- package/src/runtime/channel-verification-service.ts +2 -2
- package/src/runtime/confirmation-request-guardian-bridge.ts +3 -3
- package/src/runtime/{session-approval-overrides.ts → conversation-approval-overrides.ts} +6 -6
- package/src/runtime/guardian-action-grant-minter.ts +2 -4
- package/src/runtime/guardian-action-service.ts +2 -2
- package/src/runtime/guardian-decision-types.ts +13 -8
- package/src/runtime/guardian-reply-router.ts +4 -4
- package/src/runtime/http-server.ts +70 -33
- package/src/runtime/http-types.ts +19 -15
- package/src/runtime/invite-redemption-service.ts +8 -3
- package/src/runtime/local-actor-identity.ts +9 -7
- package/src/runtime/pending-interactions.ts +8 -8
- package/src/runtime/routes/acp-routes.ts +170 -0
- package/src/runtime/routes/approval-routes.ts +3 -3
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +1 -1
- package/src/runtime/routes/attachment-routes.ts +2 -2
- package/src/runtime/routes/avatar-routes.ts +83 -0
- package/src/runtime/routes/btw-routes.ts +27 -13
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +1 -1
- package/src/runtime/routes/channel-route-shared.ts +5 -3
- package/src/runtime/routes/channel-verification-routes.ts +3 -3
- package/src/runtime/routes/{session-management-routes.ts → conversation-management-routes.ts} +103 -22
- package/src/runtime/routes/{session-query-routes.ts → conversation-query-routes.ts} +22 -19
- package/src/runtime/routes/conversation-routes.ts +147 -164
- package/src/runtime/routes/debug-routes.ts +8 -2
- package/src/runtime/routes/diagnostics-routes.ts +16 -17
- package/src/runtime/routes/events-routes.ts +1 -1
- package/src/runtime/routes/guardian-action-routes.ts +4 -4
- package/src/runtime/routes/guardian-approval-interception.ts +1 -1
- package/src/runtime/routes/host-bash-routes.ts +1 -1
- package/src/runtime/routes/host-cu-routes.ts +1 -1
- package/src/runtime/routes/host-file-routes.ts +1 -1
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +1 -1
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +1 -1
- package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +360 -40
- package/src/runtime/routes/recording-routes.ts +5 -5
- package/src/runtime/routes/schedule-routes.ts +13 -7
- package/src/runtime/routes/secret-routes.ts +178 -18
- package/src/runtime/routes/settings-routes.ts +23 -10
- package/src/runtime/routes/skills-routes.ts +38 -0
- package/src/runtime/routes/subagents-routes.ts +10 -10
- package/src/runtime/routes/surface-action-routes.ts +45 -45
- package/src/runtime/routes/surface-content-routes.ts +18 -18
- package/src/runtime/routes/thread-starter-routes.ts +294 -0
- package/src/runtime/routes/watch-routes.ts +6 -6
- package/src/runtime/routes/work-items-routes.test.ts +109 -0
- package/src/runtime/routes/work-items-routes.ts +47 -46
- package/src/runtime/tool-grant-request-helper.ts +3 -3
- package/src/runtime/trust-context-resolver.ts +1 -1
- package/src/schedule/scheduler.ts +14 -12
- package/src/security/credential-backend.ts +29 -5
- package/src/security/encrypted-store.ts +64 -5
- package/src/security/keychain-broker-client.ts +45 -12
- package/src/security/secure-keys.ts +46 -0
- package/src/security/token-manager.ts +67 -167
- package/src/sequence/engine.ts +12 -11
- package/src/sequence/reply-matcher.ts +16 -13
- package/src/sequence/store.ts +10 -7
- package/src/sequence/types.ts +2 -2
- package/src/signals/bash.ts +36 -3
- package/src/signals/cancel.ts +14 -17
- package/src/signals/confirm.ts +4 -7
- package/src/signals/conversation-undo.ts +16 -20
- package/src/signals/event-stream.ts +187 -0
- package/src/signals/shotgun.ts +200 -0
- package/src/signals/trust-rule.ts +3 -6
- package/src/signals/user-message.ts +146 -0
- package/src/skills/catalog-install.ts +1 -1
- package/src/skills/managed-store.ts +0 -13
- package/src/subagent/manager.ts +89 -71
- package/src/subagent/types.ts +5 -5
- package/src/swarm/backend-claude-code.ts +1 -1
- package/src/tasks/SPEC.md +5 -5
- package/src/tasks/task-runner.ts +1 -1
- package/src/telemetry/types.ts +26 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +145 -24
- package/src/telemetry/usage-telemetry-reporter.ts +79 -42
- package/src/tools/AGENTS.md +26 -0
- package/src/tools/acp/abort.ts +32 -0
- package/src/tools/acp/spawn.ts +70 -0
- package/src/tools/acp/status.ts +31 -0
- package/src/tools/assets/materialize.ts +34 -19
- package/src/tools/assets/search.ts +13 -13
- package/src/tools/browser/browser-execution.ts +63 -33
- package/src/tools/browser/browser-handoff.ts +12 -9
- package/src/tools/browser/browser-manager.ts +88 -78
- package/src/tools/browser/browser-screencast.ts +30 -28
- package/src/tools/calls/call-start.ts +1 -1
- package/src/tools/calls/call-status.ts +1 -1
- package/src/tools/claude-code/claude-code.ts +9 -9
- package/src/tools/credential-execution/make-authenticated-request.ts +198 -0
- package/src/tools/credential-execution/manage-secure-command-tool.ts +372 -0
- package/src/tools/credential-execution/run-authenticated-command.ts +261 -0
- package/src/tools/credentials/broker.ts +1 -1
- package/src/tools/credentials/metadata-store.ts +46 -227
- package/src/tools/credentials/resolve.ts +2 -1
- package/src/tools/document/document-tool.ts +3 -3
- package/src/tools/executor.ts +144 -9
- package/src/tools/followups/followup_create.ts +8 -7
- package/src/tools/followups/followup_list.ts +3 -1
- package/src/tools/followups/followup_resolve.ts +8 -7
- package/src/tools/host-filesystem/edit.ts +1 -1
- package/src/tools/host-filesystem/read.ts +1 -1
- package/src/tools/host-filesystem/write.ts +1 -1
- package/src/tools/host-terminal/host-shell.ts +54 -7
- package/src/tools/memory/definitions.ts +1 -1
- package/src/tools/memory/handlers.ts +1 -1
- package/src/tools/network/script-proxy/session-manager.ts +290 -515
- package/src/tools/network/web-fetch.ts +1 -1
- package/src/tools/network/web-search.ts +4 -4
- package/src/tools/permission-checker.ts +38 -23
- package/src/tools/registry.ts +14 -2
- package/src/tools/secret-detection-handler.ts +3 -8
- package/src/tools/side-effects.ts +2 -1
- package/src/tools/skills/load.ts +15 -1
- package/src/tools/skills/sandbox-runner.ts +0 -1
- package/src/tools/skills/scaffold-managed.ts +0 -8
- package/src/tools/subagent/abort.ts +1 -1
- package/src/tools/subagent/message.ts +2 -2
- package/src/tools/subagent/read.ts +2 -2
- package/src/tools/subagent/spawn.ts +1 -1
- package/src/tools/subagent/status.ts +10 -4
- package/src/tools/swarm/delegate.ts +12 -12
- package/src/tools/system/avatar-generator.ts +52 -79
- package/src/tools/terminal/backends/native.ts +48 -8
- package/src/tools/terminal/backends/types.ts +7 -0
- package/src/tools/terminal/safe-env.ts +4 -1
- package/src/tools/terminal/shell.ts +106 -2
- package/src/tools/tool-approval-handler.ts +2 -17
- package/src/tools/tool-manifest.ts +43 -0
- package/src/tools/types.ts +28 -5
- package/src/tools/watch/screen-watch.ts +6 -6
- package/src/tools/watch/watch-state.ts +33 -26
- package/src/util/clipboard.ts +1 -1
- package/src/util/device-id.ts +101 -0
- package/src/util/platform.ts +10 -0
- package/src/util/silently.ts +7 -8
- package/src/watcher/engine.ts +1 -1
- package/src/work-items/resolve-required-tools.test.ts +37 -0
- package/src/work-items/resolve-required-tools.ts +26 -0
- package/src/work-items/work-item-runner.ts +29 -27
- package/src/workspace/commit-message-enrichment-service.ts +1 -1
- package/src/workspace/commit-message-provider.ts +2 -2
- package/src/workspace/git-service.ts +27 -14
- package/src/workspace/migrations/001-avatar-rename.ts +25 -0
- package/src/workspace/migrations/002-backfill-installation-id.ts +75 -0
- package/src/workspace/migrations/003-seed-device-id.ts +101 -0
- package/src/workspace/migrations/004-extract-collect-usage-data.ts +50 -0
- package/src/workspace/migrations/005-add-send-diagnostics.ts +12 -0
- package/src/workspace/migrations/006-services-config.ts +132 -0
- package/src/workspace/migrations/registry.ts +20 -0
- package/src/workspace/migrations/runner.ts +117 -0
- package/src/workspace/migrations/types.ts +11 -0
- package/src/workspace/provider-commit-message-generator.ts +7 -4
- package/src/workspace/turn-commit.ts +13 -13
- package/tsconfig.json +0 -1
- package/src/__tests__/handlers-task-submit-slash.test.ts +0 -39
- package/src/__tests__/session-slash-known.test.ts +0 -477
- package/src/__tests__/slash-commands-catalog.test.ts +0 -94
- package/src/__tests__/slash-commands-parser.test.ts +0 -127
- package/src/__tests__/slash-commands-resolver.test.ts +0 -231
- package/src/__tests__/slash-commands-rewrite.test.ts +0 -40
- package/src/cli/http-client.ts +0 -76
- package/src/daemon/install-cli-launchers.ts +0 -170
- package/src/daemon/session-evictor.ts +0 -203
- package/src/skills/slash-commands.ts +0 -203
- /package/src/__tests__/{script-proxy-session-runtime.test.ts → script-proxy-conversation-runtime.test.ts} +0 -0
- /package/src/daemon/{session-media-retry.ts → conversation-media-retry.ts} +0 -0
|
@@ -10,7 +10,7 @@ import type { ServerMessage } from "../daemon/message-protocol.js";
|
|
|
10
10
|
import type { Message, ProviderResponse } from "../providers/types.js";
|
|
11
11
|
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
|
-
// Mocks — must precede the
|
|
13
|
+
// Mocks — must precede the Conversation import so Bun applies them at load time.
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
15
15
|
|
|
16
16
|
function makeLoggerStub(): Record<string, unknown> {
|
|
@@ -81,6 +81,19 @@ mock.module("../config/loader.js", () => ({
|
|
|
81
81
|
titleGenerationMaxTokens: 30,
|
|
82
82
|
standaloneRecording: true,
|
|
83
83
|
},
|
|
84
|
+
services: {
|
|
85
|
+
inference: {
|
|
86
|
+
mode: "your-own",
|
|
87
|
+
provider: "anthropic",
|
|
88
|
+
model: "claude-opus-4-6",
|
|
89
|
+
},
|
|
90
|
+
"image-generation": {
|
|
91
|
+
mode: "your-own",
|
|
92
|
+
provider: "gemini",
|
|
93
|
+
model: "gemini-2.5-flash-image",
|
|
94
|
+
},
|
|
95
|
+
"web-search": { mode: "your-own", provider: "anthropic-native" },
|
|
96
|
+
},
|
|
84
97
|
}),
|
|
85
98
|
loadRawConfig: () => ({}),
|
|
86
99
|
saveRawConfig: () => {},
|
|
@@ -101,13 +114,6 @@ mock.module("../config/skill-state.js", () => ({
|
|
|
101
114
|
resolveSkillStates: () => [],
|
|
102
115
|
}));
|
|
103
116
|
|
|
104
|
-
mock.module("../skills/slash-commands.js", () => ({
|
|
105
|
-
buildInvocableSlashCatalog: () => new Map(),
|
|
106
|
-
resolveSlashSkillCommand: () => ({ kind: "not_slash" }),
|
|
107
|
-
rewriteKnownSlashCommandPrompt: () => "",
|
|
108
|
-
parseSlashCandidate: () => ({ kind: "not_slash" }),
|
|
109
|
-
}));
|
|
110
|
-
|
|
111
117
|
mock.module("../permissions/trust-store.js", () => ({
|
|
112
118
|
addRule: () => {},
|
|
113
119
|
findHighestPriorityRule: () => null,
|
|
@@ -119,7 +125,7 @@ mock.module("../security/secret-allowlist.js", () => ({
|
|
|
119
125
|
}));
|
|
120
126
|
|
|
121
127
|
mock.module("../memory/conversation-crud.js", () => ({
|
|
122
|
-
|
|
128
|
+
getConversationType: () => "default",
|
|
123
129
|
setConversationOriginChannelIfUnset: () => {},
|
|
124
130
|
updateConversationContextWindow: () => {},
|
|
125
131
|
deleteMessageById: () => {},
|
|
@@ -198,7 +204,7 @@ mock.module("../context/window-manager.js", () => ({
|
|
|
198
204
|
|
|
199
205
|
const turnCommitCalls: Array<{
|
|
200
206
|
workspaceDir: string;
|
|
201
|
-
|
|
207
|
+
conversationId: string;
|
|
202
208
|
turnNumber: number;
|
|
203
209
|
}> = [];
|
|
204
210
|
let turnCommitHangForever = false;
|
|
@@ -284,27 +290,29 @@ mock.module("../memory/canonical-guardian-store.js", () => ({
|
|
|
284
290
|
}));
|
|
285
291
|
|
|
286
292
|
// ---------------------------------------------------------------------------
|
|
287
|
-
// Import
|
|
293
|
+
// Import Conversation AFTER mocks are registered.
|
|
288
294
|
// ---------------------------------------------------------------------------
|
|
289
295
|
|
|
290
|
-
import type { QueueDrainReason, QueuePolicy } from "../daemon/
|
|
291
|
-
import {
|
|
292
|
-
import { MessageQueue } from "../daemon/
|
|
296
|
+
import type { QueueDrainReason, QueuePolicy } from "../daemon/conversation.js";
|
|
297
|
+
import { Conversation } from "../daemon/conversation.js";
|
|
298
|
+
import { MessageQueue } from "../daemon/conversation-queue-manager.js";
|
|
293
299
|
|
|
294
|
-
type
|
|
300
|
+
type ConversationWithWorkspaceDeps = Conversation & {
|
|
295
301
|
getWorkspaceGitService?: (_workspaceDir: string) => {
|
|
296
302
|
ensureInitialized: () => Promise<void>;
|
|
297
303
|
};
|
|
298
304
|
commitTurnChanges?: (
|
|
299
305
|
workspaceDir: string,
|
|
300
|
-
|
|
306
|
+
conversationId: string,
|
|
301
307
|
turnNumber: number,
|
|
302
308
|
provider?: unknown,
|
|
303
309
|
deadlineMs?: number,
|
|
304
310
|
) => Promise<void>;
|
|
305
311
|
};
|
|
306
312
|
|
|
307
|
-
function
|
|
313
|
+
function makeConversation(
|
|
314
|
+
sendToClient?: (msg: ServerMessage) => void,
|
|
315
|
+
): Conversation {
|
|
308
316
|
const provider = {
|
|
309
317
|
name: "mock",
|
|
310
318
|
async sendMessage(): Promise<ProviderResponse> {
|
|
@@ -316,7 +324,7 @@ function makeSession(sendToClient?: (msg: ServerMessage) => void): Session {
|
|
|
316
324
|
};
|
|
317
325
|
},
|
|
318
326
|
};
|
|
319
|
-
const
|
|
327
|
+
const conversationObj = new Conversation(
|
|
320
328
|
"conv-1",
|
|
321
329
|
provider,
|
|
322
330
|
"system prompt",
|
|
@@ -324,22 +332,23 @@ function makeSession(sendToClient?: (msg: ServerMessage) => void): Session {
|
|
|
324
332
|
sendToClient ?? (() => {}),
|
|
325
333
|
"/tmp",
|
|
326
334
|
);
|
|
327
|
-
const
|
|
328
|
-
|
|
335
|
+
const conversationWithWorkspaceDeps =
|
|
336
|
+
conversationObj as ConversationWithWorkspaceDeps;
|
|
337
|
+
conversationWithWorkspaceDeps.getWorkspaceGitService = () => ({
|
|
329
338
|
ensureInitialized: async () => {},
|
|
330
339
|
});
|
|
331
|
-
|
|
340
|
+
conversationWithWorkspaceDeps.commitTurnChanges = async (
|
|
332
341
|
workspaceDir: string,
|
|
333
|
-
|
|
342
|
+
conversationId: string,
|
|
334
343
|
turnNumber: number,
|
|
335
344
|
) => {
|
|
336
|
-
turnCommitCalls.push({ workspaceDir,
|
|
345
|
+
turnCommitCalls.push({ workspaceDir, conversationId, turnNumber });
|
|
337
346
|
if (turnCommitHangForever) {
|
|
338
347
|
// Simulate a commit that never resolves within the timeout budget
|
|
339
348
|
await new Promise<void>(() => {});
|
|
340
349
|
}
|
|
341
350
|
};
|
|
342
|
-
return
|
|
351
|
+
return conversationObj;
|
|
343
352
|
}
|
|
344
353
|
|
|
345
354
|
/**
|
|
@@ -378,7 +387,7 @@ async function waitForCondition(
|
|
|
378
387
|
|
|
379
388
|
/**
|
|
380
389
|
* Resolve the Nth pending AgentLoop.run() call. Fires the minimal events
|
|
381
|
-
* that `runAgentLoop` expects (usage + message_complete) so the
|
|
390
|
+
* that `runAgentLoop` expects (usage + message_complete) so the conversation
|
|
382
391
|
* cleanly transitions out of its processing state.
|
|
383
392
|
*/
|
|
384
393
|
function resolveRun(index: number) {
|
|
@@ -415,20 +424,20 @@ afterAll(() => {
|
|
|
415
424
|
// Tests
|
|
416
425
|
// ---------------------------------------------------------------------------
|
|
417
426
|
|
|
418
|
-
describe("
|
|
427
|
+
describe("Conversation message queue", () => {
|
|
419
428
|
beforeEach(() => {
|
|
420
429
|
pendingRuns = [];
|
|
421
430
|
});
|
|
422
431
|
|
|
423
|
-
test("second message is queued when
|
|
424
|
-
const
|
|
425
|
-
await
|
|
432
|
+
test("second message is queued when conversation is busy (does not throw)", async () => {
|
|
433
|
+
const conversation = makeConversation();
|
|
434
|
+
await conversation.loadFromDb();
|
|
426
435
|
|
|
427
436
|
const events1: ServerMessage[] = [];
|
|
428
437
|
const events2: ServerMessage[] = [];
|
|
429
438
|
|
|
430
439
|
// Start first message — this will block on AgentLoop.run
|
|
431
|
-
const p1 =
|
|
440
|
+
const p1 = conversation.processMessage(
|
|
432
441
|
"msg-1",
|
|
433
442
|
[],
|
|
434
443
|
(e) => events1.push(e),
|
|
@@ -438,11 +447,11 @@ describe("Session message queue", () => {
|
|
|
438
447
|
// Wait for the first AgentLoop.run to be registered
|
|
439
448
|
await waitForPendingRun(1);
|
|
440
449
|
|
|
441
|
-
//
|
|
442
|
-
expect(
|
|
450
|
+
// Conversation should now be processing
|
|
451
|
+
expect(conversation.isProcessing()).toBe(true);
|
|
443
452
|
|
|
444
453
|
// Enqueue second message — should NOT throw
|
|
445
|
-
const result =
|
|
454
|
+
const result = conversation.enqueueMessage(
|
|
446
455
|
"msg-2",
|
|
447
456
|
[],
|
|
448
457
|
(e) => events2.push(e),
|
|
@@ -450,7 +459,7 @@ describe("Session message queue", () => {
|
|
|
450
459
|
);
|
|
451
460
|
expect(result.queued).toBe(true);
|
|
452
461
|
expect(result.requestId).toBe("req-2");
|
|
453
|
-
expect(
|
|
462
|
+
expect(conversation.getQueueDepth()).toBe(1);
|
|
454
463
|
|
|
455
464
|
// Complete the first message
|
|
456
465
|
resolveRun(0);
|
|
@@ -471,8 +480,8 @@ describe("Session message queue", () => {
|
|
|
471
480
|
});
|
|
472
481
|
|
|
473
482
|
test("[experimental] queued messages are processed in FIFO order", async () => {
|
|
474
|
-
const
|
|
475
|
-
await
|
|
483
|
+
const conversation = makeConversation();
|
|
484
|
+
await conversation.loadFromDb();
|
|
476
485
|
|
|
477
486
|
const processedOrder: string[] = [];
|
|
478
487
|
|
|
@@ -481,7 +490,7 @@ describe("Session message queue", () => {
|
|
|
481
490
|
};
|
|
482
491
|
|
|
483
492
|
// Start first message
|
|
484
|
-
const p1 =
|
|
493
|
+
const p1 = conversation.processMessage(
|
|
485
494
|
"msg-1",
|
|
486
495
|
[],
|
|
487
496
|
makeHandler("msg-1"),
|
|
@@ -490,9 +499,9 @@ describe("Session message queue", () => {
|
|
|
490
499
|
await waitForPendingRun(1);
|
|
491
500
|
|
|
492
501
|
// Enqueue two more
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
expect(
|
|
502
|
+
conversation.enqueueMessage("msg-2", [], makeHandler("msg-2"), "req-2");
|
|
503
|
+
conversation.enqueueMessage("msg-3", [], makeHandler("msg-3"), "req-3");
|
|
504
|
+
expect(conversation.getQueueDepth()).toBe(2);
|
|
496
505
|
|
|
497
506
|
// Complete first → triggers second
|
|
498
507
|
resolveRun(0);
|
|
@@ -511,17 +520,17 @@ describe("Session message queue", () => {
|
|
|
511
520
|
});
|
|
512
521
|
|
|
513
522
|
test("message_queued and message_dequeued events are emitted", async () => {
|
|
514
|
-
const
|
|
515
|
-
await
|
|
523
|
+
const conversation = makeConversation();
|
|
524
|
+
await conversation.loadFromDb();
|
|
516
525
|
|
|
517
526
|
const events2: ServerMessage[] = [];
|
|
518
527
|
|
|
519
528
|
// Start first message
|
|
520
|
-
const p1 =
|
|
529
|
+
const p1 = conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
521
530
|
await waitForPendingRun(1);
|
|
522
531
|
|
|
523
532
|
// Enqueue second — simulating what handleUserMessage does
|
|
524
|
-
const result =
|
|
533
|
+
const result = conversation.enqueueMessage(
|
|
525
534
|
"msg-2",
|
|
526
535
|
[],
|
|
527
536
|
(e) => events2.push(e),
|
|
@@ -539,71 +548,75 @@ describe("Session message queue", () => {
|
|
|
539
548
|
expect(dequeued).toBeDefined();
|
|
540
549
|
expect(dequeued).toEqual({
|
|
541
550
|
type: "message_dequeued",
|
|
542
|
-
|
|
551
|
+
conversationId: "conv-1",
|
|
543
552
|
requestId: "req-2",
|
|
544
553
|
});
|
|
545
554
|
|
|
546
|
-
// Complete second run so the
|
|
555
|
+
// Complete second run so the conversation finishes cleanly
|
|
547
556
|
resolveRun(1);
|
|
548
557
|
await new Promise((r) => setTimeout(r, 10));
|
|
549
558
|
});
|
|
550
559
|
|
|
551
560
|
test("abort() clears the queue and sends generation_cancelled for each queued message", async () => {
|
|
552
|
-
const
|
|
553
|
-
await
|
|
561
|
+
const conversation = makeConversation();
|
|
562
|
+
await conversation.loadFromDb();
|
|
554
563
|
|
|
555
564
|
const events2: ServerMessage[] = [];
|
|
556
565
|
const events3: ServerMessage[] = [];
|
|
557
566
|
|
|
558
567
|
// Start first message
|
|
559
|
-
|
|
568
|
+
conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
560
569
|
await waitForPendingRun(1);
|
|
561
570
|
|
|
562
571
|
// Enqueue two more
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
expect(
|
|
572
|
+
conversation.enqueueMessage("msg-2", [], (e) => events2.push(e), "req-2");
|
|
573
|
+
conversation.enqueueMessage("msg-3", [], (e) => events3.push(e), "req-3");
|
|
574
|
+
expect(conversation.getQueueDepth()).toBe(2);
|
|
566
575
|
|
|
567
576
|
// Abort
|
|
568
|
-
|
|
577
|
+
conversation.abort();
|
|
569
578
|
|
|
570
579
|
// Queue should be empty
|
|
571
|
-
expect(
|
|
580
|
+
expect(conversation.getQueueDepth()).toBe(0);
|
|
572
581
|
|
|
573
|
-
// Both queued messages should receive
|
|
582
|
+
// Both queued messages should receive conversation-scoped cancellation events.
|
|
574
583
|
const cancel2 = events2.find((e) => e.type === "generation_cancelled");
|
|
575
584
|
expect(cancel2).toEqual({
|
|
576
585
|
type: "generation_cancelled",
|
|
577
|
-
|
|
586
|
+
conversationId: "conv-1",
|
|
578
587
|
});
|
|
579
588
|
|
|
580
589
|
const cancel3 = events3.find((e) => e.type === "generation_cancelled");
|
|
581
590
|
expect(cancel3).toEqual({
|
|
582
591
|
type: "generation_cancelled",
|
|
583
|
-
|
|
592
|
+
conversationId: "conv-1",
|
|
584
593
|
});
|
|
585
594
|
|
|
586
|
-
// abort() must NOT emit
|
|
595
|
+
// abort() must NOT emit conversation_error or generic error for queued discards.
|
|
587
596
|
const err2 = events2.find((e) => e.type === "error");
|
|
588
597
|
expect(err2).toBeUndefined();
|
|
589
598
|
const err3 = events3.find((e) => e.type === "error");
|
|
590
599
|
expect(err3).toBeUndefined();
|
|
591
600
|
|
|
592
|
-
const
|
|
593
|
-
|
|
601
|
+
const conversationErr2 = events2.find(
|
|
602
|
+
(e) => e.type === "conversation_error",
|
|
603
|
+
);
|
|
604
|
+
expect(conversationErr2).toBeUndefined();
|
|
594
605
|
|
|
595
|
-
const
|
|
596
|
-
|
|
606
|
+
const conversationErr3 = events3.find(
|
|
607
|
+
(e) => e.type === "conversation_error",
|
|
608
|
+
);
|
|
609
|
+
expect(conversationErr3).toBeUndefined();
|
|
597
610
|
});
|
|
598
611
|
|
|
599
|
-
test("
|
|
600
|
-
const
|
|
601
|
-
await
|
|
612
|
+
test("conversation-scoped errors emit both conversation_error and generic error", async () => {
|
|
613
|
+
const conversation = makeConversation();
|
|
614
|
+
await conversation.loadFromDb();
|
|
602
615
|
|
|
603
616
|
const events: ServerMessage[] = [];
|
|
604
617
|
|
|
605
618
|
// Start a message — blocks on AgentLoop.run
|
|
606
|
-
const p1 =
|
|
619
|
+
const p1 = conversation.processMessage(
|
|
607
620
|
"msg-1",
|
|
608
621
|
[],
|
|
609
622
|
(e) => events.push(e),
|
|
@@ -616,9 +629,9 @@ describe("Session message queue", () => {
|
|
|
616
629
|
pendingRuns[0].reject(new Error("Provider returned 500"));
|
|
617
630
|
await p1;
|
|
618
631
|
|
|
619
|
-
// Should emit
|
|
620
|
-
const
|
|
621
|
-
expect(
|
|
632
|
+
// Should emit conversation_error (typed, structured)
|
|
633
|
+
const conversationErr = events.find((e) => e.type === "conversation_error");
|
|
634
|
+
expect(conversationErr).toBeDefined();
|
|
622
635
|
|
|
623
636
|
// Should also emit generic error (callers rely on error events to detect failures)
|
|
624
637
|
const genericErr = events.find((e) => e.type === "error");
|
|
@@ -626,42 +639,42 @@ describe("Session message queue", () => {
|
|
|
626
639
|
});
|
|
627
640
|
|
|
628
641
|
test("queue depth is reported correctly as messages are added and drained", async () => {
|
|
629
|
-
const
|
|
630
|
-
await
|
|
642
|
+
const conversation = makeConversation();
|
|
643
|
+
await conversation.loadFromDb();
|
|
631
644
|
|
|
632
645
|
// Start first message
|
|
633
|
-
const p1 =
|
|
646
|
+
const p1 = conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
634
647
|
await waitForPendingRun(1);
|
|
635
648
|
|
|
636
|
-
expect(
|
|
649
|
+
expect(conversation.getQueueDepth()).toBe(0);
|
|
637
650
|
|
|
638
|
-
|
|
639
|
-
expect(
|
|
651
|
+
conversation.enqueueMessage("msg-2", [], () => {}, "req-2");
|
|
652
|
+
expect(conversation.getQueueDepth()).toBe(1);
|
|
640
653
|
|
|
641
|
-
|
|
642
|
-
expect(
|
|
654
|
+
conversation.enqueueMessage("msg-3", [], () => {}, "req-3");
|
|
655
|
+
expect(conversation.getQueueDepth()).toBe(2);
|
|
643
656
|
|
|
644
|
-
|
|
645
|
-
expect(
|
|
657
|
+
conversation.enqueueMessage("msg-4", [], () => {}, "req-4");
|
|
658
|
+
expect(conversation.getQueueDepth()).toBe(3);
|
|
646
659
|
|
|
647
660
|
// Complete first → drains one from queue
|
|
648
661
|
resolveRun(0);
|
|
649
662
|
await p1;
|
|
650
663
|
await waitForPendingRun(2);
|
|
651
664
|
|
|
652
|
-
expect(
|
|
665
|
+
expect(conversation.getQueueDepth()).toBe(2);
|
|
653
666
|
|
|
654
667
|
// Complete second → drains another
|
|
655
668
|
resolveRun(1);
|
|
656
669
|
await waitForPendingRun(3);
|
|
657
670
|
|
|
658
|
-
expect(
|
|
671
|
+
expect(conversation.getQueueDepth()).toBe(1);
|
|
659
672
|
|
|
660
673
|
// Complete third → drains last
|
|
661
674
|
resolveRun(2);
|
|
662
675
|
await waitForPendingRun(4);
|
|
663
676
|
|
|
664
|
-
expect(
|
|
677
|
+
expect(conversation.getQueueDepth()).toBe(0);
|
|
665
678
|
|
|
666
679
|
// Complete fourth (final queued message)
|
|
667
680
|
resolveRun(3);
|
|
@@ -669,15 +682,15 @@ describe("Session message queue", () => {
|
|
|
669
682
|
});
|
|
670
683
|
|
|
671
684
|
test("[experimental] drain continues after a queued message fails to persist", async () => {
|
|
672
|
-
const
|
|
673
|
-
await
|
|
685
|
+
const conversation = makeConversation();
|
|
686
|
+
await conversation.loadFromDb();
|
|
674
687
|
|
|
675
688
|
const events1: ServerMessage[] = [];
|
|
676
689
|
const events2: ServerMessage[] = [];
|
|
677
690
|
const events3: ServerMessage[] = [];
|
|
678
691
|
|
|
679
692
|
// Start first message — blocks on AgentLoop.run
|
|
680
|
-
const p1 =
|
|
693
|
+
const p1 = conversation.processMessage(
|
|
681
694
|
"msg-1",
|
|
682
695
|
[],
|
|
683
696
|
(e) => events1.push(e),
|
|
@@ -686,10 +699,10 @@ describe("Session message queue", () => {
|
|
|
686
699
|
await waitForPendingRun(1);
|
|
687
700
|
|
|
688
701
|
// Enqueue a message with empty content (will fail persistUserMessage)
|
|
689
|
-
|
|
702
|
+
conversation.enqueueMessage("", [], (e) => events2.push(e), "req-2");
|
|
690
703
|
// Enqueue a valid message after the bad one
|
|
691
|
-
|
|
692
|
-
expect(
|
|
704
|
+
conversation.enqueueMessage("msg-3", [], (e) => events3.push(e), "req-3");
|
|
705
|
+
expect(conversation.getQueueDepth()).toBe(2);
|
|
693
706
|
|
|
694
707
|
// Complete first message — triggers drain. The empty message should fail
|
|
695
708
|
// to persist, but the drain should continue to msg-3.
|
|
@@ -722,28 +735,28 @@ describe("Session message queue", () => {
|
|
|
722
735
|
// Queue policy primitives
|
|
723
736
|
// ---------------------------------------------------------------------------
|
|
724
737
|
|
|
725
|
-
describe("
|
|
738
|
+
describe("Conversation queue policy helpers", () => {
|
|
726
739
|
beforeEach(() => {
|
|
727
740
|
pendingRuns = [];
|
|
728
741
|
});
|
|
729
742
|
|
|
730
|
-
test("hasQueuedMessages() returns false on a fresh
|
|
731
|
-
const
|
|
732
|
-
await
|
|
733
|
-
expect(
|
|
743
|
+
test("hasQueuedMessages() returns false on a fresh conversation", async () => {
|
|
744
|
+
const conversation = makeConversation();
|
|
745
|
+
await conversation.loadFromDb();
|
|
746
|
+
expect(conversation.hasQueuedMessages()).toBe(false);
|
|
734
747
|
});
|
|
735
748
|
|
|
736
749
|
test("hasQueuedMessages() returns true after enqueuing while processing", async () => {
|
|
737
|
-
const
|
|
738
|
-
await
|
|
750
|
+
const conversation = makeConversation();
|
|
751
|
+
await conversation.loadFromDb();
|
|
739
752
|
|
|
740
753
|
// Start processing to make the session busy
|
|
741
|
-
|
|
754
|
+
conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
742
755
|
await waitForPendingRun(1);
|
|
743
756
|
|
|
744
757
|
// Enqueue a message while processing
|
|
745
|
-
|
|
746
|
-
expect(
|
|
758
|
+
conversation.enqueueMessage("msg-2", [], () => {}, "req-2");
|
|
759
|
+
expect(conversation.hasQueuedMessages()).toBe(true);
|
|
747
760
|
|
|
748
761
|
// Cleanup: resolve the pending run
|
|
749
762
|
resolveRun(0);
|
|
@@ -753,24 +766,24 @@ describe("Session queue policy helpers", () => {
|
|
|
753
766
|
});
|
|
754
767
|
|
|
755
768
|
test("canHandoffAtCheckpoint() returns false when not processing", async () => {
|
|
756
|
-
const
|
|
757
|
-
await
|
|
769
|
+
const conversation = makeConversation();
|
|
770
|
+
await conversation.loadFromDb();
|
|
758
771
|
|
|
759
772
|
// Not processing, no queued messages
|
|
760
|
-
expect(
|
|
773
|
+
expect(conversation.canHandoffAtCheckpoint()).toBe(false);
|
|
761
774
|
});
|
|
762
775
|
|
|
763
776
|
test("canHandoffAtCheckpoint() returns false when processing but no queued messages", async () => {
|
|
764
|
-
const
|
|
765
|
-
await
|
|
777
|
+
const conversation = makeConversation();
|
|
778
|
+
await conversation.loadFromDb();
|
|
766
779
|
|
|
767
780
|
// Start processing — but don't enqueue anything
|
|
768
|
-
|
|
781
|
+
conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
769
782
|
await waitForPendingRun(1);
|
|
770
783
|
|
|
771
|
-
expect(
|
|
772
|
-
expect(
|
|
773
|
-
expect(
|
|
784
|
+
expect(conversation.isProcessing()).toBe(true);
|
|
785
|
+
expect(conversation.hasQueuedMessages()).toBe(false);
|
|
786
|
+
expect(conversation.canHandoffAtCheckpoint()).toBe(false);
|
|
774
787
|
|
|
775
788
|
// Cleanup
|
|
776
789
|
resolveRun(0);
|
|
@@ -778,19 +791,19 @@ describe("Session queue policy helpers", () => {
|
|
|
778
791
|
});
|
|
779
792
|
|
|
780
793
|
test("canHandoffAtCheckpoint() returns true when processing and queue has messages", async () => {
|
|
781
|
-
const
|
|
782
|
-
await
|
|
794
|
+
const conversation = makeConversation();
|
|
795
|
+
await conversation.loadFromDb();
|
|
783
796
|
|
|
784
797
|
// Start processing
|
|
785
|
-
|
|
798
|
+
conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
786
799
|
await waitForPendingRun(1);
|
|
787
800
|
|
|
788
801
|
// Enqueue a message
|
|
789
|
-
|
|
802
|
+
conversation.enqueueMessage("msg-2", [], () => {}, "req-2");
|
|
790
803
|
|
|
791
|
-
expect(
|
|
792
|
-
expect(
|
|
793
|
-
expect(
|
|
804
|
+
expect(conversation.isProcessing()).toBe(true);
|
|
805
|
+
expect(conversation.hasQueuedMessages()).toBe(true);
|
|
806
|
+
expect(conversation.canHandoffAtCheckpoint()).toBe(true);
|
|
794
807
|
|
|
795
808
|
// Cleanup
|
|
796
809
|
resolveRun(0);
|
|
@@ -821,19 +834,19 @@ describe("Session queue policy helpers", () => {
|
|
|
821
834
|
// Checkpoint handoff tests
|
|
822
835
|
// ---------------------------------------------------------------------------
|
|
823
836
|
|
|
824
|
-
describe("
|
|
837
|
+
describe("Conversation checkpoint handoff", () => {
|
|
825
838
|
beforeEach(() => {
|
|
826
839
|
pendingRuns = [];
|
|
827
840
|
});
|
|
828
841
|
|
|
829
842
|
test("[experimental] onCheckpoint yields when there is a queued message", async () => {
|
|
830
|
-
const
|
|
831
|
-
await
|
|
843
|
+
const conversation = makeConversation();
|
|
844
|
+
await conversation.loadFromDb();
|
|
832
845
|
|
|
833
846
|
const events1: ServerMessage[] = [];
|
|
834
847
|
|
|
835
848
|
// Start processing first message
|
|
836
|
-
const p1 =
|
|
849
|
+
const p1 = conversation.processMessage(
|
|
837
850
|
"msg-1",
|
|
838
851
|
[],
|
|
839
852
|
(e) => events1.push(e),
|
|
@@ -842,8 +855,8 @@ describe("Session checkpoint handoff", () => {
|
|
|
842
855
|
await waitForPendingRun(1);
|
|
843
856
|
|
|
844
857
|
// Enqueue a second message while the first is processing
|
|
845
|
-
|
|
846
|
-
expect(
|
|
858
|
+
conversation.enqueueMessage("msg-2", [], () => {}, "req-2");
|
|
859
|
+
expect(conversation.hasQueuedMessages()).toBe(true);
|
|
847
860
|
|
|
848
861
|
// The pending run should have received an onCheckpoint callback.
|
|
849
862
|
// Simulate the agent loop calling it at a turn boundary.
|
|
@@ -859,7 +872,7 @@ describe("Session checkpoint handoff", () => {
|
|
|
859
872
|
// Because there is a queued message, the callback should return 'yield'
|
|
860
873
|
expect(decision).toBe("yield");
|
|
861
874
|
|
|
862
|
-
// Complete the run so the
|
|
875
|
+
// Complete the run so the conversation finishes cleanly
|
|
863
876
|
resolveRun(0);
|
|
864
877
|
await p1;
|
|
865
878
|
|
|
@@ -868,7 +881,7 @@ describe("Session checkpoint handoff", () => {
|
|
|
868
881
|
expect(handoff).toBeDefined();
|
|
869
882
|
expect(handoff).toMatchObject({
|
|
870
883
|
type: "generation_handoff",
|
|
871
|
-
|
|
884
|
+
conversationId: "conv-1",
|
|
872
885
|
requestId: "req-1",
|
|
873
886
|
queuedCount: 1,
|
|
874
887
|
});
|
|
@@ -880,14 +893,14 @@ describe("Session checkpoint handoff", () => {
|
|
|
880
893
|
});
|
|
881
894
|
|
|
882
895
|
test("onCheckpoint returns continue when queue is empty", async () => {
|
|
883
|
-
const
|
|
884
|
-
await
|
|
896
|
+
const conversation = makeConversation();
|
|
897
|
+
await conversation.loadFromDb();
|
|
885
898
|
|
|
886
899
|
// Start processing — no enqueued messages
|
|
887
|
-
const p1 =
|
|
900
|
+
const p1 = conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
888
901
|
await waitForPendingRun(1);
|
|
889
902
|
|
|
890
|
-
expect(
|
|
903
|
+
expect(conversation.hasQueuedMessages()).toBe(false);
|
|
891
904
|
|
|
892
905
|
// The pending run should have an onCheckpoint callback
|
|
893
906
|
const run = pendingRuns[0];
|
|
@@ -908,8 +921,8 @@ describe("Session checkpoint handoff", () => {
|
|
|
908
921
|
});
|
|
909
922
|
|
|
910
923
|
test("[experimental] FIFO ordering is preserved through checkpoint handoff", async () => {
|
|
911
|
-
const
|
|
912
|
-
await
|
|
924
|
+
const conversation = makeConversation();
|
|
925
|
+
await conversation.loadFromDb();
|
|
913
926
|
|
|
914
927
|
const processedOrder: string[] = [];
|
|
915
928
|
|
|
@@ -919,7 +932,7 @@ describe("Session checkpoint handoff", () => {
|
|
|
919
932
|
};
|
|
920
933
|
|
|
921
934
|
// Start first message
|
|
922
|
-
const p1 =
|
|
935
|
+
const p1 = conversation.processMessage(
|
|
923
936
|
"msg-1",
|
|
924
937
|
[],
|
|
925
938
|
makeHandler("msg-1"),
|
|
@@ -928,9 +941,9 @@ describe("Session checkpoint handoff", () => {
|
|
|
928
941
|
await waitForPendingRun(1);
|
|
929
942
|
|
|
930
943
|
// Enqueue two messages
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
expect(
|
|
944
|
+
conversation.enqueueMessage("msg-2", [], makeHandler("msg-2"), "req-2");
|
|
945
|
+
conversation.enqueueMessage("msg-3", [], makeHandler("msg-3"), "req-3");
|
|
946
|
+
expect(conversation.getQueueDepth()).toBe(2);
|
|
934
947
|
|
|
935
948
|
// Simulate the agent loop yielding at the checkpoint (first run)
|
|
936
949
|
const run0 = pendingRuns[0];
|
|
@@ -963,14 +976,14 @@ describe("Session checkpoint handoff", () => {
|
|
|
963
976
|
});
|
|
964
977
|
|
|
965
978
|
test("[experimental] active run with repeated tool turns + queued message triggers checkpoint handoff", async () => {
|
|
966
|
-
const
|
|
967
|
-
await
|
|
979
|
+
const conversation = makeConversation();
|
|
980
|
+
await conversation.loadFromDb();
|
|
968
981
|
|
|
969
982
|
const events1: ServerMessage[] = [];
|
|
970
983
|
const events2: ServerMessage[] = [];
|
|
971
984
|
|
|
972
985
|
// Start processing first message
|
|
973
|
-
const p1 =
|
|
986
|
+
const p1 = conversation.processMessage(
|
|
974
987
|
"msg-1",
|
|
975
988
|
[],
|
|
976
989
|
(e) => events1.push(e),
|
|
@@ -979,8 +992,8 @@ describe("Session checkpoint handoff", () => {
|
|
|
979
992
|
await waitForPendingRun(1);
|
|
980
993
|
|
|
981
994
|
// Enqueue a second message while the first is processing
|
|
982
|
-
|
|
983
|
-
expect(
|
|
995
|
+
conversation.enqueueMessage("msg-2", [], (e) => events2.push(e), "req-2");
|
|
996
|
+
expect(conversation.hasQueuedMessages()).toBe(true);
|
|
984
997
|
|
|
985
998
|
// Simulate tool-use turns: the agent loop calls onCheckpoint at each turn boundary.
|
|
986
999
|
// Because there is a queued message, the callback should return 'yield'.
|
|
@@ -1006,13 +1019,13 @@ describe("Session checkpoint handoff", () => {
|
|
|
1006
1019
|
expect(handoff).toBeDefined();
|
|
1007
1020
|
expect(handoff).toMatchObject({
|
|
1008
1021
|
type: "generation_handoff",
|
|
1009
|
-
|
|
1022
|
+
conversationId: "conv-1",
|
|
1010
1023
|
requestId: "req-1",
|
|
1011
1024
|
queuedCount: 1,
|
|
1012
1025
|
});
|
|
1013
1026
|
// message_complete should NOT be in events1 (handoff replaces it)
|
|
1014
1027
|
const messageComplete = events1.find(
|
|
1015
|
-
(e) => e.type === "message_complete" && "
|
|
1028
|
+
(e) => e.type === "message_complete" && "conversationId" in e,
|
|
1016
1029
|
);
|
|
1017
1030
|
expect(messageComplete).toBeUndefined();
|
|
1018
1031
|
|
|
@@ -1026,8 +1039,8 @@ describe("Session checkpoint handoff", () => {
|
|
|
1026
1039
|
});
|
|
1027
1040
|
|
|
1028
1041
|
test("queued messages still drain FIFO under multiple handoffs", async () => {
|
|
1029
|
-
const
|
|
1030
|
-
await
|
|
1042
|
+
const conversation = makeConversation();
|
|
1043
|
+
await conversation.loadFromDb();
|
|
1031
1044
|
|
|
1032
1045
|
const dequeueOrder: string[] = [];
|
|
1033
1046
|
|
|
@@ -1037,7 +1050,7 @@ describe("Session checkpoint handoff", () => {
|
|
|
1037
1050
|
};
|
|
1038
1051
|
|
|
1039
1052
|
// Start processing message A
|
|
1040
|
-
const pA =
|
|
1053
|
+
const pA = conversation.processMessage(
|
|
1041
1054
|
"msg-A",
|
|
1042
1055
|
[],
|
|
1043
1056
|
(e) => eventsA.push(e),
|
|
@@ -1046,10 +1059,10 @@ describe("Session checkpoint handoff", () => {
|
|
|
1046
1059
|
await waitForPendingRun(1);
|
|
1047
1060
|
|
|
1048
1061
|
// Enqueue messages B, C, D
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
expect(
|
|
1062
|
+
conversation.enqueueMessage("msg-B", [], makeHandler("B"), "req-B");
|
|
1063
|
+
conversation.enqueueMessage("msg-C", [], makeHandler("C"), "req-C");
|
|
1064
|
+
conversation.enqueueMessage("msg-D", [], makeHandler("D"), "req-D");
|
|
1065
|
+
expect(conversation.getQueueDepth()).toBe(3);
|
|
1053
1066
|
|
|
1054
1067
|
// Handoff from A -> B
|
|
1055
1068
|
const runA = pendingRuns[0];
|
|
@@ -1117,15 +1130,15 @@ describe("Session checkpoint handoff", () => {
|
|
|
1117
1130
|
});
|
|
1118
1131
|
|
|
1119
1132
|
test("[experimental] queued persistence failure does not strand later messages", async () => {
|
|
1120
|
-
const
|
|
1121
|
-
await
|
|
1133
|
+
const conversation = makeConversation();
|
|
1134
|
+
await conversation.loadFromDb();
|
|
1122
1135
|
|
|
1123
1136
|
const eventsA: ServerMessage[] = [];
|
|
1124
1137
|
const eventsB: ServerMessage[] = [];
|
|
1125
1138
|
const eventsC: ServerMessage[] = [];
|
|
1126
1139
|
|
|
1127
1140
|
// Start processing message A
|
|
1128
|
-
const pA =
|
|
1141
|
+
const pA = conversation.processMessage(
|
|
1129
1142
|
"msg-A",
|
|
1130
1143
|
[],
|
|
1131
1144
|
(e) => eventsA.push(e),
|
|
@@ -1134,9 +1147,9 @@ describe("Session checkpoint handoff", () => {
|
|
|
1134
1147
|
await waitForPendingRun(1);
|
|
1135
1148
|
|
|
1136
1149
|
// Enqueue B (empty content — will fail to persist) and C (valid)
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
expect(
|
|
1150
|
+
conversation.enqueueMessage("", [], (e) => eventsB.push(e), "req-B");
|
|
1151
|
+
conversation.enqueueMessage("msg-C", [], (e) => eventsC.push(e), "req-C");
|
|
1152
|
+
expect(conversation.getQueueDepth()).toBe(2);
|
|
1140
1153
|
|
|
1141
1154
|
// Complete message A — triggers drain. B should fail, C should proceed.
|
|
1142
1155
|
resolveRun(0);
|
|
@@ -1164,11 +1177,11 @@ describe("Session checkpoint handoff", () => {
|
|
|
1164
1177
|
});
|
|
1165
1178
|
|
|
1166
1179
|
test("onCheckpoint callback is passed to both initial and retry runs", async () => {
|
|
1167
|
-
const
|
|
1168
|
-
await
|
|
1180
|
+
const conversation = makeConversation();
|
|
1181
|
+
await conversation.loadFromDb();
|
|
1169
1182
|
|
|
1170
1183
|
// Start processing
|
|
1171
|
-
const p1 =
|
|
1184
|
+
const p1 = conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
1172
1185
|
await waitForPendingRun(1);
|
|
1173
1186
|
|
|
1174
1187
|
// The first run should have onCheckpoint
|
|
@@ -1202,17 +1215,17 @@ describe("Session checkpoint handoff", () => {
|
|
|
1202
1215
|
// Usage requestId correlation
|
|
1203
1216
|
// ---------------------------------------------------------------------------
|
|
1204
1217
|
|
|
1205
|
-
describe("
|
|
1218
|
+
describe("Conversation usage requestId correlation", () => {
|
|
1206
1219
|
beforeEach(() => {
|
|
1207
1220
|
pendingRuns = [];
|
|
1208
1221
|
capturedUsageEvents = [];
|
|
1209
1222
|
});
|
|
1210
1223
|
|
|
1211
1224
|
test("usage events recorded during a request carry that request ID", async () => {
|
|
1212
|
-
const
|
|
1213
|
-
await
|
|
1225
|
+
const conversation = makeConversation();
|
|
1226
|
+
await conversation.loadFromDb();
|
|
1214
1227
|
|
|
1215
|
-
const p1 =
|
|
1228
|
+
const p1 = conversation.processMessage("msg-1", [], () => {}, "req-42");
|
|
1216
1229
|
await waitForPendingRun(1);
|
|
1217
1230
|
|
|
1218
1231
|
// Complete the run — this triggers recordUsage with the request's ID
|
|
@@ -1239,19 +1252,19 @@ describe("Terminal trace events on rejection/failure", () => {
|
|
|
1239
1252
|
|
|
1240
1253
|
test("queued persist failure emits request_error trace", async () => {
|
|
1241
1254
|
const traceEvents: ServerMessage[] = [];
|
|
1242
|
-
const
|
|
1255
|
+
const conversation = makeConversation((msg) => {
|
|
1243
1256
|
if ("type" in msg && msg.type === "trace_event") traceEvents.push(msg);
|
|
1244
1257
|
});
|
|
1245
|
-
await
|
|
1258
|
+
await conversation.loadFromDb();
|
|
1246
1259
|
|
|
1247
1260
|
// Start first message
|
|
1248
|
-
const p1 =
|
|
1261
|
+
const p1 = conversation.processMessage("msg-1", [], () => {}, "req-1");
|
|
1249
1262
|
await waitForPendingRun(1);
|
|
1250
1263
|
|
|
1251
1264
|
// Enqueue empty content (will fail persistUserMessage)
|
|
1252
|
-
|
|
1265
|
+
conversation.enqueueMessage("", [], () => {}, "req-bad");
|
|
1253
1266
|
// Enqueue valid message so drain continues
|
|
1254
|
-
|
|
1267
|
+
conversation.enqueueMessage("msg-3", [], () => {}, "req-3");
|
|
1255
1268
|
|
|
1256
1269
|
// Complete first — triggers drain, empty msg fails persist
|
|
1257
1270
|
resolveRun(0);
|
|
@@ -1278,7 +1291,7 @@ describe("Terminal trace events on rejection/failure", () => {
|
|
|
1278
1291
|
// Host attachment approval tests
|
|
1279
1292
|
// ---------------------------------------------------------------------------
|
|
1280
1293
|
|
|
1281
|
-
describe("
|
|
1294
|
+
describe("Conversation host attachment directives", () => {
|
|
1282
1295
|
beforeEach(() => {
|
|
1283
1296
|
pendingRuns = [];
|
|
1284
1297
|
});
|
|
@@ -1290,10 +1303,10 @@ describe("Session host attachment directives", () => {
|
|
|
1290
1303
|
try {
|
|
1291
1304
|
const clientEvents: ServerMessage[] = [];
|
|
1292
1305
|
const events: ServerMessage[] = [];
|
|
1293
|
-
const
|
|
1294
|
-
await
|
|
1306
|
+
const conversation = makeConversation((msg) => clientEvents.push(msg));
|
|
1307
|
+
await conversation.loadFromDb();
|
|
1295
1308
|
|
|
1296
|
-
const p1 =
|
|
1309
|
+
const p1 = conversation.processMessage(
|
|
1297
1310
|
"msg-1",
|
|
1298
1311
|
[],
|
|
1299
1312
|
(e) => events.push(e),
|
|
@@ -1328,16 +1341,18 @@ describe("Session host attachment directives", () => {
|
|
|
1328
1341
|
(e) => e.type === "confirmation_request",
|
|
1329
1342
|
);
|
|
1330
1343
|
expect(confirmation).toBeDefined();
|
|
1331
|
-
|
|
1344
|
+
conversation.handleConfirmationResponse(
|
|
1332
1345
|
(confirmation as { requestId: string }).requestId,
|
|
1333
1346
|
"allow",
|
|
1334
1347
|
);
|
|
1335
1348
|
|
|
1336
1349
|
await p1;
|
|
1337
1350
|
|
|
1338
|
-
expect(
|
|
1339
|
-
expect(
|
|
1340
|
-
|
|
1351
|
+
expect(conversation.lastAssistantAttachments).toHaveLength(1);
|
|
1352
|
+
expect(conversation.lastAssistantAttachments[0].sourceType).toBe(
|
|
1353
|
+
"host_file",
|
|
1354
|
+
);
|
|
1355
|
+
expect(conversation.lastAttachmentWarnings).toHaveLength(0);
|
|
1341
1356
|
|
|
1342
1357
|
const completion = events.find((e) => e.type === "message_complete");
|
|
1343
1358
|
expect(completion).toBeDefined();
|
|
@@ -1353,10 +1368,10 @@ describe("Session host attachment directives", () => {
|
|
|
1353
1368
|
try {
|
|
1354
1369
|
const clientEvents: ServerMessage[] = [];
|
|
1355
1370
|
const events: ServerMessage[] = [];
|
|
1356
|
-
const
|
|
1357
|
-
await
|
|
1371
|
+
const conversation = makeConversation((msg) => clientEvents.push(msg));
|
|
1372
|
+
await conversation.loadFromDb();
|
|
1358
1373
|
|
|
1359
|
-
const p1 =
|
|
1374
|
+
const p1 = conversation.processMessage(
|
|
1360
1375
|
"msg-1",
|
|
1361
1376
|
[],
|
|
1362
1377
|
(e) => events.push(e),
|
|
@@ -1391,16 +1406,16 @@ describe("Session host attachment directives", () => {
|
|
|
1391
1406
|
(e) => e.type === "confirmation_request",
|
|
1392
1407
|
);
|
|
1393
1408
|
expect(confirmation).toBeDefined();
|
|
1394
|
-
|
|
1409
|
+
conversation.handleConfirmationResponse(
|
|
1395
1410
|
(confirmation as { requestId: string }).requestId,
|
|
1396
1411
|
"deny",
|
|
1397
1412
|
);
|
|
1398
1413
|
|
|
1399
1414
|
await p1;
|
|
1400
1415
|
|
|
1401
|
-
expect(
|
|
1416
|
+
expect(conversation.lastAssistantAttachments).toHaveLength(0);
|
|
1402
1417
|
expect(
|
|
1403
|
-
|
|
1418
|
+
conversation.lastAttachmentWarnings.some((w) =>
|
|
1404
1419
|
w.includes("access denied by user"),
|
|
1405
1420
|
),
|
|
1406
1421
|
).toBe(true);
|
|
@@ -1423,17 +1438,17 @@ describe("Session host attachment directives", () => {
|
|
|
1423
1438
|
// Attachment payload emission tests
|
|
1424
1439
|
// ---------------------------------------------------------------------------
|
|
1425
1440
|
|
|
1426
|
-
describe("
|
|
1441
|
+
describe("Conversation attachment event payloads", () => {
|
|
1427
1442
|
beforeEach(() => {
|
|
1428
1443
|
pendingRuns = [];
|
|
1429
1444
|
});
|
|
1430
1445
|
|
|
1431
1446
|
test("message_complete includes assistant attachments", async () => {
|
|
1432
1447
|
const events: ServerMessage[] = [];
|
|
1433
|
-
const
|
|
1434
|
-
await
|
|
1448
|
+
const conversation = makeConversation();
|
|
1449
|
+
await conversation.loadFromDb();
|
|
1435
1450
|
|
|
1436
|
-
const p1 =
|
|
1451
|
+
const p1 = conversation.processMessage(
|
|
1437
1452
|
"msg-1",
|
|
1438
1453
|
[],
|
|
1439
1454
|
(e) => events.push(e),
|
|
@@ -1487,10 +1502,10 @@ describe("Session attachment event payloads", () => {
|
|
|
1487
1502
|
|
|
1488
1503
|
test("generation_handoff includes assistant attachments", async () => {
|
|
1489
1504
|
const events1: ServerMessage[] = [];
|
|
1490
|
-
const
|
|
1491
|
-
await
|
|
1505
|
+
const conversation = makeConversation();
|
|
1506
|
+
await conversation.loadFromDb();
|
|
1492
1507
|
|
|
1493
|
-
const p1 =
|
|
1508
|
+
const p1 = conversation.processMessage(
|
|
1494
1509
|
"msg-1",
|
|
1495
1510
|
[],
|
|
1496
1511
|
(e) => events1.push(e),
|
|
@@ -1499,7 +1514,7 @@ describe("Session attachment event payloads", () => {
|
|
|
1499
1514
|
await waitForPendingRun(1);
|
|
1500
1515
|
|
|
1501
1516
|
// Queue a second message so the first run yields via checkpoint handoff.
|
|
1502
|
-
|
|
1517
|
+
conversation.enqueueMessage("msg-2", [], () => {}, "req-2");
|
|
1503
1518
|
|
|
1504
1519
|
const run = pendingRuns[0];
|
|
1505
1520
|
expect(run.onCheckpoint).toBeDefined();
|
|
@@ -1560,7 +1575,7 @@ describe("Session attachment event payloads", () => {
|
|
|
1560
1575
|
});
|
|
1561
1576
|
|
|
1562
1577
|
// ---------------------------------------------------------------------------
|
|
1563
|
-
// Regression: cancel semantics +
|
|
1578
|
+
// Regression: cancel semantics + conversation/global error channel split
|
|
1564
1579
|
// ---------------------------------------------------------------------------
|
|
1565
1580
|
|
|
1566
1581
|
describe("Regression: cancel semantics and error channel split", () => {
|
|
@@ -1568,13 +1583,13 @@ describe("Regression: cancel semantics and error channel split", () => {
|
|
|
1568
1583
|
pendingRuns = [];
|
|
1569
1584
|
});
|
|
1570
1585
|
|
|
1571
|
-
test("user cancellation emits generation_cancelled, never
|
|
1586
|
+
test("user cancellation emits generation_cancelled, never conversation_error", async () => {
|
|
1572
1587
|
const msgEvents: ServerMessage[] = [];
|
|
1573
|
-
const
|
|
1574
|
-
await
|
|
1588
|
+
const conversation = makeConversation();
|
|
1589
|
+
await conversation.loadFromDb();
|
|
1575
1590
|
|
|
1576
1591
|
// Start processing a message — collect events from the per-message callback
|
|
1577
|
-
const p1 =
|
|
1592
|
+
const p1 = conversation.processMessage(
|
|
1578
1593
|
"msg-1",
|
|
1579
1594
|
[],
|
|
1580
1595
|
(e) => msgEvents.push(e),
|
|
@@ -1583,7 +1598,7 @@ describe("Regression: cancel semantics and error channel split", () => {
|
|
|
1583
1598
|
await waitForPendingRun(1);
|
|
1584
1599
|
|
|
1585
1600
|
// User cancels — sets the abort signal
|
|
1586
|
-
|
|
1601
|
+
conversation.abort();
|
|
1587
1602
|
|
|
1588
1603
|
// Resolve the pending run so the abort-check path fires
|
|
1589
1604
|
resolveRun(0);
|
|
@@ -1595,18 +1610,20 @@ describe("Regression: cancel semantics and error channel split", () => {
|
|
|
1595
1610
|
);
|
|
1596
1611
|
expect(cancelEvent).toBeDefined();
|
|
1597
1612
|
|
|
1598
|
-
//
|
|
1599
|
-
const
|
|
1600
|
-
|
|
1613
|
+
// conversation_error must never appear on cancel
|
|
1614
|
+
const conversationErr = msgEvents.find(
|
|
1615
|
+
(e) => e.type === "conversation_error",
|
|
1616
|
+
);
|
|
1617
|
+
expect(conversationErr).toBeUndefined();
|
|
1601
1618
|
});
|
|
1602
1619
|
|
|
1603
1620
|
test("post-processing failure still attempts turn-boundary commit", async () => {
|
|
1604
1621
|
const events: ServerMessage[] = [];
|
|
1605
|
-
const
|
|
1606
|
-
await
|
|
1622
|
+
const conversation = makeConversation();
|
|
1623
|
+
await conversation.loadFromDb();
|
|
1607
1624
|
linkAttachmentShouldThrow = true;
|
|
1608
1625
|
|
|
1609
|
-
const p1 =
|
|
1626
|
+
const p1 = conversation.processMessage(
|
|
1610
1627
|
"msg-1",
|
|
1611
1628
|
[],
|
|
1612
1629
|
(e) => events.push(e),
|
|
@@ -1644,19 +1661,19 @@ describe("Regression: cancel semantics and error channel split", () => {
|
|
|
1644
1661
|
expect(turnCommitCalls).toHaveLength(1);
|
|
1645
1662
|
expect(turnCommitCalls[0]).toEqual({
|
|
1646
1663
|
workspaceDir: "/tmp",
|
|
1647
|
-
|
|
1664
|
+
conversationId: "conv-1",
|
|
1648
1665
|
turnNumber: 1,
|
|
1649
1666
|
});
|
|
1650
1667
|
const err = events.find((e) => e.type === "error");
|
|
1651
1668
|
expect(err).toBeDefined();
|
|
1652
1669
|
});
|
|
1653
1670
|
|
|
1654
|
-
test("provider failure during processing emits both
|
|
1671
|
+
test("provider failure during processing emits both conversation_error and generic error", async () => {
|
|
1655
1672
|
const allEvents: ServerMessage[] = [];
|
|
1656
|
-
const
|
|
1657
|
-
await
|
|
1673
|
+
const conversation = makeConversation();
|
|
1674
|
+
await conversation.loadFromDb();
|
|
1658
1675
|
|
|
1659
|
-
const p1 =
|
|
1676
|
+
const p1 = conversation.processMessage(
|
|
1660
1677
|
"msg-1",
|
|
1661
1678
|
[],
|
|
1662
1679
|
(e) => allEvents.push(e),
|
|
@@ -1668,22 +1685,24 @@ describe("Regression: cancel semantics and error channel split", () => {
|
|
|
1668
1685
|
pendingRuns[0].reject(new Error("Connection refused"));
|
|
1669
1686
|
await p1;
|
|
1670
1687
|
|
|
1671
|
-
// Should get
|
|
1672
|
-
const
|
|
1673
|
-
|
|
1688
|
+
// Should get conversation_error (structured)
|
|
1689
|
+
const conversationErr = allEvents.find(
|
|
1690
|
+
(e) => e.type === "conversation_error",
|
|
1691
|
+
);
|
|
1692
|
+
expect(conversationErr).toBeDefined();
|
|
1674
1693
|
|
|
1675
1694
|
// Should also get generic error
|
|
1676
1695
|
const genericErr = allEvents.find((e) => e.type === "error");
|
|
1677
1696
|
expect(genericErr).toBeDefined();
|
|
1678
1697
|
});
|
|
1679
1698
|
|
|
1680
|
-
test("cancel after queued messages produces no
|
|
1681
|
-
const
|
|
1682
|
-
await
|
|
1699
|
+
test("cancel after queued messages produces no conversation_error for any queued entry", async () => {
|
|
1700
|
+
const conversation = makeConversation();
|
|
1701
|
+
await conversation.loadFromDb();
|
|
1683
1702
|
|
|
1684
1703
|
const eventsPerMsg: ServerMessage[][] = [[], [], []];
|
|
1685
1704
|
|
|
1686
|
-
|
|
1705
|
+
conversation.processMessage(
|
|
1687
1706
|
"msg-1",
|
|
1688
1707
|
[],
|
|
1689
1708
|
(e) => eventsPerMsg[0].push(e),
|
|
@@ -1691,31 +1710,33 @@ describe("Regression: cancel semantics and error channel split", () => {
|
|
|
1691
1710
|
);
|
|
1692
1711
|
await waitForPendingRun(1);
|
|
1693
1712
|
|
|
1694
|
-
|
|
1713
|
+
conversation.enqueueMessage(
|
|
1695
1714
|
"msg-2",
|
|
1696
1715
|
[],
|
|
1697
1716
|
(e) => eventsPerMsg[1].push(e),
|
|
1698
1717
|
"req-2",
|
|
1699
1718
|
);
|
|
1700
|
-
|
|
1719
|
+
conversation.enqueueMessage(
|
|
1701
1720
|
"msg-3",
|
|
1702
1721
|
[],
|
|
1703
1722
|
(e) => eventsPerMsg[2].push(e),
|
|
1704
1723
|
"req-3",
|
|
1705
1724
|
);
|
|
1706
1725
|
|
|
1707
|
-
|
|
1726
|
+
conversation.abort();
|
|
1708
1727
|
|
|
1709
|
-
// No queued message should have received
|
|
1728
|
+
// No queued message should have received conversation_error
|
|
1710
1729
|
for (const events of eventsPerMsg) {
|
|
1711
|
-
const
|
|
1712
|
-
|
|
1730
|
+
const conversationErr = events.find(
|
|
1731
|
+
(e) => e.type === "conversation_error",
|
|
1732
|
+
);
|
|
1733
|
+
expect(conversationErr).toBeUndefined();
|
|
1713
1734
|
}
|
|
1714
1735
|
});
|
|
1715
1736
|
|
|
1716
1737
|
test("commitTurnChanges never resolving within budget -> turn still completes and drains queue", async () => {
|
|
1717
|
-
const
|
|
1718
|
-
await
|
|
1738
|
+
const conversation = makeConversation();
|
|
1739
|
+
await conversation.loadFromDb();
|
|
1719
1740
|
|
|
1720
1741
|
turnCommitHangForever = true;
|
|
1721
1742
|
|
|
@@ -1724,7 +1745,7 @@ describe("Regression: cancel semantics and error channel split", () => {
|
|
|
1724
1745
|
const events2: ServerMessage[] = [];
|
|
1725
1746
|
|
|
1726
1747
|
// Start first message (promise intentionally not awaited — we test queue drain behavior)
|
|
1727
|
-
const _p1 =
|
|
1748
|
+
const _p1 = conversation.processMessage(
|
|
1728
1749
|
"msg-1",
|
|
1729
1750
|
[],
|
|
1730
1751
|
(e) => events1.push(e),
|
|
@@ -1733,7 +1754,7 @@ describe("Regression: cancel semantics and error channel split", () => {
|
|
|
1733
1754
|
await waitForPendingRun(1);
|
|
1734
1755
|
|
|
1735
1756
|
// Enqueue a second message while the first is processing
|
|
1736
|
-
|
|
1757
|
+
conversation.enqueueMessage("msg-2", [], (e) => events2.push(e), "req-2");
|
|
1737
1758
|
|
|
1738
1759
|
// Complete the first agent loop run
|
|
1739
1760
|
resolveRun(0);
|