@lousy-agents/cli 5.16.0 → 5.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "ghcr.io/devcontainers/features/copilot-cli:1.0.0": {},
12
12
  "ghcr.io/anthropics/devcontainer-features/claude-code:1": {
13
- "version": "v2.1.197"
13
+ "version": "v2.1.198"
14
14
  },
15
15
  "ghcr.io/rocker-org/devcontainer-features/apt-packages:1.0.2": {
16
16
  "packages": "yamllint, shellcheck",
@@ -213,21 +213,21 @@
213
213
  }
214
214
  },
215
215
  "node_modules/@emnapi/core": {
216
- "version": "1.10.0",
217
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
218
- "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
216
+ "version": "1.11.1",
217
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
218
+ "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
219
219
  "dev": true,
220
220
  "license": "MIT",
221
221
  "optional": true,
222
222
  "dependencies": {
223
- "@emnapi/wasi-threads": "1.2.1",
223
+ "@emnapi/wasi-threads": "1.2.2",
224
224
  "tslib": "^2.4.0"
225
225
  }
226
226
  },
227
227
  "node_modules/@emnapi/runtime": {
228
- "version": "1.10.0",
229
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
230
- "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
228
+ "version": "1.11.1",
229
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
230
+ "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
231
231
  "dev": true,
232
232
  "license": "MIT",
233
233
  "optional": true,
@@ -236,9 +236,9 @@
236
236
  }
237
237
  },
238
238
  "node_modules/@emnapi/wasi-threads": {
239
- "version": "1.2.1",
240
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
241
- "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
239
+ "version": "1.2.2",
240
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
241
+ "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
242
242
  "dev": true,
243
243
  "license": "MIT",
244
244
  "optional": true,
@@ -1036,14 +1036,14 @@
1036
1036
  }
1037
1037
  },
1038
1038
  "node_modules/@napi-rs/wasm-runtime": {
1039
- "version": "1.1.4",
1040
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
1041
- "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==",
1039
+ "version": "1.1.6",
1040
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
1041
+ "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
1042
1042
  "dev": true,
1043
1043
  "license": "MIT",
1044
1044
  "optional": true,
1045
1045
  "dependencies": {
1046
- "@tybys/wasm-util": "^0.10.1"
1046
+ "@tybys/wasm-util": "^0.10.3"
1047
1047
  },
1048
1048
  "funding": {
1049
1049
  "type": "github",
@@ -1055,9 +1055,9 @@
1055
1055
  }
1056
1056
  },
1057
1057
  "node_modules/@oxc-project/types": {
1058
- "version": "0.132.0",
1059
- "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.132.0.tgz",
1060
- "integrity": "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==",
1058
+ "version": "0.138.0",
1059
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.138.0.tgz",
1060
+ "integrity": "sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA==",
1061
1061
  "dev": true,
1062
1062
  "license": "MIT",
1063
1063
  "funding": {
@@ -1155,9 +1155,9 @@
1155
1155
  "license": "BSD-3-Clause"
1156
1156
  },
1157
1157
  "node_modules/@rolldown/binding-android-arm64": {
1158
- "version": "1.0.2",
1159
- "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz",
1160
- "integrity": "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==",
1158
+ "version": "1.1.4",
1159
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.4.tgz",
1160
+ "integrity": "sha512-EZLpf/8y7GXkkra90ML47kzik/GMP3EMcE9bPyHmRfxLC6z9+aW5A8poCsoxjrT5GfEcNAAvWwUHjvP1pUQkfw==",
1161
1161
  "cpu": [
1162
1162
  "arm64"
1163
1163
  ],
@@ -1172,9 +1172,9 @@
1172
1172
  }
1173
1173
  },
1174
1174
  "node_modules/@rolldown/binding-darwin-arm64": {
1175
- "version": "1.0.2",
1176
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.2.tgz",
1177
- "integrity": "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==",
1175
+ "version": "1.1.4",
1176
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.4.tgz",
1177
+ "integrity": "sha512-aUi+HBvmYb7j8krl1+qJgkG8C17fO79gk3c+jPw4S8glRFc1DTija9S3EyaTSQUm5GJXYKDAsugBEhFHH2vYiQ==",
1178
1178
  "cpu": [
1179
1179
  "arm64"
1180
1180
  ],
@@ -1189,9 +1189,9 @@
1189
1189
  }
1190
1190
  },
1191
1191
  "node_modules/@rolldown/binding-darwin-x64": {
1192
- "version": "1.0.2",
1193
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.2.tgz",
1194
- "integrity": "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==",
1192
+ "version": "1.1.4",
1193
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.4.tgz",
1194
+ "integrity": "sha512-F7hHC3gwY11+vByKPRWqwGbeXWVgKmL+pTGCinaEhdihzBV2aQ0fvZOch9cXYUOKuKKq429HeYXOqQLc7wFCEg==",
1195
1195
  "cpu": [
1196
1196
  "x64"
1197
1197
  ],
@@ -1206,9 +1206,9 @@
1206
1206
  }
1207
1207
  },
1208
1208
  "node_modules/@rolldown/binding-freebsd-x64": {
1209
- "version": "1.0.2",
1210
- "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.2.tgz",
1211
- "integrity": "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==",
1209
+ "version": "1.1.4",
1210
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.4.tgz",
1211
+ "integrity": "sha512-sI5yw+7s92SK6odiEhD5lKCBlWcpjHS5qyqpVQbZAJ0fIzEUXrmbl3DH2ybR3PZogulNJF+COLtmA8hUfvkCCQ==",
1212
1212
  "cpu": [
1213
1213
  "x64"
1214
1214
  ],
@@ -1223,9 +1223,9 @@
1223
1223
  }
1224
1224
  },
1225
1225
  "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
1226
- "version": "1.0.2",
1227
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.2.tgz",
1228
- "integrity": "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==",
1226
+ "version": "1.1.4",
1227
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.4.tgz",
1228
+ "integrity": "sha512-mCi0OKgEieFircrtVYmQAFGszRtMnZ6fpZAXrxanXAu7lqZcsK1E1RAaZNG0uKAnxox3B1f4EyQNnoyMfN1vAA==",
1229
1229
  "cpu": [
1230
1230
  "arm"
1231
1231
  ],
@@ -1240,13 +1240,16 @@
1240
1240
  }
1241
1241
  },
1242
1242
  "node_modules/@rolldown/binding-linux-arm64-gnu": {
1243
- "version": "1.0.2",
1244
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.2.tgz",
1245
- "integrity": "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==",
1243
+ "version": "1.1.4",
1244
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.4.tgz",
1245
+ "integrity": "sha512-B9Ial3Kv5sh0SHnB1g/QWcUQCEvCF6QKGAl4zXypYj65mVI+B4AhFBwPtSN7pDrJeIx8Z7zdy4ntx+wQABom7w==",
1246
1246
  "cpu": [
1247
1247
  "arm64"
1248
1248
  ],
1249
1249
  "dev": true,
1250
+ "libc": [
1251
+ "glibc"
1252
+ ],
1250
1253
  "license": "MIT",
1251
1254
  "optional": true,
1252
1255
  "os": [
@@ -1257,13 +1260,16 @@
1257
1260
  }
1258
1261
  },
1259
1262
  "node_modules/@rolldown/binding-linux-arm64-musl": {
1260
- "version": "1.0.2",
1261
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.2.tgz",
1262
- "integrity": "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==",
1263
+ "version": "1.1.4",
1264
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.4.tgz",
1265
+ "integrity": "sha512-lZVym0PuHE1KZ22gmFTC15lAkrg9iTszR617oYRB/iPY1A56ywoJzVKOJBKaot5RiikCObmur6pogpse3gRcng==",
1263
1266
  "cpu": [
1264
1267
  "arm64"
1265
1268
  ],
1266
1269
  "dev": true,
1270
+ "libc": [
1271
+ "musl"
1272
+ ],
1267
1273
  "license": "MIT",
1268
1274
  "optional": true,
1269
1275
  "os": [
@@ -1274,13 +1280,16 @@
1274
1280
  }
1275
1281
  },
1276
1282
  "node_modules/@rolldown/binding-linux-ppc64-gnu": {
1277
- "version": "1.0.2",
1278
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.2.tgz",
1279
- "integrity": "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==",
1283
+ "version": "1.1.4",
1284
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.4.tgz",
1285
+ "integrity": "sha512-t2DNiLJWNTbnEHyUzTumldML6ET4/g16467LZoDDJ3tSxGvguL5/NyC2lCsNKuyRycg9XeDQF5SSv+TNOhQEXg==",
1280
1286
  "cpu": [
1281
1287
  "ppc64"
1282
1288
  ],
1283
1289
  "dev": true,
1290
+ "libc": [
1291
+ "glibc"
1292
+ ],
1284
1293
  "license": "MIT",
1285
1294
  "optional": true,
1286
1295
  "os": [
@@ -1291,13 +1300,16 @@
1291
1300
  }
1292
1301
  },
1293
1302
  "node_modules/@rolldown/binding-linux-s390x-gnu": {
1294
- "version": "1.0.2",
1295
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.2.tgz",
1296
- "integrity": "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==",
1303
+ "version": "1.1.4",
1304
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.4.tgz",
1305
+ "integrity": "sha512-0WIRnL1Uw4BvTZRLQt+PVgo6ZKTJadlC2btP+/EOXv2f/DWbY0rEgl+y834mIVwP1FkTlWVTrGGJXf12lru7EQ==",
1297
1306
  "cpu": [
1298
1307
  "s390x"
1299
1308
  ],
1300
1309
  "dev": true,
1310
+ "libc": [
1311
+ "glibc"
1312
+ ],
1301
1313
  "license": "MIT",
1302
1314
  "optional": true,
1303
1315
  "os": [
@@ -1308,13 +1320,16 @@
1308
1320
  }
1309
1321
  },
1310
1322
  "node_modules/@rolldown/binding-linux-x64-gnu": {
1311
- "version": "1.0.2",
1312
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.2.tgz",
1313
- "integrity": "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==",
1323
+ "version": "1.1.4",
1324
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.4.tgz",
1325
+ "integrity": "sha512-JWtGshGfX+oENAKonoNkqEJX+7hC8yfhi9GUyPX1VX4mdh1y5r+ZiJLR5XzAB0aoP6s/PcILsGjKq8O0mm24bw==",
1314
1326
  "cpu": [
1315
1327
  "x64"
1316
1328
  ],
1317
1329
  "dev": true,
1330
+ "libc": [
1331
+ "glibc"
1332
+ ],
1318
1333
  "license": "MIT",
1319
1334
  "optional": true,
1320
1335
  "os": [
@@ -1325,13 +1340,16 @@
1325
1340
  }
1326
1341
  },
1327
1342
  "node_modules/@rolldown/binding-linux-x64-musl": {
1328
- "version": "1.0.2",
1329
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.2.tgz",
1330
- "integrity": "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==",
1343
+ "version": "1.1.4",
1344
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.4.tgz",
1345
+ "integrity": "sha512-rT6yQcxUuXs4CnbofqwHRRV0iem349rLMYpTjkgQGLjrY4ado/eDzwPZPTCgTOlF6Nkp8NEv70yLMTn6qkWxsQ==",
1331
1346
  "cpu": [
1332
1347
  "x64"
1333
1348
  ],
1334
1349
  "dev": true,
1350
+ "libc": [
1351
+ "musl"
1352
+ ],
1335
1353
  "license": "MIT",
1336
1354
  "optional": true,
1337
1355
  "os": [
@@ -1342,9 +1360,9 @@
1342
1360
  }
1343
1361
  },
1344
1362
  "node_modules/@rolldown/binding-openharmony-arm64": {
1345
- "version": "1.0.2",
1346
- "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.2.tgz",
1347
- "integrity": "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==",
1363
+ "version": "1.1.4",
1364
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.4.tgz",
1365
+ "integrity": "sha512-KXMGoboq5cyaCQjDA4GLuRiOwBQ0EyFnJoVViLeZ45/3rFItRODEr+NdsBcVpll40hhNArlm/speWGRvj08LzA==",
1348
1366
  "cpu": [
1349
1367
  "arm64"
1350
1368
  ],
@@ -1359,9 +1377,9 @@
1359
1377
  }
1360
1378
  },
1361
1379
  "node_modules/@rolldown/binding-wasm32-wasi": {
1362
- "version": "1.0.2",
1363
- "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.2.tgz",
1364
- "integrity": "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==",
1380
+ "version": "1.1.4",
1381
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.4.tgz",
1382
+ "integrity": "sha512-5K83rb36oJiY7BCyE9zLZtGcPV4g5wvq+xwdO0XPIwDVZI8cyB/AUjkNXGb92/rnmezEkjMOpgY61rtwjQtFwg==",
1365
1383
  "cpu": [
1366
1384
  "wasm32"
1367
1385
  ],
@@ -1369,18 +1387,18 @@
1369
1387
  "license": "MIT",
1370
1388
  "optional": true,
1371
1389
  "dependencies": {
1372
- "@emnapi/core": "1.10.0",
1373
- "@emnapi/runtime": "1.10.0",
1374
- "@napi-rs/wasm-runtime": "^1.1.4"
1390
+ "@emnapi/core": "1.11.1",
1391
+ "@emnapi/runtime": "1.11.1",
1392
+ "@napi-rs/wasm-runtime": "^1.1.6"
1375
1393
  },
1376
1394
  "engines": {
1377
1395
  "node": "^20.19.0 || >=22.12.0"
1378
1396
  }
1379
1397
  },
1380
1398
  "node_modules/@rolldown/binding-win32-arm64-msvc": {
1381
- "version": "1.0.2",
1382
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.2.tgz",
1383
- "integrity": "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==",
1399
+ "version": "1.1.4",
1400
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.4.tgz",
1401
+ "integrity": "sha512-PnWBtw3TV5KOg69HQQDR0mnQuyCmSGR2pAB4DC1rPF808fgKeTUMj2EOEyKATpgiuxuR5APQmiDO7PDgEjTFSA==",
1384
1402
  "cpu": [
1385
1403
  "arm64"
1386
1404
  ],
@@ -1395,9 +1413,9 @@
1395
1413
  }
1396
1414
  },
1397
1415
  "node_modules/@rolldown/binding-win32-x64-msvc": {
1398
- "version": "1.0.2",
1399
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.2.tgz",
1400
- "integrity": "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==",
1416
+ "version": "1.1.4",
1417
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.4.tgz",
1418
+ "integrity": "sha512-M1lpniBePobTfsa7Ks9a199e1akxsXn+GYBUKsEzv3YFzOm1HJAMNwKI3qr0Zq+mxwx9gOZoTdP1yXRYsZUocQ==",
1401
1419
  "cpu": [
1402
1420
  "x64"
1403
1421
  ],
@@ -1436,9 +1454,9 @@
1436
1454
  }
1437
1455
  },
1438
1456
  "node_modules/@tybys/wasm-util": {
1439
- "version": "0.10.2",
1440
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
1441
- "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==",
1457
+ "version": "0.10.3",
1458
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
1459
+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
1442
1460
  "dev": true,
1443
1461
  "license": "MIT",
1444
1462
  "optional": true,
@@ -4172,9 +4190,9 @@
4172
4190
  "optional": true
4173
4191
  },
4174
4192
  "node_modules/nanoid": {
4175
- "version": "3.3.12",
4176
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
4177
- "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
4193
+ "version": "3.3.15",
4194
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
4195
+ "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
4178
4196
  "dev": true,
4179
4197
  "funding": [
4180
4198
  {
@@ -4406,9 +4424,9 @@
4406
4424
  }
4407
4425
  },
4408
4426
  "node_modules/postcss": {
4409
- "version": "8.5.15",
4410
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
4411
- "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
4427
+ "version": "8.5.16",
4428
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz",
4429
+ "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==",
4412
4430
  "dev": true,
4413
4431
  "funding": [
4414
4432
  {
@@ -4716,13 +4734,13 @@
4716
4734
  "license": "MIT"
4717
4735
  },
4718
4736
  "node_modules/rolldown": {
4719
- "version": "1.0.2",
4720
- "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.2.tgz",
4721
- "integrity": "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==",
4737
+ "version": "1.1.4",
4738
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.4.tgz",
4739
+ "integrity": "sha512-IjZYiLxZwpnhwhdBH2ugdTGVSdhCQUmLxLoqyjiL0JxYjyRst+5a0P3xfrTxJ5F638j4Mvvw5FAX5XE6eHpXbA==",
4722
4740
  "dev": true,
4723
4741
  "license": "MIT",
4724
4742
  "dependencies": {
4725
- "@oxc-project/types": "=0.132.0",
4743
+ "@oxc-project/types": "=0.138.0",
4726
4744
  "@rolldown/pluginutils": "^1.0.0"
4727
4745
  },
4728
4746
  "bin": {
@@ -4732,21 +4750,21 @@
4732
4750
  "node": "^20.19.0 || >=22.12.0"
4733
4751
  },
4734
4752
  "optionalDependencies": {
4735
- "@rolldown/binding-android-arm64": "1.0.2",
4736
- "@rolldown/binding-darwin-arm64": "1.0.2",
4737
- "@rolldown/binding-darwin-x64": "1.0.2",
4738
- "@rolldown/binding-freebsd-x64": "1.0.2",
4739
- "@rolldown/binding-linux-arm-gnueabihf": "1.0.2",
4740
- "@rolldown/binding-linux-arm64-gnu": "1.0.2",
4741
- "@rolldown/binding-linux-arm64-musl": "1.0.2",
4742
- "@rolldown/binding-linux-ppc64-gnu": "1.0.2",
4743
- "@rolldown/binding-linux-s390x-gnu": "1.0.2",
4744
- "@rolldown/binding-linux-x64-gnu": "1.0.2",
4745
- "@rolldown/binding-linux-x64-musl": "1.0.2",
4746
- "@rolldown/binding-openharmony-arm64": "1.0.2",
4747
- "@rolldown/binding-wasm32-wasi": "1.0.2",
4748
- "@rolldown/binding-win32-arm64-msvc": "1.0.2",
4749
- "@rolldown/binding-win32-x64-msvc": "1.0.2"
4753
+ "@rolldown/binding-android-arm64": "1.1.4",
4754
+ "@rolldown/binding-darwin-arm64": "1.1.4",
4755
+ "@rolldown/binding-darwin-x64": "1.1.4",
4756
+ "@rolldown/binding-freebsd-x64": "1.1.4",
4757
+ "@rolldown/binding-linux-arm-gnueabihf": "1.1.4",
4758
+ "@rolldown/binding-linux-arm64-gnu": "1.1.4",
4759
+ "@rolldown/binding-linux-arm64-musl": "1.1.4",
4760
+ "@rolldown/binding-linux-ppc64-gnu": "1.1.4",
4761
+ "@rolldown/binding-linux-s390x-gnu": "1.1.4",
4762
+ "@rolldown/binding-linux-x64-gnu": "1.1.4",
4763
+ "@rolldown/binding-linux-x64-musl": "1.1.4",
4764
+ "@rolldown/binding-openharmony-arm64": "1.1.4",
4765
+ "@rolldown/binding-wasm32-wasi": "1.1.4",
4766
+ "@rolldown/binding-win32-arm64-msvc": "1.1.4",
4767
+ "@rolldown/binding-win32-x64-msvc": "1.1.4"
4750
4768
  }
4751
4769
  },
4752
4770
  "node_modules/router": {
@@ -5376,9 +5394,9 @@
5376
5394
  }
5377
5395
  },
5378
5396
  "node_modules/tinyglobby": {
5379
- "version": "0.2.16",
5380
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
5381
- "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
5397
+ "version": "0.2.17",
5398
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
5399
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
5382
5400
  "dev": true,
5383
5401
  "license": "MIT",
5384
5402
  "dependencies": {
@@ -5560,17 +5578,17 @@
5560
5578
  }
5561
5579
  },
5562
5580
  "node_modules/vite": {
5563
- "version": "8.0.14",
5564
- "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.14.tgz",
5565
- "integrity": "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==",
5581
+ "version": "8.1.2",
5582
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.2.tgz",
5583
+ "integrity": "sha512-6YYPbRXTxx6bRXmOn7XdnQAy5DQNHhDgtjhDHI13oe4pY93kkcdGJWxpGwOm++/Wh0QpQhDrpIoVMrmrsI5AGQ==",
5566
5584
  "dev": true,
5567
5585
  "license": "MIT",
5568
5586
  "dependencies": {
5569
5587
  "lightningcss": "^1.32.0",
5570
5588
  "picomatch": "^4.0.4",
5571
- "postcss": "^8.5.15",
5572
- "rolldown": "1.0.2",
5573
- "tinyglobby": "^0.2.16"
5589
+ "postcss": "^8.5.16",
5590
+ "rolldown": "~1.1.3",
5591
+ "tinyglobby": "^0.2.17"
5574
5592
  },
5575
5593
  "bin": {
5576
5594
  "vite": "bin/vite.js"
@@ -5586,7 +5604,7 @@
5586
5604
  },
5587
5605
  "peerDependencies": {
5588
5606
  "@types/node": "^20.19.0 || >=22.12.0",
5589
- "@vitejs/devtools": "^0.1.18",
5607
+ "@vitejs/devtools": "^0.3.0",
5590
5608
  "esbuild": "^0.27.0 || ^0.28.0",
5591
5609
  "jiti": ">=1.21.0",
5592
5610
  "less": "^4.0.0",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "ghcr.io/devcontainers/features/copilot-cli:1.0.0": {},
12
12
  "ghcr.io/anthropics/devcontainer-features/claude-code:1": {
13
- "version": "v2.1.197"
13
+ "version": "v2.1.198"
14
14
  },
15
15
  "ghcr.io/rocker-org/devcontainer-features/apt-packages:1.0.2": {
16
16
  "packages": "yamllint, shellcheck",
package/dist/index.js CHANGED
@@ -2990,7 +2990,7 @@ exports.basename = (path, { windows } = {}) => {
2990
2990
 
2991
2991
 
2992
2992
  },
2993
- 149(__unused_rspack_module, __unused_rspack___webpack_exports__, __webpack_require__) {
2993
+ 889(__unused_rspack_module, __unused_rspack___webpack_exports__, __webpack_require__) {
2994
2994
  // NAMESPACE OBJECT: ../../node_modules/micromark/lib/constructs.js
2995
2995
  var constructs_namespaceObject = {};
2996
2996
  __webpack_require__.r(constructs_namespaceObject);
@@ -11160,7 +11160,7 @@ function handleIntersectionResults(result, left, right) {
11160
11160
  result.value = merged.data;
11161
11161
  return result;
11162
11162
  }
11163
- const $ZodTuple = /*@__PURE__*/ (/* unused pure expression or super */ null && (core.$constructor("$ZodTuple", (inst, def) => {
11163
+ const $ZodTuple = /*@__PURE__*/ $constructor("$ZodTuple", (inst, def) => {
11164
11164
  $ZodType.init(inst, def);
11165
11165
  const items = def.items;
11166
11166
  inst._zod.parse = (payload, ctx) => {
@@ -11236,7 +11236,7 @@ const $ZodTuple = /*@__PURE__*/ (/* unused pure expression or super */ null && (
11236
11236
  }
11237
11237
  return handleTupleResults(itemResults, payload, items, input, optoutStart);
11238
11238
  };
11239
- })));
11239
+ });
11240
11240
  function getTupleOptStart(items, key) {
11241
11241
  for (let i = items.length - 1; i >= 0; i--) {
11242
11242
  if (items[i]._zod[key] !== "optional")
@@ -11246,7 +11246,7 @@ function getTupleOptStart(items, key) {
11246
11246
  }
11247
11247
  function handleTupleResult(result, final, index) {
11248
11248
  if (result.issues.length) {
11249
- final.issues.push(...util.prefixIssues(index, result.issues));
11249
+ final.issues.push(...prefixIssues(index, result.issues));
11250
11250
  }
11251
11251
  final.value[index] = result.value;
11252
11252
  }
@@ -11262,7 +11262,7 @@ function handleTupleResults(itemResults, final, items, input, optoutStart) {
11262
11262
  final.value.length = i;
11263
11263
  break;
11264
11264
  }
11265
- final.issues.push(...util.prefixIssues(i, r.issues));
11265
+ final.issues.push(...prefixIssues(i, r.issues));
11266
11266
  }
11267
11267
  final.value[i] = r.value;
11268
11268
  }
@@ -14046,12 +14046,12 @@ const tupleProcessor = (schema, ctx, _json, params) => {
14046
14046
  json.type = "array";
14047
14047
  const prefixPath = ctx.target === "draft-2020-12" ? "prefixItems" : "items";
14048
14048
  const restPath = ctx.target === "draft-2020-12" ? "items" : ctx.target === "openapi-3.0" ? "items" : "additionalItems";
14049
- const prefixItems = def.items.map((x, i) => process(x, ctx, {
14049
+ const prefixItems = def.items.map((x, i) => to_json_schema_process(x, ctx, {
14050
14050
  ...params,
14051
14051
  path: [...params.path, prefixPath, i],
14052
14052
  }));
14053
14053
  const rest = def.rest
14054
- ? process(def.rest, ctx, {
14054
+ ? to_json_schema_process(def.rest, ctx, {
14055
14055
  ...params,
14056
14056
  path: [...params.path, restPath, ...(ctx.target === "openapi-3.0" ? [def.items.length] : [])],
14057
14057
  })
@@ -15257,24 +15257,24 @@ function intersection(left, right) {
15257
15257
  right: right,
15258
15258
  });
15259
15259
  }
15260
- const ZodTuple = /*@__PURE__*/ (/* unused pure expression or super */ null && (core.$constructor("ZodTuple", (inst, def) => {
15261
- core.$ZodTuple.init(inst, def);
15260
+ const ZodTuple = /*@__PURE__*/ $constructor("ZodTuple", (inst, def) => {
15261
+ $ZodTuple.init(inst, def);
15262
15262
  ZodType.init(inst, def);
15263
- inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);
15263
+ inst._zod.processJSONSchema = (ctx, json, params) => tupleProcessor(inst, ctx, json, params);
15264
15264
  inst.rest = (rest) => inst.clone({
15265
15265
  ...inst._zod.def,
15266
15266
  rest: rest,
15267
15267
  });
15268
- })));
15268
+ });
15269
15269
  function tuple(items, _paramsOrRest, _params) {
15270
- const hasRest = _paramsOrRest instanceof core.$ZodType;
15270
+ const hasRest = _paramsOrRest instanceof $ZodType;
15271
15271
  const params = hasRest ? _params : _paramsOrRest;
15272
15272
  const rest = hasRest ? _paramsOrRest : null;
15273
15273
  return new ZodTuple({
15274
15274
  type: "tuple",
15275
15275
  items: items,
15276
15276
  rest,
15277
- ...util.normalizeParams(params),
15277
+ ...normalizeParams(params),
15278
15278
  });
15279
15279
  }
15280
15280
  const ZodRecord = /*@__PURE__*/ $constructor("ZodRecord", (inst, def) => {
@@ -28402,22 +28402,206 @@ function hasBlockingFindings(findings) {
28402
28402
  return findings.some((f)=>(f.severity === "critical" || f.severity === "high") && f.classification === "defect");
28403
28403
  }
28404
28404
 
28405
+ ;// CONCATENATED MODULE: ../doctor/src/lib/cross-harness-edges.ts
28406
+ function resolveEdgeTargets(edge) {
28407
+ return Array.isArray(edge.direction.to) ? edge.direction.to : [
28408
+ edge.direction.to
28409
+ ];
28410
+ }
28411
+ function buildHarnessByPath(records) {
28412
+ const harnessByPath = new Map();
28413
+ for (const record of records){
28414
+ harnessByPath.set(record.path, record.harness);
28415
+ }
28416
+ return harnessByPath;
28417
+ }
28418
+ function isCrossHarnessTarget(edge, targetPath, sourceHarness, harnessByPath) {
28419
+ if (edge.malformed || edge.type === "glob-binding") return false;
28420
+ const targetHarness = harnessByPath.get(targetPath);
28421
+ return targetHarness !== undefined && targetHarness !== sourceHarness;
28422
+ }
28423
+ function countCrossHarnessEdges(records) {
28424
+ const harnessByPath = buildHarnessByPath(records);
28425
+ let count = 0;
28426
+ for (const record of records){
28427
+ for (const edge of record.edges){
28428
+ for (const target of resolveEdgeTargets(edge)){
28429
+ if (isCrossHarnessTarget(edge, target, record.harness, harnessByPath)) {
28430
+ count++;
28431
+ }
28432
+ }
28433
+ }
28434
+ }
28435
+ return count;
28436
+ }
28437
+
28405
28438
  ;// CONCATENATED MODULE: ../doctor/src/formatters/json-formatter.ts
28406
- function toJson(summary, findings, snapshotRef) {
28407
- return {
28439
+
28440
+
28441
+ const HarnessNameSchema = schemas_enum([
28442
+ "claude",
28443
+ "copilot",
28444
+ "codex",
28445
+ "antigravity",
28446
+ "hermes",
28447
+ "crush",
28448
+ "pi",
28449
+ "shared"
28450
+ ]);
28451
+ const ConstructTypeSchema = schemas_enum([
28452
+ "instruction",
28453
+ "skill",
28454
+ "agent",
28455
+ "subagent",
28456
+ "mcp-server",
28457
+ "plugin",
28458
+ "hook"
28459
+ ]);
28460
+ const EdgeTypeSchema = schemas_enum([
28461
+ "hard-import",
28462
+ "soft-reference",
28463
+ "glob-binding"
28464
+ ]);
28465
+ const ArchetypeSchema = schemas_enum([
28466
+ "pure",
28467
+ "intentional-hybrid",
28468
+ "canonical-contract",
28469
+ "accidental-sprawl",
28470
+ "none",
28471
+ "ambiguous"
28472
+ ]);
28473
+ const CitationHandleSchema = schemas_object({
28474
+ nodeId: schemas_string(),
28475
+ sourceFile: schemas_string(),
28476
+ lineRange: tuple([
28477
+ schemas_number(),
28478
+ schemas_number()
28479
+ ]).optional(),
28480
+ snapshotRef: schemas_string().optional()
28481
+ });
28482
+ const FindingSchema = schemas_object({
28483
+ id: schemas_string(),
28484
+ criterionId: schemas_string(),
28485
+ targetId: schemas_string(),
28486
+ severity: schemas_enum([
28487
+ "critical",
28488
+ "high",
28489
+ "medium",
28490
+ "low",
28491
+ "info"
28492
+ ]),
28493
+ category: schemas_enum([
28494
+ "missing-required",
28495
+ "malformed-reference",
28496
+ "wrong-direction",
28497
+ "drift",
28498
+ "governance",
28499
+ "composition-style"
28500
+ ]),
28501
+ classification: schemas_enum([
28502
+ "defect",
28503
+ "advisory",
28504
+ "info"
28505
+ ]),
28506
+ intentGated: schemas_boolean(),
28507
+ assumedIntent: schemas_boolean(),
28508
+ description: schemas_string(),
28509
+ evidenceCitation: CitationHandleSchema.optional(),
28510
+ snapshotRef: schemas_string().optional()
28511
+ });
28512
+ const ReportInventoryItemSchema = schemas_object({
28513
+ id: schemas_string(),
28514
+ path: schemas_string(),
28515
+ harness: HarnessNameSchema,
28516
+ constructType: ConstructTypeSchema,
28517
+ loadMechanism: schemas_enum([
28518
+ "referenced",
28519
+ "convention-loaded"
28520
+ ]),
28521
+ serverName: schemas_string().optional(),
28522
+ transport: schemas_string().optional()
28523
+ });
28524
+ const ReportEdgeSchema = schemas_object({
28525
+ from: schemas_string(),
28526
+ to: schemas_string(),
28527
+ type: EdgeTypeSchema,
28528
+ malformed: schemas_boolean(),
28529
+ reason: schemas_enum([
28530
+ "missing-target",
28531
+ "path-traversal"
28532
+ ]).optional(),
28533
+ crossHarness: schemas_boolean()
28534
+ });
28535
+ const ReportJsonSchema = schemas_object({
28536
+ archetype: ArchetypeSchema,
28537
+ dominanceScore: schemas_number(),
28538
+ totalRecords: schemas_number(),
28539
+ harnessBreakdown: schemas_array(schemas_object({
28540
+ harness: schemas_string(),
28541
+ count: schemas_number()
28542
+ })),
28543
+ crossHarnessEdges: schemas_number(),
28544
+ inventory: schemas_array(ReportInventoryItemSchema),
28545
+ edges: schemas_array(ReportEdgeSchema),
28546
+ findings: schemas_array(FindingSchema),
28547
+ snapshotRef: schemas_string().optional()
28548
+ });
28549
+ function toInventoryItems(records) {
28550
+ return records.map((record)=>({
28551
+ id: record.id,
28552
+ path: record.path,
28553
+ harness: record.harness,
28554
+ constructType: record.constructType,
28555
+ loadMechanism: record.loadMechanism,
28556
+ ...record.serverName !== undefined ? {
28557
+ serverName: record.serverName
28558
+ } : {},
28559
+ ...record.transport !== undefined ? {
28560
+ transport: record.transport
28561
+ } : {}
28562
+ })).sort((a, b)=>a.path.localeCompare(b.path) || a.id.localeCompare(b.id));
28563
+ }
28564
+ function toReportEdges(records) {
28565
+ const harnessByPath = buildHarnessByPath(records);
28566
+ const result = [];
28567
+ for (const record of records){
28568
+ for (const edge of record.edges){
28569
+ for (const target of resolveEdgeTargets(edge)){
28570
+ result.push({
28571
+ from: edge.direction.from,
28572
+ to: target,
28573
+ type: edge.type,
28574
+ malformed: edge.malformed,
28575
+ ...edge.reason !== undefined ? {
28576
+ reason: edge.reason
28577
+ } : {},
28578
+ crossHarness: isCrossHarnessTarget(edge, target, record.harness, harnessByPath)
28579
+ });
28580
+ }
28581
+ }
28582
+ }
28583
+ return result;
28584
+ }
28585
+ function toJson(summary, findings, records, snapshotRef) {
28586
+ const edges = toReportEdges(records);
28587
+ const report = {
28408
28588
  archetype: summary.archetype,
28409
28589
  dominanceScore: summary.dominanceScore,
28410
28590
  totalRecords: summary.totalRecords,
28411
28591
  harnessBreakdown: summary.harnessBreakdown,
28412
- crossHarnessEdges: summary.crossHarnessEdges,
28592
+ crossHarnessEdges: edges.filter((edge)=>edge.crossHarness).length,
28593
+ inventory: toInventoryItems(records),
28594
+ edges,
28413
28595
  findings,
28414
28596
  ...snapshotRef !== undefined ? {
28415
28597
  snapshotRef
28416
28598
  } : {}
28417
28599
  };
28600
+ return ReportJsonSchema.parse(report);
28418
28601
  }
28419
28602
 
28420
28603
  ;// CONCATENATED MODULE: ../doctor/src/formatters/summary-formatter.ts
28604
+
28421
28605
  const ARCHETYPE_DESCRIPTIONS = {
28422
28606
  pure: "Single-harness configuration. One AI coding assistant dominates the repository.",
28423
28607
  "intentional-hybrid": "Multi-harness configuration with cross-harness references. Harnesses deliberately share context.",
@@ -28435,21 +28619,7 @@ function formatSummary(records, classification) {
28435
28619
  harness,
28436
28620
  count
28437
28621
  })).sort((a, b)=>a.harness.localeCompare(b.harness));
28438
- let crossHarnessEdges = 0;
28439
- const harnessByPath = new Map();
28440
- for (const r of records){
28441
- harnessByPath.set(r.path, r.harness);
28442
- }
28443
- for (const r of records){
28444
- for (const edge of r.edges){
28445
- if (!edge.malformed && edge.type !== "glob-binding" && typeof edge.direction.to === "string") {
28446
- const targetHarness = harnessByPath.get(edge.direction.to);
28447
- if (targetHarness && targetHarness !== r.harness) {
28448
- crossHarnessEdges++;
28449
- }
28450
- }
28451
- }
28452
- }
28622
+ const crossHarnessEdges = countCrossHarnessEdges(records);
28453
28623
  return {
28454
28624
  archetype: classification.archetype,
28455
28625
  archetypeDescription: ARCHETYPE_DESCRIPTIONS[classification.archetype],
@@ -28584,6 +28754,10 @@ const HARNESS_FOOTPRINTS = {
28584
28754
  conventionDirs: [
28585
28755
  ".github/instructions/"
28586
28756
  ],
28757
+ rootOnlyConventionFiles: [
28758
+ "CLAUDE.md",
28759
+ "GEMINI.md"
28760
+ ],
28587
28761
  primaryIndicators: [
28588
28762
  ".github/copilot-instructions.md",
28589
28763
  ".github/instructions/"
@@ -28841,11 +29015,69 @@ function parseRawEdges(content) {
28841
29015
  return edges;
28842
29016
  }
28843
29017
 
29018
+ ;// CONCATENATED MODULE: ../doctor/src/gateways/mcp-config.ts
29019
+
29020
+
29021
+ const MAX_MCP_CONFIG_BYTES = 1_048_576;
29022
+ const MCP_CONFIG_SOURCES = [
29023
+ {
29024
+ relPath: ".mcp.json",
29025
+ harness: "shared"
29026
+ },
29027
+ {
29028
+ relPath: ".vscode/mcp.json",
29029
+ harness: "copilot"
29030
+ }
29031
+ ];
29032
+ const McpServerEntrySchema = schemas_object({
29033
+ type: schemas_string().optional(),
29034
+ transport: schemas_string().optional()
29035
+ }).passthrough();
29036
+ const McpConfigSchema = schemas_object({
29037
+ mcpServers: schemas_record(schemas_string(), McpServerEntrySchema).optional()
29038
+ }).passthrough();
29039
+ async function readMcpServersFromSource(repoRoot, source) {
29040
+ let content;
29041
+ try {
29042
+ content = await file_system_utils_readTextWithinRoot(repoRoot, source.relPath, MAX_MCP_CONFIG_BYTES);
29043
+ } catch {
29044
+ return [];
29045
+ }
29046
+ let raw;
29047
+ try {
29048
+ raw = JSON.parse(content);
29049
+ } catch {
29050
+ return [];
29051
+ }
29052
+ const result = McpConfigSchema.safeParse(raw);
29053
+ if (!result.success || result.data.mcpServers === undefined) {
29054
+ return [];
29055
+ }
29056
+ return Object.entries(result.data.mcpServers).map(([serverName, entry])=>({
29057
+ serverName,
29058
+ harness: source.harness,
29059
+ path: source.relPath,
29060
+ ...entry.transport !== undefined ? {
29061
+ transport: entry.transport
29062
+ } : entry.type !== undefined ? {
29063
+ transport: entry.type
29064
+ } : {}
29065
+ }));
29066
+ }
29067
+ async function enumerateMcpServers(repoRoot) {
29068
+ const records = [];
29069
+ for (const source of MCP_CONFIG_SOURCES){
29070
+ records.push(...await readMcpServersFromSource(repoRoot, source));
29071
+ }
29072
+ return records;
29073
+ }
29074
+
28844
29075
  ;// CONCATENATED MODULE: ../doctor/src/gateways/scanner.ts
28845
29076
 
28846
29077
 
28847
29078
 
28848
29079
 
29080
+
28849
29081
  const MAX_FILE_BYTES = 1_048_576;
28850
29082
  const SCANNABLE_EXTENSIONS = new Set([
28851
29083
  ".md",
@@ -28882,6 +29114,9 @@ function determineConstructType(relPath) {
28882
29114
  if (relPath.startsWith(".claude/hooks/")) {
28883
29115
  return "hook";
28884
29116
  }
29117
+ if (relPath.startsWith(".claude/agents/")) {
29118
+ return "subagent";
29119
+ }
28885
29120
  if (relPath.startsWith(".claude/commands/")) {
28886
29121
  return "agent";
28887
29122
  }
@@ -29025,6 +29260,21 @@ async function scanRepository(repoRoot) {
29025
29260
  record.loadMechanism = "referenced";
29026
29261
  }
29027
29262
  }
29263
+ const mcpServers = await enumerateMcpServers(absRoot);
29264
+ for (const server of mcpServers){
29265
+ records.push({
29266
+ id: `mcp-server:${server.path}#${server.serverName}`,
29267
+ path: server.path,
29268
+ harness: server.harness,
29269
+ constructType: "mcp-server",
29270
+ loadMechanism: "convention-loaded",
29271
+ edges: [],
29272
+ serverName: server.serverName,
29273
+ ...server.transport !== undefined ? {
29274
+ transport: server.transport
29275
+ } : {}
29276
+ });
29277
+ }
29028
29278
  return records;
29029
29279
  }
29030
29280
 
@@ -29255,11 +29505,26 @@ const CRITERIA = [
29255
29505
  severity: "medium",
29256
29506
  classification: "advisory",
29257
29507
  category: "wrong-direction",
29258
- description: "A Copilot instruction file references a Claude instruction file. Copilot does not process @import directives, so this reference has no effect and may indicate copy-paste drift.",
29508
+ description: "A Copilot instruction file uses Claude's @path hard-import syntax to reference a Claude instruction file. Copilot does not process @path hard-imports, so this reference has no effect and may indicate copy-paste drift.",
29259
29509
  checkMethod: "inventory.edgeDirectionExists",
29260
29510
  checkArgs: {
29261
29511
  fromHarness: "copilot",
29262
- toHarness: "claude"
29512
+ toHarness: "claude",
29513
+ edgeType: "hard-import"
29514
+ }
29515
+ },
29516
+ {
29517
+ id: "wrong-direction-copilot-links-claude",
29518
+ appliesToHarness: "copilot",
29519
+ severity: "medium",
29520
+ classification: "advisory",
29521
+ category: "wrong-direction",
29522
+ description: "A Copilot instruction file contains a markdown hyperlink (or frontmatter see:/references:/requires: entry) pointing to a Claude instruction file. The Copilot CLI does not follow markdown hyperlinks or soft references in instructions, so this reference has no effect and may indicate copy-paste drift.",
29523
+ checkMethod: "inventory.edgeDirectionExists",
29524
+ checkArgs: {
29525
+ fromHarness: "copilot",
29526
+ toHarness: "claude",
29527
+ edgeType: "soft-reference"
29263
29528
  }
29264
29529
  },
29265
29530
  {
@@ -29619,7 +29884,8 @@ const doctorCommand = defineCommand({
29619
29884
  dominanceScore: summary.dominanceScore,
29620
29885
  totalRecords: summary.totalRecords,
29621
29886
  harnessBreakdown: summary.harnessBreakdown,
29622
- crossHarnessEdges: summary.crossHarnessEdges
29887
+ crossHarnessEdges: summary.crossHarnessEdges,
29888
+ inventory: toInventoryItems(records)
29623
29889
  }, null, 2)}\n`);
29624
29890
  } else {
29625
29891
  renderHuman(summary, [], logger, snapshotRef);
@@ -29628,7 +29894,7 @@ const doctorCommand = defineCommand({
29628
29894
  }
29629
29895
  if (classification.archetype === "none") {
29630
29896
  if (format === "json") {
29631
- process.stdout.write(`${JSON.stringify(toJson(summary, [], snapshotRef), null, 2)}\n`);
29897
+ process.stdout.write(`${JSON.stringify(toJson(summary, [], records, snapshotRef), null, 2)}\n`);
29632
29898
  } else {
29633
29899
  logger.info("No agentic constructs found in the repository.");
29634
29900
  }
@@ -29660,7 +29926,7 @@ const doctorCommand = defineCommand({
29660
29926
  intent
29661
29927
  });
29662
29928
  if (format === "json") {
29663
- const report = toJson(summary, findings, snapshotRef);
29929
+ const report = toJson(summary, findings, records, snapshotRef);
29664
29930
  process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
29665
29931
  } else {
29666
29932
  renderHuman(summary, findings, logger, snapshotRef);
@@ -61374,4 +61640,4 @@ if (installedChunkData !== 0) { // 0 means "already installed".'
61374
61640
  // module factories are used so entry inlining is disabled
61375
61641
  // startup
61376
61642
  // Load entry module and return exports
61377
- var __webpack_exports__ = __webpack_require__(149);
61643
+ var __webpack_exports__ = __webpack_require__(889);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lousy-agents/cli",
3
- "version": "5.16.0",
3
+ "version": "5.17.1",
4
4
  "description": "CLI scaffolding tool that sets up projects with structure, instructions, and feedback loops for AI coding assistants",
5
5
  "type": "module",
6
6
  "repository": {
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "ghcr.io/devcontainers/features/copilot-cli:1.0.0": {},
12
12
  "ghcr.io/anthropics/devcontainer-features/claude-code:1": {
13
- "version": "v2.1.197"
13
+ "version": "v2.1.198"
14
14
  },
15
15
  "ghcr.io/rocker-org/devcontainer-features/apt-packages:1.0.2": {
16
16
  "packages": "libnss3, libnspr4, libatk1.0-0t64, libatk-bridge2.0-0t64, libcups2t64, libdrm2, libdbus-1-3, libatspi2.0-0t64, libxcomposite1, libxdamage1, libxfixes3, libxrandr2, libgbm1, libxkbcommon0, libasound2t64, yamllint, shellcheck",