{"owner":"signalapp","repo":"Signal-Desktop","hasSkills":true,"totalSkillsCount":26,"totalTokensCount":10494,"categories":["anthropic-skill","plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["packages/lame/package.json","packages/mock-server/tsconfig.json","packages/lame/README.md","packages/mock-server/package.json","packages/mock-server/CHANGELOG.md","packages/mock-server/README.md","packages/mute-state-change/package.json","packages/types/README.md","packages/types/CHANGELOG.md","packages/mute-state-change/README.md","packages/types/package.json","packages/types/tsconfig.json","packages/windows-ucv/.prettierrc.json","packages/windows-ucv/README.md","packages/windows-ucv/package.json","packages/windows-ucv/tsconfig.json","packages/lame/dist/acknowledgments.md","packages/mock-server/certs/README.md","packages/mock-server/certs/trust-root.json","packages/mock-server/certs/zk-params.json","packages/mock-server/protos/README.md","packages/mute-state-change/dist/acknowledgments.md",".oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json","packages/mock-server/.github/workflows/publish.yaml","packages/mock-server/.github/workflows/test.yaml",".oxlint/rules/fixtures/noExtraneousDependencies/package/package.json"],"skills":{"packages/lame/package.json":"{\n  \"private\": true,\n  \"name\": \"@signalapp/lame\",\n  \"description\": \"LAME MP3 Encoder bindings for Node.js\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.mjs\",\n  \"types\": \"index.d.mts\",\n  \"files\": [\n    \"index.mjs\",\n    \"README.md\"\n  ],\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\"\n}\n","packages/mock-server/tsconfig.json":"{\n  \"compilerOptions\": {\n    /* Visit https://aka.ms/tsconfig.json to read more about this file */\n\n    /* Basic Options */\n    \"incremental\": true /* Enable incremental compilation */,\n    \"target\": \"esnext\" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,\n    \"module\": \"commonjs\" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,\n    \"declaration\": true /* Generates corresponding '.d.ts' file. */,\n\n    /* Strict Type-Checking Options */\n    \"strict\": true /* Enable all strict type-checking options. */,\n    \"noUncheckedIndexedAccess\": true,\n\n    /* Additional Checks */\n    \"noUnusedLocals\": true /* Report errors on unused locals. */,\n    \"noImplicitOverride\": true,\n    \"noImplicitReturns\": true,\n\n    \"esModuleInterop\": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,\n\n    /* Advanced Options */\n    \"skipLibCheck\": true /* Skip type checking of declaration files. */,\n    \"forceConsistentCasingInFileNames\": true /* Disallow inconsistently-cased references to the same file. */\n  },\n  \"include\": [\"src/**/*\", \"test/**/*\"]\n}\n","packages/lame/README.md":"<!-- Copyright 2025 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/lame\n\nBindings for [LAME MP3 Encoder][0].\n\n## Building\n\n```sh\nbrew install emscripten\nwget https://cytranet-dal.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz\ntar xzvf lame-3.100.tar.gz\ncd lame-3.100\necho '{}' > package.json # Emscripten can't run in \"type\": \"module\" package\nCFLAGS='-Oz -flto' emconfigure ./configure --disable-shared --disable-decoder \\\n  --disable-frontend --disable-gtktest \\\n  --disable-dependency-tracking --disable-analyzer-hooks --disable-cpml\nemmake make clean\nemmake make -j16\ncd -\nemcc -I lame-3.100/include -Oz -DNDEBUG -flto wrapper.c \\\n    ./lame-3.100/libmp3lame/.libs/libmp3lame.a -o wrapper.mjs \\\n    -sEXPORTED_FUNCTIONS=_wrapper_init,_wrapper_get_max_input_size,_wrapper_get_in,_wrapper_get_out,_wrapper_encode,_wrapper_flush,_wrapper_get_lametag_frame,_wrapper_close \\\n    -sEXPORTED_RUNTIME_METHODS=HEAPU8 -sDYNAMIC_EXECUTION=0 \\\n    -sENVIRONMENT=worklet -sWASM=0 -sWASM_ASYNC_COMPILATION=0\nsed -I '' 's/^async //' wrapper.mjs\n```\n\n## License\n\nCopyright 2025 Signal Messenger, LLC.\n\nLicensed under the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html\n\n[0]: https://lame.sourceforge.io/\n","packages/mock-server/package.json":"{\n  \"name\": \"@signalapp/mock-server\",\n  \"packageManager\": \"pnpm@10.18.1\",\n  \"version\": \"27.0.0\",\n  \"description\": \"Mock Signal Server for writing tests\",\n  \"main\": \"src/index.js\",\n  \"types\": \"src/index.d.ts\",\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"provenance\": false\n  },\n  \"files\": [\n    \"src/**/*.js\",\n    \"src/**/*.d.ts\",\n    \"protos/compiled.js\",\n    \"protos/compiled.d.ts\",\n    \"certs\"\n  ],\n  \"scripts\": {\n    \"watch\": \"npm run build:tsc -- -w\",\n    \"build:tsc\": \"tsc\",\n    \"build:protobuf\": \"protopiler --module cjs --output protos/compiled.js --typedefs protos/compiled.d.ts protos\",\n    \"build\": \"npm run build:protobuf && npm run build:tsc\",\n    \"format\": \"pprettier --write '**/*.ts'\",\n    \"mocha\": \"mocha test/**/*-test.js\",\n    \"lint:prettier\": \"pprettier --check '**/*.ts'\",\n    \"lint\": \"npm run lint:prettier\",\n    \"test\": \"npm run mocha && npm run lint\",\n    \"prepare\": \"npm run build\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+ssh://git@github.com/signalapp/Mock-Signal-Server.git\"\n  },\n  \"keywords\": [\n    \"mock\",\n    \"signal\",\n    \"server\"\n  ],\n  \"author\": {\n    \"name\": \"Open Whisper Systems\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"bugs\": {\n    \"url\": \"https://github.com/signalapp/Mock-Signal-Server/issues\"\n  },\n  \"homepage\": \"https://github.com/signalapp/Mock-Signal-Server#readme\",\n  \"dependencies\": {\n    \"@indutny/parallel-prettier\": \"^3.0.0\",\n    \"@indutny/protopiler\": \"4.0.0\",\n    \"@signalapp/libsignal-client\": \"0.105.1\",\n    \"@tus/file-store\": \"^1.5.1\",\n    \"@tus/server\": \"^1.10.2\",\n    \"debug\": \"^4.4.3\",\n    \"is-plain-obj\": \"3.0.0\",\n    \"micro\": \"^9.4.1\",\n    \"microrouter\": \"^3.1.3\",\n    \"prettier\": \"^3.8.3\",\n    \"type-fest\": \"^4.26.1\",\n    \"url-pattern\": \"^1.0.3\",\n    \"uuid\": \"^11.1.1\",\n    \"ws\": \"^8.21.0\",\n    \"zod\": \"^3.25.76\"\n  },\n  \"devDependencies\": {\n    \"@types/debug\": \"^4.1.13\",\n    \"@types/long\": \"^4.0.2\",\n    \"@types/micro\": \"^7.3.7\",\n    \"@types/microrouter\": \"^3.1.6\",\n    \"@types/mocha\": \"^10.0.10\",\n    \"@types/node\": \"^24.12.0\",\n    \"@types/uuid\": \"^8.3.4\",\n    \"@types/ws\": \"^8.18.1\",\n    \"mocha\": \"^11.7.5\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"pnpm\": {\n    \"patchedDependencies\": {\n      \"@types/ws\": \"patches/@types__ws.patch\"\n    }\n  }\n}\n","packages/mock-server/CHANGELOG.md":"# @signalapp/mock-server\n\n## 27.0.0\n\n### Major Changes\n\n- 375e413: Moves backup APIs to GRPC\n- 375e413: Moves backup listMedia to GRPC\n\n### Minor Changes\n\n- 2886354: Make the storage item/manifest accessors synchronous so that writes can't interleave with reads\n\n## 26.0.0\n\n### Major Changes\n\n- ae68dc8: gRPC support for username hash/link endpoints\n","packages/mock-server/README.md":"<!-- Copyright 2021 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# Signal Mock Server\n\n## Overview\n\nThis npm module is a mock implementation of Signal Server, currently only used\nin [Signal Desktop integration tests][0]. Public API surface area can be found at\n[`src/api`][1].\n\n## Installation\n\n```sh\nnpm install --dev @signalapp/mock-server\n```\n\n## License\n\nCopyright 2022 Signal, a 501c3 nonprofit\n\nLicensed under the AGPLv3: https://opensource.org/licenses/agpl-3.0\n\n[0]: https://github.com/signalapp/Signal-Desktop/tree/development/ts/test-mock\n[1]: https://github.com/signalapp/Mock-Signal-Server/tree/main/src/api\n","packages/mute-state-change/package.json":"{\n  \"private\": true,\n  \"name\": \"@signalapp/mute-state-change\",\n  \"description\": \"ScreenCaptureKit bindings for Node.js\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.mjs\",\n  \"types\": \"index.d.ts\",\n  \"keywords\": [\n    \"AVAudioApplication\",\n    \"macos\",\n    \"mute\"\n  ],\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\",\n    \"binding.gyp\",\n    \"addon.mm\",\n    \"README.md\"\n  ],\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"bugs\": {\n    \"url\": \"https://github.com/signalapp/mute-state-change/issues\"\n  },\n  \"homepage\": \"https://github.com/signalapp/mute-state-change#readme\",\n  \"dependencies\": {\n    \"bindings\": \"1.5.0\",\n    \"node-addon-api\": \"8.5.0\"\n  },\n  \"scripts\": {\n    \"format\": \"npm run format:js && npm run format:c\",\n    \"format:js\": \"prettier --cache --write .\",\n    \"format:c\": \"xcrun clang-format --style=chromium -Werror --verbose -i *.mm\"\n  },\n  \"devDependencies\": {\n    \"prettier\": \"3.6.2\"\n  }\n}\n","packages/types/README.md":"<!-- Copyright 2014 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/types\n\nThis package provides shared opaque and utility types and related helper\nfunctions for use across different Signal libraries and desktop apps.\n\n```ts\nimport { Aci, SentTimestampMs, DurationSecs } from '@signalapp/types';\n\nexport type PinnedMessage = Readonly<{\n  targetSentTimestamp: SentTimestampMs;\n  targetAuthorAci: Aci;\n  pinDuration: DurationSecs;\n}>;\n```\n\n## API\n\n```ts\nimport type { Tagged } from 'type-fest';\n\n// Result\ntype Result<T, E = string> = Result.Ok<T> | Result.Err<E>;\ntype Result.Ok<T> = Readonly<{ ok: true; value: T; error?: never; }>;\ntype Result.Err<E = string> = Readonly<{ ok: false; value?: never; error: E; }>;\n\n// Numbers\ntype Uint8 = Tagged<number, 'Uint8'>;\ntype Uint16 = Tagged<number, 'Uint16'>;\ntype Uint32 = Tagged<number, 'Uint32'>;\ntype BigUint64 = Tagged<bigint, 'BigUint64'>;\ntype BigUint128 = Tagged<bigint, 'BigUint128'>;\ntype Int8 = Tagged<number, 'Int8'>;\ntype Int16 = Tagged<number, 'Int16'>;\ntype Int32 = Tagged<number, 'Int32'>;\ntype BigInt64 = Tagged<bigint, 'BigInt64'>;\ntype BigInt128 = Tagged<bigint, 'BigInt128'>;\ntype Float16 = Tagged<number, 'Float16'>;\ntype Float32 = Tagged<number, 'Float32'>;\ntype Float64 = Tagged<number, 'Float64'>;\n\n// Units\ntype UnitBytes = Tagged<Float64, 'UnitBytes'>;;\ntype UnitKilobytes = Tagged<Float64, 'UnitKilobytes'>;\ntype UnitKibibytes = Tagged<Float64, 'UnitKibibytes'>;\n\n// Datetime\ntype TimestampMs = Tagged<number, 'TimestampMs'>;\ntype TimestampSecs = Tagged<number, 'TimestampSecs'>;\ntype DurationMs = Tagged<Uint32, 'DurationMs'>;\ntype DurationSecs = Tagged<Uint32, 'DurationSecs'>;\ntype DurationDays = Tagged<Uint32, 'DurationDays'>;\ntype PlainTimeHourMin = Tagged<Uint32, 'PlainTimeHourMin'>;\n\n// Encodings\ntype Bytes = Uint8Array<ArrayBuffer>;\ntype Bytes.Of<T> = Tagged<Bytes, 'Bytes.Of', T>;\ntype Base64 = Tagged<string, 'Base64'>;\ntype Base64.Of<T> = Tagged<Base64, 'Base64.Of', T>;\ntype Base64Url = Tagged<string, 'Base64Url'>;\ntype Base64Url.Of<T> = Tagged<Base64Url, 'Base64URL.Of', T>;\ntype Hex = Tagged<string, 'Hex'>;\ntype Hex.Of<T> = Tagged<Hex, 'Hex.Of', T>;\ntype Json = Tagged<string, 'Json'>;\ntype Json.Of<T extends JsonValue> = Tagged<Json, 'Json.Of', T>;\ntype JsonPrimitive = null | boolean | number | string;\ntype JsonArray = Array<JsonValue> | ReadonlyArray<JsonValue>;\ntype JsonObject = { [Key in string]: JsonValue };\ntype JsonValue = JsonPrimitive | JsonArray | JsonObject;\ntype Utf8.Of<T extends string> = Tagged<T, 'Utf8.Of'>;\n\n// Formats\ntype CountryCode = Tagged<string, 'CountryCode'>;\ntype CurrencyCode = Tagged<string, 'CurrencyCode'>;\ntype HexColor = Tagged<`#${string}`, 'HexColor'>;\ntype HttpUrl = Tagged<string, 'HttpUrl'>;\ntype LanguageTag = Tagged<string, 'LanguageTag'>;\ntype MimeType = Tagged<`${string}/${string}`, 'MimeType'>;\ntype Semver = Tagged<string, 'Semver'>;\ntype Uuid = Tagged<string, 'Uuid'>;\n\n// Service\ntype AccountEntropyPool = Tagged<string, 'AccountEntropyPool'>;\n\ntype E164 = E164.Decoded;\ntype E164.Opaque = Tagged<`+${string}`, 'E164'>;\ntype E164.Encoded = Utf8.Of<E164.Opaque>;\ntype E164.Decoded = Bytes.Of<E164.Opaque>;\n\ntype Aci = Aci.Decoded;\ntype Aci.Opaque = Tagged<Uuid, 'Aci'>;\ntype Aci.Decoded = Utf8.Of<Aci.Opaque>;\ntype Aci.Encoded = Bytes.Of<Aci.Opaque>;\n\ntype Pni = Utf8.Of<Pni.Opaque>;\ntype Pni.Opaque = Tagged<`PNI:${Uuid}`, 'Pni'>;\ntype Pni.Decoded = Utf8.Of<Pni.Opaque>;\ntype Pni.Encoded = Bytes.Of<Pni.Opaque>;\n\ntype UntaggedPni = UntaggedPni.Decoded;\ntype UntaggedPni.Opaque = Tagged<Uuid, 'UntaggedPni'>;\ntype UntaggedPni.Decoded = Utf8.Of<UntaggedPni.Opaque>;\ntype UntaggedPni.Encoded = Bytes.Of<UntaggedPni.Opaque>;\n\ntype ServiceId = ServiceId.Decoded;\ntype ServiceId.Decoded = Aci | Pni;\ntype ServiceId.Encoded = Bytes.Of<Decoded>;\n\ntype DeviceId = Tagged<Uint32, 'DeviceId'>;\n\ntype Address = Address.Decoded;\ntype Address.Opaque = Tagged<`${ServiceId}.${DeviceId}`, 'Address'>;\ntype Address.Decoded = Utf8.Of<Address.Opaque>;\ntype Address.Encoded = Bytes.Of<Address.Opaque>;\n\ntype AddressInfo = Tagged<AddressInfo.Params, 'AddressInfo'>;\ntype AddressInfo.Params = Readonly<{ serviceId: ServiceId; deviceId: DeviceId; }>;\n\ntype Username = Tagged<Utf8.Of<`${UsernameNickname}.${UsernameDiscriminator}`>, 'Username'>;\ntype Username.Params = Readonly<{ nickname: UsernameNickname; discriminator: UsernameDiscriminator }>;\ntype UsernameNickname = Tagged<Utf8.Of<string>, 'UsernameNickname'>;\ntype UsernameDiscriminator = Tagged<`${number}`, 'UsernameDiscriminator'>;\ntype UsernameHash = Tagged<Bytes, 'UsernameHash'>;\ntype UsernameProof = Tagged<Bytes, 'UsernameProof'>;\n\ntype RegistrationId = Tagged<Uint16, 'RegistrationId'>;\n\ntype DistributionId = DistributionId.Decoded;\ntype DistributionId.Opaque = Tagged<Uuid, 'DistributionId'>;\ntype DistributionId.Decoded = Utf8.Of<DistributionId.Opaque>;\ntype DistributionId.Encoded = Bytes.Of<DistributionId.Opaque>;\n\ntype ProfileKey = ProfileKey.Decoded;\ntype ProfileKey.Opaque = Tagged<unknown, 'ProfileKey'>;\ntype ProfileKey.Decoded = Base64.Of<ProfileKey.Opaque>;\ntype ProfileKey.Encoded = Bytes.Of<ProfileKey.Opaque>;\n\ntype ProfileKeyVersion = ProfileKeyVersion.Decoded;\ntype ProfileKeyVersion.Opaque = Tagged<string, 'ProfileKeyVersion'>;\ntype ProfileKeyVersion.Decoded = Utf8.Of<ProfileKeyVersion.Opaque>;\ntype ProfileKeyVersion.Encoded = Bytes.Of<ProfileKeyVersion.Opaque>;\n\ntype GroupId = GroupId.Decoded;\ntype GroupId.Opaque = Tagged<unknown, 'GroupId'>;\ntype GroupId.Decoded = Base64.Of<GroupId.Opaque>;\ntype GroupId.Encoded = Bytes.Of<GroupId.Opaque>;\n\ntype GroupVersion = Tagged<Uint32, 'GroupVersion'>;\n\ntype GroupMasterKey = GroupMasterKey.Decoded;\ntype GroupMasterKey.Opaque = Tagged<unknown, 'GroupMasterKey'>;\ntype GroupMasterKey.Decoded = Base64.Of<GroupMasterKey.Opaque>;\ntype GroupMasterKey.Encoded = Bytes.Of<GroupMasterKey.Opaque>;\n\ntype GroupSecretParams = GroupSecretParams.Decoded;\ntype GroupSecretParams.Opaque = Tagged<unknown, 'GroupSecretParams'>;\ntype GroupSecretParams.Decoded = Base64.Of<GroupSecretParams.Opaque>;\ntype GroupSecretParams.Encoded = Bytes.Of<GroupSecretParams.Opaque>;\n\ntype GroupPublicParams = GroupPublicParams.Decoded;\ntype GroupPublicParams.Opaque = Tagged<unknown, 'GroupPublicParams'>;\ntype GroupPublicParams.Decoded = Base64.Of<GroupPublicParams.Opaque>;\ntype GroupPublicParams.Encoded = Bytes.Of<GroupPublicParams.Opaque>;\n\ntype GroupInviteLinkPassword = GroupInviteLinkPassword.Decoded;\ntype GroupInviteLinkPassword.Opaque = Tagged<unknown, 'GroupInviteLinkPassword'>;\ntype GroupInviteLinkPassword.Decoded = Base64.Of<GroupInviteLinkPassword.Opaque>;\ntype GroupInviteLinkPassword.Encoded = Bytes.Of<GroupInviteLinkPassword.Opaque>;\n\ntype DistributionListId = DistributionListId.Decoded;\ntype DistributionListId.Opaque = Tagged<Uuid, 'DistributionListId'>;\ntype DistributionListId.Decoded = Utf8.Of<DistributionListId.Opaque>;\ntype DistributionListId.Encoded = Bytes.Of<DistributionListId.Opaque>;\n\ntype SentTimestampMs = Tagged<TimestampMs, 'SentTimestampMs'>;\ntype ServerTimestampMs = Tagged<TimestampMs, 'ServerTimestampMs'>;\ntype ReceivedTimestampMs = Tagged<TimestampMs, 'ReceivedTimestampMs'>;\n\ntype StorageManifestVersion = Tagged<BigUint64, 'StorageManifestVersion'>;\n\ntype StorageItemKey = StorageItemKey.Decoded;\ntype StorageItemKey.Opaque = Tagged<unknown, 'StorageItemKey'>;\ntype StorageItemKey.Decoded = Base64.Of<Opaque>;\ntype StorageItemKey.Encoded = Bytes.Of<Opaque>;\n\ntype UnidentifiedAccessKey = UnidentifiedAccessKey.Decoded;\ntype UnidentifiedAccessKey.Opaque = Tagged<unknown, 'UnidentifiedAccessKey'>;\ntype UnidentifiedAccessKey.Decoded = Base64.Of<UnidentifiedAccessKey.Opaque>;\ntype UnidentifiedAccessKey.Encoded = Bytes.Of<UnidentifiedAccessKey.Opaque>;\n\ntype ServerGuid = ServerGuid.Decoded;\ntype ServerGuid.Opaque = Tagged<Uuid, 'ServerGuid'>;\ntype ServerGuid.Decoded = Utf8.Of<ServerGuid.Opaque>;\ntype ServerGuid.Encoded = Bytes.Of<ServerGuid.Opaque>;\n\ntype ReportSpamToken = ReportSpamToken.Decoded;\ntype ReportSpamToken.Opaque = Tagged<unknown, 'ReportSpamToken'>;\ntype ReportSpamToken.Decoded = Base64.Of<ReportSpamToken.Opaque>;\ntype ReportSpamToken.Encoded = Bytes.Of<ReportSpamToken.Opaque>;\n\ntype MuteExpiration = Tagged<Float64, 'MuteExpiration'>;\n```\n\n### Schemas\n\nAlmost all of these types provide Zod schemas:\n\n```ts\nimport { Aci, SentTimestampMs, DurationSecs } from '@signalapp/types';\n\nexport const PinnedMessageSchema = z.object({\n  targetSentTimestamp: SentTimestampMs.Schema,\n  targetAuthorAci: Aci.Schema,\n  pinDuration: DurationSecs.Schema,\n});\n```\n\n### Helpers\n\nTypes have helpers for casting loosely typed data to strict types:\n\n> Note: You should prefer to use the most specific `from*` method that you can,\n> it will generally have less runtime cost checking the type is valid.\n\n```ts\nAci.isValid(input: string): input is Aci; // boolean\nAci.fromUuid(input: Uuid): Aci; // throws if invalid\nAci.fromString(input: string): Aci; // throws if invalid\n```\n\n### Encodings\n\nEncodings have special `<Encoding>.Of<T>` types to represent internal opaque\ntypes:\n\n```ts\n// Maybe this just represents some random number generation that we should not be aware of\nexport type MyOpaqueType = Tagged<unknown, 'MyOpaqueType'>;\n\nexport function decode(input: Bytes.Of<MyOpaqueType>): Base64.Of<MyOpaqueType> {\n  return Base64.fromBytes(input);\n}\n\nexport function encode(input: Bytes.Of<MyOpaqueType>): Base64.Of<MyOpaqueType> {\n  return Base64.toBytes(input);\n}\n```\n\nMany of the \"service\" types use these `<Encoding>.Of` types to wrap their own\ninternal `Opaque` type with expected encodings along with `encode` and `decode`\nhelpers:\n\n```ts\nexport type StorageItemKey = StorageItemKey.Decoded;\n\nexport namespace StorageItemKey {\n  type Opaque = Tagged<unknown, 'StorageItemKey'>;\n\n  export type Decoded = Base64.Of<Opaque>;\n  export type Encoded = Bytes.Of<Opaque>;\n\n  export function decode(input: Encoded): StorageItemKey {\n    return Base64.fromBytes(input);\n  }\n\n  export function encode(input: StorageItemKey): Encoded {\n    return Base64.toBytes(input);\n  }\n}\n```\n\n## Future Ideas\n\n- General:\n  - [ ] `NonEmpty<T extends { length: number }>`\n  - [ ] `NonZero<T extends number | bigint>`\n- Units:\n  - [ ] `Dimension`\n  - [ ] `Width`\n  - [ ] `Height`\n  - [ ] `BlurHash`\n  - [ ] `Email`\n- File System:\n  - [ ] `FileName`\n  - [ ] `FilePath`\n  - [ ] `FileExtension`\n- Net:\n  - [ ] `BasicAuth`\n  - [ ] `IpV4`\n  - [ ] `IpV6`\n  - [ ] `IpAddr`\n  - [ ] `Domain/Hostname`\n  - [ ] `Protocol`\n  - [ ] `Port`\n- Service:\n  - [ ] `UserText` / `TrustedText`\n","packages/types/CHANGELOG.md":"# @signalapp/types\n\n## 0.3.0\n\n### Minor Changes\n\n- e8fd531: Add MuteExpiration\n\n## 0.2.0\n\n### Minor Changes\n\n- 534f2f1: - formats: Add `CountryCode`\n  - formats: Add `CurrencyCode`\n  - service: Update `DeviceId` range to 1 to 127\n  - service: Add `GroupInviteLinkPassword`\n  - service: Add `GroupMasterKey`\n  - service: Add `GroupPublicParams`\n  - service: Add `GroupSecretParams`\n  - service: Add `GroupVersion`\n  - service: Add `ProfileKey`\n  - service: Add `ProfileKeyVersion`\n  - service: Add `RegistrationId`\n  - service: Add `ReportSpamToken`\n  - service: Add `ServerGuid`\n  - service: Add `UnidentifiedAccessKey`\n\n## 0.1.1\n\n### Patch Changes\n\n- ee66d16: Enable trusted publishing\n\n## 0.1.0\n\n### Minor Changes\n\n- b4c4a9d: Initial Release\n","packages/mute-state-change/README.md":"<!-- Copyright 2025 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/mute-state-change\n\n[![npm](https://img.shields.io/npm/v/@signalapp/mute-state-change)](https://www.npmjs.com/package/@signalapp/mute-state-change)\n\nBindings for macOS AVAudioApplication.\n\n## License\n\nCopyright 2025 Signal Messenger, LLC.\n\nLicensed under the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html\n","packages/types/package.json":"{\n  \"name\": \"@signalapp/types\",\n  \"version\": \"0.3.0\",\n  \"license\": \"AGPL-3.0-only\",\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"provenance\": false\n  },\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"source\": \"src/index.std.ts\",\n  \"main\": \"dist/index.std.cjs\",\n  \"module\": \"dist/index.std.mjs\",\n  \"types\": \"dist/index.std.d.mts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./dist/index.std.d.mts\",\n        \"default\": \"./dist/index.std.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./dist/index.std.d.cts\",\n        \"default\": \"./dist/index.std.cjs\"\n      }\n    }\n  },\n  \"engines\": {\n    \"node\": \">=24.22.0\"\n  },\n  \"scripts\": {\n    \"check\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"prepare\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"buffer\": \"6.0.3\",\n    \"semver\": \"7.7.4\",\n    \"type-fest\": \"5.5.0\",\n    \"uuid\": \"13.0.2\",\n    \"zod\": \"4.3.6\"\n  },\n  \"devDependencies\": {\n    \"@arethetypeswrong/core\": \"0.18.5\",\n    \"publint\": \"0.3.21\",\n    \"tsdown\": \"0.22.14\",\n    \"typescript\": \"7.0.2\"\n  }\n}\n","packages/types/tsconfig.json":"{\n  \"include\": [\"./src\"],\n  \"compilerOptions\": {\n    \"target\": \"ES2025\",\n    \"lib\": [\"ESNext\"],\n\n    \"module\": \"esnext\",\n    \"rootDir\": \"./src\",\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"rewriteRelativeImportExtensions\": true,\n    \"resolvePackageJsonExports\": true,\n    \"resolvePackageJsonImports\": true,\n    \"noUncheckedSideEffectImports\": true,\n    \"resolveJsonModule\": true,\n\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"inlineSourceMap\": true,\n    \"noEmit\": false,\n    \"outDir\": \"./dist\",\n\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"isolatedDeclarations\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"erasableSyntaxOnly\": false,\n\n    \"strict\": true,\n    \"noImplicitAny\": true,\n    \"strictNullChecks\": true,\n    \"strictFunctionTypes\": true,\n    \"strictBindCallApply\": true,\n    \"strictPropertyInitialization\": true,\n    \"strictBuiltinIteratorReturn\": true,\n    \"noImplicitThis\": true,\n    \"useUnknownInCatchVariables\": true,\n    \"alwaysStrict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"exactOptionalPropertyTypes\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitOverride\": true,\n    \"noPropertyAccessFromIndexSignature\": true,\n    \"allowUnusedLabels\": false,\n    \"allowUnreachableCode\": false,\n    \"skipLibCheck\": false\n  }\n}\n","packages/windows-ucv/.prettierrc.json":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/.prettierrc.json)","packages/windows-ucv/README.md":"# windows-ucv Documentation\n\nPath: `packages/windows-ucv/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/README.md)","packages/windows-ucv/package.json":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/package.json)","packages/windows-ucv/tsconfig.json":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/tsconfig.json)","packages/lame/dist/acknowledgments.md":"# Dist Skill\n\nPath: `packages/lame/dist/acknowledgments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/lame/dist/acknowledgments.md)","packages/mock-server/certs/README.md":"# certs Documentation\n\nPath: `packages/mock-server/certs/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/README.md)","packages/mock-server/certs/trust-root.json":"# Certs Skill\n\nPath: `packages/mock-server/certs/trust-root.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/trust-root.json)","packages/mock-server/certs/zk-params.json":"# Certs Skill\n\nPath: `packages/mock-server/certs/zk-params.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/zk-params.json)","packages/mock-server/protos/README.md":"# protos Documentation\n\nPath: `packages/mock-server/protos/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/protos/README.md)","packages/mute-state-change/dist/acknowledgments.md":"# Dist Skill\n\nPath: `packages/mute-state-change/dist/acknowledgments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mute-state-change/dist/acknowledgments.md)",".oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json":"# NoRestrictedPaths Skill\n\nPath: `.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json)","packages/mock-server/.github/workflows/publish.yaml":"# Workflows Skill\n\nPath: `packages/mock-server/.github/workflows/publish.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/publish.yaml)","packages/mock-server/.github/workflows/test.yaml":"# Workflows Skill\n\nPath: `packages/mock-server/.github/workflows/test.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/test.yaml)",".oxlint/rules/fixtures/noExtraneousDependencies/package/package.json":"# Package Skill\n\nPath: `.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json)"},"files":{"packages/lame/package.json":"{\n  \"private\": true,\n  \"name\": \"@signalapp/lame\",\n  \"description\": \"LAME MP3 Encoder bindings for Node.js\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.mjs\",\n  \"types\": \"index.d.mts\",\n  \"files\": [\n    \"index.mjs\",\n    \"README.md\"\n  ],\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\"\n}\n","packages/mock-server/tsconfig.json":"{\n  \"compilerOptions\": {\n    /* Visit https://aka.ms/tsconfig.json to read more about this file */\n\n    /* Basic Options */\n    \"incremental\": true /* Enable incremental compilation */,\n    \"target\": \"esnext\" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,\n    \"module\": \"commonjs\" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,\n    \"declaration\": true /* Generates corresponding '.d.ts' file. */,\n\n    /* Strict Type-Checking Options */\n    \"strict\": true /* Enable all strict type-checking options. */,\n    \"noUncheckedIndexedAccess\": true,\n\n    /* Additional Checks */\n    \"noUnusedLocals\": true /* Report errors on unused locals. */,\n    \"noImplicitOverride\": true,\n    \"noImplicitReturns\": true,\n\n    \"esModuleInterop\": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,\n\n    /* Advanced Options */\n    \"skipLibCheck\": true /* Skip type checking of declaration files. */,\n    \"forceConsistentCasingInFileNames\": true /* Disallow inconsistently-cased references to the same file. */\n  },\n  \"include\": [\"src/**/*\", \"test/**/*\"]\n}\n","packages/lame/README.md":"<!-- Copyright 2025 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/lame\n\nBindings for [LAME MP3 Encoder][0].\n\n## Building\n\n```sh\nbrew install emscripten\nwget https://cytranet-dal.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz\ntar xzvf lame-3.100.tar.gz\ncd lame-3.100\necho '{}' > package.json # Emscripten can't run in \"type\": \"module\" package\nCFLAGS='-Oz -flto' emconfigure ./configure --disable-shared --disable-decoder \\\n  --disable-frontend --disable-gtktest \\\n  --disable-dependency-tracking --disable-analyzer-hooks --disable-cpml\nemmake make clean\nemmake make -j16\ncd -\nemcc -I lame-3.100/include -Oz -DNDEBUG -flto wrapper.c \\\n    ./lame-3.100/libmp3lame/.libs/libmp3lame.a -o wrapper.mjs \\\n    -sEXPORTED_FUNCTIONS=_wrapper_init,_wrapper_get_max_input_size,_wrapper_get_in,_wrapper_get_out,_wrapper_encode,_wrapper_flush,_wrapper_get_lametag_frame,_wrapper_close \\\n    -sEXPORTED_RUNTIME_METHODS=HEAPU8 -sDYNAMIC_EXECUTION=0 \\\n    -sENVIRONMENT=worklet -sWASM=0 -sWASM_ASYNC_COMPILATION=0\nsed -I '' 's/^async //' wrapper.mjs\n```\n\n## License\n\nCopyright 2025 Signal Messenger, LLC.\n\nLicensed under the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html\n\n[0]: https://lame.sourceforge.io/\n","packages/mock-server/package.json":"{\n  \"name\": \"@signalapp/mock-server\",\n  \"packageManager\": \"pnpm@10.18.1\",\n  \"version\": \"27.0.0\",\n  \"description\": \"Mock Signal Server for writing tests\",\n  \"main\": \"src/index.js\",\n  \"types\": \"src/index.d.ts\",\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"provenance\": false\n  },\n  \"files\": [\n    \"src/**/*.js\",\n    \"src/**/*.d.ts\",\n    \"protos/compiled.js\",\n    \"protos/compiled.d.ts\",\n    \"certs\"\n  ],\n  \"scripts\": {\n    \"watch\": \"npm run build:tsc -- -w\",\n    \"build:tsc\": \"tsc\",\n    \"build:protobuf\": \"protopiler --module cjs --output protos/compiled.js --typedefs protos/compiled.d.ts protos\",\n    \"build\": \"npm run build:protobuf && npm run build:tsc\",\n    \"format\": \"pprettier --write '**/*.ts'\",\n    \"mocha\": \"mocha test/**/*-test.js\",\n    \"lint:prettier\": \"pprettier --check '**/*.ts'\",\n    \"lint\": \"npm run lint:prettier\",\n    \"test\": \"npm run mocha && npm run lint\",\n    \"prepare\": \"npm run build\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+ssh://git@github.com/signalapp/Mock-Signal-Server.git\"\n  },\n  \"keywords\": [\n    \"mock\",\n    \"signal\",\n    \"server\"\n  ],\n  \"author\": {\n    \"name\": \"Open Whisper Systems\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"bugs\": {\n    \"url\": \"https://github.com/signalapp/Mock-Signal-Server/issues\"\n  },\n  \"homepage\": \"https://github.com/signalapp/Mock-Signal-Server#readme\",\n  \"dependencies\": {\n    \"@indutny/parallel-prettier\": \"^3.0.0\",\n    \"@indutny/protopiler\": \"4.0.0\",\n    \"@signalapp/libsignal-client\": \"0.105.1\",\n    \"@tus/file-store\": \"^1.5.1\",\n    \"@tus/server\": \"^1.10.2\",\n    \"debug\": \"^4.4.3\",\n    \"is-plain-obj\": \"3.0.0\",\n    \"micro\": \"^9.4.1\",\n    \"microrouter\": \"^3.1.3\",\n    \"prettier\": \"^3.8.3\",\n    \"type-fest\": \"^4.26.1\",\n    \"url-pattern\": \"^1.0.3\",\n    \"uuid\": \"^11.1.1\",\n    \"ws\": \"^8.21.0\",\n    \"zod\": \"^3.25.76\"\n  },\n  \"devDependencies\": {\n    \"@types/debug\": \"^4.1.13\",\n    \"@types/long\": \"^4.0.2\",\n    \"@types/micro\": \"^7.3.7\",\n    \"@types/microrouter\": \"^3.1.6\",\n    \"@types/mocha\": \"^10.0.10\",\n    \"@types/node\": \"^24.12.0\",\n    \"@types/uuid\": \"^8.3.4\",\n    \"@types/ws\": \"^8.18.1\",\n    \"mocha\": \"^11.7.5\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"pnpm\": {\n    \"patchedDependencies\": {\n      \"@types/ws\": \"patches/@types__ws.patch\"\n    }\n  }\n}\n","packages/mock-server/CHANGELOG.md":"# @signalapp/mock-server\n\n## 27.0.0\n\n### Major Changes\n\n- 375e413: Moves backup APIs to GRPC\n- 375e413: Moves backup listMedia to GRPC\n\n### Minor Changes\n\n- 2886354: Make the storage item/manifest accessors synchronous so that writes can't interleave with reads\n\n## 26.0.0\n\n### Major Changes\n\n- ae68dc8: gRPC support for username hash/link endpoints\n","packages/mock-server/README.md":"<!-- Copyright 2021 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# Signal Mock Server\n\n## Overview\n\nThis npm module is a mock implementation of Signal Server, currently only used\nin [Signal Desktop integration tests][0]. Public API surface area can be found at\n[`src/api`][1].\n\n## Installation\n\n```sh\nnpm install --dev @signalapp/mock-server\n```\n\n## License\n\nCopyright 2022 Signal, a 501c3 nonprofit\n\nLicensed under the AGPLv3: https://opensource.org/licenses/agpl-3.0\n\n[0]: https://github.com/signalapp/Signal-Desktop/tree/development/ts/test-mock\n[1]: https://github.com/signalapp/Mock-Signal-Server/tree/main/src/api\n","packages/mute-state-change/package.json":"{\n  \"private\": true,\n  \"name\": \"@signalapp/mute-state-change\",\n  \"description\": \"ScreenCaptureKit bindings for Node.js\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.mjs\",\n  \"types\": \"index.d.ts\",\n  \"keywords\": [\n    \"AVAudioApplication\",\n    \"macos\",\n    \"mute\"\n  ],\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\",\n    \"binding.gyp\",\n    \"addon.mm\",\n    \"README.md\"\n  ],\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"bugs\": {\n    \"url\": \"https://github.com/signalapp/mute-state-change/issues\"\n  },\n  \"homepage\": \"https://github.com/signalapp/mute-state-change#readme\",\n  \"dependencies\": {\n    \"bindings\": \"1.5.0\",\n    \"node-addon-api\": \"8.5.0\"\n  },\n  \"scripts\": {\n    \"format\": \"npm run format:js && npm run format:c\",\n    \"format:js\": \"prettier --cache --write .\",\n    \"format:c\": \"xcrun clang-format --style=chromium -Werror --verbose -i *.mm\"\n  },\n  \"devDependencies\": {\n    \"prettier\": \"3.6.2\"\n  }\n}\n","packages/types/README.md":"<!-- Copyright 2014 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/types\n\nThis package provides shared opaque and utility types and related helper\nfunctions for use across different Signal libraries and desktop apps.\n\n```ts\nimport { Aci, SentTimestampMs, DurationSecs } from '@signalapp/types';\n\nexport type PinnedMessage = Readonly<{\n  targetSentTimestamp: SentTimestampMs;\n  targetAuthorAci: Aci;\n  pinDuration: DurationSecs;\n}>;\n```\n\n## API\n\n```ts\nimport type { Tagged } from 'type-fest';\n\n// Result\ntype Result<T, E = string> = Result.Ok<T> | Result.Err<E>;\ntype Result.Ok<T> = Readonly<{ ok: true; value: T; error?: never; }>;\ntype Result.Err<E = string> = Readonly<{ ok: false; value?: never; error: E; }>;\n\n// Numbers\ntype Uint8 = Tagged<number, 'Uint8'>;\ntype Uint16 = Tagged<number, 'Uint16'>;\ntype Uint32 = Tagged<number, 'Uint32'>;\ntype BigUint64 = Tagged<bigint, 'BigUint64'>;\ntype BigUint128 = Tagged<bigint, 'BigUint128'>;\ntype Int8 = Tagged<number, 'Int8'>;\ntype Int16 = Tagged<number, 'Int16'>;\ntype Int32 = Tagged<number, 'Int32'>;\ntype BigInt64 = Tagged<bigint, 'BigInt64'>;\ntype BigInt128 = Tagged<bigint, 'BigInt128'>;\ntype Float16 = Tagged<number, 'Float16'>;\ntype Float32 = Tagged<number, 'Float32'>;\ntype Float64 = Tagged<number, 'Float64'>;\n\n// Units\ntype UnitBytes = Tagged<Float64, 'UnitBytes'>;;\ntype UnitKilobytes = Tagged<Float64, 'UnitKilobytes'>;\ntype UnitKibibytes = Tagged<Float64, 'UnitKibibytes'>;\n\n// Datetime\ntype TimestampMs = Tagged<number, 'TimestampMs'>;\ntype TimestampSecs = Tagged<number, 'TimestampSecs'>;\ntype DurationMs = Tagged<Uint32, 'DurationMs'>;\ntype DurationSecs = Tagged<Uint32, 'DurationSecs'>;\ntype DurationDays = Tagged<Uint32, 'DurationDays'>;\ntype PlainTimeHourMin = Tagged<Uint32, 'PlainTimeHourMin'>;\n\n// Encodings\ntype Bytes = Uint8Array<ArrayBuffer>;\ntype Bytes.Of<T> = Tagged<Bytes, 'Bytes.Of', T>;\ntype Base64 = Tagged<string, 'Base64'>;\ntype Base64.Of<T> = Tagged<Base64, 'Base64.Of', T>;\ntype Base64Url = Tagged<string, 'Base64Url'>;\ntype Base64Url.Of<T> = Tagged<Base64Url, 'Base64URL.Of', T>;\ntype Hex = Tagged<string, 'Hex'>;\ntype Hex.Of<T> = Tagged<Hex, 'Hex.Of', T>;\ntype Json = Tagged<string, 'Json'>;\ntype Json.Of<T extends JsonValue> = Tagged<Json, 'Json.Of', T>;\ntype JsonPrimitive = null | boolean | number | string;\ntype JsonArray = Array<JsonValue> | ReadonlyArray<JsonValue>;\ntype JsonObject = { [Key in string]: JsonValue };\ntype JsonValue = JsonPrimitive | JsonArray | JsonObject;\ntype Utf8.Of<T extends string> = Tagged<T, 'Utf8.Of'>;\n\n// Formats\ntype CountryCode = Tagged<string, 'CountryCode'>;\ntype CurrencyCode = Tagged<string, 'CurrencyCode'>;\ntype HexColor = Tagged<`#${string}`, 'HexColor'>;\ntype HttpUrl = Tagged<string, 'HttpUrl'>;\ntype LanguageTag = Tagged<string, 'LanguageTag'>;\ntype MimeType = Tagged<`${string}/${string}`, 'MimeType'>;\ntype Semver = Tagged<string, 'Semver'>;\ntype Uuid = Tagged<string, 'Uuid'>;\n\n// Service\ntype AccountEntropyPool = Tagged<string, 'AccountEntropyPool'>;\n\ntype E164 = E164.Decoded;\ntype E164.Opaque = Tagged<`+${string}`, 'E164'>;\ntype E164.Encoded = Utf8.Of<E164.Opaque>;\ntype E164.Decoded = Bytes.Of<E164.Opaque>;\n\ntype Aci = Aci.Decoded;\ntype Aci.Opaque = Tagged<Uuid, 'Aci'>;\ntype Aci.Decoded = Utf8.Of<Aci.Opaque>;\ntype Aci.Encoded = Bytes.Of<Aci.Opaque>;\n\ntype Pni = Utf8.Of<Pni.Opaque>;\ntype Pni.Opaque = Tagged<`PNI:${Uuid}`, 'Pni'>;\ntype Pni.Decoded = Utf8.Of<Pni.Opaque>;\ntype Pni.Encoded = Bytes.Of<Pni.Opaque>;\n\ntype UntaggedPni = UntaggedPni.Decoded;\ntype UntaggedPni.Opaque = Tagged<Uuid, 'UntaggedPni'>;\ntype UntaggedPni.Decoded = Utf8.Of<UntaggedPni.Opaque>;\ntype UntaggedPni.Encoded = Bytes.Of<UntaggedPni.Opaque>;\n\ntype ServiceId = ServiceId.Decoded;\ntype ServiceId.Decoded = Aci | Pni;\ntype ServiceId.Encoded = Bytes.Of<Decoded>;\n\ntype DeviceId = Tagged<Uint32, 'DeviceId'>;\n\ntype Address = Address.Decoded;\ntype Address.Opaque = Tagged<`${ServiceId}.${DeviceId}`, 'Address'>;\ntype Address.Decoded = Utf8.Of<Address.Opaque>;\ntype Address.Encoded = Bytes.Of<Address.Opaque>;\n\ntype AddressInfo = Tagged<AddressInfo.Params, 'AddressInfo'>;\ntype AddressInfo.Params = Readonly<{ serviceId: ServiceId; deviceId: DeviceId; }>;\n\ntype Username = Tagged<Utf8.Of<`${UsernameNickname}.${UsernameDiscriminator}`>, 'Username'>;\ntype Username.Params = Readonly<{ nickname: UsernameNickname; discriminator: UsernameDiscriminator }>;\ntype UsernameNickname = Tagged<Utf8.Of<string>, 'UsernameNickname'>;\ntype UsernameDiscriminator = Tagged<`${number}`, 'UsernameDiscriminator'>;\ntype UsernameHash = Tagged<Bytes, 'UsernameHash'>;\ntype UsernameProof = Tagged<Bytes, 'UsernameProof'>;\n\ntype RegistrationId = Tagged<Uint16, 'RegistrationId'>;\n\ntype DistributionId = DistributionId.Decoded;\ntype DistributionId.Opaque = Tagged<Uuid, 'DistributionId'>;\ntype DistributionId.Decoded = Utf8.Of<DistributionId.Opaque>;\ntype DistributionId.Encoded = Bytes.Of<DistributionId.Opaque>;\n\ntype ProfileKey = ProfileKey.Decoded;\ntype ProfileKey.Opaque = Tagged<unknown, 'ProfileKey'>;\ntype ProfileKey.Decoded = Base64.Of<ProfileKey.Opaque>;\ntype ProfileKey.Encoded = Bytes.Of<ProfileKey.Opaque>;\n\ntype ProfileKeyVersion = ProfileKeyVersion.Decoded;\ntype ProfileKeyVersion.Opaque = Tagged<string, 'ProfileKeyVersion'>;\ntype ProfileKeyVersion.Decoded = Utf8.Of<ProfileKeyVersion.Opaque>;\ntype ProfileKeyVersion.Encoded = Bytes.Of<ProfileKeyVersion.Opaque>;\n\ntype GroupId = GroupId.Decoded;\ntype GroupId.Opaque = Tagged<unknown, 'GroupId'>;\ntype GroupId.Decoded = Base64.Of<GroupId.Opaque>;\ntype GroupId.Encoded = Bytes.Of<GroupId.Opaque>;\n\ntype GroupVersion = Tagged<Uint32, 'GroupVersion'>;\n\ntype GroupMasterKey = GroupMasterKey.Decoded;\ntype GroupMasterKey.Opaque = Tagged<unknown, 'GroupMasterKey'>;\ntype GroupMasterKey.Decoded = Base64.Of<GroupMasterKey.Opaque>;\ntype GroupMasterKey.Encoded = Bytes.Of<GroupMasterKey.Opaque>;\n\ntype GroupSecretParams = GroupSecretParams.Decoded;\ntype GroupSecretParams.Opaque = Tagged<unknown, 'GroupSecretParams'>;\ntype GroupSecretParams.Decoded = Base64.Of<GroupSecretParams.Opaque>;\ntype GroupSecretParams.Encoded = Bytes.Of<GroupSecretParams.Opaque>;\n\ntype GroupPublicParams = GroupPublicParams.Decoded;\ntype GroupPublicParams.Opaque = Tagged<unknown, 'GroupPublicParams'>;\ntype GroupPublicParams.Decoded = Base64.Of<GroupPublicParams.Opaque>;\ntype GroupPublicParams.Encoded = Bytes.Of<GroupPublicParams.Opaque>;\n\ntype GroupInviteLinkPassword = GroupInviteLinkPassword.Decoded;\ntype GroupInviteLinkPassword.Opaque = Tagged<unknown, 'GroupInviteLinkPassword'>;\ntype GroupInviteLinkPassword.Decoded = Base64.Of<GroupInviteLinkPassword.Opaque>;\ntype GroupInviteLinkPassword.Encoded = Bytes.Of<GroupInviteLinkPassword.Opaque>;\n\ntype DistributionListId = DistributionListId.Decoded;\ntype DistributionListId.Opaque = Tagged<Uuid, 'DistributionListId'>;\ntype DistributionListId.Decoded = Utf8.Of<DistributionListId.Opaque>;\ntype DistributionListId.Encoded = Bytes.Of<DistributionListId.Opaque>;\n\ntype SentTimestampMs = Tagged<TimestampMs, 'SentTimestampMs'>;\ntype ServerTimestampMs = Tagged<TimestampMs, 'ServerTimestampMs'>;\ntype ReceivedTimestampMs = Tagged<TimestampMs, 'ReceivedTimestampMs'>;\n\ntype StorageManifestVersion = Tagged<BigUint64, 'StorageManifestVersion'>;\n\ntype StorageItemKey = StorageItemKey.Decoded;\ntype StorageItemKey.Opaque = Tagged<unknown, 'StorageItemKey'>;\ntype StorageItemKey.Decoded = Base64.Of<Opaque>;\ntype StorageItemKey.Encoded = Bytes.Of<Opaque>;\n\ntype UnidentifiedAccessKey = UnidentifiedAccessKey.Decoded;\ntype UnidentifiedAccessKey.Opaque = Tagged<unknown, 'UnidentifiedAccessKey'>;\ntype UnidentifiedAccessKey.Decoded = Base64.Of<UnidentifiedAccessKey.Opaque>;\ntype UnidentifiedAccessKey.Encoded = Bytes.Of<UnidentifiedAccessKey.Opaque>;\n\ntype ServerGuid = ServerGuid.Decoded;\ntype ServerGuid.Opaque = Tagged<Uuid, 'ServerGuid'>;\ntype ServerGuid.Decoded = Utf8.Of<ServerGuid.Opaque>;\ntype ServerGuid.Encoded = Bytes.Of<ServerGuid.Opaque>;\n\ntype ReportSpamToken = ReportSpamToken.Decoded;\ntype ReportSpamToken.Opaque = Tagged<unknown, 'ReportSpamToken'>;\ntype ReportSpamToken.Decoded = Base64.Of<ReportSpamToken.Opaque>;\ntype ReportSpamToken.Encoded = Bytes.Of<ReportSpamToken.Opaque>;\n\ntype MuteExpiration = Tagged<Float64, 'MuteExpiration'>;\n```\n\n### Schemas\n\nAlmost all of these types provide Zod schemas:\n\n```ts\nimport { Aci, SentTimestampMs, DurationSecs } from '@signalapp/types';\n\nexport const PinnedMessageSchema = z.object({\n  targetSentTimestamp: SentTimestampMs.Schema,\n  targetAuthorAci: Aci.Schema,\n  pinDuration: DurationSecs.Schema,\n});\n```\n\n### Helpers\n\nTypes have helpers for casting loosely typed data to strict types:\n\n> Note: You should prefer to use the most specific `from*` method that you can,\n> it will generally have less runtime cost checking the type is valid.\n\n```ts\nAci.isValid(input: string): input is Aci; // boolean\nAci.fromUuid(input: Uuid): Aci; // throws if invalid\nAci.fromString(input: string): Aci; // throws if invalid\n```\n\n### Encodings\n\nEncodings have special `<Encoding>.Of<T>` types to represent internal opaque\ntypes:\n\n```ts\n// Maybe this just represents some random number generation that we should not be aware of\nexport type MyOpaqueType = Tagged<unknown, 'MyOpaqueType'>;\n\nexport function decode(input: Bytes.Of<MyOpaqueType>): Base64.Of<MyOpaqueType> {\n  return Base64.fromBytes(input);\n}\n\nexport function encode(input: Bytes.Of<MyOpaqueType>): Base64.Of<MyOpaqueType> {\n  return Base64.toBytes(input);\n}\n```\n\nMany of the \"service\" types use these `<Encoding>.Of` types to wrap their own\ninternal `Opaque` type with expected encodings along with `encode` and `decode`\nhelpers:\n\n```ts\nexport type StorageItemKey = StorageItemKey.Decoded;\n\nexport namespace StorageItemKey {\n  type Opaque = Tagged<unknown, 'StorageItemKey'>;\n\n  export type Decoded = Base64.Of<Opaque>;\n  export type Encoded = Bytes.Of<Opaque>;\n\n  export function decode(input: Encoded): StorageItemKey {\n    return Base64.fromBytes(input);\n  }\n\n  export function encode(input: StorageItemKey): Encoded {\n    return Base64.toBytes(input);\n  }\n}\n```\n\n## Future Ideas\n\n- General:\n  - [ ] `NonEmpty<T extends { length: number }>`\n  - [ ] `NonZero<T extends number | bigint>`\n- Units:\n  - [ ] `Dimension`\n  - [ ] `Width`\n  - [ ] `Height`\n  - [ ] `BlurHash`\n  - [ ] `Email`\n- File System:\n  - [ ] `FileName`\n  - [ ] `FilePath`\n  - [ ] `FileExtension`\n- Net:\n  - [ ] `BasicAuth`\n  - [ ] `IpV4`\n  - [ ] `IpV6`\n  - [ ] `IpAddr`\n  - [ ] `Domain/Hostname`\n  - [ ] `Protocol`\n  - [ ] `Port`\n- Service:\n  - [ ] `UserText` / `TrustedText`\n","packages/types/CHANGELOG.md":"# @signalapp/types\n\n## 0.3.0\n\n### Minor Changes\n\n- e8fd531: Add MuteExpiration\n\n## 0.2.0\n\n### Minor Changes\n\n- 534f2f1: - formats: Add `CountryCode`\n  - formats: Add `CurrencyCode`\n  - service: Update `DeviceId` range to 1 to 127\n  - service: Add `GroupInviteLinkPassword`\n  - service: Add `GroupMasterKey`\n  - service: Add `GroupPublicParams`\n  - service: Add `GroupSecretParams`\n  - service: Add `GroupVersion`\n  - service: Add `ProfileKey`\n  - service: Add `ProfileKeyVersion`\n  - service: Add `RegistrationId`\n  - service: Add `ReportSpamToken`\n  - service: Add `ServerGuid`\n  - service: Add `UnidentifiedAccessKey`\n\n## 0.1.1\n\n### Patch Changes\n\n- ee66d16: Enable trusted publishing\n\n## 0.1.0\n\n### Minor Changes\n\n- b4c4a9d: Initial Release\n","packages/mute-state-change/README.md":"<!-- Copyright 2025 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/mute-state-change\n\n[![npm](https://img.shields.io/npm/v/@signalapp/mute-state-change)](https://www.npmjs.com/package/@signalapp/mute-state-change)\n\nBindings for macOS AVAudioApplication.\n\n## License\n\nCopyright 2025 Signal Messenger, LLC.\n\nLicensed under the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html\n","packages/types/package.json":"{\n  \"name\": \"@signalapp/types\",\n  \"version\": \"0.3.0\",\n  \"license\": \"AGPL-3.0-only\",\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"provenance\": false\n  },\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"source\": \"src/index.std.ts\",\n  \"main\": \"dist/index.std.cjs\",\n  \"module\": \"dist/index.std.mjs\",\n  \"types\": \"dist/index.std.d.mts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./dist/index.std.d.mts\",\n        \"default\": \"./dist/index.std.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./dist/index.std.d.cts\",\n        \"default\": \"./dist/index.std.cjs\"\n      }\n    }\n  },\n  \"engines\": {\n    \"node\": \">=24.22.0\"\n  },\n  \"scripts\": {\n    \"check\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"prepare\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"buffer\": \"6.0.3\",\n    \"semver\": \"7.7.4\",\n    \"type-fest\": \"5.5.0\",\n    \"uuid\": \"13.0.2\",\n    \"zod\": \"4.3.6\"\n  },\n  \"devDependencies\": {\n    \"@arethetypeswrong/core\": \"0.18.5\",\n    \"publint\": \"0.3.21\",\n    \"tsdown\": \"0.22.14\",\n    \"typescript\": \"7.0.2\"\n  }\n}\n","packages/types/tsconfig.json":"{\n  \"include\": [\"./src\"],\n  \"compilerOptions\": {\n    \"target\": \"ES2025\",\n    \"lib\": [\"ESNext\"],\n\n    \"module\": \"esnext\",\n    \"rootDir\": \"./src\",\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"rewriteRelativeImportExtensions\": true,\n    \"resolvePackageJsonExports\": true,\n    \"resolvePackageJsonImports\": true,\n    \"noUncheckedSideEffectImports\": true,\n    \"resolveJsonModule\": true,\n\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"inlineSourceMap\": true,\n    \"noEmit\": false,\n    \"outDir\": \"./dist\",\n\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"isolatedDeclarations\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"erasableSyntaxOnly\": false,\n\n    \"strict\": true,\n    \"noImplicitAny\": true,\n    \"strictNullChecks\": true,\n    \"strictFunctionTypes\": true,\n    \"strictBindCallApply\": true,\n    \"strictPropertyInitialization\": true,\n    \"strictBuiltinIteratorReturn\": true,\n    \"noImplicitThis\": true,\n    \"useUnknownInCatchVariables\": true,\n    \"alwaysStrict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"exactOptionalPropertyTypes\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitOverride\": true,\n    \"noPropertyAccessFromIndexSignature\": true,\n    \"allowUnusedLabels\": false,\n    \"allowUnreachableCode\": false,\n    \"skipLibCheck\": false\n  }\n}\n","packages/windows-ucv/.prettierrc.json":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/.prettierrc.json)","packages/windows-ucv/README.md":"# windows-ucv Documentation\n\nPath: `packages/windows-ucv/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/README.md)","packages/windows-ucv/package.json":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/package.json)","packages/windows-ucv/tsconfig.json":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/tsconfig.json)","packages/lame/dist/acknowledgments.md":"# Dist Skill\n\nPath: `packages/lame/dist/acknowledgments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/lame/dist/acknowledgments.md)","packages/mock-server/certs/README.md":"# certs Documentation\n\nPath: `packages/mock-server/certs/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/README.md)","packages/mock-server/certs/trust-root.json":"# Certs Skill\n\nPath: `packages/mock-server/certs/trust-root.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/trust-root.json)","packages/mock-server/certs/zk-params.json":"# Certs Skill\n\nPath: `packages/mock-server/certs/zk-params.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/zk-params.json)","packages/mock-server/protos/README.md":"# protos Documentation\n\nPath: `packages/mock-server/protos/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/protos/README.md)","packages/mute-state-change/dist/acknowledgments.md":"# Dist Skill\n\nPath: `packages/mute-state-change/dist/acknowledgments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mute-state-change/dist/acknowledgments.md)",".oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json":"# NoRestrictedPaths Skill\n\nPath: `.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json)","packages/mock-server/.github/workflows/publish.yaml":"# Workflows Skill\n\nPath: `packages/mock-server/.github/workflows/publish.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/publish.yaml)","packages/mock-server/.github/workflows/test.yaml":"# Workflows Skill\n\nPath: `packages/mock-server/.github/workflows/test.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/test.yaml)",".oxlint/rules/fixtures/noExtraneousDependencies/package/package.json":"# Package Skill\n\nPath: `.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json)"},"items":[{"name":"package.json","path":".oxlint/rules/fixtures/noExtraneousDependencies/package/package.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json","title":"Package Skill","category":"anthropic-skill","format":"json","content":"# Package Skill\n\nPath: `.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json)","tokens":300,"sizeBytes":257},{"name":"tsconfig.json","path":".oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json","title":"NoRestrictedPaths Skill","category":"anthropic-skill","format":"json","content":"# NoRestrictedPaths Skill\n\nPath: `.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json)","tokens":300,"sizeBytes":239},{"name":"acknowledgments.md","path":"packages/lame/dist/acknowledgments.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/lame/dist/acknowledgments.md","title":"Dist Skill","category":"anthropic-skill","format":"markdown","content":"# Dist Skill\n\nPath: `packages/lame/dist/acknowledgments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/lame/dist/acknowledgments.md)","tokens":300,"sizeBytes":192},{"name":"package.json","path":"packages/lame/package.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/lame/package.json","title":"@signalapp/lame","category":"anthropic-skill","format":"json","content":"{\n  \"private\": true,\n  \"name\": \"@signalapp/lame\",\n  \"description\": \"LAME MP3 Encoder bindings for Node.js\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.mjs\",\n  \"types\": \"index.d.mts\",\n  \"files\": [\n    \"index.mjs\",\n    \"README.md\"\n  ],\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\"\n}\n","frontmatter":{"private":true,"name":"@signalapp/lame","description":"LAME MP3 Encoder bindings for Node.js","version":"1.0.0","type":"module","main":"index.mjs","types":"index.d.mts","files":["index.mjs","README.md"],"author":{"name":"Signal Messenger, LLC","email":"support@signal.org"},"license":"AGPL-3.0-only"},"isInternal":false,"tokens":128,"sizeBytes":371},{"name":"publish.yaml","path":"packages/mock-server/.github/workflows/publish.yaml","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/publish.yaml","title":"Workflows Skill","category":"anthropic-skill","format":"yaml","content":"# Workflows Skill\n\nPath: `packages/mock-server/.github/workflows/publish.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/publish.yaml)","tokens":300,"sizeBytes":225},{"name":"test.yaml","path":"packages/mock-server/.github/workflows/test.yaml","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/test.yaml","title":"Workflows Skill","category":"anthropic-skill","format":"yaml","content":"# Workflows Skill\n\nPath: `packages/mock-server/.github/workflows/test.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/test.yaml)","tokens":300,"sizeBytes":219},{"name":"trust-root.json","path":"packages/mock-server/certs/trust-root.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/trust-root.json","title":"Certs Skill","category":"anthropic-skill","format":"json","content":"# Certs Skill\n\nPath: `packages/mock-server/certs/trust-root.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/trust-root.json)","tokens":300,"sizeBytes":203},{"name":"zk-params.json","path":"packages/mock-server/certs/zk-params.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/zk-params.json","title":"Certs Skill","category":"anthropic-skill","format":"json","content":"# Certs Skill\n\nPath: `packages/mock-server/certs/zk-params.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/zk-params.json)","tokens":300,"sizeBytes":201},{"name":"CHANGELOG.md","path":"packages/mock-server/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/CHANGELOG.md","title":"Mock-server Skill","category":"anthropic-skill","format":"markdown","content":"# @signalapp/mock-server\n\n## 27.0.0\n\n### Major Changes\n\n- 375e413: Moves backup APIs to GRPC\n- 375e413: Moves backup listMedia to GRPC\n\n### Minor Changes\n\n- 2886354: Make the storage item/manifest accessors synchronous so that writes can't interleave with reads\n\n## 26.0.0\n\n### Major Changes\n\n- ae68dc8: gRPC support for username hash/link endpoints\n","isInternal":false,"tokens":102,"sizeBytes":350},{"name":"package.json","path":"packages/mock-server/package.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/package.json","title":"@signalapp/mock-server","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@signalapp/mock-server\",\n  \"packageManager\": \"pnpm@10.18.1\",\n  \"version\": \"27.0.0\",\n  \"description\": \"Mock Signal Server for writing tests\",\n  \"main\": \"src/index.js\",\n  \"types\": \"src/index.d.ts\",\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"provenance\": false\n  },\n  \"files\": [\n    \"src/**/*.js\",\n    \"src/**/*.d.ts\",\n    \"protos/compiled.js\",\n    \"protos/compiled.d.ts\",\n    \"certs\"\n  ],\n  \"scripts\": {\n    \"watch\": \"npm run build:tsc -- -w\",\n    \"build:tsc\": \"tsc\",\n    \"build:protobuf\": \"protopiler --module cjs --output protos/compiled.js --typedefs protos/compiled.d.ts protos\",\n    \"build\": \"npm run build:protobuf && npm run build:tsc\",\n    \"format\": \"pprettier --write '**/*.ts'\",\n    \"mocha\": \"mocha test/**/*-test.js\",\n    \"lint:prettier\": \"pprettier --check '**/*.ts'\",\n    \"lint\": \"npm run lint:prettier\",\n    \"test\": \"npm run mocha && npm run lint\",\n    \"prepare\": \"npm run build\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+ssh://git@github.com/signalapp/Mock-Signal-Server.git\"\n  },\n  \"keywords\": [\n    \"mock\",\n    \"signal\",\n    \"server\"\n  ],\n  \"author\": {\n    \"name\": \"Open Whisper Systems\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"bugs\": {\n    \"url\": \"https://github.com/signalapp/Mock-Signal-Server/issues\"\n  },\n  \"homepage\": \"https://github.com/signalapp/Mock-Signal-Server#readme\",\n  \"dependencies\": {\n    \"@indutny/parallel-prettier\": \"^3.0.0\",\n    \"@indutny/protopiler\": \"4.0.0\",\n    \"@signalapp/libsignal-client\": \"0.105.1\",\n    \"@tus/file-store\": \"^1.5.1\",\n    \"@tus/server\": \"^1.10.2\",\n    \"debug\": \"^4.4.3\",\n    \"is-plain-obj\": \"3.0.0\",\n    \"micro\": \"^9.4.1\",\n    \"microrouter\": \"^3.1.3\",\n    \"prettier\": \"^3.8.3\",\n    \"type-fest\": \"^4.26.1\",\n    \"url-pattern\": \"^1.0.3\",\n    \"uuid\": \"^11.1.1\",\n    \"ws\": \"^8.21.0\",\n    \"zod\": \"^3.25.76\"\n  },\n  \"devDependencies\": {\n    \"@types/debug\": \"^4.1.13\",\n    \"@types/long\": \"^4.0.2\",\n    \"@types/micro\": \"^7.3.7\",\n    \"@types/microrouter\": \"^3.1.6\",\n    \"@types/mocha\": \"^10.0.10\",\n    \"@types/node\": \"^24.12.0\",\n    \"@types/uuid\": \"^8.3.4\",\n    \"@types/ws\": \"^8.18.1\",\n    \"mocha\": \"^11.7.5\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"pnpm\": {\n    \"patchedDependencies\": {\n      \"@types/ws\": \"patches/@types__ws.patch\"\n    }\n  }\n}\n","frontmatter":{"name":"@signalapp/mock-server","packageManager":"pnpm@10.18.1","version":"27.0.0","description":"Mock Signal Server for writing tests","main":"src/index.js","types":"src/index.d.ts","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":false},"files":["src/**/*.js","src/**/*.d.ts","protos/compiled.js","protos/compiled.d.ts","certs"],"scripts":{"watch":"npm run build:tsc -- -w","build:tsc":"tsc","build:protobuf":"protopiler --module cjs --output protos/compiled.js --typedefs protos/compiled.d.ts protos","build":"npm run build:protobuf && npm run build:tsc","format":"pprettier --write '**/*.ts'","mocha":"mocha test/**/*-test.js","lint:prettier":"pprettier --check '**/*.ts'","lint":"npm run lint:prettier","test":"npm run mocha && npm run lint","prepare":"npm run build"},"repository":{"type":"git","url":"git+ssh://git@github.com/signalapp/Mock-Signal-Server.git"},"keywords":["mock","signal","server"],"author":{"name":"Open Whisper Systems","email":"support@signal.org"},"license":"AGPL-3.0-only","bugs":{"url":"https://github.com/signalapp/Mock-Signal-Server/issues"},"homepage":"https://github.com/signalapp/Mock-Signal-Server#readme","dependencies":{"@indutny/parallel-prettier":"^3.0.0","@indutny/protopiler":"4.0.0","@signalapp/libsignal-client":"0.105.1","@tus/file-store":"^1.5.1","@tus/server":"^1.10.2","debug":"^4.4.3","is-plain-obj":"3.0.0","micro":"^9.4.1","microrouter":"^3.1.3","prettier":"^3.8.3","type-fest":"^4.26.1","url-pattern":"^1.0.3","uuid":"^11.1.1","ws":"^8.21.0","zod":"^3.25.76"},"devDependencies":{"@types/debug":"^4.1.13","@types/long":"^4.0.2","@types/micro":"^7.3.7","@types/microrouter":"^3.1.6","@types/mocha":"^10.0.10","@types/node":"^24.12.0","@types/uuid":"^8.3.4","@types/ws":"^8.18.1","mocha":"^11.7.5","typescript":"^5.9.3"},"pnpm":{"patchedDependencies":{"@types/ws":"patches/@types__ws.patch"}}},"isInternal":false,"tokens":825,"sizeBytes":2304},{"name":"tsconfig.json","path":"packages/mock-server/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/tsconfig.json","title":"Mock-server Skill","category":"anthropic-skill","format":"json","content":"{\n  \"compilerOptions\": {\n    /* Visit https://aka.ms/tsconfig.json to read more about this file */\n\n    /* Basic Options */\n    \"incremental\": true /* Enable incremental compilation */,\n    \"target\": \"esnext\" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,\n    \"module\": \"commonjs\" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,\n    \"declaration\": true /* Generates corresponding '.d.ts' file. */,\n\n    /* Strict Type-Checking Options */\n    \"strict\": true /* Enable all strict type-checking options. */,\n    \"noUncheckedIndexedAccess\": true,\n\n    /* Additional Checks */\n    \"noUnusedLocals\": true /* Report errors on unused locals. */,\n    \"noImplicitOverride\": true,\n    \"noImplicitReturns\": true,\n\n    \"esModuleInterop\": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,\n\n    /* Advanced Options */\n    \"skipLibCheck\": true /* Skip type checking of declaration files. */,\n    \"forceConsistentCasingInFileNames\": true /* Disallow inconsistently-cased references to the same file. */\n  },\n  \"include\": [\"src/**/*\", \"test/**/*\"]\n}\n","isInternal":false,"tokens":335,"sizeBytes":1307},{"name":"acknowledgments.md","path":"packages/mute-state-change/dist/acknowledgments.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mute-state-change/dist/acknowledgments.md","title":"Dist Skill","category":"anthropic-skill","format":"markdown","content":"# Dist Skill\n\nPath: `packages/mute-state-change/dist/acknowledgments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mute-state-change/dist/acknowledgments.md)","tokens":300,"sizeBytes":218},{"name":"package.json","path":"packages/mute-state-change/package.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mute-state-change/package.json","title":"@signalapp/mute-state-change","category":"anthropic-skill","format":"json","content":"{\n  \"private\": true,\n  \"name\": \"@signalapp/mute-state-change\",\n  \"description\": \"ScreenCaptureKit bindings for Node.js\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.mjs\",\n  \"types\": \"index.d.ts\",\n  \"keywords\": [\n    \"AVAudioApplication\",\n    \"macos\",\n    \"mute\"\n  ],\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\",\n    \"binding.gyp\",\n    \"addon.mm\",\n    \"README.md\"\n  ],\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"bugs\": {\n    \"url\": \"https://github.com/signalapp/mute-state-change/issues\"\n  },\n  \"homepage\": \"https://github.com/signalapp/mute-state-change#readme\",\n  \"dependencies\": {\n    \"bindings\": \"1.5.0\",\n    \"node-addon-api\": \"8.5.0\"\n  },\n  \"scripts\": {\n    \"format\": \"npm run format:js && npm run format:c\",\n    \"format:js\": \"prettier --cache --write .\",\n    \"format:c\": \"xcrun clang-format --style=chromium -Werror --verbose -i *.mm\"\n  },\n  \"devDependencies\": {\n    \"prettier\": \"3.6.2\"\n  }\n}\n","frontmatter":{"private":true,"name":"@signalapp/mute-state-change","description":"ScreenCaptureKit bindings for Node.js","version":"1.0.0","type":"module","main":"index.mjs","types":"index.d.ts","keywords":["AVAudioApplication","macos","mute"],"files":["index.js","index.d.ts","binding.gyp","addon.mm","README.md"],"author":{"name":"Signal Messenger, LLC","email":"support@signal.org"},"license":"AGPL-3.0-only","bugs":{"url":"https://github.com/signalapp/mute-state-change/issues"},"homepage":"https://github.com/signalapp/mute-state-change#readme","dependencies":{"bindings":"1.5.0","node-addon-api":"8.5.0"},"scripts":{"format":"npm run format:js && npm run format:c","format:js":"prettier --cache --write .","format:c":"xcrun clang-format --style=chromium -Werror --verbose -i *.mm"},"devDependencies":{"prettier":"3.6.2"}},"isInternal":false,"tokens":327,"sizeBytes":995},{"name":"CHANGELOG.md","path":"packages/types/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/types/CHANGELOG.md","title":"Types Skill","category":"anthropic-skill","format":"markdown","content":"# @signalapp/types\n\n## 0.3.0\n\n### Minor Changes\n\n- e8fd531: Add MuteExpiration\n\n## 0.2.0\n\n### Minor Changes\n\n- 534f2f1: - formats: Add `CountryCode`\n  - formats: Add `CurrencyCode`\n  - service: Update `DeviceId` range to 1 to 127\n  - service: Add `GroupInviteLinkPassword`\n  - service: Add `GroupMasterKey`\n  - service: Add `GroupPublicParams`\n  - service: Add `GroupSecretParams`\n  - service: Add `GroupVersion`\n  - service: Add `ProfileKey`\n  - service: Add `ProfileKeyVersion`\n  - service: Add `RegistrationId`\n  - service: Add `ReportSpamToken`\n  - service: Add `ServerGuid`\n  - service: Add `UnidentifiedAccessKey`\n\n## 0.1.1\n\n### Patch Changes\n\n- ee66d16: Enable trusted publishing\n\n## 0.1.0\n\n### Minor Changes\n\n- b4c4a9d: Initial Release\n","isInternal":false,"tokens":238,"sizeBytes":744},{"name":"package.json","path":"packages/types/package.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/types/package.json","title":"@signalapp/types","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@signalapp/types\",\n  \"version\": \"0.3.0\",\n  \"license\": \"AGPL-3.0-only\",\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"provenance\": false\n  },\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"source\": \"src/index.std.ts\",\n  \"main\": \"dist/index.std.cjs\",\n  \"module\": \"dist/index.std.mjs\",\n  \"types\": \"dist/index.std.d.mts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./dist/index.std.d.mts\",\n        \"default\": \"./dist/index.std.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./dist/index.std.d.cts\",\n        \"default\": \"./dist/index.std.cjs\"\n      }\n    }\n  },\n  \"engines\": {\n    \"node\": \">=24.22.0\"\n  },\n  \"scripts\": {\n    \"check\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"prepare\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"buffer\": \"6.0.3\",\n    \"semver\": \"7.7.4\",\n    \"type-fest\": \"5.5.0\",\n    \"uuid\": \"13.0.2\",\n    \"zod\": \"4.3.6\"\n  },\n  \"devDependencies\": {\n    \"@arethetypeswrong/core\": \"0.18.5\",\n    \"publint\": \"0.3.21\",\n    \"tsdown\": \"0.22.14\",\n    \"typescript\": \"7.0.2\"\n  }\n}\n","frontmatter":{"name":"@signalapp/types","version":"0.3.0","license":"AGPL-3.0-only","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":false},"author":{"name":"Signal Messenger, LLC","email":"support@signal.org"},"type":"module","sideEffects":false,"source":"src/index.std.ts","main":"dist/index.std.cjs","module":"dist/index.std.mjs","types":"dist/index.std.d.mts","files":["dist"],"exports":{".":{"import":{"types":"./dist/index.std.d.mts","default":"./dist/index.std.mjs"},"require":{"types":"./dist/index.std.d.cts","default":"./dist/index.std.cjs"}}},"engines":{"node":">=24.22.0"},"scripts":{"check":"tsc --noEmit","build":"tsdown","prepare":"pnpm run build"},"dependencies":{"buffer":"6.0.3","semver":"7.7.4","type-fest":"5.5.0","uuid":"13.0.2","zod":"4.3.6"},"devDependencies":{"@arethetypeswrong/core":"0.18.5","publint":"0.3.21","tsdown":"0.22.14","typescript":"7.0.2"}},"isInternal":false,"tokens":420,"sizeBytes":1193},{"name":"tsconfig.json","path":"packages/types/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/types/tsconfig.json","title":"Types Skill","category":"anthropic-skill","format":"json","content":"{\n  \"include\": [\"./src\"],\n  \"compilerOptions\": {\n    \"target\": \"ES2025\",\n    \"lib\": [\"ESNext\"],\n\n    \"module\": \"esnext\",\n    \"rootDir\": \"./src\",\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"rewriteRelativeImportExtensions\": true,\n    \"resolvePackageJsonExports\": true,\n    \"resolvePackageJsonImports\": true,\n    \"noUncheckedSideEffectImports\": true,\n    \"resolveJsonModule\": true,\n\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"inlineSourceMap\": true,\n    \"noEmit\": false,\n    \"outDir\": \"./dist\",\n\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"isolatedDeclarations\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"erasableSyntaxOnly\": false,\n\n    \"strict\": true,\n    \"noImplicitAny\": true,\n    \"strictNullChecks\": true,\n    \"strictFunctionTypes\": true,\n    \"strictBindCallApply\": true,\n    \"strictPropertyInitialization\": true,\n    \"strictBuiltinIteratorReturn\": true,\n    \"noImplicitThis\": true,\n    \"useUnknownInCatchVariables\": true,\n    \"alwaysStrict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"exactOptionalPropertyTypes\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitOverride\": true,\n    \"noPropertyAccessFromIndexSignature\": true,\n    \"allowUnusedLabels\": false,\n    \"allowUnreachableCode\": false,\n    \"skipLibCheck\": false\n  }\n}\n","frontmatter":{"include":["./src"],"compilerOptions":{"target":"ES2025","lib":["ESNext"],"module":"esnext","rootDir":"./src","moduleResolution":"bundler","allowImportingTsExtensions":true,"rewriteRelativeImportExtensions":true,"resolvePackageJsonExports":true,"resolvePackageJsonImports":true,"noUncheckedSideEffectImports":true,"resolveJsonModule":true,"declaration":true,"declarationMap":true,"inlineSourceMap":true,"noEmit":false,"outDir":"./dist","isolatedModules":true,"verbatimModuleSyntax":true,"isolatedDeclarations":true,"forceConsistentCasingInFileNames":true,"erasableSyntaxOnly":false,"strict":true,"noImplicitAny":true,"strictNullChecks":true,"strictFunctionTypes":true,"strictBindCallApply":true,"strictPropertyInitialization":true,"strictBuiltinIteratorReturn":true,"noImplicitThis":true,"useUnknownInCatchVariables":true,"alwaysStrict":true,"noUnusedLocals":true,"noUnusedParameters":true,"exactOptionalPropertyTypes":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"noUncheckedIndexedAccess":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"allowUnusedLabels":false,"allowUnreachableCode":false,"skipLibCheck":false}},"isInternal":false,"tokens":380,"sizeBytes":1430},{"name":".prettierrc.json","path":"packages/windows-ucv/.prettierrc.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/.prettierrc.json","title":"Windows-ucv Skill","category":"anthropic-skill","format":"json","content":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/.prettierrc.json)","tokens":300,"sizeBytes":199},{"name":"package.json","path":"packages/windows-ucv/package.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/package.json","title":"Windows-ucv Skill","category":"anthropic-skill","format":"json","content":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/package.json)","tokens":300,"sizeBytes":191},{"name":"tsconfig.json","path":"packages/windows-ucv/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/tsconfig.json","title":"Windows-ucv Skill","category":"anthropic-skill","format":"json","content":"# Windows-ucv Skill\n\nPath: `packages/windows-ucv/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/tsconfig.json)","tokens":300,"sizeBytes":193},{"name":"README.md","path":"packages/lame/README.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/lame/README.md","title":"lame Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Copyright 2025 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/lame\n\nBindings for [LAME MP3 Encoder][0].\n\n## Building\n\n```sh\nbrew install emscripten\nwget https://cytranet-dal.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz\ntar xzvf lame-3.100.tar.gz\ncd lame-3.100\necho '{}' > package.json # Emscripten can't run in \"type\": \"module\" package\nCFLAGS='-Oz -flto' emconfigure ./configure --disable-shared --disable-decoder \\\n  --disable-frontend --disable-gtktest \\\n  --disable-dependency-tracking --disable-analyzer-hooks --disable-cpml\nemmake make clean\nemmake make -j16\ncd -\nemcc -I lame-3.100/include -Oz -DNDEBUG -flto wrapper.c \\\n    ./lame-3.100/libmp3lame/.libs/libmp3lame.a -o wrapper.mjs \\\n    -sEXPORTED_FUNCTIONS=_wrapper_init,_wrapper_get_max_input_size,_wrapper_get_in,_wrapper_get_out,_wrapper_encode,_wrapper_flush,_wrapper_get_lametag_frame,_wrapper_close \\\n    -sEXPORTED_RUNTIME_METHODS=HEAPU8 -sDYNAMIC_EXECUTION=0 \\\n    -sENVIRONMENT=worklet -sWASM=0 -sWASM_ASYNC_COMPILATION=0\nsed -I '' 's/^async //' wrapper.mjs\n```\n\n## License\n\nCopyright 2025 Signal Messenger, LLC.\n\nLicensed under the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html\n\n[0]: https://lame.sourceforge.io/\n","isInternal":false,"tokens":382,"sizeBytes":1248},{"name":"README.md","path":"packages/mock-server/certs/README.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/README.md","title":"certs Documentation","category":"plugin-manifest","format":"markdown","content":"# certs Documentation\n\nPath: `packages/mock-server/certs/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/README.md)","tokens":300,"sizeBytes":199},{"name":"README.md","path":"packages/mock-server/protos/README.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/protos/README.md","title":"protos Documentation","category":"plugin-manifest","format":"markdown","content":"# protos Documentation\n\nPath: `packages/mock-server/protos/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/protos/README.md)","tokens":300,"sizeBytes":202},{"name":"README.md","path":"packages/mock-server/README.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/README.md","title":"mock-server Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Copyright 2021 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# Signal Mock Server\n\n## Overview\n\nThis npm module is a mock implementation of Signal Server, currently only used\nin [Signal Desktop integration tests][0]. Public API surface area can be found at\n[`src/api`][1].\n\n## Installation\n\n```sh\nnpm install --dev @signalapp/mock-server\n```\n\n## License\n\nCopyright 2022 Signal, a 501c3 nonprofit\n\nLicensed under the AGPLv3: https://opensource.org/licenses/agpl-3.0\n\n[0]: https://github.com/signalapp/Signal-Desktop/tree/development/ts/test-mock\n[1]: https://github.com/signalapp/Mock-Signal-Server/tree/main/src/api\n","isInternal":false,"tokens":168,"sizeBytes":650},{"name":"README.md","path":"packages/mute-state-change/README.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mute-state-change/README.md","title":"mute-state-change Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Copyright 2025 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/mute-state-change\n\n[![npm](https://img.shields.io/npm/v/@signalapp/mute-state-change)](https://www.npmjs.com/package/@signalapp/mute-state-change)\n\nBindings for macOS AVAudioApplication.\n\n## License\n\nCopyright 2025 Signal Messenger, LLC.\n\nLicensed under the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html\n","isInternal":false,"tokens":110,"sizeBytes":416},{"name":"README.md","path":"packages/types/README.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/types/README.md","title":"types Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Copyright 2014 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/types\n\nThis package provides shared opaque and utility types and related helper\nfunctions for use across different Signal libraries and desktop apps.\n\n```ts\nimport { Aci, SentTimestampMs, DurationSecs } from '@signalapp/types';\n\nexport type PinnedMessage = Readonly<{\n  targetSentTimestamp: SentTimestampMs;\n  targetAuthorAci: Aci;\n  pinDuration: DurationSecs;\n}>;\n```\n\n## API\n\n```ts\nimport type { Tagged } from 'type-fest';\n\n// Result\ntype Result<T, E = string> = Result.Ok<T> | Result.Err<E>;\ntype Result.Ok<T> = Readonly<{ ok: true; value: T; error?: never; }>;\ntype Result.Err<E = string> = Readonly<{ ok: false; value?: never; error: E; }>;\n\n// Numbers\ntype Uint8 = Tagged<number, 'Uint8'>;\ntype Uint16 = Tagged<number, 'Uint16'>;\ntype Uint32 = Tagged<number, 'Uint32'>;\ntype BigUint64 = Tagged<bigint, 'BigUint64'>;\ntype BigUint128 = Tagged<bigint, 'BigUint128'>;\ntype Int8 = Tagged<number, 'Int8'>;\ntype Int16 = Tagged<number, 'Int16'>;\ntype Int32 = Tagged<number, 'Int32'>;\ntype BigInt64 = Tagged<bigint, 'BigInt64'>;\ntype BigInt128 = Tagged<bigint, 'BigInt128'>;\ntype Float16 = Tagged<number, 'Float16'>;\ntype Float32 = Tagged<number, 'Float32'>;\ntype Float64 = Tagged<number, 'Float64'>;\n\n// Units\ntype UnitBytes = Tagged<Float64, 'UnitBytes'>;;\ntype UnitKilobytes = Tagged<Float64, 'UnitKilobytes'>;\ntype UnitKibibytes = Tagged<Float64, 'UnitKibibytes'>;\n\n// Datetime\ntype TimestampMs = Tagged<number, 'TimestampMs'>;\ntype TimestampSecs = Tagged<number, 'TimestampSecs'>;\ntype DurationMs = Tagged<Uint32, 'DurationMs'>;\ntype DurationSecs = Tagged<Uint32, 'DurationSecs'>;\ntype DurationDays = Tagged<Uint32, 'DurationDays'>;\ntype PlainTimeHourMin = Tagged<Uint32, 'PlainTimeHourMin'>;\n\n// Encodings\ntype Bytes = Uint8Array<ArrayBuffer>;\ntype Bytes.Of<T> = Tagged<Bytes, 'Bytes.Of', T>;\ntype Base64 = Tagged<string, 'Base64'>;\ntype Base64.Of<T> = Tagged<Base64, 'Base64.Of', T>;\ntype Base64Url = Tagged<string, 'Base64Url'>;\ntype Base64Url.Of<T> = Tagged<Base64Url, 'Base64URL.Of', T>;\ntype Hex = Tagged<string, 'Hex'>;\ntype Hex.Of<T> = Tagged<Hex, 'Hex.Of', T>;\ntype Json = Tagged<string, 'Json'>;\ntype Json.Of<T extends JsonValue> = Tagged<Json, 'Json.Of', T>;\ntype JsonPrimitive = null | boolean | number | string;\ntype JsonArray = Array<JsonValue> | ReadonlyArray<JsonValue>;\ntype JsonObject = { [Key in string]: JsonValue };\ntype JsonValue = JsonPrimitive | JsonArray | JsonObject;\ntype Utf8.Of<T extends string> = Tagged<T, 'Utf8.Of'>;\n\n// Formats\ntype CountryCode = Tagged<string, 'CountryCode'>;\ntype CurrencyCode = Tagged<string, 'CurrencyCode'>;\ntype HexColor = Tagged<`#${string}`, 'HexColor'>;\ntype HttpUrl = Tagged<string, 'HttpUrl'>;\ntype LanguageTag = Tagged<string, 'LanguageTag'>;\ntype MimeType = Tagged<`${string}/${string}`, 'MimeType'>;\ntype Semver = Tagged<string, 'Semver'>;\ntype Uuid = Tagged<string, 'Uuid'>;\n\n// Service\ntype AccountEntropyPool = Tagged<string, 'AccountEntropyPool'>;\n\ntype E164 = E164.Decoded;\ntype E164.Opaque = Tagged<`+${string}`, 'E164'>;\ntype E164.Encoded = Utf8.Of<E164.Opaque>;\ntype E164.Decoded = Bytes.Of<E164.Opaque>;\n\ntype Aci = Aci.Decoded;\ntype Aci.Opaque = Tagged<Uuid, 'Aci'>;\ntype Aci.Decoded = Utf8.Of<Aci.Opaque>;\ntype Aci.Encoded = Bytes.Of<Aci.Opaque>;\n\ntype Pni = Utf8.Of<Pni.Opaque>;\ntype Pni.Opaque = Tagged<`PNI:${Uuid}`, 'Pni'>;\ntype Pni.Decoded = Utf8.Of<Pni.Opaque>;\ntype Pni.Encoded = Bytes.Of<Pni.Opaque>;\n\ntype UntaggedPni = UntaggedPni.Decoded;\ntype UntaggedPni.Opaque = Tagged<Uuid, 'UntaggedPni'>;\ntype UntaggedPni.Decoded = Utf8.Of<UntaggedPni.Opaque>;\ntype UntaggedPni.Encoded = Bytes.Of<UntaggedPni.Opaque>;\n\ntype ServiceId = ServiceId.Decoded;\ntype ServiceId.Decoded = Aci | Pni;\ntype ServiceId.Encoded = Bytes.Of<Decoded>;\n\ntype DeviceId = Tagged<Uint32, 'DeviceId'>;\n\ntype Address = Address.Decoded;\ntype Address.Opaque = Tagged<`${ServiceId}.${DeviceId}`, 'Address'>;\ntype Address.Decoded = Utf8.Of<Address.Opaque>;\ntype Address.Encoded = Bytes.Of<Address.Opaque>;\n\ntype AddressInfo = Tagged<AddressInfo.Params, 'AddressInfo'>;\ntype AddressInfo.Params = Readonly<{ serviceId: ServiceId; deviceId: DeviceId; }>;\n\ntype Username = Tagged<Utf8.Of<`${UsernameNickname}.${UsernameDiscriminator}`>, 'Username'>;\ntype Username.Params = Readonly<{ nickname: UsernameNickname; discriminator: UsernameDiscriminator }>;\ntype UsernameNickname = Tagged<Utf8.Of<string>, 'UsernameNickname'>;\ntype UsernameDiscriminator = Tagged<`${number}`, 'UsernameDiscriminator'>;\ntype UsernameHash = Tagged<Bytes, 'UsernameHash'>;\ntype UsernameProof = Tagged<Bytes, 'UsernameProof'>;\n\ntype RegistrationId = Tagged<Uint16, 'RegistrationId'>;\n\ntype DistributionId = DistributionId.Decoded;\ntype DistributionId.Opaque = Tagged<Uuid, 'DistributionId'>;\ntype DistributionId.Decoded = Utf8.Of<DistributionId.Opaque>;\ntype DistributionId.Encoded = Bytes.Of<DistributionId.Opaque>;\n\ntype ProfileKey = ProfileKey.Decoded;\ntype ProfileKey.Opaque = Tagged<unknown, 'ProfileKey'>;\ntype ProfileKey.Decoded = Base64.Of<ProfileKey.Opaque>;\ntype ProfileKey.Encoded = Bytes.Of<ProfileKey.Opaque>;\n\ntype ProfileKeyVersion = ProfileKeyVersion.Decoded;\ntype ProfileKeyVersion.Opaque = Tagged<string, 'ProfileKeyVersion'>;\ntype ProfileKeyVersion.Decoded = Utf8.Of<ProfileKeyVersion.Opaque>;\ntype ProfileKeyVersion.Encoded = Bytes.Of<ProfileKeyVersion.Opaque>;\n\ntype GroupId = GroupId.Decoded;\ntype GroupId.Opaque = Tagged<unknown, 'GroupId'>;\ntype GroupId.Decoded = Base64.Of<GroupId.Opaque>;\ntype GroupId.Encoded = Bytes.Of<GroupId.Opaque>;\n\ntype GroupVersion = Tagged<Uint32, 'GroupVersion'>;\n\ntype GroupMasterKey = GroupMasterKey.Decoded;\ntype GroupMasterKey.Opaque = Tagged<unknown, 'GroupMasterKey'>;\ntype GroupMasterKey.Decoded = Base64.Of<GroupMasterKey.Opaque>;\ntype GroupMasterKey.Encoded = Bytes.Of<GroupMasterKey.Opaque>;\n\ntype GroupSecretParams = GroupSecretParams.Decoded;\ntype GroupSecretParams.Opaque = Tagged<unknown, 'GroupSecretParams'>;\ntype GroupSecretParams.Decoded = Base64.Of<GroupSecretParams.Opaque>;\ntype GroupSecretParams.Encoded = Bytes.Of<GroupSecretParams.Opaque>;\n\ntype GroupPublicParams = GroupPublicParams.Decoded;\ntype GroupPublicParams.Opaque = Tagged<unknown, 'GroupPublicParams'>;\ntype GroupPublicParams.Decoded = Base64.Of<GroupPublicParams.Opaque>;\ntype GroupPublicParams.Encoded = Bytes.Of<GroupPublicParams.Opaque>;\n\ntype GroupInviteLinkPassword = GroupInviteLinkPassword.Decoded;\ntype GroupInviteLinkPassword.Opaque = Tagged<unknown, 'GroupInviteLinkPassword'>;\ntype GroupInviteLinkPassword.Decoded = Base64.Of<GroupInviteLinkPassword.Opaque>;\ntype GroupInviteLinkPassword.Encoded = Bytes.Of<GroupInviteLinkPassword.Opaque>;\n\ntype DistributionListId = DistributionListId.Decoded;\ntype DistributionListId.Opaque = Tagged<Uuid, 'DistributionListId'>;\ntype DistributionListId.Decoded = Utf8.Of<DistributionListId.Opaque>;\ntype DistributionListId.Encoded = Bytes.Of<DistributionListId.Opaque>;\n\ntype SentTimestampMs = Tagged<TimestampMs, 'SentTimestampMs'>;\ntype ServerTimestampMs = Tagged<TimestampMs, 'ServerTimestampMs'>;\ntype ReceivedTimestampMs = Tagged<TimestampMs, 'ReceivedTimestampMs'>;\n\ntype StorageManifestVersion = Tagged<BigUint64, 'StorageManifestVersion'>;\n\ntype StorageItemKey = StorageItemKey.Decoded;\ntype StorageItemKey.Opaque = Tagged<unknown, 'StorageItemKey'>;\ntype StorageItemKey.Decoded = Base64.Of<Opaque>;\ntype StorageItemKey.Encoded = Bytes.Of<Opaque>;\n\ntype UnidentifiedAccessKey = UnidentifiedAccessKey.Decoded;\ntype UnidentifiedAccessKey.Opaque = Tagged<unknown, 'UnidentifiedAccessKey'>;\ntype UnidentifiedAccessKey.Decoded = Base64.Of<UnidentifiedAccessKey.Opaque>;\ntype UnidentifiedAccessKey.Encoded = Bytes.Of<UnidentifiedAccessKey.Opaque>;\n\ntype ServerGuid = ServerGuid.Decoded;\ntype ServerGuid.Opaque = Tagged<Uuid, 'ServerGuid'>;\ntype ServerGuid.Decoded = Utf8.Of<ServerGuid.Opaque>;\ntype ServerGuid.Encoded = Bytes.Of<ServerGuid.Opaque>;\n\ntype ReportSpamToken = ReportSpamToken.Decoded;\ntype ReportSpamToken.Opaque = Tagged<unknown, 'ReportSpamToken'>;\ntype ReportSpamToken.Decoded = Base64.Of<ReportSpamToken.Opaque>;\ntype ReportSpamToken.Encoded = Bytes.Of<ReportSpamToken.Opaque>;\n\ntype MuteExpiration = Tagged<Float64, 'MuteExpiration'>;\n```\n\n### Schemas\n\nAlmost all of these types provide Zod schemas:\n\n```ts\nimport { Aci, SentTimestampMs, DurationSecs } from '@signalapp/types';\n\nexport const PinnedMessageSchema = z.object({\n  targetSentTimestamp: SentTimestampMs.Schema,\n  targetAuthorAci: Aci.Schema,\n  pinDuration: DurationSecs.Schema,\n});\n```\n\n### Helpers\n\nTypes have helpers for casting loosely typed data to strict types:\n\n> Note: You should prefer to use the most specific `from*` method that you can,\n> it will generally have less runtime cost checking the type is valid.\n\n```ts\nAci.isValid(input: string): input is Aci; // boolean\nAci.fromUuid(input: Uuid): Aci; // throws if invalid\nAci.fromString(input: string): Aci; // throws if invalid\n```\n\n### Encodings\n\nEncodings have special `<Encoding>.Of<T>` types to represent internal opaque\ntypes:\n\n```ts\n// Maybe this just represents some random number generation that we should not be aware of\nexport type MyOpaqueType = Tagged<unknown, 'MyOpaqueType'>;\n\nexport function decode(input: Bytes.Of<MyOpaqueType>): Base64.Of<MyOpaqueType> {\n  return Base64.fromBytes(input);\n}\n\nexport function encode(input: Bytes.Of<MyOpaqueType>): Base64.Of<MyOpaqueType> {\n  return Base64.toBytes(input);\n}\n```\n\nMany of the \"service\" types use these `<Encoding>.Of` types to wrap their own\ninternal `Opaque` type with expected encodings along with `encode` and `decode`\nhelpers:\n\n```ts\nexport type StorageItemKey = StorageItemKey.Decoded;\n\nexport namespace StorageItemKey {\n  type Opaque = Tagged<unknown, 'StorageItemKey'>;\n\n  export type Decoded = Base64.Of<Opaque>;\n  export type Encoded = Bytes.Of<Opaque>;\n\n  export function decode(input: Encoded): StorageItemKey {\n    return Base64.fromBytes(input);\n  }\n\n  export function encode(input: StorageItemKey): Encoded {\n    return Base64.toBytes(input);\n  }\n}\n```\n\n## Future Ideas\n\n- General:\n  - [ ] `NonEmpty<T extends { length: number }>`\n  - [ ] `NonZero<T extends number | bigint>`\n- Units:\n  - [ ] `Dimension`\n  - [ ] `Width`\n  - [ ] `Height`\n  - [ ] `BlurHash`\n  - [ ] `Email`\n- File System:\n  - [ ] `FileName`\n  - [ ] `FilePath`\n  - [ ] `FileExtension`\n- Net:\n  - [ ] `BasicAuth`\n  - [ ] `IpV4`\n  - [ ] `IpV6`\n  - [ ] `IpAddr`\n  - [ ] `Domain/Hostname`\n  - [ ] `Protocol`\n  - [ ] `Port`\n- Service:\n  - [ ] `UserText` / `TrustedText`\n","isInternal":false,"tokens":2879,"sizeBytes":10563},{"name":"README.md","path":"packages/windows-ucv/README.md","rawUrl":"https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/README.md","title":"windows-ucv Documentation","category":"plugin-manifest","format":"markdown","content":"# windows-ucv Documentation\n\nPath: `packages/windows-ucv/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/README.md)","tokens":300,"sizeBytes":193}],"systemPromptSnippet":"<yakaai_skills repo=\"signalapp/Signal-Desktop\">\n<!-- File: .oxlint/rules/fixtures/noExtraneousDependencies/package/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Package Skill\n\nPath: `.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noExtraneousDependencies/package/package.json)\n\n<!-- File: .oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# NoRestrictedPaths Skill\n\nPath: `.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/.oxlint/rules/fixtures/noRestrictedPaths/tsconfig.json)\n\n<!-- File: packages/lame/dist/acknowledgments.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Dist Skill\n\nPath: `packages/lame/dist/acknowledgments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/lame/dist/acknowledgments.md)\n\n<!-- File: packages/lame/package.json (Tokens: ~128 | Category: anthropic-skill) -->\n{\n  \"private\": true,\n  \"name\": \"@signalapp/lame\",\n  \"description\": \"LAME MP3 Encoder bindings for Node.js\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.mjs\",\n  \"types\": \"index.d.mts\",\n  \"files\": [\n    \"index.mjs\",\n    \"README.md\"\n  ],\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\"\n}\n\n<!-- File: packages/mock-server/.github/workflows/publish.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Workflows Skill\n\nPath: `packages/mock-server/.github/workflows/publish.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/publish.yaml)\n\n<!-- File: packages/mock-server/.github/workflows/test.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Workflows Skill\n\nPath: `packages/mock-server/.github/workflows/test.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/.github/workflows/test.yaml)\n\n<!-- File: packages/mock-server/certs/trust-root.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Certs Skill\n\nPath: `packages/mock-server/certs/trust-root.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/trust-root.json)\n\n<!-- File: packages/mock-server/certs/zk-params.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Certs Skill\n\nPath: `packages/mock-server/certs/zk-params.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/zk-params.json)\n\n<!-- File: packages/mock-server/CHANGELOG.md (Tokens: ~102 | Category: anthropic-skill) -->\n# @signalapp/mock-server\n\n## 27.0.0\n\n### Major Changes\n\n- 375e413: Moves backup APIs to GRPC\n- 375e413: Moves backup listMedia to GRPC\n\n### Minor Changes\n\n- 2886354: Make the storage item/manifest accessors synchronous so that writes can't interleave with reads\n\n## 26.0.0\n\n### Major Changes\n\n- ae68dc8: gRPC support for username hash/link endpoints\n\n<!-- File: packages/mock-server/package.json (Tokens: ~825 | Category: anthropic-skill) -->\n{\n  \"name\": \"@signalapp/mock-server\",\n  \"packageManager\": \"pnpm@10.18.1\",\n  \"version\": \"27.0.0\",\n  \"description\": \"Mock Signal Server for writing tests\",\n  \"main\": \"src/index.js\",\n  \"types\": \"src/index.d.ts\",\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"provenance\": false\n  },\n  \"files\": [\n    \"src/**/*.js\",\n    \"src/**/*.d.ts\",\n    \"protos/compiled.js\",\n    \"protos/compiled.d.ts\",\n    \"certs\"\n  ],\n  \"scripts\": {\n    \"watch\": \"npm run build:tsc -- -w\",\n    \"build:tsc\": \"tsc\",\n    \"build:protobuf\": \"protopiler --module cjs --output protos/compiled.js --typedefs protos/compiled.d.ts protos\",\n    \"build\": \"npm run build:protobuf && npm run build:tsc\",\n    \"format\": \"pprettier --write '**/*.ts'\",\n    \"mocha\": \"mocha test/**/*-test.js\",\n    \"lint:prettier\": \"pprettier --check '**/*.ts'\",\n    \"lint\": \"npm run lint:prettier\",\n    \"test\": \"npm run mocha && npm run lint\",\n    \"prepare\": \"npm run build\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+ssh://git@github.com/signalapp/Mock-Signal-Server.git\"\n  },\n  \"keywords\": [\n    \"mock\",\n    \"signal\",\n    \"server\"\n  ],\n  \"author\": {\n    \"name\": \"Open Whisper Systems\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"bugs\": {\n    \"url\": \"https://github.com/signalapp/Mock-Signal-Server/issues\"\n  },\n  \"homepage\": \"https://github.com/signalapp/Mock-Signal-Server#readme\",\n  \"dependencies\": {\n    \"@indutny/parallel-prettier\": \"^3.0.0\",\n    \"@indutny/protopiler\": \"4.0.0\",\n    \"@signalapp/libsignal-client\": \"0.105.1\",\n    \"@tus/file-store\": \"^1.5.1\",\n    \"@tus/server\": \"^1.10.2\",\n    \"debug\": \"^4.4.3\",\n    \"is-plain-obj\": \"3.0.0\",\n    \"micro\": \"^9.4.1\",\n    \"microrouter\": \"^3.1.3\",\n    \"prettier\": \"^3.8.3\",\n    \"type-fest\": \"^4.26.1\",\n    \"url-pattern\": \"^1.0.3\",\n    \"uuid\": \"^11.1.1\",\n    \"ws\": \"^8.21.0\",\n    \"zod\": \"^3.25.76\"\n  },\n  \"devDependencies\": {\n    \"@types/debug\": \"^4.1.13\",\n    \"@types/long\": \"^4.0.2\",\n    \"@types/micro\": \"^7.3.7\",\n    \"@types/microrouter\": \"^3.1.6\",\n    \"@types/mocha\": \"^10.0.10\",\n    \"@types/node\": \"^24.12.0\",\n    \"@types/uuid\": \"^8.3.4\",\n    \"@types/ws\": \"^8.18.1\",\n    \"mocha\": \"^11.7.5\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"pnpm\": {\n    \"patchedDependencies\": {\n      \"@types/ws\": \"patches/@types__ws.patch\"\n    }\n  }\n}\n\n<!-- File: packages/mock-server/tsconfig.json (Tokens: ~335 | Category: anthropic-skill) -->\n{\n  \"compilerOptions\": {\n    /* Visit https://aka.ms/tsconfig.json to read more about this file */\n\n    /* Basic Options */\n    \"incremental\": true /* Enable incremental compilation */,\n    \"target\": \"esnext\" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,\n    \"module\": \"commonjs\" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,\n    \"declaration\": true /* Generates corresponding '.d.ts' file. */,\n\n    /* Strict Type-Checking Options */\n    \"strict\": true /* Enable all strict type-checking options. */,\n    \"noUncheckedIndexedAccess\": true,\n\n    /* Additional Checks */\n    \"noUnusedLocals\": true /* Report errors on unused locals. */,\n    \"noImplicitOverride\": true,\n    \"noImplicitReturns\": true,\n\n    \"esModuleInterop\": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,\n\n    /* Advanced Options */\n    \"skipLibCheck\": true /* Skip type checking of declaration files. */,\n    \"forceConsistentCasingInFileNames\": true /* Disallow inconsistently-cased references to the same file. */\n  },\n  \"include\": [\"src/**/*\", \"test/**/*\"]\n}\n\n<!-- File: packages/mute-state-change/dist/acknowledgments.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Dist Skill\n\nPath: `packages/mute-state-change/dist/acknowledgments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mute-state-change/dist/acknowledgments.md)\n\n<!-- File: packages/mute-state-change/package.json (Tokens: ~327 | Category: anthropic-skill) -->\n{\n  \"private\": true,\n  \"name\": \"@signalapp/mute-state-change\",\n  \"description\": \"ScreenCaptureKit bindings for Node.js\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"main\": \"index.mjs\",\n  \"types\": \"index.d.ts\",\n  \"keywords\": [\n    \"AVAudioApplication\",\n    \"macos\",\n    \"mute\"\n  ],\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\",\n    \"binding.gyp\",\n    \"addon.mm\",\n    \"README.md\"\n  ],\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"bugs\": {\n    \"url\": \"https://github.com/signalapp/mute-state-change/issues\"\n  },\n  \"homepage\": \"https://github.com/signalapp/mute-state-change#readme\",\n  \"dependencies\": {\n    \"bindings\": \"1.5.0\",\n    \"node-addon-api\": \"8.5.0\"\n  },\n  \"scripts\": {\n    \"format\": \"npm run format:js && npm run format:c\",\n    \"format:js\": \"prettier --cache --write .\",\n    \"format:c\": \"xcrun clang-format --style=chromium -Werror --verbose -i *.mm\"\n  },\n  \"devDependencies\": {\n    \"prettier\": \"3.6.2\"\n  }\n}\n\n<!-- File: packages/types/CHANGELOG.md (Tokens: ~238 | Category: anthropic-skill) -->\n# @signalapp/types\n\n## 0.3.0\n\n### Minor Changes\n\n- e8fd531: Add MuteExpiration\n\n## 0.2.0\n\n### Minor Changes\n\n- 534f2f1: - formats: Add `CountryCode`\n  - formats: Add `CurrencyCode`\n  - service: Update `DeviceId` range to 1 to 127\n  - service: Add `GroupInviteLinkPassword`\n  - service: Add `GroupMasterKey`\n  - service: Add `GroupPublicParams`\n  - service: Add `GroupSecretParams`\n  - service: Add `GroupVersion`\n  - service: Add `ProfileKey`\n  - service: Add `ProfileKeyVersion`\n  - service: Add `RegistrationId`\n  - service: Add `ReportSpamToken`\n  - service: Add `ServerGuid`\n  - service: Add `UnidentifiedAccessKey`\n\n## 0.1.1\n\n### Patch Changes\n\n- ee66d16: Enable trusted publishing\n\n## 0.1.0\n\n### Minor Changes\n\n- b4c4a9d: Initial Release\n\n<!-- File: packages/types/package.json (Tokens: ~420 | Category: anthropic-skill) -->\n{\n  \"name\": \"@signalapp/types\",\n  \"version\": \"0.3.0\",\n  \"license\": \"AGPL-3.0-only\",\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"provenance\": false\n  },\n  \"author\": {\n    \"name\": \"Signal Messenger, LLC\",\n    \"email\": \"support@signal.org\"\n  },\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"source\": \"src/index.std.ts\",\n  \"main\": \"dist/index.std.cjs\",\n  \"module\": \"dist/index.std.mjs\",\n  \"types\": \"dist/index.std.d.mts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./dist/index.std.d.mts\",\n        \"default\": \"./dist/index.std.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./dist/index.std.d.cts\",\n        \"default\": \"./dist/index.std.cjs\"\n      }\n    }\n  },\n  \"engines\": {\n    \"node\": \">=24.22.0\"\n  },\n  \"scripts\": {\n    \"check\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"prepare\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"buffer\": \"6.0.3\",\n    \"semver\": \"7.7.4\",\n    \"type-fest\": \"5.5.0\",\n    \"uuid\": \"13.0.2\",\n    \"zod\": \"4.3.6\"\n  },\n  \"devDependencies\": {\n    \"@arethetypeswrong/core\": \"0.18.5\",\n    \"publint\": \"0.3.21\",\n    \"tsdown\": \"0.22.14\",\n    \"typescript\": \"7.0.2\"\n  }\n}\n\n<!-- File: packages/types/tsconfig.json (Tokens: ~380 | Category: anthropic-skill) -->\n{\n  \"include\": [\"./src\"],\n  \"compilerOptions\": {\n    \"target\": \"ES2025\",\n    \"lib\": [\"ESNext\"],\n\n    \"module\": \"esnext\",\n    \"rootDir\": \"./src\",\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"rewriteRelativeImportExtensions\": true,\n    \"resolvePackageJsonExports\": true,\n    \"resolvePackageJsonImports\": true,\n    \"noUncheckedSideEffectImports\": true,\n    \"resolveJsonModule\": true,\n\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"inlineSourceMap\": true,\n    \"noEmit\": false,\n    \"outDir\": \"./dist\",\n\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"isolatedDeclarations\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"erasableSyntaxOnly\": false,\n\n    \"strict\": true,\n    \"noImplicitAny\": true,\n    \"strictNullChecks\": true,\n    \"strictFunctionTypes\": true,\n    \"strictBindCallApply\": true,\n    \"strictPropertyInitialization\": true,\n    \"strictBuiltinIteratorReturn\": true,\n    \"noImplicitThis\": true,\n    \"useUnknownInCatchVariables\": true,\n    \"alwaysStrict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"exactOptionalPropertyTypes\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitOverride\": true,\n    \"noPropertyAccessFromIndexSignature\": true,\n    \"allowUnusedLabels\": false,\n    \"allowUnreachableCode\": false,\n    \"skipLibCheck\": false\n  }\n}\n\n<!-- File: packages/windows-ucv/.prettierrc.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Windows-ucv Skill\n\nPath: `packages/windows-ucv/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/.prettierrc.json)\n\n<!-- File: packages/windows-ucv/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Windows-ucv Skill\n\nPath: `packages/windows-ucv/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/package.json)\n\n<!-- File: packages/windows-ucv/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Windows-ucv Skill\n\nPath: `packages/windows-ucv/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/tsconfig.json)\n\n<!-- File: packages/lame/README.md (Tokens: ~382 | Category: plugin-manifest) -->\n<!-- Copyright 2025 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/lame\n\nBindings for [LAME MP3 Encoder][0].\n\n## Building\n\n```sh\nbrew install emscripten\nwget https://cytranet-dal.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz\ntar xzvf lame-3.100.tar.gz\ncd lame-3.100\necho '{}' > package.json # Emscripten can't run in \"type\": \"module\" package\nCFLAGS='-Oz -flto' emconfigure ./configure --disable-shared --disable-decoder \\\n  --disable-frontend --disable-gtktest \\\n  --disable-dependency-tracking --disable-analyzer-hooks --disable-cpml\nemmake make clean\nemmake make -j16\ncd -\nemcc -I lame-3.100/include -Oz -DNDEBUG -flto wrapper.c \\\n    ./lame-3.100/libmp3lame/.libs/libmp3lame.a -o wrapper.mjs \\\n    -sEXPORTED_FUNCTIONS=_wrapper_init,_wrapper_get_max_input_size,_wrapper_get_in,_wrapper_get_out,_wrapper_encode,_wrapper_flush,_wrapper_get_lametag_frame,_wrapper_close \\\n    -sEXPORTED_RUNTIME_METHODS=HEAPU8 -sDYNAMIC_EXECUTION=0 \\\n    -sENVIRONMENT=worklet -sWASM=0 -sWASM_ASYNC_COMPILATION=0\nsed -I '' 's/^async //' wrapper.mjs\n```\n\n## License\n\nCopyright 2025 Signal Messenger, LLC.\n\nLicensed under the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html\n\n[0]: https://lame.sourceforge.io/\n\n<!-- File: packages/mock-server/certs/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# certs Documentation\n\nPath: `packages/mock-server/certs/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/certs/README.md)\n\n<!-- File: packages/mock-server/protos/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# protos Documentation\n\nPath: `packages/mock-server/protos/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/mock-server/protos/README.md)\n\n<!-- File: packages/mock-server/README.md (Tokens: ~168 | Category: plugin-manifest) -->\n<!-- Copyright 2021 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# Signal Mock Server\n\n## Overview\n\nThis npm module is a mock implementation of Signal Server, currently only used\nin [Signal Desktop integration tests][0]. Public API surface area can be found at\n[`src/api`][1].\n\n## Installation\n\n```sh\nnpm install --dev @signalapp/mock-server\n```\n\n## License\n\nCopyright 2022 Signal, a 501c3 nonprofit\n\nLicensed under the AGPLv3: https://opensource.org/licenses/agpl-3.0\n\n[0]: https://github.com/signalapp/Signal-Desktop/tree/development/ts/test-mock\n[1]: https://github.com/signalapp/Mock-Signal-Server/tree/main/src/api\n\n<!-- File: packages/mute-state-change/README.md (Tokens: ~110 | Category: plugin-manifest) -->\n<!-- Copyright 2025 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/mute-state-change\n\n[![npm](https://img.shields.io/npm/v/@signalapp/mute-state-change)](https://www.npmjs.com/package/@signalapp/mute-state-change)\n\nBindings for macOS AVAudioApplication.\n\n## License\n\nCopyright 2025 Signal Messenger, LLC.\n\nLicensed under the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html\n\n<!-- File: packages/types/README.md (Tokens: ~2879 | Category: plugin-manifest) -->\n<!-- Copyright 2014 Signal Messenger, LLC -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n\n# @signalapp/types\n\nThis package provides shared opaque and utility types and related helper\nfunctions for use across different Signal libraries and desktop apps.\n\n```ts\nimport { Aci, SentTimestampMs, DurationSecs } from '@signalapp/types';\n\nexport type PinnedMessage = Readonly<{\n  targetSentTimestamp: SentTimestampMs;\n  targetAuthorAci: Aci;\n  pinDuration: DurationSecs;\n}>;\n```\n\n## API\n\n```ts\nimport type { Tagged } from 'type-fest';\n\n// Result\ntype Result<T, E = string> = Result.Ok<T> | Result.Err<E>;\ntype Result.Ok<T> = Readonly<{ ok: true; value: T; error?: never; }>;\ntype Result.Err<E = string> = Readonly<{ ok: false; value?: never; error: E; }>;\n\n// Numbers\ntype Uint8 = Tagged<number, 'Uint8'>;\ntype Uint16 = Tagged<number, 'Uint16'>;\ntype Uint32 = Tagged<number, 'Uint32'>;\ntype BigUint64 = Tagged<bigint, 'BigUint64'>;\ntype BigUint128 = Tagged<bigint, 'BigUint128'>;\ntype Int8 = Tagged<number, 'Int8'>;\ntype Int16 = Tagged<number, 'Int16'>;\ntype Int32 = Tagged<number, 'Int32'>;\ntype BigInt64 = Tagged<bigint, 'BigInt64'>;\ntype BigInt128 = Tagged<bigint, 'BigInt128'>;\ntype Float16 = Tagged<number, 'Float16'>;\ntype Float32 = Tagged<number, 'Float32'>;\ntype Float64 = Tagged<number, 'Float64'>;\n\n// Units\ntype UnitBytes = Tagged<Float64, 'UnitBytes'>;;\ntype UnitKilobytes = Tagged<Float64, 'UnitKilobytes'>;\ntype UnitKibibytes = Tagged<Float64, 'UnitKibibytes'>;\n\n// Datetime\ntype TimestampMs = Tagged<number, 'TimestampMs'>;\ntype TimestampSecs = Tagged<number, 'TimestampSecs'>;\ntype DurationMs = Tagged<Uint32, 'DurationMs'>;\ntype DurationSecs = Tagged<Uint32, 'DurationSecs'>;\ntype DurationDays = Tagged<Uint32, 'DurationDays'>;\ntype PlainTimeHourMin = Tagged<Uint32, 'PlainTimeHourMin'>;\n\n// Encodings\ntype Bytes = Uint8Array<ArrayBuffer>;\ntype Bytes.Of<T> = Tagged<Bytes, 'Bytes.Of', T>;\ntype Base64 = Tagged<string, 'Base64'>;\ntype Base64.Of<T> = Tagged<Base64, 'Base64.Of', T>;\ntype Base64Url = Tagged<string, 'Base64Url'>;\ntype Base64Url.Of<T> = Tagged<Base64Url, 'Base64URL.Of', T>;\ntype Hex = Tagged<string, 'Hex'>;\ntype Hex.Of<T> = Tagged<Hex, 'Hex.Of', T>;\ntype Json = Tagged<string, 'Json'>;\ntype Json.Of<T extends JsonValue> = Tagged<Json, 'Json.Of', T>;\ntype JsonPrimitive = null | boolean | number | string;\ntype JsonArray = Array<JsonValue> | ReadonlyArray<JsonValue>;\ntype JsonObject = { [Key in string]: JsonValue };\ntype JsonValue = JsonPrimitive | JsonArray | JsonObject;\ntype Utf8.Of<T extends string> = Tagged<T, 'Utf8.Of'>;\n\n// Formats\ntype CountryCode = Tagged<string, 'CountryCode'>;\ntype CurrencyCode = Tagged<string, 'CurrencyCode'>;\ntype HexColor = Tagged<`#${string}`, 'HexColor'>;\ntype HttpUrl = Tagged<string, 'HttpUrl'>;\ntype LanguageTag = Tagged<string, 'LanguageTag'>;\ntype MimeType = Tagged<`${string}/${string}`, 'MimeType'>;\ntype Semver = Tagged<string, 'Semver'>;\ntype Uuid = Tagged<string, 'Uuid'>;\n\n// Service\ntype AccountEntropyPool = Tagged<string, 'AccountEntropyPool'>;\n\ntype E164 = E164.Decoded;\ntype E164.Opaque = Tagged<`+${string}`, 'E164'>;\ntype E164.Encoded = Utf8.Of<E164.Opaque>;\ntype E164.Decoded = Bytes.Of<E164.Opaque>;\n\ntype Aci = Aci.Decoded;\ntype Aci.Opaque = Tagged<Uuid, 'Aci'>;\ntype Aci.Decoded = Utf8.Of<Aci.Opaque>;\ntype Aci.Encoded = Bytes.Of<Aci.Opaque>;\n\ntype Pni = Utf8.Of<Pni.Opaque>;\ntype Pni.Opaque = Tagged<`PNI:${Uuid}`, 'Pni'>;\ntype Pni.Decoded = Utf8.Of<Pni.Opaque>;\ntype Pni.Encoded = Bytes.Of<Pni.Opaque>;\n\ntype UntaggedPni = UntaggedPni.Decoded;\ntype UntaggedPni.Opaque = Tagged<Uuid, 'UntaggedPni'>;\ntype UntaggedPni.Decoded = Utf8.Of<UntaggedPni.Opaque>;\ntype UntaggedPni.Encoded = Bytes.Of<UntaggedPni.Opaque>;\n\ntype ServiceId = ServiceId.Decoded;\ntype ServiceId.Decoded = Aci | Pni;\ntype ServiceId.Encoded = Bytes.Of<Decoded>;\n\ntype DeviceId = Tagged<Uint32, 'DeviceId'>;\n\ntype Address = Address.Decoded;\ntype Address.Opaque = Tagged<`${ServiceId}.${DeviceId}`, 'Address'>;\ntype Address.Decoded = Utf8.Of<Address.Opaque>;\ntype Address.Encoded = Bytes.Of<Address.Opaque>;\n\ntype AddressInfo = Tagged<AddressInfo.Params, 'AddressInfo'>;\ntype AddressInfo.Params = Readonly<{ serviceId: ServiceId; deviceId: DeviceId; }>;\n\ntype Username = Tagged<Utf8.Of<`${UsernameNickname}.${UsernameDiscriminator}`>, 'Username'>;\ntype Username.Params = Readonly<{ nickname: UsernameNickname; discriminator: UsernameDiscriminator }>;\ntype UsernameNickname = Tagged<Utf8.Of<string>, 'UsernameNickname'>;\ntype UsernameDiscriminator = Tagged<`${number}`, 'UsernameDiscriminator'>;\ntype UsernameHash = Tagged<Bytes, 'UsernameHash'>;\ntype UsernameProof = Tagged<Bytes, 'UsernameProof'>;\n\ntype RegistrationId = Tagged<Uint16, 'RegistrationId'>;\n\ntype DistributionId = DistributionId.Decoded;\ntype DistributionId.Opaque = Tagged<Uuid, 'DistributionId'>;\ntype DistributionId.Decoded = Utf8.Of<DistributionId.Opaque>;\ntype DistributionId.Encoded = Bytes.Of<DistributionId.Opaque>;\n\ntype ProfileKey = ProfileKey.Decoded;\ntype ProfileKey.Opaque = Tagged<unknown, 'ProfileKey'>;\ntype ProfileKey.Decoded = Base64.Of<ProfileKey.Opaque>;\ntype ProfileKey.Encoded = Bytes.Of<ProfileKey.Opaque>;\n\ntype ProfileKeyVersion = ProfileKeyVersion.Decoded;\ntype ProfileKeyVersion.Opaque = Tagged<string, 'ProfileKeyVersion'>;\ntype ProfileKeyVersion.Decoded = Utf8.Of<ProfileKeyVersion.Opaque>;\ntype ProfileKeyVersion.Encoded = Bytes.Of<ProfileKeyVersion.Opaque>;\n\ntype GroupId = GroupId.Decoded;\ntype GroupId.Opaque = Tagged<unknown, 'GroupId'>;\ntype GroupId.Decoded = Base64.Of<GroupId.Opaque>;\ntype GroupId.Encoded = Bytes.Of<GroupId.Opaque>;\n\ntype GroupVersion = Tagged<Uint32, 'GroupVersion'>;\n\ntype GroupMasterKey = GroupMasterKey.Decoded;\ntype GroupMasterKey.Opaque = Tagged<unknown, 'GroupMasterKey'>;\ntype GroupMasterKey.Decoded = Base64.Of<GroupMasterKey.Opaque>;\ntype GroupMasterKey.Encoded = Bytes.Of<GroupMasterKey.Opaque>;\n\ntype GroupSecretParams = GroupSecretParams.Decoded;\ntype GroupSecretParams.Opaque = Tagged<unknown, 'GroupSecretParams'>;\ntype GroupSecretParams.Decoded = Base64.Of<GroupSecretParams.Opaque>;\ntype GroupSecretParams.Encoded = Bytes.Of<GroupSecretParams.Opaque>;\n\ntype GroupPublicParams = GroupPublicParams.Decoded;\ntype GroupPublicParams.Opaque = Tagged<unknown, 'GroupPublicParams'>;\ntype GroupPublicParams.Decoded = Base64.Of<GroupPublicParams.Opaque>;\ntype GroupPublicParams.Encoded = Bytes.Of<GroupPublicParams.Opaque>;\n\ntype GroupInviteLinkPassword = GroupInviteLinkPassword.Decoded;\ntype GroupInviteLinkPassword.Opaque = Tagged<unknown, 'GroupInviteLinkPassword'>;\ntype GroupInviteLinkPassword.Decoded = Base64.Of<GroupInviteLinkPassword.Opaque>;\ntype GroupInviteLinkPassword.Encoded = Bytes.Of<GroupInviteLinkPassword.Opaque>;\n\ntype DistributionListId = DistributionListId.Decoded;\ntype DistributionListId.Opaque = Tagged<Uuid, 'DistributionListId'>;\ntype DistributionListId.Decoded = Utf8.Of<DistributionListId.Opaque>;\ntype DistributionListId.Encoded = Bytes.Of<DistributionListId.Opaque>;\n\ntype SentTimestampMs = Tagged<TimestampMs, 'SentTimestampMs'>;\ntype ServerTimestampMs = Tagged<TimestampMs, 'ServerTimestampMs'>;\ntype ReceivedTimestampMs = Tagged<TimestampMs, 'ReceivedTimestampMs'>;\n\ntype StorageManifestVersion = Tagged<BigUint64, 'StorageManifestVersion'>;\n\ntype StorageItemKey = StorageItemKey.Decoded;\ntype StorageItemKey.Opaque = Tagged<unknown, 'StorageItemKey'>;\ntype StorageItemKey.Decoded = Base64.Of<Opaque>;\ntype StorageItemKey.Encoded = Bytes.Of<Opaque>;\n\ntype UnidentifiedAccessKey = UnidentifiedAccessKey.Decoded;\ntype UnidentifiedAccessKey.Opaque = Tagged<unknown, 'UnidentifiedAccessKey'>;\ntype UnidentifiedAccessKey.Decoded = Base64.Of<UnidentifiedAccessKey.Opaque>;\ntype UnidentifiedAccessKey.Encoded = Bytes.Of<UnidentifiedAccessKey.Opaque>;\n\ntype ServerGuid = ServerGuid.Decoded;\ntype ServerGuid.Opaque = Tagged<Uuid, 'ServerGuid'>;\ntype ServerGuid.Decoded = Utf8.Of<ServerGuid.Opaque>;\ntype ServerGuid.Encoded = Bytes.Of<ServerGuid.Opaque>;\n\ntype ReportSpamToken = ReportSpamToken.Decoded;\ntype ReportSpamToken.Opaque = Tagged<unknown, 'ReportSpamToken'>;\ntype ReportSpamToken.Decoded = Base64.Of<ReportSpamToken.Opaque>;\ntype ReportSpamToken.Encoded = Bytes.Of<ReportSpamToken.Opaque>;\n\ntype MuteExpiration = Tagged<Float64, 'MuteExpiration'>;\n```\n\n### Schemas\n\nAlmost all of these types provide Zod schemas:\n\n```ts\nimport { Aci, SentTimestampMs, DurationSecs } from '@signalapp/types';\n\nexport const PinnedMessageSchema = z.object({\n  targetSentTimestamp: SentTimestampMs.Schema,\n  targetAuthorAci: Aci.Schema,\n  pinDuration: DurationSecs.Schema,\n});\n```\n\n### Helpers\n\nTypes have helpers for casting loosely typed data to strict types:\n\n> Note: You should prefer to use the most specific `from*` method that you can,\n> it will generally have less runtime cost checking the type is valid.\n\n```ts\nAci.isValid(input: string): input is Aci; // boolean\nAci.fromUuid(input: Uuid): Aci; // throws if invalid\nAci.fromString(input: string): Aci; // throws if invalid\n```\n\n### Encodings\n\nEncodings have special `<Encoding>.Of<T>` types to represent internal opaque\ntypes:\n\n```ts\n// Maybe this just represents some random number generation that we should not be aware of\nexport type MyOpaqueType = Tagged<unknown, 'MyOpaqueType'>;\n\nexport function decode(input: Bytes.Of<MyOpaqueType>): Base64.Of<MyOpaqueType> {\n  return Base64.fromBytes(input);\n}\n\nexport function encode(input: Bytes.Of<MyOpaqueType>): Base64.Of<MyOpaqueType> {\n  return Base64.toBytes(input);\n}\n```\n\nMany of the \"service\" types use these `<Encoding>.Of` types to wrap their own\ninternal `Opaque` type with expected encodings along with `encode` and `decode`\nhelpers:\n\n```ts\nexport type StorageItemKey = StorageItemKey.Decoded;\n\nexport namespace StorageItemKey {\n  type Opaque = Tagged<unknown, 'StorageItemKey'>;\n\n  export type Decoded = Base64.Of<Opaque>;\n  export type Encoded = Bytes.Of<Opaque>;\n\n  export function decode(input: Encoded): StorageItemKey {\n    return Base64.fromBytes(input);\n  }\n\n  export function encode(input: StorageItemKey): Encoded {\n    return Base64.toBytes(input);\n  }\n}\n```\n\n## Future Ideas\n\n- General:\n  - [ ] `NonEmpty<T extends { length: number }>`\n  - [ ] `NonZero<T extends number | bigint>`\n- Units:\n  - [ ] `Dimension`\n  - [ ] `Width`\n  - [ ] `Height`\n  - [ ] `BlurHash`\n  - [ ] `Email`\n- File System:\n  - [ ] `FileName`\n  - [ ] `FilePath`\n  - [ ] `FileExtension`\n- Net:\n  - [ ] `BasicAuth`\n  - [ ] `IpV4`\n  - [ ] `IpV6`\n  - [ ] `IpAddr`\n  - [ ] `Domain/Hostname`\n  - [ ] `Protocol`\n  - [ ] `Port`\n- Service:\n  - [ ] `UserText` / `TrustedText`\n\n<!-- File: packages/windows-ucv/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# windows-ucv Documentation\n\nPath: `packages/windows-ucv/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/signalapp/Signal-Desktop/HEAD/packages/windows-ucv/README.md)\n</yakaai_skills>"}