@maincode-ai/matilda-code 0.19.2 → 0.19.5

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.
Files changed (104) hide show
  1. package/chunks/agent-HMAY5XP7.js +3 -0
  2. package/chunks/agent-headless-NWRQLNNS.js +3 -0
  3. package/chunks/{anthropicContentGenerator-BRG6WZK3.js → anthropicContentGenerator-CZLOMDXF.js} +11 -11
  4. package/chunks/{askUserQuestion-QPVUWJCI.js → askUserQuestion-V5YLTC4J.js} +1 -1
  5. package/chunks/{ca-D7YSARXX.js → ca-UW3G7H5I.js} +1 -1
  6. package/chunks/chunk-2FX4655X.js +101 -0
  7. package/chunks/{chunk-2MEHZGZJ.js → chunk-2XZIKUB6.js} +1 -1
  8. package/chunks/{chunk-RDNFN7GJ.js → chunk-3E62XAAL.js} +1 -1
  9. package/chunks/{chunk-X2SJJ7RN.js → chunk-3GAKPC2I.js} +2 -2
  10. package/chunks/chunk-3KCDX6MY.js +8 -0
  11. package/chunks/{chunk-X6DODPXG.js → chunk-5U3A6KMU.js} +1 -1
  12. package/chunks/chunk-7VGUNT5L.js +8 -0
  13. package/chunks/{chunk-XKNSVSWD.js → chunk-AEEMG76V.js} +2 -2
  14. package/chunks/chunk-C6SSPIF3.js +56 -0
  15. package/chunks/{chunk-DY6PIAAY.js → chunk-CFBZKYFB.js} +1 -1
  16. package/chunks/chunk-CLUEFPSU.js +8 -0
  17. package/chunks/chunk-FSRNEJQB.js +8 -0
  18. package/chunks/chunk-KP6BLFQS.js +12 -0
  19. package/chunks/{chunk-4M4CUQUR.js → chunk-NDR7ZFUA.js} +1 -1
  20. package/chunks/{chunk-CNHY7623.js → chunk-SUORCDGS.js} +1 -1
  21. package/chunks/{chunk-KMU5KAYC.js → chunk-WPZEF752.js} +490 -505
  22. package/chunks/chunk-XXZH7C44.js +34 -0
  23. package/chunks/{chunk-LN2DRVOB.js → chunk-XYA3SFGC.js} +1 -1
  24. package/chunks/{computer-use-MJ7WGSXA.js → computer-use-B2345U7U.js} +1 -1
  25. package/chunks/contextCommand-ZTMOL6TC.js +3 -0
  26. package/chunks/{cron-create-K35JKX3K.js → cron-create-JHL5JGIM.js} +1 -1
  27. package/chunks/{cron-delete-7B65R7JC.js → cron-delete-K2R3KI2W.js} +1 -1
  28. package/chunks/{cron-list-FCX6HCY7.js → cron-list-R3YHZBHA.js} +1 -1
  29. package/chunks/{de-ME75AM7Q.js → de-QSFN3SRK.js} +1 -1
  30. package/chunks/{edit-Y7NFRYDN.js → edit-YI2KTC5G.js} +1 -1
  31. package/chunks/{en-KVT5FJKO.js → en-ZU6RPTEW.js} +2 -2
  32. package/chunks/{enter-worktree-PVVX5BLF.js → enter-worktree-2V2D7CYW.js} +1 -1
  33. package/chunks/{enterPlanMode-VVRE4YBV.js → enterPlanMode-ZUCJBK26.js} +1 -1
  34. package/chunks/{exit-worktree-LDIOV4NM.js → exit-worktree-TNMQ6BJQ.js} +1 -1
  35. package/chunks/{exitPlanMode-AR4QZ4EF.js → exitPlanMode-3V2VGFJI.js} +1 -1
  36. package/chunks/{fr-V3O5JG5W.js → fr-FKTJ4COX.js} +2 -2
  37. package/chunks/geminiContentGenerator-DLT3FIFM.js +8 -0
  38. package/chunks/{glob-6H2PV6X4.js → glob-DK4XLD6I.js} +1 -1
  39. package/chunks/grep-HHKDBU7B.js +22 -0
  40. package/chunks/{ja-ZOFFSG6C.js → ja-GKS4GLZP.js} +1 -1
  41. package/chunks/{ls-ZSHUDEJV.js → ls-4QPI2E7A.js} +1 -1
  42. package/chunks/{lsp-DW3UNQQ6.js → lsp-P3GKBOP3.js} +1 -1
  43. package/chunks/{matildaAgentContentGenerator-B7FZY5QT.js → matildaAgentContentGenerator-WANX4W2Y.js} +9 -9
  44. package/chunks/matildaContentGenerator-YNM53I6M.js +8 -0
  45. package/chunks/monitor-JVPMYOZ2.js +32 -0
  46. package/chunks/notebook-edit-TSASMGK7.js +17 -0
  47. package/chunks/openaiContentGenerator-5VMLKMVG.js +3 -0
  48. package/chunks/{pt-K2W3KMTP.js → pt-VIW62ZAE.js} +1 -1
  49. package/chunks/{read-file-MUUE7CJM.js → read-file-HEVXSNSO.js} +1 -1
  50. package/chunks/ripGrep-UCUYOKAZ.js +3 -0
  51. package/chunks/{ru-KICZRPMQ.js → ru-FSSACF4A.js} +1 -1
  52. package/chunks/scheduler-LXGHE7LL.js +8 -0
  53. package/chunks/{send-message-BPTEYK4Y.js → send-message-K3T7GVHO.js} +1 -1
  54. package/chunks/{serve-DAFPBR3R.js → serve-F2OU5GL5.js} +1 -1
  55. package/chunks/shell-5CG25UXX.js +3 -0
  56. package/chunks/{skill-D23JCWUG.js → skill-YXHHDMLR.js} +1 -1
  57. package/chunks/src-4KXRVNR5.js +3 -0
  58. package/chunks/{symbol-search-3E5XK5S6.js → symbol-search-WVNUJRET.js} +1 -1
  59. package/chunks/{syntheticOutput-NSQJLEEY.js → syntheticOutput-LLA4WQR7.js} +1 -1
  60. package/chunks/{task-create-TQI5N4YR.js → task-create-ZZTSVXZN.js} +1 -1
  61. package/chunks/{task-list-DQBF34BK.js → task-list-6I64SK7E.js} +1 -1
  62. package/chunks/{task-stop-5R44O4NK.js → task-stop-UKRXMCZV.js} +1 -1
  63. package/chunks/{task-update-PL2JDIF6.js → task-update-XZWORLJB.js} +1 -1
  64. package/chunks/{team-create-B3K7PIQ5.js → team-create-ESOAIRWA.js} +1 -1
  65. package/chunks/{team-delete-LWX4LMFZ.js → team-delete-DEPXAMUE.js} +1 -1
  66. package/chunks/{todoWrite-V4DQMEDR.js → todoWrite-DKJAYA4S.js} +1 -1
  67. package/chunks/{tool-search-UA3I7UV3.js → tool-search-47TA6SG4.js} +1 -1
  68. package/chunks/update-goal-DH2TEYYU.js +16 -0
  69. package/chunks/{web-fetch-XRYT2EOQ.js → web-fetch-5F7C7MXU.js} +1 -1
  70. package/chunks/{web-search-MD3V4NBD.js → web-search-N6QM6PXT.js} +1 -1
  71. package/chunks/{workflow-A2P7P7KO.js → workflow-AGPUPU65.js} +2 -2
  72. package/chunks/write-file-XJ2S7TR3.js +11 -0
  73. package/chunks/{zh-C5PHBN3U.js → zh-I4FV25MS.js} +2 -2
  74. package/chunks/{zh-TW-IYMR6KR3.js → zh-TW-7HNBEDIB.js} +2 -2
  75. package/cli.js +462 -461
  76. package/locales/ca.js +6 -2
  77. package/locales/de.js +5 -3
  78. package/locales/en.js +7 -4
  79. package/locales/fr.js +4 -2
  80. package/locales/ja.js +6 -2
  81. package/locales/pt.js +4 -2
  82. package/locales/ru.js +4 -2
  83. package/locales/zh-TW.js +7 -4
  84. package/locales/zh.js +7 -4
  85. package/package.json +2 -2
  86. package/chunks/agent-XKRS7SDN.js +0 -3
  87. package/chunks/agent-headless-5UTXGWJL.js +0 -3
  88. package/chunks/chunk-APVMKC4S.js +0 -101
  89. package/chunks/chunk-OQ73WWR4.js +0 -8
  90. package/chunks/chunk-R6YTDM76.js +0 -8
  91. package/chunks/chunk-S32ZN6LD.js +0 -12
  92. package/chunks/chunk-WQNABJ5R.js +0 -38
  93. package/chunks/contextCommand-AGXIRVKU.js +0 -3
  94. package/chunks/geminiContentGenerator-35P4NFWN.js +0 -8
  95. package/chunks/grep-OMYHSNBF.js +0 -22
  96. package/chunks/matildaContentGenerator-DQOUSFU3.js +0 -8
  97. package/chunks/monitor-LY6HMAGP.js +0 -32
  98. package/chunks/notebook-edit-PY3T4RHL.js +0 -17
  99. package/chunks/openaiContentGenerator-A42WRFRC.js +0 -3
  100. package/chunks/ripGrep-BJRH2OAQ.js +0 -3
  101. package/chunks/scheduler-MFP5BJTP.js +0 -8
  102. package/chunks/shell-YAP6NQTT.js +0 -3
  103. package/chunks/src-77YCXW6G.js +0 -3
  104. package/chunks/write-file-TTOYKZTG.js +0 -11
package/locales/ca.js CHANGED
@@ -1326,7 +1326,10 @@ export default {
1326
1326
  'Press Ctrl+C again to exit.': 'Premeu Ctrl+C de nou per sortir.',
1327
1327
  'Press Ctrl+D again to exit.': 'Premeu Ctrl+D de nou per sortir.',
1328
1328
  'Press Esc again to clear.': 'Premeu Esc de nou per esborrar.',
1329
- 'Press to edit queued messages': 'Premeu per editar els missatges en cua',
1329
+ 'Press Enter (empty) to send now ·to edit':
1330
+ 'Premeu ↑ per editar els missatges en cua',
1331
+ 'Steering with queued message…': 'Steering with queued message…',
1332
+ 'Request cancelled.': 'Request cancelled.',
1330
1333
 
1331
1334
  // ============================================================================
1332
1335
  // Estat MCP
@@ -1409,7 +1412,8 @@ export default {
1409
1412
  // ============================================================================
1410
1413
  // Pantalla de sortida / Estadístiques
1411
1414
  // ============================================================================
1412
- 'Agent powering down. Goodbye!': "L'agent s'apaga. Fins aviat!",
1415
+ 'Time for Matilda to sleep. Catchya!':
1416
+ 'Hora de que Matilda dormi. Fins aviat!',
1413
1417
  'To continue this session, run': 'Per continuar aquesta sessió, executeu',
1414
1418
  'Interaction Summary': 'Resum de la interacció',
1415
1419
  'Session ID:': 'ID de sessió:',
package/locales/de.js CHANGED
@@ -1294,8 +1294,10 @@ export default {
1294
1294
  'Press Ctrl+C again to exit.': 'Drücken Sie erneut Ctrl+C zum Beenden.',
1295
1295
  'Press Ctrl+D again to exit.': 'Drücken Sie erneut Ctrl+D zum Beenden.',
1296
1296
  'Press Esc again to clear.': 'Drücken Sie erneut Esc zum Löschen.',
1297
- 'Press ↑ to edit queued messages':
1297
+ 'Press Enter (empty) to send now · ↑ to edit':
1298
1298
  'Drücken Sie ↑, um Nachrichten in der Warteschlange zu bearbeiten',
1299
+ 'Steering with queued message…': 'Steering with queued message…',
1300
+ 'Request cancelled.': 'Request cancelled.',
1299
1301
 
1300
1302
  // ============================================================================
1301
1303
  // MCP Status
@@ -1344,8 +1346,8 @@ export default {
1344
1346
  // ============================================================================
1345
1347
  // Exit Screen / Stats
1346
1348
  // ============================================================================
1347
- 'Agent powering down. Goodbye!':
1348
- 'Agent wird heruntergefahren. Auf Wiedersehen!',
1349
+ 'Time for Matilda to sleep. Catchya!':
1350
+ 'Zeit für Matilda, schlafen zu gehen. Bis dann!',
1349
1351
  'To continue this session, run':
1350
1352
  'Um diese Sitzung fortzusetzen, führen Sie aus',
1351
1353
  'Interaction Summary': 'Interaktionszusammenfassung',
package/locales/en.js CHANGED
@@ -1386,7 +1386,10 @@ export default {
1386
1386
  'Press Ctrl+C again to exit.': 'Press Ctrl+C again to exit.',
1387
1387
  'Press Ctrl+D again to exit.': 'Press Ctrl+D again to exit.',
1388
1388
  'Press Esc again to clear.': 'Press Esc again to clear.',
1389
- 'Press to edit queued messages': 'Press ↑ to edit queued messages',
1389
+ 'Press Enter (empty) to send now · ↑ to edit':
1390
+ 'Press Enter (empty) to send now · ↑ to edit',
1391
+ 'Steering with queued message…': 'Steering with queued message…',
1392
+ 'Request cancelled.': 'Request cancelled.',
1390
1393
 
1391
1394
  // ============================================================================
1392
1395
  // MCP Status
@@ -1468,7 +1471,7 @@ export default {
1468
1471
  // ============================================================================
1469
1472
  // Exit Screen / Stats
1470
1473
  // ============================================================================
1471
- 'Agent powering down. Goodbye!': 'Agent powering down. Goodbye!',
1474
+ 'Time for Matilda to sleep. Catchya!': 'Time for Matilda to sleep. Catchya!',
1472
1475
  'To continue this session, run': 'To continue this session, run',
1473
1476
  'Interaction Summary': 'Interaction Summary',
1474
1477
  'Session ID:': 'Session ID:',
@@ -1801,8 +1804,8 @@ export default {
1801
1804
  'Press Ctrl+O to show full tool output',
1802
1805
  'Switch to plan mode or exit plan mode':
1803
1806
  'Switch to plan mode or exit plan mode',
1804
- 'Set a goal — keep working until the condition is met':
1805
- 'Set a goal — keep working until the condition is met',
1807
+ 'Set a goal — keep working until the condition is met (pause/resume/clear)':
1808
+ 'Set a goal — keep working until the condition is met (pause/resume/clear)',
1806
1809
  'Exited plan mode. Previous approval mode restored.':
1807
1810
  'Exited plan mode. Previous approval mode restored.',
1808
1811
  'Enabled plan mode. The agent will analyze and plan without executing tools.':
package/locales/fr.js CHANGED
@@ -1406,7 +1406,7 @@ export default {
1406
1406
  // ============================================================================
1407
1407
  // Écran de sortie / Stats
1408
1408
  // ============================================================================
1409
- 'Agent powering down. Goodbye!': "Agent en cours d'arrêt. Au revoir !",
1409
+ 'Time for Matilda to sleep. Catchya!': 'Matilda va se reposer. À plus !',
1410
1410
  'To continue this session, run': 'Pour continuer cette session, exécutez',
1411
1411
  'Interaction Summary': "Résumé de l'interaction",
1412
1412
  'Session ID:': 'ID de session :',
@@ -1846,8 +1846,10 @@ export default {
1846
1846
  'Pas en mode plan. Utilisez "/plan" pour entrer en mode plan d\'abord.',
1847
1847
  "Set up Matilda's status line UI":
1848
1848
  "Configurer l'interface de la barre de statut de Matilda",
1849
- 'Press ↑ to edit queued messages':
1849
+ 'Press Enter (empty) to send now · ↑ to edit':
1850
1850
  'Appuyez sur ↑ pour modifier les messages en file d’attente',
1851
+ 'Steering with queued message…': 'Steering with queued message…',
1852
+ 'Request cancelled.': 'Request cancelled.',
1851
1853
  'Drop a MATILDA.md in the project so Matilda keeps persistent context.':
1852
1854
  'Ajoutez un fichier MATILDA.md pour donner à Matilda un contexte de projet persistant.',
1853
1855
  'Duck out of the main thread with /btw — quick side question, same chat.':
package/locales/ja.js CHANGED
@@ -1036,7 +1036,10 @@ export default {
1036
1036
  'Press Ctrl+C again to exit.': 'Ctrl+C をもう一度押すと終了します',
1037
1037
  'Press Ctrl+D again to exit.': 'Ctrl+D をもう一度押すと終了します',
1038
1038
  'Press Esc again to clear.': 'Esc をもう一度押すとクリアします',
1039
- 'Press to edit queued messages': 'を押してキュー内のメッセージを編集',
1039
+ 'Press Enter (empty) to send now ·to edit':
1040
+ '↑ を押してキュー内のメッセージを編集',
1041
+ 'Steering with queued message…': 'Steering with queued message…',
1042
+ 'Request cancelled.': 'Request cancelled.',
1040
1043
  // MCP Status
1041
1044
  '⏳ MCP servers are starting up ({{count}} initializing)...':
1042
1045
  '⏳ MCP servers を起動中({{count}} 初期化中)...',
@@ -1102,7 +1105,8 @@ export default {
1102
1105
  'Conversation getting long? /compress rolls it up and frees context.':
1103
1106
  '会話が長くなりましたか? /compress は履歴を要約してコンテキストを空けます。',
1104
1107
  // Exit Screen / Stats
1105
- 'Agent powering down. Goodbye!': 'エージェントを終了します。さようなら!',
1108
+ 'Time for Matilda to sleep. Catchya!':
1109
+ 'Matilda、おやすみの時間です。またな!',
1106
1110
  'To continue this session, run': 'このセッションを続行するには、次を実行:',
1107
1111
  'Interaction Summary': 'インタラクション概要',
1108
1112
  'Session ID:': 'セッションID:',
package/locales/pt.js CHANGED
@@ -1295,8 +1295,10 @@ export default {
1295
1295
  'Press Ctrl+C again to exit.': 'Pressione Ctrl+C novamente para sair.',
1296
1296
  'Press Ctrl+D again to exit.': 'Pressione Ctrl+D novamente para sair.',
1297
1297
  'Press Esc again to clear.': 'Pressione Esc novamente para limpar.',
1298
- 'Press ↑ to edit queued messages':
1298
+ 'Press Enter (empty) to send now · ↑ to edit':
1299
1299
  'Pressione ↑ para editar mensagens na fila',
1300
+ 'Steering with queued message…': 'Steering with queued message…',
1301
+ 'Request cancelled.': 'Request cancelled.',
1300
1302
 
1301
1303
  // ============================================================================
1302
1304
  // MCP Status
@@ -1376,7 +1378,7 @@ export default {
1376
1378
  // ============================================================================
1377
1379
  // Exit Screen / Stats
1378
1380
  // ============================================================================
1379
- 'Agent powering down. Goodbye!': 'Agente desligando. Adeus!',
1381
+ 'Time for Matilda to sleep. Catchya!': 'Hora da Matilda dormir. Até logo!',
1380
1382
  'To continue this session, run': 'Para continuar esta sessão, execute',
1381
1383
  'Interaction Summary': 'Resumo da Interação',
1382
1384
  'Session ID:': 'ID da Sessão:',
package/locales/ru.js CHANGED
@@ -1241,8 +1241,10 @@ export default {
1241
1241
  'Press Ctrl+C again to exit.': 'Нажмите Ctrl+C снова для выхода.',
1242
1242
  'Press Ctrl+D again to exit.': 'Нажмите Ctrl+D снова для выхода.',
1243
1243
  'Press Esc again to clear.': 'Нажмите Esc снова для очистки.',
1244
- 'Press ↑ to edit queued messages':
1244
+ 'Press Enter (empty) to send now · ↑ to edit':
1245
1245
  'Нажмите ↑ для редактирования сообщений в очереди',
1246
+ 'Steering with queued message…': 'Steering with queued message…',
1247
+ 'Request cancelled.': 'Request cancelled.',
1246
1248
 
1247
1249
  // ============================================================================
1248
1250
  // Статус MCP
@@ -1292,7 +1294,7 @@ export default {
1292
1294
  // ============================================================================
1293
1295
  // Экран выхода / Статистика
1294
1296
  // ============================================================================
1295
- 'Agent powering down. Goodbye!': 'Агент завершает работу. До свидания!',
1297
+ 'Time for Matilda to sleep. Catchya!': 'Matilda идёт спать. Пока!',
1296
1298
  'To continue this session, run': 'Для продолжения этой сессии, выполните',
1297
1299
  'Interaction Summary': 'Сводка взаимодействия',
1298
1300
  'Session ID:': 'ID сессии:',
package/locales/zh-TW.js CHANGED
@@ -1169,7 +1169,10 @@ export default {
1169
1169
  'Press Ctrl+C again to exit.': '再次按 Ctrl+C 退出',
1170
1170
  'Press Ctrl+D again to exit.': '再次按 Ctrl+D 退出',
1171
1171
  'Press Esc again to clear.': '再次按 Esc 清除',
1172
- 'Press to edit queued messages': '按 編輯排隊消息',
1172
+ 'Press Enter (empty) to send now ·to edit':
1173
+ '按 Enter(空)立即發送 · ↑ 編輯',
1174
+ 'Steering with queued message…': '正在用佇列訊息轉向…',
1175
+ 'Request cancelled.': '請求已取消。',
1173
1176
  'No MCP servers configured.': '未配置 MCP servers',
1174
1177
  '⏳ MCP servers are starting up ({{count}} initializing)...':
1175
1178
  '⏳ MCP servers 正在啟動({{count}} 個正在初始化)...',
@@ -1237,7 +1240,7 @@ export default {
1237
1240
  '上下文空間不足,用 /compress 釋放空間。',
1238
1241
  'Conversation getting long? /compress rolls it up and frees context.':
1239
1242
  '對話變長了?用 /compress 捲起來並釋放上下文。',
1240
- 'Agent powering down. Goodbye!': 'Matilda 正在關閉,再見!',
1243
+ 'Time for Matilda to sleep. Catchya!': 'Matilda 該睡覺了,下次見!',
1241
1244
  'To continue this session, run': '要繼續此會話,請運行',
1242
1245
  'Interaction Summary': '交互摘要',
1243
1246
  'Session ID:': '會話 ID:',
@@ -1488,8 +1491,8 @@ export default {
1488
1491
  '緊湊模式下隱藏工具輸出和思考過程,界面更簡潔(Ctrl+O 切換)。',
1489
1492
  'Press Ctrl+O to show full tool output': '按 Ctrl+O 查看詳細工具調用結果',
1490
1493
  'Switch to plan mode or exit plan mode': '切換到計劃模式或退出計劃模式',
1491
- 'Set a goal — keep working until the condition is met':
1492
- '設定目標 — 持續工作直到條件滿足',
1494
+ 'Set a goal — keep working until the condition is met (pause/resume/clear)':
1495
+ '設定目標 — 持續工作直到條件滿足(暫停/恢復/清除)',
1493
1496
  'Exited plan mode. Previous approval mode restored.':
1494
1497
  '已退出計劃模式,已恢復之前的審批模式。',
1495
1498
  'Enabled plan mode. The agent will analyze and plan without executing tools.':
package/locales/zh.js CHANGED
@@ -1317,7 +1317,10 @@ export default {
1317
1317
  'Press Ctrl+C again to exit.': '再次按 Ctrl+C 退出',
1318
1318
  'Press Ctrl+D again to exit.': '再次按 Ctrl+D 退出',
1319
1319
  'Press Esc again to clear.': '再次按 Esc 清除',
1320
- 'Press to edit queued messages': '按 编辑排队消息',
1320
+ 'Press Enter (empty) to send now ·to edit':
1321
+ '按 Enter(空)立即发送 · ↑ 编辑',
1322
+ 'Steering with queued message…': '正在用排队消息转向…',
1323
+ 'Request cancelled.': '请求已取消。',
1321
1324
 
1322
1325
  // ============================================================================
1323
1326
  // MCP Status
@@ -1398,7 +1401,7 @@ export default {
1398
1401
  // ============================================================================
1399
1402
  // Exit Screen / Stats
1400
1403
  // ============================================================================
1401
- 'Agent powering down. Goodbye!': 'Matilda 正在关闭,再见!',
1404
+ 'Time for Matilda to sleep. Catchya!': 'Matilda 该睡觉了,下次见!',
1402
1405
  'To continue this session, run': '要继续此会话,请运行',
1403
1406
  'Interaction Summary': '交互摘要',
1404
1407
  'Session ID:': '会话 ID:',
@@ -1693,8 +1696,8 @@ export default {
1693
1696
  '紧凑模式下隐藏工具输出和思考过程,界面更简洁(Ctrl+O 切换)。',
1694
1697
  'Press Ctrl+O to show full tool output': '按 Ctrl+O 查看详细工具调用结果',
1695
1698
  'Switch to plan mode or exit plan mode': '切换到计划模式或退出计划模式',
1696
- 'Set a goal — keep working until the condition is met':
1697
- '设定目标 — 持续工作直到条件满足',
1699
+ 'Set a goal — keep working until the condition is met (pause/resume/clear)':
1700
+ '设定目标 — 持续工作直到条件满足(暂停/恢复/清除)',
1698
1701
  'Exited plan mode. Previous approval mode restored.':
1699
1702
  '已退出计划模式,已恢复之前的审批模式。',
1700
1703
  'Enabled plan mode. The agent will analyze and plan without executing tools.':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maincode-ai/matilda-code",
3
- "version": "0.19.2",
3
+ "version": "0.19.5",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "cli.js",
@@ -22,7 +22,7 @@
22
22
  "bundled"
23
23
  ],
24
24
  "config": {
25
- "sandboxImageUri": "ghcr.io/maincode/matilda-code:0.19.2"
25
+ "sandboxImageUri": "ghcr.io/maincode/matilda-code:0.19.5"
26
26
  },
27
27
  "dependencies": {},
28
28
  "optionalDependencies": {
@@ -1,3 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{Rf as a,Sf as b,Tf as c,Uf as d,Vf as e,Wf as f}from"./chunk-KMU5KAYC.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-S32ZN6LD.js";import"./chunk-OQ73WWR4.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-APVMKC4S.js";import"./chunk-4F4DA5UI.js";import"./chunk-2MEHZGZJ.js";import"./chunk-LN2DRVOB.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-DY6PIAAY.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import"./chunk-UY2R3ZQ4.js";import"./chunk-4M4CUQUR.js";import"./chunk-X6DODPXG.js";import"./chunk-LLQVLTPB.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-IOCF4XSR.js";import"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";export{f as AgentTool,b as TOOL_REGISTRY_REBUILT,e as createApprovalModeOverride,c as hasRebuiltToolRegistry,d as rebuildToolRegistryOnOverride,a as resolveSubagentApprovalMode};
@@ -1,3 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{qf as a,rf as b,sf as c}from"./chunk-KMU5KAYC.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-S32ZN6LD.js";import"./chunk-OQ73WWR4.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-APVMKC4S.js";import"./chunk-4F4DA5UI.js";import"./chunk-2MEHZGZJ.js";import"./chunk-LN2DRVOB.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-DY6PIAAY.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import"./chunk-UY2R3ZQ4.js";import"./chunk-4M4CUQUR.js";import"./chunk-X6DODPXG.js";import"./chunk-LLQVLTPB.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-IOCF4XSR.js";import"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";export{c as AgentHeadless,a as ContextState,b as templateString};
@@ -1,101 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{a as U,d as rt}from"./chunk-4F4DA5UI.js";import{a as ot,b as it,e as Ie,n as at,q as W,r as st}from"./chunk-LN2DRVOB.js";import{b as A,e as B}from"./chunk-4J6DC24J.js";import{Jc as et,Kc as tt,Mb as Xe,Mc as nt,Pb as Ze,Rb as Qe,Sa as K,Wa as ve,Xa as _e,Ya as xe,eb as be,f as P,fb as F,tb as Q,ub as ee}from"./chunk-DY6PIAAY.js";import{L as Ye,Y as b,c as qe,d as j,e as H}from"./chunk-QWBNNEV2.js";import{h as k,l as Se,n as Bt}from"./chunk-FWDMPRKU.js";import{b as f}from"./chunk-GZPNIYVZ.js";f();f();var te=b("TAGGED_THINKING_PARSER"),lt=["<think>","<thinking>"],dt=["</think>","</thinking>"],Wt=Math.max(...lt.map(t=>t.length),...dt.map(t=>t.length));function ke(t,e,n){e&&t.push(n==="thought"?{text:e,thought:!0}:{text:e})}function Vt(t,e,n){let o=t.length-e;return o<=0||o>Wt?!1:n.some(i=>i.startsWith(t.slice(e,e+o)))}function Jt(t,e,n){return n.find(o=>t.startsWith(o,e))}var we=class{mode="text";buffer="";parse(e,n=!1){this.buffer+=e;let o=this.buffer.toLowerCase(),i=[],r="",a=0;for(;a<this.buffer.length;){let s=this.mode==="text"?lt:dt,l=Jt(o,a,s);if(l){te.debug(`taggedThinking: detected tag "${l}" at offset ${a}`),ke(i,r,this.mode),r="",this.mode=this.mode==="text"?"thought":"text",a+=l.length;continue}if(!n&&Vt(o,a,s))break;r+=this.buffer[a],a+=1}return a<this.buffer.length?(ke(i,r,this.mode),this.buffer=this.buffer.slice(a),te.debug(`taggedThinking: emitted ${i.length} part(s), buffered ${this.buffer.length} char(s)`),i):(this.buffer="",this.mode==="thought"&&r&&te.warn(`taggedThinking: flushing ${r.length} chars of unclosed thought on stream end`),ke(i,r,this.mode),te.debug(`taggedThinking: emitted ${i.length} part(s), flush complete`),i)}};function ct(t){return new we().parse(t,!0)}var w=b("CONVERTER"),Ct="(attached media from previous tool call)";function yt(t){let e=t.prompt_tokens||0,n=t.completion_tokens||0,o=t.total_tokens||0,i=t.prompt_tokens_details?.cached_tokens??t.cached_tokens??0,r=t.completion_tokens_details?.reasoning_tokens||0,a=t.usage_is_incomplete===!0||n>0&&e===0||o>0&&e===0&&n===0,s=e,l=n,d=o;return d===0&&(s>0||l>0)&&(d=s+l),{promptTokenCount:s,candidatesTokenCount:l,totalTokenCount:d,cachedContentTokenCount:i,thoughtsTokenCount:r,...a?{usageIsIncomplete:!0}:{}}}var qt=64,ut=1024;function pt(t,e){if(t.length===0)return"";if(e.emittedText.length===0)return e.emittedText=t,e.emittedLength=t.length,t;if(e.cumulativeMode){if(t.startsWith(e.emittedText)){let n=t.slice(e.emittedText.length);return e.emittedText=t,e.emittedLength=t.length,n}return e.emittedText.startsWith(t)?(w.debug(`normalizeStreamingTextDelta: cumulative rewind suppression (emitted=${e.emittedText.length}b, chunk=${t.length}b)`),""):(w.debug("normalizeStreamingTextDelta: exiting cumulative mode (chunk does not match prior accumulated text)"),e.cumulativeMode=!1,e.emittedText=t,e.emittedLength+=t.length,t)}if(t.length>e.emittedText.length&&t.startsWith(e.emittedText)){let n=e.emittedText.length,i=n>=ut&&e.emittedLength>n?e.emittedLength:n;if(t.length>i){let r=t.slice(i);return e.emittedText=t,e.emittedLength=t.length,e.cumulativeMode=!0,w.debug(`normalizeStreamingTextDelta: entered cumulative mode (prefix overlap, baseline=${n}b sliceFrom=${i}b -> curr=${t.length}b)`),r}}return t===e.emittedText?t.length>=qt?(e.cumulativeMode=!0,w.debug(`normalizeStreamingTextDelta: entered cumulative mode (exact repeat, ${t.length}b)`),""):(e.emittedLength+=t.length,t):(e.emittedText.length<ut&&(e.emittedText+=t),e.emittedLength+=t.length,t)}function Tt(t){if(!t||typeof t!="object")return t;let e=JSON.parse(JSON.stringify(t)),n=o=>{if(typeof o!="object"||o===null)return o;if(Array.isArray(o))return o.map(n);let i={};for(let[r,a]of Object.entries(o))if(r==="type"&&typeof a=="string"){let s=a.toLowerCase();s==="integer"?i[r]="integer":s==="number"?i[r]="number":i[r]=s}else r==="minimum"||r==="maximum"||r==="multipleOf"?typeof a=="string"&&!isNaN(Number(a))?i[r]=Number(a):i[r]=a:r==="minLength"||r==="maxLength"||r==="minItems"||r==="maxItems"?typeof a=="string"&&!isNaN(Number(a))?i[r]=parseInt(a,10):i[r]=a:typeof a=="object"?i[r]=n(a):i[r]=a;return i};return n(e)}async function Yt(t,e="auto"){let n=[];for(let o of t){let i;if("tool"in o?i=await o.tool():i=o,i.functionDeclarations){for(let r of i.functionDeclarations)if(r.name&&r.description){let a;r.parametersJsonSchema?a={...r.parametersJsonSchema}:r.parameters&&(a=Tt(r.parameters)),a&&(a=it(a,e)),n.push({type:"function",function:{name:r.name,description:r.description,parameters:a}})}}}return n}function Xt(t,e,n={cleanOrphanToolCalls:!0}){let o=[];return Qt(t,o),en(t.contents,o,e),o=mt(o),n.cleanOrphanToolCalls&&(o=dn(o),o=mt(o)),o}function Zt(t,e){let n=t.candidates?.[0],o=n?.content?.parts||[],i=[],r=[],a=[],s=0;for(let p of o)typeof p=="string"?r.push(p):"text"in p&&p.text?"thought"in p&&p.thought?i.push(p.text):r.push(p.text):"functionCall"in p&&p.functionCall&&(a.push({id:p.functionCall.id||`call_${s}`,type:"function",function:{name:p.functionCall.name||"",arguments:JSON.stringify(p.functionCall.args||{})}}),s+=1);let l={role:"assistant",content:r.join("")||null,refusal:null},d=i.join("");d&&(l.reasoning_content=d),a.length>0&&(l.tool_calls=a);let c=ln(n?.finishReason),g=t.usageMetadata,u={prompt_tokens:g?.promptTokenCount||0,completion_tokens:g?.candidatesTokenCount||0,total_tokens:g?.totalTokenCount||0};g?.cachedContentTokenCount!==void 0&&(u.prompt_tokens_details={cached_tokens:g.cachedContentTokenCount});let m=t.createTime?Number(t.createTime):Date.now(),h=Number.isFinite(m)?Math.floor(m/1e3):Math.floor(Date.now()/1e3);return{id:t.responseId||`gemini-${Date.now()}`,object:"chat.completion",created:h,model:t.modelVersion||e.model,choices:[{index:0,message:l,finish_reason:c,logprobs:null}],usage:u}}function Qt(t,e){if(!t.config?.systemInstruction)return;let n=Mt(t.config.systemInstruction);n&&e.push({role:"system",content:n})}function en(t,e,n){if(Array.isArray(t))for(let o of t)gt(o,e,n);else t&&gt(t,e,n)}function gt(t,e,n){if(typeof t=="string"){e.push({role:"user",content:t});return}if(!rn(t))return;let o=t.parts||[],i=t.role==="model"?"assistant":"user",r=[],a=[],s=[],l=0,d=new Set,c=new Set,g=[];for(let u of o){if(typeof u=="string"){r.push({type:"text",text:u});continue}"text"in u&&"thought"in u&&u.thought&&i==="assistant"&&u.text&&a.push(u.text),"text"in u&&u.text&&!("thought"in u&&u.thought)&&r.push({type:"text",text:u.text});let m=At(u,n);if(m&&i==="user"&&r.push(m),"functionCall"in u&&u.functionCall&&i==="assistant"){let h=u.functionCall.id;if(h){if(d.has(h)){w.debug(`Dropping duplicate functionCall id=${h} while converting content`);continue}d.add(h)}s.push({id:h||`call_${l}`,type:"function",function:{name:u.functionCall.name||"",arguments:JSON.stringify(u.functionCall.args||{})}}),l+=1}if(u.functionResponse&&i==="user"){let h=u.functionResponse.id;if(h){if(c.has(h))continue;c.add(h)}let p=nn(u.functionResponse,n);if(p){if(n.splitToolMedia&&Array.isArray(p.content)){let C=[],y=[];for(let T of p.content)T&&(T.type==="image_url"||T.type==="input_audio"||T.type==="video_url"||T.type==="file")?C.push(T):T&&T.type==="text"&&y.push(T);if(C.length>0){let T=y.map(S=>S.text).join(`
4
- `);p.content=T||"[media attached in following user message]",g.push(...C)}}e.push(p)}}}if(g.length>0&&e.push({role:"user",content:[{type:"text",text:Ct},...g]}),i==="assistant"){if(r.length===0&&s.length===0&&a.length===0)return;let m={role:"assistant",content:r.filter(p=>p.type==="text").map(p=>p.text).join("")||(a.length>0?"":null)};s.length>0&&(m.tool_calls=s);let h=a.join("");h&&(m.reasoning_content=h),e.push(m);return}r.length>0&&e.push({role:"user",content:r})}function tn(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="object"){let e=t,n=e.output;if(typeof n=="string")return n;let o=e.error;if(typeof o=="string")return o}try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function nn(t,e){let n=tn(t.response),o=[];n&&o.push({type:"text",text:n});for(let i of t.parts||[]){if("text"in i&&typeof i.text=="string"){i.text.length>0&&o.push({type:"text",text:i.text});continue}let r=At(i,e);r&&o.push(r)}return o.length===0?{role:"tool",tool_call_id:t.id||"",content:""}:{role:"tool",tool_call_id:t.id||"",content:o}}function At(t,e){let{modalities:n}=e;if(t.inlineData?.mimeType&&t.inlineData?.data){let o=t.inlineData.mimeType,i=ft(o),r=t.inlineData.displayName||o;if(i==="image")return n.image?{type:"image_url",image_url:{url:`data:${o};base64,${t.inlineData.data}`}}:L("image",r,e);if(o==="application/pdf")return n.pdf?{type:"file",file:{filename:t.inlineData.displayName||"document.pdf",file_data:`data:${o};base64,${t.inlineData.data}`}}:L("pdf",r,e);if(i==="audio"){if(!n.audio)return L("audio",r,e);let a=on(o);if(a)return{type:"input_audio",input_audio:{data:`data:${o};base64,${t.inlineData.data}`,format:a}}}return i==="video"?n.video?{type:"video_url",video_url:{url:`data:${o};base64,${t.inlineData.data}`}}:L("video",r,e):{type:"text",text:`Unsupported inline media type: ${o} (${r}).`}}if(t.fileData?.mimeType&&t.fileData?.fileUri){let o=t.fileData.displayName||"file",i=t.fileData.fileUri,r=t.fileData.mimeType,a=ft(r);if(a==="image")return n.image?{type:"image_url",image_url:{url:i}}:L("image",o,e);if(r==="application/pdf")return n.pdf?{type:"file",file:{filename:o,file_data:i}}:L("pdf",o,e);if(a==="video")return n.video?{type:"video_url",video_url:{url:i}}:L("video",o,e);let s=t.fileData.displayName?` (${t.fileData.displayName})`:"";return{type:"text",text:`Unsupported file media type: ${r}${s}.`}}return null}function L(t,e,n){w.warn(`Model '${n.model}' does not support ${t} input. Replacing with text placeholder: ${e}`);let o;return t==="pdf"?o=`This model does not support PDF input directly. The read_file tool cannot extract PDF content either. To extract text from the PDF file, try using skills if applicable, or guide user to install pdf skill by running this slash command:
5
- /extensions install https://github.com/anthropics/skills:document-skills`:o=`This model does not support ${t} input. The read_file tool cannot process this type of file either. To handle this file, try using skills if applicable, or any tools installed at system wide, or let the user know you cannot process this type of file.`,{type:"text",text:`[Unsupported ${t} file: "${e}". ${o}]`}}function ft(t){return t.startsWith("image/")?"image":t.startsWith("audio/")?"audio":t.startsWith("video/")?"video":"file"}function on(t){return t.includes("wav")?"wav":t.includes("mp3")||t.includes("mpeg")?"mp3":null}function rn(t){return typeof t=="object"&&t!==null&&"role"in t&&"parts"in t&&Array.isArray(t.parts)}function Mt(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>Mt(e)).filter(Boolean).join(`
6
- `):typeof t=="object"&&t!==null&&"parts"in t&&t.parts?.map(n=>typeof n=="string"?n:"text"in n&&n.text||"").filter(Boolean).join(`
7
- `)||""}function Pe(t,e,n=!0){return e.responseParsingOptions?.taggedThinkingTags?e.taggedThinkingParser?e.taggedThinkingParser.parse(t,n):ct(t):t?[{text:t}]:[]}function an(t,e){let n=t.choices?.[0],o=new B;if(n){let i=[];if(!e.responseParsingOptions?.taggedThinkingTags){let r=n.message.reasoning_content??n.message.reasoning;r&&i.push({text:r,thought:!0})}if(n.message.content&&i.push(...Pe(n.message.content,e)),n.message.tool_calls){for(let r of n.message.tool_calls)if(r.function){let a={};r.function.arguments&&(a=ot(r.function.arguments,{})),i.push({functionCall:{id:r.id,name:r.function.name,args:a}})}}o.candidates=[{content:{parts:i,role:"model"},finishReason:St(n.finish_reason||"stop"),index:0,safetyRatings:[]}]}else o.candidates=[];return o.responseId=t.id,o.createTime=t.created?t.created.toString():new Date().getTime().toString(),o.modelVersion=e.model,o.promptFeedback={safetyRatings:[]},t.usage&&(o.usageMetadata=yt(t.usage)),o}function sn(t,e){let n=t.choices?.[0],o=new B,i=e.toolCallParser;if(!i)throw new Error("convertOpenAIChunkToGemini requires requestContext.toolCallParser \u2014 attach a fresh StreamingToolCallParser at stream start.");if(n){let r=[];if(!e.responseParsingOptions?.taggedThinkingTags){let d=n.delta?.reasoning_content??n.delta?.reasoning;if(d){let c=pt(d,e.reasoningDeltaState??={emittedText:"",emittedLength:0,cumulativeMode:!1});c&&r.push({text:c,thought:!0})}}if(typeof n.delta?.content=="string"){let d=pt(n.delta.content,e.textDeltaState??={emittedText:"",emittedLength:0,cumulativeMode:!1});(d||n.finish_reason)&&r.push(...Pe(d,e,!!n.finish_reason))}else n.finish_reason&&r.push(...Pe("",e,!0));if(n.delta?.tool_calls)for(let d of n.delta.tool_calls){let c=d.index??0;d.function?.arguments?i.addChunk(c,d.function.arguments,d.id,d.function.name):i.addChunk(c,"",d.id,d.function?.name)}let a=!1;if(n.finish_reason){a=i.hasIncompleteToolCalls();let d=i.getCompletedToolCalls();for(let c of d)c.name&&r.push({functionCall:{id:c.id||`call_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,name:c.name,args:c.args}})}let s=a&&n.finish_reason!=="length"?"length":n.finish_reason,l={content:{parts:r,role:"model"},index:0,safetyRatings:[]};s&&(l.finishReason=St(s)),o.candidates=[l]}else o.candidates=[];return o.responseId=t.id,o.createTime=t.created?t.created.toString():new Date().getTime().toString(),o.modelVersion=e.model,o.promptFeedback={safetyRatings:[]},t.usage&&(o.usageMetadata=yt(t.usage)),o}function St(t){return t?{stop:A.STOP,length:A.MAX_TOKENS,content_filter:A.SAFETY,function_call:A.STOP,tool_calls:A.STOP}[t]||A.FINISH_REASON_UNSPECIFIED:A.FINISH_REASON_UNSPECIFIED}function ln(t){if(!t)return"stop";switch(t){case A.STOP:return"stop";case A.MAX_TOKENS:return"length";case A.SAFETY:case A.RECITATION:case A.BLOCKLIST:case A.PROHIBITED_CONTENT:case A.SPII:case A.IMAGE_SAFETY:case A.IMAGE_RECITATION:case A.IMAGE_PROHIBITED_CONTENT:case A.IMAGE_OTHER:return"content_filter";case A.NO_IMAGE:return"stop";default:return"stop"}}function Re(t){return t.role==="assistant"&&"tool_calls"in t&&Array.isArray(t.tool_calls)&&t.tool_calls.length>0}function ht(t){if(t.role!=="user"||!("content"in t)||!Array.isArray(t.content))return!1;let e=t.content[0];return e?.type==="text"&&e.text===Ct}function dn(t){let e=[],n=new Map,o=new Map,i=new Map,r=new Set,a=new Set;for(let s=0;s<t.length;s+=1){let l=t[s];if(Re(l)){let d=[],c=new Set;for(let C of l.tool_calls){let y=C.id;!y||a.has(y)||c.has(y)||(c.add(y),d.push(C))}let g=new Set,u=[],m=[],h=!1;for(let C=s+1;C<t.length;C+=1){let y=t[C];if(y.role==="tool"&&"tool_call_id"in y){if(!y.tool_call_id){h=!1;continue}c.has(y.tool_call_id)&&!g.has(y.tool_call_id)?(g.add(y.tool_call_id),u.push(C),h=!0):h=!1;continue}if(ht(y)){h&&m.push(C);continue}if(!(y.role==="assistant"&&!Re(y)))break}let p=d.filter(C=>g.has(C.id));for(let C of p)a.add(C.id);n.set(s,p),o.set(s,u),i.set(s,m)}}for(let s=0;s<t.length;s+=1){if(r.has(s))continue;let l=t[s];if(Re(l)){let d=l.reasoning_content,c=n.get(s)??[];if(c.length>0){let g={...l};g.tool_calls=c,e.push(g);for(let u of o.get(s)??[]){let m=t[u];m&&(e.push(m),r.add(u))}for(let u of i.get(s)??[]){let m=t[u];m&&(e.push(m),r.add(u))}}else if(typeof l.content=="string"&&l.content.trim()||d){let g={...l};delete g.tool_calls,e.push(g)}else w.debug(`cleanOrphanedToolCalls: dropping assistant with ${l.tool_calls.length} orphaned tool call(s) and no text/reasoning content`)}else l.role==="tool"&&"tool_call_id"in l?w.debug(`cleanOrphanedToolCalls: dropping orphaned tool response ${l.tool_call_id||"<empty>"}`):ht(l)?w.debug("cleanOrphanedToolCalls: dropping orphaned split tool media message"):e.push(l)}return e}function mt(t){let e=[];for(let n of t){if(n.role==="assistant"&&e.length>0){let o=e[e.length-1];if(o.role==="assistant"){let i="tool_calls"in o?o.tool_calls||[]:[],r="tool_calls"in n?n.tool_calls||[]:[],a=o.content,s=n.content,l=Array.isArray(a)||Array.isArray(s),d;if(l){let g=Array.isArray(a)?a:typeof a=="string"&&a?[{type:"text",text:a}]:[],u=Array.isArray(s)?s:typeof s=="string"&&s?[{type:"text",text:s}]:[];d=[...g,...u]}else d=[typeof a=="string"?a:"",typeof s=="string"?s:""].filter(Boolean).join("")||null;let c=[...i,...r];o.content=d||null,c.length>0&&(o.tool_calls=c);continue}}e.push(n)}return e}var ne={convertGeminiToolParametersToOpenAI:Tt,convertGeminiToolsToOpenAI:Yt,convertGeminiRequestToOpenAI:Xt,convertGeminiResponseToOpenAI:Zt,convertOpenAIResponseToGemini:an,convertOpenAIChunkToGemini:sn};f();import*as _ from"node:path";import{promises as re}from"node:fs";f();f();import cn from"crypto";var ie=new Uint8Array(256),oe=ie.length;function Ee(){return oe>ie.length-16&&(cn.randomFillSync(ie),oe=0),ie.slice(oe,oe+=16)}f();var M=[];for(let t=0;t<256;++t)M.push((t+256).toString(16).slice(1));function vt(t,e=0){return M[t[e+0]]+M[t[e+1]]+M[t[e+2]]+M[t[e+3]]+"-"+M[t[e+4]]+M[t[e+5]]+"-"+M[t[e+6]]+M[t[e+7]]+"-"+M[t[e+8]]+M[t[e+9]]+"-"+M[t[e+10]]+M[t[e+11]]+M[t[e+12]]+M[t[e+13]]+M[t[e+14]]+M[t[e+15]]}f();f();import un from"crypto";var Oe={randomUUID:un.randomUUID};function pn(t,e,n){if(Oe.randomUUID&&!e&&!t)return Oe.randomUUID();t=t||{};let o=t.random||(t.rng||Ee)();if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){n=n||0;for(let i=0;i<16;++i)e[n+i]=o[i];return e}return vt(o)}var Ue=pn;import*as E from"os";var ae=b("OPENAI_LOGGER"),gn="########",fn=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function hn(t,e){let n=e||process.cwd();if(!t)return _.join(n,"logs","openai");let o=t;return t==="~"||t.startsWith("~/")?o=_.join(E.homedir(),t.slice(1)):_.isAbsolute(t)||(o=_.resolve(n,t)),_.normalize(o)}function _t(t){return t&&t.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||void 0}function mn(t){let e=t.split("#");if(e.length!==3)return;let[,n,o]=e;if(!(!n||!o||!/^\d+$/.test(o)))return`subagent-${n}`}function Cn(t){if(t)return K(t)?_t(t):_t(mn(t))}function yn(t){if(!t)return;let e=t.indexOf(gn);if(e>0)return t.slice(0,e);if(fn.test(t))return t;let n=t.split("#");if(n.length>=3&&n[0])return n[0]}function Tn(t){let e=t?.trim(),n=yn(e);return!e&&!n?null:{...e?{promptId:e}:{},...n?{sessionId:n}:{}}}var V=class{logDir;initialized=!1;constructor(e,n){this.logDir=hn(e,n)}async initialize(){if(!this.initialized)try{await re.mkdir(this.logDir,{recursive:!0}),this.initialized=!0}catch(e){throw ae.error("Failed to initialize OpenAI logger:",e),new Error(`Failed to initialize OpenAI logger: ${e}`)}}async logInteraction(e,n,o,i){this.initialized||await this.initialize();let r=new Date().toISOString().replace(/:/g,"-"),a=Ue().slice(0,8),s=Cn(i),l=s?`openai-${r}-${a}-${s}.json`:`openai-${r}-${a}.json`,d=_.join(this.logDir,l),c={timestamp:new Date().toISOString(),request:e,response:n||null,error:o?{message:o.message,stack:o.stack}:null,context:Tn(i),system:{hostname:E.hostname(),platform:E.platform(),release:E.release(),nodeVersion:process.version}};try{return await re.writeFile(d,JSON.stringify(c,null,2),"utf-8"),d}catch(g){throw ae.error("Failed to write OpenAI log file:",g),new Error(`Failed to write OpenAI log file: ${g}`)}}async getLogFiles(e){this.initialized||await this.initialize();try{let o=(await re.readdir(this.logDir)).filter(i=>i.startsWith("openai-")&&i.endsWith(".json")).map(i=>_.join(this.logDir,i)).sort().reverse();return e?o.slice(0,e):o}catch(n){return n.code==="ENOENT"?[]:(ae.error("Failed to read OpenAI log directory:",n),[])}}async readLogFile(e){try{let n=await re.readFile(e,"utf-8");return JSON.parse(n)}catch(n){throw ae.error(`Failed to read log file ${e}:`,n),new Error(`Failed to read log file: ${n}`)}}},Lo=new V;f();var se="$runtime|";function No(t){let e=t;for(;e.startsWith(se);){let n=e.split("|").slice(2).join("|");if(!n)break;e=n}return e}f();var le=["samplingParams","timeout","maxRetries","retryErrorCodes","enableCacheControl","schemaCompliance","reasoning","contextWindowSize","customHeaders","extra_body","modalities","splitToolMedia","matildaAgentSdk","matildaAgentPurpose","matildaAgentResponseMode","openAIRequestProfile"],xt=["model","apiKey","apiKeyEnvKey","baseUrl"],de=[...xt,...le],zo={openai:{apiKey:["OPENAI_API_KEY"],baseUrl:["OPENAI_BASE_URL"],model:["OPENAI_MODEL","MATILDA_MODEL"]},anthropic:{apiKey:["ANTHROPIC_API_KEY"],baseUrl:["ANTHROPIC_BASE_URL"],model:["ANTHROPIC_MODEL"]},gemini:{apiKey:["GEMINI_API_KEY"],baseUrl:[],model:["GEMINI_MODEL"]},"vertex-ai":{apiKey:["GOOGLE_API_KEY"],baseUrl:[],model:["GOOGLE_MODEL"]},"matilda-oauth":{apiKey:[],baseUrl:[],model:[]}},jo={openai:rt,"matilda-oauth":U},ce=[{id:"coder-model",name:"coder-model",description:"Matilda 3.6 Plus \u2014 efficient hybrid model with leading coding performance",capabilities:{vision:!0}}],Ho=ce.map(t=>t.id);f();f();f();f();Bt();f();import{AsyncLocalStorage as An}from"node:async_hooks";var bt=new An;f();function It(t){let e=t.candidates?.[0]?.content?.parts;return!e||e.length===0?!1:e.some(Mn)}function Mn(t){if(t===null||typeof t!="object")return!1;let e=t;return typeof e.text=="string"&&e.text.length>0||e.functionCall!==void 0||e.inlineData!==void 0||e.executableCode!==void 0||e.thought===!0}f();import{AsyncLocalStorage as Sn}from"node:async_hooks";var kt=new Sn;function wt(){let t=kt.getStore();return{attempt:t?.attempt??1,requestSetupMs:t?.requestSetupMs,retryTotalDelayMs:t?.retryTotalDelayMs}}var D=b("LOGGING_CONTENT_GENERATOR"),vn=4096,Rt="...[truncated]",_n=vn-Rt.length,J=class{constructor(e,n,o){this.wrapped=e;this.config=n;this.modalities=o.modalities,this.splitToolMedia=o.splitToolMedia,this.generatorAuthType=o.authType,o.enableOpenAILogging&&(this.openaiLogger=new V(o.openAILoggingDir,n.getWorkingDir()),this.schemaCompliance=o.schemaCompliance)}openaiLogger;schemaCompliance;modalities;splitToolMedia;generatorAuthType;getWrapped(){return this.wrapped}logApiRequest(e,n,o){let i=JSON.stringify(e);Xe(this.config,new et(n,o,i,P.getStore()))}_logApiResponse(e,n,o,i,r,a){Qe(this.config,new nt(e,o,n,i,this.generatorAuthType,r,a,P.getStore()))}_logApiError(e,n,o,i,r){let a=qe(o),s=H(o),l=o?.requestID||o?.request_id||e,d=j(o);Ze(this.config,new tt({responseId:l,model:i,durationMs:n,promptId:r,authType:this.generatorAuthType,errorMessage:a,errorType:s,statusCode:d,subagentName:P.getStore()}))}safelyLogApiError(e,n,o,i,r){try{this._logApiError(e,n,o,i,r)}catch(a){D.warn("Failed to log API error:",a)}}safelyLogApiResponse(e,n,o,i,r,a){try{this._logApiResponse(e,n,o,i,r,a)}catch(s){D.warn("Failed to log API response:",s)}}async generateContent(e,n){let o=wt(),i=be(e.model,n);try{i.setAttribute("llm_request.stream",!1)}catch{}let r=Se.setSpan(k.active(),i),a=Date.now(),s=K(n),l=this.startCaptureSession();try{Ie.recordGenerateContentRequest(e,{stream:!1,source:"generateContent"}),s||(ve(this.config,i,e.config?.systemInstruction),_e(this.config,i,e.config?.tools));let d=await k.with(r,async()=>{s||this.logApiRequest(this.toContents(e.contents),e.model,n);let c=await l.wrap(()=>this.wrapped.generateContent(e,n)),g=Date.now()-a,u=s?void 0:this.extractResponseText(c);s||xe(this.config,i,u),this.safelyLogApiResponse(c.responseId??"",g,c.modelVersion||e.model,n,c.usageMetadata,u);try{await this.safelyLogOpenAIInteraction(await l.resolve(e),c,void 0,n)}catch(m){D.warn("Failed to log OpenAI interaction:",m)}return c});return F(i,{success:!0,inputTokens:d.usageMetadata?.promptTokenCount,outputTokens:d.usageMetadata?.candidatesTokenCount,cachedInputTokens:d.usageMetadata?.cachedContentTokenCount,durationMs:Date.now()-a,responseId:d.responseId||void 0,finishReason:d.candidates?.[0]?.finishReason||void 0,thoughtsTokenCount:d.usageMetadata?.thoughtsTokenCount,subagentName:P.getStore()||void 0,...o}),d}catch(d){let c=Date.now()-a,g=e.config?.abortSignal?.aborted??!1;throw F(i,{success:!1,durationMs:c,error:g?ee:Q,errorType:H(d),errorStatusCode:j(d),subagentName:P.getStore()||void 0,...o}),await k.with(r,async()=>{this.safelyLogApiError("",c,d,e.model,n);try{await this.safelyLogOpenAIInteraction(await l.resolve(e),void 0,d,n)}catch(u){D.warn("Failed to log OpenAI interaction:",u)}}),d}}async generateContentStream(e,n){let o=wt(),i=be(e.model,n);try{i.setAttribute("llm_request.stream",!0)}catch{}let r=Se.setSpan(k.active(),i),a=Date.now(),s=K(n),l=this.startCaptureSession(),d;try{Ie.recordGenerateContentRequest(e,{stream:!0,source:"generateContentStream"}),s||(ve(this.config,i,e.config?.systemInstruction),_e(this.config,i,e.config?.tools)),d=await k.with(r,async()=>(s||this.logApiRequest(this.toContents(e.contents),e.model,n),l.wrap(()=>this.wrapped.generateContentStream(e,n))))}catch(g){let u=Date.now()-a;k.with(r,()=>this.safelyLogApiError("",u,g,e.model,n));let m=e.config?.abortSignal?.aborted??!1;F(i,{success:!1,durationMs:u,error:m?ee:Q,errorType:H(g),errorStatusCode:j(g),subagentName:P.getStore()||void 0,...o});try{await this.safelyLogOpenAIInteraction(await l.resolve(e),void 0,g,n)}catch(h){D.warn("Failed to log OpenAI interaction:",h)}throw g}let c;if(this.openaiLogger)try{c=await l.resolve(e)}catch(g){D.warn("Failed to resolve OpenAI request:",g)}return k.with(r,()=>this.loggingStreamWrapper(d,a,n,e.model,c,i,r,e.config?.abortSignal,o))}startCaptureSession(){let e,n=!this.openaiLogger;return{wrap:o=>n?o():bt.run(i=>{e=i},o),resolve:async o=>this.openaiLogger?e??await this.buildOpenAIRequestForLogging(o):void 0}}async*loggingStreamWrapper(e,n,o,i,r,a,s,l,d){let c=K(o),g=!c||!!this.openaiLogger,u=[],m="",h="",p,C=!1,y,T,S=P.getStore(),R,z=!1,X=v=>s?k.with(s,v):v(),Ht=5*6e4,I,We=a?()=>{z||(I!==void 0&&clearTimeout(I),I=setTimeout(()=>{try{a.setAttribute("stream.timed_out",!0)}catch{}F(a,{success:!1,durationMs:Date.now()-n,error:"Stream span timed out (idle)",responseId:m||void 0,subagentName:S||void 0,...d}),z=!0},Ht),I.unref())}:void 0;We?.();try{for await(let x of e){!m&&x.responseId&&(m=x.responseId),!h&&x.modelVersion&&(h=x.modelVersion),g&&u.push(x),x.usageMetadata&&(p=x.usageMetadata);let Je=x.candidates?.[0];Je?.finishReason&&(y=Je.finishReason),R===void 0&&It(x)&&(R=Date.now()-n),We?.(),yield x}I!==void 0&&(clearTimeout(I),I=void 0);let v=Date.now()-n,Z=g?this.consolidateGeminiResponsesForLogging(u):void 0,Ve=c?void 0:this.extractResponseText(Z);z||(X(()=>this.safelyLogApiResponse(m,v,h||i,o,p,Ve)),!c&&a&&xe(this.config,a,Ve),await X(()=>this.safelyLogOpenAIInteraction(r,Z,void 0,o)))}catch(v){if(C=!0,T=v,!z){let Z=Date.now()-n;X(()=>this.safelyLogApiError(m,Z,v,h||i,o)),await X(()=>this.safelyLogOpenAIInteraction(r,void 0,v,o))}throw v}finally{if(I!==void 0&&clearTimeout(I),a&&!z){let v=l?.aborted??!1;F(a,{success:!C,inputTokens:p?.promptTokenCount,outputTokens:p?.candidatesTokenCount,cachedInputTokens:p?.cachedContentTokenCount,ttftMs:R,durationMs:Date.now()-n,error:C?v?ee:Q:void 0,responseId:m||void 0,finishReason:y,thoughtsTokenCount:p?.thoughtsTokenCount,subagentName:S||void 0,errorType:T?H(T):void 0,errorStatusCode:T?j(T):void 0,...d})}}}async buildOpenAIRequestForLogging(e){if(!this.openaiLogger)return;let n=this.createLoggingRequestContext(e.model),o=ne.convertGeminiRequestToOpenAI(e,n,{cleanOrphanToolCalls:!1}),i={model:e.model,messages:o};return e.config?.tools&&(i.tools=await ne.convertGeminiToolsToOpenAI(e.config.tools,this.schemaCompliance??"auto")),e.config?.temperature!==void 0&&(i.temperature=e.config.temperature),e.config?.topP!==void 0&&(i.top_p=e.config.topP),e.config?.maxOutputTokens!==void 0&&(i.max_tokens=e.config.maxOutputTokens),e.config?.presencePenalty!==void 0&&(i.presence_penalty=e.config.presencePenalty),e.config?.frequencyPenalty!==void 0&&(i.frequency_penalty=e.config.frequencyPenalty),i}createLoggingRequestContext(e){return{model:e,modalities:this.modalities??{},splitToolMedia:this.splitToolMedia??!0,startTime:0}}async logOpenAIInteraction(e,n,o,i){if(!this.openaiLogger||!e)return;let r=n?this.convertGeminiResponseToOpenAIForLogging(n,e):void 0;await this.openaiLogger.logInteraction(e,r,o instanceof Error?o:o?new Error(String(o)):void 0,i)}async safelyLogOpenAIInteraction(e,n,o,i){try{await this.logOpenAIInteraction(e,n,o,i)}catch(r){D.warn("Failed to log OpenAI interaction:",r)}}convertGeminiResponseToOpenAIForLogging(e,n){return ne.convertGeminiResponseToOpenAI(e,this.createLoggingRequestContext(n.model))}consolidateGeminiResponsesForLogging(e){if(e.length===0)return;let n=new B,o=[],i=new Map,r,a;for(let d of e){d.usageMetadata&&(a=d.usageMetadata);let c=d.candidates?.[0];c?.finishReason&&(r=c.finishReason);let g=c?.content?.parts??[];for(let u of g){if(typeof u=="string"){o.push({text:u});continue}if("text"in u){u.text&&o.push({text:u.text,...u.thought?{thought:!0}:{},...u.thoughtSignature?{thoughtSignature:u.thoughtSignature}:{}});continue}if("functionCall"in u&&u.functionCall){let m=u.functionCall.id||u.functionCall.name||"tool_call",h=i.get(m),p={functionCall:u.functionCall};h!==void 0?o[h]=p:(i.set(m,o.length),o.push(p));continue}if("functionResponse"in u&&u.functionResponse){o.push({functionResponse:u.functionResponse});continue}o.push(u)}}let s=e[e.length-1],l=s.candidates?.[0];return n.responseId=s.responseId,n.createTime=s.createTime,n.modelVersion=s.modelVersion,n.promptFeedback=s.promptFeedback,n.usageMetadata=a,n.candidates=[{content:{role:l?.content?.role||"model",parts:o},...r?{finishReason:r}:{},index:0,safetyRatings:l?.safetyRatings||[]}],n}extractResponseText(e){let n=e?.candidates?.[0]?.content?.parts;if(!n?.length)return;let o="",i=!1,r=!1,a=s=>{if(i=!0,r)return;let l=_n-o.length;if(s.length<=l){o+=s;return}o+=s.slice(0,Math.max(0,l)),r=!0};for(let s of n){if(typeof s=="string"){a(s);continue}"text"in s&&typeof s.text=="string"&&!("thought"in s&&s.thought)&&a(s.text)}if(i)return r?`${o}${Rt}`:o}async countTokens(e){return this.wrapped.countTokens(e)}async embedContent(e){return this.wrapped.embedContent(e)}useSummarizedThinking(){return this.wrapped.useSummarizedThinking()}toContents(e){return Array.isArray(e)?e.map(n=>this.toContent(n)):[this.toContent(e)]}toContent(e){return Array.isArray(e)?{role:"user",parts:this.toParts(e)}:typeof e=="string"?{role:"user",parts:[{text:e}]}:"parts"in e?{...e,parts:e.parts?this.toParts(e.parts.filter(n=>n!=null)):[]}:{role:"user",parts:[this.toPart(e)]}}toParts(e){return e.map(n=>this.toPart(n))}toPart(e){if(typeof e=="string")return{text:e};if("thought"in e&&e.thought){let n=`[Thought: ${e.thought}]`,o={...e};if(delete o.thought,"functionCall"in o||"functionResponse"in o||"inlineData"in o||"fileData"in o)return o;let r=o.text,a=r?String(r):"",s=a?`${a}
8
- ${n}`:n;return{...o,text:s}}return e}};f();function Pt(t){switch(t){case"openai":return"OPENAI_API_KEY";case"anthropic":return"ANTHROPIC_API_KEY";case"gemini":return"GEMINI_API_KEY";case"vertex-ai":return"GOOGLE_API_KEY";default:return"API_KEY"}}function Et(t){switch(t){case"openai":return"OPENAI_MODEL";case"anthropic":return"ANTHROPIC_MODEL";case"gemini":return"GEMINI_MODEL";case"vertex-ai":return"GOOGLE_MODEL";default:return"MODEL"}}var O=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},ue=class extends O{code="STRICT_MISSING_CREDENTIALS";constructor(e,n,o){let i=e||"(unknown)",r=n||"(unknown)";super(`Missing credentials for modelProviders model '${r}'. `+(o?`Current configured envKey: '${o}'. Set that environment variable, or update modelProviders.${i}[].envKey.`:`Configure modelProviders.${i}[].envKey and set that environment variable.`))}},pe=class extends O{code="STRICT_MISSING_MODEL_ID";constructor(e){super(`Missing model id for strict modelProviders resolution (authType: ${e}).`)}},ge=class extends O{code="MISSING_API_KEY";constructor(e){super(`Missing API key for ${e.authType} auth. Current model: '${e.model||"(unknown)"}', baseUrl: '${e.baseUrl||"(default)"}'. Provide an API key via settings (security.auth.apiKey), or set the environment variable '${e.envKey}'.`)}},fe=class extends O{code="MISSING_MODEL";constructor(e){super(`Missing model for ${e.authType} auth. Set the environment variable '${e.envKey}'.`)}},he=class extends O{code="MISSING_BASE_URL";constructor(e){super(`Missing baseUrl for modelProviders model '${e.model||"(unknown)"}'. Configure modelProviders.${e.authType||"(unknown)"}[].baseUrl.`)}},me=class extends O{code="MISSING_ANTHROPIC_BASE_URL_ENV";constructor(){super("ANTHROPIC_BASE_URL environment variable not found.")}};f();import bn from"node:process";f();var Ot={image:!0,pdf:!0,audio:!0,video:!0},xn=[[/^gemini-3/,Ot],[/^gemini-/,Ot],[/^gpt-5/,{image:!0}],[/^gpt-/,{image:!0}],[/^o\d/,{image:!0}],[/^claude-/,{image:!0,pdf:!0}],[/^matilda3\.5-plus/,{image:!0,video:!0}],[/^matilda3\.6-plus/,{image:!0,video:!0}],[/^matilda3\.7-plus/,{image:!0,video:!0}],[/^coder-model$/,{image:!0,video:!0}],[/^matilda-vl-/,{image:!0,video:!0}],[/^matilda3-vl-/,{image:!0,video:!0}],[/^matilda-code$/,{}],[/^matilda3-coder-/,{}],[/^matilda3\.6-35b/,{image:!0,video:!0}],[/^matilda/,{}],[/^deepseek/,{}],[/^glm-4\.5v/,{image:!0}],[/^glm-5(?:-|$)/,{}],[/^glm-/,{}],[/^minimax-m3/i,{image:!0,video:!0}],[/^minimax-/,{}],[/^kimi-k2\.5/,{image:!0,video:!0}],[/^kimi-/,{}],[/^doubao-seed(ance|ream)/,{}],[/^doubao-seed/,{image:!0}],[/^doubao-.*(vision|vl)/,{image:!0}],[/^doubao/,{}]];function q(t){let e=at(t);for(let[n,o]of xn)if(n.test(e))return{...o};return{}}f();var Ut=class t{modelRegistry;currentAuthType;_generationConfig;generationConfigSources;strictModelProviderSelection=!1;requireCachedMatildaCredentialsOnce=!1;hasManualCredentials=!1;onModelChange;authTypeWasExplicitlyProvided;runtimeModelSnapshots=new Map;activeRuntimeModelSnapshotId;static deepClone(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>t.deepClone(o));let n={};for(let o of Object.keys(e))n[o]=t.deepClone(e[o]);return n}constructor(e={}){this.modelRegistry=new Ce(e.modelProvidersConfig),this.onModelChange=e.onModelChange,this._generationConfig={...e.generationConfig||{}},this.generationConfigSources=e.generationConfigSources||{},this.authTypeWasExplicitlyProvided=e.initialAuthType!==void 0,this.currentAuthType=e.initialAuthType}createStateSnapshotForRollback(){return{currentAuthType:this.currentAuthType,generationConfig:t.deepClone(this._generationConfig),generationConfigSources:t.deepClone(this.generationConfigSources),strictModelProviderSelection:this.strictModelProviderSelection,requireCachedMatildaCredentialsOnce:this.requireCachedMatildaCredentialsOnce,hasManualCredentials:this.hasManualCredentials,activeRuntimeModelSnapshotId:this.activeRuntimeModelSnapshotId}}rollbackToStateSnapshot(e){this.currentAuthType=e.currentAuthType,this._generationConfig=e.generationConfig,this.generationConfigSources=e.generationConfigSources,this.strictModelProviderSelection=e.strictModelProviderSelection,this.requireCachedMatildaCredentialsOnce=e.requireCachedMatildaCredentialsOnce,this.hasManualCredentials=e.hasManualCredentials,this.activeRuntimeModelSnapshotId=e.activeRuntimeModelSnapshotId}getModel(){return this._generationConfig.model||U}getCurrentAuthType(){return this.currentAuthType}wasAuthTypeExplicitlyProvided(){return this.authTypeWasExplicitlyProvided}getAvailableModels(){return this.currentAuthType?this.modelRegistry.getModelsForAuthType(this.currentAuthType):[]}getAvailableModelsForAuthType(e){return this.modelRegistry.getModelsForAuthType(e)}getAllConfiguredModels(e){let n=e&&e.length>0?e:Object.values(G),o=new Set,i=[];for(let l of n)o.has(l)||(o.add(l),i.push(l));let r=[];i.includes("matilda-oauth")&&r.push("matilda-oauth");for(let l of i)l!=="matilda-oauth"&&r.push(l);let a=this.getRuntimeModelOption(),s=[];for(let l of r)a&&a.authType===l&&s.push(a),s.push(...this.modelRegistry.getModelsForAuthType(l));return s}hasModel(e,n){return this.modelRegistry.hasModel(e,n)}getResolvedModel(e,n){return this.modelRegistry.getModel(e,n)}getModelDisplayName(e){return this.currentAuthType?this.modelRegistry.getModel(this.currentAuthType,e)?.name??e:e}async setModel(e,n){if(this.currentAuthType==="matilda-oauth"&&e===U){this.strictModelProviderSelection=!1,this._generationConfig.model=e,this.generationConfigSources.model={kind:"programmatic",detail:n?.reason||"setModel"},this.onModelChange&&await this.onModelChange("matilda-oauth",!1);return}if(this.currentAuthType&&this.modelRegistry.hasModel(this.currentAuthType,e)){await this.switchModel(this.currentAuthType,e);return}let o=this.createStateSnapshotForRollback();try{this.strictModelProviderSelection=!1,this._generationConfig.model=e,this.generationConfigSources.model={kind:"programmatic",detail:n?.reason||"setModel"},this.applyRawModelDerivedDefaults(e),this.onModelChange&&this.currentAuthType&&await this.onModelChange(this.currentAuthType,!0)}catch(i){throw this.rollbackToStateSnapshot(o),i}}applyRawModelDerivedDefaults(e){this.shouldUpdateModelDerivedDefault("modalities")&&(this._generationConfig.modalities=q(e),this.generationConfigSources.modalities={kind:"computed",detail:"auto-detected from model"}),this.shouldUpdateModelDerivedDefault("contextWindowSize")&&(this._generationConfig.contextWindowSize=W(e,"input"),this.generationConfigSources.contextWindowSize={kind:"computed",detail:"auto-detected from model"})}shouldUpdateModelDerivedDefault(e){let n=this.generationConfigSources[e];return n===void 0||n.kind==="computed"||n.kind==="default"||n.kind==="modelProviders"||n.kind==="programmatic"||n.kind==="unknown"}async switchModel(e,n,o){let i=this.extractRuntimeModelSnapshotId(n);if(i){await this.switchToRuntimeModel(i);return}let r=this.createStateSnapshotForRollback();e==="matilda-oauth"&&o?.requireCachedCredentials&&(this.requireCachedMatildaCredentialsOnce=!0);try{let a=e!==this.currentAuthType;this.currentAuthType=e;let s=this.modelRegistry.getModel(e,n,o?.baseUrl);if(!s)throw new Error(`Model '${n}' not found for authType '${e}'`);let l=r.generationConfig.model||"",d=!a&&l?this.modelRegistry.getModel(e,l,r.generationConfig.baseUrl)??this.modelRegistry.getModel(e,l):void 0,c=e!=="matilda-oauth"&&!a&&!!r.generationConfig.apiKey&&!!s.envKey&&d?.envKey===s.envKey&&d.baseUrl===s.baseUrl,g=c?r.generationConfig.apiKey:void 0,u=c?r.generationConfigSources.apiKey:void 0;this.applyResolvedModelDefaults(s),!this._generationConfig.apiKey&&g&&(this._generationConfig.apiKey=g,u&&(this.generationConfigSources.apiKey=t.deepClone(u))),this.activeRuntimeModelSnapshotId=void 0;let m=a?!0:this.checkRequiresRefresh(l);this.onModelChange&&await this.onModelChange(e,m)}catch(a){throw this.rollbackToStateSnapshot(r),a}}buildRuntimeModelSnapshotId(e,n){return`${se}${e}|${n}`}extractRuntimeModelSnapshotId(e){if(e.startsWith(se))return this.runtimeModelSnapshots.has(e)?e:void 0;if(this.runtimeModelSnapshots.has(e))return e}getGenerationConfig(){return this._generationConfig}getGenerationConfigSources(){return this.generationConfigSources}mergeSettingsGenerationConfig(e){if(e)for(let n of le)!(n in this._generationConfig)&&n in e&&(this._generationConfig[n]=e[n],this.generationConfigSources[n]={kind:"settings",detail:`model.generationConfig.${n}`})}updateCredentials(e,n){(e.apiKey||e.baseUrl||e.model)&&(this.hasManualCredentials=!0,this.clearProviderSourcedConfig()),e.apiKey&&(this._generationConfig.apiKey=e.apiKey,this.generationConfigSources.apiKey={kind:"programmatic",detail:"updateCredentials"}),e.baseUrl&&(this._generationConfig.baseUrl=e.baseUrl,this.generationConfigSources.baseUrl={kind:"programmatic",detail:"updateCredentials"}),e.model&&(this._generationConfig.model=e.model,this.generationConfigSources.model={kind:"programmatic",detail:"updateCredentials"}),this.strictModelProviderSelection=!1,this._generationConfig.apiKeyEnvKey=void 0,n&&this.mergeSettingsGenerationConfig(n),this.syncRuntimeModelSnapshotWithCredentials()}syncRuntimeModelSnapshotWithCredentials(){let e=this.currentAuthType,{model:n,apiKey:o,baseUrl:i}=this._generationConfig;if(!(!n||!e||!o||!i)&&!this.modelRegistry.hasModel(e,n,i))if(this.activeRuntimeModelSnapshotId&&this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)){let r=this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId);r.apiKey=o,r.baseUrl=i,r.modelId=n;let a=this.buildRuntimeModelSnapshotId(r.authType,r.modelId);a!==r.id&&(this.runtimeModelSnapshots.delete(r.id),r.id=a,this.runtimeModelSnapshots.set(a,r),this.activeRuntimeModelSnapshotId=a),r.createdAt=Date.now()}else this.detectAndCaptureRuntimeModel()}clearProviderSourcedConfig(){for(let e of de)this.generationConfigSources[e]?.kind==="modelProviders"&&(delete this._generationConfig[e],delete this.generationConfigSources[e])}isStrictModelProviderSelection(){return this.strictModelProviderSelection}resetStrictModelProviderSelection(){this.strictModelProviderSelection=!1}consumeRequireCachedCredentialsFlag(){let e=this.requireCachedMatildaCredentialsOnce;return this.requireCachedMatildaCredentialsOnce=!1,e}applyResolvedModelDefaults(e){if(this.strictModelProviderSelection=!0,this.hasManualCredentials=!1,this._generationConfig.model=e.id,this.generationConfigSources.model={kind:"modelProviders",authType:e.authType,modelId:e.id,detail:"model.id"},this.currentAuthType==="matilda-oauth"?(this._generationConfig.apiKey="MATILDA_OAUTH_DYNAMIC_TOKEN",this.generationConfigSources.apiKey={kind:"computed",detail:"Matilda OAuth placeholder token"},this._generationConfig.apiKeyEnvKey=void 0,delete this.generationConfigSources.apiKeyEnvKey):(this._generationConfig.apiKey=void 0,this._generationConfig.apiKeyEnvKey=void 0),e.envKey!==void 0){let o=bn.env[e.envKey];o&&(this._generationConfig.apiKey=o,this.generationConfigSources.apiKey={kind:"env",envKey:e.envKey,via:{kind:"modelProviders",authType:e.authType,modelId:e.id,detail:"envKey"}}),this._generationConfig.apiKeyEnvKey=e.envKey,this.generationConfigSources.apiKeyEnvKey={kind:"modelProviders",authType:e.authType,modelId:e.id,detail:"envKey"}}this._generationConfig.baseUrl=e.baseUrl,this.generationConfigSources.baseUrl={kind:"modelProviders",authType:e.authType,modelId:e.id,detail:"baseUrl"};let n=e.generationConfig;for(let o of le)this._generationConfig[o]=n[o],this.generationConfigSources[o]={kind:"modelProviders",authType:e.authType,modelId:e.id,detail:`generationConfig.${o}`};n.contextWindowSize===void 0&&(this._generationConfig.contextWindowSize=W(e.id,"input"),this.generationConfigSources.contextWindowSize={kind:"computed",detail:"auto-detected from model"}),n.modalities===void 0&&(this._generationConfig.modalities=q(e.id),this.generationConfigSources.modalities={kind:"computed",detail:"auto-detected from model"})}checkRequiresRefresh(e){let n=this.currentAuthType;if(!n)return!0;if(n==="matilda-oauth")return!1;let o=this.modelRegistry.getModel(n,this._generationConfig.model||"",this._generationConfig.baseUrl||void 0),i=this.modelRegistry.getModel(n,e);return!i||!o||i.envKey!==o.envKey||i.baseUrl!==o.baseUrl}syncAfterAuthRefresh(e,n){this.strictModelProviderSelection=!1;let o=this.currentAuthType;this.currentAuthType=e;let i=this.generationConfigSources.baseUrl?.kind==="modelProviders"?this._generationConfig.baseUrl:void 0,r=n?this.modelRegistry.getModel(e,n,i)??this.modelRegistry.getModel(e,n):void 0;if(r){let m=this.generationConfigSources.baseUrl?.kind==="modelProviders"&&(this._generationConfig.apiKeyEnvKey!==r.envKey||this._generationConfig.baseUrl!==r.baseUrl),h=o===e&&this._generationConfig.model===n&&!m,p=h?this._generationConfig.apiKey:void 0,C=h&&this.generationConfigSources.apiKey?{...this.generationConfigSources.apiKey}:void 0,y=this.generationConfigSources.baseUrl,T=h&&!!this._generationConfig.baseUrl&&(y?.kind==="cli"||y?.kind==="env"||y?.kind==="settings"),S=T?this._generationConfig.baseUrl:void 0,R=T&&y?{...y}:void 0;this.applyResolvedModelDefaults(r),h&&!this._generationConfig.apiKey&&p&&(this._generationConfig.apiKey=p,C&&(this.generationConfigSources.apiKey=C)),S&&(this._generationConfig.baseUrl=S,R&&(this.generationConfigSources.baseUrl=R)),this.strictModelProviderSelection=!0,this.activeRuntimeModelSnapshotId=void 0;return}let a=this.generationConfigSources.apiKey,s=this.generationConfigSources.baseUrl,l=this._generationConfig.apiKey&&a?.kind!=="modelProviders"||this._generationConfig.baseUrl&&s?.kind!=="modelProviders";if(!(o!==e)&&(n===void 0||!this.modelRegistry.hasModel(e,n))&&(this.hasManualCredentials||l)){n&&(this._generationConfig.model=n,this.generationConfigSources.model||(this.generationConfigSources.model={kind:"programmatic",detail:"auth refresh (preserved credentials)"}));return}let g=this.modelRegistry.getDefaultModelForAuthType(e);if(g){this.applyResolvedModelDefaults(g),this.activeRuntimeModelSnapshotId=void 0;return}n&&(this._generationConfig.model=n,this.generationConfigSources.model||(this.generationConfigSources.model={kind:"programmatic",detail:"auth refresh (no default model)"}))}setOnModelChange(e){this.onModelChange=e}detectAndCaptureRuntimeModel(){let{model:e,apiKey:n,baseUrl:o,apiKeyEnvKey:i,...r}=this._generationConfig,a=this.currentAuthType;if(!e||!a)return;if(this.modelRegistry.hasModel(a,e,o)){this.clearRuntimeModelSnapshotForAuthType(a);return}if(!(this._generationConfig.apiKey&&this._generationConfig.baseUrl))return;let l=this.buildRuntimeModelSnapshotId(a,e),d={id:l,authType:a,modelId:e,apiKey:n,baseUrl:o,apiKeyEnvKey:i,generationConfig:r,sources:{...this.generationConfigSources},createdAt:Date.now()};return this.runtimeModelSnapshots.set(l,d),this.activeRuntimeModelSnapshotId=l,this.cleanupOldRuntimeModelSnapshots(),l}getActiveRuntimeModelSnapshot(){if(this.activeRuntimeModelSnapshotId)return this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId)}getActiveRuntimeModelSnapshotId(){return this.activeRuntimeModelSnapshotId}async switchToRuntimeModel(e){let n=this.runtimeModelSnapshots.get(e);if(!n)throw new Error(`Runtime model snapshot '${e}' not found`);let o=this.createStateSnapshotForRollback();try{let i=n.authType!==this.currentAuthType;this.currentAuthType=n.authType,this.activeRuntimeModelSnapshotId=e,this.strictModelProviderSelection=!1,this.hasManualCredentials=!0,this._generationConfig.model=n.modelId,this.generationConfigSources.model={kind:"programmatic",detail:"runtimeModelSwitch"},n.apiKey&&(this._generationConfig.apiKey=n.apiKey,this.generationConfigSources.apiKey=n.sources.apiKey||{kind:"programmatic",detail:"runtimeModelSwitch"}),n.baseUrl&&(this._generationConfig.baseUrl=n.baseUrl,this.generationConfigSources.baseUrl=n.sources.baseUrl||{kind:"programmatic",detail:"runtimeModelSwitch"}),n.apiKeyEnvKey&&(this._generationConfig.apiKeyEnvKey=n.apiKeyEnvKey),n.generationConfig&&Object.assign(this._generationConfig,n.generationConfig);let r=i;this.onModelChange&&await this.onModelChange(n.authType,r)}catch(i){throw this.rollbackToStateSnapshot(o),i}}getRuntimeModelOption(){let e=this.getActiveRuntimeModelSnapshot();if(e)return{id:e.modelId,label:e.modelId,authType:e.authType,isVision:!1,contextWindowSize:e.generationConfig?.contextWindowSize,isRuntimeModel:!0,runtimeSnapshotId:e.id}}clearRuntimeModelSnapshotForAuthType(e){for(let[n,o]of this.runtimeModelSnapshots.entries())o.authType===e&&(this.runtimeModelSnapshots.delete(n),this.activeRuntimeModelSnapshotId===n&&(this.activeRuntimeModelSnapshotId=void 0))}cleanupOldRuntimeModelSnapshots(){let e=new Map;for(let n of this.runtimeModelSnapshots.values()){let o=e.get(n.authType);(!o||n.createdAt>o.createdAt)&&e.set(n.authType,n)}this.runtimeModelSnapshots.clear();for(let n of e.values())this.runtimeModelSnapshots.set(n.id,n);this.activeRuntimeModelSnapshotId&&!this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)&&(this.activeRuntimeModelSnapshotId=void 0)}reloadModelProvidersConfig(e){this.modelRegistry.reloadModels(e)}};f();import{readFileSync as jn}from"node:fs";import{join as Hn}from"node:path";f();f();import{randomBytes as In,createHash as kn}from"node:crypto";function Lt(t){return t==="localhost"||t==="127.0.0.1"||t==="::1"||t==="[::1]"}function Le(){let t=In(32).toString("base64url"),e=kn("sha256").update(t).digest("base64url");return{codeVerifier:t,codeChallenge:e}}function Y(t,e){return{accessToken:t.access_token,refreshToken:t.refresh_token??e?.refreshToken,expiresAt:Date.now()+(t.expires_in??3600)*1e3,idToken:t.id_token??e?.idToken}}async function De(t){let e=t.replace(/\/+$/,""),n=new URL("/.well-known/oauth-authorization-server",e);if(n.protocol!=="https:"&&!Lt(n.hostname))throw new Error(`Refusing OAuth discovery over insecure transport: ${n.origin}`);let o=await fetch(n,{headers:{accept:"application/json"}});if(!o.ok)throw new Error(`OAuth discovery failed (${o.status}) for ${n.origin}`);let i=await o.json();if(!i.issuer||!i.authorization_endpoint||!i.token_endpoint)throw new Error(`OAuth discovery document missing required fields for ${n.origin}`);return{issuer:i.issuer,authorization_endpoint:i.authorization_endpoint,token_endpoint:i.token_endpoint,device_authorization_endpoint:i.device_authorization_endpoint}}f();import{promises as ye,openSync as wn,closeSync as Rn,unlinkSync as Dt,statSync as Pn}from"node:fs";import{dirname as En}from"node:path";var On=1e4,Un=3e4,Ln=50;function Ge(t){let e=async()=>{try{let i=await ye.readFile(t,"utf8"),r=JSON.parse(i);return r&&typeof r=="object"?r:{}}catch(i){if(i.code==="ENOENT")return{};throw i}},n=async i=>{await ye.mkdir(En(t),{recursive:!0}),await ye.writeFile(t,JSON.stringify(i,null,2),{mode:384}),await ye.chmod(t,384).catch(()=>{})};return{store:{async get(i){return(await e())[i]??null},async set(i,r){let a=await e();a[i]=r,await n(a)},async remove(i){let r=await e();i in r&&(delete r[i],await n(r))}},lock:Dn(`${t}.lock`)}}function Dn(t){let e=Promise.resolve();return n=>{let o=e.then(async()=>{await Gn(t);try{return await n()}finally{Nn(t)}});return e=o.then(()=>{},()=>{}),o}}async function Gn(t){let e=Date.now()+On;for(;;)try{Rn(wn(t,"wx"));return}catch(n){if(n.code!=="EEXIST")throw n;try{if(Date.now()-Pn(t).mtimeMs>Un){Dt(t);continue}}catch{continue}if(Date.now()>e)throw new Error(`Timed out acquiring credential lock at ${t}`);await Kn(Ln)}}function Nn(t){try{Dt(t)}catch{}}function Kn(t){return new Promise(e=>setTimeout(e,t))}f();var $=class extends Error{code="invalid_grant";constructor(e="Refresh token is no longer valid \u2014 sign in again."){super(e),this.name="InvalidGrantError"}};function Ne(t){let e=t.storageKey??"default",n=t.fetchImpl??fetch,o=t.expirySkewMs??6e4,i=null,r=async()=>{let l=await t.store.get(e);if(!l)return null;try{let d=JSON.parse(l);return d.accessToken?d:null}catch{return null}},a=l=>l.expiresAt-Date.now()>o,s=l=>t.lock(async()=>{let d=await r()??l;if(d.accessToken!==l.accessToken&&a(d))return d.accessToken;if(!d.refreshToken)throw new $("No refresh token available \u2014 sign in again.");let c=await n(t.tokenEndpoint,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",client_id:t.clientId,refresh_token:d.refreshToken})});if(!c.ok){let m=await c.text().catch(()=>"");throw c.status>=400&&c.status<500&&Fn(m)==="invalid_grant"?(await t.store.remove(e),new $):new Error(`Token refresh failed (${c.status})`)}let g=await c.json(),u=Y(g,d);return await t.store.set(e,JSON.stringify(u)),u.accessToken});return{async getAccessToken(l){let d=await r();if(!d)throw new $("Not signed in.");return!l?.forceRefresh&&a(d)?d.accessToken:(i||(i=s(d).finally(()=>{i=null})),i)}}}function Fn(t){try{return JSON.parse(t).error}catch{return}}f();import{createServer as $n}from"node:http";import{randomBytes as zn}from"node:crypto";async function Ke(t){if(t.transport.kind!=="loopback")throw new Error(`Unsupported login transport: ${t.transport.kind}`);if(t.signal?.aborted)throw new Error("Login aborted");let e=h=>t.onEvent?.(h),{codeVerifier:n,codeChallenge:o}=Le(),i=zn(16).toString("hex"),r=t.timeoutMs??5*60*1e3,a=t.transport.successRedirect;e({type:"state",status:"idle"});let s,l,d=new Promise((h,p)=>{s=h,l=p});d.catch(()=>{});let c=$n((h,p)=>{let C=new URL(h.url??"/","http://127.0.0.1");if(C.pathname!=="/callback"){p.writeHead(404).end();return}let y=C.searchParams.get("error"),T=C.searchParams.get("state"),S=C.searchParams.get("code");if(y){Gt(p,a,()=>l(new Error(`OAuth error: ${y}`)));return}if(T!==i){p.writeHead(400).end("State mismatch"),l(new Error("OAuth state mismatch"));return}if(!S){p.writeHead(400).end("Missing authorization code");return}Gt(p,a,()=>s(S))}),g=await new Promise((h,p)=>{c.once("error",p),c.listen(t.transport.port??0,"127.0.0.1",()=>{h(c.address().port)})}),u=setTimeout(()=>l(new Error("Login timed out \u2014 no callback received")),r),m=()=>l(new Error("Login aborted"));t.signal?.addEventListener("abort",m,{once:!0});try{let h=`http://127.0.0.1:${g}/callback`,p=new URL(t.metadata.authorization_endpoint);p.searchParams.set("client_id",t.clientId),p.searchParams.set("response_type","code"),p.searchParams.set("redirect_uri",h),p.searchParams.set("code_challenge",o),p.searchParams.set("code_challenge_method","S256"),p.searchParams.set("state",i),p.searchParams.set("scope",t.scope??"openid offline_access");let C=p.toString();e({type:"authorize_url",url:C}),e({type:"state",status:"awaiting_user"}),t.openBrowser&&await t.openBrowser(C);let y=await d;e({type:"state",status:"exchanging"});let T=await fetch(t.metadata.token_endpoint,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:t.clientId,code:y,code_verifier:n,redirect_uri:h})});if(!T.ok){let R=await T.text().catch(()=>"");throw new Error(`Token exchange failed (${T.status}): ${R}`)}let S=Y(await T.json());return e({type:"state",status:"authenticated"}),S}catch(h){throw e({type:"state",status:"error"}),h}finally{clearTimeout(u),t.signal?.removeEventListener("abort",m),c.close()}}function Gt(t,e,n){t.writeHead(302,{location:e}).end(n)}var Fe="matilda-code",Te="MATILDA_API_KEY",Bn="openid profile email offline_access matilda:code",Ae="matilda";function $e(t){return t.trim().replace(/\/+$/,"").replace(/\/api\/v1(?:\/code)?$/i,"")}function Nt(){return Hn(Ye.getGlobalMatildaDir(),"matilda-auth.json")}function ze(){return Ge(Nt())}function Wn(t){if(!t)return{};try{let e=t.split(".")[1],n=Buffer.from(e.replace(/-/g,"+").replace(/_/g,"/"),"base64").toString("utf8"),o=JSON.parse(n);return{sub:o.sub,email:o.email,name:o.name}}catch{return{}}}function Vn(t,e){let n=Wn(t.idToken);return{accessToken:t.accessToken,accessTokenExpiresAt:t.expiresAt,refreshToken:t.refreshToken??"",userId:n.sub,email:n.email,displayName:n.name,baseUrl:e}}async function Kt(t){try{return await De(t)}catch{return{issuer:t,authorization_endpoint:`${t}/api/auth/oauth/authorize`,token_endpoint:`${t}/api/auth/oauth/token`,device_authorization_endpoint:`${t}/api/auth/oauth/device/code`}}}function N(){try{let t=jn(Nt(),"utf8"),n=JSON.parse(t)[Ae];if(!n)return null;let o=JSON.parse(n);return typeof o?.accessToken=="string"&&typeof o?.baseUrl=="string"?o:null}catch{return null}}async function Jn(t){await ze().store.set(Ae,JSON.stringify(t)),process.env[Te]=t.accessToken}async function qn(){await ze().store.remove(Ae),delete process.env[Te]}function gr(){let t=N();return t?{authenticated:!0,userId:t.userId,email:t.email,displayName:t.displayName,baseUrl:t.baseUrl,accessTokenExpiresAt:t.accessTokenExpiresAt}:{authenticated:!1}}async function fr(t){let e=N();if(e?.accessToken){let n=$e(e.baseUrl);await fetch(`${n}/api/auth/logout`,{method:"POST",headers:{authorization:`Bearer ${e.accessToken}`,"content-type":"application/json"},body:JSON.stringify(e.refreshToken?{refreshToken:e.refreshToken}:{}),signal:t?.signal??AbortSignal.timeout(5e3)}).catch(()=>{})}await qn()}async function je(t){let e=N();if(!e||t?.baseUrl&&e.baseUrl!==t.baseUrl)return t?.fallbackAccessToken??process.env[Te]??"";let n=$e(e.baseUrl),o=await Kt(n),{store:i,lock:r}=ze(),s=await Yn(i,r,o.token_endpoint,e.baseUrl,t?.signal).getAccessToken({forceRefresh:t?.forceRefresh});return process.env[Te]=s,s}async function hr(){await je();let t=N();if(!t)throw new Error("No Matilda credentials to refresh \u2014 sign in again.");return t}function Yn(t,e,n,o,i){return Ne({tokenEndpoint:n,clientId:Fe,store:{get:async s=>{let l=JSON.parse(await t.get(s)??"{}");if(!l.accessToken)return null;let d={accessToken:l.accessToken,refreshToken:l.refreshToken,expiresAt:l.accessTokenExpiresAt};return JSON.stringify(d)},set:async(s,l)=>{let d=JSON.parse(l),c=JSON.parse(await t.get(s)??"{}"),g={...c,accessToken:d.accessToken,accessTokenExpiresAt:d.expiresAt,refreshToken:d.refreshToken??c.refreshToken??"",baseUrl:c.baseUrl??o};await t.set(s,JSON.stringify(g))},remove:s=>t.remove(s)},storageKey:Ae,lock:e,fetchImpl:(s,l)=>fetch(s,{...l,signal:i})})}async function mr(t){let e=$e(t.baseUrl),n=await Kt(e),o="",i=s=>Ke({metadata:n,clientId:Fe,scope:s,transport:{kind:"loopback",successRedirect:`${e}/api/auth/oauth/success?client_id=${encodeURIComponent(Fe)}`},signal:t.signal,onEvent:l=>{l.type==="authorize_url"&&(o=l.url,t.onAuthorizeUrl?.(l.url))},openBrowser:async l=>{if(t.openBrowser===!1||process.env.MATILDA_AUTH_SKIP_BROWSER==="1")return;let{default:d}=await import("./open-QQ7FWG4A.js");await d(l).catch(()=>{})}}),r;try{r=await i(Bn)}catch(s){if(s instanceof Error&&s.message.includes("invalid_scope"))r=await i("openid offline_access");else throw s}let a=Vn(r,t.baseUrl);return await Jn(a),{...a,authorizeUrl:o}}var G=(r=>(r.USE_OPENAI="openai",r.MATILDA_OAUTH="matilda-oauth",r.USE_GEMINI="gemini",r.USE_VERTEX_AI="vertex-ai",r.USE_ANTHROPIC="anthropic",r))(G||{}),Xn="MATILDA_AGENT_SDK",Me="MATILDA_API_KEY";function Zn(t){if(t.apiKey||t.apiKeyEnvKey!==Me)return;let e=N();e?.accessToken&&(t.apiKey=e.accessToken,process.env[Me]=e.accessToken)}async function Qn(t){if(t.apiKeyEnvKey!==Me)return;let e=N();if(!e?.accessToken)return;let n=await je({baseUrl:t.baseUrl,fallbackAccessToken:e.accessToken});n&&(t.apiKey=n,process.env[Me]=n)}function eo(t){return t.matildaAgentSdk===!0||process.env[Xn]==="1"}function He(t,e,n){t[e]=n}function to(t,e){return t?.[e]}function no(t,e,n,o,i){let r={...o||{}},a=i?.strictModelProvider===!0,s={...n||{},authType:e,proxy:t?.getProxy()};He(r,"authType",{kind:"computed",detail:"provided by caller"}),t?.getProxy()&&He(r,"proxy",{kind:"computed",detail:"Config.getProxy()"});let l=c=>to(o,c)??{kind:"unknown"};for(let c of de)n&&c in n&&!r[c]&&He(r,c,l(c));Zn(s);let d=$t(s,a);if(!d.valid)throw new Error(d.errors.map(c=>c.message).join(`
9
- `));return{config:s,sources:r}}function $t(t,e=!1){let n=[];if(t.authType==="matilda-oauth")return{valid:!0,errors:[]};if(!t.apiKey)if(e)n.push(new ue(t.authType,t.model,t.apiKeyEnvKey));else{let o=t.apiKeyEnvKey||Pt(t.authType);n.push(new ge({authType:t.authType,model:t.model,baseUrl:t.baseUrl,envKey:o}))}if(!t.model)if(e)n.push(new pe(t.authType));else{let o=Et(t.authType);n.push(new fe({authType:t.authType,envKey:o}))}return t.authType==="anthropic"&&!t.baseUrl&&(e?n.push(new he({authType:t.authType,model:t.model})):t.authType==="anthropic"&&n.push(new me)),{valid:n.length===0,errors:n}}function vr(t,e,n){return no(t,e,n).config}function Ft(t){let e=t;for(;e instanceof Error;){if("code"in e&&e.code==="ERR_MODULE_NOT_FOUND")return e;e=e.cause}}async function _r(t,e,n){await Qn(t);let o=$t(t,!1);if(!o.valid)throw new Error(o.errors.map(a=>a.message).join(`
10
- `));let i=t.authType;if(!i)throw new Error("ContentGeneratorConfig must have an authType");let r;try{if(i==="openai")if(eo(t)){let{createMatildaAgentContentGenerator:a}=await import("./matildaAgentContentGenerator-B7FZY5QT.js");r=a(t,e)}else{let{createOpenAIContentGenerator:a}=await import("./openaiContentGenerator-A42WRFRC.js");r=a(t,e)}else if(i==="matilda-oauth"){let{getMatildaOAuthClient:a}=await import("./matildaOAuth2-2IUZAZEO.js"),{MatildaContentGenerator:s}=await import("./matildaContentGenerator-DQOUSFU3.js");try{let l=await a(e,n?{requireCachedCredentials:!0}:void 0);r=new s(l,t,e)}catch(l){throw Ft(l)?l:new Error(l instanceof Error?l.message:String(l))}}else if(i==="anthropic"){let{createAnthropicContentGenerator:a}=await import("./anthropicContentGenerator-BRG6WZK3.js");r=a(t,e)}else if(i==="gemini"||i==="vertex-ai"){let{createGeminiContentGenerator:a}=await import("./geminiContentGenerator-35P4NFWN.js");r=a(t,e)}else throw new Error(`Error creating contentGenerator: Unsupported authType: ${i}`)}catch(a){let s=Ft(a);throw s?new Error(`Matilda was updated in the background and needs to be restarted.
11
- Please exit and restart Matilda to use the '${i}' provider.`,{cause:s}):a}return new J(r,e,t)}var Be=b("MODEL_REGISTRY");function zt(t){if(Object.values(G).includes(t))return t}function oo(t){return/^minimax-m3/i.test(t.trim().toLowerCase())}function jt(t,e){return e?`${t}\0${e}`:t}var Ce=class{modelsByAuthType;getDefaultBaseUrl(e){switch(e){case"matilda-oauth":return"DYNAMIC_MATILDA_OAUTH_BASE_URL";case"openai":return st;default:return""}}constructor(e){if(this.modelsByAuthType=new Map,this.registerAuthTypeModels("matilda-oauth",ce),e)for(let[n,o]of Object.entries(e)){let i=zt(n);if(!i){Be.warn(`Invalid authType key "${n}" in modelProviders config. Expected one of: ${Object.values(G).join(", ")}. Skipping.`);continue}i!=="matilda-oauth"&&this.registerAuthTypeModels(i,o)}}registerAuthTypeModels(e,n){let o=new Map;for(let i of n){let r=jt(i.id,i.baseUrl);if(o.has(r)){Be.warn(`Duplicate model id "${i.id}"${i.baseUrl?` with baseUrl "${i.baseUrl}"`:""} for authType "${e}". Using the first registered config.`);continue}let a=this.resolveModelConfig(i,e);o.set(r,a)}this.modelsByAuthType.set(e,o)}getModelsForAuthType(e){let n=this.modelsByAuthType.get(e);return n?Array.from(n.values()).map(o=>({id:o.id,label:o.name,description:o.description,capabilities:o.capabilities,authType:o.authType,isVision:o.capabilities?.vision??!1,contextWindowSize:o.generationConfig.contextWindowSize??W(o.id),modalities:o.generationConfig.modalities,baseUrl:o.baseUrl,envKey:o.envKey})):[]}getModel(e,n,o){let i=this.modelsByAuthType.get(e);if(!i)return;if(o)return i.get(jt(n,o));let r=i.get(n);if(r)return r;for(let a of i.values())if(a.id===n)return a}hasModel(e,n,o){return this.getModel(e,n,o)!==void 0}getDefaultModelForAuthType(e){if(e==="matilda-oauth")return this.getModel(e,U);let n=this.modelsByAuthType.get(e);if(!(!n||n.size===0))return Array.from(n.values())[0]}resolveModelConfig(e,n){this.validateModelConfig(e,n);let o={...e.generationConfig??{}};return(o.modalities===void 0||oo(e.id))&&(o.modalities=q(e.id)),{...e,authType:n,name:e.name||e.id,baseUrl:e.baseUrl||this.getDefaultBaseUrl(n),generationConfig:o,capabilities:e.capabilities||{}}}validateModelConfig(e,n){if(!e.id)throw new Error(`Model config in authType '${n}' missing required field: id`)}reloadModels(e){for(let n of this.modelsByAuthType.keys())n!=="matilda-oauth"&&this.modelsByAuthType.delete(n);if(e)for(let[n,o]of Object.entries(e)){let i=zt(n);if(!i){Be.warn(`Invalid authType key "${n}" in modelProviders config. Expected one of: ${Object.values(G).join(", ")}. Skipping.`);continue}i!=="matilda-oauth"&&this.registerAuthTypeModels(i,o)}}};export{we as a,ne as b,bt as c,hn as d,V as e,Lo as f,kt as g,q as h,se as i,No as j,le as k,zo as l,jo as m,ce as n,Ho as o,jt as p,Ce as q,Ut as r,Nt as s,N as t,Jn as u,qn as v,gr as w,fr as x,je as y,hr as z,mr as A,G as B,no as C,$t as D,vr as E,_r as F};
12
- /**
13
- * @license
14
- * Copyright 2025 Matilda
15
- * SPDX-License-Identifier: Apache-2.0
16
- */
17
- /**
18
- * @license
19
- * Copyright 2025 Google LLC
20
- * SPDX-License-Identifier: Apache-2.0
21
- */
22
- /**
23
- * @license
24
- * Copyright 2025 Matilda Team
25
- * SPDX-License-Identifier: Apache-2.0
26
- */
27
- /**
28
- * @license
29
- * Copyright 2026 Matilda Team
30
- * SPDX-License-Identifier: Apache-2.0
31
- */
32
- /**
33
- * @license
34
- * Copyright 2026 Maincode
35
- * SPDX-License-Identifier: Apache-2.0
36
- *
37
- * Low-level OAuth primitives for core-auth's unified `/api/auth/oauth/*` flow
38
- * (ADR-029): PKCE pair generation, RFC 8414 discovery, the RFC 8628 device
39
- * grant, and refresh. Vendored (as source) from matilda-core's
40
- * `packages/client-sdk/src/auth.ts` and extended to carry the `id_token`
41
- * (display identity) that the higher-level flows need. Node built-ins only —
42
- * no third-party runtime dependencies.
43
- */
44
- /**
45
- * @license
46
- * Copyright 2026 Maincode
47
- * SPDX-License-Identifier: Apache-2.0
48
- *
49
- * File-backed token store + cross-process lock. The store persists a JSON map
50
- * (`{ [key]: value }`) at 0600 so callers can key several credentials in one
51
- * file; the lock is an O_EXCL lockfile that serialises refreshes across
52
- * processes (the guarantee a plaintext read/modify/write can't give).
53
- */
54
- /**
55
- * @license
56
- * Copyright 2026 Maincode
57
- * SPDX-License-Identifier: Apache-2.0
58
- *
59
- * Hardened access-token manager: returns a valid access token, refreshing via
60
- * core-auth's token endpoint when expired or forced. Single-flight within the
61
- * process, serialised across processes by the store's lock, carries a prior
62
- * refresh token forward when the response omits one, and evicts on a terminal
63
- * `invalid_grant` so a dead session doesn't wedge the caller in a refresh loop.
64
- */
65
- /**
66
- * @license
67
- * Copyright 2026 Maincode
68
- * SPDX-License-Identifier: Apache-2.0
69
- *
70
- * Browser login orchestration: PKCE + a loopback capture server, driven off
71
- * discovery metadata. Unlike a bare loopback helper, this emits lifecycle
72
- * events for a UI, honours an AbortSignal, and — instead of serving its own
73
- * HTML — 302-redirects the browser to an app-owned branded landing
74
- * (`successRedirect`). Returns a TokenSet including the `id_token`.
75
- */
76
- /**
77
- * @license
78
- * Copyright 2026 Maincode
79
- * SPDX-License-Identifier: Apache-2.0
80
- *
81
- * Node auth surface for `@maincode-ai/matilda-client-sdk/auth/node`.
82
- * Re-exports the OAuth primitives plus the higher-level login flow, file token
83
- * store, and hardened token manager that the CLI (`packages/core`) and the
84
- * Electron desktop app consume.
85
- */
86
- /**
87
- * @license
88
- * Copyright 2026 Maincode
89
- * SPDX-License-Identifier: Apache-2.0
90
- *
91
- * Matilda account auth for the CLI, backed by the shared client SDK.
92
- *
93
- * The OAuth dance (PKCE, loopback capture, code exchange, refresh, cross-process
94
- * token locking) is owned by `@maincode-ai/matilda-client-sdk/auth/node` — the
95
- * auth team's tested implementation of ADR-029's unified `/api/auth/oauth/*`
96
- * flow. This module keeps ONLY the CLI-specific concerns: which endpoint, the
97
- * on-disk credential shape the rest of the CLI already reads, and surfacing the
98
- * authorize URL to the Ink UI. No PKCE crypto, no loopback server, no token
99
- * exchange lives here anymore (replaced the 391-line hand-rolled beta that hit
100
- * the divergent `/api/auth/cli/*` endpoints and stored tokens in plaintext).
101
- */
@@ -1,8 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{b as i}from"./chunk-GZPNIYVZ.js";i();var m="MATILDA_API_KEY";var g="matilda-code-1.0",u="https://matilda.maincode.com/api/v1/code";var f={id:"matilda",label:"Matilda",description:"Connect to the Matilda Core code API endpoint",protocol:"openai",baseUrl:u,envKey:m,models:[{id:g,contextWindowSize:1048576,description:"Matilda Code model",generationConfig:{openAIRequestProfile:"matilda-code",samplingParams:{max_tokens:8192,chat_template_kwargs:{enable_thinking:!0}},schemaCompliance:"openapi_30",splitToolMedia:!0,customHeaders:{"User-Agent":"MatildaCode/0.1"}}}],modelNamePrefix:"",documentationUrl:"https://matilda.maincode.help/welcome/external-api",uiGroup:"third-party"};function _(o){return o.trim().replace(/\/+$/,"").replace(/\/api\/v1(?:\/code)?$/i,"")}async function A(o){let{baseUrl:r,email:s,password:d,signal:l}=o,n=_(r),p=`${n}/api/auth/login`,t;try{t=await fetch(p,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:s,password:d}),signal:l})}catch(a){let c=a instanceof Error?a.message:String(a);throw new Error(`Could not reach Matilda at ${n}: ${c}`)}if(t.status===401)throw new Error("Invalid email or password.");if(!t.ok)throw new Error(`Matilda sign-in failed (HTTP ${t.status}). Please try again.`);let e;try{e=await t.json()}catch{throw new Error("Matilda sign-in returned an unreadable response.")}if(!e||typeof e.token!="string"||e.token.length===0)throw new Error("Matilda sign-in did not return a token.");return{token:e.token,refreshToken:typeof e.refreshToken=="string"?e.refreshToken:void 0,userId:typeof e.userId=="string"?e.userId:void 0,email:typeof e.email=="string"?e.email:void 0,displayName:typeof e.displayName=="string"?e.displayName:void 0}}export{m as a,u as b,f as c,_ as d,A as e};
4
- /**
5
- * @license
6
- * Copyright 2026 Matilda Team
7
- * SPDX-License-Identifier: Apache-2.0
8
- */
@@ -1,8 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{s as d}from"./chunk-LN2DRVOB.js";import{b as i}from"./chunk-GZPNIYVZ.js";i();var a=["x-matilda-reported-surface","x-matilda-reported-os","x-matilda-reported-process","x-matilda-reported-sdk","x-matilda-reported-version"],u=new Set(a),p=new Set(["VSCode","ACP","SDK","CI"]),o="(?:0|[1-9]\\d{0,4})\\.(?:0|[1-9]\\d{0,4})\\.(?:0|[1-9]\\d{0,4})",s="(?:0|[1-9]\\d{0,4})",c="20\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])",E=[new RegExp(`^${o}$`),new RegExp(`^${o}-preview\\.${s}$`),new RegExp(`^${o}-maincode\\.${c}(?:\\.${s})?$`)],l=41;function f(e){return e==="desktop"?"desktop":e===void 0||p.has(e)?"code_cli":"unknown"}function m(e){return e==="android"?"android":e==="darwin"?"macos":e==="win32"?"windows":e==="linux"?"linux":"unknown"}function R(e){if(typeof e!="string")return;let t=e.trim();if(!(t.length>l||!E.some(n=>n.test(t))))return t}function C(e,t=process.platform){let n=f(e.getChannel?.()),r=R(e.getCliVersion?.());return{"x-matilda-reported-surface":n,"x-matilda-reported-os":m(t),"x-matilda-reported-process":n==="desktop"?"matilda-desktop":n==="code_cli"?"matilda-code":"unknown","x-matilda-reported-sdk":"matilda-client",...r?{"x-matilda-reported-version":r}:{}}}function S(e){return u.has(e.toLowerCase())}function _(e){let t=e??d;try{let n=new URL(t);if(n.protocol!=="https:"&&n.protocol!=="http:")return!1;let r=n.hostname.toLowerCase();return r==="matilda.maincode.com"||r.endsWith(".matilda.maincode.com")||r==="core-api.matilda"}catch{return!1}}function A(e,t=e.apiKey){return e.authType==="matilda-oauth"?!0:e.authType==="openai"&&!!t&&_(e.baseUrl)}export{C as a,S as b,A as c};
4
- /**
5
- * @license
6
- * Copyright 2026 Matilda Team
7
- * SPDX-License-Identifier: Apache-2.0
8
- */
@@ -1,12 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{a as l}from"./chunk-4F4DA5UI.js";import{e as g}from"./chunk-X6DODPXG.js";import{b as p}from"./chunk-GZPNIYVZ.js";p();import{readFile as m}from"node:fs/promises";function c(n){return n?`side-query:${n}`:"side-query"}function y(n,e){return e??n.getFastModel?.()??n.getModel()??l}function S(n){let e=n?.thinkingConfig;return{...n??{},thinkingConfig:e?{includeThoughts:!1,...e}:{includeThoughts:!1}}}async function T(n){let e=n.getOutputLanguageFilePath?.();if(e)try{let t=(await m(e,"utf8")).trim();return t?["Follow the user-visible output language preference below for this side query.",t].join(`
4
-
5
- `):void 0}catch{return}}function x(n,e){return e?n===void 0?e:typeof n=="string"?`${n}
6
-
7
- ${e}`:Array.isArray(n)?[...n,{text:e}]:typeof n=="object"&&"parts"in n&&Array.isArray(n.parts)?{...n,parts:[...n.parts,{text:e}]}:[n,{text:e}]:n}function C(n){return n.schema!==void 0&&n.schema!==null}async function Q(n,e){let t=y(n,e.model),i=e.promptId??c(e.purpose),s=S(e.config),o=x(e.systemInstruction,await T(n));if(C(e)){let r=await n.getBaseLlmClient().generateJson({contents:e.contents,schema:e.schema,abortSignal:e.abortSignal,model:t,systemInstruction:o,promptId:i,config:s,...e.maxAttempts!==void 0&&{maxAttempts:e.maxAttempts}}),d=g.validate(e.schema,r);if(d)throw new Error(`Invalid side query response: ${d}`);let f=e.validate?.(r);if(f)throw new Error(f);return r}let a=await n.getBaseLlmClient().generateText({contents:e.contents,model:t,systemInstruction:o,abortSignal:e.abortSignal,promptId:i,config:s,...e.maxAttempts!==void 0&&{maxAttempts:e.maxAttempts}}),u=e.validate?.(a.text);if(u)throw new Error(u);return a}export{Q as a};
8
- /**
9
- * @license
10
- * Copyright 2025 Google LLC
11
- * SPDX-License-Identifier: Apache-2.0
12
- */