@hasna/switcher 0.1.0 → 0.1.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.
- package/README.md +73 -12
- package/dist/catalog.d.ts +3 -2
- package/dist/cli/index.js +5448 -198
- package/dist/credentials.d.ts +178 -0
- package/dist/direct-launch.d.ts +6 -0
- package/dist/domain.d.ts +118 -8
- package/dist/generated/api.d.ts +150 -5
- package/dist/grok-args.d.ts +1 -0
- package/dist/harness-arguments.d.ts +5 -0
- package/dist/harness-environment.d.ts +1 -0
- package/dist/harness-process.d.ts +11 -0
- package/dist/harness-types.d.ts +1 -0
- package/dist/harnesses.d.ts +33 -2
- package/dist/index.js +163 -2
- package/dist/launcher.d.ts +38 -3
- package/dist/mcp/index.js +123 -3
- package/dist/opencode2-config.d.ts +60 -0
- package/dist/ori-backend.d.ts +89 -0
- package/dist/presets.d.ts +63 -0
- package/dist/runtime.d.ts +20 -0
- package/dist/sdk.d.ts +77 -9
- package/dist/sdk.js +163 -2
- package/dist/serve/index.js +656 -70
- package/dist/server.d.ts +16 -0
- package/dist/service.d.ts +2 -1
- package/dist/terminal-descriptors.d.ts +5 -0
- package/hasna.contract.json +1 -1
- package/openapi.json +320 -6
- package/package.json +9 -4
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CatalogCredentialResolver } from "./catalog";
|
|
2
|
+
export type ServerOptions = {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
databaseUrl?: string;
|
|
5
|
+
sqlitePath?: string;
|
|
6
|
+
hostname?: string;
|
|
7
|
+
port?: number;
|
|
8
|
+
providerEnv?: Record<string, string | undefined>;
|
|
9
|
+
resolveCredential?: CatalogCredentialResolver;
|
|
10
|
+
};
|
|
11
|
+
/** Owns only this listener and database connection; no global signal handlers. */
|
|
12
|
+
export declare function startServer(options: ServerOptions): Promise<{
|
|
13
|
+
url: string;
|
|
14
|
+
storage: "sqlite" | "postgresql";
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
}>;
|
package/dist/service.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { Store } from "./store";
|
|
2
|
-
|
|
2
|
+
import { type CatalogCredentialResolver } from "./catalog";
|
|
3
|
+
export declare function createHandler(store: Store, apiKey: string, providerEnv?: Record<string, string | undefined>, resolveCredential?: CatalogCredentialResolver): (request: Request) => Promise<Response>;
|
package/hasna.contract.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"name": "switcher",
|
|
5
5
|
"class": "cli-with-store",
|
|
6
6
|
"contractVersion": "v1",
|
|
7
|
-
"kitVersion": "1.0.
|
|
7
|
+
"kitVersion": "1.0.2",
|
|
8
8
|
"description": "Universal provider and model switcher for coding harnesses with an API, SDK and self-hosted storage",
|
|
9
9
|
"bins": [
|
|
10
10
|
"switcher",
|
package/openapi.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.0.3",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "Switcher API",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.1",
|
|
6
6
|
"description": "Authenticated provider/profile/catalog control plane. Launches run locally; the API never returns provider credentials."
|
|
7
7
|
},
|
|
8
8
|
"security": [
|
|
@@ -587,6 +587,82 @@
|
|
|
587
587
|
}
|
|
588
588
|
}
|
|
589
589
|
},
|
|
590
|
+
"/v1/provider-presets": {
|
|
591
|
+
"get": {
|
|
592
|
+
"operationId": "listProviderPresets",
|
|
593
|
+
"parameters": [],
|
|
594
|
+
"responses": {
|
|
595
|
+
"200": {
|
|
596
|
+
"description": "Success",
|
|
597
|
+
"content": {
|
|
598
|
+
"application/json": {
|
|
599
|
+
"schema": {
|
|
600
|
+
"type": "object",
|
|
601
|
+
"required": [
|
|
602
|
+
"data"
|
|
603
|
+
],
|
|
604
|
+
"properties": {
|
|
605
|
+
"data": {
|
|
606
|
+
"type": "array",
|
|
607
|
+
"items": {
|
|
608
|
+
"$ref": "#/components/schemas/ProviderPreset"
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
},
|
|
616
|
+
"default": {
|
|
617
|
+
"description": "Structured error",
|
|
618
|
+
"content": {
|
|
619
|
+
"application/json": {
|
|
620
|
+
"schema": {
|
|
621
|
+
"$ref": "#/components/schemas/Error"
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
},
|
|
629
|
+
"/v1/provider-presets/{id}": {
|
|
630
|
+
"get": {
|
|
631
|
+
"operationId": "getProviderPreset",
|
|
632
|
+
"parameters": [
|
|
633
|
+
{
|
|
634
|
+
"name": "id",
|
|
635
|
+
"in": "path",
|
|
636
|
+
"required": true,
|
|
637
|
+
"schema": {
|
|
638
|
+
"type": "string"
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
],
|
|
642
|
+
"responses": {
|
|
643
|
+
"200": {
|
|
644
|
+
"description": "Success",
|
|
645
|
+
"content": {
|
|
646
|
+
"application/json": {
|
|
647
|
+
"schema": {
|
|
648
|
+
"$ref": "#/components/schemas/ProviderPreset"
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
},
|
|
653
|
+
"default": {
|
|
654
|
+
"description": "Structured error",
|
|
655
|
+
"content": {
|
|
656
|
+
"application/json": {
|
|
657
|
+
"schema": {
|
|
658
|
+
"$ref": "#/components/schemas/Error"
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
},
|
|
590
666
|
"/v1/providers/{id}/models": {
|
|
591
667
|
"get": {
|
|
592
668
|
"operationId": "listModels",
|
|
@@ -1107,6 +1183,122 @@
|
|
|
1107
1183
|
}
|
|
1108
1184
|
},
|
|
1109
1185
|
"schemas": {
|
|
1186
|
+
"ProviderPreset": {
|
|
1187
|
+
"type": "object",
|
|
1188
|
+
"properties": {
|
|
1189
|
+
"id": {
|
|
1190
|
+
"type": "string",
|
|
1191
|
+
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,79}$"
|
|
1192
|
+
},
|
|
1193
|
+
"name": {
|
|
1194
|
+
"type": "string",
|
|
1195
|
+
"minLength": 1,
|
|
1196
|
+
"maxLength": 200
|
|
1197
|
+
},
|
|
1198
|
+
"credentialEnv": {
|
|
1199
|
+
"type": "string",
|
|
1200
|
+
"pattern": "^SWITCHER_PROVIDER_[A-Z0-9_]+$"
|
|
1201
|
+
},
|
|
1202
|
+
"credentialAliases": {
|
|
1203
|
+
"type": "array",
|
|
1204
|
+
"items": {
|
|
1205
|
+
"type": "string",
|
|
1206
|
+
"pattern": "^[A-Z][A-Z0-9_]+$"
|
|
1207
|
+
}
|
|
1208
|
+
},
|
|
1209
|
+
"protocols": {
|
|
1210
|
+
"type": "array",
|
|
1211
|
+
"items": {
|
|
1212
|
+
"type": "object",
|
|
1213
|
+
"properties": {
|
|
1214
|
+
"protocol": {
|
|
1215
|
+
"type": "string",
|
|
1216
|
+
"enum": [
|
|
1217
|
+
"anthropic-messages",
|
|
1218
|
+
"openai-responses",
|
|
1219
|
+
"openai-chat"
|
|
1220
|
+
]
|
|
1221
|
+
},
|
|
1222
|
+
"baseUrl": {
|
|
1223
|
+
"type": "string",
|
|
1224
|
+
"maxLength": 2000
|
|
1225
|
+
},
|
|
1226
|
+
"authStyle": {
|
|
1227
|
+
"type": "string",
|
|
1228
|
+
"enum": [
|
|
1229
|
+
"bearer",
|
|
1230
|
+
"x-api-key"
|
|
1231
|
+
]
|
|
1232
|
+
},
|
|
1233
|
+
"catalogBaseUrl": {
|
|
1234
|
+
"type": "string",
|
|
1235
|
+
"maxLength": 2000
|
|
1236
|
+
},
|
|
1237
|
+
"catalogFormat": {
|
|
1238
|
+
"type": "string",
|
|
1239
|
+
"enum": [
|
|
1240
|
+
"openai",
|
|
1241
|
+
"ollama",
|
|
1242
|
+
"mistral",
|
|
1243
|
+
"together",
|
|
1244
|
+
"fireworks",
|
|
1245
|
+
"dashscope",
|
|
1246
|
+
"none"
|
|
1247
|
+
]
|
|
1248
|
+
},
|
|
1249
|
+
"catalogAuthStyle": {
|
|
1250
|
+
"type": "string",
|
|
1251
|
+
"enum": [
|
|
1252
|
+
"bearer",
|
|
1253
|
+
"x-api-key",
|
|
1254
|
+
"none"
|
|
1255
|
+
]
|
|
1256
|
+
},
|
|
1257
|
+
"modelsPath": {
|
|
1258
|
+
"type": "string"
|
|
1259
|
+
},
|
|
1260
|
+
"notes": {
|
|
1261
|
+
"type": "array",
|
|
1262
|
+
"items": {
|
|
1263
|
+
"type": "string"
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
},
|
|
1267
|
+
"required": [
|
|
1268
|
+
"protocol",
|
|
1269
|
+
"authStyle",
|
|
1270
|
+
"catalogFormat",
|
|
1271
|
+
"modelsPath",
|
|
1272
|
+
"notes"
|
|
1273
|
+
],
|
|
1274
|
+
"additionalProperties": false
|
|
1275
|
+
},
|
|
1276
|
+
"minItems": 1
|
|
1277
|
+
},
|
|
1278
|
+
"sources": {
|
|
1279
|
+
"type": "array",
|
|
1280
|
+
"items": {
|
|
1281
|
+
"type": "string",
|
|
1282
|
+
"format": "uri"
|
|
1283
|
+
}
|
|
1284
|
+
},
|
|
1285
|
+
"verification": {
|
|
1286
|
+
"type": "string",
|
|
1287
|
+
"enum": [
|
|
1288
|
+
"documented"
|
|
1289
|
+
]
|
|
1290
|
+
}
|
|
1291
|
+
},
|
|
1292
|
+
"required": [
|
|
1293
|
+
"id",
|
|
1294
|
+
"name",
|
|
1295
|
+
"credentialAliases",
|
|
1296
|
+
"protocols",
|
|
1297
|
+
"sources",
|
|
1298
|
+
"verification"
|
|
1299
|
+
],
|
|
1300
|
+
"additionalProperties": false
|
|
1301
|
+
},
|
|
1110
1302
|
"ProviderInput": {
|
|
1111
1303
|
"type": "object",
|
|
1112
1304
|
"properties": {
|
|
@@ -1143,6 +1335,38 @@
|
|
|
1143
1335
|
],
|
|
1144
1336
|
"default": "bearer"
|
|
1145
1337
|
},
|
|
1338
|
+
"catalogBaseUrl": {
|
|
1339
|
+
"type": "string",
|
|
1340
|
+
"maxLength": 2000
|
|
1341
|
+
},
|
|
1342
|
+
"catalogFormat": {
|
|
1343
|
+
"type": "string",
|
|
1344
|
+
"enum": [
|
|
1345
|
+
"openai",
|
|
1346
|
+
"ollama",
|
|
1347
|
+
"mistral",
|
|
1348
|
+
"together",
|
|
1349
|
+
"fireworks",
|
|
1350
|
+
"dashscope",
|
|
1351
|
+
"none"
|
|
1352
|
+
]
|
|
1353
|
+
},
|
|
1354
|
+
"catalogAuthStyle": {
|
|
1355
|
+
"type": "string",
|
|
1356
|
+
"enum": [
|
|
1357
|
+
"bearer",
|
|
1358
|
+
"x-api-key",
|
|
1359
|
+
"none"
|
|
1360
|
+
]
|
|
1361
|
+
},
|
|
1362
|
+
"catalogCredentialEnv": {
|
|
1363
|
+
"type": "string",
|
|
1364
|
+
"pattern": "^SWITCHER_PROVIDER_[A-Z0-9_]+$"
|
|
1365
|
+
},
|
|
1366
|
+
"catalogAccountId": {
|
|
1367
|
+
"type": "string",
|
|
1368
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
|
|
1369
|
+
},
|
|
1146
1370
|
"modelsPath": {
|
|
1147
1371
|
"type": "string",
|
|
1148
1372
|
"pattern": "^[a-zA-Z0-9_/-]+$",
|
|
@@ -1168,6 +1392,9 @@
|
|
|
1168
1392
|
"type": "string",
|
|
1169
1393
|
"maxLength": 8000
|
|
1170
1394
|
},
|
|
1395
|
+
"available": {
|
|
1396
|
+
"type": "boolean"
|
|
1397
|
+
},
|
|
1171
1398
|
"contextWindow": {
|
|
1172
1399
|
"type": "integer",
|
|
1173
1400
|
"exclusiveMinimum": true,
|
|
@@ -1257,6 +1484,38 @@
|
|
|
1257
1484
|
],
|
|
1258
1485
|
"default": "bearer"
|
|
1259
1486
|
},
|
|
1487
|
+
"catalogBaseUrl": {
|
|
1488
|
+
"type": "string",
|
|
1489
|
+
"maxLength": 2000
|
|
1490
|
+
},
|
|
1491
|
+
"catalogFormat": {
|
|
1492
|
+
"type": "string",
|
|
1493
|
+
"enum": [
|
|
1494
|
+
"openai",
|
|
1495
|
+
"ollama",
|
|
1496
|
+
"mistral",
|
|
1497
|
+
"together",
|
|
1498
|
+
"fireworks",
|
|
1499
|
+
"dashscope",
|
|
1500
|
+
"none"
|
|
1501
|
+
]
|
|
1502
|
+
},
|
|
1503
|
+
"catalogAuthStyle": {
|
|
1504
|
+
"type": "string",
|
|
1505
|
+
"enum": [
|
|
1506
|
+
"bearer",
|
|
1507
|
+
"x-api-key",
|
|
1508
|
+
"none"
|
|
1509
|
+
]
|
|
1510
|
+
},
|
|
1511
|
+
"catalogCredentialEnv": {
|
|
1512
|
+
"type": "string",
|
|
1513
|
+
"pattern": "^SWITCHER_PROVIDER_[A-Z0-9_]+$"
|
|
1514
|
+
},
|
|
1515
|
+
"catalogAccountId": {
|
|
1516
|
+
"type": "string",
|
|
1517
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
|
|
1518
|
+
},
|
|
1260
1519
|
"modelsPath": {
|
|
1261
1520
|
"type": "string",
|
|
1262
1521
|
"pattern": "^[a-zA-Z0-9_/-]+$",
|
|
@@ -1282,6 +1541,9 @@
|
|
|
1282
1541
|
"type": "string",
|
|
1283
1542
|
"maxLength": 8000
|
|
1284
1543
|
},
|
|
1544
|
+
"available": {
|
|
1545
|
+
"type": "boolean"
|
|
1546
|
+
},
|
|
1285
1547
|
"contextWindow": {
|
|
1286
1548
|
"type": "integer",
|
|
1287
1549
|
"exclusiveMinimum": true,
|
|
@@ -1367,7 +1629,8 @@
|
|
|
1367
1629
|
"claude",
|
|
1368
1630
|
"codex",
|
|
1369
1631
|
"grok",
|
|
1370
|
-
"opencode2"
|
|
1632
|
+
"opencode2",
|
|
1633
|
+
"pi"
|
|
1371
1634
|
]
|
|
1372
1635
|
},
|
|
1373
1636
|
"model": {
|
|
@@ -1407,7 +1670,8 @@
|
|
|
1407
1670
|
"claude",
|
|
1408
1671
|
"codex",
|
|
1409
1672
|
"grok",
|
|
1410
|
-
"opencode2"
|
|
1673
|
+
"opencode2",
|
|
1674
|
+
"pi"
|
|
1411
1675
|
]
|
|
1412
1676
|
},
|
|
1413
1677
|
"model": {
|
|
@@ -1452,6 +1716,9 @@
|
|
|
1452
1716
|
"type": "string",
|
|
1453
1717
|
"maxLength": 8000
|
|
1454
1718
|
},
|
|
1719
|
+
"available": {
|
|
1720
|
+
"type": "boolean"
|
|
1721
|
+
},
|
|
1455
1722
|
"contextWindow": {
|
|
1456
1723
|
"type": "integer",
|
|
1457
1724
|
"exclusiveMinimum": true,
|
|
@@ -1515,6 +1782,9 @@
|
|
|
1515
1782
|
"type": "string",
|
|
1516
1783
|
"maxLength": 8000
|
|
1517
1784
|
},
|
|
1785
|
+
"available": {
|
|
1786
|
+
"type": "boolean"
|
|
1787
|
+
},
|
|
1518
1788
|
"contextWindow": {
|
|
1519
1789
|
"type": "integer",
|
|
1520
1790
|
"exclusiveMinimum": true,
|
|
@@ -1613,6 +1883,9 @@
|
|
|
1613
1883
|
"type": "string",
|
|
1614
1884
|
"maxLength": 8000
|
|
1615
1885
|
},
|
|
1886
|
+
"available": {
|
|
1887
|
+
"type": "boolean"
|
|
1888
|
+
},
|
|
1616
1889
|
"contextWindow": {
|
|
1617
1890
|
"type": "integer",
|
|
1618
1891
|
"exclusiveMinimum": true,
|
|
@@ -1712,6 +1985,38 @@
|
|
|
1712
1985
|
],
|
|
1713
1986
|
"default": "bearer"
|
|
1714
1987
|
},
|
|
1988
|
+
"catalogBaseUrl": {
|
|
1989
|
+
"type": "string",
|
|
1990
|
+
"maxLength": 2000
|
|
1991
|
+
},
|
|
1992
|
+
"catalogFormat": {
|
|
1993
|
+
"type": "string",
|
|
1994
|
+
"enum": [
|
|
1995
|
+
"openai",
|
|
1996
|
+
"ollama",
|
|
1997
|
+
"mistral",
|
|
1998
|
+
"together",
|
|
1999
|
+
"fireworks",
|
|
2000
|
+
"dashscope",
|
|
2001
|
+
"none"
|
|
2002
|
+
]
|
|
2003
|
+
},
|
|
2004
|
+
"catalogAuthStyle": {
|
|
2005
|
+
"type": "string",
|
|
2006
|
+
"enum": [
|
|
2007
|
+
"bearer",
|
|
2008
|
+
"x-api-key",
|
|
2009
|
+
"none"
|
|
2010
|
+
]
|
|
2011
|
+
},
|
|
2012
|
+
"catalogCredentialEnv": {
|
|
2013
|
+
"type": "string",
|
|
2014
|
+
"pattern": "^SWITCHER_PROVIDER_[A-Z0-9_]+$"
|
|
2015
|
+
},
|
|
2016
|
+
"catalogAccountId": {
|
|
2017
|
+
"type": "string",
|
|
2018
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
|
|
2019
|
+
},
|
|
1715
2020
|
"modelsPath": {
|
|
1716
2021
|
"type": "string",
|
|
1717
2022
|
"pattern": "^[a-zA-Z0-9_/-]+$",
|
|
@@ -1737,6 +2042,9 @@
|
|
|
1737
2042
|
"type": "string",
|
|
1738
2043
|
"maxLength": 8000
|
|
1739
2044
|
},
|
|
2045
|
+
"available": {
|
|
2046
|
+
"type": "boolean"
|
|
2047
|
+
},
|
|
1740
2048
|
"contextWindow": {
|
|
1741
2049
|
"type": "integer",
|
|
1742
2050
|
"exclusiveMinimum": true,
|
|
@@ -1822,7 +2130,8 @@
|
|
|
1822
2130
|
"claude",
|
|
1823
2131
|
"codex",
|
|
1824
2132
|
"grok",
|
|
1825
|
-
"opencode2"
|
|
2133
|
+
"opencode2",
|
|
2134
|
+
"pi"
|
|
1826
2135
|
]
|
|
1827
2136
|
},
|
|
1828
2137
|
"model": {
|
|
@@ -1872,6 +2181,9 @@
|
|
|
1872
2181
|
"type": "string",
|
|
1873
2182
|
"maxLength": 8000
|
|
1874
2183
|
},
|
|
2184
|
+
"available": {
|
|
2185
|
+
"type": "boolean"
|
|
2186
|
+
},
|
|
1875
2187
|
"contextWindow": {
|
|
1876
2188
|
"type": "integer",
|
|
1877
2189
|
"exclusiveMinimum": true,
|
|
@@ -1964,7 +2276,8 @@
|
|
|
1964
2276
|
"claude",
|
|
1965
2277
|
"codex",
|
|
1966
2278
|
"grok",
|
|
1967
|
-
"opencode2"
|
|
2279
|
+
"opencode2",
|
|
2280
|
+
"pi"
|
|
1968
2281
|
]
|
|
1969
2282
|
},
|
|
1970
2283
|
"model": {
|
|
@@ -2021,7 +2334,8 @@
|
|
|
2021
2334
|
"claude",
|
|
2022
2335
|
"codex",
|
|
2023
2336
|
"grok",
|
|
2024
|
-
"opencode2"
|
|
2337
|
+
"opencode2",
|
|
2338
|
+
"pi"
|
|
2025
2339
|
]
|
|
2026
2340
|
},
|
|
2027
2341
|
"model": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/switcher",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Universal provider and model switcher for coding harnesses with an API, SDK and self-hosted storage",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -45,7 +45,10 @@
|
|
|
45
45
|
"verify": "bun run check:generated && bun run typecheck && bun run test && bun run build && bun run contract:check",
|
|
46
46
|
"test:postgres": "bun scripts/pg-test-gate.mjs",
|
|
47
47
|
"scan:artifact": "bun scripts/artifact-scan.ts",
|
|
48
|
-
"prepack": "bun run verify && bun run scan:artifact"
|
|
48
|
+
"prepack": "bun run verify && bun run scan:artifact",
|
|
49
|
+
"test:native-opencode-resume": "bun scripts/test-native-resume.ts",
|
|
50
|
+
"test:native-opencode2-authority": "bun scripts/test-native-opencode2-authority.ts",
|
|
51
|
+
"test:native-grok-resume": "SWITCHER_TEST_NATIVE_HARNESS=grok bun scripts/test-native-resume.ts"
|
|
49
52
|
},
|
|
50
53
|
"devDependencies": {
|
|
51
54
|
"@types/bun": "1.3.14",
|
|
@@ -54,9 +57,11 @@
|
|
|
54
57
|
"zod-to-json-schema": "3.25.2"
|
|
55
58
|
},
|
|
56
59
|
"dependencies": {
|
|
57
|
-
"
|
|
60
|
+
"@hasna/contracts": "1.0.2",
|
|
58
61
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
59
|
-
"
|
|
62
|
+
"jsonc-parser": "3.3.1",
|
|
63
|
+
"yaml": "2.9.0",
|
|
64
|
+
"zod": "3.25.76"
|
|
60
65
|
},
|
|
61
66
|
"repository": {
|
|
62
67
|
"type": "git",
|