@maincode-ai/matilda-code 0.21.11 → 0.21.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/mainy/docs/configuration/model-providers.md +0 -82
- package/bundled/mainy/docs/configuration/settings.md +46 -7
- package/bundled/mainy/docs/configuration/trusted-folders.md +12 -6
- package/bundled/mainy/docs/features/auto-mode.md +1 -1
- package/bundled/mainy/docs/features/channels/_meta.ts +0 -3
- package/bundled/mainy/docs/features/channels/overview.md +8 -16
- package/bundled/mainy/docs/features/commands.md +4 -4
- package/bundled/mainy/docs/features/hooks.md +9 -7
- package/bundled/mainy/docs/features/language.md +2 -29
- package/bundled/mainy/docs/features/worktree.md +0 -2
- package/bundled/mainy/docs/integration-github-action.md +3 -3
- package/bundled/mainy/docs/quickstart.md +2 -2
- package/bundled/mainy/docs/support/troubleshooting.md +1 -1
- package/chunks/agent-SRAIVZEE.js +3 -0
- package/chunks/agent-headless-XRDOZESG.js +3 -0
- package/chunks/{anthropicContentGenerator-IYZILRDW.js → anthropicContentGenerator-LLDIKDMQ.js} +3 -3
- package/chunks/{askUserQuestion-XWHJY3DM.js → askUserQuestion-BNSWGD26.js} +1 -1
- package/chunks/{ca-EUJBUYX5.js → ca-NPYL24ME.js} +2 -2
- package/chunks/{chunk-4YVN5HXG.js → chunk-27HUYW23.js} +2 -2
- package/chunks/{chunk-MH2P4YXC.js → chunk-27Q5KW3A.js} +2 -2
- package/chunks/{chunk-NYEWHSBL.js → chunk-2HTPVSGT.js} +1 -1
- package/chunks/{chunk-EQGA7LH7.js → chunk-3B2HABK7.js} +1 -1
- package/chunks/chunk-3MTZTNAU.js +101 -0
- package/chunks/{chunk-WHG6N5X2.js → chunk-5OHGYMKP.js} +1 -1
- package/chunks/{chunk-QH7736R5.js → chunk-6EQMZNIY.js} +1 -1
- package/chunks/chunk-6I6VGTKD.js +8 -0
- package/chunks/{chunk-5427BPR2.js → chunk-6M5G5FBH.js} +1 -1
- package/chunks/{chunk-4FVBPNTZ.js → chunk-6T2GIM76.js} +1 -1
- package/chunks/chunk-7ZODGQO6.js +4 -0
- package/chunks/chunk-AOOZREGV.js +9 -0
- package/chunks/{chunk-JXUDKX6D.js → chunk-DE3HKC2W.js} +1 -1
- package/chunks/chunk-DHDD5YJC.js +207 -0
- package/chunks/{chunk-SPW5DXX4.js → chunk-EZDV7A76.js} +1 -1
- package/chunks/{chunk-ODZOYHIC.js → chunk-GOJCMVJJ.js} +1 -1
- package/chunks/{chunk-FFFZ2QMG.js → chunk-GTVCJCHR.js} +1 -1
- package/chunks/{chunk-Q55AVE2N.js → chunk-IJEGHQ7Z.js} +11 -11
- package/chunks/{chunk-SUH3UUWZ.js → chunk-JCE3JAVC.js} +1 -1
- package/chunks/chunk-KHHJYBR5.js +9 -0
- package/chunks/{chunk-GO2GA2GY.js → chunk-LUNDTQ3G.js} +1 -1
- package/chunks/{chunk-NIQK6NX3.js → chunk-LWARA7JY.js} +1 -1
- package/chunks/{chunk-YMIF2DMT.js → chunk-MEV5XQI2.js} +1 -1
- package/chunks/{chunk-4CSSDBOS.js → chunk-P5TG5CON.js} +10 -10
- package/chunks/chunk-PEKAUGYV.js +2621 -0
- package/chunks/chunk-PGUG43HG.js +24 -0
- package/chunks/{chunk-ELH4YHJR.js → chunk-PGXQZVLX.js} +1 -1
- package/chunks/{chunk-SNLH42QJ.js → chunk-QZI2ZGZY.js} +1 -1
- package/chunks/chunk-RI54U73U.js +56 -0
- package/chunks/chunk-RPFSFS7Z.js +39 -0
- package/chunks/chunk-SOEIVSM5.js +113 -0
- package/chunks/{chunk-4J6DC24J.js → chunk-SVSY6AWS.js} +1 -1
- package/chunks/{chunk-T4P4KEDW.js → chunk-TWJLOEAI.js} +2 -2
- package/chunks/{chunk-HYVP4472.js → chunk-V6UPUMP3.js} +1 -1
- package/chunks/chunk-W4QSMIWO.js +9 -0
- package/chunks/chunk-WC2VTVCE.js +27 -0
- package/chunks/{chunk-GUFIMKF5.js → chunk-YV3PUOBU.js} +1 -1
- package/chunks/chunk-ZX34M2GF.js +14 -0
- package/chunks/{computer-use-SXP25RZQ.js → computer-use-J4GAM4M6.js} +1 -1
- package/chunks/contextCommand-5F5M7NA4.js +3 -0
- package/chunks/{cron-create-2UI4AT4Q.js → cron-create-IDWSZENI.js} +1 -1
- package/chunks/{cron-delete-ZB6BOTFF.js → cron-delete-NQCDZDUI.js} +1 -1
- package/chunks/{cron-list-YYAXNHB6.js → cron-list-Z4XMC3TO.js} +1 -1
- package/chunks/{de-DNEPG7S7.js → de-34YZHGC6.js} +3 -3
- package/chunks/{devtools-5JRKK3E7.js → devtools-XRQ4YJ5S.js} +1 -1
- package/chunks/{dist-P6SLWL5V.js → dist-PH6JW7XD.js} +1 -1
- package/chunks/edit-X2S2ZXRN.js +43 -0
- package/chunks/{en-NOD6KQNM.js → en-QLGMD6OS.js} +3 -3
- package/chunks/{enter-worktree-X47BSJLE.js → enter-worktree-TUCGNCLO.js} +1 -1
- package/chunks/{enterPlanMode-F22ZNTYJ.js → enterPlanMode-SQEZAAIR.js} +1 -1
- package/chunks/{exit-worktree-XY5UMDHX.js → exit-worktree-7FLITFZI.js} +1 -1
- package/chunks/exitPlanMode-O5UUJ3GM.js +120 -0
- package/chunks/{fr-2OE5WLJ4.js → fr-EDNBQACJ.js} +3 -3
- package/chunks/geminiContentGenerator-FIZFLPU3.js +8 -0
- package/chunks/glob-GSFTYAS2.js +22 -0
- package/chunks/{goal-tools-6QTC3UI7.js → goal-tools-YQOA6OKU.js} +1 -1
- package/chunks/{grep-6TTPZ524.js → grep-VAB2VSXM.js} +1 -1
- package/chunks/{ja-3B6V5KS7.js → ja-LV4RLM3M.js} +3 -3
- package/chunks/{keychain-token-storage-54BNK6VH.js → keychain-token-storage-KQK6MNOJ.js} +1 -1
- package/chunks/{ls-YWZU3FYL.js → ls-IZJ3CKZY.js} +1 -1
- package/chunks/{lsp-4CJDKEEC.js → lsp-NGLDRHZU.js} +1 -1
- package/chunks/matildaAgentContentGenerator-QQHPCFJ5.js +8 -0
- package/chunks/matildaContentGenerator-W7Z33ONU.js +8 -0
- package/chunks/{matildaOAuth2-WOY7ZS43.js → matildaOAuth2-7COTQQR2.js} +1 -1
- package/chunks/mcp-client-DXUNIEIB.js +3 -0
- package/chunks/monitor-4PFIGAGG.js +32 -0
- package/chunks/notebook-edit-MWJYAATJ.js +17 -0
- package/chunks/{openaiContentGenerator-MGASUFQL.js → openaiContentGenerator-NDVJL6QL.js} +1 -1
- package/chunks/{pt-KP2JCPUY.js → pt-5SQ4DGL7.js} +3 -3
- package/chunks/read-file-WPZKPXWA.js +3 -0
- package/chunks/ripGrep-7LZDZFTX.js +3 -0
- package/chunks/{ru-K7IQQKHC.js → ru-7K24S53N.js} +3 -3
- package/chunks/scheduler-DK2MVKXX.js +8 -0
- package/chunks/{send-message-OO2HAKCC.js → send-message-TCPX5UDU.js} +1 -1
- package/chunks/{serve-ZQX2WBLF.js → serve-GSZPJI2O.js} +59 -48
- package/chunks/shell-PRS47PDP.js +3 -0
- package/chunks/{skill-KDM3UUML.js → skill-ETQM5NI3.js} +1 -1
- package/chunks/src-UB7DZRYK.js +3 -0
- package/chunks/{symbol-search-ALYOX5JN.js → symbol-search-HARHZ5AH.js} +1 -1
- package/chunks/{syntheticOutput-UASKABJH.js → syntheticOutput-WZDPECYS.js} +1 -1
- package/chunks/task-create-XRNIDT4T.js +3 -0
- package/chunks/{task-detach-I67ZE5MX.js → task-detach-TBAVUOTC.js} +1 -1
- package/chunks/task-list-Z6BDZZID.js +9 -0
- package/chunks/{task-stop-ERI5X4AO.js → task-stop-HDSARSJ6.js} +1 -1
- package/chunks/{task-update-CD3W556L.js → task-update-MW2VT2XV.js} +1 -1
- package/chunks/{team-create-F4KQRGMB.js → team-create-VMYNLZCC.js} +1 -1
- package/chunks/team-delete-F7QDC2TE.js +8 -0
- package/chunks/todoWrite-SCF5M24M.js +3 -0
- package/chunks/{tool-search-JFCD5W5M.js → tool-search-WX6FOE35.js} +1 -1
- package/chunks/tree-sitter-bash-2SWKO5B7.js +3 -0
- package/chunks/{web-fetch-REWGIRWQ.js → web-fetch-CKYBHGLF.js} +13 -13
- package/chunks/{web-search-OX2DPEVN.js → web-search-67DFNS5V.js} +1 -1
- package/chunks/{workflow-SEFYGBED.js → workflow-WBSRQG3N.js} +2 -2
- package/chunks/write-file-S5FAX4JJ.js +15 -0
- package/cli.js +462 -455
- package/locales/ca.js +1 -3
- package/locales/de.js +1 -3
- package/locales/en.js +1 -3
- package/locales/fr.js +1 -3
- package/locales/ja.js +1 -3
- package/locales/pt.js +1 -3
- package/locales/ru.js +1 -3
- package/package.json +2 -2
- package/sandbox-macos-permissive-closed.sb +0 -1
- package/sandbox-macos-permissive-open.sb +0 -1
- package/sandbox-macos-permissive-proxied.sb +0 -1
- package/sandbox-macos-restrictive-closed.sb +3 -1
- package/sandbox-macos-restrictive-open.sb +3 -1
- package/sandbox-macos-restrictive-proxied.sb +3 -1
- package/bundled/mainy/docs/features/channels/dingtalk.md +0 -134
- package/bundled/mainy/docs/features/channels/feishu.md +0 -186
- package/bundled/mainy/docs/features/channels/weixin.md +0 -106
- package/chunks/agent-ZFZ4HJQC.js +0 -3
- package/chunks/agent-headless-KH2BKLP7.js +0 -3
- package/chunks/chunk-25NCTG5H.js +0 -184
- package/chunks/chunk-2HQMJ2IU.js +0 -8
- package/chunks/chunk-6GBNB5Z2.js +0 -3
- package/chunks/chunk-GHBKFIHC.js +0 -35
- package/chunks/chunk-HWOQNYAO.js +0 -27
- package/chunks/chunk-LJR4RZZ2.js +0 -3
- package/chunks/chunk-NVM7W7TG.js +0 -101
- package/chunks/chunk-PA6532AY.js +0 -6
- package/chunks/chunk-QFNFLE2I.js +0 -2625
- package/chunks/chunk-QN6WSWMM.js +0 -9
- package/chunks/chunk-RK2AKQAX.js +0 -39
- package/chunks/chunk-U347OO7S.js +0 -9
- package/chunks/chunk-UIRBHC5X.js +0 -3
- package/chunks/chunk-W5CGKUM4.js +0 -15
- package/chunks/chunk-WRQLIPXW.js +0 -113
- package/chunks/chunk-WVY2P6WH.js +0 -26
- package/chunks/chunk-WZ75OGYY.js +0 -14
- package/chunks/chunk-XCFLI3OC.js +0 -9
- package/chunks/chunk-XMZIY7XX.js +0 -13
- package/chunks/contextCommand-3GN5CAOK.js +0 -3
- package/chunks/dist-ME6647DQ.js +0 -195
- package/chunks/dist-VG3ZDJ2A.js +0 -28
- package/chunks/dist-YTCHM57U.js +0 -23
- package/chunks/edit-KX6V4PH3.js +0 -39
- package/chunks/exitPlanMode-G3QLIWJ4.js +0 -90
- package/chunks/geminiContentGenerator-EQEGOXOV.js +0 -8
- package/chunks/glob-KSBEWI3E.js +0 -22
- package/chunks/matildaAgentContentGenerator-OV4U6DJD.js +0 -8
- package/chunks/matildaContentGenerator-ETIAWE22.js +0 -8
- package/chunks/monitor-F4K5HOZX.js +0 -32
- package/chunks/notebook-edit-TL7CI5EA.js +0 -17
- package/chunks/read-file-6EAPS2KG.js +0 -3
- package/chunks/ripGrep-K6SFFUIE.js +0 -3
- package/chunks/scheduler-TKWPD4LP.js +0 -8
- package/chunks/shell-AZRK5GIO.js +0 -3
- package/chunks/src-SGI6VLOS.js +0 -3
- package/chunks/task-create-EBJD55TB.js +0 -3
- package/chunks/task-list-5BGX4G5N.js +0 -9
- package/chunks/team-delete-5U3GBFKJ.js +0 -8
- package/chunks/todoWrite-YGG6AZ3A.js +0 -3
- package/chunks/tree-sitter-bash-XNCMPQBK.js +0 -3
- package/chunks/write-file-UAGVBZMC.js +0 -15
package/locales/ca.js
CHANGED
|
@@ -891,7 +891,6 @@ export default {
|
|
|
891
891
|
'Set LLM output language': "Establir l'idioma de sortida del model",
|
|
892
892
|
'Usage: /language ui [{{options}}]': 'Ús: /language ui [{{options}}]',
|
|
893
893
|
'Usage: /language output <language>': 'Ús: /language output <idioma>',
|
|
894
|
-
'Example: /language output 中文': 'Exemple: /language output 中文',
|
|
895
894
|
'Example: /language output English': 'Exemple: /language output English',
|
|
896
895
|
'Example: /language output 日本語': 'Exemple: /language output 日本語',
|
|
897
896
|
'UI language changed to {{lang}}':
|
|
@@ -991,6 +990,7 @@ export default {
|
|
|
991
990
|
'Server:': 'Servidor:',
|
|
992
991
|
'Command:': 'Ordre:',
|
|
993
992
|
'Working Directory:': 'Directori de treball:',
|
|
993
|
+
'Last stderr output:': 'Darrera sortida de stderr:',
|
|
994
994
|
'No server selected': 'Cap servidor seleccionat',
|
|
995
995
|
prompts: 'missatges',
|
|
996
996
|
'Error:': 'Error:',
|
|
@@ -1936,8 +1936,6 @@ export default {
|
|
|
1936
1936
|
'Manage extension settings': 'Gestionar la configuració de les extensions',
|
|
1937
1937
|
'Desc:': 'Descripció:',
|
|
1938
1938
|
'Ref:': 'Referència:',
|
|
1939
|
-
'中国 (China)': 'Xina',
|
|
1940
|
-
'中国 (China) - 阿里云百炼': 'Xina - 阿里云百炼',
|
|
1941
1939
|
|
|
1942
1940
|
// Stats Dashboard — Category 2
|
|
1943
1941
|
'Activity Heatmap': "Mapa d'activitat",
|
package/locales/de.js
CHANGED
|
@@ -850,7 +850,6 @@ export default {
|
|
|
850
850
|
'Usage: /language ui [{{options}}]': 'Verwendung: /language ui [{{options}}]',
|
|
851
851
|
'Usage: /language output <language>':
|
|
852
852
|
'Verwendung: /language output <Sprache>',
|
|
853
|
-
'Example: /language output 中文': 'Beispiel: /language output Deutsch',
|
|
854
853
|
'Example: /language output English': 'Beispiel: /language output Englisch',
|
|
855
854
|
'Example: /language output 日本語': 'Beispiel: /language output Japanisch',
|
|
856
855
|
'UI language changed to {{lang}}': 'UI-Sprache geändert zu {{lang}}',
|
|
@@ -1051,6 +1050,7 @@ export default {
|
|
|
1051
1050
|
'Status:': 'Status:',
|
|
1052
1051
|
'Command:': 'Befehl:',
|
|
1053
1052
|
'Working Directory:': 'Arbeitsverzeichnis:',
|
|
1053
|
+
'Last stderr output:': 'Letzte stderr-Ausgabe:',
|
|
1054
1054
|
'No server selected': 'Kein Server ausgewählt',
|
|
1055
1055
|
'Error:': 'Fehler:',
|
|
1056
1056
|
tool: 'Werkzeug',
|
|
@@ -1980,8 +1980,6 @@ export default {
|
|
|
1980
1980
|
'Ref:': 'Referenz:',
|
|
1981
1981
|
'Skills:': 'Fähigkeiten:',
|
|
1982
1982
|
remote: 'entfernt',
|
|
1983
|
-
'中国 (China)': 'China',
|
|
1984
|
-
'中国 (China) - 阿里云百炼': 'China - 阿里云百炼',
|
|
1985
1983
|
|
|
1986
1984
|
// Stats Dashboard — Category 2
|
|
1987
1985
|
'Activity Heatmap': 'Aktivitäts-Heatmap',
|
package/locales/en.js
CHANGED
|
@@ -944,7 +944,6 @@ export default {
|
|
|
944
944
|
'Set LLM output language': 'Set LLM output language',
|
|
945
945
|
'Usage: /language ui [{{options}}]': 'Usage: /language ui [{{options}}]',
|
|
946
946
|
'Usage: /language output <language>': 'Usage: /language output <language>',
|
|
947
|
-
'Example: /language output 中文': 'Example: /language output 中文',
|
|
948
947
|
'Example: /language output English': 'Example: /language output English',
|
|
949
948
|
'Example: /language output 日本語': 'Example: /language output 日本語',
|
|
950
949
|
'UI language changed to {{lang}}': 'UI language changed to {{lang}}',
|
|
@@ -1041,6 +1040,7 @@ export default {
|
|
|
1041
1040
|
'Server:': 'Server:',
|
|
1042
1041
|
'Command:': 'Command:',
|
|
1043
1042
|
'Working Directory:': 'Working Directory:',
|
|
1043
|
+
'Last stderr output:': 'Last stderr output:',
|
|
1044
1044
|
'No server selected': 'No server selected',
|
|
1045
1045
|
prompts: 'prompts',
|
|
1046
1046
|
'Error:': 'Error:',
|
|
@@ -1786,7 +1786,6 @@ export default {
|
|
|
1786
1786
|
'Successfully authenticated with Matilda OAuth.',
|
|
1787
1787
|
'Failed to authenticate with Matilda OAuth: {{error}}':
|
|
1788
1788
|
'Failed to authenticate with Matilda OAuth: {{error}}',
|
|
1789
|
-
'中国 (China)': '中国 (China)',
|
|
1790
1789
|
Global: 'Global',
|
|
1791
1790
|
'Select authentication method:': 'Select authentication method:',
|
|
1792
1791
|
'\n=== Authentication Status ===\n': '\n=== Authentication Status ===\n',
|
|
@@ -1804,7 +1803,6 @@ export default {
|
|
|
1804
1803
|
' Type: Free tier (discontinued 2026-04-15)':
|
|
1805
1804
|
' Type: Free tier (discontinued 2026-04-15)',
|
|
1806
1805
|
' Limit: No longer available': ' Limit: No longer available',
|
|
1807
|
-
'中国 (China) - 阿里云百炼': '中国 (China) - 阿里云百炼',
|
|
1808
1806
|
' Region: {{region}}': ' Region: {{region}}',
|
|
1809
1807
|
' Current Model: {{model}}': ' Current Model: {{model}}',
|
|
1810
1808
|
' Config Version: {{version}}': ' Config Version: {{version}}',
|
package/locales/fr.js
CHANGED
|
@@ -915,7 +915,6 @@ export default {
|
|
|
915
915
|
'Utilisation : /language ui [{{options}}]',
|
|
916
916
|
'Usage: /language output <language>':
|
|
917
917
|
'Utilisation : /language output <langue>',
|
|
918
|
-
'Example: /language output 中文': 'Exemple : /language output 中文',
|
|
919
918
|
'Example: /language output English': 'Exemple : /language output English',
|
|
920
919
|
'Example: /language output 日本語': 'Exemple : /language output 日本語',
|
|
921
920
|
'UI language changed to {{lang}}':
|
|
@@ -999,6 +998,7 @@ export default {
|
|
|
999
998
|
'Server:': 'Serveur :',
|
|
1000
999
|
'Command:': 'Commande :',
|
|
1001
1000
|
'Working Directory:': 'Répertoire de travail :',
|
|
1001
|
+
'Last stderr output:': 'Dernière sortie stderr :',
|
|
1002
1002
|
'No server selected': 'Aucun serveur sélectionné',
|
|
1003
1003
|
prompts: 'invites',
|
|
1004
1004
|
'Error:': 'Erreur :',
|
|
@@ -1825,7 +1825,6 @@ export default {
|
|
|
1825
1825
|
' Type: Free tier (discontinued 2026-04-15)':
|
|
1826
1826
|
' Type : Niveau gratuit (abandonné 2026-04-15)',
|
|
1827
1827
|
' Limit: No longer available': ' Limite : Plus disponible',
|
|
1828
|
-
'中国 (China) - 阿里云百炼': '中国 (Chine) - 阿里云百炼',
|
|
1829
1828
|
' Region: {{region}}': ' Région : {{region}}',
|
|
1830
1829
|
' Current Model: {{model}}': ' Modèle actuel : {{model}}',
|
|
1831
1830
|
' Config Version: {{version}}': ' Version de config : {{version}}',
|
|
@@ -1978,7 +1977,6 @@ export default {
|
|
|
1978
1977
|
Auto: 'Automatique',
|
|
1979
1978
|
Tokens: 'Jetons',
|
|
1980
1979
|
tokens: 'jetons',
|
|
1981
|
-
'中国 (China)': 'Chine',
|
|
1982
1980
|
|
|
1983
1981
|
// Stats Dashboard — Category 2
|
|
1984
1982
|
'Activity Heatmap': "Carte d'activité",
|
package/locales/ja.js
CHANGED
|
@@ -623,7 +623,6 @@ export default {
|
|
|
623
623
|
'Set LLM output language': 'LLM出力言語を設定',
|
|
624
624
|
'Usage: /language ui [{{options}}]': '使い方: /language ui [{{options}}]',
|
|
625
625
|
'Usage: /language output <language>': '使い方: /language output <言語>',
|
|
626
|
-
'Example: /language output 中文': '例: /language output 中文',
|
|
627
626
|
'Example: /language output English': '例: /language output English',
|
|
628
627
|
'Example: /language output 日本語': '例: /language output 日本語',
|
|
629
628
|
'UI language changed to {{lang}}': 'UI言語を {{lang}} に変更しました',
|
|
@@ -796,6 +795,7 @@ export default {
|
|
|
796
795
|
'Source:': 'ソース:',
|
|
797
796
|
'Command:': 'コマンド:',
|
|
798
797
|
'Working Directory:': '作業ディレクトリ:',
|
|
798
|
+
'Last stderr output:': '直近の stderr 出力:',
|
|
799
799
|
'No server selected': 'サーバーが選択されていません',
|
|
800
800
|
'Error:': 'エラー:',
|
|
801
801
|
tool: 'ツール',
|
|
@@ -1744,8 +1744,6 @@ export default {
|
|
|
1744
1744
|
// === Same-as-English optimization ===
|
|
1745
1745
|
' (not in model registry)': '(モデルレジストリにありません)',
|
|
1746
1746
|
'Attribution: commit': 'コミットの帰属表示',
|
|
1747
|
-
'中国 (China)': '中国',
|
|
1748
|
-
'中国 (China) - 阿里云百炼': '中国 - 阿里云百炼',
|
|
1749
1747
|
|
|
1750
1748
|
// Stats Dashboard — Category 2 (missing from ja)
|
|
1751
1749
|
'Activity Heatmap': 'アクティビティヒートマップ',
|
package/locales/pt.js
CHANGED
|
@@ -853,7 +853,6 @@ export default {
|
|
|
853
853
|
'Set LLM output language': 'Definir idioma de saída do LLM',
|
|
854
854
|
'Usage: /language ui [{{options}}]': 'Uso: /language ui [{{options}}]',
|
|
855
855
|
'Usage: /language output <language>': 'Uso: /language output <idioma>',
|
|
856
|
-
'Example: /language output 中文': 'Exemplo: /language output Português',
|
|
857
856
|
'Example: /language output English': 'Exemplo: /language output Inglês',
|
|
858
857
|
'Example: /language output 日本語': 'Exemplo: /language output Japonês',
|
|
859
858
|
'UI language changed to {{lang}}':
|
|
@@ -1052,6 +1051,7 @@ export default {
|
|
|
1052
1051
|
'Source:': 'Fonte:',
|
|
1053
1052
|
'Command:': 'Comando:',
|
|
1054
1053
|
'Working Directory:': 'Diretório de trabalho:',
|
|
1054
|
+
'Last stderr output:': 'Última saída de stderr:',
|
|
1055
1055
|
'No server selected': 'Nenhum servidor selecionado',
|
|
1056
1056
|
'Error:': 'Erro:',
|
|
1057
1057
|
tool: 'ferramenta',
|
|
@@ -1967,8 +1967,6 @@ export default {
|
|
|
1967
1967
|
Status: 'Estado',
|
|
1968
1968
|
'Status:': 'Estado:',
|
|
1969
1969
|
Use: 'Uso',
|
|
1970
|
-
'中国 (China)': 'China',
|
|
1971
|
-
'中国 (China) - 阿里云百炼': 'China - 阿里云百炼',
|
|
1972
1970
|
|
|
1973
1971
|
// Stats Dashboard — Category 2
|
|
1974
1972
|
'Activity Heatmap': 'Mapa de Atividade',
|
package/locales/ru.js
CHANGED
|
@@ -862,7 +862,6 @@ export default {
|
|
|
862
862
|
'Использование: /language ui [{{options}}]',
|
|
863
863
|
'Usage: /language output <language>':
|
|
864
864
|
'Использование: /language output <language>',
|
|
865
|
-
'Example: /language output 中文': 'Пример: /language output 中文',
|
|
866
865
|
'Example: /language output English': 'Пример: /language output English',
|
|
867
866
|
'Example: /language output 日本語': 'Пример: /language output 日本語',
|
|
868
867
|
'UI language changed to {{lang}}': 'Язык интерфейса изменен на {{lang}}',
|
|
@@ -1719,6 +1718,7 @@ export default {
|
|
|
1719
1718
|
'Status:': 'Статус:',
|
|
1720
1719
|
'Command:': 'Команда:',
|
|
1721
1720
|
'Working Directory:': 'Рабочий каталог:',
|
|
1721
|
+
'Last stderr output:': 'Последний вывод stderr:',
|
|
1722
1722
|
'No server selected': 'Сервер не выбран',
|
|
1723
1723
|
|
|
1724
1724
|
// MCP Server List
|
|
@@ -1955,8 +1955,6 @@ export default {
|
|
|
1955
1955
|
// === Same-as-English optimization ===
|
|
1956
1956
|
' (not in model registry)': ' (не в реестре моделей)',
|
|
1957
1957
|
'start server': 'запустить сервер',
|
|
1958
|
-
'中国 (China)': 'Китай',
|
|
1959
|
-
'中国 (China) - 阿里云百炼': 'Китай - 阿里云百炼',
|
|
1960
1958
|
|
|
1961
1959
|
// Stats Dashboard — Category 2
|
|
1962
1960
|
'Activity Heatmap': 'Карта активности',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maincode-ai/matilda-code",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.13",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "cli.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"bundled"
|
|
27
27
|
],
|
|
28
28
|
"config": {
|
|
29
|
-
"sandboxImageUri": "ghcr.io/maincode/matilda-code:0.21.
|
|
29
|
+
"sandboxImageUri": "ghcr.io/maincode/matilda-code:0.21.13"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {},
|
|
32
32
|
"optionalDependencies": {
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
(subpath (param "RUNTIME_DIR"))
|
|
14
14
|
(subpath (string-append (param "HOME_DIR") "/.npm"))
|
|
15
15
|
(subpath (string-append (param "HOME_DIR") "/.cache"))
|
|
16
|
-
(subpath (string-append (param "HOME_DIR") "/.gitconfig"))
|
|
17
16
|
;; Allow writes to included directories from --include-directories
|
|
18
17
|
(subpath (param "INCLUDE_DIR_0"))
|
|
19
18
|
(subpath (param "INCLUDE_DIR_1"))
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
(subpath (param "RUNTIME_DIR"))
|
|
14
14
|
(subpath (string-append (param "HOME_DIR") "/.npm"))
|
|
15
15
|
(subpath (string-append (param "HOME_DIR") "/.cache"))
|
|
16
|
-
(subpath (string-append (param "HOME_DIR") "/.gitconfig"))
|
|
17
16
|
;; Allow writes to included directories from --include-directories
|
|
18
17
|
(subpath (param "INCLUDE_DIR_0"))
|
|
19
18
|
(subpath (param "INCLUDE_DIR_1"))
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
(subpath (param "RUNTIME_DIR"))
|
|
14
14
|
(subpath (string-append (param "HOME_DIR") "/.npm"))
|
|
15
15
|
(subpath (string-append (param "HOME_DIR") "/.cache"))
|
|
16
|
-
(subpath (string-append (param "HOME_DIR") "/.gitconfig"))
|
|
17
16
|
;; Allow writes to included directories from --include-directories
|
|
18
17
|
(subpath (param "INCLUDE_DIR_0"))
|
|
19
18
|
(subpath (param "INCLUDE_DIR_1"))
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
(sysctl-name "hw.l3cachesize_compat")
|
|
35
35
|
(sysctl-name "hw.logicalcpu_max")
|
|
36
36
|
(sysctl-name "hw.machine")
|
|
37
|
+
(sysctl-name "hw.memsize")
|
|
37
38
|
(sysctl-name "hw.ncpu")
|
|
38
39
|
(sysctl-name "hw.nperflevels")
|
|
39
40
|
(sysctl-name "hw.optional.arm.FEAT_BF16")
|
|
@@ -48,10 +49,12 @@
|
|
|
48
49
|
(sysctl-name "hw.optional.arm.FEAT_SHA512")
|
|
49
50
|
(sysctl-name "hw.optional.armv8_2_sha512")
|
|
50
51
|
(sysctl-name "hw.packages")
|
|
52
|
+
(sysctl-name "hw.pagesize")
|
|
51
53
|
(sysctl-name "hw.pagesize_compat")
|
|
52
54
|
(sysctl-name "hw.physicalcpu_max")
|
|
53
55
|
(sysctl-name "hw.tbfrequency_compat")
|
|
54
56
|
(sysctl-name "hw.vectorunit")
|
|
57
|
+
(sysctl-name "kern.argmax")
|
|
55
58
|
(sysctl-name "kern.hostname")
|
|
56
59
|
(sysctl-name "kern.maxfilesperproc")
|
|
57
60
|
(sysctl-name "kern.osproductversion")
|
|
@@ -75,7 +78,6 @@
|
|
|
75
78
|
(subpath (param "RUNTIME_DIR"))
|
|
76
79
|
(subpath (string-append (param "HOME_DIR") "/.npm"))
|
|
77
80
|
(subpath (string-append (param "HOME_DIR") "/.cache"))
|
|
78
|
-
(subpath (string-append (param "HOME_DIR") "/.gitconfig"))
|
|
79
81
|
;; Allow writes to included directories from --include-directories
|
|
80
82
|
(subpath (param "INCLUDE_DIR_0"))
|
|
81
83
|
(subpath (param "INCLUDE_DIR_1"))
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
(sysctl-name "hw.l3cachesize_compat")
|
|
35
35
|
(sysctl-name "hw.logicalcpu_max")
|
|
36
36
|
(sysctl-name "hw.machine")
|
|
37
|
+
(sysctl-name "hw.memsize")
|
|
37
38
|
(sysctl-name "hw.ncpu")
|
|
38
39
|
(sysctl-name "hw.nperflevels")
|
|
39
40
|
(sysctl-name "hw.optional.arm.FEAT_BF16")
|
|
@@ -48,10 +49,12 @@
|
|
|
48
49
|
(sysctl-name "hw.optional.arm.FEAT_SHA512")
|
|
49
50
|
(sysctl-name "hw.optional.armv8_2_sha512")
|
|
50
51
|
(sysctl-name "hw.packages")
|
|
52
|
+
(sysctl-name "hw.pagesize")
|
|
51
53
|
(sysctl-name "hw.pagesize_compat")
|
|
52
54
|
(sysctl-name "hw.physicalcpu_max")
|
|
53
55
|
(sysctl-name "hw.tbfrequency_compat")
|
|
54
56
|
(sysctl-name "hw.vectorunit")
|
|
57
|
+
(sysctl-name "kern.argmax")
|
|
55
58
|
(sysctl-name "kern.hostname")
|
|
56
59
|
(sysctl-name "kern.maxfilesperproc")
|
|
57
60
|
(sysctl-name "kern.osproductversion")
|
|
@@ -75,7 +78,6 @@
|
|
|
75
78
|
(subpath (param "RUNTIME_DIR"))
|
|
76
79
|
(subpath (string-append (param "HOME_DIR") "/.npm"))
|
|
77
80
|
(subpath (string-append (param "HOME_DIR") "/.cache"))
|
|
78
|
-
(subpath (string-append (param "HOME_DIR") "/.gitconfig"))
|
|
79
81
|
;; Allow writes to included directories from --include-directories
|
|
80
82
|
(subpath (param "INCLUDE_DIR_0"))
|
|
81
83
|
(subpath (param "INCLUDE_DIR_1"))
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
(sysctl-name "hw.l3cachesize_compat")
|
|
35
35
|
(sysctl-name "hw.logicalcpu_max")
|
|
36
36
|
(sysctl-name "hw.machine")
|
|
37
|
+
(sysctl-name "hw.memsize")
|
|
37
38
|
(sysctl-name "hw.ncpu")
|
|
38
39
|
(sysctl-name "hw.nperflevels")
|
|
39
40
|
(sysctl-name "hw.optional.arm.FEAT_BF16")
|
|
@@ -48,10 +49,12 @@
|
|
|
48
49
|
(sysctl-name "hw.optional.arm.FEAT_SHA512")
|
|
49
50
|
(sysctl-name "hw.optional.armv8_2_sha512")
|
|
50
51
|
(sysctl-name "hw.packages")
|
|
52
|
+
(sysctl-name "hw.pagesize")
|
|
51
53
|
(sysctl-name "hw.pagesize_compat")
|
|
52
54
|
(sysctl-name "hw.physicalcpu_max")
|
|
53
55
|
(sysctl-name "hw.tbfrequency_compat")
|
|
54
56
|
(sysctl-name "hw.vectorunit")
|
|
57
|
+
(sysctl-name "kern.argmax")
|
|
55
58
|
(sysctl-name "kern.hostname")
|
|
56
59
|
(sysctl-name "kern.maxfilesperproc")
|
|
57
60
|
(sysctl-name "kern.osproductversion")
|
|
@@ -75,7 +78,6 @@
|
|
|
75
78
|
(subpath (param "RUNTIME_DIR"))
|
|
76
79
|
(subpath (string-append (param "HOME_DIR") "/.npm"))
|
|
77
80
|
(subpath (string-append (param "HOME_DIR") "/.cache"))
|
|
78
|
-
(subpath (string-append (param "HOME_DIR") "/.gitconfig"))
|
|
79
81
|
;; Allow writes to included directories from --include-directories
|
|
80
82
|
(subpath (param "INCLUDE_DIR_0"))
|
|
81
83
|
(subpath (param "INCLUDE_DIR_1"))
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
# DingTalk (Dingtalk)
|
|
2
|
-
|
|
3
|
-
This guide covers setting up a Matilda Code channel on DingTalk (钉钉).
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- A DingTalk organization account
|
|
8
|
-
- A DingTalk bot application with AppKey and AppSecret (see below)
|
|
9
|
-
|
|
10
|
-
## Creating a Bot
|
|
11
|
-
|
|
12
|
-
1. Go to the [DingTalk Developer Portal](https://open-dev.dingtalk.com)
|
|
13
|
-
2. Create a new application (or use an existing one)
|
|
14
|
-
3. Under the application, enable the **Robot** capability
|
|
15
|
-
4. In Robot settings, enable **Stream Mode** (机器人协议 → Stream 模式)
|
|
16
|
-
5. Note the **AppKey** (Client ID) and **AppSecret** (Client Secret) from the application credentials page
|
|
17
|
-
|
|
18
|
-
### Stream Mode
|
|
19
|
-
|
|
20
|
-
DingTalk Stream mode uses an outbound WebSocket connection — no public URL or server is needed. The bot connects to DingTalk's servers, which push messages through the WebSocket. This is the simplest deployment model.
|
|
21
|
-
|
|
22
|
-
## Configuration
|
|
23
|
-
|
|
24
|
-
Add the channel to `~/.matilda/settings.json`:
|
|
25
|
-
|
|
26
|
-
```json
|
|
27
|
-
{
|
|
28
|
-
"channels": {
|
|
29
|
-
"my-dingtalk": {
|
|
30
|
-
"type": "dingtalk",
|
|
31
|
-
"clientId": "$DINGTALK_CLIENT_ID",
|
|
32
|
-
"clientSecret": "$DINGTALK_CLIENT_SECRET",
|
|
33
|
-
"senderPolicy": "open",
|
|
34
|
-
"sessionScope": "user",
|
|
35
|
-
"cwd": "/path/to/your/project",
|
|
36
|
-
"instructions": "You are a concise coding assistant responding via DingTalk.",
|
|
37
|
-
"groupPolicy": "open",
|
|
38
|
-
"groups": {
|
|
39
|
-
"*": { "requireMention": true }
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Set the credentials as environment variables:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
export DINGTALK_CLIENT_ID=<your-app-key>
|
|
50
|
-
export DINGTALK_CLIENT_SECRET=<your-app-secret>
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
Or define them in the `env` section of `settings.json`:
|
|
54
|
-
|
|
55
|
-
```json
|
|
56
|
-
{
|
|
57
|
-
"env": {
|
|
58
|
-
"DINGTALK_CLIENT_ID": "your-app-key",
|
|
59
|
-
"DINGTALK_CLIENT_SECRET": "your-app-secret"
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Running
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
# Start only the DingTalk channel
|
|
68
|
-
matilda channel start my-dingtalk
|
|
69
|
-
|
|
70
|
-
# Or start all configured channels together
|
|
71
|
-
matilda channel start
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Open DingTalk and send a message to the bot. You should see a 👀 emoji reaction appear while the agent processes, followed by the response.
|
|
75
|
-
|
|
76
|
-
## Group Chats
|
|
77
|
-
|
|
78
|
-
DingTalk bots work in both DM and group conversations. To enable group support:
|
|
79
|
-
|
|
80
|
-
1. Set `groupPolicy` to `"allowlist"` or `"open"` in your channel config
|
|
81
|
-
2. Add the bot to a DingTalk group
|
|
82
|
-
3. @mention the bot in the group to trigger a response
|
|
83
|
-
|
|
84
|
-
By default, the bot requires an @mention in group chats (`requireMention: true`). Set `"requireMention": false` for a specific group to make it respond to all messages. See [Group Chats](./overview#group-chats) for full details.
|
|
85
|
-
|
|
86
|
-
### Finding a Group's Conversation ID
|
|
87
|
-
|
|
88
|
-
DingTalk uses `conversationId` to identify groups. You can find it in the channel service logs when someone sends a message in the group — look for the `conversationId` field in the log output.
|
|
89
|
-
|
|
90
|
-
## Images and Files
|
|
91
|
-
|
|
92
|
-
You can send photos and documents to the bot, not just text.
|
|
93
|
-
|
|
94
|
-
**Photos:** Send an image (screenshot, diagram, etc.) and the agent will analyze it using its vision capabilities. This requires a multimodal model — add `"model": "matilda3.5-plus"` (or another vision-capable model) to your channel config. DingTalk supports sending images directly or as part of rich text messages (mixed text + images).
|
|
95
|
-
|
|
96
|
-
**Files:** Send a PDF, code file, or any document. The bot downloads it from DingTalk's servers and saves it locally so the agent can read it with its file tools. Audio and video files are also supported. This works with any model.
|
|
97
|
-
|
|
98
|
-
## Key Differences from Telegram
|
|
99
|
-
|
|
100
|
-
- **Authentication:** AppKey + AppSecret instead of a static bot token. The SDK manages access token refresh automatically.
|
|
101
|
-
- **Connection:** WebSocket stream instead of polling — no public IP or webhook URL needed.
|
|
102
|
-
- **Formatting:** Responses use DingTalk's markdown dialect (a limited subset). Tables are automatically converted to plain text since DingTalk doesn't render them. Long messages are split into chunks at ~3800 characters.
|
|
103
|
-
- **Working indicator:** A 👀 emoji reaction is added to the user's message while processing, then removed when the response is sent.
|
|
104
|
-
- **Media download:** Two-step process — a `downloadCode` from the message is exchanged for a temporary download URL via DingTalk's API.
|
|
105
|
-
- **Groups:** DingTalk uses `isInAtList` for @mention detection instead of parsing message entities.
|
|
106
|
-
|
|
107
|
-
## Tips
|
|
108
|
-
|
|
109
|
-
- **Use DingTalk markdown-aware instructions** — DingTalk supports a limited markdown subset (headers, bold, links, code blocks, but not tables). Adding instructions like "Use DingTalk markdown. Avoid tables." helps the agent format responses correctly.
|
|
110
|
-
- **Restrict access** — In an organization context, `senderPolicy: "open"` may be acceptable. For tighter control, use `"allowlist"` or `"pairing"`. See [DM Pairing](./overview#dm-pairing) for details.
|
|
111
|
-
- **Referenced messages** — Quoting (replying to) a user message includes the quoted text as context for the agent. Quoting bot responses is not yet supported.
|
|
112
|
-
|
|
113
|
-
## Troubleshooting
|
|
114
|
-
|
|
115
|
-
### Bot doesn't connect
|
|
116
|
-
|
|
117
|
-
- Verify your AppKey and AppSecret are correct
|
|
118
|
-
- Check that the environment variables are set before running `matilda channel start`
|
|
119
|
-
- Make sure **Stream Mode** is enabled in the bot's settings on the DingTalk Developer Portal
|
|
120
|
-
- Check the terminal output for connection errors
|
|
121
|
-
|
|
122
|
-
### Bot doesn't respond in groups
|
|
123
|
-
|
|
124
|
-
- Check that `groupPolicy` is set to `"allowlist"` or `"open"` (default is `"disabled"`)
|
|
125
|
-
- Make sure you @mention the bot in the group message
|
|
126
|
-
- Verify the bot has been added to the group
|
|
127
|
-
|
|
128
|
-
### "No sessionWebhook in message"
|
|
129
|
-
|
|
130
|
-
This means DingTalk didn't include a reply endpoint in the message callback. This can happen if the bot's permissions are misconfigured. Check the bot's settings in the Developer Portal.
|
|
131
|
-
|
|
132
|
-
### "Sorry, something went wrong processing your message"
|
|
133
|
-
|
|
134
|
-
This usually means the agent encountered an error. Check the terminal output for details.
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
# Feishu (Lark)
|
|
2
|
-
|
|
3
|
-
This guide covers setting up a Matilda Code channel on Feishu (飞书) / Lark.
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- A Feishu organization account
|
|
8
|
-
- A Feishu application with App ID and App Secret (see below)
|
|
9
|
-
|
|
10
|
-
## Creating an Application
|
|
11
|
-
|
|
12
|
-
1. Go to the [Feishu Open Platform](https://open.feishu.cn)
|
|
13
|
-
2. Create a new application (or use an existing one)
|
|
14
|
-
|
|
15
|
-

|
|
16
|
-
|
|
17
|
-
3. Under the application, enable the **Bot** capability (添加应用能力 → 机器人)
|
|
18
|
-
|
|
19
|
-

|
|
20
|
-
|
|
21
|
-
4. In **Event Subscriptions** (事件与回调), select **Long Connection** (使用长连接接收事件)
|
|
22
|
-
|
|
23
|
-

|
|
24
|
-
|
|
25
|
-
5. Add the event `im.message.receive_v1` (接收消息)
|
|
26
|
-
|
|
27
|
-

|
|
28
|
-
|
|
29
|
-
6. Note the **App ID** (Client ID) and **App Secret** (Client Secret) from the application credentials page
|
|
30
|
-
|
|
31
|
-

|
|
32
|
-
|
|
33
|
-
### Required Permissions
|
|
34
|
-
|
|
35
|
-
Enable the following permissions under **Permissions & Scopes** (权限管理):
|
|
36
|
-
|
|
37
|
-
- `im:message` — Read and send messages
|
|
38
|
-
- `im:message:send_as_bot` — Send messages as bot
|
|
39
|
-
- `im:resource` — Access message resources (images, files)
|
|
40
|
-
|
|
41
|
-
### Publish the Application
|
|
42
|
-
|
|
43
|
-
After configuring permissions and events, create a version and publish it. The bot won't work until the application is published and approved.
|
|
44
|
-
|
|
45
|
-

|
|
46
|
-
|
|
47
|
-
## Configuration
|
|
48
|
-
|
|
49
|
-
Add the channel to `~/.matilda/settings.json`:
|
|
50
|
-
|
|
51
|
-
```json
|
|
52
|
-
{
|
|
53
|
-
"channels": {
|
|
54
|
-
"my-feishu": {
|
|
55
|
-
"type": "feishu",
|
|
56
|
-
"clientId": "<your-app-id>",
|
|
57
|
-
"clientSecret": "<your-app-secret>",
|
|
58
|
-
"senderPolicy": "open",
|
|
59
|
-
"sessionScope": "user",
|
|
60
|
-
"cwd": "/path/to/your/project",
|
|
61
|
-
"groupPolicy": "open",
|
|
62
|
-
"collapsible": true,
|
|
63
|
-
"groups": {
|
|
64
|
-
"*": { "requireMention": true }
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Configuration Options
|
|
72
|
-
|
|
73
|
-
| Option | Description |
|
|
74
|
-
| ---------------------- | ------------------------------------------------------------------- |
|
|
75
|
-
| `clientId` | Feishu App ID |
|
|
76
|
-
| `clientSecret` | Feishu App Secret |
|
|
77
|
-
| `collapsible` | Collapse long responses into expandable sections (default: `false`) |
|
|
78
|
-
| `collapsibleThreshold` | Character threshold for collapsing (default: `500`) |
|
|
79
|
-
| `webhookPort` | If set, use HTTP webhook mode instead of WebSocket |
|
|
80
|
-
| `verificationToken` | Verification token for webhook mode |
|
|
81
|
-
| `encryptKey` | Encrypt key for webhook mode |
|
|
82
|
-
|
|
83
|
-
## Running
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
# Start only the Feishu channel
|
|
87
|
-
matilda channel start my-feishu
|
|
88
|
-
|
|
89
|
-
# Or start all configured channels together
|
|
90
|
-
matilda channel start
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Open Feishu and send a message to the bot. You should see a streaming interactive card with the response.
|
|
94
|
-
|
|
95
|
-
## Connection Modes
|
|
96
|
-
|
|
97
|
-
### WebSocket (Default)
|
|
98
|
-
|
|
99
|
-
WebSocket mode uses an outbound long connection — no public URL or server is needed. This is the recommended mode for most deployments.
|
|
100
|
-
|
|
101
|
-
### Webhook
|
|
102
|
-
|
|
103
|
-
If you need webhook mode (e.g., for shared applications), set `webhookPort` in your config:
|
|
104
|
-
|
|
105
|
-
```json
|
|
106
|
-
{
|
|
107
|
-
"channels": {
|
|
108
|
-
"my-feishu": {
|
|
109
|
-
"type": "feishu",
|
|
110
|
-
"webhookPort": 9321,
|
|
111
|
-
"verificationToken": "<from-feishu-console>",
|
|
112
|
-
"encryptKey": "<from-feishu-console>"
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Then set the request URL in Feishu Open Platform to `http://<your-server>:9321`.
|
|
119
|
-
|
|
120
|
-
## Group Chats
|
|
121
|
-
|
|
122
|
-
Feishu bots work in both DM and group conversations. To enable group support:
|
|
123
|
-
|
|
124
|
-
1. Set `groupPolicy` to `"allowlist"` or `"open"` in your channel config
|
|
125
|
-
2. Add the bot to a Feishu group
|
|
126
|
-
3. @mention the bot in the group to trigger a response
|
|
127
|
-
|
|
128
|
-
By default, the bot requires an @mention in group chats (`requireMention: true`). Set `"requireMention": false` for a specific group to make it respond to all messages.
|
|
129
|
-
|
|
130
|
-
## Features
|
|
131
|
-
|
|
132
|
-
### Interactive Card Streaming
|
|
133
|
-
|
|
134
|
-
Responses are rendered as Feishu interactive cards with real-time streaming updates. The card shows a "generating" indicator while the response is being produced, and a **Stop** button to cancel generation.
|
|
135
|
-
|
|
136
|
-
### Quote/Reply Context
|
|
137
|
-
|
|
138
|
-
When you reply to (quote) a message, the quoted content is automatically included as context for the agent. This works for:
|
|
139
|
-
|
|
140
|
-
- Text and rich-text messages
|
|
141
|
-
- Interactive cards (bot's previous responses)
|
|
142
|
-
|
|
143
|
-
### Images and Files
|
|
144
|
-
|
|
145
|
-
You can send photos and documents to the bot:
|
|
146
|
-
|
|
147
|
-
- **Images:** Analyzed using multimodal vision capabilities
|
|
148
|
-
- **Files:** Downloaded and saved locally for the agent to read
|
|
149
|
-
|
|
150
|
-
### Concurrent Messages
|
|
151
|
-
|
|
152
|
-
Multiple users can send messages simultaneously in the same group chat. Each message gets its own independent card and response — they don't interfere with each other.
|
|
153
|
-
|
|
154
|
-
## Key Differences from DingTalk
|
|
155
|
-
|
|
156
|
-
- **Response format:** Uses Feishu interactive cards (v2 schema) with native markdown rendering, including tables
|
|
157
|
-
- **Streaming:** Card content is updated in-place with throttled PATCH requests (1.5s interval)
|
|
158
|
-
- **Connection:** WebSocket via `@larksuiteoapi/node-sdk` — same outbound-only model, no public URL needed
|
|
159
|
-
- **Working indicator:** An "OnIt" emoji reaction is added while processing
|
|
160
|
-
- **Quote context:** Supports quoting both text messages and interactive cards
|
|
161
|
-
|
|
162
|
-
## Troubleshooting
|
|
163
|
-
|
|
164
|
-
### Bot doesn't connect
|
|
165
|
-
|
|
166
|
-
- Verify your App ID and App Secret are correct
|
|
167
|
-
- Make sure **Long Connection** is selected in Event Subscriptions
|
|
168
|
-
- Check that the `im.message.receive_v1` event is subscribed
|
|
169
|
-
- Check the terminal output for connection errors
|
|
170
|
-
|
|
171
|
-
### Bot doesn't respond in groups
|
|
172
|
-
|
|
173
|
-
- Check that `groupPolicy` is set to `"allowlist"` or `"open"` (default is `"disabled"`)
|
|
174
|
-
- Make sure you @mention the bot in the group message
|
|
175
|
-
- Verify the bot has been added to the group
|
|
176
|
-
|
|
177
|
-
### Card stays in "generating" state
|
|
178
|
-
|
|
179
|
-
- This usually indicates the response completed but the final card update failed
|
|
180
|
-
- Check terminal logs for API errors (rate limiting, card size limits)
|
|
181
|
-
- Very long responses with many tables may hit Feishu's card element limits
|
|
182
|
-
|
|
183
|
-
### Quote doesn't include card content
|
|
184
|
-
|
|
185
|
-
- The bot reads card content via the `card_msg_content_type=user_card_content` API parameter
|
|
186
|
-
- Ensure the bot has `im:message` permission to read messages
|