This commit is contained in:
Zero Slash 2026-01-29 21:53:32 -05:00 committed by GitHub
commit 6566ca49cf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 325 additions and 76 deletions

View File

@ -86,6 +86,9 @@ jobs:
- runtime: node
task: format
command: pnpm format
- runtime: node
task: check-loc
command: pnpm check:loc
- runtime: bun
task: test
command: pnpm canvas:a2ui:bundle && bunx vitest run

View File

@ -90,10 +90,6 @@
{
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
},
{
"path": "detect_secrets.filters.common.is_baseline_file",
"filename": ".secrets.baseline"
},
{
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
"min_level": 2
@ -128,7 +124,10 @@
{
"path": "detect_secrets.filters.regex.should_exclude_file",
"pattern": [
"(^|/)pnpm-lock\\.yaml$"
"(^|/)\\.venv/",
"(^|/)pnpm-lock\\.yaml$",
"(^|/)(dist|vendor)/",
"(^|/)\\.detect-secrets\\.cfg$"
]
},
{
@ -156,26 +155,26 @@
}
],
"appcast.xml": [
{
"type": "Base64 High Entropy String",
"filename": "appcast.xml",
"hashed_secret": "c417f47cebc049c2cfb215b454ac87fee4097e5d",
"is_verified": false,
"line_number": 19
},
{
"type": "Base64 High Entropy String",
"filename": "appcast.xml",
"hashed_secret": "70632487bab4b6634ef5bd60d0979b169cf7440a",
"is_verified": false,
"line_number": 98
},
{
"type": "Base64 High Entropy String",
"filename": "appcast.xml",
"hashed_secret": "4e5f0a148d9ef42afeb73b1c77643e2ef2dee0b9",
"is_verified": false,
"line_number": 90
},
{
"type": "Base64 High Entropy String",
"filename": "appcast.xml",
"hashed_secret": "f1ccdaf78c308ec2cf608818da13f5f1e4809ed1",
"is_verified": false,
"line_number": 138
},
{
"type": "Base64 High Entropy String",
"filename": "appcast.xml",
"hashed_secret": "2691dc9c9ded92ba62a2d8ee589e2d78e2aa0479",
"is_verified": false,
"line_number": 212
"line_number": 185
}
],
"apps/macos/Tests/ClawdbotIPCTests/AnthropicAuthResolverTests.swift": [
@ -248,6 +247,15 @@
"line_number": 32
}
],
"docs/channels/line.md": [
{
"type": "Secret Keyword",
"filename": "docs/channels/line.md",
"hashed_secret": "83661b43df128631f891767fbfc5b049af3dce86",
"is_verified": false,
"line_number": 60
}
],
"docs/channels/matrix.md": [
{
"type": "Secret Keyword",
@ -284,27 +292,43 @@
"line_number": 141
}
],
"docs/channels/twitch.md": [
{
"type": "Secret Keyword",
"filename": "docs/channels/twitch.md",
"hashed_secret": "0d1ba0da3e84e54f29846c93c43182eede365858",
"is_verified": false,
"line_number": 132
},
{
"type": "Secret Keyword",
"filename": "docs/channels/twitch.md",
"hashed_secret": "7cb4c5b8b81e266d08d4f106799af98d748bceb9",
"is_verified": false,
"line_number": 312
}
],
"docs/concepts/memory.md": [
{
"type": "Secret Keyword",
"filename": "docs/concepts/memory.md",
"hashed_secret": "39d711243bfcee9fec8299b204e1aa9c3430fa12",
"is_verified": false,
"line_number": 108
"line_number": 110
},
{
"type": "Secret Keyword",
"filename": "docs/concepts/memory.md",
"hashed_secret": "1a8abbf465c52363ab4c9c6ad945b8e857cbea55",
"is_verified": false,
"line_number": 131
"line_number": 133
},
{
"type": "Secret Keyword",
"filename": "docs/concepts/memory.md",
"hashed_secret": "b9f640d6095b9f6b5a65983f7b76dbbb254e0044",
"is_verified": false,
"line_number": 373
"line_number": 375
}
],
"docs/concepts/model-providers.md": [
@ -313,14 +337,14 @@
"filename": "docs/concepts/model-providers.md",
"hashed_secret": "ec3810e10fb78db55ce38b9c18d1c3eb1db739e0",
"is_verified": false,
"line_number": 168
"line_number": 170
},
{
"type": "Secret Keyword",
"filename": "docs/concepts/model-providers.md",
"hashed_secret": "ef83ad68b9b66e008727b7c417c6a8f618b5177e",
"is_verified": false,
"line_number": 255
"line_number": 281
}
],
"docs/environment.md": [
@ -382,63 +406,63 @@
"filename": "docs/gateway/configuration.md",
"hashed_secret": "a219d7693c25cd2d93313512e200ff3eb374d281",
"is_verified": false,
"line_number": 272
"line_number": 283
},
{
"type": "Secret Keyword",
"filename": "docs/gateway/configuration.md",
"hashed_secret": "b6f56e5e92078ed7c078c46fbfeedcbe5719bc25",
"is_verified": false,
"line_number": 274
"line_number": 285
},
{
"type": "Secret Keyword",
"filename": "docs/gateway/configuration.md",
"hashed_secret": "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4",
"is_verified": false,
"line_number": 1029
"line_number": 1032
},
{
"type": "Secret Keyword",
"filename": "docs/gateway/configuration.md",
"hashed_secret": "1188d5a8ed7edcff5144a9472af960243eacf12e",
"is_verified": false,
"line_number": 1470
"line_number": 1514
},
{
"type": "Secret Keyword",
"filename": "docs/gateway/configuration.md",
"hashed_secret": "bde4db9b4c3be4049adc3b9a69851d7c35119770",
"is_verified": false,
"line_number": 1486
"line_number": 1530
},
{
"type": "Secret Keyword",
"filename": "docs/gateway/configuration.md",
"hashed_secret": "22af290a1a3d5e941193a41a3d3a9e4ca8da5e27",
"is_verified": false,
"line_number": 2268
"line_number": 2315
},
{
"type": "Secret Keyword",
"filename": "docs/gateway/configuration.md",
"hashed_secret": "ec3810e10fb78db55ce38b9c18d1c3eb1db739e0",
"is_verified": false,
"line_number": 2344
"line_number": 2391
},
{
"type": "Secret Keyword",
"filename": "docs/gateway/configuration.md",
"hashed_secret": "c1e6ee547fd492df1441ac492e8bb294974712bd",
"is_verified": false,
"line_number": 2658
"line_number": 2705
},
{
"type": "Secret Keyword",
"filename": "docs/gateway/configuration.md",
"hashed_secret": "45d676e7c6ab44cf4b8fa366ef2d8fccd3e6d6e6",
"is_verified": false,
"line_number": 2844
"line_number": 2900
}
],
"docs/gateway/local-models.md": [
@ -463,7 +487,7 @@
"filename": "docs/gateway/tailscale.md",
"hashed_secret": "9cb0dc5383312aa15b9dc6745645bde18ff5ade9",
"is_verified": false,
"line_number": 75
"line_number": 78
}
],
"docs/help/faq.md": [
@ -472,35 +496,35 @@
"filename": "docs/help/faq.md",
"hashed_secret": "491d458f895b9213facb2ee9375b1b044eaea3ac",
"is_verified": false,
"line_number": 925
"line_number": 1332
},
{
"type": "Secret Keyword",
"filename": "docs/help/faq.md",
"hashed_secret": "a219d7693c25cd2d93313512e200ff3eb374d281",
"is_verified": false,
"line_number": 1113
"line_number": 1594
},
{
"type": "Secret Keyword",
"filename": "docs/help/faq.md",
"hashed_secret": "b6f56e5e92078ed7c078c46fbfeedcbe5719bc25",
"is_verified": false,
"line_number": 1114
"line_number": 1595
},
{
"type": "Secret Keyword",
"filename": "docs/help/faq.md",
"hashed_secret": "ec3810e10fb78db55ce38b9c18d1c3eb1db739e0",
"is_verified": false,
"line_number": 1439
"line_number": 2006
},
{
"type": "Secret Keyword",
"filename": "docs/help/faq.md",
"hashed_secret": "45d676e7c6ab44cf4b8fa366ef2d8fccd3e6d6e6",
"is_verified": false,
"line_number": 1715
"line_number": 2278
}
],
"docs/nodes/talk.md": [
@ -521,13 +545,40 @@
"line_number": 35
}
],
"docs/platforms/macos-vm.md": [
{
"type": "Secret Keyword",
"filename": "docs/platforms/macos-vm.md",
"hashed_secret": "8dd3bcd07c9ee927e6921c98b4dc6e94e2cc10a9",
"is_verified": false,
"line_number": 212
}
],
"docs/plugins/voice-call.md": [
{
"type": "Secret Keyword",
"filename": "docs/plugins/voice-call.md",
"hashed_secret": "cb46980ce5532f18440dff4bbbe097896a8c08c8",
"is_verified": false,
"line_number": 157
}
],
"docs/providers/anthropic.md": [
{
"type": "Secret Keyword",
"filename": "docs/providers/anthropic.md",
"hashed_secret": "c7a8c334eef5d1749fface7d42c66f9ae5e8cf36",
"is_verified": false,
"line_number": 32
"line_number": 31
}
],
"docs/providers/claude-max-api-proxy.md": [
{
"type": "Secret Keyword",
"filename": "docs/providers/claude-max-api-proxy.md",
"hashed_secret": "b5c2827eb65bf13b87130e7e3c424ba9ff07cd67",
"is_verified": false,
"line_number": 77
}
],
"docs/providers/glm.md": [
@ -564,13 +615,22 @@
"line_number": 39
}
],
"docs/providers/ollama.md": [
{
"type": "Secret Keyword",
"filename": "docs/providers/ollama.md",
"hashed_secret": "e774aaeac31c6272107ba89080295e277050fa7c",
"is_verified": false,
"line_number": 29
}
],
"docs/providers/openai.md": [
{
"type": "Secret Keyword",
"filename": "docs/providers/openai.md",
"hashed_secret": "ec3810e10fb78db55ce38b9c18d1c3eb1db739e0",
"is_verified": false,
"line_number": 31
"line_number": 29
}
],
"docs/providers/opencode.md": [
@ -600,6 +660,22 @@
"line_number": 31
}
],
"docs/providers/venice.md": [
{
"type": "Secret Keyword",
"filename": "docs/providers/venice.md",
"hashed_secret": "0b1b9301d9cd541620de4e3865d4a8f54f42fa89",
"is_verified": false,
"line_number": 53
},
{
"type": "Secret Keyword",
"filename": "docs/providers/venice.md",
"hashed_secret": "c179fe46776696372a90218532dc0d67267f2f04",
"is_verified": false,
"line_number": 233
}
],
"docs/providers/zai.md": [
{
"type": "Secret Keyword",
@ -642,7 +718,7 @@
"filename": "docs/tools/skills.md",
"hashed_secret": "c1e6ee547fd492df1441ac492e8bb294974712bd",
"is_verified": false,
"line_number": 160
"line_number": 168
}
],
"docs/tools/web.md": [
@ -672,7 +748,7 @@
"filename": "docs/tools/web.md",
"hashed_secret": "674397e2c0c2faaa85961c708d2a96a7cc7af217",
"is_verified": false,
"line_number": 223
"line_number": 230
}
],
"docs/tts.md": [
@ -681,14 +757,14 @@
"filename": "docs/tts.md",
"hashed_secret": "bde4db9b4c3be4049adc3b9a69851d7c35119770",
"is_verified": false,
"line_number": 72
"line_number": 93
},
{
"type": "Secret Keyword",
"filename": "docs/tts.md",
"hashed_secret": "1188d5a8ed7edcff5144a9472af960243eacf12e",
"is_verified": false,
"line_number": 77
"line_number": 98
}
],
"extensions/bluebubbles/src/actions.test.ts": [
@ -833,7 +909,7 @@
"filename": "extensions/bluebubbles/src/send.test.ts",
"hashed_secret": "faacad0ce4ea1c19b46e128fd79679d37d3d331d",
"is_verified": false,
"line_number": 675
"line_number": 767
}
],
"extensions/bluebubbles/src/targets.test.ts": [
@ -872,6 +948,15 @@
"line_number": 9
}
],
"extensions/google-gemini-cli-auth/oauth.test.ts": [
{
"type": "Secret Keyword",
"filename": "extensions/google-gemini-cli-auth/oauth.test.ts",
"hashed_secret": "021343c1f561d7bcbc3b513df45cc3a6baf67b43",
"is_verified": false,
"line_number": 26
}
],
"extensions/matrix/src/matrix/accounts.test.ts": [
{
"type": "Secret Keyword",
@ -955,7 +1040,7 @@
"filename": "extensions/nextcloud-talk/src/channel.ts",
"hashed_secret": "71f8e7976e4cbc4561c9d62fb283e7f788202acb",
"is_verified": false,
"line_number": 390
"line_number": 391
}
],
"extensions/nostr/README.md": [
@ -1109,6 +1194,40 @@
"line_number": 198
}
],
"extensions/twitch/src/onboarding.test.ts": [
{
"type": "Secret Keyword",
"filename": "extensions/twitch/src/onboarding.test.ts",
"hashed_secret": "f2b14f68eb995facb3a1c35287b778d5bd785511",
"is_verified": false,
"line_number": 234
},
{
"type": "Secret Keyword",
"filename": "extensions/twitch/src/onboarding.test.ts",
"hashed_secret": "c8d8f8140951794fa875ea2c2d010c4382f36566",
"is_verified": false,
"line_number": 244
}
],
"extensions/twitch/src/status.test.ts": [
{
"type": "Secret Keyword",
"filename": "extensions/twitch/src/status.test.ts",
"hashed_secret": "f2b14f68eb995facb3a1c35287b778d5bd785511",
"is_verified": false,
"line_number": 122
}
],
"extensions/voice-call/src/config.test.ts": [
{
"type": "Secret Keyword",
"filename": "extensions/voice-call/src/config.test.ts",
"hashed_secret": "62207a469ec2fdcfc7d66b04c2980ac1501acbf0",
"is_verified": false,
"line_number": 122
}
],
"extensions/zalo/README.md": [
{
"type": "Secret Keyword",
@ -1281,14 +1400,14 @@
"filename": "src/agents/models-config.skips-writing-models-json-no-env-token.test.ts",
"hashed_secret": "fcdd655b11f33ba4327695084a347b2ba192976c",
"is_verified": false,
"line_number": 112
"line_number": 120
},
{
"type": "Secret Keyword",
"filename": "src/agents/models-config.skips-writing-models-json-no-env-token.test.ts",
"hashed_secret": "94c4be5a1976115e8152960c21e04400a4fccdf6",
"is_verified": false,
"line_number": 146
"line_number": 154
}
],
"src/agents/models-config.uses-first-github-copilot-profile-env-tokens.test.ts": [
@ -1397,6 +1516,15 @@
"line_number": 178
}
],
"src/agents/pi-embedded-runner/run.overflow-compaction.test.ts": [
{
"type": "Secret Keyword",
"filename": "src/agents/pi-embedded-runner/run.overflow-compaction.test.ts",
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
"is_verified": false,
"line_number": 30
}
],
"src/agents/skills.applyskillenvoverrides.test.ts": [
{
"type": "Secret Keyword",
@ -1446,28 +1574,28 @@
"filename": "src/agents/tools/web-search.ts",
"hashed_secret": "dfba7aade0868074c2861c98e2a9a92f3178a51b",
"is_verified": false,
"line_number": 85
"line_number": 93
},
{
"type": "Secret Keyword",
"filename": "src/agents/tools/web-search.ts",
"hashed_secret": "71f8e7976e4cbc4561c9d62fb283e7f788202acb",
"is_verified": false,
"line_number": 190
"line_number": 198
},
{
"type": "Secret Keyword",
"filename": "src/agents/tools/web-search.ts",
"hashed_secret": "c4865ff9250aca23b0d98eb079dad70ebec1cced",
"is_verified": false,
"line_number": 198
"line_number": 206
},
{
"type": "Secret Keyword",
"filename": "src/agents/tools/web-search.ts",
"hashed_secret": "527ee41f36386e85fa932ef09471ca017f3c95c8",
"is_verified": false,
"line_number": 199
"line_number": 207
}
],
"src/agents/tools/web-tools.enabled-defaults.test.ts": [
@ -1476,14 +1604,14 @@
"filename": "src/agents/tools/web-tools.enabled-defaults.test.ts",
"hashed_secret": "47b249a75ca78fdb578d0f28c33685e27ea82684",
"is_verified": false,
"line_number": 213
"line_number": 268
},
{
"type": "Secret Keyword",
"filename": "src/agents/tools/web-tools.enabled-defaults.test.ts",
"hashed_secret": "d0ffd81d6d7ad1bc3c365660fe8882480c9a986e",
"is_verified": false,
"line_number": 242
"line_number": 297
}
],
"src/agents/tools/web-tools.fetch.test.ts": [
@ -1563,6 +1691,15 @@
"line_number": 13
}
],
"src/channels/plugins/normalize/signal.test.ts": [
{
"type": "Hex High Entropy String",
"filename": "src/channels/plugins/normalize/signal.test.ts",
"hashed_secret": "99c962e8c62296bdc9a17f5caf91ce9bb4c7e0e6",
"is_verified": false,
"line_number": 24
}
],
"src/cli/update-cli.test.ts": [
{
"type": "Hex High Entropy String",
@ -1610,7 +1747,16 @@
"filename": "src/commands/configure.gateway-auth.test.ts",
"hashed_secret": "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4",
"is_verified": false,
"line_number": 8
"line_number": 10
}
],
"src/commands/daemon-install-helpers.test.ts": [
{
"type": "Secret Keyword",
"filename": "src/commands/daemon-install-helpers.test.ts",
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
"is_verified": false,
"line_number": 122
}
],
"src/commands/models/list.status.test.ts": [
@ -1771,41 +1917,50 @@
"line_number": 228
}
],
"src/config/model-alias-defaults.test.ts": [
{
"type": "Secret Keyword",
"filename": "src/config/model-alias-defaults.test.ts",
"hashed_secret": "e9a5f12a8ecbb3eb46eca5096b5c52aa5e7c9fdd",
"is_verified": false,
"line_number": 66
}
],
"src/config/schema.ts": [
{
"type": "Secret Keyword",
"filename": "src/config/schema.ts",
"hashed_secret": "e73c9fcad85cd4eecc74181ec4bdb31064d68439",
"is_verified": false,
"line_number": 184
"line_number": 190
},
{
"type": "Secret Keyword",
"filename": "src/config/schema.ts",
"hashed_secret": "2eda7cd978f39eebec3bf03e4410a40e14167fff",
"is_verified": false,
"line_number": 220
"line_number": 227
},
{
"type": "Secret Keyword",
"filename": "src/config/schema.ts",
"hashed_secret": "9f4cda226d3868676ac7f86f59e4190eb94bd208",
"is_verified": false,
"line_number": 418
"line_number": 435
},
{
"type": "Secret Keyword",
"filename": "src/config/schema.ts",
"hashed_secret": "01822c8bbf6a8b136944b14182cb885100ec2eae",
"is_verified": false,
"line_number": 437
"line_number": 454
},
{
"type": "Secret Keyword",
"filename": "src/config/schema.ts",
"hashed_secret": "bb7dfd9746e660e4a4374951ec5938ef0e343255",
"is_verified": false,
"line_number": 487
"line_number": 504
}
],
"src/config/slack-http-config.test.ts": [
@ -1905,14 +2060,14 @@
"filename": "src/gateway/server.auth.e2e.test.ts",
"hashed_secret": "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4",
"is_verified": false,
"line_number": 179
"line_number": 192
},
{
"type": "Secret Keyword",
"filename": "src/gateway/server.auth.e2e.test.ts",
"hashed_secret": "a4b48a81cdab1e1a5dd37907d6c85ca1c61ddc7c",
"is_verified": false,
"line_number": 197
"line_number": 210
}
],
"src/gateway/session-utils.test.ts": [
@ -1930,7 +2085,7 @@
"filename": "src/gateway/tools-invoke-http.test.ts",
"hashed_secret": "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4",
"is_verified": false,
"line_number": 56
"line_number": 65
}
],
"src/gateway/ws-log.test.ts": [
@ -1971,7 +2126,7 @@
"filename": "src/infra/outbound/message-action-runner.test.ts",
"hashed_secret": "789cbe0407840b1c2041cb33452ff60f19bf58cc",
"is_verified": false,
"line_number": 385
"line_number": 423
}
],
"src/infra/outbound/outbound-policy.test.ts": [
@ -2006,6 +2161,56 @@
"line_number": 61
}
],
"src/line/accounts.test.ts": [
{
"type": "Secret Keyword",
"filename": "src/line/accounts.test.ts",
"hashed_secret": "fe1bae27cb7c1fb823f496f286e78f1d2ae87734",
"is_verified": false,
"line_number": 31
},
{
"type": "Secret Keyword",
"filename": "src/line/accounts.test.ts",
"hashed_secret": "8a8281cec699f5e51330e21dd7fab3531af6ef0c",
"is_verified": false,
"line_number": 49
},
{
"type": "Secret Keyword",
"filename": "src/line/accounts.test.ts",
"hashed_secret": "b4924d9834a1126714643ac231fb6623c14c3449",
"is_verified": false,
"line_number": 75
}
],
"src/line/bot-handlers.test.ts": [
{
"type": "Secret Keyword",
"filename": "src/line/bot-handlers.test.ts",
"hashed_secret": "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4",
"is_verified": false,
"line_number": 63
}
],
"src/line/bot-message-context.test.ts": [
{
"type": "Secret Keyword",
"filename": "src/line/bot-message-context.test.ts",
"hashed_secret": "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4",
"is_verified": false,
"line_number": 18
}
],
"src/line/webhook.test.ts": [
{
"type": "Secret Keyword",
"filename": "src/line/webhook.test.ts",
"hashed_secret": "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4",
"is_verified": false,
"line_number": 22
}
],
"src/logging/redact.test.ts": [
{
"type": "Base64 High Entropy String",
@ -2128,28 +2333,28 @@
"filename": "src/security/audit.test.ts",
"hashed_secret": "b1775a785f09a6ebaf2dc33d6eaeb98974d9cdb8",
"is_verified": false,
"line_number": 180
"line_number": 306
},
{
"type": "Hex High Entropy String",
"filename": "src/security/audit.test.ts",
"hashed_secret": "fa8da98a5bdb77b4902cbb4338e6e94ea825300e",
"is_verified": false,
"line_number": 209
"line_number": 335
},
{
"type": "Secret Keyword",
"filename": "src/security/audit.test.ts",
"hashed_secret": "21f688ab56f76a99e5c6ed342291422f4e57e47f",
"is_verified": false,
"line_number": 1046
"line_number": 1195
},
{
"type": "Secret Keyword",
"filename": "src/security/audit.test.ts",
"hashed_secret": "3dc927d80543dc0f643940b70d066bd4b4c4b78e",
"is_verified": false,
"line_number": 1077
"line_number": 1226
}
],
"src/tts/tts.test.ts": [
@ -2165,7 +2370,28 @@
"filename": "src/tts/tts.test.ts",
"hashed_secret": "b214f706bb602c1cc2adc5c6165e73622305f4bb",
"is_verified": false,
"line_number": 68
"line_number": 71
},
{
"type": "Secret Keyword",
"filename": "src/tts/tts.test.ts",
"hashed_secret": "75ddfb45216fe09680dfe70eda4f559a910c832c",
"is_verified": false,
"line_number": 396
},
{
"type": "Secret Keyword",
"filename": "src/tts/tts.test.ts",
"hashed_secret": "e29af93630aa18cc3457cb5b13937b7ab7c99c9b",
"is_verified": false,
"line_number": 412
},
{
"type": "Secret Keyword",
"filename": "src/tts/tts.test.ts",
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
"is_verified": false,
"line_number": 446
}
],
"src/web/qr-image.test.ts": [
@ -2187,5 +2413,5 @@
}
]
},
"generated_at": "2026-01-25T10:55:04Z"
"generated_at": "2026-01-26T21:28:52Z"
}

View File

@ -144,7 +144,7 @@
"protocol:gen:swift": "node --import tsx scripts/protocol-gen-swift.ts",
"protocol:check": "pnpm protocol:gen && pnpm protocol:gen:swift && git diff --exit-code -- dist/protocol.schema.json apps/macos/Sources/MoltbotProtocol/GatewayModels.swift",
"canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
"check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500"
"check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 3000"
},
"keywords": [],
"author": "",

View File

@ -4,10 +4,13 @@ import { execFileSync } from "node:child_process";
type ParsedArgs = {
maxLines: number;
exclude: RegExp[];
};
function parseArgs(argv: string[]): ParsedArgs {
let maxLines = 500;
const excludePatterns: string[] = [];
const defaultExcludePatterns = ["^(vendor|dist|docs|extensions|ui|apps)/"];
for (let index = 0; index < argv.length; index++) {
const arg = argv[index];
@ -18,9 +21,25 @@ function parseArgs(argv: string[]): ParsedArgs {
index++;
continue;
}
if (arg === "--exclude") {
const next = argv[index + 1];
if (!next) throw new Error("Missing --exclude value");
excludePatterns.push(next);
index++;
continue;
}
}
return { maxLines };
const combinedPatterns = [...defaultExcludePatterns, ...excludePatterns];
const exclude = combinedPatterns.map((pattern) => {
try {
return new RegExp(pattern);
} catch {
throw new Error(`Invalid --exclude regex: ${pattern}`);
}
});
return { maxLines, exclude };
}
function gitLsFilesAll(): string[] {
@ -47,10 +66,11 @@ async function main() {
throw error;
});
const { maxLines } = parseArgs(process.argv.slice(2));
const { maxLines, exclude } = parseArgs(process.argv.slice(2));
const files = gitLsFilesAll()
.filter((filePath) => existsSync(filePath))
.filter((filePath) => filePath.endsWith(".ts") || filePath.endsWith(".tsx"));
.filter((filePath) => filePath.endsWith(".ts") || filePath.endsWith(".tsx"))
.filter((filePath) => !exclude.some((pattern) => pattern.test(filePath)));
const results = await Promise.all(
files.map(async (filePath) => ({ filePath, lines: await countLines(filePath) })),