@vellumai/assistant 0.4.55 → 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__/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 +3 -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 +23 -15
- 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 +451 -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 -1
- 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 +173 -232
- 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 +1 -5
- 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} +82 -28
- 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 +4 -4
- 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 +82 -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
package/ARCHITECTURE.md
CHANGED
|
@@ -144,23 +144,23 @@ In addition to persistent trust rules (`always_allow` / `always_deny`), the appr
|
|
|
144
144
|
|
|
145
145
|
**Two modes:**
|
|
146
146
|
|
|
147
|
-
1. **`
|
|
147
|
+
1. **`allow_conversation`** — Auto-approve all tool confirmations for the remainder of the current conversation. The override persists until the session ends, the conversation is closed, or the mode is explicitly cleared.
|
|
148
148
|
2. **`allow_10m`** — Auto-approve all tool confirmations for 10 minutes (configurable). The override expires lazily on the next read after the TTL elapses — no background sweep runs.
|
|
149
149
|
|
|
150
|
-
**Session-scoped, in-memory only:** Overrides are keyed by `conversationId` and stored in an in-memory `Map` inside `
|
|
150
|
+
**Session-scoped, in-memory only:** Overrides are keyed by `conversationId` and stored in an in-memory `Map` inside `conversation-approval-overrides.ts`. They do not survive daemon restarts, which is intentional — temporary approvals should not outlive the session that created them.
|
|
151
151
|
|
|
152
152
|
**Integration with the permission pipeline:** The permission checker (`src/tools/permission-checker.ts`) checks for an active temporary override via `getEffectiveMode()` before prompting the user. If an active override exists for the current conversation, the confirmation is auto-approved without surfacing a prompt. This check runs after persistent trust rules, so a persistent `deny` rule still takes precedence.
|
|
153
153
|
|
|
154
|
-
**No persistent side effects:** Temporary modes do not write to `trust.json` or create persistent trust rules. They are purely ephemeral. The `buildDecisionActions()` function in `guardian-decision-types.ts` controls whether temporary options (`allow_10m`, `
|
|
154
|
+
**No persistent side effects:** Temporary modes do not write to `trust.json` or create persistent trust rules. They are purely ephemeral. The `buildDecisionActions()` function in `guardian-decision-types.ts` controls whether temporary options (`allow_10m`, `allow_conversation`) are surfaced in the approval prompt UI, gated by the `temporaryOptionsAvailable` flag.
|
|
155
155
|
|
|
156
156
|
**Key source files:**
|
|
157
157
|
|
|
158
|
-
| File
|
|
159
|
-
|
|
|
160
|
-
| `src/runtime/
|
|
161
|
-
| `src/permissions/types.ts`
|
|
162
|
-
| `src/runtime/guardian-decision-types.ts`
|
|
163
|
-
| `src/tools/permission-checker.ts`
|
|
158
|
+
| File | Purpose |
|
|
159
|
+
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
|
|
160
|
+
| `src/runtime/conversation-approval-overrides.ts` | In-memory store: `setConversationMode`, `setTimedMode`, `getEffectiveMode`, `clearMode`, `hasActiveOverride`, `clearAll` |
|
|
161
|
+
| `src/permissions/types.ts` | `UserDecision` type (includes `allow_10m`, `allow_conversation`, `temporary_override`), `isAllowDecision()` helper |
|
|
162
|
+
| `src/runtime/guardian-decision-types.ts` | `buildDecisionActions()` — controls which temporary options appear in approval prompts |
|
|
163
|
+
| `src/tools/permission-checker.ts` | Permission pipeline integration — checks temporary overrides before prompting |
|
|
164
164
|
|
|
165
165
|
### Canonical Guardian Request System
|
|
166
166
|
|
|
@@ -176,7 +176,7 @@ The canonical guardian request system provides a channel-agnostic, unified domai
|
|
|
176
176
|
|
|
177
177
|
4. **Deterministic API (prompt listing and decision endpoints):** Desktop clients and API consumers use `GET /v1/guardian-actions/pending` and `POST /v1/guardian-actions/decision` (HTTP). These endpoints surface canonical requests alongside legacy pending interactions and channel approval records, with deduplication to avoid double-rendering.
|
|
178
178
|
|
|
179
|
-
5. **Buttons first, text fallback:** All request kinds (`tool_approval`, `pending_question`, `access_request`) are rendered as structured button cards when displayed in macOS/iOS guardian
|
|
179
|
+
5. **Buttons first, text fallback:** All request kinds (`tool_approval`, `pending_question`, `access_request`) are rendered as structured button cards when displayed in macOS/iOS guardian conversations. Each prompt also embeds deterministic text fallback instructions (request-code-based approve/reject directives, and for `access_request` the "open invite flow" phrase) so text-based channels and manual fallback always work. Code-only messages (just a request code without decision text) return clarification instead of auto-approving. Disambiguation with multiple pending requests stays fail-closed — no auto-resolve when the target is ambiguous.
|
|
180
180
|
|
|
181
181
|
**Resolver registry:** Kind-specific resolvers (`src/approvals/guardian-request-resolvers.ts`) handle side effects after CAS resolution. Built-in resolvers: `tool_approval` (channel/desktop approval path), `pending_question` (voice call question path), and `access_request` (trusted-contact verification session creation). New request kinds register resolvers without touching the core primitive.
|
|
182
182
|
|
|
@@ -273,7 +273,7 @@ When a voice call's ASK_GUARDIAN consultation times out before the guardian resp
|
|
|
273
273
|
[completed] or [failed] (terminal)
|
|
274
274
|
```
|
|
275
275
|
|
|
276
|
-
**Generated messaging requirement:** All user-facing copy in the guardian timeout/follow-up path is generated through the `guardian-action-message-composer.ts` composition system, which uses a 2-tier priority chain: (1) daemon-injected LLM generator for natural, varied text; (2) deterministic fallback templates for reliability. No hardcoded user-facing strings exist in the flow files (call-controller, inbound-message-handler,
|
|
276
|
+
**Generated messaging requirement:** All user-facing copy in the guardian timeout/follow-up path is generated through the `guardian-action-message-composer.ts` composition system, which uses a 2-tier priority chain: (1) daemon-injected LLM generator for natural, varied text; (2) deterministic fallback templates for reliability. No hardcoded user-facing strings exist in the flow files (call-controller, inbound-message-handler, conversation-process) outside of internal log messages and LLM-instruction prompts. A guard test (`guardian-action-no-hardcoded-copy.test.ts`) enforces this invariant.
|
|
277
277
|
|
|
278
278
|
**Callback branch:** When the conversation engine classifies the guardian's intent as `call_back`, the executor starts an outbound call to the counterparty with context about the guardian's answer. The counterparty phone number is resolved from the original call session by call direction (inbound: `fromNumber`; outbound: `toNumber`).
|
|
279
279
|
|
|
@@ -288,7 +288,7 @@ When a voice call's ASK_GUARDIAN consultation times out before the guardian resp
|
|
|
288
288
|
| `src/daemon/guardian-action-generators.ts` | Daemon-injected generator factories: `createGuardianActionCopyGenerator` (latency-optimized text rewriting) and `createGuardianFollowUpConversationGenerator` (tool-calling intent classification) |
|
|
289
289
|
| `src/calls/call-controller.ts` | Voice timeout handling: marks requests as timed out, sends expiry notices, injects `[GUARDIAN_TIMEOUT]` instruction for generated voice response |
|
|
290
290
|
| `src/runtime/routes/inbound-message-handler.ts` | Late reply interception for Telegram channels: matches late answers to expired requests, routes follow-up conversation turns, dispatches actions |
|
|
291
|
-
| `src/daemon/
|
|
291
|
+
| `src/daemon/conversation-process.ts` | Late reply interception for mac channel: same logic as inbound-message-handler but using conversation-ID-based delivery lookup |
|
|
292
292
|
| `src/calls/guardian-action-sweep.ts` | Periodic sweep for stale pending requests; sends expiry notices to guardian destinations |
|
|
293
293
|
| `src/memory/migrations/030-guardian-action-followup.ts` | Schema migration adding follow-up columns (`followup_state`, `late_answer_text`, `late_answered_at`, `followup_action`, `followup_completed_at`) |
|
|
294
294
|
|
|
@@ -617,7 +617,7 @@ Release-driven update notification system that surfaces release notes to the ass
|
|
|
617
617
|
|
|
618
618
|
The assistant feature-flag resolver (`src/config/assistant-feature-flags.ts`) is the canonical module for determining whether an assistant feature flag is enabled. It loads default values from the unified registry at `meta/feature-flags/feature-flag-registry.json` (bundled copy at `src/config/feature-flag-registry.json`) and resolves the effective state for each declared assistant-scope flag. Assistant feature flags are declaration-driven assistant-scoped booleans that can gate any assistant behavior; skill availability is one consumer.
|
|
619
619
|
|
|
620
|
-
**Canonical key format:** `feature_flags.<flag_id>.enabled` (e.g., `feature_flags.
|
|
620
|
+
**Canonical key format:** `feature_flags.<flag_id>.enabled` (e.g., `feature_flags.contacts.enabled`).
|
|
621
621
|
|
|
622
622
|
**Resolution priority** (highest wins):
|
|
623
623
|
|
|
@@ -634,14 +634,14 @@ The assistant feature-flag resolver (`src/config/assistant-feature-flags.ts`) is
|
|
|
634
634
|
|
|
635
635
|
**Skill-gating guarantee:** Skill feature-flag gating is **opt-in**: only skills whose SKILL.md frontmatter contains a `featureFlag` field are gated. Skills without the field are always available regardless of feature flag state. For skills that declare a `featureFlag`, when the corresponding flag is OFF the skill is unavailable everywhere — it cannot appear in client UIs, model context, or runtime tool execution. This is enforced at six independent points:
|
|
636
636
|
|
|
637
|
-
| Enforcement Point | Module
|
|
638
|
-
| ---------------------------------- |
|
|
639
|
-
| **1. Client skill list** | `resolveSkillStates()` in `config/skill-state.ts`
|
|
640
|
-
| **2. System prompt skill catalog** | `appendSkillsCatalog()` in `prompts/system-prompt.ts`
|
|
641
|
-
| **3. `skill_load` tool** | `executeSkillLoad()` in `tools/skills/load.ts`
|
|
642
|
-
| **4. Runtime tool projection** | `projectSkillTools()` in `daemon/
|
|
643
|
-
| **5. Included child skills** | `executeSkillLoad()` in `tools/skills/load.ts`
|
|
644
|
-
| **6. Skill install gate** | `installSkill()` in `daemon/handlers/skills.ts`
|
|
637
|
+
| Enforcement Point | Module | Effect |
|
|
638
|
+
| ---------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
639
|
+
| **1. Client skill list** | `resolveSkillStates()` in `config/skill-state.ts` | Skills with flag OFF are excluded from the resolved list returned to clients (macOS skill list, settings UI). The skill never appears in the client. |
|
|
640
|
+
| **2. System prompt skill catalog** | `appendSkillsCatalog()` in `prompts/system-prompt.ts` | The model-visible `## Skills Catalog` section in the system prompt filters out flagged-off skills. The model cannot see or reference them. |
|
|
641
|
+
| **3. `skill_load` tool** | `executeSkillLoad()` in `tools/skills/load.ts` | If the model attempts to load a flagged-off skill by name, the tool returns an error: `"skill is currently unavailable (disabled by feature flag)"`. |
|
|
642
|
+
| **4. Runtime tool projection** | `projectSkillTools()` in `daemon/conversation-skill-tools.ts` | Even if a skill was previously active in a session (has `<loaded_skill>` markers in history), the per-turn projection drops it when the flag is OFF. Already-registered tools are unregistered. |
|
|
643
|
+
| **5. Included child skills** | `executeSkillLoad()` in `tools/skills/load.ts` | When a parent skill includes children via the `includes` directive, each child is independently checked against its feature flag. Flagged-off children are silently excluded from the loaded skill content. |
|
|
644
|
+
| **6. Skill install gate** | `installSkill()` in `daemon/handlers/skills.ts` | When a client requests skill installation, the function checks the skill's feature flag before proceeding. If the flag is OFF, the install is rejected with an error. |
|
|
645
645
|
|
|
646
646
|
All six enforcement points derive the flag key via `skillFlagKey(skill)` — which returns `undefined` for ungated skills, short-circuiting the check — and then call `isAssistantFeatureFlagEnabled(flagKey, config)` for consistency.
|
|
647
647
|
|
|
@@ -655,7 +655,7 @@ All six enforcement points derive the flag key via `skillFlagKey(skill)` — whi
|
|
|
655
655
|
| `src/config/skill-state.ts` | `skillFlagKey(skill)` — returns canonical flag key for skills with a `featureFlag` frontmatter field, `undefined` otherwise; `resolveSkillStates()` — enforcement point 1 |
|
|
656
656
|
| `src/prompts/system-prompt.ts` | `appendSkillsCatalog()` — enforcement point 2 |
|
|
657
657
|
| `src/tools/skills/load.ts` | `executeSkillLoad()` — enforcement points 3 and 5 |
|
|
658
|
-
| `src/daemon/
|
|
658
|
+
| `src/daemon/conversation-skill-tools.ts` | `projectSkillTools()` — enforcement point 4 |
|
|
659
659
|
| `src/config/schema.ts` | `assistantFeatureFlagValues` field definition in `AssistantConfig` (Zod schema) |
|
|
660
660
|
| `src/daemon/handlers/skills.ts` | `listSkills()` — uses `resolveSkillStates()` for client responses; `installSkill()` — enforcement point 6 |
|
|
661
661
|
| `meta/feature-flags/feature-flag-registry.json` | Unified feature flag registry (repo root) — all declared flags with scope, label, default values, and descriptions |
|
|
@@ -688,7 +688,7 @@ graph LR
|
|
|
688
688
|
|
|
689
689
|
subgraph "~/.vellum/workspace/data/db/assistant.db (SQLite + WAL)"
|
|
690
690
|
direction TB
|
|
691
|
-
CONV["conversations<br/>───────────────<br/>id, title, timestamps<br/>token counts, estimated cost<br/>context_summary (compaction)<br/>
|
|
691
|
+
CONV["conversations<br/>───────────────<br/>id, title, timestamps<br/>token counts, estimated cost<br/>context_summary (compaction)<br/>conversation_type: 'standard' | 'private'<br/>memory_scope_id: 'default' | 'private:<uuid>'"]
|
|
692
692
|
MSG["messages<br/>───────────────<br/>id, conversation_id (FK)<br/>role: user | assistant<br/>content: JSON array<br/>created_at"]
|
|
693
693
|
TOOL["tool_invocations<br/>───────────────<br/>tool_name, input, result<br/>decision, risk_level<br/>duration_ms"]
|
|
694
694
|
SEG["memory_segments<br/>───────────────<br/>Text chunks for retrieval<br/>Linked to messages<br/>token_estimate per segment"]
|
|
@@ -783,12 +783,12 @@ All client-server communication uses HTTP for request/response operations and Se
|
|
|
783
783
|
|
|
784
784
|
The daemon emits two distinct error message types via SSE:
|
|
785
785
|
|
|
786
|
-
| Message type
|
|
787
|
-
|
|
|
788
|
-
| `
|
|
789
|
-
| `error`
|
|
786
|
+
| Message type | Scope | Purpose | Payload |
|
|
787
|
+
| -------------------- | -------------- | -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
|
788
|
+
| `conversation_error` | Session-scoped | Typed, actionable failures during chat/session runtime (e.g., provider network error, rate limit, API failure) | `sessionId`, `code` (typed enum), `userMessage`, `retryable`, `debugDetails?` |
|
|
789
|
+
| `error` | Global | Generic, non-session failures (e.g., daemon startup errors, unknown message types) | `message` (string) |
|
|
790
790
|
|
|
791
|
-
**Design rationale:** `
|
|
791
|
+
**Design rationale:** `conversation_error` carries structured metadata (error code, retryable flag, debug details) so the client can present actionable UI — a toast with retry/dismiss buttons — rather than a generic error banner. The older `error` type is retained for backward compatibility with non-session contexts.
|
|
792
792
|
|
|
793
793
|
### Session Error Codes
|
|
794
794
|
|
|
@@ -806,7 +806,7 @@ The daemon emits two distinct error message types via SSE:
|
|
|
806
806
|
|
|
807
807
|
### Error Classification
|
|
808
808
|
|
|
809
|
-
The daemon classifies errors via `
|
|
809
|
+
The daemon classifies errors via `classifyConversationError()` in `conversation-error.ts`. Before classification, `isUserCancellation()` checks whether the error is a user-initiated abort (active abort signal or `AbortError`); if so, the daemon emits `generation_cancelled` instead of `conversation_error` — cancel never surfaces a conversation-error toast.
|
|
810
810
|
|
|
811
811
|
Classification uses a two-tier strategy:
|
|
812
812
|
|
|
@@ -819,45 +819,45 @@ Debug details are capped at 4,000 characters to prevent oversized payloads.
|
|
|
819
819
|
|
|
820
820
|
```mermaid
|
|
821
821
|
sequenceDiagram
|
|
822
|
-
participant Daemon as Daemon (
|
|
822
|
+
participant Daemon as Daemon (conversation-error.ts)
|
|
823
823
|
participant DC as DaemonClient (Swift)
|
|
824
824
|
participant VM as ChatViewModel
|
|
825
825
|
participant UI as ChatView (toast)
|
|
826
826
|
|
|
827
827
|
Note over Daemon: LLM call fails or<br/>processing error occurs
|
|
828
|
-
Daemon->>Daemon:
|
|
829
|
-
Daemon->>DC:
|
|
828
|
+
Daemon->>Daemon: classifyConversationError(error, ctx)
|
|
829
|
+
Daemon->>DC: conversation_error {sessionId, code,<br/>userMessage, retryable, debugDetails?}
|
|
830
830
|
DC->>DC: broadcast to all subscribers
|
|
831
831
|
DC->>VM: subscribe() stream delivers message
|
|
832
|
-
VM->>VM: set
|
|
833
|
-
VM-->>UI: @Published
|
|
832
|
+
VM->>VM: set conversationError property<br/>clear isThinking / isCancelling
|
|
833
|
+
VM-->>UI: @Published conversationError observed
|
|
834
834
|
|
|
835
|
-
UI->>UI: show
|
|
835
|
+
UI->>UI: show conversationErrorToast<br/>[Retry] [Dismiss] [Copy Debug Info?]
|
|
836
836
|
|
|
837
837
|
alt User taps Retry (retryable == true)
|
|
838
|
-
UI->>VM:
|
|
839
|
-
VM->>VM:
|
|
838
|
+
UI->>VM: retryAfterConversationError()
|
|
839
|
+
VM->>VM: dismissConversationError()<br/>+ regenerateLastMessage()
|
|
840
840
|
VM->>DC: regenerate {sessionId}
|
|
841
841
|
DC->>Daemon: HTTP POST /v1/messages
|
|
842
842
|
else User taps Dismiss
|
|
843
|
-
UI->>VM:
|
|
844
|
-
VM->>VM: clear
|
|
843
|
+
UI->>VM: dismissConversationError()
|
|
844
|
+
VM->>VM: clear conversationError + errorText
|
|
845
845
|
end
|
|
846
846
|
```
|
|
847
847
|
|
|
848
|
-
1. **Daemon** encounters a session-scoped failure, classifies it via `
|
|
849
|
-
2. **ChatViewModel** receives the error via DaemonClient's `subscribe()` stream (each view model gets an independent stream), sets the `
|
|
850
|
-
3. **ChatView** observes the published `
|
|
851
|
-
- **Retry** (shown when `retryable` is true): calls `
|
|
848
|
+
1. **Daemon** encounters a session-scoped failure, classifies it via `classifyConversationError()`, and sends a `conversation_error` SSE event with the session ID, typed error code, user-facing message, retryable flag, and optional debug details. Session-scoped failures emit _only_ `conversation_error` (never the generic `error` type) to prevent cross-session bleed.
|
|
849
|
+
2. **ChatViewModel** receives the error via DaemonClient's `subscribe()` stream (each view model gets an independent stream), sets the `conversationError` property, and transitions out of the streaming/loading state so the UI is interactive. If the error arrives during an active cancel (`wasCancelling == true`), it is suppressed — cancel only shows `generation_cancelled` behavior.
|
|
850
|
+
3. **ChatView** observes the published `conversationError` and displays an actionable toast with a category-specific icon and accent color:
|
|
851
|
+
- **Retry** (shown when `retryable` is true): calls `retryAfterConversationError()`, which clears the error and sends a `regenerate` message to the daemon.
|
|
852
852
|
- **Copy Debug Info** (shown when `debugDetails` is non-nil): copies structured debug information to the clipboard for bug reports.
|
|
853
|
-
- **Dismiss (X)**: calls `
|
|
853
|
+
- **Dismiss (X)**: calls `dismissConversationError()` to clear the error without retrying.
|
|
854
854
|
4. If the error is not retryable, the Retry button is hidden and the user can only dismiss.
|
|
855
855
|
|
|
856
856
|
---
|
|
857
857
|
|
|
858
858
|
## Context Overflow Recovery
|
|
859
859
|
|
|
860
|
-
The session loop implements a deterministic overflow convergence pipeline that recovers from context-too-large provider rejections without surfacing errors to the user. Instead of the previous behavior where a `CONTEXT_TOO_LARGE` error was emitted as a `
|
|
860
|
+
The session loop implements a deterministic overflow convergence pipeline that recovers from context-too-large provider rejections without surfacing errors to the user. Instead of the previous behavior where a `CONTEXT_TOO_LARGE` error was emitted as a `conversation_error`, the pipeline iteratively reduces the context payload until it fits within the provider's limit.
|
|
861
861
|
|
|
862
862
|
### Two-Phase Architecture
|
|
863
863
|
|
|
@@ -882,15 +882,15 @@ After each tier, the reducer re-estimates tokens. If the estimate is within budg
|
|
|
882
882
|
|
|
883
883
|
When all four reducer tiers are exhausted and the provider still rejects, the overflow policy resolver (`context-overflow-policy.ts`) determines the next action based on config and session interactivity:
|
|
884
884
|
|
|
885
|
-
| Session Type | Config Policy | Action
|
|
886
|
-
| --------------- | ----------------------- |
|
|
887
|
-
| Interactive | `"summarize"` (default) | `request_user_approval` — prompt the user via `PermissionPrompter` before compressing the latest turn
|
|
888
|
-
| Non-interactive | `"truncate"` (default) | `auto_compress_latest_turn` — compress without asking
|
|
889
|
-
| Any | `"drop"` | `fail_gracefully` — fall through to the final context-overflow fallback, which emits a `
|
|
885
|
+
| Session Type | Config Policy | Action |
|
|
886
|
+
| --------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
887
|
+
| Interactive | `"summarize"` (default) | `request_user_approval` — prompt the user via `PermissionPrompter` before compressing the latest turn |
|
|
888
|
+
| Non-interactive | `"truncate"` (default) | `auto_compress_latest_turn` — compress without asking |
|
|
889
|
+
| Any | `"drop"` | `fail_gracefully` — fall through to the final context-overflow fallback, which emits a `conversation_error` |
|
|
890
890
|
|
|
891
891
|
**Approval gate:** For interactive sessions, the pipeline uses `requestCompressionApproval()` in `context-overflow-approval.ts`, which presents a confirmation prompt through the existing `PermissionPrompter` flow (`POST /v1/confirm`). The prompt uses a reserved pseudo tool name (`context_overflow_compression`) so the UI can display a meaningful label. The decision is one-shot per overflow (no "always allow" option).
|
|
892
892
|
|
|
893
|
-
**Deny handling:** If the user declines compression, the session emits a graceful assistant explanation message ("The conversation has grown too long...") instead of a `
|
|
893
|
+
**Deny handling:** If the user declines compression, the session emits a graceful assistant explanation message ("The conversation has grown too long...") instead of a `conversation_error`. The deny message is persisted to conversation history and delivered via `assistant_text_delta` events, so the user sees a normal chat bubble rather than an error toast. The turn ends cleanly without triggering the error classification pipeline.
|
|
894
894
|
|
|
895
895
|
### Config
|
|
896
896
|
|
|
@@ -911,14 +911,14 @@ All overflow recovery settings live under `contextWindow.overflowRecovery` in th
|
|
|
911
911
|
| `src/daemon/context-overflow-reducer.ts` | Tiered reducer: four-tier pipeline with idempotent steps and cumulative state |
|
|
912
912
|
| `src/daemon/context-overflow-policy.ts` | Overflow policy resolver: maps config + interactivity to concrete action |
|
|
913
913
|
| `src/daemon/context-overflow-approval.ts` | Approval gate: prompts user for latest-turn compression via `PermissionPrompter` |
|
|
914
|
-
| `src/daemon/
|
|
914
|
+
| `src/daemon/conversation-agent-loop.ts` | Integration: preflight budget check, convergence loop, approval/deny flow |
|
|
915
915
|
| `src/config/core-schema.ts` | `ContextOverflowRecoveryConfigSchema` with defaults and validation |
|
|
916
916
|
|
|
917
917
|
---
|
|
918
918
|
|
|
919
919
|
## Task Routing — Voice Source Bypass and Escalation
|
|
920
920
|
|
|
921
|
-
When a task is submitted via `task_submit`, the daemon classifies it to determine routing. Voice-sourced tasks and slash
|
|
921
|
+
When a task is submitted via `task_submit`, the daemon classifies it to determine routing. Voice-sourced tasks and built-in slash commands bypass the classifier entirely for lower latency and more predictable routing.
|
|
922
922
|
|
|
923
923
|
```mermaid
|
|
924
924
|
graph TB
|
|
@@ -927,7 +927,7 @@ graph TB
|
|
|
927
927
|
end
|
|
928
928
|
|
|
929
929
|
subgraph "Routing Decision"
|
|
930
|
-
SLASH_CHECK{"
|
|
930
|
+
SLASH_CHECK{"Built-in slash command?<br/>(resolveSlash)"}
|
|
931
931
|
VOICE_CHECK{"source === 'voice'?"}
|
|
932
932
|
CLASSIFIER["Classifier<br/>Haiku-4.5 tool call<br/>+ heuristic fallback"]
|
|
933
933
|
CU_ROUTE["Route: computer_use<br/>→ CU session"]
|
|
@@ -939,7 +939,7 @@ graph TB
|
|
|
939
939
|
end
|
|
940
940
|
|
|
941
941
|
SUBMIT --> SLASH_CHECK
|
|
942
|
-
SLASH_CHECK -->|"Yes (/
|
|
942
|
+
SLASH_CHECK -->|"Yes (/model, /status, etc.)"| QA_ROUTE
|
|
943
943
|
SLASH_CHECK -->|"No"| VOICE_CHECK
|
|
944
944
|
VOICE_CHECK -->|"Yes"| QA_ROUTE
|
|
945
945
|
VOICE_CHECK -->|"No"| CLASSIFIER
|
|
@@ -1006,29 +1006,25 @@ graph TB
|
|
|
1006
1006
|
|
|
1007
1007
|
## Slash Command Resolution
|
|
1008
1008
|
|
|
1009
|
-
When a user message enters the daemon (via `processMessage` or the queue drain path), it passes through
|
|
1009
|
+
When a user message enters the daemon (via `processMessage` or the queue drain path), it passes through `resolveSlash()` before persistence or agent execution. Resolution uses direct string matching against a fixed set of built-in commands.
|
|
1010
1010
|
|
|
1011
1011
|
```mermaid
|
|
1012
1012
|
graph TB
|
|
1013
1013
|
INPUT["User input"]
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
PARSE -->|"Not a slash candidate"| NONE
|
|
1022
|
-
PARSE -->|"Valid candidate"| RESOLVE
|
|
1023
|
-
RESOLVE -->|"Known skill ID"| KNOWN
|
|
1024
|
-
RESOLVE -->|"Unknown ID"| UNKNOWN
|
|
1014
|
+
RESOLVE{"resolveSlash()<br/>direct string matching"}
|
|
1015
|
+
PASSTHROUGH["Normal flow<br/>persist + agent loop"]
|
|
1016
|
+
HANDLED["Deterministic response<br/>assistant_text_delta + message_complete<br/>no agent loop"]
|
|
1017
|
+
|
|
1018
|
+
INPUT --> RESOLVE
|
|
1019
|
+
RESOLVE -->|"kind: passthrough"| PASSTHROUGH
|
|
1020
|
+
RESOLVE -->|"kind: unknown<br/>(/model, /status, /commands, /pair,<br/>/models, provider shortcuts)"| HANDLED
|
|
1025
1021
|
```
|
|
1026
1022
|
|
|
1027
1023
|
Key behaviors:
|
|
1028
1024
|
|
|
1029
|
-
- **
|
|
1030
|
-
- **
|
|
1031
|
-
- **Queue**: Queued messages receive the same slash resolution.
|
|
1025
|
+
- **Built-in commands**: `/model`, `/models`, `/status`, `/commands`, `/pair`, and provider shortcuts (`/opus`, `/sonnet`, `/gpt4`, etc.) are handled directly by `resolveSlash()`. A deterministic `assistant_text_delta` + `message_complete` is emitted. No message persistence or model call occurs.
|
|
1026
|
+
- **Passthrough**: Any input that does not match a built-in command passes through to the normal agent loop, including slash-like tokens that are not recognized.
|
|
1027
|
+
- **Queue**: Queued messages receive the same slash resolution.
|
|
1032
1028
|
|
|
1033
1029
|
---
|
|
1034
1030
|
|
|
@@ -1098,7 +1094,7 @@ graph TB
|
|
|
1098
1094
|
- `evaluate_typescript_code` always forces `sandbox.enabled = true` regardless of global config.
|
|
1099
1095
|
- Snippet contract: must export `default` or `run` with signature `(input: unknown) => unknown | Promise<unknown>`.
|
|
1100
1096
|
- Managed-store writes are atomic (tmp file + rename) to prevent partial `SKILL.md` or `SKILLS.md` files.
|
|
1101
|
-
- After persist or delete, the file watcher triggers
|
|
1097
|
+
- After persist or delete, the file watcher triggers conversation eviction; the next turn runs in a fresh conversation. The model's system prompt instructs it to continue normally.
|
|
1102
1098
|
- macOS UI shows Inspect and Delete controls for managed skills only (source = "managed").
|
|
1103
1099
|
- `skill_load` validates the recursive include graph (via `include-graph.ts`) before emitting output. Missing children and cycles produce `isError: true` with no `<loaded_skill>` marker. Valid includes produce an "Included Skills (immediate)" metadata section showing child ID, name, description, and path.
|
|
1104
1100
|
|
|
@@ -1162,7 +1158,7 @@ Rules enforced by guard tests:
|
|
|
1162
1158
|
- Direct gateway `curl` + manual bearer headers are for control-plane writes/actions, not retrieval reads.
|
|
1163
1159
|
- Bundled skill docs must not instruct direct keychain lookups (`security find-generic-password`, `secret-tool`) for retrieval.
|
|
1164
1160
|
- `host_bash` is not used for Vellum CLI retrieval commands unless intentionally allowlisted.
|
|
1165
|
-
- Outbound credentialed API calls
|
|
1161
|
+
- Outbound credentialed API calls use CES tools (`make_authenticated_request`, `run_authenticated_command`) so credential materialization happens in a separate process. Command output (stdout/stderr) is forwarded back to the assistant and may contain credential values if the command echoes them, so the isolation covers injection, not output. `host_bash` is available as a user-approved escape hatch but is outside the strong secrecy guarantee.
|
|
1166
1162
|
|
|
1167
1163
|
### Skill Directory Structure
|
|
1168
1164
|
|
|
@@ -1196,12 +1192,11 @@ The following capabilities ship as bundled skills in `assistant/src/config/bundl
|
|
|
1196
1192
|
```mermaid
|
|
1197
1193
|
graph TB
|
|
1198
1194
|
subgraph "Activation Sources"
|
|
1199
|
-
SLASH["Slash command<br/>/skill-id → preactivate"]
|
|
1200
1195
|
MARKER["<loaded_skill id="..." /><br/>marker in conversation history"]
|
|
1201
1196
|
CONFIG["Config / session<br/>preactivatedSkillIds"]
|
|
1202
1197
|
end
|
|
1203
1198
|
|
|
1204
|
-
subgraph "Per-Turn Projection (
|
|
1199
|
+
subgraph "Per-Turn Projection (conversation-skill-tools.ts)"
|
|
1205
1200
|
DERIVE["deriveActiveSkills(history)<br/>scan all messages for markers"]
|
|
1206
1201
|
UNION["Union: context-derived ∪ preactivated"]
|
|
1207
1202
|
DIFF["Diff vs previous turn"]
|
|
@@ -1218,7 +1213,6 @@ graph TB
|
|
|
1218
1213
|
PROVIDER["LLM Provider<br/>receives full tool list"]
|
|
1219
1214
|
end
|
|
1220
1215
|
|
|
1221
|
-
SLASH --> CONFIG
|
|
1222
1216
|
MARKER --> DERIVE
|
|
1223
1217
|
CONFIG --> UNION
|
|
1224
1218
|
DERIVE --> UNION
|
|
@@ -1233,7 +1227,7 @@ graph TB
|
|
|
1233
1227
|
RESOLVE --> PROVIDER
|
|
1234
1228
|
```
|
|
1235
1229
|
|
|
1236
|
-
**Internal preactivation**: Some bundled skills are preactivated programmatically rather than by
|
|
1230
|
+
**Internal preactivation**: Some bundled skills are preactivated programmatically rather than by model discovery. For example, desktop sessions set `preactivatedSkillIds: ['computer-use']`, causing `projectSkillTools()` to load the 11 `computer_use_*` tool definitions from the bundled skill's `TOOLS.json` on the first turn. These proxy tools forward actions to the connected macOS client via `HostCuProxy`.
|
|
1237
1231
|
|
|
1238
1232
|
### Skill Tool Execution
|
|
1239
1233
|
|
|
@@ -1276,7 +1270,7 @@ graph TB
|
|
|
1276
1270
|
| `assistant/src/skills/tool-manifest.ts` | `TOOLS.json` parser and validator |
|
|
1277
1271
|
| `assistant/src/skills/active-skill-tools.ts` | `deriveActiveSkills()` — scans history for `<loaded_skill>` markers |
|
|
1278
1272
|
| `assistant/src/skills/include-graph.ts` | Include graph builder: `indexCatalogById()`, `validateIncludes()`, cycle/missing detection |
|
|
1279
|
-
| `assistant/src/daemon/
|
|
1273
|
+
| `assistant/src/daemon/conversation-skill-tools.ts` | `projectSkillTools()` — per-turn projection, register/unregister lifecycle |
|
|
1280
1274
|
| `assistant/src/tools/skills/skill-tool-factory.ts` | `createSkillToolsFromManifest()` — manifest entries to Tool objects |
|
|
1281
1275
|
| `assistant/src/tools/skills/skill-script-runner.ts` | Host runner: dynamic import + `run()` call |
|
|
1282
1276
|
| `assistant/src/tools/skills/sandbox-runner.ts` | Sandbox runner: isolated subprocess execution |
|
|
@@ -1480,7 +1474,7 @@ The `tool_permission_simulate` HTTP endpoint lets clients dry-run a tool invocat
|
|
|
1480
1474
|
- The daemon runs `classifyRisk()` and `check()` against the live trust rules, then returns the decision (`allow`, `deny`, or `prompt`), risk level, reason, matched rule ID, and (when decision is `prompt`) the full `promptPayload` with allowlist/scope options.
|
|
1481
1475
|
- **Simulation-only allow/deny**: A simulated `allow` or `deny` decision does not persist any state. No trust rules are created or modified.
|
|
1482
1476
|
- **Always-allow persistence**: When the tester UI's "Always Allow" action is used, the client sends a separate `add_trust_rule` message that persists the rule to `trust.json`, identical to the existing confirmation flow.
|
|
1483
|
-
- **Private-
|
|
1477
|
+
- **Private-conversation override**: When `forcePromptSideEffects` is true, side-effect tools that would normally be auto-allowed are promoted to `prompt`.
|
|
1484
1478
|
- **Non-interactive override**: When `isInteractive` is false, `prompt` decisions are converted to `deny` (no client available to approve).
|
|
1485
1479
|
|
|
1486
1480
|
---
|
|
@@ -1693,7 +1687,7 @@ The assistant-events system provides a single, shared publish path that fans out
|
|
|
1693
1687
|
graph TB
|
|
1694
1688
|
subgraph "Event Sources"
|
|
1695
1689
|
direction TB
|
|
1696
|
-
SESSION["Session process<br/>(
|
|
1690
|
+
SESSION["Session process<br/>(conversation-process.ts)"]
|
|
1697
1691
|
HTTP_RUN["HTTP Run path<br/>(run-orchestrator.ts)"]
|
|
1698
1692
|
end
|
|
1699
1693
|
|
|
@@ -1725,13 +1719,13 @@ graph TB
|
|
|
1725
1719
|
|
|
1726
1720
|
Every event published through the hub is wrapped in an `AssistantEvent` (defined in `runtime/assistant-event.ts`):
|
|
1727
1721
|
|
|
1728
|
-
| Field
|
|
1729
|
-
|
|
|
1730
|
-
| `id`
|
|
1731
|
-
| `assistantId`
|
|
1732
|
-
| `
|
|
1733
|
-
| `emittedAt`
|
|
1734
|
-
| `message`
|
|
1722
|
+
| Field | Type | Description |
|
|
1723
|
+
| ---------------- | ------------------- | ----------------------------------------------------- |
|
|
1724
|
+
| `id` | `string` (UUID) | Globally unique event identifier |
|
|
1725
|
+
| `assistantId` | `string` | Logical assistant identifier (`"self"` for HTTP runs) |
|
|
1726
|
+
| `conversationId` | `string?` | Resolved conversation ID when available |
|
|
1727
|
+
| `emittedAt` | `string` (ISO-8601) | Server-side timestamp |
|
|
1728
|
+
| `message` | `ServerMessage` | The outbound message payload |
|
|
1735
1729
|
|
|
1736
1730
|
### SSE Frame Format
|
|
1737
1731
|
|
|
@@ -1777,8 +1771,8 @@ The notification module (`assistant/src/notifications/`) uses a signal-based arc
|
|
|
1777
1771
|
```
|
|
1778
1772
|
Producer → NotificationSignal → Candidate Generation → Decision Engine (LLM) → Deterministic Checks → Broadcaster → Conversation Pairing → Adapters → Delivery
|
|
1779
1773
|
↑ ↓
|
|
1780
|
-
Preference Summary
|
|
1781
|
-
|
|
1774
|
+
Preference Summary notification_conversation_created SSE event
|
|
1775
|
+
Conversation Candidates (creation-only — not emitted on reuse)
|
|
1782
1776
|
```
|
|
1783
1777
|
|
|
1784
1778
|
### Channel Policy Registry
|
|
@@ -1787,24 +1781,24 @@ Producer → NotificationSignal → Candidate Generation → Decision Engine (LL
|
|
|
1787
1781
|
|
|
1788
1782
|
- **`deliveryEnabled`** — whether the channel can receive notification deliveries. The `NotificationChannel` type is derived from this flag: only channels with `deliveryEnabled: true` are valid notification targets.
|
|
1789
1783
|
- **`conversationStrategy`** — how the notification pipeline materializes conversations for the channel:
|
|
1790
|
-
- `start_new_conversation` — creates a fresh conversation per delivery (e.g. vellum desktop/mobile
|
|
1784
|
+
- `start_new_conversation` — creates a fresh conversation per delivery (e.g. vellum desktop/mobile conversations)
|
|
1791
1785
|
- `continue_existing_conversation` — intended to append to an existing channel-scoped conversation; currently materializes a background audit conversation per delivery (e.g. Telegram)
|
|
1792
1786
|
- `not_deliverable` — channel cannot receive notifications (e.g. phone)
|
|
1793
1787
|
|
|
1794
1788
|
Helper functions: `getDeliverableChannels()`, `getChannelPolicy()`, `isNotificationDeliverable()`, `getConversationStrategy()`.
|
|
1795
1789
|
|
|
1796
|
-
### Conversation Pairing and
|
|
1790
|
+
### Conversation Pairing and Conversation Routing
|
|
1797
1791
|
|
|
1798
|
-
Every notification delivery materializes a conversation + seed message **before** the adapter sends it (`conversation-pairing.ts`). The pairing function now accepts a `
|
|
1792
|
+
Every notification delivery materializes a conversation + seed message **before** the adapter sends it (`conversation-pairing.ts`). The pairing function now accepts a `conversationAction` from the decision engine:
|
|
1799
1793
|
|
|
1800
|
-
- **`reuse_existing`**: Looks up the target conversation. If valid (exists with `source: 'notification'`), the seed message is appended to the existing
|
|
1794
|
+
- **`reuse_existing`**: Looks up the target conversation. If valid (exists with `source: 'notification'`), the seed message is appended to the existing conversation. If invalid, falls back to creating a new conversation with `conversationDecisionFallbackUsed: true`.
|
|
1801
1795
|
- **`start_new` (default)**: Creates a fresh conversation per delivery.
|
|
1802
1796
|
|
|
1803
1797
|
This ensures:
|
|
1804
1798
|
|
|
1805
1799
|
1. Every delivery has an auditable conversation trail in the conversations table
|
|
1806
|
-
2. The macOS/iOS client can deep-link directly into the notification
|
|
1807
|
-
3. Delivery audit rows in `notification_deliveries` carry `conversation_id`, `message_id`, `conversation_strategy`, `
|
|
1800
|
+
2. The macOS/iOS client can deep-link directly into the notification conversation
|
|
1801
|
+
3. Delivery audit rows in `notification_deliveries` carry `conversation_id`, `message_id`, `conversation_strategy`, `conversation_action`, `conversation_target_id`, and `conversation_fallback_used` columns
|
|
1808
1802
|
|
|
1809
1803
|
The pairing function (`pairDeliveryWithConversation`) is resilient — errors are caught and logged without breaking the delivery pipeline.
|
|
1810
1804
|
|
|
@@ -1812,53 +1806,53 @@ The pairing function (`pairDeliveryWithConversation`) is resilient — errors ar
|
|
|
1812
1806
|
|
|
1813
1807
|
The notification pipeline uses a single conversation materialization path across producers:
|
|
1814
1808
|
|
|
1815
|
-
1. **Canonical pipeline** (`emitNotificationSignal` → decision engine → broadcaster → conversation pairing → adapters): The broadcaster pairs each delivery with a conversation, then dispatches a `notification_intent` SSE event via the Vellum adapter. The payload includes `deepLinkMetadata` (e.g. `{ conversationId, messageId }`) so the macOS/iOS client can deep-link to the relevant context when the user taps the notification. When `messageId` is present, the client scrolls to that specific message within the
|
|
1816
|
-
2. **Guardian bookkeeping** (`dispatchGuardianQuestion`): Guardian dispatch creates `guardian_action_request` / `guardian_action_delivery` audit rows derived from pipeline delivery results and the per-dispatch `
|
|
1809
|
+
1. **Canonical pipeline** (`emitNotificationSignal` → decision engine → broadcaster → conversation pairing → adapters): The broadcaster pairs each delivery with a conversation, then dispatches a `notification_intent` SSE event via the Vellum adapter. The payload includes `deepLinkMetadata` (e.g. `{ conversationId, messageId }`) so the macOS/iOS client can deep-link to the relevant context when the user taps the notification. When `messageId` is present, the client scrolls to that specific message within the conversation (message-level anchoring).
|
|
1810
|
+
2. **Guardian bookkeeping** (`dispatchGuardianQuestion`): Guardian dispatch creates `guardian_action_request` / `guardian_action_delivery` audit rows derived from pipeline delivery results and the per-dispatch `onConversationCreated` callback — there is no separate conversation-creation path.
|
|
1817
1811
|
|
|
1818
|
-
###
|
|
1812
|
+
### Conversation Surfacing via `notification_conversation_created` (Creation-Only)
|
|
1819
1813
|
|
|
1820
|
-
The `
|
|
1814
|
+
The `notification_conversation_created` SSE event is emitted **only when a brand-new conversation is created** by the broadcaster. Reusing an existing conversation does not trigger this event — the macOS/iOS client already knows about the conversation from the original creation. This is enforced in `broadcaster.ts` by gating on `pairing.createdNewConversation === true`.
|
|
1821
1815
|
|
|
1822
|
-
When a new vellum notification
|
|
1816
|
+
When a new vellum notification conversation is created (strategy `start_new_conversation`), the broadcaster emits the event **immediately** (before waiting for slower channel deliveries like Telegram). This pushes the conversation to the macOS/iOS client so it can display the notification conversation in the sidebar and deep-link to it.
|
|
1823
1817
|
|
|
1824
|
-
###
|
|
1818
|
+
### Conversation-Created Events
|
|
1825
1819
|
|
|
1826
|
-
Two SSE push events surface new
|
|
1820
|
+
Two SSE push events surface new conversations in the macOS/iOS client sidebar:
|
|
1827
1821
|
|
|
1828
|
-
- **`
|
|
1829
|
-
- **`
|
|
1822
|
+
- **`notification_conversation_created`** — Emitted by `broadcaster.ts` when a notification delivery **creates** a new vellum conversation (strategy `start_new_conversation`, `createdNewConversation: true`). **Not** emitted when a conversation is reused. Payload: `{ conversationId, title, sourceEventName }`.
|
|
1823
|
+
- **`task_run_conversation_created`** — Emitted by `work-item-runner.ts` when a task run creates a conversation. Payload: `{ conversationId, workItemId, title }`.
|
|
1830
1824
|
|
|
1831
|
-
All events follow the same pattern: the daemon creates a server-side conversation, persists an initial message, and broadcasts the SSE event so the macOS `
|
|
1825
|
+
All events follow the same pattern: the daemon creates a server-side conversation, persists an initial message, and broadcasts the SSE event so the macOS `ConversationManager` can create a visible conversation in the sidebar.
|
|
1832
1826
|
|
|
1833
|
-
###
|
|
1827
|
+
### Conversation Routing Decision Flow
|
|
1834
1828
|
|
|
1835
|
-
The decision engine produces per-channel
|
|
1829
|
+
The decision engine produces per-channel conversation actions using a candidate-driven approach:
|
|
1836
1830
|
|
|
1837
|
-
1. **Candidate generation** (`
|
|
1831
|
+
1. **Candidate generation** (`conversation-candidates.ts`): Queries recent notification-sourced conversations (24-hour window, up to 5 per channel) and enriches them with guardian context (pending request counts).
|
|
1838
1832
|
2. **LLM decision**: The candidate set is serialized into the system prompt. The LLM chooses `start_new` or `reuse_existing` (with a candidate `conversationId`) per channel.
|
|
1839
|
-
3. **Strict validation** (`
|
|
1840
|
-
4. **Pairing execution**: `pairDeliveryWithConversation` executes the
|
|
1841
|
-
5. **Creation-only gating**: `
|
|
1842
|
-
6. **Audit trail**:
|
|
1833
|
+
3. **Strict validation** (`validateConversationActions`): Reuse targets must exist in the candidate set. Invalid targets are downgraded to `start_new`.
|
|
1834
|
+
4. **Pairing execution**: `pairDeliveryWithConversation` executes the conversation action — appending to an existing conversation on reuse, creating a new one otherwise.
|
|
1835
|
+
5. **Creation-only gating**: `notification_conversation_created` fires only on actual creation, not on reuse.
|
|
1836
|
+
6. **Audit trail**: Conversation actions are persisted in both `notification_decisions.validation_results` and `notification_deliveries` columns (`conversation_action`, `conversation_target_id`, `conversation_fallback_used`).
|
|
1843
1837
|
|
|
1844
|
-
### Guardian Call
|
|
1838
|
+
### Guardian Call Conversation Affinity
|
|
1845
1839
|
|
|
1846
|
-
When a guardian question originates from an active phone call (`callSessionId` present on the signal), the decision engine enforces
|
|
1840
|
+
When a guardian question originates from an active phone call (`callSessionId` present on the signal), the decision engine enforces conversation affinity so all questions within the same call land in one vellum conversation:
|
|
1847
1841
|
|
|
1848
|
-
- **First question in a call** (no `conversationAffinityHint`): `
|
|
1842
|
+
- **First question in a call** (no `conversationAffinityHint`): `enforceGuardianCallConversationAffinity` forces `start_new` for the vellum channel, creating a dedicated conversation for the call.
|
|
1849
1843
|
- **Subsequent questions in the same call** (affinity hint already set by `dispatchGuardianQuestion`): The guard is a no-op, and `enforceConversationAffinity` routes to `reuse_existing` using the hint's `conversationId`.
|
|
1850
1844
|
|
|
1851
|
-
This guard runs **before** `enforceConversationAffinity` in the post-decision chain so the two cooperate: the first dispatch creates the
|
|
1845
|
+
This guard runs **before** `enforceConversationAffinity` in the post-decision chain so the two cooperate: the first dispatch creates the conversation, and subsequent dispatches reuse it via the affinity hint that `dispatchGuardianQuestion` sets after observing the first delivery's `conversationId`.
|
|
1852
1846
|
|
|
1853
|
-
### Guardian Multi-Request Disambiguation in Reused
|
|
1847
|
+
### Guardian Multi-Request Disambiguation in Reused Conversations
|
|
1854
1848
|
|
|
1855
|
-
When the decision engine routes multiple guardian questions to the same conversation (via `reuse_existing`), those questions share a single
|
|
1849
|
+
When the decision engine routes multiple guardian questions to the same conversation (via `reuse_existing`), those questions share a single conversation. The guardian disambiguates which question they are answering using **request-code prefixes**:
|
|
1856
1850
|
|
|
1857
1851
|
- **Single pending delivery**: Matched automatically (single-match fast path).
|
|
1858
1852
|
- **Multiple pending deliveries**: The guardian must prefix their reply with the 6-char hex request code (e.g. `A1B2C3 yes, allow it`). Case-insensitive matching.
|
|
1859
1853
|
- **No match**: A disambiguation message is sent listing all active request codes.
|
|
1860
1854
|
|
|
1861
|
-
This invariant is enforced identically on mac/vellum (`
|
|
1855
|
+
This invariant is enforced identically on mac/vellum (`conversation-process.ts`) and Telegram (`inbound-message-handler.ts`). All disambiguation messages are generated through the guardian action message composer (LLM with deterministic fallback).
|
|
1862
1856
|
|
|
1863
1857
|
### Reminder Routing Metadata
|
|
1864
1858
|
|
|
@@ -1868,7 +1862,7 @@ Reminders carry optional `routingIntent` (`single_channel` | `multi_channel` | `
|
|
|
1868
1862
|
|
|
1869
1863
|
Notifications are delivered to three channel types:
|
|
1870
1864
|
|
|
1871
|
-
- **Vellum (always connected)**: SSE via the daemon's broadcast mechanism. The `VellumAdapter` emits a `notification_intent` message with rendered copy and optional `deepLinkMetadata` (includes `conversationId` for
|
|
1865
|
+
- **Vellum (always connected)**: SSE via the daemon's broadcast mechanism. The `VellumAdapter` emits a `notification_intent` message with rendered copy and optional `deepLinkMetadata` (includes `conversationId` for conversation navigation and `messageId` for message-level scroll anchoring).
|
|
1872
1866
|
- **Telegram (when guardian binding exists)**: HTTP POST to the gateway's `/deliver/telegram` endpoint. Requires an active guardian binding for the assistant.
|
|
1873
1867
|
|
|
1874
1868
|
Connected channels are resolved at signal emission time: vellum is always included, and binding-based channels (Telegram) are included only when an active guardian binding exists for the assistant.
|
|
@@ -1881,9 +1875,9 @@ Connected channels are resolved at signal emission time: vellum is always includ
|
|
|
1881
1875
|
| `assistant/src/notifications/emit-signal.ts` | Single entry point for all producers; orchestrates the full pipeline |
|
|
1882
1876
|
| `assistant/src/notifications/decision-engine.ts` | LLM-based routing decisions with deterministic fallback |
|
|
1883
1877
|
| `assistant/src/notifications/deterministic-checks.ts` | Hard invariant checks (dedupe, source-active suppression, channel availability) |
|
|
1884
|
-
| `assistant/src/notifications/broadcaster.ts` | Dispatches decisions to channel adapters; emits `
|
|
1885
|
-
| `assistant/src/notifications/conversation-pairing.ts` | Materializes conversation + message per delivery; executes
|
|
1886
|
-
| `assistant/src/notifications/
|
|
1878
|
+
| `assistant/src/notifications/broadcaster.ts` | Dispatches decisions to channel adapters; emits `notification_conversation_created` SSE event (creation-only) |
|
|
1879
|
+
| `assistant/src/notifications/conversation-pairing.ts` | Materializes conversation + message per delivery; executes conversation reuse decisions |
|
|
1880
|
+
| `assistant/src/notifications/conversation-candidates.ts` | Builds per-channel candidate set of recent conversations for the decision engine |
|
|
1887
1881
|
| `assistant/src/notifications/adapters/macos.ts` | Vellum adapter — broadcasts `notification_intent` via SSE with deep-link metadata |
|
|
1888
1882
|
| `assistant/src/notifications/adapters/telegram.ts` | Telegram adapter — POSTs to gateway `/deliver/telegram` |
|
|
1889
1883
|
| `assistant/src/notifications/destination-resolver.ts` | Resolves per-channel endpoints (vellum SSE, Telegram chat ID from guardian binding) |
|
|
@@ -1893,7 +1887,7 @@ Connected channels are resolved at signal emission time: vellum is always includ
|
|
|
1893
1887
|
| `assistant/src/config/bundled-skills/messaging/tools/send-notification.ts` | Explicit producer tool for user-requested notifications; emits signals into the same routing pipeline |
|
|
1894
1888
|
| `assistant/src/calls/guardian-dispatch.ts` | Guardian question dispatch that reuses canonical notification pairing and records guardian delivery bookkeeping from pipeline results |
|
|
1895
1889
|
|
|
1896
|
-
**Audit trail (SQLite):** `notification_events` → `notification_decisions` (with `
|
|
1890
|
+
**Audit trail (SQLite):** `notification_events` → `notification_decisions` (with `conversationActions` in validation results) → `notification_deliveries` (with `conversation_id`, `message_id`, `conversation_strategy`, `conversation_action`, `conversation_target_id`, `conversation_fallback_used`)
|
|
1897
1891
|
|
|
1898
1892
|
**Configuration:** `notifications.decisionModelIntent` in `config.json`.
|
|
1899
1893
|
|
|
@@ -1901,44 +1895,44 @@ Connected channels are resolved at signal emission time: vellum is always includ
|
|
|
1901
1895
|
|
|
1902
1896
|
## Storage Summary
|
|
1903
1897
|
|
|
1904
|
-
| What
|
|
1905
|
-
|
|
|
1906
|
-
| API key
|
|
1907
|
-
| Credential secrets
|
|
1908
|
-
| Credential metadata
|
|
1909
|
-
| Integration OAuth tokens
|
|
1910
|
-
| User preferences
|
|
1911
|
-
| Session logs
|
|
1912
|
-
| Conversations & messages
|
|
1913
|
-
| Memory segments
|
|
1914
|
-
| Extracted facts
|
|
1915
|
-
| Embeddings
|
|
1916
|
-
| Async job queue
|
|
1917
|
-
| Attachments
|
|
1918
|
-
| Sandbox filesystem
|
|
1919
|
-
| Tool permission rules
|
|
1920
|
-
| Web users & assistants
|
|
1921
|
-
| Trace events
|
|
1922
|
-
| Media embed settings
|
|
1923
|
-
| Media embed MIME cache
|
|
1924
|
-
| Tasks & task runs
|
|
1925
|
-
| Work items (Task Queue)
|
|
1926
|
-
| Recurrence schedules & runs
|
|
1927
|
-
| Watchers & events
|
|
1928
|
-
| Proxy CA cert + key
|
|
1929
|
-
| Proxy leaf certs
|
|
1930
|
-
| Proxy sessions
|
|
1931
|
-
| Call sessions, events, pending questions
|
|
1932
|
-
| Active call controllers
|
|
1933
|
-
| Guardian bindings
|
|
1934
|
-
| Channel verification sessions
|
|
1935
|
-
| Guardian approval requests
|
|
1936
|
-
| Contact invites
|
|
1937
|
-
| Contacts & channels
|
|
1938
|
-
| Notification events
|
|
1939
|
-
| Notification decisions
|
|
1940
|
-
| Notification deliveries
|
|
1941
|
-
| Notification preferences
|
|
1898
|
+
| What | Where | Format | ORM/Driver | Retention |
|
|
1899
|
+
| ---------------------------------------- | ----------------------------------------------------------------- | ----------------------------------- | ---------------------------------- | ------------------------------------------------------- |
|
|
1900
|
+
| API key | macOS Keychain | Encrypted binary | `/usr/bin/security` CLI | Permanent |
|
|
1901
|
+
| Credential secrets | macOS Keychain (or encrypted file fallback) | Encrypted binary | `secure-keys.ts` wrapper | Permanent (until deleted via tool) |
|
|
1902
|
+
| Credential metadata | `~/.vellum/workspace/data/credentials/metadata.json` | JSON | Atomic file write | Permanent (until deleted via tool) |
|
|
1903
|
+
| Integration OAuth tokens | macOS Keychain (or encrypted file fallback, via `secure-keys.ts`) | Encrypted binary | `TokenManager` auto-refresh | Until disconnected or revoked |
|
|
1904
|
+
| User preferences | UserDefaults | plist | Foundation | Permanent |
|
|
1905
|
+
| Session logs | `~/Library/.../logs/session-*.json` | JSON per session | Swift Codable | Unbounded |
|
|
1906
|
+
| Conversations & messages | `~/.vellum/workspace/data/db/assistant.db` | SQLite + WAL | Drizzle ORM (Bun) | Permanent |
|
|
1907
|
+
| Memory segments | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent |
|
|
1908
|
+
| Extracted facts | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent, deduped |
|
|
1909
|
+
| Embeddings | `~/.vellum/workspace/data/db/assistant.db` | JSON float arrays | Drizzle ORM | Permanent |
|
|
1910
|
+
| Async job queue | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Completed jobs persist |
|
|
1911
|
+
| Attachments | `~/.vellum/workspace/data/db/assistant.db` | Base64 in SQLite | Drizzle ORM | Permanent |
|
|
1912
|
+
| Sandbox filesystem | `~/.vellum/workspace` | Real filesystem tree | Node FS APIs | Persistent across sessions |
|
|
1913
|
+
| Tool permission rules | `~/.vellum/protected/trust.json` | JSON | File I/O | Permanent |
|
|
1914
|
+
| Web users & assistants | PostgreSQL | Relational | Drizzle ORM (pg) | Permanent |
|
|
1915
|
+
| Trace events | In-memory (TraceStore) | Structured events | Swift ObservableObject | Max 5,000 per session, ephemeral |
|
|
1916
|
+
| Media embed settings | `~/.vellum/workspace/config.json` (`ui.mediaEmbeds`) | JSON | `WorkspaceConfigIO` (atomic merge) | Permanent |
|
|
1917
|
+
| Media embed MIME cache | In-memory (`ImageMIMEProbe`) | `NSCache` (500 entries) | HTTP HEAD | Ephemeral; cleared on app restart |
|
|
1918
|
+
| Tasks & task runs | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent |
|
|
1919
|
+
| Work items (Task Queue) | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; archived items retained |
|
|
1920
|
+
| Recurrence schedules & runs | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; supports cron and RRULE syntax |
|
|
1921
|
+
| Watchers & events | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent, cascade on watcher delete |
|
|
1922
|
+
| Proxy CA cert + key | `{dataDir}/proxy-ca/` | PEM files (ca.pem, ca-key.pem) | openssl CLI | Permanent (10-year validity) |
|
|
1923
|
+
| Proxy leaf certs | `{dataDir}/proxy-ca/issued/` | PEM files per hostname | openssl CLI, cached | 1-year validity, re-issued on CA change |
|
|
1924
|
+
| Proxy sessions | In-memory (SessionManager) | Map<ProxySessionId, ManagedSession> | Manual lifecycle | Ephemeral; 5min idle timeout, cleared on shutdown |
|
|
1925
|
+
| Call sessions, events, pending questions | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent, cascade on session delete |
|
|
1926
|
+
| Active call controllers | In-memory (CallState) | Map<callSessionId, CallController> | Manual lifecycle | Ephemeral; cleared on call end or destroy |
|
|
1927
|
+
| Guardian bindings | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; revoked bindings retained |
|
|
1928
|
+
| Channel verification sessions | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; consumed/expired sessions retained |
|
|
1929
|
+
| Guardian approval requests | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; decision outcome retained |
|
|
1930
|
+
| Contact invites | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; token hash stored, raw token never persisted |
|
|
1931
|
+
| Contacts & channels | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; revoked/blocked contacts retained |
|
|
1932
|
+
| Notification events | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; deduplicated by dedupeKey |
|
|
1933
|
+
| Notification decisions | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; FK to notification_events |
|
|
1934
|
+
| Notification deliveries | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; FK to notification_decisions |
|
|
1935
|
+
| Notification preferences | `~/.vellum/workspace/data/db/assistant.db` | SQLite | Drizzle ORM | Permanent; per-assistant conversational preferences |
|
|
1942
1936
|
|
|
1943
1937
|
### Sensitive Tool Output Placeholder Substitution
|
|
1944
1938
|
|
|
@@ -1973,7 +1967,7 @@ The daemon uses a single fixed internal scope constant — `DAEMON_INTERNAL_ASSI
|
|
|
1973
1967
|
|
|
1974
1968
|
The guardian trust system uses a three-valued `TrustClass` — `'guardian'`, `'trusted_contact'`, or `'unknown'` — as the single vocabulary for actor trust classification across all channels and runtime paths. There is no legacy `actorRole` concept; all trust decisions flow through `TrustClass`.
|
|
1975
1969
|
|
|
1976
|
-
**`TrustContext`** (in `src/daemon/
|
|
1970
|
+
**`TrustContext`** (in `src/daemon/conversation-runtime-assembly.ts`) is the single runtime carrier for trust state on channel-originated turns. It carries `trustClass`, guardian identity fields, and requester metadata. The `guardianPrincipalId` field is typed as `?: string` (optional but non-nullable) — a principal ID is present when a guardian binding exists but is never `null`.
|
|
1977
1971
|
|
|
1978
1972
|
**Explicit trust gates:** `trustClass` is a **required** field in `ToolContext` (in `src/tools/types.ts`). Every tool execution must carry a trust classification — the field is not optional. This ensures trust-gated tool policies (guardian control-plane restrictions, host-tool blocking for untrusted actors) cannot be bypassed by omitting the classification.
|
|
1979
1973
|
|
|
@@ -1987,7 +1981,7 @@ The guardian trust system uses a three-valued `TrustClass` — `'guardian'`, `'t
|
|
|
1987
1981
|
|
|
1988
1982
|
| File | Purpose |
|
|
1989
1983
|
| --------------------------------------------- | ----------------------------------------------------- |
|
|
1990
|
-
| `src/daemon/
|
|
1984
|
+
| `src/daemon/conversation-runtime-assembly.ts` | `TrustContext` type definition |
|
|
1991
1985
|
| `src/tools/types.ts` | `ToolContext.trustClass` (required trust gate) |
|
|
1992
1986
|
| `src/runtime/channel-retry-sweep.ts` | Strict `trustClass` parser for retry sweep |
|
|
1993
1987
|
| `src/memory/channel-verification-sessions.ts` | `GuardianBinding` with required `guardianPrincipalId` |
|